@north-light/crouter 0.3.170 → 0.3.172

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (670) hide show
  1. package/dist/api/client.d.ts +37 -11
  2. package/dist/api/client.js +84 -15
  3. package/dist/api/dto/human.d.ts +53 -39
  4. package/dist/api/dto/human.js +2 -3
  5. package/dist/api/dto/inbox.d.ts +0 -1
  6. package/dist/api/dto/nodes.d.ts +12 -0
  7. package/dist/api/dto/review-comments.d.ts +137 -0
  8. package/dist/api/dto/review-comments.js +5 -0
  9. package/dist/api/dto/reviews.d.ts +109 -0
  10. package/dist/api/dto/reviews.js +5 -0
  11. package/dist/api/index.d.ts +2 -0
  12. package/dist/api/index.js +2 -0
  13. package/dist/api/routes.d.ts +17 -4
  14. package/dist/api/routes.js +21 -5
  15. package/dist/build-root.d.ts +1 -16
  16. package/dist/build-root.js +1 -25
  17. package/dist/builtin-memory/00-runtime-base.md +7 -5
  18. package/dist/builtin-memory/04-base-worker.md +1 -1
  19. package/dist/builtin-memory/04-orchestration-kernel.md +7 -7
  20. package/dist/builtin-memory/05-kinds/design/00-base.md +1 -1
  21. package/dist/builtin-memory/05-kinds/design/01-orchestrator.md +1 -1
  22. package/dist/builtin-memory/05-kinds/developer/00-base.md +1 -1
  23. package/dist/builtin-memory/05-kinds/explore/00-base.md +1 -1
  24. package/dist/builtin-memory/05-kinds/plan/00-base.md +1 -1
  25. package/dist/builtin-memory/05-kinds/plan/01-orchestrator.md +1 -1
  26. package/dist/builtin-memory/05-kinds/review/00-base.md +1 -1
  27. package/dist/builtin-memory/05-kinds/review/companion/00-base.md +20 -0
  28. package/dist/builtin-memory/05-kinds/spec/00-base.md +3 -7
  29. package/dist/builtin-memory/05-kinds/spec/01-orchestrator.md +3 -3
  30. package/dist/builtin-memory/05-kinds/spec/requirements.md +3 -3
  31. package/dist/builtin-memory/design.md +2 -2
  32. package/dist/builtin-memory/insights/capture.md +50 -0
  33. package/dist/builtin-memory/insights/init.md +45 -0
  34. package/dist/builtin-memory/insights/listen.md +9 -0
  35. package/dist/builtin-memory/internal/agent-shaping.md +2 -2
  36. package/dist/builtin-memory/internal/nodes-and-canvas.md +1 -1
  37. package/dist/builtin-memory/internal/plugins.md +12 -11
  38. package/dist/builtin-memory/internal/storage-tiers.md +2 -2
  39. package/dist/builtin-memory/{planning.md → plan/roadmap.md} +3 -3
  40. package/dist/builtin-memory/plan.md +19 -0
  41. package/dist/builtin-memory/spec/guide.md +38 -0
  42. package/dist/builtin-memory/spec/requirements.md +31 -0
  43. package/dist/builtin-memory/spec/roadmap.md +35 -0
  44. package/dist/builtin-memory/spec.md +10 -86
  45. package/dist/builtin-pi-packages/pi-crtr-extensions/README.md +3 -4
  46. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/provider-rotation.test.ts +49 -5
  47. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/provider-rotation.d.ts +56 -0
  48. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/provider-rotation.js +920 -0
  49. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/provider-rotation.ts +221 -156
  50. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/statusline.ts +4 -5
  51. package/dist/cli.js +2 -6
  52. package/dist/clients/attach/__tests__/attach-chrome-remote.test.js +7 -35
  53. package/dist/clients/attach/__tests__/attach-keybindings.test.js +32 -16
  54. package/dist/clients/attach/__tests__/context-message.test.js +142 -6
  55. package/dist/clients/attach/__tests__/crtr-output.test.js +29 -45
  56. package/dist/clients/attach/__tests__/diagram.test.js +1 -1
  57. package/dist/clients/attach/__tests__/file-review-focus.test.js +48 -0
  58. package/dist/clients/attach/__tests__/group-activity.test.js +266 -0
  59. package/dist/clients/attach/__tests__/input-controller-extension-command.test.js +32 -0
  60. package/dist/clients/attach/__tests__/session-identity-refresh.test.js +32 -0
  61. package/dist/clients/attach/__tests__/titled-editor-preview.test.js +1 -2
  62. package/dist/clients/attach/chrome/header.d.ts +10 -0
  63. package/dist/clients/attach/chrome/header.js +30 -0
  64. package/dist/clients/attach/chrome/recap.d.ts +7 -0
  65. package/dist/clients/attach/chrome/recap.js +19 -0
  66. package/dist/clients/attach/chrome/status-line.d.ts +3 -0
  67. package/dist/clients/attach/chrome/status-line.js +5 -0
  68. package/dist/clients/attach/chrome/widgets.js +11 -21
  69. package/dist/clients/attach/command.js +11 -7
  70. package/dist/clients/attach/config.d.ts +4 -0
  71. package/dist/clients/attach/config.js +3 -0
  72. package/dist/clients/attach/input/controller.d.ts +19 -0
  73. package/dist/clients/attach/input/controller.js +62 -28
  74. package/dist/clients/attach/input/titled-editor.d.ts +0 -4
  75. package/dist/clients/attach/input/titled-editor.js +2 -10
  76. package/dist/clients/attach/overlays/file-review.d.ts +9 -5
  77. package/dist/clients/attach/overlays/file-review.js +9 -70
  78. package/dist/clients/attach/overlays/help.d.ts +33 -0
  79. package/dist/clients/attach/overlays/help.js +204 -0
  80. package/dist/clients/attach/render/activity-slot.d.ts +4 -0
  81. package/dist/clients/attach/render/activity-slot.js +13 -0
  82. package/dist/clients/attach/render/chat-view.d.ts +117 -12
  83. package/dist/clients/attach/render/chat-view.js +604 -135
  84. package/dist/clients/attach/render/context-message.d.ts +2 -1
  85. package/dist/clients/attach/render/context-message.js +17 -13
  86. package/dist/clients/attach/render/crtr-output.js +1 -3
  87. package/dist/clients/attach/render/diagram.js +2 -2
  88. package/dist/clients/attach/render/edit-diff.d.ts +4 -1
  89. package/dist/clients/attach/render/edit-diff.js +7 -11
  90. package/dist/clients/attach/render/group-activity.d.ts +32 -0
  91. package/dist/clients/attach/render/group-activity.js +206 -0
  92. package/dist/clients/attach/render/group-recap.d.ts +10 -0
  93. package/dist/clients/attach/render/group-recap.js +93 -0
  94. package/dist/clients/attach/render/html-markdown.d.ts +17 -0
  95. package/dist/clients/attach/render/html-markdown.js +228 -0
  96. package/dist/clients/attach/render/measured-container.d.ts +96 -0
  97. package/dist/clients/attach/render/measured-container.js +322 -0
  98. package/dist/clients/attach/render/scroll-animation.d.ts +8 -0
  99. package/dist/clients/attach/render/scroll-animation.js +80 -0
  100. package/dist/clients/attach/render/tool-calls.js +6 -6
  101. package/dist/clients/attach/render/transcript-copy.d.ts +9 -0
  102. package/dist/clients/attach/render/transcript-copy.js +81 -0
  103. package/dist/clients/attach/render/viewport.d.ts +29 -0
  104. package/dist/clients/attach/render/viewport.js +159 -0
  105. package/dist/clients/attach/session/bindings.d.ts +10 -7
  106. package/dist/clients/attach/session/bindings.js +23 -8
  107. package/dist/clients/attach/session/connection.js +4 -5
  108. package/dist/clients/attach/session/context.d.ts +6 -4
  109. package/dist/clients/attach/session/frame.d.ts +34 -0
  110. package/dist/clients/attach/session/frame.js +176 -0
  111. package/dist/clients/attach/session/frames.d.ts +4 -1
  112. package/dist/clients/attach/session/frames.js +14 -1
  113. package/dist/clients/attach/session/identity.js +4 -3
  114. package/dist/clients/attach/session/input-wiring.d.ts +14 -4
  115. package/dist/clients/attach/session/input-wiring.js +15 -13
  116. package/dist/clients/attach/session/invariant.d.ts +9 -0
  117. package/dist/clients/attach/session/invariant.js +15 -0
  118. package/dist/clients/attach/session/keys.d.ts +10 -2
  119. package/dist/clients/attach/session/keys.js +13 -5
  120. package/dist/clients/attach/session/layout.d.ts +10 -8
  121. package/dist/clients/attach/session/layout.js +33 -34
  122. package/dist/clients/attach/session/mouse.d.ts +18 -0
  123. package/dist/clients/attach/session/mouse.js +64 -0
  124. package/dist/clients/attach/session/pane-tag.d.ts +3 -0
  125. package/dist/clients/attach/session/pane-tag.js +51 -8
  126. package/dist/clients/attach/session/reconnect.d.ts +3 -0
  127. package/dist/clients/attach/session/reconnect.js +42 -5
  128. package/dist/clients/attach/session/surface-frame.d.ts +20 -0
  129. package/dist/clients/attach/session/surface-frame.js +73 -0
  130. package/dist/clients/attach/session/surface-host.d.ts +64 -0
  131. package/dist/clients/attach/session/surface-host.js +255 -0
  132. package/dist/clients/attach/session/whip.d.ts +17 -0
  133. package/dist/clients/attach/session/whip.js +334 -0
  134. package/dist/clients/attach/slash/dispatch.d.ts +13 -1
  135. package/dist/clients/attach/slash/dispatch.js +51 -29
  136. package/dist/clients/attach/viewer.js +907 -819
  137. package/dist/clients/conversation/conversation.d.ts +65 -0
  138. package/dist/clients/conversation/conversation.js +318 -0
  139. package/dist/clients/conversation/frames.d.ts +30 -0
  140. package/dist/clients/conversation/frames.js +52 -0
  141. package/dist/clients/conversation/region.d.ts +51 -0
  142. package/dist/clients/conversation/region.js +265 -0
  143. package/dist/clients/conversation/submit.d.ts +38 -0
  144. package/dist/clients/conversation/submit.js +51 -0
  145. package/dist/clients/inbox/__tests__/inbox-controller.test.js +247 -0
  146. package/dist/clients/inbox/__tests__/mount-panel.test.js +776 -0
  147. package/dist/clients/inbox/controller.d.ts +79 -0
  148. package/dist/clients/inbox/controller.js +448 -0
  149. package/dist/clients/inbox/deck-adapter.d.ts +29 -0
  150. package/dist/clients/inbox/deck-adapter.js +62 -0
  151. package/dist/clients/inbox/layout.d.ts +8 -0
  152. package/dist/clients/inbox/layout.js +9 -0
  153. package/dist/clients/inbox/resolve.d.ts +10 -0
  154. package/dist/clients/inbox/resolve.js +34 -0
  155. package/dist/clients/inbox/review/__tests__/editor-roundtrip.test.js +29 -0
  156. package/dist/clients/inbox/review/__tests__/remap.test.js +196 -0
  157. package/dist/clients/inbox/review/__tests__/review-core.test.js +341 -0
  158. package/dist/clients/inbox/review/anchors.d.ts +41 -0
  159. package/dist/clients/inbox/review/anchors.js +89 -0
  160. package/dist/clients/inbox/review/columns.d.ts +22 -0
  161. package/dist/clients/inbox/review/columns.js +40 -0
  162. package/dist/clients/inbox/review/comments-client.d.ts +66 -0
  163. package/dist/clients/inbox/review/comments-client.js +98 -0
  164. package/dist/clients/inbox/review/composition.d.ts +60 -0
  165. package/dist/clients/inbox/review/composition.js +278 -0
  166. package/dist/clients/inbox/review/document-region.d.ts +120 -0
  167. package/dist/clients/inbox/review/document-region.js +902 -0
  168. package/dist/clients/inbox/review/frame.d.ts +45 -0
  169. package/dist/clients/inbox/review/frame.js +215 -0
  170. package/dist/clients/inbox/review/keys.d.ts +67 -0
  171. package/dist/clients/inbox/review/keys.js +130 -0
  172. package/dist/clients/inbox/review/launch.d.ts +10 -0
  173. package/dist/clients/inbox/review/launch.js +129 -0
  174. package/dist/clients/inbox/review/live-source.d.ts +24 -0
  175. package/dist/clients/inbox/review/live-source.js +160 -0
  176. package/dist/clients/inbox/review/nvim.d.ts +13 -0
  177. package/dist/clients/inbox/review/nvim.js +42 -0
  178. package/dist/clients/inbox/review/remap.d.ts +51 -0
  179. package/dist/clients/inbox/review/remap.js +157 -0
  180. package/dist/clients/inbox/review/review-client.d.ts +30 -0
  181. package/dist/clients/inbox/review/review-client.js +107 -0
  182. package/dist/clients/inbox/review/roundtrip.d.ts +5 -0
  183. package/dist/clients/inbox/review/roundtrip.js +36 -0
  184. package/dist/clients/inbox/review/state.d.ts +143 -0
  185. package/dist/clients/inbox/review/state.js +282 -0
  186. package/dist/clients/inbox/review-adapter.d.ts +29 -0
  187. package/dist/clients/inbox/review-adapter.js +92 -0
  188. package/dist/clients/inbox/review-visibility.d.ts +5 -0
  189. package/dist/clients/inbox/review-visibility.js +19 -0
  190. package/dist/clients/inbox/surface.d.ts +19 -0
  191. package/dist/clients/inbox/surface.js +128 -0
  192. package/dist/clients/inbox/tui/ansi.d.ts +66 -0
  193. package/dist/clients/inbox/tui/ansi.js +317 -0
  194. package/dist/clients/inbox/tui/clipboard.d.ts +2 -0
  195. package/dist/clients/inbox/tui/clipboard.js +26 -0
  196. package/dist/clients/inbox/tui/input.d.ts +7 -0
  197. package/dist/clients/inbox/tui/input.js +653 -0
  198. package/dist/clients/inbox/tui/keys.d.ts +28 -0
  199. package/dist/clients/inbox/tui/keys.js +111 -0
  200. package/dist/clients/inbox/tui/panel.d.ts +2 -0
  201. package/dist/clients/inbox/tui/panel.js +217 -0
  202. package/dist/clients/inbox/tui/render.d.ts +37 -0
  203. package/dist/clients/inbox/tui/render.js +476 -0
  204. package/dist/clients/inbox/tui/types.d.ts +57 -0
  205. package/dist/clients/inbox/tui/types.js +1 -0
  206. package/dist/clients/inbox/tui.d.ts +6 -0
  207. package/dist/clients/inbox/tui.js +74 -0
  208. package/dist/clients/surfaces/host.d.ts +66 -0
  209. package/dist/clients/surfaces/host.js +1 -0
  210. package/dist/clients/surfaces/region.d.ts +16 -0
  211. package/dist/clients/surfaces/region.js +1 -0
  212. package/dist/clients/web/__tests__/push-engine.test.js +14 -158
  213. package/dist/clients/web/dev-server.d.ts +3 -3
  214. package/dist/clients/web/dev-server.js +9 -23
  215. package/dist/clients/web/events.js +4 -6
  216. package/dist/clients/web/push-engine.d.ts +2 -66
  217. package/dist/clients/web/push-engine.js +30 -161
  218. package/dist/clients/web/push-registry.d.ts +0 -4
  219. package/dist/clients/web/push-registry.js +2 -7
  220. package/dist/clients/web/server.js +3 -35
  221. package/dist/clients/web/web-client/shared/protocol.d.ts +0 -108
  222. package/dist/clients/web/web-cmd.js +2 -2
  223. package/dist/commands/__tests__/human.test.js +27 -15
  224. package/dist/commands/api-client.js +3 -3
  225. package/dist/commands/canvas-browse.js +1 -1
  226. package/dist/commands/canvas-issue.js +1 -1
  227. package/dist/commands/canvas-use.js +1 -1
  228. package/dist/commands/human/doc.d.ts +2 -0
  229. package/dist/commands/human/doc.js +98 -0
  230. package/dist/commands/human/inbox.d.ts +2 -0
  231. package/dist/commands/human/inbox.js +101 -0
  232. package/dist/commands/human/prompts.d.ts +2 -3
  233. package/dist/commands/human/prompts.js +27 -180
  234. package/dist/commands/human/queue.d.ts +1 -5
  235. package/dist/commands/human/queue.js +54 -216
  236. package/dist/commands/human/review.d.ts +2 -0
  237. package/dist/commands/human/review.js +298 -0
  238. package/dist/commands/human/shared.d.ts +2 -69
  239. package/dist/commands/human/shared.js +1 -181
  240. package/dist/commands/human.js +15 -20
  241. package/dist/commands/memory/__tests__/lint.test.d.ts +1 -0
  242. package/dist/commands/memory/__tests__/lint.test.js +15 -0
  243. package/dist/commands/memory/delete.js +2 -2
  244. package/dist/commands/memory/lint.d.ts +1 -0
  245. package/dist/commands/memory/lint.js +21 -3
  246. package/dist/commands/memory/read.js +4 -4
  247. package/dist/commands/node.js +8 -7
  248. package/dist/commands/pkg/plugin-manage.js +143 -68
  249. package/dist/commands/surface-inspect.js +2 -2
  250. package/dist/commands/surface.js +6 -12
  251. package/dist/commands/sys/__tests__/setup-core.test.js +9 -5
  252. package/dist/commands/sys/__tests__/setup-front-door.test.js +7 -42
  253. package/dist/commands/sys/config.js +29 -3
  254. package/dist/commands/sys/feedback.js +1 -1
  255. package/dist/commands/sys/setup-core.d.ts +12 -11
  256. package/dist/commands/sys/setup-core.js +55 -46
  257. package/dist/commands/sys/setup-wizard.d.ts +4 -1
  258. package/dist/commands/sys/setup-wizard.js +50 -9
  259. package/dist/commands/sys/sync-deps.js +1 -1
  260. package/dist/commands/sys.js +4 -6
  261. package/dist/core/__tests__/broker-sdk-wiring.test.js +6 -1
  262. package/dist/core/__tests__/broker-snapshot-history.test.js +9 -1
  263. package/dist/core/__tests__/dead-node-policy-table.test.js +3 -4
  264. package/dist/core/__tests__/fixtures/fake-engine.d.ts +8 -5
  265. package/dist/core/__tests__/fixtures/fake-engine.js +28 -2
  266. package/dist/core/__tests__/full/broker-provider-retry.test.js +87 -2
  267. package/dist/core/__tests__/full/broker-whip-interrupt.test.d.ts +1 -0
  268. package/dist/core/__tests__/full/broker-whip-interrupt.test.js +39 -0
  269. package/dist/core/__tests__/full/detach-focus.test.js +1 -1
  270. package/dist/core/__tests__/human-deliver-e2e.test.js +64 -64
  271. package/dist/core/__tests__/human-deliver.test.js +71 -345
  272. package/dist/core/__tests__/inline-memory-refs.test.js +2 -12
  273. package/dist/core/__tests__/memory-resolver-precedence.test.js +12 -15
  274. package/dist/core/__tests__/migration.test.js +10 -0
  275. package/dist/core/__tests__/model-pin-durability.test.js +14 -0
  276. package/dist/core/__tests__/phase4-review-migration.test.d.ts +1 -0
  277. package/dist/core/__tests__/phase4-review-migration.test.js +100 -0
  278. package/dist/core/__tests__/phase4-review-store.test.d.ts +1 -0
  279. package/dist/core/__tests__/phase4-review-store.test.js +143 -0
  280. package/dist/core/__tests__/remote-canvas-target.test.js +2 -2
  281. package/dist/core/__tests__/revive.test.js +22 -53
  282. package/dist/core/__tests__/session-cycles.test.js +48 -18
  283. package/dist/core/__tests__/spawn-no-kickoff.test.js +8 -12
  284. package/dist/core/__tests__/stop-guard.test.js +16 -1
  285. package/dist/core/__tests__/tmux-surface.test.js +21 -25
  286. package/dist/core/asset-root.d.ts +7 -0
  287. package/dist/core/asset-root.js +18 -0
  288. package/dist/core/broker-client/client.d.ts +0 -7
  289. package/dist/core/broker-client/client.js +4 -10
  290. package/dist/core/broker-client/transport-relay.d.ts +3 -4
  291. package/dist/core/broker-client/transport-relay.js +3 -4
  292. package/dist/core/canvas/__tests__/attention.test.js +1 -1
  293. package/dist/core/canvas/__tests__/remote-canvas-source.test.js +1 -1
  294. package/dist/core/canvas/__tests__/remote-transport.test.d.ts +1 -0
  295. package/dist/core/{view/__tests__/transport-remote.test.js → canvas/__tests__/remote-transport.test.js} +2 -2
  296. package/dist/core/canvas/__tests__/render-remote.test.js +1 -1
  297. package/dist/core/canvas/attention.js +4 -4
  298. package/dist/core/canvas/canvas.d.ts +6 -11
  299. package/dist/core/canvas/canvas.js +11 -33
  300. package/dist/core/canvas/db.js +207 -38
  301. package/dist/core/canvas/extensions.d.ts +1 -1
  302. package/dist/core/canvas/extensions.js +8 -1
  303. package/dist/core/canvas/index.d.ts +0 -1
  304. package/dist/core/canvas/index.js +0 -1
  305. package/dist/core/canvas/nav-model.d.ts +1 -1
  306. package/dist/core/canvas/nav-model.js +1 -1
  307. package/dist/core/canvas/paths.d.ts +5 -0
  308. package/dist/core/canvas/paths.js +16 -0
  309. package/dist/core/canvas/remote-canvas-source.js +2 -2
  310. package/dist/core/canvas/remote-transport.d.ts +7 -0
  311. package/dist/core/{view/transport-remote.js → canvas/remote-transport.js} +3 -4
  312. package/dist/core/canvas/source.js +1 -1
  313. package/dist/core/canvas/status-glyph.js +4 -12
  314. package/dist/core/canvas/types.d.ts +10 -35
  315. package/dist/core/clipboard-text.d.ts +8 -0
  316. package/dist/core/clipboard-text.js +18 -0
  317. package/dist/core/command-manifests/registry.d.ts +1 -3
  318. package/dist/core/command-plugins/bundle.d.ts +29 -0
  319. package/dist/core/command-plugins/bundle.js +198 -0
  320. package/dist/core/command-plugins/discovery.d.ts +0 -8
  321. package/dist/core/command-plugins/discovery.js +2 -39
  322. package/dist/core/command-plugins/transport/http-fetch.d.ts +4 -30
  323. package/dist/core/command-plugins/transport/http-fetch.js +17 -95
  324. package/dist/core/command.d.ts +1 -13
  325. package/dist/core/command.js +1 -16
  326. package/dist/core/config.d.ts +4 -0
  327. package/dist/core/config.js +28 -3
  328. package/dist/core/document-lines.d.ts +4 -0
  329. package/dist/core/document-lines.js +6 -0
  330. package/dist/core/feed/feed.d.ts +2 -0
  331. package/dist/core/feed/feed.js +11 -7
  332. package/dist/core/human/__tests__/inbox-cancel-worker.d.ts +1 -0
  333. package/dist/core/human/__tests__/inbox-cancel-worker.js +7 -0
  334. package/dist/core/human/__tests__/inbox-claim-worker.d.ts +1 -0
  335. package/dist/core/human/__tests__/inbox-claim-worker.js +17 -0
  336. package/dist/core/human/__tests__/inbox-core.test.d.ts +1 -0
  337. package/dist/core/human/__tests__/inbox-core.test.js +144 -0
  338. package/dist/core/human/__tests__/inbox-stale-claim-worker.d.ts +1 -0
  339. package/dist/core/human/__tests__/inbox-stale-claim-worker.js +8 -0
  340. package/dist/core/human/__tests__/visible-paths.test.d.ts +1 -0
  341. package/dist/{clients/attach → core/human}/__tests__/visible-paths.test.js +9 -0
  342. package/dist/core/human/claim.d.ts +23 -0
  343. package/dist/core/human/claim.js +67 -0
  344. package/dist/core/human/convention.d.ts +30 -0
  345. package/dist/core/human/convention.js +202 -0
  346. package/dist/core/human/deck-factories.d.ts +8 -0
  347. package/dist/core/human/deck-factories.js +15 -0
  348. package/dist/core/human/deck-schema.d.ts +70 -0
  349. package/dist/core/human/deck-schema.js +92 -0
  350. package/dist/core/human/root.d.ts +7 -0
  351. package/dist/core/human/root.js +37 -0
  352. package/dist/core/human/scan.d.ts +3 -0
  353. package/dist/core/human/scan.js +76 -0
  354. package/dist/core/human/summary.d.ts +8 -0
  355. package/dist/core/human/summary.js +44 -0
  356. package/dist/core/human/tickets.d.ts +49 -0
  357. package/dist/core/human/tickets.js +190 -0
  358. package/dist/core/human/types.d.ts +136 -0
  359. package/dist/core/human/types.js +5 -0
  360. package/dist/{clients/attach → core/human}/visible-paths.d.ts +1 -1
  361. package/dist/{clients/attach → core/human}/visible-paths.js +3 -2
  362. package/dist/core/inspector/chrome.d.ts +6 -0
  363. package/dist/core/inspector/chrome.js +14 -0
  364. package/dist/core/inspector/contract.d.ts +105 -0
  365. package/dist/core/inspector/contract.js +1 -0
  366. package/dist/core/inspector/core.d.ts +4 -5
  367. package/dist/core/inspector/core.js +3 -5
  368. package/dist/core/inspector/host.d.ts +46 -0
  369. package/dist/core/{tui → inspector}/host.js +42 -208
  370. package/dist/core/inspector/text.d.ts +2 -2
  371. package/dist/core/inspector/transport.d.ts +6 -0
  372. package/dist/core/inspector/transport.js +36 -0
  373. package/dist/core/inspector/tui.d.ts +2 -2
  374. package/dist/core/inspector/tui.js +15 -15
  375. package/dist/core/keybindings/__tests__/inbox-affordance.test.js +11 -11
  376. package/dist/core/keybindings/__tests__/resolve.test.js +10 -19
  377. package/dist/core/keybindings/attach-control.d.ts +9 -3
  378. package/dist/core/keybindings/attach-control.js +3 -1
  379. package/dist/core/keybindings/catalog.d.ts +6 -5
  380. package/dist/core/keybindings/catalog.js +61 -133
  381. package/dist/core/keybindings/inbox.d.ts +5 -6
  382. package/dist/core/keybindings/inbox.js +9 -10
  383. package/dist/core/keybindings/index.d.ts +3 -3
  384. package/dist/core/keybindings/index.js +3 -3
  385. package/dist/core/keybindings/persistence.d.ts +5 -1
  386. package/dist/core/keybindings/persistence.js +24 -6
  387. package/dist/core/keybindings/resolve.d.ts +6 -0
  388. package/dist/core/keybindings/resolve.js +10 -3
  389. package/dist/core/memory/inline-ref-grammar.js +2 -3
  390. package/dist/core/memory-resolver.d.ts +27 -29
  391. package/dist/core/memory-resolver.js +45 -39
  392. package/dist/core/model-routes.d.ts +33 -0
  393. package/dist/core/model-routes.js +42 -3
  394. package/dist/core/preview-registry.js +17 -55
  395. package/dist/core/profiles/select.js +3 -3
  396. package/dist/core/{view/remote-canvas-target.d.ts → remote-canvas-target.d.ts} +2 -2
  397. package/dist/core/{view/remote-canvas-target.js → remote-canvas-target.js} +4 -4
  398. package/dist/core/review/__tests__/capture-origin.test.d.ts +1 -0
  399. package/dist/core/review/__tests__/capture-origin.test.js +139 -0
  400. package/dist/core/review/__tests__/comments.test.d.ts +1 -0
  401. package/dist/core/review/__tests__/comments.test.js +98 -0
  402. package/dist/core/review/__tests__/project.test.d.ts +1 -0
  403. package/dist/core/review/__tests__/project.test.js +71 -0
  404. package/dist/core/review/__tests__/remap.test.d.ts +1 -0
  405. package/dist/core/review/__tests__/remap.test.js +159 -0
  406. package/dist/core/review/__tests__/stage-identity.test.d.ts +1 -0
  407. package/dist/core/review/__tests__/stage-identity.test.js +140 -0
  408. package/dist/core/review/birth.d.ts +7 -0
  409. package/dist/core/review/birth.js +23 -0
  410. package/dist/core/review/comments.d.ts +69 -0
  411. package/dist/core/review/comments.js +295 -0
  412. package/dist/core/review/companion.d.ts +35 -0
  413. package/dist/core/review/companion.js +205 -0
  414. package/dist/core/review/document.d.ts +27 -0
  415. package/dist/core/review/document.js +138 -0
  416. package/dist/core/review/project.d.ts +13 -0
  417. package/dist/core/review/project.js +58 -0
  418. package/dist/core/review/realize.d.ts +19 -0
  419. package/dist/core/review/realize.js +217 -0
  420. package/dist/core/review/remap.d.ts +24 -0
  421. package/dist/core/review/remap.js +156 -0
  422. package/dist/core/review/signal.d.ts +5 -0
  423. package/dist/core/review/signal.js +31 -0
  424. package/dist/core/review/stage.d.ts +26 -0
  425. package/dist/core/review/stage.js +184 -0
  426. package/dist/core/review/store.d.ts +46 -0
  427. package/dist/core/review/store.js +163 -0
  428. package/dist/core/review/ticket-filter.d.ts +17 -0
  429. package/dist/core/review/ticket-filter.js +32 -0
  430. package/dist/core/review/types.d.ts +130 -0
  431. package/dist/core/review/types.js +23 -0
  432. package/dist/core/runtime/__tests__/session-visibility.test.d.ts +1 -0
  433. package/dist/core/runtime/__tests__/session-visibility.test.js +119 -0
  434. package/dist/core/runtime/bearings.d.ts +5 -17
  435. package/dist/core/runtime/bearings.js +88 -71
  436. package/dist/core/runtime/broker-protocol.d.ts +31 -8
  437. package/dist/core/runtime/broker.d.ts +15 -1
  438. package/dist/core/runtime/broker.js +573 -141
  439. package/dist/core/runtime/canvas-extensions.d.ts +4 -5
  440. package/dist/core/runtime/canvas-extensions.js +5 -5
  441. package/dist/core/runtime/front-door.js +4 -4
  442. package/dist/core/runtime/headless-pi.d.ts +24 -0
  443. package/dist/core/runtime/headless-pi.js +152 -0
  444. package/dist/core/runtime/kickoff.d.ts +1 -5
  445. package/dist/core/runtime/kickoff.js +1 -5
  446. package/dist/core/runtime/model-registry.d.ts +3 -0
  447. package/dist/core/runtime/model-registry.js +13 -0
  448. package/dist/core/runtime/naming-persist.d.ts +4 -0
  449. package/dist/core/runtime/naming-persist.js +27 -1
  450. package/dist/core/runtime/naming.d.ts +17 -12
  451. package/dist/core/runtime/naming.js +91 -140
  452. package/dist/core/runtime/node-read.js +19 -10
  453. package/dist/core/runtime/nodes.d.ts +9 -14
  454. package/dist/core/runtime/nodes.js +3 -53
  455. package/dist/core/runtime/package-health.d.ts +6 -21
  456. package/dist/core/runtime/package-health.js +12 -123
  457. package/dist/core/runtime/placement-tmux.d.ts +2 -1
  458. package/dist/core/runtime/placement-tmux.js +6 -4
  459. package/dist/core/runtime/placement.d.ts +1 -0
  460. package/dist/core/runtime/placement.js +4 -8
  461. package/dist/core/runtime/promote.js +3 -0
  462. package/dist/core/runtime/recap.d.ts +2 -7
  463. package/dist/core/runtime/recap.js +35 -69
  464. package/dist/core/runtime/revive.js +34 -77
  465. package/dist/core/runtime/session-cycles.d.ts +4 -0
  466. package/dist/core/runtime/session-cycles.js +14 -1
  467. package/dist/core/runtime/session-visibility.d.ts +37 -0
  468. package/dist/core/runtime/session-visibility.js +83 -0
  469. package/dist/core/runtime/spawn.js +10 -22
  470. package/dist/core/runtime/stop-guard.d.ts +1 -1
  471. package/dist/core/runtime/stop-guard.js +18 -13
  472. package/dist/core/runtime/surface-bg.js +1 -1
  473. package/dist/core/runtime/tmux-chrome.d.ts +1 -1
  474. package/dist/core/runtime/tmux-chrome.js +1 -1
  475. package/dist/core/runtime/tmux.d.ts +35 -7
  476. package/dist/core/runtime/tmux.js +439 -62
  477. package/dist/core/runtime/tool-group-summary.d.ts +19 -0
  478. package/dist/core/runtime/tool-group-summary.js +88 -0
  479. package/dist/core/scope.d.ts +2 -7
  480. package/dist/core/scope.js +9 -35
  481. package/dist/core/substrate/schema.d.ts +2 -2
  482. package/dist/core/termrender/code-doc.d.ts +12 -0
  483. package/dist/core/termrender/code-doc.js +92 -0
  484. package/dist/core/termrender/display.d.ts +12 -0
  485. package/dist/core/termrender/display.js +19 -0
  486. package/dist/core/termrender/termrender.d.ts +73 -0
  487. package/dist/core/termrender/termrender.js +795 -0
  488. package/dist/core/termrender/version.d.ts +1 -0
  489. package/dist/core/termrender/version.js +1 -0
  490. package/dist/core/tui/terminal.js +1 -2
  491. package/dist/core/user-settings.d.ts +71 -3
  492. package/dist/core/user-settings.js +83 -1
  493. package/dist/daemon/api/__tests__/inbox.test.js +44 -133
  494. package/dist/daemon/api/handlers/human.d.ts +0 -10
  495. package/dist/daemon/api/handlers/human.js +104 -702
  496. package/dist/daemon/api/handlers/inbox.js +113 -142
  497. package/dist/daemon/api/handlers/review-comments.d.ts +2 -0
  498. package/dist/daemon/api/handlers/review-comments.js +500 -0
  499. package/dist/daemon/api/handlers/reviews.d.ts +2 -0
  500. package/dist/daemon/api/handlers/reviews.js +287 -0
  501. package/dist/daemon/api/map.d.ts +22 -7
  502. package/dist/daemon/api/map.js +159 -11
  503. package/dist/daemon/api/server.js +4 -0
  504. package/dist/daemon/cron-run.js +6 -9
  505. package/dist/daemon/crtrd.js +17 -33
  506. package/dist/daemon/fleet.d.ts +1 -8
  507. package/dist/daemon/fleet.js +4 -30
  508. package/dist/daemon/human/finish.d.ts +14 -0
  509. package/dist/daemon/human/finish.js +115 -0
  510. package/dist/daemon/human/sweep.d.ts +6 -0
  511. package/dist/daemon/human/sweep.js +49 -0
  512. package/dist/daemon/messaging/node-message.d.ts +18 -0
  513. package/dist/daemon/messaging/node-message.js +70 -0
  514. package/dist/daemon/review/comment-notify.d.ts +26 -0
  515. package/dist/daemon/review/comment-notify.js +107 -0
  516. package/dist/daemon/review/deliver.d.ts +7 -0
  517. package/dist/daemon/review/deliver.js +56 -0
  518. package/dist/daemon/review/finish.d.ts +22 -0
  519. package/dist/daemon/review/finish.js +254 -0
  520. package/dist/daemon/review/sweep.d.ts +11 -0
  521. package/dist/daemon/review/sweep.js +120 -0
  522. package/dist/index.d.ts +2 -0
  523. package/dist/index.js +2 -2
  524. package/dist/pi-extensions/__tests__/canvas-context-intro.test.js +42 -64
  525. package/dist/pi-extensions/__tests__/canvas-recap.test.d.ts +1 -0
  526. package/dist/pi-extensions/__tests__/canvas-recap.test.js +159 -0
  527. package/dist/pi-extensions/__tests__/canvas-stophook-agentend.test.js +16 -38
  528. package/dist/pi-extensions/__tests__/canvas-structured-output.test.d.ts +1 -0
  529. package/dist/pi-extensions/__tests__/canvas-structured-output.test.js +63 -0
  530. package/dist/pi-extensions/canvas-context-intro.d.ts +8 -11
  531. package/dist/pi-extensions/canvas-context-intro.js +50 -104
  532. package/dist/pi-extensions/canvas-recap.d.ts +15 -2
  533. package/dist/pi-extensions/canvas-recap.js +192 -69
  534. package/dist/pi-extensions/canvas-review-boundary.d.ts +59 -0
  535. package/dist/pi-extensions/canvas-review-boundary.js +81 -0
  536. package/dist/pi-extensions/canvas-stophook.d.ts +3 -3
  537. package/dist/pi-extensions/canvas-stophook.js +78 -128
  538. package/dist/pi-extensions/canvas-structured-output.js +52 -8
  539. package/dist/shared/generated-context.d.ts +29 -4
  540. package/dist/shared/generated-context.js +122 -7
  541. package/dist/shared/tool-groups.d.ts +23 -0
  542. package/dist/shared/tool-groups.js +60 -0
  543. package/dist/shared/working-activity.d.ts +8 -0
  544. package/dist/shared/working-activity.js +26 -0
  545. package/dist/types.d.ts +36 -2
  546. package/dist/types.js +51 -0
  547. package/dist/web-client/assets/index-CCPaLeW7.css +2 -0
  548. package/dist/web-client/assets/index-kyOWsnZK.js +86 -0
  549. package/dist/web-client/index.html +2 -2
  550. package/dist/web-client/sw.js +1 -1
  551. package/docs/compat/hearth-crtr-v4.md +2 -2
  552. package/docs/compat/hearth-crtr-v5.md +4 -2
  553. package/docs/public-api.md +3 -3
  554. package/package.json +21 -14
  555. package/runtime.lock.json +4661 -1453
  556. package/scripts/postinstall.mjs +15 -2
  557. package/dist/builtin-pi-packages/pi-mode-switch/README.md +0 -36
  558. package/dist/builtin-pi-packages/pi-mode-switch/bin/mode +0 -36
  559. package/dist/builtin-pi-packages/pi-mode-switch/extensions/index.ts +0 -449
  560. package/dist/builtin-pi-packages/pi-mode-switch/package.json +0 -14
  561. package/dist/builtin-pi-packages/pi-mode-switch/tsconfig.json +0 -9
  562. package/dist/builtin-views/_lib/states.mjs +0 -161
  563. package/dist/builtin-views/canvas/core.mjs +0 -657
  564. package/dist/builtin-views/canvas/text.mjs +0 -58
  565. package/dist/builtin-views/canvas/tui.mjs +0 -168
  566. package/dist/builtin-views/canvas/web.jsx +0 -121
  567. package/dist/builtin-views/chat/core.mjs +0 -684
  568. package/dist/builtin-views/chat/text.mjs +0 -101
  569. package/dist/builtin-views/chat/tui.mjs +0 -360
  570. package/dist/builtin-views/chat/web.jsx +0 -362
  571. package/dist/builtin-views/git-pr/core.mjs +0 -673
  572. package/dist/builtin-views/git-pr/text.mjs +0 -84
  573. package/dist/builtin-views/git-pr/tui.mjs +0 -301
  574. package/dist/builtin-views/git-pr/web.jsx +0 -216
  575. package/dist/builtin-views/inbox/_lib/render.mjs +0 -175
  576. package/dist/builtin-views/inbox/core.mjs +0 -1273
  577. package/dist/builtin-views/inbox/text.mjs +0 -73
  578. package/dist/builtin-views/inbox/tui.mjs +0 -314
  579. package/dist/builtin-views/inbox/web.jsx +0 -188
  580. package/dist/builtin-views/linkedin/core.mjs +0 -906
  581. package/dist/builtin-views/linkedin/text.mjs +0 -69
  582. package/dist/builtin-views/linkedin/tui.mjs +0 -413
  583. package/dist/builtin-views/linkedin/web.jsx +0 -206
  584. package/dist/builtin-views/prompt-review/core.mjs +0 -735
  585. package/dist/builtin-views/prompt-review/text.mjs +0 -15
  586. package/dist/builtin-views/prompt-review/tui.mjs +0 -196
  587. package/dist/builtin-views/prompt-review/web.jsx +0 -484
  588. package/dist/builtin-views/workspace-sidebar/__tests__/core.test.js +0 -50
  589. package/dist/builtin-views/workspace-sidebar/__tests__/core.test.ts +0 -53
  590. package/dist/builtin-views/workspace-sidebar/core.mjs +0 -670
  591. package/dist/builtin-views/workspace-sidebar/text.mjs +0 -53
  592. package/dist/builtin-views/workspace-sidebar/tui.mjs +0 -141
  593. package/dist/builtin-views/workspace-sidebar/web.jsx +0 -109
  594. package/dist/clients/attach/session/mode.d.ts +0 -25
  595. package/dist/clients/attach/session/mode.js +0 -97
  596. package/dist/commands/sys/promptstudio.d.ts +0 -2
  597. package/dist/commands/sys/promptstudio.js +0 -65
  598. package/dist/commands/view-cycle.d.ts +0 -2
  599. package/dist/commands/view-cycle.js +0 -130
  600. package/dist/commands/view-list.d.ts +0 -2
  601. package/dist/commands/view-list.js +0 -66
  602. package/dist/commands/view-new.d.ts +0 -2
  603. package/dist/commands/view-new.js +0 -74
  604. package/dist/commands/view-pick.d.ts +0 -6
  605. package/dist/commands/view-pick.js +0 -129
  606. package/dist/commands/view-run.d.ts +0 -2
  607. package/dist/commands/view-run.js +0 -214
  608. package/dist/commands/view.d.ts +0 -2
  609. package/dist/commands/view.js +0 -31
  610. package/dist/commands/workspace.d.ts +0 -2
  611. package/dist/commands/workspace.js +0 -165
  612. package/dist/core/__tests__/chat-view-reconnect.test.js +0 -105
  613. package/dist/core/__tests__/full/consult-startup-failure.test.js +0 -124
  614. package/dist/core/canvas/__tests__/human-work-outbox.test.js +0 -123
  615. package/dist/core/canvas/human-work-outbox.d.ts +0 -73
  616. package/dist/core/canvas/human-work-outbox.js +0 -261
  617. package/dist/core/command-plugins/store.d.ts +0 -16
  618. package/dist/core/command-plugins/store.js +0 -64
  619. package/dist/core/keybindings/__tests__/bespoke-consumers.test.js +0 -40
  620. package/dist/core/runtime/fault-recovery-nudge.d.ts +0 -3
  621. package/dist/core/runtime/fault-recovery-nudge.js +0 -3
  622. package/dist/core/tui/__tests__/host-keybindings.test.js +0 -113
  623. package/dist/core/tui/host.d.ts +0 -66
  624. package/dist/core/view/__tests__/transport-cache.test.js +0 -62
  625. package/dist/core/view/bridge.d.ts +0 -10
  626. package/dist/core/view/bridge.js +0 -31
  627. package/dist/core/view/chrome.d.ts +0 -9
  628. package/dist/core/view/chrome.js +0 -22
  629. package/dist/core/view/contract.d.ts +0 -205
  630. package/dist/core/view/contract.js +0 -23
  631. package/dist/core/view/loader.d.ts +0 -31
  632. package/dist/core/view/loader.js +0 -188
  633. package/dist/core/view/stream-local.d.ts +0 -3
  634. package/dist/core/view/stream-local.js +0 -231
  635. package/dist/core/view/transport-cache.d.ts +0 -8
  636. package/dist/core/view/transport-cache.js +0 -38
  637. package/dist/core/view/transport-local.d.ts +0 -7
  638. package/dist/core/view/transport-local.js +0 -83
  639. package/dist/core/view/transport-remote.d.ts +0 -2
  640. package/dist/core/view/transport.d.ts +0 -10
  641. package/dist/core/view/transport.js +0 -15
  642. package/dist/pi-extensions/naming-tool.d.ts +0 -24
  643. package/dist/pi-extensions/naming-tool.js +0 -67
  644. package/dist/prompts/view.d.ts +0 -7
  645. package/dist/prompts/view.js +0 -172
  646. package/dist/web/ViewChrome.d.ts +0 -7
  647. package/dist/web/ViewChrome.js +0 -28
  648. package/dist/web/ViewPane.d.ts +0 -39
  649. package/dist/web/ViewPane.js +0 -48
  650. package/dist/web/index.d.ts +0 -8
  651. package/dist/web/index.js +0 -22
  652. package/dist/web/runtime.d.ts +0 -39
  653. package/dist/web/runtime.js +0 -232
  654. package/dist/web/states.d.ts +0 -24
  655. package/dist/web/states.js +0 -24
  656. package/dist/web/transport-http.d.ts +0 -5
  657. package/dist/web/transport-http.js +0 -34
  658. package/dist/web/transport-stream.d.ts +0 -3
  659. package/dist/web/transport-stream.js +0 -204
  660. package/dist/web-client/assets/index-U_NZ66VE.js +0 -79
  661. package/dist/web-client/assets/index-aaeu4adv.css +0 -2
  662. /package/dist/{builtin-views/workspace-sidebar/__tests__/core.test.d.ts → clients/attach/__tests__/file-review-focus.test.d.ts} +0 -0
  663. /package/dist/clients/attach/__tests__/{visible-paths.test.d.ts → group-activity.test.d.ts} +0 -0
  664. /package/dist/{core/__tests__/chat-view-reconnect.test.d.ts → clients/attach/__tests__/input-controller-extension-command.test.d.ts} +0 -0
  665. /package/dist/{core/__tests__/full/consult-startup-failure.test.d.ts → clients/attach/__tests__/session-identity-refresh.test.d.ts} +0 -0
  666. /package/dist/{core/canvas/__tests__/human-work-outbox.test.d.ts → clients/inbox/__tests__/inbox-controller.test.d.ts} +0 -0
  667. /package/dist/{core/keybindings/__tests__/bespoke-consumers.test.d.ts → clients/inbox/__tests__/mount-panel.test.d.ts} +0 -0
  668. /package/dist/{core/tui/__tests__/host-keybindings.test.d.ts → clients/inbox/review/__tests__/editor-roundtrip.test.d.ts} +0 -0
  669. /package/dist/{core/view/__tests__/transport-cache.test.d.ts → clients/inbox/review/__tests__/remap.test.d.ts} +0 -0
  670. /package/dist/{core/view/__tests__/transport-remote.test.d.ts → clients/inbox/review/__tests__/review-core.test.d.ts} +0 -0
@@ -0,0 +1,19 @@
1
+ import { type ToolGroupSummary } from '../../shared/tool-groups.js';
2
+ export type ToolGroupPiece = {
3
+ type: 'tool';
4
+ name: string;
5
+ args: unknown;
6
+ } | {
7
+ type: 'result';
8
+ name: string;
9
+ result: unknown;
10
+ isError: boolean;
11
+ } | {
12
+ type: 'text';
13
+ text: string;
14
+ };
15
+ /** Serialize only the causal material around one group, with fixed per-piece
16
+ * and total budgets so a verbose tool result cannot dominate the light-model call. */
17
+ export declare function serializeToolGroup(previousBoundaryProse: string, pieces: readonly ToolGroupPiece[]): string;
18
+ /** Generate a structured summary object, or null on every failure. */
19
+ export declare function headlessToolGroupSummary(segment: string): Promise<ToolGroupSummary | null>;
@@ -0,0 +1,88 @@
1
+ // Broker-side, best-effort tool-group summarization. The only successful output
2
+ // path is the constrained submit_summary tool; failures deliberately yield no
3
+ // substitute object so callers leave the normal folded calls visible.
4
+ import { Type } from '@earendil-works/pi-ai';
5
+ import { headlessToolCall } from './headless-pi.js';
6
+ import { defaultProvider, modelLadders } from './model-selection.js';
7
+ import { lightModel } from './naming.js';
8
+ import { normalizeToolGroupSummary } from '../../shared/tool-groups.js';
9
+ const BOUNDARY_CAP = 600;
10
+ const TOOL_ARGS_CAP = 300;
11
+ const RESULT_CAP = 400;
12
+ const TEXT_CAP = 1_000;
13
+ const SEGMENT_CAP = 10_000;
14
+ const SUMMARY_TIMEOUT_MS = 45_000;
15
+ function capped(value, cap) {
16
+ const normalized = value.replace(/\s+/g, ' ').trim();
17
+ return normalized.length <= cap ? normalized : `${normalized.slice(0, Math.max(0, cap - 1)).trimEnd()}…`;
18
+ }
19
+ function printable(value, cap) {
20
+ try {
21
+ return capped(typeof value === 'string' ? value : JSON.stringify(value), cap);
22
+ }
23
+ catch {
24
+ return capped(String(value), cap);
25
+ }
26
+ }
27
+ /** Serialize only the causal material around one group, with fixed per-piece
28
+ * and total budgets so a verbose tool result cannot dominate the light-model call. */
29
+ export function serializeToolGroup(previousBoundaryProse, pieces) {
30
+ const lines = [`Previous visible message: ${capped(previousBoundaryProse, BOUNDARY_CAP) || '(none)'}`, 'Between-message activity:'];
31
+ for (const piece of pieces) {
32
+ if (piece.type === 'tool')
33
+ lines.push(`- tool ${piece.name}(${printable(piece.args, TOOL_ARGS_CAP)})`);
34
+ else if (piece.type === 'result')
35
+ lines.push(`- ${piece.isError ? 'error' : 'result'} ${piece.name}: ${printable(piece.result, RESULT_CAP)}`);
36
+ else
37
+ lines.push(`- context: ${capped(piece.text, TEXT_CAP)}`);
38
+ }
39
+ return capped(lines.join('\n'), SEGMENT_CAP);
40
+ }
41
+ // Tool mechanics, identifiers, and inbox bookkeeping produce a machine log rather
42
+ // than the glanceable human recap this surface needs, so the prompt asks only for
43
+ // very short outcomes while the structured fields retain the underlying stats.
44
+ const SUMMARY_SYSTEM_PROMPT = 'Create a structured recap of this coding-agent tool activity. ' +
45
+ 'Prefer 1–3 bullets and use at most 5 only for distinct meaningful outcomes. ' +
46
+ 'Each bullet must be an extremely readable plain-English outcome of 3–10 words, without markdown markers. ' +
47
+ 'Describe what changed or was accomplished, not the tools, commands, or investigation steps; for code work, say what capability was added to a one- or two-phrase plain-English part of the system, such as "Added scheduling controls to the worker service." ' +
48
+ 'Never include IDs, hashes, paths, filenames, command names, tool names, raw values, or report text. ' +
49
+ 'Omit inbox receipt, delivery, and queueing; node-response and report bookkeeping; help lookups; status checks; and summary-generation activity. ' +
50
+ 'A node response may support a substantive outcome, but its arrival or resummarization is never itself an outcome. ' +
51
+ 'If no meaningful outcome remains after those omissions, submit the single bullet "No meaningful changes." ' +
52
+ 'Count nodes created and distinct files created, modified, or deleted only when evidenced by the supplied tool arguments or results; otherwise use zero, even when the corresponding mechanics are omitted from bullets. ' +
53
+ 'Do not invent success when a result shows failure. ' +
54
+ 'Call submit_summary exactly once with bullets, nodesSpawned, and filesEdited, then stop.';
55
+ const SUBMIT_SUMMARY_SCHEMA = Type.Object({
56
+ bullets: Type.Array(Type.String({
57
+ minLength: 1,
58
+ maxLength: 120,
59
+ description: 'A very short, plain-English outcome without bullet markers, identifiers, or operational bookkeeping.',
60
+ }), { minItems: 1, maxItems: 5 }),
61
+ nodesSpawned: Type.Integer({
62
+ minimum: 0,
63
+ description: 'Count of nodes created during the supplied segment, or zero when none are evidenced.',
64
+ }),
65
+ filesEdited: Type.Integer({
66
+ minimum: 0,
67
+ description: 'Count of distinct files created, modified, or deleted during the supplied segment, or zero when none are evidenced.',
68
+ }),
69
+ }, { additionalProperties: false });
70
+ /** Generate a structured summary object, or null on every failure. */
71
+ export async function headlessToolGroupSummary(segment) {
72
+ const ladders = modelLadders();
73
+ const modelIntent = `${defaultProvider(ladders)}/light`;
74
+ return normalizeToolGroupSummary(await headlessToolCall({
75
+ systemPrompt: SUMMARY_SYSTEM_PROMPT,
76
+ userPrompt: `<tool-group>\n${segment}\n</tool-group>\n\nSummarize the activity above.`,
77
+ modelSpec: lightModel(),
78
+ modelIntent,
79
+ timeoutMs: SUMMARY_TIMEOUT_MS,
80
+ tool: {
81
+ name: 'submit_summary',
82
+ label: 'Submit summary',
83
+ description: 'Submit the structured tool-group activity recap exactly once, then stop.',
84
+ parameters: SUBMIT_SUMMARY_SCHEMA,
85
+ constrainedSampling: false,
86
+ },
87
+ }));
88
+ }
@@ -1,5 +1,4 @@
1
1
  import type { InstalledPlugin, Scope } from '../types.js';
2
- export declare function builtinViewsRoot(): string;
3
2
  export declare function builtinMemoryRoot(): string;
4
3
  export declare function builtinPiPackagesDir(): string;
5
4
  export declare function builtinPiPackageDir(name: string): string;
@@ -27,16 +26,12 @@ export declare function pluginsDir(scope: Scope): string | null;
27
26
  export declare function marketplacesDir(scope: Scope): string | null;
28
27
  /** Where substrate memory documents live per scope. Builtin memory is the
29
28
  * special case — its own package dir (builtinMemoryRoot), since the builtin
30
- * scope has no scopeRoot — mirroring viewsDir's builtin handling. User and
31
- * project memory live at scopeRoot(scope)/memory. */
29
+ * scope has no scopeRoot. User and project memory live at
30
+ * scopeRoot(scope)/memory. */
32
31
  export declare function scopeMemoryDir(scope: Scope): string | null;
33
32
  /** Where a plugin's substrate memory documents live: `<plugin.root>/memory`.
34
33
  * The resolver mounts these under the virtual `<pluginName>/` namespace. */
35
34
  export declare function pluginMemoryDir(plugin: InstalledPlugin): string;
36
- /** Where view definition dirs live per scope. Builtin views sit directly under
37
- * builtinViewsRoot() (no `views/` segment — they ARE the builtin views dir),
38
- * matching the loader's `<root>/<name>/core.mjs` resolution. */
39
- export declare function viewsDir(scope: Scope): string | null;
40
35
  export declare function resolveScopeArg(scopeArg: string | undefined): Scope | 'all';
41
36
  export declare function listScopes(scopeArg: string | undefined): Scope[];
42
37
  export declare function resetScopeCache(): void;
@@ -1,8 +1,8 @@
1
1
  import { homedir } from 'node:os';
2
2
  import { existsSync, statSync, realpathSync } from 'node:fs';
3
3
  import { join, resolve, dirname } from 'node:path';
4
- import { fileURLToPath } from 'node:url';
5
4
  import { CRTR_DIR_NAME } from '../types.js';
5
+ import { assetRoot } from './asset-root.js';
6
6
  import { usage } from './errors.js';
7
7
  import { loadProfileManifest } from './profiles/manifest.js';
8
8
  // Cache of resolved project-scope-root STACKS, keyed by (resolved cwd, profile
@@ -17,30 +17,13 @@ const scopeRootsCache = new Map();
17
17
  function scopeRootsCacheKey(resolvedStartDir, profileId) {
18
18
  return `${resolvedStartDir}\u0000${profileId ?? ''}`;
19
19
  }
20
- export function builtinViewsRoot() {
21
- // Resolved relative to this file: dist/core/scope.js → dist/builtin-views/
22
- // (src/ at dev time).
23
- const thisFile = fileURLToPath(import.meta.url);
24
- const coreDir = dirname(thisFile);
25
- const pkgDir = dirname(coreDir); // src/ or dist/
26
- return join(pkgDir, 'builtin-views');
27
- }
28
20
  export function builtinMemoryRoot() {
29
- // The substrate's shipped built-in documents live in their OWN package dir,
30
- // resolved relative to this file: dist/core/scope.js → dist/builtin-memory/
31
- // (src/ at dev time). This is a HARD special case (design verdict m2): builtin
32
- // memory is the only content the builtin scope carries — the scope has no
33
- // scopeRoot (scopeRoot('builtin') is null).
34
- const thisFile = fileURLToPath(import.meta.url);
35
- const coreDir = dirname(thisFile);
36
- const pkgDir = dirname(coreDir); // src/ or dist/
37
- return join(pkgDir, 'builtin-memory');
21
+ // Builtin memory is the only content the builtin scope carries — the scope
22
+ // has no scopeRoot (scopeRoot('builtin') is null).
23
+ return join(assetRoot(), 'builtin-memory');
38
24
  }
39
25
  export function builtinPiPackagesDir() {
40
- const thisFile = fileURLToPath(import.meta.url);
41
- const coreDir = dirname(thisFile);
42
- const pkgDir = dirname(coreDir); // src/ or dist/
43
- return join(pkgDir, 'builtin-pi-packages');
26
+ return join(assetRoot(), 'builtin-pi-packages');
44
27
  }
45
28
  export function builtinPiPackageDir(name) {
46
29
  return join(builtinPiPackagesDir(), name);
@@ -158,8 +141,8 @@ export function projectScopeRoots(startDir, profileId) {
158
141
  return findProjectScopeRoots(startDir, profileId);
159
142
  }
160
143
  export function scopeRoot(scope) {
161
- // The builtin scope has no scope-root dir: its only content is memory
162
- // (builtinMemoryRoot) and views (builtinViewsRoot), both hard special cases.
144
+ // The builtin scope has no scope-root dir; its content lives in dedicated
145
+ // package directories such as builtinMemoryRoot().
163
146
  if (scope === 'builtin')
164
147
  return null;
165
148
  return scope === 'user' ? userScopeRoot() : projectScopeRoot();
@@ -197,8 +180,8 @@ export function marketplacesDir(scope) {
197
180
  }
198
181
  /** Where substrate memory documents live per scope. Builtin memory is the
199
182
  * special case — its own package dir (builtinMemoryRoot), since the builtin
200
- * scope has no scopeRoot — mirroring viewsDir's builtin handling. User and
201
- * project memory live at scopeRoot(scope)/memory. */
183
+ * scope has no scopeRoot. User and project memory live at
184
+ * scopeRoot(scope)/memory. */
202
185
  export function scopeMemoryDir(scope) {
203
186
  if (scope === 'builtin')
204
187
  return builtinMemoryRoot();
@@ -210,15 +193,6 @@ export function scopeMemoryDir(scope) {
210
193
  export function pluginMemoryDir(plugin) {
211
194
  return join(plugin.root, 'memory');
212
195
  }
213
- /** Where view definition dirs live per scope. Builtin views sit directly under
214
- * builtinViewsRoot() (no `views/` segment — they ARE the builtin views dir),
215
- * matching the loader's `<root>/<name>/core.mjs` resolution. */
216
- export function viewsDir(scope) {
217
- if (scope === 'builtin')
218
- return builtinViewsRoot();
219
- const root = scope === 'user' ? userScopeRoot() : projectScopeRoot();
220
- return root ? join(root, 'views') : null;
221
- }
222
196
  export function resolveScopeArg(scopeArg) {
223
197
  if (scopeArg === undefined)
224
198
  return 'all';
@@ -70,7 +70,7 @@ export interface SubstrateSchema {
70
70
  * not invoked. Frontmatter key `slash`. */
71
71
  slash: boolean;
72
72
  /** The gap this doc exists to close — the observed agent failure that
73
- * prompted it (CTO ruling 2026-07-03, `taste/document-substrate` §"Rationale
73
+ * prompted it (CTO ruling 2026-07-03, `insights/agent-memory/document-substrate` §"Rationale
74
74
  * is a frontmatter field, never delivered"). MAINTAINER-FACING ONLY: excluded
75
75
  * from every delivered surface by construction — it is frontmatter, never
76
76
  * body, so it never reaches a boot render, on-read injection, or `memory
@@ -86,7 +86,7 @@ export interface SubstrateSchema {
86
86
  * path-derived fallback) and body. This single object flows through the whole
87
87
  * pipeline (gate eval → boot/on-read render), so a renderer never re-parses. */
88
88
  export interface SubstrateDoc extends SubstrateSchema {
89
- /** Resolver-supplied identity, e.g. `taste/document-substrate` or an explicit
89
+ /** Resolver-supplied identity, e.g. `insights/agent-memory/document-substrate` or an explicit
90
90
  * frontmatter name when one is present. */
91
91
  name: string;
92
92
  /** The scope this doc resolved from. */
@@ -0,0 +1,12 @@
1
+ import { type RenderedDoc } from './termrender.js';
2
+ export declare function isMarkdownFile(file: string): boolean;
3
+ /** Fence info string for a source file — `text` when the extension is unknown,
4
+ * which every highlighter degrades to plain text on. */
5
+ export declare function fenceLanguageFor(file: string): string;
6
+ /** Wrap source text as a fenced block. The fence is grown past the longest
7
+ * backtick run in the content, so a file that itself contains ``` can't close
8
+ * its own block. */
9
+ export declare function codeFenceDocument(content: string, language: string): string;
10
+ /** Render a source file as a syntax-highlighted code panel whose spans are
11
+ * source lines — the code-file counterpart of `renderReviewDoc`. */
12
+ export declare function codeRenderedDoc(content: string, language: string, width: number): RenderedDoc;
@@ -0,0 +1,92 @@
1
+ import { extname } from 'node:path';
2
+ import { documentLines } from '../document-lines.js';
3
+ import { renderMarkdownWithMap } from './termrender.js';
4
+ // ── Source files as review documents ─────────────────────────────────────────
5
+ //
6
+ // A review ticket may point at a .ts/.py/.sql source file, not just a .md
7
+ // artifact. Every surface still wants ONE rendering story, so a source file is
8
+ // presented as a single fenced code block: termrender (Pygments) and the
9
+ // browser (highlight.js) then syntax-highlight it for free, and the fence's
10
+ // language comes from the file extension.
11
+ //
12
+ // The one cost is a line shift: the fence's opening line makes source line N
13
+ // land on line N+1 of the wrapped document. `codeRenderedDoc` folds that back
14
+ // out so every span/anchor the surfaces expose is a real SOURCE line number.
15
+ /** Extension → fence info string. Names are the ones Pygments (termrender) and
16
+ * highlight.js (browser) both accept, so one map serves every surface. */
17
+ const FENCE_BY_EXT = {
18
+ '.ts': 'typescript', '.mts': 'typescript', '.cts': 'typescript', '.tsx': 'tsx',
19
+ '.js': 'javascript', '.mjs': 'javascript', '.cjs': 'javascript', '.jsx': 'jsx',
20
+ '.py': 'python', '.rb': 'ruby', '.go': 'go', '.rs': 'rust', '.java': 'java',
21
+ '.c': 'c', '.h': 'c', '.cc': 'cpp', '.cpp': 'cpp', '.hpp': 'cpp', '.cs': 'csharp',
22
+ '.swift': 'swift', '.kt': 'kotlin', '.php': 'php', '.lua': 'lua', '.pl': 'perl',
23
+ '.sh': 'bash', '.bash': 'bash', '.zsh': 'bash', '.fish': 'fish',
24
+ '.sql': 'sql', '.json': 'json', '.jsonc': 'json', '.yaml': 'yaml', '.yml': 'yaml',
25
+ '.toml': 'toml', '.ini': 'ini', '.xml': 'xml', '.html': 'html', '.htm': 'html',
26
+ '.css': 'css', '.scss': 'scss', '.less': 'less', '.vim': 'vim', '.el': 'lisp',
27
+ '.ex': 'elixir', '.exs': 'elixir', '.erl': 'erlang', '.hs': 'haskell',
28
+ '.scala': 'scala', '.dart': 'dart', '.r': 'r', '.jl': 'julia', '.zig': 'zig',
29
+ '.tf': 'terraform', '.proto': 'protobuf', '.graphql': 'graphql', '.gql': 'graphql',
30
+ '.dockerfile': 'dockerfile', '.diff': 'diff', '.patch': 'diff', '.csv': 'text',
31
+ '.txt': 'text', '.log': 'text', '.env': 'bash', '.mk': 'makefile',
32
+ };
33
+ /** Markdown extensions render as a DOCUMENT (headings, tables, Mermaid); every
34
+ * other text file renders as code. */
35
+ const MARKDOWN_EXTENSIONS = new Set(['.md', '.markdown', '.mdown', '.mkd']);
36
+ export function isMarkdownFile(file) {
37
+ return MARKDOWN_EXTENSIONS.has(extname(file).toLowerCase());
38
+ }
39
+ /** Fence info string for a source file — `text` when the extension is unknown,
40
+ * which every highlighter degrades to plain text on. */
41
+ export function fenceLanguageFor(file) {
42
+ const ext = extname(file).toLowerCase();
43
+ if (ext === '') {
44
+ // Extensionless but conventionally-named files still have obvious types.
45
+ const base = file.slice(file.lastIndexOf('/') + 1).toLowerCase();
46
+ if (base === 'dockerfile')
47
+ return 'dockerfile';
48
+ if (base === 'makefile')
49
+ return 'makefile';
50
+ return 'text';
51
+ }
52
+ return FENCE_BY_EXT[ext] ?? 'text';
53
+ }
54
+ /** Wrap source text as a fenced block. The fence is grown past the longest
55
+ * backtick run in the content, so a file that itself contains ``` can't close
56
+ * its own block. */
57
+ export function codeFenceDocument(content, language) {
58
+ let longest = 0;
59
+ for (const run of content.matchAll(/`+/g))
60
+ longest = Math.max(longest, run[0].length);
61
+ const fence = '`'.repeat(Math.max(3, longest + 1));
62
+ const body = content.endsWith('\n') ? content.slice(0, -1) : content;
63
+ return `${fence}${language}\n${body}\n${fence}\n`;
64
+ }
65
+ /** Shift a rendered wrapped-document map back onto SOURCE line numbers: the
66
+ * opening fence occupies line 1, so document line N is source line N-1.
67
+ *
68
+ * Rows that touch a fence line are the panel's border/title chrome, not
69
+ * source: they lose BOTH their span and their block row so nothing anchors to
70
+ * them — otherwise the top border would be a step in j/k that selects the
71
+ * whole file. */
72
+ function foldFenceOffset(doc, sourceLineCount) {
73
+ const closingFenceLine = sourceLineCount + 2;
74
+ const clamp = (line) => Math.max(1, Math.min(line - 1, sourceLineCount));
75
+ const chrome = doc.spans.map((span) => span !== null && (span[0] <= 1 || span[1] >= closingFenceLine));
76
+ return {
77
+ lines: doc.lines,
78
+ rows: doc.rows.map((row, index) => (chrome[index] === true ? null : row)),
79
+ spans: doc.spans.map((span, index) => {
80
+ if (span === null || chrome[index] === true)
81
+ return null;
82
+ return [clamp(span[0]), clamp(span[1])];
83
+ }),
84
+ blocks: doc.blocks.map((block) => ({ type: block.type, start: clamp(block.start), end: clamp(block.end) })),
85
+ };
86
+ }
87
+ /** Render a source file as a syntax-highlighted code panel whose spans are
88
+ * source lines — the code-file counterpart of `renderReviewDoc`. */
89
+ export function codeRenderedDoc(content, language, width) {
90
+ const sourceLineCount = documentLines(content).length;
91
+ return foldFenceOffset(renderMarkdownWithMap(codeFenceDocument(content, language), width), sourceLineCount);
92
+ }
@@ -0,0 +1,12 @@
1
+ /** Options for `display()` — the live-watch tmux pane surface. The pane always
2
+ * watches the file and live-updates on edits; there is no non-watched mode. */
3
+ export interface DisplayOpts {
4
+ /** `'auto'` (default) splits until the pane budget, then opens a new window. */
5
+ window?: 'auto' | 'split' | 'new';
6
+ /** Pane budget per window before `'auto'` opens a new window. Default 3. */
7
+ maxPanes?: number;
8
+ }
9
+ export declare function countPanesInCurrentWindow(): number;
10
+ export declare function display(path: string, opts?: DisplayOpts): {
11
+ paneId?: string;
12
+ };
@@ -0,0 +1,19 @@
1
+ import { spawnSync } from 'node:child_process';
2
+ import { displayInPane } from './termrender.js';
3
+ export function countPanesInCurrentWindow() {
4
+ // -t '' targets the current window of the current session.
5
+ const result = spawnSync('tmux', ['list-panes', '-F', '#{pane_id}'], {
6
+ encoding: 'utf8',
7
+ });
8
+ if (result.status !== 0)
9
+ return 0;
10
+ return result.stdout.split('\n').filter((line) => line.trim() !== '').length;
11
+ }
12
+ export function display(path, opts) {
13
+ const window = (opts?.window === 'split' || opts?.window === 'new') ? opts.window : 'auto';
14
+ const maxPanes = (opts?.maxPanes !== undefined && opts.maxPanes > 0) ? opts.maxPanes : 3;
15
+ const newWindow = window === 'new' ||
16
+ (window === 'auto' && countPanesInCurrentWindow() >= maxPanes);
17
+ // The pane always watches the file — displayed docs are live by definition.
18
+ return displayInPane(path, { newWindow });
19
+ }
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Memoized, self-healing. Guarantees at most one authoritative renderer
3
+ * lifecycle per process: trust a valid stamp outright (zero subprocess spawns),
4
+ * else run ONE provision/verify/publish transition under the exclusive lock.
5
+ * There is no permanent legacy-verifier fallback — the spawn-based verify
6
+ * (`binaryOk` + `installedVersion`) is a step INSIDE that single transition,
7
+ * always followed by publishing the stamp, never a lasting alternate path.
8
+ *
9
+ * Single degradation path: `uv` absent → one stderr remediation line + plaintext.
10
+ * win32 → plaintext (no renderer).
11
+ *
12
+ * Invoked at postinstall AND lazily on the first render/check/display call,
13
+ * so `npm ci --ignore-scripts` consumers still self-heal on first use.
14
+ */
15
+ export declare function ensureRenderer(): void;
16
+ /** Cheap predicate — true when the pinned managed binary is verified ready. Does not install or spawn. */
17
+ export declare function isRendererReady(): boolean;
18
+ /** Render markdown to terminal lines via the pinned binary; plaintext fallback. */
19
+ export declare function renderMarkdown(md: string, width: number): string[];
20
+ export interface RenderedDoc {
21
+ /** Rendered ANSI rows — byte-identical to the plain `doc render` output. */
22
+ lines: string[];
23
+ /** Per-row index into `blocks`; null for the blank separator rows between blocks. */
24
+ rows: (number | null)[];
25
+ /** Per-row finest 1-indexed inclusive source-line range the renderer knows
26
+ * (a bullet, a table row, a code line…); null for separator rows and rows
27
+ * of unmapped blocks. Same length as `lines`. */
28
+ spans: ([number, number] | null)[];
29
+ /** Per top-level block: its termrender block type plus 1-indexed inclusive
30
+ * source-line bounds. Never empty. */
31
+ blocks: {
32
+ type: string;
33
+ start: number;
34
+ end: number;
35
+ }[];
36
+ }
37
+ /** Render markdown with a row→source-line map via the pinned binary
38
+ * (`doc render --line-map`); plaintext paragraph-block fallback. */
39
+ export declare function renderMarkdownWithMap(md: string, width: number): RenderedDoc;
40
+ /**
41
+ * The shared block-aware mapped render: prose blocks keep the readability cap
42
+ * (`proseWidth`), while diagram blocks are re-rendered at the pane's full
43
+ * `paneWidth` and spliced back in by block index. Both surfaces (terminal
44
+ * review and the ask deck) go through this, so "which blocks may be wide" is
45
+ * decided once, from the renderer's own block types, never by heuristics on
46
+ * the emitted rows.
47
+ *
48
+ * Row order, block list and source spans are the narrow render's; only the
49
+ * rows OF a wide block are replaced, so anchoring stays source-based and
50
+ * unchanged.
51
+ */
52
+ export declare function renderMarkdownBlockAware(md: string, proseWidth: number, paneWidth: number): RenderedDoc;
53
+ /** Block-aware render as plain rows, for surfaces that do not anchor. */
54
+ export declare function renderMarkdownBlockAwareLines(md: string, proseWidth: number, paneWidth: number): string[];
55
+ /** Validate markdown via `termrender doc check`. */
56
+ export declare function checkMarkdown(md: string): {
57
+ ok: true;
58
+ } | {
59
+ ok: false;
60
+ error: string;
61
+ };
62
+ export interface DisplayInPaneOpts {
63
+ /** Open in a new tmux window instead of splitting the current one. */
64
+ newWindow?: boolean;
65
+ }
66
+ /**
67
+ * Spawn termrender into a live tmux pane. The pane-budget policy (whether to
68
+ * split vs open a new window) is decided by the caller (`src/surfaces/
69
+ * display.ts`); this is the thin managed-binary spawn it delegates to.
70
+ */
71
+ export declare function displayInPane(path: string, opts?: DisplayInPaneOpts): {
72
+ paneId?: string;
73
+ };