pmx-canvas 0.11.0 → 0.12.1

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 (300) hide show
  1. package/.github/extensions/pmx-canvas/extension.mjs +4 -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 +51 -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 +267 -0
  11. package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/evals/evals.json +1168 -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 +1839 -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 +301 -0
  26. package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/references/tours-and-recording.md +117 -0
  27. package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/references/workbench-workflows.md +908 -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 +22 -2
  151. package/docs/amp-plugin.md +270 -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 +4 -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 +248 -842
  179. package/skills/pmx-canvas/evals/evals.json +110 -5
  180. package/skills/pmx-canvas/references/full-reference.md +142 -28
  181. package/skills/pmx-canvas/references/html-primitives.md +7 -0
  182. package/skills/pmx-canvas/references/installing-pmx-canvas.md +61 -11
  183. package/skills/pmx-canvas/references/tours-and-recording.md +39 -6
  184. package/skills/pmx-canvas/references/workbench-workflows.md +908 -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/bundle-artifact.sh +2 -2
  191. package/skills/web-artifacts-builder/scripts/init-artifact.sh +8 -8
  192. package/src/cli/commands/apps.ts +1 -0
  193. package/src/cli/commands/boards.ts +30 -0
  194. package/src/client/App.tsx +20 -4
  195. package/src/client/canvas/AttentionHistory.tsx +10 -2
  196. package/src/client/canvas/BoardMoveDialog.tsx +225 -0
  197. package/src/client/canvas/CanvasNode.tsx +45 -2
  198. package/src/client/canvas/CanvasViewport.tsx +38 -9
  199. package/src/client/canvas/ContextMenu.tsx +34 -12
  200. package/src/client/canvas/EdgeEditor.tsx +149 -0
  201. package/src/client/canvas/EdgeLayer.tsx +87 -16
  202. package/src/client/canvas/ExpandedNodeOverlay.tsx +4 -0
  203. package/src/client/canvas/GroupNavigation.tsx +85 -0
  204. package/src/client/canvas/RelationsPanel.tsx +9 -0
  205. package/src/client/canvas/SelectionBar.tsx +21 -0
  206. package/src/client/canvas/SessionPanel.tsx +35 -1
  207. package/src/client/canvas/TextPrompt.tsx +18 -1
  208. package/src/client/canvas/TopBar.tsx +30 -0
  209. package/src/client/canvas/canvas-area.ts +1 -1
  210. package/src/client/nodes/ExtAppFrame.tsx +26 -10
  211. package/src/client/nodes/MarkdownNode.tsx +6 -7
  212. package/src/client/nodes/PromptNode.tsx +32 -3
  213. package/src/client/nodes/StatusNode.tsx +12 -0
  214. package/src/client/nodes/StatusSummary.tsx +11 -0
  215. package/src/client/nodes/ViewerFrame.tsx +21 -10
  216. package/src/client/nodes/WorkCard.tsx +175 -0
  217. package/src/client/nodes/use-ax-surface-bridge.ts +18 -14
  218. package/src/client/state/attention-bridge.ts +5 -0
  219. package/src/client/state/attention-store.ts +1 -0
  220. package/src/client/state/canvas-store.ts +185 -15
  221. package/src/client/state/human-store.ts +22 -2
  222. package/src/client/state/intent-bridge.ts +19 -5
  223. package/src/client/state/relation-store.ts +127 -1
  224. package/src/client/theme/global.css +94 -1
  225. package/src/client/types.ts +1 -0
  226. package/src/mcp/server.ts +13 -3
  227. package/src/server/agent-presence.ts +43 -23
  228. package/src/server/ax-flow-loop.ts +6 -0
  229. package/src/server/ax-gate-ttl.ts +8 -1
  230. package/src/server/ax-interaction.ts +16 -10
  231. package/src/server/ax-state-manager.ts +17 -4
  232. package/src/server/ax-wait.ts +20 -6
  233. package/src/server/board-export.ts +19 -6
  234. package/src/server/board-local.ts +20 -0
  235. package/src/server/board-move.ts +297 -0
  236. package/src/server/canvas-db.ts +262 -160
  237. package/src/server/canvas-operations.ts +139 -109
  238. package/src/server/canvas-schema.ts +21 -0
  239. package/src/server/canvas-serialization.ts +2 -0
  240. package/src/server/canvas-state.ts +792 -159
  241. package/src/server/card-relocation.ts +53 -0
  242. package/src/server/code-graph.ts +4 -3
  243. package/src/server/context-reads.ts +83 -55
  244. package/src/server/demo-state.json +35 -15
  245. package/src/server/file-watcher.ts +30 -10
  246. package/src/server/human-presence.ts +18 -5
  247. package/src/server/index.ts +35 -15
  248. package/src/server/intent-registry.ts +43 -5
  249. package/src/server/knowledge-lifecycle.ts +32 -9
  250. package/src/server/lifecycle-status.ts +29 -1
  251. package/src/server/mcp-app-runtime.ts +26 -7
  252. package/src/server/mutation-history.ts +37 -8
  253. package/src/server/operations/composites.ts +6 -3
  254. package/src/server/operations/mcp-contracts.ts +15 -0
  255. package/src/server/operations/mcp.ts +36 -9
  256. package/src/server/operations/ops/annotation.ts +22 -1
  257. package/src/server/operations/ops/ax-await.ts +1 -0
  258. package/src/server/operations/ops/ax-timeline.ts +28 -2
  259. package/src/server/operations/ops/batch.ts +25 -11
  260. package/src/server/operations/ops/boards.ts +44 -3
  261. package/src/server/operations/ops/nodes.ts +70 -0
  262. package/src/server/operations/ops/query.ts +32 -3
  263. package/src/server/operations/ops/snapshots.ts +1 -0
  264. package/src/server/operations/registry.ts +49 -4
  265. package/src/server/server.ts +62 -16
  266. package/src/server/tour-control.ts +37 -12
  267. package/src/server/trace-manager.ts +4 -0
  268. package/src/server/web-artifacts/scripts/bundle-artifact.sh +2 -2
  269. package/src/server/web-artifacts/scripts/init-artifact.sh +8 -8
  270. package/src/shared/agent-context.ts +7 -1
  271. package/src/shared/auto-arrange.ts +5 -4
  272. package/src/shared/ax-kinds.ts +13 -0
  273. package/src/shared/ax-surface-protocol.ts +22 -0
  274. package/src/shared/human-presence.ts +1 -0
  275. package/src/shared/lifecycle-status.ts +2 -0
  276. package/dist/canvas/chunks/architecture-TIHT7OUA-9tffvpsv.js +0 -1
  277. package/dist/canvas/chunks/classDiagram-JCYQIIEL-nc6g5x1r.js +0 -1
  278. package/dist/canvas/chunks/classDiagram-v2-OCEON4UE-0qnbpwvh.js +0 -1
  279. package/dist/canvas/chunks/cynefin-VYW2F7L2-ys8p46ts.js +0 -1
  280. package/dist/canvas/chunks/eventmodeling-45OFAUF4-v9q6dn4c.js +0 -1
  281. package/dist/canvas/chunks/flowDiagram-UKHOOZJN-yrr5z8tc.js +0 -1
  282. package/dist/canvas/chunks/gitGraph-TEB2WS4Q-kdwb8m0a.js +0 -1
  283. package/dist/canvas/chunks/index-1r72hdzb.js +0 -301
  284. package/dist/canvas/chunks/index-g3pwnqeb.js +0 -2
  285. package/dist/canvas/chunks/index-rft2hcz5.js +0 -2
  286. package/dist/canvas/chunks/info-DKCQHKI2-wpzs6sz3.js +0 -1
  287. package/dist/canvas/chunks/ishikawaDiagram-WSZJBQD7-5hnq1a9p.js +0 -70
  288. package/dist/canvas/chunks/packet-7NZHBO7P-xn439f0s.js +0 -1
  289. package/dist/canvas/chunks/pie-RZYD4A2V-0kf16rwh.js +0 -1
  290. package/dist/canvas/chunks/radar-I7S5WNFK-0g2pz36t.js +0 -1
  291. package/dist/canvas/chunks/railroad-3IZDKUUU-fcaran6j.js +0 -1
  292. package/dist/canvas/chunks/railroad-abnf-AHOZXSZD-wgdya41q.js +0 -1
  293. package/dist/canvas/chunks/railroad-ebnf-EBAXGLYW-gy07a4ka.js +0 -1
  294. package/dist/canvas/chunks/railroad-peg-LSFZ7HO6-ewk6wtkh.js +0 -1
  295. package/dist/canvas/chunks/stateDiagram-v2-UEYNNEHI-k8sfp2e7.js +0 -1
  296. package/dist/canvas/chunks/swimlanesDiagram-ULZ7WXOC-nqysw67j.js +0 -8
  297. package/dist/canvas/chunks/treeView-QDETBFTQ-cesw6gp0.js +0 -1
  298. package/dist/canvas/chunks/treemap-6X3UGDF4-zdv4knp9.js +0 -1
  299. package/dist/canvas/chunks/vennDiagram-T6HMQDX7-x8dqn9yf.js +0 -34
  300. package/dist/canvas/chunks/wardley-OPB4EBWU-44pdddez.js +0 -1
@@ -41,9 +41,13 @@ export interface AxStateManagerDeps {
41
41
  }
42
42
  export declare class AxStateManager {
43
43
  private readonly deps;
44
+ private readonly host;
44
45
  private _axState;
45
- private _axHostCapability;
46
- constructor(deps: AxStateManagerDeps);
46
+ constructor(deps: AxStateManagerDeps, host?: {
47
+ capability: PmxAxHostCapability | null;
48
+ });
49
+ private get _axHostCapability();
50
+ private set _axHostCapability(value);
47
51
  private normalizeForCurrentNodes;
48
52
  private applyAxState;
49
53
  /** Reset the canvas-bound partition to empty (used by clear() and applyPersistedState()). */
@@ -269,6 +273,8 @@ export declare class AxStateManager {
269
273
  getPendingSteering(options?: {
270
274
  consumer?: string;
271
275
  limit?: number;
276
+ addressedOnly?: boolean;
277
+ offset?: number;
272
278
  }): PmxAxSteeringMessage[];
273
279
  /**
274
280
  * NEWEST undelivered steering first, for the compact AX context lead block (report
@@ -278,6 +284,8 @@ export declare class AxStateManager {
278
284
  getPendingSteeringForContext(options?: {
279
285
  consumer?: string;
280
286
  limit?: number;
287
+ addressedOnly?: boolean;
288
+ offset?: number;
281
289
  }): PmxAxSteeringMessage[];
282
290
  /** Total undelivered steering for a consumer (loop-safe), for the context backlog counts. */
283
291
  getPendingSteeringCount(consumer?: string): number;
@@ -0,0 +1,4 @@
1
+ /** Board-owned runtime state, discarded with its owner rather than on navigation. */
2
+ export declare function createBoardLocal<T>(create: () => T, dispose?: (value: T) => void): {
3
+ readonly current: T;
4
+ };
@@ -0,0 +1,38 @@
1
+ import type { ActorAttribution } from './attribution.js';
2
+ import type { CanvasBoard, PersistedCanvasState } from './canvas-db.js';
3
+ import type { DocumentImport } from './document-import.js';
4
+ export interface BoardMoveInput {
5
+ sourceBoardId: string;
6
+ nodeIds: string[];
7
+ name: string;
8
+ expectedRevision: number;
9
+ requestId: string;
10
+ preview?: boolean;
11
+ }
12
+ export interface BoardMovePreview {
13
+ sourceBoardId: string;
14
+ nodeIds: string[];
15
+ affectedBoardIds: string[];
16
+ readmeNodeId: string | null;
17
+ pinnedNodeIds: string[];
18
+ liveTaskNodeIds: string[];
19
+ attachmentIds: string[];
20
+ blockers: string[];
21
+ notices: string[];
22
+ }
23
+ export interface BoardMoveResult {
24
+ sourceBoardId: string;
25
+ destinationBoardId: string;
26
+ portalId: string;
27
+ nodeIds: string[];
28
+ affectedBoardIds: string[];
29
+ }
30
+ export interface MoveBoard {
31
+ board: CanvasBoard;
32
+ state: PersistedCanvasState;
33
+ }
34
+ /** Pure relocation plan. Preview and commit run the same checks on a consistent library view. */
35
+ export declare function prepareBoardMove(input: BoardMoveInput, library: Map<string, MoveBoard>, destinationId: string, portalId: string, imports: DocumentImport[], runtimeBlockers: ReadonlyMap<string, string>, actor: ActorAttribution, at: string): {
36
+ preview: BoardMovePreview;
37
+ states: Map<string, PersistedCanvasState>;
38
+ };
@@ -14,6 +14,10 @@ import { type PmxAxState, type PmxAxEvent, type PmxAxEvidence, type PmxAxSteerin
14
14
  export type CanvasTheme = CanvasThemeName;
15
15
  export declare function normalizeCanvasTheme(value: unknown, fallback?: CanvasTheme): CanvasTheme;
16
16
  export interface PersistedCanvasState {
17
+ /** Optimistic storage baseline, independent of content/read/review clocks. New boards start at zero. */
18
+ storageVersion?: number;
19
+ /** Snapshot restore boundary, not an authored content version. */
20
+ moveBoundary?: string | null;
17
21
  tour?: Tour;
18
22
  version: number;
19
23
  theme?: CanvasTheme;
@@ -70,8 +74,10 @@ export declare function finalizeCanvasDbForClose(db: Database): void;
70
74
  /** The theme is workspace-wide: it is saved even while no board is open. */
71
75
  export declare function saveThemeToDB(db: Database, theme: CanvasTheme | undefined): void;
72
76
  export declare function readThemeFromDB(db: Database): CanvasTheme | undefined;
73
- /** Saves one board's state; every other board's rows are untouched. */
74
- export declare function saveStateToDB(db: Database, boardId: string, state: PersistedCanvasState): void;
77
+ export declare function boardStorageVersion(db: Database, boardId: string): number;
78
+ export declare function assertBoardStorageVersion(db: Database, boardId: string, expected: number): void;
79
+ /** Save one board, returning its new baseline. Publish the baseline only after the outer transaction commits. */
80
+ export declare function saveStateToDB(db: Database, boardId: string, state: PersistedCanvasState): number;
75
81
  /** Loads one board (the open board when `boardId` is omitted); null when there is no such board. */
76
82
  export declare function loadStateFromDB(db: Database, boardId?: string): PersistedCanvasState | null;
77
83
  export interface CanvasBoard {
@@ -161,6 +167,8 @@ export declare function loadAxSteeringFromDB(db: Database, q?: AxTimelineQuery &
161
167
  export declare function loadPendingAxSteeringFromDB(db: Database, options?: {
162
168
  consumer?: string;
163
169
  limit?: number;
170
+ addressedOnly?: boolean;
171
+ offset?: number;
164
172
  }): PmxAxSteeringMessage[];
165
173
  /**
166
174
  * NEWEST undelivered steering first (report #57) for the compact AX context lead
@@ -173,6 +181,8 @@ export declare function loadPendingAxSteeringFromDB(db: Database, options?: {
173
181
  export declare function loadNewestPendingAxSteeringFromDB(db: Database, options?: {
174
182
  consumer?: string;
175
183
  limit?: number;
184
+ addressedOnly?: boolean;
185
+ offset?: number;
176
186
  }): PmxAxSteeringMessage[];
177
187
  /** Total undelivered steering for a consumer (loop-safe — excludes the consumer's own; target-scoped). */
178
188
  export declare function countPendingAxSteeringFromDB(db: Database, consumer?: string): number;
@@ -206,16 +206,15 @@ export declare function restoreCanvasSnapshot(idOrName: string): Promise<{
206
206
  ok: boolean;
207
207
  }>;
208
208
  /**
209
- * Open a board (or Home for null): the state layer saves the current board and
210
- * loads the next, and everything else that holds the old board in memory is
211
- * reset — undo closures, pending intents, file watchers, app sessions and the
212
- * code graph (the trace chain restarts itself when its last node is gone).
213
- * Agent and human presence are kept: they belong to the people and agents,
214
- * not to a board.
209
+ * Open a board (or Home for null), retaining other live boards and their
210
+ * undo history, intents, watchers and app sessions for background operations.
215
211
  */
216
212
  export declare function openCanvasBoard(id: string | null): {
217
213
  ok: boolean;
218
214
  };
215
+ export declare function startBoardRuntime(options?: {
216
+ forceRehydrateExtApps?: boolean;
217
+ }): void;
219
218
  /**
220
219
  * Restore the whole library from a backup file (the current file is kept as
221
220
  * `<db>.before-restore`); the restored library opens on its last open board.
@@ -8,9 +8,9 @@ declare const observedSourceSchema: z.ZodObject<{
8
8
  contentRevision: z.ZodOptional<z.ZodNumber>;
9
9
  observedAt: z.ZodOptional<z.ZodISODateTime>;
10
10
  availability: z.ZodOptional<z.ZodEnum<{
11
+ unavailable: "unavailable";
11
12
  live: "live";
12
13
  cached: "cached";
13
- unavailable: "unavailable";
14
14
  }>>;
15
15
  }, z.core.$strip>;
16
16
  declare const recipeSchema: z.ZodObject<{
@@ -28,6 +28,7 @@ export interface CanvasAnnotationSummary {
28
28
  export interface CanvasAnnotationContextSummary {
29
29
  id: string;
30
30
  label: string | null;
31
+ text?: string;
31
32
  bounds: CanvasAnnotation['bounds'];
32
33
  targetNodeIds: string[];
33
34
  targetNodeTitles: string[];
@@ -11,6 +11,7 @@
11
11
  * `.pmx-canvas-snapshots/`, loose blob files) are no longer imported as of 0.4.0 —
12
12
  * the one-shot boot migration into SQLite was retired.
13
13
  */
14
+ import { type BoardMoveInput, type BoardMovePreview, type BoardMoveResult } from './board-move.js';
14
15
  import { type WorkspaceSettings } from '../shared/workspace-settings.js';
15
16
  import { KnowledgeLifecycle, type Lifecycle } from './knowledge-lifecycle.js';
16
17
  import { type Tour } from '../shared/tour.js';
@@ -190,20 +191,60 @@ interface ApplyUpdatesOptions {
190
191
  skipGroupChildTranslation?: boolean;
191
192
  }
192
193
  declare class CanvasStateManager {
193
- private nodes;
194
- private edges;
195
- private annotations;
196
- private _viewport;
197
- private _tour;
194
+ private readonly boardExecution;
195
+ private readonly liveBoards;
196
+ private nextGeneration;
197
+ private navigationGeneration;
198
+ private readonly hostState;
199
+ private visibleBoard;
200
+ private get boardState();
201
+ /** Identity for board-owned runtime caches. Never shared by a replacement board. */
202
+ get boardIdentity(): object;
203
+ onBoardDispose(cleanup: () => void): () => void;
204
+ private disposeBoardRuntime;
205
+ /** The human's navigation target, independent of the calling operation's board. */
206
+ get visibleBoardId(): string | null;
207
+ get visibleBoardGeneration(): number;
208
+ get isBackgroundBoard(): boolean;
209
+ /** Execute on a live board without activating it, retaining ownership across awaits. */
210
+ withBoard<T>(id: string, fn: () => T): T;
211
+ /** Bind callbacks to their board, rather than the context of whoever invokes them. */
212
+ bindBoard<T extends unknown[], R>(fn: (...args: T) => R): (...args: T) => R;
213
+ /** Viewer/global projections must not inherit the producer's board scope. */
214
+ withVisibleBoard<T>(fn: () => T): T;
215
+ /** Sweep resident runtime owners without loading the entire stored library. */
216
+ forEachLiveBoard(fn: () => void): void;
217
+ private loadBoardState;
218
+ private createBoardState;
219
+ private get nodes();
220
+ private get edges();
221
+ private get annotations();
222
+ private get _viewport();
223
+ private set _viewport(value);
224
+ private get _tour();
225
+ private set _tour(value);
226
+ private get _contextPinnedNodeIds();
227
+ private set _contextPinnedNodeIds(value);
228
+ private get _contextPinMeta();
229
+ private set _contextPinMeta(value);
230
+ private get _storageVersion();
231
+ private set _storageVersion(value);
232
+ private get _contentRevision();
233
+ private set _contentRevision(value);
234
+ private get _revisionFloor();
235
+ private set _revisionFloor(value);
236
+ private get _deletionTombstones();
237
+ private set _deletionTombstones(value);
238
+ private get _boardGeneration();
239
+ private set _boardGeneration(value);
240
+ private get _saveTimer();
241
+ private set _saveTimer(value);
242
+ private get _lastPersistenceError();
243
+ private set _lastPersistenceError(value);
244
+ private get ax();
198
245
  private _theme;
199
- private _contextPinnedNodeIds;
200
- /** Who pinned each pin, when and why; kept only for ids in `_contextPinnedNodeIds`. */
201
- private _contextPinMeta;
202
246
  private _workspaceRoot;
203
- private _contentRevision;
204
- private _revisionFloor;
205
- private _deletionTombstones;
206
- private readonly ax;
247
+ private moveRuntimeBlockers;
207
248
  private _changeListeners;
208
249
  /**
209
250
  * Register a listener for state changes. Used by MCP server to emit resource
@@ -238,6 +279,12 @@ declare class CanvasStateManager {
238
279
  private applyResolvedGroupBounds;
239
280
  private getGroupSnapshot;
240
281
  private normalizeNode;
282
+ private refreshLiveWorkCards;
283
+ private refreshCurrentLiveWorkCards;
284
+ /** Reconcile a stored display cache and its cursor clock in the same SQLite transaction. */
285
+ private readProjectedBoard;
286
+ /** Call before capturing a context snapshot, never from per-node getters used during writes. */
287
+ refreshContextWorkCards(): void;
241
288
  private nextContentRevision;
242
289
  private revisionState;
243
290
  /**
@@ -254,7 +301,6 @@ declare class CanvasStateManager {
254
301
  private compactGroupChildren;
255
302
  private _db;
256
303
  private _dbPath;
257
- private _saveTimer;
258
304
  readonly knowledge: KnowledgeLifecycle;
259
305
  /** Workspace root backing persistence and workspace-relative path resolution. */
260
306
  get workspaceRoot(): string;
@@ -289,11 +335,12 @@ declare class CanvasStateManager {
289
335
  * layout) on the board it had open last.
290
336
  */
291
337
  replaceDatabase(file: string): void;
292
- private _activeBoardId;
293
- private _boardGeneration;
338
+ private get _activeBoardId();
339
+ private set _activeBoardId(value);
294
340
  /** Invalidates asynchronous work whenever the loaded board state is replaced. */
295
341
  get boardGeneration(): number;
296
- /** The open board, or null on Home. */
342
+ get boardLifetimeGeneration(): number;
343
+ /** The execution board, or the open board outside a scoped operation. */
297
344
  get activeBoardId(): string | null;
298
345
  getActiveBoard(): CanvasBoard | null;
299
346
  /** Synchronous, owner-controlled static creation. No board activation or runtime hydration. */
@@ -303,6 +350,10 @@ declare class CanvasStateManager {
303
350
  createStoredEdge(boardId: string, requestId: string | undefined, fingerprint: string, build: (nodes: CanvasNodeState[]) => CanvasEdge): CanvasEdge;
304
351
  /** Stored creations share one durable receipt/commit boundary, never a temporary board switch. */
305
352
  private createStoredCreation;
353
+ /** Called inside a transaction: publish no storage clocks until it commits. */
354
+ private stageLiveBoards;
355
+ /** A stored multi-board write retains each live owner's runtime and camera. */
356
+ private reconcileStoredBoards;
306
357
  /** Read a board without activating it. This projection is not a write payload. */
307
358
  readBoard(id: string, includeBlobs?: boolean): {
308
359
  board: CanvasBoard;
@@ -337,6 +388,14 @@ declare class CanvasStateManager {
337
388
  advanceContextBriefCursor(boardId: string, consumer: string, revision: number): void;
338
389
  /** Creates a board without opening it. */
339
390
  createBoard(name: string, folder?: string | null): CanvasBoard | null;
391
+ /** The host supplies runtime ownership, not another copy of board state. */
392
+ setMoveRuntimeBlockers(read: () => ReadonlyMap<string, string>): void;
393
+ moveSelectionToNewBoard(input: BoardMoveInput): {
394
+ preview: BoardMovePreview;
395
+ } | {
396
+ result: BoardMoveResult;
397
+ replayed: boolean;
398
+ };
340
399
  updateBoard(id: string, patch: Pick<Parameters<typeof updateBoardInDB>[2], 'name' | 'folder' | 'mapPosition' | 'relationVocabulary'>): boolean;
341
400
  setBoardReadme(id: string, nodeId: string | null): boolean;
342
401
  /**
@@ -358,9 +417,8 @@ declare class CanvasStateManager {
358
417
  /** Deletes a board and its snapshots; deleting the open board returns to Home first. */
359
418
  deleteBoard(id: string): boolean;
360
419
  /**
361
- * Save the open board, then open `id` (or Home for null). The canvas state is
362
- * replaced wholesale; callers own the runtime side (undo history, app
363
- * sessions, watchers, SSE) — see `openCanvasBoard` in canvas-operations.
420
+ * Save pending boards, then select the visible owner. Existing partitions
421
+ * remain live; canvas-operations starts the selected board's runtime/SSE.
364
422
  */
365
423
  switchBoard(id: string | null): boolean;
366
424
  /**
@@ -375,7 +433,6 @@ declare class CanvasStateManager {
375
433
  private persistedState;
376
434
  /** Write current state to SQLite immediately. */
377
435
  private saveToDisk;
378
- private _lastPersistenceError;
379
436
  /** Health view of state persistence: ok until a save fails, ok again after the next success. */
380
437
  get persistenceHealth(): {
381
438
  ok: boolean;
@@ -400,6 +457,8 @@ declare class CanvasStateManager {
400
457
  gcSnapshots(options?: CanvasSnapshotGcOptions): CanvasSnapshotGcResult;
401
458
  /** Restore canvas state from a snapshot. */
402
459
  restoreSnapshot(idOrName: string): boolean;
460
+ /** Old snapshots stay readable, but neither whole-board nor one-card restore crosses a move. */
461
+ assertSnapshotRestorable(idOrName: string): void;
403
462
  /** Read a snapshot's data without restoring it (for diff). Resolves by ID or name. */
404
463
  getSnapshotData(idOrName: string): {
405
464
  name: string;
@@ -497,6 +556,7 @@ declare class CanvasStateManager {
497
556
  }): PmxAxFocusState;
498
557
  clearAxFocus(): PmxAxFocusState;
499
558
  getWorkItems(): PmxAxWorkItem[];
559
+ getWorkItemsOnBoard(boardId: string): PmxAxWorkItem[];
500
560
  addWorkItem(input: {
501
561
  title: string;
502
562
  status?: PmxAxWorkItemStatus;
@@ -675,10 +735,14 @@ declare class CanvasStateManager {
675
735
  getPendingSteering(options?: {
676
736
  consumer?: string;
677
737
  limit?: number;
738
+ addressedOnly?: boolean;
739
+ offset?: number;
678
740
  }): PmxAxSteeringMessage[];
679
741
  getPendingSteeringForContext(options?: {
680
742
  consumer?: string;
681
743
  limit?: number;
744
+ addressedOnly?: boolean;
745
+ offset?: number;
682
746
  }): PmxAxSteeringMessage[];
683
747
  getPendingSteeringCount(consumer?: string): number;
684
748
  getAxTimelineSummary(): PmxAxTimelineSummary;
@@ -0,0 +1,6 @@
1
+ import type { Database } from 'bun:sqlite';
2
+ /** JSON target list parameter; event ranges prevent a reused old ID inheriting the moved card's history. */
3
+ export declare const CARD_HISTORY_CTE = "WITH RECURSIVE\n targets AS (SELECT json_extract(value, '$.boardId') AS current_board,\n json_extract(value, '$.cardId') AS node_id FROM json_each(?)),\n history(current_board, node_id, board_id, review_after, review_through, read_after, read_through, move_before) AS (\n SELECT current_board, node_id, current_board,\n COALESCE((SELECT MAX(review_through) FROM card_relocations r WHERE (r.from_board = t.current_board OR r.to_board = t.current_board) AND r.node_id = t.node_id), 0),\n 9223372036854775807,\n COALESCE((SELECT MAX(read_through) FROM card_relocations r WHERE (r.from_board = t.current_board OR r.to_board = t.current_board) AND r.node_id = t.node_id), 0),\n 9223372036854775807, 9223372036854775807 FROM targets t\n UNION ALL\n SELECT h.current_board, h.node_id, r.from_board, r.review_after, r.review_through,\n r.read_after, r.read_through, r.sequence\n FROM history h JOIN card_relocations r ON r.to_board = h.board_id AND r.node_id = h.node_id\n AND r.sequence = (SELECT MAX(sequence) FROM card_relocations prior\n WHERE (prior.to_board = h.board_id OR prior.from_board = h.board_id)\n AND prior.node_id = h.node_id AND prior.sequence < h.move_before)\n )";
4
+ /** Record locations, not new reads or validations. Called inside the move transaction. */
5
+ export declare function recordCardRelocation(db: Database, requestId: string, from: string, to: string, nodeIds: string[]): void;
6
+ export declare function boardMoveBoundary(db: Database, boardId: string): string | null;
@@ -32,6 +32,8 @@ export interface ContextRead {
32
32
  boardId: string | null;
33
33
  }
34
34
  export type ContextReadInput = Omit<ContextRead, 'seq' | 'id' | 'at' | 'boardId' | 'readNodes' | 'seenLinks'> & {
35
+ /** Stable adapter receipt identity. Retries record this delivery once per consumer and board. */
36
+ deliveryId?: string;
35
37
  /** Explicit read target, captured before asynchronous formatting/proxy work. */
36
38
  boardId?: string | null;
37
39
  /** Ids of every serialized node in what the reader received; the server keeps those on the board. */
@@ -83,7 +85,7 @@ export declare function contextReadFromPayload(base: Omit<ContextReadInput, 'del
83
85
  export declare function pinnedBoardReads(base: Omit<ContextReadInput, 'deliveredNodeIds' | 'bytes' | 'readNodeIds' | 'pinnedNodeIds' | 'boardId'>, payload: unknown): ContextReadInput[];
84
86
  /** Graph summaries are seen on their own boards, never full-content reads or a board switch. */
85
87
  export declare function graphReads(base: Pick<ContextReadInput, 'channel' | 'resource' | 'source' | 'consumer' | 'agentId'>, graph: MemoryGraph): ContextReadInput[];
86
- export declare const CONTEXT_READS_SCHEMA_SQL = "\n CREATE TABLE IF NOT EXISTS context_reads (\n seq INTEGER PRIMARY KEY AUTOINCREMENT,\n id TEXT NOT NULL UNIQUE,\n at TEXT NOT NULL,\n channel TEXT NOT NULL,\n resource TEXT NOT NULL,\n source TEXT NOT NULL,\n consumer TEXT,\n agent_id TEXT,\n pinned_node_ids TEXT NOT NULL DEFAULT '[]',\n delivered_node_ids TEXT NOT NULL DEFAULT '[]',\n bytes INTEGER NOT NULL DEFAULT 0,\n board_id TEXT,\n read_nodes TEXT NOT NULL DEFAULT '{}',\n seen_links TEXT NOT NULL DEFAULT '{}'\n );\n";
88
+ export declare const CONTEXT_READS_SCHEMA_SQL = "\n CREATE TABLE IF NOT EXISTS context_read_receipts (id TEXT PRIMARY KEY);\n CREATE TABLE IF NOT EXISTS context_reads (\n seq INTEGER PRIMARY KEY AUTOINCREMENT,\n id TEXT NOT NULL UNIQUE,\n at TEXT NOT NULL,\n channel TEXT NOT NULL,\n resource TEXT NOT NULL,\n source TEXT NOT NULL,\n consumer TEXT,\n agent_id TEXT,\n pinned_node_ids TEXT NOT NULL DEFAULT '[]',\n delivered_node_ids TEXT NOT NULL DEFAULT '[]',\n bytes INTEGER NOT NULL DEFAULT 0,\n board_id TEXT,\n read_nodes TEXT NOT NULL DEFAULT '{}',\n seen_links TEXT NOT NULL DEFAULT '{}'\n );\n";
87
89
  export declare function appendContextReadToDB(db: Database, input: ContextReadInput, boardId: string | null, readNodes?: Record<string, number>, seenLinks?: Record<string, number>): ContextRead;
88
90
  /** Per node on a board, the latest agent read that delivered its content (newest row wins). */
89
91
  export declare function loadNodeReadStatusFromDB(db: Database, boardId: string): NodeReadStatus[];
@@ -28,7 +28,7 @@ export declare class HumanPresenceRegistry {
28
28
  set(raw: unknown, now?: number): HumanPresence | null;
29
29
  snapshot(now?: number): HumanPresenceSnapshot;
30
30
  /** Nodes a human is holding right now → that human's name. The edit lock. */
31
- lockedNodes(now?: number): Map<string, string>;
31
+ lockedNodes(now?: number, boardId?: string | null): Map<string, string>;
32
32
  reset(): void;
33
33
  private publicView;
34
34
  private sweep;
@@ -1,4 +1,6 @@
1
1
  import { EventEmitter } from 'node:events';
2
+ import type { BoardMoveInput, BoardMovePreview, BoardMoveResult } from './board-move.js';
3
+ export type { BoardMoveInput, BoardMovePreview, BoardMoveResult } from './board-move.js';
2
4
  import type { Camera, Tour, TourPresenter, TourStop } from '../shared/tour.js';
3
5
  import { type TourState, type TourStep, type TourStepResult, type TourSuperseded } from './tour-control.js';
4
6
  export type { Tour, TourPresenter, TourStop } from '../shared/tour.js';
@@ -130,11 +132,8 @@ export declare class PmxCanvas extends EventEmitter {
130
132
  animated?: boolean;
131
133
  }): string;
132
134
  updateEdge(id: string, patch: Partial<Pick<CanvasEdge, 'type' | 'kind' | 'reason' | 'label' | 'style' | 'animated'>>): Promise<CanvasEdge>;
133
- addAnnotation(input: Omit<CanvasAnnotation, 'id' | 'createdAt'> & {
134
- id?: string;
135
- createdAt?: string;
136
- }): string;
137
- removeAnnotation(id: string): boolean;
135
+ addAnnotation(input: Pick<CanvasAnnotation, 'points'> & Partial<Pick<CanvasAnnotation, 'id' | 'type' | 'color' | 'width' | 'text' | 'label'>>): Promise<string>;
136
+ removeAnnotation(id: string): Promise<boolean>;
138
137
  removeEdge(id: string): void;
139
138
  /**
140
139
  * Create a group node and optionally add child nodes to it.
@@ -229,6 +228,8 @@ export declare class PmxCanvas extends EventEmitter {
229
228
  getPendingSteering(options?: {
230
229
  consumer?: string;
231
230
  limit?: number;
231
+ addressedOnly?: boolean;
232
+ offset?: number;
232
233
  }): PmxAxSteeringMessage[];
233
234
  /**
234
235
  * Submit a node-originated AX interaction (plan-004 Phase 1). Validates the
@@ -289,6 +290,14 @@ export declare class PmxCanvas extends EventEmitter {
289
290
  includeStructure?: boolean;
290
291
  preview?: boolean;
291
292
  }): Promise<Record<string, unknown>>;
293
+ /** Relocate identities atomically; preview is read-only and retries reuse the original receipt. */
294
+ moveSelectionToNewBoard(input: BoardMoveInput): Promise<{
295
+ ok: true;
296
+ preview: BoardMovePreview;
297
+ } | (BoardMoveResult & {
298
+ ok: true;
299
+ replayed: boolean;
300
+ })>;
292
301
  searchLibrary(query: string, limit?: number): Promise<Record<string, unknown>>;
293
302
  /** Same projection as Home Graph. Discovery summaries never count as full-content reads. */
294
303
  getMemoryGraph(options?: {
@@ -301,6 +310,8 @@ export declare class PmxCanvas extends EventEmitter {
301
310
  consumer?: string;
302
311
  since?: number;
303
312
  budget?: number;
313
+ contextDelivery?: boolean;
314
+ includeSteering?: boolean;
304
315
  }): Promise<Record<string, unknown>>;
305
316
  /** Open a board, or Home with null. */
306
317
  openBoard(id: string | null): Promise<void>;
@@ -1,14 +1,18 @@
1
1
  import { type PmxAxIntent, type PmxAxIntentKind } from '../shared/ax-intent.js';
2
2
  type IntentEmitter = (event: string, payload: Record<string, unknown>) => void;
3
3
  export declare class IntentRegistry {
4
- private readonly intents;
5
- private readonly vetoedIntentIds;
6
- private readonly committingIntentIds;
4
+ private readonly board;
5
+ private get intents();
6
+ private get vetoedIntentIds();
7
+ private get committingIntentIds();
7
8
  private emit;
8
- private sweepTimer;
9
+ private get sweepTimer();
10
+ private set sweepTimer(value);
9
11
  /** Inject the workbench SSE emitter (server.ts wires this at module load). */
10
12
  setEmitter(emitter: IntentEmitter | null): void;
11
13
  list(): PmxAxIntent[];
14
+ /** The first write from Home adopts its ghosts and vetoes without opening on signal. */
15
+ moveHomeIntentsToBoard(boardId: string): void;
12
16
  /** Signal a new (or replace an existing) intent. Returns the stored envelope. */
13
17
  signal(raw: unknown): PmxAxIntent;
14
18
  /** Patch a live intent (position/label/reason/confidence/seq) and bump its TTL. */
@@ -183,7 +183,7 @@ export declare class KnowledgeLifecycle {
183
183
  cadenceDays?: number | undefined;
184
184
  } | null;
185
185
  lifecycleSourceFolder: string | null;
186
- lifecycleSource: "card" | "unknown" | "folder";
186
+ lifecycleSource: "unknown" | "card" | "folder";
187
187
  };
188
188
  resolveCard(folderPath: string | null, node: Pick<CanvasNodeState, 'type' | 'data'>, catalog?: {
189
189
  categories: KnowledgeCategory[];
@@ -209,7 +209,7 @@ export declare class KnowledgeLifecycle {
209
209
  cadenceDays?: number | undefined;
210
210
  } | null;
211
211
  lifecycleSourceFolder: string | null;
212
- lifecycleSource: "card" | "unknown" | "folder";
212
+ lifecycleSource: "unknown" | "card" | "folder";
213
213
  };
214
214
  private indexedDb;
215
215
  /** Stored owners of semantic sources; the caller overlays the active board's unsaved edges. */
@@ -219,6 +219,8 @@ export declare class KnowledgeLifecycle {
219
219
  lastValidation: ReviewRecord | null;
220
220
  retired: boolean;
221
221
  }>;
222
+ /** Resolve a current card's location when evidence was recorded, without rewriting that evidence. */
223
+ locationAtReview(review: ReviewRecord, target: MemoryTarget): MemoryTarget;
222
224
  reviews(boardId: string, nodeId: string): {
223
225
  records: ReviewRecord[];
224
226
  retired: boolean;
@@ -71,11 +71,13 @@ export interface SnapshotDiffResult {
71
71
  }[];
72
72
  }
73
73
  declare class MutationHistory {
74
- private entries;
75
- /** Index of the last applied mutation. -1 means nothing applied / all undone. */
76
- private cursor;
77
- /** When true, mutations triggered by undo/redo are not recorded. */
78
- private _replaying;
74
+ private readonly board;
75
+ private get entries();
76
+ private set entries(value);
77
+ private get cursor();
78
+ private set cursor(value);
79
+ private get _replaying();
80
+ private set _replaying(value);
79
81
  get isReplaying(): boolean;
80
82
  /**
81
83
  * Record a new mutation. Truncates any redo-able future, then appends.
@@ -39,5 +39,7 @@ export interface ExecuteOperationMeta extends OperationExecutionOptions {
39
39
  */
40
40
  proxiedRead?: boolean;
41
41
  }
42
+ /** Also used by batch's internal node path, which does not dispatch an operation. */
43
+ export declare function validateOperationTarget(name: string, input: Record<string, unknown>): string | undefined;
42
44
  export declare function executeOperation(name: string, rawInput: unknown, meta?: ExecuteOperationMeta): Promise<unknown>;
43
45
  export {};
@@ -12,6 +12,7 @@ declare class TraceManager {
12
12
  private traceOrigin;
13
13
  private chainIndex;
14
14
  get enabled(): boolean;
15
+ get ownedNodeIds(): readonly string[];
15
16
  setEnabled(value: boolean): void;
16
17
  onToolStart(payload: {
17
18
  name: string;
@@ -4,6 +4,12 @@
4
4
  * silently render unrecognized on the other.
5
5
  */
6
6
  export type AxWorkItemStatus = 'todo' | 'in-progress' | 'blocked' | 'done' | 'cancelled';
7
+ /** Authored work cards use the task vocabulary without creating an AX task. */
8
+ export declare const WORK_CARD_STATES: Record<AxWorkItemStatus, {
9
+ label: string;
10
+ glyph: string;
11
+ }>;
12
+ export declare function isWorkCardState(value: unknown): value is AxWorkItemStatus;
7
13
  /** `held` = auto-held by the unattended-approval policy: the action did NOT proceed. */
8
14
  export type AxApprovalStatus = 'pending' | 'approved' | 'rejected' | 'held';
9
15
  export type AxEventKind = 'prompt' | 'assistant-message' | 'tool-start' | 'tool-result' | 'failure' | 'approval' | 'steering' | 'command' | 'note' | 'policy'
@@ -16,3 +16,11 @@ export declare const AX_SURFACE_ACK_SOURCE = "pmx-canvas-ax-ack";
16
16
  export declare const HTML_SURFACE_PUSH_SOURCE = "pmx-canvas-html-node";
17
17
  /** Tab-local JSON viewer state handoff, independent of AX capabilities. */
18
18
  export declare const JSON_VIEWER_STATE_SOURCE = "pmx-canvas-json-state";
19
+ /** MCP apps share their window channel with an SDK JSON-RPC transport. */
20
+ export declare const MCP_SURFACE_METHOD = "notifications/pmx/surface";
21
+ export declare function surfaceNotification(params: Record<string, unknown>): {
22
+ jsonrpc: "2.0";
23
+ method: string;
24
+ params: Record<string, unknown>;
25
+ };
26
+ export declare function readSurfaceNotification(message: unknown): unknown;
@@ -22,6 +22,7 @@ export interface HumanPresence {
22
22
  export interface HumanPresenceSnapshot {
23
23
  humans: HumanPresence[];
24
24
  }
25
+ export declare const HUMAN_NAME_MAX_LENGTH = 40;
25
26
  /** A tab that stops reporting is gone after this. */
26
27
  export declare const HUMAN_PRESENCE_TTL_MS = 30000;
27
28
  /** A grab the tab stops renewing (crash, tab closed mid-drag) releases after this. */
@@ -19,6 +19,8 @@ export interface LifecycleQualification {
19
19
  contentChangedAt: string | null;
20
20
  /** The revisions a validating reviewer must have inspected, qualified by source relation. */
21
21
  observations: Record<string, number | null>;
22
+ /** Warnings keyed by the same qualified source identity as observations. */
23
+ sourceWarnings?: Record<string, string[]>;
22
24
  sources: SourceQualification[];
23
25
  relevance: 'card-pinned' | 'board-pinned' | 'not-selected';
24
26
  }