@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
@@ -4,9 +4,10 @@ export declare class ContextMessageComponent implements Component {
4
4
  private readonly label;
5
5
  private readonly labelText;
6
6
  private readonly collapsedHint;
7
+ private readonly expandsWithTools;
7
8
  private expanded;
8
9
  private readonly expandedBody;
9
- constructor(body: string, expanded: boolean, dim: (s: string) => string, label: (s: string) => string, labelText?: string, collapsedHint?: string);
10
+ constructor(body: string, expanded: boolean, dim: (s: string) => string, label: (s: string) => string, labelText?: string, collapsedHint?: string, expandsWithTools?: boolean);
10
11
  /** Ctrl+O global tool-output toggle (ChatView.isExpandable duck-type). */
11
12
  setExpanded(expanded: boolean): void;
12
13
  render(width: number): string[];
@@ -1,12 +1,13 @@
1
1
  // render/context-message.ts — the terminal viewer's foldable renderer for
2
- // crouter-generated context. Session bearings, situational updates, fresh-revive
3
- // kickoffs, context-size nudges, and node inbox digests retain their full model-visible body and
4
- // runtime role, while this display-only component presents them consistently:
5
- // collapsed → one dim line; expanded (Ctrl+O) → the ordinary user-message
6
- // surface, regardless of the message's runtime role. It implements
7
- // `setExpanded`, so the global tool-display cycle folds these blocks alongside
8
- // tool output. Classification lives in shared/generated-context.ts; this
9
- // component only renders the presentation it is handed.
2
+ // crouter-generated context. Session bearings, situational updates, lifecycle
3
+ // steering, recovery prompts, and inbox digests retain their model-visible body
4
+ // and runtime role. This display-only component renders the disclosure body it
5
+ // receives: collapsed → a padded dim line; expanded (Ctrl+O) → the ordinary
6
+ // user-message surface, regardless of the message's runtime role. Selected
7
+ // cards implement `setExpanded` for the global tool-display cycle; other cards
8
+ // remain folded while tool output is shown. Classification and disclosure
9
+ // selection live in shared/generated-context.ts; this component only renders
10
+ // the presentation it is handed.
10
11
  import { UserMessageComponent } from '@earendil-works/pi-coding-agent';
11
12
  import { truncateToWidth, visibleWidth } from '@earendil-works/pi-tui';
12
13
  import { attachMarkdownTheme } from '../config.js';
@@ -19,19 +20,22 @@ export class ContextMessageComponent {
19
20
  label;
20
21
  labelText;
21
22
  collapsedHint;
23
+ expandsWithTools;
22
24
  expanded;
23
25
  expandedBody;
24
- constructor(body, expanded, dim, label, labelText = LABEL, collapsedHint = COLLAPSED_HINT) {
26
+ constructor(body, expanded, dim, label, labelText = LABEL, collapsedHint = COLLAPSED_HINT, expandsWithTools = true) {
25
27
  this.dim = dim;
26
28
  this.label = label;
27
29
  this.labelText = labelText;
28
30
  this.collapsedHint = collapsedHint;
29
- this.expanded = expanded;
31
+ this.expandsWithTools = expandsWithTools;
32
+ this.expanded = expandsWithTools && expanded;
30
33
  this.expandedBody = new UserMessageComponent(styleAttachMarkdownHeadings(body), attachMarkdownTheme());
31
34
  }
32
35
  /** Ctrl+O global tool-output toggle (ChatView.isExpandable duck-type). */
33
36
  setExpanded(expanded) {
34
- this.expanded = expanded;
37
+ if (this.expandsWithTools)
38
+ this.expanded = expanded;
35
39
  }
36
40
  render(width) {
37
41
  const w = width > 0 ? width : 80;
@@ -44,8 +48,8 @@ export class ContextMessageComponent {
44
48
  const rest = this.collapsedHint;
45
49
  const labelW = visibleWidth(labelTag);
46
50
  if (labelW >= w)
47
- return [this.label(truncateToWidth(labelTag, w, '…'))];
48
- return [this.label(labelTag) + this.dim(truncateToWidth(rest, w - labelW, '…'))];
51
+ return ['', this.label(truncateToWidth(labelTag, w, '…')), ''];
52
+ return ['', this.label(labelTag) + this.dim(truncateToWidth(rest, w - labelW, '…')), ''];
49
53
  }
50
54
  const lines = this.expandedBody.render(w);
51
55
  if (lines.at(-1) !== '')
@@ -651,9 +651,7 @@ class CrtrResultComponent {
651
651
  }
652
652
  return clampRenderedLines(['', ...statusLines, ...generic.lines], width);
653
653
  }
654
- invalidate() {
655
- this.context.invalidate?.();
656
- }
654
+ invalidate() { }
657
655
  }
658
656
  /** First-line convention from crtr-commands/index.ts's pi.sendMessage:
659
657
  * `$ crtr <argv>\n\n<output>`. Help-only here, never suppressOutput: this
@@ -11,14 +11,14 @@
11
11
  // byte-identical to `--color off`). So the rendered lines are safe to splice
12
12
  // back into markdown inside a plain ``` code fence — pi's Markdown then shows
13
13
  // them verbatim in monospace, no escape-code leakage, no re-wrapping.
14
- // • `renderMarkdown` (humanloop — the sole org-wide termrender caller) is
14
+ // • `renderMarkdown` (crouter's sole org-wide termrender binding) is
15
15
  // synchronous and memoized, so this is a plain string→string transform with
16
16
  // no async swap or component lifecycle.
17
17
  //
18
18
  // Scope: Mermaid and a single-line `text`/`plain`/untagged Unicode-arrow chain.
19
19
  // The wider termrender directive vocabulary remains out of scope — see the base
20
20
  // prompt's Diagrams note.
21
- import { ensureRenderer, isRendererReady, renderMarkdown } from '@crouton-kit/humanloop';
21
+ import { ensureRenderer, isRendererReady, renderMarkdown } from '../../../core/termrender/termrender.js';
22
22
  /** A complete Mermaid fence, including normal Markdown's optional three-space
23
23
  * indentation. Line-anchored (m flag), non-greedy body (captured). An unclosed
24
24
  * fence (still streaming) does not match, so mid-stream text is left raw and
@@ -1,4 +1,4 @@
1
- import { FoldedToolCallController } from './tool-calls.js';
1
+ import { FoldedToolCallController, type FileLineChanges } from './tool-calls.js';
2
2
  type ToolResultLike = {
3
3
  content?: Array<{
4
4
  type?: unknown;
@@ -14,6 +14,9 @@ export type CrtrEditToolView = {
14
14
  definition: unknown;
15
15
  observeResult: EditResultObserver;
16
16
  };
17
+ /** Count only changed rows in pi's display diff; context and ellipsis rows do
18
+ * not contribute to the folded file summary. */
19
+ export declare function countDisplayDiffLines(diff: string): FileLineChanges;
17
20
  /** Crouter owns edit presentation while the imported tool owns execution. The
18
21
  * card has two explicit phases: streamed argument diff, then executed result
19
22
  * diff. No asynchronous preview can write after settlement. */
@@ -84,11 +84,7 @@ function themeBgRgb(theme, name, fallback) {
84
84
  return fallback;
85
85
  }
86
86
  }
87
- // ---------------------------------------------------------------------------
88
- // Diff body rendering
89
- // ---------------------------------------------------------------------------
90
- /** pi's display-diff line format: "+123 content" / "-123 content" / " 123 content". */
91
- function parseDiffLine(line) {
87
+ function parseDisplayDiffLine(line) {
92
88
  const match = line.match(/^([+-\s])(\s*\d*)\s(.*)$/);
93
89
  if (!match)
94
90
  return null;
@@ -96,11 +92,11 @@ function parseDiffLine(line) {
96
92
  }
97
93
  /** Count only changed rows in pi's display diff; context and ellipsis rows do
98
94
  * not contribute to the folded file summary. */
99
- function countDiffLines(diff) {
95
+ export function countDisplayDiffLines(diff) {
100
96
  let added = 0;
101
97
  let removed = 0;
102
98
  for (const line of diff.split('\n')) {
103
- const parsed = parseDiffLine(line);
99
+ const parsed = parseDisplayDiffLine(line);
104
100
  if (parsed?.prefix === '+')
105
101
  added++;
106
102
  if (parsed?.prefix === '-')
@@ -185,7 +181,7 @@ function buildDiffBody(diffText, theme, restoreBg) {
185
181
  const lines = diffText.split('\n');
186
182
  let i = 0;
187
183
  while (i < lines.length) {
188
- const parsed = parseDiffLine(lines[i]);
184
+ const parsed = parseDisplayDiffLine(lines[i]);
189
185
  if (!parsed) {
190
186
  pushLine(theme.fg('toolDiffContext', lines[i]));
191
187
  i++;
@@ -194,7 +190,7 @@ function buildDiffBody(diffText, theme, restoreBg) {
194
190
  if (parsed.prefix === '-') {
195
191
  const removed = [];
196
192
  while (i < lines.length) {
197
- const p = parseDiffLine(lines[i]);
193
+ const p = parseDisplayDiffLine(lines[i]);
198
194
  if (!p || p.prefix !== '-')
199
195
  break;
200
196
  removed.push({ lineNum: p.lineNum, content: replaceTabs(p.content) });
@@ -202,7 +198,7 @@ function buildDiffBody(diffText, theme, restoreBg) {
202
198
  }
203
199
  const added = [];
204
200
  while (i < lines.length) {
205
- const p = parseDiffLine(lines[i]);
201
+ const p = parseDisplayDiffLine(lines[i]);
206
202
  if (!p || p.prefix !== '+')
207
203
  break;
208
204
  added.push({ lineNum: p.lineNum, content: replaceTabs(p.content) });
@@ -281,7 +277,7 @@ export function createCrtrEditToolDefinition(cwd, fold = new FoldedToolCallContr
281
277
  renderShell: 'self',
282
278
  renderCall(args, theme, context) {
283
279
  const diff = state.settled ? state.diff : streamedArgumentDiff(args);
284
- const changes = state.settled && !state.isError && state.diff ? countDiffLines(state.diff) : undefined;
280
+ const changes = state.settled && !state.isError && state.diff ? countDisplayDiffLines(state.diff) : undefined;
285
281
  const header = foldedFileCallLine('edit', editPath(args), theme, context.cwd ?? cwd, changes);
286
282
  if (fold.folded)
287
283
  return fold.capture(new Text(header, 0, 0));
@@ -0,0 +1,32 @@
1
+ export type FileActivity = {
2
+ key: string;
3
+ displayPath: string;
4
+ kind: 'edit' | 'write';
5
+ added: number;
6
+ removed: number;
7
+ hasKnownCounts: boolean;
8
+ countsIncomplete: boolean;
9
+ };
10
+ export type MemoryActivity = {
11
+ name: string;
12
+ path?: string;
13
+ };
14
+ export type GroupActivity = {
15
+ files: readonly FileActivity[];
16
+ memories: readonly MemoryActivity[];
17
+ };
18
+ /** Per-group recorder. Calls retain only their current transcript references
19
+ * until they settle; the settled activity is plain immutable evidence. */
20
+ export declare class GroupActivityRecorder {
21
+ private readonly cwd;
22
+ private readonly calls;
23
+ private readonly files;
24
+ private readonly memories;
25
+ private readonly memorySet;
26
+ constructor(cwd: string);
27
+ noteCall(id: string, name: string, args: unknown): void;
28
+ settle(id: string, result: unknown, isError: boolean): void;
29
+ resolveWithoutResult(id: string): void;
30
+ activity(): GroupActivity;
31
+ private extract;
32
+ }
@@ -0,0 +1,206 @@
1
+ // Deterministic, transcript-derived activity evidence for one folded tool group.
2
+ // This deliberately knows no rendering or broker state: it reduces completed
3
+ // calls into the exact evidence already present in the session transcript.
4
+ import { homedir } from 'node:os';
5
+ import { join, resolve } from 'node:path';
6
+ import { countDisplayDiffLines } from './edit-diff.js';
7
+ const EMPTY_ACTIVITY = Object.freeze({
8
+ files: Object.freeze([]),
9
+ memories: Object.freeze([]),
10
+ });
11
+ function object(value) {
12
+ return typeof value === 'object' && value !== null ? value : undefined;
13
+ }
14
+ function filePath(args) {
15
+ const value = object(args);
16
+ const path = value?.file_path ?? value?.path;
17
+ return typeof path === 'string' && path !== '' ? path : undefined;
18
+ }
19
+ function resultText(result) {
20
+ const content = object(result)?.content;
21
+ if (typeof content === 'string')
22
+ return content;
23
+ if (!Array.isArray(content))
24
+ return '';
25
+ return content
26
+ .flatMap((part) => {
27
+ const value = object(part);
28
+ return value?.type === 'text' && typeof value.text === 'string' ? [value.text] : [];
29
+ })
30
+ .join('');
31
+ }
32
+ function lineCount(content) {
33
+ if (content.length === 0)
34
+ return 0;
35
+ return (content.match(/\n/g)?.length ?? 0) + (content.endsWith('\n') ? 0 : 1);
36
+ }
37
+ /** Shell-level command segments only: a quoted `crtr memory read` is data, not
38
+ * an invocation. This intentionally handles the same separators the viewer's
39
+ * command preview treats as command boundaries. */
40
+ function shellSegments(command) {
41
+ const segments = [];
42
+ let segment = '';
43
+ let quote;
44
+ for (let i = 0; i < command.length; i++) {
45
+ const char = command[i];
46
+ if (char === '\\' && quote !== "'") {
47
+ segment += char + (command[++i] ?? '');
48
+ continue;
49
+ }
50
+ if (quote !== undefined) {
51
+ if (char === quote)
52
+ quote = undefined;
53
+ segment += char;
54
+ continue;
55
+ }
56
+ if (char === '"' || char === "'") {
57
+ quote = char;
58
+ segment += char;
59
+ continue;
60
+ }
61
+ if (char === '\n' || char === ';' || char === '|' || char === '&' || char === '(' || char === ')') {
62
+ if (segment.trim())
63
+ segments.push(segment);
64
+ segment = '';
65
+ continue;
66
+ }
67
+ segment += char;
68
+ }
69
+ if (segment.trim())
70
+ segments.push(segment);
71
+ return segments;
72
+ }
73
+ function shellTokens(segment) {
74
+ return segment.match(/"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*'|\S+/g)?.map((token) => token.length >= 2 && ((token.startsWith('"') && token.endsWith('"')) || (token.startsWith("'") && token.endsWith("'")))
75
+ ? token.slice(1, -1)
76
+ : token) ?? [];
77
+ }
78
+ /** Deliberately match an executable token, not a result-shaped string or a
79
+ * quoted command fragment. */
80
+ function invokesMemoryRead(args) {
81
+ const command = object(args)?.command;
82
+ if (typeof command !== 'string')
83
+ return false;
84
+ return shellSegments(command).some((segment) => {
85
+ const tokens = shellTokens(segment);
86
+ while (/^[A-Za-z_][A-Za-z0-9_]*=\S+$/.test(tokens[0] ?? ''))
87
+ tokens.shift();
88
+ const executable = tokens[0]?.split('/').at(-1);
89
+ return (executable === 'crtr' || executable === 'crouter') && tokens[1] === 'memory' && tokens[2] === 'read';
90
+ });
91
+ }
92
+ /** A resolved read starts with the complete three-line identity emitted by
93
+ * `memory read`; its source path follows as optional display metadata. Links and
94
+ * discovery output intentionally do not satisfy this shape. */
95
+ function resolvedMemories(result) {
96
+ const memories = [];
97
+ const identity = /^- name:\s*([^\r\n]+)\r?\n- kind:\s*[^\r\n]+\r?\n- scope:\s*[^\r\n]+(?:\r?\n- path:\s*([^\r\n]+)|\r?\n\r?\n\*\*path:\*\*\s*([^\r\n]+))?/gm;
98
+ for (const match of resultText(result).matchAll(identity)) {
99
+ const name = match[1]?.trim();
100
+ const path = (match[2] ?? match[3])?.trim();
101
+ if (name)
102
+ memories.push(path ? { name, path } : { name });
103
+ }
104
+ return memories;
105
+ }
106
+ /** Local mirror of pi's `resolveToCwd`: file tools expand `~` before resolving
107
+ * against the node cwd, and the recap must key the exact same file identically. */
108
+ function canonicalPath(rawPath, cwd) {
109
+ const normalized = rawPath === '~'
110
+ ? homedir()
111
+ : rawPath.startsWith('~/') ? join(homedir(), rawPath.slice(2)) : rawPath;
112
+ return resolve(cwd, normalized);
113
+ }
114
+ function fileChange(name, args, result) {
115
+ if (name === 'edit') {
116
+ const diff = object(object(result)?.details)?.diff;
117
+ return typeof diff === 'string'
118
+ ? { kind: 'edit', ...countDisplayDiffLines(diff), known: true }
119
+ : { kind: 'edit', added: 0, removed: 0, known: false };
120
+ }
121
+ if (name === 'write') {
122
+ const content = object(args)?.content;
123
+ return typeof content === 'string'
124
+ ? { kind: 'write', added: lineCount(content), removed: 0, known: true }
125
+ : { kind: 'write', added: 0, removed: 0, known: false };
126
+ }
127
+ return undefined;
128
+ }
129
+ /** Per-group recorder. Calls retain only their current transcript references
130
+ * until they settle; the settled activity is plain immutable evidence. */
131
+ export class GroupActivityRecorder {
132
+ cwd;
133
+ calls = new Map();
134
+ files = new Map();
135
+ memories = [];
136
+ memorySet = new Set();
137
+ constructor(cwd) {
138
+ this.cwd = cwd;
139
+ }
140
+ noteCall(id, name, args) {
141
+ const existing = this.calls.get(id);
142
+ if (existing?.settled)
143
+ return;
144
+ this.calls.set(id, { name, args, settled: false });
145
+ }
146
+ settle(id, result, isError) {
147
+ const entry = this.calls.get(id);
148
+ if (!entry || entry.settled)
149
+ return;
150
+ entry.settled = true;
151
+ if (!isError && object(result)?.isError !== true)
152
+ this.extract(entry, result);
153
+ // Release message-owned references after the operation is reduced.
154
+ entry.args = undefined;
155
+ }
156
+ resolveWithoutResult(id) {
157
+ const entry = this.calls.get(id);
158
+ if (!entry || entry.settled)
159
+ return;
160
+ entry.settled = true;
161
+ entry.args = undefined;
162
+ }
163
+ activity() {
164
+ if (this.files.size === 0 && this.memories.length === 0)
165
+ return EMPTY_ACTIVITY;
166
+ const files = [...this.files.values()].map((file) => Object.freeze({ ...file }));
167
+ const memories = this.memories.map((memory) => Object.freeze({ ...memory }));
168
+ return Object.freeze({ files: Object.freeze(files), memories: Object.freeze(memories) });
169
+ }
170
+ extract(entry, result) {
171
+ if (entry.name === 'bash' && invokesMemoryRead(entry.args)) {
172
+ for (const memory of resolvedMemories(result)) {
173
+ if (!this.memorySet.has(memory.name)) {
174
+ this.memorySet.add(memory.name);
175
+ this.memories.push(memory);
176
+ }
177
+ }
178
+ return;
179
+ }
180
+ const rawPath = filePath(entry.args);
181
+ const change = fileChange(entry.name, entry.args, result);
182
+ if (!rawPath || !change)
183
+ return;
184
+ const pathKey = canonicalPath(rawPath, this.cwd);
185
+ // Keep edits and writes distinct: a write is its own durable action even
186
+ // when it touches a path already changed by an edit in this group.
187
+ const key = `${change.kind}:${pathKey}`;
188
+ let file = this.files.get(key);
189
+ if (!file) {
190
+ file = {
191
+ key: pathKey,
192
+ displayPath: rawPath,
193
+ kind: change.kind,
194
+ added: 0,
195
+ removed: 0,
196
+ hasKnownCounts: false,
197
+ countsIncomplete: false,
198
+ };
199
+ this.files.set(key, file);
200
+ }
201
+ file.added += change.added;
202
+ file.removed += change.removed;
203
+ file.hasKnownCounts ||= change.known;
204
+ file.countsIncomplete ||= !change.known;
205
+ }
206
+ }
@@ -0,0 +1,10 @@
1
+ import { Container } from '@earendil-works/pi-tui';
2
+ import type { AttachPalette } from '../config.js';
3
+ import type { ToolGroupSummary } from '../../../shared/tool-groups.js';
4
+ import type { GroupActivity } from './group-activity.js';
5
+ /** Direct history child for a folded group. It is empty (zero rows) unless the
6
+ * group is eligible to collapse, preserving the member rows for Ctrl+O. */
7
+ export declare class GroupRecapComponent extends Container {
8
+ setRecap(summary: ToolGroupSummary | undefined, toolCount: number, activity: GroupActivity, detailed: boolean, palette: AttachPalette): void;
9
+ private addFile;
10
+ }
@@ -0,0 +1,93 @@
1
+ // Folded visual recap for one broker-summarized tool group. All evidence arrives
2
+ // pre-reduced from GroupActivityRecorder; this component owns only layout/color.
3
+ import { Container, Spacer, Text, getCapabilities, hyperlink, truncateToWidth, visibleWidth } from '@earendil-works/pi-tui';
4
+ import { homedir } from 'node:os';
5
+ import { pathToFileURL } from 'node:url';
6
+ import { ICON } from '../../../core/inspector/model.js';
7
+ import { TOOL_ICON } from '../../../core/preview-registry.js';
8
+ const MEMORY_ICON = String.fromCodePoint(0xf02d);
9
+ function count(value, singular, plural) {
10
+ return `${value} ${value === 1 ? singular : plural}`;
11
+ }
12
+ function shortened(path) {
13
+ const home = homedir();
14
+ return path.startsWith(home) ? `~${path.slice(home.length)}` : path;
15
+ }
16
+ function filePath(file) {
17
+ const path = shortened(file.displayPath);
18
+ return getCapabilities().hyperlinks ? hyperlink(path, pathToFileURL(file.key).href) : path;
19
+ }
20
+ function memoryName(memory, palette) {
21
+ const name = palette.muted(memory.name);
22
+ return memory.path && getCapabilities().hyperlinks
23
+ ? hyperlink(name, pathToFileURL(memory.path).href)
24
+ : name;
25
+ }
26
+ function distinctFileCount(files) {
27
+ return new Set(files.map((file) => file.key)).size;
28
+ }
29
+ class RecapDetailLine {
30
+ prefix;
31
+ path;
32
+ suffix;
33
+ constructor(prefix, path, suffix) {
34
+ this.prefix = prefix;
35
+ this.path = path;
36
+ this.suffix = suffix;
37
+ }
38
+ invalidate() { }
39
+ render(width) {
40
+ const pathWidth = Math.max(1, width - visibleWidth(this.prefix) - visibleWidth(this.suffix));
41
+ const path = truncateToWidth(this.path, pathWidth, '…');
42
+ return [truncateToWidth(`${this.prefix}${path}${this.suffix}`, width, '')];
43
+ }
44
+ }
45
+ /** Direct history child for a folded group. It is empty (zero rows) unless the
46
+ * group is eligible to collapse, preserving the member rows for Ctrl+O. */
47
+ export class GroupRecapComponent extends Container {
48
+ setRecap(summary, toolCount, activity, detailed, palette) {
49
+ this.clear();
50
+ if (!summary)
51
+ return;
52
+ this.addChild(new Spacer(1));
53
+ if (detailed) {
54
+ for (const memory of activity.memories) {
55
+ this.addChild(new RecapDetailLine(`${palette.info(MEMORY_ICON)} `, memoryName(memory, palette), ''));
56
+ }
57
+ for (const file of activity.files)
58
+ this.addFile(file, palette);
59
+ }
60
+ const toolCallCount = `${palette.active(TOOL_ICON.bash)} ${palette.muted(count(toolCount, 'tool call', 'tool calls'))}`;
61
+ if (detailed) {
62
+ this.addChild(new Text(toolCallCount, 0, 0));
63
+ }
64
+ else {
65
+ const stats = [toolCallCount];
66
+ if (summary.nodesSpawned >= 1) {
67
+ stats.push(`${palette.accent(ICON.graph)} ${palette.muted(count(summary.nodesSpawned, 'node spawned', 'nodes spawned'))}`);
68
+ }
69
+ const changedFiles = distinctFileCount(activity.files);
70
+ if (changedFiles >= 1) {
71
+ stats.push(`${palette.warning(TOOL_ICON.edit)} ${palette.muted(count(changedFiles, 'file changed', 'files changed'))}`);
72
+ }
73
+ if (activity.memories.length >= 1) {
74
+ stats.push(`${palette.info(MEMORY_ICON)} ${palette.muted(count(activity.memories.length, 'memory read', 'memory reads'))}`);
75
+ }
76
+ this.addChild(new Text(stats.join(palette.muted(' · ')), 0, 0));
77
+ }
78
+ for (const bullet of summary.bullets)
79
+ this.addChild(new Text(palette.muted(` • ${bullet.trim()}`), 0, 0));
80
+ this.addChild(new Spacer(1));
81
+ }
82
+ addFile(file, palette) {
83
+ const counts = file.hasKnownCounts
84
+ ? `${palette.diffAdded(`+${file.added}`)}${file.kind === 'edit' ? ` ${palette.diffRemoved(`-${file.removed}`)}` : ''}`
85
+ : '';
86
+ const availability = file.countsIncomplete
87
+ ? palette.muted(file.hasKnownCounts ? ' · counts incomplete' : 'counts unavailable')
88
+ : '';
89
+ const suffix = counts || availability ? ` ${counts}${availability}` : '';
90
+ const icon = file.kind === 'write' ? TOOL_ICON.write : TOOL_ICON.edit;
91
+ this.addChild(new RecapDetailLine(`${palette.warning(icon)} `, filePath(file), suffix));
92
+ }
93
+ }
@@ -0,0 +1,17 @@
1
+ export interface HtmlMarkdownStyles {
2
+ kbd: (text: string) => string;
3
+ mark: (text: string) => string;
4
+ hint: (text: string) => string;
5
+ }
6
+ export interface HtmlMarkdownOptions {
7
+ /** Undefined honors each block's `open` attribute. A boolean is the viewer's
8
+ * global Ctrl+O override. */
9
+ detailsExpanded: boolean | undefined;
10
+ styles: HtmlMarkdownStyles;
11
+ }
12
+ /** Transform the strict supported HTML subset in one Markdown string. */
13
+ export declare function transformHtmlMarkdown(source: string, options: HtmlMarkdownOptions): string;
14
+ /** Copy an assistant message for terminal rendering, enhancing only text parts. */
15
+ export declare function transformMessageHtml<T extends {
16
+ content?: unknown;
17
+ }>(message: T, options: HtmlMarkdownOptions): T;