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.
Files changed (298) hide show
  1. package/.github/extensions/pmx-canvas/extension.mjs +3 -1
  2. package/.github/extensions/pmx-canvas/runtime.json +1 -1
  3. package/.github/extensions/pmx-canvas/tools.json +440 -18
  4. package/CHANGELOG.md +37 -0
  5. package/dist/amp-plugin/pmx-canvas/LICENSE +21 -0
  6. package/dist/amp-plugin/pmx-canvas/THIRD_PARTY_LICENSES.txt +331 -0
  7. package/dist/amp-plugin/pmx-canvas/index.js +5445 -0
  8. package/dist/amp-plugin/pmx-canvas/runtime.json +3 -0
  9. package/dist/amp-plugin/pmx-canvas/shared-runtime.mjs +194 -0
  10. package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/SKILL.md +251 -0
  11. package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/evals/evals.json +1086 -0
  12. package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/evals/fixtures/code-exploration/src/auth/jwt.ts +17 -0
  13. package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/evals/fixtures/code-exploration/src/auth/login.ts +12 -0
  14. package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/evals/fixtures/code-exploration/src/auth/middleware.ts +13 -0
  15. package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/evals/fixtures/code-exploration/src/routes/auth.ts +13 -0
  16. package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/evals/fixtures/investigation-board/src/handlers/users.ts +27 -0
  17. package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/mcp.json +36 -0
  18. package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/references/ax-html-control-surface.md +101 -0
  19. package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/references/codex-app-adapter.md +151 -0
  20. package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/references/excalidraw-diagram-authoring.md +150 -0
  21. package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/references/full-reference.md +1785 -0
  22. package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/references/github-copilot-app-adapter.md +223 -0
  23. package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/references/html-primitives.md +139 -0
  24. package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/references/importing-context.md +132 -0
  25. package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/references/installing-pmx-canvas.md +251 -0
  26. package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/references/tours-and-recording.md +111 -0
  27. package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/references/workbench-workflows.md +900 -0
  28. package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas-orchestration/SKILL.md +141 -0
  29. package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas-testing/SKILL.md +266 -0
  30. package/dist/amp-plugin/pmx-canvas/start-mcp.mjs +14857 -0
  31. package/dist/amp-plugin/pmx-canvas/tools.json +10963 -0
  32. package/dist/canvas/chunks/{abnfDiagram-N423BO3Z-p8dtp6va.js → abnfDiagram-N423BO3Z-cwtsds5d.js} +1 -1
  33. package/dist/canvas/chunks/architecture-TIHT7OUA-x63cwejs.js +1 -0
  34. package/dist/canvas/chunks/{architectureDiagram-T3A2C74G-5jhmxrzf.js → architectureDiagram-T3A2C74G-b4xc9tpz.js} +3 -3
  35. package/dist/canvas/chunks/{blockDiagram-VBNYF7ZC-pw1fa9yb.js → blockDiagram-VBNYF7ZC-ahp3yxxs.js} +7 -7
  36. package/dist/canvas/chunks/{c4Diagram-5PPSVZJV-x07nq0tt.js → c4Diagram-5PPSVZJV-nappnay7.js} +4 -4
  37. package/dist/canvas/chunks/classDiagram-JCYQIIEL-k1j2xc1t.js +1 -0
  38. package/dist/canvas/chunks/classDiagram-v2-OCEON4UE-33x08xf2.js +1 -0
  39. package/dist/canvas/chunks/{cose-bilkent-JH36ORCC-nm39npq0.js → cose-bilkent-JH36ORCC-a428syda.js} +1 -1
  40. package/dist/canvas/chunks/cynefin-VYW2F7L2-8v6jxfz8.js +1 -0
  41. package/dist/canvas/chunks/{cynefinDiagram-MW4NZA55-vdxrwahz.js → cynefinDiagram-MW4NZA55-nspsqebj.js} +1 -1
  42. package/dist/canvas/chunks/{dagre-VZM6K2ZE-bqdm7wpd.js → dagre-VZM6K2ZE-8y6177fh.js} +2 -2
  43. package/dist/canvas/chunks/{diagram-7IWD3JNH-gs5gpr93.js → diagram-7IWD3JNH-vym028wn.js} +4 -4
  44. package/dist/canvas/chunks/{diagram-B4RE2ZJO-cgwjg47s.js → diagram-B4RE2ZJO-jddqb8sy.js} +1 -1
  45. package/dist/canvas/chunks/{diagram-LBJQPF4R-w3vahpav.js → diagram-LBJQPF4R-bjwbpkrn.js} +1 -1
  46. package/dist/canvas/chunks/{diagram-Q27KOJAE-42837z6h.js → diagram-Q27KOJAE-j6ph6hcx.js} +2 -2
  47. package/dist/canvas/chunks/{diagram-UB23O5K3-4fz83q59.js → diagram-UB23O5K3-p09w8jej.js} +1 -1
  48. package/dist/canvas/chunks/{ebnfDiagram-BXEA7PRR-zphtgegj.js → ebnfDiagram-BXEA7PRR-j975ycq5.js} +1 -1
  49. package/dist/canvas/chunks/{erDiagram-JOGREHBK-zvbbdxp4.js → erDiagram-JOGREHBK-sxp6hjn8.js} +5 -5
  50. package/dist/canvas/chunks/eventmodeling-45OFAUF4-xzfgn6xg.js +1 -0
  51. package/dist/canvas/chunks/flowDiagram-UKHOOZJN-2nsmkskb.js +1 -0
  52. package/dist/canvas/chunks/{ganttDiagram-PKOTCBZU-282jzycm.js → ganttDiagram-PKOTCBZU-4tv230y2.js} +2 -2
  53. package/dist/canvas/chunks/gitGraph-TEB2WS4Q-macbhand.js +1 -0
  54. package/dist/canvas/chunks/{gitGraphDiagram-DS77QQ5N-vqqy6p1b.js → gitGraphDiagram-DS77QQ5N-mqgmnw9g.js} +1 -1
  55. package/dist/canvas/chunks/{index-wgv7en21.js → index-037z5dz2.js} +2 -2
  56. package/dist/canvas/chunks/{index-w2mra17t.js → index-081n3har.js} +1 -1
  57. package/dist/canvas/chunks/{index-353m7b0p.js → index-5n03dmb9.js} +1 -1
  58. package/dist/canvas/chunks/{index-yw8h9vha.js → index-60pgzdqe.js} +1 -1
  59. package/dist/canvas/chunks/index-8g1vb57n.js +2 -0
  60. package/dist/canvas/chunks/{index-vv56h019.js → index-8rjes9r6.js} +1 -1
  61. package/dist/canvas/chunks/{index-nprm96xp.js → index-9022d1n9.js} +1 -1
  62. package/dist/canvas/chunks/{index-194m3hc3.js → index-9b02042t.js} +1 -1
  63. package/dist/canvas/chunks/{index-0rk4gp1g.js → index-ap4q4vez.js} +1 -1
  64. package/dist/canvas/chunks/{index-rh7nv68n.js → index-dyp2nhd3.js} +1 -1
  65. package/dist/canvas/chunks/index-frvta4tm.js +2 -0
  66. package/dist/canvas/chunks/{index-s4j678gj.js → index-h9ycj8n2.js} +1 -1
  67. package/dist/canvas/chunks/{index-fjtdggjn.js → index-mergmj97.js} +2 -2
  68. package/dist/canvas/chunks/index-nwsya6dj.js +301 -0
  69. package/dist/canvas/chunks/{index-3cy1bzwh.js → index-nz8qbd1p.js} +1 -1
  70. package/dist/canvas/chunks/{index-d3b3gqe9.js → index-qhfrazv3.js} +1 -1
  71. package/dist/canvas/chunks/{index-6qmsnxwy.js → index-v119nznk.js} +4 -4
  72. package/dist/canvas/chunks/{index-r2fyc9w1.js → index-vpt37m3d.js} +6 -6
  73. package/dist/canvas/chunks/{index-qj8fxwsf.js → index-y9ma6azy.js} +1 -1
  74. package/dist/canvas/chunks/{index-tb1wf525.js → index-zx0j3a2z.js} +26 -26
  75. package/dist/canvas/chunks/info-DKCQHKI2-a0ykzs9z.js +1 -0
  76. package/dist/canvas/chunks/{infoDiagram-6WML65LV-v1yvggqj.js → infoDiagram-6WML65LV-qv97qq6a.js} +2 -2
  77. package/dist/canvas/chunks/ishikawaDiagram-WSZJBQD7-p9306gh0.js +70 -0
  78. package/dist/canvas/chunks/{journeyDiagram-NVQOT4AX-zjcffveh.js → journeyDiagram-NVQOT4AX-sv67zats.js} +5 -5
  79. package/dist/canvas/chunks/{kanban-definition-27J2QSJJ-dakqtfp1.js → kanban-definition-27J2QSJJ-k2pfam6p.js} +1 -1
  80. package/dist/canvas/chunks/{mermaid.core-j2geswrd.js → mermaid.core-83r0fdce.js} +4 -4
  81. package/dist/canvas/chunks/{mindmap-definition-FAOFIHXS-142xhr3k.js → mindmap-definition-FAOFIHXS-vg2newm1.js} +1 -1
  82. package/dist/canvas/chunks/packet-7NZHBO7P-tqnabcdv.js +1 -0
  83. package/dist/canvas/chunks/{pegDiagram-VL7TDLO6-5wvk7vsd.js → pegDiagram-VL7TDLO6-k2h7zc5n.js} +1 -1
  84. package/dist/canvas/chunks/pie-RZYD4A2V-wke6gyhe.js +1 -0
  85. package/dist/canvas/chunks/{pieDiagram-7S7Q4E2Y-ztdhwycc.js → pieDiagram-7S7Q4E2Y-hg169p1v.js} +2 -2
  86. package/dist/canvas/chunks/{quadrantDiagram-CIZ2JOQS-c5p9gmg6.js → quadrantDiagram-CIZ2JOQS-bxtvsq0b.js} +5 -5
  87. package/dist/canvas/chunks/radar-I7S5WNFK-w7ka0drw.js +1 -0
  88. package/dist/canvas/chunks/railroad-3IZDKUUU-y3vg318x.js +1 -0
  89. package/dist/canvas/chunks/railroad-abnf-AHOZXSZD-6hqvcz3c.js +1 -0
  90. package/dist/canvas/chunks/railroad-ebnf-EBAXGLYW-vcae260m.js +1 -0
  91. package/dist/canvas/chunks/railroad-peg-LSFZ7HO6-0dbyme23.js +1 -0
  92. package/dist/canvas/chunks/{railroadDiagram-AXF67PYL-xkmqkjwf.js → railroadDiagram-AXF67PYL-njyhcp4p.js} +1 -1
  93. package/dist/canvas/chunks/{requirementDiagram-LRYGKXZP-9wm2dyaw.js → requirementDiagram-LRYGKXZP-2z6v09gm.js} +4 -4
  94. package/dist/canvas/chunks/{sankeyDiagram-W5VNT64P-2w19etgb.js → sankeyDiagram-W5VNT64P-15mzam0e.js} +1 -1
  95. package/dist/canvas/chunks/{sequenceDiagram-SI44F4Z6-0jn0vwmz.js → sequenceDiagram-SI44F4Z6-rbshyd2c.js} +12 -12
  96. package/dist/canvas/chunks/{sizeCapture-X5ZJPWSS-x75epwdq.js → sizeCapture-X5ZJPWSS-sg26xwts.js} +1 -1
  97. package/dist/canvas/chunks/{stateDiagram-OKZ733FA-schjpy6d.js → stateDiagram-OKZ733FA-6eahp98e.js} +1 -1
  98. package/dist/canvas/chunks/stateDiagram-v2-UEYNNEHI-tty0ggn5.js +1 -0
  99. package/dist/canvas/chunks/{swimlanes-SLNWSIFB-gkw4xce3.js → swimlanes-SLNWSIFB-ze5db10t.js} +1 -1
  100. package/dist/canvas/chunks/swimlanesDiagram-ULZ7WXOC-thze75gq.js +8 -0
  101. package/dist/canvas/chunks/{timeline-definition-Z64GVDOM-x7nkcy01.js → timeline-definition-Z64GVDOM-vnp7jyy8.js} +3 -3
  102. package/dist/canvas/chunks/treeView-QDETBFTQ-6ysffnm6.js +1 -0
  103. package/dist/canvas/chunks/treemap-6X3UGDF4-m3h9p066.js +1 -0
  104. package/dist/canvas/chunks/vennDiagram-T6HMQDX7-0qrnb7mj.js +34 -0
  105. package/dist/canvas/chunks/wardley-OPB4EBWU-dp37drwx.js +1 -0
  106. package/dist/canvas/chunks/{wardleyDiagram-T6FBY63Y-t1j52t9r.js → wardleyDiagram-T6FBY63Y-8nxg8wqt.js} +4 -4
  107. package/dist/canvas/chunks/{xychartDiagram-ELKLHX3M-38t16pme.js → xychartDiagram-ELKLHX3M-nj921e7s.js} +5 -5
  108. package/dist/canvas/global.css +94 -1
  109. package/dist/canvas/index.js +154 -145
  110. package/dist/canvas/mcp-app.html +600 -498
  111. package/dist/json-render/index.css +1 -1
  112. package/dist/types/client/canvas/BoardMoveDialog.d.ts +2 -0
  113. package/dist/types/client/canvas/EdgeEditor.d.ts +19 -0
  114. package/dist/types/client/canvas/GroupNavigation.d.ts +2 -0
  115. package/dist/types/client/canvas/TextPrompt.d.ts +4 -0
  116. package/dist/types/client/nodes/PromptNode.d.ts +1 -0
  117. package/dist/types/client/nodes/ViewerFrame.d.ts +1 -1
  118. package/dist/types/client/nodes/WorkCard.d.ts +7 -0
  119. package/dist/types/client/nodes/use-ax-surface-bridge.d.ts +1 -0
  120. package/dist/types/client/state/canvas-store.d.ts +15 -0
  121. package/dist/types/client/state/human-store.d.ts +2 -0
  122. package/dist/types/client/state/intent-bridge.d.ts +4 -2
  123. package/dist/types/client/state/relation-store.d.ts +11 -0
  124. package/dist/types/client/types.d.ts +1 -1
  125. package/dist/types/json-render/catalog.d.ts +2 -2
  126. package/dist/types/server/agent-presence.d.ts +1 -0
  127. package/dist/types/server/ax-interaction.d.ts +1 -0
  128. package/dist/types/server/ax-state-manager.d.ts +10 -2
  129. package/dist/types/server/board-local.d.ts +4 -0
  130. package/dist/types/server/board-move.d.ts +38 -0
  131. package/dist/types/server/canvas-db.d.ts +12 -2
  132. package/dist/types/server/canvas-operations.d.ts +5 -6
  133. package/dist/types/server/canvas-provenance.d.ts +1 -1
  134. package/dist/types/server/canvas-serialization.d.ts +1 -0
  135. package/dist/types/server/canvas-state.d.ts +84 -20
  136. package/dist/types/server/card-relocation.d.ts +6 -0
  137. package/dist/types/server/context-reads.d.ts +3 -1
  138. package/dist/types/server/human-presence.d.ts +1 -1
  139. package/dist/types/server/index.d.ts +16 -5
  140. package/dist/types/server/intent-registry.d.ts +8 -4
  141. package/dist/types/server/knowledge-lifecycle.d.ts +4 -2
  142. package/dist/types/server/mutation-history.d.ts +7 -5
  143. package/dist/types/server/operations/registry.d.ts +2 -0
  144. package/dist/types/server/trace-manager.d.ts +1 -0
  145. package/dist/types/shared/ax-kinds.d.ts +6 -0
  146. package/dist/types/shared/ax-surface-protocol.d.ts +8 -0
  147. package/dist/types/shared/human-presence.d.ts +1 -0
  148. package/dist/types/shared/lifecycle-status.d.ts +2 -0
  149. package/docs/RELEASE.md +21 -14
  150. package/docs/agent-plugin.md +16 -2
  151. package/docs/amp-plugin.md +271 -0
  152. package/docs/cli.md +42 -3
  153. package/docs/design/GuestName.dc.html +50 -0
  154. package/docs/design/PluginLogo.svg +7 -0
  155. package/docs/design/WorkCards.dc.html +39 -0
  156. package/docs/design/canvas.json +16 -0
  157. package/docs/design/plugin-logo.png +0 -0
  158. package/docs/design.md +111 -8
  159. package/docs/evals/agents-md-sections.md +38 -0
  160. package/docs/http-api.md +128 -10
  161. package/docs/mcp.md +61 -9
  162. package/docs/node-types.md +71 -1
  163. package/docs/plans/plan-009-tech-debt-backlog.md +1 -1
  164. package/docs/plans/plan-019-post-0.9-roadmap.md +44 -20
  165. package/docs/plans/plan-020-wave-5-work-planning.md +553 -0
  166. package/docs/product-vision-2026-09.md +33 -17
  167. package/docs/sdk.md +18 -0
  168. package/package.json +6 -3
  169. package/plugins/pmx-canvas/assets/preview.png +0 -0
  170. package/plugins/pmx-canvas/com.github.copilot/extensions/pmx-canvas/extension.mjs +3 -1
  171. package/plugins/pmx-canvas/com.github.copilot/extensions/pmx-canvas/runtime.json +1 -1
  172. package/plugins/pmx-canvas/plugin.json +2 -2
  173. package/plugins/pmx-canvas/runtime.json +1 -1
  174. package/plugins/pmx-canvas/tools.json +440 -18
  175. package/skills/data-analysis/SKILL.md +13 -26
  176. package/skills/frontend-design/LICENSE.txt +177 -0
  177. package/skills/frontend-design/SKILL.md +3 -0
  178. package/skills/pmx-canvas/SKILL.md +232 -842
  179. package/skills/pmx-canvas/evals/evals.json +26 -3
  180. package/skills/pmx-canvas/references/full-reference.md +80 -20
  181. package/skills/pmx-canvas/references/html-primitives.md +7 -0
  182. package/skills/pmx-canvas/references/installing-pmx-canvas.md +6 -6
  183. package/skills/pmx-canvas/references/tours-and-recording.md +29 -2
  184. package/skills/pmx-canvas/references/workbench-workflows.md +900 -0
  185. package/skills/pmx-canvas-testing/SKILL.md +7 -5
  186. package/skills/published-consumer-e2e/SKILL.md +25 -8
  187. package/skills/published-consumer-e2e/scripts/run-published-consumer-e2e.sh +51 -75
  188. package/skills/web-artifacts-builder/LICENSE.txt +202 -0
  189. package/skills/web-artifacts-builder/SKILL.md +6 -0
  190. package/skills/web-artifacts-builder/scripts/init-artifact.sh +2 -2
  191. package/src/cli/commands/apps.ts +1 -0
  192. package/src/cli/commands/boards.ts +30 -0
  193. package/src/client/App.tsx +20 -4
  194. package/src/client/canvas/AttentionHistory.tsx +10 -2
  195. package/src/client/canvas/BoardMoveDialog.tsx +225 -0
  196. package/src/client/canvas/CanvasNode.tsx +45 -2
  197. package/src/client/canvas/CanvasViewport.tsx +38 -9
  198. package/src/client/canvas/ContextMenu.tsx +34 -12
  199. package/src/client/canvas/EdgeEditor.tsx +149 -0
  200. package/src/client/canvas/EdgeLayer.tsx +87 -16
  201. package/src/client/canvas/ExpandedNodeOverlay.tsx +4 -0
  202. package/src/client/canvas/GroupNavigation.tsx +85 -0
  203. package/src/client/canvas/RelationsPanel.tsx +9 -0
  204. package/src/client/canvas/SelectionBar.tsx +21 -0
  205. package/src/client/canvas/SessionPanel.tsx +35 -1
  206. package/src/client/canvas/TextPrompt.tsx +18 -1
  207. package/src/client/canvas/TopBar.tsx +30 -0
  208. package/src/client/canvas/canvas-area.ts +1 -1
  209. package/src/client/nodes/ExtAppFrame.tsx +26 -10
  210. package/src/client/nodes/MarkdownNode.tsx +6 -7
  211. package/src/client/nodes/PromptNode.tsx +32 -3
  212. package/src/client/nodes/StatusNode.tsx +12 -0
  213. package/src/client/nodes/StatusSummary.tsx +11 -0
  214. package/src/client/nodes/ViewerFrame.tsx +21 -10
  215. package/src/client/nodes/WorkCard.tsx +175 -0
  216. package/src/client/nodes/use-ax-surface-bridge.ts +18 -14
  217. package/src/client/state/attention-bridge.ts +5 -0
  218. package/src/client/state/attention-store.ts +1 -0
  219. package/src/client/state/canvas-store.ts +185 -15
  220. package/src/client/state/human-store.ts +22 -2
  221. package/src/client/state/intent-bridge.ts +19 -5
  222. package/src/client/state/relation-store.ts +127 -1
  223. package/src/client/theme/global.css +94 -1
  224. package/src/client/types.ts +1 -0
  225. package/src/mcp/server.ts +13 -3
  226. package/src/server/agent-presence.ts +43 -23
  227. package/src/server/ax-flow-loop.ts +6 -0
  228. package/src/server/ax-gate-ttl.ts +8 -1
  229. package/src/server/ax-interaction.ts +16 -10
  230. package/src/server/ax-state-manager.ts +17 -4
  231. package/src/server/ax-wait.ts +20 -6
  232. package/src/server/board-export.ts +19 -6
  233. package/src/server/board-local.ts +20 -0
  234. package/src/server/board-move.ts +297 -0
  235. package/src/server/canvas-db.ts +249 -158
  236. package/src/server/canvas-operations.ts +139 -109
  237. package/src/server/canvas-schema.ts +21 -0
  238. package/src/server/canvas-serialization.ts +2 -0
  239. package/src/server/canvas-state.ts +792 -159
  240. package/src/server/card-relocation.ts +53 -0
  241. package/src/server/code-graph.ts +4 -3
  242. package/src/server/context-reads.ts +83 -55
  243. package/src/server/demo-state.json +35 -15
  244. package/src/server/file-watcher.ts +30 -10
  245. package/src/server/human-presence.ts +18 -5
  246. package/src/server/index.ts +35 -15
  247. package/src/server/intent-registry.ts +43 -5
  248. package/src/server/knowledge-lifecycle.ts +32 -9
  249. package/src/server/lifecycle-status.ts +29 -1
  250. package/src/server/mcp-app-runtime.ts +26 -7
  251. package/src/server/mutation-history.ts +37 -8
  252. package/src/server/operations/composites.ts +6 -3
  253. package/src/server/operations/mcp-contracts.ts +15 -0
  254. package/src/server/operations/mcp.ts +36 -9
  255. package/src/server/operations/ops/annotation.ts +22 -1
  256. package/src/server/operations/ops/ax-await.ts +1 -0
  257. package/src/server/operations/ops/ax-timeline.ts +28 -2
  258. package/src/server/operations/ops/batch.ts +25 -11
  259. package/src/server/operations/ops/boards.ts +44 -3
  260. package/src/server/operations/ops/nodes.ts +70 -0
  261. package/src/server/operations/ops/query.ts +32 -3
  262. package/src/server/operations/ops/snapshots.ts +1 -0
  263. package/src/server/operations/registry.ts +49 -4
  264. package/src/server/server.ts +62 -16
  265. package/src/server/tour-control.ts +37 -12
  266. package/src/server/trace-manager.ts +4 -0
  267. package/src/server/web-artifacts/scripts/init-artifact.sh +2 -2
  268. package/src/shared/agent-context.ts +7 -1
  269. package/src/shared/auto-arrange.ts +5 -4
  270. package/src/shared/ax-kinds.ts +13 -0
  271. package/src/shared/ax-surface-protocol.ts +22 -0
  272. package/src/shared/human-presence.ts +1 -0
  273. package/src/shared/lifecycle-status.ts +2 -0
  274. package/dist/canvas/chunks/architecture-TIHT7OUA-9tffvpsv.js +0 -1
  275. package/dist/canvas/chunks/classDiagram-JCYQIIEL-nc6g5x1r.js +0 -1
  276. package/dist/canvas/chunks/classDiagram-v2-OCEON4UE-0qnbpwvh.js +0 -1
  277. package/dist/canvas/chunks/cynefin-VYW2F7L2-ys8p46ts.js +0 -1
  278. package/dist/canvas/chunks/eventmodeling-45OFAUF4-v9q6dn4c.js +0 -1
  279. package/dist/canvas/chunks/flowDiagram-UKHOOZJN-yrr5z8tc.js +0 -1
  280. package/dist/canvas/chunks/gitGraph-TEB2WS4Q-kdwb8m0a.js +0 -1
  281. package/dist/canvas/chunks/index-1r72hdzb.js +0 -301
  282. package/dist/canvas/chunks/index-g3pwnqeb.js +0 -2
  283. package/dist/canvas/chunks/index-rft2hcz5.js +0 -2
  284. package/dist/canvas/chunks/info-DKCQHKI2-wpzs6sz3.js +0 -1
  285. package/dist/canvas/chunks/ishikawaDiagram-WSZJBQD7-5hnq1a9p.js +0 -70
  286. package/dist/canvas/chunks/packet-7NZHBO7P-xn439f0s.js +0 -1
  287. package/dist/canvas/chunks/pie-RZYD4A2V-0kf16rwh.js +0 -1
  288. package/dist/canvas/chunks/radar-I7S5WNFK-0g2pz36t.js +0 -1
  289. package/dist/canvas/chunks/railroad-3IZDKUUU-fcaran6j.js +0 -1
  290. package/dist/canvas/chunks/railroad-abnf-AHOZXSZD-wgdya41q.js +0 -1
  291. package/dist/canvas/chunks/railroad-ebnf-EBAXGLYW-gy07a4ka.js +0 -1
  292. package/dist/canvas/chunks/railroad-peg-LSFZ7HO6-ewk6wtkh.js +0 -1
  293. package/dist/canvas/chunks/stateDiagram-v2-UEYNNEHI-k8sfp2e7.js +0 -1
  294. package/dist/canvas/chunks/swimlanesDiagram-ULZ7WXOC-nqysw67j.js +0 -8
  295. package/dist/canvas/chunks/treeView-QDETBFTQ-cesw6gp0.js +0 -1
  296. package/dist/canvas/chunks/treemap-6X3UGDF4-zdv4knp9.js +0 -1
  297. package/dist/canvas/chunks/vennDiagram-T6HMQDX7-x8dqn9yf.js +0 -34
  298. package/dist/canvas/chunks/wardley-OPB4EBWU-44pdddez.js +0 -1
@@ -0,0 +1,251 @@
1
+ # Installing PMX Canvas
2
+
3
+ Use this reference when the `pmx-canvas` skill is installed but the `pmx-canvas` command is not available yet.
4
+
5
+ ## Prerequisites and version
6
+
7
+ The examples pin **PMX Canvas 0.12.0**, which requires **Bun >=1.4.4** even when
8
+ installed through npm: the CLI runs through Bun, not Node. Check `bun --version`
9
+ first. If missing or older, follow the [Bun installation instructions](https://bun.sh/docs/installation)
10
+ with the user's authorization. Ensure Bun is on the MCP host's PATH as well as the
11
+ interactive shell's; use an absolute `bun`/`bunx` executable path if needed.
12
+
13
+ Bun 1.4.4 fixes the Brotli decoder vulnerability CVE-2026-111497. Updating the
14
+ PMX package does not update Bun; upgrade the runtime and restart existing PMX/MCP
15
+ processes. Development and build tooling should use Node 24.22.1 or a newer patched
16
+ release on a supported Node line.
17
+
18
+ Install/configure only when requested. After an intentional runtime upgrade, sync the
19
+ skill from that installed package and restart existing server/MCP processes as described
20
+ in `SKILL.md`. Do not pair newer checkout guidance with an older runtime unknowingly.
21
+
22
+ ## Install from npm
23
+
24
+ ```bash
25
+ npm install -g pmx-canvas@0.12.0
26
+ pmx-canvas --version
27
+ ```
28
+
29
+ Without a global install, use `bunx pmx-canvas@0.12.0` in place of `pmx-canvas` in
30
+ the commands below. Do not use unpinned `bunx pmx-canvas` for a version-specific check.
31
+
32
+ ## Choose the workspace and target
33
+
34
+ Select an existing absolute root and a dedicated free port. These shell examples use
35
+ POSIX syntax; supply equivalent environment variables on other platforms.
36
+
37
+ ```bash
38
+ export PMX_CANVAS_WORKSPACE_ROOT=/absolute/path/to/project
39
+ export PMX_CANVAS_PORT=14313 # Example only: choose a free port for this workspace.
40
+ unset PMX_CANVAS_URL # A stale URL overrides the environment's CLI port target.
41
+ ```
42
+
43
+ Use **both root and port**. Root pinning alone does not align the CLI, MCP, and browser
44
+ if a server falls back to another port. Without an explicit root, MCP may attach to a
45
+ different workspace on the preferred port. `PMX_CANVAS_ALLOW_WORKSPACE_SPLIT=1` opts
46
+ out of that heuristic but is not a substitute for checking the actual target.
47
+
48
+ For server startup, precedence is `--port`, then `PMX_WEB_CANVAS_PORT`, then
49
+ `PMX_CANVAS_PORT` (then `PORT` in Amp orbs), then the default 4313. For CLI queries and
50
+ mutations, explicit `--server-url`/`--port` override environment targeting; otherwise
51
+ `PMX_CANVAS_URL` wins over `PMX_CANVAS_PORT`. URL targeting does not set the bind port.
52
+
53
+ ## Start the server
54
+
55
+ On an ordinary local machine:
56
+
57
+ ```bash
58
+ pmx-canvas serve --daemon --no-open --port="$PMX_CANVAS_PORT" --wait-ms=20000
59
+ ```
60
+
61
+ In a managed environment, use the host's supervised-service mechanism with foreground
62
+ `pmx-canvas serve --no-open --port=<chosen-port>`, passing the selected environment.
63
+ Do not daemonize inside a supervisor or rely on `nohup`, background shell jobs, or tmux
64
+ to survive an orb restart. In an Amp orb, prefer declared services with
65
+ `amp orb services ensure`; otherwise use `amp orb service start` with the foreground
66
+ command. Use the host's authenticated portal/preview for remote viewing, not a raw
67
+ loopback URL. Verify health below before opening the workbench or making writes.
68
+
69
+ CLI query/mutation commands do not auto-start a server; `serve` or `--mcp` does.
70
+
71
+ ## From a local checkout (development)
72
+
73
+ ```bash
74
+ git clone https://github.com/pskoett/pmx-canvas.git
75
+ cd pmx-canvas
76
+ bun install
77
+ bun run build
78
+ bun run src/cli/index.ts --version
79
+ ```
80
+
81
+ This uses the checked-out source, not necessarily the published package. Follow
82
+ that checkout's `package.json` Bun requirement and bundled skill. Set the same root/port
83
+ environment above; substitute `bun run /absolute/path/to/pmx-canvas/src/cli/index.ts`
84
+ for `pmx-canvas` in startup and verification commands. The target workspace can be
85
+ different from the source checkout. Build the client before browser verification.
86
+
87
+ ## MCP Config
88
+
89
+ For agents that support MCP, configure the pinned package as a stdio server. Replace
90
+ the root and port with your selections; ensure the port is dedicated to this workspace.
91
+ The empty URL overrides a stale inherited value (empty is treated as unset). If the host
92
+ discards empty env values, remove `PMX_CANVAS_URL` from its launch environment instead.
93
+
94
+ ```json
95
+ {
96
+ "mcpServers": {
97
+ "canvas": {
98
+ "command": "bunx",
99
+ "args": ["pmx-canvas@0.12.0", "--mcp"],
100
+ "env": {
101
+ "PMX_CANVAS_WORKSPACE_ROOT": "/absolute/path/to/project",
102
+ "PMX_CANVAS_PORT": "14313",
103
+ "PMX_CANVAS_URL": ""
104
+ }
105
+ }
106
+ }
107
+ }
108
+ ```
109
+
110
+ If you are using a local checkout instead of the published package, point the command at the CLI entry:
111
+
112
+ ```json
113
+ {
114
+ "mcpServers": {
115
+ "canvas": {
116
+ "command": "bun",
117
+ "args": ["run", "/absolute/path/to/pmx-canvas/src/cli/index.ts", "--mcp"],
118
+ "env": {
119
+ "PMX_CANVAS_WORKSPACE_ROOT": "/absolute/path/to/project",
120
+ "PMX_CANVAS_PORT": "14313",
121
+ "PMX_CANVAS_URL": ""
122
+ }
123
+ }
124
+ }
125
+ }
126
+ ```
127
+
128
+ Restart the host's MCP process after changing configuration. Inspect startup output for
129
+ fallback ports; do not assume the configured port is the one the MCP server bound.
130
+
131
+ ## Amp: connect the agent separately from the portal
132
+
133
+ PMX does not ship a dedicated Amp lifecycle adapter. Amp can use the native MCP tools;
134
+ the portal is only the human's browser UI. Configure MCP inside the orb or runner where
135
+ Amp executes, not only on the user's laptop. Merge this into that workspace's
136
+ `.amp/settings.json`, preserving other settings (Amp does not use the generic `.mcp.json`):
137
+
138
+ ```json
139
+ {
140
+ "amp.mcpServers": {
141
+ "canvas": {
142
+ "command": "bunx",
143
+ "args": ["pmx-canvas@0.12.0", "--mcp"],
144
+ "includeTools": ["canvas_*"],
145
+ "env": {
146
+ "PMX_CANVAS_WORKSPACE_ROOT": "/absolute/path/to/project",
147
+ "PMX_CANVAS_PORT": "14313",
148
+ "PMX_CANVAS_URL": "",
149
+ "PMX_CANVAS_AGENT_SOURCE": "amp"
150
+ }
151
+ }
152
+ }
153
+ }
154
+ ```
155
+
156
+ Replace root and port with the **existing portal service's actual workspace and local
157
+ listening port**. A supervised service may use an assigned `PORT`, not 4313 or 14313;
158
+ inspect its status/logs and `/health`. Do not put the public portal URL in the stdio
159
+ command or copy another test run's absolute paths. Use an absolute executable path if
160
+ the MCP process cannot find Bun. The `canvas_*` filter exposes the Canvas tool family.
161
+
162
+ ### Workspace trust is a human approval
163
+
164
+ Run `amp mcp doctor` from this workspace to distinguish `awaiting approval` from a
165
+ missing executable or connection failure. A new workspace MCP command requires the
166
+ user to review and approve it. Give the user this command to run in that workspace's
167
+ orb Terminal or runner terminal (replace `canvas` if the configured server name differs):
168
+
169
+ ```bash
170
+ amp mcp approve canvas
171
+ ```
172
+
173
+ The agent must not run this approval itself or move the command to global settings or
174
+ `--mcp-config` to bypass workspace trust. Approval authorizes execution of this MCP
175
+ command; it is not a new Canvas import consent or permission to mutate arbitrary boards.
176
+ After approval, reload MCP connections (`reload_mcp` in Amp) and require `connected`.
177
+ Discover `canvas` tools with `tool_search`; the full unfiltered 0.12.0 server has 25 tools,
178
+ including `canvas_help`. If still absent, inspect the server status, command/PATH and target instead
179
+ of reinstalling blindly. See [Amp MCP documentation](https://ampcode.com/docs/customize/mcp).
180
+
181
+ ### Verify native tools, then steering
182
+
183
+ 1. Check `/health` for the expected package version and canonical workspace. Through
184
+ Amp's discovered tools, read `canvas_board { action: "get" }` and
185
+ `canvas_query { action: "context" }`; verify the board matches the visible portal.
186
+ A CLI smoke check or SDK-spawned MCP client does not establish native Amp discovery.
187
+ 2. For a requested end-to-end check, use a disposable board. Pin a known card in the
188
+ portal and require a native context read to return that card as pinned. Use one
189
+ stable presence/steering identity (`amp` above, or a unique source per independent
190
+ agent); reuse any adapter-owned session instead of attaching a duplicate.
191
+ 3. Send a fresh browser message addressed to that identity. The running agent claims
192
+ it with `canvas_ax_delivery` using the same `consumer`, reads the relevant card,
193
+ signals intent, and performs the requested edit through native Canvas tools.
194
+ 4. Verify the visible result in the browser before marking the message delivered for
195
+ that consumer. A subsequent claim should omit it. Detach only test-owned sessions.
196
+
197
+ This proves an **active agent can poll and act**, not automatic wake-up of an idle Amp
198
+ thread, background polling, or automatic agent launch for imports. An MCP connection
199
+ does not install a steering pump. Only configure a pump/host integration when requested;
200
+ its startup backlog rules are in the main skill. Tool discovery and resource reads also
201
+ do not establish Amp support for native MCP Skills-extension discovery or activation.
202
+
203
+ ## Verify the actual target before writes
204
+
205
+ For the local target selected above:
206
+
207
+ ```bash
208
+ pmx-canvas --version
209
+ curl --fail --silent --show-error "http://localhost:${PMX_CANVAS_PORT}/health"
210
+ pmx-canvas serve status --port="$PMX_CANVAS_PORT"
211
+ ```
212
+
213
+ Require healthy `ok`, the expected running `version`, and a **`workspace`** matching the
214
+ intended canonical absolute root (resolve symlinks on both paths). Inspect persistence
215
+ health too. `serve status` checks a local port, not an arbitrary `PMX_CANVAS_URL`.
216
+ When deliberately targeting a URL or a fallback port, fetch `/health` there instead,
217
+ then align CLI, MCP, and browser to it. Never print a credential-bearing URL.
218
+ On mismatch, stop: leave the other server alone, choose a free port, and repeat.
219
+
220
+ Only after confirming the target:
221
+
222
+ ```bash
223
+ pmx-canvas layout
224
+ pmx-canvas open
225
+ ```
226
+
227
+ Inside an orb, open the registered portal rather than asking the user to open localhost.
228
+
229
+ ## Disposable smoke verification
230
+
231
+ `smoke` creates/searches/removes a temporary node and can leave history/activity records.
232
+ It reports the workspace but does **not** compare it with your intended root. Do not run
233
+ it on a valuable board as an identity check. Use a new disposable workspace and its own
234
+ free port, start it with the appropriate startup method above, and verify `/health` first:
235
+
236
+ ```bash
237
+ export PMX_CANVAS_WORKSPACE_ROOT="$(mktemp -d)"
238
+ export PMX_CANVAS_PORT=14314 # Choose another free port.
239
+ unset PMX_CANVAS_URL
240
+ # Start this workspace's server, then verify its actual health workspace/version.
241
+ # Only after that verification succeeds:
242
+ pmx-canvas smoke
243
+ ```
244
+
245
+ Inspect the JSON report and exit status: health, MCP initialize, node lifecycle, and
246
+ validation should pass; failures exit 1. Version skew is reported in details and is not
247
+ necessarily a failing check. Smoke proves neither `tools/list` discovery nor browser
248
+ rendering: verify those separately when testing the complete onboarding experience.
249
+ Stop only the test server (service-manager stop, or `serve stop --port=<test-port>` for
250
+ your local daemon) before removing its disposable directory. Never clear a user's board
251
+ or stop an unrelated listener to make a smoke test pass.
@@ -0,0 +1,111 @@
1
+ # Tours and recording
2
+
3
+ Tours use the existing board cards as presentation content. Interactive presentation and
4
+ deterministic capture share this one stop model; recording does not create a second deck.
5
+
6
+ ## Author a tour
7
+
8
+ Persist a tour with `canvas_view { action: "set-tour", tour: { stops: [...] } }` and read it with
9
+ `canvas_view { action: "get-tour" }`. A stop has exactly one target:
10
+
11
+ ```json
12
+ {
13
+ "stops": [
14
+ { "target": { "nodeId": "overview-group" }, "duration": 1.5, "padding": 60 },
15
+ { "target": { "nodeId": "detail-note" }, "duration": 2, "easing": "ease-in-out", "pullback": 0.7 },
16
+ { "target": { "viewport": { "x": 80, "y": 100, "scale": 0.5 } }, "duration": 1 }
17
+ ]
18
+ }
19
+ ```
20
+
21
+ - `nodeId` may identify a card or group. Its persisted position and size determine the camera.
22
+ - `rect` is a world-space box `{ x, y, width, height }` (top-left corner plus size).
23
+ - An explicit viewport is `{ x, y, scale }`, with positive `scale`. Translation is screen-space:
24
+ `screen = world * scale + offset`.
25
+ - `duration` is transition time in seconds (default 1; zero jumps). Valid values are 0–3600.
26
+ - `padding` is screen pixels around a node or rect target (default 40).
27
+ - `easing` is `linear`, `ease-in-out` (default), or `ease-out`.
28
+ - `pullback` is 0–4 (default 0). It zooms out during the move without changing either endpoint.
29
+ - A tour contains at most 1000 stops.
30
+
31
+ Open `/workbench?present=1` for chrome-free viewing. Right, Down, or Space advances; Left or Up
32
+ goes back; Escape or **Exit presentation** exits. Right-drag pans and interrupts an ongoing
33
+ transition without editing cards. Stops do not auto-advance. A missing node target reports an
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.
38
+
39
+ Tours are board-scoped, persist with that board and its snapshots, participate in undo, and clear
40
+ with the board. Setting `tour: null` resets to a derived tour: groups ordered by y, then x, then
41
+ ID. A saved `{ "stops": [] }` intentionally has no stops; it does not enable group derivation.
42
+ Preserve the tour of each board when working across boards and target the intended board before
43
+ setting or reading it.
44
+
45
+ ## Drive a tour
46
+
47
+ The server holds one in-memory tour cursor, tied to the board it was started on (a tour on another board replaces it). `canvas_view { action: "tour-go", stop: 0 }`
48
+ starts presenting in open workbenches; `step: "next" | "previous"` moves relative to wherever the
49
+ audience is (a human's arrow keys move the same cursor) and clamps at the ends. Pass
50
+ `present: false` to move only viewers already presenting. `canvas_view { action: "tour-exit" }`
51
+ leaves presentation everywhere. `get-tour` reports `position` (the current stop, or null).
52
+
53
+ `canvas_view { action: "move", nodeId | rect | viewport, duration, easing, padding, pullback }`
54
+ eases the camera without a tour. Outside a presentation the end camera becomes the board
55
+ viewport. Tour steps and moves never enter undo history, never count as agent writes, and are
56
+ allowed under a scope fence. Viewers with reduced motion jump instead of animating; a
57
+ deterministic capture ignores both.
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
+
84
+ ## Capture prerequisites and behavior
85
+
86
+ Start and verify the matching PMX daemon first: its `/health` workspace and version must match the
87
+ installation and workspace used by the CLI/MCP host. Capture is a local CLI/file operation. It
88
+ requires Bun with WebView support and Chrome (or `--chrome-path`); MP4 encoding additionally
89
+ requires ffmpeg. Recording starts a separate Chrome session; it does not capture the native host's
90
+ Browser pane. Use a new output path because existing output and frame paths are refused.
91
+
92
+ Capture the saved or derived tour:
93
+
94
+ ```bash
95
+ pmx-canvas record --mode deterministic --present --fps 30 --resolution 1920x1080 --output tour.mp4
96
+ ```
97
+
98
+ Use `--tour-file tour.json` in deterministic mode to try the same model without changing the
99
+ board. Resolution defaults to 1280x720 and FPS to 30 (valid 1–120). Deterministic mode resolves
100
+ target geometry once and emits `max(1, ceil(duration * fps))` frames per stop, including each
101
+ endpoint. Duplicate a stop to hold it. It makes camera timing deterministic, not iframe animation,
102
+ late fonts/network assets, or concurrent board edits.
103
+
104
+ Realtime mode instead needs one stopping rule: `--duration SECONDS` or `--stop-on-signal`. It
105
+ samples the live board and repeats frames when capture is slow to preserve wall-clock duration.
106
+ Capture has no audio and does not move other viewers' cameras or replace an existing automation
107
+ session.
108
+
109
+ An `.mp4` output uses ffmpeg/H.264. Frames and `recording.json` remain in `<output>.frames`; if
110
+ ffmpeg is unavailable, the command reports and returns the PNG sequence directory. Any other
111
+ output path is itself a PNG sequence directory. Encoding failures retain the frames and fail.