@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
@@ -4,7 +4,11 @@ import { tmpdir } from 'node:os';
4
4
  import { join } from 'node:path';
5
5
  import { afterEach, test } from 'node:test';
6
6
  import { createNode } from '../../canvas/canvas.js';
7
- import { closeDb } from '../../canvas/db.js';
7
+ import { closeDb, migrate, openDb } from '../../canvas/db.js';
8
+ import { resetSession } from '../../canvas/sessions.js';
9
+ import { resetScopeCache } from '../../scope.js';
10
+ import { closeScopedStores } from '../../scoped-state/db.js';
11
+ import { initializeFreshScopedStore } from '../../scoped-state/migrate.js';
8
12
  import { SessionManager } from '../../runtime/broker-sdk.js';
9
13
  import { captureOrigin } from '../companion.js';
10
14
  import { stageReview } from '../stage.js';
@@ -20,6 +24,7 @@ const previousHome = process.env['HOME'];
20
24
  const previousCrtrHome = process.env['CRTR_HOME'];
21
25
  afterEach(() => {
22
26
  closeDb();
27
+ closeScopedStores();
23
28
  for (const home of homes.splice(0))
24
29
  rmSync(home, { recursive: true, force: true });
25
30
  if (previousHome === undefined)
@@ -30,12 +35,17 @@ afterEach(() => {
30
35
  delete process.env['CRTR_HOME'];
31
36
  else
32
37
  process.env['CRTR_HOME'] = previousCrtrHome;
38
+ resetScopeCache();
33
39
  });
34
40
  function home() {
35
41
  const value = mkdtempSync(join(tmpdir(), 'crtr-review-capture-'));
36
42
  homes.push(value);
37
43
  process.env['HOME'] = value;
38
- process.env['CRTR_HOME'] = value;
44
+ process.env['CRTR_HOME'] = join(value, 'canvas');
45
+ resetScopeCache();
46
+ initializeFreshScopedStore({ kind: 'user', root: join(value, '.crouter') });
47
+ initializeFreshScopedStore({ kind: 'provider', root: join(value, '.pi', 'agent') });
48
+ migrate(openDb());
39
49
  return value;
40
50
  }
41
51
  function node(id, cwd, sourceFile, launchModel) {
@@ -70,6 +80,7 @@ function seededOrigin(options = {}) {
70
80
  });
71
81
  const sourceFile = options.sourceFile ?? session.getSessionFile();
72
82
  createNode(node('origin', cwd, sourceFile, options.launchModel));
83
+ resetSession('origin', { sessionId: session.getSessionId(), transcriptPath: sourceFile });
73
84
  return { cwd, session, sourceFile };
74
85
  }
75
86
  async function capture(options) {
@@ -3,23 +3,41 @@ import { mkdtempSync, rmSync } from 'node:fs';
3
3
  import { test } from 'node:test';
4
4
  import { tmpdir } from 'node:os';
5
5
  import { join } from 'node:path';
6
- import { closeDb, openDb } from '../../canvas/db.js';
6
+ import { closeDb, migrate, openDb } from '../../canvas/db.js';
7
+ import { commitBindingRequest, openRequest } from '../../human/requests.js';
7
8
  import { createComment, deleteComment, editComment, getComment, listCommentEvents, listComments, listReviewEvents, reopenComment, resolveComment, } from '../comments.js';
8
9
  function seedReview(reviewId) {
9
- openDb().prepare(`
10
- INSERT INTO reviews
11
- (review_id, idempotency_key, origin_kind, origin_node_id, companion_node_id, review_dir,
12
- file, origin_session_file, origin_session_id, origin_leaf_id, model_spec, branch_file,
13
- baseline_sha256, baseline_bytes, anchor_base_sha256, anchor_base_bytes, state, created, captured_at)
14
- VALUES (?, ?, 'inline', 'origin', 'companion', '/tmp/review', '/tmp/source.md',
15
- '/tmp/session.jsonl', 'session', 'leaf', 'anthropic/claude', '/tmp/branch.jsonl',
16
- 'baseline', 4, 'baseline', ?, 'open', ?, ?)
17
- `).run(reviewId, `idempotency-${reviewId}`, Buffer.from('base'), '2026-01-01T00:00:00.000Z', '2026-01-01T00:00:00.000Z');
10
+ const created = '2026-01-01T00:00:00.000Z';
11
+ commitBindingRequest({
12
+ request_id: reviewId,
13
+ idempotency_key: `idempotency-${reviewId}`,
14
+ requester_node_id: 'origin',
15
+ companion_node_id: 'companion',
16
+ request_dir: '/tmp/review',
17
+ file: '/tmp/source.md',
18
+ specification: {
19
+ origin_kind: 'inline',
20
+ origin_session_file: '/tmp/session.jsonl',
21
+ origin_session_id: 'session',
22
+ origin_leaf_id: 'leaf',
23
+ model_spec: 'anthropic/claude',
24
+ branch_file: '/tmp/branch.jsonl',
25
+ baseline_sha256: 'baseline',
26
+ baseline_bytes: 4,
27
+ captured_at: created,
28
+ },
29
+ anchor_base_sha256: 'baseline',
30
+ anchor_base_bytes: Buffer.from('base'),
31
+ created_at: created,
32
+ inbox_listed: false,
33
+ });
34
+ assert.equal(openRequest(reviewId, created), true);
18
35
  }
19
36
  test('comment projection and audit are durable, idempotent, and terminally tombstoned', () => {
20
37
  const home = mkdtempSync(join(tmpdir(), 'crtr-comments-store-'));
21
38
  const previousHome = process.env['CRTR_HOME'];
22
39
  process.env['CRTR_HOME'] = home;
40
+ migrate(openDb());
23
41
  try {
24
42
  const reviewId = 'review-comments-test';
25
43
  seedReview(reviewId);
@@ -3,22 +3,39 @@ import { mkdtempSync, rmSync, writeFileSync } from 'node:fs';
3
3
  import { tmpdir } from 'node:os';
4
4
  import { join } from 'node:path';
5
5
  import { test } from 'node:test';
6
- import { closeDb, openDb, withCanvasWrite } from '../../canvas/db.js';
6
+ import { closeDb, migrate, openDb, withCanvasWrite } from '../../canvas/db.js';
7
+ import { commitBindingRequest, openRequest } from '../../human/requests.js';
7
8
  import { createComment, getComment, listCommentEvents } from '../comments.js';
8
9
  import { captureAnchorText, requireCurrentDocument, requireCurrentDocumentLocked, readReviewSource } from '../document.js';
9
10
  import { applyRangeBatch } from '../remap.js';
10
11
  import { readAnchorBase, getReview } from '../store.js';
11
12
  import { ReviewOperationError } from '../types.js';
12
13
  function seedReview(reviewId, file, hash, bytes) {
13
- openDb().prepare(`
14
- INSERT INTO reviews
15
- (review_id, idempotency_key, origin_kind, origin_node_id, companion_node_id, review_dir,
16
- file, origin_session_file, origin_session_id, origin_leaf_id, model_spec, branch_file,
17
- baseline_sha256, baseline_bytes, anchor_base_sha256, anchor_base_bytes, state, created, captured_at)
18
- VALUES (?, ?, 'inline', 'origin', 'companion', '/tmp/review', ?,
19
- '/tmp/session.jsonl', 'session', 'leaf', 'openai/gpt', '/tmp/branch.jsonl',
20
- ?, ?, ?, ?, 'open', ?, ?)
21
- `).run(reviewId, `idempotency-${reviewId}`, file, hash, bytes.length, hash, bytes, '2026-01-01T00:00:00.000Z', '2026-01-01T00:00:00.000Z');
14
+ const created = '2026-01-01T00:00:00.000Z';
15
+ commitBindingRequest({
16
+ request_id: reviewId,
17
+ idempotency_key: `idempotency-${reviewId}`,
18
+ requester_node_id: 'origin',
19
+ companion_node_id: 'companion',
20
+ request_dir: '/tmp/review',
21
+ file,
22
+ specification: {
23
+ origin_kind: 'inline',
24
+ origin_session_file: '/tmp/session.jsonl',
25
+ origin_session_id: 'session',
26
+ origin_leaf_id: 'leaf',
27
+ model_spec: 'openai/gpt',
28
+ branch_file: '/tmp/branch.jsonl',
29
+ baseline_sha256: hash,
30
+ baseline_bytes: bytes.length,
31
+ captured_at: created,
32
+ },
33
+ anchor_base_sha256: hash,
34
+ anchor_base_bytes: bytes,
35
+ created_at: created,
36
+ inbox_listed: false,
37
+ });
38
+ assert.equal(openRequest(reviewId, created), true);
22
39
  }
23
40
  function expectReviewError(action, code) {
24
41
  let caught;
@@ -58,6 +75,7 @@ test('document preconditions and a full range batch preserve comment identity an
58
75
  const home = mkdtempSync(join(tmpdir(), 'crtr-review-remap-'));
59
76
  const previousHome = process.env['CRTR_HOME'];
60
77
  process.env['CRTR_HOME'] = home;
78
+ migrate(openDb());
61
79
  try {
62
80
  const file = join(home, 'review.md');
63
81
  writeFileSync(file, 'one\ntwo\nthree\n');
@@ -1,10 +1,14 @@
1
1
  import assert from 'node:assert/strict';
2
- import { mkdtempSync, mkdirSync, readdirSync, realpathSync, renameSync, rmSync, writeFileSync } from 'node:fs';
2
+ import { existsSync, mkdtempSync, mkdirSync, readdirSync, realpathSync, renameSync, rmSync, writeFileSync } from 'node:fs';
3
3
  import { tmpdir } from 'node:os';
4
4
  import { join } from 'node:path';
5
5
  import { afterEach, test } from 'node:test';
6
6
  import { createNode } from '../../canvas/canvas.js';
7
- import { closeDb, openDb } from '../../canvas/db.js';
7
+ import { closeDb, migrate, openDb } from '../../canvas/db.js';
8
+ import { resetSession } from '../../canvas/sessions.js';
9
+ import { resetScopeCache } from '../../scope.js';
10
+ import { closeScopedStores } from '../../scoped-state/db.js';
11
+ import { initializeFreshScopedStore } from '../../scoped-state/migrate.js';
8
12
  import { SessionManager } from '../../runtime/broker-sdk.js';
9
13
  import { stageReview } from '../stage.js';
10
14
  import { ReviewOperationError } from '../types.js';
@@ -14,6 +18,7 @@ const previousAgentDir = process.env['PI_CODING_AGENT_DIR'];
14
18
  const homes = [];
15
19
  afterEach(() => {
16
20
  closeDb();
21
+ closeScopedStores();
17
22
  for (const home of homes.splice(0))
18
23
  rmSync(home, { recursive: true, force: true });
19
24
  if (previousHome === undefined)
@@ -28,6 +33,7 @@ afterEach(() => {
28
33
  delete process.env['PI_CODING_AGENT_DIR'];
29
34
  else
30
35
  process.env['PI_CODING_AGENT_DIR'] = previousAgentDir;
36
+ resetScopeCache();
31
37
  });
32
38
  function assistant(model) {
33
39
  return {
@@ -45,9 +51,13 @@ function setup() {
45
51
  const home = mkdtempSync(join(tmpdir(), 'crtr-review-identity-'));
46
52
  homes.push(home);
47
53
  process.env['HOME'] = home;
48
- process.env['CRTR_HOME'] = home;
54
+ process.env['CRTR_HOME'] = join(home, 'canvas');
55
+ resetScopeCache();
56
+ initializeFreshScopedStore({ kind: 'user', root: join(home, '.crouter') });
57
+ migrate(openDb());
49
58
  const agentDir = join(home, 'agent');
50
59
  mkdirSync(agentDir);
60
+ initializeFreshScopedStore({ kind: 'provider', root: agentDir });
51
61
  process.env['PI_CODING_AGENT_DIR'] = agentDir;
52
62
  writeFileSync(join(agentDir, 'models.json'), JSON.stringify({
53
63
  providers: {
@@ -73,9 +83,9 @@ function setup() {
73
83
  mode: 'base',
74
84
  lifecycle: 'terminal',
75
85
  status: 'idle',
76
- pi_session_file: sourceFile,
77
86
  launch: { extensions: [], env: {}, model: 'lm-studio/m:high' },
78
87
  });
88
+ resetSession('origin', { sessionId: original.getSessionId(), transcriptPath: sourceFile });
79
89
  const target = join(home, 'target.md');
80
90
  writeFileSync(target, '# target\n');
81
91
  return { home, sessions, sourceFile, target };
@@ -87,7 +97,7 @@ function replacement(sessions, thinking) {
87
97
  return next.getSessionFile();
88
98
  }
89
99
  function reviewCount() {
90
- return openDb().prepare('SELECT COUNT(*) AS count FROM reviews').get().count;
100
+ return openDb().prepare("SELECT COUNT(*) AS count FROM human_requests WHERE kind = 'review'").get().count;
91
101
  }
92
102
  async function stageWithCapturedFileReplacements(fixture, replacements) {
93
103
  const originalOpen = SessionManager.open;
@@ -134,7 +144,7 @@ test('stageReview rejects a source file that loses identity twice', async () =>
134
144
  assert.equal(error.code, 'review_origin_unstable');
135
145
  return true;
136
146
  });
137
- const reviews = join(fixture.home, 'reviews');
138
- assert.equal(readdirSync(reviews).length, 0);
147
+ const reviews = join(fixture.home, 'canvas', 'reviews');
148
+ assert.equal(existsSync(reviews) ? readdirSync(reviews).length : 0, 0);
139
149
  assert.equal(reviewCount(), 0);
140
150
  });
@@ -1,5 +1,5 @@
1
- import { type StageReviewArgs } from './stage.js';
2
1
  import type { ReviewRecord } from './types.js';
2
+ import { type StageReviewArgs } from './stage.js';
3
3
  /**
4
4
  * Stage filesystem-only fork state, atomically select the canonical binding,
5
5
  * then realize that committed winner. Staging is never visible by itself.
@@ -1,4 +1,5 @@
1
- import { commitBindingReview } from './store.js';
1
+ import { commitBindingRequest } from '../human/requests.js';
2
+ import { getReview } from './store.js';
2
3
  import { discardStaging, stageReview } from './stage.js';
3
4
  import { realizeReview } from './realize.js';
4
5
  /**
@@ -7,11 +8,35 @@ import { realizeReview } from './realize.js';
7
8
  */
8
9
  export async function createReview(args) {
9
10
  const staged = await stageReview(args);
10
- if (staged.existing !== undefined)
11
- return realizeReview(staged.existing.review_id);
11
+ if (staged.existing !== undefined) {
12
+ await realizeReview(staged.existing.request_id);
13
+ const review = getReview(staged.existing.request_id);
14
+ if (review === null)
15
+ throw new Error(`realized review disappeared: ${staged.existing.request_id}`);
16
+ return review;
17
+ }
12
18
  let committed;
13
19
  try {
14
- committed = commitBindingReview(staged.row);
20
+ committed = commitBindingRequest({
21
+ request_id: staged.row.review_id,
22
+ idempotency_key: staged.row.idempotency_key,
23
+ requester_node_id: staged.row.origin_node_id,
24
+ companion_node_id: staged.row.companion_node_id,
25
+ request_dir: staged.row.review_dir,
26
+ file: staged.row.file,
27
+ specification: {
28
+ origin_kind: staged.row.origin_kind,
29
+ origin_session_file: staged.row.origin_session_file, origin_session_id: staged.row.origin_session_id,
30
+ origin_leaf_id: staged.row.origin_leaf_id, model_spec: staged.row.model_spec, branch_file: staged.row.branch_file,
31
+ baseline_sha256: staged.row.baseline_sha256, baseline_bytes: staged.row.baseline_bytes,
32
+ captured_at: staged.row.captured_at, output_path: staged.row.output_path,
33
+ },
34
+ anchor_base_sha256: staged.row.anchor_base_sha256,
35
+ anchor_base_bytes: staged.row.anchor_base_bytes,
36
+ created_at: staged.row.created,
37
+ subtitle: staged.row.subtitle,
38
+ inbox_listed: staged.row.origin_kind === 'ticket',
39
+ });
15
40
  }
16
41
  catch (error) {
17
42
  discardStaging(staged.row.review_id);
@@ -19,5 +44,9 @@ export async function createReview(args) {
19
44
  }
20
45
  if (!committed.won)
21
46
  discardStaging(staged.row.review_id);
22
- return realizeReview(committed.review_id);
47
+ await realizeReview(committed.request_id);
48
+ const review = getReview(committed.request_id);
49
+ if (review === null)
50
+ throw new Error(`realized review disappeared: ${committed.request_id}`);
51
+ return review;
23
52
  }
@@ -88,7 +88,7 @@ function requireStoredComment(db, commentIdValue) {
88
88
  return row;
89
89
  }
90
90
  function assertReviewExists(db, reviewId) {
91
- const row = db.prepare('SELECT review_id FROM reviews WHERE review_id = ?').get(reviewId);
91
+ const row = db.prepare("SELECT request_id FROM human_requests WHERE request_id = ? AND kind = 'review' AND state = 'open'").get(reviewId);
92
92
  if (row === undefined) {
93
93
  throw new ReviewOperationError('unknown_review', 'review was not found', { received: reviewId });
94
94
  }
@@ -68,7 +68,7 @@ export function requireCurrentDocument(review, expected_doc_hash) {
68
68
  }
69
69
  /** Verify a create-time source precondition from the review row held by the caller's canvas write transaction. */
70
70
  export function requireCurrentDocumentLocked(db, review_id, expected_doc_hash) {
71
- const review = db.prepare('SELECT file, anchor_base_sha256 FROM reviews WHERE review_id = ?').get(review_id);
71
+ const review = db.prepare("SELECT file, anchor_base_sha256 FROM human_requests WHERE request_id = ? AND kind = 'review' AND state = 'open'").get(review_id);
72
72
  if (review === undefined) {
73
73
  throw new ReviewOperationError('unknown_review', 'review was not found', { received: review_id });
74
74
  }
@@ -7,7 +7,11 @@ export interface ReviewCommentSnapshot {
7
7
  }
8
8
  /** Build the immutable approval result from the review row and one comment snapshot. */
9
9
  export declare function buildReviewResult(review: ReviewRecord, snapshot: ReviewCommentSnapshot, approvedSha256: string, at: string): ReviewResult;
10
- /** Project one immutable result to ticket/output or inline result surfaces. */
10
+ /** Project every terminal review from its SQL row; no ticket bridge participates. */
11
11
  export declare function projectReviewResult(review: ReviewRecord, result: ReviewResult): {
12
12
  destinations: string[];
13
13
  };
14
+ /** Cancellation has no review approval payload but still receives a durable projection. */
15
+ export declare function projectReviewCancellation(review: ReviewRecord, result: unknown): {
16
+ destinations: string[];
17
+ };
@@ -1,7 +1,5 @@
1
1
  import { join } from 'node:path';
2
- import { atomicWriteJson, publishJsonExclusive, responsePath } from '../human/convention.js';
3
- import { ticketDir } from '../human/root.js';
4
- import { reviewResultPath } from '../canvas/paths.js';
2
+ import { atomicWriteJson } from '../human/convention.js';
5
3
  /** Build the immutable approval result from the review row and one comment snapshot. */
6
4
  export function buildReviewResult(review, snapshot, approvedSha256, at) {
7
5
  return {
@@ -21,38 +19,18 @@ export function buildReviewResult(review, snapshot, approvedSha256, at) {
21
19
  savedAt: at,
22
20
  };
23
21
  }
24
- /** Project one immutable result to ticket/output or inline result surfaces. */
22
+ /** Project every terminal review from its SQL row; no ticket bridge participates. */
25
23
  export function projectReviewResult(review, result) {
26
- const destinations = [];
27
- if (review.origin_kind === 'ticket') {
28
- if (review.bridge_node_id === null)
29
- throw new Error(`ticket review has no bridge node: ${review.review_id}`);
30
- const dir = ticketDir(review.bridge_node_id);
31
- const feedback = {
32
- file: result.file,
33
- submitted: result.submitted,
34
- approved: result.approved,
35
- comments: result.comments,
36
- submittedAt: result.submittedAt,
37
- savedAt: result.savedAt,
38
- reviewId: result.review_id,
39
- changed: result.changed,
40
- baselineSha256: result.baseline_sha256,
41
- approvedSha256: result.approved_sha256,
42
- companionNodeId: result.companion_node_id,
43
- commentsTotal: result.comments_total,
44
- commentsUnresolved: result.comments_unresolved,
45
- };
46
- const response = responsePath(dir);
47
- publishJsonExclusive(response, { schema: 'humanloop.review-response/v1', kind: 'review', result: feedback, completedAt: result.submittedAt });
48
- destinations.push(response);
49
- const output = review.output_path ?? join(dir, 'feedback.json');
50
- atomicWriteJson(output, feedback);
51
- destinations.push(output);
52
- return { destinations };
53
- }
54
- const output = reviewResultPath(review.review_id);
55
- atomicWriteJson(output, result);
56
- destinations.push(output);
57
- return { destinations };
24
+ const resultPath = join(review.review_dir, 'result.json');
25
+ atomicWriteJson(resultPath, result);
26
+ const output = review.output_path ?? join(review.review_dir, 'feedback.json');
27
+ if (output !== resultPath)
28
+ atomicWriteJson(output, result);
29
+ return { destinations: output === resultPath ? [resultPath] : [resultPath, output] };
30
+ }
31
+ /** Cancellation has no review approval payload but still receives a durable projection. */
32
+ export function projectReviewCancellation(review, result) {
33
+ const resultPath = join(review.review_dir, 'result.json');
34
+ atomicWriteJson(resultPath, result);
35
+ return { destinations: [resultPath] };
58
36
  }
@@ -1,6 +1,3 @@
1
- import { type ReviewRecord } from './types.js';
2
- /**
3
- * Finish a committed binding without ever recapturing its origin. Each step is
4
- * safe to repeat after a crash; review.json is the final visibility switch.
5
- */
6
- export declare function realizeReview(reviewId: string): Promise<ReviewRecord>;
1
+ import { type HumanRequestRecord } from '../human/requests.js';
2
+ /** Finish a committed binding without bridge creation or directory descriptor publication. */
3
+ export declare function realizeReview(reviewId: string): Promise<HumanRequestRecord>;