@north-light/crouter 0.3.311 → 0.3.313

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 (520) 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 +746 -735
  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 +17 -5
  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/host-teardown-process-group.test.js +9 -5
  121. package/dist/core/__tests__/integration/lifecycle-hooks.test.js +312 -1
  122. package/dist/core/__tests__/integration/plugin-revalidate.test.js +4 -0
  123. package/dist/core/__tests__/integration/profile-pause.test.js +4 -4
  124. package/dist/core/__tests__/integration/refresh-stall-recycle.test.js +9 -12
  125. package/dist/core/__tests__/integration/revive.test.js +67 -21
  126. package/dist/core/__tests__/integration/spawn-root.test.js +62 -19
  127. package/dist/core/__tests__/integration/subscription-delivery.test.js +33 -21
  128. package/dist/core/__tests__/integration/worktree-land.test.js +5 -2
  129. package/dist/core/__tests__/integration/worktree-reap.test.js +15 -1
  130. package/dist/core/__tests__/kickoff.test.js +36 -39
  131. package/dist/core/__tests__/lifecycle-terminal-reasons.test.js +2 -1
  132. package/dist/core/__tests__/lifecycle.test.js +2 -1
  133. package/dist/core/__tests__/live-lifecycle-prompt.test.js +13 -1
  134. package/dist/core/__tests__/memory-resolver-precedence.test.js +2 -0
  135. package/dist/core/__tests__/migration.test.js +145 -31
  136. package/dist/core/__tests__/model-pin-durability.test.js +4 -1
  137. package/dist/core/__tests__/model-routes-config.test.js +13 -5
  138. package/dist/core/__tests__/node-outcome.test.js +93 -26
  139. package/dist/core/__tests__/on-read-crouter-home-fence.test.js +4 -3
  140. package/dist/core/__tests__/on-read-dedup-resume.test.js +8 -7
  141. package/dist/core/__tests__/on-read-nested-store.test.js +8 -7
  142. package/dist/core/__tests__/passive-subscription.test.js +50 -157
  143. package/dist/core/__tests__/plugin-kinds.test.js +6 -4
  144. package/dist/core/__tests__/plugin-link-symlinked-scope-root.test.js +6 -1
  145. package/dist/core/__tests__/plugin-page-components.test.js +6 -4
  146. package/dist/core/__tests__/preview-registry-sync.test.js +2 -0
  147. package/dist/core/__tests__/profile-project-memory-delivery.test.js +35 -32
  148. package/dist/core/__tests__/prune.test.js +11 -5
  149. package/dist/core/__tests__/push-final-guard.test.js +14 -7
  150. package/dist/core/__tests__/relaunch-root.test.js +30 -2
  151. package/dist/core/__tests__/remote-canvas-target.test.js +7 -1
  152. package/dist/core/__tests__/repository-root-identity.test.js +4 -0
  153. package/dist/core/__tests__/review-model-floor.test.js +6 -3
  154. package/dist/core/__tests__/revive-all.test.js +13 -3
  155. package/dist/core/__tests__/revive-capacity.test.js +26 -4
  156. package/dist/core/__tests__/revive-parked-fresh.test.js +31 -8
  157. package/dist/core/__tests__/seam/broker-attach-stream.test.js +1 -1
  158. package/dist/core/__tests__/seam/broker-cap-freeze.test.js +4 -3
  159. package/dist/core/__tests__/seam/broker-crash-teardown.test.js +11 -14
  160. package/dist/core/__tests__/seam/broker-provider-retry.test.js +85 -71
  161. package/dist/core/__tests__/seam/dormancy-release.test.js +33 -19
  162. package/dist/core/__tests__/seam/held-deferred-human-prompt.test.js +7 -5
  163. package/dist/core/__tests__/seam/inbox-reference-guidance.test.js +20 -6
  164. package/dist/core/__tests__/seam/node-outcome-delivery.test.js +27 -3
  165. package/dist/core/__tests__/spawn-worktree-id-conflict.test.js +5 -4
  166. package/dist/core/__tests__/stop-guard.test.js +2 -1
  167. package/dist/core/__tests__/subscription-pool-credential-guard.test.js +4 -3
  168. package/dist/core/__tests__/warm-claim-preference-snapshot.test.js +19 -5
  169. package/dist/core/__tests__/yield-ensures-daemon.test.js +2 -1
  170. package/dist/core/bootstrap.js +2 -0
  171. package/dist/core/broker-client/__tests__/transport-socket.test.js +51 -6
  172. package/dist/core/broker-client/transport-socket.d.ts +1 -0
  173. package/dist/core/broker-client/transport-socket.js +13 -5
  174. package/dist/core/canvas/__tests__/attention.test.js +29 -35
  175. package/dist/core/canvas/__tests__/history-transcript.test.js +6 -6
  176. package/dist/core/canvas/__tests__/render-remote.test.js +25 -9
  177. package/dist/core/canvas/attention.d.ts +2 -5
  178. package/dist/core/canvas/attention.js +15 -64
  179. package/dist/core/canvas/boot.d.ts +6 -7
  180. package/dist/core/canvas/boot.js +5 -9
  181. package/dist/core/canvas/canvas.d.ts +13 -109
  182. package/dist/core/canvas/canvas.js +140 -401
  183. package/dist/core/canvas/crons.d.ts +2 -0
  184. package/dist/core/canvas/crons.js +16 -15
  185. package/dist/core/canvas/daemon-owner.js +10 -0
  186. package/dist/core/canvas/db.d.ts +2 -2
  187. package/dist/core/canvas/db.js +2 -18
  188. package/dist/core/canvas/deliveries.d.ts +104 -0
  189. package/dist/core/canvas/deliveries.js +354 -0
  190. package/dist/core/canvas/executions.d.ts +29 -0
  191. package/dist/core/canvas/executions.js +68 -0
  192. package/dist/core/canvas/history.js +35 -35
  193. package/dist/core/canvas/index.d.ts +3 -1
  194. package/dist/core/canvas/index.js +3 -1
  195. package/dist/core/canvas/migrations.js +20 -12
  196. package/dist/core/canvas/nav-model.js +1 -3
  197. package/dist/core/canvas/nav-render.d.ts +4 -4
  198. package/dist/core/canvas/nav-render.js +11 -21
  199. package/dist/core/canvas/node-sql-migration.d.ts +3 -0
  200. package/dist/core/canvas/node-sql-migration.js +261 -0
  201. package/dist/core/canvas/paths.d.ts +2 -16
  202. package/dist/core/canvas/paths.js +2 -31
  203. package/dist/core/canvas/recovery.d.ts +76 -0
  204. package/dist/core/canvas/recovery.js +588 -0
  205. package/dist/core/canvas/remote-canvas-source.js +4 -0
  206. package/dist/core/canvas/render-source.d.ts +16 -27
  207. package/dist/core/canvas/render-source.js +16 -45
  208. package/dist/core/canvas/sessions.d.ts +33 -0
  209. package/dist/core/canvas/sessions.js +78 -0
  210. package/dist/core/canvas/types.d.ts +33 -33
  211. package/dist/core/canvas/types.js +2 -5
  212. package/dist/core/canvas/waits.d.ts +18 -0
  213. package/dist/core/canvas/waits.js +70 -0
  214. package/dist/core/canvas/worktrees.d.ts +40 -0
  215. package/dist/core/canvas/worktrees.js +93 -0
  216. package/dist/core/command-hooks/artifact.d.ts +6 -0
  217. package/dist/core/command-hooks/artifact.js +22 -6
  218. package/dist/core/command-hooks/discovery.d.ts +2 -0
  219. package/dist/core/command-hooks/discovery.js +2 -0
  220. package/dist/core/command-hooks/lifecycle-catalog.d.ts +20 -2
  221. package/dist/core/command-hooks/lifecycle-catalog.js +7 -2
  222. package/dist/core/command-hooks/lifecycle-create.d.ts +4 -0
  223. package/dist/core/command-hooks/lifecycle-create.js +51 -0
  224. package/dist/core/command-hooks/schema.d.ts +2 -2
  225. package/dist/core/command-hooks/schema.js +5 -4
  226. package/dist/core/command-hooks/transport/exec-invoke.js +3 -1
  227. package/dist/core/command-hooks/transport/exec-lifecycle.d.ts +18 -8
  228. package/dist/core/command-hooks/transport/exec-lifecycle.js +89 -30
  229. package/dist/core/config.d.ts +17 -12
  230. package/dist/core/config.js +106 -155
  231. package/dist/core/errors.d.ts +1 -0
  232. package/dist/core/errors.js +4 -0
  233. package/dist/core/feed/__tests__/inbox-migrate.test.js +27 -31
  234. package/dist/core/feed/feed.d.ts +0 -6
  235. package/dist/core/feed/feed.js +68 -56
  236. package/dist/core/feed/inbox.d.ts +7 -81
  237. package/dist/core/feed/inbox.js +46 -378
  238. package/dist/core/feed/messages.d.ts +58 -0
  239. package/dist/core/feed/messages.js +217 -0
  240. package/dist/core/fs-utils.d.ts +4 -0
  241. package/dist/core/fs-utils.js +21 -1
  242. package/dist/core/human/answer.d.ts +1 -1
  243. package/dist/core/human/answer.js +1 -1
  244. package/dist/core/human/claim.d.ts +1 -1
  245. package/dist/core/human/claim.js +2 -4
  246. package/dist/core/human/component-docs.js +1 -1
  247. package/dist/core/human/feedback-companion.js +4 -3
  248. package/dist/core/human/feedback.d.ts +5 -8
  249. package/dist/core/human/feedback.js +57 -85
  250. package/dist/core/human/page-authoring.d.ts +30 -0
  251. package/dist/core/human/page-authoring.js +19 -0
  252. package/dist/core/human/requests.d.ts +136 -0
  253. package/dist/core/human/requests.js +515 -0
  254. package/dist/core/human/root.d.ts +0 -7
  255. package/dist/core/human/root.js +0 -17
  256. package/dist/core/human/scan.d.ts +2 -7
  257. package/dist/core/human/scan.js +48 -132
  258. package/dist/core/human/summary.d.ts +1 -1
  259. package/dist/core/human/summary.js +1 -1
  260. package/dist/core/human/tickets.d.ts +23 -83
  261. package/dist/core/human/tickets.js +92 -243
  262. package/dist/core/human/types.d.ts +5 -1
  263. package/dist/core/installed-plugins.js +8 -3
  264. package/dist/core/keybindings/__tests__/resolve.test.js +19 -17
  265. package/dist/core/locked-file.d.ts +6 -3
  266. package/dist/core/locked-file.js +36 -9
  267. package/dist/core/memory/extensions.js +2 -0
  268. package/dist/core/preview-registry.js +0 -1
  269. package/dist/core/profiles/__tests__/env-store.test.js +2 -0
  270. package/dist/core/profiles/default-binding.d.ts +0 -4
  271. package/dist/core/profiles/default-binding.js +12 -58
  272. package/dist/core/profiles/env-store.js +8 -3
  273. package/dist/core/profiles/manifest.d.ts +2 -37
  274. package/dist/core/profiles/manifest.js +35 -161
  275. package/dist/core/profiles/select.js +3 -0
  276. package/dist/core/review/__tests__/capture-origin.test.js +13 -2
  277. package/dist/core/review/__tests__/comments.test.js +28 -10
  278. package/dist/core/review/__tests__/remap.test.js +28 -10
  279. package/dist/core/review/__tests__/stage-identity.test.js +17 -7
  280. package/dist/core/review/birth.d.ts +1 -1
  281. package/dist/core/review/birth.js +34 -5
  282. package/dist/core/review/comments.js +1 -1
  283. package/dist/core/review/companion.d.ts +1 -1
  284. package/dist/core/review/companion.js +2 -2
  285. package/dist/core/review/document.js +1 -1
  286. package/dist/core/review/project.d.ts +5 -1
  287. package/dist/core/review/project.js +14 -36
  288. package/dist/core/review/realize.d.ts +3 -6
  289. package/dist/core/review/realize.js +51 -168
  290. package/dist/core/review/remap.js +1 -1
  291. package/dist/core/review/stage.d.ts +3 -2
  292. package/dist/core/review/stage.js +2 -3
  293. package/dist/core/review/store.d.ts +3 -21
  294. package/dist/core/review/store.js +140 -186
  295. package/dist/core/review/types.d.ts +0 -1
  296. package/dist/core/runtime/__tests__/install-id-cache-scoping.test.js +9 -5
  297. package/dist/core/runtime/__tests__/spawn-env.test.js +8 -9
  298. package/dist/core/runtime/broker/auth-reload.js +9 -10
  299. package/dist/core/runtime/broker/daemon-ops.d.ts +25 -8
  300. package/dist/core/runtime/broker/daemon-ops.js +42 -9
  301. package/dist/core/runtime/broker/extension-abort.d.ts +3 -0
  302. package/dist/core/runtime/broker/extension-abort.js +11 -0
  303. package/dist/core/runtime/broker/fault-retry.d.ts +15 -6
  304. package/dist/core/runtime/broker/fault-retry.js +142 -95
  305. package/dist/core/runtime/broker/inbox.d.ts +4 -32
  306. package/dist/core/runtime/broker/inbox.js +4 -92
  307. package/dist/core/runtime/broker/rebind.d.ts +1 -0
  308. package/dist/core/runtime/broker/rebind.js +21 -12
  309. package/dist/core/runtime/broker-persona-guidance.d.ts +1 -1
  310. package/dist/core/runtime/broker-persona-guidance.js +2 -13
  311. package/dist/core/runtime/broker.js +28 -22
  312. package/dist/core/runtime/close.d.ts +3 -9
  313. package/dist/core/runtime/close.js +16 -27
  314. package/dist/core/runtime/fault.d.ts +3 -93
  315. package/dist/core/runtime/fault.js +9 -419
  316. package/dist/core/runtime/kickoff.d.ts +3 -6
  317. package/dist/core/runtime/kickoff.js +12 -18
  318. package/dist/core/runtime/launch.js +1 -1
  319. package/dist/core/runtime/lifecycle.js +40 -7
  320. package/dist/core/runtime/nodes.d.ts +5 -1
  321. package/dist/core/runtime/nodes.js +26 -11
  322. package/dist/core/runtime/placement.js +2 -2
  323. package/dist/core/runtime/recycle.js +24 -14
  324. package/dist/core/runtime/reset.js +26 -7
  325. package/dist/core/runtime/revive.js +226 -217
  326. package/dist/core/runtime/spawn.d.ts +4 -1
  327. package/dist/core/runtime/spawn.js +43 -5
  328. package/dist/core/runtime/warm-pool.d.ts +2 -2
  329. package/dist/core/runtime/warm-pool.js +23 -3
  330. package/dist/core/scoped-state/db.d.ts +7 -0
  331. package/dist/core/scoped-state/db.js +92 -0
  332. package/dist/core/scoped-state/migrate.d.ts +11 -0
  333. package/dist/core/scoped-state/migrate.js +198 -0
  334. package/dist/core/scoped-state/paths.d.ts +9 -0
  335. package/dist/core/scoped-state/paths.js +27 -0
  336. package/dist/core/scoped-state/profiles.d.ts +12 -0
  337. package/dist/core/scoped-state/profiles.js +62 -0
  338. package/dist/core/scoped-state/providers.d.ts +16 -0
  339. package/dist/core/scoped-state/providers.js +8 -0
  340. package/dist/core/scoped-state/schema.d.ts +3 -0
  341. package/dist/core/scoped-state/schema.js +26 -0
  342. package/dist/core/scoped-state/settings.d.ts +28 -0
  343. package/dist/core/scoped-state/settings.js +82 -0
  344. package/dist/core/subscription-state.d.ts +29 -48
  345. package/dist/core/subscription-state.js +176 -712
  346. package/dist/core/worktree-close.js +4 -4
  347. package/dist/core/worktree-mutation-async.js +2 -2
  348. package/dist/core/worktree-sweep.js +11 -16
  349. package/dist/core/worktree.js +6 -12
  350. package/dist/daemon/__tests__/autostart-storm.test.js +1 -39
  351. package/dist/daemon/__tests__/helpers/source-daemon.d.ts +2 -2
  352. package/dist/daemon/__tests__/helpers/source-daemon.js +7 -6
  353. package/dist/daemon/__tests__/integration/migration-startup.test.js +59 -26
  354. package/dist/daemon/__tests__/node-deadline-lane.test.js +2 -1
  355. package/dist/daemon/__tests__/node-outcome-birth-invariants.test.js +41 -17
  356. package/dist/daemon/__tests__/node-outcome-delivery.test.js +39 -10
  357. package/dist/daemon/__tests__/reconciler-signature.test.js +2 -2
  358. package/dist/daemon/__tests__/subtree-filter-freshness.test.js +2 -2
  359. package/dist/daemon/api/__tests__/broker-settle-park.test.js +17 -12
  360. package/dist/daemon/api/__tests__/canvas-snapshot-fields.test.js +27 -5
  361. package/dist/daemon/api/__tests__/model-config.test.js +8 -8
  362. package/dist/daemon/api/__tests__/node-create-description.test.js +22 -5
  363. package/dist/daemon/api/__tests__/node-model-validation.test.js +21 -1
  364. package/dist/daemon/api/__tests__/nodes-activity-query.test.js +10 -12
  365. package/dist/daemon/api/__tests__/profile-launch-gates.test.js +6 -3
  366. package/dist/daemon/api/__tests__/profile-metadata-route.test.js +4 -1
  367. package/dist/daemon/api/__tests__/reopen-delivery.test.js +26 -8
  368. package/dist/daemon/api/__tests__/seam/api-server.test.js +24 -32
  369. package/dist/daemon/api/__tests__/seam/b10-attach-modelauth.test.js +4 -1
  370. package/dist/daemon/api/__tests__/seam/leaf-api-parity.test.js +5 -4
  371. package/dist/daemon/api/__tests__/seam/profile-delete.test.js +29 -43
  372. package/dist/daemon/api/__tests__/submit-result.test.js +3 -2
  373. package/dist/daemon/api/bridge.js +1 -1
  374. package/dist/daemon/api/handlers/bash-jobs.js +6 -7
  375. package/dist/daemon/api/handlers/broker-ops.js +47 -84
  376. package/dist/daemon/api/handlers/broker-recovery.d.ts +4 -0
  377. package/dist/daemon/api/handlers/broker-recovery.js +251 -0
  378. package/dist/daemon/api/handlers/canvas.js +2 -44
  379. package/dist/daemon/api/handlers/daemon.js +41 -0
  380. package/dist/daemon/api/handlers/feedback-comments.js +2 -2
  381. package/dist/daemon/api/handlers/health.js +10 -5
  382. package/dist/daemon/api/handlers/human-requests.js +168 -188
  383. package/dist/daemon/api/handlers/human.js +3 -148
  384. package/dist/daemon/api/handlers/inbox-page.d.ts +4 -0
  385. package/dist/daemon/api/handlers/inbox-page.js +89 -0
  386. package/dist/daemon/api/handlers/inbox.js +21 -120
  387. package/dist/daemon/api/handlers/messages.d.ts +1 -0
  388. package/dist/daemon/api/handlers/messages.js +73 -15
  389. package/dist/daemon/api/handlers/node-outcomes.js +58 -13
  390. package/dist/daemon/api/handlers/nodes.d.ts +1 -0
  391. package/dist/daemon/api/handlers/nodes.js +41 -42
  392. package/dist/daemon/api/handlers/reviews.js +4 -29
  393. package/dist/daemon/api/map.d.ts +25 -3
  394. package/dist/daemon/api/map.js +84 -14
  395. package/dist/daemon/api/server.js +68 -9
  396. package/dist/daemon/control.d.ts +18 -0
  397. package/dist/daemon/cron/disposition.d.ts +2 -0
  398. package/dist/daemon/cron/disposition.js +8 -5
  399. package/dist/daemon/cron/settle.js +37 -13
  400. package/dist/daemon/cron/sinks.d.ts +18 -1
  401. package/dist/daemon/cron/sinks.js +47 -93
  402. package/dist/daemon/crtrd-cli.js +4 -19
  403. package/dist/daemon/crtrd.d.ts +2 -0
  404. package/dist/daemon/crtrd.js +206 -81
  405. package/dist/daemon/fleet.js +5 -6
  406. package/dist/daemon/human/finish.d.ts +12 -24
  407. package/dist/daemon/human/finish.js +88 -285
  408. package/dist/daemon/human/settle.d.ts +40 -0
  409. package/dist/daemon/human/settle.js +89 -0
  410. package/dist/daemon/human/sweep.d.ts +20 -5
  411. package/dist/daemon/human/sweep.js +56 -60
  412. package/dist/daemon/manage.d.ts +21 -16
  413. package/dist/daemon/manage.js +85 -51
  414. package/dist/daemon/messaging/node-message.d.ts +1 -1
  415. package/dist/daemon/messaging/node-message.js +9 -12
  416. package/dist/daemon/park-activity.js +3 -3
  417. package/dist/daemon/reconcilers/bash-deadline.js +6 -7
  418. package/dist/daemon/reconcilers/broker-supervision.d.ts +1 -1
  419. package/dist/daemon/reconcilers/broker-supervision.js +41 -19
  420. package/dist/daemon/reconcilers/controller-death.js +6 -18
  421. package/dist/daemon/reconcilers/delivery-lane.d.ts +9 -0
  422. package/dist/daemon/reconcilers/delivery-lane.js +130 -0
  423. package/dist/daemon/reconcilers/live-obligation.js +3 -3
  424. package/dist/daemon/reconcilers/node-deadline.js +1 -1
  425. package/dist/daemon/reconcilers/node-lifecycle/freeze-lane.d.ts +1 -1
  426. package/dist/daemon/reconcilers/node-lifecycle/freeze-lane.js +10 -12
  427. package/dist/daemon/reconcilers/node-lifecycle/tick.js +5 -5
  428. package/dist/daemon/reconcilers/node-lifecycle/wants-execution.js +1 -1
  429. package/dist/daemon/reconcilers/pending-review-submit.js +3 -3
  430. package/dist/daemon/reconcilers/storage-maintenance.d.ts +2 -8
  431. package/dist/daemon/reconcilers/storage-maintenance.js +13 -43
  432. package/dist/daemon/review/companion.js +5 -11
  433. package/dist/daemon/review/deliver.d.ts +1 -5
  434. package/dist/daemon/review/deliver.js +3 -52
  435. package/dist/daemon/review/finish.d.ts +2 -27
  436. package/dist/daemon/review/finish.js +79 -263
  437. package/dist/daemon/review/sweep.d.ts +3 -10
  438. package/dist/daemon/review/sweep.js +13 -131
  439. package/dist/daemon/startup-policy.d.ts +0 -5
  440. package/dist/daemon/startup-policy.js +0 -5
  441. package/dist/hook-authoring.d.ts +28 -2
  442. package/dist/hook-authoring.js +53 -1
  443. package/dist/index.d.ts +3 -2
  444. package/dist/index.js +1 -1
  445. package/dist/migrations/__tests__/activation-concurrency.test.js +3 -2
  446. package/dist/migrations/__tests__/activation.test.js +9 -6
  447. package/dist/migrations/activation.d.ts +3 -2
  448. package/dist/migrations/activation.js +2 -4
  449. package/dist/migrations/corpus.d.ts +2 -5
  450. package/dist/migrations/corpus.js +9 -20
  451. package/dist/migrations/runner.d.ts +3 -1
  452. package/dist/migrations/runner.js +6 -2
  453. package/dist/pi-extensions/__tests__/canvas-context-intro.test.js +21 -89
  454. package/dist/pi-extensions/__tests__/canvas-goal-capture-envelope.test.js +4 -2
  455. package/dist/pi-extensions/__tests__/canvas-stophook-agentend.test.js +51 -33
  456. package/dist/pi-extensions/__tests__/canvas-stophook-context-nudge.test.js +16 -2
  457. package/dist/pi-extensions/__tests__/pre-command-gate.test.js +13 -1
  458. package/dist/pi-extensions/canvas-inbox-watcher.js +98 -244
  459. package/dist/pi-extensions/canvas-passive-context.d.ts +4 -8
  460. package/dist/pi-extensions/canvas-passive-context.js +85 -37
  461. package/dist/pi-extensions/canvas-stophook.js +47 -31
  462. package/dist/shared/env.d.ts +1 -0
  463. package/dist/shared/env.js +3 -0
  464. package/package.json +1 -1
  465. package/runtime.lock.json +5 -5
  466. package/dist/clients/attach/__tests__/page-block.test.js +0 -54
  467. package/dist/clients/inbox/review-visibility.d.ts +0 -5
  468. package/dist/clients/inbox/review-visibility.js +0 -19
  469. package/dist/commands/canvas-rebuild-index.d.ts +0 -2
  470. package/dist/commands/canvas-rebuild-index.js +0 -46
  471. package/dist/core/__tests__/human-cancel-guard.test.js +0 -110
  472. package/dist/core/__tests__/human-deliver.test.d.ts +0 -1
  473. package/dist/core/__tests__/human-deliver.test.js +0 -256
  474. package/dist/core/__tests__/human-node-not-supervised.test.d.ts +0 -1
  475. package/dist/core/__tests__/human-node-not-supervised.test.js +0 -89
  476. package/dist/core/__tests__/integration/human-deliver-e2e.test.d.ts +0 -1
  477. package/dist/core/__tests__/integration/human-deliver-e2e.test.js +0 -131
  478. package/dist/core/__tests__/phase4-review-store.test.d.ts +0 -1
  479. package/dist/core/__tests__/phase4-review-store.test.js +0 -144
  480. package/dist/core/__tests__/watchdog-abort-arms-retry.test.d.ts +0 -1
  481. package/dist/core/__tests__/watchdog-abort-arms-retry.test.js +0 -110
  482. package/dist/core/canvas/human-deliveries.d.ts +0 -39
  483. package/dist/core/canvas/human-deliveries.js +0 -75
  484. package/dist/core/canvas/node-outcome-deliveries.d.ts +0 -64
  485. package/dist/core/canvas/node-outcome-deliveries.js +0 -159
  486. package/dist/core/feed/passive.d.ts +0 -3
  487. package/dist/core/feed/passive.js +0 -53
  488. package/dist/core/human/__tests__/inbox-cancel-worker.d.ts +0 -1
  489. package/dist/core/human/__tests__/inbox-cancel-worker.js +0 -7
  490. package/dist/core/human/__tests__/inbox-claim-worker.d.ts +0 -1
  491. package/dist/core/human/__tests__/inbox-claim-worker.js +0 -17
  492. package/dist/core/human/__tests__/inbox-stale-claim-worker.d.ts +0 -1
  493. package/dist/core/human/__tests__/inbox-stale-claim-worker.js +0 -8
  494. package/dist/core/human/__tests__/integration/inbox-core.test.d.ts +0 -1
  495. package/dist/core/human/__tests__/integration/inbox-core.test.js +0 -145
  496. package/dist/core/human/__tests__/page-tickets.test.d.ts +0 -1
  497. package/dist/core/human/__tests__/page-tickets.test.js +0 -161
  498. package/dist/core/review/ticket-filter.d.ts +0 -17
  499. package/dist/core/review/ticket-filter.js +0 -21
  500. package/dist/core/runtime/broker/passive.d.ts +0 -17
  501. package/dist/core/runtime/broker/passive.js +0 -44
  502. package/dist/core/runtime/busy.d.ts +0 -46
  503. package/dist/core/runtime/busy.js +0 -150
  504. package/dist/daemon/__tests__/startup-block-marker.test.d.ts +0 -1
  505. package/dist/daemon/__tests__/startup-block-marker.test.js +0 -86
  506. package/dist/daemon/api/__tests__/review-terminal-conflict.test.d.ts +0 -1
  507. package/dist/daemon/api/__tests__/review-terminal-conflict.test.js +0 -98
  508. package/dist/daemon/human/deliver-action.d.ts +0 -3
  509. package/dist/daemon/human/deliver-action.js +0 -9
  510. package/dist/daemon/node-outcome/deliver-outcome.d.ts +0 -3
  511. package/dist/daemon/node-outcome/deliver-outcome.js +0 -9
  512. package/dist/daemon/reconcilers/human-delivery-lane.d.ts +0 -10
  513. package/dist/daemon/reconcilers/human-delivery-lane.js +0 -41
  514. package/dist/daemon/reconcilers/node-outcome-delivery-lane.d.ts +0 -10
  515. package/dist/daemon/reconcilers/node-outcome-delivery-lane.js +0 -41
  516. package/dist/daemon/startup-block-marker.d.ts +0 -25
  517. package/dist/daemon/startup-block-marker.js +0 -99
  518. /package/dist/{clients/attach/__tests__/page-block.test.d.ts → api/dto/mail.js} +0 -0
  519. /package/dist/{commands/sys/__tests__/migrate.test.d.ts → api/dto/recovery.js} +0 -0
  520. /package/dist/{core/__tests__/human-cancel-guard.test.d.ts → commands/__tests__/integration/migrate.test.d.ts} +0 -0
@@ -1,214 +1,168 @@
1
1
  import { existsSync } from 'node:fs';
2
- import { newNodeId } from '../runtime/nodes.js';
3
- import { openDb, withCanvasWrite } from '../canvas/db.js';
2
+ import { withCanvasWrite } from '../canvas/db.js';
3
+ import { getRequest, getRequestByCompanion, getRequestByIdempotencyKey, listBindingRequests, listRequests, listSubmitRequestedRequests, listUnprojectedReviews, markProjected as markRequestProjected, markProjectionError as markRequestProjectionError, openRequest, readAnchorBase as readRequestAnchorBase, replaceAnchorBaseLocked as replaceRequestAnchorBaseLocked, requestSubmit, } from '../human/requests.js';
4
4
  import { ReviewOperationError, } from './types.js';
5
- function recordFromRow(raw) {
5
+ function specification(request) {
6
+ try {
7
+ const value = JSON.parse(request.specification_json);
8
+ if (typeof value !== 'object' || value === null)
9
+ throw new Error('not an object');
10
+ return value;
11
+ }
12
+ catch (error) {
13
+ throw new Error(`corrupt review specification: ${request.request_id}`, { cause: error });
14
+ }
15
+ }
16
+ function state(request) {
17
+ if (request.state !== 'settled')
18
+ return request.state;
19
+ return request.outcome === 'approved' ? 'approved' : 'canceled';
20
+ }
21
+ function record(request) {
22
+ if (request.kind !== 'review')
23
+ throw new Error(`human request is not a review: ${request.request_id}`);
24
+ const spec = specification(request);
25
+ const reviewState = state(request);
26
+ const settledAt = request.settled_at;
6
27
  return {
7
- review_id: raw['review_id'],
8
- idempotency_key: raw['idempotency_key'],
9
- origin_kind: raw['origin_kind'],
10
- origin_node_id: raw['origin_node_id'],
11
- bridge_node_id: raw['bridge_node_id'] ?? null,
12
- companion_node_id: raw['companion_node_id'],
13
- review_dir: raw['review_dir'],
14
- file: raw['file'],
15
- origin_session_file: raw['origin_session_file'],
16
- origin_session_id: raw['origin_session_id'],
17
- origin_leaf_id: raw['origin_leaf_id'],
18
- model_spec: raw['model_spec'],
19
- branch_file: raw['branch_file'],
20
- baseline_sha256: raw['baseline_sha256'],
21
- baseline_bytes: raw['baseline_bytes'],
22
- anchor_base_sha256: raw['anchor_base_sha256'],
23
- state: raw['state'],
24
- created: raw['created'],
25
- captured_at: raw['captured_at'],
26
- opened_at: raw['opened_at'] ?? null,
27
- submit_requested_at: raw['submit_requested_at'] ?? null,
28
- output_path: raw['output_path'] ?? null,
29
- subtitle: raw['subtitle'] ?? null,
30
- approved_at: raw['approved_at'] ?? null,
31
- approved_sha256: raw['approved_sha256'] ?? null,
32
- changed: raw['changed'] === null || raw['changed'] === undefined ? null : raw['changed'] !== 0,
33
- comments_total: raw['comments_total'] ?? null,
34
- comments_unresolved: raw['comments_unresolved'] ?? null,
35
- result_json: raw['result_json'] ?? null,
36
- canceled_at: raw['canceled_at'] ?? null,
37
- cancel_reason: raw['cancel_reason'] ?? null,
38
- cancel_actor: raw['cancel_actor'] ?? null,
39
- delivery_entry_id: raw['delivery_entry_id'] ?? null,
40
- delivered_at: raw['delivered_at'] ?? null,
41
- delivery_error: raw['delivery_error'] ?? null,
42
- projected_at: raw['projected_at'] ?? null,
43
- projection_error: raw['projection_error'] ?? null,
44
- source_missing: !existsSync(raw['file']),
28
+ review_id: request.request_id,
29
+ idempotency_key: request.idempotency_key ?? '',
30
+ origin_kind: spec.origin_kind ?? (request.inbox_listed ? 'ticket' : 'inline'),
31
+ origin_node_id: request.requester_node_id ?? '',
32
+ companion_node_id: request.companion_node_id ?? '',
33
+ review_dir: request.request_dir,
34
+ file: request.file ?? '',
35
+ origin_session_file: spec.origin_session_file,
36
+ origin_session_id: spec.origin_session_id,
37
+ origin_leaf_id: spec.origin_leaf_id,
38
+ model_spec: spec.model_spec,
39
+ branch_file: spec.branch_file,
40
+ baseline_sha256: spec.baseline_sha256,
41
+ baseline_bytes: spec.baseline_bytes,
42
+ anchor_base_sha256: request.anchor_base_sha256 ?? '',
43
+ state: reviewState,
44
+ created: request.created_at,
45
+ captured_at: spec.captured_at,
46
+ opened_at: request.opened_at,
47
+ submit_requested_at: request.submit_requested_at,
48
+ output_path: spec.output_path ?? null,
49
+ subtitle: request.subtitle,
50
+ approved_at: reviewState === 'approved' ? settledAt : null,
51
+ approved_sha256: reviewState === 'approved' ? (() => {
52
+ try {
53
+ return JSON.parse(request.result_json ?? '{}').approved_sha256 ?? null;
54
+ }
55
+ catch {
56
+ return null;
57
+ }
58
+ })() : null,
59
+ changed: reviewState === 'approved' ? (() => {
60
+ try {
61
+ return JSON.parse(request.result_json ?? '{}').changed ?? null;
62
+ }
63
+ catch {
64
+ return null;
65
+ }
66
+ })() : null,
67
+ comments_total: reviewState === 'approved' ? (() => {
68
+ try {
69
+ return JSON.parse(request.result_json ?? '{}').comments_total ?? null;
70
+ }
71
+ catch {
72
+ return null;
73
+ }
74
+ })() : null,
75
+ comments_unresolved: reviewState === 'approved' ? (() => {
76
+ try {
77
+ return JSON.parse(request.result_json ?? '{}').comments_unresolved ?? null;
78
+ }
79
+ catch {
80
+ return null;
81
+ }
82
+ })() : null,
83
+ result_json: request.result_json,
84
+ canceled_at: reviewState === 'canceled' ? settledAt : null,
85
+ cancel_reason: reviewState === 'canceled' ? (() => {
86
+ try {
87
+ return JSON.parse(request.result_json ?? '{}').reason ?? null;
88
+ }
89
+ catch {
90
+ return null;
91
+ }
92
+ })() : null,
93
+ cancel_actor: reviewState === 'canceled' ? (() => {
94
+ try {
95
+ return JSON.parse(request.result_json ?? '{}').actor ?? null;
96
+ }
97
+ catch {
98
+ return null;
99
+ }
100
+ })() : null,
101
+ delivery_entry_id: request.settlement_delivery_id,
102
+ delivered_at: request.settlement_delivery_id === null ? null : settledAt,
103
+ delivery_error: null,
104
+ projected_at: request.projected_at,
105
+ projection_error: request.projection_error,
106
+ source_missing: !existsSync(request.file ?? ''),
45
107
  };
46
108
  }
47
- function readRecord(db, where, ...params) {
48
- const raw = db.prepare(`SELECT * FROM reviews WHERE ${where}`).get(...params);
49
- return raw === undefined ? null : recordFromRow(raw);
50
- }
51
- function readRecords(db, where, ...params) {
52
- const rows = db.prepare(`SELECT * FROM reviews WHERE ${where} ORDER BY created ASC, review_id ASC`).all(...params);
53
- return rows.map(recordFromRow);
54
- }
55
- export function mintReviewId() {
56
- return newNodeId();
57
- }
58
- /** Atomically claim the idempotency key, without publishing any non-SQLite state. */
59
- export function commitBindingReview(row) {
60
- return withCanvasWrite((db) => {
61
- const inserted = db.prepare(`
62
- INSERT INTO reviews (
63
- review_id, idempotency_key, origin_kind, origin_node_id, bridge_node_id,
64
- companion_node_id, review_dir, file, origin_session_file, origin_session_id,
65
- origin_leaf_id, model_spec, branch_file, baseline_sha256, baseline_bytes,
66
- anchor_base_sha256, anchor_base_bytes, state, created, captured_at, opened_at,
67
- output_path, subtitle, approved_at, approved_sha256, changed, comments_total,
68
- comments_unresolved, result_json, canceled_at, cancel_reason, cancel_actor,
69
- delivery_entry_id, delivered_at, delivery_error, projected_at, projection_error
70
- ) VALUES (
71
- ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,
72
- ?, ?, ?, ?, ?, ?, ?, ?, ?, ?
73
- ) ON CONFLICT(idempotency_key) DO NOTHING
74
- `).run(row.review_id, row.idempotency_key, row.origin_kind, row.origin_node_id, row.bridge_node_id, row.companion_node_id, row.review_dir, row.file, row.origin_session_file, row.origin_session_id, row.origin_leaf_id, row.model_spec, row.branch_file, row.baseline_sha256, row.baseline_bytes, row.anchor_base_sha256, row.anchor_base_bytes, 'binding', row.created, row.captured_at, row.opened_at, row.output_path, row.subtitle, row.approved_at, row.approved_sha256, row.changed === null ? null : row.changed ? 1 : 0, row.comments_total, row.comments_unresolved, row.result_json, row.canceled_at, row.cancel_reason, row.cancel_actor, row.delivery_entry_id, row.delivered_at, row.delivery_error, row.projected_at, row.projection_error);
75
- const winner = db.prepare('SELECT review_id FROM reviews WHERE idempotency_key = ?').get(row.idempotency_key);
76
- if (winner === undefined)
77
- throw new Error(`review binding insert did not produce a row: ${row.idempotency_key}`);
78
- return { review_id: winner.review_id, won: inserted.changes > 0 };
79
- });
109
+ function requestForReview(reviewId) {
110
+ const request = getRequest(reviewId);
111
+ return request?.kind === 'review' ? request : null;
80
112
  }
81
113
  export function getReview(reviewId) {
82
- return readRecord(openDb(), 'review_id = ?', reviewId);
114
+ const request = requestForReview(reviewId);
115
+ return request === null ? null : record(request);
83
116
  }
84
- /** The review `reviewId` names, for a caller that cannot proceed without one.
85
- * A `binding` row is still mid-creation and reads as absent. */
86
117
  export function requireVisibleReview(reviewId) {
87
118
  const review = getReview(reviewId);
88
- if (review === null || review.state === 'binding') {
119
+ if (review === null || review.state === 'binding')
89
120
  throw new ReviewOperationError('unknown_review', 'review was not found', { received: reviewId });
90
- }
91
121
  return review;
92
122
  }
93
123
  export function getReviewByIdempotencyKey(key) {
94
- return readRecord(openDb(), 'idempotency_key = ?', key);
124
+ const request = getRequestByIdempotencyKey(key);
125
+ return request?.kind === 'review' ? record(request) : null;
95
126
  }
96
127
  export function getReviewByCompanion(nodeId) {
97
- return readRecord(openDb(), "companion_node_id = ? AND state <> 'binding'", nodeId);
98
- }
99
- export function getReviewByBridge(nodeId) {
100
- return readRecord(openDb(), "bridge_node_id = ? AND state <> 'binding'", nodeId);
128
+ const request = getRequestByCompanion(nodeId);
129
+ return request?.kind === 'review' ? record(request) : null;
101
130
  }
102
131
  export function listReviews(filter) {
103
- const clauses = ["state <> 'binding'"];
104
- const params = [];
105
- if (filter.state !== undefined) {
106
- clauses.push('state = ?');
107
- params.push(filter.state);
108
- }
109
- if (filter.origin_node_id !== undefined) {
110
- clauses.push('origin_node_id = ?');
111
- params.push(filter.origin_node_id);
112
- }
113
- if (filter.file !== undefined) {
114
- clauses.push('file = ?');
115
- params.push(filter.file);
116
- }
117
- return readRecords(openDb(), clauses.join(' AND '), ...params);
132
+ return listRequests({ kind: 'review', ...(filter.origin_node_id === undefined ? {} : { requester_node_id: filter.origin_node_id }), ...(filter.file === undefined ? {} : { file: filter.file }) })
133
+ .map(record)
134
+ .filter((review) => review.state !== 'binding' && (filter.state === undefined || review.state === filter.state));
118
135
  }
119
- /** Review ids whose immutable origin is one of `nodeIds`, including binding
120
- * rows that normal user-facing review listings intentionally hide. */
121
136
  export function reviewIdsByOriginNodes(nodeIds) {
122
- const ids = [...new Set(nodeIds)];
123
- if (ids.length === 0)
124
- return [];
125
- const placeholders = ids.map(() => '?').join(',');
126
- return openDb()
127
- .prepare(`SELECT review_id FROM reviews WHERE origin_node_id IN (${placeholders}) ORDER BY created, review_id`)
128
- .all(...ids).map(({ review_id }) => review_id);
137
+ const ids = new Set(nodeIds);
138
+ return listRequests({ kind: 'review' }).filter((request) => request.requester_node_id !== null && ids.has(request.requester_node_id)).map((request) => request.request_id);
129
139
  }
130
- /** Delete review audit state for the selected origins in dependency order.
131
- * Filesystem cleanup is deliberately left to the daemon lifecycle owner. */
132
140
  export function deleteReviewsByOriginNodes(nodeIds) {
133
- const ids = [...new Set(nodeIds)];
134
- if (ids.length === 0)
141
+ const reviewIds = reviewIdsByOriginNodes(nodeIds);
142
+ if (reviewIds.length === 0)
135
143
  return [];
136
- const originPlaceholders = ids.map(() => '?').join(',');
137
- return withCanvasWrite((db) => {
138
- const reviewIds = db
139
- .prepare(`SELECT review_id FROM reviews WHERE origin_node_id IN (${originPlaceholders}) ORDER BY created, review_id`)
140
- .all(...ids).map(({ review_id }) => review_id);
141
- if (reviewIds.length === 0)
142
- return [];
143
- const reviewPlaceholders = reviewIds.map(() => '?').join(',');
144
- db.prepare(`DELETE FROM review_comment_events WHERE review_id IN (${reviewPlaceholders})`).run(...reviewIds);
145
- db.prepare(`DELETE FROM review_comments WHERE review_id IN (${reviewPlaceholders})`).run(...reviewIds);
146
- db.prepare(`DELETE FROM reviews WHERE review_id IN (${reviewPlaceholders})`).run(...reviewIds);
147
- return reviewIds;
144
+ withCanvasWrite((db) => {
145
+ const placeholders = reviewIds.map(() => '?').join(',');
146
+ db.prepare(`DELETE FROM review_comment_events WHERE review_id IN (${placeholders})`).run(...reviewIds);
147
+ db.prepare(`DELETE FROM review_comments WHERE review_id IN (${placeholders})`).run(...reviewIds);
148
+ db.prepare(`DELETE FROM human_requests WHERE request_id IN (${placeholders})`).run(...reviewIds);
148
149
  });
150
+ return reviewIds;
149
151
  }
150
- export function listBindingReviews() {
151
- return readRecords(openDb(), "state = 'binding'");
152
- }
153
- /** Open reviews the human has already submitted, still waiting on their companion. */
154
- export function listSubmitRequestedReviews() {
155
- return readRecords(openDb(), "state = 'open' AND submit_requested_at IS NOT NULL");
156
- }
157
- export function listUnprojectedTerminalReviews() {
158
- return readRecords(openDb(), "state IN ('approved', 'canceled') AND projected_at IS NULL");
159
- }
160
- export function bindBridgeNode(reviewId, bridgeNodeId) {
161
- return withCanvasWrite((db) => db.prepare('UPDATE reviews SET bridge_node_id = ? WHERE review_id = ? AND bridge_node_id IS NULL').run(bridgeNodeId, reviewId).changes > 0);
162
- }
163
- export function openReviewRow(reviewId, openedAt) {
164
- return withCanvasWrite((db) => db.prepare("UPDATE reviews SET state = 'open', opened_at = ? WHERE review_id = ? AND state = 'binding'").run(openedAt, reviewId).changes > 0);
165
- }
166
- /** Record the human's submit intent on a review that stays open meanwhile.
167
- * False when the review already left `open` or already carries an intent. */
168
- export function requestReviewSubmit(reviewId, at) {
169
- return withCanvasWrite((db) => db.prepare("UPDATE reviews SET submit_requested_at = ? WHERE review_id = ? AND state = 'open' AND submit_requested_at IS NULL").run(at, reviewId).changes > 0);
170
- }
152
+ export function listBindingReviews() { return listBindingRequests().map(record); }
153
+ export function listSubmitRequestedReviews() { return listSubmitRequestedRequests().map(record); }
154
+ export function listUnprojectedTerminalReviews() { return listUnprojectedReviews().map(record); }
155
+ export function openReviewRow(reviewId, openedAt) { return openRequest(reviewId, openedAt); }
156
+ export function requestReviewSubmit(reviewId, at) { return requestSubmit(reviewId, at); }
171
157
  export function approveReviewLocked(db, args) {
172
- return db.prepare(`
173
- UPDATE reviews SET
174
- state = 'approved', approved_at = ?, approved_sha256 = ?, changed = ?,
175
- comments_total = ?, comments_unresolved = ?, result_json = ?
176
- WHERE review_id = ? AND state = 'open'
177
- `).run(args.approved_at, args.approved_sha256, args.changed ? 1 : 0, args.comments_total, args.comments_unresolved, args.result_json, args.review_id).changes > 0;
158
+ return db.prepare(`UPDATE human_requests SET state = 'settled', outcome = 'approved', result_json = ?, settled_at = ?, progress_json = NULL, updated_at = ? WHERE request_id = ? AND kind = 'review' AND state = 'open'`).run(args.result_json, args.approved_at, args.approved_at, args.review_id).changes > 0;
178
159
  }
179
160
  export function cancelReviewRow(reviewId, args) {
180
- return withCanvasWrite((db) => db.prepare(`
181
- UPDATE reviews SET
182
- state = 'canceled', canceled_at = ?, cancel_reason = ?, cancel_actor = ?
183
- WHERE review_id = ? AND state = 'open'
184
- `).run(args.at, args.reason, args.actor, reviewId).changes > 0);
185
- }
186
- export function markProjected(reviewId, at) {
187
- withCanvasWrite((db) => {
188
- db.prepare('UPDATE reviews SET projected_at = ?, projection_error = NULL WHERE review_id = ?').run(at, reviewId);
189
- });
190
- }
191
- export function markProjectionError(reviewId, error) {
192
- withCanvasWrite((db) => {
193
- db.prepare('UPDATE reviews SET projection_error = ? WHERE review_id = ? AND projected_at IS NULL').run(error, reviewId);
194
- });
195
- }
196
- export function markDelivered(reviewId, receipt, at) {
197
- withCanvasWrite((db) => {
198
- db.prepare('UPDATE reviews SET delivery_entry_id = ?, delivered_at = ?, delivery_error = NULL WHERE review_id = ?').run(receipt, at, reviewId);
199
- });
200
- }
201
- export function markDeliveryError(reviewId, error) {
202
- withCanvasWrite((db) => {
203
- db.prepare('UPDATE reviews SET delivery_error = ? WHERE review_id = ? AND delivered_at IS NULL').run(error, reviewId);
204
- });
205
- }
206
- export function readAnchorBase(reviewId) {
207
- const raw = openDb().prepare('SELECT anchor_base_bytes, anchor_base_sha256 FROM reviews WHERE review_id = ?').get(reviewId);
208
- if (raw === undefined)
209
- return null;
210
- return { bytes: Buffer.from(raw.anchor_base_bytes), sha256: raw.anchor_base_sha256 };
211
- }
212
- export function replaceAnchorBaseLocked(db, reviewId, bytes, sha256) {
213
- db.prepare('UPDATE reviews SET anchor_base_bytes = ?, anchor_base_sha256 = ? WHERE review_id = ?').run(bytes, sha256, reviewId);
214
- }
161
+ return withCanvasWrite((db) => db.prepare(`UPDATE human_requests SET state = 'settled', outcome = 'canceled', result_json = ?, settled_at = ?, progress_json = NULL, updated_at = ? WHERE request_id = ? AND kind = 'review' AND state = 'open'`).run(JSON.stringify({ schema: 'humanloop.cancel/v1', kind: 'canceled', canceledAt: args.at, ...(args.reason === '' ? {} : { reason: args.reason }), ...(args.actor === null ? {} : { actor: args.actor }) }), args.at, args.at, reviewId).changes > 0);
162
+ }
163
+ export function markProjected(reviewId, at) { markRequestProjected(reviewId, at); }
164
+ export function markProjectionError(reviewId, error) { markRequestProjectionError(reviewId, error); }
165
+ export function markDelivered(_reviewId, _receipt, _at) { }
166
+ export function markDeliveryError(_reviewId, _error) { }
167
+ export function readAnchorBase(reviewId) { return readRequestAnchorBase(reviewId); }
168
+ export function replaceAnchorBaseLocked(db, reviewId, bytes, sha256) { replaceRequestAnchorBaseLocked(db, reviewId, bytes, sha256); }
@@ -30,7 +30,6 @@ export interface ReviewRow {
30
30
  idempotency_key: string;
31
31
  origin_kind: ReviewOriginKind;
32
32
  origin_node_id: string;
33
- bridge_node_id: string | null;
34
33
  companion_node_id: string;
35
34
  review_dir: string;
36
35
  file: string;
@@ -6,33 +6,37 @@
6
6
  // switching CRTR_HOME to a fresh home B, used to keep stamping A's install id
7
7
  // onto B's nodes. The lazy cache must be keyed by canvas-db identity so a
8
8
  // home switch can never leak one canvas's install id onto another's.
9
- import { test, before, after, beforeEach } from 'node:test';
9
+ import { test, before, after } from 'node:test';
10
10
  import assert from 'node:assert/strict';
11
11
  import { mkdtempSync, rmSync } from 'node:fs';
12
- import { closeDb } from '../../canvas/db.js';
12
+ import { closeDb, migrate, openDb } from '../../canvas/db.js';
13
13
  import { resolveInstallId } from '../../canvas/install-id.js';
14
14
  import { newNodeId } from '../nodes.js';
15
15
  let homeA;
16
16
  let homeB;
17
+ const previousCrtrHome = process.env['CRTR_HOME'];
17
18
  before(() => {
18
19
  homeA = mkdtempSync('/tmp/crtr-install-id-home-a-');
19
20
  homeB = mkdtempSync('/tmp/crtr-install-id-home-b-');
20
21
  });
21
- beforeEach(() => {
22
- closeDb();
23
- });
24
22
  after(() => {
25
23
  closeDb();
26
24
  rmSync(homeA, { recursive: true, force: true });
27
25
  rmSync(homeB, { recursive: true, force: true });
26
+ if (previousCrtrHome === undefined)
27
+ delete process.env['CRTR_HOME'];
28
+ else
29
+ process.env['CRTR_HOME'] = previousCrtrHome;
28
30
  });
29
31
  test('newNodeId does not leak one CRTR_HOME\'s install id onto another after a home switch', () => {
30
32
  process.env['CRTR_HOME'] = homeA;
33
+ migrate(openDb());
31
34
  const idFromA = newNodeId();
32
35
  const installA = resolveInstallId();
33
36
  assert.ok(idFromA.startsWith(`${installA}-`), 'a node minted in home A must be stamped with home A\'s install id');
34
37
  closeDb();
35
38
  process.env['CRTR_HOME'] = homeB;
39
+ migrate(openDb());
36
40
  const installB = resolveInstallId();
37
41
  assert.notEqual(installB, installA, 'home A and home B must self-mint distinct install ids for this test to be meaningful');
38
42
  const idFromB = newNodeId();
@@ -12,7 +12,9 @@ import { mkdtempSync, mkdirSync, rmSync, writeFileSync, realpathSync } from 'nod
12
12
  import { tmpdir } from 'node:os';
13
13
  import { join } from 'node:path';
14
14
  import { resetScopeCache } from '../../scope.js';
15
- import { readMergedLaunchConfig } from '../../config.js';
15
+ import { readMergedLaunchConfig, writeRawConfig, updateConfigAtRoot } from '../../config.js';
16
+ import { createProfile, profileRoot } from '../../profiles/manifest.js';
17
+ import { initializeFreshScopedStore } from '../../scoped-state/migrate.js';
16
18
  import { buildOperationalEnvBase, buildBrokerEnv } from '../spawn-env.js';
17
19
  const LEAK_CLASS_HOST_ENV = {
18
20
  HOME: '/Users/tester',
@@ -61,6 +63,7 @@ beforeEach(() => {
61
63
  isolatedCwd = realpathSync(mkdtempSync(join(tmpdir(), 'crtr-spawn-env-cwd-')));
62
64
  process.env.HOME = isolatedHome;
63
65
  process.chdir(isolatedCwd);
66
+ initializeFreshScopedStore({ kind: 'user', root: join(isolatedHome, '.crouter') });
64
67
  resetScopeCache();
65
68
  });
66
69
  afterEach(() => {
@@ -168,8 +171,7 @@ test('buildBrokerEnv overlays inv.env + FRONT_DOOR_ENV on top of the sanitized b
168
171
  });
169
172
  // C — explicit spawnEnv.allow escape hatch: literal names + globs.
170
173
  test('C: an explicit spawnEnv.allow literal name admits a var that would otherwise be dropped', () => {
171
- mkdirSync(join(isolatedHome, '.crouter'), { recursive: true });
172
- writeFileSync(join(isolatedHome, '.crouter', 'config.json'), JSON.stringify({ spawnEnv: { allow: ['GOOGLE_GENERATIVE_AI_API_KEY'] } }));
174
+ writeRawConfig('user', { spawnEnv: { allow: ['GOOGLE_GENERATIVE_AI_API_KEY'] } });
173
175
  resetScopeCache();
174
176
  const env = base(LEAK_CLASS_HOST_ENV);
175
177
  assert.equal(env.GOOGLE_GENERATIVE_AI_API_KEY, 'fake-g', 'explicitly allowlisted name now crosses');
@@ -177,8 +179,7 @@ test('C: an explicit spawnEnv.allow literal name admits a var that would otherwi
177
179
  assert.equal(env.GIT_ASKPASS, undefined);
178
180
  });
179
181
  test('C (glob, Minor fix): AWS_* admits only AWS_-prefixed names, nothing else', () => {
180
- mkdirSync(join(isolatedHome, '.crouter'), { recursive: true });
181
- writeFileSync(join(isolatedHome, '.crouter', 'config.json'), JSON.stringify({ spawnEnv: { allow: ['AWS_*'] } }));
182
+ writeRawConfig('user', { spawnEnv: { allow: ['AWS_*'] } });
182
183
  resetScopeCache();
183
184
  const env = base(LEAK_CLASS_HOST_ENV);
184
185
  assert.equal(env.AWS_ACCESS_KEY_ID, 'fake-aws-id', 'AWS_-prefixed name admitted by the glob');
@@ -248,10 +249,8 @@ test('target-scope: buildBrokerEnv resolves spawnEnv.allow from inv.env.CRTR_NOD
248
249
  }
249
250
  });
250
251
  test('target-scope: spawnEnv.allow is read from the TARGET profile id, not this process\'s ambient CRTR_PROFILE_ID', () => {
251
- const profileId = 'testprof-aaaaaaaa'; // must match the profile-id shape (<slug>-<8-hex>)
252
- const profileDir = join(isolatedHome, '.crouter', 'profiles', profileId);
253
- mkdirSync(profileDir, { recursive: true });
254
- writeFileSync(join(profileDir, 'config.json'), JSON.stringify({ spawnEnv: { allow: ['AWS_ACCESS_KEY_ID'] } }));
252
+ const { profileId } = createProfile('test profile');
253
+ updateConfigAtRoot(profileRoot(profileId), (config) => { config.spawnEnv = { allow: ['AWS_ACCESS_KEY_ID'] }; });
255
254
  resetScopeCache();
256
255
  const withoutTargetProfile = buildOperationalEnvBase({ targetCwd: isolatedCwd, targetProfileId: null, host: LEAK_CLASS_HOST_ENV });
257
256
  assert.equal(withoutTargetProfile.AWS_ACCESS_KEY_ID, undefined, 'no profile passed — the profile-scoped allow must not apply');
@@ -1,7 +1,7 @@
1
1
  import { AUTH_FAULT_RECOVERY_BODY, formatCard, } from '../../../shared/generated-context.js';
2
2
  import { envModelIntent } from '../../../shared/env.js';
3
3
  import { emitEvent } from '../../events/emit.js';
4
- import { clearFault, readFault } from '../fault.js';
4
+ import { brokerRecovery, mutateBrokerFault } from './daemon-ops.js';
5
5
  import { isUnknownModel } from '../model-selection.js';
6
6
  import { announceMessageOrigin } from '../stamp/channel.js';
7
7
  export function createAuthReloadGate(deps) {
@@ -74,22 +74,21 @@ export function createAuthReloadGate(deps) {
74
74
  /** Rewind to the entry the recorded auth fault killed and re-drive the turn
75
75
  * with the recovery prompt — once, after the reconcile it depends on. */
76
76
  const redriveAuthFault = (reload) => {
77
- const authFault = readFault(nodeId);
78
77
  const generation = rebind.installedGeneration();
79
78
  const faultSession = session();
80
- if (authFault?.link !== 'pi→provider' ||
81
- authFault.kind !== 'auth' ||
82
- faultSession.isStreaming ||
83
- faultRedriveInFlight)
79
+ if (faultSession.isStreaming || faultRedriveInFlight)
84
80
  return;
85
81
  faultRedriveInFlight = true;
86
82
  void (async () => {
87
83
  try {
84
+ const authFault = (await brokerRecovery(nodeId)).fault;
85
+ if (authFault?.link !== 'pi→provider' || authFault.kind !== 'auth')
86
+ return;
88
87
  if (reload !== undefined)
89
88
  await reload;
90
89
  if (supersededBy(generation, faultSession))
91
90
  return;
92
- const anchorEntryId = authFault.anchorEntryId;
91
+ const anchorEntryId = authFault.anchor_entry_id;
93
92
  if (anchorEntryId !== undefined) {
94
93
  try {
95
94
  const leafId = faultSession.sessionManager.getLeafId?.() ?? null;
@@ -106,19 +105,19 @@ export function createAuthReloadGate(deps) {
106
105
  });
107
106
  }
108
107
  }
109
- const fresh = readFault(nodeId);
108
+ const fresh = (await brokerRecovery(nodeId)).fault;
110
109
  if (supersededBy(generation, faultSession) ||
111
110
  faultSession.isStreaming ||
112
111
  fresh?.link !== 'pi→provider' ||
113
112
  fresh.kind !== 'auth' ||
114
113
  fresh.since !== authFault.since)
115
114
  return;
116
- await turnAdmission.admit((release) => {
115
+ await turnAdmission.admit(async (release) => {
117
116
  if (supersededBy(generation, faultSession) || faultSession.isStreaming) {
118
117
  release();
119
118
  return Promise.resolve();
120
119
  }
121
- clearFault(nodeId, { link: 'pi→provider' });
120
+ await mutateBrokerFault(nodeId, { op: 'clear', link: 'pi→provider' });
122
121
  const card = formatCard('recovery', {}, AUTH_FAULT_RECOVERY_BODY);
123
122
  announceMessageOrigin(card, { type: 'runtime', kind: 'recovery' });
124
123
  return faultSession.prompt(card, { preflightResult: release });
@@ -1,17 +1,33 @@
1
- import type { BrokerExtensionStateDTO, BrokerGeneratedNameRequest, BrokerGeneratedNameResultDTO, BrokerInboxCursorDirective, BrokerInboxCursorRequest, BrokerModelCommitRequest, BrokerModelCommitResultDTO, BrokerParkActivityResultDTO, BrokerParkCompleteRequest, BrokerPersonaAckRequest, BrokerPersonaAckResultDTO, BrokerSessionBoundRequest, BrokerSessionBoundResultDTO, BrokerSettleDirective, BrokerSettleRequest } from '../../../api/dto/broker-ops.js';
1
+ import type { BrokerExtensionStateDTO, BrokerGeneratedNameRequest, BrokerGeneratedNameResultDTO, BrokerModelCommitRequest, BrokerModelCommitResultDTO, BrokerParkActivityResultDTO, BrokerParkCompleteRequest, BrokerPersonaAckRequest, BrokerPersonaAckResultDTO, BrokerSessionBoundRequest, BrokerSessionBoundResultDTO, BrokerSettleDirective, BrokerSettleRequest } from '../../../api/dto/broker-ops.js';
2
+ import type { AcknowledgeMailResultDTO, ClaimMailResultDTO, MailReceiptDTO } from '../../../api/dto/mail.js';
3
+ import type { BrokerFaultInputDTO, BrokerFaultRequest, BrokerFaultResultDTO, BrokerProviderRetryRequest, BrokerProviderRetryResultDTO, BrokerTurnRequest, BrokerTurnResultDTO, RecoveryStateDTO } from '../../../api/dto/recovery.js';
2
4
  import type { RelaunchRootResultDTO } from '../../../api/dto/lifecycle.js';
3
5
  import type { PushReportRequest } from '../../../api/dto/reports.js';
4
- export declare function bindBrokerSession(nodeId: string, request: BrokerSessionBoundRequest): Promise<BrokerSessionBoundResultDTO>;
5
- export declare function settleBroker(nodeId: string, request: BrokerSettleRequest): Promise<BrokerSettleDirective>;
6
- export declare function completeBrokerPark(nodeId: string, request: BrokerParkCompleteRequest): Promise<BrokerSettleDirective>;
6
+ export declare function brokerExecutionId(): string;
7
+ export declare function bindBrokerSession(nodeId: string, request: Omit<BrokerSessionBoundRequest, 'executionId'>): Promise<BrokerSessionBoundResultDTO>;
8
+ type BrokerInput<T> = T extends unknown ? Omit<T, 'expected_execution_id'> : never;
9
+ export declare function settleBroker(nodeId: string, request: BrokerInput<BrokerSettleRequest>): Promise<BrokerSettleDirective>;
10
+ export declare function completeBrokerPark(nodeId: string, request: BrokerInput<BrokerParkCompleteRequest>): Promise<BrokerSettleDirective>;
7
11
  export declare function recordBrokerParkActivity(nodeId: string): Promise<BrokerParkActivityResultDTO>;
8
- export declare function advanceBrokerInboxCursor(nodeId: string, request: BrokerInboxCursorRequest): Promise<BrokerInboxCursorDirective>;
12
+ export declare function claimBrokerMail(nodeId: string, channel: 'wake' | 'passive'): Promise<ClaimMailResultDTO>;
13
+ export declare function acknowledgeBrokerMail(nodeId: string, deliveries: MailReceiptDTO[]): Promise<AcknowledgeMailResultDTO>;
14
+ export declare function recordBrokerTurn(nodeId: string, request: Omit<BrokerTurnRequest, 'expected_execution_id'>): Promise<BrokerTurnResultDTO>;
15
+ export declare function mutateBrokerProviderRetry(nodeId: string, request: Omit<BrokerProviderRetryRequest, 'expected_execution_id'>): Promise<BrokerProviderRetryResultDTO>;
16
+ export declare function mutateBrokerFault(nodeId: string, request: Omit<BrokerFaultRequest, 'expected_execution_id'>): Promise<BrokerFaultResultDTO>;
17
+ export declare function brokerRecovery(nodeId: string): Promise<RecoveryStateDTO>;
18
+ /** Node-scoped fault writes are for non-broker clients such as attach transport.
19
+ * Broker-owned recovery mutations use the execution-fenced wrappers above. */
20
+ export declare function recordNodeFault(nodeId: string, input: BrokerFaultInputDTO): Promise<BrokerFaultResultDTO>;
21
+ export declare function clearNodeFault(nodeId: string, opts?: {
22
+ link?: BrokerFaultInputDTO['link'];
23
+ preserveEpisode?: boolean;
24
+ }): Promise<boolean>;
9
25
  /** Fixed canvas projection for broker extension rendering. It deliberately
10
26
  * exposes no generic node/database facade. */
11
- export declare function commitBrokerModel(nodeId: string, request: BrokerModelCommitRequest): Promise<BrokerModelCommitResultDTO>;
27
+ export declare function commitBrokerModel(nodeId: string, request: BrokerInput<BrokerModelCommitRequest>): Promise<BrokerModelCommitResultDTO>;
12
28
  export declare function brokerExtensionState(nodeId: string): Promise<BrokerExtensionStateDTO>;
13
- export declare function commitBrokerGeneratedName(nodeId: string, request: BrokerGeneratedNameRequest): Promise<BrokerGeneratedNameResultDTO>;
14
- export declare function commitBrokerPersonaAck(nodeId: string, request: BrokerPersonaAckRequest): Promise<BrokerPersonaAckResultDTO>;
29
+ export declare function commitBrokerGeneratedName(nodeId: string, request: BrokerInput<BrokerGeneratedNameRequest>): Promise<BrokerGeneratedNameResultDTO>;
30
+ export declare function commitBrokerPersonaAck(nodeId: string, request: BrokerInput<BrokerPersonaAckRequest>): Promise<BrokerPersonaAckResultDTO>;
15
31
  /** Reports still use the canonical daemon report handler; this broker adapter
16
32
  * only preserves terminal structured output's idempotent finalization result. */
17
33
  export declare function publishBrokerReport(nodeId: string, request: PushReportRequest): Promise<void>;
@@ -19,3 +35,4 @@ export declare function publishBrokerReport(nodeId: string, request: PushReportR
19
35
  * a replacement broker and tears down this broker. Callers must not await it
20
36
  * from Pi's session-start dispatch. */
21
37
  export declare function relaunchBrokerRoot(nodeId: string): Promise<RelaunchRootResultDTO>;
38
+ export {};