Danila Poyarkov
38bee364e8
refactor(tools): organize internal CLI workflows ( #600 )
...
* refactor(tools): organize internal CLI workflows
- Group visual-oracle commands behind a Citty CLI and domain folders\n- Add imported-document visual comparison manifests and pixel-diff outputs\n- Consolidate package-quality checks behind stable check, smoke, and verify commands\n- Remove obsolete visual root aliases and compatibility scripts
* fix(tools): validate visual oracle target scope
- Validate manifest records, required strings, and optional field types\n- Reject explicit OpenPencil nodes outside the configured page
* fix(tools): validate packaged runtime exports
2026-08-29 14:42:44 +03:00
フォン
88c1077071
fix(cli): use Node fs for import command
...
Fixes openpencil import under Node.js by replacing Bun filesystem globals with node:fs/promises. Enforces the CLI runtime boundary through lint.
2026-08-24 20:26:52 +03:00
Danila Poyarkov
5f8a373b2b
feat(diagnostics): add local usage and diagnostics foundation
...
Supersedes #572 . Adds local structured AI usage and diagnostics history, typed diagnostic events, localized Usage/Diagnostics settings, shared IndexedDB lifecycle, and consolidated button/dialog primitives.
2026-08-24 16:56:40 +03:00
Danila Poyarkov
bb8c5c18d9
fix(editor): commit vector drags on pointer release ( #586 )
...
* fix(editor): commit vector drags on pointer release
- Commit vertex and Bézier handle edits immediately on release\n- Rebase active vector-edit state after graph commits\n- Use vector-specific input paths and cover Pen-created Bézier drags
* test: reduce visual snapshot scope
- Replace behavior screenshots with scene assertions\n- Capture renderer fixtures from bounded canvas regions\n- Remove obsolete full-viewport snapshots
* fix(vector): harden edit cancellation and endpoint remapping
- Restore temporary vector geometry on cancelled pointer drags\n- Commit Bézier handle releases consistently and guard stale handle state\n- Preserve valid endpoint indices when connecting vector vertices
* fix(vector): cancel bend drags and satisfy formatting
* fix(vector): guard stale handle references
* fix(vector): guard stale overlay handle indices
* fix(vector): validate overlay handle keys
* refactor(vector): use typed handle selection ids
* test(vector): align typed handle selection coverage
2026-08-24 16:02:27 +03:00
Danila Poyarkov
f75d67ad4d
feat(app): make crash recovery configurable
...
* feat(app): make crash recovery configurable
- Add an enabled-by-default persisted recovery preference and General settings control
- Stop recovery writes and remove the active document snapshot when disabled
- Suppress startup recovery discovery while the preference is disabled
- Cover disabled persistence and re-enable behavior
* fix(i18n): translate recovery preferences
* fix(app): serialize recovery disable cleanup
- Block re-enabled persistence until pending snapshot removal completes
- Preserve disable generations so stale cleanup cannot reset newer recovery state
- Display runtime-overridden recovery state in Settings
- Deep-clone nested preferences before updating recovery
2026-08-21 18:58:27 +03:00
Danila Poyarkov
22c98e28c8
Merge origin/master into agent/mcp-automation-settings
...
# Conflicts:
# src/views/EditorView.vue
2026-08-20 18:48:44 +03:00
Danila Poyarkov
9c4d188ea4
refactor(mcp): keep disabled tools typed across boundaries
...
- Carry normalized tool-name arrays through app and development JSON configuration
- Serialize the legacy CSV format only at child-process environment boundaries
- Bound, validate, trim, and deduplicate development tool policy input
2026-08-20 18:44:44 +03:00
Danila Poyarkov
59023f3854
Merge pull request #550 from victorwads/victorwads/fast-pages-open-recent
...
feat(app): add unified files home and progressive .fig loading
2026-08-20 18:42:23 +03:00
Danila Poyarkov
c3412a44fc
docs: polish localized documentation
...
* docs: polish localized documentation
- Rewrite Russian documentation for natural terminology and current source parity\n- Continue the Polish editorial pass across guides and SDK references\n- Refresh shared localized SDK API data imports
* docs(pl): complete editorial pass
- Rewrite the remaining advanced Vue SDK references\n- Refresh the Figma compatibility matrix against the canonical source\n- Align terminology and behavior across every Polish documentation page
* docs(de): complete editorial pass
- Rewrite German guides, automation docs, and Vue SDK references\n- Restore current AI, export, component, and variable behavior\n- Refresh the Penpot comparison and Figma compatibility matrix
* docs(es): complete editorial pass
- Rewrite Spanish guides, automation docs, and Vue SDK references\n- Restore current AI, export, component, and variable behavior\n- Refresh the Penpot comparison and Figma compatibility matrix
* docs(fr): complete editorial pass
- Rewrite French guides, automation docs, and Vue SDK references\n- Restore current AI, export, component, and variable behavior\n- Refresh the Penpot comparison and Figma compatibility matrix
* docs: correct localized terminology
- Replace unnecessary English prose with natural localized terminology\n- Derive documentation aliases from named directory roots\n- Preserve English only for identifiers, APIs, and exact product terms
* docs(it): continue editorial pass
- Rewrite Italian user guides and automation documentation\n- Update Vue SDK composables and component references\n- Restore current AI, export, component, and variable behavior
* docs(it): complete editorial pass
- Finish Italian advanced SDK and reference documentation\n- Refresh the Penpot comparison and Figma compatibility matrix\n- Replace literal machine translations with natural technical prose
* docs(pl): refine property panel terminology
* docs: refine remaining localized prose
- Replace overfitted English prose in Polish feature documentation\n- Rewrite the Russian property-list reference in natural terminology
* docs(ru): rewrite Penpot comparison naturally
- Replace remaining English prose with natural Russian\n- Preserve code identifiers and library names only where required
* docs: rewrite localized feature overviews naturally
- Replace avoidable English prose in German, Spanish, and French\n- Keep identifiers and product names unchanged
* docs(de): refine property panel terminology
* docs: refine Spanish and French SDK terminology
* docs(ru): continue full prose audit
- Rewrite homepage, setup, navigation, and guide index naturally\n- Restore missing zoom shortcuts
* docs(ru): audit user and automation guides
- Rewrite selection, collaboration, and automation prose naturally\n- Preserve API identifiers while localizing ordinary terminology
* docs(ru): audit CLI inspection and analysis
* docs(ru): audit Vue SDK overview and guides
* docs(ru): audit Vue SDK API prose
- Localize ordinary component and composable terminology\n- Preserve API symbols and code identifiers
* docs(ru): audit advanced and gradient API references
* docs(ru): finish advanced API prose audit
* docs(ru): audit JSX renderer guide
* docs(ru): audit CLI export and scripting guides
* docs(pl): audit Penpot comparison prose
* docs(pl): audit selection and automation guides
* docs(pl): audit homepage and variable guides
* docs(pl): audit vector, layers, and Pen guides
* docs(pl): audit Auto layout and shape guides
* docs(pl): audit context menu and export guides
* docs(pl): audit JSX and analysis guides
* docs(pl): audit AI Chat guide
* docs(pl): audit components and CLI inspection
* docs(pl): audit scripting and SDK overview prose
* docs(pl): audit SDK API indexes
* docs(pl): audit SDK component references
* docs(pl): audit SDK composable references
* docs(ru): refine usePosition terminology
* docs(pl): audit advanced SDK references
* docs(pl): audit Figma compatibility matrix
* docs(pl): finish residual SDK terminology audit
* docs(pl): finish component terminology audit
* docs(pl): finish SDK guide terminology audit
* docs(de): begin full user guide prose audit
* docs(de): audit navigation, Pen, and layers guides
* docs(de): audit Auto Layout, shapes, menu, and export
* docs(de): audit components, text, and vector guides
* docs(de): audit variables and automation overview
* docs(de): audit AI Chat and collaboration guides
* docs(de): audit CLI inspection, analysis, and export
* docs(de): audit scripting and JSX guides
* docs(de): audit Vue SDK overview and guides
* docs(de): audit SDK API indexes
* docs(de): audit SDK component references
* docs(de): audit SDK composable references
* docs(de): audit advanced SDK references
* docs(de): audit Penpot comparison prose
* docs(de): audit Figma compatibility reference
* docs(es): begin full user guide prose audit
* docs(es): audit document organization guides
* docs(es): audit editing workflow guides
* docs(es): audit automation and collaboration prose
* docs(es): audit CLI inspection and export guides
* docs(es): audit CLI scripting guide
* docs(es): audit JSX and feature overview prose
* docs(es): audit Penpot comparison prose
* docs(es): audit SDK overview and guides
* docs(es): begin SDK component reference audit
* docs(es): audit SDK navigation component references
* docs(es): audit SDK color and layout components
* docs(es): begin SDK composable reference audit
* docs(es): audit SDK property composable references
* docs(es): audit SDK editor composable references
* docs(es): begin advanced SDK reference audit
* docs(es): audit advanced SDK state references
* docs(es): complete advanced SDK reference audit
* docs(es): audit Figma compatibility reference
* docs(es): complete residual terminology sweep
* docs(fr): begin full prose second audit
* docs(fr): audit AI and variables prose
* docs(fr): audit core user guide prose
* docs(fr): audit editing workflow guides
* docs(fr): audit CLI and JSX prose
* docs(fr): audit Penpot comparison prose
* docs(fr): audit SDK overview and guides
* docs(fr): begin SDK API reference audit
* docs(fr): audit SDK navigation component references
* docs(fr): audit SDK color and layout components
* docs(fr): begin SDK composable reference audit
* docs(fr): audit SDK property composable references
* docs(fr): audit editor composables and advanced APIs
* docs(fr): audit advanced SDK state references
* docs(fr): complete advanced SDK reference audit
* docs(fr): audit Figma compatibility reference
* docs(fr): complete residual terminology sweep
* docs(it): begin full prose second audit
* docs(it): audit document workflow guides
* docs(it): audit editing and automation prose
* docs(it): audit CLI and JSX prose
* docs(it): audit Penpot comparison and SDK guides
* docs(it): begin SDK API reference audit
* docs(it): audit SDK component and state references
* docs(it): audit residual SDK references
* docs(it): audit Figma compatibility reference
* docs(it): complete residual terminology sweep
* docs(i18n): verify residual locale terminology
2026-08-20 18:36:50 +03:00
Danila Poyarkov
bb5960cd62
refactor(app): polish files workspace and New tabs
...
- Keep New tabs provisional so opening or creating a design reuses the active tab
- Separate recent document, storage, menu, worker, and workspace responsibilities
- Add source-aware recents, responsive files UI, loading states, and localized copy
- Preserve native local Open Recent behavior while supporting remote storage history
2026-08-20 17:20:33 +03:00
Danila Poyarkov
376447a5dd
Merge remote-tracking branch 'origin/master' into pr-550-push-integration
...
# Conflicts:
# CHANGELOG.md
2026-08-20 17:20:25 +03:00
Danila Poyarkov
fad731b3e7
fix(mcp): align runtime metadata and restart errors
...
- Publish explicit effective tool state while retaining disabled tools for Settings
- Classify filesystem writes as side effects and localize category labels
- Stop failed restarts and return precise development control status codes
2026-08-20 16:27:11 +03:00
Danila Poyarkov
7955207146
Merge origin/master into agent/mcp-automation-settings
2026-08-20 16:02:26 +03:00
Danila Poyarkov
e5972b0c86
docs(mcp): clarify tool effect controls
...
- Name categories after read-only and document-writing behavior
- Keep locale schemas and the Unreleased changelog synchronized
2026-08-20 15:55:48 +03:00
Danila Poyarkov
4a8714377e
refactor(mcp): model tool effects and capabilities
...
- Remove duplicated document-access declarations from core tools
- Replace the MCP catalog with typed descriptors, capabilities, and policy
- Emit standard MCP annotations through type-safe registration
2026-08-20 15:55:48 +03:00
Danila Poyarkov
dc8367921b
test(canvas): cover selected frame guide scope
2026-08-20 15:17:46 +03:00
Danila Poyarkov
47026f82a0
fix(canvas): preserve frame guide measurement ownership
2026-08-20 15:08:18 +03:00
Danila Poyarkov
2bc89c311d
feat(canvas): add Figma guide feedback parity
2026-08-20 14:02:33 +03:00
Danila Poyarkov
9f7ce64bf6
Merge pull request #562 from open-pencil/guide-authoring
...
feat(editor): author canvas and frame guides from rulers
2026-08-20 09:39:19 +03:00
Danila Poyarkov
5acc2235c6
fix(canvas): polish guide ruler interactions
2026-08-20 08:56:33 +03:00
Danila Poyarkov
b8d052f5c4
refactor(vue): normalize canvas interaction domains
2026-08-20 08:53:13 +03:00
Danila Poyarkov
3497aef818
refactor(canvas): normalize guide domain naming
2026-08-20 08:47:33 +03:00
Danila Poyarkov
27ad48b365
refactor(canvas): separate guide and overlay pipelines
2026-08-20 08:41:16 +03:00
Danila Poyarkov
197364923b
fix(canvas): render live guide drag feedback
2026-08-20 08:23:04 +03:00
Danila Poyarkov
581d774d0e
fix(canvas): show directional cursors for guides
2026-08-20 07:53:33 +03:00
Danila Poyarkov
23b7d92ecf
feat(canvas): support guide selection and editing
2026-08-20 07:50:31 +03:00
Victor Wads
d3bbd29ac2
fix(mcp): address automation review feedback
...
- Serialize runtime lifecycle operations and connect only after health checks
- Identify externally managed servers and disable misleading restart controls
- Cover enable-all behavior and sync MCP settings locale keys
2026-08-20 00:33:39 -03:00
Victor Wads
4db24bd124
feat(mcp): allow disabling local authentication
...
- Persist whether the desktop MCP server requires a bearer token
- Start localhost MCP without a generated token when authentication is disabled
- Warn in Settings and require a server restart to apply the preference
2026-08-20 00:27:33 -03:00
Victor Wads
6a78da9eb0
refactor(mcp): derive catalog from registration
...
- Collect tool metadata through the existing registration wrapper
- Expose the runtime catalog to Settings without a parallel MCP-only list
- Keep disabled tools discoverable so they can be re-enabled
2026-08-20 00:27:13 -03:00
Victor Wads
febdcef392
feat(mcp): configure desktop root directory
...
- Persist an optional MCP filesystem root selected from Settings
- Default file-scoped tools to the user home directory
- Apply the configured root when the desktop MCP server restarts
2026-08-20 00:27:13 -03:00
Victor Wads
d807828270
feat(mcp): classify tool document access
...
- Declare inspection or modification access on every canonical tool definition
- Add bulk category controls while preserving individual disabled-tool storage
- Keep runtime availability separate from document access semantics
2026-08-20 00:26:53 -03:00
Victor Wads
b43da1ecc3
feat(mcp): add automation settings controls
2026-08-20 00:26:34 -03:00
Victor Wads
51f8464621
Merge remote-tracking branch 'source/master' into victorwads/fast-pages-open-recent
...
# Conflicts:
# CHANGELOG.md
# desktop/src/lib.rs
# desktop/src/menu.rs
2026-08-19 14:47:08 -03:00
Danila Poyarkov
c141663291
fix(editor): address guide authoring review
...
- Dispose CanvasKit dash effects and render nested frame guides
- Validate imported guide GUIDs and invalidate stale raw guide metadata
- Resolve frame owners through nested hit ancestry and require primary-button ruler drags
- Share guide preview types through a neutral editor module
2026-08-19 20:13:57 +03:00
Danila Poyarkov
c05a5596aa
fix(tools): require sibling variant components
...
- Reject combine_as_variants inputs that span different parents\n- Preserve all source components when validation fails\n- Cover the tool-level error path
2026-08-19 20:05:54 +03:00
Danila Poyarkov
1db92c4603
fix(figma-api): align variant combination behavior
...
- Match the Figma parent and insertion-index API contract\n- Reject duplicate component references before graph mutation\n- Share slash-name variant derivation with editor actions\n- Add structural regression coverage and changelog entry
2026-08-19 20:05:54 +03:00
xemc
b01ed830e8
feat(figma-api): add combineAsVariants for real component variant sets
...
figma.combineAsVariants() was unimplemented in the scripting/automation
layer (figma-api/proxy.ts's compatibility surface), even though the editor
UI already has a full equivalent — createComponentSetFromComponents()
(editor/components.ts) plus wrapSelectionInContainer()
(editor/structure/container-wrap.ts) — wired to the app's own "Create
component set" menu action.
This ports that logic down to FigmaAPI (the class MCP tools, the CLI, and
AI chat scripting all run against): wraps selected COMPONENT nodes sharing
a parent into a COMPONENT_SET, and derives variant property definitions from
"Category/Value" node-name segments, matching the editor behavior exactly.
Drops the undo-stack push and selection-state writes the editor path has,
since neither concept exists at the scripting layer — everything else is
the same primitives (SceneGraph.createNode/insertChildAt/reparentNode),
which FigmaAPI already had direct access to.
Also adds a matching combine_as_variants tool (packages/core/src/tools/
create/components.ts) registered in EXTENDED_TOOLS, so it's exposed
through MCP, the CLI, and AI chat alongside the existing create_component/
create_instance tools.
2026-08-19 20:05:54 +03:00
Danila Poyarkov
4b8bf021f6
Merge pull request #548 from 0xemc/fix/fig-component-property-roundtrip
...
fix(fig): component properties silently dropped on save
2026-08-19 20:04:57 +03:00
Danila Poyarkov
62ba072b26
refactor(ai): ship Harness as optional companion ( #561 )
...
* Revert "feat(ai): add HarnessAgent sidecar foundation (#560 )"
This reverts commit 83a5ea1b42 .
* Revert "Revert "feat(ai): add HarnessAgent sidecar foundation (#560 )""
This reverts commit 0d8c03515888c62dc47186d4a3b0b7b04e78f8af.
* refactor(ai): ship Harness as optional companion
* fix(ai): support Harness companion on Windows
* test(ai): restore navigator after Harness Windows test
2026-08-19 20:04:35 +03:00
Danila Poyarkov
e86c4c9b9b
Merge remote-tracking branch 'origin/master' into review-pr-548-head
2026-08-19 18:33:16 +03:00
Danila Poyarkov
adaf6dacb9
fix(canvas): keep guide renderer fixtures complete
2026-08-19 18:10:36 +03:00
Danila Poyarkov
f9c0f56ec3
chore(vue): keep guide input dispatch lint-clean
2026-08-19 18:09:46 +03:00
Danila Poyarkov
f892cb583c
feat(editor): add ruler guide authoring foundation
...
- Preserve page and frame guide GUIDs through .fig conversion
- Add undoable guide add, move, transfer, and remove actions
- Start page/frame guide previews from CanvasKit rulers
- Render warm guide previews with frame-scoped solid lines and dotted continuation
2026-08-19 18:08:48 +03:00
Danila Poyarkov
33962b764c
fix(fig): harden component property round trips
...
- Allocate collision-safe property GUIDs across every export path
- Preserve instance-swap component keys and unresolved GUID targets
- Prefer edited assignments over imported raw metadata
- Cover recursive serialization, assignments, and key preservation
2026-08-19 18:05:25 +03:00
Danila Poyarkov
83a5ea1b42
feat(ai): add HarnessAgent sidecar foundation ( #560 )
...
* feat(ai): add HarnessAgent sidecar foundation
* feat(ai): integrate Pi as a Harness provider
* fix(ai): harden Harness provider integration
* fix(ai): address Harness integration review
* fix(ai): align Harness code with project conventions
* fix(ai): preserve Harness sessions on cancellation
* test(ai): cover Harness JSONL framing
* refactor(ai): generalize Harness sidecar adapters
* fix(ci): build Harness sidecar for native checks
2026-08-19 17:41:10 +03:00
Danila Poyarkov
8aeda81f3a
Merge remote-tracking branch 'origin/master' into review-pr-548-head
2026-08-19 17:27:47 +03:00
Danila Poyarkov
73f0883521
Merge remote-tracking branch 'origin/master' into feat/configurable-snapping-guides
2026-08-19 13:20:21 +03:00
Danila Poyarkov
8e3f904ed4
fix(io): normalize legacy guide arrays safely
...
- Restore missing or malformed guides as empty arrays during graph hydration
- Keep library revision clones independent while preserving valid guides
2026-08-19 12:53:00 +03:00
Danila Poyarkov
9ef2f63d57
fix(editor): harden snapping edge cases
...
- Preserve rounded auto-layout preview displacement through drop commits
- Bound imported layout-guide counts and tiny grid steps
- Normalize missing guide arrays in direct graph hydration paths
- Add regression coverage for auto-layout movement and guide limits
2026-08-19 12:33:32 +03:00
Danila Poyarkov
94d3b28be6
fix(canvas): release vector drags on global mouseup
...
- Observe window mouseup in capture phase so overlays cannot swallow drag completion
- Assert vector points stop following the pointer after release
2026-08-19 11:05:03 +03:00