pmx-canvas 0.8.2 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (335) hide show
  1. package/.github/extensions/pmx-canvas/runtime.json +1 -1
  2. package/.github/extensions/pmx-canvas/tools.json +601 -22
  3. package/CHANGELOG.md +49 -0
  4. package/Readme.md +131 -532
  5. package/dist/canvas/global.css +2724 -476
  6. package/dist/canvas/index.js +168 -107
  7. package/dist/canvas/mcp-app.html +2899 -596
  8. package/dist/json-render/index.js +20 -20
  9. package/dist/types/client/canvas/BarHint.d.ts +12 -2
  10. package/dist/types/client/canvas/BoardLinkDialog.d.ts +3 -1
  11. package/dist/types/client/canvas/BoardPinButton.d.ts +10 -0
  12. package/dist/types/client/canvas/BoardSwitcher.d.ts +1 -1
  13. package/dist/types/client/canvas/CanvasViewport.d.ts +1 -1
  14. package/dist/types/client/canvas/CommandBar.d.ts +3 -4
  15. package/dist/types/client/canvas/ConnectionBanner.d.ts +2 -1
  16. package/dist/types/client/canvas/ContextChip.d.ts +3 -0
  17. package/dist/types/client/canvas/CrossBoardReferences.d.ts +5 -0
  18. package/dist/types/client/canvas/EdgeLayer.d.ts +14 -3
  19. package/dist/types/client/canvas/EmptyState.d.ts +4 -4
  20. package/dist/types/client/canvas/HomeGraphView.d.ts +2 -0
  21. package/dist/types/client/canvas/HomeMapView.d.ts +1 -0
  22. package/dist/types/client/canvas/HomeReviewView.d.ts +6 -0
  23. package/dist/types/client/canvas/HomeView.d.ts +9 -7
  24. package/dist/types/client/canvas/KnowledgeDialog.d.ts +4 -0
  25. package/dist/types/client/canvas/LifecycleChrome.d.ts +5 -0
  26. package/dist/types/client/canvas/LifecycleFields.d.ts +7 -0
  27. package/dist/types/client/canvas/LifecyclePanel.d.ts +1 -0
  28. package/dist/types/client/canvas/MemoryInspector.d.ts +7 -0
  29. package/dist/types/client/canvas/NearPinLayer.d.ts +14 -0
  30. package/dist/types/client/canvas/NodeContextMark.d.ts +40 -7
  31. package/dist/types/client/canvas/RelationPresetsDialog.d.ts +4 -0
  32. package/dist/types/client/canvas/RelationsPanel.d.ts +4 -0
  33. package/dist/types/client/canvas/SessionPanel.d.ts +2 -0
  34. package/dist/types/client/canvas/canvas-area.d.ts +1 -1
  35. package/dist/types/client/canvas/graph-geometry.d.ts +27 -0
  36. package/dist/types/client/canvas/graph-model.d.ts +37 -0
  37. package/dist/types/client/canvas/memory-layout.d.ts +23 -0
  38. package/dist/types/client/canvas/use-chrome-height.d.ts +2 -0
  39. package/dist/types/client/canvas/use-focus-trap.d.ts +1 -0
  40. package/dist/types/client/canvas/use-memory-graph.d.ts +8 -0
  41. package/dist/types/client/canvas/use-pan-zoom.d.ts +4 -1
  42. package/dist/types/client/icons.d.ts +0 -10
  43. package/dist/types/client/nodes/AxStepControls.d.ts +1 -1
  44. package/dist/types/client/nodes/InlineMarkdownEditor.d.ts +4 -4
  45. package/dist/types/client/nodes/MarkdownNode.d.ts +5 -1
  46. package/dist/types/client/nodes/McpAppNode.d.ts +4 -4
  47. package/dist/types/client/nodes/viewer-runtime-state.d.ts +1 -1
  48. package/dist/types/client/state/boards-store.d.ts +81 -9
  49. package/dist/types/client/state/canvas-store.d.ts +14 -1
  50. package/dist/types/client/state/context-chip-store.d.ts +22 -0
  51. package/dist/types/client/state/context-status-store.d.ts +35 -0
  52. package/dist/types/client/state/intent-bridge.d.ts +11 -8
  53. package/dist/types/client/state/knowledge-store.d.ts +22 -0
  54. package/dist/types/client/state/near-pin-store.d.ts +44 -1
  55. package/dist/types/client/state/presence-store.d.ts +4 -4
  56. package/dist/types/client/state/presentation.d.ts +28 -0
  57. package/dist/types/client/state/relation-store.d.ts +10 -0
  58. package/dist/types/client/state/session-store.d.ts +41 -2
  59. package/dist/types/client/state/workspace-settings.d.ts +7 -0
  60. package/dist/types/client/types.d.ts +13 -1
  61. package/dist/types/client/utils/keyboard.d.ts +2 -0
  62. package/dist/types/client/utils/time-ago.d.ts +4 -0
  63. package/dist/types/mcp/context-uri-template.d.ts +3 -1
  64. package/dist/types/server/agent-presence.d.ts +10 -3
  65. package/dist/types/server/ax-context.d.ts +1 -1
  66. package/dist/types/server/canvas-db.d.ts +30 -7
  67. package/dist/types/server/canvas-operations.d.ts +24 -2
  68. package/dist/types/server/canvas-provenance.d.ts +22 -2
  69. package/dist/types/server/canvas-serialization.d.ts +2 -0
  70. package/dist/types/server/canvas-state.d.ts +93 -15
  71. package/dist/types/server/canvas-validation.d.ts +1 -1
  72. package/dist/types/server/context-brief.d.ts +94 -6
  73. package/dist/types/server/context-reads.d.ts +33 -7
  74. package/dist/types/server/edit-summary.d.ts +20 -0
  75. package/dist/types/server/index.d.ts +71 -10
  76. package/dist/types/server/knowledge-lifecycle.d.ts +221 -0
  77. package/dist/types/server/lifecycle-status.d.ts +10 -0
  78. package/dist/types/server/memory-graph.d.ts +9 -0
  79. package/dist/types/server/mutation-history.d.ts +2 -0
  80. package/dist/types/server/operations/ops/ax-shared.d.ts +1 -1
  81. package/dist/types/server/operations/ops/boards.d.ts +2 -1
  82. package/dist/types/server/operations/ops/lifecycle.d.ts +2 -0
  83. package/dist/types/server/operations/ops/memory-graph.d.ts +2 -0
  84. package/dist/types/server/operations/ops/nodes.d.ts +5 -0
  85. package/dist/types/server/operations/ops/query.d.ts +23 -0
  86. package/dist/types/server/operations/registry.d.ts +1 -0
  87. package/dist/types/server/placement.d.ts +7 -0
  88. package/dist/types/server/scope-fence.d.ts +2 -1
  89. package/dist/types/server/spatial-analysis.d.ts +6 -3
  90. package/dist/types/server/tour-control.d.ts +32 -0
  91. package/dist/types/server/wiki-links.d.ts +14 -0
  92. package/dist/types/server/workbench-auth.d.ts +2 -0
  93. package/dist/types/shared/agent-context.d.ts +2 -0
  94. package/dist/types/shared/agent-presence.d.ts +15 -12
  95. package/dist/types/shared/auto-arrange.d.ts +1 -0
  96. package/dist/types/shared/boards.d.ts +4 -4
  97. package/dist/types/shared/knowledge-lifecycle.d.ts +41 -0
  98. package/dist/types/shared/knowledge-presets.d.ts +6 -0
  99. package/dist/types/shared/lifecycle-status.d.ts +24 -0
  100. package/dist/types/shared/memory-graph.d.ts +53 -0
  101. package/dist/types/shared/relations.d.ts +68 -0
  102. package/dist/types/shared/semantic-attention.d.ts +2 -0
  103. package/dist/types/shared/tour.d.ts +38 -0
  104. package/dist/types/shared/workspace-settings.d.ts +11 -0
  105. package/docs/RELEASE.md +21 -3
  106. package/docs/adr-001-bun-only-runtime.md +7 -1
  107. package/docs/adr-002-shared-product-separate-runtimes.md +93 -0
  108. package/docs/api-reference.md +109 -0
  109. package/docs/ax-host-adapter-contract.md +1 -1
  110. package/docs/ax-state-contract.md +5 -4
  111. package/docs/cli.md +153 -15
  112. package/docs/demos/pmx-canvas-demo.mp4 +0 -0
  113. package/docs/design/AgentContext.dc.html +3 -3
  114. package/docs/design/BoardPins.dc.html +37 -22
  115. package/docs/design/Categories.dc.html +208 -0
  116. package/docs/design/CategoryEditor.dc.html +33 -0
  117. package/docs/design/Chrome.dc.html +52 -9
  118. package/docs/design/ContextChip.dc.html +224 -0
  119. package/docs/design/ContextChip600.dc.html +136 -0
  120. package/docs/design/EmptyState.dc.html +45 -0
  121. package/docs/design/Flows.dc.html +23 -1
  122. package/docs/design/HeaderMarks.dc.html +183 -0
  123. package/docs/design/Home.dc.html +19 -1
  124. package/docs/design/HomeGraph.dc.html +86 -202
  125. package/docs/design/HomeMap.dc.html +23 -1
  126. package/docs/design/HomeTeam.dc.html +32 -14
  127. package/docs/design/Lifecycle.dc.html +22 -0
  128. package/docs/design/Lifecycle600.dc.html +18 -0
  129. package/docs/design/LifecycleVariants.dc.html +157 -0
  130. package/docs/design/LinkAuthorship.dc.html +139 -0
  131. package/docs/design/LinksChanged.dc.html +203 -0
  132. package/docs/design/LinksOptions.dc.html +137 -0
  133. package/docs/design/LinksOptions600.dc.html +134 -0
  134. package/docs/design/NearPin.dc.html +9 -10
  135. package/docs/design/Pane600.dc.html +4 -3
  136. package/docs/design/Relations.dc.html +3 -2
  137. package/docs/design/Restore.dc.html +152 -0
  138. package/docs/design/SeeChange.dc.html +267 -0
  139. package/docs/design/Uses.dc.html +12 -6
  140. package/docs/design/canvas.json +146 -19
  141. package/docs/design.md +449 -16
  142. package/docs/environment.md +0 -1
  143. package/docs/evals/curation-effect.md +128 -0
  144. package/docs/http-api.md +459 -37
  145. package/docs/mcp.md +146 -18
  146. package/docs/node-types.md +58 -3
  147. package/docs/plans/design-gaps-2026-10-08.md +53 -0
  148. package/docs/plans/plan-009-tech-debt-backlog.md +379 -0
  149. package/docs/plans/plan-016-context-made-visible-wave-1.md +150 -5
  150. package/docs/plans/plan-017-knowledge-categories-and-lifecycle.md +175 -0
  151. package/docs/plans/plan-018-connected-memory-wave-2.md +594 -0
  152. package/docs/plans/plan-019-post-0.9-roadmap.md +198 -0
  153. package/docs/product-context-vision-2026-09.md +17 -1
  154. package/docs/product-vision-2026-09.md +1082 -43
  155. package/docs/product-vision-review-2026-09.md +13 -1
  156. package/docs/screenshots/workbench-live-dark.png +0 -0
  157. package/docs/screenshots/workbench-live-light.png +0 -0
  158. package/docs/sdk.md +62 -2
  159. package/package.json +1 -1
  160. package/plugins/pmx-canvas/com.github.copilot/extensions/pmx-canvas/runtime.json +1 -1
  161. package/plugins/pmx-canvas/plugin.json +1 -1
  162. package/plugins/pmx-canvas/runtime.json +1 -1
  163. package/plugins/pmx-canvas/tools.json +601 -22
  164. package/skills/pmx-canvas/SKILL.md +216 -42
  165. package/skills/pmx-canvas/references/full-reference.md +120 -21
  166. package/skills/pmx-canvas/references/github-copilot-app-adapter.md +2 -2
  167. package/skills/pmx-canvas/references/importing-context.md +132 -0
  168. package/skills/pmx-canvas/references/installing-pmx-canvas.md +6 -6
  169. package/skills/pmx-canvas/references/tours-and-recording.md +16 -1
  170. package/skills/pmx-canvas-testing/SKILL.md +20 -0
  171. package/src/cli/agent.ts +2 -0
  172. package/src/cli/commands/ax.ts +12 -0
  173. package/src/cli/commands/boards.ts +87 -11
  174. package/src/cli/commands/edges.ts +28 -0
  175. package/src/cli/commands/groups.ts +7 -0
  176. package/src/cli/commands/nodes.ts +1 -0
  177. package/src/cli/commands/query.ts +34 -2
  178. package/src/cli/commands/record.ts +199 -48
  179. package/src/cli/index.ts +6 -1
  180. package/src/client/App.tsx +177 -70
  181. package/src/client/canvas/AttentionHistory.tsx +0 -2
  182. package/src/client/canvas/BarHint.tsx +40 -2
  183. package/src/client/canvas/BoardCopyDialog.tsx +1 -1
  184. package/src/client/canvas/BoardFolderDialog.tsx +7 -7
  185. package/src/client/canvas/BoardLinkDialog.tsx +138 -33
  186. package/src/client/canvas/BoardPinButton.tsx +33 -0
  187. package/src/client/canvas/BoardSwitcher.tsx +26 -40
  188. package/src/client/canvas/CanvasNode.tsx +360 -237
  189. package/src/client/canvas/CanvasViewport.tsx +45 -7
  190. package/src/client/canvas/CommandBar.tsx +29 -23
  191. package/src/client/canvas/CommandPalette.tsx +5 -12
  192. package/src/client/canvas/ConnectionBanner.tsx +3 -3
  193. package/src/client/canvas/ContextChip.tsx +296 -0
  194. package/src/client/canvas/ContextMenu.tsx +63 -5
  195. package/src/client/canvas/CrossBoardReferences.tsx +60 -0
  196. package/src/client/canvas/EdgeLayer.tsx +339 -76
  197. package/src/client/canvas/EmptyState.tsx +33 -18
  198. package/src/client/canvas/ExpandedNodeOverlay.tsx +72 -40
  199. package/src/client/canvas/ExternalWriters.tsx +57 -42
  200. package/src/client/canvas/HomeGraphView.tsx +942 -0
  201. package/src/client/canvas/HomeMapView.tsx +641 -0
  202. package/src/client/canvas/HomeReviewView.tsx +167 -0
  203. package/src/client/canvas/HomeView.tsx +687 -160
  204. package/src/client/canvas/IntentLayer.tsx +19 -12
  205. package/src/client/canvas/KnowledgeDialog.tsx +488 -0
  206. package/src/client/canvas/LifecycleChrome.tsx +133 -0
  207. package/src/client/canvas/LifecycleFields.tsx +91 -0
  208. package/src/client/canvas/LifecyclePanel.tsx +533 -0
  209. package/src/client/canvas/MemoryInspector.tsx +104 -0
  210. package/src/client/canvas/Minimap.tsx +3 -3
  211. package/src/client/canvas/NearPinLayer.tsx +187 -0
  212. package/src/client/canvas/NodeContextMark.tsx +175 -97
  213. package/src/client/canvas/Presentation.tsx +23 -57
  214. package/src/client/canvas/RelationPresetsDialog.tsx +413 -0
  215. package/src/client/canvas/RelationsPanel.tsx +82 -0
  216. package/src/client/canvas/SelectionBar.tsx +3 -6
  217. package/src/client/canvas/SessionPanel.tsx +90 -50
  218. package/src/client/canvas/SessionReceipt.tsx +311 -39
  219. package/src/client/canvas/ShortcutOverlay.tsx +1 -1
  220. package/src/client/canvas/SnapshotPanel.tsx +27 -36
  221. package/src/client/canvas/ToolRail.tsx +367 -192
  222. package/src/client/canvas/TopBar.tsx +354 -124
  223. package/src/client/canvas/canvas-area.ts +10 -3
  224. package/src/client/canvas/graph-geometry.ts +195 -0
  225. package/src/client/canvas/graph-model.ts +254 -0
  226. package/src/client/canvas/memory-layout.ts +106 -0
  227. package/src/client/canvas/use-chrome-height.ts +20 -0
  228. package/src/client/canvas/use-focus-trap.ts +31 -5
  229. package/src/client/canvas/use-memory-graph.ts +58 -0
  230. package/src/client/canvas/use-node-drag.ts +2 -1
  231. package/src/client/canvas/use-pan-zoom.ts +64 -7
  232. package/src/client/icons.tsx +0 -63
  233. package/src/client/mcp-app/style.css +0 -6
  234. package/src/client/nodes/AxStepControls.tsx +74 -50
  235. package/src/client/nodes/BoardNode.tsx +5 -1
  236. package/src/client/nodes/ContextNode.tsx +18 -11
  237. package/src/client/nodes/ExtAppFrame.tsx +0 -1
  238. package/src/client/nodes/FileNode.tsx +46 -42
  239. package/src/client/nodes/HtmlNode.tsx +32 -0
  240. package/src/client/nodes/ImageNode.tsx +1 -1
  241. package/src/client/nodes/InlineFormatBar.tsx +6 -9
  242. package/src/client/nodes/InlineMarkdownEditor.tsx +56 -17
  243. package/src/client/nodes/MarkdownNode.tsx +377 -109
  244. package/src/client/nodes/McpAppNode.tsx +50 -20
  245. package/src/client/nodes/MdFormatBar.tsx +21 -18
  246. package/src/client/nodes/PromptNode.tsx +1 -1
  247. package/src/client/nodes/ResponseNode.tsx +1 -1
  248. package/src/client/nodes/viewer-runtime-state.ts +54 -22
  249. package/src/client/state/attention-bridge.ts +64 -15
  250. package/src/client/state/boards-store.ts +193 -39
  251. package/src/client/state/canvas-store.ts +99 -12
  252. package/src/client/state/context-chip-store.ts +70 -0
  253. package/src/client/state/context-status-store.ts +53 -0
  254. package/src/client/state/intent-bridge.ts +51 -30
  255. package/src/client/state/knowledge-store.ts +43 -0
  256. package/src/client/state/near-pin-store.ts +115 -6
  257. package/src/client/state/presence-store.ts +7 -10
  258. package/src/client/state/presentation.ts +91 -0
  259. package/src/client/state/relation-store.ts +81 -0
  260. package/src/client/state/session-store.ts +144 -18
  261. package/src/client/state/sse-bridge.ts +206 -29
  262. package/src/client/state/workspace-settings.ts +11 -0
  263. package/src/client/theme/global.css +2724 -476
  264. package/src/client/types.ts +12 -0
  265. package/src/client/utils/keyboard.ts +10 -0
  266. package/src/client/utils/time-ago.ts +14 -0
  267. package/src/json-render/renderer/index.tsx +31 -0
  268. package/src/mcp/canvas-app.ts +12 -2
  269. package/src/mcp/context-uri-template.ts +7 -4
  270. package/src/mcp/server.ts +63 -41
  271. package/src/mcp/workbench-app.ts +39 -6
  272. package/src/server/agent-presence.ts +128 -28
  273. package/src/server/ax-context.ts +27 -13
  274. package/src/server/board-export.ts +12 -1
  275. package/src/server/canvas-db.ts +331 -42
  276. package/src/server/canvas-operations.ts +195 -83
  277. package/src/server/canvas-provenance.ts +53 -22
  278. package/src/server/canvas-serialization.ts +2 -0
  279. package/src/server/canvas-state.ts +950 -122
  280. package/src/server/canvas-validation.ts +9 -2
  281. package/src/server/context-brief.ts +345 -38
  282. package/src/server/context-reads.ts +178 -30
  283. package/src/server/demo-state.json +355 -24
  284. package/src/server/edit-summary.ts +74 -0
  285. package/src/server/html-surface.ts +8 -1
  286. package/src/server/index.ts +181 -11
  287. package/src/server/knowledge-lifecycle.ts +304 -0
  288. package/src/server/lifecycle-status.ts +232 -0
  289. package/src/server/memory-graph.ts +166 -0
  290. package/src/server/mutation-history.ts +18 -6
  291. package/src/server/operations/composites.ts +32 -11
  292. package/src/server/operations/http.ts +7 -2
  293. package/src/server/operations/index.ts +4 -0
  294. package/src/server/operations/mcp.ts +26 -1
  295. package/src/server/operations/ops/ax-presence.ts +1 -1
  296. package/src/server/operations/ops/ax-read.ts +57 -6
  297. package/src/server/operations/ops/ax-timeline.ts +28 -2
  298. package/src/server/operations/ops/backup.ts +5 -3
  299. package/src/server/operations/ops/batch.ts +35 -4
  300. package/src/server/operations/ops/boards.ts +188 -47
  301. package/src/server/operations/ops/canvas-wire.ts +31 -1
  302. package/src/server/operations/ops/edges.ts +36 -2
  303. package/src/server/operations/ops/groups.ts +6 -1
  304. package/src/server/operations/ops/lifecycle.ts +262 -0
  305. package/src/server/operations/ops/memory-graph.ts +45 -0
  306. package/src/server/operations/ops/nodes.ts +107 -24
  307. package/src/server/operations/ops/query.ts +281 -68
  308. package/src/server/operations/ops/snapshots.ts +73 -1
  309. package/src/server/operations/ops/validate.ts +5 -1
  310. package/src/server/operations/ops/viewport.ts +97 -3
  311. package/src/server/operations/registry.ts +74 -25
  312. package/src/server/placement.ts +29 -0
  313. package/src/server/scope-fence.ts +78 -6
  314. package/src/server/server.ts +115 -16
  315. package/src/server/spatial-analysis.ts +48 -23
  316. package/src/server/tour-control.ts +82 -0
  317. package/src/server/wiki-links.ts +137 -0
  318. package/src/server/workbench-auth.ts +11 -0
  319. package/src/shared/agent-context.ts +3 -0
  320. package/src/shared/agent-presence.ts +15 -15
  321. package/src/shared/auto-arrange.ts +2 -0
  322. package/src/shared/boards.ts +4 -4
  323. package/src/shared/knowledge-lifecycle.ts +22 -0
  324. package/src/shared/knowledge-presets.ts +80 -0
  325. package/src/shared/lifecycle-status.ts +26 -0
  326. package/src/shared/memory-graph.ts +74 -0
  327. package/src/shared/relations.ts +98 -0
  328. package/src/shared/semantic-attention.ts +15 -1
  329. package/src/shared/tour.ts +23 -5
  330. package/src/shared/workspace-settings.ts +13 -0
  331. package/dist/types/client/canvas/ContextPinBar.d.ts +0 -1
  332. package/dist/types/client/canvas/FocusFieldLayer.d.ts +0 -1
  333. package/dist/types/client/canvas/kind-colors.d.ts +0 -3
  334. package/dist/types/server/agent-context.d.ts +0 -22
  335. package/src/client/canvas/ContextPinBar.tsx +0 -25
@@ -1,9 +1,13 @@
1
- import type { ComponentChildren } from 'preact';
1
+ import { type ComponentChildren, type VNode } from 'preact';
2
+ /** Escape a bar's filter/clip without installing React-compat event hooks. */
3
+ export declare function BarPortal({ children }: {
4
+ children: VNode;
5
+ }): null;
2
6
  /**
3
7
  * Styled hover/focus tooltip for bar controls — the replacement for native
4
8
  * `title` hints, which are delay-gated and never render in embedded panes.
5
9
  */
6
- export declare function BarHint({ label, shortcut, body, align, side, tapToOpen, children, }: {
10
+ export declare function BarHint({ label, shortcut, body, align, side, tapToOpen, fitWithin, children, }: {
7
11
  label: string;
8
12
  shortcut?: string;
9
13
  /** One or two plain sentences under the label — the explanation a native `title` used to hide. */
@@ -18,5 +22,11 @@ export declare function BarHint({ label, shortcut, body, align, side, tapToOpen,
18
22
  * after the click, not linger on focus.
19
23
  */
20
24
  tapToOpen?: boolean;
25
+ /**
26
+ * The clipping box to stay inside (a CSS selector for an ancestor). As the
27
+ * tooltip opens it takes whichever of end/start alignment fits — a node
28
+ * header chip sits anywhere along a card that clips its contents.
29
+ */
30
+ fitWithin?: string;
21
31
  children: ComponentChildren;
22
32
  }): import("preact").JSX.Element;
@@ -1,3 +1,5 @@
1
- export declare function BoardLinkDialog({ onClose }: {
1
+ export declare function BoardLinkDialog({ onClose, sourceNodeId, wikiRef, }: {
2
2
  onClose: () => void;
3
+ sourceNodeId?: string;
4
+ wikiRef?: string;
3
5
  }): import("preact/src").JSX.Element;
@@ -0,0 +1,10 @@
1
+ import { type BoardSummary } from '../state/boards-store';
2
+ /**
3
+ * Board pins (docs/design/BoardPins.dc.html): the same pin as a card's, in the
4
+ * same place, at board level. Pinned, the board's README and pinned cards reach
5
+ * the agent's brief whichever board is open.
6
+ */
7
+ export declare function BoardPinButton({ board, inNodeHeader }: {
8
+ board: BoardSummary;
9
+ inNodeHeader?: boolean;
10
+ }): import("preact/src").JSX.Element;
@@ -5,4 +5,4 @@
5
5
  */
6
6
  export declare function BoardSwitcher({ fallbackName }: {
7
7
  fallbackName: string;
8
- }): import("preact").JSX.Element;
8
+ }): import("preact/src").JSX.Element;
@@ -7,5 +7,5 @@ interface CanvasViewportProps {
7
7
  annotationTool?: AnnotationTool;
8
8
  }
9
9
  export declare function getRenderableWorldNodes(allNodes: Iterable<CanvasNodeState>, focusedNodeId: string | null, hiddenIds?: ReadonlySet<string>): CanvasNodeState[];
10
- export declare function CanvasViewport({ onNodeContextMenu, onEdgeContextMenu, onCanvasContextMenu, annotationMode, annotationTool, }: CanvasViewportProps): import("preact/src").JSX.Element;
10
+ export declare function CanvasViewport({ onNodeContextMenu, onEdgeContextMenu, onCanvasContextMenu, annotationMode, annotationTool, }: CanvasViewportProps): import("preact").JSX.Element;
11
11
  export {};
@@ -1,10 +1,9 @@
1
1
  /**
2
2
  * Command bar (rail-chrome-v2 phase 5): the human's steering surface while a
3
3
  * session is attached — the design's floating composer, centered at the
4
- * bottom of the canvas region. Above it, the pinned context as gold ✦ chips
4
+ * bottom of the canvas region. Above it, the pinned context as blue chips
5
5
  * (× unpins — the same pin the node's own control toggles); the composer row
6
- * posts an AX steering message to the session. The context-budget meter lives
7
- * in the top bar (`ContextBudget`), where the mockup puts it. Replaces the
8
- * quiet board's pin bar only while attached.
6
+ * posts an AX steering message to the session. What is in the agent's
7
+ * context is summarised in the top bar's context chip (`ContextChip`).
9
8
  */
10
9
  export declare function CommandBar(): import("preact/src").JSX.Element;
@@ -2,7 +2,8 @@
2
2
  * Degraded connection states (rail-chrome-v2 phase 7, design item 14), mapped
3
3
  * onto the transport the bridge already runs:
4
4
  * - reconnecting: the stream (SSE or the polling fallback) is down and the
5
- * bridge is backing off. Edits still go over HTTP; the board may be stale.
5
+ * bridge is backing off. HTTP saves may need renewed capability after a
6
+ * daemon restart; the board may be stale.
6
7
  * - resyncing: a transport came back after a drop and the full `connected`
7
8
  * snapshot is being applied — the seq cursor was dropped, the board reloads
8
9
  * from the server's snapshot without touching local edits.
@@ -0,0 +1,3 @@
1
+ /** The quiet footer when Agent sessions is off; pins still curate agent context. */
2
+ export declare function ContextPinBar(): import("preact/src").JSX.Element | null;
3
+ export declare function ContextChip(): import("preact/src").JSX.Element | null;
@@ -0,0 +1,5 @@
1
+ import type { CanvasNodeState } from '../types';
2
+ /** The same bounded, navigable reference list on a card and in focus mode. */
3
+ export declare function CrossBoardReferences({ node }: {
4
+ node: CanvasNodeState;
5
+ }): import("preact/src").JSX.Element | null;
@@ -1,5 +1,9 @@
1
- import type { Signal } from '@preact/signals';
1
+ import { type Signal } from '@preact/signals';
2
2
  import type { CanvasEdge, CanvasNodeState } from '../types';
3
+ /** Filter only the kinds on this board; shared presets are managed in Home. */
4
+ export declare function RelationLegend(): import("preact/src").JSX.Element | null;
5
+ /** The link pill's hint, outside the zoomed canvas so it keeps screen size and is never clipped. */
6
+ export declare function EdgeHint(): import("preact/src").JSX.Element | null;
3
7
  /**
4
8
  * Edges are drawn in world space, so a 1.5px stroke renders as 0.4 screen px at
5
9
  * 26% zoom. Full inverse compensation keeps edge chrome at a constant SCREEN
@@ -8,10 +12,17 @@ import type { CanvasEdge, CanvasNodeState } from '../types';
8
12
  * at overview zoom.
9
13
  */
10
14
  export declare function edgeChromeScale(scale: number): number;
15
+ /**
16
+ * Lines draw below group frames, so a link never covers a group's header; pills
17
+ * draw in their own layer above the frames, so a link inside a group keeps a
18
+ * label (LinkAuthorship.dc.html). Transparent pill hits stay below ports without
19
+ * moving the painted label below the frame's wash.
20
+ */
21
+ export type EdgeLayerPart = 'lines' | 'pills' | 'pill-hits';
11
22
  interface EdgeLayerProps {
12
23
  nodes: Signal<Map<string, CanvasNodeState>>;
13
24
  edges: Signal<Map<string, CanvasEdge>>;
14
- onEdgeContextMenu?: (e: MouseEvent, edgeId: string) => void;
25
+ part: EdgeLayerPart;
15
26
  }
16
- export declare function EdgeLayer({ nodes, edges, onEdgeContextMenu }: EdgeLayerProps): import("preact/src").JSX.Element | null;
27
+ export declare function EdgeLayer({ nodes, edges, part }: EdgeLayerProps): import("preact/src").JSX.Element | null;
17
28
  export {};
@@ -1,10 +1,10 @@
1
1
  /**
2
2
  * Empty board (rail-chrome-v2 phase 7, design item 11): centered onboarding
3
- * with the ghost mark, a 2×2 grid of starter actions, and the shortcut hint.
4
- * Every action is real: New note creates the same blank note as M, Drop files
3
+ * with direct starter actions and a separate way to start with your agent.
4
+ * Every action is real: Start a note creates the same blank note as M, Drop files
5
5
  * opens a picker onto the viewport's import path, Paste a link asks for a URL,
6
- * Start agent session attaches a browser-keyed session. Tokens only, so it
7
- * reads the same in dark and light.
6
+ * and the optional Start agent session attaches a browser-keyed session.
7
+ * Agent guidance stays visible independently of the session beta.
8
8
  */
9
9
  export declare function EmptyState({ onOpenPalette }: {
10
10
  onOpenPalette: () => void;
@@ -0,0 +1,2 @@
1
+ /** One explorer. Ownership defines scope; authored relationships define geometry. */
2
+ export declare function HomeGraphView(): import("preact/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export declare function HomeMapView(): import("preact/jsx-runtime").JSX.Element;
@@ -0,0 +1,6 @@
1
+ /** Queue metadata and qualification are one authoritative workspace observation. */
2
+ export declare function HomeReviewView({ folder, folders, onScopeChange, }: {
3
+ folder: string;
4
+ folders: string[];
5
+ onScopeChange: (folder: string) => void;
6
+ }): import("preact/src").JSX.Element | null;
@@ -1,9 +1,11 @@
1
- export declare function promptNewBoard(): Promise<void>;
1
+ export declare function promptNewBoard(folder?: string | null): Promise<void>;
2
2
  /**
3
- * Home (plan 012): the view when no board is open — every board, filed under
4
- * its category (most recently opened first within each). Categories keep the
5
- * library findable as it grows into the working memory of many sessions.
6
- * Deleting asks in place, naming the board and what it holds; browser confirm
7
- * dialogs are no-ops in agent panes.
3
+ * Home (docs/design/Home.dc.html, plan 016): the library when no board is
4
+ * open. A folder tree with pinned boards on the left, the selected folder's
5
+ * subfolders and board cards in the middle, the selected board's details on
6
+ * the right. At ≤ 760 px (Pane600.dc.html) the tree becomes a folder picker,
7
+ * the boards a list and the details a bottom sheet. Folders are board
8
+ * folder paths; folders carry no colour (decided 2026-10-07). Browser
9
+ * confirm dialogs are no-ops in agent panes, so Delete asks in place.
8
10
  */
9
- export declare function HomeView(): import("preact").JSX.Element;
11
+ export declare function HomeView(): import("preact/src").JSX.Element;
@@ -0,0 +1,4 @@
1
+ export declare function KnowledgeDialog({ folder, onClose }: {
2
+ folder?: string;
3
+ onClose: () => void;
4
+ }): import("preact/src").JSX.Element;
@@ -0,0 +1,5 @@
1
+ export declare function KnowledgeSync(): null;
2
+ export declare function LifecycleFilters(): import("preact/src").JSX.Element | null;
3
+ export declare function LifecycleFooter({ nodeId }: {
4
+ nodeId: string;
5
+ }): import("preact/src").JSX.Element | null;
@@ -0,0 +1,7 @@
1
+ import type { Lifecycle } from '../../server/knowledge-lifecycle.js';
2
+ export declare const DEFAULT_LIFECYCLE: Lifecycle;
3
+ export declare function LifecycleFields({ value, onChange }: {
4
+ value: Lifecycle;
5
+ onChange: (value: Lifecycle) => void;
6
+ }): import("preact/jsx-runtime").JSX.Element;
7
+ export declare const cleanLifecycle: (value: Lifecycle) => Lifecycle;
@@ -0,0 +1 @@
1
+ export declare function LifecyclePanel(): import("preact/src").JSX.Element | null;
@@ -0,0 +1,7 @@
1
+ import type { ComponentChildren } from 'preact';
2
+ /** Shared docking only. Map and Graph own their selection and actions. */
3
+ export declare function MemoryInspector({ children, initiallyCollapsed, reveal, }: {
4
+ children: ComponentChildren;
5
+ initiallyCollapsed?: boolean;
6
+ reveal?: number;
7
+ }): import("preact").JSX.Element;
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Which pin? (docs/design/NearPin.dc.html §2): for a hovered, selected or
3
+ * dragged pin — or the pins a near chip asked to show — dotted tethers to its
4
+ * neighbours, numbered nearest first, and an unlabeled boundary only when
5
+ * another node is within range. Drawn in screen
6
+ * space (architecture rule 9) so they stay legible at fit zoom; while an
7
+ * unpinned node is dragged only the nearest pin's boundary shows (§3).
8
+ */
9
+ export declare function NearPinLayer(): import("preact/jsx-runtime").JSX.Element | null;
10
+ /**
11
+ * Hover a near chip (docs/design/NearPin.dc.html §2): which pins, how far, and
12
+ * the two ways on — pin it to put it first, or show the pins' tethers.
13
+ */
14
+ export declare function NearPinCard(): import("preact/jsx-runtime").JSX.Element | null;
@@ -1,4 +1,5 @@
1
- import type { CanvasNodeState } from '../types';
1
+ import type { ComponentChildren } from 'preact';
2
+ import { type CanvasNodeState } from '../types';
2
3
  export declare const GLYPHS: {
3
4
  readonly eye: "M2 12s3.5-6 10-6 10 6 10 6-3.5 6-10 6S2 12 2 12zM12 9.5a2.5 2.5 0 1 0 0 5a2.5 2.5 0 1 0 0-5";
4
5
  readonly eyeOff: "M3 3l18 18M10.6 6.1A10 10 0 0 1 12 6c6.5 0 10 6 10 6a17 17 0 0 1-3 3.6M6.6 6.6C3.8 8.3 2 12 2 12s3.5 6 10 6a9.6 9.6 0 0 0 4.4-1";
@@ -6,19 +7,51 @@ export declare const GLYPHS: {
6
7
  readonly pen: "M4 20l4.2-1L19 8.2 15.8 5 5 15.8z";
7
8
  readonly warn: "M12 4l9 16H3zM12 10v4M12 17v.5";
8
9
  };
9
- /** The header chip saying what agents did with this node (one per node; glyph + word). */
10
- export declare function NodeContextMark({ node, pinned }: {
10
+ /**
11
+ * Authorship lives only in the type icon's hint, not a star or state chip.
12
+ * A person's edit ends the agent byline.
13
+ */
14
+ export declare function bylineFor(node: CanvasNodeState): string | null;
15
+ /** How a header chip shows: its word, only its glyph, or folded into the type icon's hint. */
16
+ export type ChipFold = 'word' | 'glyph' | 'hidden';
17
+ /**
18
+ * The one state chip a header carries — near a pin (unpinned) or the read
19
+ * state (pinned) — with what it says when folded into the icon's hint. Never
20
+ * other cards' titles: at rest a node must not contain them.
21
+ */
22
+ export declare function headerChip(node: CanvasNodeState, pinned: boolean): {
23
+ amber: boolean;
24
+ folded: string;
25
+ } | null;
26
+ /** A pinned node's read-state chip: glyph + word, or only the glyph when the title needs the room. */
27
+ export declare function NodeContextMark({ node, pinned, fold, }: {
28
+ node: CanvasNodeState;
29
+ pinned: boolean;
30
+ fold?: ChipFold;
31
+ }): import("preact").JSX.Element | null;
32
+ /**
33
+ * The type icon's hint holds the full title, the byline and any folded chip.
34
+ */
35
+ export declare function NodeTypeIcon({ node, pinned, title, fold, children, }: {
11
36
  node: CanvasNodeState;
12
37
  pinned: boolean;
13
- }): import("preact/src").JSX.Element | null;
38
+ title: string;
39
+ fold: ChipFold;
40
+ children: ComponentChildren;
41
+ }): import("preact").JSX.Element;
14
42
  /** Pinned by an agent: the violet dot on the pin badge. */
15
43
  export declare function isAgentPin(nodeId: string): boolean;
16
44
  /**
17
45
  * Near a pin (docs/design/NearPin.dc.html): a dotted pin-blue chip on an
18
46
  * unpinned node the brief carries as title + short summary. Weaker than "in
19
- * context" on purpose: the agent never gets this node's full content.
47
+ * context" on purpose: the agent sees it only because a pin is nearby. Hover,
48
+ * focus or tap opens its card (`NearPinCard`, §2); it previews while dragged,
49
+ * pulses once on a drop inside and fades on a drop outside (§3).
20
50
  */
21
- export declare function NearPinMark({ node, pinned }: {
51
+ export declare function NearPinMark({ node, pinned, fold, }: {
22
52
  node: CanvasNodeState;
23
53
  pinned: boolean;
24
- }): import("preact/src").JSX.Element | null;
54
+ fold?: ChipFold;
55
+ }): import("preact").JSX.Element | null;
56
+ /** The viewport as a key: the card closes when it changes. */
57
+ export declare function viewKey(): string;
@@ -0,0 +1,4 @@
1
+ /** Shared templates live in Home; applying one never rewrites connection kinds. */
2
+ export declare function RelationPresetsDialog({ onClose }: {
3
+ onClose: () => void;
4
+ }): import("preact/jsx-runtime").JSX.Element;
@@ -0,0 +1,4 @@
1
+ /** The expanded card's evidence and uses, from the same graph agents navigate. */
2
+ export declare function RelationsPanel({ nodeId }: {
3
+ nodeId: string;
4
+ }): import("preact/jsx-runtime").JSX.Element;
@@ -1 +1,3 @@
1
+ /** Approvals and write scope are safety controls, not an optional beta. */
2
+ export declare function AgentControls(): import("preact/src").JSX.Element | null;
1
3
  export declare function SessionPanel(): import("preact/src").JSX.Element;
@@ -31,7 +31,7 @@ export interface CanvasFitInsets {
31
31
  }
32
32
  /**
33
33
  * Screen-space insets Fit must reserve for the floating chrome that overlays
34
- * the canvas region: the bottom command bar (whose pinned-chip row grows it)
34
+ * the canvas region: the bottom command bar or standalone context pill,
35
35
  * and the bottom-right minimap. Measured from the live elements — fit's old
36
36
  * world-space padding shrank with the fit zoom and parked nodes underneath
37
37
  * both (0.5.0 Amp report, finding A; architecture rule 9's trap).
@@ -0,0 +1,27 @@
1
+ import type { Point } from './memory-layout';
2
+ /** Painted bounds, collision clearance, ports and Fit share this footprint. */
3
+ export declare const GRAPH_NODE: {
4
+ width: number;
5
+ height: number;
6
+ gap: number;
7
+ };
8
+ interface Rect {
9
+ left: number;
10
+ top: number;
11
+ right: number;
12
+ bottom: number;
13
+ }
14
+ export interface GraphRoute {
15
+ path: string;
16
+ points: Point[];
17
+ label?: Point & Rect;
18
+ }
19
+ interface Link {
20
+ id: string;
21
+ from: string;
22
+ to: string;
23
+ label: string;
24
+ }
25
+ /** Obstacle visibility is shared across routes and independent of zoom/hover. */
26
+ export declare function graphRoutes(positions: Map<string, Point>, links: Link[]): Map<string, GraphRoute>;
27
+ export {};
@@ -0,0 +1,37 @@
1
+ import type { MemoryGraphEdge, MemoryGraphNode } from '../../shared/memory-graph.js';
2
+ import type { Point } from './memory-layout';
3
+ export type GraphScene = {
4
+ kind: 'overview';
5
+ } | {
6
+ kind: 'board';
7
+ boardId: string;
8
+ } | {
9
+ kind: 'card';
10
+ boardId: string;
11
+ cardId: string;
12
+ };
13
+ export declare const graphSceneKey: (scene: GraphScene) => string;
14
+ export declare const pairKey: (a: string, b: string) => string;
15
+ /** Partition original facts once; grouping never changes authored endpoints. */
16
+ export declare function graphEvidence(edges: MemoryGraphEdge[]): {
17
+ evidence: MemoryGraphEdge[];
18
+ pairs: Map<string, {
19
+ boardId: string;
20
+ peerId: string;
21
+ edges: MemoryGraphEdge[];
22
+ }>;
23
+ internal: Map<string, number>;
24
+ missing: MemoryGraphEdge[];
25
+ };
26
+ /** One animation step. The pointer/drop anchor stays fixed while its visible neighbors respond. */
27
+ export declare function relaxGraphPositions(positions: Map<string, Point>, edges: ReadonlyArray<{
28
+ from: string;
29
+ to: string;
30
+ weight?: number;
31
+ }>, held: string, cooling: number): number;
32
+ /** Deterministic initial placement; live additions preserve retained coordinates. */
33
+ export declare function graphPositions(nodes: MemoryGraphNode[], edges: ReadonlyArray<{
34
+ from: string;
35
+ to: string;
36
+ weight?: number;
37
+ }>, retained: Map<string, Point>): Map<string, Point>;
@@ -0,0 +1,23 @@
1
+ import type { MemoryGraphNode } from '../../shared/memory-graph.js';
2
+ export type Point = {
3
+ x: number;
4
+ y: number;
5
+ };
6
+ export declare const MAP_CARD: {
7
+ width: number;
8
+ height: number;
9
+ };
10
+ export interface MemoryRegion extends Point {
11
+ path: string;
12
+ width: number;
13
+ height: number;
14
+ count: number;
15
+ depth: number;
16
+ collapsed: boolean;
17
+ }
18
+ /** Folder membership determines regions; authored Map positions never change membership. */
19
+ export declare function mapLayout(nodes: MemoryGraphNode[], collapsed: Set<string>): {
20
+ positions: Map<string, Point>;
21
+ regions: MemoryRegion[];
22
+ hidden: Set<string>;
23
+ };
@@ -0,0 +1,2 @@
1
+ /** Keep floating canvas controls clear when their content wraps or is hidden. */
2
+ export declare function useChromeHeight(property: string): import("preact/src").RefObject<HTMLDivElement>;
@@ -11,4 +11,5 @@ export declare function useFocusTrap(ref: {
11
11
  current: HTMLElement | null;
12
12
  };
13
13
  restoreTo?: () => HTMLElement | null;
14
+ onEscape?: () => void;
14
15
  }): void;
@@ -0,0 +1,8 @@
1
+ import type { MemoryGraph } from '../../shared/memory-graph.js';
2
+ /** Coalesce live discovery and reject responses from an older library revision. */
3
+ export declare function useMemoryGraph(projection: 'full' | 'boards'): {
4
+ graph: MemoryGraph | null;
5
+ loading: boolean;
6
+ error: boolean;
7
+ retry: () => void;
8
+ };
@@ -4,6 +4,8 @@ interface PanZoomOptions {
4
4
  viewport: Signal<ViewportState>;
5
5
  onViewportChange: (v: ViewportState) => void;
6
6
  onViewportCommit: (v: ViewportState) => void;
7
+ onBackgroundContextMenu?: (e: MouseEvent, worldX: number, worldY: number) => void;
8
+ onEdgeContextMenu?: (e: MouseEvent, edgeId: string) => void;
7
9
  disabled?: boolean;
8
10
  }
9
11
  /**
@@ -11,8 +13,9 @@ interface PanZoomOptions {
11
13
  * - Wheel + Ctrl/Cmd: zoom centered on pointer
12
14
  * - Wheel without modifier: pan
13
15
  * - Right or middle pointer drag: pan from anywhere
16
+ * - Right-click on background: creation menu on release, unless dragged
14
17
  * - Pointer drag on background in pan mode: pan
15
18
  * - Pinch (touch): zoom
16
19
  */
17
- export declare function usePanZoom({ viewport, onViewportChange, onViewportCommit, disabled }: PanZoomOptions): import("preact/src").RefObject<HTMLDivElement>;
20
+ export declare function usePanZoom({ viewport, onViewportChange, onViewportCommit, onBackgroundContextMenu, onEdgeContextMenu, disabled, }: PanZoomOptions): import("preact/src").RefObject<HTMLDivElement>;
18
21
  export {};
@@ -27,8 +27,6 @@ export declare function IconZoomOut(p: IconProps): JSX.Element;
27
27
  export declare function IconArrange(p: IconProps): JSX.Element;
28
28
  /** Frame with focused inner corner — minimap */
29
29
  export declare function IconMinimap(p: IconProps): JSX.Element;
30
- /** Sun with rays */
31
- export declare function IconSun(p: IconProps): JSX.Element;
32
30
  /** Crescent moon */
33
31
  export declare function IconMoon(p: IconProps): JSX.Element;
34
32
  /** Pen stroke — canvas annotation mode */
@@ -37,16 +35,8 @@ export declare function IconPen(p: IconProps): JSX.Element;
37
35
  export declare function IconEraser(p: IconProps): JSX.Element;
38
36
  /** Text cursor — canvas text annotation mode */
39
37
  export declare function IconTextAnnotation(p: IconProps): JSX.Element;
40
- /** Camera — snapshots */
41
- export declare function IconSnapshot(p: IconProps): JSX.Element;
42
- /** Bullseye — trace toggle */
43
- export declare function IconTrace(p: IconProps): JSX.Element;
44
- /** X in circle — clear trace */
45
- export declare function IconClearTrace(p: IconProps): JSX.Element;
46
38
  /** Magnifying glass — search */
47
39
  export declare function IconSearch(p: IconProps): JSX.Element;
48
- /** Keyboard — shortcuts */
49
- export declare function IconShortcuts(p: IconProps): JSX.Element;
50
40
  /** Speech bubble — steer the agent (command bar composer). */
51
41
  export declare function IconSteer(p: IconProps): JSX.Element;
52
42
  /** Push pin — context pinning (docs/design/Chrome.dc.html). */
@@ -1,4 +1,4 @@
1
1
  import type { CanvasNodeState } from '../types';
2
2
  export declare function AxStepControls({ node }: {
3
3
  node: CanvasNodeState;
4
- }): import("preact/jsx-runtime").JSX.Element | null;
4
+ }): import("preact/src").JSX.Element | null;
@@ -2,11 +2,11 @@
2
2
  *
3
3
  * Two persistence signals:
4
4
  * - `onChange(md)` — fires on every input. Caller typically debounces.
5
- * - `onSave(md)` — fires on ⌘S and blur. Caller should persist immediately
5
+ * - `onSave(md)` — fires on ⌘S and blur. Caller should persist dirty drafts immediately
6
6
  * and cancel any pending debounced save, since `md` is the authoritative
7
- * latest content. Both receive freshly-serialized markdown so the caller
8
- * never reads a stale state snapshot. */
9
- export declare function InlineMarkdownEditor({ initialHtml, className, onChange, onSave, }: {
7
+ * latest content: the exact caller draft until input, serialized DOM after it. */
8
+ export declare function InlineMarkdownEditor({ markdown, initialHtml, className, onChange, onSave, }: {
9
+ markdown: string;
10
10
  initialHtml: string;
11
11
  className?: string;
12
12
  onChange: (markdown: string) => void;
@@ -1,7 +1,11 @@
1
1
  import type { JSX } from 'preact';
2
2
  import type { CanvasNodeState } from '../types';
3
- /** Flip the index-th GFM task marker in the source (document order matches the rendered boxes). */
3
+ /** Flip exactly one parsed GFM task without reformatting any other source bytes. */
4
4
  export declare function toggleTaskMarker(markdown: string, index: number): string;
5
+ /** Review must refer to persisted content, not an edited or saving preview. */
6
+ export declare function hasUnsavedMarkdown(boardId: string, nodeId: string): boolean;
7
+ /** After blur, navigate only when this board/card's save has actually succeeded. */
8
+ export declare function waitForMarkdownSave(boardId: string | null, nodeId: string): Promise<boolean>;
5
9
  export declare function MarkdownNode({ node, expanded }: {
6
10
  node: CanvasNodeState;
7
11
  expanded?: boolean;
@@ -8,15 +8,15 @@ type ViewerFrameSource = {
8
8
  /**
9
9
  * Keep the last painted viewer in front while its replacement navigates. Viewer
10
10
  * specs are immutable documents, so updates normally change `?v=` and reload the
11
- * iframe; putting the new document in a hidden sibling avoids exposing Chromium's
12
- * white navigation paint. Two animation frames after load gives the new document
13
- * a composited paint before the old one is removed.
11
+ * iframe; putting the new document behind the old one conceals Chromium's white
12
+ * navigation paint without suppressing rendering. Wait for restore and render commit,
13
+ * then two animation frames before the old viewer is removed.
14
14
  */
15
15
  export declare function RefreshingViewerFrame({ source, iframeRef, onLoad, onDocumentLoad, title, className, sandbox, allow, tabIndex, }: {
16
16
  source: ViewerFrameSource;
17
17
  iframeRef: RefObject<HTMLIFrameElement>;
18
18
  onLoad: () => void;
19
- onDocumentLoad?: (frame: HTMLIFrameElement) => void;
19
+ onDocumentLoad?: (frame: HTMLIFrameElement, signal: AbortSignal) => void | Promise<boolean | 'cancelled' | void>;
20
20
  title: string;
21
21
  className?: string;
22
22
  sandbox?: string;
@@ -1 +1 @@
1
- export declare function restoreViewerRuntimeState(nodeId: string, token: string, source: Window): void;
1
+ export declare function restoreViewerRuntimeState(nodeId: string, token: string, source: Window, signal?: AbortSignal): Promise<boolean | 'cancelled'>;