@north-light/crouter 0.3.170 → 0.3.172

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 (670) hide show
  1. package/dist/api/client.d.ts +37 -11
  2. package/dist/api/client.js +84 -15
  3. package/dist/api/dto/human.d.ts +53 -39
  4. package/dist/api/dto/human.js +2 -3
  5. package/dist/api/dto/inbox.d.ts +0 -1
  6. package/dist/api/dto/nodes.d.ts +12 -0
  7. package/dist/api/dto/review-comments.d.ts +137 -0
  8. package/dist/api/dto/review-comments.js +5 -0
  9. package/dist/api/dto/reviews.d.ts +109 -0
  10. package/dist/api/dto/reviews.js +5 -0
  11. package/dist/api/index.d.ts +2 -0
  12. package/dist/api/index.js +2 -0
  13. package/dist/api/routes.d.ts +17 -4
  14. package/dist/api/routes.js +21 -5
  15. package/dist/build-root.d.ts +1 -16
  16. package/dist/build-root.js +1 -25
  17. package/dist/builtin-memory/00-runtime-base.md +7 -5
  18. package/dist/builtin-memory/04-base-worker.md +1 -1
  19. package/dist/builtin-memory/04-orchestration-kernel.md +7 -7
  20. package/dist/builtin-memory/05-kinds/design/00-base.md +1 -1
  21. package/dist/builtin-memory/05-kinds/design/01-orchestrator.md +1 -1
  22. package/dist/builtin-memory/05-kinds/developer/00-base.md +1 -1
  23. package/dist/builtin-memory/05-kinds/explore/00-base.md +1 -1
  24. package/dist/builtin-memory/05-kinds/plan/00-base.md +1 -1
  25. package/dist/builtin-memory/05-kinds/plan/01-orchestrator.md +1 -1
  26. package/dist/builtin-memory/05-kinds/review/00-base.md +1 -1
  27. package/dist/builtin-memory/05-kinds/review/companion/00-base.md +20 -0
  28. package/dist/builtin-memory/05-kinds/spec/00-base.md +3 -7
  29. package/dist/builtin-memory/05-kinds/spec/01-orchestrator.md +3 -3
  30. package/dist/builtin-memory/05-kinds/spec/requirements.md +3 -3
  31. package/dist/builtin-memory/design.md +2 -2
  32. package/dist/builtin-memory/insights/capture.md +50 -0
  33. package/dist/builtin-memory/insights/init.md +45 -0
  34. package/dist/builtin-memory/insights/listen.md +9 -0
  35. package/dist/builtin-memory/internal/agent-shaping.md +2 -2
  36. package/dist/builtin-memory/internal/nodes-and-canvas.md +1 -1
  37. package/dist/builtin-memory/internal/plugins.md +12 -11
  38. package/dist/builtin-memory/internal/storage-tiers.md +2 -2
  39. package/dist/builtin-memory/{planning.md → plan/roadmap.md} +3 -3
  40. package/dist/builtin-memory/plan.md +19 -0
  41. package/dist/builtin-memory/spec/guide.md +38 -0
  42. package/dist/builtin-memory/spec/requirements.md +31 -0
  43. package/dist/builtin-memory/spec/roadmap.md +35 -0
  44. package/dist/builtin-memory/spec.md +10 -86
  45. package/dist/builtin-pi-packages/pi-crtr-extensions/README.md +3 -4
  46. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/provider-rotation.test.ts +49 -5
  47. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/provider-rotation.d.ts +56 -0
  48. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/provider-rotation.js +920 -0
  49. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/provider-rotation.ts +221 -156
  50. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/statusline.ts +4 -5
  51. package/dist/cli.js +2 -6
  52. package/dist/clients/attach/__tests__/attach-chrome-remote.test.js +7 -35
  53. package/dist/clients/attach/__tests__/attach-keybindings.test.js +32 -16
  54. package/dist/clients/attach/__tests__/context-message.test.js +142 -6
  55. package/dist/clients/attach/__tests__/crtr-output.test.js +29 -45
  56. package/dist/clients/attach/__tests__/diagram.test.js +1 -1
  57. package/dist/clients/attach/__tests__/file-review-focus.test.js +48 -0
  58. package/dist/clients/attach/__tests__/group-activity.test.js +266 -0
  59. package/dist/clients/attach/__tests__/input-controller-extension-command.test.js +32 -0
  60. package/dist/clients/attach/__tests__/session-identity-refresh.test.js +32 -0
  61. package/dist/clients/attach/__tests__/titled-editor-preview.test.js +1 -2
  62. package/dist/clients/attach/chrome/header.d.ts +10 -0
  63. package/dist/clients/attach/chrome/header.js +30 -0
  64. package/dist/clients/attach/chrome/recap.d.ts +7 -0
  65. package/dist/clients/attach/chrome/recap.js +19 -0
  66. package/dist/clients/attach/chrome/status-line.d.ts +3 -0
  67. package/dist/clients/attach/chrome/status-line.js +5 -0
  68. package/dist/clients/attach/chrome/widgets.js +11 -21
  69. package/dist/clients/attach/command.js +11 -7
  70. package/dist/clients/attach/config.d.ts +4 -0
  71. package/dist/clients/attach/config.js +3 -0
  72. package/dist/clients/attach/input/controller.d.ts +19 -0
  73. package/dist/clients/attach/input/controller.js +62 -28
  74. package/dist/clients/attach/input/titled-editor.d.ts +0 -4
  75. package/dist/clients/attach/input/titled-editor.js +2 -10
  76. package/dist/clients/attach/overlays/file-review.d.ts +9 -5
  77. package/dist/clients/attach/overlays/file-review.js +9 -70
  78. package/dist/clients/attach/overlays/help.d.ts +33 -0
  79. package/dist/clients/attach/overlays/help.js +204 -0
  80. package/dist/clients/attach/render/activity-slot.d.ts +4 -0
  81. package/dist/clients/attach/render/activity-slot.js +13 -0
  82. package/dist/clients/attach/render/chat-view.d.ts +117 -12
  83. package/dist/clients/attach/render/chat-view.js +604 -135
  84. package/dist/clients/attach/render/context-message.d.ts +2 -1
  85. package/dist/clients/attach/render/context-message.js +17 -13
  86. package/dist/clients/attach/render/crtr-output.js +1 -3
  87. package/dist/clients/attach/render/diagram.js +2 -2
  88. package/dist/clients/attach/render/edit-diff.d.ts +4 -1
  89. package/dist/clients/attach/render/edit-diff.js +7 -11
  90. package/dist/clients/attach/render/group-activity.d.ts +32 -0
  91. package/dist/clients/attach/render/group-activity.js +206 -0
  92. package/dist/clients/attach/render/group-recap.d.ts +10 -0
  93. package/dist/clients/attach/render/group-recap.js +93 -0
  94. package/dist/clients/attach/render/html-markdown.d.ts +17 -0
  95. package/dist/clients/attach/render/html-markdown.js +228 -0
  96. package/dist/clients/attach/render/measured-container.d.ts +96 -0
  97. package/dist/clients/attach/render/measured-container.js +322 -0
  98. package/dist/clients/attach/render/scroll-animation.d.ts +8 -0
  99. package/dist/clients/attach/render/scroll-animation.js +80 -0
  100. package/dist/clients/attach/render/tool-calls.js +6 -6
  101. package/dist/clients/attach/render/transcript-copy.d.ts +9 -0
  102. package/dist/clients/attach/render/transcript-copy.js +81 -0
  103. package/dist/clients/attach/render/viewport.d.ts +29 -0
  104. package/dist/clients/attach/render/viewport.js +159 -0
  105. package/dist/clients/attach/session/bindings.d.ts +10 -7
  106. package/dist/clients/attach/session/bindings.js +23 -8
  107. package/dist/clients/attach/session/connection.js +4 -5
  108. package/dist/clients/attach/session/context.d.ts +6 -4
  109. package/dist/clients/attach/session/frame.d.ts +34 -0
  110. package/dist/clients/attach/session/frame.js +176 -0
  111. package/dist/clients/attach/session/frames.d.ts +4 -1
  112. package/dist/clients/attach/session/frames.js +14 -1
  113. package/dist/clients/attach/session/identity.js +4 -3
  114. package/dist/clients/attach/session/input-wiring.d.ts +14 -4
  115. package/dist/clients/attach/session/input-wiring.js +15 -13
  116. package/dist/clients/attach/session/invariant.d.ts +9 -0
  117. package/dist/clients/attach/session/invariant.js +15 -0
  118. package/dist/clients/attach/session/keys.d.ts +10 -2
  119. package/dist/clients/attach/session/keys.js +13 -5
  120. package/dist/clients/attach/session/layout.d.ts +10 -8
  121. package/dist/clients/attach/session/layout.js +33 -34
  122. package/dist/clients/attach/session/mouse.d.ts +18 -0
  123. package/dist/clients/attach/session/mouse.js +64 -0
  124. package/dist/clients/attach/session/pane-tag.d.ts +3 -0
  125. package/dist/clients/attach/session/pane-tag.js +51 -8
  126. package/dist/clients/attach/session/reconnect.d.ts +3 -0
  127. package/dist/clients/attach/session/reconnect.js +42 -5
  128. package/dist/clients/attach/session/surface-frame.d.ts +20 -0
  129. package/dist/clients/attach/session/surface-frame.js +73 -0
  130. package/dist/clients/attach/session/surface-host.d.ts +64 -0
  131. package/dist/clients/attach/session/surface-host.js +255 -0
  132. package/dist/clients/attach/session/whip.d.ts +17 -0
  133. package/dist/clients/attach/session/whip.js +334 -0
  134. package/dist/clients/attach/slash/dispatch.d.ts +13 -1
  135. package/dist/clients/attach/slash/dispatch.js +51 -29
  136. package/dist/clients/attach/viewer.js +907 -819
  137. package/dist/clients/conversation/conversation.d.ts +65 -0
  138. package/dist/clients/conversation/conversation.js +318 -0
  139. package/dist/clients/conversation/frames.d.ts +30 -0
  140. package/dist/clients/conversation/frames.js +52 -0
  141. package/dist/clients/conversation/region.d.ts +51 -0
  142. package/dist/clients/conversation/region.js +265 -0
  143. package/dist/clients/conversation/submit.d.ts +38 -0
  144. package/dist/clients/conversation/submit.js +51 -0
  145. package/dist/clients/inbox/__tests__/inbox-controller.test.js +247 -0
  146. package/dist/clients/inbox/__tests__/mount-panel.test.js +776 -0
  147. package/dist/clients/inbox/controller.d.ts +79 -0
  148. package/dist/clients/inbox/controller.js +448 -0
  149. package/dist/clients/inbox/deck-adapter.d.ts +29 -0
  150. package/dist/clients/inbox/deck-adapter.js +62 -0
  151. package/dist/clients/inbox/layout.d.ts +8 -0
  152. package/dist/clients/inbox/layout.js +9 -0
  153. package/dist/clients/inbox/resolve.d.ts +10 -0
  154. package/dist/clients/inbox/resolve.js +34 -0
  155. package/dist/clients/inbox/review/__tests__/editor-roundtrip.test.js +29 -0
  156. package/dist/clients/inbox/review/__tests__/remap.test.js +196 -0
  157. package/dist/clients/inbox/review/__tests__/review-core.test.js +341 -0
  158. package/dist/clients/inbox/review/anchors.d.ts +41 -0
  159. package/dist/clients/inbox/review/anchors.js +89 -0
  160. package/dist/clients/inbox/review/columns.d.ts +22 -0
  161. package/dist/clients/inbox/review/columns.js +40 -0
  162. package/dist/clients/inbox/review/comments-client.d.ts +66 -0
  163. package/dist/clients/inbox/review/comments-client.js +98 -0
  164. package/dist/clients/inbox/review/composition.d.ts +60 -0
  165. package/dist/clients/inbox/review/composition.js +278 -0
  166. package/dist/clients/inbox/review/document-region.d.ts +120 -0
  167. package/dist/clients/inbox/review/document-region.js +902 -0
  168. package/dist/clients/inbox/review/frame.d.ts +45 -0
  169. package/dist/clients/inbox/review/frame.js +215 -0
  170. package/dist/clients/inbox/review/keys.d.ts +67 -0
  171. package/dist/clients/inbox/review/keys.js +130 -0
  172. package/dist/clients/inbox/review/launch.d.ts +10 -0
  173. package/dist/clients/inbox/review/launch.js +129 -0
  174. package/dist/clients/inbox/review/live-source.d.ts +24 -0
  175. package/dist/clients/inbox/review/live-source.js +160 -0
  176. package/dist/clients/inbox/review/nvim.d.ts +13 -0
  177. package/dist/clients/inbox/review/nvim.js +42 -0
  178. package/dist/clients/inbox/review/remap.d.ts +51 -0
  179. package/dist/clients/inbox/review/remap.js +157 -0
  180. package/dist/clients/inbox/review/review-client.d.ts +30 -0
  181. package/dist/clients/inbox/review/review-client.js +107 -0
  182. package/dist/clients/inbox/review/roundtrip.d.ts +5 -0
  183. package/dist/clients/inbox/review/roundtrip.js +36 -0
  184. package/dist/clients/inbox/review/state.d.ts +143 -0
  185. package/dist/clients/inbox/review/state.js +282 -0
  186. package/dist/clients/inbox/review-adapter.d.ts +29 -0
  187. package/dist/clients/inbox/review-adapter.js +92 -0
  188. package/dist/clients/inbox/review-visibility.d.ts +5 -0
  189. package/dist/clients/inbox/review-visibility.js +19 -0
  190. package/dist/clients/inbox/surface.d.ts +19 -0
  191. package/dist/clients/inbox/surface.js +128 -0
  192. package/dist/clients/inbox/tui/ansi.d.ts +66 -0
  193. package/dist/clients/inbox/tui/ansi.js +317 -0
  194. package/dist/clients/inbox/tui/clipboard.d.ts +2 -0
  195. package/dist/clients/inbox/tui/clipboard.js +26 -0
  196. package/dist/clients/inbox/tui/input.d.ts +7 -0
  197. package/dist/clients/inbox/tui/input.js +653 -0
  198. package/dist/clients/inbox/tui/keys.d.ts +28 -0
  199. package/dist/clients/inbox/tui/keys.js +111 -0
  200. package/dist/clients/inbox/tui/panel.d.ts +2 -0
  201. package/dist/clients/inbox/tui/panel.js +217 -0
  202. package/dist/clients/inbox/tui/render.d.ts +37 -0
  203. package/dist/clients/inbox/tui/render.js +476 -0
  204. package/dist/clients/inbox/tui/types.d.ts +57 -0
  205. package/dist/clients/inbox/tui/types.js +1 -0
  206. package/dist/clients/inbox/tui.d.ts +6 -0
  207. package/dist/clients/inbox/tui.js +74 -0
  208. package/dist/clients/surfaces/host.d.ts +66 -0
  209. package/dist/clients/surfaces/host.js +1 -0
  210. package/dist/clients/surfaces/region.d.ts +16 -0
  211. package/dist/clients/surfaces/region.js +1 -0
  212. package/dist/clients/web/__tests__/push-engine.test.js +14 -158
  213. package/dist/clients/web/dev-server.d.ts +3 -3
  214. package/dist/clients/web/dev-server.js +9 -23
  215. package/dist/clients/web/events.js +4 -6
  216. package/dist/clients/web/push-engine.d.ts +2 -66
  217. package/dist/clients/web/push-engine.js +30 -161
  218. package/dist/clients/web/push-registry.d.ts +0 -4
  219. package/dist/clients/web/push-registry.js +2 -7
  220. package/dist/clients/web/server.js +3 -35
  221. package/dist/clients/web/web-client/shared/protocol.d.ts +0 -108
  222. package/dist/clients/web/web-cmd.js +2 -2
  223. package/dist/commands/__tests__/human.test.js +27 -15
  224. package/dist/commands/api-client.js +3 -3
  225. package/dist/commands/canvas-browse.js +1 -1
  226. package/dist/commands/canvas-issue.js +1 -1
  227. package/dist/commands/canvas-use.js +1 -1
  228. package/dist/commands/human/doc.d.ts +2 -0
  229. package/dist/commands/human/doc.js +98 -0
  230. package/dist/commands/human/inbox.d.ts +2 -0
  231. package/dist/commands/human/inbox.js +101 -0
  232. package/dist/commands/human/prompts.d.ts +2 -3
  233. package/dist/commands/human/prompts.js +27 -180
  234. package/dist/commands/human/queue.d.ts +1 -5
  235. package/dist/commands/human/queue.js +54 -216
  236. package/dist/commands/human/review.d.ts +2 -0
  237. package/dist/commands/human/review.js +298 -0
  238. package/dist/commands/human/shared.d.ts +2 -69
  239. package/dist/commands/human/shared.js +1 -181
  240. package/dist/commands/human.js +15 -20
  241. package/dist/commands/memory/__tests__/lint.test.d.ts +1 -0
  242. package/dist/commands/memory/__tests__/lint.test.js +15 -0
  243. package/dist/commands/memory/delete.js +2 -2
  244. package/dist/commands/memory/lint.d.ts +1 -0
  245. package/dist/commands/memory/lint.js +21 -3
  246. package/dist/commands/memory/read.js +4 -4
  247. package/dist/commands/node.js +8 -7
  248. package/dist/commands/pkg/plugin-manage.js +143 -68
  249. package/dist/commands/surface-inspect.js +2 -2
  250. package/dist/commands/surface.js +6 -12
  251. package/dist/commands/sys/__tests__/setup-core.test.js +9 -5
  252. package/dist/commands/sys/__tests__/setup-front-door.test.js +7 -42
  253. package/dist/commands/sys/config.js +29 -3
  254. package/dist/commands/sys/feedback.js +1 -1
  255. package/dist/commands/sys/setup-core.d.ts +12 -11
  256. package/dist/commands/sys/setup-core.js +55 -46
  257. package/dist/commands/sys/setup-wizard.d.ts +4 -1
  258. package/dist/commands/sys/setup-wizard.js +50 -9
  259. package/dist/commands/sys/sync-deps.js +1 -1
  260. package/dist/commands/sys.js +4 -6
  261. package/dist/core/__tests__/broker-sdk-wiring.test.js +6 -1
  262. package/dist/core/__tests__/broker-snapshot-history.test.js +9 -1
  263. package/dist/core/__tests__/dead-node-policy-table.test.js +3 -4
  264. package/dist/core/__tests__/fixtures/fake-engine.d.ts +8 -5
  265. package/dist/core/__tests__/fixtures/fake-engine.js +28 -2
  266. package/dist/core/__tests__/full/broker-provider-retry.test.js +87 -2
  267. package/dist/core/__tests__/full/broker-whip-interrupt.test.d.ts +1 -0
  268. package/dist/core/__tests__/full/broker-whip-interrupt.test.js +39 -0
  269. package/dist/core/__tests__/full/detach-focus.test.js +1 -1
  270. package/dist/core/__tests__/human-deliver-e2e.test.js +64 -64
  271. package/dist/core/__tests__/human-deliver.test.js +71 -345
  272. package/dist/core/__tests__/inline-memory-refs.test.js +2 -12
  273. package/dist/core/__tests__/memory-resolver-precedence.test.js +12 -15
  274. package/dist/core/__tests__/migration.test.js +10 -0
  275. package/dist/core/__tests__/model-pin-durability.test.js +14 -0
  276. package/dist/core/__tests__/phase4-review-migration.test.d.ts +1 -0
  277. package/dist/core/__tests__/phase4-review-migration.test.js +100 -0
  278. package/dist/core/__tests__/phase4-review-store.test.d.ts +1 -0
  279. package/dist/core/__tests__/phase4-review-store.test.js +143 -0
  280. package/dist/core/__tests__/remote-canvas-target.test.js +2 -2
  281. package/dist/core/__tests__/revive.test.js +22 -53
  282. package/dist/core/__tests__/session-cycles.test.js +48 -18
  283. package/dist/core/__tests__/spawn-no-kickoff.test.js +8 -12
  284. package/dist/core/__tests__/stop-guard.test.js +16 -1
  285. package/dist/core/__tests__/tmux-surface.test.js +21 -25
  286. package/dist/core/asset-root.d.ts +7 -0
  287. package/dist/core/asset-root.js +18 -0
  288. package/dist/core/broker-client/client.d.ts +0 -7
  289. package/dist/core/broker-client/client.js +4 -10
  290. package/dist/core/broker-client/transport-relay.d.ts +3 -4
  291. package/dist/core/broker-client/transport-relay.js +3 -4
  292. package/dist/core/canvas/__tests__/attention.test.js +1 -1
  293. package/dist/core/canvas/__tests__/remote-canvas-source.test.js +1 -1
  294. package/dist/core/canvas/__tests__/remote-transport.test.d.ts +1 -0
  295. package/dist/core/{view/__tests__/transport-remote.test.js → canvas/__tests__/remote-transport.test.js} +2 -2
  296. package/dist/core/canvas/__tests__/render-remote.test.js +1 -1
  297. package/dist/core/canvas/attention.js +4 -4
  298. package/dist/core/canvas/canvas.d.ts +6 -11
  299. package/dist/core/canvas/canvas.js +11 -33
  300. package/dist/core/canvas/db.js +207 -38
  301. package/dist/core/canvas/extensions.d.ts +1 -1
  302. package/dist/core/canvas/extensions.js +8 -1
  303. package/dist/core/canvas/index.d.ts +0 -1
  304. package/dist/core/canvas/index.js +0 -1
  305. package/dist/core/canvas/nav-model.d.ts +1 -1
  306. package/dist/core/canvas/nav-model.js +1 -1
  307. package/dist/core/canvas/paths.d.ts +5 -0
  308. package/dist/core/canvas/paths.js +16 -0
  309. package/dist/core/canvas/remote-canvas-source.js +2 -2
  310. package/dist/core/canvas/remote-transport.d.ts +7 -0
  311. package/dist/core/{view/transport-remote.js → canvas/remote-transport.js} +3 -4
  312. package/dist/core/canvas/source.js +1 -1
  313. package/dist/core/canvas/status-glyph.js +4 -12
  314. package/dist/core/canvas/types.d.ts +10 -35
  315. package/dist/core/clipboard-text.d.ts +8 -0
  316. package/dist/core/clipboard-text.js +18 -0
  317. package/dist/core/command-manifests/registry.d.ts +1 -3
  318. package/dist/core/command-plugins/bundle.d.ts +29 -0
  319. package/dist/core/command-plugins/bundle.js +198 -0
  320. package/dist/core/command-plugins/discovery.d.ts +0 -8
  321. package/dist/core/command-plugins/discovery.js +2 -39
  322. package/dist/core/command-plugins/transport/http-fetch.d.ts +4 -30
  323. package/dist/core/command-plugins/transport/http-fetch.js +17 -95
  324. package/dist/core/command.d.ts +1 -13
  325. package/dist/core/command.js +1 -16
  326. package/dist/core/config.d.ts +4 -0
  327. package/dist/core/config.js +28 -3
  328. package/dist/core/document-lines.d.ts +4 -0
  329. package/dist/core/document-lines.js +6 -0
  330. package/dist/core/feed/feed.d.ts +2 -0
  331. package/dist/core/feed/feed.js +11 -7
  332. package/dist/core/human/__tests__/inbox-cancel-worker.d.ts +1 -0
  333. package/dist/core/human/__tests__/inbox-cancel-worker.js +7 -0
  334. package/dist/core/human/__tests__/inbox-claim-worker.d.ts +1 -0
  335. package/dist/core/human/__tests__/inbox-claim-worker.js +17 -0
  336. package/dist/core/human/__tests__/inbox-core.test.d.ts +1 -0
  337. package/dist/core/human/__tests__/inbox-core.test.js +144 -0
  338. package/dist/core/human/__tests__/inbox-stale-claim-worker.d.ts +1 -0
  339. package/dist/core/human/__tests__/inbox-stale-claim-worker.js +8 -0
  340. package/dist/core/human/__tests__/visible-paths.test.d.ts +1 -0
  341. package/dist/{clients/attach → core/human}/__tests__/visible-paths.test.js +9 -0
  342. package/dist/core/human/claim.d.ts +23 -0
  343. package/dist/core/human/claim.js +67 -0
  344. package/dist/core/human/convention.d.ts +30 -0
  345. package/dist/core/human/convention.js +202 -0
  346. package/dist/core/human/deck-factories.d.ts +8 -0
  347. package/dist/core/human/deck-factories.js +15 -0
  348. package/dist/core/human/deck-schema.d.ts +70 -0
  349. package/dist/core/human/deck-schema.js +92 -0
  350. package/dist/core/human/root.d.ts +7 -0
  351. package/dist/core/human/root.js +37 -0
  352. package/dist/core/human/scan.d.ts +3 -0
  353. package/dist/core/human/scan.js +76 -0
  354. package/dist/core/human/summary.d.ts +8 -0
  355. package/dist/core/human/summary.js +44 -0
  356. package/dist/core/human/tickets.d.ts +49 -0
  357. package/dist/core/human/tickets.js +190 -0
  358. package/dist/core/human/types.d.ts +136 -0
  359. package/dist/core/human/types.js +5 -0
  360. package/dist/{clients/attach → core/human}/visible-paths.d.ts +1 -1
  361. package/dist/{clients/attach → core/human}/visible-paths.js +3 -2
  362. package/dist/core/inspector/chrome.d.ts +6 -0
  363. package/dist/core/inspector/chrome.js +14 -0
  364. package/dist/core/inspector/contract.d.ts +105 -0
  365. package/dist/core/inspector/contract.js +1 -0
  366. package/dist/core/inspector/core.d.ts +4 -5
  367. package/dist/core/inspector/core.js +3 -5
  368. package/dist/core/inspector/host.d.ts +46 -0
  369. package/dist/core/{tui → inspector}/host.js +42 -208
  370. package/dist/core/inspector/text.d.ts +2 -2
  371. package/dist/core/inspector/transport.d.ts +6 -0
  372. package/dist/core/inspector/transport.js +36 -0
  373. package/dist/core/inspector/tui.d.ts +2 -2
  374. package/dist/core/inspector/tui.js +15 -15
  375. package/dist/core/keybindings/__tests__/inbox-affordance.test.js +11 -11
  376. package/dist/core/keybindings/__tests__/resolve.test.js +10 -19
  377. package/dist/core/keybindings/attach-control.d.ts +9 -3
  378. package/dist/core/keybindings/attach-control.js +3 -1
  379. package/dist/core/keybindings/catalog.d.ts +6 -5
  380. package/dist/core/keybindings/catalog.js +61 -133
  381. package/dist/core/keybindings/inbox.d.ts +5 -6
  382. package/dist/core/keybindings/inbox.js +9 -10
  383. package/dist/core/keybindings/index.d.ts +3 -3
  384. package/dist/core/keybindings/index.js +3 -3
  385. package/dist/core/keybindings/persistence.d.ts +5 -1
  386. package/dist/core/keybindings/persistence.js +24 -6
  387. package/dist/core/keybindings/resolve.d.ts +6 -0
  388. package/dist/core/keybindings/resolve.js +10 -3
  389. package/dist/core/memory/inline-ref-grammar.js +2 -3
  390. package/dist/core/memory-resolver.d.ts +27 -29
  391. package/dist/core/memory-resolver.js +45 -39
  392. package/dist/core/model-routes.d.ts +33 -0
  393. package/dist/core/model-routes.js +42 -3
  394. package/dist/core/preview-registry.js +17 -55
  395. package/dist/core/profiles/select.js +3 -3
  396. package/dist/core/{view/remote-canvas-target.d.ts → remote-canvas-target.d.ts} +2 -2
  397. package/dist/core/{view/remote-canvas-target.js → remote-canvas-target.js} +4 -4
  398. package/dist/core/review/__tests__/capture-origin.test.d.ts +1 -0
  399. package/dist/core/review/__tests__/capture-origin.test.js +139 -0
  400. package/dist/core/review/__tests__/comments.test.d.ts +1 -0
  401. package/dist/core/review/__tests__/comments.test.js +98 -0
  402. package/dist/core/review/__tests__/project.test.d.ts +1 -0
  403. package/dist/core/review/__tests__/project.test.js +71 -0
  404. package/dist/core/review/__tests__/remap.test.d.ts +1 -0
  405. package/dist/core/review/__tests__/remap.test.js +159 -0
  406. package/dist/core/review/__tests__/stage-identity.test.d.ts +1 -0
  407. package/dist/core/review/__tests__/stage-identity.test.js +140 -0
  408. package/dist/core/review/birth.d.ts +7 -0
  409. package/dist/core/review/birth.js +23 -0
  410. package/dist/core/review/comments.d.ts +69 -0
  411. package/dist/core/review/comments.js +295 -0
  412. package/dist/core/review/companion.d.ts +35 -0
  413. package/dist/core/review/companion.js +205 -0
  414. package/dist/core/review/document.d.ts +27 -0
  415. package/dist/core/review/document.js +138 -0
  416. package/dist/core/review/project.d.ts +13 -0
  417. package/dist/core/review/project.js +58 -0
  418. package/dist/core/review/realize.d.ts +19 -0
  419. package/dist/core/review/realize.js +217 -0
  420. package/dist/core/review/remap.d.ts +24 -0
  421. package/dist/core/review/remap.js +156 -0
  422. package/dist/core/review/signal.d.ts +5 -0
  423. package/dist/core/review/signal.js +31 -0
  424. package/dist/core/review/stage.d.ts +26 -0
  425. package/dist/core/review/stage.js +184 -0
  426. package/dist/core/review/store.d.ts +46 -0
  427. package/dist/core/review/store.js +163 -0
  428. package/dist/core/review/ticket-filter.d.ts +17 -0
  429. package/dist/core/review/ticket-filter.js +32 -0
  430. package/dist/core/review/types.d.ts +130 -0
  431. package/dist/core/review/types.js +23 -0
  432. package/dist/core/runtime/__tests__/session-visibility.test.d.ts +1 -0
  433. package/dist/core/runtime/__tests__/session-visibility.test.js +119 -0
  434. package/dist/core/runtime/bearings.d.ts +5 -17
  435. package/dist/core/runtime/bearings.js +88 -71
  436. package/dist/core/runtime/broker-protocol.d.ts +31 -8
  437. package/dist/core/runtime/broker.d.ts +15 -1
  438. package/dist/core/runtime/broker.js +573 -141
  439. package/dist/core/runtime/canvas-extensions.d.ts +4 -5
  440. package/dist/core/runtime/canvas-extensions.js +5 -5
  441. package/dist/core/runtime/front-door.js +4 -4
  442. package/dist/core/runtime/headless-pi.d.ts +24 -0
  443. package/dist/core/runtime/headless-pi.js +152 -0
  444. package/dist/core/runtime/kickoff.d.ts +1 -5
  445. package/dist/core/runtime/kickoff.js +1 -5
  446. package/dist/core/runtime/model-registry.d.ts +3 -0
  447. package/dist/core/runtime/model-registry.js +13 -0
  448. package/dist/core/runtime/naming-persist.d.ts +4 -0
  449. package/dist/core/runtime/naming-persist.js +27 -1
  450. package/dist/core/runtime/naming.d.ts +17 -12
  451. package/dist/core/runtime/naming.js +91 -140
  452. package/dist/core/runtime/node-read.js +19 -10
  453. package/dist/core/runtime/nodes.d.ts +9 -14
  454. package/dist/core/runtime/nodes.js +3 -53
  455. package/dist/core/runtime/package-health.d.ts +6 -21
  456. package/dist/core/runtime/package-health.js +12 -123
  457. package/dist/core/runtime/placement-tmux.d.ts +2 -1
  458. package/dist/core/runtime/placement-tmux.js +6 -4
  459. package/dist/core/runtime/placement.d.ts +1 -0
  460. package/dist/core/runtime/placement.js +4 -8
  461. package/dist/core/runtime/promote.js +3 -0
  462. package/dist/core/runtime/recap.d.ts +2 -7
  463. package/dist/core/runtime/recap.js +35 -69
  464. package/dist/core/runtime/revive.js +34 -77
  465. package/dist/core/runtime/session-cycles.d.ts +4 -0
  466. package/dist/core/runtime/session-cycles.js +14 -1
  467. package/dist/core/runtime/session-visibility.d.ts +37 -0
  468. package/dist/core/runtime/session-visibility.js +83 -0
  469. package/dist/core/runtime/spawn.js +10 -22
  470. package/dist/core/runtime/stop-guard.d.ts +1 -1
  471. package/dist/core/runtime/stop-guard.js +18 -13
  472. package/dist/core/runtime/surface-bg.js +1 -1
  473. package/dist/core/runtime/tmux-chrome.d.ts +1 -1
  474. package/dist/core/runtime/tmux-chrome.js +1 -1
  475. package/dist/core/runtime/tmux.d.ts +35 -7
  476. package/dist/core/runtime/tmux.js +439 -62
  477. package/dist/core/runtime/tool-group-summary.d.ts +19 -0
  478. package/dist/core/runtime/tool-group-summary.js +88 -0
  479. package/dist/core/scope.d.ts +2 -7
  480. package/dist/core/scope.js +9 -35
  481. package/dist/core/substrate/schema.d.ts +2 -2
  482. package/dist/core/termrender/code-doc.d.ts +12 -0
  483. package/dist/core/termrender/code-doc.js +92 -0
  484. package/dist/core/termrender/display.d.ts +12 -0
  485. package/dist/core/termrender/display.js +19 -0
  486. package/dist/core/termrender/termrender.d.ts +73 -0
  487. package/dist/core/termrender/termrender.js +795 -0
  488. package/dist/core/termrender/version.d.ts +1 -0
  489. package/dist/core/termrender/version.js +1 -0
  490. package/dist/core/tui/terminal.js +1 -2
  491. package/dist/core/user-settings.d.ts +71 -3
  492. package/dist/core/user-settings.js +83 -1
  493. package/dist/daemon/api/__tests__/inbox.test.js +44 -133
  494. package/dist/daemon/api/handlers/human.d.ts +0 -10
  495. package/dist/daemon/api/handlers/human.js +104 -702
  496. package/dist/daemon/api/handlers/inbox.js +113 -142
  497. package/dist/daemon/api/handlers/review-comments.d.ts +2 -0
  498. package/dist/daemon/api/handlers/review-comments.js +500 -0
  499. package/dist/daemon/api/handlers/reviews.d.ts +2 -0
  500. package/dist/daemon/api/handlers/reviews.js +287 -0
  501. package/dist/daemon/api/map.d.ts +22 -7
  502. package/dist/daemon/api/map.js +159 -11
  503. package/dist/daemon/api/server.js +4 -0
  504. package/dist/daemon/cron-run.js +6 -9
  505. package/dist/daemon/crtrd.js +17 -33
  506. package/dist/daemon/fleet.d.ts +1 -8
  507. package/dist/daemon/fleet.js +4 -30
  508. package/dist/daemon/human/finish.d.ts +14 -0
  509. package/dist/daemon/human/finish.js +115 -0
  510. package/dist/daemon/human/sweep.d.ts +6 -0
  511. package/dist/daemon/human/sweep.js +49 -0
  512. package/dist/daemon/messaging/node-message.d.ts +18 -0
  513. package/dist/daemon/messaging/node-message.js +70 -0
  514. package/dist/daemon/review/comment-notify.d.ts +26 -0
  515. package/dist/daemon/review/comment-notify.js +107 -0
  516. package/dist/daemon/review/deliver.d.ts +7 -0
  517. package/dist/daemon/review/deliver.js +56 -0
  518. package/dist/daemon/review/finish.d.ts +22 -0
  519. package/dist/daemon/review/finish.js +254 -0
  520. package/dist/daemon/review/sweep.d.ts +11 -0
  521. package/dist/daemon/review/sweep.js +120 -0
  522. package/dist/index.d.ts +2 -0
  523. package/dist/index.js +2 -2
  524. package/dist/pi-extensions/__tests__/canvas-context-intro.test.js +42 -64
  525. package/dist/pi-extensions/__tests__/canvas-recap.test.d.ts +1 -0
  526. package/dist/pi-extensions/__tests__/canvas-recap.test.js +159 -0
  527. package/dist/pi-extensions/__tests__/canvas-stophook-agentend.test.js +16 -38
  528. package/dist/pi-extensions/__tests__/canvas-structured-output.test.d.ts +1 -0
  529. package/dist/pi-extensions/__tests__/canvas-structured-output.test.js +63 -0
  530. package/dist/pi-extensions/canvas-context-intro.d.ts +8 -11
  531. package/dist/pi-extensions/canvas-context-intro.js +50 -104
  532. package/dist/pi-extensions/canvas-recap.d.ts +15 -2
  533. package/dist/pi-extensions/canvas-recap.js +192 -69
  534. package/dist/pi-extensions/canvas-review-boundary.d.ts +59 -0
  535. package/dist/pi-extensions/canvas-review-boundary.js +81 -0
  536. package/dist/pi-extensions/canvas-stophook.d.ts +3 -3
  537. package/dist/pi-extensions/canvas-stophook.js +78 -128
  538. package/dist/pi-extensions/canvas-structured-output.js +52 -8
  539. package/dist/shared/generated-context.d.ts +29 -4
  540. package/dist/shared/generated-context.js +122 -7
  541. package/dist/shared/tool-groups.d.ts +23 -0
  542. package/dist/shared/tool-groups.js +60 -0
  543. package/dist/shared/working-activity.d.ts +8 -0
  544. package/dist/shared/working-activity.js +26 -0
  545. package/dist/types.d.ts +36 -2
  546. package/dist/types.js +51 -0
  547. package/dist/web-client/assets/index-CCPaLeW7.css +2 -0
  548. package/dist/web-client/assets/index-kyOWsnZK.js +86 -0
  549. package/dist/web-client/index.html +2 -2
  550. package/dist/web-client/sw.js +1 -1
  551. package/docs/compat/hearth-crtr-v4.md +2 -2
  552. package/docs/compat/hearth-crtr-v5.md +4 -2
  553. package/docs/public-api.md +3 -3
  554. package/package.json +21 -14
  555. package/runtime.lock.json +4661 -1453
  556. package/scripts/postinstall.mjs +15 -2
  557. package/dist/builtin-pi-packages/pi-mode-switch/README.md +0 -36
  558. package/dist/builtin-pi-packages/pi-mode-switch/bin/mode +0 -36
  559. package/dist/builtin-pi-packages/pi-mode-switch/extensions/index.ts +0 -449
  560. package/dist/builtin-pi-packages/pi-mode-switch/package.json +0 -14
  561. package/dist/builtin-pi-packages/pi-mode-switch/tsconfig.json +0 -9
  562. package/dist/builtin-views/_lib/states.mjs +0 -161
  563. package/dist/builtin-views/canvas/core.mjs +0 -657
  564. package/dist/builtin-views/canvas/text.mjs +0 -58
  565. package/dist/builtin-views/canvas/tui.mjs +0 -168
  566. package/dist/builtin-views/canvas/web.jsx +0 -121
  567. package/dist/builtin-views/chat/core.mjs +0 -684
  568. package/dist/builtin-views/chat/text.mjs +0 -101
  569. package/dist/builtin-views/chat/tui.mjs +0 -360
  570. package/dist/builtin-views/chat/web.jsx +0 -362
  571. package/dist/builtin-views/git-pr/core.mjs +0 -673
  572. package/dist/builtin-views/git-pr/text.mjs +0 -84
  573. package/dist/builtin-views/git-pr/tui.mjs +0 -301
  574. package/dist/builtin-views/git-pr/web.jsx +0 -216
  575. package/dist/builtin-views/inbox/_lib/render.mjs +0 -175
  576. package/dist/builtin-views/inbox/core.mjs +0 -1273
  577. package/dist/builtin-views/inbox/text.mjs +0 -73
  578. package/dist/builtin-views/inbox/tui.mjs +0 -314
  579. package/dist/builtin-views/inbox/web.jsx +0 -188
  580. package/dist/builtin-views/linkedin/core.mjs +0 -906
  581. package/dist/builtin-views/linkedin/text.mjs +0 -69
  582. package/dist/builtin-views/linkedin/tui.mjs +0 -413
  583. package/dist/builtin-views/linkedin/web.jsx +0 -206
  584. package/dist/builtin-views/prompt-review/core.mjs +0 -735
  585. package/dist/builtin-views/prompt-review/text.mjs +0 -15
  586. package/dist/builtin-views/prompt-review/tui.mjs +0 -196
  587. package/dist/builtin-views/prompt-review/web.jsx +0 -484
  588. package/dist/builtin-views/workspace-sidebar/__tests__/core.test.js +0 -50
  589. package/dist/builtin-views/workspace-sidebar/__tests__/core.test.ts +0 -53
  590. package/dist/builtin-views/workspace-sidebar/core.mjs +0 -670
  591. package/dist/builtin-views/workspace-sidebar/text.mjs +0 -53
  592. package/dist/builtin-views/workspace-sidebar/tui.mjs +0 -141
  593. package/dist/builtin-views/workspace-sidebar/web.jsx +0 -109
  594. package/dist/clients/attach/session/mode.d.ts +0 -25
  595. package/dist/clients/attach/session/mode.js +0 -97
  596. package/dist/commands/sys/promptstudio.d.ts +0 -2
  597. package/dist/commands/sys/promptstudio.js +0 -65
  598. package/dist/commands/view-cycle.d.ts +0 -2
  599. package/dist/commands/view-cycle.js +0 -130
  600. package/dist/commands/view-list.d.ts +0 -2
  601. package/dist/commands/view-list.js +0 -66
  602. package/dist/commands/view-new.d.ts +0 -2
  603. package/dist/commands/view-new.js +0 -74
  604. package/dist/commands/view-pick.d.ts +0 -6
  605. package/dist/commands/view-pick.js +0 -129
  606. package/dist/commands/view-run.d.ts +0 -2
  607. package/dist/commands/view-run.js +0 -214
  608. package/dist/commands/view.d.ts +0 -2
  609. package/dist/commands/view.js +0 -31
  610. package/dist/commands/workspace.d.ts +0 -2
  611. package/dist/commands/workspace.js +0 -165
  612. package/dist/core/__tests__/chat-view-reconnect.test.js +0 -105
  613. package/dist/core/__tests__/full/consult-startup-failure.test.js +0 -124
  614. package/dist/core/canvas/__tests__/human-work-outbox.test.js +0 -123
  615. package/dist/core/canvas/human-work-outbox.d.ts +0 -73
  616. package/dist/core/canvas/human-work-outbox.js +0 -261
  617. package/dist/core/command-plugins/store.d.ts +0 -16
  618. package/dist/core/command-plugins/store.js +0 -64
  619. package/dist/core/keybindings/__tests__/bespoke-consumers.test.js +0 -40
  620. package/dist/core/runtime/fault-recovery-nudge.d.ts +0 -3
  621. package/dist/core/runtime/fault-recovery-nudge.js +0 -3
  622. package/dist/core/tui/__tests__/host-keybindings.test.js +0 -113
  623. package/dist/core/tui/host.d.ts +0 -66
  624. package/dist/core/view/__tests__/transport-cache.test.js +0 -62
  625. package/dist/core/view/bridge.d.ts +0 -10
  626. package/dist/core/view/bridge.js +0 -31
  627. package/dist/core/view/chrome.d.ts +0 -9
  628. package/dist/core/view/chrome.js +0 -22
  629. package/dist/core/view/contract.d.ts +0 -205
  630. package/dist/core/view/contract.js +0 -23
  631. package/dist/core/view/loader.d.ts +0 -31
  632. package/dist/core/view/loader.js +0 -188
  633. package/dist/core/view/stream-local.d.ts +0 -3
  634. package/dist/core/view/stream-local.js +0 -231
  635. package/dist/core/view/transport-cache.d.ts +0 -8
  636. package/dist/core/view/transport-cache.js +0 -38
  637. package/dist/core/view/transport-local.d.ts +0 -7
  638. package/dist/core/view/transport-local.js +0 -83
  639. package/dist/core/view/transport-remote.d.ts +0 -2
  640. package/dist/core/view/transport.d.ts +0 -10
  641. package/dist/core/view/transport.js +0 -15
  642. package/dist/pi-extensions/naming-tool.d.ts +0 -24
  643. package/dist/pi-extensions/naming-tool.js +0 -67
  644. package/dist/prompts/view.d.ts +0 -7
  645. package/dist/prompts/view.js +0 -172
  646. package/dist/web/ViewChrome.d.ts +0 -7
  647. package/dist/web/ViewChrome.js +0 -28
  648. package/dist/web/ViewPane.d.ts +0 -39
  649. package/dist/web/ViewPane.js +0 -48
  650. package/dist/web/index.d.ts +0 -8
  651. package/dist/web/index.js +0 -22
  652. package/dist/web/runtime.d.ts +0 -39
  653. package/dist/web/runtime.js +0 -232
  654. package/dist/web/states.d.ts +0 -24
  655. package/dist/web/states.js +0 -24
  656. package/dist/web/transport-http.d.ts +0 -5
  657. package/dist/web/transport-http.js +0 -34
  658. package/dist/web/transport-stream.d.ts +0 -3
  659. package/dist/web/transport-stream.js +0 -204
  660. package/dist/web-client/assets/index-U_NZ66VE.js +0 -79
  661. package/dist/web-client/assets/index-aaeu4adv.css +0 -2
  662. /package/dist/{builtin-views/workspace-sidebar/__tests__/core.test.d.ts → clients/attach/__tests__/file-review-focus.test.d.ts} +0 -0
  663. /package/dist/clients/attach/__tests__/{visible-paths.test.d.ts → group-activity.test.d.ts} +0 -0
  664. /package/dist/{core/__tests__/chat-view-reconnect.test.d.ts → clients/attach/__tests__/input-controller-extension-command.test.d.ts} +0 -0
  665. /package/dist/{core/__tests__/full/consult-startup-failure.test.d.ts → clients/attach/__tests__/session-identity-refresh.test.d.ts} +0 -0
  666. /package/dist/{core/canvas/__tests__/human-work-outbox.test.d.ts → clients/inbox/__tests__/inbox-controller.test.d.ts} +0 -0
  667. /package/dist/{core/keybindings/__tests__/bespoke-consumers.test.d.ts → clients/inbox/__tests__/mount-panel.test.d.ts} +0 -0
  668. /package/dist/{core/tui/__tests__/host-keybindings.test.d.ts → clients/inbox/review/__tests__/editor-roundtrip.test.d.ts} +0 -0
  669. /package/dist/{core/view/__tests__/transport-cache.test.d.ts → clients/inbox/review/__tests__/remap.test.d.ts} +0 -0
  670. /package/dist/{core/view/__tests__/transport-remote.test.d.ts → clients/inbox/review/__tests__/review-core.test.d.ts} +0 -0
@@ -0,0 +1,119 @@
1
+ // Run with: node --import tsx/esm --test src/core/runtime/__tests__/session-visibility.test.ts
2
+ //
3
+ // This table keeps the review companion transcript boundary a pure, cheap
4
+ // regression surface: ordinary snapshots are untouched, a persisted marker
5
+ // wins from its first occurrence, and markerless companions expose nothing.
6
+ import { test } from 'node:test';
7
+ import assert from 'node:assert/strict';
8
+ import { boundaryRootedTree, REVIEW_BOUNDARY_CUSTOM_TYPE, visibleMessages } from '../session-visibility.js';
9
+ function message(fields) {
10
+ return fields;
11
+ }
12
+ function contentOf(item) {
13
+ return item.content;
14
+ }
15
+ const boundary = message({
16
+ role: 'custom',
17
+ customType: REVIEW_BOUNDARY_CUSTOM_TYPE,
18
+ content: 'review boundary',
19
+ display: true,
20
+ timestamp: 2,
21
+ });
22
+ const cycleDivider = message({
23
+ role: 'custom',
24
+ customType: 'crtr-cycle-divider',
25
+ content: 'cycle 2 begins',
26
+ display: true,
27
+ timestamp: 3,
28
+ });
29
+ const cases = [
30
+ {
31
+ name: 'first marker wins even when it is not first, and preserves later cycle dividers',
32
+ messages: [
33
+ message({ role: 'user', content: 'inherited origin context', timestamp: 0 }),
34
+ message({ role: 'assistant', content: 'inherited answer', timestamp: 1 }),
35
+ boundary,
36
+ message({ role: 'user', content: 'review message', timestamp: 2 }),
37
+ cycleDivider,
38
+ message({ role: 'assistant', content: 'later cycle message', timestamp: 4 }),
39
+ ],
40
+ reviewCompanion: true,
41
+ assertResult: (_input, result) => {
42
+ assert.deepEqual(result, [boundary, message({ role: 'user', content: 'review message', timestamp: 2 }), cycleDivider, message({ role: 'assistant', content: 'later cycle message', timestamp: 4 })]);
43
+ assert.equal(result[0], boundary);
44
+ assert.ok(!result.some((item) => contentOf(item) === 'inherited origin context'));
45
+ assert.ok(!result.some((item) => contentOf(item) === 'inherited answer'));
46
+ },
47
+ },
48
+ {
49
+ name: 'ordinary nodes return the exact input reference without a marker',
50
+ messages: [
51
+ message({ role: 'user', content: 'ordinary message', timestamp: 0 }),
52
+ cycleDivider,
53
+ ],
54
+ reviewCompanion: false,
55
+ assertResult: (input, result) => {
56
+ assert.strictEqual(result, input);
57
+ },
58
+ },
59
+ {
60
+ name: 'a markerless companion replaces only a compaction summary with a synthetic boundary',
61
+ messages: [
62
+ message({
63
+ role: 'compactionSummary',
64
+ content: 'summary may include inherited origin context',
65
+ timestamp: 7,
66
+ }),
67
+ message({ role: 'user', content: 'post-compaction review message', timestamp: 8 }),
68
+ ],
69
+ reviewCompanion: true,
70
+ assertResult: (_input, result) => {
71
+ assert.deepEqual(result, [
72
+ message({
73
+ role: 'custom',
74
+ customType: REVIEW_BOUNDARY_CUSTOM_TYPE,
75
+ content: 'Earlier conversation with the origin is not shown.',
76
+ display: true,
77
+ timestamp: 7,
78
+ }),
79
+ message({ role: 'user', content: 'post-compaction review message', timestamp: 8 }),
80
+ ]);
81
+ assert.ok(!result.some((item) => contentOf(item) === 'summary may include inherited origin context'));
82
+ },
83
+ },
84
+ ];
85
+ for (const testCase of cases) {
86
+ test(`visibleMessages: ${testCase.name}`, () => {
87
+ const input = testCase.messages;
88
+ const result = visibleMessages(input, { reviewCompanion: testCase.reviewCompanion });
89
+ testCase.assertResult(input, result);
90
+ });
91
+ }
92
+ function treeNode(id, entry, children = []) {
93
+ return { entry: { id, ...entry }, children };
94
+ }
95
+ test('visibleMessages: every markerless non-compaction shape remains synthetic-only', () => {
96
+ const result = visibleMessages([message({ role: 'user', content: 'inherited context', timestamp: 5 })], { reviewCompanion: true });
97
+ assert.equal(result.length, 1);
98
+ assert.equal(result[0]?.customType, REVIEW_BOUNDARY_CUSTOM_TYPE);
99
+ });
100
+ test('boundaryRootedTree drops inherited ancestors and preserves only boundary descendants', () => {
101
+ const tree = [
102
+ treeNode('origin', { type: 'message', message: { role: 'user', content: 'PREBOUNDARY_CANARY' } }, [
103
+ treeNode('inherited-reply', { type: 'message', message: { role: 'assistant', content: 'inherited reply' } }, [
104
+ treeNode('boundary', { type: 'custom_message', customType: REVIEW_BOUNDARY_CUSTOM_TYPE, content: 'review boundary', display: true }, [
105
+ treeNode('review-user', { type: 'message', message: { role: 'user', content: 'review finding' } }),
106
+ treeNode('review-assistant', { type: 'message', message: { role: 'assistant', content: 'review resolution' } }),
107
+ ]),
108
+ ]),
109
+ ]),
110
+ ];
111
+ const result = boundaryRootedTree(tree);
112
+ assert.deepEqual(result.map((node) => node.entry.id), ['boundary']);
113
+ assert.deepEqual(result[0]?.children.map((node) => node.entry.id), ['review-user', 'review-assistant']);
114
+ assert.equal(JSON.stringify(result).includes('PREBOUNDARY_CANARY'), false);
115
+ });
116
+ test('boundaryRootedTree returns no picker tree for a markerless companion', () => {
117
+ const tree = [treeNode('origin', { type: 'message', message: { role: 'user', content: 'PREBOUNDARY_CANARY' } })];
118
+ assert.deepEqual(boundaryRootedTree(tree), []);
119
+ });
@@ -32,22 +32,6 @@ export declare function orchestratorContextNote(nodeId: string): string;
32
32
  * `● you`, then its immediate children. Returns '' for a lone root with no
33
33
  * children (nothing to map). Exported for testing. */
34
34
  export declare function buildGraphMap(nodeId: string): string;
35
- /** Minimal identity needed to render the assertion before a node is persisted.
36
- * Private human-work birth uses this to freeze the exact kickoff in the same
37
- * metadata write that creates the node, before any broker can exist. */
38
- export interface IdentityAssertionInput {
39
- node_id: string;
40
- kind: string;
41
- mode: string;
42
- fork_from?: string | null;
43
- }
44
- /** Render the identity assertion for a known or not-yet-persisted node. A fork
45
- * copies the source's first-person conversation, so its kickoff names the new
46
- * identity and treats the inherited narrative as reference material. */
47
- export declare function buildIdentityAssertionFor(meta: IdentityAssertionInput): string;
48
- /** The identity assertion injected at session start for an already-persisted
49
- * node. Exported for tests and spawn-time fork kickoff construction. */
50
- export declare function buildIdentityAssertion(nodeId: string): string;
51
35
  /** Why a node was born or woken, as carried from the fired cron to the
52
36
  * injection seam. `ownerName` is the armer's resolved display name when it
53
37
  * still exists (a reaped cron's armer renders as a bare id, never crashes). */
@@ -77,7 +61,11 @@ export declare function cronWakeOrigin(c: Cron, kind: WakeOrigin['kind']): WakeO
77
61
  * carry the signal, and a raw ISO instant is noise an agent cannot cheaply turn
78
62
  * into an elapsed delta. */
79
63
  export declare function buildWakeBearings(origin: WakeOrigin): string;
80
- /** The full boot intro, three top-level sections:
64
+ /** The node-scoped update for a fork whose copied branch already contains a
65
+ * full crouter baseline. Shared project and operating context stays in the
66
+ * inherited branch; this block replaces only source-owned facts. */
67
+ export declare function buildForkBearings(nodeId: string): string;
68
+ /** The full boot intro, four top-level sections:
81
69
  *
82
70
  * 1. `<crtr-bearings>` — the orienting facts about THIS node: the identity
83
71
  * assertion (always first, so it overrides any copied-in persona), then a
@@ -1,44 +1,14 @@
1
- // bearings.ts — the boot-intro prose (the <crtr-bearings> orientation block +
2
- // the <memory kind="knowledge"> catalog that rides beside it), shared by the
3
- // paths that deliver it so they can never drift:
1
+ // bearings.ts — session orientation shared by every delivery path.
4
2
  //
5
- // • the context-intro pi-extension injects buildContextBearings() as the
6
- // node's first session message in every brand-new chat. The <crtr-bearings>
7
- // block opens with the identity assertion (buildIdentityAssertion) that
8
- // names the node (id, kind, mode), then a `## Your place in the canvas`
9
- // mini-map (ancestry trunk up + immediate children with statuses, via
10
- // buildGraphMap) and a `## Your context directory` note; identity leads,
11
- // ONLY for a fork, disowns the source's copied first-person narrative as
12
- // inherited context — the fix for the `--fork-from` bug where a fork copies
13
- // the source's whole conversation and then impersonates it. A non-fork
14
- // node's bearings are its FIRST entry, so there is nothing earlier to
15
- // disown; it gets only the declarative identity line. The message also
16
- // carries the <project_context> block (buildProjectContextBlock), which is
17
- // now only the <environment> snapshot: a host/runtime line (platform,
18
- // hostname, node, tmux-or-not), the cwd dir listing, and git status.
19
- // Project guidance rides the document substrate instead: a workspace's
20
- // `.crouter/memory/INDEX.md` declares `applies-to: "."` and surfaces through
21
- // an <auto-loaded-context> block when cwd/profile mounts that workspace;
22
- // ordinary boot-routed knowledge remains in the <memory kind="knowledge">
23
- // block below. No parallel project-context loader lives here (see
24
- // `crtr memory read taste/document-substrate`);
25
- // • promote.ts folds orchestratorContextNote() into the promotion guidance
26
- // dump, so a node that becomes an orchestrator MID-LIFE gets the
27
- // orchestrator framing it never received at spawn — it spawned as a base
28
- // worker, and the bearings already in its history carry only the base note.
3
+ // A conversation with no inherited crouter bearings receives the full baseline:
4
+ // node identity and graph position, context-directory guidance, routed knowledge,
5
+ // auto-loaded project docs, situational context, and the current environment.
6
+ // A fork whose copied branch already carries that baseline receives only
7
+ // buildForkBearings(): the new node-scoped facts that supersede its source's
8
+ // identity. The copied baseline remains useful reference without being repeated.
29
9
  //
30
- // Base framing (every node): the context dir is durable, shared scratch — the
31
- // one place other nodes on the canvas can read from, so it is for documents
32
- // worth a shared reference, NOT a task tracker, and NOT a "future memory-wiped
33
- // you" stash (a terminal worker has no future cycle — that framing only makes
34
- // sense once a node is a resident orchestrator). The `<memory kind="knowledge">`
35
- // block (substrate knowledge docs + node-local docs) rides as a SIBLING of
36
- // <crtr-bearings> — never nested under the context dir, which would imply the
37
- // catalog belongs to that one directory rather than spanning all memory scopes.
38
- //
39
- // Orchestrator addendum (gated on orchestrator MODE): the dir ALSO survives
40
- // refresh cycles, so it is where a future cycle of the orchestrator resumes.
41
- // This across-cycles note is the ONE thing a terminal worker's bearings drop.
10
+ // promote.ts separately delivers orchestratorContextNote() when a base node
11
+ // becomes an orchestrator after birth.
42
12
  import { contextDir, getNode, fullName, isSafeNodeId, subscriptionsOf, } from '../canvas/index.js';
43
13
  import { execSync } from 'node:child_process';
44
14
  import { readdirSync } from 'node:fs';
@@ -292,39 +262,22 @@ export function buildGraphMap(nodeId) {
292
262
  }
293
263
  return lines.join('\n');
294
264
  }
295
- /** Render the identity assertion for a known or not-yet-persisted node. A fork
296
- * copies the source's first-person conversation, so its kickoff names the new
297
- * identity and treats the inherited narrative as reference material. */
298
- export function buildIdentityAssertionFor(meta) {
299
- const lines = [`You are node ${meta.node_id} — kind ${meta.kind}, mode ${meta.mode}.`];
300
- const forkFrom = meta.fork_from;
265
+ /** The identity assertion injected at session start. A fork names its source
266
+ * while treating the copied first-person narrative as reference. */
267
+ function buildIdentityAssertion(nodeId) {
268
+ const meta = getNode(nodeId);
269
+ const lines = [`You are node ${nodeId} — kind ${meta?.kind ?? 'general'}, mode ${meta?.mode ?? 'base'}.`];
270
+ const forkFrom = meta?.fork_from;
301
271
  if (forkFrom !== undefined && forkFrom !== null && forkFrom !== '') {
302
- // Name the source: a known node id gets its human label; a raw path/uuid
303
- // (e.g. a human-work provenance file) passes through as-is — getNode()
304
- // requires a safe node-id segment and throws on an arbitrary path, so only
305
- // call it when forkFrom actually looks like a node id.
272
+ // A known node id carries its human label. Paths and session ids remain
273
+ // opaque provenance rather than being passed to the node-id lookup.
306
274
  const src = isSafeNodeId(forkFrom) ? getNode(forkFrom) : null;
307
275
  const sourceLabel = src !== null ? `${forkFrom} ("${fullName(src)}")` : forkFrom;
308
- lines.push('', `You are a FORK of ${sourceLabel}: at spawn pi COPIED that node's conversation into your ` +
309
- `session as a starting point. You are NOT ${sourceLabel}. Everything earlier in this ` +
310
- 'conversation is THEIR first-person history — inherited reference material, not your own ' +
311
- 'past. Do not speak or act as them, do not continue their task as if it were yours, and do ' +
312
- 'not "monitor yourself" as though you were a child they spawned. You inherit none of the ' +
313
- 'source node’s graph edges and are not responsible for monitoring or managing its children.');
276
+ lines.push('', `You are a new FORK of ${sourceLabel}, not ${sourceLabel}. Pi copied the earlier conversation ` +
277
+ `into this session. Treat that first-person history as reference material, not your own past.`);
314
278
  }
315
279
  return lines.join('\n');
316
280
  }
317
- /** The identity assertion injected at session start for an already-persisted
318
- * node. Exported for tests and spawn-time fork kickoff construction. */
319
- export function buildIdentityAssertion(nodeId) {
320
- const meta = getNode(nodeId);
321
- return buildIdentityAssertionFor({
322
- node_id: nodeId,
323
- kind: meta?.kind ?? 'general',
324
- mode: meta?.mode ?? 'base',
325
- fork_from: meta?.fork_from,
326
- });
327
- }
328
281
  /** The armer rendered for prose, ROLE-explicit so a newborn never mistakes the
329
282
  * id for its own: `node <id> ("<name>")` when the name resolved, `node <id>
330
283
  * (now gone)` when the armer was reaped, `an unknown node` only if the owner id
@@ -380,7 +333,72 @@ export function buildWakeBearings(origin) {
380
333
  `${armer} to fire now. You are its only run, not a recurring job. Your task follows.`;
381
334
  return `<crtr-wake>\n${body}\n</crtr-wake>`;
382
335
  }
383
- /** The full boot intro, three top-level sections:
336
+ function managedWorktreeNote(node) {
337
+ const wt = node?.managed_worktree;
338
+ if (wt?.state !== 'open')
339
+ return '';
340
+ return `Branch: \`${wt.branch}\`\nWorktree: \`${wt.path}\`\nBase: \`${wt.base_ref}\` @ \`${wt.base_sha}\`\nCommit work here. Land it with \`crtr node worktree close\` before finishing. Auto-drop applies only when the worktree is clean (no uncommitted changes) and nothing remains to land (zero commits ahead of the base, or its commits are already contained in the base); unlanded commits (commits not already contained in the base) or uncommitted changes require an explicit close/landing decision.`;
341
+ }
342
+ /** The review-companion block — rendered ONLY when a node carries its immutable
343
+ * review binding. Names the target file (the document under review), clarifies
344
+ * that inherited context belongs to the origin node and is not visible to the
345
+ * person, and notes that the visible transcript begins at the boundary marker
346
+ * above. */
347
+ function reviewCompanionBlock(meta) {
348
+ if (meta?.review_binding === undefined || meta?.review_binding === null)
349
+ return '';
350
+ const targetFile = meta.review_binding.target_file;
351
+ return (`You exist for one human review of \`${targetFile}\`. The inherited conversation belongs to ` +
352
+ `the origin node, not you — carry only the context needed for this review. The person's visible ` +
353
+ `transcript begins at the boundary marker above; everything earlier is context they cannot see.`);
354
+ }
355
+ /** The node-scoped update for a fork whose copied branch already contains a
356
+ * full crouter baseline. Shared project and operating context stays in the
357
+ * inherited branch; this block replaces only source-owned facts. */
358
+ export function buildForkBearings(nodeId) {
359
+ const node = getNode(nodeId);
360
+ const bearings = [
361
+ '<crtr-bearings>',
362
+ buildIdentityAssertion(nodeId),
363
+ '',
364
+ 'The source node’s earlier task, graph position, lifecycle, children, schedules, worktree, situational context, and context-directory path do not carry over. Shared conversation, project, and operating context remain reference material.',
365
+ '',
366
+ '## Your node now',
367
+ `Lifecycle: ${node?.lifecycle ?? 'terminal'}.`,
368
+ ];
369
+ const map = buildGraphMap(nodeId);
370
+ if (map === '') {
371
+ bearings.push('Canvas: independent root with no parent or inherited graph edges.');
372
+ }
373
+ else {
374
+ bearings.push('', map);
375
+ }
376
+ bearings.push(`Context directory: \`${contextDir(nodeId)}\` (\`$CRTR_CONTEXT_DIR\`). Use this path in place of every source-node context path above.`);
377
+ const forkFrom = node?.fork_from;
378
+ const source = forkFrom !== undefined && forkFrom !== null && isSafeNodeId(forkFrom)
379
+ ? getNode(forkFrom)
380
+ : null;
381
+ if (node !== null && (source === null || source.cwd !== node.cwd)) {
382
+ bearings.push(`Working directory: \`${node.cwd}\`.`);
383
+ }
384
+ if (node !== null && (source === null || source.profile_id !== node.profile_id)) {
385
+ const profileSection = profileNote(nodeId);
386
+ if (profileSection !== '')
387
+ bearings.push(profileSection);
388
+ }
389
+ const worktree = managedWorktreeNote(node);
390
+ if (worktree !== '')
391
+ bearings.push('', '## Your managed worktree', worktree);
392
+ if (node?.mode === 'orchestrator')
393
+ bearings.push('', orchestratorContextNote(nodeId));
394
+ const review = reviewCompanionBlock(node);
395
+ if (review !== '')
396
+ bearings.push('', review);
397
+ bearings.push('', 'The first real user message after these bearings is your mandate.', '</crtr-bearings>');
398
+ const situational = situationalContextBlock(nodeId);
399
+ return [bearings.join('\n'), situational].filter((s) => s !== '').join('\n');
400
+ }
401
+ /** The full boot intro, four top-level sections:
384
402
  *
385
403
  * 1. `<crtr-bearings>` — the orienting facts about THIS node: the identity
386
404
  * assertion (always first, so it overrides any copied-in persona), then a
@@ -407,10 +425,9 @@ export function buildContextBearings(nodeId) {
407
425
  const profileSection = profileNote(nodeId);
408
426
  if (profileSection !== '')
409
427
  bearings.push('', profileSection);
410
- const wt = node?.managed_worktree;
411
- if (wt?.state === 'open') {
412
- bearings.push('', '## Your managed worktree', `Branch: \`${wt.branch}\`\nWorktree: \`${wt.path}\`\nBase: \`${wt.base_ref}\` @ \`${wt.base_sha}\`\nCommit work here. Land it with \`crtr node worktree close\` before finishing. Auto-drop applies only when the worktree is clean (no uncommitted changes) and nothing remains to land (zero commits ahead of the base, or its commits are already contained in the base); unlanded commits (commits not already contained in the base) or uncommitted changes require an explicit close/landing decision.`);
413
- }
428
+ const worktree = managedWorktreeNote(node);
429
+ if (worktree !== '')
430
+ bearings.push('', '## Your managed worktree', worktree);
414
431
  // Orchestrator-only: the across-cycles framing (a terminal has no future cycle).
415
432
  if (node?.mode === 'orchestrator')
416
433
  bearings.push('', orchestratorContextNote(nodeId));
@@ -1,6 +1,7 @@
1
1
  import type { AgentSession, AgentSessionEvent, RpcExtensionUIRequest, RpcExtensionUIResponse, RpcSessionState, SessionEntry, SessionInfo, SettingsConfig, SessionStats } from '@earendil-works/pi-coding-agent';
2
2
  import type { Api, ImageContent, Model } from '@earendil-works/pi-ai';
3
3
  import type { BrokerErrorFrame } from '../../api/dto/broker.js';
4
+ import type { ToolGroupSummary } from '../../shared/tool-groups.js';
4
5
  /** pi's own RPC types, re-exported unchanged. `broker-protocol` stays the one
5
6
  * import site for the wire union; the shapes themselves are pi's, versioned by
6
7
  * pi, so a pi change is a compile error here instead of silent drift. */
@@ -45,6 +46,14 @@ export interface BrokerSnapshot {
45
46
  }>;
46
47
  title: string | undefined;
47
48
  };
49
+ /** Broker-owned summaries keyed by the first tool-call id in each group.
50
+ * Structured objects with bullets, nodesSpawned, and filesEdited.
51
+ * Optional so snapshots from an older live runtime remain readable. */
52
+ toolGroupSummaries?: Record<string, ToolGroupSummary>;
53
+ /** The broker-selected normal activity label for the current turn. Optional so
54
+ * viewers can still attach to an older live runtime; they fall back to
55
+ * `Working...` when it is absent. */
56
+ workingActivity?: string;
48
57
  }
49
58
  /** Opens the connection and FIXES this client's role for its lifetime. A repeated
50
59
  * `hello` on an already-helloed socket never changes the established role. */
@@ -67,6 +76,8 @@ export interface PromptFrame {
67
76
  type: 'prompt';
68
77
  text: string;
69
78
  images?: ImageContent[];
79
+ /** Abort the active turn before starting this prompt. Used by the attach viewer's whip action so its command replaces, rather than joins, in-flight work. */
80
+ interrupt?: true;
70
81
  }
71
82
  export interface SteerFrame {
72
83
  type: 'steer';
@@ -309,16 +320,16 @@ export interface CloneFrame {
309
320
  export interface ShareFrame {
310
321
  type: 'share';
311
322
  }
312
- /** Reload credentials + refresh model registry after a viewer-side auth change.
313
- * Open to any client — reload_auth is an idempotent local re-read that doesn't
314
- * steer the conversation, so the daemon's canvas-wide fan (one /login → every
315
- * live broker) can trigger it from an observer connection. Broker handler:
316
- * services.authStorage.reload() +
317
- * services.modelRegistry.refresh(). */
323
+ /** Reload credentials + the local model-runtime availability snapshot after a
324
+ * viewer-side auth change. Open to any client — reload_auth is an idempotent
325
+ * local re-read that doesn't steer the conversation, so the daemon's
326
+ * canvas-wide fan (one /login → every live broker) can trigger it from an
327
+ * observer connection. The broker refreshes with network catalogs disabled,
328
+ * then reconciles eligible logical routes before admitting the next idle prompt. */
318
329
  export interface ReloadAuthFrame {
319
330
  type: 'reload_auth';
320
331
  }
321
- /** Read live source coordinates for an ask-time Humanloop fork. This is an
332
+ /** Read live source coordinates for an ask-time human fork. This is an
322
333
  * observer-safe getter only: it never creates a branch, switches a session, or
323
334
  * changes the source manager. */
324
335
  export interface GetHumanForkCoordinatesFrame {
@@ -349,6 +360,11 @@ export interface WelcomeFrame {
349
360
  * the other four learn nothing); the PAYLOAD is pi's — `Model`, exactly what
350
361
  * pi's own `set_model` response carries and what `snapshot.state.model` holds.
351
362
  * Undefined when the engine has none. */
363
+ export interface WorkingActivityFrame {
364
+ type: 'working_activity';
365
+ /** Full display label selected from the user's configured gerunds. */
366
+ activity: string;
367
+ }
352
368
  export interface ModelChangedFrame {
353
369
  type: 'model_changed';
354
370
  model: Model<any> | undefined;
@@ -563,10 +579,17 @@ export interface ExtensionUIDismissFrame {
563
579
  type: 'extension_ui_dismiss';
564
580
  id: string;
565
581
  }
582
+ /** A completed broker-side tool-group summary. The viewer owns presentation;
583
+ * this frame carries the durable group key and structured summary object. */
584
+ export interface ToolGroupSummaryFrame {
585
+ type: 'tool_group_summary';
586
+ key: string;
587
+ summary: ToolGroupSummary;
588
+ }
566
589
  /** Everything the broker can send. Live `AgentSessionEvent`s are relayed
567
590
  * verbatim (the broker adds nothing); the broker's own control frames carry
568
591
  * non-colliding `type` discriminants. */
569
- export type BrokerToClient = WelcomeFrame | ModelChangedFrame | ErrorFrame | AckFrame | BrokerDataFrame | BashStartFrame | BashOutputFrame | BashEndFrame | ExtensionUIRequestFrame | ExtensionUIDismissFrame | AgentSessionEvent;
592
+ export type BrokerToClient = WelcomeFrame | WorkingActivityFrame | ModelChangedFrame | ErrorFrame | AckFrame | BrokerDataFrame | BashStartFrame | BashOutputFrame | BashEndFrame | ExtensionUIRequestFrame | ExtensionUIDismissFrame | ToolGroupSummaryFrame | AgentSessionEvent;
570
593
  /** Encode one frame as a single newline-terminated JSON line. */
571
594
  export declare function encodeFrame(frame: ClientToBroker | BrokerToClient): string;
572
595
  /** Byte bounds for a {@link FrameDecoder} (C5). */
@@ -5,6 +5,15 @@ import { type BrokerSdkConfig } from './launch.js';
5
5
  import { type BrokerEngine } from './broker-sdk.js';
6
6
  import { type KnownStreamWaitControl } from './stream-watchdog.js';
7
7
  import { FrameDecoder, type BrokerSnapshot, type BrokerToClient, type ClientRole, type RpcExtensionUIRequest, type RpcExtensionUIResponse } from './broker-protocol.js';
8
+ /** A review companion may only navigate or fork within a branch whose ancestry
9
+ * has crossed its durable transcript boundary. The broker sends this typed local
10
+ * failure as a dedicated error frame without invoking pi's tree mutation. */
11
+ export declare const REVIEW_BOUNDARY_NAVIGATION_CODE = "review_boundary_navigation";
12
+ export declare class ReviewBoundaryNavigationError extends Error {
13
+ readonly targetId: string;
14
+ readonly code = "review_boundary_navigation";
15
+ constructor(targetId: string);
16
+ }
8
17
  /**
9
18
  * The pinned pi SDK never yields `session.model === undefined` for a model-less
10
19
  * boot: Agent.createMutableAgentState() falls back to a hardcoded
@@ -74,6 +83,11 @@ export declare function isLeadingEngineCommand(text: string, session: {
74
83
  name: string;
75
84
  }>;
76
85
  }): boolean;
86
+ /** A `steer` frame normally maps directly to pi's steer queue. Engine commands,
87
+ * skills, and templates must instead pass through prompt()'s leading-command
88
+ * preflight; with streamingBehavior:'steer', ordinary expanded text still lands
89
+ * in the same queue. */
90
+ export declare function resolveSteerCall(text: string, session: Parameters<typeof isLeadingEngineCommand>[1]): 'prompt' | 'steer';
77
91
  /**
78
92
  * Enumerate every leading-token STRING this session's engine would
79
93
  * independently consume as a leading command/skill/template dispatch BEFORE
@@ -205,7 +219,7 @@ interface PendingDialog {
205
219
  * bash children. No-op before the session is built or after a clean dispose. */
206
220
  export declare function disposeActiveSession(): void;
207
221
  export declare function runBroker(nodeId: string, startupAt?: bigint, startupTs?: string): Promise<void>;
208
- export declare function snapshotMessages(session: CreateAgentSessionResult['session']): BrokerSnapshot['messages'];
222
+ export declare function snapshotMessages(session: CreateAgentSessionResult['session'], reviewCompanion?: boolean): BrokerSnapshot['messages'];
209
223
  export declare function buildBrokerSession(engine: BrokerEngine, cfg: BrokerSdkConfig): Promise<{
210
224
  session: CreateAgentSessionResult['session'];
211
225
  services: AgentSessionServices;