Commit Graph
950 Commits
Author SHA1 Message Date
BFlat 714bbfcdaa M8: MCP and control calls name the document they act on (#998) (#1533)
Tools that act on a document, and the control methods engine.execute,
document.inspect, node.get and ui.render, take an optional `document`
(an open file's id from doc.list / document.inspect, or its path). The
call acts on that file and the tab in front stays in front, so an
attached agent keeps editing its own file when the user switches tabs.
2026-10-29 19:47:41 +07:00
BFlat 72b4269383 M8: an AI agent attached over MCP comments under its own name (#1414) (#1529)
Every command an MCP client runs acts as the client's name from initialize (clientInfo.title, else .name) with ' (agent)' after it, or 'AI agent' without one, carried to the app as engine.execute {agent}. Its messages, reactions and read state are its own, and its messages are marked (agent: true in the file and comment.list, an Agent label in the thread). The user's name and comments made in the app are unchanged; in live sessions the name and marker travel with the thread.
2026-10-29 19:15:19 +07:00
BFlat d4e6ad5d81 M12: the connector tool previews the connector it will make, ends snapping to attach points (#1387) (#1526) 2026-10-29 18:29:48 +07:00
BFlat 07681afebe M6: .fig import keeps the file's saved line breaks while the text is unedited (#1236) (#1519)
* M6: .fig import keeps the file's saved line breaks while the text and its box are unedited (#1236)

The line breaker already keeps trailing spaces and the last glyph's letter spacing out of the fit test and doesn't round box widths; imported text wrapped a word early or mid-word because local fonts measure slightly differently from the file's. The import keeps the saved line starts (derivedTextData) on the text with the box width and a stable key of its layout content; layout follows them while both match and no line overflows its box by more than 3% (+1 px).

* M6: local check that imported text wraps at the line breaks its file saved (#1236)

Runs only when FIGCRAFT_FIG_SAMPLES names a folder of .fig files: each fixed-width text with saved breaks wraps there once imported, or falls back by the overflow slack; prints the counts.
2026-10-29 17:04:29 +07:00
BFlat 6ef899cdbb M7: download a missing free font from the Missing fonts window (#754) (#1510)
A missing family the suite's font store has (Google Fonts, Noto) gets a
Download button. The first one asks the user to allow downloading fonts,
then craft-libs' craft-font-store installs pinned, checksum-verified files
into the Craft apps' shared font folder on a thread of its own. The font
scan reads that folder; once installed the text fits the real font.

font.download / font.downloads drive the store as its agent: refused while
downloading is off, never able to turn it on. Desktop only.
2026-10-29 16:41:31 +07:00
BFlat 7ba22fb2b6 M1: Crop image from the Object menu, the right-click menu and the image fill row (#1464) (#1501)
* M1: Crop image from the Object menu, the right-click menu and the image fill row (#1464)

* M1: crop mode shows the image dimmed outside the layer and heavier crop marks (#1464)

* M1: the handle overlay draws gradients and crops in their own helpers (#1464)
2026-10-29 15:07:21 +07:00
BFlat fe7b4bac63 Merge pull request #1143 from Guillergood/feat/penpot-import-export
M6: import and export Penpot 2.x files offline
2026-10-29 14:20:14 +07:00
BFlat cabf8641fb Merge pull request #1409 from avhn/feat/1386-batch-continue
M0.9: let batches continue after failed steps (#1386)
2026-10-29 14:04:46 +07:00
BFlat 99575f215d Merge pull request #1427 from muamerETS/fix/1385-alt-mid-drag-duplicate
M1: Alt pressed during a drag turns the move into a copy (#1385)
2026-10-29 14:02:06 +07:00
BFlat 68169b8146 Merge pull request #1421 from avhn/feat/1000-variable-props
M3: bind fill and stroke variables directly in layer props (#1000)
2026-10-29 14:01:40 +07:00
BFlat e1c7879957 Merge pull request #1360 from denisg0mes/place-images-at-own-size
M7: place images at their own size, in points for 2x screenshots
2026-10-29 13:52:42 +07:00
BFlat f2d90da58d Merge pull request #1389 from sarsonj/fix/sketch-import-rundogo
M6: Sketch import (#1021 follow-up): match Sketch's renders rule by rule
2026-10-29 13:52:26 +07:00
bflatastic 0a6642747a Merge main into #1143
file.open and file.export docs: main's (reload, export options) plus the Penpot format.
2026-10-29 13:51:11 +07:00
bflatastic e89def2068 Merge main into #1409 2026-10-29 13:46:42 +07:00
bflatastic c87be091ac Merge main into #1421
apply_order takes #1458's numbering; a $var wrapper ranks 7, after boundVariables.
2026-10-29 13:46:39 +07:00
bflatastic 7158419698 Merge main into #1427 2026-10-29 13:42:33 +07:00
BFlat c2c720087c Merge pull request #1408 from avhn/feat/996-node-find
M0.9: find layer ids without changing the selection (#996)
2026-10-29 13:41:43 +07:00
BFlat 3be354d227 Merge pull request #1461 from MortenHusted/fix/open-file-reload
M1: opening a file that is already open says when it changed on disk, and can read it again (#997)
2026-10-29 13:41:21 +07:00
BFlat f3e7db0b2a Merge pull request #1460 from MortenHusted/fix/unknown-params
M0.9: commands, MCP tools and batch steps refuse names they don't take (#1413)
2026-10-29 13:40:58 +07:00
bflatastic 08ac26299e Merge main into #1143 2026-10-29 13:39:41 +07:00
bflatastic 75b4b5a72b Merge main into #1389 2026-10-29 13:39:38 +07:00
bflatastic d4aae905a2 Merge main into #1409 2026-10-29 13:39:30 +07:00
BFlat 8dc3ab5703 Merge pull request #669 from yelintong/feat/flutter-codegen
M7: Flutter code generation
2026-10-29 13:37:49 +07:00
BFlat 299c1d5f59 Merge pull request #1458 from MortenHusted/fix/layout-key-order
M2: auto layout settings in one call don't depend on how their keys are spelled
2026-10-29 13:37:32 +07:00
bflatastic 0bac4f5083 Merge main into #1360 2026-10-29 13:36:26 +07:00
bflatastic 1e22268602 Merge main into #1143 2026-10-29 12:44:42 +07:00
bflatastic 2a63418d57 #634: region fills drawn by their own helper, and the long region-paint test split by case, for cognitive_complexity 2026-10-29 12:28:47 +07:00
bflatastic 789fa33444 Merge main into #634 2026-10-29 12:25:06 +07:00
bflatastic f6407b1ba0 Merge main into #1389 2026-10-29 12:24:46 +07:00
bflatastic dde58e35b9 Merge main into #1427
# Conflicts:
#	docs/roadmap.md
2026-10-29 12:24:43 +07:00
bflatastic fc6ea73154 Merge main into #1421
# Conflicts:
#	crates/engine/src/cmd/props.rs
#	docs/roadmap.md
2026-10-29 12:24:32 +07:00
bflatastic c6c11471db Merge main into #1408
# Conflicts:
#	crates/engine/src/cmd/edit.rs
#	docs/roadmap.md
2026-10-29 12:23:48 +07:00
bflatastic c5ba6dd2e8 Merge main into #1409
# Conflicts:
#	crates/engine/src/session/undo.rs
#	docs/roadmap.md
2026-10-29 12:23:11 +07:00
bflatastic d1e96ea706 Merge main into #1461 2026-10-29 12:22:30 +07:00
bflatastic ee12a51045 Merge main into #1458 2026-10-29 12:22:29 +07:00
bflatastic a51e815073 Merge main into #1460 2026-10-29 12:22:28 +07:00
bflatastic 44a9b10e46 Merge main into #1389
# Conflicts:
#	crates/engine/src/cmd/file.rs
#	docs/file-format-parity.md
2026-10-29 12:08:39 +07:00
bflatastic ce14b431da #669: explicit imports in flutter.rs, a capped layer's name stays on its comment line, the Flutter variant asserts in their own test, the Arabic catalog's key 2026-10-29 11:59:14 +07:00
bflatastic 2f3dc8cccd Merge main into #1427
# Conflicts:
#	docs/roadmap.md
2026-10-29 11:54:42 +07:00
bflatastic a81efe5466 Merge main into #669 2026-10-29 11:52:03 +07:00
bflatastic 9f5178f53a Merge main into #1421
# Conflicts:
#	crates/engine/src/cmd/props.rs
#	crates/engine/src/selection/selection_colors.rs
#	docs/roadmap.md
2026-10-29 11:50:45 +07:00
bflatastic a48f43cd34 #1408: import opt_id for node.find now that edit.rs names its imports 2026-10-29 11:49:37 +07:00
BFlat 1a755ccb0c Merge pull request #1425 from Silvertree2010/fix/h3041-node-set-opacity-1-gives-full-op
Treat a % suffix on node.set opacity as a percentage
2026-10-29 11:41:54 +07:00
BFlat 27c3232930 Merge pull request #1426 from Silvertree2010/fix/h3039-color-of-silently-drops-non-nume
Reject colour arrays containing non-numeric entries in color_of
2026-10-29 11:41:48 +07:00
bflatastic 49a41cddd4 Merge main into #1408
# Conflicts:
#	docs/roadmap.md
2026-10-29 11:40:48 +07:00
bflatastic 0265f066b3 #1409: split a long batch test for the cognitive complexity lint 2026-10-29 11:40:21 +07:00
BFlat 18abd3ab48 Merge pull request #1467 from Silvertree2010/fix/h3521-node-set-paddinghorizontal-paddi
Reject non-numeric paddingHorizontal/paddingVertical in node.set
2026-10-29 11:38:41 +07:00
BFlat c3f8790f0b Merge pull request #1469 from Silvertree2010/fix/h3578-page-duplicate-accepts-a-non-pag
Reject non-page ids in page.duplicate
2026-10-29 11:38:31 +07:00
BFlat f90a7c5e22 Merge pull request #1419 from avhn/fix/1410-batch-undo-rollback
M8: keep undo entries after a failed batch undoes an earlier edit (#1410)
2026-10-29 11:38:24 +07:00
BFlat bc1319ccf0 Merge pull request #1432 from Zaxaerith/fix/1428-set-as-thumbnail
fix(engine): make Set as thumbnail affect saved files (#1428)
2026-10-29 11:38:08 +07:00