@north-light/crouter 0.3.173 → 0.3.174

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 (673) hide show
  1. package/bin/runtime-selector.mjs +8 -1
  2. package/dist/api/__tests__/{client.test.js → serial/client.test.js} +2 -135
  3. package/dist/api/client.d.ts +12 -21
  4. package/dist/api/client.js +22 -31
  5. package/dist/api/dto/broker-ops.d.ts +158 -0
  6. package/dist/api/dto/broker-ops.js +6 -0
  7. package/dist/api/dto/crons.d.ts +6 -0
  8. package/dist/api/dto/human.d.ts +7 -1
  9. package/dist/api/dto/inbox.d.ts +1 -71
  10. package/dist/api/dto/inbox.js +1 -9
  11. package/dist/api/dto/nodes.d.ts +6 -7
  12. package/dist/api/dto/reviews.d.ts +1 -11
  13. package/dist/api/routes.d.ts +7 -4
  14. package/dist/api/routes.js +8 -5
  15. package/dist/build-root.js +3 -3
  16. package/dist/builtin-memory/04-base-worker.md +1 -4
  17. package/dist/builtin-memory/05-kinds/advisor/00-base.md +1 -5
  18. package/dist/builtin-memory/05-kinds/advisor/01-orchestrator.md +2 -7
  19. package/dist/builtin-memory/05-kinds/design/00-base.md +1 -6
  20. package/dist/builtin-memory/05-kinds/developer/00-base.md +1 -6
  21. package/dist/builtin-memory/05-kinds/explore/00-base.md +1 -4
  22. package/dist/builtin-memory/05-kinds/explore/01-orchestrator.md +1 -2
  23. package/dist/builtin-memory/05-kinds/general/00-base.md +1 -3
  24. package/dist/builtin-memory/05-kinds/plan/00-base.md +1 -6
  25. package/dist/builtin-memory/05-kinds/plan/reviewers/00-base.md +1 -2
  26. package/dist/builtin-memory/05-kinds/plan/reviewers/architecture-fit.md +1 -3
  27. package/dist/builtin-memory/05-kinds/plan/reviewers/code-smells.md +1 -3
  28. package/dist/builtin-memory/05-kinds/plan/reviewers/pattern-consistency.md +1 -3
  29. package/dist/builtin-memory/05-kinds/plan/reviewers/requirements-coverage.md +1 -3
  30. package/dist/builtin-memory/05-kinds/plan/reviewers/security.md +1 -4
  31. package/dist/builtin-memory/05-kinds/review/companion/00-base.md +2 -3
  32. package/dist/builtin-memory/05-kinds/spec/00-base.md +1 -2
  33. package/dist/builtin-memory/advisor/council.md +1 -6
  34. package/dist/builtin-memory/design.md +2 -7
  35. package/dist/builtin-memory/development.md +9 -14
  36. package/dist/builtin-memory/internal/marketplaces.md +2 -6
  37. package/dist/builtin-memory/internal/nodes-and-canvas.md +1 -1
  38. package/dist/builtin-memory/internal/plugins.md +2 -8
  39. package/dist/builtin-memory/internal/storage-tiers.md +1 -2
  40. package/dist/builtin-memory/testing.md +41 -0
  41. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/{provider-rotation.test.ts → serial/provider-rotation.test.ts} +27 -179
  42. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/claude-plugin-commands.ts +5 -15
  43. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/frontmatter-rules/index.ts +1 -28
  44. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/memory-slash-commands.ts +43 -88
  45. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/provider-rotation.js +7 -1
  46. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/provider-rotation.ts +9 -1
  47. package/dist/cli.js +2 -2
  48. package/dist/clients/attach/__tests__/attach-remote-readonly.test.js +37 -131
  49. package/dist/clients/attach/__tests__/chat-view-snapshot-ordering.test.js +71 -152
  50. package/dist/clients/attach/__tests__/context-message.test.js +16 -174
  51. package/dist/clients/attach/__tests__/crtr-output.test.js +36 -2069
  52. package/dist/clients/attach/__tests__/diagram.test.js +2 -2
  53. package/dist/clients/attach/__tests__/edit-diff.test.js +0 -4
  54. package/dist/clients/attach/__tests__/file-review-focus.test.js +2 -1
  55. package/dist/clients/attach/__tests__/group-activity.test.js +40 -229
  56. package/dist/clients/attach/__tests__/oauth-dialog-lifecycle.test.js +26 -76
  57. package/dist/clients/attach/__tests__/prompt-preview.test.js +4 -70
  58. package/dist/clients/attach/__tests__/ref-autocomplete.test.js +11 -125
  59. package/dist/clients/attach/__tests__/titled-editor-preview.test.js +14 -205
  60. package/dist/clients/attach/command.d.ts +2 -1
  61. package/dist/clients/attach/command.js +81 -76
  62. package/dist/clients/attach/input/capabilities.d.ts +27 -0
  63. package/dist/clients/attach/input/capabilities.js +96 -0
  64. package/dist/clients/attach/input/controller.d.ts +20 -182
  65. package/dist/clients/attach/input/controller.js +128 -537
  66. package/dist/clients/attach/input/overlay-owner.d.ts +41 -0
  67. package/dist/clients/attach/input/overlay-owner.js +199 -0
  68. package/dist/clients/attach/overlays/file-review.d.ts +0 -4
  69. package/dist/clients/attach/overlays/file-review.js +13 -5
  70. package/dist/clients/attach/overlays/graph.js +2 -10
  71. package/dist/clients/attach/render/chat-view.d.ts +4 -3
  72. package/dist/clients/attach/render/chat-view.js +39 -33
  73. package/dist/clients/attach/render/group-activity.d.ts +1 -0
  74. package/dist/clients/attach/render/group-activity.js +20 -13
  75. package/dist/clients/attach/render/group-recap.js +12 -3
  76. package/dist/clients/attach/session/connection.js +9 -15
  77. package/dist/clients/attach/session/editor-inventory.d.ts +6 -5
  78. package/dist/clients/attach/session/editor-inventory.js +7 -8
  79. package/dist/clients/attach/session/file-links.d.ts +13 -0
  80. package/dist/clients/attach/session/file-links.js +107 -0
  81. package/dist/clients/attach/session/frame.d.ts +3 -0
  82. package/dist/clients/attach/session/frame.js +10 -1
  83. package/dist/clients/attach/session/frames.js +2 -3
  84. package/dist/clients/attach/session/input-wiring.d.ts +4 -1
  85. package/dist/clients/attach/session/input-wiring.js +15 -14
  86. package/dist/clients/attach/session/mouse.d.ts +6 -1
  87. package/dist/clients/attach/session/mouse.js +8 -5
  88. package/dist/clients/attach/session/profile-files.js +18 -12
  89. package/dist/clients/attach/session/reconnect.js +1 -1
  90. package/dist/clients/attach/session/state-sync.js +1 -2
  91. package/dist/clients/attach/session/surface-host.d.ts +3 -2
  92. package/dist/clients/attach/session/surface-host.js +4 -4
  93. package/dist/clients/attach/slash/dispatch.d.ts +8 -31
  94. package/dist/clients/attach/slash/dispatch.js +34 -81
  95. package/dist/clients/attach/viewer.js +820 -860
  96. package/dist/clients/conversation/projection.d.ts +79 -0
  97. package/dist/clients/conversation/projection.js +341 -0
  98. package/dist/clients/inbox/__tests__/serial/inbox-controller.test.js +159 -0
  99. package/dist/clients/inbox/__tests__/serial/mount-panel.test.js +151 -0
  100. package/dist/clients/inbox/controller.d.ts +0 -4
  101. package/dist/clients/inbox/controller.js +0 -2
  102. package/dist/clients/inbox/review/__tests__/review-core.test.js +4 -293
  103. package/dist/clients/inbox/review/__tests__/teardown-notice.test.js +100 -0
  104. package/dist/clients/inbox/review/comments-client.d.ts +3 -2
  105. package/dist/clients/inbox/review/comments-client.js +12 -12
  106. package/dist/clients/inbox/review/companion-pane.d.ts +30 -0
  107. package/dist/clients/inbox/review/companion-pane.js +86 -0
  108. package/dist/clients/inbox/review/document-surface.d.ts +182 -0
  109. package/dist/clients/inbox/review/{document-region.js → document-surface.js} +252 -48
  110. package/dist/clients/inbox/review/frame.js +5 -4
  111. package/dist/clients/inbox/review/launch.d.ts +8 -8
  112. package/dist/clients/inbox/review/launch.js +52 -92
  113. package/dist/clients/inbox/review/nvim.d.ts +2 -0
  114. package/dist/clients/inbox/review/nvim.js +14 -12
  115. package/dist/clients/inbox/review/review-client.d.ts +12 -8
  116. package/dist/clients/inbox/review/review-client.js +46 -35
  117. package/dist/clients/inbox/review-adapter.d.ts +3 -10
  118. package/dist/clients/inbox/review-adapter.js +27 -19
  119. package/dist/clients/inbox/surface.d.ts +0 -4
  120. package/dist/clients/inbox/surface.js +0 -2
  121. package/dist/clients/surfaces/host.d.ts +11 -3
  122. package/dist/commands/__tests__/api-client-cold-start-diagnostic.test.js +7 -34
  123. package/dist/commands/__tests__/human.test.js +11 -322
  124. package/dist/commands/api-client.d.ts +5 -5
  125. package/dist/commands/api-client.js +6 -85
  126. package/dist/commands/canvas-browse.js +3 -29
  127. package/dist/commands/canvas-config.js +1 -1
  128. package/dist/commands/canvas-use.js +3 -3
  129. package/dist/commands/canvas.js +1 -1
  130. package/dist/commands/cron.js +5 -1
  131. package/dist/commands/human/queue.d.ts +0 -4
  132. package/dist/commands/human/queue.js +7 -40
  133. package/dist/commands/memory/list.d.ts +14 -0
  134. package/dist/commands/memory/list.js +35 -31
  135. package/dist/commands/memory/read.d.ts +7 -0
  136. package/dist/commands/memory/read.js +14 -8
  137. package/dist/commands/node/bash.d.ts +1 -0
  138. package/dist/commands/node/bash.js +198 -0
  139. package/dist/commands/node/create.d.ts +23 -0
  140. package/dist/commands/node/create.js +207 -0
  141. package/dist/commands/node/inspect.d.ts +2 -0
  142. package/dist/commands/node/inspect.js +302 -0
  143. package/dist/commands/node/lifecycle.d.ts +4 -0
  144. package/dist/commands/node/lifecycle.js +415 -0
  145. package/dist/commands/node/message.d.ts +1 -0
  146. package/dist/commands/node/message.js +164 -0
  147. package/dist/commands/node/pyramid.d.ts +2 -0
  148. package/dist/commands/node/pyramid.js +79 -0
  149. package/dist/commands/node/subscription.d.ts +1 -0
  150. package/dist/commands/node/subscription.js +82 -0
  151. package/dist/commands/node/wait.d.ts +1 -0
  152. package/dist/commands/node/wait.js +159 -0
  153. package/dist/commands/node-lifecycle-revive.js +10 -57
  154. package/dist/commands/node.d.ts +0 -42
  155. package/dist/commands/node.js +11 -2065
  156. package/dist/commands/search.js +1 -1
  157. package/dist/commands/surface/node/cycle.d.ts +1 -0
  158. package/dist/commands/surface/node/cycle.js +83 -0
  159. package/dist/commands/surface/node/focus.d.ts +1 -0
  160. package/dist/commands/surface/node/focus.js +67 -0
  161. package/dist/commands/surface/node/id.d.ts +1 -0
  162. package/dist/commands/surface/node/id.js +38 -0
  163. package/dist/commands/surface/node/pin.d.ts +1 -0
  164. package/dist/commands/surface/node/pin.js +42 -0
  165. package/dist/commands/surface/node/placement.d.ts +46 -0
  166. package/dist/commands/surface/node/placement.js +124 -0
  167. package/dist/commands/surface-node.js +4 -1
  168. package/dist/commands/surface-reload.js +1 -2
  169. package/dist/commands/surface-tmux-spread.js +1 -1
  170. package/dist/commands/surface.js +5 -20
  171. package/dist/commands/sys/__tests__/setup-core.test.js +18 -271
  172. package/dist/commands/sys/config.js +6 -6
  173. package/dist/commands/sys/logs.js +1 -1
  174. package/dist/commands/sys/panels/broker-limits-panel.d.ts +17 -0
  175. package/dist/commands/sys/panels/broker-limits-panel.js +104 -0
  176. package/dist/commands/sys/panels/dependencies-panel.d.ts +14 -0
  177. package/dist/commands/sys/panels/dependencies-panel.js +80 -0
  178. package/dist/commands/sys/panels/keybindings-panel.d.ts +56 -0
  179. package/dist/commands/sys/panels/keybindings-panel.js +703 -0
  180. package/dist/commands/sys/panels/keys-panel.d.ts +16 -0
  181. package/dist/commands/sys/panels/keys-panel.js +60 -0
  182. package/dist/commands/sys/panels/models-panel.d.ts +77 -0
  183. package/dist/commands/sys/panels/models-panel.js +647 -0
  184. package/dist/commands/sys/panels/panel.d.ts +45 -0
  185. package/dist/commands/sys/panels/panel.js +137 -0
  186. package/dist/commands/sys/panels/plugins-panel.d.ts +16 -0
  187. package/dist/commands/sys/panels/plugins-panel.js +80 -0
  188. package/dist/commands/sys/panels/prefs-panel.d.ts +21 -0
  189. package/dist/commands/sys/panels/prefs-panel.js +85 -0
  190. package/dist/commands/sys/panels/provider-panel.d.ts +62 -0
  191. package/dist/commands/sys/panels/provider-panel.js +538 -0
  192. package/dist/commands/sys/settings-shell.d.ts +55 -0
  193. package/dist/commands/sys/settings-shell.js +400 -0
  194. package/dist/commands/sys/settings.d.ts +2 -0
  195. package/dist/commands/sys/settings.js +31 -0
  196. package/dist/commands/sys/setup-core.d.ts +3 -33
  197. package/dist/commands/sys/setup-core.js +27 -78
  198. package/dist/commands/sys/setup-settings-runner.d.ts +24 -0
  199. package/dist/commands/sys/setup-settings-runner.js +63 -0
  200. package/dist/commands/sys/setup-wizard.d.ts +26 -125
  201. package/dist/commands/sys/setup-wizard.js +209 -2473
  202. package/dist/commands/sys/setup.js +5 -7
  203. package/dist/commands/sys.js +3 -2
  204. package/dist/core/__tests__/broker-extension-canvas-db-boundary.test.js +50 -0
  205. package/dist/core/__tests__/broker-launch-candidates.test.js +20 -9
  206. package/dist/core/__tests__/broker-preflight.test.js +1 -1
  207. package/dist/core/__tests__/canvas-inbox-watcher-hold.test.js +108 -27
  208. package/dist/core/__tests__/canvas-inbox-watcher.test.js +14 -0
  209. package/dist/core/__tests__/canvas.test.js +2 -36
  210. package/dist/core/__tests__/close.test.js +14 -3
  211. package/dist/core/__tests__/context-intro.test.js +32 -143
  212. package/dist/core/__tests__/cron-broker-capacity.test.js +22 -3
  213. package/dist/core/__tests__/daemon-boot.test.js +2 -20
  214. package/dist/core/__tests__/daemon-wedge.test.js +1 -1
  215. package/dist/core/__tests__/dead-node-policy-table.test.js +1 -18
  216. package/dist/core/__tests__/fixtures/fake-engine.d.ts +1 -1
  217. package/dist/core/__tests__/fixtures/fake-engine.js +2 -2
  218. package/dist/core/__tests__/fixtures/fake-pi-host.js +2 -2
  219. package/dist/core/__tests__/focuses.test.js +4 -98
  220. package/dist/core/__tests__/helpers/broker-clients.d.ts +0 -3
  221. package/dist/core/__tests__/helpers/broker-clients.js +0 -14
  222. package/dist/core/__tests__/helpers/harness.d.ts +0 -8
  223. package/dist/core/__tests__/helpers/harness.js +7 -87
  224. package/dist/core/__tests__/helpers/viewer-panes.js +1 -1
  225. package/dist/core/__tests__/inline-memory-refs.test.js +5 -134
  226. package/dist/core/__tests__/kickoff.test.js +1 -1
  227. package/dist/core/__tests__/memory-resolver-precedence.test.js +29 -1
  228. package/dist/core/__tests__/migration.test.js +35 -48
  229. package/dist/core/__tests__/on-read-dedup-resume.test.js +22 -12
  230. package/dist/core/__tests__/passive-subscription.test.js +26 -49
  231. package/dist/core/__tests__/preview-registry-sync.test.js +1 -2
  232. package/dist/core/__tests__/prune.test.js +94 -1
  233. package/dist/core/__tests__/review-model-floor.test.js +0 -32
  234. package/dist/core/__tests__/seam/broker-attach-multiclient.test.js +255 -0
  235. package/dist/core/__tests__/{full → seam}/broker-attach-stream.test.js +39 -7
  236. package/dist/core/__tests__/{full → seam}/broker-crash-teardown.test.js +30 -29
  237. package/dist/core/__tests__/{full → seam}/broker-pane-resolution.test.js +54 -5
  238. package/dist/core/__tests__/{full → seam}/broker-provider-retry.test.js +134 -82
  239. package/dist/core/__tests__/{full → seam}/broker-whip-interrupt.test.js +15 -4
  240. package/dist/core/__tests__/{full/idle-release-settlement.test.js → seam/dormancy-release.test.js} +69 -17
  241. package/dist/core/__tests__/{full/yield-message-transaction.test.js → seam/yield-refresh-transaction.test.js} +31 -9
  242. package/dist/core/__tests__/secrets.test.js +1 -7
  243. package/dist/core/__tests__/{broker-fork-seam.test.js → serial/broker-fork-seam.test.js} +58 -7
  244. package/dist/core/__tests__/{broker-sdk-wiring.test.js → serial/broker-sdk-wiring.test.js} +18 -162
  245. package/dist/core/__tests__/{broker-snapshot-history.test.js → serial/broker-snapshot-history.test.js} +9 -9
  246. package/dist/core/__tests__/{command-plugins.test.js → serial/command-plugins.test.js} +105 -15
  247. package/dist/core/__tests__/{deferred-no-wake.test.js → serial/deferred-no-wake.test.js} +23 -20
  248. package/dist/core/__tests__/{flagship-lifecycle.test.js → serial/flagship-lifecycle.test.js} +7 -7
  249. package/dist/core/__tests__/{host-teardown-process-group.test.js → serial/host-teardown-process-group.test.js} +6 -6
  250. package/dist/core/__tests__/{human-deliver-e2e.test.js → serial/human-deliver-e2e.test.js} +12 -12
  251. package/dist/core/__tests__/{live-mutation.test.js → serial/live-mutation.test.js} +5 -5
  252. package/dist/core/__tests__/{refresh-stall-recycle.test.js → serial/refresh-stall-recycle.test.js} +5 -14
  253. package/dist/core/__tests__/{revive.test.js → serial/revive.test.js} +15 -100
  254. package/dist/core/__tests__/{spawn-root.test.js → serial/spawn-root.test.js} +32 -15
  255. package/dist/core/__tests__/serial/subscription-delivery.test.js +126 -0
  256. package/dist/core/__tests__/serial/tmux-surface.test.js +256 -0
  257. package/dist/core/__tests__/{worktree.test.js → serial/worktree.test.js} +15 -15
  258. package/dist/core/__tests__/session-model.test.js +0 -18
  259. package/dist/core/__tests__/spawn-worktree-id-conflict.test.js +9 -0
  260. package/dist/core/__tests__/watchdog-abort-arms-retry.test.js +50 -0
  261. package/dist/core/broker-client/__tests__/transport-relay.test.js +15 -16
  262. package/dist/core/broker-client/__tests__/transport-socket.test.js +28 -0
  263. package/dist/core/broker-client/client.d.ts +2 -2
  264. package/dist/core/broker-client/client.js +4 -7
  265. package/dist/core/broker-client/transport-relay.d.ts +13 -19
  266. package/dist/core/broker-client/transport-relay.js +19 -34
  267. package/dist/core/broker-client/transport-socket.d.ts +2 -2
  268. package/dist/core/broker-client/transport-socket.js +9 -2
  269. package/dist/core/broker-client/transport.d.ts +7 -3
  270. package/dist/core/broker-client/transport.js +4 -4
  271. package/dist/core/canvas/__tests__/attention.test.js +1 -18
  272. package/dist/core/canvas/__tests__/remote-canvas-source.test.js +7 -64
  273. package/dist/core/canvas/__tests__/remote-transport.test.js +2 -3
  274. package/dist/core/canvas/__tests__/render-remote.test.js +7 -52
  275. package/dist/core/canvas/browse/app.d.ts +2 -17
  276. package/dist/core/canvas/browse/app.js +16 -88
  277. package/dist/core/canvas/browse/model.d.ts +0 -4
  278. package/dist/core/canvas/browse/model.js +1 -12
  279. package/dist/core/canvas/browse/render.js +6 -3
  280. package/dist/core/canvas/crons.d.ts +8 -5
  281. package/dist/core/canvas/crons.js +7 -6
  282. package/dist/core/canvas/extensions.d.ts +7 -3
  283. package/dist/core/canvas/extensions.js +16 -4
  284. package/dist/core/canvas/nav-model.d.ts +0 -4
  285. package/dist/core/canvas/nav-model.js +2 -14
  286. package/dist/core/canvas/node-order.d.ts +3 -0
  287. package/dist/core/canvas/node-order.js +12 -0
  288. package/dist/core/canvas/remote-canvas-source.d.ts +3 -6
  289. package/dist/core/canvas/remote-canvas-source.js +8 -15
  290. package/dist/core/command.js +11 -4
  291. package/dist/core/config.js +3 -1
  292. package/dist/core/events/envelope.js +1 -1
  293. package/dist/core/events/read.js +7 -21
  294. package/dist/core/events/source.d.ts +0 -2
  295. package/dist/core/events/source.js +0 -16
  296. package/dist/core/events/types.d.ts +1 -1
  297. package/dist/core/fault-classifier.d.ts +1 -1
  298. package/dist/core/feed/passive.d.ts +0 -11
  299. package/dist/core/feed/passive.js +1 -62
  300. package/dist/core/human/__tests__/{inbox-core.test.js → serial/inbox-core.test.js} +6 -6
  301. package/dist/core/keybindings/__tests__/resolve.test.js +1 -96
  302. package/dist/core/keybindings/background-bash.js +3 -4
  303. package/dist/core/keybindings/catalog.js +1 -1
  304. package/dist/core/memory/inline-ref-grammar.js +3 -3
  305. package/dist/core/memory-resolver.d.ts +11 -25
  306. package/dist/core/memory-resolver.js +51 -33
  307. package/dist/core/model-routes.d.ts +15 -0
  308. package/dist/core/model-routes.js +12 -0
  309. package/dist/core/pool-credential-store.js +1 -1
  310. package/dist/core/preview-registry.js +8 -9
  311. package/dist/core/profiles/__tests__/root-profile.test.js +4 -14
  312. package/dist/core/review/realize.d.ts +0 -13
  313. package/dist/core/review/realize.js +0 -40
  314. package/dist/core/review/types.d.ts +1 -1
  315. package/dist/core/runtime/__tests__/engine-route.test.js +2 -2
  316. package/dist/core/runtime/bearings.js +1 -11
  317. package/dist/core/runtime/broker/client-registry.d.ts +33 -0
  318. package/dist/core/runtime/broker/client-registry.js +164 -0
  319. package/dist/core/runtime/broker/daemon-ops.d.ts +19 -0
  320. package/dist/core/runtime/broker/daemon-ops.js +49 -0
  321. package/dist/core/runtime/broker/event-projection.d.ts +42 -0
  322. package/dist/core/runtime/broker/event-projection.js +178 -0
  323. package/dist/core/runtime/broker/fault-retry.d.ts +39 -0
  324. package/dist/core/runtime/broker/fault-retry.js +277 -0
  325. package/dist/core/runtime/broker/frame-dispatch.d.ts +238 -0
  326. package/dist/core/runtime/broker/frame-dispatch.js +1537 -0
  327. package/dist/core/runtime/broker/inbox.d.ts +22 -0
  328. package/dist/core/runtime/broker/inbox.js +167 -0
  329. package/dist/core/runtime/broker/passive.d.ts +16 -0
  330. package/dist/core/runtime/broker/passive.js +44 -0
  331. package/dist/core/runtime/broker/read-ops.d.ts +23 -0
  332. package/dist/core/runtime/broker/read-ops.js +150 -0
  333. package/dist/core/runtime/broker/rebind.d.ts +74 -0
  334. package/dist/core/runtime/broker/rebind.js +211 -0
  335. package/dist/core/runtime/broker/tool-groups.d.ts +39 -0
  336. package/dist/core/runtime/broker/tool-groups.js +244 -0
  337. package/dist/core/runtime/broker-extension-render.d.ts +11 -0
  338. package/dist/core/runtime/broker-extension-render.js +181 -0
  339. package/dist/core/runtime/broker-persona-guidance.d.ts +13 -0
  340. package/dist/core/runtime/broker-persona-guidance.js +58 -0
  341. package/dist/core/runtime/broker-protocol.d.ts +1 -1
  342. package/dist/core/runtime/broker-protocol.js +1 -1
  343. package/dist/core/runtime/broker.d.ts +5 -196
  344. package/dist/core/runtime/broker.js +276 -3059
  345. package/dist/core/runtime/canvas-extensions.js +11 -2
  346. package/dist/core/runtime/fault.js +1 -1
  347. package/dist/core/runtime/model-selection.d.ts +9 -0
  348. package/dist/core/runtime/model-selection.js +12 -0
  349. package/dist/core/runtime/model-swap.d.ts +3 -3
  350. package/dist/core/runtime/model-swap.js +33 -25
  351. package/dist/core/runtime/placement-tmux.d.ts +3 -14
  352. package/dist/core/runtime/placement-tmux.js +11 -80
  353. package/dist/core/runtime/placement.d.ts +4 -2
  354. package/dist/core/runtime/placement.js +7 -12
  355. package/dist/core/runtime/promote.d.ts +14 -1
  356. package/dist/core/runtime/promote.js +1 -1
  357. package/dist/core/runtime/reset.d.ts +1 -1
  358. package/dist/core/runtime/roadmap.js +1 -1
  359. package/dist/core/runtime/spawn.d.ts +8 -0
  360. package/dist/core/runtime/spawn.js +36 -6
  361. package/dist/core/runtime/stop-guard.d.ts +4 -3
  362. package/dist/core/runtime/stop-guard.js +36 -18
  363. package/dist/core/runtime/stop-signals.d.ts +4 -1
  364. package/dist/core/runtime/stream-watchdog.js +4 -5
  365. package/dist/core/runtime/structured-output.d.ts +15 -2
  366. package/dist/core/runtime/structured-output.js +35 -12
  367. package/dist/core/runtime/tmux-bindings.d.ts +25 -0
  368. package/dist/core/runtime/tmux-bindings.js +682 -0
  369. package/dist/core/runtime/tmux-chrome.d.ts +2 -1
  370. package/dist/core/runtime/tmux-chrome.js +3 -2
  371. package/dist/core/runtime/{tmux.d.ts → tmux-driver.d.ts} +18 -26
  372. package/dist/core/runtime/tmux-driver.js +598 -0
  373. package/dist/core/runtime/view-socket.d.ts +14 -0
  374. package/dist/core/runtime/view-socket.js +83 -0
  375. package/dist/core/session-model/session-state.d.ts +1 -2
  376. package/dist/core/session-model/session-state.js +5 -8
  377. package/dist/core/spawn.d.ts +1 -1
  378. package/dist/core/spawn.js +2 -2
  379. package/dist/core/substrate/gate.d.ts +1 -1
  380. package/dist/core/substrate/on-read-pure.d.ts +7 -0
  381. package/dist/core/substrate/on-read-pure.js +272 -0
  382. package/dist/core/termrender/termrender.js +32 -2
  383. package/dist/core/user-settings.d.ts +23 -1
  384. package/dist/core/user-settings.js +18 -1
  385. package/dist/daemon/api/__tests__/node-model-validation.test.js +134 -0
  386. package/dist/daemon/api/__tests__/review-terminal-conflict.test.js +98 -0
  387. package/dist/daemon/api/__tests__/{full → seam}/api-server.test.js +6 -48
  388. package/dist/daemon/api/__tests__/{full → seam}/b10-attach-modelauth.test.js +17 -44
  389. package/dist/daemon/api/__tests__/{full/push-parity.test.js → seam/leaf-api-parity.test.js} +61 -42
  390. package/dist/daemon/api/bridge.js +40 -81
  391. package/dist/daemon/api/handlers/broker-ops.d.ts +2 -0
  392. package/dist/daemon/api/handlers/broker-ops.js +383 -0
  393. package/dist/daemon/api/handlers/crons.js +9 -4
  394. package/dist/daemon/api/handlers/files.js +6 -7
  395. package/dist/daemon/api/handlers/inbox.js +2 -340
  396. package/dist/daemon/api/handlers/nodes.d.ts +10 -1
  397. package/dist/daemon/api/handlers/nodes.js +74 -39
  398. package/dist/daemon/api/handlers/review-comments.js +5 -1
  399. package/dist/daemon/api/handlers/reviews.js +0 -19
  400. package/dist/daemon/api/map.js +25 -4
  401. package/dist/daemon/api/router.js +2 -3
  402. package/dist/daemon/api/server.js +5 -7
  403. package/dist/daemon/cron-run.d.ts +4 -0
  404. package/dist/daemon/cron-run.js +30 -13
  405. package/dist/daemon/crtrd.d.ts +3 -58
  406. package/dist/daemon/crtrd.js +28 -1244
  407. package/dist/daemon/manage.js +0 -1
  408. package/dist/daemon/reconcilers/broker-supervision.d.ts +50 -0
  409. package/dist/daemon/reconcilers/broker-supervision.js +549 -0
  410. package/dist/daemon/reconcilers/cron-lane.d.ts +10 -0
  411. package/dist/daemon/reconcilers/cron-lane.js +32 -0
  412. package/dist/daemon/reconcilers/dormant-inbox.d.ts +18 -0
  413. package/dist/daemon/reconcilers/dormant-inbox.js +143 -0
  414. package/dist/daemon/reconcilers/storage-maintenance.d.ts +22 -0
  415. package/dist/daemon/reconcilers/storage-maintenance.js +213 -0
  416. package/dist/daemon/review/finish.js +2 -5
  417. package/dist/pi-extensions/__tests__/canvas-context-intro.test.js +34 -53
  418. package/dist/pi-extensions/__tests__/canvas-recap.test.js +16 -113
  419. package/dist/pi-extensions/__tests__/canvas-stophook-agentend.test.js +72 -99
  420. package/dist/pi-extensions/__tests__/canvas-stophook-context-nudge.test.js +29 -12
  421. package/dist/pi-extensions/broker-local.d.ts +20 -0
  422. package/dist/pi-extensions/broker-local.js +89 -0
  423. package/dist/pi-extensions/canvas-context-intro.d.ts +3 -3
  424. package/dist/pi-extensions/canvas-context-intro.js +22 -11
  425. package/dist/pi-extensions/canvas-doc-substrate.js +17 -34
  426. package/dist/pi-extensions/canvas-goal-capture.js +7 -12
  427. package/dist/pi-extensions/canvas-inbox-watcher.js +124 -139
  428. package/dist/pi-extensions/canvas-passive-context.d.ts +3 -3
  429. package/dist/pi-extensions/canvas-passive-context.js +22 -18
  430. package/dist/pi-extensions/canvas-recap.d.ts +2 -2
  431. package/dist/pi-extensions/canvas-recap.js +48 -21
  432. package/dist/pi-extensions/canvas-review-boundary.js +10 -4
  433. package/dist/pi-extensions/canvas-stophook.d.ts +0 -5
  434. package/dist/pi-extensions/canvas-stophook.js +149 -431
  435. package/dist/pi-extensions/canvas-structured-output.js +52 -30
  436. package/dist/pi-extensions/envelope-merge.d.ts +13 -0
  437. package/dist/pi-extensions/envelope-merge.js +29 -0
  438. package/dist/shared/working-activity.d.ts +3 -2
  439. package/dist/shared/working-activity.js +3 -2
  440. package/dist/types.d.ts +6 -5
  441. package/dist/types.js +2 -2
  442. package/docs/compat/hearth-crtr-v1.md +4 -12
  443. package/docs/compat/hearth-crtr-v2.md +3 -11
  444. package/docs/compat/hearth-crtr-v3.md +4 -12
  445. package/docs/compat/hearth-crtr-v4.md +3 -11
  446. package/docs/compat/hearth-crtr-v5.md +3 -11
  447. package/docs/public-api.md +3 -7
  448. package/package.json +7 -49
  449. package/runtime.lock.json +2766 -14533
  450. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/claude-plugin-commands.test.ts +0 -49
  451. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/memory-slash-commands.test.ts +0 -194
  452. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/statusline.test.ts +0 -68
  453. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/frontmatter-rules/test.ts +0 -119
  454. package/dist/clients/attach/__tests__/attach-chrome-remote.test.js +0 -439
  455. package/dist/clients/attach/__tests__/attach-keybindings.test.js +0 -170
  456. package/dist/clients/attach/__tests__/crtr-output-coverage.test.js +0 -57
  457. package/dist/clients/attach/__tests__/editor-frame-title.test.js +0 -19
  458. package/dist/clients/attach/__tests__/input-controller-extension-command.test.js +0 -32
  459. package/dist/clients/attach/__tests__/markdown-headings.test.js +0 -35
  460. package/dist/clients/attach/__tests__/session-identity-refresh.test.js +0 -32
  461. package/dist/clients/conversation/conversation.d.ts +0 -65
  462. package/dist/clients/conversation/conversation.js +0 -318
  463. package/dist/clients/conversation/frames.d.ts +0 -30
  464. package/dist/clients/conversation/frames.js +0 -52
  465. package/dist/clients/conversation/region.d.ts +0 -51
  466. package/dist/clients/conversation/region.js +0 -265
  467. package/dist/clients/inbox/__tests__/inbox-controller.test.js +0 -247
  468. package/dist/clients/inbox/__tests__/mount-panel.test.js +0 -776
  469. package/dist/clients/inbox/review/__tests__/remap.test.js +0 -196
  470. package/dist/clients/inbox/review/columns.d.ts +0 -22
  471. package/dist/clients/inbox/review/columns.js +0 -40
  472. package/dist/clients/inbox/review/composition.d.ts +0 -60
  473. package/dist/clients/inbox/review/composition.js +0 -278
  474. package/dist/clients/inbox/review/document-region.d.ts +0 -120
  475. package/dist/clients/surfaces/region.d.ts +0 -16
  476. package/dist/clients/web/__tests__/push-engine.test.js +0 -158
  477. package/dist/clients/web/__tests__/push-registry.test.d.ts +0 -1
  478. package/dist/clients/web/__tests__/push-registry.test.js +0 -177
  479. package/dist/clients/web/dev-server.d.ts +0 -7
  480. package/dist/clients/web/dev-server.js +0 -46
  481. package/dist/clients/web/events.d.ts +0 -19
  482. package/dist/clients/web/events.js +0 -163
  483. package/dist/clients/web/push-engine.d.ts +0 -44
  484. package/dist/clients/web/push-engine.js +0 -125
  485. package/dist/clients/web/push-registry.d.ts +0 -85
  486. package/dist/clients/web/push-registry.js +0 -373
  487. package/dist/clients/web/server.d.ts +0 -19
  488. package/dist/clients/web/server.js +0 -661
  489. package/dist/clients/web/web-client/shared/protocol.d.ts +0 -214
  490. package/dist/clients/web/web-client/shared/protocol.js +0 -8
  491. package/dist/clients/web/web-cmd.d.ts +0 -2
  492. package/dist/clients/web/web-cmd.js +0 -141
  493. package/dist/commands/__tests__/api-canvas-source.test.d.ts +0 -1
  494. package/dist/commands/__tests__/api-canvas-source.test.js +0 -37
  495. package/dist/commands/__tests__/canvas-config.test.d.ts +0 -1
  496. package/dist/commands/__tests__/canvas-config.test.js +0 -107
  497. package/dist/commands/__tests__/node-no-kickoff-flag.test.d.ts +0 -1
  498. package/dist/commands/__tests__/node-no-kickoff-flag.test.js +0 -73
  499. package/dist/commands/__tests__/node-worktree-flag.test.d.ts +0 -1
  500. package/dist/commands/__tests__/node-worktree-flag.test.js +0 -49
  501. package/dist/commands/__tests__/search-contents.test.d.ts +0 -1
  502. package/dist/commands/__tests__/search-contents.test.js +0 -52
  503. package/dist/commands/memory/__tests__/lint.test.d.ts +0 -1
  504. package/dist/commands/memory/__tests__/lint.test.js +0 -15
  505. package/dist/commands/sys/__tests__/config-broker-thresholds.test.d.ts +0 -1
  506. package/dist/commands/sys/__tests__/config-broker-thresholds.test.js +0 -95
  507. package/dist/commands/sys/__tests__/config-keybindings.test.d.ts +0 -1
  508. package/dist/commands/sys/__tests__/config-keybindings.test.js +0 -55
  509. package/dist/commands/sys/__tests__/helpers/setup-runtime.d.ts +0 -5
  510. package/dist/commands/sys/__tests__/helpers/setup-runtime.js +0 -19
  511. package/dist/commands/sys/__tests__/setup-front-door.test.d.ts +0 -1
  512. package/dist/commands/sys/__tests__/setup-front-door.test.js +0 -102
  513. package/dist/commands/sys/__tests__/setup-models.test.d.ts +0 -1
  514. package/dist/commands/sys/__tests__/setup-models.test.js +0 -205
  515. package/dist/commands/sys/__tests__/setup-providers-viewport.test.d.ts +0 -1
  516. package/dist/commands/sys/__tests__/setup-providers-viewport.test.js +0 -155
  517. package/dist/commands/sys/__tests__/sync-deps.test.d.ts +0 -1
  518. package/dist/commands/sys/__tests__/sync-deps.test.js +0 -179
  519. package/dist/commands/sys/__tests__/sync-import.test.d.ts +0 -1
  520. package/dist/commands/sys/__tests__/sync-import.test.js +0 -315
  521. package/dist/core/__tests__/base-worker-prompt.test.d.ts +0 -1
  522. package/dist/core/__tests__/base-worker-prompt.test.js +0 -57
  523. package/dist/core/__tests__/command-plugins-surfaces.test.d.ts +0 -1
  524. package/dist/core/__tests__/command-plugins-surfaces.test.js +0 -359
  525. package/dist/core/__tests__/connection-reconnect-resume.test.d.ts +0 -1
  526. package/dist/core/__tests__/connection-reconnect-resume.test.js +0 -36
  527. package/dist/core/__tests__/finalization-migration.test.d.ts +0 -1
  528. package/dist/core/__tests__/finalization-migration.test.js +0 -38
  529. package/dist/core/__tests__/fixtures/extra-extension.d.ts +0 -1
  530. package/dist/core/__tests__/fixtures/extra-extension.js +0 -3
  531. package/dist/core/__tests__/fixtures/spawn-proof-target.test.d.ts +0 -1
  532. package/dist/core/__tests__/fixtures/spawn-proof-target.test.js +0 -15
  533. package/dist/core/__tests__/fork.test.d.ts +0 -1
  534. package/dist/core/__tests__/fork.test.js +0 -108
  535. package/dist/core/__tests__/full/broker-attach-limits.test.d.ts +0 -1
  536. package/dist/core/__tests__/full/broker-attach-limits.test.js +0 -147
  537. package/dist/core/__tests__/full/broker-deliver-ack.test.d.ts +0 -1
  538. package/dist/core/__tests__/full/broker-deliver-ack.test.js +0 -73
  539. package/dist/core/__tests__/full/broker-dialogs.test.d.ts +0 -1
  540. package/dist/core/__tests__/full/broker-dialogs.test.js +0 -180
  541. package/dist/core/__tests__/full/broker-display-snapshot.test.d.ts +0 -1
  542. package/dist/core/__tests__/full/broker-display-snapshot.test.js +0 -75
  543. package/dist/core/__tests__/full/broker-dormant-wake.test.d.ts +0 -1
  544. package/dist/core/__tests__/full/broker-dormant-wake.test.js +0 -130
  545. package/dist/core/__tests__/full/broker-model-changed-broadcast.test.d.ts +0 -1
  546. package/dist/core/__tests__/full/broker-model-changed-broadcast.test.js +0 -57
  547. package/dist/core/__tests__/full/broker-navigate-tree-rewelcome.test.d.ts +0 -1
  548. package/dist/core/__tests__/full/broker-navigate-tree-rewelcome.test.js +0 -80
  549. package/dist/core/__tests__/full/cascade-close.test.d.ts +0 -1
  550. package/dist/core/__tests__/full/cascade-close.test.js +0 -240
  551. package/dist/core/__tests__/full/detach-focus.test.d.ts +0 -1
  552. package/dist/core/__tests__/full/detach-focus.test.js +0 -126
  553. package/dist/core/__tests__/full/idle-release-settlement.test.d.ts +0 -1
  554. package/dist/core/__tests__/full/issue-146-yield-spawn-focus.test.d.ts +0 -1
  555. package/dist/core/__tests__/full/issue-146-yield-spawn-focus.test.js +0 -107
  556. package/dist/core/__tests__/full/park-clock-release.test.d.ts +0 -1
  557. package/dist/core/__tests__/full/park-clock-release.test.js +0 -56
  558. package/dist/core/__tests__/full/yield-message-transaction.test.d.ts +0 -1
  559. package/dist/core/__tests__/memory-index-render.test.d.ts +0 -1
  560. package/dist/core/__tests__/memory-index-render.test.js +0 -60
  561. package/dist/core/__tests__/model-routes.test.d.ts +0 -1
  562. package/dist/core/__tests__/model-routes.test.js +0 -41
  563. package/dist/core/__tests__/on-read-identity.test.d.ts +0 -1
  564. package/dist/core/__tests__/on-read-identity.test.js +0 -61
  565. package/dist/core/__tests__/phase4-review-migration.test.d.ts +0 -1
  566. package/dist/core/__tests__/phase4-review-migration.test.js +0 -100
  567. package/dist/core/__tests__/prune-to-limit.test.d.ts +0 -1
  568. package/dist/core/__tests__/prune-to-limit.test.js +0 -126
  569. package/dist/core/__tests__/reset.test.d.ts +0 -1
  570. package/dist/core/__tests__/reset.test.js +0 -69
  571. package/dist/core/__tests__/spawn-no-kickoff.test.d.ts +0 -1
  572. package/dist/core/__tests__/spawn-no-kickoff.test.js +0 -115
  573. package/dist/core/__tests__/steer-note.test.d.ts +0 -1
  574. package/dist/core/__tests__/steer-note.test.js +0 -41
  575. package/dist/core/__tests__/subcommand-tier.test.d.ts +0 -1
  576. package/dist/core/__tests__/subcommand-tier.test.js +0 -99
  577. package/dist/core/__tests__/subscription-delivery.test.js +0 -211
  578. package/dist/core/__tests__/test-runner-cheap-sharding.test.d.ts +0 -1
  579. package/dist/core/__tests__/test-runner-cheap-sharding.test.js +0 -97
  580. package/dist/core/__tests__/tmux-surface.test.js +0 -484
  581. package/dist/core/__tests__/wake-bearings.test.d.ts +0 -1
  582. package/dist/core/__tests__/wake-bearings.test.js +0 -102
  583. package/dist/core/canvas/__tests__/remote-event-stream.test.d.ts +0 -1
  584. package/dist/core/canvas/__tests__/remote-event-stream.test.js +0 -146
  585. package/dist/core/canvas/__tests__/source-resolve.test.d.ts +0 -1
  586. package/dist/core/canvas/__tests__/source-resolve.test.js +0 -77
  587. package/dist/core/canvas/browse/__tests__/model.test.d.ts +0 -1
  588. package/dist/core/canvas/browse/__tests__/model.test.js +0 -290
  589. package/dist/core/canvas/browse/__tests__/rebuild-coalescer.test.d.ts +0 -1
  590. package/dist/core/canvas/browse/__tests__/rebuild-coalescer.test.js +0 -134
  591. package/dist/core/canvas/browse/__tests__/render.test.d.ts +0 -1
  592. package/dist/core/canvas/browse/__tests__/render.test.js +0 -111
  593. package/dist/core/canvas/browse/rebuild-coalescer.d.ts +0 -7
  594. package/dist/core/canvas/browse/rebuild-coalescer.js +0 -61
  595. package/dist/core/canvas/remote-event-stream.d.ts +0 -24
  596. package/dist/core/canvas/remote-event-stream.js +0 -94
  597. package/dist/core/feed/__tests__/coalesce-human.test.d.ts +0 -1
  598. package/dist/core/feed/__tests__/coalesce-human.test.js +0 -36
  599. package/dist/core/feed/__tests__/empty-node-guard.test.d.ts +0 -1
  600. package/dist/core/feed/__tests__/empty-node-guard.test.js +0 -45
  601. package/dist/core/host-exports/__tests__/export-prunes-boot-skill.test.d.ts +0 -1
  602. package/dist/core/host-exports/__tests__/export-prunes-boot-skill.test.js +0 -84
  603. package/dist/core/human/__tests__/visible-paths.test.d.ts +0 -1
  604. package/dist/core/human/__tests__/visible-paths.test.js +0 -28
  605. package/dist/core/keybindings/__tests__/inbox-affordance.test.d.ts +0 -1
  606. package/dist/core/keybindings/__tests__/inbox-affordance.test.js +0 -38
  607. package/dist/core/review/__tests__/project.test.d.ts +0 -1
  608. package/dist/core/review/__tests__/project.test.js +0 -71
  609. package/dist/core/runtime/__tests__/command-expansion.test.d.ts +0 -1
  610. package/dist/core/runtime/__tests__/command-expansion.test.js +0 -25
  611. package/dist/core/runtime/__tests__/session-visibility.test.d.ts +0 -1
  612. package/dist/core/runtime/__tests__/session-visibility.test.js +0 -119
  613. package/dist/core/runtime/__tests__/spawn-at-given-id.test.d.ts +0 -1
  614. package/dist/core/runtime/__tests__/spawn-at-given-id.test.js +0 -34
  615. package/dist/core/runtime/tmux.js +0 -1314
  616. package/dist/daemon/api/__tests__/full/push-parity.test.d.ts +0 -1
  617. package/dist/daemon/api/__tests__/full/worktree-parity.test.d.ts +0 -1
  618. package/dist/daemon/api/__tests__/full/worktree-parity.test.js +0 -160
  619. package/dist/daemon/api/__tests__/inbox.test.d.ts +0 -1
  620. package/dist/daemon/api/__tests__/inbox.test.js +0 -489
  621. package/dist/web-client/apple-touch-icon.png +0 -0
  622. package/dist/web-client/assets/fragment-mono-latin-400-normal-BYwT3kSJ.woff +0 -0
  623. package/dist/web-client/assets/fragment-mono-latin-400-normal-yxdJ5AmL.woff2 +0 -0
  624. package/dist/web-client/assets/fragment-mono-latin-ext-400-normal-BbKYyvR9.woff2 +0 -0
  625. package/dist/web-client/assets/fragment-mono-latin-ext-400-normal-CT4YFKeK.woff +0 -0
  626. package/dist/web-client/assets/index-CCPaLeW7.css +0 -2
  627. package/dist/web-client/assets/index-kyOWsnZK.js +0 -86
  628. package/dist/web-client/assets/martian-mono-cyrillic-wght-normal-B84CD5C_.woff2 +0 -0
  629. package/dist/web-client/assets/martian-mono-latin-ext-wght-normal-DlL6xMw5.woff2 +0 -0
  630. package/dist/web-client/assets/martian-mono-latin-wght-normal-5W32yIyr.woff2 +0 -0
  631. package/dist/web-client/assets/workbox-window.prod.es5-Bd17z0YL.js +0 -2
  632. package/dist/web-client/icon-192.png +0 -0
  633. package/dist/web-client/icon-512.png +0 -0
  634. package/dist/web-client/icon-maskable-512.png +0 -0
  635. package/dist/web-client/index.html +0 -17
  636. package/dist/web-client/manifest.webmanifest +0 -1
  637. package/dist/web-client/sw.js +0 -1
  638. /package/dist/api/__tests__/{client.test.d.ts → serial/client.test.d.ts} +0 -0
  639. /package/dist/clients/inbox/__tests__/{inbox-controller.test.d.ts → serial/inbox-controller.test.d.ts} +0 -0
  640. /package/dist/clients/inbox/__tests__/{mount-panel.test.d.ts → serial/mount-panel.test.d.ts} +0 -0
  641. /package/dist/clients/{attach/__tests__/attach-chrome-remote.test.d.ts → inbox/review/__tests__/teardown-notice.test.d.ts} +0 -0
  642. /package/dist/{clients/attach/__tests__/attach-keybindings.test.d.ts → core/__tests__/broker-extension-canvas-db-boundary.test.d.ts} +0 -0
  643. /package/dist/{clients/attach/__tests__/crtr-output-coverage.test.d.ts → core/__tests__/seam/broker-attach-multiclient.test.d.ts} +0 -0
  644. /package/dist/core/__tests__/{full → seam}/broker-attach-stream.test.d.ts +0 -0
  645. /package/dist/core/__tests__/{full → seam}/broker-crash-teardown.test.d.ts +0 -0
  646. /package/dist/core/__tests__/{full → seam}/broker-pane-resolution.test.d.ts +0 -0
  647. /package/dist/core/__tests__/{full → seam}/broker-provider-retry.test.d.ts +0 -0
  648. /package/dist/core/__tests__/{full → seam}/broker-whip-interrupt.test.d.ts +0 -0
  649. /package/dist/{clients/attach/__tests__/editor-frame-title.test.d.ts → core/__tests__/seam/dormancy-release.test.d.ts} +0 -0
  650. /package/dist/{clients/attach/__tests__/input-controller-extension-command.test.d.ts → core/__tests__/seam/yield-refresh-transaction.test.d.ts} +0 -0
  651. /package/dist/core/__tests__/{broker-fork-seam.test.d.ts → serial/broker-fork-seam.test.d.ts} +0 -0
  652. /package/dist/core/__tests__/{broker-sdk-wiring.test.d.ts → serial/broker-sdk-wiring.test.d.ts} +0 -0
  653. /package/dist/core/__tests__/{broker-snapshot-history.test.d.ts → serial/broker-snapshot-history.test.d.ts} +0 -0
  654. /package/dist/core/__tests__/{command-plugins.test.d.ts → serial/command-plugins.test.d.ts} +0 -0
  655. /package/dist/core/__tests__/{deferred-no-wake.test.d.ts → serial/deferred-no-wake.test.d.ts} +0 -0
  656. /package/dist/core/__tests__/{flagship-lifecycle.test.d.ts → serial/flagship-lifecycle.test.d.ts} +0 -0
  657. /package/dist/core/__tests__/{host-teardown-process-group.test.d.ts → serial/host-teardown-process-group.test.d.ts} +0 -0
  658. /package/dist/core/__tests__/{human-deliver-e2e.test.d.ts → serial/human-deliver-e2e.test.d.ts} +0 -0
  659. /package/dist/core/__tests__/{live-mutation.test.d.ts → serial/live-mutation.test.d.ts} +0 -0
  660. /package/dist/core/__tests__/{refresh-stall-recycle.test.d.ts → serial/refresh-stall-recycle.test.d.ts} +0 -0
  661. /package/dist/core/__tests__/{revive.test.d.ts → serial/revive.test.d.ts} +0 -0
  662. /package/dist/core/__tests__/{spawn-root.test.d.ts → serial/spawn-root.test.d.ts} +0 -0
  663. /package/dist/core/__tests__/{subscription-delivery.test.d.ts → serial/subscription-delivery.test.d.ts} +0 -0
  664. /package/dist/core/__tests__/{tmux-surface.test.d.ts → serial/tmux-surface.test.d.ts} +0 -0
  665. /package/dist/core/__tests__/{worktree.test.d.ts → serial/worktree.test.d.ts} +0 -0
  666. /package/dist/{clients/attach/__tests__/markdown-headings.test.d.ts → core/__tests__/watchdog-abort-arms-retry.test.d.ts} +0 -0
  667. /package/dist/{clients/attach/__tests__/session-identity-refresh.test.d.ts → core/broker-client/__tests__/transport-socket.test.d.ts} +0 -0
  668. /package/dist/core/human/__tests__/{inbox-core.test.d.ts → serial/inbox-core.test.d.ts} +0 -0
  669. /package/dist/{clients/inbox/review/__tests__/remap.test.d.ts → daemon/api/__tests__/node-model-validation.test.d.ts} +0 -0
  670. /package/dist/{clients/surfaces/region.js → daemon/api/__tests__/review-terminal-conflict.test.d.ts} +0 -0
  671. /package/dist/daemon/api/__tests__/{full → seam}/api-server.test.d.ts +0 -0
  672. /package/dist/daemon/api/__tests__/{full → seam}/b10-attach-modelauth.test.d.ts +0 -0
  673. /package/dist/{clients/web/__tests__/push-engine.test.d.ts → daemon/api/__tests__/seam/leaf-api-parity.test.d.ts} +0 -0
@@ -5,8 +5,8 @@
5
5
  // return is only a handoff. Exact cursor persistence at agent_settled is the
6
6
  // durable boundary; an uncommitted process exit is recovered by rereading from
7
7
  // the unchanged cursor.
8
- import { coalesce, readCanceledEntryIds, readCursor, readInboxRange, readInboxSince, writeCursor, } from '../core/feed/inbox.js';
9
- import { getNode } from '../core/canvas/index.js';
8
+ import { coalesceBrokerInbox, readBrokerCanceledEntryIds, readBrokerCursor, readBrokerInboxSince, } from '../core/runtime/broker/inbox.js';
9
+ import { advanceBrokerInboxCursor, brokerExtensionState } from '../core/runtime/broker/daemon-ops.js';
10
10
  import { emitEvent } from '../core/events/emit.js';
11
11
  import { errorClassFromError } from '../core/events/errors.js';
12
12
  import { operationIdContext } from '../core/events/operation-id.js';
@@ -14,8 +14,6 @@ import { readSituationalContext, SITUATIONAL_CONTEXT_CUSTOM_TYPE } from '../core
14
14
  const DEFAULT_TICK_MS = 800;
15
15
  const DEFAULT_DEBOUNCE_MS = 1000;
16
16
  const MAX_PENDING_HANDOFFS = 64;
17
- const REPLAY_RESERVED_HANDOFFS = 2;
18
- const MAX_ORDINARY_HANDOFFS = MAX_PENDING_HANDOFFS - REPLAY_RESERVED_HANDOFFS;
19
17
  const MAX_SOURCE_OPERATION_IDS = 16;
20
18
  let currentWatcher;
21
19
  let nextGeneration = 0;
@@ -181,12 +179,13 @@ class CanvasInboxWatcher {
181
179
  buffer = [];
182
180
  lastArrival = 0;
183
181
  pendingHandoffs = [];
184
- replay;
182
+ pendingCommit;
185
183
  seeded = false;
186
184
  disposed = false;
187
185
  disposalReason;
188
186
  fatalError;
189
187
  fatalEscaped = false;
188
+ reportNodes = new Map();
190
189
  constructor(pi, cadence, generation) {
191
190
  this.pi = pi;
192
191
  this.cadence = cadence;
@@ -212,6 +211,7 @@ class CanvasInboxWatcher {
212
211
  return;
213
212
  this.captureCtx(event, ctx);
214
213
  this.arm();
214
+ void this.refreshReportNodes(currentNodeId());
215
215
  });
216
216
  this.pi.on('turn_end', capture);
217
217
  this.pi.on('agent_start', (event, ctx) => {
@@ -227,7 +227,7 @@ class CanvasInboxWatcher {
227
227
  this.streaming = false;
228
228
  // agent_end can precede retry, compaction, or queued continuation.
229
229
  });
230
- this.pi.on('agent_settled', (event, ctx) => {
230
+ this.pi.on('agent_settled', async (event, ctx) => {
231
231
  if (!this.canMutate())
232
232
  return;
233
233
  this.captureCtx(event, ctx);
@@ -236,22 +236,19 @@ class CanvasInboxWatcher {
236
236
  return;
237
237
  try {
238
238
  this.assertNodeOwnership(nodeId, 'settle');
239
- const refreshHeld = this.readRefreshIntentOrFatal(nodeId, 'settle');
240
- if (refreshHeld) {
241
- this.dispose('refresh', true, ctx);
242
- }
243
- else {
244
- // agent_settled is the authoritative durable boundary: pi guarantees
245
- // every queued continuation has drained, so hasPendingMessages() must
246
- // not veto the commit here.
247
- this.settle(nodeId, ctx, false, false);
248
- }
239
+ // agent_settled is the authoritative durable boundary: Pi guarantees
240
+ // every queued continuation has drained, so hasPendingMessages() must
241
+ // not veto the commit here. Await crtrd before changing the in-memory
242
+ // durable cursor; a failed commit remains replayable after process exit.
243
+ const result = await this.settle(nodeId, ctx, false);
244
+ if (result === 'refresh_held')
245
+ this.dispose('refresh', false);
249
246
  }
250
247
  catch (error) {
251
248
  this.dispose('shutdown', false, undefined, { error, stage: 'settle' });
252
249
  }
253
250
  });
254
- this.pi.on('session_shutdown', (event) => {
251
+ this.pi.on('session_shutdown', async (event) => {
255
252
  if (!this.canMutate())
256
253
  return;
257
254
  let runtimeReason;
@@ -273,12 +270,10 @@ class CanvasInboxWatcher {
273
270
  });
274
271
  }
275
272
  try {
276
- const nodeId = currentNodeId();
277
- const refreshHeld = nodeId !== undefined && this.readRefreshIntentOrFatal(nodeId, 'settle');
278
273
  // This is the graceful fallback when no agent_settled fired before exit.
279
- // It holds both an unconsumed queued handoff and every handoff made to a
280
- // conversation being discarded by refresh.
281
- this.dispose(reason, true, this.lastCtx, undefined, refreshHeld);
274
+ // crtrd rejects a cursor commit for a refresh, preserving every handoff
275
+ // that may have reached this discarded conversation for the next broker.
276
+ await this.disposeAtSettlement(reason, this.lastCtx);
282
277
  }
283
278
  catch (error) {
284
279
  this.dispose(reason, false, undefined, { error, stage: 'settle' });
@@ -290,6 +285,19 @@ class CanvasInboxWatcher {
290
285
  * or any other re-emission all land here). Called only from the
291
286
  * `session_start` handler above, so it never runs before Pi's action
292
287
  * methods are bound. */
288
+ async refreshReportNodes(nodeId) {
289
+ if (nodeId === undefined)
290
+ return;
291
+ try {
292
+ const state = await brokerExtensionState(nodeId);
293
+ if (!this.canMutate())
294
+ return;
295
+ this.reportNodes = new Map(state.report_nodes.map((node) => [node.node_id, node]));
296
+ }
297
+ catch {
298
+ // Report bodies remain canonical pointers until the daemon projection is available.
299
+ }
300
+ }
293
301
  arm() {
294
302
  if (this.armed)
295
303
  return;
@@ -301,31 +309,41 @@ class CanvasInboxWatcher {
301
309
  // the normal debounce owns delivery instead of waiting a full tick.
302
310
  this.runTick('schedule');
303
311
  }
304
- dispose(reason, atSettleBoundary, settleCtx, fatalDisposal, refreshHeld = reason === 'refresh') {
305
- if (this.disposed)
312
+ /** Settle the graceful-shutdown fallback before disposing its retry state.
313
+ * The daemon decides whether a refresh preserves the cursor, and this method
314
+ * awaits that decision so a process exit never outruns an accepted commit. */
315
+ async disposeAtSettlement(reason, ctx) {
316
+ const nodeId = currentNodeId();
317
+ if (nodeId === undefined) {
318
+ this.dispose(reason, false);
306
319
  return;
307
- this.disposed = true;
308
- this.disposalReason = reason;
309
- this.clearTimer();
310
- let fatal = fatalDisposal;
320
+ }
311
321
  try {
312
- if (atSettleBoundary) {
313
- const nodeId = currentNodeId();
314
- if (nodeId !== undefined) {
315
- this.assertNodeOwnership(nodeId, 'settle');
316
- this.settle(nodeId, settleCtx, refreshHeld, reason !== 'refresh');
317
- }
318
- }
322
+ this.assertNodeOwnership(nodeId, 'settle');
323
+ const result = await this.settle(nodeId, ctx, reason !== 'refresh');
324
+ this.dispose(result === 'refresh_held' ? 'refresh' : reason, false);
319
325
  }
320
326
  catch (error) {
321
- fatal = { error, stage: 'settle' };
327
+ this.dispose(reason, false, undefined, { error, stage: 'settle' });
322
328
  }
323
- finally {
324
- const abandoned = this.pendingHandoffs.splice(0);
329
+ }
330
+ dispose(reason, _atSettleBoundary, _settleCtx, fatalDisposal) {
331
+ if (this.disposed)
332
+ return;
333
+ this.disposed = true;
334
+ this.disposalReason = reason;
335
+ this.clearTimer();
336
+ const fatal = fatalDisposal;
337
+ {
338
+ const abandoned = [
339
+ ...(this.pendingCommit?.handoffs ?? []),
340
+ ...this.pendingHandoffs.splice(0),
341
+ ];
325
342
  this.buffer.length = 0;
326
343
  this.cursor = undefined;
327
344
  this.durableCursor = undefined;
328
- this.replay = undefined;
345
+ this.reportNodes.clear();
346
+ this.pendingCommit = undefined;
329
347
  this.nodeId = undefined;
330
348
  this.lastCtx = undefined;
331
349
  this.lastArrival = 0;
@@ -367,14 +385,6 @@ class CanvasInboxWatcher {
367
385
  }
368
386
  return !this.streaming;
369
387
  }
370
- readRefreshIntentOrFatal(nodeId, stage) {
371
- try {
372
- return getNode(nodeId)?.intent === 'refresh';
373
- }
374
- catch (error) {
375
- this.raiseReadFatal(stage, error);
376
- }
377
- }
378
388
  assertNodeOwnership(nodeId, stage) {
379
389
  if (!this.seeded || this.nodeId === undefined || this.nodeId === nodeId)
380
390
  return;
@@ -398,12 +408,6 @@ class CanvasInboxWatcher {
398
408
  raiseReadFatal(stage, error) {
399
409
  return this.raiseFatal('inbox.read.failed', `inbox ${stage} state is corrupt`, error, { stage });
400
410
  }
401
- raiseReplayFatal(gate, error) {
402
- return this.raiseFatal('inbox.replay.load_failed', 'inbox replay range could not be loaded', error, {
403
- after_entry_id: gate.afterEntryId ?? null,
404
- through_entry_id: gate.throughEntryId,
405
- });
406
- }
407
411
  raiseSituationalFatal(markerEntryId, error) {
408
412
  return this.raiseFatal('inbox.situational_context.missing', 'situational context marker has no readable sidecar', error, {
409
413
  entry_id: markerEntryId,
@@ -471,7 +475,7 @@ class CanvasInboxWatcher {
471
475
  this.assertNodeOwnership(nodeId, 'poll');
472
476
  if (this.seeded)
473
477
  return true;
474
- const initial = this.pollRead(() => readCursor(nodeId));
478
+ const initial = this.pollRead(() => readBrokerCursor(nodeId));
475
479
  if (!initial.ok)
476
480
  return false;
477
481
  this.nodeId = nodeId;
@@ -484,25 +488,21 @@ class CanvasInboxWatcher {
484
488
  const nodeId = currentNodeId();
485
489
  if (nodeId === undefined || !this.seed(nodeId))
486
490
  return;
487
- if ((this.replay !== undefined || this.buffer.length > 0) && this.readRefreshIntentOrFatal(nodeId, 'poll'))
488
- return;
489
- if (this.replay !== undefined) {
490
- this.processReplay(nodeId);
491
+ if (this.pendingCommit !== undefined) {
492
+ this.retryPendingCommitOnTick(nodeId);
491
493
  return;
492
494
  }
493
- if (this.buffer.length === 0 && this.pendingHandoffs.length >= MAX_ORDINARY_HANDOFFS)
495
+ if (this.buffer.length === 0 && this.pendingHandoffs.length >= MAX_PENDING_HANDOFFS)
494
496
  return;
495
497
  if (this.buffer.length > 0) {
496
498
  const plan = this.ordinaryPlan();
497
- if (plan.sendCount > 0 && this.pendingHandoffs.length + plan.sendCount > MAX_ORDINARY_HANDOFFS)
499
+ if (plan.sendCount > 0 && this.pendingHandoffs.length + plan.sendCount > MAX_PENDING_HANDOFFS)
498
500
  return;
499
501
  }
500
- const read = this.pollRead(() => readInboxSince(nodeId, this.cursor));
502
+ const read = this.pollRead(() => readBrokerInboxSince(nodeId, this.cursor));
501
503
  if (!read.ok)
502
504
  return;
503
505
  const newEntries = read.value;
504
- if ((newEntries.length > 0 || this.buffer.length > 0) && this.readRefreshIntentOrFatal(nodeId, 'poll'))
505
- return;
506
506
  if (newEntries.length > 0) {
507
507
  this.cursor = newEntries.at(-1).entry_id;
508
508
  this.buffer.push(...newEntries);
@@ -516,11 +516,10 @@ class CanvasInboxWatcher {
516
516
  // Interrupt-canceled entries (a human Esc racing a not-yet-injected send —
517
517
  // `POST /v1/nodes/{id}/interrupt`) are excluded from BOTH channels. Read
518
518
  // fresh each plan build: the cancel can land AFTER the entry was buffered.
519
- // Filtering here keeps buildPlan and replayCoverageComplete in agreement,
520
- // so a fully-canceled replay range still completes. Skipped entries are
521
- // never handed off; the durable cursor covers them positionally when a
522
- // later entry settles (or they are simply re-filtered after a restart).
523
- const canceled = this.nodeId === undefined ? undefined : readCanceledEntryIds(this.nodeId);
519
+ // Skipped entries are never handed off; the durable cursor covers them
520
+ // positionally when a later entry settles (or they are re-filtered after a
521
+ // restart).
522
+ const canceled = this.nodeId === undefined ? undefined : readBrokerCanceledEntryIds(this.nodeId);
524
523
  const live = canceled === undefined || canceled.size === 0
525
524
  ? entries
526
525
  : entries.filter((entry) => !canceled.has(entry.entry_id));
@@ -580,7 +579,7 @@ class CanvasInboxWatcher {
580
579
  }
581
580
  digest(entries, stage) {
582
581
  try {
583
- return coalesce([...entries]);
582
+ return coalesceBrokerInbox(entries, this.reportNodes);
584
583
  }
585
584
  catch (error) {
586
585
  this.raiseReadFatal(stage, error);
@@ -715,7 +714,7 @@ class CanvasInboxWatcher {
715
714
  const plan = this.ordinaryPlan();
716
715
  if (plan.deferredHold)
717
716
  return 'held';
718
- if (this.pendingHandoffs.length + plan.sendCount > MAX_ORDINARY_HANDOFFS)
717
+ if (this.pendingHandoffs.length + plan.sendCount > MAX_PENDING_HANDOFFS)
719
718
  return 'capacity-blocked';
720
719
  const batch = [...this.buffer];
721
720
  const execution = this.executePlan(nodeId, plan, 'poll');
@@ -725,45 +724,6 @@ class CanvasInboxWatcher {
725
724
  this.requeueFromBatch(batch, execution.retryEntryIds);
726
725
  return 'attempted';
727
726
  }
728
- processReplay(nodeId) {
729
- const gate = this.replay;
730
- if (gate === undefined)
731
- return;
732
- if (gate.entries === undefined) {
733
- if (gate.attempted) {
734
- this.raiseReplayFatal(gate, new Error('replay range was already attempted without retained entries'));
735
- }
736
- gate.attempted = true;
737
- let entries;
738
- try {
739
- entries = readInboxRange(nodeId, gate.afterEntryId, gate.throughEntryId);
740
- }
741
- catch (error) {
742
- this.raiseReplayFatal(gate, error);
743
- }
744
- if (entries.length === 0 || entries.at(-1).entry_id !== gate.throughEntryId) {
745
- this.raiseReplayFatal(gate, new Error('replay range did not retain its inclusive target'));
746
- }
747
- gate.entries = entries;
748
- }
749
- const entries = gate.entries;
750
- const plan = this.buildPlan(entries);
751
- if (plan.hiddenEntries.length === 0 && plan.visibleEntries.length === 0) {
752
- if (this.replay === gate)
753
- this.replay = undefined;
754
- return;
755
- }
756
- if (plan.deferredHold)
757
- return;
758
- if (this.pendingHandoffs.length + plan.sendCount > MAX_PENDING_HANDOFFS)
759
- return;
760
- const execution = this.executePlan(nodeId, plan, 'poll');
761
- if (execution.inactive)
762
- return;
763
- if (this.canMutate() && this.replay === gate && this.replayCoverageComplete(entries)) {
764
- this.replay = undefined;
765
- }
766
- }
767
727
  coveredEntryIds(channel) {
768
728
  const covered = new Set();
769
729
  for (const handoff of this.pendingHandoffs) {
@@ -774,13 +734,54 @@ class CanvasInboxWatcher {
774
734
  }
775
735
  return covered;
776
736
  }
777
- replayCoverageComplete(entries) {
778
- const missing = this.missingChannelEntries(entries);
779
- return missing.hiddenEntries.length === 0 && missing.visibleEntries.length === 0;
737
+ retryPendingCommitOnTick(nodeId) {
738
+ void this.retryPendingCommit(nodeId).then((result) => {
739
+ if (result === 'refresh_held' && this.canMutate())
740
+ this.dispose('refresh', false);
741
+ }).catch((error) => {
742
+ if (this.canMutate())
743
+ this.dispose('shutdown', false, undefined, { error, stage: 'settle' });
744
+ });
745
+ }
746
+ retryPendingCommit(nodeId) {
747
+ const pending = this.pendingCommit;
748
+ if (pending === undefined)
749
+ return Promise.resolve('settled');
750
+ if (pending.attempt !== undefined)
751
+ return pending.attempt;
752
+ const attempt = this.attemptPendingCommit(nodeId, pending).finally(() => {
753
+ if (pending.attempt === attempt)
754
+ pending.attempt = undefined;
755
+ });
756
+ pending.attempt = attempt;
757
+ return attempt;
780
758
  }
781
- settle(nodeId, ctx, refreshHeld, holdPendingMessages) {
782
- if (refreshHeld)
759
+ async attemptPendingCommit(nodeId, pending) {
760
+ try {
761
+ const directive = await advanceBrokerInboxCursor(nodeId, {
762
+ throughEntryId: pending.throughEntryId,
763
+ brokerPid: process.pid,
764
+ });
765
+ if (directive.action === 'hold_refresh')
766
+ return 'refresh_held';
767
+ }
768
+ catch (error) {
769
+ if (this.pendingCommit === pending) {
770
+ for (const handoff of pending.handoffs) {
771
+ emitDeliveryFailure(handoff.operationId, handoff, 'cursor_commit', error);
772
+ }
773
+ }
783
774
  return 'held';
775
+ }
776
+ if (this.pendingCommit !== pending)
777
+ return 'settled';
778
+ this.durableCursor = pending.throughEntryId;
779
+ this.pendingCommit = undefined;
780
+ for (const handoff of pending.handoffs)
781
+ emitDeliveryCompleted(handoff);
782
+ return 'settled';
783
+ }
784
+ async settle(nodeId, ctx, holdPendingMessages) {
784
785
  if (holdPendingMessages) {
785
786
  try {
786
787
  if (ctx?.hasPendingMessages?.() === true)
@@ -790,8 +791,8 @@ class CanvasInboxWatcher {
790
791
  // A missing context signal does not invent a pending-message hold.
791
792
  }
792
793
  }
793
- if (this.replay !== undefined)
794
- return 'held';
794
+ if (this.pendingCommit !== undefined)
795
+ return this.retryPendingCommit(nodeId);
795
796
  if (this.pendingHandoffs.length === 0)
796
797
  return 'settled';
797
798
  const physical = this.readPhysicalSettlementState(nodeId);
@@ -811,33 +812,17 @@ class CanvasInboxWatcher {
811
812
  if (physical.throughIndexes.get(handoff) > physical.throughIndexes.get(target))
812
813
  target = handoff;
813
814
  }
814
- const targetIndex = physical.throughIndexes.get(target);
815
- try {
816
- writeCursor(nodeId, target.throughEntryId);
817
- }
818
- catch (error) {
819
- const eligibleSet = new Set(eligible);
820
- const failed = this.detachPending((handoff) => eligibleSet.has(handoff));
821
- this.replay = {
822
- afterEntryId: this.durableCursor,
823
- throughEntryId: target.throughEntryId,
824
- attempted: false,
825
- };
826
- for (const handoff of failed) {
827
- emitDeliveryFailure(handoff.operationId, handoff, 'cursor_commit', error);
828
- }
829
- return 'settled';
830
- }
831
- this.durableCursor = target.throughEntryId;
832
- const completed = this.detachPending((handoff) => physical.throughIndexes.get(handoff) <= targetIndex);
833
- for (const handoff of completed)
834
- emitDeliveryCompleted(handoff);
835
- return 'settled';
815
+ const committing = new Set(eligible);
816
+ this.pendingCommit = {
817
+ handoffs: this.detachPending((handoff) => committing.has(handoff)),
818
+ throughEntryId: target.throughEntryId,
819
+ };
820
+ return this.retryPendingCommit(nodeId);
836
821
  }
837
822
  readPhysicalSettlementState(nodeId) {
838
823
  let entries;
839
824
  try {
840
- entries = readInboxSince(nodeId);
825
+ entries = readBrokerInboxSince(nodeId);
841
826
  }
842
827
  catch (error) {
843
828
  this.raiseReadFatal('settle', error);
@@ -1,4 +1,4 @@
1
- import type { InboxEntry } from '../core/feed/inbox.js';
1
+ import { type BrokerPassiveEntry } from '../core/runtime/broker/passive.js';
2
2
  interface InputEventLike {
3
3
  type: 'input';
4
4
  text: string;
@@ -15,13 +15,13 @@ type InputEventResultLike = {
15
15
  action: 'handled';
16
16
  };
17
17
  interface PiLike {
18
- on: (event: 'input', handler: (event: InputEventLike, ctx: any) => InputEventResultLike | void) => void;
18
+ on: (event: 'input', handler: (event: InputEventLike, ctx: any) => InputEventResultLike | void | Promise<InputEventResultLike | void>) => void;
19
19
  }
20
20
  /**
21
21
  * Render drained passive entries (oldest first) into one XML pre-text block.
22
22
  * Each accumulated message is its own timestamped `<update>` element.
23
23
  */
24
- export declare function formatPassive(entries: InboxEntry[]): string;
24
+ export declare function formatPassive(entries: BrokerPassiveEntry[], reportNodes?: ReadonlyMap<string, unknown>): string;
25
25
  /**
26
26
  * Register the passive-context drain on `pi`.
27
27
  *
@@ -19,8 +19,9 @@
19
19
  // Plain TS-with-types — no imports from @earendil-works/* so this compiles inside
20
20
  // crouter's own tsc build without a dep on the pi packages.
21
21
  import { existsSync, readFileSync } from 'node:fs';
22
- import { resolveRef } from '../core/canvas/history.js';
23
- import { drainPassive } from '../core/feed/passive.js';
22
+ import { brokerExtensionState } from '../core/runtime/broker/daemon-ops.js';
23
+ import { reportPathFromRef } from '../core/runtime/broker-extension-render.js';
24
+ import { drainBrokerPassive } from '../core/runtime/broker/passive.js';
24
25
  // Per-entry body cap so a single fat report can't blow the context budget. The
25
26
  // full report stays on disk at `ref` if the agent needs more.
26
27
  const BODY_CAP = 4_000;
@@ -37,24 +38,25 @@ function stripFrontmatter(raw) {
37
38
  }
38
39
  /** The content for one accumulated entry: the dereferenced report body when the
39
40
  * pointer carries a `ref`, else the entry's own label/data. Capped + trimmed. */
40
- function entryContent(e) {
41
+ function entryContent(e, reportNodes) {
41
42
  if (e.ref !== undefined && e.ref !== '') {
42
- // Push entries carry a canonical history handle; resolve it through the
43
- // same path as `canvas history read`. Direct-message spill refs remain
44
- // absolute filesystem paths and keep their existing dereference behavior.
45
- try {
46
- const resolved = resolveRef(e.ref);
47
- if (resolved?.source === 'report') {
48
- const body = resolved.body.trim();
43
+ // Push entries carry a canonical history handle. crtrd has already
44
+ // projected the sender set; use that metadata to validate the local path
45
+ // without importing the canvas history resolver. Direct-message spill refs
46
+ // remain absolute filesystem paths and keep their existing behavior.
47
+ const reportPath = reportPathFromRef(e.ref, reportNodes);
48
+ if (reportPath !== null) {
49
+ try {
50
+ const body = stripFrontmatter(readFileSync(reportPath, 'utf8')).trim();
49
51
  if (body !== '') {
50
52
  return body.length > BODY_CAP
51
53
  ? `${body.slice(0, BODY_CAP)}\n… (truncated; read the full report with \`crtr canvas history read ${e.ref}\`)`
52
54
  : body;
53
55
  }
54
56
  }
55
- }
56
- catch {
57
- /* fall through to the absolute spill-file path */
57
+ catch {
58
+ /* fall through to the absolute spill-file path */
59
+ }
58
60
  }
59
61
  if (existsSync(e.ref)) {
60
62
  try {
@@ -87,13 +89,13 @@ function attr(s) {
87
89
  * Render drained passive entries (oldest first) into one XML pre-text block.
88
90
  * Each accumulated message is its own timestamped `<update>` element.
89
91
  */
90
- export function formatPassive(entries) {
92
+ export function formatPassive(entries, reportNodes = new Map()) {
91
93
  const blocks = entries
92
94
  .map((e) => {
93
95
  const from = attr(e.from ?? 'system');
94
96
  const refAttr = e.ref !== undefined && e.ref !== '' ? ` ref="${attr(e.ref)}"` : '';
95
97
  return (`<update from="${from}" kind="${attr(e.kind)}" at="${attr(e.ts)}"${refAttr}>\n` +
96
- `${entryContent(e)}\n` +
98
+ `${entryContent(e, reportNodes)}\n` +
97
99
  `</update>`);
98
100
  })
99
101
  .join('\n');
@@ -113,15 +115,17 @@ export function formatPassive(entries) {
113
115
  * is the whole extension: drain on every message, prepend when non-empty.
114
116
  */
115
117
  export function registerCanvasPassiveContext(pi) {
116
- pi.on('input', (event) => {
118
+ pi.on('input', async (event) => {
117
119
  try {
118
120
  const nodeId = process.env['CRTR_NODE_ID'];
119
121
  if (nodeId === undefined || nodeId.trim() === '')
120
122
  return; // not a canvas node
121
- const drained = drainPassive(nodeId);
123
+ const drained = drainBrokerPassive(nodeId);
122
124
  if (drained.length === 0)
123
125
  return; // nothing accumulated → leave the message as-is
124
- const preText = formatPassive(drained);
126
+ const state = await brokerExtensionState(nodeId);
127
+ const reportNodes = new Map(state.report_nodes.map((node) => [node.node_id, node]));
128
+ const preText = formatPassive(drained, reportNodes);
125
129
  const text = event.text.trim() === '' ? preText : `${preText}\n\n${event.text}`;
126
130
  return { action: 'transform', text, images: event.images };
127
131
  }
@@ -1,4 +1,3 @@
1
- import { regenerateAndPersistName } from '../core/runtime/naming-persist.js';
2
1
  import { generateRecap } from '../core/runtime/recap.js';
3
2
  interface TextContentLike {
4
3
  type: string;
@@ -44,11 +43,12 @@ interface PiLike {
44
43
  getSessionName?(): string | undefined;
45
44
  setSessionName?(name: string): void;
46
45
  }
46
+ type NameRegenerator = (nodeId: string, conversation: string, isStillAutomatic: () => boolean, onNamed?: (editorLabel: string) => void) => void;
47
47
  /**
48
48
  * Register the inactivity-recap chrome on `pi`.
49
49
  *
50
50
  * Returns immediately (inert) when CRTR_NODE_ID is absent — a plain pi session
51
51
  * or legacy job agent loads it as a no-op.
52
52
  */
53
- export declare function registerCanvasRecap(pi: PiLike, recapGenerator?: typeof generateRecap, nameRegenerator?: typeof regenerateAndPersistName): void;
53
+ export declare function registerCanvasRecap(pi: PiLike, recapGenerator?: typeof generateRecap, nameRegenerator?: NameRegenerator): void;
54
54
  export default registerCanvasRecap;