Commit Graph
34 Commits
Author SHA1 Message Date
dotCooCoo 918ef940cb Merge main into feat/plugin-importers 2026-11-08 16:45:20 -08:00
dotCooCoo 973503a2b1 Batch: Override Export's folder for Export for Screens no longer warns of one shared file
A data set batch whose Override Export gives each data set its own export folder no longer reports that every data set saves over the same file.
2026-11-08 13:20:48 -08:00
dotCooCoo 87d8938df1 Merge main into fix/batch-override-export-for-screens-folder-r 2026-11-08 12:18:17 -08:00
dotCooCoo 1ce9e9e9eb Merge main into feat/plugin-importers 2026-11-08 09:41:06 -08:00
dotCooCoo 0d1a8b6ffa Actions: Batch Save and Close over data sets counts only saves that make the file the document's own
A recorded save in the template format writes a copy and leaves the
document's file as it was, so it no longer clears the warning or the
refusals. A recorded Save or Save As with its own path gives a never-saved,
converted or restored document its file before Save and Close, so the
batch runs and warns that every data set saves over that one file.
2026-11-08 23:50:30 +07:00
dotCooCoo 427029def6 Actions: Batch Save and Close over data sets follows a redirected Save step
With a destination folder and Override Save on, a recorded Save or Save As
step writes each data set to its own file in that folder and makes that
file the document's own, so Save and Close then saves each data set to its
own file. The batch no longer warns that every data set saves over one
file in that case, and no longer refuses a document that was never saved,
converted or restored, since the recorded step gives it a file first.
2026-11-08 23:50:30 +07:00
dotCooCoo 64cfa8b553 Actions: Batch over data sets warns about PDF, EPS, DXF and web exports and refuses Save and Close on converted documents
A recorded PDF, EPS, DXF, Save for Web or Save for Office Documents step
that gives a `path` writes the same file for every data set, because the
batch does not point these steps into the destination folder. The one-file
rule now counts them, so the dialog and `action.batch` warn.

Save and Close over the data sets of a document converted from an older
version or restored by Data Recovery is refused with "save the document
with Save As before Save and Close" before a data set is selected. Saving
such a document does not write its file, so the batch reported success
without saving anything. The message has a row in each of the 26 catalogs.
2026-11-08 23:50:29 +07:00
dotCooCoo 2ad0268388 Actions: Batch over data sets keeps Save and Close and warns when each data set saves over one file
Batch… with a Data Sets source offers None, Save and Close and Folder again.
Save and Close saves the open document over its own file after each data
set. When every data set saves over the same file, the dialog shows a
warning and `action.batch` returns `warning`: with Save and Close, or with
a recorded step that writes a file and that the batch does not point into
the destination folder. A Save step without a path counts when it writes
the document's own file; Save As, Save a Copy, Save as Template and Export
steps count when they give a path; Export for Screens counts when its
folder, given or from its preset, names a folder. Save and Close over the
data sets of a document that was never saved is refused with "the
document has never been saved" before a data set is selected.
2026-11-08 23:50:28 +07:00
dotCooCoo 7fd287238f Actions: Batch refuses Save and Close over data sets instead of saving each one over the open document
Data sets share one open document, so Save and Close saved every data set
over the same file and only the last one survived. action.batch now
returns an error for source datasets with destination saveAndClose before
it selects a data set or runs a step, and the Batch dialog offers None and
Folder for a Data Sets source, moving a Save and Close choice to Folder.
2026-11-08 23:50:27 +07:00
dotCooCoo fd94ebe86c Plug-ins: importer plug-ins open file types VectorCraft does not read
An importer plug-in (kind "importer", permission import.read) lists 1 to 8
file extensions and turns a file's bytes into objects, which open as a new
document whose artboard is their bounds. File › Open lists its extensions,
File › Open With (file.openWith) opens a file with a chosen importer, and
document.open takes importer and params. A built-in format that reads the
file by its content or extension always opens it; among importers listing
the same extension, the one whose id sorts first opens it. An importer reads
at most 128 MiB, and Place still reads only the built-in formats.

Docs: docs/plugins.md, docs/mcp.md, docs/gaps.md, docs/target-app-parity.md.
2026-11-07 23:05:09 -08:00
dotCooCoo c4a8c43dc5 Batch: a folder source's artboard files do not replace another source file
A folder source's stem is picked once the file is open, so the files a
save or export writes for each artboard count, as they do for data sets.
With the destination folder the same as the source folder, saving
a.vectorcraft with separateArtboards wrote a-Artboard-1.vectorcraft over
the source file of that name; a.vectorcraft is now saved as a-2.
2026-11-03 11:43:07 -08:00
dotCooCoo a4436388cc Batch: a folder source's file name keeps a backslash on Linux and macOS
Output stems for a folder batch went through safe_file_name, which turns
`\` and `:` into `-`, so `a\b.svg` on Linux was written as `a-b.svg`.
The stem now only loses trailing periods and spaces and gets `-` after a
Windows device name, and keeps every other character.
2026-11-01 06:35:40 -08:00
dotCooCoo f6a6f96d0d Merge main into fix/batch-override-export-for-screens-folder-r 2026-10-31 19:39:33 -07:00
dotCooCoo 89ca9d9a25 Batch: keep an existing artboard file of a one-artboard Separate Artboards save
A save in the native, template or .ai formats with separateArtboards writes an
artboard file even when the document has one artboard, so an existing file with
that name now gives the data set the next free suffix too.
2026-11-01 01:22:06 +07:00
dotCooCoo 5dcc65d69a Batch: keep existing artboard files when choosing data set file names
When a step can write one file per artboard (Save in the native, template or
.ai formats, or Export in SVG, EPS, the raster formats, DXF, EMF, WMF or .ai)
and the document has more than one artboard, an existing file with one of the
stem's artboard file names now gives the data set the next free -2, -3 suffix,
as the stem's own file does. Names a data set's outputs will take are also
reserved for the later data sets of the same batch.
2026-11-01 01:22:06 +07:00
dotCooCoo 483c191e24 Batch: keep a backslash in a source file name on Linux and macOS
Destination and Override Save/Export paths reject only the current platform's
path separators, so a folder batch writes `a\b.svg` into the destination
folder on systems where that is one file name.
2026-11-01 01:22:06 +07:00
dotCooCoo c55e4a226e Batch: pass the data set naming choice in the batch run
The naming choice reaches batch_datasets as a field of the run, and the short
Batch entry in docs/mcp.md is back to main's text; the longer Batch section
names datasetFileNaming and when an existing output gets a suffix.
2026-11-01 01:22:06 +07:00
dotCooCoo 1b4c050bd3 Batch: check existing data set outputs only in a folder the batch may read and write
The `-2`, `-3` suffix for a data set output that already exists is now
looked up only when the destination folder and the output path pass the
read and write access checks, so a call cannot learn which files exist in
a folder it may not use.

The lookup uses only extensions of formats the app knows, without path
separators or `..`, and only paths whose parent is the destination folder.
A step whose `format` is unknown keeps its own path instead of being
pointed into the destination folder. A data set or document named `.` or
`..` gets the `Untitled` stem with its three-digit number.
2026-11-01 01:22:06 +07:00
dotCooCoo f8bba3388e Batch: data set files name by File + Number, File + Data Set Name or Data Set Name
The Batch dialog has a File Name choice for a Data Sets source, starting
with File + Number (`source001`), as well as File + Data Set Name
(`source_Alpha`) and Data Set Name (`Alpha`). `action.batch` takes it as
`datasetFileNaming`; a call without it keeps File + Data Set Name, and a
folder source ignores it. An unknown value is an error.

A data set output whose name already exists in the destination folder
now takes the next free `-2`, `-3` suffix instead of replacing the file,
and a Windows device name under Data Set Name gets a trailing `-`.
2026-11-01 01:22:06 +07:00
dotCooCoo f5d8329cb1 Batch: do not export into a subfolder that holds source files
With `includeSubdirs` and the destination folder the same as the source
folder, the Export for Screens folder of `a.svg` was `a`, and its
`Artboard-1.svg` replaced the source `a/Artboard-1.svg` before Batch
opened it. Batch now keeps the names of subfolders of the destination
folder that hold source files, so that export folder is `a-2`.
2026-10-29 04:43:40 -07:00
dotCooCoo 9a05e8ad36 Batch: do not save over another source file in the destination folder
With the destination folder the same as the source folder, `a..svg` gets
the name `a` and was saved as `a.svg`, replacing the source `a.svg`
before Batch opened it. Batch now keeps the names of the source files in
the destination folder for their own output, so `a..svg` is saved as
`a-2.svg` and `a.svg` is saved over itself.
2026-10-29 03:43:25 -07:00
dotCooCoo 8a7d83e00f Batch: number export folders that have the name of a file an earlier source wrote
With the Folder destination, `a.svg` is saved as `destinationFolder/a.svg`.
A later source `a.svg.svg` then got the Export for Screens folder `a.svg`,
which already existed as a file, and its export failed. Batch now numbers a
source's name when its folder or any file it writes in the destination
folder has the name of a file or folder an earlier source wrote, so that
folder is `a.svg-2`.
2026-10-29 02:42:05 -07:00
dotCooCoo 8f377bac81 Batch: drop trailing periods from export folder names before numbering
A source file named `a..svg` gave the folder `a.` and a data set named
`a.` gave `Untitled_a.`. Windows drops a trailing period from a folder
name, so these folders were the same as the ones for `a.svg` and the
data set `a`, and the second export replaced the first one's files.
Batch now passes each name through `safe_file_name` before it numbers
repeated names, so the second folder is `a-2` or `Untitled_a-2`.
2026-10-28 23:35:18 -07:00
Dylan M. Taylor 90ef99cb2c Simplify file import and export checks 2026-10-28 16:44:05 +00:00
dotCooCoo 33ea3f5300 Merge main into fix/batch-override-export-for-screens-folder 2026-10-27 23:06:19 -07:00
dotCooCoo 6e6fbbac1d Commands: an unknown command id is answered with the nearest command id
A misspelled parameter key got a did-you-mean suggestion, but a
misspelled command id only got "unknown command `select.al`", through
the CLI, MCP and the control channel alike. Session::execute now names
the nearest command id, using the same matching as parameter keys
(ignoring case), and action.batch does the same for an unknown step. An
id with no near match keeps the plain error.

The matching skips candidates whose length differs by more than the
allowed number of edits, so a very long unknown command id or parameter
key is answered at once instead of being measured against every command
id or accepted key.

The new message has a row in every catalog, and docs/mcp.md's
Parameter keys section shows it.
2026-10-24 11:20:27 -07:00
dotCooCoo 5228beab63 Actions: Batch numbers source files that share a name
Over a folder, action.batch named each source file's output after the
file without its extension. Two files with the same name, such as a.svg
and sub/a.svg with includeSubdirs, got the same Export for Screens
folder, Override Save path and Folder destination file. The second
file's output replaced the first's, and the batch reported no failure.

Batch now adds -2, -3... to the name of each later file whose name was
already used, compared without case, as it does for data set names. The
numbers follow the order the batch processes the files. With the Folder
destination, a.svg and a.ai in one folder now give a.svg and a-2.ai.

Docs: docs/mcp.md, docs/target-app-parity.md.
2026-10-19 05:24:31 -07:00
dotCooCoo 74f5f6e58f Actions: Batch's Override Export sends Export for Screens files to the destination folder
With Override Export on, action.batch gave each document.export,
document.exportSelection and document.exportForScreens step a path in
the destination folder. document.exportForScreens reads folder and has
no path parameter, so its files still went to the step's own folder,
or came back as data when the step named none. assets.export was not
overridden at all.

Override Export now gives a document.exportForScreens or assets.export
step the folder destinationFolder/<stem>, in place of the step's own
folder or an export preset's. Each source file gets its own folder,
named after the file without its extension, and each data set gets one
named <document>_<data set>. The export names the files in that folder
as it does outside Batch. Two data sets, or two source files whose
names without the extension differ, no longer write over each other's
files when their artboards or assets have the same names. Other export
steps are unchanged.

Docs: docs/mcp.md, docs/target-app-parity.md.
2026-10-17 15:28:34 -07:00
dotCooCoo 6b13dd776b Export: names typed into file names follow Windows' naming rules
Export for Screens, Batch over data sets, Save for Web and the
Libraries panel name files after text the person typed: a prefix, a
suffix, a name pattern, the name of an artboard, asset, layer, slice,
data set or library, or the document's title. The prefix, the suffix,
name patterns and Batch's data set names had only /, \ and : replaced,
so on Windows a name holding <, >, ", |, ?, * or a control character
failed to save, and Save for Web without a path named its files after
the document's title as it was. A row folder name could end in a
period, which Windows does not allow, and names such as CON, NUL, COM1
or LPT1, which Windows reserves for devices, were written as they
were.

file_part, which Export for Screens' prefix and suffix and Batch's
data set names use, now writes all of those characters as -, and name
patterns use it in place of their own copy. A new safe_file_name runs
a whole file or folder name through file_part, removes trailing
periods and spaces, and adds - after a device name that is the whole
name or comes before its first period (CON.png becomes CON-.png).
Export for Screens uses it for each file, folder and zip it names, and
keeps item names distinct after it. Save for Web uses it for slice
images and, without a path, for files named after the title. Library
files use it too. This happens on every platform. Other names are
written as before, except where a changed name now equals another
item's name, which then gets a number added.

Docs: docs/mcp.md, docs/target-app-parity.md.
2026-10-18 01:27:13 +07:00
dotCooCoo 7f858a7e59 Actions: Batch's Override Save and Export name files with the format's extension
With Override Save or Override Export on, action.batch named each
step's file in the destination folder with the step's format exactly as
written. The save and export commands read the format in any case and
with a leading dot, so a step with "format": ".svg" wrote
"Untitled_a..svg", "SVG" wrote ".SVG", "png8" wrote ".png8" and
"template" wrote ".template".

The file now ends in the format's extension: the extension as written,
in lower case and without the dot, when it is one of the format's
(".JPEG" gives ".jpeg"), and otherwise the format's first extension, the
one Export and Save use for a file name ("png8" gives ".png", "template"
gives ".vctemplate"). An unknown format ("xyz") keeps its spelling, and
the step fails with the command's error as before.

Docs: docs/mcp.md, docs/target-app-parity.md.
2026-10-18 01:24:35 +07:00
dotCooCoo 78330cfa2f Actions: Batch keeps files named after data sets inside the destination folder
Batch over data sets names each output file after the document and the
data set, as the reference app's File + Data Set Name option does. It
joined that name onto the destination folder as it was, and a data set
name can hold any character. A data set named a/b failed to save, and
one named a/../../x wrote its file outside the destination folder. On
Windows, one named c\d also failed to save, and one named e:f left an
empty file.

The data set's name now goes through file_part, which Export for
Screens uses for its file name prefix and a format row's suffix, so
output file names have - in place of /, \ and : from a data set's name.
When two data sets then give the same name, compared without case, the
later ones get -2, -3 and so on, as artboard file names do, through a
distinct_names helper split out of unique_file_names. This covers the
folder destination and Override Save/Export.

Docs: docs/mcp.md, docs/target-app-parity.md.
2026-10-17 13:52:05 +07:00
dotCooCoo efdb04db8a Lint: action_batch.rs compiles without an unused import on wasm32
On main, cargo xtask wasm printed an unused-import warning for json in
crates/engine/src/cmd/fileio/action_batch.rs, and this check reported
it as an error:

    RUSTFLAGS=-Dwarnings cargo check -p vectorcraft-engine --target wasm32-unknown-unknown

Every use of json! in action_batch.rs is in code compiled only for
native targets. The wasm32 version of action_batch uses Value only.

The json import now has the same #[cfg(not(target_arch = "wasm32"))]
attribute as the code that uses it. Native builds import the same
names as before.
2026-10-17 12:50:37 +07:00
bflatastic 08dde8783e Actions: Batch… stays in the Actions panel menu, as the reference app has it (#1938) 2026-10-16 04:55:01 +07:00
Fabio William ConceiçãoandCursor 0fe70314b8 G6: action.batch for File › Automate › Batch
Play an action on every file in a folder or every data set, with destination
and Override Open/Save/Export. Actions panel and File › Automate › Batch…
open the dialog; new strings in pt-br.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-16 04:50:07 +07:00