pmx-canvas 0.10.0 → 0.11.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 (201) hide show
  1. package/.github/extensions/pmx-canvas/runtime.json +1 -1
  2. package/.github/extensions/pmx-canvas/tools.json +246 -108
  3. package/CHANGELOG.md +32 -0
  4. package/dist/canvas/chunks/abnfDiagram-N423BO3Z-p8dtp6va.js +1 -0
  5. package/dist/canvas/chunks/architecture-TIHT7OUA-9tffvpsv.js +1 -0
  6. package/dist/canvas/chunks/architectureDiagram-T3A2C74G-5jhmxrzf.js +36 -0
  7. package/dist/canvas/chunks/blockDiagram-VBNYF7ZC-pw1fa9yb.js +132 -0
  8. package/dist/canvas/chunks/c4Diagram-5PPSVZJV-x07nq0tt.js +10 -0
  9. package/dist/canvas/chunks/classDiagram-JCYQIIEL-nc6g5x1r.js +1 -0
  10. package/dist/canvas/chunks/classDiagram-v2-OCEON4UE-0qnbpwvh.js +1 -0
  11. package/dist/canvas/chunks/cose-bilkent-JH36ORCC-nm39npq0.js +1 -0
  12. package/dist/canvas/chunks/cynefin-VYW2F7L2-ys8p46ts.js +1 -0
  13. package/dist/canvas/chunks/cynefinDiagram-MW4NZA55-vdxrwahz.js +62 -0
  14. package/dist/canvas/chunks/dagre-VZM6K2ZE-bqdm7wpd.js +4 -0
  15. package/dist/canvas/chunks/diagram-7IWD3JNH-gs5gpr93.js +30 -0
  16. package/dist/canvas/chunks/diagram-B4RE2ZJO-cgwjg47s.js +3 -0
  17. package/dist/canvas/chunks/diagram-LBJQPF4R-w3vahpav.js +24 -0
  18. package/dist/canvas/chunks/diagram-Q27KOJAE-42837z6h.js +24 -0
  19. package/dist/canvas/chunks/diagram-UB23O5K3-4fz83q59.js +41 -0
  20. package/dist/canvas/chunks/ebnfDiagram-BXEA7PRR-zphtgegj.js +1 -0
  21. package/dist/canvas/chunks/erDiagram-JOGREHBK-zvbbdxp4.js +85 -0
  22. package/dist/canvas/chunks/eventmodeling-45OFAUF4-v9q6dn4c.js +1 -0
  23. package/dist/canvas/chunks/flowDiagram-UKHOOZJN-yrr5z8tc.js +1 -0
  24. package/dist/canvas/chunks/ganttDiagram-PKOTCBZU-282jzycm.js +292 -0
  25. package/dist/canvas/chunks/gitGraph-TEB2WS4Q-kdwb8m0a.js +1 -0
  26. package/dist/canvas/chunks/gitGraphDiagram-DS77QQ5N-vqqy6p1b.js +106 -0
  27. package/dist/canvas/chunks/index-0rk4gp1g.js +2 -0
  28. package/dist/canvas/chunks/index-194m3hc3.js +2 -0
  29. package/dist/canvas/chunks/index-1r72hdzb.js +301 -0
  30. package/dist/canvas/chunks/index-353m7b0p.js +2 -0
  31. package/dist/canvas/chunks/index-3cy1bzwh.js +2 -0
  32. package/dist/canvas/chunks/index-5tv8v1hk.js +1 -0
  33. package/dist/canvas/chunks/index-6ceya556.js +332 -0
  34. package/dist/canvas/chunks/index-6qmsnxwy.js +4 -0
  35. package/dist/canvas/chunks/index-d3b3gqe9.js +2 -0
  36. package/dist/canvas/chunks/index-fjtdggjn.js +2 -0
  37. package/dist/canvas/chunks/index-g3pwnqeb.js +2 -0
  38. package/dist/canvas/chunks/index-gf4e0et4.js +2 -0
  39. package/dist/canvas/chunks/index-hj99nz1f.js +1 -0
  40. package/dist/canvas/chunks/index-nprm96xp.js +16 -0
  41. package/dist/canvas/chunks/index-qj8fxwsf.js +2 -0
  42. package/dist/canvas/chunks/index-r2fyc9w1.js +89 -0
  43. package/dist/canvas/chunks/index-rft2hcz5.js +2 -0
  44. package/dist/canvas/chunks/index-rh7nv68n.js +2 -0
  45. package/dist/canvas/chunks/index-s4j678gj.js +2 -0
  46. package/dist/canvas/chunks/index-tb1wf525.js +179 -0
  47. package/dist/canvas/chunks/index-vv56h019.js +2 -0
  48. package/dist/canvas/chunks/index-w2mra17t.js +207 -0
  49. package/dist/canvas/chunks/index-wgv7en21.js +232 -0
  50. package/dist/canvas/chunks/index-yw8h9vha.js +157 -0
  51. package/dist/canvas/chunks/info-DKCQHKI2-wpzs6sz3.js +1 -0
  52. package/dist/canvas/chunks/infoDiagram-6WML65LV-v1yvggqj.js +2 -0
  53. package/dist/canvas/chunks/ishikawaDiagram-WSZJBQD7-5hnq1a9p.js +70 -0
  54. package/dist/canvas/chunks/journeyDiagram-NVQOT4AX-zjcffveh.js +139 -0
  55. package/dist/canvas/chunks/kanban-definition-27J2QSJJ-dakqtfp1.js +89 -0
  56. package/dist/canvas/chunks/katex-dmg8k4zm.js +257 -0
  57. package/dist/canvas/chunks/mermaid.core-j2geswrd.js +12 -0
  58. package/dist/canvas/chunks/mindmap-definition-FAOFIHXS-142xhr3k.js +96 -0
  59. package/dist/canvas/chunks/packet-7NZHBO7P-xn439f0s.js +1 -0
  60. package/dist/canvas/chunks/pegDiagram-VL7TDLO6-5wvk7vsd.js +1 -0
  61. package/dist/canvas/chunks/pie-RZYD4A2V-0kf16rwh.js +1 -0
  62. package/dist/canvas/chunks/pieDiagram-7S7Q4E2Y-ztdhwycc.js +39 -0
  63. package/dist/canvas/chunks/quadrantDiagram-CIZ2JOQS-c5p9gmg6.js +7 -0
  64. package/dist/canvas/chunks/radar-I7S5WNFK-0g2pz36t.js +1 -0
  65. package/dist/canvas/chunks/railroad-3IZDKUUU-fcaran6j.js +1 -0
  66. package/dist/canvas/chunks/railroad-abnf-AHOZXSZD-wgdya41q.js +1 -0
  67. package/dist/canvas/chunks/railroad-ebnf-EBAXGLYW-gy07a4ka.js +1 -0
  68. package/dist/canvas/chunks/railroad-peg-LSFZ7HO6-ewk6wtkh.js +1 -0
  69. package/dist/canvas/chunks/railroadDiagram-AXF67PYL-xkmqkjwf.js +1 -0
  70. package/dist/canvas/chunks/requirementDiagram-LRYGKXZP-9wm2dyaw.js +84 -0
  71. package/dist/canvas/chunks/sankeyDiagram-W5VNT64P-2w19etgb.js +40 -0
  72. package/dist/canvas/chunks/sequenceDiagram-SI44F4Z6-0jn0vwmz.js +162 -0
  73. package/dist/canvas/chunks/sizeCapture-X5ZJPWSS-x75epwdq.js +1 -0
  74. package/dist/canvas/chunks/stateDiagram-OKZ733FA-schjpy6d.js +1 -0
  75. package/dist/canvas/chunks/stateDiagram-v2-UEYNNEHI-k8sfp2e7.js +1 -0
  76. package/dist/canvas/chunks/swimlanes-SLNWSIFB-gkw4xce3.js +1 -0
  77. package/dist/canvas/chunks/swimlanesDiagram-ULZ7WXOC-nqysw67j.js +8 -0
  78. package/dist/canvas/chunks/timeline-definition-Z64GVDOM-x7nkcy01.js +120 -0
  79. package/dist/canvas/chunks/treeView-QDETBFTQ-cesw6gp0.js +1 -0
  80. package/dist/canvas/chunks/treemap-6X3UGDF4-zdv4knp9.js +1 -0
  81. package/dist/canvas/chunks/vennDiagram-T6HMQDX7-x8dqn9yf.js +34 -0
  82. package/dist/canvas/chunks/wardley-OPB4EBWU-44pdddez.js +1 -0
  83. package/dist/canvas/chunks/wardleyDiagram-T6FBY63Y-t1j52t9r.js +78 -0
  84. package/dist/canvas/chunks/xychartDiagram-ELKLHX3M-38t16pme.js +7 -0
  85. package/dist/canvas/global.css +389 -229
  86. package/dist/canvas/index.js +141 -211
  87. package/dist/canvas/mcp-app.html +4205 -554
  88. package/dist/canvas/mermaid-entry.js +338 -338
  89. package/dist/canvas/surface-theme.css +6 -6
  90. package/dist/json-render/index.css +1 -1
  91. package/dist/json-render/index.js +49 -49
  92. package/dist/types/client/canvas/BarHint.d.ts +5 -3
  93. package/dist/types/client/canvas/CanvasNode.d.ts +0 -11
  94. package/dist/types/client/canvas/EdgeLayer.d.ts +1 -2
  95. package/dist/types/client/canvas/auto-fit.d.ts +4 -5
  96. package/dist/types/client/mermaid-entry.d.ts +1 -2
  97. package/dist/types/client/mermaid-render.d.ts +1 -0
  98. package/dist/types/client/nodes/BoardNode.d.ts +1 -1
  99. package/dist/types/client/nodes/ExtAppFrame.d.ts +7 -90
  100. package/dist/types/client/nodes/McpAppNode.d.ts +1 -25
  101. package/dist/types/client/nodes/MermaidNode.d.ts +1 -8
  102. package/dist/types/client/nodes/ViewerFrame.d.ts +29 -0
  103. package/dist/types/client/nodes/ViewerHost.d.ts +6 -0
  104. package/dist/types/client/nodes/iframe-document-url.d.ts +3 -9
  105. package/dist/types/client/nodes/primitive-copy.d.ts +5 -0
  106. package/dist/types/client/nodes/use-iframe-content-height.d.ts +1 -1
  107. package/dist/types/client/nodes/use-surface-frame.d.ts +4 -6
  108. package/dist/types/client/nodes/viewer-runtime-state.d.ts +2 -1
  109. package/dist/types/client/state/canvas-store.d.ts +3 -1
  110. package/dist/types/client/state/intent-bridge.d.ts +1 -0
  111. package/dist/types/client/state/presentation.d.ts +17 -6
  112. package/dist/types/json-render/server.d.ts +2 -1
  113. package/dist/types/server/canvas-state.d.ts +2 -0
  114. package/dist/types/server/index.d.ts +10 -5
  115. package/dist/types/server/operations/ops/boards.d.ts +0 -1
  116. package/dist/types/server/tour-control.d.ts +13 -3
  117. package/dist/types/shared/ax-surface-protocol.d.ts +0 -9
  118. package/dist/types/shared/tour.d.ts +8 -0
  119. package/docs/design/Chrome.dc.html +32 -6
  120. package/docs/design/Types1.dc.html +3 -2
  121. package/docs/design/Types2.dc.html +1 -1
  122. package/docs/design/Types3.dc.html +1 -1
  123. package/docs/design/Zoom.dc.html +37 -60
  124. package/docs/design/canvas.json +1 -1
  125. package/docs/design.md +169 -4
  126. package/docs/http-api.md +51 -1
  127. package/docs/mcp.md +8 -0
  128. package/docs/node-types.md +38 -3
  129. package/docs/plans/plan-009-tech-debt-backlog.md +2 -2
  130. package/docs/plans/plan-019-post-0.9-roadmap.md +283 -11
  131. package/docs/product-vision-2026-09.md +9 -0
  132. package/package.json +2 -2
  133. package/plugins/pmx-canvas/com.github.copilot/extensions/pmx-canvas/runtime.json +1 -1
  134. package/plugins/pmx-canvas/plugin.json +1 -1
  135. package/plugins/pmx-canvas/runtime.json +1 -1
  136. package/plugins/pmx-canvas/tools.json +246 -108
  137. package/skills/pmx-canvas/SKILL.md +11 -18
  138. package/skills/pmx-canvas/references/full-reference.md +9 -4
  139. package/skills/pmx-canvas/references/installing-pmx-canvas.md +6 -6
  140. package/skills/published-consumer-e2e/scripts/run-published-consumer-e2e.sh +3 -5
  141. package/src/client/canvas/BarHint.tsx +6 -3
  142. package/src/client/canvas/CanvasNode.tsx +34 -47
  143. package/src/client/canvas/CanvasViewport.tsx +6 -7
  144. package/src/client/canvas/ContextMenu.tsx +63 -3
  145. package/src/client/canvas/EdgeLayer.tsx +365 -169
  146. package/src/client/canvas/ExpandedNodeOverlay.tsx +1 -2
  147. package/src/client/canvas/Presentation.tsx +53 -3
  148. package/src/client/canvas/TopBar.tsx +24 -9
  149. package/src/client/canvas/auto-fit.ts +9 -11
  150. package/src/client/canvas/canvas-area.ts +1 -1
  151. package/src/client/canvas/use-focus-trap.ts +6 -1
  152. package/src/client/mermaid-entry.ts +6 -20
  153. package/src/client/mermaid-render.ts +39 -0
  154. package/src/client/nodes/AxStepControls.tsx +45 -69
  155. package/src/client/nodes/BoardNode.tsx +65 -9
  156. package/src/client/nodes/ContextNode.tsx +88 -396
  157. package/src/client/nodes/ExtAppFrame.tsx +283 -1462
  158. package/src/client/nodes/FileNode.tsx +92 -81
  159. package/src/client/nodes/HtmlNode.tsx +8 -36
  160. package/src/client/nodes/LedgerNode.tsx +31 -17
  161. package/src/client/nodes/MarkdownNode.tsx +8 -17
  162. package/src/client/nodes/McpAppNode.tsx +48 -154
  163. package/src/client/nodes/MermaidNode.tsx +80 -69
  164. package/src/client/nodes/PromptNode.tsx +12 -14
  165. package/src/client/nodes/ResponseNode.tsx +8 -6
  166. package/src/client/nodes/StatusNode.tsx +22 -7
  167. package/src/client/nodes/StatusSummary.tsx +5 -3
  168. package/src/client/nodes/TraceNode.tsx +8 -8
  169. package/src/client/nodes/ViewerFrame.tsx +262 -0
  170. package/src/client/nodes/ViewerHost.tsx +41 -0
  171. package/src/client/nodes/WebpageNode.tsx +22 -24
  172. package/src/client/nodes/iframe-document-url.ts +20 -27
  173. package/src/client/nodes/primitive-copy.ts +97 -0
  174. package/src/client/nodes/use-iframe-content-height.ts +34 -10
  175. package/src/client/nodes/use-surface-frame.ts +22 -11
  176. package/src/client/nodes/viewer-runtime-state.ts +41 -35
  177. package/src/client/state/canvas-store.ts +18 -12
  178. package/src/client/state/intent-bridge.ts +1 -0
  179. package/src/client/state/presentation.ts +135 -15
  180. package/src/client/state/sse-bridge.ts +18 -19
  181. package/src/client/theme/global.css +389 -229
  182. package/src/client/theme/surface-theme.css +6 -6
  183. package/src/json-render/charts/tufte-components.tsx +44 -2
  184. package/src/json-render/renderer/index.css +62 -2
  185. package/src/json-render/renderer/index.tsx +31 -7
  186. package/src/json-render/server.ts +3 -2
  187. package/src/server/board-export.ts +35 -24
  188. package/src/server/canvas-geometry.ts +1 -0
  189. package/src/server/canvas-state.ts +5 -0
  190. package/src/server/demo-state.json +106 -100
  191. package/src/server/html-primitives.ts +3 -9
  192. package/src/server/html-surface.ts +8 -0
  193. package/src/server/index.ts +19 -9
  194. package/src/server/operations/mcp-contracts.ts +17 -2
  195. package/src/server/operations/ops/boards.ts +1 -3
  196. package/src/server/operations/ops/viewport.ts +11 -9
  197. package/src/server/server.ts +7 -59
  198. package/src/server/tour-control.ts +66 -6
  199. package/src/shared/ax-surface-protocol.ts +0 -11
  200. package/src/shared/content-height-reporter.ts +4 -3
  201. package/src/shared/tour.ts +8 -0
@@ -5148,6 +5148,38 @@
5148
5148
  "previous"
5149
5149
  ]
5150
5150
  },
5151
+ "presenter": {
5152
+ "description": "Document intent order and expected board activation",
5153
+ "type": "object",
5154
+ "properties": {
5155
+ "clientId": {
5156
+ "type": "string",
5157
+ "minLength": 1,
5158
+ "maxLength": 128
5159
+ },
5160
+ "intent": {
5161
+ "type": "integer",
5162
+ "exclusiveMinimum": 0,
5163
+ "maximum": 9007199254740991
5164
+ },
5165
+ "catalogEpoch": {
5166
+ "type": "string",
5167
+ "minLength": 1,
5168
+ "maxLength": 128
5169
+ },
5170
+ "boardGeneration": {
5171
+ "type": "integer",
5172
+ "minimum": 0,
5173
+ "maximum": 9007199254740991
5174
+ }
5175
+ },
5176
+ "required": [
5177
+ "clientId",
5178
+ "intent",
5179
+ "catalogEpoch",
5180
+ "boardGeneration"
5181
+ ]
5182
+ },
5151
5183
  "present": {
5152
5184
  "description": "Start presenting in viewers that are not presenting yet (default true; false only moves presenting viewers)",
5153
5185
  "type": "boolean"
@@ -5454,7 +5486,6 @@
5454
5486
  "type": "string",
5455
5487
  "enum": [
5456
5488
  "tour.set",
5457
- "tour.exit",
5458
5489
  "annotation.remove"
5459
5490
  ]
5460
5491
  },
@@ -5494,142 +5525,249 @@
5494
5525
  "const": "success"
5495
5526
  },
5496
5527
  "data": {
5497
- "type": "object",
5498
- "properties": {
5499
- "ok": {
5500
- "type": "boolean"
5501
- },
5502
- "index": {
5503
- "type": "integer",
5504
- "minimum": 0,
5505
- "maximum": 9007199254740991
5506
- },
5507
- "total": {
5508
- "type": "integer",
5509
- "minimum": 0,
5510
- "maximum": 9007199254740991
5511
- },
5512
- "stop": {
5528
+ "anyOf": [
5529
+ {
5513
5530
  "type": "object",
5514
5531
  "properties": {
5515
- "target": {
5516
- "anyOf": [
5517
- {
5518
- "type": "object",
5519
- "properties": {
5520
- "nodeId": {
5521
- "type": "string",
5522
- "minLength": 1
5523
- }
5524
- },
5525
- "required": [
5526
- "nodeId"
5527
- ],
5528
- "additionalProperties": false
5529
- },
5530
- {
5531
- "type": "object",
5532
- "properties": {
5533
- "rect": {
5532
+ "ok": {
5533
+ "type": "boolean"
5534
+ },
5535
+ "catalogEpoch": {
5536
+ "type": "string"
5537
+ },
5538
+ "boardGeneration": {
5539
+ "type": "integer",
5540
+ "minimum": 0,
5541
+ "maximum": 9007199254740991
5542
+ },
5543
+ "sequence": {
5544
+ "type": "integer",
5545
+ "minimum": 0,
5546
+ "maximum": 9007199254740991
5547
+ },
5548
+ "index": {
5549
+ "type": "integer",
5550
+ "minimum": 0,
5551
+ "maximum": 9007199254740991
5552
+ },
5553
+ "total": {
5554
+ "type": "integer",
5555
+ "minimum": 0,
5556
+ "maximum": 9007199254740991
5557
+ },
5558
+ "stop": {
5559
+ "type": "object",
5560
+ "properties": {
5561
+ "target": {
5562
+ "anyOf": [
5563
+ {
5534
5564
  "type": "object",
5535
5565
  "properties": {
5536
- "x": {
5537
- "type": "number"
5538
- },
5539
- "y": {
5540
- "type": "number"
5541
- },
5542
- "width": {
5543
- "type": "number",
5544
- "exclusiveMinimum": 0
5545
- },
5546
- "height": {
5547
- "type": "number",
5548
- "exclusiveMinimum": 0
5566
+ "nodeId": {
5567
+ "type": "string",
5568
+ "minLength": 1
5549
5569
  }
5550
5570
  },
5551
5571
  "required": [
5552
- "x",
5553
- "y",
5554
- "width",
5555
- "height"
5572
+ "nodeId"
5556
5573
  ],
5557
5574
  "additionalProperties": false
5558
- }
5559
- },
5560
- "required": [
5561
- "rect"
5562
- ],
5563
- "additionalProperties": false
5564
- },
5565
- {
5566
- "type": "object",
5567
- "properties": {
5568
- "viewport": {
5575
+ },
5576
+ {
5569
5577
  "type": "object",
5570
5578
  "properties": {
5571
- "x": {
5572
- "type": "number"
5573
- },
5574
- "y": {
5575
- "type": "number"
5576
- },
5577
- "scale": {
5578
- "type": "number",
5579
- "exclusiveMinimum": 0
5579
+ "rect": {
5580
+ "type": "object",
5581
+ "properties": {
5582
+ "x": {
5583
+ "type": "number"
5584
+ },
5585
+ "y": {
5586
+ "type": "number"
5587
+ },
5588
+ "width": {
5589
+ "type": "number",
5590
+ "exclusiveMinimum": 0
5591
+ },
5592
+ "height": {
5593
+ "type": "number",
5594
+ "exclusiveMinimum": 0
5595
+ }
5596
+ },
5597
+ "required": [
5598
+ "x",
5599
+ "y",
5600
+ "width",
5601
+ "height"
5602
+ ],
5603
+ "additionalProperties": false
5580
5604
  }
5581
5605
  },
5582
5606
  "required": [
5583
- "x",
5584
- "y",
5585
- "scale"
5607
+ "rect"
5608
+ ],
5609
+ "additionalProperties": false
5610
+ },
5611
+ {
5612
+ "type": "object",
5613
+ "properties": {
5614
+ "viewport": {
5615
+ "type": "object",
5616
+ "properties": {
5617
+ "x": {
5618
+ "type": "number"
5619
+ },
5620
+ "y": {
5621
+ "type": "number"
5622
+ },
5623
+ "scale": {
5624
+ "type": "number",
5625
+ "exclusiveMinimum": 0
5626
+ }
5627
+ },
5628
+ "required": [
5629
+ "x",
5630
+ "y",
5631
+ "scale"
5632
+ ],
5633
+ "additionalProperties": false
5634
+ }
5635
+ },
5636
+ "required": [
5637
+ "viewport"
5586
5638
  ],
5587
5639
  "additionalProperties": false
5588
5640
  }
5589
- },
5590
- "required": [
5591
- "viewport"
5592
- ],
5593
- "additionalProperties": false
5641
+ ]
5642
+ },
5643
+ "duration": {
5644
+ "type": "number",
5645
+ "minimum": 0,
5646
+ "maximum": 3600
5647
+ },
5648
+ "easing": {
5649
+ "type": "string",
5650
+ "enum": [
5651
+ "linear",
5652
+ "ease-in-out",
5653
+ "ease-out"
5654
+ ]
5655
+ },
5656
+ "padding": {
5657
+ "type": "number",
5658
+ "minimum": 0
5659
+ },
5660
+ "pullback": {
5661
+ "type": "number",
5662
+ "minimum": 0,
5663
+ "maximum": 4
5594
5664
  }
5595
- ]
5665
+ },
5666
+ "required": [
5667
+ "target"
5668
+ ],
5669
+ "additionalProperties": false
5670
+ }
5671
+ },
5672
+ "required": [
5673
+ "ok",
5674
+ "catalogEpoch",
5675
+ "boardGeneration",
5676
+ "sequence",
5677
+ "index",
5678
+ "total",
5679
+ "stop"
5680
+ ],
5681
+ "additionalProperties": {}
5682
+ },
5683
+ {
5684
+ "type": "object",
5685
+ "properties": {
5686
+ "ok": {
5687
+ "type": "boolean",
5688
+ "const": true
5596
5689
  },
5597
- "duration": {
5598
- "type": "number",
5599
- "minimum": 0,
5600
- "maximum": 3600
5690
+ "superseded": {
5691
+ "type": "boolean",
5692
+ "const": true
5693
+ }
5694
+ },
5695
+ "required": [
5696
+ "ok",
5697
+ "superseded"
5698
+ ],
5699
+ "additionalProperties": false
5700
+ }
5701
+ ]
5702
+ }
5703
+ },
5704
+ "required": [
5705
+ "operation",
5706
+ "outcome",
5707
+ "data"
5708
+ ],
5709
+ "additionalProperties": false
5710
+ },
5711
+ {
5712
+ "type": "object",
5713
+ "properties": {
5714
+ "operation": {
5715
+ "type": "string",
5716
+ "const": "tour.exit"
5717
+ },
5718
+ "outcome": {
5719
+ "type": "string",
5720
+ "const": "success"
5721
+ },
5722
+ "data": {
5723
+ "anyOf": [
5724
+ {
5725
+ "type": "object",
5726
+ "properties": {
5727
+ "ok": {
5728
+ "type": "boolean"
5601
5729
  },
5602
- "easing": {
5603
- "type": "string",
5604
- "enum": [
5605
- "linear",
5606
- "ease-in-out",
5607
- "ease-out"
5608
- ]
5730
+ "catalogEpoch": {
5731
+ "type": "string"
5609
5732
  },
5610
- "padding": {
5611
- "type": "number",
5612
- "minimum": 0
5733
+ "boardGeneration": {
5734
+ "type": "integer",
5735
+ "minimum": 0,
5736
+ "maximum": 9007199254740991
5613
5737
  },
5614
- "pullback": {
5615
- "type": "number",
5738
+ "sequence": {
5739
+ "type": "integer",
5616
5740
  "minimum": 0,
5617
- "maximum": 4
5741
+ "maximum": 9007199254740991
5618
5742
  }
5619
5743
  },
5620
5744
  "required": [
5621
- "target"
5745
+ "ok",
5746
+ "catalogEpoch",
5747
+ "boardGeneration",
5748
+ "sequence"
5749
+ ],
5750
+ "additionalProperties": {}
5751
+ },
5752
+ {
5753
+ "type": "object",
5754
+ "properties": {
5755
+ "ok": {
5756
+ "type": "boolean",
5757
+ "const": true
5758
+ },
5759
+ "superseded": {
5760
+ "type": "boolean",
5761
+ "const": true
5762
+ }
5763
+ },
5764
+ "required": [
5765
+ "ok",
5766
+ "superseded"
5622
5767
  ],
5623
5768
  "additionalProperties": false
5624
5769
  }
5625
- },
5626
- "required": [
5627
- "ok",
5628
- "index",
5629
- "total",
5630
- "stop"
5631
- ],
5632
- "additionalProperties": {}
5770
+ ]
5633
5771
  }
5634
5772
  },
5635
5773
  "required": [
@@ -106,7 +106,7 @@ for the authoritative stop, viewport, persistence, reset, group-order, and captu
106
106
 
107
107
  ## Runtime prerequisites
108
108
 
109
- PMX Canvas 0.10.0 requires **Bun >=1.4.4**, including when installed through npm.
109
+ PMX Canvas 0.11.0 requires **Bun >=1.4.4**, including when installed through npm.
110
110
  Check `bun --version` and ensure Bun is on the MCP host's PATH, not just your shell's;
111
111
  use an absolute executable path if needed. Install/configure only when requested.
112
112
  For pinned installation, MCP configuration, managed services, and disposable verification,
@@ -525,6 +525,10 @@ Use the visible workbench when the human is actively curating layout:
525
525
  - Drop files or URLs to create matching nodes; an empty board shows starter actions (new note,
526
526
  pick files, paste a link, start an agent session).
527
527
  - Use a markdown node's Edit button to edit its content.
528
+ - For a frameless section label, set Markdown `data.display: "heading"` (or choose
529
+ **Display as heading** in its menu). `"card"` restores the ordinary frame.
530
+ - Zoom keeps the same spatial board and scales card content proportionally.
531
+ Viewers load automatically near the viewport, including at fit-all zoom.
528
532
  - **Groups** are frames with the name pill and an action cluster (auto-arrange children, collapse,
529
533
  ⋯ rename / ungroup / pin all) on the top edge. Membership changes only on release while the
530
534
  "release to add to <group>" pill shows (Esc keeps it out); dragging a child fully out offers
@@ -787,23 +791,12 @@ changes do not advance content revisions, while semantic edits and undo do.
787
791
  - A hosted ext-app (Excalidraw) node in a **WebKit** host panel (e.g. the GitHub Copilot app's
788
792
  embedded WKWebView) can remain blank even when its API session is healthy and `sessionStatus`
789
793
  is `ready`. This host-specific rendering issue remains open; successful Chrome/Codex rendering
790
- does not establish native-host health. Since 0.4.6 the canvas runs a **paint oracle +
791
- recovery ladder** under WebKit: present-at-load ext-apps mount strictly one at a time (the
792
- cold burst was the trigger), each frame answers a double-rAF **paint probe** after settle, and
793
- on silence the ladder escalates — soft-expand cycle (the automatic analogue of the proven
794
- enlarge+close) → serialized remount → an explicit "App surface failed to paint / Retry"
795
- affordance. Native Copilot/WebKit surfaces can still remain blank despite a successful
796
- probe, including when visibility is reported as visible. The recovery trail
797
- (`GET /api/canvas/debug/ext-app-recovery` / `window.__PMX_EXTAPP_LOG`) now records
798
- `mount-slot`, `paint-ok`, `paint-fail`, `soft-expand-cycle`, `recovery-exhausted`, and
799
- `assume-visible-rearm`. Treat `paint-ok`/`paint-fail` as diagnostic evidence, not compositor
800
- proof. Require a rendered screenshot in the affected host before declaring its surface
801
- healthy; a Chromium pass does not close a native Copilot/WebKit failure. In a host that
802
- reports the document hidden, `paint-ok` is recorded as
803
- `paint-ok (unverified: host hidden)` — the app answered the paint probe, but nothing is
804
- proven composited, so do not treat it as a verified paint. If a
805
- tile still shows the Retry affordance, click Retry (fresh recovery budget) or expand-then-close;
806
- attach the recovery trail when reporting.
794
+ does not establish native-host health. Viewers now share one loading/paint handoff and
795
+ explicit **Retry**. The old WebKit recovery ladder and its
796
+ diagnostic log endpoint are removed. A double-rAF acknowledgement establishes document
797
+ scheduling, not native compositor health. Require a rendered screenshot in the affected
798
+ host before declaring its surface healthy. A failed replacement keeps the last painted
799
+ document; use its Retry control rather than expecting automatic remount cycles.
807
800
  - Ext-app frame documents live in server memory. Through 0.4.0, killing/restarting the daemon
808
801
  while a panel stays open leaves ext-app tiles on dead frame URLs (`Frame document not found`,
809
802
  0.4.0 report Finding S) until a full workbench reload. Since 0.4.1 the browser revalidates its
@@ -555,10 +555,15 @@ Once the board list has loaded, all workbench context-pin writes send the captur
555
555
  `expectedBoardId`; a server-side board switch returns 409 instead of changing
556
556
  another board's pins. Receipt pin actions require reopening the owning board.
557
557
 
558
- Embedded JSON/graph runtime readiness waits up to 10 seconds after document load
559
- and retries a failed handoff once while retaining the last painted document.
560
- After another failure, the error toast/history say **Reload to retry**; a later
561
- healthy authored update can recover. This is not an overall network-load timeout.
558
+ Embedded previews mount automatically near the viewport at every zoom and remain
559
+ mounted to preserve arbitrary app state. There is no lifetime preview cap. Mermaid renders
560
+ inline, without an iframe. JSON/graph viewers inherit all nine named canvas themes
561
+ and keep form drafts when the theme changes. During replacement, the pending
562
+ document temporarily coexists with its painted predecessor.
563
+
564
+ A network load or missing JSON runtime times out after 10 seconds and offers a
565
+ visible **Retry**, retaining the last painted document during replacement.
566
+ An already mounted offscreen runtime may wait for paint without being timed out.
562
567
 
563
568
  Native edge add accepts optional `toBoardId`: `from` is on the open source board,
564
569
  `to` is a card on the target board. CLI: `pmx-canvas edge add --from <source> --to <target>
@@ -4,7 +4,7 @@ Use this reference when the `pmx-canvas` skill is installed but the `pmx-canvas`
4
4
 
5
5
  ## Prerequisites and version
6
6
 
7
- The examples pin **PMX Canvas 0.10.0**, which requires **Bun >=1.4.4** even when
7
+ The examples pin **PMX Canvas 0.11.0**, which requires **Bun >=1.4.4** even when
8
8
  installed through npm: the CLI runs through Bun, not Node. Check `bun --version`
9
9
  first. If missing or older, follow the [Bun installation instructions](https://bun.sh/docs/installation)
10
10
  with the user's authorization. Ensure Bun is on the MCP host's PATH as well as the
@@ -22,11 +22,11 @@ in `SKILL.md`. Do not pair newer checkout guidance with an older runtime unknowi
22
22
  ## Install from npm
23
23
 
24
24
  ```bash
25
- npm install -g pmx-canvas@0.10.0
25
+ npm install -g pmx-canvas@0.11.0
26
26
  pmx-canvas --version
27
27
  ```
28
28
 
29
- Without a global install, use `bunx pmx-canvas@0.10.0` in place of `pmx-canvas` in
29
+ Without a global install, use `bunx pmx-canvas@0.11.0` in place of `pmx-canvas` in
30
30
  the commands below. Do not use unpinned `bunx pmx-canvas` for a version-specific check.
31
31
 
32
32
  ## Choose the workspace and target
@@ -96,7 +96,7 @@ discards empty env values, remove `PMX_CANVAS_URL` from its launch environment i
96
96
  "mcpServers": {
97
97
  "canvas": {
98
98
  "command": "bunx",
99
- "args": ["pmx-canvas@0.10.0", "--mcp"],
99
+ "args": ["pmx-canvas@0.11.0", "--mcp"],
100
100
  "env": {
101
101
  "PMX_CANVAS_WORKSPACE_ROOT": "/absolute/path/to/project",
102
102
  "PMX_CANVAS_PORT": "14313",
@@ -140,7 +140,7 @@ Amp executes, not only on the user's laptop. Merge this into that workspace's
140
140
  "amp.mcpServers": {
141
141
  "canvas": {
142
142
  "command": "bunx",
143
- "args": ["pmx-canvas@0.10.0", "--mcp"],
143
+ "args": ["pmx-canvas@0.11.0", "--mcp"],
144
144
  "includeTools": ["canvas_*"],
145
145
  "env": {
146
146
  "PMX_CANVAS_WORKSPACE_ROOT": "/absolute/path/to/project",
@@ -174,7 +174,7 @@ The agent must not run this approval itself or move the command to global settin
174
174
  `--mcp-config` to bypass workspace trust. Approval authorizes execution of this MCP
175
175
  command; it is not a new Canvas import consent or permission to mutate arbitrary boards.
176
176
  After approval, reload MCP connections (`reload_mcp` in Amp) and require `connected`.
177
- Discover `canvas` tools with `tool_search`; the full unfiltered 0.10.0 server has 25 tools,
177
+ Discover `canvas` tools with `tool_search`; the full unfiltered 0.11.0 server has 25 tools,
178
178
  including `canvas_help`. If still absent, inspect the server status, command/PATH and target instead
179
179
  of reinstalling blindly. See [Amp MCP documentation](https://ampcode.com/docs/customize/mcp).
180
180
 
@@ -75,11 +75,9 @@ if [[ -f "${REPO_ROOT}/LICENSE" ]]; then
75
75
  cp "${REPO_ROOT}/LICENSE" "${PACKAGE_STAGING}/package/LICENSE"
76
76
  fi
77
77
  cp -R "${REPO_ROOT}/src" "${PACKAGE_STAGING}/package/src"
78
- mkdir -p "${PACKAGE_STAGING}/package/dist/canvas" "${PACKAGE_STAGING}/package/dist/json-render"
79
- cp "${REPO_ROOT}/dist/canvas/index.js" "${PACKAGE_STAGING}/package/dist/canvas/index.js"
80
- cp "${REPO_ROOT}/dist/canvas/global.css" "${PACKAGE_STAGING}/package/dist/canvas/global.css"
81
- cp "${REPO_ROOT}/dist/json-render/index.js" "${PACKAGE_STAGING}/package/dist/json-render/index.js"
82
- cp "${REPO_ROOT}/dist/json-render/index.css" "${PACKAGE_STAGING}/package/dist/json-render/index.css"
78
+ mkdir -p "${PACKAGE_STAGING}/package/dist"
79
+ cp -R "${REPO_ROOT}/dist/canvas" "${PACKAGE_STAGING}/package/dist/canvas"
80
+ cp -R "${REPO_ROOT}/dist/json-render" "${PACKAGE_STAGING}/package/dist/json-render"
83
81
  TARBALL="pmx-canvas-published-consumer.tgz"
84
82
  tar -czf "${PACK_DIR}/${TARBALL}" -C "${PACKAGE_STAGING}" package
85
83
 
@@ -20,6 +20,7 @@ export function BarPortal({ children }: { children: VNode }) {
20
20
  * `title` hints, which are delay-gated and never render in embedded panes.
21
21
  */
22
22
  export function BarHint({
23
+ id,
23
24
  label,
24
25
  shortcut,
25
26
  body,
@@ -29,10 +30,12 @@ export function BarHint({
29
30
  fitWithin,
30
31
  children,
31
32
  }: {
33
+ /** Optional description target for the control's aria-describedby. */
34
+ id?: string;
32
35
  label: string;
33
36
  shortcut?: string;
34
- /** One or two plain sentences under the label — the explanation a native `title` used to hide. */
35
- body?: string;
37
+ /** Explanatory text, optionally split into readable paragraphs. */
38
+ body?: ComponentChildren;
36
39
  align?: 'start' | 'center' | 'end';
37
40
  /** Which way the tooltip opens. Bars at the bottom of the region open 'up'. */
38
41
  side?: 'down' | 'up';
@@ -73,7 +76,7 @@ export function BarHint({
73
76
  onFocusIn={fitWithin ? fit : undefined}
74
77
  >
75
78
  {children}
76
- <span class="toolbar-tooltip" role="tooltip">
79
+ <span id={id} class="toolbar-tooltip" role="tooltip">
77
80
  <span class="toolbar-tooltip-label">{label}</span>
78
81
  {body && <span class="toolbar-tooltip-body">{body}</span>}
79
82
  {shortcut && (