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