pmx-canvas 0.10.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 (343) 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 +688 -128
  4. package/CHANGELOG.md +69 -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-cwtsds5d.js +1 -0
  33. package/dist/canvas/chunks/architecture-TIHT7OUA-x63cwejs.js +1 -0
  34. package/dist/canvas/chunks/architectureDiagram-T3A2C74G-b4xc9tpz.js +36 -0
  35. package/dist/canvas/chunks/blockDiagram-VBNYF7ZC-ahp3yxxs.js +132 -0
  36. package/dist/canvas/chunks/c4Diagram-5PPSVZJV-nappnay7.js +10 -0
  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-a428syda.js +1 -0
  40. package/dist/canvas/chunks/cynefin-VYW2F7L2-8v6jxfz8.js +1 -0
  41. package/dist/canvas/chunks/cynefinDiagram-MW4NZA55-nspsqebj.js +62 -0
  42. package/dist/canvas/chunks/dagre-VZM6K2ZE-8y6177fh.js +4 -0
  43. package/dist/canvas/chunks/diagram-7IWD3JNH-vym028wn.js +30 -0
  44. package/dist/canvas/chunks/diagram-B4RE2ZJO-jddqb8sy.js +3 -0
  45. package/dist/canvas/chunks/diagram-LBJQPF4R-bjwbpkrn.js +24 -0
  46. package/dist/canvas/chunks/diagram-Q27KOJAE-j6ph6hcx.js +24 -0
  47. package/dist/canvas/chunks/diagram-UB23O5K3-p09w8jej.js +41 -0
  48. package/dist/canvas/chunks/ebnfDiagram-BXEA7PRR-j975ycq5.js +1 -0
  49. package/dist/canvas/chunks/erDiagram-JOGREHBK-sxp6hjn8.js +85 -0
  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-4tv230y2.js +292 -0
  53. package/dist/canvas/chunks/gitGraph-TEB2WS4Q-macbhand.js +1 -0
  54. package/dist/canvas/chunks/gitGraphDiagram-DS77QQ5N-mqgmnw9g.js +106 -0
  55. package/dist/canvas/chunks/index-037z5dz2.js +232 -0
  56. package/dist/canvas/chunks/index-081n3har.js +207 -0
  57. package/dist/canvas/chunks/index-5n03dmb9.js +2 -0
  58. package/dist/canvas/chunks/index-5tv8v1hk.js +1 -0
  59. package/dist/canvas/chunks/index-60pgzdqe.js +157 -0
  60. package/dist/canvas/chunks/index-6ceya556.js +332 -0
  61. package/dist/canvas/chunks/index-8g1vb57n.js +2 -0
  62. package/dist/canvas/chunks/index-8rjes9r6.js +2 -0
  63. package/dist/canvas/chunks/index-9022d1n9.js +16 -0
  64. package/dist/canvas/chunks/index-9b02042t.js +2 -0
  65. package/dist/canvas/chunks/index-ap4q4vez.js +2 -0
  66. package/dist/canvas/chunks/index-dyp2nhd3.js +2 -0
  67. package/dist/canvas/chunks/index-frvta4tm.js +2 -0
  68. package/dist/canvas/chunks/index-gf4e0et4.js +2 -0
  69. package/dist/canvas/chunks/index-h9ycj8n2.js +2 -0
  70. package/dist/canvas/chunks/index-hj99nz1f.js +1 -0
  71. package/dist/canvas/chunks/index-mergmj97.js +2 -0
  72. package/dist/canvas/chunks/index-nwsya6dj.js +301 -0
  73. package/dist/canvas/chunks/index-nz8qbd1p.js +2 -0
  74. package/dist/canvas/chunks/index-qhfrazv3.js +2 -0
  75. package/dist/canvas/chunks/index-v119nznk.js +4 -0
  76. package/dist/canvas/chunks/index-vpt37m3d.js +89 -0
  77. package/dist/canvas/chunks/index-y9ma6azy.js +2 -0
  78. package/dist/canvas/chunks/index-zx0j3a2z.js +179 -0
  79. package/dist/canvas/chunks/info-DKCQHKI2-a0ykzs9z.js +1 -0
  80. package/dist/canvas/chunks/infoDiagram-6WML65LV-qv97qq6a.js +2 -0
  81. package/dist/canvas/chunks/ishikawaDiagram-WSZJBQD7-p9306gh0.js +70 -0
  82. package/dist/canvas/chunks/journeyDiagram-NVQOT4AX-sv67zats.js +139 -0
  83. package/dist/canvas/chunks/kanban-definition-27J2QSJJ-k2pfam6p.js +89 -0
  84. package/dist/canvas/chunks/katex-dmg8k4zm.js +257 -0
  85. package/dist/canvas/chunks/mermaid.core-83r0fdce.js +12 -0
  86. package/dist/canvas/chunks/mindmap-definition-FAOFIHXS-vg2newm1.js +96 -0
  87. package/dist/canvas/chunks/packet-7NZHBO7P-tqnabcdv.js +1 -0
  88. package/dist/canvas/chunks/pegDiagram-VL7TDLO6-k2h7zc5n.js +1 -0
  89. package/dist/canvas/chunks/pie-RZYD4A2V-wke6gyhe.js +1 -0
  90. package/dist/canvas/chunks/pieDiagram-7S7Q4E2Y-hg169p1v.js +39 -0
  91. package/dist/canvas/chunks/quadrantDiagram-CIZ2JOQS-bxtvsq0b.js +7 -0
  92. package/dist/canvas/chunks/radar-I7S5WNFK-w7ka0drw.js +1 -0
  93. package/dist/canvas/chunks/railroad-3IZDKUUU-y3vg318x.js +1 -0
  94. package/dist/canvas/chunks/railroad-abnf-AHOZXSZD-6hqvcz3c.js +1 -0
  95. package/dist/canvas/chunks/railroad-ebnf-EBAXGLYW-vcae260m.js +1 -0
  96. package/dist/canvas/chunks/railroad-peg-LSFZ7HO6-0dbyme23.js +1 -0
  97. package/dist/canvas/chunks/railroadDiagram-AXF67PYL-njyhcp4p.js +1 -0
  98. package/dist/canvas/chunks/requirementDiagram-LRYGKXZP-2z6v09gm.js +84 -0
  99. package/dist/canvas/chunks/sankeyDiagram-W5VNT64P-15mzam0e.js +40 -0
  100. package/dist/canvas/chunks/sequenceDiagram-SI44F4Z6-rbshyd2c.js +162 -0
  101. package/dist/canvas/chunks/sizeCapture-X5ZJPWSS-sg26xwts.js +1 -0
  102. package/dist/canvas/chunks/stateDiagram-OKZ733FA-6eahp98e.js +1 -0
  103. package/dist/canvas/chunks/stateDiagram-v2-UEYNNEHI-tty0ggn5.js +1 -0
  104. package/dist/canvas/chunks/swimlanes-SLNWSIFB-ze5db10t.js +1 -0
  105. package/dist/canvas/chunks/swimlanesDiagram-ULZ7WXOC-thze75gq.js +8 -0
  106. package/dist/canvas/chunks/timeline-definition-Z64GVDOM-vnp7jyy8.js +120 -0
  107. package/dist/canvas/chunks/treeView-QDETBFTQ-6ysffnm6.js +1 -0
  108. package/dist/canvas/chunks/treemap-6X3UGDF4-m3h9p066.js +1 -0
  109. package/dist/canvas/chunks/vennDiagram-T6HMQDX7-0qrnb7mj.js +34 -0
  110. package/dist/canvas/chunks/wardley-OPB4EBWU-dp37drwx.js +1 -0
  111. package/dist/canvas/chunks/wardleyDiagram-T6FBY63Y-8nxg8wqt.js +78 -0
  112. package/dist/canvas/chunks/xychartDiagram-ELKLHX3M-nj921e7s.js +7 -0
  113. package/dist/canvas/global.css +483 -230
  114. package/dist/canvas/index.js +158 -219
  115. package/dist/canvas/mcp-app.html +4301 -548
  116. package/dist/canvas/mermaid-entry.js +338 -338
  117. package/dist/canvas/surface-theme.css +6 -6
  118. package/dist/json-render/index.css +1 -1
  119. package/dist/json-render/index.js +49 -49
  120. package/dist/types/client/canvas/BarHint.d.ts +5 -3
  121. package/dist/types/client/canvas/BoardMoveDialog.d.ts +2 -0
  122. package/dist/types/client/canvas/CanvasNode.d.ts +0 -11
  123. package/dist/types/client/canvas/EdgeEditor.d.ts +19 -0
  124. package/dist/types/client/canvas/EdgeLayer.d.ts +1 -2
  125. package/dist/types/client/canvas/GroupNavigation.d.ts +2 -0
  126. package/dist/types/client/canvas/TextPrompt.d.ts +4 -0
  127. package/dist/types/client/canvas/auto-fit.d.ts +4 -5
  128. package/dist/types/client/mermaid-entry.d.ts +1 -2
  129. package/dist/types/client/mermaid-render.d.ts +1 -0
  130. package/dist/types/client/nodes/BoardNode.d.ts +1 -1
  131. package/dist/types/client/nodes/ExtAppFrame.d.ts +7 -90
  132. package/dist/types/client/nodes/McpAppNode.d.ts +1 -25
  133. package/dist/types/client/nodes/MermaidNode.d.ts +1 -8
  134. package/dist/types/client/nodes/PromptNode.d.ts +1 -0
  135. package/dist/types/client/nodes/ViewerFrame.d.ts +29 -0
  136. package/dist/types/client/nodes/ViewerHost.d.ts +6 -0
  137. package/dist/types/client/nodes/WorkCard.d.ts +7 -0
  138. package/dist/types/client/nodes/iframe-document-url.d.ts +3 -9
  139. package/dist/types/client/nodes/primitive-copy.d.ts +5 -0
  140. package/dist/types/client/nodes/use-ax-surface-bridge.d.ts +1 -0
  141. package/dist/types/client/nodes/use-iframe-content-height.d.ts +1 -1
  142. package/dist/types/client/nodes/use-surface-frame.d.ts +4 -6
  143. package/dist/types/client/nodes/viewer-runtime-state.d.ts +2 -1
  144. package/dist/types/client/state/canvas-store.d.ts +18 -1
  145. package/dist/types/client/state/human-store.d.ts +2 -0
  146. package/dist/types/client/state/intent-bridge.d.ts +5 -2
  147. package/dist/types/client/state/presentation.d.ts +17 -6
  148. package/dist/types/client/state/relation-store.d.ts +11 -0
  149. package/dist/types/client/types.d.ts +1 -1
  150. package/dist/types/json-render/catalog.d.ts +2 -2
  151. package/dist/types/json-render/server.d.ts +2 -1
  152. package/dist/types/server/agent-presence.d.ts +1 -0
  153. package/dist/types/server/ax-interaction.d.ts +1 -0
  154. package/dist/types/server/ax-state-manager.d.ts +10 -2
  155. package/dist/types/server/board-local.d.ts +4 -0
  156. package/dist/types/server/board-move.d.ts +38 -0
  157. package/dist/types/server/canvas-db.d.ts +12 -2
  158. package/dist/types/server/canvas-operations.d.ts +5 -6
  159. package/dist/types/server/canvas-provenance.d.ts +1 -1
  160. package/dist/types/server/canvas-serialization.d.ts +1 -0
  161. package/dist/types/server/canvas-state.d.ts +86 -20
  162. package/dist/types/server/card-relocation.d.ts +6 -0
  163. package/dist/types/server/context-reads.d.ts +3 -1
  164. package/dist/types/server/human-presence.d.ts +1 -1
  165. package/dist/types/server/index.d.ts +26 -10
  166. package/dist/types/server/intent-registry.d.ts +8 -4
  167. package/dist/types/server/knowledge-lifecycle.d.ts +4 -2
  168. package/dist/types/server/mutation-history.d.ts +7 -5
  169. package/dist/types/server/operations/ops/boards.d.ts +0 -1
  170. package/dist/types/server/operations/registry.d.ts +2 -0
  171. package/dist/types/server/tour-control.d.ts +13 -3
  172. package/dist/types/server/trace-manager.d.ts +1 -0
  173. package/dist/types/shared/ax-kinds.d.ts +6 -0
  174. package/dist/types/shared/ax-surface-protocol.d.ts +8 -9
  175. package/dist/types/shared/human-presence.d.ts +1 -0
  176. package/dist/types/shared/lifecycle-status.d.ts +2 -0
  177. package/dist/types/shared/tour.d.ts +8 -0
  178. package/docs/RELEASE.md +21 -14
  179. package/docs/agent-plugin.md +16 -2
  180. package/docs/amp-plugin.md +271 -0
  181. package/docs/cli.md +42 -3
  182. package/docs/design/Chrome.dc.html +32 -6
  183. package/docs/design/GuestName.dc.html +50 -0
  184. package/docs/design/PluginLogo.svg +7 -0
  185. package/docs/design/Types1.dc.html +3 -2
  186. package/docs/design/Types2.dc.html +1 -1
  187. package/docs/design/Types3.dc.html +1 -1
  188. package/docs/design/WorkCards.dc.html +39 -0
  189. package/docs/design/Zoom.dc.html +37 -60
  190. package/docs/design/canvas.json +17 -1
  191. package/docs/design/plugin-logo.png +0 -0
  192. package/docs/design.md +280 -12
  193. package/docs/evals/agents-md-sections.md +38 -0
  194. package/docs/http-api.md +179 -11
  195. package/docs/mcp.md +69 -9
  196. package/docs/node-types.md +109 -4
  197. package/docs/plans/plan-009-tech-debt-backlog.md +3 -3
  198. package/docs/plans/plan-019-post-0.9-roadmap.md +327 -31
  199. package/docs/plans/plan-020-wave-5-work-planning.md +553 -0
  200. package/docs/product-vision-2026-09.md +42 -17
  201. package/docs/sdk.md +18 -0
  202. package/package.json +7 -4
  203. package/plugins/pmx-canvas/assets/preview.png +0 -0
  204. package/plugins/pmx-canvas/com.github.copilot/extensions/pmx-canvas/extension.mjs +3 -1
  205. package/plugins/pmx-canvas/com.github.copilot/extensions/pmx-canvas/runtime.json +1 -1
  206. package/plugins/pmx-canvas/plugin.json +2 -2
  207. package/plugins/pmx-canvas/runtime.json +1 -1
  208. package/plugins/pmx-canvas/tools.json +688 -128
  209. package/skills/data-analysis/SKILL.md +13 -26
  210. package/skills/frontend-design/LICENSE.txt +177 -0
  211. package/skills/frontend-design/SKILL.md +3 -0
  212. package/skills/pmx-canvas/SKILL.md +232 -849
  213. package/skills/pmx-canvas/evals/evals.json +26 -3
  214. package/skills/pmx-canvas/references/full-reference.md +89 -24
  215. package/skills/pmx-canvas/references/html-primitives.md +7 -0
  216. package/skills/pmx-canvas/references/installing-pmx-canvas.md +6 -6
  217. package/skills/pmx-canvas/references/tours-and-recording.md +29 -2
  218. package/skills/pmx-canvas/references/workbench-workflows.md +900 -0
  219. package/skills/pmx-canvas-testing/SKILL.md +7 -5
  220. package/skills/published-consumer-e2e/SKILL.md +25 -8
  221. package/skills/published-consumer-e2e/scripts/run-published-consumer-e2e.sh +51 -77
  222. package/skills/web-artifacts-builder/LICENSE.txt +202 -0
  223. package/skills/web-artifacts-builder/SKILL.md +6 -0
  224. package/skills/web-artifacts-builder/scripts/init-artifact.sh +2 -2
  225. package/src/cli/commands/apps.ts +1 -0
  226. package/src/cli/commands/boards.ts +30 -0
  227. package/src/client/App.tsx +20 -4
  228. package/src/client/canvas/AttentionHistory.tsx +10 -2
  229. package/src/client/canvas/BarHint.tsx +6 -3
  230. package/src/client/canvas/BoardMoveDialog.tsx +225 -0
  231. package/src/client/canvas/CanvasNode.tsx +79 -49
  232. package/src/client/canvas/CanvasViewport.tsx +42 -14
  233. package/src/client/canvas/ContextMenu.tsx +97 -15
  234. package/src/client/canvas/EdgeEditor.tsx +149 -0
  235. package/src/client/canvas/EdgeLayer.tsx +441 -174
  236. package/src/client/canvas/ExpandedNodeOverlay.tsx +5 -2
  237. package/src/client/canvas/GroupNavigation.tsx +85 -0
  238. package/src/client/canvas/Presentation.tsx +53 -3
  239. package/src/client/canvas/RelationsPanel.tsx +9 -0
  240. package/src/client/canvas/SelectionBar.tsx +21 -0
  241. package/src/client/canvas/SessionPanel.tsx +35 -1
  242. package/src/client/canvas/TextPrompt.tsx +18 -1
  243. package/src/client/canvas/TopBar.tsx +54 -9
  244. package/src/client/canvas/auto-fit.ts +9 -11
  245. package/src/client/canvas/canvas-area.ts +2 -2
  246. package/src/client/canvas/use-focus-trap.ts +6 -1
  247. package/src/client/mermaid-entry.ts +6 -20
  248. package/src/client/mermaid-render.ts +39 -0
  249. package/src/client/nodes/AxStepControls.tsx +45 -69
  250. package/src/client/nodes/BoardNode.tsx +65 -9
  251. package/src/client/nodes/ContextNode.tsx +88 -396
  252. package/src/client/nodes/ExtAppFrame.tsx +302 -1465
  253. package/src/client/nodes/FileNode.tsx +92 -81
  254. package/src/client/nodes/HtmlNode.tsx +8 -36
  255. package/src/client/nodes/LedgerNode.tsx +31 -17
  256. package/src/client/nodes/MarkdownNode.tsx +14 -24
  257. package/src/client/nodes/McpAppNode.tsx +48 -154
  258. package/src/client/nodes/MermaidNode.tsx +80 -69
  259. package/src/client/nodes/PromptNode.tsx +44 -17
  260. package/src/client/nodes/ResponseNode.tsx +8 -6
  261. package/src/client/nodes/StatusNode.tsx +34 -7
  262. package/src/client/nodes/StatusSummary.tsx +16 -3
  263. package/src/client/nodes/TraceNode.tsx +8 -8
  264. package/src/client/nodes/ViewerFrame.tsx +273 -0
  265. package/src/client/nodes/ViewerHost.tsx +41 -0
  266. package/src/client/nodes/WebpageNode.tsx +22 -24
  267. package/src/client/nodes/WorkCard.tsx +175 -0
  268. package/src/client/nodes/iframe-document-url.ts +20 -27
  269. package/src/client/nodes/primitive-copy.ts +97 -0
  270. package/src/client/nodes/use-ax-surface-bridge.ts +18 -14
  271. package/src/client/nodes/use-iframe-content-height.ts +34 -10
  272. package/src/client/nodes/use-surface-frame.ts +22 -11
  273. package/src/client/nodes/viewer-runtime-state.ts +41 -35
  274. package/src/client/state/attention-bridge.ts +5 -0
  275. package/src/client/state/attention-store.ts +1 -0
  276. package/src/client/state/canvas-store.ts +202 -26
  277. package/src/client/state/human-store.ts +22 -2
  278. package/src/client/state/intent-bridge.ts +20 -5
  279. package/src/client/state/presentation.ts +135 -15
  280. package/src/client/state/relation-store.ts +127 -1
  281. package/src/client/state/sse-bridge.ts +18 -19
  282. package/src/client/theme/global.css +483 -230
  283. package/src/client/theme/surface-theme.css +6 -6
  284. package/src/client/types.ts +1 -0
  285. package/src/json-render/charts/tufte-components.tsx +44 -2
  286. package/src/json-render/renderer/index.css +62 -2
  287. package/src/json-render/renderer/index.tsx +31 -7
  288. package/src/json-render/server.ts +3 -2
  289. package/src/mcp/server.ts +13 -3
  290. package/src/server/agent-presence.ts +43 -23
  291. package/src/server/ax-flow-loop.ts +6 -0
  292. package/src/server/ax-gate-ttl.ts +8 -1
  293. package/src/server/ax-interaction.ts +16 -10
  294. package/src/server/ax-state-manager.ts +17 -4
  295. package/src/server/ax-wait.ts +20 -6
  296. package/src/server/board-export.ts +54 -30
  297. package/src/server/board-local.ts +20 -0
  298. package/src/server/board-move.ts +297 -0
  299. package/src/server/canvas-db.ts +249 -158
  300. package/src/server/canvas-geometry.ts +1 -0
  301. package/src/server/canvas-operations.ts +139 -109
  302. package/src/server/canvas-schema.ts +21 -0
  303. package/src/server/canvas-serialization.ts +2 -0
  304. package/src/server/canvas-state.ts +797 -159
  305. package/src/server/card-relocation.ts +53 -0
  306. package/src/server/code-graph.ts +4 -3
  307. package/src/server/context-reads.ts +83 -55
  308. package/src/server/demo-state.json +140 -114
  309. package/src/server/file-watcher.ts +30 -10
  310. package/src/server/html-primitives.ts +3 -9
  311. package/src/server/html-surface.ts +8 -0
  312. package/src/server/human-presence.ts +18 -5
  313. package/src/server/index.ts +54 -24
  314. package/src/server/intent-registry.ts +43 -5
  315. package/src/server/knowledge-lifecycle.ts +32 -9
  316. package/src/server/lifecycle-status.ts +29 -1
  317. package/src/server/mcp-app-runtime.ts +26 -7
  318. package/src/server/mutation-history.ts +37 -8
  319. package/src/server/operations/composites.ts +6 -3
  320. package/src/server/operations/mcp-contracts.ts +32 -2
  321. package/src/server/operations/mcp.ts +36 -9
  322. package/src/server/operations/ops/annotation.ts +22 -1
  323. package/src/server/operations/ops/ax-await.ts +1 -0
  324. package/src/server/operations/ops/ax-timeline.ts +28 -2
  325. package/src/server/operations/ops/batch.ts +25 -11
  326. package/src/server/operations/ops/boards.ts +45 -6
  327. package/src/server/operations/ops/nodes.ts +70 -0
  328. package/src/server/operations/ops/query.ts +32 -3
  329. package/src/server/operations/ops/snapshots.ts +1 -0
  330. package/src/server/operations/ops/viewport.ts +11 -9
  331. package/src/server/operations/registry.ts +49 -4
  332. package/src/server/server.ts +69 -75
  333. package/src/server/tour-control.ts +97 -12
  334. package/src/server/trace-manager.ts +4 -0
  335. package/src/server/web-artifacts/scripts/init-artifact.sh +2 -2
  336. package/src/shared/agent-context.ts +7 -1
  337. package/src/shared/auto-arrange.ts +5 -4
  338. package/src/shared/ax-kinds.ts +13 -0
  339. package/src/shared/ax-surface-protocol.ts +20 -9
  340. package/src/shared/content-height-reporter.ts +4 -3
  341. package/src/shared/human-presence.ts +1 -0
  342. package/src/shared/lifecycle-status.ts +2 -0
  343. package/src/shared/tour.ts +8 -0
@@ -105,6 +105,16 @@
105
105
  "reason": {
106
106
  "description": "Why these nodes matter; kept with newly pinned nodes and shown to the human on hover.",
107
107
  "type": "string"
108
+ },
109
+ "targetBoardId": {
110
+ "description": "Execute on this board without changing the shared workbench view. Nested operations retain this target.",
111
+ "type": "string",
112
+ "minLength": 1
113
+ },
114
+ "agentId": {
115
+ "description": "Stable agent/thread identity for attribution and scope fences.",
116
+ "type": "string",
117
+ "minLength": 1
108
118
  }
109
119
  },
110
120
  "required": [
@@ -292,6 +302,16 @@
292
302
  "sdk",
293
303
  "system"
294
304
  ]
305
+ },
306
+ "targetBoardId": {
307
+ "description": "Execute on this board without changing the shared workbench view. Nested operations retain this target.",
308
+ "type": "string",
309
+ "minLength": 1
310
+ },
311
+ "agentId": {
312
+ "description": "Stable agent/thread identity for attribution and scope fences.",
313
+ "type": "string",
314
+ "minLength": 1
295
315
  }
296
316
  },
297
317
  "required": [
@@ -455,7 +475,7 @@
455
475
  },
456
476
  {
457
477
  "name": "canvas_batch",
458
- "description": "Run a non-atomic batch of canvas operations with optional assigned references. Use assign to name a result, then reference it later as \"$name\" for the created node id or \"$name.id\" for a specific result field. On failure, earlier successful operations remain applied and the response includes ok:false, failedIndex, error, results, and refs. Supports node.add, node.update, node.remove, graph.add, edge.add, edge.remove, group.create, group.add, group.remove, pin.set/add/remove, snapshot.save, and arrange.",
478
+ "description": "Run a non-atomic batch of canvas operations with optional assigned references. Use assign to name a result, then reference it later as \"$name\" for the created node id or \"$name.id\" for a specific result field. On failure, earlier successful operations remain applied and the response includes ok:false, failedIndex, error, results, and refs. Supports node.add, node.update, node.remove, graph.add, edge.add, edge.remove, group.create, group.add, group.remove, annotation.add, annotation.remove, pin.set/add/remove, snapshot.save, and arrange.",
459
479
  "inputSchema": {
460
480
  "type": "object",
461
481
  "properties": {
@@ -487,6 +507,11 @@
487
507
  },
488
508
  "description": "Ordered array of batch operations"
489
509
  },
510
+ "agentId": {
511
+ "description": "Stable agent/thread identity for attribution and scope fences.",
512
+ "type": "string",
513
+ "minLength": 1
514
+ },
490
515
  "full": {
491
516
  "description": "Return full batch operation results. Default false compacts node-like payloads.",
492
517
  "type": "boolean"
@@ -494,6 +519,11 @@
494
519
  "verbose": {
495
520
  "description": "Alias for full:true.",
496
521
  "type": "boolean"
522
+ },
523
+ "targetBoardId": {
524
+ "description": "Execute on this board without changing the shared workbench view. Nested operations retain this target.",
525
+ "type": "string",
526
+ "minLength": 1
497
527
  }
498
528
  },
499
529
  "required": [
@@ -934,6 +964,16 @@
934
964
  },
935
965
  "reason": {
936
966
  "type": "string"
967
+ },
968
+ "targetBoardId": {
969
+ "description": "Execute on this board without changing the shared workbench view. Nested operations retain this target.",
970
+ "type": "string",
971
+ "minLength": 1
972
+ },
973
+ "agentId": {
974
+ "description": "Stable agent/thread identity for attribution and scope fences.",
975
+ "type": "string",
976
+ "minLength": 1
937
977
  }
938
978
  },
939
979
  "required": [
@@ -1323,6 +1363,16 @@
1323
1363
  "snapshot": {
1324
1364
  "type": "string",
1325
1365
  "description": "Snapshot name or ID to compare against"
1366
+ },
1367
+ "targetBoardId": {
1368
+ "description": "Execute on this board without changing the shared workbench view. Nested operations retain this target.",
1369
+ "type": "string",
1370
+ "minLength": 1
1371
+ },
1372
+ "agentId": {
1373
+ "description": "Stable agent/thread identity for attribution and scope fences.",
1374
+ "type": "string",
1375
+ "minLength": 1
1326
1376
  }
1327
1377
  },
1328
1378
  "required": [
@@ -1736,7 +1786,7 @@
1736
1786
  },
1737
1787
  {
1738
1788
  "name": "canvas_board",
1739
- "description": "Knowledge data: knowledge-list reads categories/folders/shared relation presets; category-set replaces category (id/name/glyph/decayType/rate/triggers/revalidationMethod); category-remove deletes an unused category by id (explicit folder assignments, including empty folders, refuse deletion); relation-preset-set saves preset (id/name/vocabulary); relation-preset-remove deletes a template without changing existing board vocabularies; folder-set replaces path/categoryId/lifecycleOverride (null inherits). These workspace actions never open a board and are refused under agent scope fences. Boards in this workspace — the library of the human's and your working memory, filed in folders on Home. Your writes always go to the open board (activeBoardId); on Home (no board open) your first write opens the most recent board, or a new one when there are none. Action \"list\" returns every board (with its folder), most recently opened first; \"get\" reads one (default: the open board); \"create\" makes a new empty board WITHOUT opening it (optional folder); \"open\" explicitly switches the server active board to id (null or omitted opens Home), changing the subsequent write target. Humans browsing Map/Graph stay in the library until they explicitly open a board/card; do not infer activeBoardId from their visible library. After creating a board, open its returned id and verify activeBoardId before writing; another participant can switch the board later. \"update\" renames a board, files it under a folder (folder \"\" removes it), or designates its README via readmeNodeId. As part of normal board authoring, read the board metadata; if readmeNodeId is null, choose or create a concise markdown introduction explaining its purpose and key context, then designate that node with \"update\". Preserve an existing README unless the human asks to change it; humans can override the designation manually. \"pin\" adds a board to the working set (its README and pinned cards reach your brief whichever board is open; optional reason), \"unpin\" removes it; a pinned board is read-only context, never a write target. Only the human deletes boards.",
1789
+ "description": "\"move-selection\" previews or atomically relocates selected cards and group descendants to a new board, preserves identity and leaves a portal. Supply sourceBoardId, nodeIds, name, expectedRevision and requestId; preview:true reports blockers and the Undo/snapshot boundary. Retry identical input with the same requestId. It never opens the destination. Knowledge data: knowledge-list reads categories/folders/shared relation presets; category-set replaces category (id/name/glyph/decayType/rate/triggers/revalidationMethod); category-remove deletes an unused category by id (explicit folder assignments, including empty folders, refuse deletion); relation-preset-set saves preset (id/name/vocabulary); relation-preset-remove deletes a template without changing existing board vocabularies; folder-set replaces path/categoryId/lifecycleOverride (null inherits). These workspace actions never open a board and are refused under agent scope fences. Boards in this workspace — the library of the human's and your working memory, filed in folders on Home. Your writes always go to the open board (activeBoardId); on Home (no board open) your first write opens the most recent board, or a new one when there are none. Action \"list\" returns every board (with its folder), most recently opened first; \"get\" reads one (default: the open board); \"create\" makes a new empty board WITHOUT opening it (optional folder); \"open\" explicitly switches the server active board to id (null or omitted opens Home), changing the subsequent write target. Humans browsing Map/Graph stay in the library until they explicitly open a board/card; do not infer activeBoardId from their visible library. After creating a board, open its returned id and verify activeBoardId before writing; another participant can switch the board later. \"update\" renames a board, files it under a folder (folder \"\" removes it), or designates its README via readmeNodeId. As part of normal board authoring, read the board metadata; if readmeNodeId is null, choose or create a concise markdown introduction explaining its purpose and key context, then designate that node with \"update\". Preserve an existing README unless the human asks to change it; humans can override the designation manually. \"pin\" adds a board to the working set (its README and pinned cards reach your brief whichever board is open; optional reason), \"unpin\" removes it; a pinned board is read-only context, never a write target. Only the human deletes boards.",
1740
1790
  "inputSchema": {
1741
1791
  "type": "object",
1742
1792
  "properties": {
@@ -1747,6 +1797,7 @@
1747
1797
  "get",
1748
1798
  "create",
1749
1799
  "create-from",
1800
+ "move-selection",
1750
1801
  "open",
1751
1802
  "update",
1752
1803
  "knowledge-list",
@@ -1758,7 +1809,7 @@
1758
1809
  "pin",
1759
1810
  "unpin"
1760
1811
  ],
1761
- "description": "Operation to perform: list | get | create | create-from | open | update | pin | unpin | knowledge-list | category-set | category-remove | relation-preset-set | relation-preset-remove | folder-set."
1812
+ "description": "Operation to perform: list | get | create | create-from | move-selection | open | update | pin | unpin | knowledge-list | category-set | category-remove | relation-preset-set | relation-preset-remove | folder-set."
1762
1813
  },
1763
1814
  "id": {
1764
1815
  "description": "Board id (default: the open board)"
@@ -1789,6 +1840,16 @@
1789
1840
  "description": "Return reusable cards and structure without creating",
1790
1841
  "type": "boolean"
1791
1842
  },
1843
+ "expectedRevision": {
1844
+ "type": "integer",
1845
+ "minimum": 0,
1846
+ "maximum": 9007199254740991
1847
+ },
1848
+ "requestId": {
1849
+ "type": "string",
1850
+ "minLength": 1,
1851
+ "maxLength": 200
1852
+ },
1792
1853
  "relationVocabulary": {
1793
1854
  "description": "Board relation vocabulary: open kinds with a meaning ink and direction",
1794
1855
  "maxItems": 64,
@@ -2042,6 +2103,16 @@
2042
2103
  "reason": {
2043
2104
  "description": "Why this board matters; shown to the human on hover",
2044
2105
  "type": "string"
2106
+ },
2107
+ "targetBoardId": {
2108
+ "description": "Execute on this board without changing the shared workbench view. Nested operations retain this target.",
2109
+ "type": "string",
2110
+ "minLength": 1
2111
+ },
2112
+ "agentId": {
2113
+ "description": "Stable agent/thread identity for attribution and scope fences.",
2114
+ "type": "string",
2115
+ "minLength": 1
2045
2116
  }
2046
2117
  },
2047
2118
  "required": [
@@ -2297,6 +2368,109 @@
2297
2368
  ],
2298
2369
  "additionalProperties": false
2299
2370
  },
2371
+ {
2372
+ "type": "object",
2373
+ "properties": {
2374
+ "operation": {
2375
+ "type": "string",
2376
+ "const": "board.move-selection"
2377
+ },
2378
+ "outcome": {
2379
+ "type": "string",
2380
+ "const": "success"
2381
+ },
2382
+ "data": {
2383
+ "anyOf": [
2384
+ {
2385
+ "type": "object",
2386
+ "properties": {
2387
+ "ok": {
2388
+ "type": "boolean"
2389
+ },
2390
+ "preview": {
2391
+ "type": "object",
2392
+ "properties": {
2393
+ "sourceBoardId": {
2394
+ "type": "string",
2395
+ "minLength": 1
2396
+ },
2397
+ "nodeIds": {
2398
+ "type": "array",
2399
+ "items": {
2400
+ "type": "string",
2401
+ "minLength": 1
2402
+ }
2403
+ },
2404
+ "blockers": {
2405
+ "type": "array",
2406
+ "items": {
2407
+ "type": "string"
2408
+ }
2409
+ }
2410
+ },
2411
+ "required": [
2412
+ "sourceBoardId",
2413
+ "nodeIds",
2414
+ "blockers"
2415
+ ],
2416
+ "additionalProperties": {}
2417
+ }
2418
+ },
2419
+ "required": [
2420
+ "ok",
2421
+ "preview"
2422
+ ],
2423
+ "additionalProperties": {}
2424
+ },
2425
+ {
2426
+ "type": "object",
2427
+ "properties": {
2428
+ "ok": {
2429
+ "type": "boolean"
2430
+ },
2431
+ "sourceBoardId": {
2432
+ "type": "string",
2433
+ "minLength": 1
2434
+ },
2435
+ "destinationBoardId": {
2436
+ "type": "string",
2437
+ "minLength": 1
2438
+ },
2439
+ "portalId": {
2440
+ "type": "string",
2441
+ "minLength": 1
2442
+ },
2443
+ "nodeIds": {
2444
+ "type": "array",
2445
+ "items": {
2446
+ "type": "string",
2447
+ "minLength": 1
2448
+ }
2449
+ },
2450
+ "replayed": {
2451
+ "type": "boolean"
2452
+ }
2453
+ },
2454
+ "required": [
2455
+ "ok",
2456
+ "sourceBoardId",
2457
+ "destinationBoardId",
2458
+ "portalId",
2459
+ "nodeIds",
2460
+ "replayed"
2461
+ ],
2462
+ "additionalProperties": {}
2463
+ }
2464
+ ]
2465
+ }
2466
+ },
2467
+ "required": [
2468
+ "operation",
2469
+ "outcome",
2470
+ "data"
2471
+ ],
2472
+ "additionalProperties": false
2473
+ },
2300
2474
  {
2301
2475
  "type": "object",
2302
2476
  "properties": {
@@ -2577,6 +2751,7 @@
2577
2751
  "board.get",
2578
2752
  "board.create",
2579
2753
  "board.create-from",
2754
+ "board.move-selection",
2580
2755
  "board.open",
2581
2756
  "board.update",
2582
2757
  "knowledge.list",
@@ -3026,6 +3201,16 @@
3026
3201
  }
3027
3202
  ]
3028
3203
  }
3204
+ },
3205
+ "targetBoardId": {
3206
+ "description": "Execute on this board without changing the shared workbench view. Nested operations retain this target.",
3207
+ "type": "string",
3208
+ "minLength": 1
3209
+ },
3210
+ "agentId": {
3211
+ "description": "Stable agent/thread identity for attribution and scope fences.",
3212
+ "type": "string",
3213
+ "minLength": 1
3029
3214
  }
3030
3215
  },
3031
3216
  "required": [
@@ -3752,6 +3937,16 @@
3752
3937
  "heightPx": {
3753
3938
  "description": "SDK alias for nodeHeight (node frame height)",
3754
3939
  "type": "number"
3940
+ },
3941
+ "targetBoardId": {
3942
+ "description": "Execute on this board without changing the shared workbench view. Nested operations retain this target.",
3943
+ "type": "string",
3944
+ "minLength": 1
3945
+ },
3946
+ "agentId": {
3947
+ "description": "Stable agent/thread identity for attribution and scope fences.",
3948
+ "type": "string",
3949
+ "minLength": 1
3755
3950
  }
3756
3951
  },
3757
3952
  "required": [
@@ -4232,6 +4427,16 @@
4232
4427
  "edge_id": {
4233
4428
  "description": "Alias for id (legacy HTTP body field)",
4234
4429
  "type": "string"
4430
+ },
4431
+ "targetBoardId": {
4432
+ "description": "Execute on this board without changing the shared workbench view. Nested operations retain this target.",
4433
+ "type": "string",
4434
+ "minLength": 1
4435
+ },
4436
+ "agentId": {
4437
+ "description": "Stable agent/thread identity for attribution and scope fences.",
4438
+ "type": "string",
4439
+ "minLength": 1
4235
4440
  }
4236
4441
  },
4237
4442
  "required": [
@@ -4544,6 +4749,16 @@
4544
4749
  "groupId": {
4545
4750
  "description": "The group node ID",
4546
4751
  "type": "string"
4752
+ },
4753
+ "targetBoardId": {
4754
+ "description": "Execute on this board without changing the shared workbench view. Nested operations retain this target.",
4755
+ "type": "string",
4756
+ "minLength": 1
4757
+ },
4758
+ "agentId": {
4759
+ "description": "Stable agent/thread identity for attribution and scope fences.",
4760
+ "type": "string",
4761
+ "minLength": 1
4547
4762
  }
4548
4763
  },
4549
4764
  "required": [
@@ -4819,6 +5034,16 @@
4819
5034
  "redo"
4820
5035
  ],
4821
5036
  "description": "Operation to perform: undo | redo."
5037
+ },
5038
+ "targetBoardId": {
5039
+ "description": "Execute on this board without changing the shared workbench view. Nested operations retain this target.",
5040
+ "type": "string",
5041
+ "minLength": 1
5042
+ },
5043
+ "agentId": {
5044
+ "description": "Stable agent/thread identity for attribution and scope fences.",
5045
+ "type": "string",
5046
+ "minLength": 1
4822
5047
  }
4823
5048
  },
4824
5049
  "required": [
@@ -4984,7 +5209,7 @@
4984
5209
  },
4985
5210
  {
4986
5211
  "name": "canvas_view",
4987
- "description": "Canvas viewport and layout control. Action \"arrange\" auto-lays-out nodes (grid/columns/etc.); \"focus\" pans/zooms the viewport to a node; \"fit\" zooms to fit all nodes in view; \"clear\" removes every node and edge from the canvas; \"remove-annotation\" deletes a human-drawn annotation by id; \"get-tour\"/\"set-tour\" read or persist the presentation tour; \"tour-go\" presents a stop (stop index or step next/previous); \"tour-exit\" leaves presentation; \"move\" eases the camera to a nodeId, world rect or viewport over a duration. Camera actions never enter undo history.",
5212
+ "description": "Canvas viewport and layout control. Action \"arrange\" auto-lays-out nodes (grid/columns/etc.); \"focus\" pans/zooms the viewport to a node; \"fit\" zooms to fit all nodes in view; \"clear\" removes every node and edge from the canvas; \"add-annotation\" draws freehand points or text in world coordinates; \"remove-annotation\" erases a whole mark by id; \"get-tour\"/\"set-tour\" read or persist the presentation tour; \"tour-go\" presents a stop (stop index or step next/previous); \"tour-exit\" leaves presentation; \"move\" eases the camera to a nodeId, world rect or viewport over a duration. Camera actions never enter undo history.",
4988
5213
  "inputSchema": {
4989
5214
  "type": "object",
4990
5215
  "properties": {
@@ -5000,9 +5225,10 @@
5000
5225
  "focus",
5001
5226
  "fit",
5002
5227
  "clear",
5228
+ "add-annotation",
5003
5229
  "remove-annotation"
5004
5230
  ],
5005
- "description": "Operation to perform: arrange | focus | fit | clear | remove-annotation | get-tour | set-tour | tour-go | tour-exit | move."
5231
+ "description": "Operation to perform: arrange | focus | fit | clear | add-annotation | remove-annotation | get-tour | set-tour | tour-go | tour-exit | move."
5006
5232
  },
5007
5233
  "tour": {
5008
5234
  "anyOf": [
@@ -5148,6 +5374,38 @@
5148
5374
  "previous"
5149
5375
  ]
5150
5376
  },
5377
+ "presenter": {
5378
+ "description": "Document intent order and expected board activation",
5379
+ "type": "object",
5380
+ "properties": {
5381
+ "clientId": {
5382
+ "type": "string",
5383
+ "minLength": 1,
5384
+ "maxLength": 128
5385
+ },
5386
+ "intent": {
5387
+ "type": "integer",
5388
+ "exclusiveMinimum": 0,
5389
+ "maximum": 9007199254740991
5390
+ },
5391
+ "catalogEpoch": {
5392
+ "type": "string",
5393
+ "minLength": 1,
5394
+ "maxLength": 128
5395
+ },
5396
+ "boardGeneration": {
5397
+ "type": "integer",
5398
+ "minimum": 0,
5399
+ "maximum": 9007199254740991
5400
+ }
5401
+ },
5402
+ "required": [
5403
+ "clientId",
5404
+ "intent",
5405
+ "catalogEpoch",
5406
+ "boardGeneration"
5407
+ ]
5408
+ },
5151
5409
  "present": {
5152
5410
  "description": "Start presenting in viewers that are not presenting yet (default true; false only moves presenting viewers)",
5153
5411
  "type": "boolean"
@@ -5263,6 +5521,51 @@
5263
5521
  "items": {
5264
5522
  "type": "string"
5265
5523
  }
5524
+ },
5525
+ "type": {
5526
+ "type": "string",
5527
+ "enum": [
5528
+ "freehand",
5529
+ "text"
5530
+ ]
5531
+ },
5532
+ "points": {
5533
+ "minItems": 1,
5534
+ "type": "array",
5535
+ "items": {
5536
+ "type": "object",
5537
+ "properties": {
5538
+ "x": {
5539
+ "type": "number"
5540
+ },
5541
+ "y": {
5542
+ "type": "number"
5543
+ }
5544
+ },
5545
+ "required": [
5546
+ "x",
5547
+ "y"
5548
+ ]
5549
+ }
5550
+ },
5551
+ "color": {
5552
+ "type": "string"
5553
+ },
5554
+ "label": {
5555
+ "type": "string"
5556
+ },
5557
+ "text": {
5558
+ "type": "string"
5559
+ },
5560
+ "targetBoardId": {
5561
+ "description": "Execute on this board without changing the shared workbench view. Nested operations retain this target.",
5562
+ "type": "string",
5563
+ "minLength": 1
5564
+ },
5565
+ "agentId": {
5566
+ "description": "Stable agent/thread identity for attribution and scope fences.",
5567
+ "type": "string",
5568
+ "minLength": 1
5266
5569
  }
5267
5570
  },
5268
5571
  "required": [
@@ -5454,7 +5757,6 @@
5454
5757
  "type": "string",
5455
5758
  "enum": [
5456
5759
  "tour.set",
5457
- "tour.exit",
5458
5760
  "annotation.remove"
5459
5761
  ]
5460
5762
  },
@@ -5494,142 +5796,249 @@
5494
5796
  "const": "success"
5495
5797
  },
5496
5798
  "data": {
5497
- "type": "object",
5498
- "properties": {
5499
- "ok": {
5500
- "type": "boolean"
5501
- },
5502
- "index": {
5503
- "type": "integer",
5504
- "minimum": 0,
5505
- "maximum": 9007199254740991
5506
- },
5507
- "total": {
5508
- "type": "integer",
5509
- "minimum": 0,
5510
- "maximum": 9007199254740991
5511
- },
5512
- "stop": {
5799
+ "anyOf": [
5800
+ {
5513
5801
  "type": "object",
5514
5802
  "properties": {
5515
- "target": {
5516
- "anyOf": [
5517
- {
5518
- "type": "object",
5519
- "properties": {
5520
- "nodeId": {
5521
- "type": "string",
5522
- "minLength": 1
5523
- }
5524
- },
5525
- "required": [
5526
- "nodeId"
5527
- ],
5528
- "additionalProperties": false
5529
- },
5530
- {
5531
- "type": "object",
5532
- "properties": {
5533
- "rect": {
5534
- "type": "object",
5535
- "properties": {
5536
- "x": {
5537
- "type": "number"
5538
- },
5539
- "y": {
5540
- "type": "number"
5541
- },
5542
- "width": {
5543
- "type": "number",
5544
- "exclusiveMinimum": 0
5545
- },
5546
- "height": {
5547
- "type": "number",
5548
- "exclusiveMinimum": 0
5803
+ "ok": {
5804
+ "type": "boolean"
5805
+ },
5806
+ "catalogEpoch": {
5807
+ "type": "string"
5808
+ },
5809
+ "boardGeneration": {
5810
+ "type": "integer",
5811
+ "minimum": 0,
5812
+ "maximum": 9007199254740991
5813
+ },
5814
+ "sequence": {
5815
+ "type": "integer",
5816
+ "minimum": 0,
5817
+ "maximum": 9007199254740991
5818
+ },
5819
+ "index": {
5820
+ "type": "integer",
5821
+ "minimum": 0,
5822
+ "maximum": 9007199254740991
5823
+ },
5824
+ "total": {
5825
+ "type": "integer",
5826
+ "minimum": 0,
5827
+ "maximum": 9007199254740991
5828
+ },
5829
+ "stop": {
5830
+ "type": "object",
5831
+ "properties": {
5832
+ "target": {
5833
+ "anyOf": [
5834
+ {
5835
+ "type": "object",
5836
+ "properties": {
5837
+ "nodeId": {
5838
+ "type": "string",
5839
+ "minLength": 1
5549
5840
  }
5550
5841
  },
5551
5842
  "required": [
5552
- "x",
5553
- "y",
5554
- "width",
5555
- "height"
5843
+ "nodeId"
5556
5844
  ],
5557
5845
  "additionalProperties": false
5558
- }
5559
- },
5560
- "required": [
5561
- "rect"
5562
- ],
5563
- "additionalProperties": false
5564
- },
5565
- {
5566
- "type": "object",
5567
- "properties": {
5568
- "viewport": {
5846
+ },
5847
+ {
5569
5848
  "type": "object",
5570
5849
  "properties": {
5571
- "x": {
5572
- "type": "number"
5573
- },
5574
- "y": {
5575
- "type": "number"
5576
- },
5577
- "scale": {
5578
- "type": "number",
5579
- "exclusiveMinimum": 0
5850
+ "rect": {
5851
+ "type": "object",
5852
+ "properties": {
5853
+ "x": {
5854
+ "type": "number"
5855
+ },
5856
+ "y": {
5857
+ "type": "number"
5858
+ },
5859
+ "width": {
5860
+ "type": "number",
5861
+ "exclusiveMinimum": 0
5862
+ },
5863
+ "height": {
5864
+ "type": "number",
5865
+ "exclusiveMinimum": 0
5866
+ }
5867
+ },
5868
+ "required": [
5869
+ "x",
5870
+ "y",
5871
+ "width",
5872
+ "height"
5873
+ ],
5874
+ "additionalProperties": false
5580
5875
  }
5581
5876
  },
5582
5877
  "required": [
5583
- "x",
5584
- "y",
5585
- "scale"
5878
+ "rect"
5879
+ ],
5880
+ "additionalProperties": false
5881
+ },
5882
+ {
5883
+ "type": "object",
5884
+ "properties": {
5885
+ "viewport": {
5886
+ "type": "object",
5887
+ "properties": {
5888
+ "x": {
5889
+ "type": "number"
5890
+ },
5891
+ "y": {
5892
+ "type": "number"
5893
+ },
5894
+ "scale": {
5895
+ "type": "number",
5896
+ "exclusiveMinimum": 0
5897
+ }
5898
+ },
5899
+ "required": [
5900
+ "x",
5901
+ "y",
5902
+ "scale"
5903
+ ],
5904
+ "additionalProperties": false
5905
+ }
5906
+ },
5907
+ "required": [
5908
+ "viewport"
5586
5909
  ],
5587
5910
  "additionalProperties": false
5588
5911
  }
5589
- },
5590
- "required": [
5591
- "viewport"
5592
- ],
5593
- "additionalProperties": false
5912
+ ]
5913
+ },
5914
+ "duration": {
5915
+ "type": "number",
5916
+ "minimum": 0,
5917
+ "maximum": 3600
5918
+ },
5919
+ "easing": {
5920
+ "type": "string",
5921
+ "enum": [
5922
+ "linear",
5923
+ "ease-in-out",
5924
+ "ease-out"
5925
+ ]
5926
+ },
5927
+ "padding": {
5928
+ "type": "number",
5929
+ "minimum": 0
5930
+ },
5931
+ "pullback": {
5932
+ "type": "number",
5933
+ "minimum": 0,
5934
+ "maximum": 4
5594
5935
  }
5595
- ]
5936
+ },
5937
+ "required": [
5938
+ "target"
5939
+ ],
5940
+ "additionalProperties": false
5941
+ }
5942
+ },
5943
+ "required": [
5944
+ "ok",
5945
+ "catalogEpoch",
5946
+ "boardGeneration",
5947
+ "sequence",
5948
+ "index",
5949
+ "total",
5950
+ "stop"
5951
+ ],
5952
+ "additionalProperties": {}
5953
+ },
5954
+ {
5955
+ "type": "object",
5956
+ "properties": {
5957
+ "ok": {
5958
+ "type": "boolean",
5959
+ "const": true
5596
5960
  },
5597
- "duration": {
5598
- "type": "number",
5599
- "minimum": 0,
5600
- "maximum": 3600
5961
+ "superseded": {
5962
+ "type": "boolean",
5963
+ "const": true
5964
+ }
5965
+ },
5966
+ "required": [
5967
+ "ok",
5968
+ "superseded"
5969
+ ],
5970
+ "additionalProperties": false
5971
+ }
5972
+ ]
5973
+ }
5974
+ },
5975
+ "required": [
5976
+ "operation",
5977
+ "outcome",
5978
+ "data"
5979
+ ],
5980
+ "additionalProperties": false
5981
+ },
5982
+ {
5983
+ "type": "object",
5984
+ "properties": {
5985
+ "operation": {
5986
+ "type": "string",
5987
+ "const": "tour.exit"
5988
+ },
5989
+ "outcome": {
5990
+ "type": "string",
5991
+ "const": "success"
5992
+ },
5993
+ "data": {
5994
+ "anyOf": [
5995
+ {
5996
+ "type": "object",
5997
+ "properties": {
5998
+ "ok": {
5999
+ "type": "boolean"
5601
6000
  },
5602
- "easing": {
5603
- "type": "string",
5604
- "enum": [
5605
- "linear",
5606
- "ease-in-out",
5607
- "ease-out"
5608
- ]
6001
+ "catalogEpoch": {
6002
+ "type": "string"
5609
6003
  },
5610
- "padding": {
5611
- "type": "number",
5612
- "minimum": 0
6004
+ "boardGeneration": {
6005
+ "type": "integer",
6006
+ "minimum": 0,
6007
+ "maximum": 9007199254740991
5613
6008
  },
5614
- "pullback": {
5615
- "type": "number",
6009
+ "sequence": {
6010
+ "type": "integer",
5616
6011
  "minimum": 0,
5617
- "maximum": 4
6012
+ "maximum": 9007199254740991
5618
6013
  }
5619
6014
  },
5620
6015
  "required": [
5621
- "target"
6016
+ "ok",
6017
+ "catalogEpoch",
6018
+ "boardGeneration",
6019
+ "sequence"
6020
+ ],
6021
+ "additionalProperties": {}
6022
+ },
6023
+ {
6024
+ "type": "object",
6025
+ "properties": {
6026
+ "ok": {
6027
+ "type": "boolean",
6028
+ "const": true
6029
+ },
6030
+ "superseded": {
6031
+ "type": "boolean",
6032
+ "const": true
6033
+ }
6034
+ },
6035
+ "required": [
6036
+ "ok",
6037
+ "superseded"
5622
6038
  ],
5623
6039
  "additionalProperties": false
5624
6040
  }
5625
- },
5626
- "required": [
5627
- "ok",
5628
- "index",
5629
- "total",
5630
- "stop"
5631
- ],
5632
- "additionalProperties": {}
6041
+ ]
5633
6042
  }
5634
6043
  },
5635
6044
  "required": [
@@ -5975,6 +6384,51 @@
5975
6384
  ],
5976
6385
  "additionalProperties": false
5977
6386
  },
6387
+ {
6388
+ "type": "object",
6389
+ "properties": {
6390
+ "operation": {
6391
+ "type": "string",
6392
+ "const": "annotation.add"
6393
+ },
6394
+ "outcome": {
6395
+ "type": "string",
6396
+ "const": "success"
6397
+ },
6398
+ "data": {
6399
+ "type": "object",
6400
+ "properties": {
6401
+ "ok": {
6402
+ "type": "boolean"
6403
+ },
6404
+ "annotation": {
6405
+ "type": "object",
6406
+ "properties": {
6407
+ "id": {
6408
+ "type": "string",
6409
+ "minLength": 1
6410
+ }
6411
+ },
6412
+ "required": [
6413
+ "id"
6414
+ ],
6415
+ "additionalProperties": {}
6416
+ }
6417
+ },
6418
+ "required": [
6419
+ "ok",
6420
+ "annotation"
6421
+ ],
6422
+ "additionalProperties": {}
6423
+ }
6424
+ },
6425
+ "required": [
6426
+ "operation",
6427
+ "outcome",
6428
+ "data"
6429
+ ],
6430
+ "additionalProperties": false
6431
+ },
5978
6432
  {
5979
6433
  "type": "object",
5980
6434
  "properties": {
@@ -5990,6 +6444,7 @@
5990
6444
  "node.focus",
5991
6445
  "view.fit",
5992
6446
  "canvas.clear",
6447
+ "annotation.add",
5993
6448
  "annotation.remove"
5994
6449
  ]
5995
6450
  },
@@ -6113,6 +6568,14 @@
6113
6568
  "budget": {
6114
6569
  "description": "Maximum response size in UTF-16 code units"
6115
6570
  },
6571
+ "contextDelivery": {
6572
+ "description": "False prepares a brief without recording delivery or advancing a cursor.",
6573
+ "type": "boolean"
6574
+ },
6575
+ "includeSteering": {
6576
+ "description": "False omits steering for hosts that deliver it separately.",
6577
+ "type": "boolean"
6578
+ },
6116
6579
  "projection": {
6117
6580
  "default": "full",
6118
6581
  "description": "Full board/card graph, or board-only Map summaries with qualified cross-board and missing relations",
@@ -6180,6 +6643,16 @@
6180
6643
  "verbose": {
6181
6644
  "description": "Alias for full:true.",
6182
6645
  "type": "boolean"
6646
+ },
6647
+ "targetBoardId": {
6648
+ "description": "Execute on this board without changing the shared workbench view. Nested operations retain this target.",
6649
+ "type": "string",
6650
+ "minLength": 1
6651
+ },
6652
+ "agentId": {
6653
+ "description": "Stable agent/thread identity for attribution and scope fences.",
6654
+ "type": "string",
6655
+ "minLength": 1
6183
6656
  }
6184
6657
  },
6185
6658
  "required": [
@@ -6842,6 +7315,16 @@
6842
7315
  "bundleScriptPath": {
6843
7316
  "description": "Optional script path override for tests/debugging. Must resolve inside the workspace.",
6844
7317
  "type": "string"
7318
+ },
7319
+ "targetBoardId": {
7320
+ "description": "Execute on this board without changing the shared workbench view. Nested operations retain this target.",
7321
+ "type": "string",
7322
+ "minLength": 1
7323
+ },
7324
+ "agentId": {
7325
+ "description": "Stable agent/thread identity for attribution and scope fences.",
7326
+ "type": "string",
7327
+ "minLength": 1
6845
7328
  }
6846
7329
  },
6847
7330
  "required": [
@@ -7187,6 +7670,16 @@
7187
7670
  "script": {
7188
7671
  "description": "Multi-statement JavaScript body. The MCP server wraps it in an async IIFE and evaluates the resolved return value.",
7189
7672
  "type": "string"
7673
+ },
7674
+ "targetBoardId": {
7675
+ "description": "Execute on this board without changing the shared workbench view. Nested operations retain this target.",
7676
+ "type": "string",
7677
+ "minLength": 1
7678
+ },
7679
+ "agentId": {
7680
+ "description": "Stable agent/thread identity for attribution and scope fences.",
7681
+ "type": "string",
7682
+ "minLength": 1
7190
7683
  }
7191
7684
  },
7192
7685
  "required": [
@@ -7535,17 +8028,9 @@
7535
8028
  "additionalProperties": {}
7536
8029
  },
7537
8030
  "agentId": {
7538
- "description": "Stable identity for a genuinely separate agent, not a task name. Omit for the main agent when a host adapter already owns its session.",
7539
- "anyOf": [
7540
- {
7541
- "type": "string",
7542
- "minLength": 1,
7543
- "maxLength": 80
7544
- },
7545
- {
7546
- "type": "null"
7547
- }
7548
- ]
8031
+ "description": "Stable agent/thread identity for attribution and scope fences.",
8032
+ "type": "string",
8033
+ "minLength": 1
7549
8034
  },
7550
8035
  "label": {
7551
8036
  "description": "Display name for this writer; use detail for the current task",
@@ -7638,6 +8123,11 @@
7638
8123
  "type": "null"
7639
8124
  }
7640
8125
  ]
8126
+ },
8127
+ "targetBoardId": {
8128
+ "description": "Execute on this board without changing the shared workbench view. Nested operations retain this target.",
8129
+ "type": "string",
8130
+ "minLength": 1
7641
8131
  }
7642
8132
  },
7643
8133
  "required": [
@@ -7875,7 +8365,9 @@
7875
8365
  "description": "Optional host/source label. Defaults to mcp."
7876
8366
  },
7877
8367
  "agentId": {
7878
- "description": "Optional per-agent identity within the host."
8368
+ "description": "Stable agent/thread identity for attribution and scope fences.",
8369
+ "type": "string",
8370
+ "minLength": 1
7879
8371
  },
7880
8372
  "id": {
7881
8373
  "type": "string",
@@ -7937,6 +8429,11 @@
7937
8429
  "author": {
7938
8430
  "description": "Optional author label.",
7939
8431
  "type": "string"
8432
+ },
8433
+ "targetBoardId": {
8434
+ "description": "Execute on this board without changing the shared workbench view. Nested operations retain this target.",
8435
+ "type": "string",
8436
+ "minLength": 1
7940
8437
  }
7941
8438
  },
7942
8439
  "required": [
@@ -8279,6 +8776,16 @@
8279
8776
  },
8280
8777
  "reason": {
8281
8778
  "type": "string"
8779
+ },
8780
+ "targetBoardId": {
8781
+ "description": "Execute on this board without changing the shared workbench view. Nested operations retain this target.",
8782
+ "type": "string",
8783
+ "minLength": 1
8784
+ },
8785
+ "agentId": {
8786
+ "description": "Stable agent/thread identity for attribution and scope fences.",
8787
+ "type": "string",
8788
+ "minLength": 1
8282
8789
  }
8283
8790
  },
8284
8791
  "required": [
@@ -8941,7 +9448,9 @@
8941
9448
  "description": "Optional host/source label. Defaults to mcp."
8942
9449
  },
8943
9450
  "agentId": {
8944
- "description": "Optional per-agent identity within the host."
9451
+ "description": "Stable agent/thread identity for attribution and scope fences.",
9452
+ "type": "string",
9453
+ "minLength": 1
8945
9454
  },
8946
9455
  "title": {
8947
9456
  "type": "string",
@@ -8972,6 +9481,11 @@
8972
9481
  "boards": {
8973
9482
  "description": "Comma-separated board ids: also return each one's latest agent read (pinned boards, in one request).",
8974
9483
  "type": "string"
9484
+ },
9485
+ "targetBoardId": {
9486
+ "description": "Execute on this board without changing the shared workbench view. Nested operations retain this target.",
9487
+ "type": "string",
9488
+ "minLength": 1
8975
9489
  }
8976
9490
  },
8977
9491
  "required": [
@@ -9326,6 +9840,12 @@
9326
9840
  "description": "Max steering messages to return.",
9327
9841
  "type": "number"
9328
9842
  },
9843
+ "offset": {
9844
+ "description": "Skip this many matching pending messages. Restart at zero after an empty page.",
9845
+ "type": "integer",
9846
+ "minimum": 0,
9847
+ "maximum": 9007199254740991
9848
+ },
9329
9849
  "order": {
9330
9850
  "description": "Order of returned steering: \"oldest\" (FIFO, default) for ordered processing, or \"newest\" first to see the latest browser action when limited.",
9331
9851
  "type": "string",
@@ -9334,6 +9854,10 @@
9334
9854
  "oldest"
9335
9855
  ]
9336
9856
  },
9857
+ "addressedOnly": {
9858
+ "description": "Only messages addressed to consumer, excluding broadcasts before applying the limit.",
9859
+ "type": "boolean"
9860
+ },
9337
9861
  "timeoutMs": {
9338
9862
  "description": "Max ms to block until steering arrives (0/omitted = immediate read).",
9339
9863
  "type": "number",
@@ -9343,6 +9867,16 @@
9343
9867
  "id": {
9344
9868
  "type": "string",
9345
9869
  "description": "The steering message id to mark delivered."
9870
+ },
9871
+ "targetBoardId": {
9872
+ "description": "Execute on this board without changing the shared workbench view. Nested operations retain this target.",
9873
+ "type": "string",
9874
+ "minLength": 1
9875
+ },
9876
+ "agentId": {
9877
+ "description": "Stable agent/thread identity for attribution and scope fences.",
9878
+ "type": "string",
9879
+ "minLength": 1
9346
9880
  }
9347
9881
  },
9348
9882
  "required": [
@@ -9654,6 +10188,16 @@
9654
10188
  "settledNodeId": {
9655
10189
  "description": "The real node this intent became — triggers the settle morph.",
9656
10190
  "type": "string"
10191
+ },
10192
+ "targetBoardId": {
10193
+ "description": "Execute on this board without changing the shared workbench view. Nested operations retain this target.",
10194
+ "type": "string",
10195
+ "minLength": 1
10196
+ },
10197
+ "agentId": {
10198
+ "description": "Stable agent/thread identity for attribution and scope fences.",
10199
+ "type": "string",
10200
+ "minLength": 1
9657
10201
  }
9658
10202
  },
9659
10203
  "required": [
@@ -9903,6 +10447,12 @@
9903
10447
  "inputSchema": {
9904
10448
  "type": "object",
9905
10449
  "properties": {
10450
+ "targetBoardId": {
10451
+ "type": "string"
10452
+ },
10453
+ "agentId": {
10454
+ "type": "string"
10455
+ },
9906
10456
  "type": {
9907
10457
  "type": "string",
9908
10458
  "enum": [
@@ -10025,6 +10575,12 @@
10025
10575
  "inputSchema": {
10026
10576
  "type": "object",
10027
10577
  "properties": {
10578
+ "targetBoardId": {
10579
+ "type": "string"
10580
+ },
10581
+ "agentId": {
10582
+ "type": "string"
10583
+ },
10028
10584
  "kind": {
10029
10585
  "type": "string",
10030
10586
  "enum": [
@@ -10312,6 +10868,10 @@
10312
10868
  "inputSchema": {
10313
10869
  "type": "object",
10314
10870
  "properties": {
10871
+ "targetBoardId": {
10872
+ "description": "Not supported: screenshots inspect the shared WebView.",
10873
+ "type": "string"
10874
+ },
10315
10875
  "format": {
10316
10876
  "description": "Screenshot format (default depends on Bun; png recommended)",
10317
10877
  "type": "string",