openpencil/crates/op-host-web
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
..
assets/canvaskit fix(web): use browser fonts in canvaskit shell 2026-06-19 02:39:34 +08:00
pkg-ck fix(web): expand browser font fallback stack 2026-06-19 07:30:34 +08:00
pkg-webgl refactor(renderer): consolidate web shell on CanvasKit, retire skia path 2026-06-18 09:34:37 +08:00
smoke test(web): add rust web browser smoke 2026-06-20 19:24:59 +08:00
src feat(web): undoable live-sync applies + agent-indicator relay 2026-07-03 00:08:23 +08:00
tests merge: land the align-branch work onto the refreshed base 2026-07-03 00:08:17 +08:00
.gitignore refactor(rust): rename openpencil-shell-web host to op-host-web 2026-05-16 23:42:49 +08:00
Cargo.toml chore(web): snapshot in-progress web-host work (settings module + deps) 2026-06-20 23:44:25 +08:00