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
@@ -0,0 +1,50 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title>Guest name: existing presence, self-reported names</title>
6
+ <script src="./support.js"></script>
7
+ </head>
8
+ <body>
9
+ <x-dc>
10
+ <helmet><style>
11
+ body { margin:0; background:#081524; }
12
+ .states { display:flex; gap:24px; padding:24px; font:13px/1.4 'IBM Plex Sans',sans-serif; }
13
+ .state { width:600px; height:600px; background:var(--bg); color:var(--text); }
14
+ .dark { --bg:#081524; --panel:#0b192b; --soft:#0f1d31; --line:#1b2c44; --text:#e6eef7; --muted:#8ea3bd; --accent:#4BBCFF; }
15
+ .light { --bg:#f7f8fa; --panel:#ffffff; --soft:#eff2f6; --line:#d5dce5; --text:#172b44; --muted:#536a83; --accent:#1A7ABF; }
16
+ .bar { height:44px; display:flex; align-items:center; gap:8px; padding:0 14px; background:var(--soft); border-bottom:1px solid var(--line); }
17
+ .board { flex:1; } .context { color:var(--muted); font-size:12px; }
18
+ .initial { width:28px; height:28px; border:1px solid var(--line); border-radius:50%; background:var(--soft); color:var(--text); font:600 12px 'IBM Plex Sans',sans-serif; }
19
+ .dialog { box-sizing:border-box; width:440px; margin:90px auto 0; padding:14px; background:var(--panel); border:1px solid var(--line); border-radius:12px; display:flex; flex-direction:column; gap:10px; box-shadow:0 18px 60px #0003; }
20
+ .title { font-weight:600; } .description { color:var(--muted); font-size:12px; }
21
+ input { box-sizing:border-box; width:100%; padding:8px 10px; border:1px solid var(--accent); border-radius:8px; background:var(--bg); color:var(--text); font:13px/1.4 'IBM Plex Mono',monospace; }
22
+ .actions { display:flex; justify-content:flex-end; gap:8px; }
23
+ .actions button { min-height:36px; padding:8px 14px; border:1px solid var(--line); border-radius:7px; background:var(--soft); color:var(--text); font:600 12px 'IBM Plex Sans',sans-serif; }
24
+ .actions .save { background:var(--accent); border-color:var(--accent); color:var(--bg); }
25
+ .cursor { margin:55px 0 0 60px; color:var(--muted); } .cursor span { background:var(--soft); padding:3px 6px; border:1px solid var(--line); border-radius:4px; font-size:11px; }
26
+ .note { padding:20px; color:var(--muted); font-size:12px; }
27
+ </style></helmet>
28
+ <div class="states">
29
+ <section class="state dark">
30
+ <div class="bar"><span class="board">Field notes ▾</span><span class="context">Nothing in context</span><span>⋯</span><button class="initial" aria-label="Your name: guest-4a8c">G</button></div>
31
+ <div class="dialog" role="dialog" aria-label="Your name on this canvas">
32
+ <div class="title">Your name on this canvas</div>
33
+ <div class="description">Shown on your cursor. Self-reported, not a verified identity or an access grant. Saved in this browser.</div>
34
+ <input aria-label="Your name on this canvas" placeholder="e.g. Alex" maxlength="40" value="Alex">
35
+ <div class="actions"><button>Cancel</button><button class="save">Save name</button></div>
36
+ </div>
37
+ <div class="note">Optional entry. Escape or Cancel keeps the current name. Up to 40 characters. No sharing or permission controls.</div>
38
+ </section>
39
+ <section class="state light">
40
+ <div class="bar"><span class="board">Field notes ▾</span><span class="context">Nothing in context</span><span>⋯</span><button class="initial" aria-label="Your name: Sam">S</button></div>
41
+ <div class="cursor">➤ <span>Alex</span></div>
42
+ <div class="note">The other browser sees Alex on the existing cursor tag. A rename keeps the same visitor ID; equal names never combine visitors. The 28px button stays at the end of the bar at 600, 1024 and 1920px.</div>
43
+ </section>
44
+ </div>
45
+ </x-dc>
46
+ <script type="text/x-dc" data-dc-script data-props='{"$preview":{"width":1272,"height":648}}'>
47
+ class Component extends DCLogic { renderVals() { return {}; } }
48
+ </script>
49
+ </body>
50
+ </html>
@@ -0,0 +1,7 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 64 64">
2
+ <rect width="64" height="64" rx="14" fill="#081524"/>
3
+ <rect x="8" y="8" width="48" height="48" rx="7" fill="none" stroke="#4BBCFF" stroke-width="2.2" opacity="0.35"/>
4
+ <rect x="16" y="16" width="32" height="32" rx="5" fill="none" stroke="#4BBCFF" stroke-width="2.2" opacity="0.6"/>
5
+ <rect x="24" y="24" width="16" height="16" rx="3" fill="none" stroke="#4BBCFF" stroke-width="2.2"/>
6
+ <rect x="29" y="29" width="6" height="6" rx="1" fill="#4BBCFF"/>
7
+ </svg>
@@ -22,7 +22,7 @@ body{margin:0}
22
22
  </div>
23
23
 
24
24
  <div style="{{s.row}}">
25
- <div><div style="{{s.type}}">markdown</div><p style="{{s.what}}">Body 11 → 12px. “Set as README / Edit” footer moves into ⋯; double-click still edits.</p></div>
25
+ <div><div style="{{s.type}}">markdown</div><p style="{{s.what}}">Body 11 → 12px. Set as README moves into ⋯, becoming Remove as README when assigned. A quiet README header word stays visible on the designated card, including heading display (Chrome §8). Edit stays visible; double-click still edits. Heading display has no footer.</p></div>
26
26
  <div style="{{o.node}}">
27
27
  <div style="{{o.head}}"><svg width="16" height="16" viewBox="0 0 24 24" style="{{o.icon}} color: #4BBCFF"><path d="{{i.note}}"></path></svg><span style="{{o.title}}">PMX Canvas — guided tour</span><span style="{{o.ctl}}">⤢⌄×</span></div>
28
28
  <div style="padding: 10px 14px; display: flex; flex-direction: column; gap: 6px">
@@ -39,6 +39,7 @@ body{margin:0}
39
39
  <div style="color: #b9c6d6">An infinite spatial canvas that agents drive over MCP, HTTP or the Bun SDK — and that humans steer by pinning nodes.</div>
40
40
  <div style="color: #b9c6d6">• Pin a node in the browser<br>• The agent reads it from <code style="{{n.code}}">canvas://pinned-context</code></div>
41
41
  </div>
42
+ <div style="border-top: 1px solid #1b2c44; padding: 6px 36px 6px 8px; text-align: right"><button style="border: 1px solid transparent; border-radius: 6px; padding: 4px 8px; background: transparent; color: #8ea3bd; font: 500 11px 'IBM Plex Sans', sans-serif">Edit</button></div>
42
43
  </div>
43
44
  </div>
44
45
 
@@ -120,7 +121,7 @@ body{margin:0}
120
121
  </div>
121
122
 
122
123
  <div style="{{s.row}}">
123
- <div><div style="{{s.type}}">file</div><p style="{{s.what}}">The extra toolbar row folds into the header (path · lines). Code 10 → 12px with dim line numbers.</p></div>
124
+ <div><div style="{{s.type}}">file</div><p style="{{s.what}}">The extra toolbar row folds into the header (path · lines). Only metadata clips as space tightens; Reload and AX evidence hints remain visible on hover/focus. Code 10 → 12px with dim line numbers.</p></div>
124
125
  <div style="{{o.node}}">
125
126
  <div style="{{o.head}}"><svg width="16" height="16" viewBox="0 0 24 24" style="{{o.icon}} color: #4BBCFF"><path d="{{i.file}}"></path></svg><span style="{{o.title}}">node-sizes.ts</span><span style="{{o.ctl}}">⤢⌄×</span></div>
126
127
  <div style="display: flex; align-items: center; gap: 6px; padding: 4px 12px; border-bottom: 1px solid #1b2c44; font-family: 'IBM Plex Mono', monospace; font-size: 9px; color: #8ea3bd"><span style="padding: 1px 4px; border-radius: 3px; background: #13243b; color: #4BBCFF">TS</span><span>46 lines</span><span style="color: #5c6b80">src/shared/node-sizes.ts</span></div>
@@ -90,7 +90,7 @@ body{margin:0}
90
90
  </div>
91
91
 
92
92
  <div style="{{s.row}}">
93
- <div><div style="{{s.type}}">html</div><p style="{{s.what}}">The white outline around the frame goes. The page gets the canvas tokens, so it sits on the node surface.</p></div>
93
+ <div><div style="{{s.type}}">html</div><p style="{{s.what}}">The white outline around the frame goes. The page gets the canvas tokens, so it sits on the node surface. Owner decision, 2026-10-25: generated primitives have no shared header copy buttons. Copy JSON lives in the card's ⋯ menu and includes live edits. Copy prompt is removed; primitive-specific copy controls remain.</p></div>
94
94
  <div style="{{o.node}}">
95
95
  <div style="{{o.head}}"><svg width="16" height="16" viewBox="0 0 24 24" style="{{o.icon}} color: #4BBCFF"><path d="{{i.html}}"></path></svg><span style="{{o.title}}">Release gates</span><span style="{{o.ctl}}">↗⤢⌄×</span></div>
96
96
  <div style="flex: 1; margin: 8px; border: 1px solid #f2f2f2; border-radius: 2px; padding: 10px 12px; display: flex; flex-direction: column; gap: 5px">
@@ -49,7 +49,7 @@ body{margin:0}
49
49
  </div>
50
50
 
51
51
  <div style="{{s.row}}">
52
- <div><div style="{{s.type}}">graph</div><p style="{{s.what}}">Chart sits on the node surface. The title isn't repeated inside; the chart type becomes header meta.</p></div>
52
+ <div><div style="{{s.type}}">graph</div><p style="{{s.what}}">Chart sits on the node surface. The title isn't repeated inside; the chart type becomes header meta. Close slopegraph labels separate by 14px when space permits; points stay at their values, with short same-ink leaders.</p><svg width="200" height="60" role="img" aria-label="Close slopegraph labels, values unchanged"><path d="M10 42L70 20M10 52L70 26L75 34" fill="none" stroke="#4BBCFF" stroke-width="1.5"></path><circle cx="70" cy="20" r="2.5" fill="#4BBCFF"></circle><circle cx="70" cy="26" r="2.5" fill="#4BBCFF"></circle><text x="78" y="20" dominant-baseline="central" fill="#e6eef7" font-size="11">59 cli</text><text x="78" y="34" dominant-baseline="central" fill="#e6eef7" font-size="11">58 client</text></svg></div>
53
53
  <div style="{{o.node}}">
54
54
  <div style="{{o.head}}"><svg width="16" height="16" viewBox="0 0 24 24" style="{{o.icon}} color: #f4c542"><path d="{{i.chart}}"></path></svg><span style="{{o.title}}">bar — merged PRs per week</span><span style="{{o.ctl}}">↗⤢⌄×</span></div>
55
55
  <div style="flex: 1; margin: 0 8px 8px; position: relative; background: #000000; border-radius: 8px; padding: 10px 12px; font-family: system-ui, sans-serif">
@@ -0,0 +1,39 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head><meta charset="utf-8"><title>Work cards · in-card editing</title><script src="./support.js"></script></head>
4
+ <body><x-dc><helmet>
5
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;500;600&amp;display=swap">
6
+ <style>
7
+ body{margin:0}.work-design{box-sizing:border-box;width:1440px;min-height:980px;padding:48px;background:#081524;color:#e6eef7;font:13px/1.6 'IBM Plex Sans',sans-serif}.work-design h1{font-size:28px;margin:0}.work-design p{color:#8ea3bd}.work-design .examples{display:flex;gap:40px;align-items:flex-start;margin:32px 0}.work-design .card{box-sizing:border-box;width:360px;background:#0f1d31;border:1px solid #1b2c44;border-radius:10px;box-shadow:0 1px 2px #0006;padding:16px}.work-design h2{font-size:15px;margin:0 0 16px}.work-design .state{font-weight:600}.work-design .detail{white-space:pre-wrap}.work-design label{display:flex;flex-direction:column;gap:4px;margin:12px 0}.work-design input,.work-design select,.work-design textarea,.work-design button{box-sizing:border-box;font:inherit;color:inherit;background:#081524;border:1px solid #1b2c44;border-radius:6px;padding:8px}.work-design textarea{min-height:80px}.work-design footer{display:flex;justify-content:flex-end;gap:8px;margin-top:16px}.work-design .primary{background:#4BBCFF;color:#081524}.work-design .states{display:flex;gap:24px}.work-design .blocked{color:#f4c542}.work-design .done{color:#2fd07f}.work-design small{color:#8ea3bd}.work-design .error{color:#f4c542}
8
+ </style></helmet>
9
+ <main class="work-design">
10
+ <h1>Work cards · edit inside the card</h1>
11
+ <p>Option A selected 2026-10-27. Ordinary status nodes with an explicitly authored work state. No session or execution controls.</p>
12
+ <div class="examples">
13
+ <section><h2>Read</h2><article class="card"><h2>3. Verify</h2><div class="state">◐ In progress</div><p class="detail">Run the browser checks.</p><small>60% complete</small><footer><button>Edit</button></footer></article></section>
14
+ <section><h2>Edit / create</h2><article class="card"><h2>3. Verify</h2><form><label>Title<input value="3. Verify"></label><label>Work state<select><option>In progress</option><option>To do</option><option>Blocked</option><option>Done</option><option>Cancelled</option></select></label><label>Detail<textarea>Run the browser checks.</textarea></label><label>Progress (%) · optional<input type="number" min="0" max="100" value="60"></label><footer><button type="button">Cancel</button><button type="button" class="primary">Save</button></footer></form></article></section>
15
+ <section><h2>Refused save</h2><article class="card"><h2>Draft stays editable</h2><p class="error">Could not save. Your draft is still here. Check the connection or whether the card changed.</p><p>Save is disabled while a request is pending. A stale content revision is refused, never silently overwritten.</p></article></section>
16
+ </div>
17
+ <div class="states"><span>○ To do</span><span>◐ In progress</span><span class="blocked">⧗ Blocked</span><span class="done">✓ Done</span><span>× Cancelled</span></div>
18
+ <p>New work card in the canvas menu creates a status node in To do. Edit opens this form. The card grows locally while editing; saved geometry stays unchanged. Cancel discards the draft. Escape cancels inside the form. Saving changes authored data only, never creates a session or task.</p>
19
+ <p>Work state is independent of progress. Done does not invent a percentage. Progress can be cleared. Agent activity remains violet and context remains blue; an authored In progress state is neutral.</p>
20
+ <p>At 600 px, the same card and form fit the canvas. Focus view uses the same controls. Existing phase/tool status indicators keep their non-work behavior.</p>
21
+ <h2>Read-only live cards · selected 2026-10-27</h2>
22
+ <p>In the session task row, Show on board creates a separate live presentation. Once present, the action reads Show card and focuses it. No conversion of ordinary planning cards.</p>
23
+ <div class="examples">
24
+ <section><h2>Session task row</h2><article class="card"><h2>Verify the change</h2><p>Run the browser checks.</p><div class="state">◐ In progress</div><footer><button>Show on board</button></footer></article></section>
25
+ <section><h2>Live presentation</h2><article class="card"><h2>Verify the change</h2><small>↗ Live task · reviewer · Read-only</small><div class="state">◐ In progress</div><p>Run the browser checks.</p></article></section>
26
+ <section><h2>Missing reference</h2><article class="card"><h2>Task unavailable</h2><div class="blocked">⚠ Task unavailable</div><p>The linked task is no longer on this board.</p><small>Read-only · removing this card does not cancel work.</small></article></section>
27
+ </div>
28
+ <p>Live title, detail, state and attribution follow the task record. No Edit, progress percentage or approval controls. Ending a session keeps the task and its presentation; deleting a presentation never cancels the task. Focus mode uses the same read-only content.</p>
29
+ <h2>Move to new board · Wave 5</h2>
30
+ <p>Selection bar: Move to new board (icon + hover hint at narrow widths). Group menu: Move to new board. Use the existing text-prompt modal shell, 540 px maximum width, 16 px viewport margin, 14 px padding, 8 px gaps, 17 px heading. At 600 px the same 540 px dialog scrolls inside the viewport; at 1920 px it stays centered and bounded. Keep the canvas behind it.</p>
31
+ <div class="examples">
32
+ <section><h2>Name</h2><article class="card" style="width:400px"><h2>Move to new board</h2><p>Move the original cards, including group contents. Leave a portal on this board.</p><label>New board name<input value="Follow-up"></label><footer><button>Cancel</button><button class="primary">Preview move</button></footer></article></section>
33
+ <section><h2>Review</h2><article class="card" style="width:400px"><h2>Move to new board</h2><label>New board name<input value="Follow-up" readonly></label><p>4 cards · 2 pinned · 3 affected boards</p><p>README moves with the cards. Live tasks keep their original owner. Content, relations and review history are preserved; moving does not validate or read content.</p><p class="error">⚠ History boundary: pre-move Undo/Redo is cleared on affected boards. Older snapshots remain inspectable, but cannot be restored across the move.</p><p>Board-space annotations stay here. The new board opens after the move.</p><footer><button>Cancel</button><button class="primary">Move and open</button></footer></article></section>
34
+ <section><h2>Blocked / uncertain reply</h2><article class="card" style="width:400px"><h2>Move to new board</h2><p class="error">⚠ Cannot move this selection</p><p>live-chart: finish the active stream before moving this card.</p><p>No cards moved. Close, resolve the listed bindings and preview again.</p><footer><button>Close</button></footer><hr><p>If the reply is interrupted, keep the original request and show Retry move. Never silently create a second board. A board switch or closing the dialog cancels the delayed navigation, not a committed move.</p></article></section>
35
+ </div>
36
+ <p>Before moving, save or cancel local card drafts. Capture the board and selection when opening. Preview is read-only; commit rechecks current state. No copy checkbox or reverse move. Escape closes the dialog; pending requests do not steal later navigation. Buttons use the existing palette accent; warnings use amber with a glyph and words.</p>
37
+ </main></x-dc>
38
+ <script type="text/x-dc" data-dc-script data-props='{"$preview":{"width":1440,"height":2400}}'>class Component extends DCLogic { renderVals() { return {}; } }</script>
39
+ </body></html>
@@ -2,79 +2,56 @@
2
2
  <html lang="en">
3
3
  <head>
4
4
  <meta charset="utf-8">
5
- <title>Zoomed out — fit all</title>
5
+ <title>Native spatial zoom</title>
6
6
  <script src="./support.js"></script>
7
7
  </head>
8
8
  <body>
9
9
  <x-dc>
10
10
  <helmet>
11
- <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500&amp;family=IBM+Plex+Sans:wght@400;500;600&amp;display=swap">
12
- <style>
13
- body{margin:0}
14
- </style>
11
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;500;600&amp;display=swap">
12
+ <style>body{margin:0}</style>
15
13
  </helmet>
16
- <div style="width: 1440px; height: 640px; box-sizing: border-box; padding: 40px 48px; background: #081524; color: #e6eef7; font-family: 'IBM Plex Sans', system-ui, sans-serif; font-size: 13px; line-height: 1.5; display: flex; flex-direction: column; gap: 20px">
17
- <div><h2 style="margin: 0; font-size: 15px; font-weight: 600">11 · Fit all on the demo board lands at 8%</h2><p style="margin: 2px 0 0; font-size: 12px; color: #8ea3bd">41 of 70 nodes are embedded frames and render as empty cards. Below ~25%, draw each node as its kind and title at screen size.</p></div>
18
- <div style="flex: 1; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 40px">
19
-
20
- <div style="display: flex; flex-direction: column; gap: 8px">
21
- <span style="font-size: 11px; font-weight: 500; letter-spacing: 0.06em; text-transform: uppercase; color: #6b7d94">Today</span>
22
- <div style="position: relative; flex: 1; border-radius: 10px; border: 1px solid #1b2c44; overflow: hidden; background: #081524">
23
- <sc-for list="{{sections}}" as="sct" hint-placeholder-count="2">
24
- <div style="position: absolute; left: 24px; top: {{sct.y}}px; width: 600px; height: 10px; border-radius: 3px; background: #0f1d31; border: 1px solid #1b2c44; box-shadow: 0 0 0 1px rgba(244,197,66,0.3)"></div>
14
+ <div style="width:1440px;height:640px;box-sizing:border-box;padding:40px 48px;background:#081524;color:#e6eef7;font-family:'IBM Plex Sans',system-ui,sans-serif;font-size:13px;line-height:1.5">
15
+ <h2 style="margin:0;font-size:20px;font-weight:600">11 · Keep the native board at every zoom</h2>
16
+ <p style="color:#8ea3bd">Maintainer decision, 2026-10-25. The same positions, sizes, groups, connections and contents scale together. No alternate grid or content enlargement.</p>
17
+ <div style="display:flex;gap:24px;margin-top:28px">
18
+ <sc-for list="{{views}}" as="view" hint-placeholder-count="3">
19
+ <section style="width:432px">
20
+ <h3 style="font-size:14px">{{view.label}}</h3>
21
+ <svg width="432" height="380" viewBox="0 0 432 380" style="border:1px solid #1b2c44;border-radius:10px;background:#081524">
22
+ <g transform="translate(16 44)">
23
+ <g transform="scale({{view.scale}})">
24
+ <rect x="0" y="0" width="396" height="308" rx="8" fill="none" stroke="#536c88"/>
25
+ <text x="12" y="22" fill="#e6eef7" font-size="16">Release evidence</text>
26
+ <path d="M182 128 L218 218" stroke="#6b7d94" stroke-width="2" fill="none"/>
27
+ <path d="M211 213 L218 218 L218 210" stroke="#6b7d94" stroke-width="2" fill="none"/>
28
+ <g transform="translate(12 36)">
29
+ <rect width="170" height="154" rx="8" fill="#0f1d31" stroke="#1b2c44"/>
30
+ <text x="12" y="22" fill="#e6eef7" font-size="{{view.titleSize}}">Build durations</text>
31
+ <path d="M14 126 L45 99 L77 110 L110 72 L153 84" fill="none" stroke="#62c4b8" stroke-width="3"/>
32
+ <path d="M14 44 V138 H156" fill="none" stroke="#536c88"/>
33
+ <text x="16" y="59" fill="#8ea3bd" font-size="11">37 → 19 minutes</text>
34
+ </g>
35
+ <g transform="translate(218 146)">
36
+ <rect width="166" height="146" rx="8" fill="#0f1d31" stroke="#1b2c44"/>
37
+ <text x="12" y="22" fill="#e6eef7" font-size="{{view.titleSize}}">Release gates</text>
38
+ <text x="12" y="56" fill="#e6eef7" font-size="13">✓ Tests passed</text>
39
+ <text x="12" y="82" fill="#e6eef7" font-size="13">✓ Review complete</text>
40
+ <text x="12" y="108" fill="#8ea3bd" font-size="12">Source: build report</text>
41
+ </g>
42
+ </g>
43
+ </g>
44
+ </svg>
45
+ </section>
25
46
  </sc-for>
26
- <sc-for list="{{tiles}}" as="t" hint-placeholder-count="20">
27
- <div style="position: absolute; left: {{t.x}}px; top: {{t.y}}px; width: 112px; height: 72px; box-sizing: border-box; border-radius: 4px; background: #0f1d31; border: 1px solid #1b2c44; overflow: hidden"><div style="height: 6px; background: #13243b"></div></div>
28
- </sc-for>
29
- <span style="position: absolute; right: 12px; bottom: 10px; font-family: 'IBM Plex Mono', monospace; font-size: 11px; color: #5c6b80">8%</span>
30
- </div>
31
- </div>
32
-
33
- <div style="display: flex; flex-direction: column; gap: 8px">
34
- <span style="font-size: 11px; font-weight: 500; letter-spacing: 0.06em; text-transform: uppercase; color: #6b7d94">Proposed</span>
35
- <div style="position: relative; flex: 1; border-radius: 10px; border: 1px solid #1b2c44; overflow: hidden; background: #081524">
36
- <sc-for list="{{sections}}" as="sct" hint-placeholder-count="2">
37
- <div style="position: absolute; left: 24px; top: {{sct.yt}}px; font-size: 15px; font-weight: 600; line-height: 20px">{{sct.title}}</div>
38
- </sc-for>
39
- <sc-for list="{{tiles}}" as="t" hint-placeholder-count="20">
40
- <div style="position: absolute; left: {{t.x}}px; top: {{t.y}}px; width: 112px; height: 72px; box-sizing: border-box; padding: 8px 10px; border-radius: 6px; background: #0f1d31; border: 1px solid #1b2c44; display: flex; flex-direction: column; gap: 4px">
41
- <div style="display: flex; align-items: center; gap: 6px"><svg width="14" height="14" viewBox="0 0 24 24" style="flex-shrink: 0; color: #8ea3bd; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round"><path d="{{t.icon}}"></path></svg><span style="font-size: 11px; color: #8ea3bd">{{t.kind}}</span></div>
42
- <span style="font-size: 12px; font-weight: 600; line-height: 1.3">{{t.title}}</span>
43
- </div>
44
- </sc-for>
45
- <span style="position: absolute; right: 12px; bottom: 10px; font-family: 'IBM Plex Mono', monospace; font-size: 11px; color: #6b7d94">8%</span>
46
- </div>
47
- </div>
48
-
49
47
  </div>
48
+ <p style="color:#8ea3bd">Automatic previews stay on the board. Zoom or expand to read details. Title text grows at most 1.2×; the header line and content space stay fixed.</p>
50
49
  </div>
51
50
  </x-dc>
52
51
  <script type="text/x-dc" data-dc-script data-props='{"$preview":{"width":1440,"height":640}}'>
53
52
  class Component extends DCLogic {
54
53
  renderVals() {
55
- var chart = 'M4 4v16h16M8 16v-4M12 16V8M16 16v-6';
56
- var html = 'M8 8l-4 4 4 4M16 8l4 4-4 4M13.5 5l-3 14';
57
- var charts = [
58
- ['line', 'p95 latency'], ['bar', 'Merged PRs'], ['area', 'Nodes created'], ['pie', 'Node types'], ['stacked', 'CI minutes'],
59
- ['composed', 'Throughput'], ['scatter', 'PR size'], ['radar', 'Coverage'], ['sparkline', 'Build time'], ['bullet', 'Release KPIs']
60
- ];
61
- var prims = [
62
- ['html', 'Choice grid'], ['html', 'Plan timeline'], ['html', 'Review sheet'], ['html', 'PR write-up'], ['html', 'System map'],
63
- ['html', 'Walkthrough'], ['html', 'Design sheet'], ['html', 'Component gallery'], ['html', 'Flowchart'], ['html', 'Triage board']
64
- ];
65
- var sections = [
66
- { y: 22, yt: 18, title: '④ Charts' },
67
- { y: 222, yt: 218, title: '⑦ HTML primitives' }
68
- ];
69
- var tiles = [];
70
- function place(list, top, icon) {
71
- list.forEach(function (it, i) {
72
- tiles.push({ x: 24 + (i % 5) * 122, y: top + Math.floor(i / 5) * 82, kind: it[0], title: it[1], icon: icon });
73
- });
74
- }
75
- place(charts, 50, chart);
76
- place(prims, 250, html);
77
- return { sections: sections, tiles: tiles };
54
+ return { views: [{ label: '100%', scale: 1, titleSize: 12 }, { label: '39%', scale: 0.39, titleSize: 14.4 }, { label: '20%', scale: 0.2, titleSize: 14.4 }] };
78
55
  }
79
56
  }
80
57
  </script>
@@ -2,6 +2,20 @@
2
2
  "v": 3,
3
3
  "attachments": {},
4
4
  "boards": {
5
+ "GuestName.dc.html": {
6
+ "h": 648,
7
+ "title": "Guest name entry and existing presence",
8
+ "w": 1272,
9
+ "x": 9120,
10
+ "y": 5960
11
+ },
12
+ "WorkCards.dc.html": {
13
+ "h": 2400,
14
+ "title": "Work cards — in-card editing (selected 2026-10-27)",
15
+ "w": 1440,
16
+ "x": 7600,
17
+ "y": 5960
18
+ },
5
19
  "AgentContext.dc.html": {
6
20
  "h": 1500,
7
21
  "title": "What the agent did with context",
@@ -38,7 +52,7 @@
38
52
  "y": 10260
39
53
  },
40
54
  "Chrome.dc.html": {
41
- "h": 1000,
55
+ "h": 1360,
42
56
  "title": "Rail, node header, section labels",
43
57
  "w": 1440,
44
58
  "x": 1520,
@@ -377,6 +391,8 @@
377
391
  "Relations.dc.html",
378
392
  "Flows.dc.html",
379
393
  "Uses.dc.html",
394
+ "WorkCards.dc.html",
395
+ "GuestName.dc.html",
380
396
  "Vision.dc.html",
381
397
  "AgentContext.dc.html",
382
398
  "Themes.dc.html",
Binary file