openpencil/crates
Kayshen-X 70dac19008 feat(web): undoable live-sync applies + agent-indicator relay
Two web-parity gaps from the audit:

- AI/MCP writes were not undoable in the browser: the live-sync pull
  replaced the document through replace_document, which resets History.
  EditorState grows replace_document_with_undo (same stale-draft
  clearing, pre-replace snapshot pushed as one undo step); the glue
  uses it for every apply after the mount-time first pull, gated on
  WebSyncClient::initialized().

- Agent-team indicators never showed on web: design runs execute in
  the serve-web daemon, whose process-global registry the browser wasm
  can't see. The registry gains a JSON relay (relay_json /
  parse_relay_json / apply_remote — reveal timestamps insert-only so
  locally rebased clocks survive re-polls), the daemon serves it at
  GET /api/mcp/indicators, and the web host polls on the live-sync
  cadence, mirrors into its local registry, and drives a
  self-terminating rAF pump so reveal/breathing animations play
  between DOM events.
2026-07-03 00:08:23 +08:00
..
op-acp Merge remote-tracking branch 'origin/codex/jian-widgets-plan' into v0.8.0-new 2026-06-14 13:56:56 +08:00
op-ai fix(canvas): don't arm an erase frame when a design run finishes empty 2026-07-03 00:08:18 +08:00
op-ai-skills fix(canvas): don't arm an erase frame when a design run finishes empty 2026-07-03 00:08:18 +08:00
op-cli fix(desktop): windows console, spawn, and url-opening hygiene 2026-07-03 00:08:21 +08:00
op-codegen feat(editor): support generated widgets and design tools 2026-06-14 20:25:45 +08:00
op-config-store feat(config): add shared OpenPencil config store 2026-06-14 10:17:22 +08:00
op-design-lint feat(render): handle mesh-gradient + shader fills across editor consumers 2026-07-03 00:08:19 +08:00
op-editor-core feat(web): undoable live-sync applies + agent-indicator relay 2026-07-03 00:08:23 +08:00
op-editor-host-core fix(canvas): don't arm an erase frame when a design run finishes empty 2026-07-03 00:08:18 +08:00
op-editor-ui feat(web): hide desktop-only entry points on the web host 2026-07-03 00:08:22 +08:00
op-figma perf(canvas): Arc-share image src/url to make scene-cache O(1) 2026-06-21 10:01:37 +08:00
op-git fix(ci): address rust check failures 2026-06-19 03:03:33 +08:00
op-host-desktop fix(desktop): windows console, spawn, and url-opening hygiene 2026-07-03 00:08:21 +08:00
op-host-native fix(desktop): windows console, spawn, and url-opening hygiene 2026-07-03 00:08:21 +08:00
op-host-services feat(web): undoable live-sync applies + agent-indicator relay 2026-07-03 00:08:23 +08:00
op-host-web feat(web): undoable live-sync applies + agent-indicator relay 2026-07-03 00:08:23 +08:00
op-host-web-server fix(editor): repair strokes and legacy render layout 2026-06-21 16:52:31 +08:00
op-i18n feat(ai): agentic design tool-loop, multi-chat tabs, #27 panel restyle 2026-06-25 00:12:45 +08:00
op-mcp fix(canvas): don't arm an erase frame when a design run finishes empty 2026-07-03 00:08:18 +08:00
op-opmerge
op-orchestrator feat(render): handle mesh-gradient + shader fills across editor consumers 2026-07-03 00:08:19 +08:00
op-pen-loader feat(render): handle mesh-gradient + shader fills across editor consumers 2026-07-03 00:08:19 +08:00
op-process-io feat(editor): support generated widgets and ai canvas polish 2026-06-14 17:29:16 +08:00
op-rpc-transport feat(rpc): extract shared JSON-RPC transport 2026-06-14 10:33:21 +08:00
op-smoke fix(canvas): don't arm an erase frame when a design run finishes empty 2026-07-03 00:08:18 +08:00
op-web-sdk merge: land the align-branch work onto the refreshed base 2026-07-03 00:08:17 +08:00
CLAUDE.md merge: land the align-branch work onto the refreshed base 2026-07-03 00:08:17 +08:00