Danila Poyarkov
825d3bbe49
docs: add conventional commit guidance and update changelog
...
- Document semantic/conventional commit format in AGENTS.md with short subjects and detailed bodies
- Keep commit types lowercase, but start each commit body line with an uppercase word
- Add missing unreleased changelog entries from recent editor and UI fixes
- Tighten unreleased changelog wording to stay concise and user-facing
2026-04-08 13:18:02 +03:00
Danila Poyarkov
07674d1919
Restructure @open-pencil/core into domain modules
...
Move 30+ loose files at src/ root into domain directories:
- scene-graph/ — SceneGraph class, instances, hit-test, copy, snap, undo
- color/ — parse/format, color management, OkHCL
- text/ — text editor, style runs, direction, fonts
- vector/ — vector network encode/decode, bezier math
- figma-api/ — FigmaAPI class, FigmaNodeProxy
- icons/ — Iconify API client, icon rendering
- canvas/ — SkiaRenderer (was renderer/)
- design-jsx/ — JSX-to-design renderer (was render/)
Also:
- Move fig-compress.ts into io/formats/fig/compress.ts
- Delete re-export shims (headless-render.ts, svg-export/)
- Convert all self-referencing @open-pencil/core/* imports to relative
- Clean up package.json exports (26 subpaths, no internal leaks)
- Update AGENTS.md subpath table
Fixes #179
2026-04-06 14:39:53 +03:00
Danila Poyarkov
79357f3afe
Add Vue package publishing in CI
2026-03-30 16:21:57 +03:00
Danila Poyarkov
99e646aaa4
Refine docs structure for SDK and automation
2026-03-24 23:24:08 +03:00
Danila Poyarkov
4a25b88438
Document check:vue script in AGENTS.md
2026-03-16 21:55:05 +03:00
Danila Poyarkov
7defe46369
Document @open-pencil/vue in AGENTS.md
2026-03-16 17:25:25 +03:00
Danila Poyarkov
6379217692
Update AGENTS.md and REFACTOR.md with editor architecture docs
2026-03-16 15:15:38 +03:00
Anton A S
583b03eb3b
Harden ACP transport, MCP server, and add permission dialog
...
- Extract mapUpdate to testable module, dynamic import for @tauri-apps/plugin-shell
- Add warnings for unhandled ACP content types and empty tool titles
- MCP server: session limit (max 10), fix null WS comparison, guard JSX preprocessing
- MCP server: read version from package.json instead of hardcoded 0.0.0
- MCP tests: use port 0 (OS-assigned) to prevent collision
- Connection error handling with user-friendly messages, stale session recovery
- Agent crash detection via close handler, destroying flag, buildCrashChunks
- Port collision: detect EADDRINUSE in vite-plugin stderr and log clear error
- Production Tauri: spawn openpencil-mcp via shell plugin, orphan reuse via health check
- Permission confirmation dialog (reka-ui AlertDialog) with queue, 60s auto-reject timeout
- Health check in ProviderSelect hides ACP agents when MCP server unavailable
- Move DESIGN_CONTEXT to app constants, add ACP_PERMISSION_TIMEOUT_MS
- 36 tests across 3 files (acp-transport, acp-permission, mcp-server)
- Update CHANGELOG, README, CONTRIBUTING, AGENTS.md
2026-03-15 16:49:43 +03:00
Anton A S
2a740a01ff
Add subpath exports to @open-pencil/core
...
12 domain-specific subpath exports for targeted imports:
scene-graph, kiwi, tools, renderer, render, rpc, figma-api,
canvaskit, layout, color, render-image, profiler.
- Create kiwi/index.ts barrel (codec, fig-file, fig-import, protocol)
- Route main index.ts kiwi re-exports through the new barrel
- Add exports map + publishConfig mirror for npm consumers
- Mark package as sideEffects: false for tree-shaking
- Document subpath exports in AGENTS.md
2026-03-12 22:10:36 +03:00
Danila Poyarkov
fa3d7b8a8f
Enable type-aware linting with tsgo in oxlint
...
Add oxlint-tsgolint dependency and --type-aware --type-check flags.
This replaces the separate tsgo --noEmit step — oxlint now handles
both linting and type checking in a single pass.
Add typescript/no-floating-promises as a warning rule.
2026-03-08 23:02:25 +03:00
Anton A S
e828185d9e
Merge branch 'master' into add-vitepress-docs
2026-03-07 19:01:09 +03:00
Danila Poyarkov
df8e303498
Add Homebrew tap with auto-update workflow ( #61 )
2026-03-06 18:08:47 +03:00
Danila Poyarkov
661b83e749
Port analyze/diff tools from figma-use, split tools into domain files
...
Analyze: colors, typography, spacing, clusters
Diff: diff_create (tree diff), diff_show (preview changes)
Utility: get_components, get_current_page, arrange, node_to_component
Split schema.ts (2600 lines) into read, create, modify, structure,
variables, vector, analyze, registry — each under 600 lines.
Clean up inline types (use Color, Vector, SceneNode from existing defs).
Update AGENTS.md and CONTRIBUTING.md with code quality guidelines.
2026-03-05 19:16:23 +03:00
Anton A S
311a0d8208
Merge origin/master: P2P collab, MCP server, multi-file tabs, 29 tools, performance
2026-03-03 11:56:46 +03:00
Danila Poyarkov
4ad90d4819
Add MCP server package with stdio and HTTP transports
...
29 tools: open_file, save_file, new_document + all 26 from @open-pencil/core.
Stdio for MCP clients (Claude Code, Cursor), HTTP (Hono + Streamable HTTP
with sessions) for scripts, browser extensions, CI.
Runs on both Bun and Node.js (via tsx).
2026-03-02 14:20:49 +03:00
Anton A S
0e8866265d
Sync specs & docs with master: docs→packages/docs, Safari save, .fig export fix, LOC stats
2026-03-01 18:33:36 +03:00
Danila Poyarkov
f90e1400b7
P2P collaboration: cursors, follow mode, cleanup
...
- Broadcast cursor position from canvas mouse move via awareness
- Broadcast selection changes via reactive watcher on selectedIds
- Follow mode: click peer avatar to track their viewport (pan + zoom)
- Zoom broadcast via watcher on store.state.zoom, not just mouse move
- Figma-style cursor arrows: colored fill, white border, name pill
- Stale cursor cleanup: removeAwarenessStates on peer leave
- MQTT signaling (replace Nostr), STUN + TURN ICE servers
- Collab constants extracted to src/constants.ts
- crypto.getRandomValues() replaces Math.random() everywhere
- Provide/inject for collab composable (COLLAB_KEY)
- Update README (collab section, tech stack), CHANGELOG, AGENTS.md
- AGENTS.md: release process, CI workflows, documentation guidelines
2026-03-01 18:11:07 +03:00
Anton A S
c6d70b501b
Sync specs & docs with master: eval command, app menu, autosave, unified tools
2026-03-01 16:07:40 +03:00
Danila Poyarkov
77509d8979
Unify tool definitions: define once, adapt for AI/CLI/MCP
...
Move tool logic to @open-pencil/core/tools/schema.ts as framework-agnostic
ToolDef objects. AI adapter generates valibot schemas + Vercel AI tool()
wrappers automatically.
26 tools (was 10): create_shape, render (JSX), set_fill, set_stroke,
set_effects, set_layout, set_constraints, update_node, delete, clone,
rename, reparent, group/ungroup, find_nodes, get_node, get_page_tree,
get_selection, select, list_pages, switch_page, list_variables,
list_collections, create_component, create_instance, eval.
src/ai/tools.ts: 269→28 lines (adapter only).
Tests for all 3 interfaces:
- 26 core tool tests (FigmaAPI directly)
- 11 AI adapter tests (valibot + Vercel AI SDK tool())
- 12 CLI integration tests (eval command on .fig fixture)
323 total, all passing.
2026-03-01 16:07:35 +03:00
Danila Poyarkov
3849872b32
Unify tool definitions: define once, adapt for AI/CLI/MCP
...
Move tool logic to @open-pencil/core/tools/schema.ts as framework-agnostic
ToolDef objects. AI adapter generates valibot schemas + Vercel AI tool()
wrappers automatically.
26 tools (was 10): create_shape, render (JSX), set_fill, set_stroke,
set_effects, set_layout, set_constraints, update_node, delete, clone,
rename, reparent, group/ungroup, find_nodes, get_node, get_page_tree,
get_selection, select, list_pages, switch_page, list_variables,
list_collections, create_component, create_instance, eval.
src/ai/tools.ts: 269→28 lines (adapter only).
Tests for all 3 interfaces:
- 26 core tool tests (FigmaAPI directly)
- 11 AI adapter tests (valibot + Vercel AI SDK tool())
- 12 CLI integration tests (eval command on .fig fixture)
323 total, all passing.
2026-03-01 15:02:05 +03:00
Danila Poyarkov
46bb9230d3
Add jscpd for copy-paste detection
2026-03-01 10:49:09 +03:00
Danila Poyarkov
6bc3f7c50d
Use git push --no-verify for LFS, drop custom alias
2026-03-01 10:41:16 +03:00
Danila Poyarkov
dc602b0731
Document git qpush alias for fast LFS-skipping pushes
2026-03-01 10:39:57 +03:00
Danila Poyarkov
cae260c178
Document LFS skipverify setting
2026-03-01 10:36:00 +03:00
Danila Poyarkov
9873580a04
Reference plan.md from AGENTS.md
2026-03-01 10:19:38 +03:00
Danila Poyarkov
36e3f14ac4
CLI: add analyze, node, pages, and variables commands
...
- analyze colors: color palette usage with clustering
- analyze typography: font/size/weight distribution
- analyze spacing: gap/padding values with grid check
- analyze clusters: repeated patterns (potential components)
- node: detailed properties by ID
- pages: list pages with node counts
- variables: list design variables and collections
2026-03-01 10:19:38 +03:00
Danila Poyarkov
97428949fc
Update README and AGENTS.md for monorepo structure and CLI
2026-03-01 01:28:24 +03:00
Danila Poyarkov
d1979473c3
Add figma-use reference to AGENTS.md
2026-02-28 23:27:36 +03:00
Danila Poyarkov
7a803772a5
Expand AGENTS.md with lessons from all project sessions
...
Added from ~/Development sessions: scene graph behaviors,
auto-layout gotchas, section/frame rendering rules, .fig
round-trip testing, Tauri permissions, icon conventions,
ScrubInput cursor handling, culori usage, vueuse hooks.
2026-02-28 23:23:46 +03:00
Danila Poyarkov
199520ae86
Expand AGENTS.md with lessons from all sessions
2026-02-28 23:22:07 +03:00
Danila Poyarkov
fdb3fec236
Add AGENTS.md
2026-02-28 23:18:55 +03:00