@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,17 @@
1
+ import { type Component, type TUI } from '@earendil-works/pi-tui';
2
+ import type { AttachPalette } from '../config.js';
3
+ /** A random line, never the one the previous whip used. */
4
+ export declare function randomWhipMessage(messages: readonly string[]): string;
5
+ /** A 20-frame, 12-row header animation that gives the focused agent a playful nudge. */
6
+ export declare class WhipAnimation implements Component {
7
+ private readonly tui;
8
+ private readonly pal;
9
+ private frame;
10
+ private timer;
11
+ constructor(tui: TUI, pal: Pick<AttachPalette, 'accent'>);
12
+ play(): void;
13
+ dispose(): void;
14
+ render(width: number): string[];
15
+ invalidate(): void;
16
+ private stop;
17
+ }
@@ -0,0 +1,334 @@
1
+ // session/whip.ts — viewer-local Sisyphus whip animation and steering cues.
2
+ import { truncateToWidth } from '@earendil-works/pi-tui';
3
+ const FRAME_MS = 40;
4
+ const WHIP_FRAMES = [
5
+ [
6
+ "",
7
+ "",
8
+ "",
9
+ "",
10
+ "",
11
+ "",
12
+ "",
13
+ "\u001b[1m⡄\u001b[22m",
14
+ "\u001b[1m⠃\u001b[22m",
15
+ "\u001b[1m⢀\u001b[22m\u001b[1m⡠\u001b[22m/⢤⡀",
16
+ "\u001b[1m⠋\u001b[22m ⠑⠦⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠄",
17
+ ""
18
+ ],
19
+ [
20
+ "",
21
+ "",
22
+ "",
23
+ "",
24
+ "",
25
+ "",
26
+ "",
27
+ "\u001b[1m⡄\u001b[22m",
28
+ "\u001b[1m⠃\u001b[22m",
29
+ "\u001b[1m⢀\u001b[22m\u001b[1m⡠\u001b[22m/⠔⠒⠦⠤⣄⣀",
30
+ "\u001b[1m⠋\u001b[22m ⠈⠉⠓⠒⠦⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠄",
31
+ ""
32
+ ],
33
+ [
34
+ "",
35
+ "",
36
+ "",
37
+ "",
38
+ "",
39
+ "",
40
+ "",
41
+ "\u001b[1m⣦\u001b[22m",
42
+ "\u001b[1m⡟\u001b[22m\u001b[1m⢀\u001b[22m/⠔⠒⠦⠤⣄⣀⡀",
43
+ "\u001b[1m⣧\u001b[22m\u001b[1m⠎\u001b[22m ⠉⠙⠒⠦⠤⣄⣀",
44
+ "\u001b[1m⠏\u001b[22m ⠉⠙⠒⠒⠦⠤⠤⠤⠤⠤⠤⠤⠄",
45
+ ""
46
+ ],
47
+ [
48
+ "",
49
+ "",
50
+ "",
51
+ "",
52
+ "",
53
+ "",
54
+ "",
55
+ "\u001b[1m⣦\u001b[22m ⡤⠤⠤⢤⣀⡀",
56
+ "\u001b[1m⡟\u001b[22m\u001b[1m⢀\u001b[22m/⠜ ⠉⠙⠒⠦⠤⢄⣀⡀",
57
+ "\u001b[1m⣧\u001b[22m\u001b[1m⠎\u001b[22m ⠉⠉⠑⠒⠦⠤⢄⣀⡀",
58
+ "\u001b[1m⠏\u001b[22m ⠈⠉⠑⠒⠆",
59
+ ""
60
+ ],
61
+ [
62
+ "",
63
+ "",
64
+ "",
65
+ "",
66
+ "",
67
+ "",
68
+ " ⡤⠤⠤⠤⣄⣀",
69
+ "\u001b[1m⣴\u001b[22m\u001b[1m⢰\u001b[22m/⠜ ⠈⠉⠓⠦⢤⣀",
70
+ "\u001b[1m⢿\u001b[22m\u001b[1m⣼\u001b[22m\u001b[1m⡇\u001b[22m ⠈⠑⠦⣄⡀",
71
+ "\u001b[1m⢸\u001b[22m\u001b[1m⣿\u001b[22m\u001b[1m⠃\u001b[22m ⠉⠓⠦⠤⣀⣀",
72
+ "\u001b[1m⢸\u001b[22m\u001b[1m⣿\u001b[22m ⠈⠉⠉⠓⠒⠆",
73
+ " \u001b[1m⠛\u001b[22m"
74
+ ],
75
+ [
76
+ "",
77
+ "",
78
+ "",
79
+ "",
80
+ "",
81
+ " ⡤⠤⠤⠤⣄⣀",
82
+ " \u001b[1m⠠\u001b[22m/⠜ ⠈⠉⠓⠦⢤⣀",
83
+ "\u001b[1m⢤\u001b[22m \u001b[1m⣿\u001b[22m ⠈⠙⠲⢤⡀",
84
+ " \u001b[1m⢣\u001b[22m\u001b[1m⢻\u001b[22m\u001b[1m⡆\u001b[22m ⠈⠑⠦⢄⡀",
85
+ " \u001b[1m⢻\u001b[22m\u001b[1m⡇\u001b[22m ⠈⠑⠢⢄⡀",
86
+ " \u001b[1m⠈\u001b[22m\u001b[1m⠛\u001b[22m ⠈⠑⠆",
87
+ ""
88
+ ],
89
+ [
90
+ "",
91
+ "",
92
+ "",
93
+ "",
94
+ " ⡤⠤⠤⠤⣄⣀",
95
+ " /⠜ ⠈⠉⠓⠦⢤⣀",
96
+ " \u001b[1m⢸\u001b[22m\u001b[1m⡀\u001b[22m ⠈⠙⠲⢤⡀",
97
+ "\u001b[1m⠤\u001b[22m\u001b[1m⣄\u001b[22m \u001b[1m⢇\u001b[22m ⠈⠑⠦⢄⡀",
98
+ " \u001b[1m⠈\u001b[22m\u001b[1m⠓\u001b[22m\u001b[1m⢼\u001b[22m\u001b[1m⡄\u001b[22m ⠈⠑⠢⢄⡀",
99
+ " ⠈⠑⠆",
100
+ "",
101
+ ""
102
+ ],
103
+ [
104
+ "",
105
+ "",
106
+ "",
107
+ " ⣀⡠⠤⠤⠤⠤⠤⠤⣄⣀",
108
+ " ⣠⠔⠚⠉ ⠈⠉⠓⠦⢤⣀",
109
+ " /⠜⠁ ⠈⠙⠦⣀",
110
+ " \u001b[1m⢸\u001b[22m\u001b[1m⡀\u001b[22m ⠈⢧",
111
+ "\u001b[1m⠤\u001b[22m\u001b[1m⣄\u001b[22m \u001b[1m⢇\u001b[22m ⡇",
112
+ " \u001b[1m⠈\u001b[22m\u001b[1m⠓\u001b[22m\u001b[1m⢼\u001b[22m\u001b[1m⡄\u001b[22m ⡇",
113
+ " ⠇",
114
+ "",
115
+ ""
116
+ ],
117
+ [
118
+ "",
119
+ " ⢀⣠⠤⠤⠤⠤⠤⣄⣀",
120
+ " ⣠⠔⠊⠁ ⠈⠙⠦⣄",
121
+ " ⢀⡴⠋ ⠈⢳⡀",
122
+ " ⣠⠔⠋ ⢧",
123
+ " /⠜⠁ ⡎",
124
+ " \u001b[1m⢸\u001b[22m\u001b[1m⡀\u001b[22m ⢠⠃",
125
+ "\u001b[1m⠤\u001b[22m\u001b[1m⣄\u001b[22m \u001b[1m⢇\u001b[22m ⠜",
126
+ " \u001b[1m⠈\u001b[22m\u001b[1m⠓\u001b[22m\u001b[1m⢼\u001b[22m\u001b[1m⡄\u001b[22m",
127
+ "",
128
+ "",
129
+ ""
130
+ ],
131
+ [
132
+ " ⣀⡤⠤⢤⡀",
133
+ " ⣀⡤⠔⠋⠁ ⢧",
134
+ " ⣠⠔⠋⠁ ⢸",
135
+ " ⣠⠞⠁ ⡜",
136
+ " ⢀⠜⠁ ⡼⠁",
137
+ " \u001b[1m⠠\u001b[22m/⠔⠁ ⠜⠁",
138
+ " \u001b[1m⣿\u001b[22m",
139
+ "\u001b[1m⢤\u001b[22m\u001b[1m⡀\u001b[22m \u001b[1m⣿\u001b[22m",
140
+ " \u001b[1m⠙\u001b[22m\u001b[1m⢦\u001b[22m\u001b[1m⣹\u001b[22m\u001b[1m⡇\u001b[22m",
141
+ " \u001b[1m⠙\u001b[22m\u001b[1m⠃\u001b[22m",
142
+ "",
143
+ ""
144
+ ],
145
+ [
146
+ " ⣀⡤⠤⢤⡀",
147
+ " ⣀⡤⠔⠋⠁ ⡇",
148
+ " ⣠⣴⠯⠕⠒⠒⠲⠤⠤⠔⠚⠁",
149
+ " ⢠⠔⠒⠦⠤⠔⣲⠟⠁",
150
+ " ⠜ ⢀⠜⠁",
151
+ " \u001b[1m⠠\u001b[22m/⠔⠁",
152
+ " \u001b[1m⣿\u001b[22m",
153
+ "\u001b[1m⢤\u001b[22m\u001b[1m⡀\u001b[22m \u001b[1m⣿\u001b[22m",
154
+ " \u001b[1m⠙\u001b[22m\u001b[1m⢦\u001b[22m\u001b[1m⣹\u001b[22m\u001b[1m⡇\u001b[22m",
155
+ " \u001b[1m⠙\u001b[22m\u001b[1m⠃\u001b[22m",
156
+ "",
157
+ ""
158
+ ],
159
+ [
160
+ " ⣀⡤⠤⢤⡀",
161
+ " ⣀⡤⠔⠋⠁ ⡇",
162
+ " ⣠⣴⠯⠕⠒⠒⠲⠤⠤⠔⠚⠁",
163
+ " ⢠⠔⠒⠦⠤⠔⣲⠟⠁",
164
+ " ⠜ ⢀⠜⠁",
165
+ " \u001b[1m⠠\u001b[22m/⠔⠁",
166
+ " \u001b[1m⣿\u001b[22m",
167
+ "\u001b[1m⢤\u001b[22m\u001b[1m⡀\u001b[22m \u001b[1m⣿\u001b[22m",
168
+ " \u001b[1m⠙\u001b[22m\u001b[1m⢦\u001b[22m\u001b[1m⣹\u001b[22m\u001b[1m⡇\u001b[22m",
169
+ " \u001b[1m⠙\u001b[22m\u001b[1m⠃\u001b[22m",
170
+ "",
171
+ ""
172
+ ],
173
+ [
174
+ "",
175
+ "",
176
+ "",
177
+ "",
178
+ "",
179
+ "",
180
+ "",
181
+ "\u001b[1m⠤\u001b[22m\u001b[1m⣄\u001b[22m ⢀⣠⠤⠔⠒⠒⠒⠒⠒⠒⠒⠦⠤⠤⠤⠤⠤⠤⠤⠄",
182
+ " \u001b[1m⠈\u001b[22m\u001b[1m⠓\u001b[22m\u001b[1m⢤\u001b[22m\u001b[1m⣀\u001b[22m\u001b[1m⣀\u001b[22m\u001b[1m⠤\u001b[22m\u001b[1m⠤\u001b[22m/⠔⠊⠁",
183
+ "",
184
+ "",
185
+ ""
186
+ ],
187
+ [
188
+ "",
189
+ "",
190
+ "",
191
+ "",
192
+ "",
193
+ "",
194
+ " \\\\|/",
195
+ "\u001b[1m⠤\u001b[22m\u001b[1m⣄\u001b[22m ⢀⣠⠤⠔⠒⠒⠒⠒⠒⠒⠒⠦⠤⠤⠤⠤-*-",
196
+ " \u001b[1m⠈\u001b[22m\u001b[1m⠓\u001b[22m\u001b[1m⢤\u001b[22m\u001b[1m⣀\u001b[22m\u001b[1m⣀\u001b[22m\u001b[1m⠤\u001b[22m\u001b[1m⠤\u001b[22m/⠔⠊⠁ /|\\\\",
197
+ "",
198
+ "",
199
+ ""
200
+ ],
201
+ [
202
+ "",
203
+ "",
204
+ "",
205
+ "",
206
+ "",
207
+ "",
208
+ "",
209
+ "\u001b[1m⢤\u001b[22m\u001b[1m⡀\u001b[22m",
210
+ " \u001b[1m⠳\u001b[22m\u001b[1m⡀\u001b[22m \u001b[1m⣠\u001b[22m/⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠄ ',.",
211
+ " \u001b[1m⠹\u001b[22m\u001b[1m⣄\u001b[22m\u001b[1m⡤\u001b[22m\u001b[1m⠋\u001b[22m . .",
212
+ " \u001b[1m⠉\u001b[22m",
213
+ ""
214
+ ],
215
+ [
216
+ "",
217
+ "",
218
+ "",
219
+ "",
220
+ "",
221
+ "",
222
+ "",
223
+ "\u001b[1m⣴\u001b[22m",
224
+ "\u001b[1m⢻\u001b[22m\u001b[1m⡆\u001b[22m",
225
+ "\u001b[1m⢸\u001b[22m\u001b[1m⡇\u001b[22m \u001b[1m⣠\u001b[22m/⠔⠒⠒⠦⠤⣄⣀",
226
+ " \u001b[1m⣿\u001b[22m\u001b[1m⣠\u001b[22m\u001b[1m⠞\u001b[22m\u001b[1m⠁\u001b[22m ⠈⠉⠓⠒⠦⠤⠤⠤⠤⠤⠤⠤⠤⠤⠄ . .",
227
+ " \u001b[1m⠛\u001b[22m\u001b[1m⠁\u001b[22m"
228
+ ],
229
+ [
230
+ "",
231
+ "",
232
+ "",
233
+ "",
234
+ "",
235
+ "",
236
+ "",
237
+ "\u001b[1m⣦\u001b[22m",
238
+ "\u001b[1m⡿\u001b[22m",
239
+ "\u001b[1m⡇\u001b[22m \u001b[1m⣠\u001b[22m/⢤⡀",
240
+ "\u001b[1m⣧\u001b[22m\u001b[1m⠞\u001b[22m\u001b[1m⠁\u001b[22m ⠉⠓⠦⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠄",
241
+ "\u001b[1m⠁\u001b[22m"
242
+ ],
243
+ [
244
+ "",
245
+ "",
246
+ "",
247
+ "",
248
+ "",
249
+ "",
250
+ "",
251
+ "\u001b[1m⡄\u001b[22m",
252
+ "\u001b[1m⠃\u001b[22m",
253
+ "\u001b[1m⢀\u001b[22m\u001b[1m⡠\u001b[22m/⢤",
254
+ "\u001b[1m⠋\u001b[22m ⠈⠓⠦⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠄",
255
+ ""
256
+ ],
257
+ [
258
+ "",
259
+ "",
260
+ "",
261
+ "",
262
+ "",
263
+ "",
264
+ "",
265
+ "\u001b[1m⡄\u001b[22m",
266
+ "\u001b[1m⠃\u001b[22m",
267
+ "\u001b[1m⢀\u001b[22m\u001b[1m⡠\u001b[22m/⢤⡀",
268
+ "\u001b[1m⠋\u001b[22m ⠑⠦⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠄",
269
+ ""
270
+ ],
271
+ [
272
+ "",
273
+ "",
274
+ "",
275
+ "",
276
+ "",
277
+ "",
278
+ "",
279
+ "\u001b[1m⡄\u001b[22m",
280
+ "\u001b[1m⠃\u001b[22m",
281
+ "\u001b[1m⢀\u001b[22m\u001b[1m⡠\u001b[22m/⢤⡀",
282
+ "\u001b[1m⠋\u001b[22m ⠑⠦⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠤⠄",
283
+ ""
284
+ ]
285
+ ];
286
+ let lastMessage;
287
+ /** A random line, never the one the previous whip used. */
288
+ export function randomWhipMessage(messages) {
289
+ const choices = messages.filter((message) => message !== lastMessage);
290
+ const message = choices[Math.floor(Math.random() * choices.length)];
291
+ lastMessage = message;
292
+ return message;
293
+ }
294
+ /** A 20-frame, 12-row header animation that gives the focused agent a playful nudge. */
295
+ export class WhipAnimation {
296
+ tui;
297
+ pal;
298
+ frame = -1;
299
+ timer;
300
+ constructor(tui, pal) {
301
+ this.tui = tui;
302
+ this.pal = pal;
303
+ }
304
+ play() {
305
+ this.stop();
306
+ this.frame = 0;
307
+ this.tui.requestRender();
308
+ this.timer = setInterval(() => {
309
+ this.frame++;
310
+ if (this.frame < WHIP_FRAMES.length) {
311
+ this.tui.requestRender();
312
+ return;
313
+ }
314
+ this.stop();
315
+ }, FRAME_MS);
316
+ }
317
+ dispose() {
318
+ this.stop();
319
+ }
320
+ render(width) {
321
+ if (this.frame < 0)
322
+ return [];
323
+ const span = Math.max(0, width);
324
+ return WHIP_FRAMES[this.frame].map((line) => truncateToWidth(this.pal.accent(line), span, '', true));
325
+ }
326
+ invalidate() { }
327
+ stop() {
328
+ if (this.timer !== undefined)
329
+ clearInterval(this.timer);
330
+ this.timer = undefined;
331
+ this.frame = -1;
332
+ this.tui.requestRender();
333
+ }
334
+ }
@@ -1,4 +1,5 @@
1
1
  import type { AutocompleteItem, SlashCommand } from '@earendil-works/pi-tui';
2
+ import type { CopyTarget } from '../render/transcript-copy.js';
2
3
  import type { BrokerSnapshot, ClientRole, ClientToBroker } from '../../../core/runtime/broker-protocol.js';
3
4
  /** Everything a slash handler needs: the frame sink, a notice sink, the latest
4
5
  * engine state (for read-only commands like `/session`), and the cwd (for the
@@ -38,6 +39,10 @@ export interface SlashContext {
38
39
  * registers `/graph` as a stub that calls this hook. Unit C/Q owns the overlay
39
40
  * itself and populates this; when absent `/graph` notifies it isn't wired yet. */
40
41
  onGraph?: () => void;
42
+ /** Toggle the human inbox surface from `/inbox`. */
43
+ onInbox?: () => void;
44
+ /** Toggle the in-process Help overlay from `/hotkeys`. */
45
+ onHelp?: () => void;
41
46
  /** Detach this viewer (`/quit`). A viewer quit DETACHES — it tears down the
42
47
  * local TUI/socket and leaves the shared engine running. Wired by viewer.ts to
43
48
  * `teardown('detach')`; without it `/quit` cannot actually exit (just sending
@@ -47,6 +52,8 @@ export interface SlashContext {
47
52
  /** Copy the last assistant message to the clipboard (`/copy`). Wired by
48
53
  * viewer.ts (it owns the ChatView that holds the text + the clipboard writer). */
49
54
  onCopy?: () => void;
55
+ /** Copy one viewer-local transcript target. */
56
+ onCopyTarget?: (target: CopyTarget) => void;
50
57
  /** OPTIONAL native-picker openers — the InputController fills these from its
51
58
  * read-op request channel. When absent (channel unwired) the value-picker
52
59
  * builtins fall back to the text-arg notice. */
@@ -75,11 +82,16 @@ export interface SlashContext {
75
82
  * viewer-local render state (ChatView owns it), so it is safe for an observer
76
83
  * and for a remote attach. Absent → the command notifies it is unwired. */
77
84
  onFoldTools?: () => void;
85
+ /** Toggle mouse wheel scrolling reporting on/off. Viewer-local render state
86
+ * (MouseReporting owns the reporting state and the hardware toggle), so it is
87
+ * safe for an observer and for a remote attach. Absent → the command notifies
88
+ * it is unwired. */
89
+ onToggleMouse?: () => void;
78
90
  }
79
91
  /** Canvas slash-commands — implemented NATIVE in the viewer, the ONLY live host:
80
92
  * the broker binds mode:'rpc', so broker pi-extensions never run their
81
93
  * interactive (mode==='tui') paths. `/promote` triggers a turn after shelling
82
- * `crtr node promote`; `/resume-node`, `/view`, `/context` each shell a `crtr`
94
+ * `crtr node promote`; `/resume-node` and `/context` each shell a `crtr`
83
95
  * subcommand via `tmux display-popup` (the viewer runs inside a tmux pane);
84
96
  * `/graph` toggles the in-process overlay. Exported so the editor folds these
85
97
  * into the slash autocomplete list. */
@@ -27,32 +27,35 @@ import { surfaceTmuxStyleArgs } from '../../../core/runtime/surface-bg.js';
27
27
  /** Canvas slash-commands — implemented NATIVE in the viewer, the ONLY live host:
28
28
  * the broker binds mode:'rpc', so broker pi-extensions never run their
29
29
  * interactive (mode==='tui') paths. `/promote` triggers a turn after shelling
30
- * `crtr node promote`; `/resume-node`, `/view`, `/context` each shell a `crtr`
30
+ * `crtr node promote`; `/resume-node` and `/context` each shell a `crtr`
31
31
  * subcommand via `tmux display-popup` (the viewer runs inside a tmux pane);
32
32
  * `/graph` toggles the in-process overlay. Exported so the editor folds these
33
33
  * into the slash autocomplete list. */
34
34
  export const CANVAS_SLASH_COMMANDS = [
35
35
  { name: 'clear', description: 'Clear the conversation and free context — a fresh, empty session (like /new)' },
36
36
  { name: 'graph', description: 'Toggle the canvas GRAPH view (your local subscription tree)' },
37
+ { name: 'inbox', description: 'Toggle the human inbox — pending asks and reviews for you' },
37
38
  { name: 'promote', description: 'Promote this node to an orchestrator — /promote, or /promote <kind> to specialize' },
38
39
  { name: 'resume-node', description: 'Open the canvas navigator (search/scope/sort/tree) and resume the chosen node' },
39
- { name: 'view', description: 'Open a view in a popup — bare for the picker, or /view <name> to open that view directly' },
40
40
  { name: 'context', description: 'Browse this node + its subscriptions’ context dirs in a read-only nvim popup' },
41
41
  { name: 'node-metadata', description: 'Inspect this node — identity, lifecycle, runtime, graph, artifacts, paths, and agent surfaces' },
42
42
  { name: 'mcp', description: 'MCP servers — status from the adapter’s config/cache; Enter (or /mcp <server>) connects, reconnects, or re-auths' },
43
43
  { name: 'rename', description: 'Rename this node everywhere — node row, viewer window, session chip, tmux pane: /rename <name>' },
44
44
  { name: 'color', description: 'Color this node — tmux pane outline + name chip: /color <color> (red, blue, #rrggbb, …) or /color none' },
45
- { name: 'fold-tools', description: 'View setting — fold every FINISHED tool call to its single call line (Alt+C → w → f)' },
45
+ { name: 'mouse', description: 'Toggle mouse wheel scrolling — off restores tmux drag-select and copy-mode mouse' },
46
+ { name: 'copy-message', description: 'Copy the newest message visible in the transcript viewport' },
47
+ { name: 'copy-tool', description: 'Copy the newest tool call output' },
48
+ { name: 'copy-transcript', description: 'Copy every copyable transcript block' },
49
+ { name: 'fold-tools', description: 'View setting — fold every FINISHED tool call to its single call line (Alt+C → z → f)' },
46
50
  ];
47
51
  const CANVAS_NAMES = new Set(CANVAS_SLASH_COMMANDS.map((c) => c.name));
48
52
  /** Native canvas commands that shell a LOCAL `crtr` mutation or read against
49
- * `ctx.nodeId` — unsafe for a remote attach (Phase 3 review 2, findings-fix-
50
- * review.md §1): `/promote` shells `crtr node promote --node` locally,
51
- * `/resume-node` opens local `crtr canvas browse` whose Enter path focuses a
52
- * local node, `/context` opens local `crtr node inspect context`. `/graph`
53
- * (the in-process GRAPH overlay, already remote-safe — see overlays/graph.ts)
54
- * and `/view` (a self-contained popup unrelated to `nodeId`) stay available. */
55
- const REMOTE_UNSAFE_CANVAS_NAMES = new Set(['promote', 'resume-node', 'context', 'node-metadata', 'rename', 'clear', 'mcp']);
53
+ * `ctx.nodeId` — unsafe for a remote attach: `/promote` shells `crtr node
54
+ * promote --node` locally, `/resume-node` opens local `crtr canvas browse`
55
+ * whose Enter path focuses a local node, and `/context` opens local `crtr node
56
+ * inspect context`. `/graph` stays available because its in-process overlay
57
+ * handles remote canvases directly. */
58
+ const REMOTE_UNSAFE_CANVAS_NAMES = new Set(['promote', 'resume-node', 'context', 'node-metadata', 'rename', 'clear', 'mcp', 'inbox']);
56
59
  /** Native canvas commands an OBSERVER may not run — the ones that drive the
57
60
  * engine or mutate the node, whether by frame or by shelling the crtr CLI:
58
61
  * `/clear` sends `new_session`; `/promote` shells `crtr node promote` and then
@@ -63,7 +66,7 @@ const REMOTE_UNSAFE_CANVAS_NAMES = new Set(['promote', 'resume-node', 'context',
63
66
  * `/graph` (in-process overlay), `/context` and `/node-metadata` (read-only
64
67
  * inspection popups), `/color` (this pane's tmux border + this viewer's name
65
68
  * chip). */
66
- const OBSERVER_UNSAFE_CANVAS_NAMES = new Set(['clear', 'promote', 'rename', 'resume-node', 'view', 'mcp']);
69
+ const OBSERVER_UNSAFE_CANVAS_NAMES = new Set(['clear', 'promote', 'rename', 'resume-node', 'mcp']);
67
70
  /** tmux named colours accepted by `/color` (plus `colourN`/`#rrggbb`, validated
68
71
  * by pattern). Mirrors tmux's colour-name table so a typo is rejected with the
69
72
  * options rather than silently ignored by tmux. */
@@ -301,10 +304,14 @@ export function dispatchSlashCommand(text, ctx) {
301
304
  case 'changelog':
302
305
  ctx.notify('/changelog: see https://github.com/earendil-works/pi for release notes (no bundled changelog in this build)');
303
306
  return true;
304
- // --- recognized builtins with no Phase-4 wire path --------------------
305
307
  case 'hotkeys':
306
- ctx.notify(`/${name} is not available in attach (Phase 4)`);
308
+ if (ctx.onHelp) {
309
+ ctx.onHelp();
310
+ return true;
311
+ }
312
+ ctx.notify('/hotkeys is not available in this viewer');
307
313
  return true;
314
+ // --- recognized builtins with no Phase-4 wire path --------------------
308
315
  default:
309
316
  // A builtin we listed but didn't special-case: treat as unsupported
310
317
  // rather than leak it to the LLM as literal text.
@@ -359,6 +366,12 @@ function dispatchCanvasCommand(name, arg, ctx) {
359
366
  else
360
367
  ctx.notify('The GRAPH overlay is not wired into the viewer yet');
361
368
  return true;
369
+ case 'inbox':
370
+ if (ctx.onInbox)
371
+ ctx.onInbox();
372
+ else
373
+ ctx.notify('The inbox surface is not wired into the viewer yet');
374
+ return true;
362
375
  case 'promote':
363
376
  promoteNode(arg, ctx);
364
377
  return true;
@@ -366,10 +379,6 @@ function dispatchCanvasCommand(name, arg, ctx) {
366
379
  // Open the full-screen canvas navigator as a popup; on Enter it focuses the
367
380
  // chosen node back into THIS pane via `crtr surface node focus`.
368
381
  return resumeNode(ctx);
369
- case 'view':
370
- // Bare `/view` opens the picker, `/view <name>` opens that view directly —
371
- // each as a self-contained popup (no node-focus, no return-pane).
372
- return openView(arg, ctx);
373
382
  case 'mcp':
374
383
  // MCP server status panel — viewer-local reads of the adapter's on-disk
375
384
  // config sources/cache (see overlays/mcp.ts); the actions (connect /
@@ -402,6 +411,31 @@ function dispatchCanvasCommand(name, arg, ctx) {
402
411
  else
403
412
  ctx.notify('The fold-tools view setting is not wired into this viewer');
404
413
  return true;
414
+ case 'mouse':
415
+ // Viewer-local render state only — no frame, no CLI, no node mutation.
416
+ if (ctx.onToggleMouse)
417
+ ctx.onToggleMouse();
418
+ else
419
+ ctx.notify('Mouse reporting is not wired into this viewer');
420
+ return true;
421
+ case 'copy-message':
422
+ if (ctx.onCopyTarget)
423
+ ctx.onCopyTarget('message');
424
+ else
425
+ ctx.notify('/copy-message is not available in this viewer');
426
+ return true;
427
+ case 'copy-tool':
428
+ if (ctx.onCopyTarget)
429
+ ctx.onCopyTarget('tool');
430
+ else
431
+ ctx.notify('/copy-tool is not available in this viewer');
432
+ return true;
433
+ case 'copy-transcript':
434
+ if (ctx.onCopyTarget)
435
+ ctx.onCopyTarget('transcript');
436
+ else
437
+ ctx.notify('/copy-transcript is not available in this viewer');
438
+ return true;
405
439
  default:
406
440
  ctx.notify(`/${name} is not available in attach`);
407
441
  return true;
@@ -587,18 +621,6 @@ function resumeNode(ctx) {
587
621
  popup(cmd);
588
622
  return true;
589
623
  }
590
- /** `/view [name]`. Bare opens the picker; with a name it opens that view directly. Self-contained
591
- * popup — no node-focus, no return-pane. */
592
- function openView(arg, ctx) {
593
- if (process.env['TMUX'] === undefined) {
594
- ctx.notify('/view needs tmux');
595
- return true;
596
- }
597
- const name = arg.trim();
598
- const cmd = name === '' ? 'crtr surface view pick' : `crtr surface view run ${shellQuote(name)}`;
599
- popup(cmd);
600
- return true;
601
- }
602
624
  /** `/context`. Opens `crtr node inspect context` as a popup — a
603
625
  * read-only nvim explorer over this node's + its subscriptions' context dirs.
604
626
  * Self-contained popup — no node-focus, no return-pane. */