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.
- package/.github/extensions/pmx-canvas/extension.mjs +3 -1
- package/.github/extensions/pmx-canvas/runtime.json +1 -1
- package/.github/extensions/pmx-canvas/tools.json +688 -128
- package/CHANGELOG.md +69 -0
- package/dist/amp-plugin/pmx-canvas/LICENSE +21 -0
- package/dist/amp-plugin/pmx-canvas/THIRD_PARTY_LICENSES.txt +331 -0
- package/dist/amp-plugin/pmx-canvas/index.js +5445 -0
- package/dist/amp-plugin/pmx-canvas/runtime.json +3 -0
- package/dist/amp-plugin/pmx-canvas/shared-runtime.mjs +194 -0
- package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/SKILL.md +251 -0
- package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/evals/evals.json +1086 -0
- package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/evals/fixtures/code-exploration/src/auth/jwt.ts +17 -0
- package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/evals/fixtures/code-exploration/src/auth/login.ts +12 -0
- package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/evals/fixtures/code-exploration/src/auth/middleware.ts +13 -0
- package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/evals/fixtures/code-exploration/src/routes/auth.ts +13 -0
- package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/evals/fixtures/investigation-board/src/handlers/users.ts +27 -0
- package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/mcp.json +36 -0
- package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/references/ax-html-control-surface.md +101 -0
- package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/references/codex-app-adapter.md +151 -0
- package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/references/excalidraw-diagram-authoring.md +150 -0
- package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/references/full-reference.md +1785 -0
- package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/references/github-copilot-app-adapter.md +223 -0
- package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/references/html-primitives.md +139 -0
- package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/references/importing-context.md +132 -0
- package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/references/installing-pmx-canvas.md +251 -0
- package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/references/tours-and-recording.md +111 -0
- package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas/references/workbench-workflows.md +900 -0
- package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas-orchestration/SKILL.md +141 -0
- package/dist/amp-plugin/pmx-canvas/skills/pmx-canvas-testing/SKILL.md +266 -0
- package/dist/amp-plugin/pmx-canvas/start-mcp.mjs +14857 -0
- package/dist/amp-plugin/pmx-canvas/tools.json +10963 -0
- package/dist/canvas/chunks/abnfDiagram-N423BO3Z-cwtsds5d.js +1 -0
- package/dist/canvas/chunks/architecture-TIHT7OUA-x63cwejs.js +1 -0
- package/dist/canvas/chunks/architectureDiagram-T3A2C74G-b4xc9tpz.js +36 -0
- package/dist/canvas/chunks/blockDiagram-VBNYF7ZC-ahp3yxxs.js +132 -0
- package/dist/canvas/chunks/c4Diagram-5PPSVZJV-nappnay7.js +10 -0
- package/dist/canvas/chunks/classDiagram-JCYQIIEL-k1j2xc1t.js +1 -0
- package/dist/canvas/chunks/classDiagram-v2-OCEON4UE-33x08xf2.js +1 -0
- package/dist/canvas/chunks/cose-bilkent-JH36ORCC-a428syda.js +1 -0
- package/dist/canvas/chunks/cynefin-VYW2F7L2-8v6jxfz8.js +1 -0
- package/dist/canvas/chunks/cynefinDiagram-MW4NZA55-nspsqebj.js +62 -0
- package/dist/canvas/chunks/dagre-VZM6K2ZE-8y6177fh.js +4 -0
- package/dist/canvas/chunks/diagram-7IWD3JNH-vym028wn.js +30 -0
- package/dist/canvas/chunks/diagram-B4RE2ZJO-jddqb8sy.js +3 -0
- package/dist/canvas/chunks/diagram-LBJQPF4R-bjwbpkrn.js +24 -0
- package/dist/canvas/chunks/diagram-Q27KOJAE-j6ph6hcx.js +24 -0
- package/dist/canvas/chunks/diagram-UB23O5K3-p09w8jej.js +41 -0
- package/dist/canvas/chunks/ebnfDiagram-BXEA7PRR-j975ycq5.js +1 -0
- package/dist/canvas/chunks/erDiagram-JOGREHBK-sxp6hjn8.js +85 -0
- package/dist/canvas/chunks/eventmodeling-45OFAUF4-xzfgn6xg.js +1 -0
- package/dist/canvas/chunks/flowDiagram-UKHOOZJN-2nsmkskb.js +1 -0
- package/dist/canvas/chunks/ganttDiagram-PKOTCBZU-4tv230y2.js +292 -0
- package/dist/canvas/chunks/gitGraph-TEB2WS4Q-macbhand.js +1 -0
- package/dist/canvas/chunks/gitGraphDiagram-DS77QQ5N-mqgmnw9g.js +106 -0
- package/dist/canvas/chunks/index-037z5dz2.js +232 -0
- package/dist/canvas/chunks/index-081n3har.js +207 -0
- package/dist/canvas/chunks/index-5n03dmb9.js +2 -0
- package/dist/canvas/chunks/index-5tv8v1hk.js +1 -0
- package/dist/canvas/chunks/index-60pgzdqe.js +157 -0
- package/dist/canvas/chunks/index-6ceya556.js +332 -0
- package/dist/canvas/chunks/index-8g1vb57n.js +2 -0
- package/dist/canvas/chunks/index-8rjes9r6.js +2 -0
- package/dist/canvas/chunks/index-9022d1n9.js +16 -0
- package/dist/canvas/chunks/index-9b02042t.js +2 -0
- package/dist/canvas/chunks/index-ap4q4vez.js +2 -0
- package/dist/canvas/chunks/index-dyp2nhd3.js +2 -0
- package/dist/canvas/chunks/index-frvta4tm.js +2 -0
- package/dist/canvas/chunks/index-gf4e0et4.js +2 -0
- package/dist/canvas/chunks/index-h9ycj8n2.js +2 -0
- package/dist/canvas/chunks/index-hj99nz1f.js +1 -0
- package/dist/canvas/chunks/index-mergmj97.js +2 -0
- package/dist/canvas/chunks/index-nwsya6dj.js +301 -0
- package/dist/canvas/chunks/index-nz8qbd1p.js +2 -0
- package/dist/canvas/chunks/index-qhfrazv3.js +2 -0
- package/dist/canvas/chunks/index-v119nznk.js +4 -0
- package/dist/canvas/chunks/index-vpt37m3d.js +89 -0
- package/dist/canvas/chunks/index-y9ma6azy.js +2 -0
- package/dist/canvas/chunks/index-zx0j3a2z.js +179 -0
- package/dist/canvas/chunks/info-DKCQHKI2-a0ykzs9z.js +1 -0
- package/dist/canvas/chunks/infoDiagram-6WML65LV-qv97qq6a.js +2 -0
- package/dist/canvas/chunks/ishikawaDiagram-WSZJBQD7-p9306gh0.js +70 -0
- package/dist/canvas/chunks/journeyDiagram-NVQOT4AX-sv67zats.js +139 -0
- package/dist/canvas/chunks/kanban-definition-27J2QSJJ-k2pfam6p.js +89 -0
- package/dist/canvas/chunks/katex-dmg8k4zm.js +257 -0
- package/dist/canvas/chunks/mermaid.core-83r0fdce.js +12 -0
- package/dist/canvas/chunks/mindmap-definition-FAOFIHXS-vg2newm1.js +96 -0
- package/dist/canvas/chunks/packet-7NZHBO7P-tqnabcdv.js +1 -0
- package/dist/canvas/chunks/pegDiagram-VL7TDLO6-k2h7zc5n.js +1 -0
- package/dist/canvas/chunks/pie-RZYD4A2V-wke6gyhe.js +1 -0
- package/dist/canvas/chunks/pieDiagram-7S7Q4E2Y-hg169p1v.js +39 -0
- package/dist/canvas/chunks/quadrantDiagram-CIZ2JOQS-bxtvsq0b.js +7 -0
- package/dist/canvas/chunks/radar-I7S5WNFK-w7ka0drw.js +1 -0
- package/dist/canvas/chunks/railroad-3IZDKUUU-y3vg318x.js +1 -0
- package/dist/canvas/chunks/railroad-abnf-AHOZXSZD-6hqvcz3c.js +1 -0
- package/dist/canvas/chunks/railroad-ebnf-EBAXGLYW-vcae260m.js +1 -0
- package/dist/canvas/chunks/railroad-peg-LSFZ7HO6-0dbyme23.js +1 -0
- package/dist/canvas/chunks/railroadDiagram-AXF67PYL-njyhcp4p.js +1 -0
- package/dist/canvas/chunks/requirementDiagram-LRYGKXZP-2z6v09gm.js +84 -0
- package/dist/canvas/chunks/sankeyDiagram-W5VNT64P-15mzam0e.js +40 -0
- package/dist/canvas/chunks/sequenceDiagram-SI44F4Z6-rbshyd2c.js +162 -0
- package/dist/canvas/chunks/sizeCapture-X5ZJPWSS-sg26xwts.js +1 -0
- package/dist/canvas/chunks/stateDiagram-OKZ733FA-6eahp98e.js +1 -0
- package/dist/canvas/chunks/stateDiagram-v2-UEYNNEHI-tty0ggn5.js +1 -0
- package/dist/canvas/chunks/swimlanes-SLNWSIFB-ze5db10t.js +1 -0
- package/dist/canvas/chunks/swimlanesDiagram-ULZ7WXOC-thze75gq.js +8 -0
- package/dist/canvas/chunks/timeline-definition-Z64GVDOM-vnp7jyy8.js +120 -0
- package/dist/canvas/chunks/treeView-QDETBFTQ-6ysffnm6.js +1 -0
- package/dist/canvas/chunks/treemap-6X3UGDF4-m3h9p066.js +1 -0
- package/dist/canvas/chunks/vennDiagram-T6HMQDX7-0qrnb7mj.js +34 -0
- package/dist/canvas/chunks/wardley-OPB4EBWU-dp37drwx.js +1 -0
- package/dist/canvas/chunks/wardleyDiagram-T6FBY63Y-8nxg8wqt.js +78 -0
- package/dist/canvas/chunks/xychartDiagram-ELKLHX3M-nj921e7s.js +7 -0
- package/dist/canvas/global.css +483 -230
- package/dist/canvas/index.js +158 -219
- package/dist/canvas/mcp-app.html +4301 -548
- package/dist/canvas/mermaid-entry.js +338 -338
- package/dist/canvas/surface-theme.css +6 -6
- package/dist/json-render/index.css +1 -1
- package/dist/json-render/index.js +49 -49
- package/dist/types/client/canvas/BarHint.d.ts +5 -3
- package/dist/types/client/canvas/BoardMoveDialog.d.ts +2 -0
- package/dist/types/client/canvas/CanvasNode.d.ts +0 -11
- package/dist/types/client/canvas/EdgeEditor.d.ts +19 -0
- package/dist/types/client/canvas/EdgeLayer.d.ts +1 -2
- package/dist/types/client/canvas/GroupNavigation.d.ts +2 -0
- package/dist/types/client/canvas/TextPrompt.d.ts +4 -0
- package/dist/types/client/canvas/auto-fit.d.ts +4 -5
- package/dist/types/client/mermaid-entry.d.ts +1 -2
- package/dist/types/client/mermaid-render.d.ts +1 -0
- package/dist/types/client/nodes/BoardNode.d.ts +1 -1
- package/dist/types/client/nodes/ExtAppFrame.d.ts +7 -90
- package/dist/types/client/nodes/McpAppNode.d.ts +1 -25
- package/dist/types/client/nodes/MermaidNode.d.ts +1 -8
- package/dist/types/client/nodes/PromptNode.d.ts +1 -0
- package/dist/types/client/nodes/ViewerFrame.d.ts +29 -0
- package/dist/types/client/nodes/ViewerHost.d.ts +6 -0
- package/dist/types/client/nodes/WorkCard.d.ts +7 -0
- package/dist/types/client/nodes/iframe-document-url.d.ts +3 -9
- package/dist/types/client/nodes/primitive-copy.d.ts +5 -0
- package/dist/types/client/nodes/use-ax-surface-bridge.d.ts +1 -0
- package/dist/types/client/nodes/use-iframe-content-height.d.ts +1 -1
- package/dist/types/client/nodes/use-surface-frame.d.ts +4 -6
- package/dist/types/client/nodes/viewer-runtime-state.d.ts +2 -1
- package/dist/types/client/state/canvas-store.d.ts +18 -1
- package/dist/types/client/state/human-store.d.ts +2 -0
- package/dist/types/client/state/intent-bridge.d.ts +5 -2
- package/dist/types/client/state/presentation.d.ts +17 -6
- package/dist/types/client/state/relation-store.d.ts +11 -0
- package/dist/types/client/types.d.ts +1 -1
- package/dist/types/json-render/catalog.d.ts +2 -2
- package/dist/types/json-render/server.d.ts +2 -1
- package/dist/types/server/agent-presence.d.ts +1 -0
- package/dist/types/server/ax-interaction.d.ts +1 -0
- package/dist/types/server/ax-state-manager.d.ts +10 -2
- package/dist/types/server/board-local.d.ts +4 -0
- package/dist/types/server/board-move.d.ts +38 -0
- package/dist/types/server/canvas-db.d.ts +12 -2
- package/dist/types/server/canvas-operations.d.ts +5 -6
- package/dist/types/server/canvas-provenance.d.ts +1 -1
- package/dist/types/server/canvas-serialization.d.ts +1 -0
- package/dist/types/server/canvas-state.d.ts +86 -20
- package/dist/types/server/card-relocation.d.ts +6 -0
- package/dist/types/server/context-reads.d.ts +3 -1
- package/dist/types/server/human-presence.d.ts +1 -1
- package/dist/types/server/index.d.ts +26 -10
- package/dist/types/server/intent-registry.d.ts +8 -4
- package/dist/types/server/knowledge-lifecycle.d.ts +4 -2
- package/dist/types/server/mutation-history.d.ts +7 -5
- package/dist/types/server/operations/ops/boards.d.ts +0 -1
- package/dist/types/server/operations/registry.d.ts +2 -0
- package/dist/types/server/tour-control.d.ts +13 -3
- package/dist/types/server/trace-manager.d.ts +1 -0
- package/dist/types/shared/ax-kinds.d.ts +6 -0
- package/dist/types/shared/ax-surface-protocol.d.ts +8 -9
- package/dist/types/shared/human-presence.d.ts +1 -0
- package/dist/types/shared/lifecycle-status.d.ts +2 -0
- package/dist/types/shared/tour.d.ts +8 -0
- package/docs/RELEASE.md +21 -14
- package/docs/agent-plugin.md +16 -2
- package/docs/amp-plugin.md +271 -0
- package/docs/cli.md +42 -3
- package/docs/design/Chrome.dc.html +32 -6
- package/docs/design/GuestName.dc.html +50 -0
- package/docs/design/PluginLogo.svg +7 -0
- package/docs/design/Types1.dc.html +3 -2
- package/docs/design/Types2.dc.html +1 -1
- package/docs/design/Types3.dc.html +1 -1
- package/docs/design/WorkCards.dc.html +39 -0
- package/docs/design/Zoom.dc.html +37 -60
- package/docs/design/canvas.json +17 -1
- package/docs/design/plugin-logo.png +0 -0
- package/docs/design.md +280 -12
- package/docs/evals/agents-md-sections.md +38 -0
- package/docs/http-api.md +179 -11
- package/docs/mcp.md +69 -9
- package/docs/node-types.md +109 -4
- package/docs/plans/plan-009-tech-debt-backlog.md +3 -3
- package/docs/plans/plan-019-post-0.9-roadmap.md +327 -31
- package/docs/plans/plan-020-wave-5-work-planning.md +553 -0
- package/docs/product-vision-2026-09.md +42 -17
- package/docs/sdk.md +18 -0
- package/package.json +7 -4
- package/plugins/pmx-canvas/assets/preview.png +0 -0
- package/plugins/pmx-canvas/com.github.copilot/extensions/pmx-canvas/extension.mjs +3 -1
- package/plugins/pmx-canvas/com.github.copilot/extensions/pmx-canvas/runtime.json +1 -1
- package/plugins/pmx-canvas/plugin.json +2 -2
- package/plugins/pmx-canvas/runtime.json +1 -1
- package/plugins/pmx-canvas/tools.json +688 -128
- package/skills/data-analysis/SKILL.md +13 -26
- package/skills/frontend-design/LICENSE.txt +177 -0
- package/skills/frontend-design/SKILL.md +3 -0
- package/skills/pmx-canvas/SKILL.md +232 -849
- package/skills/pmx-canvas/evals/evals.json +26 -3
- package/skills/pmx-canvas/references/full-reference.md +89 -24
- package/skills/pmx-canvas/references/html-primitives.md +7 -0
- package/skills/pmx-canvas/references/installing-pmx-canvas.md +6 -6
- package/skills/pmx-canvas/references/tours-and-recording.md +29 -2
- package/skills/pmx-canvas/references/workbench-workflows.md +900 -0
- package/skills/pmx-canvas-testing/SKILL.md +7 -5
- package/skills/published-consumer-e2e/SKILL.md +25 -8
- package/skills/published-consumer-e2e/scripts/run-published-consumer-e2e.sh +51 -77
- package/skills/web-artifacts-builder/LICENSE.txt +202 -0
- package/skills/web-artifacts-builder/SKILL.md +6 -0
- package/skills/web-artifacts-builder/scripts/init-artifact.sh +2 -2
- package/src/cli/commands/apps.ts +1 -0
- package/src/cli/commands/boards.ts +30 -0
- package/src/client/App.tsx +20 -4
- package/src/client/canvas/AttentionHistory.tsx +10 -2
- package/src/client/canvas/BarHint.tsx +6 -3
- package/src/client/canvas/BoardMoveDialog.tsx +225 -0
- package/src/client/canvas/CanvasNode.tsx +79 -49
- package/src/client/canvas/CanvasViewport.tsx +42 -14
- package/src/client/canvas/ContextMenu.tsx +97 -15
- package/src/client/canvas/EdgeEditor.tsx +149 -0
- package/src/client/canvas/EdgeLayer.tsx +441 -174
- package/src/client/canvas/ExpandedNodeOverlay.tsx +5 -2
- package/src/client/canvas/GroupNavigation.tsx +85 -0
- package/src/client/canvas/Presentation.tsx +53 -3
- package/src/client/canvas/RelationsPanel.tsx +9 -0
- package/src/client/canvas/SelectionBar.tsx +21 -0
- package/src/client/canvas/SessionPanel.tsx +35 -1
- package/src/client/canvas/TextPrompt.tsx +18 -1
- package/src/client/canvas/TopBar.tsx +54 -9
- package/src/client/canvas/auto-fit.ts +9 -11
- package/src/client/canvas/canvas-area.ts +2 -2
- package/src/client/canvas/use-focus-trap.ts +6 -1
- package/src/client/mermaid-entry.ts +6 -20
- package/src/client/mermaid-render.ts +39 -0
- package/src/client/nodes/AxStepControls.tsx +45 -69
- package/src/client/nodes/BoardNode.tsx +65 -9
- package/src/client/nodes/ContextNode.tsx +88 -396
- package/src/client/nodes/ExtAppFrame.tsx +302 -1465
- package/src/client/nodes/FileNode.tsx +92 -81
- package/src/client/nodes/HtmlNode.tsx +8 -36
- package/src/client/nodes/LedgerNode.tsx +31 -17
- package/src/client/nodes/MarkdownNode.tsx +14 -24
- package/src/client/nodes/McpAppNode.tsx +48 -154
- package/src/client/nodes/MermaidNode.tsx +80 -69
- package/src/client/nodes/PromptNode.tsx +44 -17
- package/src/client/nodes/ResponseNode.tsx +8 -6
- package/src/client/nodes/StatusNode.tsx +34 -7
- package/src/client/nodes/StatusSummary.tsx +16 -3
- package/src/client/nodes/TraceNode.tsx +8 -8
- package/src/client/nodes/ViewerFrame.tsx +273 -0
- package/src/client/nodes/ViewerHost.tsx +41 -0
- package/src/client/nodes/WebpageNode.tsx +22 -24
- package/src/client/nodes/WorkCard.tsx +175 -0
- package/src/client/nodes/iframe-document-url.ts +20 -27
- package/src/client/nodes/primitive-copy.ts +97 -0
- package/src/client/nodes/use-ax-surface-bridge.ts +18 -14
- package/src/client/nodes/use-iframe-content-height.ts +34 -10
- package/src/client/nodes/use-surface-frame.ts +22 -11
- package/src/client/nodes/viewer-runtime-state.ts +41 -35
- package/src/client/state/attention-bridge.ts +5 -0
- package/src/client/state/attention-store.ts +1 -0
- package/src/client/state/canvas-store.ts +202 -26
- package/src/client/state/human-store.ts +22 -2
- package/src/client/state/intent-bridge.ts +20 -5
- package/src/client/state/presentation.ts +135 -15
- package/src/client/state/relation-store.ts +127 -1
- package/src/client/state/sse-bridge.ts +18 -19
- package/src/client/theme/global.css +483 -230
- package/src/client/theme/surface-theme.css +6 -6
- package/src/client/types.ts +1 -0
- package/src/json-render/charts/tufte-components.tsx +44 -2
- package/src/json-render/renderer/index.css +62 -2
- package/src/json-render/renderer/index.tsx +31 -7
- package/src/json-render/server.ts +3 -2
- package/src/mcp/server.ts +13 -3
- package/src/server/agent-presence.ts +43 -23
- package/src/server/ax-flow-loop.ts +6 -0
- package/src/server/ax-gate-ttl.ts +8 -1
- package/src/server/ax-interaction.ts +16 -10
- package/src/server/ax-state-manager.ts +17 -4
- package/src/server/ax-wait.ts +20 -6
- package/src/server/board-export.ts +54 -30
- package/src/server/board-local.ts +20 -0
- package/src/server/board-move.ts +297 -0
- package/src/server/canvas-db.ts +249 -158
- package/src/server/canvas-geometry.ts +1 -0
- package/src/server/canvas-operations.ts +139 -109
- package/src/server/canvas-schema.ts +21 -0
- package/src/server/canvas-serialization.ts +2 -0
- package/src/server/canvas-state.ts +797 -159
- package/src/server/card-relocation.ts +53 -0
- package/src/server/code-graph.ts +4 -3
- package/src/server/context-reads.ts +83 -55
- package/src/server/demo-state.json +140 -114
- package/src/server/file-watcher.ts +30 -10
- package/src/server/html-primitives.ts +3 -9
- package/src/server/html-surface.ts +8 -0
- package/src/server/human-presence.ts +18 -5
- package/src/server/index.ts +54 -24
- package/src/server/intent-registry.ts +43 -5
- package/src/server/knowledge-lifecycle.ts +32 -9
- package/src/server/lifecycle-status.ts +29 -1
- package/src/server/mcp-app-runtime.ts +26 -7
- package/src/server/mutation-history.ts +37 -8
- package/src/server/operations/composites.ts +6 -3
- package/src/server/operations/mcp-contracts.ts +32 -2
- package/src/server/operations/mcp.ts +36 -9
- package/src/server/operations/ops/annotation.ts +22 -1
- package/src/server/operations/ops/ax-await.ts +1 -0
- package/src/server/operations/ops/ax-timeline.ts +28 -2
- package/src/server/operations/ops/batch.ts +25 -11
- package/src/server/operations/ops/boards.ts +45 -6
- package/src/server/operations/ops/nodes.ts +70 -0
- package/src/server/operations/ops/query.ts +32 -3
- package/src/server/operations/ops/snapshots.ts +1 -0
- package/src/server/operations/ops/viewport.ts +11 -9
- package/src/server/operations/registry.ts +49 -4
- package/src/server/server.ts +69 -75
- package/src/server/tour-control.ts +97 -12
- package/src/server/trace-manager.ts +4 -0
- package/src/server/web-artifacts/scripts/init-artifact.sh +2 -2
- package/src/shared/agent-context.ts +7 -1
- package/src/shared/auto-arrange.ts +5 -4
- package/src/shared/ax-kinds.ts +13 -0
- package/src/shared/ax-surface-protocol.ts +20 -9
- package/src/shared/content-height-reporter.ts +4 -3
- package/src/shared/human-presence.ts +1 -0
- package/src/shared/lifecycle-status.ts +2 -0
- package/src/shared/tour.ts +8 -0
package/docs/design.md
CHANGED
|
@@ -21,6 +21,33 @@ contract and the schedule.
|
|
|
21
21
|
3. Apply the [Principles](#principles), above all the fixed meaning colours.
|
|
22
22
|
4. Meet the [Definition of done](#definition-of-done-for-any-design-work) before calling it done.
|
|
23
23
|
|
|
24
|
+
## Plugin logo
|
|
25
|
+
|
|
26
|
+
The plugin uses the existing Focus Field brand mark, matching the canvas favicon:
|
|
27
|
+
blue (`#4BBCFF`) concentric rounded squares on Harbor navy (`#081524`). The source is
|
|
28
|
+
[`PluginLogo.svg`](design/PluginLogo.svg), exported at 512 × 512 to
|
|
29
|
+
[`plugin-logo.png`](design/plugin-logo.png). The plugin build copies that PNG to the
|
|
30
|
+
marketplace-required `assets/preview.png` path referenced by `extensions.com.github.copilot.logo`.
|
|
31
|
+
README screenshots remain unchanged. This packages existing branding; it does not change canvas
|
|
32
|
+
styling or establish which image the Copilot plugin-list row displays.
|
|
33
|
+
|
|
34
|
+
To regenerate the PNG from the repository root with the existing Playwright installation:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
bun -e '
|
|
38
|
+
import { chromium } from "@playwright/test";
|
|
39
|
+
const browser = await chromium.launch({ headless: false });
|
|
40
|
+
try {
|
|
41
|
+
const page = await browser.newPage({ viewport: { width: 512, height: 512 }, deviceScaleFactor: 1 });
|
|
42
|
+
await page.setContent(`<body style="margin:0">${await Bun.file("docs/design/PluginLogo.svg").text()}</body>`);
|
|
43
|
+
await page.locator("svg").screenshot({ path: "docs/design/plugin-logo.png", omitBackground: true });
|
|
44
|
+
} finally {
|
|
45
|
+
await browser.close();
|
|
46
|
+
}
|
|
47
|
+
'
|
|
48
|
+
bun run build:plugin
|
|
49
|
+
```
|
|
50
|
+
|
|
24
51
|
## Token system
|
|
25
52
|
|
|
26
53
|
Drawn on [`TokenSystem.dc.html`](design/TokenSystem.dc.html); per-theme meaning colours on
|
|
@@ -87,8 +114,8 @@ Components reference tokens only. Raw colour values live only in the theme files
|
|
|
87
114
|
- Tints are derived — `color-mix(in srgb, var(--c-pin) 12%, transparent)` — so the 22 alpha
|
|
88
115
|
copies, `--c-warn-alt` and `--c-glow-accent` go.
|
|
89
116
|
- `--c-thinking` becomes `--c-agent`.
|
|
90
|
-
- **Kinds carry no colour.** Type icons use `--c-muted`; the glyph tells the kind
|
|
91
|
-
|
|
117
|
+
- **Kinds carry no colour.** Type icons use `--c-muted`; the glyph tells the kind.
|
|
118
|
+
Minimap rects and group-chip kind dots are neutral, and
|
|
92
119
|
only meaning colours mark them (pinned, agent at work). `KIND_COLOR`, `--kind-accent` and
|
|
93
120
|
`--c-purple` go. Nine kind hues cannot all stay clear of ten meaning colours in nine themes,
|
|
94
121
|
and every hue a kind borrows is one a meaning loses.
|
|
@@ -121,6 +148,7 @@ the same change.
|
|
|
121
148
|
| [`Themes.dc.html`](design/Themes.dc.html) | Meaning colours across all nine themes, proposed names | 0 |
|
|
122
149
|
| [`Chrome.dc.html`](design/Chrome.dc.html) | Rail at 690 px, node header (expand and context pin always visible, the rest under ⋯), bounded reference footer, section headings, floating chrome | 0 |
|
|
123
150
|
| [`EmptyState.dc.html`](design/EmptyState.dc.html) | Empty board: Drop files here, Paste a link, Start a note with collaboration guidance, then a separate agent-first path | 0 |
|
|
151
|
+
| [`GuestName.dc.html`](design/GuestName.dc.html) | Optional Your name button, existing text dialog and named collaborator cursor. Self-reported names only; sharing stays in Amp. | 5, Amp collaboration |
|
|
124
152
|
| [`Context.dc.html`](design/Context.dc.html) | Nodes in context: every state, the count chip, the command bar | 0–1 |
|
|
125
153
|
| [`NearPin.dc.html`](design/NearPin.dc.html) | Near a pin: the dotted “near” chip on a pinned node's unpinned neighbours, tethers on hover, the moment of change, combinations, 600 px; ships with the brief carrying neighbours (title + summary, reason “near <pin>”) | 1 |
|
|
126
154
|
| [`ContextChip.dc.html`](design/ContextChip.dc.html), [`ContextChip600.dc.html`](design/ContextChip600.dc.html) | The one context chip (decided with the maintainer 2026-10-07: placement, near muted, quiet empty state, agent-pin dots, “N in context” at 600 px): top bar, right, replacing the floating ContextPinBar and the ContextBudget meter; at rest for cards, near, boards, agent-only pins, nothing pinned; opened into Cards (full, × unpin, clear all), Near (derived, title + summary, no ×, Pin to promote) and Boards (read state, × unpin). **A pinned board travels as a map** (decided 2026-10-07): folder, README summary, each pinned card's title + summary, links and backlinks; the agent pulls a card or board in full itself, so the chip shows no full / summary / not-sent state. **A cost, not a budget** (decided with the maintainer 2026-10-08): the chip shows what the brief costs as ≈ tokens, with no meter, share or clipped state; when the host reports its agent's token usage the panel names that count too (“Copilot’s whole context holds 42.8k tokens”). The brief's size limit stays internal as a page size. At rest it is the summary, always visible and right-aligned in the top bar at every width; the details open only on click. At ≤ 760 px the summary is “N in context” with no token text, and the bar gives way in this order: session id and counts; Export, Present, zoom and fit fold into ⋯; agent chip to its avatar, Start agent session to its icon; the board name truncates — the dot, board pin, summary and ⋯ never collapse. Harbor and Daylight, 600 px. Supersedes the chip wording on Context, NearPin and BoardPins | 1 (slices 4b, 5b) |
|
|
@@ -141,7 +169,7 @@ the same change.
|
|
|
141
169
|
| [`Flows.dc.html`](design/Flows.dc.html) | Data lineage with staleness, what a finding rests on, opening a group | 3, 5 |
|
|
142
170
|
| [`Uses.dc.html`](design/Uses.dc.html) | One relation layer for research, dependencies, decisions and agent flows | 3 |
|
|
143
171
|
| [`Types1.dc.html`](design/Types1.dc.html)–[`Types3.dc.html`](design/Types3.dc.html) | Every node type, today vs proposed | 0, 4 |
|
|
144
|
-
| [`Zoom.dc.html`](design/Zoom.dc.html) |
|
|
172
|
+
| [`Zoom.dc.html`](design/Zoom.dc.html) | Native spatial scaling at every zoom, maintainer override 2026-10-25 | 4 |
|
|
145
173
|
| [`Pane600.dc.html`](design/Pane600.dc.html) | Home and a board at the narrow end, 600 px | all |
|
|
146
174
|
| [`Vision.dc.html`](design/Vision.dc.html) | How each design area maps to the vision, and the open decisions | — |
|
|
147
175
|
|
|
@@ -154,6 +182,17 @@ With the beta on, the existing Start agent session action sits below that guidan
|
|
|
154
182
|
The existing panel, type and colour tokens stay; actions form one readable column, and
|
|
155
183
|
short windows scroll the guide rather than cutting off either starting path.
|
|
156
184
|
|
|
185
|
+
**Guest name entry (2026-10-31).** A neutral 28px initial button at the end of the top bar
|
|
186
|
+
opens the existing text prompt, with its existing 440px maximum width, padding and actions.
|
|
187
|
+
The caption explains that a name is self-reported and grants no access. Entry is optional;
|
|
188
|
+
Cancel and Escape keep the current name. Save trims the name to the existing 40-character
|
|
189
|
+
presence limit and remembers it in this browser, without changing the tab's presence ID.
|
|
190
|
+
The existing cursor tags identify collaborators. No people panel or sharing controls are
|
|
191
|
+
added. The button remains visible when the bar folds at narrow widths, including Home;
|
|
192
|
+
MCP-hosted workbenches and agent-view tabs do not report human presence or offer this control.
|
|
193
|
+
The drawing refines the minimal dialog option, retaining actual text-prompt geometry rather
|
|
194
|
+
than the generated concept's smaller panel. Amp controls access to the port, not one board.
|
|
195
|
+
|
|
157
196
|
**Canvas mouse gestures (owner decision, 2026-10-19).** Right-click on empty canvas
|
|
158
197
|
opens the existing creation menu on release. Holding the right button and moving more
|
|
159
198
|
than 5 screen pixels pans; releasing after a drag never opens a menu, even when the
|
|
@@ -320,8 +359,9 @@ Standalone viewers and HTML/artifact viewers retain their existing load path; no
|
|
|
320
359
|
working set (README and pinned cards in full, on every board); there is no separate card
|
|
321
360
|
pin, which would only send the portal's summary while this board is open. Every other
|
|
322
361
|
card keeps its card pin.
|
|
323
|
-
- **Relations are the edge layer, not node types.** Design work adds no node type
|
|
324
|
-
|
|
362
|
+
- **Relations are the edge layer, not node types.** Design work adds no node type.
|
|
363
|
+
The general `ask` node is deferred by the Wave 5 decision below; ordinary planning questions
|
|
364
|
+
and alternatives use existing cards.
|
|
325
365
|
- **Any size, from a side pane to a full window.** The workbench lives in narrow agent-host
|
|
326
366
|
panes, the resizable side browser in the Claude desktop app, and full browser windows. Every
|
|
327
367
|
drawing shows the narrow end (600 px) and a full window before it is built, and the build
|
|
@@ -362,23 +402,79 @@ vision's target designs, not screenshots of the shipped workbench. The Wave-3
|
|
|
362
402
|
foundation does not implement every interaction pictured in them. It provides
|
|
363
403
|
per-board vocabularies, semantic inks, separate endpoint slots, authored reasons,
|
|
364
404
|
evidence/source/use queries, downstream review qualification and view-only
|
|
365
|
-
highlights.
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
405
|
+
highlights. Wave 5 adds parallel-pair counts, dependency cycle/affected counts,
|
|
406
|
+
the compact inline edge editor and Show lineage / Show on canvas. A cycle count
|
|
407
|
+
means cyclic dependency clusters, not every illustrated route through a graph.
|
|
408
|
+
Source warnings reuse lifecycle qualification and appear as amber glyphs and words
|
|
409
|
+
beside the semantic label, rather than replacing the relation ink with amber.
|
|
410
|
+
Group drill-in adds breadcrumbs and outside endpoint stubs on the same board.
|
|
411
|
+
The boundary is neutral, reserving blue for context pins; hidden viewers stay mounted
|
|
412
|
+
so navigation does not discard drafts. These are scoped deviations from the older
|
|
413
|
+
drawings' blue boundary and amber relation strokes, not new relation meanings.
|
|
370
414
|
The sketches' suggested-link Accept/Dismiss treatment was superseded by the
|
|
371
415
|
2026-10-10 direct-edit decision recorded above; it is not a pending acceptance
|
|
372
416
|
workflow. A demo of existing features must not be used to claim full sketch parity.
|
|
373
417
|
|
|
418
|
+
**Wave 5 decision, 2026-10-27.** The owner reaffirmed Uses' Agent flow, Dependencies and
|
|
419
|
+
Decision drawings; Flows remains the reference for group navigation. Humans and agents author ordinary cards and
|
|
420
|
+
relations, showing work deliberately rather than automatically creating a card for every task.
|
|
421
|
+
Illustrated loops describe a plan; they do not execute it. Planning works without Sessions.
|
|
422
|
+
An explicitly linked session-task card presents the existing record's live state; starting a
|
|
423
|
+
session does not convert the plan. Native-agent approvals stay in the host, PMX session controls
|
|
424
|
+
remain separate, and explicit/automatic ghost feedback is unchanged. The general `ask` card
|
|
425
|
+
is deferred.
|
|
426
|
+
|
|
427
|
+
Agents also use the existing pen, text and whole-mark eraser layer for questions and
|
|
428
|
+
emphasis. This adds no new visual controls or mark style. Humans can answer in their
|
|
429
|
+
external agent host's composer; PMX's composer and Sessions are optional.
|
|
430
|
+
|
|
431
|
+
**Work-card authoring, selected 2026-10-27:** [WorkCards](design/WorkCards.dc.html)
|
|
432
|
+
adds option A's in-card editor to the approved Uses work steps. Title, work state,
|
|
433
|
+
detail and optional progress are authored node data. Edit grows the card locally;
|
|
434
|
+
Save/Cancel do not persist that temporary geometry. Drafts, refused saves and pending
|
|
435
|
+
saves survive opening and closing focus mode. Generic phase/tool status cards
|
|
436
|
+
remain unchanged.
|
|
437
|
+
|
|
438
|
+
**Read-only live cards, selected 2026-10-27:** the same WorkCards artboard adds a
|
|
439
|
+
**Show on board** action to task rows, becoming **Show card** when presented. A live
|
|
440
|
+
card shows task state, detail and attribution with a **Read-only** caption, no Edit,
|
|
441
|
+
progress or approval controls. Missing references show **Task unavailable**. Ordinary
|
|
442
|
+
plans are not converted, ending a session preserves cards, and deleting a card does not cancel work.
|
|
443
|
+
Existing selective board copies detach the live reference and task attribution, producing
|
|
444
|
+
an independent authored card. They do not copy tasks or create cross-board live links.
|
|
445
|
+
|
|
446
|
+
**Move to new board** is the agreed label for multi-selection and the group's **⋯** menu:
|
|
447
|
+
move the cards, preserve identity/history/relations and leave a portal. No reverse move or
|
|
448
|
+
inline-board operation in this wave. Opening a group within the current board is navigation
|
|
449
|
+
only, with breadcrumbs and outside endpoints, not a new board. These decisions supersede the
|
|
450
|
+
earlier automatic work-card and make/inline-board wording. Implementation and technical
|
|
451
|
+
checkpoints live in [plan 020](plans/plan-020-wave-5-work-planning.md).
|
|
452
|
+
[WorkCards](design/WorkCards.dc.html) now draws name, preview, refusal and interrupted-reply
|
|
453
|
+
states using the existing modal shell. Preview names pins, README, live owners and the
|
|
454
|
+
Undo/snapshot boundary. Save or cancel local card drafts before moving. A late reply never
|
|
455
|
+
overrides newer navigation; a retry uses the original request ID.
|
|
456
|
+
|
|
457
|
+
**Amp plugin added to Wave 5, 2026-10-27.** The owner added the native Canvas plugin
|
|
458
|
+
described in [this discussion](https://ampcode.com/threads/T-01a17d25-69d9-7693-986a-f3991de6a346).
|
|
459
|
+
It hosts Canvas through Amp's Portal and connects context, steering, creation, sharing and
|
|
460
|
+
collaboration to Amp threads. Jev optionally ranks context, chooses output representation and
|
|
461
|
+
prioritizes review; the integration works without it. Amp retains execution, credentials and
|
|
462
|
+
native permissions. The owner simplified sharing to **use Amp's existing sharing; let the guest
|
|
463
|
+
enter their name**. Add identification through existing canvas presence, not a separate guest
|
|
464
|
+
permission system, share server or custom expiry/revocation. A name is self-reported and grants
|
|
465
|
+
no additional access. Participation follows Amp's existing access model; do not promise anonymous
|
|
466
|
+
or board-only access that it does not provide. General hosted accounts and organization roles
|
|
467
|
+
remain later work. Draw the missing name-entry and identified-guest states here before UI
|
|
468
|
+
implementation; packaging, reliability gates and acceptance are in plan 020, Slice 4.
|
|
469
|
+
|
|
374
470
|
| Wave | Vision | Function (build) | Design (proposal boards) | Done when |
|
|
375
471
|
|---|---|---|---|---|
|
|
376
472
|
| **0. Foundation**: shipped in 0.8.0; remaining foundation gaps ship with plan 019 step 3 | Moves 5, 9, 10 | Bundle Plex; controls inherit the font; type/radius/shadow tokens; meaning tokens per theme; theme renames (`dark` → Harbor, `light` → Daylight, neutral; no aliases); pin style that survives selection and attention; violet header bar replaces amber halos and focus fields | Today / Proposed, Tokens, Themes, Rail and node header, Nodes in context | No control renders in a fallback font; token test passes for all nine themes; reference cases pass at 600, 1024 and 1920 px; demo board regenerated |
|
|
377
473
|
| **1. Context made visible** — its curation evaluation moved to the end of the plan (2026-10-19) | Part 1 bet, moves 0a, 2, 7 | Surface `context_reads` (already recorded since 0.7.0: who read, which nodes were delivered) per node and per board as read / not read / changed since read, using revisions; who pinned; activity lens and session receipt from presence activity and revisions; board pins (`board_pins`, tiered brief, `canvas_board pin/unpin`) and Home's pinned-boards section | What the agent did with context, Nodes in context, Board pins, Home (Folders) | From the board alone, a person can answer "did the agent read what I pinned, and is its copy current?" The evaluation in `docs/evals/` reads the same data |
|
|
378
474
|
| **2. Connected memory views** — implemented, verification gates apply | Moves 0, 14 | One board/card projection for Home, links/backlinks, brief discovery and `canvas://graph{?focus,depth}`; saved wiki ID bindings, direct cross-board card edges, previous-board chains, persisted Map positions | Home Map, Home Graph (deviations below) | Map and Graph are generated from the library; orphans visible; works at 600 px and in a full window |
|
|
379
475
|
| **3. Relations layer** | Moves 0, 1, 13 | Edge `reason` and an open `kind` with a per-board vocabulary; relations carried in the brief's text form; "derived from" with staleness from provenance and recipes; relation queries for the inspector | Relations, Lineage, One relation layer | Hovering a node explains each link; a changed source turns downstream nodes amber; the agent's brief includes relations |
|
|
380
|
-
| **4. Frame host and viewers** | Moves 5, 9 | One frame host passing the full theme tokens; json-render defaults to the canvas theme with an opt-out for design experiments;
|
|
381
|
-
| **5.
|
|
476
|
+
| **4. Frame host and viewers** | Moves 5, 9 | One frame host passing the full theme tokens; json-render defaults to the canvas theme with an opt-out for design experiments; native proportional canvas at every zoom | Node types 1–3, Zoom | Viewers use the canvas palette and fill their authored space; approaching a viewer mounts it automatically and retains its state when panning away; no alternate grid or lifetime preview cap |
|
|
477
|
+
| **5. Work planning, group navigation and Amp integration** | Moves 3, 0; native Amp plugin | Deliberate work cards and relations; optional live task views; Move to new board with a portal; group drill-in; Amp Portal/context/steering plugin with optional Jev; native Amp sharing plus guest names; no reverse move | Uses (agent flow, dependencies, decisions), Flows (open a group), Relations; move/plugin states to be drawn | Human and agent can plan without Sessions; loops stay inert; drill-in keeps outside stubs; moves preserve identity/audit; native Amp sharing and guest identification pass; shared shell/tokens and plan 020 checks pass |
|
|
382
478
|
| **Later: hosted version** | Part 4 (moved from Part 3, 2026-10-19) | Read-only link, comments, second writer, accounts and roles; org → team → personal scopes with configurable categories and per-user pins; built once for the ChatGPT Sites and later Cloudflare editions | HomeTeam is the earlier two-root look ahead; updated scope/category drawings are required before building, retaining explicit publication and locked cards for unreadable boards | Exports and shared views inherit the tokens; a viewer sees the same meaning colours; nothing personal reaches a wider audience without explicit publication |
|
|
383
479
|
|
|
384
480
|
**Folders and portals (decided 2026-10-06).** Home uses folders as the visible hierarchy (where a
|
|
@@ -486,6 +582,13 @@ scroll references instead of moving the canvas. No graph data is collapsed or re
|
|
|
486
582
|
Reading expanded Markdown, closing it or following a link without input preserves
|
|
487
583
|
the exact source and revision. Pending real edits still finish before navigation.
|
|
488
584
|
|
|
585
|
+
**Expanded-editor refusals (2026-10-31).** The existing attention toast, history
|
|
586
|
+
panel and Updates tab render inside the expanded dialog so they remain in its
|
|
587
|
+
keyboard focus loop, above its content and below blocking dialogs. Their placement,
|
|
588
|
+
dimensions and palette stay unchanged. Opening history dismisses the toast, and
|
|
589
|
+
queued notices stay in history without covering the open panel. Closing history
|
|
590
|
+
returns focus to Updates; reopening it never closes the editor or discards its draft.
|
|
591
|
+
|
|
489
592
|
**Owner-guide fixes (2026-10-20).** The same reference list follows cards into focus
|
|
490
593
|
mode, above the provenance strip, capped at 132 screen pixels there. It retains every
|
|
491
594
|
target without displacing the document. A refused Markdown save keeps the reader and
|
|
@@ -630,6 +733,171 @@ curation evaluation after its remaining features. Local categories and lifecycle
|
|
|
630
733
|
without a model; Jev-style classification is optional longer-term assistance, not a dependency
|
|
631
734
|
of Wave 3 or the org/team/personal structure.
|
|
632
735
|
|
|
736
|
+
## 0.11 implementation notes
|
|
737
|
+
|
|
738
|
+
Chrome §9–10 and Types1–3 drive the section-heading, header, typography and viewer
|
|
739
|
+
pass. Fit and focus reserve a 44 px screen-space top lane. JSON viewers inherit the
|
|
740
|
+
named canvas palette; only duplicate root titles disappear. Mermaid renders inline.
|
|
741
|
+
File-header metadata may clip within its own text container, but Reload and AX
|
|
742
|
+
evidence actions and their hover/focus hints stay outside that clip (Types1).
|
|
743
|
+
The maintainer's 2026-10-25 decision supersedes the earlier reading-flow footer:
|
|
744
|
+
**Set as README** lives only in the card's ⋯ menu, becoming **Remove as README**
|
|
745
|
+
for the current README. The agent normally assigns it; this menu is the human override.
|
|
746
|
+
The designated card keeps a quiet, always-visible **README** word in its header,
|
|
747
|
+
including heading-display Markdown. It uses neutral metadata ink, not pin blue or
|
|
748
|
+
selection styling; the title yields before this identifier truncates.
|
|
749
|
+
Ordinary Markdown keeps its visible **Edit** action; heading display has no footer.
|
|
750
|
+
Chrome and Types1 reflect this decision. The menu takes keyboard focus, supports
|
|
751
|
+
arrows and Tab, and restores the opener on activation or Escape.
|
|
752
|
+
**Present** explains saved tours versus group-derived stops on hover and keyboard
|
|
753
|
+
focus, with an accessible description. The narrow ⋯ menu shows the same explanation
|
|
754
|
+
in flow below Present rather than clipping a floating tooltip. Chrome records the
|
|
755
|
+
owner's exact copy; no tour behavior changes. Its saved-tour instruction says
|
|
756
|
+
**ask your agent to define the stops**, not that a visual human tour editor exists.
|
|
757
|
+
During presentation, **Back** and **Next** sit beside **Exit presentation** at
|
|
758
|
+
the top-right, following the existing shared server cursor. The owner's final
|
|
759
|
+
placement decision puts instructions only in each button's hover/focus tooltip:
|
|
760
|
+
Previous stop (← / ↑), Next stop (→ / ↓ / Space), Exit presentation (Esc).
|
|
761
|
+
There is no lower-left instruction panel. Unavailable end buttons remain focusable
|
|
762
|
+
for their descriptions. Node/rectangle fitting reserves the controls' measured
|
|
763
|
+
height; explicit camera targets and deterministic recordings remain unchanged.
|
|
764
|
+
HTML primitives put **Copy JSON** in the card's ⋯ menu, not their inner header;
|
|
765
|
+
**Copy prompt** is removed. JSON comes from the current mounted document, including
|
|
766
|
+
unsaved interactive edits, through the nonce-bound sandbox bridge. Unloaded or
|
|
767
|
+
replaced documents and denied clipboard access report failure, not stale data or
|
|
768
|
+
success. Raw HTML and the custom presentation primitive have no JSON-export menu
|
|
769
|
+
action. Primitive-specific Copy diff, Copy SVG and similar controls stay in place.
|
|
770
|
+
The maintainer's 2026-10-25 correction rejects the experimental CSS zoom, content
|
|
771
|
+
enlargement and alternate overview. The original world matrix scales cards,
|
|
772
|
+
embedded contents, groups and connections proportionally at every zoom. Only title
|
|
773
|
+
text grows, up to 1.2× inside a fixed 22 px header line. Header controls, padding and
|
|
774
|
+
body space stay fixed in world pixels; enlarging the whole header would resize the
|
|
775
|
+
iframe viewport and reflow charts while zooming. Card bodies never counter-scale.
|
|
776
|
+
All cards share the same stacking and input boundary. A separate
|
|
777
|
+
ext-app portal was rejected in review because it covered higher cards, bypassed
|
|
778
|
+
pan gestures, and disappeared during presentation. The common world also owns
|
|
779
|
+
clipping when a dock resizes the canvas. Headed Linux WebKit reproduced CSS zoom
|
|
780
|
+
shrinking the iframe's internal layout and retaining stale dimensions through
|
|
781
|
+
zoom transitions. Restoring the matrix keeps inner widths stable in the same probe.
|
|
782
|
+
Native WKWebView compositor health remains unverified, not established by that result.
|
|
783
|
+
Automatic previews mount on first approach at any scale, then retain their
|
|
784
|
+
documents to preserve arbitrary app state. The rejected lifetime cap starved later
|
|
785
|
+
board regions. Memory now grows with visited viewers. Visible viewers start loading
|
|
786
|
+
automatically without a shared bootstrap queue or per-card clicks. A slow document
|
|
787
|
+
does not hold another card's loading slot.
|
|
788
|
+
Each loading replacement temporarily coexists with its painted document.
|
|
789
|
+
|
|
790
|
+
The demo gives ordinary standalone charts the full authored card height instead
|
|
791
|
+
of imposing a smaller plot-height cap. Compact chart types keep compact cards:
|
|
792
|
+
the 36 px sparkline sits in a 120 px card, four dot-plot rows in 240 px, three bullet
|
|
793
|
+
rows in 260 px, and the slopegraph in 300 px. These are demo authoring choices,
|
|
794
|
+
not enforced sizes on user cards. Explicit chart `height` still caps content,
|
|
795
|
+
independently of `nodeHeight`. Dashboard and form stacks explicitly use stretch
|
|
796
|
+
alignment; the catalog's start-aligned default is unchanged, as are compact action
|
|
797
|
+
buttons. Work-item controls must fit their authored cards without accidental
|
|
798
|
+
overflow or truncated status. Enlarging the demo to 440×300 did not meet that
|
|
799
|
+
requirement and is not acceptance evidence. The card body now scrolls only its
|
|
800
|
+
content when needed; step controls and Edit share one fixed footer row. The full
|
|
801
|
+
status word takes priority over the title. Steering input and send button wrap
|
|
802
|
+
together. Expanded documents keep their sticky footer. The demo returns to a
|
|
803
|
+
240 px height, with 360 and 440 px widths exercised in both Chromium and WebKit.
|
|
804
|
+
Bodies still shrink proportionally.
|
|
805
|
+
|
|
806
|
+
Static exports use the same embedded chart layout and named palettes, retain
|
|
807
|
+
heading display, and match the live 37 px card header. Fonts and shared palette
|
|
808
|
+
CSS are embedded for offline use. Saved positions, sizes and specs are unchanged;
|
|
809
|
+
live work controls are intentionally absent. Export is a separate acceptance
|
|
810
|
+
surface, not established by live canvas checks. Close slopegraph labels separate
|
|
811
|
+
without moving data endpoints; short same-ink leaders retain their association
|
|
812
|
+
(Types3). An explicitly overcrowded chart still requires adequate authored height.
|
|
813
|
+
|
|
814
|
+
Relation labels keep their curve midpoint when clear. Otherwise the pill and its
|
|
815
|
+
hit area move together to nearby open space, avoiding cards, group headers,
|
|
816
|
+
connection handles and earlier labels. A dashed leader in the relation's ink
|
|
817
|
+
ties it back to the curve. Card positions, curve routing and stacking do not
|
|
818
|
+
change. Font measurements determine pill width. Dense boards can still require
|
|
819
|
+
panning to a displaced label; labels remain hidden below the existing 35% floor.
|
|
820
|
+
|
|
821
|
+
`ViewerHost` owns preview admission, without a second positioning or recovery path.
|
|
822
|
+
`RefreshingViewerFrame` owns document loading, the painted replacement handoff and
|
|
823
|
+
Retry. HTML readiness and the ext-app protocol use that host; JSON additionally
|
|
824
|
+
restores its viewer-local state before promotion. The ext-app adapter no longer
|
|
825
|
+
has a separate paint/recovery ladder. Document preparation failures do not fall
|
|
826
|
+
back to another transport that the embedding probe already rejected.
|
|
827
|
+
Ext-app protocol bootstrap runs once after initialization, or after the loaded
|
|
828
|
+
document's bounded notification-only bootstrap interval. The host waits for
|
|
829
|
+
input/result delivery and paint before declaring it ready; bootstrap errors use
|
|
830
|
+
the same Retry as other loading failures.
|
|
831
|
+
Webpages show cached text until an explicit live-preview request; Mermaid
|
|
832
|
+
and native board thumbnails render inline. Mermaid's inline
|
|
833
|
+
and standalone/export renderers share their palette, serialization and sanitizer.
|
|
834
|
+
Inline rendering uses Mermaid's strict security mode and DOMPurify, including
|
|
835
|
+
sanitized `foreignObject` labels, instead of the old diagram iframe sandbox.
|
|
836
|
+
Mermaid is the exception to the static-import rule: the SPA loads it on the first
|
|
837
|
+
diagram, using hashed chunks from the same server. A six-Markdown-card cold-boot
|
|
838
|
+
probe requested only the entry and its small shared chunk, not Mermaid's 3.46 MB.
|
|
839
|
+
With Bun 1.4.4, headed Chromium 145, 4× CPU throttling and five alternating fresh
|
|
840
|
+
contexts per variant, the baseline median was 1,423.9 ms and the candidate median
|
|
841
|
+
1,349.1 ms to six populated cards plus two animation frames. Ranges overlap
|
|
842
|
+
(1,277.3–1,484.7 ms versus 1,315.2–1,510.1 ms), so this is not a speedup claim.
|
|
843
|
+
The baseline is 0.10.0 rebuilt with the same compiler; both variants use current
|
|
844
|
+
CSS and local intercepted responses, not a network or native-host benchmark.
|
|
845
|
+
Reproduce with `DISPLAY=:99 node scripts/benchmark-canvas-boot.mjs <disposable-server-url> <baseline-index.js>`.
|
|
846
|
+
The populated-board check uses `scripts/benchmark-populated-canvas.mjs`, the same
|
|
847
|
+
70-card fixture and 18% camera, headed Chromium 145 at 1440×900, and three cold-cache
|
|
848
|
+
loads plus three warm reloads per build, with other browsers and tests stopped.
|
|
849
|
+
All 33 visible viewers rendered. The final comparison found baseline 0.10.0 at
|
|
850
|
+
6.71–7.67 s cold and 7.17–7.32 s warm; the candidate took 7.59–8.19 s cold and
|
|
851
|
+
8.00–8.39 s warm. This remains a loading cost, not an orb-only explanation or a
|
|
852
|
+
speedup. Main-page long tasks totalled 4.43–4.87 s on the candidate versus
|
|
853
|
+
3.46–4.20 s on baseline. Each chart document contains about 1.49 MB decoded
|
|
854
|
+
(baseline 1.47 MB). Parent Resource Timing alone misses baseline iframe bytes
|
|
855
|
+
and can duplicate candidate navigation bytes; do not compare or sum those totals.
|
|
856
|
+
The script records frame resources separately. Removing the provisional four-document queue produced overlapping
|
|
857
|
+
completion ranges and a later first viewer; the simpler independent loading path
|
|
858
|
+
avoids cross-card blocking, not a claimed performance win. Warm-load aborted
|
|
859
|
+
presence requests are recorded separately from viewer failures; no viewer failed.
|
|
860
|
+
At the default 52% camera there are no visible iframe viewers. The candidate's
|
|
861
|
+
board appeared in 0.67–0.70 s cold and 0.52–0.65 s warm versus baseline's
|
|
862
|
+
1.08–1.32 s and 1.06–1.36 s. That measures deferred offscreen work, not faster
|
|
863
|
+
viewer rendering. Local document responses were 2–6 ms. Portal-URL checks use
|
|
864
|
+
Amp's local hairpin forwarding inside this orb, so they do not measure external
|
|
865
|
+
portal transport or the user's connection. These are instrumented local readiness
|
|
866
|
+
timings, not native paint latency. Linux WebKit's full fit-all load exceeded this orb's memory limit
|
|
867
|
+
on both baseline and candidate; narrower populated-row checks are separate evidence.
|
|
868
|
+
The self-contained MCP App cannot fetch those chunks: its document includes
|
|
869
|
+
Mermaid and grows from about 1.32 MB to 4.78 MB uncompressed. This is an introduced delivery
|
|
870
|
+
cost, not eliminated debt or measured native performance. Keeping one renderer
|
|
871
|
+
and an offline-capable MCP document is the tradeoff; native boot remains unmeasured.
|
|
872
|
+
The bundle audit found one Mermaid core, one shared renderer and one DOMPurify,
|
|
873
|
+
not an embedded copy of the standalone viewer. The old standalone Mermaid bundle
|
|
874
|
+
already weighed 3,492,157 bytes; moving its renderer inline brings that dependency
|
|
875
|
+
tree into the self-contained MCP host. The dependency graph contains different
|
|
876
|
+
major versions of `marked`, `layout-base` and `cose-base` required by Mermaid's
|
|
877
|
+
renderers; forcing aliases would not be a safe deduplication. Inspect the graph
|
|
878
|
+
with `bun build src/client/mcp-app/index.tsx --target=browser --format=iife --minify --metafile=/tmp/mcp-meta.json --outfile=/tmp/mcp.js`.
|
|
879
|
+
Removing the payload from MCP startup requires a different script-delivery/CSP
|
|
880
|
+
contract or a reduced diagram catalog, rather than deleting a duplicate host.
|
|
881
|
+
Static export checks separately cover all twelve graph variants, compact plots,
|
|
882
|
+
all nine named themes and 600, 1024 and 1920 px widths in headed Chromium.
|
|
883
|
+
The populated 70-card export matches live saved geometry and renders offline
|
|
884
|
+
without HTTP(S) requests; bounded Linux WebKit checks cover the compact chart
|
|
885
|
+
section and dashboard. Linked boards and live MCP apps retain honest unavailable
|
|
886
|
+
placeholders. Arbitrary user HTML can still contain external requests.
|
|
887
|
+
|
|
888
|
+
There is no threshold-triggered grid or list. Zoom's revised drawing keeps the
|
|
889
|
+
same positions, sizes, groups, connections and native content at every scale.
|
|
890
|
+
Fit-all is for orientation; zoom or expand to read details. The earlier overview's
|
|
891
|
+
scrolling and overlay-clearance fixes are superseded by its complete removal.
|
|
892
|
+
|
|
893
|
+
Visual audit: Harbor headings use the drawing's 20 px semibold `#e6eef7` on
|
|
894
|
+
`#081524` (15.69:1). The initial dim capture had the existing relation-focus
|
|
895
|
+
highlight active, which applies 0.35 opacity to unrelated cards; Escape clears
|
|
896
|
+
that view state. A neighboring card outside a 600 px viewport is spatially
|
|
897
|
+
clipped, not internally truncated: focusing it restores the complete title.
|
|
898
|
+
Expanded pin hints remain while their button has keyboard `:focus-visible`, even
|
|
899
|
+
after pointer movement; Tab away dismisses the hint after its fade transition.
|
|
900
|
+
|
|
633
901
|
## Definition of done for any design work
|
|
634
902
|
|
|
635
903
|
1. It is drawn in the proposal canvas first, at 600 px and at full-window width.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Eval: does each AGENTS.md section change what agents do?
|
|
2
|
+
|
|
3
|
+
Run 2026-10-26. Rerun it whenever a section is added or questioned; delete sections that change
|
|
4
|
+
nothing, rewrite sections that change behaviour in the wrong direction.
|
|
5
|
+
|
|
6
|
+
## Method
|
|
7
|
+
|
|
8
|
+
1. Copy `AGENTS.md` into neutrally named directories: the full file (control) and one copy per
|
|
9
|
+
treatment with a single `##` section removed.
|
|
10
|
+
2. Start three subagents per variant. Each reads only its copy and writes the work plan it would
|
|
11
|
+
follow for two fixed requests, without implementing:
|
|
12
|
+
- "Wiki aliases inside fenced code blocks get turned into links on Markdown cards. Fix it."
|
|
13
|
+
- "Add a lastSavedAt field to GET /health."
|
|
14
|
+
3. Score each plan on observable choices: skills named, plan mode, subagents, and the core
|
|
15
|
+
verification steps (failing test first, `pmx_canvas_health`, live check, docs and changelog).
|
|
16
|
+
|
|
17
|
+
Plans, not implementations: this measures what the instructions steer, which is what a section
|
|
18
|
+
can change. Subagents may also see the real repository guidance, which would shrink differences.
|
|
19
|
+
|
|
20
|
+
## Results (n = 3 per variant)
|
|
21
|
+
|
|
22
|
+
| Variant | Pipeline skills named | Plan mode (request 1 / 2) | Plans using a subagent | Core verification |
|
|
23
|
+
|---|---|---|---|---|
|
|
24
|
+
| Full file | 3/3 | 2/3 · 3/3 | 5/6 | 3/3 |
|
|
25
|
+
| Without Agent Skill Pipeline | 0/3 | 3/3 · 3/3 | 3/6 | 3/3 |
|
|
26
|
+
| Without Workflow Orchestration | 3/3 | 0/3 · 0/3 | 1/6 | 3/3 |
|
|
27
|
+
|
|
28
|
+
`bun run acceptance` appeared in 2/3, 0/3 and 2/3 plans respectively; with n = 3 that is not
|
|
29
|
+
distinguishable from noise.
|
|
30
|
+
|
|
31
|
+
## Decisions
|
|
32
|
+
|
|
33
|
+
- **Workflow Orchestration: deleted.** Its only effect was plan mode and subagents for a one-file
|
|
34
|
+
fix and a one-field change, which Amp's own guidance and Core Principles 1 and 4 already govern.
|
|
35
|
+
Verification was identical without it.
|
|
36
|
+
- **Agent Skill Pipeline: kept, corrected.** Removing it drops the owner's pipeline skills from
|
|
37
|
+
every plan, so it is load-bearing. It wrongly said the skills exist only in gitignored local
|
|
38
|
+
trees; they are global user skills, available in every orb.
|