@north-light/crouter 0.3.312 → 0.3.314

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 (497) hide show
  1. package/dist/api/client.d.ts +27 -30
  2. package/dist/api/client.js +80 -67
  3. package/dist/api/dto/broker-ops.d.ts +10 -20
  4. package/dist/api/dto/canvas.d.ts +1 -10
  5. package/dist/api/dto/health.d.ts +113 -0
  6. package/dist/api/dto/human-requests.d.ts +14 -3
  7. package/dist/api/dto/human.d.ts +2 -48
  8. package/dist/api/dto/human.js +3 -2
  9. package/dist/api/dto/inbox.d.ts +14 -0
  10. package/dist/api/dto/mail.d.ts +43 -0
  11. package/dist/api/dto/nodes.d.ts +11 -8
  12. package/dist/api/dto/recovery.d.ts +96 -0
  13. package/dist/api/dto/reviews.d.ts +2 -2
  14. package/dist/api/routes.d.ts +9 -6
  15. package/dist/api/routes.js +11 -11
  16. package/dist/build-root.d.ts +4 -0
  17. package/dist/build-root.js +11 -1
  18. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/integration/provider-rotation.test.ts +35 -47
  19. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/provider-rotation.d.ts +1 -1
  20. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/provider-rotation.js +12 -5
  21. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/provider-rotation.ts +12 -5
  22. package/dist/cli.js +10 -1
  23. package/dist/clients/__tests__/helpers/human-daemon.d.ts +11 -0
  24. package/dist/clients/__tests__/helpers/human-daemon.js +60 -0
  25. package/dist/clients/attach/chrome/canvas-panels.js +1 -1
  26. package/dist/clients/attach/chrome/inbox-strip.d.ts +3 -3
  27. package/dist/clients/attach/chrome/inbox-strip.js +17 -9
  28. package/dist/clients/attach/chrome/ticket-panel.d.ts +2 -2
  29. package/dist/clients/attach/chrome/ticket-panel.js +77 -46
  30. package/dist/clients/attach/overlays/graph.js +6 -9
  31. package/dist/clients/attach/render/chat-view.d.ts +5 -4
  32. package/dist/clients/attach/render/chat-view.js +22 -13
  33. package/dist/clients/attach/render/page-block.d.ts +11 -7
  34. package/dist/clients/attach/render/page-block.js +64 -55
  35. package/dist/clients/attach/viewer.js +757 -746
  36. package/dist/clients/inbox/__tests__/integration/inbox-controller.test.js +56 -56
  37. package/dist/clients/inbox/__tests__/integration/stale-row-activation.test.js +45 -32
  38. package/dist/clients/inbox/controller.d.ts +42 -14
  39. package/dist/clients/inbox/controller.js +240 -124
  40. package/dist/clients/inbox/dto-adapt.d.ts +28 -0
  41. package/dist/clients/inbox/dto-adapt.js +93 -0
  42. package/dist/clients/inbox/page-adapter.d.ts +5 -4
  43. package/dist/clients/inbox/page-adapter.js +12 -12
  44. package/dist/clients/inbox/resolve.d.ts +10 -5
  45. package/dist/clients/inbox/resolve.js +13 -12
  46. package/dist/clients/inbox/review/review-client.d.ts +0 -1
  47. package/dist/clients/inbox/review/review-client.js +0 -4
  48. package/dist/clients/inbox/review-adapter.d.ts +2 -1
  49. package/dist/clients/inbox/review-adapter.js +3 -5
  50. package/dist/clients/inbox/surface.d.ts +2 -2
  51. package/dist/clients/inbox/surface.js +19 -8
  52. package/dist/clients/inbox/tui.d.ts +3 -3
  53. package/dist/commands/__tests__/human.test.js +31 -15
  54. package/dist/commands/__tests__/integration/dashboard-snapshot.test.js +36 -11
  55. package/dist/commands/{sys/__tests__ → __tests__/integration}/migrate.test.js +142 -36
  56. package/dist/commands/__tests__/revive-now-gate.test.js +2 -0
  57. package/dist/commands/api-client.d.ts +5 -4
  58. package/dist/commands/api-client.js +13 -7
  59. package/dist/commands/canvas-history/shared.js +1 -1
  60. package/dist/commands/canvas-history.js +1 -1
  61. package/dist/commands/canvas-roster.js +1 -1
  62. package/dist/commands/canvas.js +1 -2
  63. package/dist/commands/human/feedback.js +20 -17
  64. package/dist/commands/human/prompts.js +45 -36
  65. package/dist/commands/human/queue.js +73 -123
  66. package/dist/commands/human/review.js +6 -16
  67. package/dist/commands/memory/__tests__/command-selector-and-mutation-guards.test.js +2 -0
  68. package/dist/commands/memory/__tests__/memory-list-and-lint-ignore.test.js +2 -0
  69. package/dist/commands/memory/__tests__/repository-root-lint.test.js +2 -0
  70. package/dist/commands/node-inspect-artifacts.js +1 -1
  71. package/dist/commands/node-lifecycle-revive.d.ts +2 -2
  72. package/dist/commands/node-lifecycle-revive.js +9 -19
  73. package/dist/commands/pkg/plugin-manage.js +0 -1
  74. package/dist/commands/profile/show.js +4 -12
  75. package/dist/commands/surface-tmux-spread.js +1 -5
  76. package/dist/commands/sys/__tests__/config-model-ladders.test.js +23 -30
  77. package/dist/commands/sys/__tests__/sync-project-guidance.test.js +37 -11
  78. package/dist/commands/sys/branch.d.ts +2 -0
  79. package/dist/commands/sys/branch.js +19 -0
  80. package/dist/commands/sys/config.js +106 -33
  81. package/dist/commands/sys/daemon.d.ts +2 -0
  82. package/dist/commands/sys/daemon.js +130 -7
  83. package/dist/commands/sys/doctor.js +5 -15
  84. package/dist/commands/sys/migrate.js +21 -92
  85. package/dist/commands/sys/setup-settings-runner.js +4 -2
  86. package/dist/commands/sys.js +2 -15
  87. package/dist/core/__tests__/boot-fault-attempt.test.js +23 -1
  88. package/dist/core/__tests__/boot.test.js +32 -25
  89. package/dist/core/__tests__/broker-launch-candidates.test.js +49 -0
  90. package/dist/core/__tests__/canvas-inbox-watcher-hold.test.js +149 -176
  91. package/dist/core/__tests__/canvas-inbox-watcher-naming.test.js +59 -10
  92. package/dist/core/__tests__/canvas-inbox-watcher.test.js +76 -20
  93. package/dist/core/__tests__/canvas.test.js +18 -47
  94. package/dist/core/__tests__/child-death-wake.test.js +29 -7
  95. package/dist/core/__tests__/cli-help-contract.test.js +2 -0
  96. package/dist/core/__tests__/close.test.js +29 -10
  97. package/dist/core/__tests__/collectible.test.js +2 -1
  98. package/dist/core/__tests__/config-change-delta.test.js +2 -0
  99. package/dist/core/__tests__/context-intro.test.js +13 -1
  100. package/dist/core/__tests__/cron-armed-context-failure.test.js +17 -12
  101. package/dist/core/__tests__/cron-held-settlement.test.js +21 -3
  102. package/dist/core/__tests__/cron-node-sink-parked-root.test.js +29 -10
  103. package/dist/core/__tests__/cron-self-cancel-delivery.test.js +14 -2
  104. package/dist/core/__tests__/cron-timeout-descendants.test.js +13 -1
  105. package/dist/core/__tests__/daemon-boot.test.js +51 -14
  106. package/dist/core/__tests__/fixtures/fake-engine.d.ts +1 -1
  107. package/dist/core/__tests__/fixtures/fake-engine.js +8 -3
  108. package/dist/core/__tests__/focuses.test.js +10 -5
  109. package/dist/core/__tests__/helpers/harness.js +50 -18
  110. package/dist/core/__tests__/history-inbox.test.js +12 -16
  111. package/dist/core/__tests__/human-action-delivery.test.js +48 -28
  112. package/dist/core/__tests__/human-actions.test.js +7 -3
  113. package/dist/core/__tests__/inline-memory-refs.test.js +7 -2
  114. package/dist/core/__tests__/integration/broker-fork-seam.test.js +37 -10
  115. package/dist/core/__tests__/integration/broker-sdk-wiring.test.js +42 -0
  116. package/dist/core/__tests__/integration/broker-snapshot-history.test.js +42 -29
  117. package/dist/core/__tests__/integration/broker-wedge-supervision.test.js +36 -35
  118. package/dist/core/__tests__/integration/command-plugins.test.js +15 -6
  119. package/dist/core/__tests__/integration/deferred-no-wake.test.js +113 -92
  120. package/dist/core/__tests__/integration/fresh-home-commands.test.js +49 -0
  121. package/dist/core/__tests__/integration/host-teardown-process-group.test.js +9 -5
  122. package/dist/core/__tests__/integration/lifecycle-hooks.test.js +16 -3
  123. package/dist/core/__tests__/integration/plugin-revalidate.test.js +4 -0
  124. package/dist/core/__tests__/integration/profile-pause.test.js +4 -4
  125. package/dist/core/__tests__/integration/refresh-stall-recycle.test.js +9 -12
  126. package/dist/core/__tests__/integration/revive.test.js +67 -21
  127. package/dist/core/__tests__/integration/spawn-root.test.js +51 -8
  128. package/dist/core/__tests__/integration/subscription-delivery.test.js +33 -21
  129. package/dist/core/__tests__/integration/worktree-land.test.js +5 -2
  130. package/dist/core/__tests__/integration/worktree-reap.test.js +15 -1
  131. package/dist/core/__tests__/kickoff.test.js +36 -39
  132. package/dist/core/__tests__/lifecycle-terminal-reasons.test.js +2 -1
  133. package/dist/core/__tests__/lifecycle.test.js +2 -1
  134. package/dist/core/__tests__/live-lifecycle-prompt.test.js +13 -1
  135. package/dist/core/__tests__/memory-resolver-precedence.test.js +2 -0
  136. package/dist/core/__tests__/migration.test.js +145 -31
  137. package/dist/core/__tests__/model-pin-durability.test.js +4 -1
  138. package/dist/core/__tests__/model-routes-config.test.js +13 -5
  139. package/dist/core/__tests__/node-outcome.test.js +93 -26
  140. package/dist/core/__tests__/on-read-crouter-home-fence.test.js +2 -1
  141. package/dist/core/__tests__/on-read-dedup-resume.test.js +2 -1
  142. package/dist/core/__tests__/on-read-nested-store.test.js +2 -1
  143. package/dist/core/__tests__/passive-subscription.test.js +50 -157
  144. package/dist/core/__tests__/plugin-kinds.test.js +6 -4
  145. package/dist/core/__tests__/plugin-link-symlinked-scope-root.test.js +6 -1
  146. package/dist/core/__tests__/plugin-page-components.test.js +6 -4
  147. package/dist/core/__tests__/preview-registry-sync.test.js +2 -0
  148. package/dist/core/__tests__/profile-project-memory-delivery.test.js +4 -1
  149. package/dist/core/__tests__/prune.test.js +11 -5
  150. package/dist/core/__tests__/push-final-guard.test.js +14 -7
  151. package/dist/core/__tests__/relaunch-root.test.js +30 -2
  152. package/dist/core/__tests__/remote-canvas-target.test.js +7 -1
  153. package/dist/core/__tests__/repository-root-identity.test.js +4 -0
  154. package/dist/core/__tests__/review-model-floor.test.js +6 -3
  155. package/dist/core/__tests__/revive-all.test.js +13 -3
  156. package/dist/core/__tests__/revive-capacity.test.js +26 -4
  157. package/dist/core/__tests__/revive-parked-fresh.test.js +31 -8
  158. package/dist/core/__tests__/seam/broker-attach-stream.test.js +1 -1
  159. package/dist/core/__tests__/seam/broker-cap-freeze.test.js +4 -3
  160. package/dist/core/__tests__/seam/broker-crash-teardown.test.js +11 -14
  161. package/dist/core/__tests__/seam/broker-provider-retry.test.js +85 -71
  162. package/dist/core/__tests__/seam/dormancy-release.test.js +33 -19
  163. package/dist/core/__tests__/seam/held-deferred-human-prompt.test.js +7 -5
  164. package/dist/core/__tests__/seam/inbox-reference-guidance.test.js +20 -6
  165. package/dist/core/__tests__/seam/node-outcome-delivery.test.js +27 -3
  166. package/dist/core/__tests__/spawn-worktree-id-conflict.test.js +2 -1
  167. package/dist/core/__tests__/stop-guard.test.js +2 -1
  168. package/dist/core/__tests__/subscription-pool-credential-guard.test.js +4 -3
  169. package/dist/core/__tests__/warm-claim-preference-snapshot.test.js +18 -4
  170. package/dist/core/__tests__/yield-ensures-daemon.test.js +2 -1
  171. package/dist/core/bootstrap.js +2 -0
  172. package/dist/core/broker-client/__tests__/transport-socket.test.js +51 -6
  173. package/dist/core/broker-client/transport-socket.d.ts +1 -0
  174. package/dist/core/broker-client/transport-socket.js +13 -5
  175. package/dist/core/canvas/__tests__/attention.test.js +29 -35
  176. package/dist/core/canvas/__tests__/history-transcript.test.js +6 -6
  177. package/dist/core/canvas/__tests__/render-remote.test.js +25 -9
  178. package/dist/core/canvas/attention.d.ts +2 -5
  179. package/dist/core/canvas/attention.js +15 -64
  180. package/dist/core/canvas/boot.d.ts +6 -7
  181. package/dist/core/canvas/boot.js +5 -9
  182. package/dist/core/canvas/canvas.d.ts +13 -109
  183. package/dist/core/canvas/canvas.js +140 -401
  184. package/dist/core/canvas/crons.d.ts +2 -0
  185. package/dist/core/canvas/crons.js +16 -15
  186. package/dist/core/canvas/daemon-owner.js +10 -0
  187. package/dist/core/canvas/db.d.ts +2 -2
  188. package/dist/core/canvas/db.js +2 -18
  189. package/dist/core/canvas/deliveries.d.ts +104 -0
  190. package/dist/core/canvas/deliveries.js +354 -0
  191. package/dist/core/canvas/executions.d.ts +29 -0
  192. package/dist/core/canvas/executions.js +68 -0
  193. package/dist/core/canvas/history.js +35 -35
  194. package/dist/core/canvas/index.d.ts +3 -1
  195. package/dist/core/canvas/index.js +3 -1
  196. package/dist/core/canvas/migrations.js +20 -12
  197. package/dist/core/canvas/nav-model.js +1 -3
  198. package/dist/core/canvas/nav-render.d.ts +4 -4
  199. package/dist/core/canvas/nav-render.js +11 -21
  200. package/dist/core/canvas/node-sql-migration.d.ts +3 -0
  201. package/dist/core/canvas/node-sql-migration.js +261 -0
  202. package/dist/core/canvas/paths.d.ts +2 -16
  203. package/dist/core/canvas/paths.js +2 -31
  204. package/dist/core/canvas/recovery.d.ts +76 -0
  205. package/dist/core/canvas/recovery.js +588 -0
  206. package/dist/core/canvas/remote-canvas-source.js +4 -0
  207. package/dist/core/canvas/render-source.d.ts +16 -27
  208. package/dist/core/canvas/render-source.js +16 -45
  209. package/dist/core/canvas/sessions.d.ts +33 -0
  210. package/dist/core/canvas/sessions.js +78 -0
  211. package/dist/core/canvas/types.d.ts +33 -33
  212. package/dist/core/canvas/types.js +2 -5
  213. package/dist/core/canvas/waits.d.ts +18 -0
  214. package/dist/core/canvas/waits.js +70 -0
  215. package/dist/core/canvas/worktrees.d.ts +40 -0
  216. package/dist/core/canvas/worktrees.js +93 -0
  217. package/dist/core/command.js +11 -0
  218. package/dist/core/config.d.ts +17 -12
  219. package/dist/core/config.js +106 -155
  220. package/dist/core/feed/__tests__/inbox-migrate.test.js +27 -31
  221. package/dist/core/feed/feed.d.ts +0 -6
  222. package/dist/core/feed/feed.js +68 -56
  223. package/dist/core/feed/inbox.d.ts +7 -81
  224. package/dist/core/feed/inbox.js +46 -378
  225. package/dist/core/feed/messages.d.ts +58 -0
  226. package/dist/core/feed/messages.js +217 -0
  227. package/dist/core/fs-utils.d.ts +4 -0
  228. package/dist/core/fs-utils.js +21 -1
  229. package/dist/core/human/answer.d.ts +1 -1
  230. package/dist/core/human/answer.js +1 -1
  231. package/dist/core/human/claim.d.ts +1 -1
  232. package/dist/core/human/claim.js +2 -4
  233. package/dist/core/human/component-docs.js +1 -1
  234. package/dist/core/human/feedback-companion.js +3 -2
  235. package/dist/core/human/feedback.d.ts +5 -8
  236. package/dist/core/human/feedback.js +57 -85
  237. package/dist/core/human/page-authoring.d.ts +30 -0
  238. package/dist/core/human/page-authoring.js +19 -0
  239. package/dist/core/human/requests.d.ts +136 -0
  240. package/dist/core/human/requests.js +515 -0
  241. package/dist/core/human/root.d.ts +0 -7
  242. package/dist/core/human/root.js +0 -17
  243. package/dist/core/human/scan.d.ts +2 -7
  244. package/dist/core/human/scan.js +48 -132
  245. package/dist/core/human/summary.d.ts +1 -1
  246. package/dist/core/human/summary.js +1 -1
  247. package/dist/core/human/tickets.d.ts +23 -83
  248. package/dist/core/human/tickets.js +92 -243
  249. package/dist/core/human/types.d.ts +5 -1
  250. package/dist/core/installed-plugins.js +8 -3
  251. package/dist/core/keybindings/__tests__/resolve.test.js +19 -17
  252. package/dist/core/locked-file.d.ts +6 -3
  253. package/dist/core/locked-file.js +36 -9
  254. package/dist/core/memory/extensions.js +2 -0
  255. package/dist/core/preview-registry.js +0 -1
  256. package/dist/core/profiles/__tests__/env-store.test.js +2 -0
  257. package/dist/core/profiles/default-binding.d.ts +0 -4
  258. package/dist/core/profiles/default-binding.js +12 -58
  259. package/dist/core/profiles/env-store.js +8 -3
  260. package/dist/core/profiles/manifest.d.ts +2 -37
  261. package/dist/core/profiles/manifest.js +35 -161
  262. package/dist/core/profiles/select.js +3 -0
  263. package/dist/core/review/__tests__/capture-origin.test.js +13 -2
  264. package/dist/core/review/__tests__/comments.test.js +28 -10
  265. package/dist/core/review/__tests__/remap.test.js +28 -10
  266. package/dist/core/review/__tests__/stage-identity.test.js +17 -7
  267. package/dist/core/review/birth.d.ts +1 -1
  268. package/dist/core/review/birth.js +34 -5
  269. package/dist/core/review/comments.js +1 -1
  270. package/dist/core/review/document.js +1 -1
  271. package/dist/core/review/project.d.ts +5 -1
  272. package/dist/core/review/project.js +14 -36
  273. package/dist/core/review/realize.d.ts +3 -6
  274. package/dist/core/review/realize.js +51 -168
  275. package/dist/core/review/remap.js +1 -1
  276. package/dist/core/review/stage.d.ts +3 -2
  277. package/dist/core/review/stage.js +2 -3
  278. package/dist/core/review/store.d.ts +3 -21
  279. package/dist/core/review/store.js +140 -186
  280. package/dist/core/review/types.d.ts +0 -1
  281. package/dist/core/runtime/__tests__/install-id-cache-scoping.test.js +9 -5
  282. package/dist/core/runtime/__tests__/spawn-env.test.js +8 -9
  283. package/dist/core/runtime/broker/auth-reload.js +9 -10
  284. package/dist/core/runtime/broker/daemon-ops.d.ts +25 -8
  285. package/dist/core/runtime/broker/daemon-ops.js +42 -9
  286. package/dist/core/runtime/broker/extension-abort.d.ts +3 -0
  287. package/dist/core/runtime/broker/extension-abort.js +11 -0
  288. package/dist/core/runtime/broker/fault-retry.d.ts +15 -6
  289. package/dist/core/runtime/broker/fault-retry.js +142 -95
  290. package/dist/core/runtime/broker/inbox.d.ts +4 -32
  291. package/dist/core/runtime/broker/inbox.js +4 -92
  292. package/dist/core/runtime/broker/rebind.d.ts +1 -0
  293. package/dist/core/runtime/broker/rebind.js +21 -12
  294. package/dist/core/runtime/broker-persona-guidance.d.ts +1 -1
  295. package/dist/core/runtime/broker-persona-guidance.js +2 -13
  296. package/dist/core/runtime/broker.js +28 -22
  297. package/dist/core/runtime/close.d.ts +3 -9
  298. package/dist/core/runtime/close.js +16 -27
  299. package/dist/core/runtime/fault.d.ts +3 -93
  300. package/dist/core/runtime/fault.js +9 -419
  301. package/dist/core/runtime/kickoff.d.ts +3 -6
  302. package/dist/core/runtime/kickoff.js +12 -18
  303. package/dist/core/runtime/launch.js +1 -1
  304. package/dist/core/runtime/lifecycle.js +40 -7
  305. package/dist/core/runtime/placement.js +2 -2
  306. package/dist/core/runtime/recycle.js +8 -2
  307. package/dist/core/runtime/reset.js +22 -6
  308. package/dist/core/runtime/revive.js +226 -218
  309. package/dist/core/runtime/spawn.js +14 -3
  310. package/dist/core/scoped-state/db.d.ts +18 -0
  311. package/dist/core/scoped-state/db.js +135 -0
  312. package/dist/core/scoped-state/migrate.d.ts +8 -0
  313. package/dist/core/scoped-state/migrate.js +181 -0
  314. package/dist/core/scoped-state/paths.d.ts +9 -0
  315. package/dist/core/scoped-state/paths.js +27 -0
  316. package/dist/core/scoped-state/profiles.d.ts +12 -0
  317. package/dist/core/scoped-state/profiles.js +62 -0
  318. package/dist/core/scoped-state/providers.d.ts +16 -0
  319. package/dist/core/scoped-state/providers.js +8 -0
  320. package/dist/core/scoped-state/schema.d.ts +3 -0
  321. package/dist/core/scoped-state/schema.js +26 -0
  322. package/dist/core/scoped-state/settings.d.ts +28 -0
  323. package/dist/core/scoped-state/settings.js +82 -0
  324. package/dist/core/subscription-state.d.ts +29 -48
  325. package/dist/core/subscription-state.js +176 -712
  326. package/dist/core/worktree-close.js +4 -4
  327. package/dist/core/worktree-mutation-async.js +2 -2
  328. package/dist/core/worktree-sweep.js +11 -16
  329. package/dist/core/worktree.js +6 -12
  330. package/dist/daemon/__tests__/autostart-storm.test.js +1 -39
  331. package/dist/daemon/__tests__/helpers/source-daemon.d.ts +2 -2
  332. package/dist/daemon/__tests__/helpers/source-daemon.js +7 -6
  333. package/dist/daemon/__tests__/integration/migration-startup.test.js +59 -26
  334. package/dist/daemon/__tests__/node-deadline-lane.test.js +2 -1
  335. package/dist/daemon/__tests__/node-outcome-birth-invariants.test.js +39 -15
  336. package/dist/daemon/__tests__/node-outcome-delivery.test.js +39 -10
  337. package/dist/daemon/__tests__/reconciler-signature.test.js +2 -2
  338. package/dist/daemon/__tests__/subtree-filter-freshness.test.js +2 -2
  339. package/dist/daemon/api/__tests__/broker-settle-park.test.js +17 -12
  340. package/dist/daemon/api/__tests__/canvas-snapshot-fields.test.js +27 -5
  341. package/dist/daemon/api/__tests__/model-config.test.js +8 -8
  342. package/dist/daemon/api/__tests__/node-create-description.test.js +22 -5
  343. package/dist/daemon/api/__tests__/node-model-validation.test.js +21 -1
  344. package/dist/daemon/api/__tests__/nodes-activity-query.test.js +10 -12
  345. package/dist/daemon/api/__tests__/profile-launch-gates.test.js +4 -1
  346. package/dist/daemon/api/__tests__/profile-metadata-route.test.js +4 -1
  347. package/dist/daemon/api/__tests__/reopen-delivery.test.js +26 -8
  348. package/dist/daemon/api/__tests__/seam/api-server.test.js +24 -32
  349. package/dist/daemon/api/__tests__/seam/b10-attach-modelauth.test.js +4 -1
  350. package/dist/daemon/api/__tests__/seam/leaf-api-parity.test.js +5 -4
  351. package/dist/daemon/api/__tests__/seam/profile-delete.test.js +27 -41
  352. package/dist/daemon/api/__tests__/submit-result.test.js +3 -2
  353. package/dist/daemon/api/bridge.js +1 -1
  354. package/dist/daemon/api/handlers/bash-jobs.js +6 -7
  355. package/dist/daemon/api/handlers/broker-ops.js +47 -84
  356. package/dist/daemon/api/handlers/broker-recovery.d.ts +4 -0
  357. package/dist/daemon/api/handlers/broker-recovery.js +251 -0
  358. package/dist/daemon/api/handlers/canvas.js +2 -44
  359. package/dist/daemon/api/handlers/daemon.js +41 -0
  360. package/dist/daemon/api/handlers/feedback-comments.js +2 -2
  361. package/dist/daemon/api/handlers/health.js +10 -5
  362. package/dist/daemon/api/handlers/human-requests.js +168 -188
  363. package/dist/daemon/api/handlers/human.js +3 -151
  364. package/dist/daemon/api/handlers/inbox-page.d.ts +4 -0
  365. package/dist/daemon/api/handlers/inbox-page.js +89 -0
  366. package/dist/daemon/api/handlers/inbox.js +21 -120
  367. package/dist/daemon/api/handlers/messages.d.ts +1 -0
  368. package/dist/daemon/api/handlers/messages.js +73 -15
  369. package/dist/daemon/api/handlers/node-outcomes.js +58 -13
  370. package/dist/daemon/api/handlers/nodes.js +7 -13
  371. package/dist/daemon/api/handlers/reviews.js +4 -29
  372. package/dist/daemon/api/map.d.ts +25 -3
  373. package/dist/daemon/api/map.js +84 -14
  374. package/dist/daemon/api/server.js +68 -9
  375. package/dist/daemon/control.d.ts +18 -0
  376. package/dist/daemon/cron/disposition.d.ts +2 -0
  377. package/dist/daemon/cron/disposition.js +8 -5
  378. package/dist/daemon/cron/settle.js +37 -13
  379. package/dist/daemon/cron/sinks.d.ts +18 -1
  380. package/dist/daemon/cron/sinks.js +47 -93
  381. package/dist/daemon/crtrd-cli.js +4 -19
  382. package/dist/daemon/crtrd.d.ts +2 -0
  383. package/dist/daemon/crtrd.js +206 -81
  384. package/dist/daemon/fleet.js +5 -6
  385. package/dist/daemon/human/finish.d.ts +12 -24
  386. package/dist/daemon/human/finish.js +88 -285
  387. package/dist/daemon/human/settle.d.ts +40 -0
  388. package/dist/daemon/human/settle.js +89 -0
  389. package/dist/daemon/human/sweep.d.ts +20 -5
  390. package/dist/daemon/human/sweep.js +56 -60
  391. package/dist/daemon/manage.d.ts +21 -16
  392. package/dist/daemon/manage.js +85 -51
  393. package/dist/daemon/messaging/node-message.d.ts +1 -1
  394. package/dist/daemon/messaging/node-message.js +9 -12
  395. package/dist/daemon/park-activity.js +3 -3
  396. package/dist/daemon/reconcilers/bash-deadline.js +6 -7
  397. package/dist/daemon/reconcilers/broker-supervision.d.ts +1 -1
  398. package/dist/daemon/reconcilers/broker-supervision.js +41 -19
  399. package/dist/daemon/reconcilers/controller-death.js +6 -18
  400. package/dist/daemon/reconcilers/delivery-lane.d.ts +9 -0
  401. package/dist/daemon/reconcilers/delivery-lane.js +130 -0
  402. package/dist/daemon/reconcilers/live-obligation.js +3 -3
  403. package/dist/daemon/reconcilers/node-deadline.js +1 -1
  404. package/dist/daemon/reconcilers/node-lifecycle/freeze-lane.d.ts +1 -1
  405. package/dist/daemon/reconcilers/node-lifecycle/freeze-lane.js +10 -12
  406. package/dist/daemon/reconcilers/node-lifecycle/tick.js +5 -5
  407. package/dist/daemon/reconcilers/node-lifecycle/wants-execution.js +1 -1
  408. package/dist/daemon/reconcilers/pending-review-submit.js +3 -3
  409. package/dist/daemon/reconcilers/storage-maintenance.d.ts +2 -8
  410. package/dist/daemon/reconcilers/storage-maintenance.js +13 -43
  411. package/dist/daemon/review/companion.js +5 -11
  412. package/dist/daemon/review/deliver.d.ts +1 -5
  413. package/dist/daemon/review/deliver.js +3 -52
  414. package/dist/daemon/review/finish.d.ts +2 -27
  415. package/dist/daemon/review/finish.js +79 -263
  416. package/dist/daemon/review/sweep.d.ts +3 -10
  417. package/dist/daemon/review/sweep.js +13 -131
  418. package/dist/daemon/startup-policy.d.ts +0 -5
  419. package/dist/daemon/startup-policy.js +0 -5
  420. package/dist/index.d.ts +2 -1
  421. package/dist/index.js +1 -1
  422. package/dist/migrations/__tests__/activation-concurrency.test.js +3 -2
  423. package/dist/migrations/__tests__/activation.test.js +9 -6
  424. package/dist/migrations/activation.d.ts +3 -2
  425. package/dist/migrations/activation.js +2 -4
  426. package/dist/migrations/corpus.d.ts +2 -5
  427. package/dist/migrations/corpus.js +9 -20
  428. package/dist/migrations/runner.d.ts +3 -1
  429. package/dist/migrations/runner.js +6 -2
  430. package/dist/pi-extensions/__tests__/canvas-context-intro.test.js +21 -89
  431. package/dist/pi-extensions/__tests__/canvas-goal-capture-envelope.test.js +4 -2
  432. package/dist/pi-extensions/__tests__/canvas-stophook-agentend.test.js +51 -33
  433. package/dist/pi-extensions/__tests__/canvas-stophook-context-nudge.test.js +16 -2
  434. package/dist/pi-extensions/__tests__/pre-command-gate.test.js +13 -1
  435. package/dist/pi-extensions/canvas-inbox-watcher.js +98 -244
  436. package/dist/pi-extensions/canvas-passive-context.d.ts +4 -8
  437. package/dist/pi-extensions/canvas-passive-context.js +85 -37
  438. package/dist/pi-extensions/canvas-stophook.js +47 -31
  439. package/dist/shared/env.d.ts +1 -0
  440. package/dist/shared/env.js +3 -0
  441. package/package.json +1 -1
  442. package/runtime.lock.json +5 -5
  443. package/dist/clients/attach/__tests__/page-block.test.js +0 -54
  444. package/dist/clients/inbox/review-visibility.d.ts +0 -5
  445. package/dist/clients/inbox/review-visibility.js +0 -19
  446. package/dist/commands/canvas-rebuild-index.d.ts +0 -2
  447. package/dist/commands/canvas-rebuild-index.js +0 -46
  448. package/dist/core/__tests__/human-cancel-guard.test.js +0 -110
  449. package/dist/core/__tests__/human-deliver.test.js +0 -256
  450. package/dist/core/__tests__/human-node-not-supervised.test.d.ts +0 -1
  451. package/dist/core/__tests__/human-node-not-supervised.test.js +0 -89
  452. package/dist/core/__tests__/integration/human-deliver-e2e.test.d.ts +0 -1
  453. package/dist/core/__tests__/integration/human-deliver-e2e.test.js +0 -131
  454. package/dist/core/__tests__/phase4-review-store.test.d.ts +0 -1
  455. package/dist/core/__tests__/phase4-review-store.test.js +0 -144
  456. package/dist/core/__tests__/watchdog-abort-arms-retry.test.d.ts +0 -1
  457. package/dist/core/__tests__/watchdog-abort-arms-retry.test.js +0 -110
  458. package/dist/core/canvas/human-deliveries.d.ts +0 -39
  459. package/dist/core/canvas/human-deliveries.js +0 -75
  460. package/dist/core/canvas/node-outcome-deliveries.d.ts +0 -64
  461. package/dist/core/canvas/node-outcome-deliveries.js +0 -159
  462. package/dist/core/feed/passive.d.ts +0 -3
  463. package/dist/core/feed/passive.js +0 -53
  464. package/dist/core/human/__tests__/inbox-cancel-worker.d.ts +0 -1
  465. package/dist/core/human/__tests__/inbox-cancel-worker.js +0 -7
  466. package/dist/core/human/__tests__/inbox-claim-worker.d.ts +0 -1
  467. package/dist/core/human/__tests__/inbox-claim-worker.js +0 -17
  468. package/dist/core/human/__tests__/inbox-stale-claim-worker.d.ts +0 -1
  469. package/dist/core/human/__tests__/inbox-stale-claim-worker.js +0 -8
  470. package/dist/core/human/__tests__/integration/inbox-core.test.d.ts +0 -1
  471. package/dist/core/human/__tests__/integration/inbox-core.test.js +0 -145
  472. package/dist/core/human/__tests__/page-tickets.test.d.ts +0 -1
  473. package/dist/core/human/__tests__/page-tickets.test.js +0 -161
  474. package/dist/core/review/ticket-filter.d.ts +0 -17
  475. package/dist/core/review/ticket-filter.js +0 -21
  476. package/dist/core/runtime/broker/passive.d.ts +0 -17
  477. package/dist/core/runtime/broker/passive.js +0 -44
  478. package/dist/core/runtime/busy.d.ts +0 -46
  479. package/dist/core/runtime/busy.js +0 -150
  480. package/dist/daemon/__tests__/startup-block-marker.test.d.ts +0 -1
  481. package/dist/daemon/__tests__/startup-block-marker.test.js +0 -86
  482. package/dist/daemon/api/__tests__/review-terminal-conflict.test.d.ts +0 -1
  483. package/dist/daemon/api/__tests__/review-terminal-conflict.test.js +0 -98
  484. package/dist/daemon/human/deliver-action.d.ts +0 -3
  485. package/dist/daemon/human/deliver-action.js +0 -9
  486. package/dist/daemon/node-outcome/deliver-outcome.d.ts +0 -3
  487. package/dist/daemon/node-outcome/deliver-outcome.js +0 -9
  488. package/dist/daemon/reconcilers/human-delivery-lane.d.ts +0 -10
  489. package/dist/daemon/reconcilers/human-delivery-lane.js +0 -41
  490. package/dist/daemon/reconcilers/node-outcome-delivery-lane.d.ts +0 -10
  491. package/dist/daemon/reconcilers/node-outcome-delivery-lane.js +0 -41
  492. package/dist/daemon/startup-block-marker.d.ts +0 -25
  493. package/dist/daemon/startup-block-marker.js +0 -99
  494. /package/dist/{clients/attach/__tests__/page-block.test.d.ts → api/dto/mail.js} +0 -0
  495. /package/dist/{commands/sys/__tests__/migrate.test.d.ts → api/dto/recovery.js} +0 -0
  496. /package/dist/{core/__tests__/human-cancel-guard.test.d.ts → commands/__tests__/integration/migrate.test.d.ts} +0 -0
  497. /package/dist/core/__tests__/{human-deliver.test.d.ts → integration/fresh-home-commands.test.d.ts} +0 -0
@@ -1,66 +1,22 @@
1
- // attention.ts — pending human-ticket counters across the canvas.
2
- //
3
- // Reply-bearing tickets carry an explicit bridge route. The bridge's parent is
4
- // the asking node; standalone pages have no bridge and do not contribute to a
5
- // node's pending-reply count.
6
- import { scanInbox } from '../human/scan.js';
7
- import { filterTerminalReviewTickets } from '../review/ticket-filter.js';
8
- import { readTicketReplyRoute } from '../human/convention.js';
1
+ // Pending human-request counters across the canvas. The indexed request query is the authority; request directories are retained artifacts, never an inbox index.
2
+ import { listOpenReplyBearingRequests } from '../human/requests.js';
9
3
  import { getNode, listNodes, view } from './canvas.js';
10
- function askingNodeId(ticketDir) {
11
- const replyRoute = readTicketReplyRoute(ticketDir);
12
- if (replyRoute === null)
13
- return null;
14
- const bridge = getNode(replyRoute.bridge_node_id);
15
- if (bridge === null)
16
- return null;
17
- return bridge.parent ?? bridge.node_id;
18
- }
19
- /** `scanInbox` walks EVERY node dir under `<canvas>/nodes` (thousands on a large
20
- * canvas, ~50ms) and returns the same map for every caller in a moment, yet the
21
- * per-node/per-view count reads fan out — the canvas browser alone asks once per
22
- * forest root (hundreds of calls per snapshot). Uncached, that serialized
23
- * crtrd's single-threaded event loop behind minutes of identical disk walks and
24
- * stalled the browse open. One walk per window serves the whole burst; a ticket
25
- * raised or answered inside the window badges on the next one (the viewers that
26
- * read this poll on a multi-second cadence). */
27
- const TICKET_COUNT_TTL_MS = 1000;
28
- let ticketCountCache = null;
29
- /** Drop the cached walk. Callers that swap the canvas home out from under a live
30
- * process (tests, and any in-process home switch) must call this: the cache is
31
- * keyed only by time, so a stale window would otherwise serve the old home's
32
- * counts. */
33
- export function invalidateTicketCounts() {
34
- ticketCountCache = null;
35
- }
4
+ /** Kept for callers that reset a canvas home in process. SQL has no directory-scan cache to invalidate. */
5
+ export function invalidateTicketCounts() { }
36
6
  function ticketSubjects() {
37
- const now = Date.now();
38
- if (ticketCountCache !== null && now - ticketCountCache.at < TICKET_COUNT_TTL_MS) {
39
- return ticketCountCache.subjects;
40
- }
41
7
  const subjects = new Map();
42
- try {
43
- for (const ticket of filterTerminalReviewTickets(scanInbox())) {
44
- const nodeId = askingNodeId(ticket.dir);
45
- if (nodeId === null)
46
- continue;
47
- const list = subjects.get(nodeId);
48
- if (list === undefined)
49
- subjects.set(nodeId, [ticket.title]);
50
- else
51
- list.push(ticket.title);
52
- }
8
+ for (const request of listOpenReplyBearingRequests()) {
9
+ const nodeId = request.requester_node_id;
10
+ const list = subjects.get(nodeId);
11
+ if (list === undefined)
12
+ subjects.set(nodeId, [request.title]);
13
+ else
14
+ list.push(request.title);
53
15
  }
54
- catch {
55
- // An unavailable ticket store or absent root has no display consequence.
56
- }
57
- ticketCountCache = { at: Date.now(), subjects };
58
16
  return subjects;
59
17
  }
60
18
  /** Count pending tickets asked by one node. */
61
- export function countTickets(nodeId) {
62
- return ticketSubjects().get(nodeId)?.length ?? 0;
63
- }
19
+ export function countTickets(nodeId) { return ticketSubjects().get(nodeId)?.length ?? 0; }
64
20
  /** Pending tickets for every reachable asking node, including the root. */
65
21
  export function pendingTicketsForView(rootId) {
66
22
  const found = ticketSubjects();
@@ -68,19 +24,15 @@ export function pendingTicketsForView(rootId) {
68
24
  for (const id of [rootId, ...view(rootId)]) {
69
25
  const node = getNode(id);
70
26
  const subjects = found.get(id) ?? [];
71
- if (node !== null && subjects.length > 0) {
27
+ if (node !== null && subjects.length > 0)
72
28
  entries.push({ node_id: id, name: node.name, cwd: node.cwd, count: subjects.length, subjects });
73
- }
74
29
  }
75
30
  return entries;
76
31
  }
77
32
  /** Per-node pending ticket counts for an explicit node set. */
78
33
  export function ticketCountsForNodes(ids) {
79
34
  const found = ticketSubjects();
80
- const counts = {};
81
- for (const id of ids)
82
- counts[id] = found.get(id)?.length ?? 0;
83
- return counts;
35
+ return Object.fromEntries(ids.map((id) => [id, found.get(id)?.length ?? 0]));
84
36
  }
85
37
  /** Pending tickets across the entire canvas, attributed to asking nodes. */
86
38
  export function ticketsAcrossCanvas() {
@@ -88,9 +40,8 @@ export function ticketsAcrossCanvas() {
88
40
  const entries = [];
89
41
  for (const node of listNodes()) {
90
42
  const subjects = found.get(node.node_id) ?? [];
91
- if (subjects.length > 0) {
43
+ if (subjects.length > 0)
92
44
  entries.push({ node_id: node.node_id, name: node.name, cwd: node.cwd, count: subjects.length, subjects });
93
- }
94
45
  }
95
46
  return entries;
96
47
  }
@@ -65,12 +65,11 @@ export interface BootReconcileResult {
65
65
  * `current` defaults to the real identity; tests inject a synthetic one against
66
66
  * an isolated CRTR_HOME to simulate a boot change without a real reboot. */
67
67
  export declare function reconcileBootLiveness(current?: BootIdentity): BootReconcileResult;
68
- /** The one-time legacy pid-identity migration, injected into the startup
69
- * composition. In production this is `migrateLegacyPidIdentities` from
70
- * canvas.ts; it is a parameter (not a direct import) because canvas.ts already
71
- * depends on pid.ts which depends on this module — injecting it keeps the
72
- * dependency one-directional and lets tests exercise this exact composition. */
73
- export type MigrateLegacyPidIdentities = (captureIdentity?: (pid: number) => string | undefined) => {
68
+ /** The one-time execution-identity migration, injected into the startup
69
+ * composition. In production this is `migrateLegacyExecutionIdentities` from
70
+ * executions.ts. It remains injected so tests can exercise this composition
71
+ * without reaching process inspection. */
72
+ export type MigrateLegacyExecutionIdentities = (captureIdentity?: (pid: number) => string | undefined) => {
74
73
  migrated: string[];
75
74
  };
76
75
  export interface BootStartupResult {
@@ -90,4 +89,4 @@ export interface BootStartupResult {
90
89
  *
91
90
  * `migrate` is injected (see `MigrateLegacyPidIdentities`); `current` and
92
91
  * `captureIdentity` pass through to the two steps for test injection. */
93
- export declare function reconcileAndMigrateBoot(migrate: MigrateLegacyPidIdentities, current?: BootIdentity, captureIdentity?: (pid: number) => string | undefined): BootStartupResult;
92
+ export declare function reconcileAndMigrateBoot(migrate: MigrateLegacyExecutionIdentities, current?: BootIdentity, captureIdentity?: (pid: number) => string | undefined): BootStartupResult;
@@ -146,18 +146,14 @@ export function reconcileBootLiveness(current = currentBootIdentity()) {
146
146
  return { changed: false, cleared: [], sameBootProven };
147
147
  }
148
148
  const rows = db
149
- .prepare('SELECT node_id FROM nodes WHERE pi_pid IS NOT NULL')
149
+ .prepare("SELECT execution_id, node_id FROM executions WHERE state != 'exited'")
150
150
  .all();
151
- // Clear the launch-time identity baseline
152
- // alongside `pi_pid` — a boot resets the OS process table, so any recorded
153
- // identity is as meaningless as the pid it was captured for; leaving it
154
- // behind would let a coincidentally-reused pid on the NEW boot compare
155
- // against a stale baseline from the OLD one.
156
- const upd = db.prepare('UPDATE nodes SET pi_pid = NULL, pi_pid_identity = NULL WHERE node_id = ?');
151
+ const ended = db.prepare("UPDATE executions SET state = 'exited', ended_at = ?, exit_reason = 'boot-change' WHERE execution_id = ? AND state != 'exited'");
157
152
  const cleared = [];
153
+ const at = new Date().toISOString();
158
154
  for (const row of rows) {
159
- upd.run(row.node_id);
160
- cleared.push(row.node_id);
155
+ if (ended.run(at, row.execution_id).changes > 0)
156
+ cleared.push(row.node_id);
161
157
  }
162
158
  writeBootMarker(db, current);
163
159
  db.exec('COMMIT');
@@ -1,8 +1,4 @@
1
- import type { NodeMeta, NodeIdentity, NodeRow, NodeStatus, ExitIntent, SubscriptionRef, Mode, Lifecycle, TerminalReason, NodeOutcomeKind } from './types.js';
2
- /** Seed a node's row at BIRTH: identity columns + runtime columns taken from the
3
- * incoming meta (defaults: status='active', the rest null). The only writer
4
- * that sets runtime columns alongside identity in one statement — afterwards
5
- * the atomic setters are the sole runtime writers. */
1
+ import type { ExitIntent, Lifecycle, Mode, NodeIdentity, NodeMemoryTarget, NodeMeta, NodeOutcomeKind, NodeRow, NodeStatus, SubscriptionRef, TerminalReason } from './types.js';
6
2
  export interface OutcomeDeliveryBinding {
7
3
  actionName: string;
8
4
  argv: string[];
@@ -10,13 +6,11 @@ export interface OutcomeDeliveryBinding {
10
6
  configOrigin: string;
11
7
  payload?: unknown;
12
8
  }
13
- /** Create a node: scaffold its dirs, persist identity to meta.json, and seed the
14
- * row (identity + runtime from the incoming meta). Returns the hydrated view. */
9
+ /** Create a SQL-authoritative node, then ensure its artifact directories exist. */
15
10
  export declare function createNode(meta: NodeMeta, opts?: {
16
11
  outcomeDelivery?: OutcomeDeliveryBinding;
17
12
  }): NodeMeta;
18
- /** The canonical node record: durable identity (meta.json) ∪ authoritative
19
- * runtime (the row). Null if unknown. */
13
+ /** The canonical node record, hydrated from SQL. Null if unknown. */
20
14
  export declare function getNode(nodeId: string): NodeMeta | null;
21
15
  export declare function canonicalSessionFile(sessionFile: string): string;
22
16
  /** Resolve the crouter node that owns one exact Pi session file. */
@@ -34,11 +28,9 @@ export declare function dueNodeDeadlines(nowIso: string): NodeRow[];
34
28
  export declare function setNodeDeadline(nodeId: string, deadlineAt: string | null): boolean;
35
29
  /** Shift active/idle profile deadlines by a completed profile pause duration. */
36
30
  export declare function shiftProfileNodeDeadlines(profileId: string, pauseDurationMs: number): number;
37
- /** Merge an IDENTITY patch into a node's meta.json and re-index its identity
38
- * columns. Identity has a single writer per node, so this read-modify-write is
39
- * safe (the contended runtime fields were moved out — see the atomic setters
40
- * below). Returns the hydrated view (runtime included). */
41
- export declare function updateNode(nodeId: string, patch: Partial<NodeIdentity>): NodeMeta;
31
+ type NodeUpdate = Partial<Omit<NodeIdentity, 'node_id' | 'pi_session_id' | 'pi_session_file' | 'managed_worktree'>>;
32
+ /** Update node identity/configuration columns. Sessions and worktrees have named stores. */
33
+ export declare function updateNode(nodeId: string, patch: NodeUpdate): NodeMeta;
42
34
  /** Set a node's status. Atomic single-column write. */
43
35
  export declare function setStatus(nodeId: string, status: NodeStatus): void;
44
36
  /** Set a node's exit intent. Atomic single-column write. */
@@ -88,25 +80,6 @@ export declare function setPresence(nodeId: string, presence: {
88
80
  window?: string | null;
89
81
  pane?: string | null;
90
82
  }): void;
91
- /** Record the live pi pid (daemon liveness signal) PLUS its launch-time
92
- * identity fingerprint, in one atomic write:
93
- * `capturePidIdentities([pid])` is a signal-0-adjacent `ps -p <pid>` probe
94
- * taken RIGHT NOW, while `pid` is the process we just spawned/bound and
95
- * therefore definitely still exists — this is the LAUNCH-time baseline
96
- * `headlessBrokerHost.teardown()` later compares against before signaling
97
- * anything. A failed probe (rare — `ps` itself misbehaving) or a probe that
98
- * finds no row for `pid` (raced away in the instant between spawn and this
99
- * call) both write `NULL`: no baseline recorded, so the teardown guard fails
100
- * open exactly like a node booted before this column existed — never a false
101
- * identity that could itself cause a false mismatch later. */
102
- export declare function recordPid(nodeId: string, pid: number): void;
103
- /** Clear the pi pid (window-backed relaunch, before the fresh pi re-records it)
104
- * AND its recorded launch-time identity — the two are written together by
105
- * `recordPid` and must be cleared together, or a subsequent relaunch that
106
- * reuses the pid namespace could compare its own fresh pid against a STALE
107
- * identity left over from the pid this row held before. */
108
- export declare function clearRecordedPid(nodeId: string): void;
109
- export declare const clearPid: typeof clearRecordedPid;
110
83
  export declare function recordLaunch(nodeId: string, at: string): void;
111
84
  export declare function recordSettledTurn(nodeId: string, at: string): void;
112
85
  export declare function setFrozen(nodeId: string, at: string): void;
@@ -115,51 +88,13 @@ export declare function recordRespawnAttempt(nodeId: string, attempt: {
115
88
  failures: number;
116
89
  notBefore: string | null;
117
90
  }): void;
118
- /** ONE-TIME completion of the boot-scoped-identity format migration, run once
119
- * at daemon startup (the natural boot-reconciliation chokepoint, right after
120
- * `reconcileBootLiveness`). It closes the gap the `identitiesMatch` legacy
121
- * lane only TOLERATES: a broker that survives an in-place crouter upgrade
122
- * keeps its old `lstart#ticks` row indefinitely (`recordPid` only fires on
123
- * launch/revive/session_start), so the cross-boot ticks-collision exposure the
124
- * boot-scoped base was added to close never provably shuts for those rows.
125
- *
126
- * For every row whose RECORDED identity is legacy-format while this platform
127
- * now composes new-format (a readable kernel boot_id):
128
- * - if the recorded pid's CURRENT live identity matches the recorded one via
129
- * the migration lane (same live process, `identitiesMatch` true) AND that
130
- * current identity is itself boot-scoped — re-record it with the new
131
- * composer, completing the migration in place;
132
- * - otherwise (pid gone, probe failed, reused — no match, or no readable
133
- * boot_id for it) — leave the row untouched for the normal liveness
134
- * handling that already runs each tick.
135
- *
136
- * After this runs once, the legacy compare lane only ever engages for
137
- * genuinely no-boot_id platforms. NOT a per-caller reconciliation layer — a
138
- * single startup sweep. `captureIdentity` is injectable for unit tests.
139
- *
140
- * GATED on proven same-boot provenance by its caller (daemon startup runs it
141
- * only when `reconcileBootLiveness` returned `sameBootProven` — see
142
- * `bootProvenSame`). This is what makes a bare ticks match safe to bless as a
143
- * current-boot identity: without that proof an equal-ticks collision with an
144
- * unrelated process from a DIFFERENT boot could be rewritten as
145
- * `<currentBootId>#<ticks>`, permanently baptizing a stranger.
146
- *
147
- * Not transactional by design: it never HOLDS the write lock across the (slow,
148
- * per-row) `ps` probe. Each re-record is a compare-and-swap single-row UPDATE
149
- * constrained by ALL three snapshotted values (`node_id`, `pi_pid`,
150
- * `pi_pid_identity`), counted only when a row actually changed. So if the old
151
- * broker exits and a concurrent revive atomically records a fresh
152
- * `(pi_pid, pi_pid_identity)` between this sweep's probe and its update, the
153
- * CAS matches zero rows and the migration is skipped rather than clobbering
154
- * the newer identity with the stale one. */
155
- export declare function migrateLegacyPidIdentities(captureIdentity?: (pid: number) => string | undefined): {
156
- migrated: string[];
157
- };
158
91
  /** Every hydrated node whose durable profile identity equals `profileId`.
159
92
  * Unlike `listNodes`, this includes unclaimed warm-pool spares: profile
160
93
  * deletion owns every matching row, whether or not it is user-visible. */
161
94
  export declare function listNodesByProfile(profileId: string): NodeMeta[];
162
95
  /** All rows, optionally filtered by status and terminal execution traces. Unclaimed warm spares are excluded. */
96
+ /** Every node's durable memory-resolution coordinates, including unclaimed warm-pool spares. */
97
+ export declare function listNodeMemoryTargets(): NodeMemoryTarget[];
163
98
  export declare function listNodes(filter?: {
164
99
  status?: NodeStatus | NodeStatus[];
165
100
  withRecordedPid?: boolean;
@@ -211,8 +146,7 @@ export declare function isWarmSpare(nodeId: string): boolean;
211
146
  * The claim also restamps the row's `created` to `created` — birth time is a
212
147
  * spare's MINT time, and consumers sort conversations on it, so an hour-old
213
148
  * spare must not sort as an hour-old conversation. This is the one sanctioned
214
- * write of `created` after birth (`upsertRow` deliberately never touches it);
215
- * the caller mirrors the same stamp into meta.json. */
149
+ * write of `created` after birth. */
216
150
  export declare function claimWarmSpare(recipeKey: string, created: string, opts?: {
217
151
  deadlineAt?: string;
218
152
  outcomeDelivery?: OutcomeDeliveryBinding;
@@ -225,8 +159,8 @@ export declare function warmSpareCount(recipeKey: string): number;
225
159
  /** Direct children of `id`, oldest first — an indexed point query
226
160
  * (`idx_nodes_parent`) instead of a full-table `listNodes()` scan. */
227
161
  export declare function childrenOf(id: string): string[];
228
- /** One lean roster row: only the `nodes` columns already native to the row
229
- * (no meta.json read). Backs `GET /v1/canvas/roster` — the recurring attach /
162
+ /** One lean roster row: only the `nodes` columns needed by the roster. Backs
163
+ * `GET /v1/canvas/roster` — the recurring attach /
230
164
  * browser topology poll, distinct from the enriched per-row
231
165
  * `dashboardRowsAll`+`enrichRows` snapshot (`GET /v1/canvas/snapshot`). */
232
166
  export interface RosterRow {
@@ -242,7 +176,7 @@ export interface RosterRow {
242
176
  created: string;
243
177
  }
244
178
  /** Every node's lean roster row, oldest first — a single scan indexed by
245
- * `idx_nodes_created`. No per-row `getNode`/meta.json read, no N+1. */
179
+ * `idx_nodes_created`, with no per-row hydration or N+1 query. */
246
180
  export declare function rosterNodes(): RosterRow[];
247
181
  /** One `subscribes_to` edge, both endpoints — the roster's topology half. */
248
182
  export interface RosterEdge {
@@ -351,16 +285,6 @@ export declare function withFreshTerminalGuard<T>(nodeId: string, isTerminal: (r
351
285
  final_report: string | null;
352
286
  frozen_at: string | null;
353
287
  }) => boolean, body: () => T): TerminalGuardResult<T>;
354
- /** Rebuild node rows from on-disk metas (the db node table is a derived index).
355
- * Only the IDENTITY columns are rebuilt — they are a projection of meta. The
356
- * runtime columns (status/intent/pi_pid/window/tmux_session/pane) are NOT in meta
357
- * and NOT re-derivable from it: they describe live process/presence state, so
358
- * an existing row keeps them and a freshly re-created row takes the schema's
359
- * quiescent defaults (status='active', the rest null). The daemon reconciles
360
- * liveness from tmux reality, not from a stale file.
361
- * Edges are left intact — subscribes_to is db-authoritative; spawned_by is
362
- * re-derived from each meta's `spawned_by` (fallback: `parent` for legacy metas). */
363
- export declare function rebuildIndex(): void;
364
288
  /** A node selected for pruning (or that would be, under --dry-run). */
365
289
  export interface PrunedNode {
366
290
  node_id: string;
@@ -416,27 +340,6 @@ export declare function pruneNodes(opts: {
416
340
  dryRun?: boolean;
417
341
  includeStale?: boolean;
418
342
  }): PruneResult;
419
- /** Drop rows whose on-disk `nodes/<id>/` dir is gone — a node that no longer
420
- * exists in the only place it is durably stored.
421
- *
422
- * `createNode` scaffolds the dir and writes meta.json BEFORE seeding the row, and
423
- * both delete paths ({@link deleteNode}, `deletePrunedNodes`) commit the row
424
- * removal BEFORE removing the dir, so a row with no dir is never a transient of
425
- * either — it is a node whose durable state was lost. Nothing about it is
426
- * recoverable: `getNode` reads meta.json and returns null, so every surface that
427
- * resolves a node (revive, focus, close, rename, message) rejects it as unknown
428
- * while the roster keeps listing it. The row IS the residue, so deleting it is
429
- * the whole repair; there is no dir left to remove.
430
- *
431
- * Because `active`/`idle` ghosts are the ones that jam surfaces, status is not a
432
- * filter here — count-based pruning protects those rows precisely so daemon
433
- * crash-recovery can resume them, and that reason does not survive the dir being
434
- * gone.
435
- *
436
- * Refuses to act on "can't tell": an unreadable nodes root, or a readable one
437
- * holding no node dirs at all while rows exist, reads as a detached or wiped
438
- * store rather than per-node loss, and reaps nothing. Returns the reaped ids. */
439
- export declare function reapGhostRows(): string[];
440
343
  /** Count-based retention sweep: retain the `maxNodes` MOST-RECENTLY-ACTIVE
441
344
  * nodes plus every row the collection authority retains, so the real retained
442
345
  * floor is `max(maxNodes, retainedCount)`. Bounds the otherwise-unbounded growth
@@ -454,3 +357,4 @@ export declare function pruneToLimit(opts: {
454
357
  maxNodes: number;
455
358
  dryRun?: boolean;
456
359
  }): PruneResult;
360
+ export {};