Commit Graph
19 Commits
Author SHA1 Message Date
dotCooCoo 2d66758ce4 MCP: document.json checks brush art and relative link paths against the read roots
Under --automation-read-root, document.json names a linked image or
placed file in a stored brush's art outside the read roots by its file
name alone, as it does in the layers. A stored brush entry that does not
read as a brush is left out of the reply, and a stored brush library
that is not a list becomes an empty one. A link whose file is inside the
read roots loses its stored relative path when that path leads outside
them, from the folder of the file the document was read from or from the
document's own folder.
2026-11-12 09:19:15 -08:00
dotCooCoo 46ce6364c5 MCP: document.inspect and document.json leave out paths outside a confined client's read roots
Under --automation-read-root, document.inspect gives `path` as null when
the document's file is outside the read roots. document.json names a
linked image or placed file outside them by its file name alone, without
its relative path, size or date, in the layers, symbols, graph designs,
patterns, the pattern being edited and opacity masks. It also names a
data set's image value outside them by its file name, and leaves the
Export for Screens folder outside them out of export_settings. The
document is not changed, and unconfined callers see the same replies as
before.
2026-11-11 23:36:11 -08:00
dotCooCoo d9c38df736 MCP: link replies leave out paths outside a confined client's read roots
links.list, links.check, links.info and document.open's missingLinks,
modifiedLinks and updatedLinks rows no longer give an automation client
with read roots the path of a linked file outside those roots. path and
found are left out of the rows, and links.info also leaves out link,
location and the file size and date the document stores. A relative path
is taken from the document's folder. Each row keeps its id, file name and
status, and the document's links are not changed. Without read roots the
replies are as before.

Find in Folder now matches a search's rows by their ids, comparing paths
only when both rows have one, so it still shows the files found for a
row whose path was left out.
2026-11-11 14:47:53 -08:00
dotCooCoo faa7b8ef6a Links: a missing linked file keeps its relative folder when a moved document is saved
Squashed from #6231 onto main.
2026-11-09 03:08:23 +07:00
dotCooCoo a409f34ebe .ai import: placed PDF and .ai pages open as placed documents
Squashed from #6083 onto main.
2026-11-09 00:26:34 +07:00
dotCooCoo b7203714be Links: Relink can replace all instances, the folder's missing links or each link separately
The Links panel's Relink... button and menu item open a Relink dialog
(ui.relinkDialog) with a Replace menu. Selected Instances relinks the
selected images and placed documents, as Relink did before. All
Instances also relinks every other object in the layers linked to the
same file. Missing Links from This Folder relinks the selection to the
chosen file, then every other missing link to the file of its name in
that file's folder, and the status bar names the files not there. Each
Link Separately asks for a file for each selected link in turn, one OK
each, and relinks them all at the last one: the dialog has one row per
linked file, and each selected embedded image gets a row of its own.
Every choice is one undo step.

links.relink takes scope: selected (default), all, missingInFolder
(with path) or each (with paths: [{ids, path}] in place of ids, path
and folder). A scope or paths that doesn't fit is an error and relinks
nothing. With copy, every file is read and checked before any is
copied, copies made before a failed copy are removed, and
missingInFolder looks for missing images only.

Docs: params text, docs/mcp.md, docs/control-protocol.md,
docs/target-app-parity.md. Catalog rows for the new labels and messages
in every catalog.
2026-11-08 13:21:01 +07:00
dotCooCoo 729d8d5184 Links: Update Links reads files again for links inside symbols, patterns and masks
Update Links, and opening a document with Update Links: Automatically,
now read a modified file again for the images and placed documents in
symbols, graph designs, patterns and opacity masks that show the same
content as the objects read in the layers. By default Update Links also
reads the files that only that art shows. Each nested object takes the
file's place as its own Placement Options say, including the clip, and
its link takes the new path, size, modification time and hash.

Saving a document also refreshes the placed copies of it inside symbols,
graph designs, patterns and opacity masks of the other open documents,
not only those in the layers.

Relink, Embed and Unembed still change only the objects they are given.
2026-11-08 12:47:57 +07:00
dotCooCoo 146d30502a Expand: selected symbol instances become their art, as Break Link places it
Object > Expand with Object on now turns each symbol instance in the
selection, including one in a selected group or in a placed document's
art, into its art, as Break Link to Symbol places it. It goes one level
deep: the instances in that art stay instances. The art keeps the
instance's id and place in the stacking order, and Expand stays one
undo step.

- Instances with effects stay instances, and Expand Appearance bakes
  them as before. Instances with an effect on a fill or stroke,
  instances in perspective, and those in blends, repeats and Intertwine
  groups stay instances.
- The art keeps the instance's opacity mask, as Break Link gives it.
- A hidden or locked instance's art stays hidden or locked.
- A placed document in an instance's art is expanded too.
- When the instances' art would make more than 1,000,000 objects, they
  stay instances, the limit Break Link uses.
- The Fill and Stroke options (object.expand.info, and the Expand
  dialog) count the fills, strokes and gradients in the art of those
  instances, with a dynamic instance's own changes applied. The info
  reports under symbolArt which of them only that art holds, and the
  dialog enables those options only while Object is on.
2026-11-04 15:14:02 +07:00
dotCooCoo d2c5ea127a Merge commit 'refs/check/4968-main' into feat/ai-editing-data 2026-11-03 13:05:54 -08:00
Dylan M. Taylor 1c4162b2c9 fix(doc): a refused placed-document read shows the preview, not a cached full read 2026-11-03 22:17:45 +07:00
dotCooCoo f8095edf0d Merge commit 'refs/check/4968-main' into feat/ai-editing-data
# Conflicts:
#	crates/eps/src/lib.rs
#	crates/pdf/src/lib.rs
#	docs/file-format-parity.md
2026-11-02 18:47:39 -08:00
dotCooCoo 33f429972b Merge main (11862f61) into feat/native-save-precision 2026-11-02 16:29:45 -08:00
dotCooCoo 54436b0aa2 i18n: open, save and recovery messages name their counts in the singular or the plural
The status bar said "Opened with 1 note(s)", "Saved <path> with 1 note(s)",
"Discarded 1 recovered document(s)" and "Restored 1 recovered document(s)",
and the Global Edit options showed "Result(s): 1". They now use the singular
for 1 and the plural otherwise, in English through i18n::msg_n and in every
catalog through @msgplural rows (the Results line through an @plural row).

The engine's warnings for linked images and placed documents output as their
previews, and its errors for a page past a placed file's last page or
artboard, also name their counts in the singular or the plural.

The catalogs drop the rows no message reads any more: the plain "(s)" rows
of the changed messages and the @msg row for "Packaged {n} file(s){note}".

Follows #5002.
2026-11-02 12:04:04 +07:00
dotCooCoo e7cb16b66d Merge main into feat/ai-editing-data 2026-10-31 20:20:39 -07:00
dotCooCoo caafc2a02a Merge main (433ddb59) into feat/native-save-precision 2026-10-31 17:22:00 -07:00
bflatastic f22caa6108 Fix #4938: Dynamic symbols keep per-instance appearance linked to the symbol 2026-11-01 04:53:38 +07:00
dotCooCoo b6f0b4de2b .ai save: the editing copy warns about missing placed files
A .ai saved with pdfCompatible false resolved placed files for the
editing copy but dropped the warnings for the ones it couldn't find,
so a missing placed file was written as its preview without a warning.
The save now keeps those warnings.
2026-10-31 11:33:50 -07:00
dotCooCoo 5d5b775e27 Merge main into feat/native-save-precision 2026-10-27 20:34:51 -07:00
aiongg 83eec43b18 refactor(engine): move tests_*.rs to tests/<topic>.rs 2026-10-26 18:26:56 +00:00