@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
@@ -1,6 +1,6 @@
1
1
  import { isDeepStrictEqual } from 'node:util';
2
2
  import { BINDING_CATALOG, BINDING_IDS, SAFETY_REQUIREMENTS } from './catalog.js';
3
- import { readRawScopeConfig } from '../config.js';
3
+ import { normalizeTmuxPassthrough, readRawScopeConfig } from '../config.js';
4
4
  const MODIFIER_ORDER = ['ctrl', 'alt', 'shift'];
5
5
  const INPUT_MODIFIERS = new Set(['ctrl', 'alt', 'shift', 'meta']);
6
6
  const NAMED_KEYS = new Set([
@@ -312,9 +312,16 @@ export function resolveKeybindings(rawOverrides = undefined) {
312
312
  };
313
313
  return Object.freeze(result);
314
314
  }
315
- export function resolveUserKeybindings() {
315
+ /** Resolve keybindings and tmux passthrough from one immutable user-config snapshot. */
316
+ export function resolveUserKeybindingSettings() {
316
317
  const raw = readRawScopeConfig('user');
317
- return resolveKeybindings(raw?.keybindings);
318
+ return Object.freeze({
319
+ bindings: resolveKeybindings(raw?.keybindings),
320
+ tmuxPassthrough: Object.freeze(normalizeTmuxPassthrough(raw?.tmux_passthrough)),
321
+ });
322
+ }
323
+ export function resolveUserKeybindings() {
324
+ return resolveUserKeybindingSettings().bindings;
318
325
  }
319
326
  export function normalizeSparseOverrides(rawOverrides) {
320
327
  const resolved = resolveKeybindings(rawOverrides);
@@ -1,8 +1,7 @@
1
1
  // inline-ref-grammar.ts — the single source of truth for the inline
2
2
  // memory-reference token grammar (spec §4.1). Zero imports, pure string ops,
3
- // browser-safe: the broker, the terminal attach viewer, and the web composer
4
- // all import THIS module (directly, or via the browser barrel re-export in
5
- // `src/web/index.ts`) rather than each re-implementing `[A-Za-z0-9_:-]`,
3
+ // browser-safe: the broker, terminal attach viewer, and web composer all import
4
+ // this module directly rather than each re-implementing `[A-Za-z0-9_:-]`,
6
5
  // trimming, boundary detection, or `:` decoding. Divergence between the
7
6
  // viewer's highlight rule and the broker's resolution rule would let a
8
7
  // highlighted token yield no guidance (or vice versa) — see the spec and
@@ -1,16 +1,16 @@
1
1
  import { type InstalledPlugin, type Scope } from '../types.js';
2
2
  /**
3
- * Thin memory-document resolver for the document substrate. Precedence is the
4
- * OUTER loop, not a global scan: scopes/sources are tried NEAREST-FIRST
5
- * (node > project stack nearest > ... > profile > user > builtin), and WITHIN each
6
- * source, in order: (1) exact substrate-identity match (`doc.name === query`
7
- * — the explicit frontmatter `name`, or its path-derived fallback), (2) direct
8
- * `memory/<name>.md` physical-path lookup (plus the bare-dir/bare-plugin-name
9
- * → `INDEX.md` convenience neither identity nor a literal path expresses),
10
- * (3) bare leaf-name fallback (final path segment only). The first hit wins,
11
- * so a nearer source's match of ANY kind always beats a farther source's
12
- * match of any kind — a farther-scope identity can never shadow a
13
- * nearer-scope physical file. It returns the raw parsed frontmatter + body;
3
+ * Thin memory-document resolver for the document substrate. Resolution has
4
+ * two passes. First, scopes/sources are tried NEAREST-FIRST (node > project
5
+ * stack nearest > ... > profile > user > builtin) for strong matches: (1) exact
6
+ * substrate identity (`doc.name === query` — the explicit frontmatter `name`,
7
+ * or its path-derived fallback), then (2) direct `memory/<name>.md` physical
8
+ * path (plus the bare-dir/bare-plugin-name → `INDEX.md` convenience neither
9
+ * identity nor a literal path expresses). Only when no source has a strong
10
+ * match does a second nearest-first pass try bare leaf-name fallback (final
11
+ * path segment only). Thus scope precedence resolves competing strong matches,
12
+ * while a nearer nested doc's coincidental leaf can never shadow a farther
13
+ * canonical identity. It returns the raw parsed frontmatter + body;
14
14
  * it does NOT interpret the schema, kind, gate, or rungs — that is the
15
15
  * schema/gate layer's job (callers filter by `frontmatter.kind`). Project
16
16
  * resolution is a nearest-first stack of every ancestor `.crouter/` (widened by
@@ -40,8 +40,8 @@ export interface MemoryDoc {
40
40
  /** The memory-only scope union: the global `Scope` (`user|project|builtin`)
41
41
  * plus `profile` and `node`. Confined to the memory resolver/list/read/write/
42
42
  * render paths — deliberately NOT folded into the global `Scope` union, because
43
- * that would leak these into config, plugin, marketplace, view, and doctor/
44
- * sys-config surfaces the spec does not extend. `node` is the this-node store
43
+ * that would leak these into config, plugin, marketplace, and sys-config
44
+ * surfaces the spec does not extend. `node` is the this-node store
45
45
  * (`nodes/<id>/context/memory/`), available only inside a running node
46
46
  * (`CRTR_NODE_ID`), and it is the NEAREST scope — a node doc overrides a
47
47
  * same-named doc at any wider scope. */
@@ -90,22 +90,20 @@ export declare function listAllMemoryDocs(scope?: MemoryScope, quiet?: boolean):
90
90
  * `<name>` may carry topical subdirs (`taste/foo`); a bare leaf (`foo`) falls
91
91
  * back to a last-segment match within the resolved scopes.
92
92
  *
93
- * Precedence is the outer loop: sources are visited nearest-first, and the
94
- * FIRST source with any hit wins outright — a farther source is never even
95
- * consulted once a nearer one matches. Within each source, in order: (1)
96
- * exact substrate-identity match (`doc.name === query` — the explicit
97
- * frontmatter `name`, else its normalized path-derived fallback, the SAME
98
- * identity `listAllMemoryDocs` reports); (2) direct `memory/<name>.md`
99
- * physical-path lookup (the bare-dir → INDEX.md and bare-plugin-name → plugin
100
- * root INDEX.md conveniences neither identity nor a literal path expresses);
101
- * (3) bare leaf-name fallback (final path segment), ambiguous only when two
102
- * DIFFERENT identities in the SAME source share a leaf.
93
+ * Strong matches resolve before fallback matches. The first pass visits every
94
+ * source nearest-first and checks, within each source: (1) exact substrate
95
+ * identity (`doc.name === query` — the explicit frontmatter `name`, else its
96
+ * normalized path-derived fallback, the SAME identity `listAllMemoryDocs`
97
+ * reports); then (2) direct `memory/<name>.md` physical-path lookup (the
98
+ * bare-dir → INDEX.md and bare-plugin-name → plugin root INDEX.md conveniences
99
+ * neither identity nor a literal path expresses). Only if that pass finds
100
+ * nothing does a second nearest-first pass try bare leaf-name fallback (final
101
+ * path segment), ambiguous when two DIFFERENT identities in the SAME source
102
+ * share a leaf. A farther canonical identity therefore beats a nearer leaf,
103
+ * while scope precedence still decides between equally strong matches.
103
104
  *
104
- * `opts.kind`, when given, is a resolution CONSTRAINT, not a post-filter: at
105
- * each of the three steps above, a candidate whose `effectiveDocKind` doesn't
106
- * match is skipped rather than accepted, so a nearer source's wrong-kind doc
107
- * no longer shadows a farther source's matching-kind doc — resolution simply
108
- * keeps walking outward. A source only counts as having "an answer" once a
109
- * kind-matching candidate is found.
105
+ * `opts.kind`, when given, is a resolution CONSTRAINT, not a post-filter: in
106
+ * both passes a candidate whose `effectiveDocKind` doesn't match is skipped,
107
+ * so resolution keeps looking for a matching-kind document.
110
108
  */
111
109
  export declare function resolveMemoryDoc(rawName: string, opts?: MemoryResolutionOpts): MemoryDoc;
@@ -365,23 +365,21 @@ function formatLeafAmbiguous(leaf, matches) {
365
365
  * `<name>` may carry topical subdirs (`taste/foo`); a bare leaf (`foo`) falls
366
366
  * back to a last-segment match within the resolved scopes.
367
367
  *
368
- * Precedence is the outer loop: sources are visited nearest-first, and the
369
- * FIRST source with any hit wins outright — a farther source is never even
370
- * consulted once a nearer one matches. Within each source, in order: (1)
371
- * exact substrate-identity match (`doc.name === query` — the explicit
372
- * frontmatter `name`, else its normalized path-derived fallback, the SAME
373
- * identity `listAllMemoryDocs` reports); (2) direct `memory/<name>.md`
374
- * physical-path lookup (the bare-dir → INDEX.md and bare-plugin-name → plugin
375
- * root INDEX.md conveniences neither identity nor a literal path expresses);
376
- * (3) bare leaf-name fallback (final path segment), ambiguous only when two
377
- * DIFFERENT identities in the SAME source share a leaf.
368
+ * Strong matches resolve before fallback matches. The first pass visits every
369
+ * source nearest-first and checks, within each source: (1) exact substrate
370
+ * identity (`doc.name === query` — the explicit frontmatter `name`, else its
371
+ * normalized path-derived fallback, the SAME identity `listAllMemoryDocs`
372
+ * reports); then (2) direct `memory/<name>.md` physical-path lookup (the
373
+ * bare-dir → INDEX.md and bare-plugin-name → plugin root INDEX.md conveniences
374
+ * neither identity nor a literal path expresses). Only if that pass finds
375
+ * nothing does a second nearest-first pass try bare leaf-name fallback (final
376
+ * path segment), ambiguous when two DIFFERENT identities in the SAME source
377
+ * share a leaf. A farther canonical identity therefore beats a nearer leaf,
378
+ * while scope precedence still decides between equally strong matches.
378
379
  *
379
- * `opts.kind`, when given, is a resolution CONSTRAINT, not a post-filter: at
380
- * each of the three steps above, a candidate whose `effectiveDocKind` doesn't
381
- * match is skipped rather than accepted, so a nearer source's wrong-kind doc
382
- * no longer shadows a farther source's matching-kind doc — resolution simply
383
- * keeps walking outward. A source only counts as having "an answer" once a
384
- * kind-matching candidate is found.
380
+ * `opts.kind`, when given, is a resolution CONSTRAINT, not a post-filter: in
381
+ * both passes a candidate whose `effectiveDocKind` doesn't match is skipped,
382
+ * so resolution keeps looking for a matching-kind document.
385
383
  */
386
384
  export function resolveMemoryDoc(rawName, opts = {}) {
387
385
  const parsed = parseSkillQualifier(rawName);
@@ -394,36 +392,44 @@ export function resolveMemoryDoc(rawName, opts = {}) {
394
392
  throw usage(`memory document name required`);
395
393
  const segments = name.split('/');
396
394
  const isLeafQuery = !name.includes('/');
397
- for (const source of memorySourcesInPrecedence(effectiveScope)) {
398
- // Quiet: a targeted read must not spew other docs' frontmatter warnings
399
- // before its own result (esp. a not_found) — corpus health is `lint`'s job.
400
- const docs = sourceMemoryDocs(source, true);
401
- const kindOk = (d) => opts.kind === undefined || effectiveDocKind(d) === opts.kind;
395
+ // Quiet: a targeted read must not spew other docs' frontmatter warnings
396
+ // before its own result (esp. a not_found) — corpus health is `lint`'s job.
397
+ const sources = memorySourcesInPrecedence(effectiveScope).map((source) => ({
398
+ source,
399
+ docs: sourceMemoryDocs(source, true),
400
+ }));
401
+ const kindOk = (d) => opts.kind === undefined || effectiveDocKind(d) === opts.kind;
402
+ // Strong matches across the full scope stack come first. This preserves
403
+ // nearest-scope shadowing for canonical/direct collisions without allowing a
404
+ // nested plugin template's leaf to hide a user doc whose full identity is the
405
+ // query.
406
+ for (const { source, docs } of sources) {
402
407
  const identity = docs.find((d) => d.name === name);
403
408
  if (identity && kindOk(identity))
404
409
  return identity;
405
410
  const direct = findMemoryMatchInSource(name, segments, source);
406
411
  if (direct && kindOk(direct))
407
412
  return direct;
408
- if (isLeafQuery) {
413
+ }
414
+ if (isLeafQuery) {
415
+ for (const { docs } of sources) {
409
416
  const leafMatches = docs.filter((d) => (d.name.split('/').pop() ?? d.name) === name && kindOk(d));
410
- if (leafMatches.length > 0) {
411
- // Same path-derived name within this source → precedence wins (return
412
- // first); genuinely different docs sharing a leaf → ambiguous. Either
413
- // way this source has an answer — a farther source is never checked.
414
- const distinctNames = new Set(leafMatches.map((d) => d.name));
415
- if (distinctNames.size === 1)
416
- return leafMatches[0];
417
- throw ambiguous(formatLeafAmbiguous(name, leafMatches), {
418
- memory: name,
419
- candidates: leafMatches.map((d) => ({
420
- id: memoryDocId(d),
421
- scope: d.scope,
422
- path: d.path,
423
- })),
424
- next: 'Multiple documents share this leaf name. Re-run with one of the full names in candidates.',
425
- });
426
- }
417
+ if (leafMatches.length === 0)
418
+ continue;
419
+ // Same path-derived name within this source → precedence wins (return
420
+ // first); genuinely different docs sharing a leaf → ambiguous.
421
+ const distinctNames = new Set(leafMatches.map((d) => d.name));
422
+ if (distinctNames.size === 1)
423
+ return leafMatches[0];
424
+ throw ambiguous(formatLeafAmbiguous(name, leafMatches), {
425
+ memory: name,
426
+ candidates: leafMatches.map((d) => ({
427
+ id: memoryDocId(d),
428
+ scope: d.scope,
429
+ path: d.path,
430
+ })),
431
+ next: 'Multiple documents share this leaf name. Re-run with one of the full names in candidates.',
432
+ });
427
433
  }
428
434
  }
429
435
  throw notFound(`memory document not found: ${rawName}`, {
@@ -1,4 +1,5 @@
1
1
  import type { ModelStrength } from '../types.js';
2
+ import { type ProviderCandidate, type ProviderCandidateRejection } from './subscription-state.js';
2
3
  export type ModelRequest = {
3
4
  kind: 'logical';
4
5
  family: string;
@@ -30,8 +31,40 @@ export interface ModelRegistryLike {
30
31
  find(providerId: string, modelId: string): unknown;
31
32
  hasConfiguredAuth(model: unknown): boolean;
32
33
  }
34
+ export interface InitialModelRegistryLike<Model extends {
35
+ provider: string;
36
+ id: string;
37
+ }> {
38
+ find(providerId: string, modelId: string): Model | undefined;
39
+ getAll(): Model[];
40
+ hasConfiguredAuth(model: Model): boolean;
41
+ }
42
+ export interface InitialModelRouteSelection<Model extends {
43
+ provider: string;
44
+ id: string;
45
+ }> {
46
+ selected?: {
47
+ model: Model;
48
+ candidate: ProviderCandidate;
49
+ };
50
+ rejected: Array<{
51
+ candidate: ProviderCandidate;
52
+ reason: ProviderCandidateRejection;
53
+ }>;
54
+ }
33
55
  /** Expand config-derived route order only. Availability never affects rank. */
34
56
  export declare function expandModelCandidates(request: ModelRequest, cwd?: string, profileId?: string | null): RoutedCandidate[];
35
57
  /** Probe the common availability facts consumed unchanged by resolveProviderCandidates. */
36
58
  export declare function probeRouteAvailability(candidate: RoutedCandidate, registry: ModelRegistryLike, now?: number): RouteAvailability;
59
+ /** Select the first viable route for a new SDK session. Route declarations own
60
+ * preference order; logical requests append registered models not declared by a
61
+ * route. The caller owns broker faults/events and the no-viable outcome. */
62
+ export declare function selectInitialModelRoute<Model extends {
63
+ provider: string;
64
+ id: string;
65
+ }>(request: ModelRequest, registry: InitialModelRegistryLike<Model>, options?: {
66
+ cwd?: string;
67
+ profileId?: string | null;
68
+ now?: number;
69
+ }): InitialModelRouteSelection<Model>;
37
70
  export declare function modelRequestFromConfig(model: string | undefined, modelIntent: string | undefined, exact: boolean): ModelRequest | undefined;
@@ -1,5 +1,5 @@
1
1
  import { readMergedLaunchConfig } from './config.js';
2
- import { isManagedProvider, readRotationConfig, readSubscriptionPool } from './subscription-state.js';
2
+ import { isManagedProvider, readRotationConfig, readSubscriptionPool, resolveProviderCandidates, } from './subscription-state.js';
3
3
  const STRENGTHS = ['ultra', 'strong', 'medium', 'light'];
4
4
  const THINKING_SUFFIXES = new Set(['off', 'minimal', 'low', 'medium', 'high', 'xhigh', 'max']);
5
5
  function parseSpec(spec) {
@@ -55,8 +55,8 @@ export function expandModelCandidates(request, cwd, profileId) {
55
55
  const requestedStrength = logical?.strength ?? (() => {
56
56
  if (!concrete)
57
57
  return 'strong';
58
- // Mirrors the former ladder back-map: preserve a precise thinking-level
59
- // match, then map a drifting/omitted suffix to the weakest same-model cell.
58
+ // Preserve a precise thinking-level match, then map a drifting or omitted
59
+ // suffix to the weakest same-model cell.
60
60
  for (const exactThinking of [true, false]) {
61
61
  for (const strength of exactThinking ? STRENGTHS : [...STRENGTHS].reverse()) {
62
62
  if (routeEntries.some(([, route]) => {
@@ -125,6 +125,45 @@ export function probeRouteAvailability(candidate, registry, now = Date.now()) {
125
125
  ...(cooling ? { coolingUntil: Math.min(...pool.map((entry) => entry.rateLimitedUntil || 0)) } : {}),
126
126
  };
127
127
  }
128
+ /** Select the first viable route for a new SDK session. Route declarations own
129
+ * preference order; logical requests append registered models not declared by a
130
+ * route. The caller owns broker faults/events and the no-viable outcome. */
131
+ export function selectInitialModelRoute(request, registry, options = {}) {
132
+ const routes = expandModelCandidates(request, options.cwd, options.profileId);
133
+ const routeKeys = new Set(routes.map((candidate) => `${candidate.providerId}/${candidate.modelId}`));
134
+ const tail = request.kind === 'logical'
135
+ ? registry.getAll()
136
+ .filter((model) => !routeKeys.has(`${model.provider}/${model.id}`))
137
+ .map((model, index) => ({
138
+ routeId: `registry:${model.provider}/${model.id}`,
139
+ credentialSource: 'registry',
140
+ family: model.provider,
141
+ strength: 'strong',
142
+ providerId: model.provider,
143
+ modelId: model.id,
144
+ rank: routes.length + index,
145
+ }))
146
+ : [];
147
+ const candidates = [...routes, ...tail];
148
+ const now = options.now ?? Date.now();
149
+ const hasManagedAuthenticated = candidates.some((candidate) => {
150
+ const availability = probeRouteAvailability(candidate, registry, now);
151
+ return isManagedProvider(candidate.providerId) && availability.registered && availability.authenticated;
152
+ });
153
+ const selection = resolveProviderCandidates(candidates.map((candidate) => ({
154
+ ...candidate,
155
+ ...probeRouteAvailability(candidate, registry, now),
156
+ automaticFallback: candidate.routeId.startsWith('registry:')
157
+ ? (isManagedProvider(candidate.providerId) || !hasManagedAuthenticated)
158
+ : true,
159
+ })), now, { pinnedToFirst: request.kind === 'exact' });
160
+ const candidate = selection.candidates[0];
161
+ const model = candidate === undefined ? undefined : registry.find(candidate.providerId, candidate.modelId);
162
+ return {
163
+ ...(candidate !== undefined && model !== undefined ? { selected: { model, candidate } } : {}),
164
+ rejected: selection.rejected,
165
+ };
166
+ }
128
167
  export function modelRequestFromConfig(model, modelIntent, exact) {
129
168
  if (!model)
130
169
  return undefined;
@@ -156,12 +156,7 @@ const LEAF_ICON_CP = {
156
156
  'search web': 0xf0ac,
157
157
  'search answer': 0xf075,
158
158
  'search contents': 0xf0f6,
159
- 'surface view list': 0xf03a,
160
- 'surface view run': 0xf04b,
161
- 'surface view cycle': 0xf021,
162
- 'surface view new': 0xf067,
163
159
  'surface attach to': 0xf1e6,
164
- 'surface workspace enter': 0xf120,
165
160
  'surface web serve': 0xf0ac,
166
161
  'sys config get': 0xf019,
167
162
  'sys config set': 0xf040,
@@ -170,7 +165,6 @@ const LEAF_ICON_CP = {
170
165
  'sys doctor': 0xf0f1,
171
166
  'sys sysprompt': 0xf15c,
172
167
  'sys prompt-review': 0xf002,
173
- 'sys promptstudio': 0xf008,
174
168
  'sys feedback': 0xf075,
175
169
  'sys update': 0xf021,
176
170
  'sys version': 0xf02b,
@@ -1326,22 +1320,23 @@ function summarizeHumanAsk(text, tokens) {
1326
1320
  }
1327
1321
  return lines;
1328
1322
  }
1329
- /** `crtr human review` (humanReview.run, src/commands/human/prompts.ts)
1330
- * returns `{job_id, dir, output, follow_up}` — same recognition strategy as
1331
- * summarizeHumanAsk (job_id bullet + the stable `Queued for the human`
1332
- * road-sign prefix, which review shares with ask). The
1333
- * reviewed file isn't in the output either, so its basename is recovered
1334
- * from argv (the file positional, skipping `--output`'s value). Returns null
1335
- * when the road-sign is absent. */
1336
- function summarizeHumanReview(text, tokens) {
1337
- const jobId = /^- job_id:\s*(\S+)\s*$/m.exec(text)?.[1];
1338
- if (jobId === undefined)
1339
- return null;
1340
- if (!text.includes('Queued for the human'))
1341
- return null;
1342
- const file = firstPositionalArg(tokens, 2, new Set(['--output']));
1323
+ /** `crtr human review new` (humanReviewNew.run,
1324
+ * src/commands/human/review.ts) returns `{job_id, dir, output, review_id,
1325
+ * follow_up}`. A ticket bridge id plus the daemon-owned review id and the
1326
+ * stable live-review road-sign distinguish this canonical result from an
1327
+ * error or another review leaf. The reviewed file is recovered from argv:
1328
+ * it is the positional after `human review new`, skipping the two value
1329
+ * flags. Returns null when that canonical result shape is absent. */
1330
+ function summarizeHumanReviewNew(text, tokens) {
1331
+ const jobId = readFieldFlexible(text, 'job_id');
1332
+ const reviewId = readFieldFlexible(text, 'review_id');
1333
+ if (jobId === undefined || reviewId === undefined)
1334
+ return null;
1335
+ if (!text.includes('The review is live for the person in the attach viewer with its companion agent.'))
1336
+ return null;
1337
+ const file = firstPositionalArg(tokens, 3, new Set(['--output', '--subtitle']));
1343
1338
  const label = file !== undefined ? `review posted: ${basename(file)}` : 'review posted';
1344
- return [{ text: `${label} → waiting on human`, tone: 'accent' }];
1339
+ return [{ text: `${label} → live with companion`, tone: 'accent' }];
1345
1340
  }
1346
1341
  /** `crtr human list` (humanList.run, src/commands/human/queue.ts:283) has no
1347
1342
  * custom `render`; the generic renderer bullets `- total: N` then an
@@ -2647,38 +2642,6 @@ function summarizeSysSupportSubmit(text) {
2647
2642
  { text: url, tone: 'muted' },
2648
2643
  ];
2649
2644
  }
2650
- const SURFACE_VIEW_LIST_ID_CAP = 8;
2651
- /** `crtr surface view list` (viewListLeaf.render, src/commands/view-list.ts:
2652
- * 59) has a custom render, NOT the generic renderResult: one padded plain
2653
- * line per view, `<id padded> <title padded> [<scope>]<optional
2654
- * desc/error>` (verified live, 2026-07-01) — no GFM table markup at all, so
2655
- * this file's shared parseTableRows/splitTableRow helpers don't apply.
2656
- * Real ids/titles never contain a run of 2+ spaces, so each real field
2657
- * boundary (the column padding plus the literal ` ` separator together
2658
- * always total 2+ spaces) is recoverable by anchoring on the `[scope]`
2659
- * bracket. Returns null when the roster is empty (`No views found…`, a
2660
- * single plain line the generic path already renders fine) or any line
2661
- * fails to match this row shape — including the pi truncation marker,
2662
- * which never contains a `[scope]` bracket or a 2+-space run. */
2663
- function summarizeSurfaceViewList(text) {
2664
- const lines = text.split('\n').filter((l) => l.trim() !== '');
2665
- if (lines.length === 0)
2666
- return null;
2667
- const ids = [];
2668
- for (const line of lines) {
2669
- const m = /^(\S+)\s{2,}.+?\s{2,}\[\w[\w-]*\](?:\s{2,}.*)?$/.exec(line);
2670
- if (m === null)
2671
- return null;
2672
- ids.push(m[1]);
2673
- }
2674
- const shown = ids.slice(0, SURFACE_VIEW_LIST_ID_CAP);
2675
- const remaining = ids.length - shown.length;
2676
- const idsLine = remaining > 0 ? `${shown.join(', ')}, … ${remaining} more` : shown.join(', ');
2677
- return [
2678
- { text: `${ids.length} views` },
2679
- { text: idsLine, tone: 'muted' },
2680
- ];
2681
- }
2682
2645
  /** Focus is the high-frequency generic surface result. The target is an argv
2683
2646
  * asset because the result does not echo it; all three booleans are required
2684
2647
  * so a partial/error result never becomes a false success receipt. */
@@ -2746,7 +2709,7 @@ const SUMMARIZERS = [
2746
2709
  { path: 'push urgent', run: summarizePushUrgent },
2747
2710
  { path: 'push final', run: summarizePushFinal },
2748
2711
  { path: 'human ask', run: summarizeHumanAsk },
2749
- { path: 'human review', run: summarizeHumanReview },
2712
+ { path: 'human review new', run: summarizeHumanReviewNew },
2750
2713
  { path: 'human list', run: summarizeHumanList },
2751
2714
  { path: 'human deck', run: summarizeHumanDeck },
2752
2715
  { path: 'human notify', run: summarizeHumanNotify },
@@ -2798,7 +2761,6 @@ const SUMMARIZERS = [
2798
2761
  { path: 'sys logs', run: summarizeSysLogs },
2799
2762
  { path: 'sys support prepare', run: summarizeSysSupportPrepare },
2800
2763
  { path: 'sys support submit', run: summarizeSysSupportSubmit },
2801
- { path: 'surface view list', run: summarizeSurfaceViewList },
2802
2764
  { path: 'surface node focus', run: summarizeSurfaceNodeFocus },
2803
2765
  { path: 'surface edit', run: summarizeSurfaceEdit },
2804
2766
  ];
@@ -297,9 +297,9 @@ function rootProfileMessage(cwd) {
297
297
  * the session IS interactive. Ask on the controlling terminal — create a
298
298
  * profile pointing at cwd, or proceed as root — and block until answered.
299
299
  * Deliberately a minimal `readline` prompt, not `crtr human ask`: that bridge
300
- * is asynchronous (registers an interaction with humanloop, then waits for the
301
- * human to answer it from a separate inbox) and cannot gate pi's boot; the
302
- * humanloop entry points (`human ask`/`review`) are built for a queued,
300
+ * is asynchronous (registers an interaction in the ticket store, then waits for
301
+ * the human to answer it from a separate inbox) and cannot gate pi's boot; those
302
+ * entry points (`human ask`/`review`) are built for a queued,
303
303
  * asynchronously-answered interaction, not a two-choice gate on the same TTY pi
304
304
  * is about to take over — a raw `readline` question is the actual minimal
305
305
  * fit here. */
@@ -1,4 +1,4 @@
1
- import type { Scope, RemoteCanvasTarget } from '../../types.js';
2
- import type { RelayTarget } from '../broker-client/index.js';
1
+ import type { Scope, RemoteCanvasTarget } from '../types.js';
2
+ import type { RelayTarget } from './broker-client/index.js';
3
3
  export declare function getRemoteCanvasTarget(name: string, scope?: Scope): RemoteCanvasTarget | undefined;
4
4
  export declare function resolveRemoteCanvasTarget(name: string, scope?: Scope): RelayTarget;
@@ -1,4 +1,4 @@
1
- // remote-canvas-target.ts — resolves a named `remoteCanvas.targets.<name>`
1
+ // remote-target.ts — resolves a named `remoteCanvas.targets.<name>`
2
2
  // config entry (see `RemoteCanvasTarget`, `src/types.ts`) into a `RelayTarget`
3
3
  // ready for `RelayTransport` (`src/core/broker-client/transport-relay.ts`).
4
4
  //
@@ -7,9 +7,9 @@
7
7
  // resolved here at connect time via `getRelayToken`. Targets are registered
8
8
  // and the token stored via `crtr canvas config add` (`--relay-token -` reads
9
9
  // it from stdin, the preferred form to keep it out of shell history).
10
- import { usage } from '../errors.js';
11
- import { readConfig } from '../config.js';
12
- import { getRelayToken } from '../secrets.js';
10
+ import { usage } from './errors.js';
11
+ import { readConfig } from './config.js';
12
+ import { getRelayToken } from './secrets.js';
13
13
  export function getRemoteCanvasTarget(name, scope = 'user') {
14
14
  return readConfig(scope).remoteCanvas.targets[name];
15
15
  }