@north-light/crouter 0.3.172 → 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} +106 -177
  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 +55 -0
  46. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/provider-rotation.ts +60 -0
  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
@@ -1,57 +0,0 @@
1
- import assert from 'node:assert/strict';
2
- import { existsSync, readFileSync, readdirSync, statSync } from 'node:fs';
3
- import { dirname, join } from 'node:path';
4
- import test from 'node:test';
5
- import { fileURLToPath } from 'node:url';
6
- const HERE = dirname(fileURLToPath(import.meta.url));
7
- const ROOT = join(HERE, '..', '..', '..');
8
- const EXTENSIONS = join(ROOT, 'builtin-pi-packages', 'pi-crtr-extensions', 'extensions');
9
- function read(path) {
10
- return readFileSync(path, 'utf8');
11
- }
12
- function tsFiles(dir) {
13
- return readdirSync(dir)
14
- .flatMap((entry) => {
15
- const path = join(dir, entry);
16
- const stat = statSync(path);
17
- if (stat.isDirectory())
18
- return entry === 'node_modules' ? [] : tsFiles(path);
19
- return path.endsWith('.ts') ? [path] : [];
20
- });
21
- }
22
- test('crtr slash-command output is stamped with the rendered crtr-output message type', () => {
23
- const source = read(join(EXTENSIONS, 'crtr-commands', 'index.ts'));
24
- assert.match(source, /pi\.sendMessage\(\s*\{[\s\S]*customType:\s*["']crtr-output["'][\s\S]*content:\s*`\$ crtr/);
25
- });
26
- test('every extension message that displays `$ crtr ...` output uses crtr-output', () => {
27
- const offenders = [];
28
- for (const file of tsFiles(EXTENSIONS)) {
29
- const source = read(file);
30
- const crtrOutputBlocks = [...source.matchAll(/pi\.sendMessage\(\s*\{[\s\S]*?\}\s*,/g)];
31
- for (const match of crtrOutputBlocks) {
32
- const block = match[0];
33
- if (!block.includes('$ crtr'))
34
- continue;
35
- if (!/customType:\s*["']crtr-output["']/.test(block))
36
- offenders.push(file);
37
- }
38
- }
39
- assert.deepEqual(offenders, []);
40
- });
41
- test('the broker bundle does not re-duplicate the attach viewer\'s crtr renderer', () => {
42
- // The broker only ever runs pi in mode:'rpc' (broker.ts), and non-TUI modes
43
- // never call renderCall/renderResult/registerMessageRenderer hooks (only
44
- // interactive TUI mode does). crtr output rendering lives solely in the
45
- // attach viewer's render/crtr-output.ts — this file must not exist in the
46
- // broker's extension set.
47
- assert.equal(existsSync(join(EXTENSIONS, 'crtr-bash-renderer.ts')), false);
48
- });
49
- test('the attach viewer covers crtr bash tool calls and crtr-output messages natively', () => {
50
- const chatView = read(join(ROOT, 'clients', 'attach', 'render/chat-view.ts'));
51
- assert.match(chatView, /CRTR_OUTPUT_CUSTOM_TYPE/);
52
- assert.match(chatView, /new CrtrOutputMessageComponent\(/);
53
- assert.match(chatView, /createCrtrBashToolDefinition\(args,\s*fold\)/);
54
- // MinimizableToolComponent is the viewer's ToolExecutionComponent subclass (it
55
- // adds the Ctrl+O minimized state); the crtr tool definition still threads through it.
56
- assert.match(chatView, /new MinimizableToolComponent\([\s\S]*toolDefinition as never/);
57
- });
@@ -1,19 +0,0 @@
1
- import { test } from 'node:test';
2
- import assert from 'node:assert/strict';
3
- import { editorLabel } from '../../../core/canvas/labels.js';
4
- import { displayEditorTitle } from '../session/editor-frame.js';
5
- test('a reloaded renamed session still shows its generated icon', () => {
6
- const identity = { kind: 'general', mode: 'base', icon: '\uf188' };
7
- assert.equal(displayEditorTitle('test', identity), '\uf188 test');
8
- assert.equal(displayEditorTitle('\uf188 test', identity), '\uf188 test');
9
- });
10
- test('a node restart restores the explicit editor name instead of the generated description', () => {
11
- const meta = {
12
- name: 'test',
13
- kind: 'general',
14
- mode: 'base',
15
- description: 'preserve-icon-on-rename',
16
- icon: '\uf188',
17
- };
18
- assert.equal(editorLabel(meta), '\uf188 test');
19
- });
@@ -1,32 +0,0 @@
1
- import assert from 'node:assert/strict';
2
- import test from 'node:test';
3
- import { InputController } from '../input/controller.js';
4
- function controller(sent) {
5
- const editor = {
6
- onSubmit: undefined,
7
- onEscape: undefined,
8
- onPasteImage: undefined,
9
- onPasteImagePath: undefined,
10
- onAction: () => { },
11
- addToHistory: () => { },
12
- setText: () => { },
13
- getText: () => '',
14
- insertTextAtCursor: () => { },
15
- };
16
- const input = new InputController({}, editor, { matches: () => false }, { onCommand: (frame) => sent.push(frame), onDialogResponse: () => { } });
17
- return {
18
- submit: (text) => editor.onSubmit(text),
19
- setStreaming: (streaming) => input.setState({ isStreaming: streaming }),
20
- };
21
- }
22
- test('an unrecognized slash command reaches the broker for extension dispatch', () => {
23
- const sent = [];
24
- const input = controller(sent);
25
- input.submit('/recap');
26
- input.setStreaming(true);
27
- input.submit('/recap refresh');
28
- assert.deepEqual(sent, [
29
- { type: 'prompt', text: '/recap' },
30
- { type: 'steer', text: '/recap refresh' },
31
- ]);
32
- });
@@ -1,35 +0,0 @@
1
- import assert from 'node:assert/strict';
2
- import test from 'node:test';
3
- import { initTheme } from '@earendil-works/pi-coding-agent';
4
- import { styleAttachMarkdownHeadings, styleAttachMessageMarkdown } from '../render/markdown-headings.js';
5
- initTheme('default');
6
- test('keeps primary headings with pi-tui and decorates lower terminal headings without markers', () => {
7
- const source = '# Title\n\n## Section\n\n### Detail\n\n#### Label';
8
- const rendered = styleAttachMarkdownHeadings(source);
9
- assert.match(rendered, /## Section/, 'H2 retains pi-tui’s accent treatment');
10
- assert.match(rendered, /\x1b\[[^m]+mDetail/, 'H3 receives its cool terminal color');
11
- assert.match(rendered, /\x1b\[[^m]+mLabel/, 'H4 receives its muted terminal color');
12
- assert.doesNotMatch(rendered, /###|####/, 'decorated heading markers are omitted');
13
- });
14
- test('does not decorate Markdown examples inside fenced code', () => {
15
- const source = '### Detail\n\n```md\n### Example\n#### Label\n```';
16
- const rendered = styleAttachMarkdownHeadings(source);
17
- assert.match(rendered, /^\x1b\[[^m]+mDetail/, 'real heading is decorated without its marker');
18
- assert.match(rendered, /```md\n### Example\n#### Label\n```$/, 'fenced source remains literal');
19
- });
20
- test('copies message blocks for terminal-only decoration', () => {
21
- const source = { content: [{ type: 'text', text: '### Detail' }, { type: 'toolCall', id: 't1' }] };
22
- const rendered = styleAttachMessageMarkdown(source);
23
- assert.notEqual(rendered, source);
24
- assert.equal(source.content[0].text, '### Detail', 'broker message remains unmodified');
25
- assert.match(rendered.content[0].text, /^\x1b\[[^m]+mDetail/);
26
- assert.equal(rendered.content[1], source.content[1], 'non-Markdown blocks preserve identity');
27
- });
28
- test('expands private-use codepoint references to glyphs, and only those', () => {
29
- const source = { content: [{ type: 'text', text: 'icons: U+F188 U+F0001 — not U+0041 or U+241C, nor MU+FFFF' }] };
30
- const rendered = styleAttachMessageMarkdown(source);
31
- const text = rendered.content[0].text;
32
- assert.match(text, new RegExp(`icons: ${String.fromCodePoint(0xf188)} ${String.fromCodePoint(0xf0001)}`), 'PUA references become their glyphs');
33
- assert.match(text, /not U\+0041 or U\+241C/, 'ordinary codepoint references stay as text');
34
- assert.match(text, /MU\+FFFF/, 'a reference glued to a word is not a reference');
35
- });
@@ -1,32 +0,0 @@
1
- import { test } from 'node:test';
2
- import assert from 'node:assert/strict';
3
- import { createFrameHandler } from '../session/frames.js';
4
- test('a regenerated session title refreshes the cached canvas icon', () => {
5
- let identityRefreshes = 0;
6
- const noop = () => { };
7
- const effects = {
8
- foldState: noop,
9
- chat: {
10
- applySnapshot: noop,
11
- handleEvent: noop,
12
- setWorkingActivity: noop,
13
- bashStart: noop,
14
- bashOutput: noop,
15
- bashEnd: noop,
16
- applyToolGroupSummary: noop,
17
- },
18
- setNotice: noop,
19
- renderFooter: noop,
20
- setEditorText: noop,
21
- attachDialog: noop,
22
- dismissDialog: noop,
23
- setCommands: noop,
24
- resetMemoryRefs: noop,
25
- refreshNodeIdentity: () => { identityRefreshes += 1; },
26
- reloadBindings: noop,
27
- modelThinkingLabel: () => undefined,
28
- };
29
- const handler = createFrameHandler({ socket: { send: noop } }, effects);
30
- handler({ type: 'session_info_changed', name: '\uf14e compass-recap' });
31
- assert.equal(identityRefreshes, 1);
32
- });
@@ -1,65 +0,0 @@
1
- import { type TUI } from '@earendil-works/pi-tui';
2
- import type { CanvasSource } from '../../core/canvas/source.js';
3
- import { type SessionState } from '../../core/session-model/session-state.js';
4
- import { ChatView } from '../attach/render/chat-view.js';
5
- import { type TranscriptViewport } from '../attach/render/viewport.js';
6
- export type ConnectionState = 'connecting' | 'connected' | 'reconnecting' | 'dormant' | 'finished' | 'gone';
7
- export interface SurfaceConversationOptions {
8
- nodeId: string;
9
- /** Required by ChatView; this unit never drives the TUI directly. */
10
- tui: TUI;
11
- /** The reconnect supervisor's give-up read. */
12
- canvasSource: CanvasSource;
13
- /** The owning region's only repaint channel. */
14
- onDirty(): void;
15
- onConnection(state: ConnectionState): void;
16
- /** One new transcript message, so an unread tally counts arrivals rather than
17
- * repaints (a streaming spinner invalidates continuously). */
18
- onMessage(): void;
19
- /** Request the review owner's canonical reopen operation when the attached broker is dormant. */
20
- reopenDormantCompanion(): Promise<void>;
21
- /** Region-scoped feedback, never a viewer-host notice. */
22
- notice(text: string): void;
23
- }
24
- /**
25
- * A reusable local controller connection for a companion node. It deliberately
26
- * attaches to the companion broker. Its owner supplies the canonical review
27
- * reopen operation for dormant input; this unit never revives a node itself.
28
- */
29
- export declare class SurfaceConversation {
30
- readonly chatView: ChatView;
31
- readonly viewport: TranscriptViewport;
32
- private readonly nodeId;
33
- private readonly canvasSource;
34
- private readonly onDirty;
35
- private readonly onConnection;
36
- private readonly onMessage;
37
- private readonly notice;
38
- private readonly reopenDormantCompanion;
39
- private readonly socket;
40
- private readonly role;
41
- private session;
42
- private state;
43
- private tornDown;
44
- private opened;
45
- private reconnect;
46
- private readonly queuedInputs;
47
- private reopeningDormantCompanion;
48
- constructor(opts: SurfaceConversationOptions);
49
- connection(): ConnectionState;
50
- sessionState(): SessionState;
51
- /** Connect only to the already-running companion broker. */
52
- open(): Promise<void>;
53
- /** Submit through the one shared classifier; this unit has no slash chrome. */
54
- submit(text: string): void;
55
- abort(): void;
56
- /** Stop redial first, then detach this client without changing node lifecycle. */
57
- close(): void;
58
- private installReconnect;
59
- private send;
60
- private reopenDormant;
61
- private liveInputFrame;
62
- private flushQueuedInputs;
63
- private setConnection;
64
- private dirty;
65
- }
@@ -1,318 +0,0 @@
1
- // conversation/conversation.ts — a headless broker-backed companion conversation.
2
- //
3
- // The review daemon owns companion liveness. This unit only connects to the
4
- // existing view.sock and projects its broker frames into reusable chat state.
5
- import { randomUUID } from 'node:crypto';
6
- import { Container } from '@earendil-works/pi-tui';
7
- import { BrokerClient } from '../../core/broker-client/index.js';
8
- import { initialSessionState, reduce } from '../../core/session-model/session-state.js';
9
- import { ChatView } from '../attach/render/chat-view.js';
10
- import { createTranscriptViewport } from '../attach/render/viewport.js';
11
- import { resolveHelloRole } from '../attach/session/connection.js';
12
- import { createReconnect } from '../attach/session/reconnect.js';
13
- import { classifySubmit } from './submit.js';
14
- import { createCompanionFrameHandler } from './frames.js';
15
- /**
16
- * A reusable local controller connection for a companion node. It deliberately
17
- * attaches to the companion broker. Its owner supplies the canonical review
18
- * reopen operation for dormant input; this unit never revives a node itself.
19
- */
20
- export class SurfaceConversation {
21
- chatView;
22
- viewport;
23
- nodeId;
24
- canvasSource;
25
- onDirty;
26
- onConnection;
27
- onMessage;
28
- notice;
29
- reopenDormantCompanion;
30
- socket;
31
- role = resolveHelloRole(false, false);
32
- session = initialSessionState(this.role);
33
- state = 'connecting';
34
- tornDown = false;
35
- opened = false;
36
- reconnect;
37
- queuedInputs = [];
38
- reopeningDormantCompanion = false;
39
- constructor(opts) {
40
- this.nodeId = opts.nodeId;
41
- this.canvasSource = opts.canvasSource;
42
- this.onDirty = opts.onDirty;
43
- this.onConnection = opts.onConnection;
44
- this.onMessage = opts.onMessage;
45
- this.notice = opts.notice;
46
- this.reopenDormantCompanion = opts.reopenDormantCompanion;
47
- this.socket = new BrokerClient(opts.nodeId);
48
- const chatContainer = new Container();
49
- // ChatView and its self-updating children only receive an invalidation
50
- // facade. Their requestRender calls return through the owning region rather
51
- // than bypassing it to repaint the outer attach TUI directly.
52
- const chatTui = {
53
- requestRender: () => this.dirty(),
54
- terminal: opts.tui.terminal,
55
- };
56
- this.chatView = new ChatView(chatTui, chatContainer, {
57
- onActivityChange: () => this.dirty(),
58
- });
59
- this.viewport = createTranscriptViewport(this.chatView.transcriptSource());
60
- }
61
- connection() {
62
- return this.state;
63
- }
64
- sessionState() {
65
- return this.session;
66
- }
67
- /** Connect only to the already-running companion broker. */
68
- open() {
69
- if (this.opened)
70
- return Promise.resolve();
71
- if (this.tornDown)
72
- return Promise.reject(new Error('surface conversation is closed'));
73
- this.opened = true;
74
- this.setConnection('connecting');
75
- return new Promise((resolve, reject) => {
76
- const onConnect = () => {
77
- cleanup();
78
- this.installReconnect();
79
- this.reconnect?.sendHello();
80
- resolve();
81
- };
82
- const onError = (error) => {
83
- cleanup();
84
- this.opened = false;
85
- this.notice(`couldn't connect to companion: ${error.message}`);
86
- this.dirty();
87
- reject(error);
88
- };
89
- const cleanup = () => {
90
- this.socket.off('connect', onConnect);
91
- this.socket.off('error', onError);
92
- };
93
- this.socket.once('connect', onConnect);
94
- this.socket.once('error', onError);
95
- this.socket.connect();
96
- });
97
- }
98
- /** Submit through the one shared classifier; this unit has no slash chrome. */
99
- submit(text) {
100
- if (this.tornDown || this.state === 'finished' || this.state === 'gone') {
101
- this.notice('companion is no longer available');
102
- this.dirty();
103
- return;
104
- }
105
- if (this.state === 'connecting' || this.state === 'reconnecting') {
106
- const frame = this.liveInputFrame(text);
107
- if (frame === undefined)
108
- return;
109
- this.queuedInputs.push(frame);
110
- this.notice('companion is reconnecting — input queued');
111
- this.dirty();
112
- return;
113
- }
114
- const classification = classifySubmit(text, {
115
- isDormant: this.reconnect?.isDormant() === true,
116
- canWakeDormant: true,
117
- isStreaming: this.session.engine?.isStreaming === true,
118
- });
119
- switch (classification.kind) {
120
- case 'empty':
121
- return;
122
- case 'dormant':
123
- void this.reopenDormant({ type: 'prompt', text: classification.text });
124
- return;
125
- case 'bash':
126
- this.send({ type: 'bash', command: classification.command, excludeFromContext: classification.excludeFromContext });
127
- return;
128
- case 'steer':
129
- this.send({ type: 'steer', text: classification.text });
130
- return;
131
- case 'slash':
132
- // This column has no slash dispatcher. A slash is ordinary companion
133
- // input, so a dormant broker still needs the review-owned reopen path.
134
- if (this.reconnect?.isDormant() === true) {
135
- void this.reopenDormant({ type: 'prompt', text });
136
- return;
137
- }
138
- this.send({ type: 'prompt', text });
139
- return;
140
- case 'prompt':
141
- this.send({ type: 'prompt', text });
142
- return;
143
- }
144
- }
145
- abort() {
146
- this.send({ type: 'abort' });
147
- }
148
- /** Stop redial first, then detach this client without changing node lifecycle. */
149
- close() {
150
- if (this.tornDown)
151
- return;
152
- this.tornDown = true;
153
- this.reconnect?.stop();
154
- try {
155
- this.socket.send({ type: 'bye' });
156
- }
157
- catch {
158
- // BrokerClient send is best-effort; a close race is ordinary teardown.
159
- }
160
- this.socket.close();
161
- try {
162
- this.chatView.dispose();
163
- }
164
- catch {
165
- // A stale pi component must not block host cleanup.
166
- }
167
- }
168
- installReconnect() {
169
- if (this.reconnect !== undefined)
170
- return;
171
- const nodeDone = () => this.setConnection('finished');
172
- const handleFrame = createCompanionFrameHandler({
173
- foldState: (frame) => {
174
- this.session = reduce(this.session, frame);
175
- this.dirty();
176
- },
177
- chat: {
178
- applySnapshot: (snapshot) => {
179
- const applied = this.chatView.applySnapshot(snapshot);
180
- this.dirty();
181
- return applied;
182
- },
183
- handleEvent: (event) => {
184
- this.chatView.handleEvent(event);
185
- if (event.type === 'message_start')
186
- this.onMessage();
187
- this.dirty();
188
- },
189
- bashStart: (command, excludeFromContext) => {
190
- this.chatView.bashStart(command, excludeFromContext);
191
- this.dirty();
192
- },
193
- bashOutput: (chunk) => {
194
- this.chatView.bashOutput(chunk);
195
- this.dirty();
196
- },
197
- bashEnd: (frame) => {
198
- this.chatView.bashEnd(frame);
199
- this.dirty();
200
- },
201
- applyToolGroupSummary: (key, summary) => {
202
- this.chatView.applyToolGroupSummary(key, summary);
203
- this.dirty();
204
- },
205
- },
206
- setConnection: () => {
207
- this.setConnection('connected');
208
- this.flushQueuedInputs();
209
- },
210
- notice: (text) => {
211
- this.notice(text);
212
- this.dirty();
213
- },
214
- declineDialog: (request) => this.socket.send({ type: 'extension_ui_response', id: request.id, cancelled: true }),
215
- onNodeDone: nodeDone,
216
- });
217
- this.reconnect = createReconnect({ nodeId: this.nodeId, socket: this.socket, canvasSource: this.canvasSource }, {
218
- role: this.role,
219
- clientId: randomUUID(),
220
- onFrame: handleFrame,
221
- setNotice: (text) => {
222
- if (text)
223
- this.setConnection('reconnecting');
224
- this.notice(text);
225
- this.dirty();
226
- },
227
- isTornDown: () => this.tornDown,
228
- teardown: (reason) => {
229
- if (reason === 'node-done')
230
- nodeDone();
231
- else
232
- this.setConnection('gone');
233
- },
234
- onEnterDormancy: () => {
235
- this.chatView.settleRun();
236
- this.session = this.session.engine === undefined
237
- ? this.session
238
- : { ...this.session, engine: { ...this.session.engine, isStreaming: false } };
239
- this.setConnection('dormant');
240
- },
241
- });
242
- this.reconnect.install();
243
- }
244
- send(frame) {
245
- if (this.tornDown || this.state === 'finished' || this.state === 'gone') {
246
- this.notice('companion is no longer available');
247
- this.dirty();
248
- return;
249
- }
250
- if (this.state === 'connecting' || this.state === 'reconnecting') {
251
- this.notice('companion is reconnecting — input was not sent');
252
- this.dirty();
253
- return;
254
- }
255
- this.socket.send(frame);
256
- }
257
- async reopenDormant(frame) {
258
- this.queuedInputs.push(frame);
259
- if (this.reopeningDormantCompanion) {
260
- this.notice('↻ waking companion — input queued');
261
- this.dirty();
262
- return;
263
- }
264
- this.reopeningDormantCompanion = true;
265
- this.setConnection('reconnecting');
266
- try {
267
- await this.reopenDormantCompanion();
268
- this.notice('↻ waking companion…');
269
- }
270
- catch (error) {
271
- this.setConnection('dormant');
272
- this.notice(`couldn't reopen companion; input is queued: ${error instanceof Error ? error.message : String(error)}`);
273
- }
274
- finally {
275
- this.reopeningDormantCompanion = false;
276
- this.flushQueuedInputs();
277
- this.dirty();
278
- }
279
- }
280
- liveInputFrame(text) {
281
- const classification = classifySubmit(text, {
282
- isDormant: false,
283
- canWakeDormant: false,
284
- isStreaming: this.session.engine?.isStreaming === true,
285
- });
286
- switch (classification.kind) {
287
- case 'empty':
288
- return undefined;
289
- case 'bash':
290
- return { type: 'bash', command: classification.command, excludeFromContext: classification.excludeFromContext };
291
- case 'steer':
292
- return { type: 'steer', text: classification.text };
293
- case 'slash':
294
- case 'prompt':
295
- return { type: 'prompt', text };
296
- case 'dormant':
297
- throw new Error('live companion input cannot be dormant');
298
- }
299
- }
300
- flushQueuedInputs() {
301
- if (this.tornDown || this.reopeningDormantCompanion || this.state !== 'connected')
302
- return;
303
- for (const frame of this.queuedInputs.splice(0)) {
304
- this.socket.send(frame);
305
- }
306
- }
307
- setConnection(state) {
308
- if (this.state === state)
309
- return;
310
- this.state = state;
311
- this.onConnection(state);
312
- this.dirty();
313
- }
314
- dirty() {
315
- if (!this.tornDown)
316
- this.onDirty();
317
- }
318
- }
@@ -1,30 +0,0 @@
1
- import type { AgentSessionEvent } from '@earendil-works/pi-coding-agent';
2
- import type { BrokerToClient, RpcExtensionUIRequest } from '../../core/runtime/broker-protocol.js';
3
- import type { ToolGroupSummary } from '../../shared/tool-groups.js';
4
- export interface CompanionFrameEffects {
5
- /** Fold every broker fact through the shared session reducer before local effects. */
6
- foldState: (frame: BrokerToClient) => void;
7
- /** The only transcript writes a companion conversation performs. */
8
- chat: {
9
- applySnapshot: (snapshot: Extract<BrokerToClient, {
10
- type: 'welcome';
11
- }>['snapshot']) => Promise<void> | void;
12
- handleEvent: (event: AgentSessionEvent) => void;
13
- bashStart: (command: string, excludeFromContext?: boolean) => void;
14
- bashOutput: (chunk: string) => void;
15
- bashEnd: (frame: Extract<BrokerToClient, {
16
- type: 'bash_end';
17
- }>) => void;
18
- applyToolGroupSummary: (key: string, summary: ToolGroupSummary) => void;
19
- };
20
- /** The welcome handshake established a live broker connection. */
21
- setConnection: () => void;
22
- /** A region-scoped transient. */
23
- notice: (text: string) => void;
24
- /** Decline a blocking extension dialog rather than mounting another overlay host. */
25
- declineDialog: (request: RpcExtensionUIRequest) => void;
26
- /** The reconnect supervisor establishes terminal node completion. */
27
- onNodeDone: () => void;
28
- }
29
- /** Build the companion's deliberately small broker-frame handler. */
30
- export declare function createCompanionFrameHandler(fx: CompanionFrameEffects): (frame: BrokerToClient) => void;
@@ -1,52 +0,0 @@
1
- // conversation/frames.ts — broker-frame effects for a companion conversation.
2
- //
3
- // This is intentionally narrower than attach/session/frames.ts. A companion
4
- // column owns transcript state and connection presentation, not viewer chrome.
5
- function isBlockingDialog(request) {
6
- return request.method === 'select' || request.method === 'confirm' || request.method === 'input' || request.method === 'editor';
7
- }
8
- /** Build the companion's deliberately small broker-frame handler. */
9
- export function createCompanionFrameHandler(fx) {
10
- return (frame) => {
11
- fx.foldState(frame);
12
- switch (frame.type) {
13
- case 'welcome':
14
- void fx.chat.applySnapshot(frame.snapshot);
15
- fx.setConnection();
16
- if (frame.pending_dialog !== null && frame.pending_dialog !== undefined && isBlockingDialog(frame.pending_dialog)) {
17
- fx.declineDialog(frame.pending_dialog);
18
- fx.notice('companion asked for a dialog — open its own attach view');
19
- }
20
- return;
21
- case 'tool_group_summary':
22
- fx.chat.applyToolGroupSummary(frame.key, frame.summary);
23
- return;
24
- case 'error':
25
- fx.notice(frame.code === 'read_only' ? 'read-only' : `error: ${frame.message}`);
26
- return;
27
- case 'ack':
28
- if (!frame.ok)
29
- fx.notice(`command failed: ${frame.for}${frame.detail ? ` — ${frame.detail}` : ''}`);
30
- return;
31
- case 'extension_ui_request':
32
- if (isBlockingDialog(frame)) {
33
- fx.declineDialog(frame);
34
- fx.notice('companion asked for a dialog — open its own attach view');
35
- }
36
- return;
37
- case 'extension_ui_dismiss':
38
- return;
39
- case 'bash_start':
40
- fx.chat.bashStart(frame.command, frame.excludeFromContext);
41
- return;
42
- case 'bash_output':
43
- fx.chat.bashOutput(frame.chunk);
44
- return;
45
- case 'bash_end':
46
- fx.chat.bashEnd(frame);
47
- return;
48
- default:
49
- fx.chat.handleEvent(frame);
50
- }
51
- };
52
- }