@north-light/crouter 0.3.312 → 0.3.314

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (497) hide show
  1. package/dist/api/client.d.ts +27 -30
  2. package/dist/api/client.js +80 -67
  3. package/dist/api/dto/broker-ops.d.ts +10 -20
  4. package/dist/api/dto/canvas.d.ts +1 -10
  5. package/dist/api/dto/health.d.ts +113 -0
  6. package/dist/api/dto/human-requests.d.ts +14 -3
  7. package/dist/api/dto/human.d.ts +2 -48
  8. package/dist/api/dto/human.js +3 -2
  9. package/dist/api/dto/inbox.d.ts +14 -0
  10. package/dist/api/dto/mail.d.ts +43 -0
  11. package/dist/api/dto/nodes.d.ts +11 -8
  12. package/dist/api/dto/recovery.d.ts +96 -0
  13. package/dist/api/dto/reviews.d.ts +2 -2
  14. package/dist/api/routes.d.ts +9 -6
  15. package/dist/api/routes.js +11 -11
  16. package/dist/build-root.d.ts +4 -0
  17. package/dist/build-root.js +11 -1
  18. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/integration/provider-rotation.test.ts +35 -47
  19. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/provider-rotation.d.ts +1 -1
  20. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/provider-rotation.js +12 -5
  21. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/provider-rotation.ts +12 -5
  22. package/dist/cli.js +10 -1
  23. package/dist/clients/__tests__/helpers/human-daemon.d.ts +11 -0
  24. package/dist/clients/__tests__/helpers/human-daemon.js +60 -0
  25. package/dist/clients/attach/chrome/canvas-panels.js +1 -1
  26. package/dist/clients/attach/chrome/inbox-strip.d.ts +3 -3
  27. package/dist/clients/attach/chrome/inbox-strip.js +17 -9
  28. package/dist/clients/attach/chrome/ticket-panel.d.ts +2 -2
  29. package/dist/clients/attach/chrome/ticket-panel.js +77 -46
  30. package/dist/clients/attach/overlays/graph.js +6 -9
  31. package/dist/clients/attach/render/chat-view.d.ts +5 -4
  32. package/dist/clients/attach/render/chat-view.js +22 -13
  33. package/dist/clients/attach/render/page-block.d.ts +11 -7
  34. package/dist/clients/attach/render/page-block.js +64 -55
  35. package/dist/clients/attach/viewer.js +757 -746
  36. package/dist/clients/inbox/__tests__/integration/inbox-controller.test.js +56 -56
  37. package/dist/clients/inbox/__tests__/integration/stale-row-activation.test.js +45 -32
  38. package/dist/clients/inbox/controller.d.ts +42 -14
  39. package/dist/clients/inbox/controller.js +240 -124
  40. package/dist/clients/inbox/dto-adapt.d.ts +28 -0
  41. package/dist/clients/inbox/dto-adapt.js +93 -0
  42. package/dist/clients/inbox/page-adapter.d.ts +5 -4
  43. package/dist/clients/inbox/page-adapter.js +12 -12
  44. package/dist/clients/inbox/resolve.d.ts +10 -5
  45. package/dist/clients/inbox/resolve.js +13 -12
  46. package/dist/clients/inbox/review/review-client.d.ts +0 -1
  47. package/dist/clients/inbox/review/review-client.js +0 -4
  48. package/dist/clients/inbox/review-adapter.d.ts +2 -1
  49. package/dist/clients/inbox/review-adapter.js +3 -5
  50. package/dist/clients/inbox/surface.d.ts +2 -2
  51. package/dist/clients/inbox/surface.js +19 -8
  52. package/dist/clients/inbox/tui.d.ts +3 -3
  53. package/dist/commands/__tests__/human.test.js +31 -15
  54. package/dist/commands/__tests__/integration/dashboard-snapshot.test.js +36 -11
  55. package/dist/commands/{sys/__tests__ → __tests__/integration}/migrate.test.js +142 -36
  56. package/dist/commands/__tests__/revive-now-gate.test.js +2 -0
  57. package/dist/commands/api-client.d.ts +5 -4
  58. package/dist/commands/api-client.js +13 -7
  59. package/dist/commands/canvas-history/shared.js +1 -1
  60. package/dist/commands/canvas-history.js +1 -1
  61. package/dist/commands/canvas-roster.js +1 -1
  62. package/dist/commands/canvas.js +1 -2
  63. package/dist/commands/human/feedback.js +20 -17
  64. package/dist/commands/human/prompts.js +45 -36
  65. package/dist/commands/human/queue.js +73 -123
  66. package/dist/commands/human/review.js +6 -16
  67. package/dist/commands/memory/__tests__/command-selector-and-mutation-guards.test.js +2 -0
  68. package/dist/commands/memory/__tests__/memory-list-and-lint-ignore.test.js +2 -0
  69. package/dist/commands/memory/__tests__/repository-root-lint.test.js +2 -0
  70. package/dist/commands/node-inspect-artifacts.js +1 -1
  71. package/dist/commands/node-lifecycle-revive.d.ts +2 -2
  72. package/dist/commands/node-lifecycle-revive.js +9 -19
  73. package/dist/commands/pkg/plugin-manage.js +0 -1
  74. package/dist/commands/profile/show.js +4 -12
  75. package/dist/commands/surface-tmux-spread.js +1 -5
  76. package/dist/commands/sys/__tests__/config-model-ladders.test.js +23 -30
  77. package/dist/commands/sys/__tests__/sync-project-guidance.test.js +37 -11
  78. package/dist/commands/sys/branch.d.ts +2 -0
  79. package/dist/commands/sys/branch.js +19 -0
  80. package/dist/commands/sys/config.js +106 -33
  81. package/dist/commands/sys/daemon.d.ts +2 -0
  82. package/dist/commands/sys/daemon.js +130 -7
  83. package/dist/commands/sys/doctor.js +5 -15
  84. package/dist/commands/sys/migrate.js +21 -92
  85. package/dist/commands/sys/setup-settings-runner.js +4 -2
  86. package/dist/commands/sys.js +2 -15
  87. package/dist/core/__tests__/boot-fault-attempt.test.js +23 -1
  88. package/dist/core/__tests__/boot.test.js +32 -25
  89. package/dist/core/__tests__/broker-launch-candidates.test.js +49 -0
  90. package/dist/core/__tests__/canvas-inbox-watcher-hold.test.js +149 -176
  91. package/dist/core/__tests__/canvas-inbox-watcher-naming.test.js +59 -10
  92. package/dist/core/__tests__/canvas-inbox-watcher.test.js +76 -20
  93. package/dist/core/__tests__/canvas.test.js +18 -47
  94. package/dist/core/__tests__/child-death-wake.test.js +29 -7
  95. package/dist/core/__tests__/cli-help-contract.test.js +2 -0
  96. package/dist/core/__tests__/close.test.js +29 -10
  97. package/dist/core/__tests__/collectible.test.js +2 -1
  98. package/dist/core/__tests__/config-change-delta.test.js +2 -0
  99. package/dist/core/__tests__/context-intro.test.js +13 -1
  100. package/dist/core/__tests__/cron-armed-context-failure.test.js +17 -12
  101. package/dist/core/__tests__/cron-held-settlement.test.js +21 -3
  102. package/dist/core/__tests__/cron-node-sink-parked-root.test.js +29 -10
  103. package/dist/core/__tests__/cron-self-cancel-delivery.test.js +14 -2
  104. package/dist/core/__tests__/cron-timeout-descendants.test.js +13 -1
  105. package/dist/core/__tests__/daemon-boot.test.js +51 -14
  106. package/dist/core/__tests__/fixtures/fake-engine.d.ts +1 -1
  107. package/dist/core/__tests__/fixtures/fake-engine.js +8 -3
  108. package/dist/core/__tests__/focuses.test.js +10 -5
  109. package/dist/core/__tests__/helpers/harness.js +50 -18
  110. package/dist/core/__tests__/history-inbox.test.js +12 -16
  111. package/dist/core/__tests__/human-action-delivery.test.js +48 -28
  112. package/dist/core/__tests__/human-actions.test.js +7 -3
  113. package/dist/core/__tests__/inline-memory-refs.test.js +7 -2
  114. package/dist/core/__tests__/integration/broker-fork-seam.test.js +37 -10
  115. package/dist/core/__tests__/integration/broker-sdk-wiring.test.js +42 -0
  116. package/dist/core/__tests__/integration/broker-snapshot-history.test.js +42 -29
  117. package/dist/core/__tests__/integration/broker-wedge-supervision.test.js +36 -35
  118. package/dist/core/__tests__/integration/command-plugins.test.js +15 -6
  119. package/dist/core/__tests__/integration/deferred-no-wake.test.js +113 -92
  120. package/dist/core/__tests__/integration/fresh-home-commands.test.js +49 -0
  121. package/dist/core/__tests__/integration/host-teardown-process-group.test.js +9 -5
  122. package/dist/core/__tests__/integration/lifecycle-hooks.test.js +16 -3
  123. package/dist/core/__tests__/integration/plugin-revalidate.test.js +4 -0
  124. package/dist/core/__tests__/integration/profile-pause.test.js +4 -4
  125. package/dist/core/__tests__/integration/refresh-stall-recycle.test.js +9 -12
  126. package/dist/core/__tests__/integration/revive.test.js +67 -21
  127. package/dist/core/__tests__/integration/spawn-root.test.js +51 -8
  128. package/dist/core/__tests__/integration/subscription-delivery.test.js +33 -21
  129. package/dist/core/__tests__/integration/worktree-land.test.js +5 -2
  130. package/dist/core/__tests__/integration/worktree-reap.test.js +15 -1
  131. package/dist/core/__tests__/kickoff.test.js +36 -39
  132. package/dist/core/__tests__/lifecycle-terminal-reasons.test.js +2 -1
  133. package/dist/core/__tests__/lifecycle.test.js +2 -1
  134. package/dist/core/__tests__/live-lifecycle-prompt.test.js +13 -1
  135. package/dist/core/__tests__/memory-resolver-precedence.test.js +2 -0
  136. package/dist/core/__tests__/migration.test.js +145 -31
  137. package/dist/core/__tests__/model-pin-durability.test.js +4 -1
  138. package/dist/core/__tests__/model-routes-config.test.js +13 -5
  139. package/dist/core/__tests__/node-outcome.test.js +93 -26
  140. package/dist/core/__tests__/on-read-crouter-home-fence.test.js +2 -1
  141. package/dist/core/__tests__/on-read-dedup-resume.test.js +2 -1
  142. package/dist/core/__tests__/on-read-nested-store.test.js +2 -1
  143. package/dist/core/__tests__/passive-subscription.test.js +50 -157
  144. package/dist/core/__tests__/plugin-kinds.test.js +6 -4
  145. package/dist/core/__tests__/plugin-link-symlinked-scope-root.test.js +6 -1
  146. package/dist/core/__tests__/plugin-page-components.test.js +6 -4
  147. package/dist/core/__tests__/preview-registry-sync.test.js +2 -0
  148. package/dist/core/__tests__/profile-project-memory-delivery.test.js +4 -1
  149. package/dist/core/__tests__/prune.test.js +11 -5
  150. package/dist/core/__tests__/push-final-guard.test.js +14 -7
  151. package/dist/core/__tests__/relaunch-root.test.js +30 -2
  152. package/dist/core/__tests__/remote-canvas-target.test.js +7 -1
  153. package/dist/core/__tests__/repository-root-identity.test.js +4 -0
  154. package/dist/core/__tests__/review-model-floor.test.js +6 -3
  155. package/dist/core/__tests__/revive-all.test.js +13 -3
  156. package/dist/core/__tests__/revive-capacity.test.js +26 -4
  157. package/dist/core/__tests__/revive-parked-fresh.test.js +31 -8
  158. package/dist/core/__tests__/seam/broker-attach-stream.test.js +1 -1
  159. package/dist/core/__tests__/seam/broker-cap-freeze.test.js +4 -3
  160. package/dist/core/__tests__/seam/broker-crash-teardown.test.js +11 -14
  161. package/dist/core/__tests__/seam/broker-provider-retry.test.js +85 -71
  162. package/dist/core/__tests__/seam/dormancy-release.test.js +33 -19
  163. package/dist/core/__tests__/seam/held-deferred-human-prompt.test.js +7 -5
  164. package/dist/core/__tests__/seam/inbox-reference-guidance.test.js +20 -6
  165. package/dist/core/__tests__/seam/node-outcome-delivery.test.js +27 -3
  166. package/dist/core/__tests__/spawn-worktree-id-conflict.test.js +2 -1
  167. package/dist/core/__tests__/stop-guard.test.js +2 -1
  168. package/dist/core/__tests__/subscription-pool-credential-guard.test.js +4 -3
  169. package/dist/core/__tests__/warm-claim-preference-snapshot.test.js +18 -4
  170. package/dist/core/__tests__/yield-ensures-daemon.test.js +2 -1
  171. package/dist/core/bootstrap.js +2 -0
  172. package/dist/core/broker-client/__tests__/transport-socket.test.js +51 -6
  173. package/dist/core/broker-client/transport-socket.d.ts +1 -0
  174. package/dist/core/broker-client/transport-socket.js +13 -5
  175. package/dist/core/canvas/__tests__/attention.test.js +29 -35
  176. package/dist/core/canvas/__tests__/history-transcript.test.js +6 -6
  177. package/dist/core/canvas/__tests__/render-remote.test.js +25 -9
  178. package/dist/core/canvas/attention.d.ts +2 -5
  179. package/dist/core/canvas/attention.js +15 -64
  180. package/dist/core/canvas/boot.d.ts +6 -7
  181. package/dist/core/canvas/boot.js +5 -9
  182. package/dist/core/canvas/canvas.d.ts +13 -109
  183. package/dist/core/canvas/canvas.js +140 -401
  184. package/dist/core/canvas/crons.d.ts +2 -0
  185. package/dist/core/canvas/crons.js +16 -15
  186. package/dist/core/canvas/daemon-owner.js +10 -0
  187. package/dist/core/canvas/db.d.ts +2 -2
  188. package/dist/core/canvas/db.js +2 -18
  189. package/dist/core/canvas/deliveries.d.ts +104 -0
  190. package/dist/core/canvas/deliveries.js +354 -0
  191. package/dist/core/canvas/executions.d.ts +29 -0
  192. package/dist/core/canvas/executions.js +68 -0
  193. package/dist/core/canvas/history.js +35 -35
  194. package/dist/core/canvas/index.d.ts +3 -1
  195. package/dist/core/canvas/index.js +3 -1
  196. package/dist/core/canvas/migrations.js +20 -12
  197. package/dist/core/canvas/nav-model.js +1 -3
  198. package/dist/core/canvas/nav-render.d.ts +4 -4
  199. package/dist/core/canvas/nav-render.js +11 -21
  200. package/dist/core/canvas/node-sql-migration.d.ts +3 -0
  201. package/dist/core/canvas/node-sql-migration.js +261 -0
  202. package/dist/core/canvas/paths.d.ts +2 -16
  203. package/dist/core/canvas/paths.js +2 -31
  204. package/dist/core/canvas/recovery.d.ts +76 -0
  205. package/dist/core/canvas/recovery.js +588 -0
  206. package/dist/core/canvas/remote-canvas-source.js +4 -0
  207. package/dist/core/canvas/render-source.d.ts +16 -27
  208. package/dist/core/canvas/render-source.js +16 -45
  209. package/dist/core/canvas/sessions.d.ts +33 -0
  210. package/dist/core/canvas/sessions.js +78 -0
  211. package/dist/core/canvas/types.d.ts +33 -33
  212. package/dist/core/canvas/types.js +2 -5
  213. package/dist/core/canvas/waits.d.ts +18 -0
  214. package/dist/core/canvas/waits.js +70 -0
  215. package/dist/core/canvas/worktrees.d.ts +40 -0
  216. package/dist/core/canvas/worktrees.js +93 -0
  217. package/dist/core/command.js +11 -0
  218. package/dist/core/config.d.ts +17 -12
  219. package/dist/core/config.js +106 -155
  220. package/dist/core/feed/__tests__/inbox-migrate.test.js +27 -31
  221. package/dist/core/feed/feed.d.ts +0 -6
  222. package/dist/core/feed/feed.js +68 -56
  223. package/dist/core/feed/inbox.d.ts +7 -81
  224. package/dist/core/feed/inbox.js +46 -378
  225. package/dist/core/feed/messages.d.ts +58 -0
  226. package/dist/core/feed/messages.js +217 -0
  227. package/dist/core/fs-utils.d.ts +4 -0
  228. package/dist/core/fs-utils.js +21 -1
  229. package/dist/core/human/answer.d.ts +1 -1
  230. package/dist/core/human/answer.js +1 -1
  231. package/dist/core/human/claim.d.ts +1 -1
  232. package/dist/core/human/claim.js +2 -4
  233. package/dist/core/human/component-docs.js +1 -1
  234. package/dist/core/human/feedback-companion.js +3 -2
  235. package/dist/core/human/feedback.d.ts +5 -8
  236. package/dist/core/human/feedback.js +57 -85
  237. package/dist/core/human/page-authoring.d.ts +30 -0
  238. package/dist/core/human/page-authoring.js +19 -0
  239. package/dist/core/human/requests.d.ts +136 -0
  240. package/dist/core/human/requests.js +515 -0
  241. package/dist/core/human/root.d.ts +0 -7
  242. package/dist/core/human/root.js +0 -17
  243. package/dist/core/human/scan.d.ts +2 -7
  244. package/dist/core/human/scan.js +48 -132
  245. package/dist/core/human/summary.d.ts +1 -1
  246. package/dist/core/human/summary.js +1 -1
  247. package/dist/core/human/tickets.d.ts +23 -83
  248. package/dist/core/human/tickets.js +92 -243
  249. package/dist/core/human/types.d.ts +5 -1
  250. package/dist/core/installed-plugins.js +8 -3
  251. package/dist/core/keybindings/__tests__/resolve.test.js +19 -17
  252. package/dist/core/locked-file.d.ts +6 -3
  253. package/dist/core/locked-file.js +36 -9
  254. package/dist/core/memory/extensions.js +2 -0
  255. package/dist/core/preview-registry.js +0 -1
  256. package/dist/core/profiles/__tests__/env-store.test.js +2 -0
  257. package/dist/core/profiles/default-binding.d.ts +0 -4
  258. package/dist/core/profiles/default-binding.js +12 -58
  259. package/dist/core/profiles/env-store.js +8 -3
  260. package/dist/core/profiles/manifest.d.ts +2 -37
  261. package/dist/core/profiles/manifest.js +35 -161
  262. package/dist/core/profiles/select.js +3 -0
  263. package/dist/core/review/__tests__/capture-origin.test.js +13 -2
  264. package/dist/core/review/__tests__/comments.test.js +28 -10
  265. package/dist/core/review/__tests__/remap.test.js +28 -10
  266. package/dist/core/review/__tests__/stage-identity.test.js +17 -7
  267. package/dist/core/review/birth.d.ts +1 -1
  268. package/dist/core/review/birth.js +34 -5
  269. package/dist/core/review/comments.js +1 -1
  270. package/dist/core/review/document.js +1 -1
  271. package/dist/core/review/project.d.ts +5 -1
  272. package/dist/core/review/project.js +14 -36
  273. package/dist/core/review/realize.d.ts +3 -6
  274. package/dist/core/review/realize.js +51 -168
  275. package/dist/core/review/remap.js +1 -1
  276. package/dist/core/review/stage.d.ts +3 -2
  277. package/dist/core/review/stage.js +2 -3
  278. package/dist/core/review/store.d.ts +3 -21
  279. package/dist/core/review/store.js +140 -186
  280. package/dist/core/review/types.d.ts +0 -1
  281. package/dist/core/runtime/__tests__/install-id-cache-scoping.test.js +9 -5
  282. package/dist/core/runtime/__tests__/spawn-env.test.js +8 -9
  283. package/dist/core/runtime/broker/auth-reload.js +9 -10
  284. package/dist/core/runtime/broker/daemon-ops.d.ts +25 -8
  285. package/dist/core/runtime/broker/daemon-ops.js +42 -9
  286. package/dist/core/runtime/broker/extension-abort.d.ts +3 -0
  287. package/dist/core/runtime/broker/extension-abort.js +11 -0
  288. package/dist/core/runtime/broker/fault-retry.d.ts +15 -6
  289. package/dist/core/runtime/broker/fault-retry.js +142 -95
  290. package/dist/core/runtime/broker/inbox.d.ts +4 -32
  291. package/dist/core/runtime/broker/inbox.js +4 -92
  292. package/dist/core/runtime/broker/rebind.d.ts +1 -0
  293. package/dist/core/runtime/broker/rebind.js +21 -12
  294. package/dist/core/runtime/broker-persona-guidance.d.ts +1 -1
  295. package/dist/core/runtime/broker-persona-guidance.js +2 -13
  296. package/dist/core/runtime/broker.js +28 -22
  297. package/dist/core/runtime/close.d.ts +3 -9
  298. package/dist/core/runtime/close.js +16 -27
  299. package/dist/core/runtime/fault.d.ts +3 -93
  300. package/dist/core/runtime/fault.js +9 -419
  301. package/dist/core/runtime/kickoff.d.ts +3 -6
  302. package/dist/core/runtime/kickoff.js +12 -18
  303. package/dist/core/runtime/launch.js +1 -1
  304. package/dist/core/runtime/lifecycle.js +40 -7
  305. package/dist/core/runtime/placement.js +2 -2
  306. package/dist/core/runtime/recycle.js +8 -2
  307. package/dist/core/runtime/reset.js +22 -6
  308. package/dist/core/runtime/revive.js +226 -218
  309. package/dist/core/runtime/spawn.js +14 -3
  310. package/dist/core/scoped-state/db.d.ts +18 -0
  311. package/dist/core/scoped-state/db.js +135 -0
  312. package/dist/core/scoped-state/migrate.d.ts +8 -0
  313. package/dist/core/scoped-state/migrate.js +181 -0
  314. package/dist/core/scoped-state/paths.d.ts +9 -0
  315. package/dist/core/scoped-state/paths.js +27 -0
  316. package/dist/core/scoped-state/profiles.d.ts +12 -0
  317. package/dist/core/scoped-state/profiles.js +62 -0
  318. package/dist/core/scoped-state/providers.d.ts +16 -0
  319. package/dist/core/scoped-state/providers.js +8 -0
  320. package/dist/core/scoped-state/schema.d.ts +3 -0
  321. package/dist/core/scoped-state/schema.js +26 -0
  322. package/dist/core/scoped-state/settings.d.ts +28 -0
  323. package/dist/core/scoped-state/settings.js +82 -0
  324. package/dist/core/subscription-state.d.ts +29 -48
  325. package/dist/core/subscription-state.js +176 -712
  326. package/dist/core/worktree-close.js +4 -4
  327. package/dist/core/worktree-mutation-async.js +2 -2
  328. package/dist/core/worktree-sweep.js +11 -16
  329. package/dist/core/worktree.js +6 -12
  330. package/dist/daemon/__tests__/autostart-storm.test.js +1 -39
  331. package/dist/daemon/__tests__/helpers/source-daemon.d.ts +2 -2
  332. package/dist/daemon/__tests__/helpers/source-daemon.js +7 -6
  333. package/dist/daemon/__tests__/integration/migration-startup.test.js +59 -26
  334. package/dist/daemon/__tests__/node-deadline-lane.test.js +2 -1
  335. package/dist/daemon/__tests__/node-outcome-birth-invariants.test.js +39 -15
  336. package/dist/daemon/__tests__/node-outcome-delivery.test.js +39 -10
  337. package/dist/daemon/__tests__/reconciler-signature.test.js +2 -2
  338. package/dist/daemon/__tests__/subtree-filter-freshness.test.js +2 -2
  339. package/dist/daemon/api/__tests__/broker-settle-park.test.js +17 -12
  340. package/dist/daemon/api/__tests__/canvas-snapshot-fields.test.js +27 -5
  341. package/dist/daemon/api/__tests__/model-config.test.js +8 -8
  342. package/dist/daemon/api/__tests__/node-create-description.test.js +22 -5
  343. package/dist/daemon/api/__tests__/node-model-validation.test.js +21 -1
  344. package/dist/daemon/api/__tests__/nodes-activity-query.test.js +10 -12
  345. package/dist/daemon/api/__tests__/profile-launch-gates.test.js +4 -1
  346. package/dist/daemon/api/__tests__/profile-metadata-route.test.js +4 -1
  347. package/dist/daemon/api/__tests__/reopen-delivery.test.js +26 -8
  348. package/dist/daemon/api/__tests__/seam/api-server.test.js +24 -32
  349. package/dist/daemon/api/__tests__/seam/b10-attach-modelauth.test.js +4 -1
  350. package/dist/daemon/api/__tests__/seam/leaf-api-parity.test.js +5 -4
  351. package/dist/daemon/api/__tests__/seam/profile-delete.test.js +27 -41
  352. package/dist/daemon/api/__tests__/submit-result.test.js +3 -2
  353. package/dist/daemon/api/bridge.js +1 -1
  354. package/dist/daemon/api/handlers/bash-jobs.js +6 -7
  355. package/dist/daemon/api/handlers/broker-ops.js +47 -84
  356. package/dist/daemon/api/handlers/broker-recovery.d.ts +4 -0
  357. package/dist/daemon/api/handlers/broker-recovery.js +251 -0
  358. package/dist/daemon/api/handlers/canvas.js +2 -44
  359. package/dist/daemon/api/handlers/daemon.js +41 -0
  360. package/dist/daemon/api/handlers/feedback-comments.js +2 -2
  361. package/dist/daemon/api/handlers/health.js +10 -5
  362. package/dist/daemon/api/handlers/human-requests.js +168 -188
  363. package/dist/daemon/api/handlers/human.js +3 -151
  364. package/dist/daemon/api/handlers/inbox-page.d.ts +4 -0
  365. package/dist/daemon/api/handlers/inbox-page.js +89 -0
  366. package/dist/daemon/api/handlers/inbox.js +21 -120
  367. package/dist/daemon/api/handlers/messages.d.ts +1 -0
  368. package/dist/daemon/api/handlers/messages.js +73 -15
  369. package/dist/daemon/api/handlers/node-outcomes.js +58 -13
  370. package/dist/daemon/api/handlers/nodes.js +7 -13
  371. package/dist/daemon/api/handlers/reviews.js +4 -29
  372. package/dist/daemon/api/map.d.ts +25 -3
  373. package/dist/daemon/api/map.js +84 -14
  374. package/dist/daemon/api/server.js +68 -9
  375. package/dist/daemon/control.d.ts +18 -0
  376. package/dist/daemon/cron/disposition.d.ts +2 -0
  377. package/dist/daemon/cron/disposition.js +8 -5
  378. package/dist/daemon/cron/settle.js +37 -13
  379. package/dist/daemon/cron/sinks.d.ts +18 -1
  380. package/dist/daemon/cron/sinks.js +47 -93
  381. package/dist/daemon/crtrd-cli.js +4 -19
  382. package/dist/daemon/crtrd.d.ts +2 -0
  383. package/dist/daemon/crtrd.js +206 -81
  384. package/dist/daemon/fleet.js +5 -6
  385. package/dist/daemon/human/finish.d.ts +12 -24
  386. package/dist/daemon/human/finish.js +88 -285
  387. package/dist/daemon/human/settle.d.ts +40 -0
  388. package/dist/daemon/human/settle.js +89 -0
  389. package/dist/daemon/human/sweep.d.ts +20 -5
  390. package/dist/daemon/human/sweep.js +56 -60
  391. package/dist/daemon/manage.d.ts +21 -16
  392. package/dist/daemon/manage.js +85 -51
  393. package/dist/daemon/messaging/node-message.d.ts +1 -1
  394. package/dist/daemon/messaging/node-message.js +9 -12
  395. package/dist/daemon/park-activity.js +3 -3
  396. package/dist/daemon/reconcilers/bash-deadline.js +6 -7
  397. package/dist/daemon/reconcilers/broker-supervision.d.ts +1 -1
  398. package/dist/daemon/reconcilers/broker-supervision.js +41 -19
  399. package/dist/daemon/reconcilers/controller-death.js +6 -18
  400. package/dist/daemon/reconcilers/delivery-lane.d.ts +9 -0
  401. package/dist/daemon/reconcilers/delivery-lane.js +130 -0
  402. package/dist/daemon/reconcilers/live-obligation.js +3 -3
  403. package/dist/daemon/reconcilers/node-deadline.js +1 -1
  404. package/dist/daemon/reconcilers/node-lifecycle/freeze-lane.d.ts +1 -1
  405. package/dist/daemon/reconcilers/node-lifecycle/freeze-lane.js +10 -12
  406. package/dist/daemon/reconcilers/node-lifecycle/tick.js +5 -5
  407. package/dist/daemon/reconcilers/node-lifecycle/wants-execution.js +1 -1
  408. package/dist/daemon/reconcilers/pending-review-submit.js +3 -3
  409. package/dist/daemon/reconcilers/storage-maintenance.d.ts +2 -8
  410. package/dist/daemon/reconcilers/storage-maintenance.js +13 -43
  411. package/dist/daemon/review/companion.js +5 -11
  412. package/dist/daemon/review/deliver.d.ts +1 -5
  413. package/dist/daemon/review/deliver.js +3 -52
  414. package/dist/daemon/review/finish.d.ts +2 -27
  415. package/dist/daemon/review/finish.js +79 -263
  416. package/dist/daemon/review/sweep.d.ts +3 -10
  417. package/dist/daemon/review/sweep.js +13 -131
  418. package/dist/daemon/startup-policy.d.ts +0 -5
  419. package/dist/daemon/startup-policy.js +0 -5
  420. package/dist/index.d.ts +2 -1
  421. package/dist/index.js +1 -1
  422. package/dist/migrations/__tests__/activation-concurrency.test.js +3 -2
  423. package/dist/migrations/__tests__/activation.test.js +9 -6
  424. package/dist/migrations/activation.d.ts +3 -2
  425. package/dist/migrations/activation.js +2 -4
  426. package/dist/migrations/corpus.d.ts +2 -5
  427. package/dist/migrations/corpus.js +9 -20
  428. package/dist/migrations/runner.d.ts +3 -1
  429. package/dist/migrations/runner.js +6 -2
  430. package/dist/pi-extensions/__tests__/canvas-context-intro.test.js +21 -89
  431. package/dist/pi-extensions/__tests__/canvas-goal-capture-envelope.test.js +4 -2
  432. package/dist/pi-extensions/__tests__/canvas-stophook-agentend.test.js +51 -33
  433. package/dist/pi-extensions/__tests__/canvas-stophook-context-nudge.test.js +16 -2
  434. package/dist/pi-extensions/__tests__/pre-command-gate.test.js +13 -1
  435. package/dist/pi-extensions/canvas-inbox-watcher.js +98 -244
  436. package/dist/pi-extensions/canvas-passive-context.d.ts +4 -8
  437. package/dist/pi-extensions/canvas-passive-context.js +85 -37
  438. package/dist/pi-extensions/canvas-stophook.js +47 -31
  439. package/dist/shared/env.d.ts +1 -0
  440. package/dist/shared/env.js +3 -0
  441. package/package.json +1 -1
  442. package/runtime.lock.json +5 -5
  443. package/dist/clients/attach/__tests__/page-block.test.js +0 -54
  444. package/dist/clients/inbox/review-visibility.d.ts +0 -5
  445. package/dist/clients/inbox/review-visibility.js +0 -19
  446. package/dist/commands/canvas-rebuild-index.d.ts +0 -2
  447. package/dist/commands/canvas-rebuild-index.js +0 -46
  448. package/dist/core/__tests__/human-cancel-guard.test.js +0 -110
  449. package/dist/core/__tests__/human-deliver.test.js +0 -256
  450. package/dist/core/__tests__/human-node-not-supervised.test.d.ts +0 -1
  451. package/dist/core/__tests__/human-node-not-supervised.test.js +0 -89
  452. package/dist/core/__tests__/integration/human-deliver-e2e.test.d.ts +0 -1
  453. package/dist/core/__tests__/integration/human-deliver-e2e.test.js +0 -131
  454. package/dist/core/__tests__/phase4-review-store.test.d.ts +0 -1
  455. package/dist/core/__tests__/phase4-review-store.test.js +0 -144
  456. package/dist/core/__tests__/watchdog-abort-arms-retry.test.d.ts +0 -1
  457. package/dist/core/__tests__/watchdog-abort-arms-retry.test.js +0 -110
  458. package/dist/core/canvas/human-deliveries.d.ts +0 -39
  459. package/dist/core/canvas/human-deliveries.js +0 -75
  460. package/dist/core/canvas/node-outcome-deliveries.d.ts +0 -64
  461. package/dist/core/canvas/node-outcome-deliveries.js +0 -159
  462. package/dist/core/feed/passive.d.ts +0 -3
  463. package/dist/core/feed/passive.js +0 -53
  464. package/dist/core/human/__tests__/inbox-cancel-worker.d.ts +0 -1
  465. package/dist/core/human/__tests__/inbox-cancel-worker.js +0 -7
  466. package/dist/core/human/__tests__/inbox-claim-worker.d.ts +0 -1
  467. package/dist/core/human/__tests__/inbox-claim-worker.js +0 -17
  468. package/dist/core/human/__tests__/inbox-stale-claim-worker.d.ts +0 -1
  469. package/dist/core/human/__tests__/inbox-stale-claim-worker.js +0 -8
  470. package/dist/core/human/__tests__/integration/inbox-core.test.d.ts +0 -1
  471. package/dist/core/human/__tests__/integration/inbox-core.test.js +0 -145
  472. package/dist/core/human/__tests__/page-tickets.test.d.ts +0 -1
  473. package/dist/core/human/__tests__/page-tickets.test.js +0 -161
  474. package/dist/core/review/ticket-filter.d.ts +0 -17
  475. package/dist/core/review/ticket-filter.js +0 -21
  476. package/dist/core/runtime/broker/passive.d.ts +0 -17
  477. package/dist/core/runtime/broker/passive.js +0 -44
  478. package/dist/core/runtime/busy.d.ts +0 -46
  479. package/dist/core/runtime/busy.js +0 -150
  480. package/dist/daemon/__tests__/startup-block-marker.test.d.ts +0 -1
  481. package/dist/daemon/__tests__/startup-block-marker.test.js +0 -86
  482. package/dist/daemon/api/__tests__/review-terminal-conflict.test.d.ts +0 -1
  483. package/dist/daemon/api/__tests__/review-terminal-conflict.test.js +0 -98
  484. package/dist/daemon/human/deliver-action.d.ts +0 -3
  485. package/dist/daemon/human/deliver-action.js +0 -9
  486. package/dist/daemon/node-outcome/deliver-outcome.d.ts +0 -3
  487. package/dist/daemon/node-outcome/deliver-outcome.js +0 -9
  488. package/dist/daemon/reconcilers/human-delivery-lane.d.ts +0 -10
  489. package/dist/daemon/reconcilers/human-delivery-lane.js +0 -41
  490. package/dist/daemon/reconcilers/node-outcome-delivery-lane.d.ts +0 -10
  491. package/dist/daemon/reconcilers/node-outcome-delivery-lane.js +0 -41
  492. package/dist/daemon/startup-block-marker.d.ts +0 -25
  493. package/dist/daemon/startup-block-marker.js +0 -99
  494. /package/dist/{clients/attach/__tests__/page-block.test.d.ts → api/dto/mail.js} +0 -0
  495. /package/dist/{commands/sys/__tests__/migrate.test.d.ts → api/dto/recovery.js} +0 -0
  496. /package/dist/{core/__tests__/human-cancel-guard.test.d.ts → commands/__tests__/integration/migrate.test.d.ts} +0 -0
  497. /package/dist/core/__tests__/{human-deliver.test.d.ts → integration/fresh-home-commands.test.d.ts} +0 -0
@@ -1,10 +1,3 @@
1
- export declare function ticketsRoot(): string;
2
- /** The opaque id the `/v1/human/inbox` routes address a ticket by — a hash of
3
- * the canonical tickets root and the ticket directory basename. The daemon
4
- * derives the same value when it resolves a route id back to a directory. */
5
- export declare function opaqueInboxTicketId(ticketId: string): string;
6
- /** Ticket directories share the canvas node root. Reply-bearing tickets may use their bridge id; standalone pages use an independent ticket id. */
7
- export declare function ticketDir(ticketId: string): string;
8
1
  export declare function inboxActivityPath(): string;
9
2
  /** Signal one durable ticket mutation to every open inbox without watching every ticket directory. */
10
3
  export declare function signalInboxActivity(): void;
@@ -1,21 +1,4 @@
1
- import { realpathSync } from 'node:fs';
2
- import { createHash } from 'node:crypto';
3
- import { nodeDir, nodesRoot } from '../canvas/paths.js';
4
1
  import { activityPath, signalActivity, watchActivity } from '../activity-signal.js';
5
- export function ticketsRoot() {
6
- return nodesRoot();
7
- }
8
- /** The opaque id the `/v1/human/inbox` routes address a ticket by — a hash of
9
- * the canonical tickets root and the ticket directory basename. The daemon
10
- * derives the same value when it resolves a route id back to a directory. */
11
- export function opaqueInboxTicketId(ticketId) {
12
- const canonicalRoot = realpathSync(ticketsRoot());
13
- return createHash('sha256').update(`${canonicalRoot}\0${ticketId}`, 'utf8').digest('hex');
14
- }
15
- /** Ticket directories share the canvas node root. Reply-bearing tickets may use their bridge id; standalone pages use an independent ticket id. */
16
- export function ticketDir(ticketId) {
17
- return nodeDir(ticketId);
18
- }
19
2
  export function inboxActivityPath() {
20
3
  return activityPath('inbox-activity');
21
4
  }
@@ -1,11 +1,6 @@
1
1
  import type { PageTicketSummary, TicketSummary } from './types.js';
2
- /** Read all unresolved page/review tickets, newest first. Progress never affects visibility. */
2
+ /** SQL-backed inbox discovery. Files in request_dir are presentation projections only. */
3
3
  export declare function scanInbox(): TicketSummary[];
4
4
  export type PageHistoryEntry = PageTicketSummary;
5
- /**
6
- * Every page ticket — pending, resolved or canceled — oldest first, optionally
7
- * narrowed to one raising node. This is the durable discovery seam for
8
- * transcript placement and for browsing settled tickets, so it is a separate
9
- * walk from the pending-only inbox scan and never filters on a terminal file.
10
- */
5
+ /** SQL-backed page history, including terminal requests. */
11
6
  export declare function scanPageHistory(nodeId?: string): PageHistoryEntry[];
@@ -1,153 +1,69 @@
1
- import { existsSync, readdirSync, statSync } from 'node:fs';
2
- import { basename, join } from 'node:path';
3
- import { claimPath, isResolved, pageManifestPath, reviewPath } from './convention.js';
4
- import { readJsonOrNull } from '../fs-utils.js';
5
- import { validateReviewDescriptor } from './review-schema.js';
6
1
  import { pageAwaitsResponse, pageOverviewActions } from './page-schema.js';
7
- import { parsePage } from './page.js';
8
- import { pageTicketState, readTicketResult } from './tickets.js';
9
- import { ticketsRoot } from './root.js';
10
- import { emitEvent } from '../events/emit.js';
11
- function errorText(error) {
12
- return error instanceof Error ? error.message : String(error);
13
- }
14
- function claimSummary(dir) {
15
- const claim = readJsonOrNull(claimPath(dir));
16
- if (claim === null || typeof claim.host !== 'string' || typeof claim.claimedAt !== 'string' || typeof claim.heartbeatAt !== 'string')
17
- return undefined;
18
- return { owner: claim.host, claimedAt: claim.claimedAt, heartbeatAt: claim.heartbeatAt };
19
- }
20
- function reviewSummary(dir, id) {
21
- const raw = readJsonOrNull(reviewPath(dir));
22
- if (raw === null)
23
- return null;
24
- let review;
2
+ import { listRequests } from './requests.js';
3
+ function specification(request) {
25
4
  try {
26
- review = validateReviewDescriptor(raw);
5
+ const value = JSON.parse(request.specification_json);
6
+ if (typeof value !== 'object' || value === null)
7
+ throw new Error('not an object');
8
+ return value;
27
9
  }
28
- catch {
29
- return null;
10
+ catch (error) {
11
+ throw new Error(`corrupt human request specification: ${request.request_id}`, { cause: error });
30
12
  }
31
- return { dir, id, kind: 'review', title: review.title, subtitle: review.subtitle, file: review.file, output: review.output, source: review.source, blockedSince: review.blockedSince, claim: claimSummary(dir) };
32
13
  }
33
- function pageSummary(dir, id) {
34
- // The tickets root IS the canvas node root, so all but a handful of these
35
- // directories hold no page at all. Gate on the manifest's presence with one
36
- // stat instead of letting `parsePage` throw: a thrown ENOENT carries a V8
37
- // stack capture, which over thousands of node directories is the whole cost
38
- // of a scan.
39
- if (!existsSync(pageManifestPath(dir)))
40
- return null;
41
- let manifest;
42
- try {
43
- manifest = parsePage(dir);
44
- }
45
- catch {
46
- return null;
47
- }
48
- let emittedAt = manifest.source?.emittedAt;
49
- if (emittedAt === undefined) {
50
- try {
51
- emittedAt = statSync(pageManifestPath(dir)).mtime.toISOString();
52
- }
53
- catch {
54
- return null;
55
- }
56
- }
57
- const state = pageTicketState(dir);
14
+ function pageSummary(request) {
15
+ const manifest = specification(request);
58
16
  const { recommendedOptions, fastAction } = pageOverviewActions(manifest);
17
+ const result = request.result_json === null ? null : JSON.parse(request.result_json);
18
+ const state = request.state !== 'settled' ? (request.settleable ? 'pending' : 'passive') : request.outcome === 'canceled' || request.outcome === 'dismissed' ? 'canceled' : 'resolved';
59
19
  return {
60
- dir,
61
- id,
20
+ dir: request.request_dir,
21
+ id: request.request_id,
22
+ inboxTicketId: request.inbox_ticket_id,
62
23
  kind: 'page',
63
- title: manifest.title,
64
- subtitle: manifest.subtitle ?? '',
24
+ title: request.title,
25
+ subtitle: request.subtitle ?? '',
65
26
  dialect: manifest.dialect,
66
27
  placement: manifest.delivery.placement,
67
- inbox: manifest.delivery.inbox,
28
+ inbox: request.inbox_listed,
68
29
  steps: manifest.steps,
69
30
  slotKinds: manifest.slots.map((slot) => slot.kind),
70
31
  awaitsResponse: pageAwaitsResponse(manifest),
71
32
  source: manifest.source ?? {},
72
- emittedAt,
73
- state,
33
+ emittedAt: typeof manifest.source?.emittedAt === 'string' ? manifest.source.emittedAt : request.created_at,
74
34
  recommendedOptions,
75
- // A settled ticket has nothing left to publish, so only a pending one offers the keypress.
76
- ...(fastAction !== undefined && state === 'pending' ? { fastAction } : {}),
77
- claim: claimSummary(dir),
35
+ ...(fastAction === undefined || state !== 'pending' ? {} : { fastAction }),
36
+ state,
37
+ ...(result?.kind === 'page' ? { answerDigest: result.summary.replace(/\s+/g, ' ').trim() } : {}),
78
38
  };
79
39
  }
80
- /** Read all unresolved page/review tickets, newest first. Progress never affects visibility. */
40
+ function reviewSummary(request) {
41
+ const spec = specification(request);
42
+ const source = { nodeId: request.requester_node_id ?? undefined };
43
+ return {
44
+ dir: request.request_dir,
45
+ id: request.request_id,
46
+ inboxTicketId: request.inbox_ticket_id,
47
+ kind: 'review',
48
+ title: request.title,
49
+ subtitle: request.subtitle ?? '',
50
+ file: request.file ?? '',
51
+ output: typeof spec['output_path'] === 'string' ? spec['output_path'] : `${request.request_dir}/result.json`,
52
+ source,
53
+ blockedSince: request.created_at,
54
+ };
55
+ }
56
+ /** SQL-backed inbox discovery. Files in request_dir are presentation projections only. */
81
57
  export function scanInbox() {
82
- let entries;
83
- try {
84
- entries = readdirSync(ticketsRoot());
85
- }
86
- catch {
87
- return [];
88
- }
89
- const items = [];
90
- for (const entry of entries) {
91
- const dir = join(ticketsRoot(), entry);
92
- try {
93
- if (!statSync(dir).isDirectory())
94
- continue;
95
- }
96
- catch {
97
- continue;
98
- }
99
- if (isResolved(dir))
100
- continue;
101
- let item;
102
- try {
103
- item = reviewSummary(dir, basename(dir)) ?? pageSummary(dir, basename(dir));
104
- }
105
- catch (error) {
106
- emitEvent({ level: 'warn', event: 'human.scan.ticket_unreadable', fields: { ticket_id: basename(dir), error: errorText(error) } });
107
- continue;
108
- }
109
- if (item !== null && (item.kind !== 'page' || item.inbox))
110
- items.push(item);
111
- }
112
- return items.sort((a, b) => (b.kind === 'page' ? b.emittedAt : b.blockedSince).localeCompare(a.kind === 'page' ? a.emittedAt : a.blockedSince) || a.id.localeCompare(b.id));
58
+ return listRequests({ state: 'open' })
59
+ .filter((request) => request.inbox_listed)
60
+ .map((request) => request.kind === 'page' ? pageSummary(request) : reviewSummary(request))
61
+ .sort((a, b) => (b.kind === 'page' ? b.emittedAt : b.blockedSince).localeCompare(a.kind === 'page' ? a.emittedAt : a.blockedSince) || a.id.localeCompare(b.id));
113
62
  }
114
- /**
115
- * Every page ticket — pending, resolved or canceled — oldest first, optionally
116
- * narrowed to one raising node. This is the durable discovery seam for
117
- * transcript placement and for browsing settled tickets, so it is a separate
118
- * walk from the pending-only inbox scan and never filters on a terminal file.
119
- */
63
+ /** SQL-backed page history, including terminal requests. */
120
64
  export function scanPageHistory(nodeId) {
121
- let entries;
122
- try {
123
- entries = readdirSync(ticketsRoot());
124
- }
125
- catch {
126
- return [];
127
- }
128
- const items = [];
129
- for (const entry of entries) {
130
- const dir = join(ticketsRoot(), entry);
131
- try {
132
- if (!statSync(dir).isDirectory())
133
- continue;
134
- }
135
- catch {
136
- continue;
137
- }
138
- try {
139
- const summary = pageSummary(dir, basename(dir));
140
- if (summary === null)
141
- continue;
142
- if (nodeId !== undefined && summary.source.nodeId !== nodeId)
143
- continue;
144
- const result = summary.state === 'resolved' ? readTicketResult(dir) : null;
145
- items.push({ ...summary, ...(result?.kind === 'page' ? { answerDigest: result.summary.replace(/\s+/g, ' ').trim() } : {}) });
146
- }
147
- catch (error) {
148
- emitEvent({ level: 'warn', event: 'human.scan.ticket_unreadable', fields: { ticket_id: basename(dir), error: errorText(error) } });
149
- continue;
150
- }
151
- }
152
- return items.sort((a, b) => Date.parse(a.emittedAt) - Date.parse(b.emittedAt) || a.id.localeCompare(b.id));
65
+ return listRequests({ kind: 'page' })
66
+ .map(pageSummary)
67
+ .filter((page) => nodeId === undefined || page.source.nodeId === nodeId)
68
+ .sort((a, b) => Date.parse(a.emittedAt) - Date.parse(b.emittedAt) || a.id.localeCompare(b.id));
153
69
  }
@@ -1,3 +1,3 @@
1
1
  import type { PageManifest, PageResponses } from './page-schema.js';
2
- /** The stable one-line digest stored in response.json. */
2
+ /** The stable one-line digest stored in the terminal request result. */
3
3
  export declare function buildPageSummary(manifest: PageManifest, responses: PageResponses): string;
@@ -1,5 +1,5 @@
1
1
  import { describePageAnswer } from './answer.js';
2
- /** The stable one-line digest stored in response.json. */
2
+ /** The stable one-line digest stored in the terminal request result. */
3
3
  export function buildPageSummary(manifest, responses) {
4
4
  return describePageAnswer(manifest, responses, { completedAt: '' }).digest;
5
5
  }
@@ -1,86 +1,28 @@
1
- import type { ReviewDescriptor, TicketResult } from './types.js';
2
- import type { ProductPageComponents } from '../../types.js';
3
- import { type PageDelivery, type PageManifest, type PageResponses, type PageSource } from './page-schema.js';
4
- /** Strict decoder for the only canonical final marker. Only a missing file reads
5
- * as absent — a corrupt (unparseable) response is a real anomaly and throws,
6
- * since silently treating it as "no result yet" would mask data loss instead
7
- * of surfacing it to whichever caller owns the failure boundary. */
1
+ import type { TicketResult } from './types.js';
2
+ import type { PreparedPage } from './page-authoring.js';
3
+ import { type PageManifest, type PageResponses } from './page-schema.js';
4
+ /** Strict decoder for the canonical SQL terminal result. A corrupt result throws
5
+ * rather than being treated as absent, because that would hide data loss from
6
+ * the caller that owns the failure boundary. */
8
7
  export declare function readTicketResult(dir: string): TicketResult | null;
9
- export interface SubmitPageOptions {
10
- dir: string;
11
- /** The authored page source; copied into the ticket directory as its `document`. */
12
- sourceFile: string;
13
- source?: PageSource;
14
- productKinds?: ProductPageComponents;
15
- delivery?: PageDelivery;
16
- }
17
- /** One validated page, ready to publish into a ticket directory. */
18
- export interface PreparedPage {
19
- /** The authored source, verbatim, as the ticket's `document`. */
20
- document: string;
21
- /** The compiled CommonJS module the Gateway evaluates for JSX pages. */
22
- module?: string;
23
- manifest: PageManifest;
24
- }
25
- export interface PreparePageSourceOptions {
26
- /** `jsx` carries .tsx semantics; `html` is a complete document. */
27
- dialect: 'jsx' | 'html';
28
- /** The complete authored page text, inline. */
29
- document: string;
30
- source?: PageSource;
31
- productKinds?: ProductPageComponents;
32
- delivery?: PageDelivery;
33
- }
34
- /** Validate one authored page document into publishable form. The single
35
- * validation path: `preparePage` reads a file and lands here, and a
36
- * programmatic request supplies the same text inline. */
37
- export declare function preparePageSource(opts: PreparePageSourceOptions): PreparedPage;
38
- /** Validate one authored page source file into publishable form. Reads only: a
39
- * page that fails authoring leaves nothing behind, so a caller that must create
40
- * a bridge node prepares first and creates it only once the page is known good.
41
- * The source is read exactly once, so the published document is the same bytes
42
- * the manifest was derived from even if the file changes underneath. */
43
- export declare function preparePage(opts: Omit<SubmitPageOptions, 'dir'>): PreparedPage;
44
- /** Publish one prepared page ticket: the authored source plus its manifest.
45
- * These writes are overwrites. A ticket's REQUEST is whatever page the agent
46
- * currently wants on screen, and `crtr human send --replace` revises it in
47
- * place while the human watches; only the ANSWER is write-once, which
48
- * `publishJsonExclusive` still guarantees for response.json alone. The manifest
49
- * switches after all new generation files exist, then stale media is removed. */
8
+ /** Publish an immutable revision, then atomically select it with its matching specification. */
50
9
  export declare function publishPage(dir: string, prepared: PreparedPage): {
51
10
  id: string;
52
11
  dir: string;
53
12
  kind: 'page';
54
13
  manifest: PageManifest;
55
14
  };
56
- /** Validate and publish one page ticket in a single step, for callers that own
57
- * the ticket directory before they have a page. */
58
- export declare function submitPage(opts: SubmitPageOptions): {
59
- id: string;
60
- dir: string;
61
- kind: 'page';
62
- manifest: PageManifest;
63
- };
64
- export interface SubmitReviewOptions {
65
- dir: string;
66
- review: Omit<ReviewDescriptor, 'schema' | 'file' | 'output' | 'blockedSince'> & {
67
- file: string;
68
- output?: string;
69
- blockedSince?: string;
70
- };
71
- }
72
- export declare function submitReview(opts: SubmitReviewOptions): {
73
- id: string;
74
- dir: string;
75
- kind: 'review';
76
- };
77
- /** Validate a page resolution against its canonical ticket before claim takeover. */
15
+ /** Resolve a stable request directory to the SQL-selected immutable page revision. */
16
+ export declare function selectedPageDir(dir: string): string;
17
+ /** Validate a final page response against its ticket's reply contract. */
18
+ export declare function validateFinalPageResponses(manifest: PageManifest, responses: unknown): PageResponses;
19
+ /** Validate a page resolution against its SQL-selected immutable revision. */
78
20
  export declare function validatePageTicketResponses(dir: string, responses: unknown): PageResponses;
79
- /** The three terminal states of a page ticket, derived from its published result. */
21
+ /** Page state is derived from the SQL request row. */
80
22
  export declare function pageTicketState(dir: string): 'pending' | 'resolved' | 'canceled' | 'passive';
81
23
  /** Autosave partial page work. Every supplied response is validated; omitted components are permitted. */
82
24
  export declare function writePageProgress(dir: string, responses: unknown): PageResponses;
83
- /** Saved partial work, or null when none exists. Malformed progress is an error, never silently discarded. */
25
+ /** Saved partial work from the request row, or null when none exists. */
84
26
  export declare function readPageProgress(dir: string): PageResponses | null;
85
27
  export interface PageTicket {
86
28
  dir: string;
@@ -97,32 +39,30 @@ export interface PageTicket {
97
39
  export declare function readPageTicket(dir: string): PageTicket;
98
40
  export interface CompletePageOptions {
99
41
  completedAt?: string;
100
- /** Recorded when an authorized programmatic writer answered instead of a person. */
101
42
  actor?: string;
102
43
  }
103
- export declare function completePage(dir: string, responses: unknown, claimToken: string, opts?: CompletePageOptions): {
44
+ /** Page settlement must go through daemon/human/finish, which records its SQL result and direct obligations together. */
45
+ export declare function completePage(_dir: string, _responses: unknown, _claimToken: string, _opts?: CompletePageOptions): {
104
46
  won: boolean;
105
47
  result: TicketResult;
106
48
  };
107
- /** Atomically take a page ticket's claim over, complete it, and release the takeover claim. */
108
- export declare function takeoverAndCompletePage(dir: string, responses: unknown, owner: {
49
+ /** Page settlement must go through daemon/human/finish, which records its SQL result and direct obligations together. */
50
+ export declare function takeoverAndCompletePage(_dir: string, _responses: unknown, _owner: {
109
51
  host: string;
110
52
  pid: number;
111
- }, opts?: CompletePageOptions): {
53
+ }, _opts?: CompletePageOptions): {
112
54
  won: boolean;
113
55
  result: TicketResult;
114
56
  };
115
57
  export interface CancelTicketOptions {
116
58
  reason?: string;
117
59
  actor?: string;
118
- /** The recipient closing it writes `dismissed`; the requester withdrawing it
119
- * writes `canceled`. Omitted where the caller is neither. */
120
60
  disposition?: 'canceled' | 'dismissed';
121
61
  }
122
- /** Cancellation races finalization but never requires or removes another claim. */
123
- export declare function cancelTicket(dir: string, opts?: CancelTicketOptions): {
62
+ /** Page settlement must go through daemon/human/finish, which records its SQL result and direct obligations together. */
63
+ export declare function cancelTicket(_dir: string, _opts?: CancelTicketOptions): {
124
64
  status: 'canceled' | 'already_resolved';
125
65
  result: TicketResult;
126
66
  };
127
- /** Write the validated review output once its review result is published. */
128
- export declare function projectReviewOutput(dir: string): 'projected' | 'not_a_review' | 'no_result';
67
+ /** Review projection is performed by daemon/review/finish after its SQL terminal transition. */
68
+ export declare function projectReviewOutput(_dir: string): 'projected' | 'not_a_review' | 'no_result';