pmx-canvas 0.11.0 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/extensions/pmx-canvas/extension.mjs +3 -1
- package/.github/extensions/pmx-canvas/runtime.json +1 -1
- package/.github/extensions/pmx-canvas/tools.json +440 -18
- package/CHANGELOG.md +37 -0
- package/dist/amp-plugin/pmx-canvas/LICENSE +21 -0
- package/dist/amp-plugin/pmx-canvas/THIRD_PARTY_LICENSES.txt +331 -0
- package/dist/amp-plugin/pmx-canvas/index.js +5445 -0
- package/dist/amp-plugin/pmx-canvas/runtime.json +3 -0
- package/dist/amp-plugin/pmx-canvas/shared-runtime.mjs +194 -0
- package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/SKILL.md +251 -0
- package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/evals/evals.json +1086 -0
- package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/evals/fixtures/code-exploration/src/auth/jwt.ts +17 -0
- package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/evals/fixtures/code-exploration/src/auth/login.ts +12 -0
- package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/evals/fixtures/code-exploration/src/auth/middleware.ts +13 -0
- package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/evals/fixtures/code-exploration/src/routes/auth.ts +13 -0
- package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/evals/fixtures/investigation-board/src/handlers/users.ts +27 -0
- package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/mcp.json +36 -0
- package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/references/ax-html-control-surface.md +101 -0
- package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/references/codex-app-adapter.md +151 -0
- package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/references/excalidraw-diagram-authoring.md +150 -0
- package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/references/full-reference.md +1785 -0
- package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/references/github-copilot-app-adapter.md +223 -0
- package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/references/html-primitives.md +139 -0
- package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/references/importing-context.md +132 -0
- package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/references/installing-pmx-canvas.md +251 -0
- package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/references/tours-and-recording.md +111 -0
- package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/references/workbench-workflows.md +900 -0
- package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas-orchestration/SKILL.md +141 -0
- package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas-testing/SKILL.md +266 -0
- package/dist/amp-plugin/pmx-canvas/start-mcp.mjs +14857 -0
- package/dist/amp-plugin/pmx-canvas/tools.json +10963 -0
- package/dist/canvas/chunks/{abnfDiagram-N423BO3Z-p8dtp6va.js → abnfDiagram-N423BO3Z-cwtsds5d.js} +1 -1
- package/dist/canvas/chunks/architecture-TIHT7OUA-x63cwejs.js +1 -0
- package/dist/canvas/chunks/{architectureDiagram-T3A2C74G-5jhmxrzf.js → architectureDiagram-T3A2C74G-b4xc9tpz.js} +3 -3
- package/dist/canvas/chunks/{blockDiagram-VBNYF7ZC-pw1fa9yb.js → blockDiagram-VBNYF7ZC-ahp3yxxs.js} +7 -7
- package/dist/canvas/chunks/{c4Diagram-5PPSVZJV-x07nq0tt.js → c4Diagram-5PPSVZJV-nappnay7.js} +4 -4
- package/dist/canvas/chunks/classDiagram-JCYQIIEL-k1j2xc1t.js +1 -0
- package/dist/canvas/chunks/classDiagram-v2-OCEON4UE-33x08xf2.js +1 -0
- package/dist/canvas/chunks/{cose-bilkent-JH36ORCC-nm39npq0.js → cose-bilkent-JH36ORCC-a428syda.js} +1 -1
- package/dist/canvas/chunks/cynefin-VYW2F7L2-8v6jxfz8.js +1 -0
- package/dist/canvas/chunks/{cynefinDiagram-MW4NZA55-vdxrwahz.js → cynefinDiagram-MW4NZA55-nspsqebj.js} +1 -1
- package/dist/canvas/chunks/{dagre-VZM6K2ZE-bqdm7wpd.js → dagre-VZM6K2ZE-8y6177fh.js} +2 -2
- package/dist/canvas/chunks/{diagram-7IWD3JNH-gs5gpr93.js → diagram-7IWD3JNH-vym028wn.js} +4 -4
- package/dist/canvas/chunks/{diagram-B4RE2ZJO-cgwjg47s.js → diagram-B4RE2ZJO-jddqb8sy.js} +1 -1
- package/dist/canvas/chunks/{diagram-LBJQPF4R-w3vahpav.js → diagram-LBJQPF4R-bjwbpkrn.js} +1 -1
- package/dist/canvas/chunks/{diagram-Q27KOJAE-42837z6h.js → diagram-Q27KOJAE-j6ph6hcx.js} +2 -2
- package/dist/canvas/chunks/{diagram-UB23O5K3-4fz83q59.js → diagram-UB23O5K3-p09w8jej.js} +1 -1
- package/dist/canvas/chunks/{ebnfDiagram-BXEA7PRR-zphtgegj.js → ebnfDiagram-BXEA7PRR-j975ycq5.js} +1 -1
- package/dist/canvas/chunks/{erDiagram-JOGREHBK-zvbbdxp4.js → erDiagram-JOGREHBK-sxp6hjn8.js} +5 -5
- package/dist/canvas/chunks/eventmodeling-45OFAUF4-xzfgn6xg.js +1 -0
- package/dist/canvas/chunks/flowDiagram-UKHOOZJN-2nsmkskb.js +1 -0
- package/dist/canvas/chunks/{ganttDiagram-PKOTCBZU-282jzycm.js → ganttDiagram-PKOTCBZU-4tv230y2.js} +2 -2
- package/dist/canvas/chunks/gitGraph-TEB2WS4Q-macbhand.js +1 -0
- package/dist/canvas/chunks/{gitGraphDiagram-DS77QQ5N-vqqy6p1b.js → gitGraphDiagram-DS77QQ5N-mqgmnw9g.js} +1 -1
- package/dist/canvas/chunks/{index-wgv7en21.js → index-037z5dz2.js} +2 -2
- package/dist/canvas/chunks/{index-w2mra17t.js → index-081n3har.js} +1 -1
- package/dist/canvas/chunks/{index-353m7b0p.js → index-5n03dmb9.js} +1 -1
- package/dist/canvas/chunks/{index-yw8h9vha.js → index-60pgzdqe.js} +1 -1
- package/dist/canvas/chunks/index-8g1vb57n.js +2 -0
- package/dist/canvas/chunks/{index-vv56h019.js → index-8rjes9r6.js} +1 -1
- package/dist/canvas/chunks/{index-nprm96xp.js → index-9022d1n9.js} +1 -1
- package/dist/canvas/chunks/{index-194m3hc3.js → index-9b02042t.js} +1 -1
- package/dist/canvas/chunks/{index-0rk4gp1g.js → index-ap4q4vez.js} +1 -1
- package/dist/canvas/chunks/{index-rh7nv68n.js → index-dyp2nhd3.js} +1 -1
- package/dist/canvas/chunks/index-frvta4tm.js +2 -0
- package/dist/canvas/chunks/{index-s4j678gj.js → index-h9ycj8n2.js} +1 -1
- package/dist/canvas/chunks/{index-fjtdggjn.js → index-mergmj97.js} +2 -2
- package/dist/canvas/chunks/index-nwsya6dj.js +301 -0
- package/dist/canvas/chunks/{index-3cy1bzwh.js → index-nz8qbd1p.js} +1 -1
- package/dist/canvas/chunks/{index-d3b3gqe9.js → index-qhfrazv3.js} +1 -1
- package/dist/canvas/chunks/{index-6qmsnxwy.js → index-v119nznk.js} +4 -4
- package/dist/canvas/chunks/{index-r2fyc9w1.js → index-vpt37m3d.js} +6 -6
- package/dist/canvas/chunks/{index-qj8fxwsf.js → index-y9ma6azy.js} +1 -1
- package/dist/canvas/chunks/{index-tb1wf525.js → index-zx0j3a2z.js} +26 -26
- package/dist/canvas/chunks/info-DKCQHKI2-a0ykzs9z.js +1 -0
- package/dist/canvas/chunks/{infoDiagram-6WML65LV-v1yvggqj.js → infoDiagram-6WML65LV-qv97qq6a.js} +2 -2
- package/dist/canvas/chunks/ishikawaDiagram-WSZJBQD7-p9306gh0.js +70 -0
- package/dist/canvas/chunks/{journeyDiagram-NVQOT4AX-zjcffveh.js → journeyDiagram-NVQOT4AX-sv67zats.js} +5 -5
- package/dist/canvas/chunks/{kanban-definition-27J2QSJJ-dakqtfp1.js → kanban-definition-27J2QSJJ-k2pfam6p.js} +1 -1
- package/dist/canvas/chunks/{mermaid.core-j2geswrd.js → mermaid.core-83r0fdce.js} +4 -4
- package/dist/canvas/chunks/{mindmap-definition-FAOFIHXS-142xhr3k.js → mindmap-definition-FAOFIHXS-vg2newm1.js} +1 -1
- package/dist/canvas/chunks/packet-7NZHBO7P-tqnabcdv.js +1 -0
- package/dist/canvas/chunks/{pegDiagram-VL7TDLO6-5wvk7vsd.js → pegDiagram-VL7TDLO6-k2h7zc5n.js} +1 -1
- package/dist/canvas/chunks/pie-RZYD4A2V-wke6gyhe.js +1 -0
- package/dist/canvas/chunks/{pieDiagram-7S7Q4E2Y-ztdhwycc.js → pieDiagram-7S7Q4E2Y-hg169p1v.js} +2 -2
- package/dist/canvas/chunks/{quadrantDiagram-CIZ2JOQS-c5p9gmg6.js → quadrantDiagram-CIZ2JOQS-bxtvsq0b.js} +5 -5
- package/dist/canvas/chunks/radar-I7S5WNFK-w7ka0drw.js +1 -0
- package/dist/canvas/chunks/railroad-3IZDKUUU-y3vg318x.js +1 -0
- package/dist/canvas/chunks/railroad-abnf-AHOZXSZD-6hqvcz3c.js +1 -0
- package/dist/canvas/chunks/railroad-ebnf-EBAXGLYW-vcae260m.js +1 -0
- package/dist/canvas/chunks/railroad-peg-LSFZ7HO6-0dbyme23.js +1 -0
- package/dist/canvas/chunks/{railroadDiagram-AXF67PYL-xkmqkjwf.js → railroadDiagram-AXF67PYL-njyhcp4p.js} +1 -1
- package/dist/canvas/chunks/{requirementDiagram-LRYGKXZP-9wm2dyaw.js → requirementDiagram-LRYGKXZP-2z6v09gm.js} +4 -4
- package/dist/canvas/chunks/{sankeyDiagram-W5VNT64P-2w19etgb.js → sankeyDiagram-W5VNT64P-15mzam0e.js} +1 -1
- package/dist/canvas/chunks/{sequenceDiagram-SI44F4Z6-0jn0vwmz.js → sequenceDiagram-SI44F4Z6-rbshyd2c.js} +12 -12
- package/dist/canvas/chunks/{sizeCapture-X5ZJPWSS-x75epwdq.js → sizeCapture-X5ZJPWSS-sg26xwts.js} +1 -1
- package/dist/canvas/chunks/{stateDiagram-OKZ733FA-schjpy6d.js → stateDiagram-OKZ733FA-6eahp98e.js} +1 -1
- package/dist/canvas/chunks/stateDiagram-v2-UEYNNEHI-tty0ggn5.js +1 -0
- package/dist/canvas/chunks/{swimlanes-SLNWSIFB-gkw4xce3.js → swimlanes-SLNWSIFB-ze5db10t.js} +1 -1
- package/dist/canvas/chunks/swimlanesDiagram-ULZ7WXOC-thze75gq.js +8 -0
- package/dist/canvas/chunks/{timeline-definition-Z64GVDOM-x7nkcy01.js → timeline-definition-Z64GVDOM-vnp7jyy8.js} +3 -3
- package/dist/canvas/chunks/treeView-QDETBFTQ-6ysffnm6.js +1 -0
- package/dist/canvas/chunks/treemap-6X3UGDF4-m3h9p066.js +1 -0
- package/dist/canvas/chunks/vennDiagram-T6HMQDX7-0qrnb7mj.js +34 -0
- package/dist/canvas/chunks/wardley-OPB4EBWU-dp37drwx.js +1 -0
- package/dist/canvas/chunks/{wardleyDiagram-T6FBY63Y-t1j52t9r.js → wardleyDiagram-T6FBY63Y-8nxg8wqt.js} +4 -4
- package/dist/canvas/chunks/{xychartDiagram-ELKLHX3M-38t16pme.js → xychartDiagram-ELKLHX3M-nj921e7s.js} +5 -5
- package/dist/canvas/global.css +94 -1
- package/dist/canvas/index.js +154 -145
- package/dist/canvas/mcp-app.html +600 -498
- package/dist/json-render/index.css +1 -1
- package/dist/types/client/canvas/BoardMoveDialog.d.ts +2 -0
- package/dist/types/client/canvas/EdgeEditor.d.ts +19 -0
- package/dist/types/client/canvas/GroupNavigation.d.ts +2 -0
- package/dist/types/client/canvas/TextPrompt.d.ts +4 -0
- package/dist/types/client/nodes/PromptNode.d.ts +1 -0
- package/dist/types/client/nodes/ViewerFrame.d.ts +1 -1
- package/dist/types/client/nodes/WorkCard.d.ts +7 -0
- package/dist/types/client/nodes/use-ax-surface-bridge.d.ts +1 -0
- package/dist/types/client/state/canvas-store.d.ts +15 -0
- package/dist/types/client/state/human-store.d.ts +2 -0
- package/dist/types/client/state/intent-bridge.d.ts +4 -2
- package/dist/types/client/state/relation-store.d.ts +11 -0
- package/dist/types/client/types.d.ts +1 -1
- package/dist/types/json-render/catalog.d.ts +2 -2
- package/dist/types/server/agent-presence.d.ts +1 -0
- package/dist/types/server/ax-interaction.d.ts +1 -0
- package/dist/types/server/ax-state-manager.d.ts +10 -2
- package/dist/types/server/board-local.d.ts +4 -0
- package/dist/types/server/board-move.d.ts +38 -0
- package/dist/types/server/canvas-db.d.ts +12 -2
- package/dist/types/server/canvas-operations.d.ts +5 -6
- package/dist/types/server/canvas-provenance.d.ts +1 -1
- package/dist/types/server/canvas-serialization.d.ts +1 -0
- package/dist/types/server/canvas-state.d.ts +84 -20
- package/dist/types/server/card-relocation.d.ts +6 -0
- package/dist/types/server/context-reads.d.ts +3 -1
- package/dist/types/server/human-presence.d.ts +1 -1
- package/dist/types/server/index.d.ts +16 -5
- package/dist/types/server/intent-registry.d.ts +8 -4
- package/dist/types/server/knowledge-lifecycle.d.ts +4 -2
- package/dist/types/server/mutation-history.d.ts +7 -5
- package/dist/types/server/operations/registry.d.ts +2 -0
- package/dist/types/server/trace-manager.d.ts +1 -0
- package/dist/types/shared/ax-kinds.d.ts +6 -0
- package/dist/types/shared/ax-surface-protocol.d.ts +8 -0
- package/dist/types/shared/human-presence.d.ts +1 -0
- package/dist/types/shared/lifecycle-status.d.ts +2 -0
- package/docs/RELEASE.md +21 -14
- package/docs/agent-plugin.md +16 -2
- package/docs/amp-plugin.md +271 -0
- package/docs/cli.md +42 -3
- package/docs/design/GuestName.dc.html +50 -0
- package/docs/design/PluginLogo.svg +7 -0
- package/docs/design/WorkCards.dc.html +39 -0
- package/docs/design/canvas.json +16 -0
- package/docs/design/plugin-logo.png +0 -0
- package/docs/design.md +111 -8
- package/docs/evals/agents-md-sections.md +38 -0
- package/docs/http-api.md +128 -10
- package/docs/mcp.md +61 -9
- package/docs/node-types.md +71 -1
- package/docs/plans/plan-009-tech-debt-backlog.md +1 -1
- package/docs/plans/plan-019-post-0.9-roadmap.md +44 -20
- package/docs/plans/plan-020-wave-5-work-planning.md +553 -0
- package/docs/product-vision-2026-09.md +33 -17
- package/docs/sdk.md +18 -0
- package/package.json +6 -3
- package/plugins/pmx-canvas/assets/preview.png +0 -0
- package/plugins/pmx-canvas/com.github.copilot/extensions/pmx-canvas/extension.mjs +3 -1
- package/plugins/pmx-canvas/com.github.copilot/extensions/pmx-canvas/runtime.json +1 -1
- package/plugins/pmx-canvas/plugin.json +2 -2
- package/plugins/pmx-canvas/runtime.json +1 -1
- package/plugins/pmx-canvas/tools.json +440 -18
- package/skills/data-analysis/SKILL.md +13 -26
- package/skills/frontend-design/LICENSE.txt +177 -0
- package/skills/frontend-design/SKILL.md +3 -0
- package/skills/pmx-canvas/SKILL.md +232 -842
- package/skills/pmx-canvas/evals/evals.json +26 -3
- package/skills/pmx-canvas/references/full-reference.md +80 -20
- package/skills/pmx-canvas/references/html-primitives.md +7 -0
- package/skills/pmx-canvas/references/installing-pmx-canvas.md +6 -6
- package/skills/pmx-canvas/references/tours-and-recording.md +29 -2
- package/skills/pmx-canvas/references/workbench-workflows.md +900 -0
- package/skills/pmx-canvas-testing/SKILL.md +7 -5
- package/skills/published-consumer-e2e/SKILL.md +25 -8
- package/skills/published-consumer-e2e/scripts/run-published-consumer-e2e.sh +51 -75
- package/skills/web-artifacts-builder/LICENSE.txt +202 -0
- package/skills/web-artifacts-builder/SKILL.md +6 -0
- package/skills/web-artifacts-builder/scripts/init-artifact.sh +2 -2
- package/src/cli/commands/apps.ts +1 -0
- package/src/cli/commands/boards.ts +30 -0
- package/src/client/App.tsx +20 -4
- package/src/client/canvas/AttentionHistory.tsx +10 -2
- package/src/client/canvas/BoardMoveDialog.tsx +225 -0
- package/src/client/canvas/CanvasNode.tsx +45 -2
- package/src/client/canvas/CanvasViewport.tsx +38 -9
- package/src/client/canvas/ContextMenu.tsx +34 -12
- package/src/client/canvas/EdgeEditor.tsx +149 -0
- package/src/client/canvas/EdgeLayer.tsx +87 -16
- package/src/client/canvas/ExpandedNodeOverlay.tsx +4 -0
- package/src/client/canvas/GroupNavigation.tsx +85 -0
- package/src/client/canvas/RelationsPanel.tsx +9 -0
- package/src/client/canvas/SelectionBar.tsx +21 -0
- package/src/client/canvas/SessionPanel.tsx +35 -1
- package/src/client/canvas/TextPrompt.tsx +18 -1
- package/src/client/canvas/TopBar.tsx +30 -0
- package/src/client/canvas/canvas-area.ts +1 -1
- package/src/client/nodes/ExtAppFrame.tsx +26 -10
- package/src/client/nodes/MarkdownNode.tsx +6 -7
- package/src/client/nodes/PromptNode.tsx +32 -3
- package/src/client/nodes/StatusNode.tsx +12 -0
- package/src/client/nodes/StatusSummary.tsx +11 -0
- package/src/client/nodes/ViewerFrame.tsx +21 -10
- package/src/client/nodes/WorkCard.tsx +175 -0
- package/src/client/nodes/use-ax-surface-bridge.ts +18 -14
- package/src/client/state/attention-bridge.ts +5 -0
- package/src/client/state/attention-store.ts +1 -0
- package/src/client/state/canvas-store.ts +185 -15
- package/src/client/state/human-store.ts +22 -2
- package/src/client/state/intent-bridge.ts +19 -5
- package/src/client/state/relation-store.ts +127 -1
- package/src/client/theme/global.css +94 -1
- package/src/client/types.ts +1 -0
- package/src/mcp/server.ts +13 -3
- package/src/server/agent-presence.ts +43 -23
- package/src/server/ax-flow-loop.ts +6 -0
- package/src/server/ax-gate-ttl.ts +8 -1
- package/src/server/ax-interaction.ts +16 -10
- package/src/server/ax-state-manager.ts +17 -4
- package/src/server/ax-wait.ts +20 -6
- package/src/server/board-export.ts +19 -6
- package/src/server/board-local.ts +20 -0
- package/src/server/board-move.ts +297 -0
- package/src/server/canvas-db.ts +249 -158
- package/src/server/canvas-operations.ts +139 -109
- package/src/server/canvas-schema.ts +21 -0
- package/src/server/canvas-serialization.ts +2 -0
- package/src/server/canvas-state.ts +792 -159
- package/src/server/card-relocation.ts +53 -0
- package/src/server/code-graph.ts +4 -3
- package/src/server/context-reads.ts +83 -55
- package/src/server/demo-state.json +35 -15
- package/src/server/file-watcher.ts +30 -10
- package/src/server/human-presence.ts +18 -5
- package/src/server/index.ts +35 -15
- package/src/server/intent-registry.ts +43 -5
- package/src/server/knowledge-lifecycle.ts +32 -9
- package/src/server/lifecycle-status.ts +29 -1
- package/src/server/mcp-app-runtime.ts +26 -7
- package/src/server/mutation-history.ts +37 -8
- package/src/server/operations/composites.ts +6 -3
- package/src/server/operations/mcp-contracts.ts +15 -0
- package/src/server/operations/mcp.ts +36 -9
- package/src/server/operations/ops/annotation.ts +22 -1
- package/src/server/operations/ops/ax-await.ts +1 -0
- package/src/server/operations/ops/ax-timeline.ts +28 -2
- package/src/server/operations/ops/batch.ts +25 -11
- package/src/server/operations/ops/boards.ts +44 -3
- package/src/server/operations/ops/nodes.ts +70 -0
- package/src/server/operations/ops/query.ts +32 -3
- package/src/server/operations/ops/snapshots.ts +1 -0
- package/src/server/operations/registry.ts +49 -4
- package/src/server/server.ts +62 -16
- package/src/server/tour-control.ts +37 -12
- package/src/server/trace-manager.ts +4 -0
- package/src/server/web-artifacts/scripts/init-artifact.sh +2 -2
- package/src/shared/agent-context.ts +7 -1
- package/src/shared/auto-arrange.ts +5 -4
- package/src/shared/ax-kinds.ts +13 -0
- package/src/shared/ax-surface-protocol.ts +22 -0
- package/src/shared/human-presence.ts +1 -0
- package/src/shared/lifecycle-status.ts +2 -0
- package/dist/canvas/chunks/architecture-TIHT7OUA-9tffvpsv.js +0 -1
- package/dist/canvas/chunks/classDiagram-JCYQIIEL-nc6g5x1r.js +0 -1
- package/dist/canvas/chunks/classDiagram-v2-OCEON4UE-0qnbpwvh.js +0 -1
- package/dist/canvas/chunks/cynefin-VYW2F7L2-ys8p46ts.js +0 -1
- package/dist/canvas/chunks/eventmodeling-45OFAUF4-v9q6dn4c.js +0 -1
- package/dist/canvas/chunks/flowDiagram-UKHOOZJN-yrr5z8tc.js +0 -1
- package/dist/canvas/chunks/gitGraph-TEB2WS4Q-kdwb8m0a.js +0 -1
- package/dist/canvas/chunks/index-1r72hdzb.js +0 -301
- package/dist/canvas/chunks/index-g3pwnqeb.js +0 -2
- package/dist/canvas/chunks/index-rft2hcz5.js +0 -2
- package/dist/canvas/chunks/info-DKCQHKI2-wpzs6sz3.js +0 -1
- package/dist/canvas/chunks/ishikawaDiagram-WSZJBQD7-5hnq1a9p.js +0 -70
- package/dist/canvas/chunks/packet-7NZHBO7P-xn439f0s.js +0 -1
- package/dist/canvas/chunks/pie-RZYD4A2V-0kf16rwh.js +0 -1
- package/dist/canvas/chunks/radar-I7S5WNFK-0g2pz36t.js +0 -1
- package/dist/canvas/chunks/railroad-3IZDKUUU-fcaran6j.js +0 -1
- package/dist/canvas/chunks/railroad-abnf-AHOZXSZD-wgdya41q.js +0 -1
- package/dist/canvas/chunks/railroad-ebnf-EBAXGLYW-gy07a4ka.js +0 -1
- package/dist/canvas/chunks/railroad-peg-LSFZ7HO6-ewk6wtkh.js +0 -1
- package/dist/canvas/chunks/stateDiagram-v2-UEYNNEHI-k8sfp2e7.js +0 -1
- package/dist/canvas/chunks/swimlanesDiagram-ULZ7WXOC-nqysw67j.js +0 -8
- package/dist/canvas/chunks/treeView-QDETBFTQ-cesw6gp0.js +0 -1
- package/dist/canvas/chunks/treemap-6X3UGDF4-zdv4knp9.js +0 -1
- package/dist/canvas/chunks/vennDiagram-T6HMQDX7-x8dqn9yf.js +0 -34
- package/dist/canvas/chunks/wardley-OPB4EBWU-44pdddez.js +0 -1
|
@@ -536,8 +536,8 @@
|
|
|
536
536
|
{
|
|
537
537
|
"id": 22,
|
|
538
538
|
"name": "tour-authoring-and-capture",
|
|
539
|
-
"prompt": "
|
|
540
|
-
"expected_output": "
|
|
539
|
+
"prompt": "On the current board, turn the Overview group and the Results card into a presentation tour, then tell me how to capture it deterministically at 1920x1080. I want a one-second overview move, a zero-duration jump to Results, and no changes to another viewer's camera. That viewer is already presenting.",
|
|
540
|
+
"expected_output": "Verifies the current board, resolves the real group/card IDs, persists one tour with canvas_view set-tour, and uses valid node targets with durations 1 and 0. Distinguishes viewer-local rendering/free pan and isolated recording from shared tour navigation and exit. Does not call tour-go, tour-exit or move, switch boards, or use human Next/Back controls. Explains that present:false still advances viewers already presenting. Gives deterministic record guidance using the same saved tour, --resolution 1920x1080, --present, and a new output path after verifying the matching daemon/workspace and Chrome/Bun WebView prerequisites. Does not invent a separate recording timeline or use realtime --duration.",
|
|
541
541
|
"assertions": [
|
|
542
542
|
{
|
|
543
543
|
"name": "persists-valid-shared-tour-model",
|
|
@@ -556,7 +556,30 @@
|
|
|
556
556
|
},
|
|
557
557
|
{
|
|
558
558
|
"name": "preserves-viewer-camera",
|
|
559
|
-
"description": "
|
|
559
|
+
"description": "Keeps the already-presenting viewer unchanged by avoiding shared tour-go/tour-exit/move, board switching and human navigation; distinguishes isolated capture from the shared cursor and does not treat present:false as isolation",
|
|
560
|
+
"type": "output_check"
|
|
561
|
+
}
|
|
562
|
+
]
|
|
563
|
+
},
|
|
564
|
+
{
|
|
565
|
+
"id": 44,
|
|
566
|
+
"name": "presenter-superseded-is-not-applied-navigation",
|
|
567
|
+
"prompt": "In a disposable board, verify optional presenter ordering. Send a valid go with intent 2, then an exit with intent 1 for the same document and activation. Repeat with a stale activation. Include an independent-document control and an ordinary unfenced call. Can ok:true or the SDK exit return prove the stale command ran?",
|
|
568
|
+
"expected_output": "Reads the actual activation stamps and uses positive safe-integer intents with independent document IDs. Checks applied delivery stamps and cursor/event behavior. Older intent and stale activation return ok:true,superseded:true without a navigation event or cursor change. Independent and unfenced controls still apply. Explains that the fence orders requests, does not grant authority or isolate viewers, and that SDK exit returns void while fenced go may return superseded:true. Does not count eval definitions as executed evidence.",
|
|
569
|
+
"assertions": [
|
|
570
|
+
{
|
|
571
|
+
"name": "checks-superseded-side-effects",
|
|
572
|
+
"description": "Observes no navigation event or cursor change for stale intent and activation, rather than treating ok:true as applied navigation",
|
|
573
|
+
"type": "output_check"
|
|
574
|
+
},
|
|
575
|
+
{
|
|
576
|
+
"name": "positive-controls-and-stamps",
|
|
577
|
+
"description": "Verifies applied epoch/generation/sequence for the newer request and exercises independent-document and unfenced calls without inventing mandatory presenter credentials",
|
|
578
|
+
"type": "output_check"
|
|
579
|
+
},
|
|
580
|
+
{
|
|
581
|
+
"name": "sdk-return-boundary",
|
|
582
|
+
"description": "Distinguishes fenced go's superseded result from exit's void return and avoids claiming viewer isolation or authority from the fence",
|
|
560
583
|
"type": "output_check"
|
|
561
584
|
}
|
|
562
585
|
]
|
|
@@ -349,7 +349,7 @@ The CLI targets `http://localhost:4313` by default. Override with `PMX_CANVAS_UR
|
|
|
349
349
|
| Type | Purpose | When to use |
|
|
350
350
|
|------|---------|-------------|
|
|
351
351
|
| `markdown` | Rich formatted content | Explanations, documentation, notes, findings |
|
|
352
|
-
| `status` | Compact
|
|
352
|
+
| `status` | Compact status or deliberately authored work card | Work plans with `data.workState`; phase/tool status without it |
|
|
353
353
|
| `file` | Live file viewer (auto-watches) | Show source code with live updates on file change |
|
|
354
354
|
| `image` | Image display | Screenshots, diagrams, charts |
|
|
355
355
|
| `context` | Context card | Key context the human should see |
|
|
@@ -419,6 +419,9 @@ contract). Their meaning comes from the node **type** and value instead: a `stat
|
|
|
419
419
|
`waiting` — e.g. `review` → green, `running` → accent; an unrecognized phase renders gray), and a
|
|
420
420
|
`trace` node from its `status` field (`success` → green, `failed` → red, `running` → accent). To
|
|
421
421
|
color an arbitrary region, group the nodes and set the group's `color`.
|
|
422
|
+
Authored status cards with `data.workState` instead use the work-state glyph and label:
|
|
423
|
+
blocked uses the warning token, done the success token, and cancelled the muted token.
|
|
424
|
+
Do not set arbitrary colors to encode work state.
|
|
422
425
|
|
|
423
426
|
When you do set a color (group/graph), use this palette consistently to convey meaning:
|
|
424
427
|
- **Green** (`#22c55e`) — success, done, healthy
|
|
@@ -455,9 +458,9 @@ enforce conditional requirements. Non-registry tools use `tools/list` instead.
|
|
|
455
458
|
| `canvas_edge` | `add` · `update` · `remove` | Connect / edit / disconnect nodes |
|
|
456
459
|
| `canvas_group` | `create` · `add` · `ungroup` | Manage spatial group containers |
|
|
457
460
|
| `canvas_history` | `undo` · `redo` | Time travel through the mutation ring buffer |
|
|
458
|
-
| `canvas_board` | `list` · `get` · `create` · `create-from` · `open` · `update` · `pin` · `unpin` · `knowledge-list` · `category-set` · `category-remove` · `folder-set` · `relation-preset-set` · `relation-preset-remove` | Boards and workspace categories/folder properties/shared relation templates; knowledge writes never open a board. Template edits/deletion never rewrite boards or connections. `category-remove` takes `id` and refuses explicit folder assignments, including empty folders; reassign or clear them first. |
|
|
461
|
+
| `canvas_board` | `list` · `get` · `create` · `create-from` · `move-selection` · `open` · `update` · `pin` · `unpin` · `knowledge-list` · `category-set` · `category-remove` · `folder-set` · `relation-preset-set` · `relation-preset-remove` | Boards and workspace categories/folder properties/shared relation templates; knowledge writes never open a board. Template edits/deletion never rewrite boards or connections. `category-remove` takes `id` and refuses explicit folder assignments, including empty folders; reassign or clear them first. |
|
|
459
462
|
| `canvas_snapshot` | `save` · `list` · `restore` · `restore-node` · `delete` · `gc` · `diff` | Named snapshots: save/list/restore/delete, garbage-collect old ones, diff current canvas vs a snapshot (`diff` takes `snapshot`, not `id`); `restore-node` puts one card (`nodeId`) back to its content in snapshot `id` |
|
|
460
|
-
| `canvas_view` | `arrange` · `focus` · `fit` · `clear` · `remove-annotation` · `get-tour` · `set-tour` · `tour-go` · `tour-exit` · `move` | Auto-arrange, pan-to-node, fit viewport, clear the board,
|
|
463
|
+
| `canvas_view` | `arrange` · `focus` · `fit` · `clear` · `add-annotation` · `remove-annotation` · `get-tour` · `set-tour` · `tour-go` · `tour-exit` · `move` | Auto-arrange, pan-to-node, fit viewport, clear the board, draw/write/erase annotations, read/persist ordered presentation stops (`tour: null` derives group order), present a stop / exit, ease the camera to a node, rect or viewport (never an undo step) |
|
|
461
464
|
| `canvas_query` | `context` · `graph` · `search` · `layout` · `validate` | Read the budgeted brief or summary-only connected memory graph, find nodes, read full layout, or **`validate`** collisions / containment / dangling edges |
|
|
462
465
|
| `canvas_app` | `open-mcp-app` · `diagram` · `build-artifact` | Hosted MCP apps, the Excalidraw diagram preset, and bundled web artifacts (folds `canvas_open_mcp_app` / `canvas_add_diagram` / `canvas_build_web_artifact`) |
|
|
463
466
|
| `canvas_webview` | `status` · `start` · `stop` · `resize` · `evaluate` | Headless Bun.WebView automation for the workbench (folds the `canvas_webview_*` / `canvas_resize` / `canvas_evaluate` tools) |
|
|
@@ -498,6 +501,18 @@ group structure are optional; fresh IDs are allocated; pins, AX state, and
|
|
|
498
501
|
history are not copied; the source remains unchanged and the new board inactive.
|
|
499
502
|
The new board records `previousBoardId` pointing to its source.
|
|
500
503
|
|
|
504
|
+
For an identity-preserving move, use `canvas_board` action `move-selection`, not
|
|
505
|
+
copy/delete. Read the active source board's `contentRevision` with `get`. Preview
|
|
506
|
+
with `sourceBoardId`, `nodeIds`, `name`, `expectedRevision: contentRevision`,
|
|
507
|
+
`requestId` and `preview: true`; inspect blockers and notices before committing
|
|
508
|
+
with the same inputs without `preview`. Retry an uncertain response with the same
|
|
509
|
+
request ID and inputs. Group descendants move together; unsafe bindings refuse
|
|
510
|
+
the entire move. Cards retain identities, pins, relations and review history,
|
|
511
|
+
without new validation or read evidence. The source stays open with a portal to
|
|
512
|
+
the new board. Pre-move Undo/Redo is cleared on affected boards; older snapshots
|
|
513
|
+
remain inspectable but cannot be restored across the move. Open the returned
|
|
514
|
+
`destinationBoardId` only when navigation is wanted.
|
|
515
|
+
|
|
501
516
|
### Connected memory (wave 2)
|
|
502
517
|
|
|
503
518
|
Home Folders, Map and Graph, wiki links/backlinks, and brief discovery share one
|
|
@@ -702,8 +717,33 @@ delete+recreate; preserves edges, pins, position)
|
|
|
702
717
|
|
|
703
718
|
**`canvas_node { action: "get", id }`** — Get a single node's full data by `id`.
|
|
704
719
|
|
|
705
|
-
**`canvas_view { action: "
|
|
706
|
-
|
|
720
|
+
**`canvas_view { action: "add-annotation", points, … }`** — Draw freehand ink with at least two
|
|
721
|
+
world-coordinate points, or set `type: "text"`, `text` and one point to write a note.
|
|
722
|
+
`width` is stroke width (default 4, clamped to 1–24) or font size (default 24,
|
|
723
|
+
clamped to 1–96). `color` defaults to `currentColor`, the theme's annotation ink;
|
|
724
|
+
explicit colors must be `#rrggbb`. Text is trimmed to 240 characters, labels to 160.
|
|
725
|
+
Bounds and creation time are server-derived.
|
|
726
|
+
|
|
727
|
+
Freehand points render as straight segments with round caps/joins, without automatic
|
|
728
|
+
smoothing. Sample curves densely for smooth-looking outlines and loops. Cursor updates
|
|
729
|
+
through `canvas_ax_state { action: "set-presence", cursor: { x, y } }` are separate,
|
|
730
|
+
ephemeral presence, not drawing gestures; reuse your writer identity without attaching
|
|
731
|
+
a session. An annotation appears complete on creation, not as a streaming stroke.
|
|
732
|
+
See [Shared ink and questions](workbench-workflows.md#shared-ink-and-questions).
|
|
733
|
+
|
|
734
|
+
Use an explicit `id` for retries: equal normalized content returns the existing mark
|
|
735
|
+
without another Undo entry, while different content conflicts. After erasing or Undo,
|
|
736
|
+
adding the ID creates a mark again; this is not a durable creation receipt.
|
|
737
|
+
|
|
738
|
+
**`canvas_view { action: "remove-annotation", id }`** — Erase a whole human or agent mark,
|
|
739
|
+
not the underlying card. An absent mark returns not-found. Context gives you IDs;
|
|
740
|
+
inspect the canvas first when identifying a mark by shape or location.
|
|
741
|
+
CLI and MCP batches accept `annotation.add` / `annotation.remove` with the same arguments.
|
|
742
|
+
|
|
743
|
+
Humans and agents share this layer. Use marks when helpful, not for every task.
|
|
744
|
+
The human may answer in the external agent host's composer; no PMX session,
|
|
745
|
+
PMX composer or reply card is required. Marks are not approval gates, and drawing
|
|
746
|
+
or erasing does not answer a question or execute a loop. Existing scope fences apply.
|
|
707
747
|
|
|
708
748
|
**`canvas_node { action: "update", id, refresh: true }`** — Re-fetch the URL stored on a `webpage` node
|
|
709
749
|
- `id` (required): webpage node to refresh
|
|
@@ -962,17 +1002,17 @@ below operates on the live canvas state through the `canvas_webview` composite.
|
|
|
962
1002
|
Useful workbench selectors:
|
|
963
1003
|
- Nodes: `.canvas-node`, `.canvas-node.active`, `.canvas-node.context-pinned`, `.canvas-node.group-node`
|
|
964
1004
|
- Node internals: `.node-title`, `.node-titlebar`, `.node-body`, `.node-type-badge`, `.node-controls`
|
|
965
|
-
- Annotations: `.annotation-layer path` renders
|
|
966
|
-
to inspect or screenshot
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
`
|
|
1005
|
+
- Annotations: `.annotation-layer path` renders shared freehand ink; `.annotation-layer text`
|
|
1006
|
+
renders text notes. Use WebView to inspect or screenshot shapes; MCP/context resources
|
|
1007
|
+
expose IDs, text, labels, targets and bounds, not raw stroke geometry. Humans use the
|
|
1008
|
+
rail's Draw / Text note / Eraser tools; agents use `canvas_view` actions
|
|
1009
|
+
`add-annotation` / `remove-annotation` on the same layer.
|
|
970
1010
|
- Canvas chrome (rail-chrome-v2): `.tool-rail`, `.top-bar` (`.connection-dot`, `.agent-chip`,
|
|
971
1011
|
`.gate-badge`, `.context-chip`, `.external-indicator`, `.start-session-btn`),
|
|
972
1012
|
`.connection-banner`, `.canvas-region`, `.session-panel`, `.command-bar`, `.selection-bar`,
|
|
973
1013
|
`.activity-feed`, `.writers-sheet`, `.session-receipt`, `.snapshot-panel` (the History
|
|
974
1014
|
drawer), `.minimap`, `.empty-state`, `.command-palette`, `.expanded-overlay-panel`.
|
|
975
|
-
- Presence: `.agent-cursor` (attached agent), `.human-cursor` (other tabs), `.scope-fence`,
|
|
1015
|
+
- Presence: `.agent-cursor` (attached or external agent), `.human-cursor` (other tabs), `.scope-fence`,
|
|
976
1016
|
`.canvas-node.agent-mutating` (shimmer), `.node-yield-pill`.
|
|
977
1017
|
- Groups: `.canvas-node.group-node` with `.group-name-pill`, `.group-actions`, `.group-chip`
|
|
978
1018
|
(collapsed); `.drop-pill` while a dragged node would join/leave a group; `.edge-hint-pill`
|
|
@@ -1449,7 +1489,7 @@ The `canvas://spatial-context` resource reveals how the human has organized info
|
|
|
1449
1489
|
This implies sequence or priority.
|
|
1450
1490
|
- **Pinned neighborhoods** — For each pinned node, nearby unpinned nodes are listed. These
|
|
1451
1491
|
are the human's implicit context — things they consider related to what they pinned.
|
|
1452
|
-
- **Annotations** —
|
|
1492
|
+
- **Annotations** — Shared markup is summarized by ID, label, text, target and bounds, e.g. an
|
|
1453
1493
|
annotation over a node or empty canvas region. Use WebView (`canvas_webview { action: "start" }` +
|
|
1454
1494
|
`canvas_webview { action: "evaluate" }`/`canvas_screenshot`) when you need to see whether the mark is an
|
|
1455
1495
|
arrow, line, circle, or other drawn shape. Remove known annotations with
|
|
@@ -1575,15 +1615,35 @@ Show system components and how they interact:
|
|
|
1575
1615
|
|
|
1576
1616
|
### Task Plan with Dependencies
|
|
1577
1617
|
|
|
1578
|
-
|
|
1618
|
+
Show useful work deliberately, not a card per task or event. Ordinary work cards are authored
|
|
1619
|
+
node data, not AX work items. They require no session and create no approval or execution.
|
|
1620
|
+
|
|
1621
|
+
1. Create a `status` node with `data.workState`: `todo`, `in-progress`, `blocked`, `done` or
|
|
1622
|
+
`cancelled`. Use string `data.detail` for context and optional `data.progress` from 0 to 100.
|
|
1623
|
+
Progress is independent of state: Done does not imply 100%; `null` clears progress.
|
|
1624
|
+
2. Update the same card through `canvas_node { action: "update", id, data: { ... } }`.
|
|
1625
|
+
Include `expectedBoardId` and `expectedContentRevision` when an edit depends on a prior read.
|
|
1626
|
+
3. Connect steps, dependencies, alternatives and intentional loops with existing relations.
|
|
1627
|
+
A drawn loop does not execute. Group distinct phases when useful, then inspect readability.
|
|
1628
|
+
4. Humans use **New work card** from the background menu and **Edit/Save/Cancel** inside the card.
|
|
1629
|
+
Drafts and pending/refused saves survive focus-mode open/close, but not a page reload.
|
|
1630
|
+
The editor's temporary growth does not resize the saved card.
|
|
1631
|
+
|
|
1632
|
+
MCP creation:
|
|
1633
|
+
|
|
1634
|
+
```json
|
|
1635
|
+
{"action":"add","type":"status","title":"Verify","data":{"workState":"todo","detail":"Run browser checks"}}
|
|
1636
|
+
```
|
|
1637
|
+
|
|
1638
|
+
CLI creation uses structured batch data, not `node add --data` (that flag is for graph series):
|
|
1639
|
+
|
|
1640
|
+
```bash
|
|
1641
|
+
pmx-canvas batch --json '[{"op":"node.add","args":{"type":"status","title":"Verify","data":{"workState":"todo","detail":"Run browser checks"}}}]'
|
|
1642
|
+
```
|
|
1579
1643
|
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
|
|
1583
|
-
satisfied ones
|
|
1584
|
-
4. Update status nodes as work progresses using `canvas_node { action: "update" }`
|
|
1585
|
-
5. Arrange with `flow` layout to show the dependency chain left-to-right
|
|
1586
|
-
6. Group related tasks if the plan has distinct phases
|
|
1644
|
+
Without `data.workState`, status cards retain their phase/tool display. Session-task linking
|
|
1645
|
+
is not provided by these authored cards. Questions can be drawn or written beside the plan;
|
|
1646
|
+
the human can answer in the external agent host's composer, without a PMX reply card.
|
|
1587
1647
|
|
|
1588
1648
|
### Code Exploration
|
|
1589
1649
|
|
|
@@ -110,6 +110,13 @@ agent.
|
|
|
110
110
|
- `interaction-prototype` exposes live controls and copyable config for implementation tuning.
|
|
111
111
|
- Tell the human which copy/export button to use, then ask them to paste the result back if you need to act on edits.
|
|
112
112
|
|
|
113
|
+
The card menu also offers **Copy JSON** for non-presentation HTML primitives. Open the viewer
|
|
114
|
+
first: this reads its current interactive state, preferring the expanded frame when present,
|
|
115
|
+
not a stale export of saved node data. The reply is bound to the frame source, document token
|
|
116
|
+
and request ID; the parent workbench requests clipboard access from the human's click.
|
|
117
|
+
Clipboard permission or host limitations can still refuse the copy and show an error.
|
|
118
|
+
This does not persist edits, support arbitrary raw HTML, or replace the per-format buttons above.
|
|
119
|
+
|
|
113
120
|
## Sandbox And Persistence
|
|
114
121
|
|
|
115
122
|
- Primitive output runs inside the existing HTML iframe sandbox with scripts allowed but no same-origin access.
|
|
@@ -4,7 +4,7 @@ Use this reference when the `pmx-canvas` skill is installed but the `pmx-canvas`
|
|
|
4
4
|
|
|
5
5
|
## Prerequisites and version
|
|
6
6
|
|
|
7
|
-
The examples pin **PMX Canvas 0.
|
|
7
|
+
The examples pin **PMX Canvas 0.12.0**, which requires **Bun >=1.4.4** even when
|
|
8
8
|
installed through npm: the CLI runs through Bun, not Node. Check `bun --version`
|
|
9
9
|
first. If missing or older, follow the [Bun installation instructions](https://bun.sh/docs/installation)
|
|
10
10
|
with the user's authorization. Ensure Bun is on the MCP host's PATH as well as the
|
|
@@ -22,11 +22,11 @@ in `SKILL.md`. Do not pair newer checkout guidance with an older runtime unknowi
|
|
|
22
22
|
## Install from npm
|
|
23
23
|
|
|
24
24
|
```bash
|
|
25
|
-
npm install -g pmx-canvas@0.
|
|
25
|
+
npm install -g pmx-canvas@0.12.0
|
|
26
26
|
pmx-canvas --version
|
|
27
27
|
```
|
|
28
28
|
|
|
29
|
-
Without a global install, use `bunx pmx-canvas@0.
|
|
29
|
+
Without a global install, use `bunx pmx-canvas@0.12.0` in place of `pmx-canvas` in
|
|
30
30
|
the commands below. Do not use unpinned `bunx pmx-canvas` for a version-specific check.
|
|
31
31
|
|
|
32
32
|
## Choose the workspace and target
|
|
@@ -96,7 +96,7 @@ discards empty env values, remove `PMX_CANVAS_URL` from its launch environment i
|
|
|
96
96
|
"mcpServers": {
|
|
97
97
|
"canvas": {
|
|
98
98
|
"command": "bunx",
|
|
99
|
-
"args": ["pmx-canvas@0.
|
|
99
|
+
"args": ["pmx-canvas@0.12.0", "--mcp"],
|
|
100
100
|
"env": {
|
|
101
101
|
"PMX_CANVAS_WORKSPACE_ROOT": "/absolute/path/to/project",
|
|
102
102
|
"PMX_CANVAS_PORT": "14313",
|
|
@@ -140,7 +140,7 @@ Amp executes, not only on the user's laptop. Merge this into that workspace's
|
|
|
140
140
|
"amp.mcpServers": {
|
|
141
141
|
"canvas": {
|
|
142
142
|
"command": "bunx",
|
|
143
|
-
"args": ["pmx-canvas@0.
|
|
143
|
+
"args": ["pmx-canvas@0.12.0", "--mcp"],
|
|
144
144
|
"includeTools": ["canvas_*"],
|
|
145
145
|
"env": {
|
|
146
146
|
"PMX_CANVAS_WORKSPACE_ROOT": "/absolute/path/to/project",
|
|
@@ -174,7 +174,7 @@ The agent must not run this approval itself or move the command to global settin
|
|
|
174
174
|
`--mcp-config` to bypass workspace trust. Approval authorizes execution of this MCP
|
|
175
175
|
command; it is not a new Canvas import consent or permission to mutate arbitrary boards.
|
|
176
176
|
After approval, reload MCP connections (`reload_mcp` in Amp) and require `connected`.
|
|
177
|
-
Discover `canvas` tools with `tool_search`; the full unfiltered 0.
|
|
177
|
+
Discover `canvas` tools with `tool_search`; the full unfiltered 0.12.0 server has 25 tools,
|
|
178
178
|
including `canvas_help`. If still absent, inspect the server status, command/PATH and target instead
|
|
179
179
|
of reinstalling blindly. See [Amp MCP documentation](https://ampcode.com/docs/customize/mcp).
|
|
180
180
|
|
|
@@ -31,8 +31,10 @@ Persist a tour with `canvas_view { action: "set-tour", tour: { stops: [...] } }`
|
|
|
31
31
|
Open `/workbench?present=1` for chrome-free viewing. Right, Down, or Space advances; Left or Up
|
|
32
32
|
goes back; Escape or **Exit presentation** exits. Right-drag pans and interrupts an ongoing
|
|
33
33
|
transition without editing cards. Stops do not auto-advance. A missing node target reports an
|
|
34
|
-
error and may be skipped.
|
|
35
|
-
|
|
34
|
+
error and may be skipped. Camera rendering and free pan are viewer-local, but human Back/Next
|
|
35
|
+
and arrow keys advance the shared cursor for all presenting viewers; Exit leaves presentation
|
|
36
|
+
everywhere. `present: false` does not isolate navigation from another presenting viewer.
|
|
37
|
+
Deterministic capture uses its own viewer and ignores live navigation. Recording hides the exit control.
|
|
36
38
|
|
|
37
39
|
Tours are board-scoped, persist with that board and its snapshots, participate in undo, and clear
|
|
38
40
|
with the board. Setting `tour: null` resets to a derived tour: groups ordered by y, then x, then
|
|
@@ -54,6 +56,31 @@ viewport. Tour steps and moves never enter undo history, never count as agent wr
|
|
|
54
56
|
allowed under a scope fence. Viewers with reduced motion jump instead of animating; a
|
|
55
57
|
deterministic capture ignores both.
|
|
56
58
|
|
|
59
|
+
If another viewer's camera must stay unchanged, do not send `tour-go`, `tour-exit` or `move`,
|
|
60
|
+
or use the human shared navigation controls. Author stops and capture them in the separate
|
|
61
|
+
recording viewer instead. Verify isolation with another viewer already presenting, not only
|
|
62
|
+
an ordinary canvas tab.
|
|
63
|
+
|
|
64
|
+
### Optional presenter ordering fence
|
|
65
|
+
|
|
66
|
+
`tour-go` and `tour-exit` accept `presenter: { clientId, intent, catalogEpoch, boardGeneration }`.
|
|
67
|
+
Use a distinct `clientId` per document, an increasing positive safe-integer `intent` per gesture,
|
|
68
|
+
and the actual server activation's epoch and nonnegative safe-integer generation. Ordinary
|
|
69
|
+
agent calls may omit this object. It orders requests; it is not authorization or viewer isolation.
|
|
70
|
+
|
|
71
|
+
A stale activation or duplicate/older intent returns `{ ok: true, superseded: true }` with no
|
|
72
|
+
navigation event or cursor change. Do not claim navigation from `ok: true` alone. Applied results
|
|
73
|
+
and events carry `catalogEpoch`, `boardGeneration` and `sequence`; presenter-aware clients use
|
|
74
|
+
these to reject stale acknowledgements and events. A structurally valid newer intent is claimed
|
|
75
|
+
before resolving the stop, so even a missing newer stop supersedes older requests.
|
|
76
|
+
|
|
77
|
+
This is latest-intent-wins, not FIFO: reversed relative Next requests can coalesce. Separate
|
|
78
|
+
documents remain independent, and reload does not cancel an old document's pending request.
|
|
79
|
+
An activation retains at most 4096 document IDs; a new ID beyond that returns 409 rather than
|
|
80
|
+
evicting an ordering record. Switching boards resets the capacity but old activation stamps stay stale.
|
|
81
|
+
The SDK accepts `goToTourStop(step, { presenter })` and `exitTour(presenter)`; fenced go can return
|
|
82
|
+
`{ superseded: true }`, while exit returns void. Do not infer applied exit from that void return.
|
|
83
|
+
|
|
57
84
|
## Capture prerequisites and behavior
|
|
58
85
|
|
|
59
86
|
Start and verify the matching PMX daemon first: its `/health` workspace and version must match the
|