@north-light/crouter 0.3.318 → 0.3.319

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 (1303) hide show
  1. package/README.md +0 -3
  2. package/dist/api/client.js +2 -912
  3. package/dist/api/dto/attach.js +0 -13
  4. package/dist/api/dto/bash-jobs.js +1 -9
  5. package/dist/api/dto/broker-ops.js +0 -6
  6. package/dist/api/dto/broker.js +0 -20
  7. package/dist/api/dto/canvas.js +0 -2
  8. package/dist/api/dto/chat-inventory.js +0 -11
  9. package/dist/api/dto/common.js +1 -15
  10. package/dist/api/dto/config.js +0 -3
  11. package/dist/api/dto/crons.js +1 -10
  12. package/dist/api/dto/files.js +0 -7
  13. package/dist/api/dto/focus.js +0 -10
  14. package/dist/api/dto/health.js +0 -2
  15. package/dist/api/dto/human-requests.js +0 -4
  16. package/dist/api/dto/human.js +0 -4
  17. package/dist/api/dto/inbox.js +0 -4
  18. package/dist/api/dto/lifecycle.js +0 -3
  19. package/dist/api/dto/mail.js +0 -1
  20. package/dist/api/dto/memory.js +0 -6
  21. package/dist/api/dto/messages.js +0 -2
  22. package/dist/api/dto/model-config.js +0 -1
  23. package/dist/api/dto/modelauth.js +0 -4
  24. package/dist/api/dto/node-outcomes.js +0 -2
  25. package/dist/api/dto/nodes.js +0 -3
  26. package/dist/api/dto/profiles.js +1 -4
  27. package/dist/api/dto/recovery.js +0 -1
  28. package/dist/api/dto/reports.js +0 -2
  29. package/dist/api/dto/review-comments.js +0 -5
  30. package/dist/api/dto/reviews.js +0 -5
  31. package/dist/api/dto/subscriptions.js +0 -2
  32. package/dist/api/dto/worktree.js +0 -6
  33. package/dist/api/errors.js +1 -40
  34. package/dist/api/index.js +1 -33
  35. package/dist/api/plugin-manifest-schema.js +0 -23
  36. package/dist/api/routes.js +1 -147
  37. package/dist/build-root.js +1 -198
  38. package/dist/cli.js +3 -99
  39. package/dist/clients/attach/ansi-cells.js +1 -137
  40. package/dist/clients/attach/chrome/bash-jobs.js +1 -31
  41. package/dist/clients/attach/chrome/canvas-panels.js +1 -194
  42. package/dist/clients/attach/chrome/completion-bell.js +1 -89
  43. package/dist/clients/attach/chrome/cron-wait.js +1 -34
  44. package/dist/clients/attach/chrome/git-info.js +2 -44
  45. package/dist/clients/attach/chrome/header.js +1 -30
  46. package/dist/clients/attach/chrome/inbox-strip.js +1 -199
  47. package/dist/clients/attach/chrome/recap.js +1 -19
  48. package/dist/clients/attach/chrome/review-wait.js +1 -22
  49. package/dist/clients/attach/chrome/roster.js +4 -275
  50. package/dist/clients/attach/chrome/status-line.js +1 -117
  51. package/dist/clients/attach/chrome/ticket-panel.js +1 -280
  52. package/dist/clients/attach/chrome/widgets.js +1 -51
  53. package/dist/clients/attach/command.js +1 -107
  54. package/dist/clients/attach/config.js +1 -274
  55. package/dist/clients/attach/input/capabilities.js +1 -104
  56. package/dist/clients/attach/input/clipboard-image.js +3 -220
  57. package/dist/clients/attach/input/completion-frecency.js +1 -141
  58. package/dist/clients/attach/input/controller.js +7 -377
  59. package/dist/clients/attach/input/overlay-owner.js +1 -199
  60. package/dist/clients/attach/input/ref-autocomplete.js +2 -176
  61. package/dist/clients/attach/input/titled-editor.js +4 -859
  62. package/dist/clients/attach/overlays/auth.js +2 -271
  63. package/dist/clients/attach/overlays/dialogs.js +2 -102
  64. package/dist/clients/attach/overlays/file-review.js +2 -128
  65. package/dist/clients/attach/overlays/graph.js +1 -661
  66. package/dist/clients/attach/overlays/help.js +1 -211
  67. package/dist/clients/attach/overlays/mcp.js +1 -302
  68. package/dist/clients/attach/overlays/pickers.js +1 -163
  69. package/dist/clients/attach/render/activity-slot.js +1 -13
  70. package/dist/clients/attach/render/assistant-message.js +1 -56
  71. package/dist/clients/attach/render/card-presentation.js +5 -218
  72. package/dist/clients/attach/render/chat-view.js +5 -1708
  73. package/dist/clients/attach/render/condensed-history.js +1 -60
  74. package/dist/clients/attach/render/context-message.js +1 -63
  75. package/dist/clients/attach/render/crtr-output.js +17 -905
  76. package/dist/clients/attach/render/diagram.js +7 -111
  77. package/dist/clients/attach/render/edit-diff.js +5 -304
  78. package/dist/clients/attach/render/glyph-codepoints.js +1 -42
  79. package/dist/clients/attach/render/group-activity.js +2 -263
  80. package/dist/clients/attach/render/group-recap.js +1 -152
  81. package/dist/clients/attach/render/markdown-source.js +5 -266
  82. package/dist/clients/attach/render/measured-container.js +1 -322
  83. package/dist/clients/attach/render/page-block.js +1 -183
  84. package/dist/clients/attach/render/scroll-animation.js +1 -80
  85. package/dist/clients/attach/render/tool-calls.js +3 -361
  86. package/dist/clients/attach/render/transcript-copy.js +2 -81
  87. package/dist/clients/attach/render/transcript-search.js +1 -152
  88. package/dist/clients/attach/render/viewport.js +1 -184
  89. package/dist/clients/attach/session/banner.js +1 -29
  90. package/dist/clients/attach/session/bindings.js +1 -71
  91. package/dist/clients/attach/session/chrome-refresh.js +1 -94
  92. package/dist/clients/attach/session/connection.js +1 -186
  93. package/dist/clients/attach/session/context.js +0 -16
  94. package/dist/clients/attach/session/editor-frame.js +1 -142
  95. package/dist/clients/attach/session/editor-inventory.js +6 -160
  96. package/dist/clients/attach/session/file-links.js +1 -68
  97. package/dist/clients/attach/session/focus-events.js +1 -12
  98. package/dist/clients/attach/session/frame.js +1 -214
  99. package/dist/clients/attach/session/frames.js +1 -188
  100. package/dist/clients/attach/session/identity.js +1 -26
  101. package/dist/clients/attach/session/input-wiring.js +1 -140
  102. package/dist/clients/attach/session/invariant.js +1 -15
  103. package/dist/clients/attach/session/keys.js +1 -77
  104. package/dist/clients/attach/session/layout.js +1 -59
  105. package/dist/clients/attach/session/mouse.js +1 -78
  106. package/dist/clients/attach/session/pane-focus.js +1 -42
  107. package/dist/clients/attach/session/pane-tag.js +1 -112
  108. package/dist/clients/attach/session/pi-assets.js +1 -24
  109. package/dist/clients/attach/session/pi-oauth-flows.js +1 -21
  110. package/dist/clients/attach/session/profile-files.js +1 -228
  111. package/dist/clients/attach/session/reconnect.js +1 -175
  112. package/dist/clients/attach/session/selection.js +3 -108
  113. package/dist/clients/attach/session/state-sync.js +1 -67
  114. package/dist/clients/attach/session/surface-frame.js +1 -73
  115. package/dist/clients/attach/session/surface-host.js +1 -255
  116. package/dist/clients/attach/session/teardown.js +5 -94
  117. package/dist/clients/attach/session/transcript-search.js +3 -151
  118. package/dist/clients/attach/session/whip-achievements.js +2 -145
  119. package/dist/clients/attach/session/whip.js +1 -362
  120. package/dist/clients/attach/slash/dispatch.js +1 -706
  121. package/dist/clients/attach/slash/prompt-preview.js +1 -121
  122. package/dist/clients/attach/viewer.js +441 -441
  123. package/dist/clients/conversation/projection.js +1 -324
  124. package/dist/clients/conversation/submit.js +1 -51
  125. package/dist/clients/inbox/controller.js +1 -701
  126. package/dist/clients/inbox/dto-adapt.js +1 -93
  127. package/dist/clients/inbox/layout.js +1 -9
  128. package/dist/clients/inbox/page-adapter.js +1 -55
  129. package/dist/clients/inbox/resolve.js +1 -35
  130. package/dist/clients/inbox/review/anchors.js +1 -89
  131. package/dist/clients/inbox/review/comments-client.js +1 -98
  132. package/dist/clients/inbox/review/companion-pane.js +1 -82
  133. package/dist/clients/inbox/review/document-surface.js +2 -1188
  134. package/dist/clients/inbox/review/frame.js +1 -216
  135. package/dist/clients/inbox/review/keys.js +1 -123
  136. package/dist/clients/inbox/review/launch.js +1 -151
  137. package/dist/clients/inbox/review/live-source.js +1 -160
  138. package/dist/clients/inbox/review/nvim.js +1 -44
  139. package/dist/clients/inbox/review/remap.js +1 -157
  140. package/dist/clients/inbox/review/review-client.js +1 -123
  141. package/dist/clients/inbox/review/roundtrip.js +3 -36
  142. package/dist/clients/inbox/review/state.js +4 -315
  143. package/dist/clients/inbox/review-adapter.js +1 -43
  144. package/dist/clients/inbox/surface.js +1 -152
  145. package/dist/clients/inbox/tui/ansi.js +3 -321
  146. package/dist/clients/inbox/tui/input.js +5 -392
  147. package/dist/clients/inbox/tui/keys.js +1 -104
  148. package/dist/clients/inbox/tui/page-body.js +1 -66
  149. package/dist/clients/inbox/tui/panel.js +1 -84
  150. package/dist/clients/inbox/tui/render.js +2 -368
  151. package/dist/clients/inbox/tui/slots.js +3 -134
  152. package/dist/clients/inbox/tui/types.js +0 -1
  153. package/dist/clients/inbox/tui.js +1 -86
  154. package/dist/clients/surfaces/host.js +0 -1
  155. package/dist/commands/api-client.js +4 -290
  156. package/dist/commands/attention.js +1 -215
  157. package/dist/commands/canvas-browse.js +1 -70
  158. package/dist/commands/canvas-config.js +2 -192
  159. package/dist/commands/canvas-history/grep.js +7 -85
  160. package/dist/commands/canvas-history/read.js +3 -50
  161. package/dist/commands/canvas-history/search.js +10 -99
  162. package/dist/commands/canvas-history/shared.js +1 -139
  163. package/dist/commands/canvas-history/stats.js +6 -68
  164. package/dist/commands/canvas-history.js +1 -32
  165. package/dist/commands/canvas-issue.js +14 -149
  166. package/dist/commands/canvas-prune.js +1 -108
  167. package/dist/commands/canvas-roster.js +1 -69
  168. package/dist/commands/canvas-snapshot.js +1 -34
  169. package/dist/commands/canvas-use.js +1 -61
  170. package/dist/commands/canvas.js +1 -49
  171. package/dist/commands/chord.js +1 -241
  172. package/dist/commands/cron.js +11 -534
  173. package/dist/commands/dashboard.js +1 -85
  174. package/dist/commands/human/components.js +3 -77
  175. package/dist/commands/human/feedback.js +1 -112
  176. package/dist/commands/human/prompts.js +1 -331
  177. package/dist/commands/human/queue.js +1 -191
  178. package/dist/commands/human/request.js +1 -266
  179. package/dist/commands/human/review.js +1 -288
  180. package/dist/commands/human/shared.js +1 -67
  181. package/dist/commands/human.js +4 -60
  182. package/dist/commands/memory/delete.js +1 -100
  183. package/dist/commands/memory/edit.js +21 -219
  184. package/dist/commands/memory/find.js +2 -244
  185. package/dist/commands/memory/history.js +5 -199
  186. package/dist/commands/memory/lint.js +1 -107
  187. package/dist/commands/memory/list.js +1 -142
  188. package/dist/commands/memory/move.js +1 -223
  189. package/dist/commands/memory/origin.js +1 -130
  190. package/dist/commands/memory/read.js +6 -232
  191. package/dist/commands/memory/shared.js +12 -802
  192. package/dist/commands/memory/write.js +13 -235
  193. package/dist/commands/memory.js +1 -30
  194. package/dist/commands/node/bash.js +5 -245
  195. package/dist/commands/node/create.js +3 -332
  196. package/dist/commands/node/inspect.js +12 -300
  197. package/dist/commands/node/lifecycle.js +2 -453
  198. package/dist/commands/node/message.js +1 -161
  199. package/dist/commands/node/outcome.js +4 -134
  200. package/dist/commands/node/pyramid.js +2 -79
  201. package/dist/commands/node/subscription.js +1 -78
  202. package/dist/commands/node/wait.js +7 -163
  203. package/dist/commands/node-context.js +2 -159
  204. package/dist/commands/node-inspect-artifacts.js +8 -109
  205. package/dist/commands/node-lifecycle-revive.js +1 -217
  206. package/dist/commands/node-snapshot.js +1 -37
  207. package/dist/commands/node-transcript.js +1 -62
  208. package/dist/commands/node-worktree.js +1 -138
  209. package/dist/commands/node.js +1 -29
  210. package/dist/commands/pkg/browse/actions.js +1 -198
  211. package/dist/commands/pkg/browse/catalog.js +1 -466
  212. package/dist/commands/pkg/browse/command-view.js +1 -191
  213. package/dist/commands/pkg/browse/detail-panel.js +1 -402
  214. package/dist/commands/pkg/browse/doc-view.js +1 -89
  215. package/dist/commands/pkg/browse/list-panel.js +2 -168
  216. package/dist/commands/pkg/browse/model.js +1 -36
  217. package/dist/commands/pkg/browse/shell.js +1 -640
  218. package/dist/commands/pkg/browse.js +1 -27
  219. package/dist/commands/pkg/market-inspect.js +1 -141
  220. package/dist/commands/pkg/market-manage.js +1 -327
  221. package/dist/commands/pkg/market.js +1 -14
  222. package/dist/commands/pkg/plugin-inspect.js +1 -168
  223. package/dist/commands/pkg/plugin-manage.js +17 -1109
  224. package/dist/commands/pkg/plugin.js +1 -14
  225. package/dist/commands/pkg/shared.js +1 -62
  226. package/dist/commands/pkg.js +1 -21
  227. package/dist/commands/profile/default.js +1 -139
  228. package/dist/commands/profile/delete.js +1 -66
  229. package/dist/commands/profile/env.js +3 -188
  230. package/dist/commands/profile/kind.js +2 -35
  231. package/dist/commands/profile/list.js +1 -43
  232. package/dist/commands/profile/meta.js +1 -67
  233. package/dist/commands/profile/new.js +1 -115
  234. package/dist/commands/profile/pause.js +1 -59
  235. package/dist/commands/profile/project.js +1 -113
  236. package/dist/commands/profile/rename.js +1 -38
  237. package/dist/commands/profile/show.js +1 -52
  238. package/dist/commands/profile.js +1 -35
  239. package/dist/commands/push.js +9 -265
  240. package/dist/commands/revive.js +10 -181
  241. package/dist/commands/surface/node/cycle.js +1 -83
  242. package/dist/commands/surface/node/focus.js +1 -81
  243. package/dist/commands/surface/node/id.js +1 -38
  244. package/dist/commands/surface/node/pin.js +1 -42
  245. package/dist/commands/surface/node/placement.js +1 -134
  246. package/dist/commands/surface-edit.js +1 -157
  247. package/dist/commands/surface-inbox.js +1 -98
  248. package/dist/commands/surface-inspect.js +1 -39
  249. package/dist/commands/surface-node.js +1 -19
  250. package/dist/commands/surface-reload.js +2 -134
  251. package/dist/commands/surface-tmux-spread.js +1 -214
  252. package/dist/commands/surface.js +1 -28
  253. package/dist/commands/sys/branch.js +1 -19
  254. package/dist/commands/sys/config.js +1 -353
  255. package/dist/commands/sys/context/admin/actions.js +2 -246
  256. package/dist/commands/sys/context/admin/detail-panel.js +1 -247
  257. package/dist/commands/sys/context/admin/docs-panel.js +1 -191
  258. package/dist/commands/sys/context/admin/list-view.js +1 -183
  259. package/dist/commands/sys/context/admin/model.js +1 -229
  260. package/dist/commands/sys/context/admin/rail-panel.js +1 -227
  261. package/dist/commands/sys/context/admin/read-view.js +2 -194
  262. package/dist/commands/sys/context/admin/shell.js +1 -910
  263. package/dist/commands/sys/context/admin.js +2 -126
  264. package/dist/commands/sys/context/doc.js +3 -197
  265. package/dist/commands/sys/context/prompt-review.js +11 -291
  266. package/dist/commands/sys/context/resolve.js +10 -489
  267. package/dist/commands/sys/context/sysprompt.js +5 -96
  268. package/dist/commands/sys/context.js +1 -20
  269. package/dist/commands/sys/daemon.js +1 -313
  270. package/dist/commands/sys/doctor.js +1 -617
  271. package/dist/commands/sys/feedback.js +7 -228
  272. package/dist/commands/sys/logs.js +3 -129
  273. package/dist/commands/sys/migrate.js +1 -94
  274. package/dist/commands/sys/panels/broker-limits-panel.js +2 -110
  275. package/dist/commands/sys/panels/dependencies-panel.js +1 -80
  276. package/dist/commands/sys/panels/keybindings-panel.js +1 -703
  277. package/dist/commands/sys/panels/models-panel.js +1 -1133
  278. package/dist/commands/sys/panels/plugins-panel.js +1 -80
  279. package/dist/commands/sys/panels/prefs-panel.js +1 -85
  280. package/dist/commands/sys/panels/profiles-panel.js +1 -601
  281. package/dist/commands/sys/panels/provider-panel.js +1 -538
  282. package/dist/commands/sys/settings-shell.js +1 -400
  283. package/dist/commands/sys/settings.js +1 -46
  284. package/dist/commands/sys/setup-core.js +6 -579
  285. package/dist/commands/sys/setup-settings-runner.js +1 -16
  286. package/dist/commands/sys/setup-wizard.js +1 -279
  287. package/dist/commands/sys/setup.js +1 -34
  288. package/dist/commands/sys/shared.js +1 -81
  289. package/dist/commands/sys/support/prepare.js +3 -239
  290. package/dist/commands/sys/support/submit.js +6 -524
  291. package/dist/commands/sys/support.js +1 -18
  292. package/dist/commands/sys/sync-deps.js +15 -498
  293. package/dist/commands/sys/sync-project-guidance.js +4 -481
  294. package/dist/commands/sys/sync-shared.js +1 -49
  295. package/dist/commands/sys/sync-skills.js +2 -311
  296. package/dist/commands/sys/sync.js +1 -18
  297. package/dist/commands/sys/update.js +1 -147
  298. package/dist/commands/sys/worktrees.js +5 -53
  299. package/dist/commands/sys.js +1 -18
  300. package/dist/core/activity-signal.js +2 -38
  301. package/dist/core/asset-root.js +1 -18
  302. package/dist/core/auth-file.js +2 -179
  303. package/dist/core/auth-interaction.js +3 -94
  304. package/dist/core/auto-update.js +4 -94
  305. package/dist/core/bash-guard.js +11 -393
  306. package/dist/core/bash-jobs.js +7 -411
  307. package/dist/core/bootstrap.js +2 -53
  308. package/dist/core/broker-client/client.js +1 -184
  309. package/dist/core/broker-client/index.js +1 -13
  310. package/dist/core/broker-client/transport-relay.js +1 -157
  311. package/dist/core/broker-client/transport-socket.js +1 -179
  312. package/dist/core/broker-client/transport.js +1 -26
  313. package/dist/core/canvas/attention.js +1 -47
  314. package/dist/core/canvas/boot-id.js +1 -26
  315. package/dist/core/canvas/boot.js +1 -186
  316. package/dist/core/canvas/browse/app.js +3 -919
  317. package/dist/core/canvas/browse/model.js +1 -477
  318. package/dist/core/canvas/browse/pins.js +1 -29
  319. package/dist/core/canvas/browse/render.js +3 -1055
  320. package/dist/core/canvas/canvas.js +15 -922
  321. package/dist/core/canvas/crons.js +11 -481
  322. package/dist/core/canvas/daemon-owner.js +2 -146
  323. package/dist/core/canvas/db.js +2 -100
  324. package/dist/core/canvas/deliveries.js +22 -283
  325. package/dist/core/canvas/delivery-contract.js +1 -8
  326. package/dist/core/canvas/executions.js +1 -68
  327. package/dist/core/canvas/extensions.js +1 -83
  328. package/dist/core/canvas/focuses.js +1 -77
  329. package/dist/core/canvas/history.js +24 -860
  330. package/dist/core/canvas/index.js +1 -15
  331. package/dist/core/canvas/install-id.js +1 -84
  332. package/dist/core/canvas/labels.js +1 -43
  333. package/dist/core/canvas/meta-file.js +1 -89
  334. package/dist/core/canvas/migrations.js +41 -1150
  335. package/dist/core/canvas/nav-model.js +1 -231
  336. package/dist/core/canvas/nav-render.js +1 -260
  337. package/dist/core/canvas/node-order.js +1 -37
  338. package/dist/core/canvas/node-recap.js +2 -67
  339. package/dist/core/canvas/node-sql-migration.js +2 -209
  340. package/dist/core/canvas/paths.js +1 -153
  341. package/dist/core/canvas/pid.js +4 -683
  342. package/dist/core/canvas/recovery.js +3 -565
  343. package/dist/core/canvas/remote-canvas-source.js +1 -288
  344. package/dist/core/canvas/remote-transport.js +1 -57
  345. package/dist/core/canvas/render-source.js +10 -635
  346. package/dist/core/canvas/sessions.js +1 -78
  347. package/dist/core/canvas/source.js +1 -47
  348. package/dist/core/canvas/status-glyph.js +1 -132
  349. package/dist/core/canvas/telemetry.js +1 -35
  350. package/dist/core/canvas/types.js +1 -6
  351. package/dist/core/canvas/waits.js +4 -68
  352. package/dist/core/canvas/worktrees.js +1 -93
  353. package/dist/core/clipboard-text.js +1 -57
  354. package/dist/core/command-hooks/artifact.js +1 -145
  355. package/dist/core/command-hooks/catalog.js +1 -38
  356. package/dist/core/command-hooks/compose.js +1 -99
  357. package/dist/core/command-hooks/discovery.js +1 -228
  358. package/dist/core/command-hooks/help.js +1 -18
  359. package/dist/core/command-hooks/index.js +1 -7
  360. package/dist/core/command-hooks/lifecycle-catalog.js +1 -9
  361. package/dist/core/command-hooks/lifecycle-create.js +1 -51
  362. package/dist/core/command-hooks/report.js +1 -28
  363. package/dist/core/command-hooks/schema.js +1 -157
  364. package/dist/core/command-hooks/transport/exec-invoke.js +1 -276
  365. package/dist/core/command-hooks/transport/exec-lifecycle.js +1 -211
  366. package/dist/core/command-manifests/manifest.js +1 -324
  367. package/dist/core/command-manifests/registry.js +1 -118
  368. package/dist/core/command-manifests/schema.js +1 -736
  369. package/dist/core/command-plugins/bundle.js +1 -261
  370. package/dist/core/command-plugins/compose.js +1 -65
  371. package/dist/core/command-plugins/discovery.js +1 -245
  372. package/dist/core/command-plugins/endpoint.js +1 -48
  373. package/dist/core/command-plugins/extensions.js +1 -166
  374. package/dist/core/command-plugins/help-addenda.js +1 -44
  375. package/dist/core/command-plugins/presence.js +1 -17
  376. package/dist/core/command-plugins/revalidate.js +2 -152
  377. package/dist/core/command-plugins/transport/exec-invoke.js +1 -215
  378. package/dist/core/command-plugins/transport/http-fetch.js +1 -68
  379. package/dist/core/command-plugins/transport/http-invoke.js +3 -546
  380. package/dist/core/command.js +10 -739
  381. package/dist/core/config.js +1 -1059
  382. package/dist/core/document-lines.js +3 -6
  383. package/dist/core/env-name.js +1 -9
  384. package/dist/core/errors.js +1 -52
  385. package/dist/core/events/emit.js +1 -17
  386. package/dist/core/events/envelope.js +1 -84
  387. package/dist/core/events/errors.js +1 -69
  388. package/dist/core/events/index.js +1 -4
  389. package/dist/core/events/operation-id.js +1 -24
  390. package/dist/core/events/read.js +1 -623
  391. package/dist/core/events/serialize.js +1 -199
  392. package/dist/core/events/source.js +1 -31
  393. package/dist/core/events/types.js +1 -11
  394. package/dist/core/exclusive-lock.js +1 -197
  395. package/dist/core/fault-classifier.js +1 -96
  396. package/dist/core/feed/feed.js +7 -202
  397. package/dist/core/feed/inbox-migrate.js +3 -135
  398. package/dist/core/feed/inbox.js +10 -122
  399. package/dist/core/feed/messages.js +6 -212
  400. package/dist/core/frontmatter.js +1 -35
  401. package/dist/core/fs-utils.js +3 -202
  402. package/dist/core/git.js +2 -103
  403. package/dist/core/help.js +9 -310
  404. package/dist/core/host-exports/builtins.js +9 -68
  405. package/dist/core/host-exports/export.js +3 -124
  406. package/dist/core/human/action-binding.js +1 -40
  407. package/dist/core/human/answer-text.js +5 -100
  408. package/dist/core/human/answer.js +1 -119
  409. package/dist/core/human/claim.js +3 -67
  410. package/dist/core/human/completion.js +1 -27
  411. package/dist/core/human/component-docs.js +78 -272
  412. package/dist/core/human/convention.js +2 -82
  413. package/dist/core/human/feedback-companion.js +1 -106
  414. package/dist/core/human/feedback.js +1 -88
  415. package/dist/core/human/page-authoring.js +1 -19
  416. package/dist/core/human/page-catalog.js +1 -172
  417. package/dist/core/human/page-errors.js +1 -7
  418. package/dist/core/human/page-eval.js +1 -125
  419. package/dist/core/human/page-html-markdown.js +8 -260
  420. package/dist/core/human/page-markdown.js +17 -295
  421. package/dist/core/human/page-schema.js +1 -373
  422. package/dist/core/human/page-synth.js +8 -27
  423. package/dist/core/human/page.js +1 -198
  424. package/dist/core/human/requests.js +15 -466
  425. package/dist/core/human/review-schema.js +1 -34
  426. package/dist/core/human/root.js +1 -11
  427. package/dist/core/human/scan.js +1 -69
  428. package/dist/core/human/summary.js +1 -5
  429. package/dist/core/human/tickets.js +1 -171
  430. package/dist/core/human/types.js +0 -1
  431. package/dist/core/human/visible-paths.js +1 -77
  432. package/dist/core/human-actions.js +1 -101
  433. package/dist/core/inspector/chrome.js +1 -14
  434. package/dist/core/inspector/contract.js +0 -1
  435. package/dist/core/inspector/core.js +2 -295
  436. package/dist/core/inspector/host.js +4 -538
  437. package/dist/core/inspector/model.js +2 -226
  438. package/dist/core/inspector/text.js +6 -45
  439. package/dist/core/inspector/transport.js +1 -36
  440. package/dist/core/inspector/tui.js +2 -295
  441. package/dist/core/installed-plugins.js +1 -78
  442. package/dist/core/io.js +7 -356
  443. package/dist/core/keybindings/attach-control.js +1 -42
  444. package/dist/core/keybindings/background-bash.js +1 -33
  445. package/dist/core/keybindings/catalog.js +1 -256
  446. package/dist/core/keybindings/inbox.js +1 -25
  447. package/dist/core/keybindings/index.js +1 -7
  448. package/dist/core/keybindings/match.js +1 -127
  449. package/dist/core/keybindings/persistence.js +1 -49
  450. package/dist/core/keybindings/resolve.js +1 -348
  451. package/dist/core/keybindings/types.js +0 -1
  452. package/dist/core/locked-file.js +1 -118
  453. package/dist/core/log.js +3 -27
  454. package/dist/core/manifest-recovery.js +1 -72
  455. package/dist/core/manifest-stale.js +1 -39
  456. package/dist/core/manifest.js +1 -20
  457. package/dist/core/memory/doc-link-grammar.js +2 -109
  458. package/dist/core/memory/extensions.js +1 -221
  459. package/dist/core/memory/history.js +6 -268
  460. package/dist/core/memory/identity.js +1 -181
  461. package/dist/core/memory/inline-ref-grammar.js +1 -98
  462. package/dist/core/memory/inline-ref-guidance.js +2 -35
  463. package/dist/core/memory/inline-ref-inventory.js +1 -59
  464. package/dist/core/memory/lint.js +2 -671
  465. package/dist/core/memory/project-namespace.js +2 -85
  466. package/dist/core/memory/repository-association.js +1 -129
  467. package/dist/core/memory/tree.js +1 -93
  468. package/dist/core/memory-resolver.js +2 -611
  469. package/dist/core/model-config.js +1 -107
  470. package/dist/core/model-routes.js +1 -201
  471. package/dist/core/nested-stores.js +2 -166
  472. package/dist/core/output.js +7 -99
  473. package/dist/core/pagination.js +1 -88
  474. package/dist/core/plugin-swap-lock.js +1 -31
  475. package/dist/core/pool-credential-store.js +1 -116
  476. package/dist/core/predicate.js +1 -191
  477. package/dist/core/preview-registry.js +2 -411
  478. package/dist/core/preview-result-path.js +1 -26
  479. package/dist/core/profiles/default-binding.js +1 -24
  480. package/dist/core/profiles/deletion-reservation.js +1 -42
  481. package/dist/core/profiles/env-store.js +2 -162
  482. package/dist/core/profiles/fuzzy-match.js +1 -92
  483. package/dist/core/profiles/manifest.js +1 -574
  484. package/dist/core/profiles/select.js +35 -741
  485. package/dist/core/profiles/state-block.js +3 -17
  486. package/dist/core/provider-error-recognition.js +1 -74
  487. package/dist/core/provider-failure.js +1 -86
  488. package/dist/core/provider-management.js +1 -22
  489. package/dist/core/remote-canvas-target.js +1 -30
  490. package/dist/core/render.js +18 -138
  491. package/dist/core/resolver.js +1 -111
  492. package/dist/core/review/birth.js +1 -52
  493. package/dist/core/review/comments.js +5 -279
  494. package/dist/core/review/companion.js +1 -215
  495. package/dist/core/review/document.js +2 -138
  496. package/dist/core/review/project.js +1 -36
  497. package/dist/core/review/realize.js +1 -71
  498. package/dist/core/review/remap.js +4 -141
  499. package/dist/core/review/signal.js +1 -12
  500. package/dist/core/review/stage.js +1 -184
  501. package/dist/core/review/store.js +1 -168
  502. package/dist/core/review/types.js +1 -23
  503. package/dist/core/runtime/advertised-command-invocation.js +1 -233
  504. package/dist/core/runtime/auth-reload.js +1 -67
  505. package/dist/core/runtime/banner.js +1 -51
  506. package/dist/core/runtime/bearings-render.js +18 -250
  507. package/dist/core/runtime/bearings.js +7 -194
  508. package/dist/core/runtime/bin-contributions.js +2 -186
  509. package/dist/core/runtime/boot-root.js +1 -107
  510. package/dist/core/runtime/branded-host.js +2 -264
  511. package/dist/core/runtime/broker/auth-reload.js +1 -157
  512. package/dist/core/runtime/broker/client-registry.js +1 -179
  513. package/dist/core/runtime/broker/daemon-ops.js +1 -88
  514. package/dist/core/runtime/broker/engine-drive.js +1 -354
  515. package/dist/core/runtime/broker/engine-routing.js +1 -211
  516. package/dist/core/runtime/broker/event-projection.js +1 -193
  517. package/dist/core/runtime/broker/extension-abort.js +1 -36
  518. package/dist/core/runtime/broker/fault-retry.js +1 -588
  519. package/dist/core/runtime/broker/frame-client.js +1 -132
  520. package/dist/core/runtime/broker/frame-dispatch.js +1 -183
  521. package/dist/core/runtime/broker/frame-engine-control.js +1 -231
  522. package/dist/core/runtime/broker/frame-memory-refs.js +1 -41
  523. package/dist/core/runtime/broker/frame-model-query.js +1 -69
  524. package/dist/core/runtime/broker/frame-read.js +1 -116
  525. package/dist/core/runtime/broker/frame-replies.js +1 -64
  526. package/dist/core/runtime/broker/frame-session.js +4 -203
  527. package/dist/core/runtime/broker/held-deferred-inbox.js +1 -13
  528. package/dist/core/runtime/broker/inbox.js +13 -163
  529. package/dist/core/runtime/broker/node-named.js +1 -27
  530. package/dist/core/runtime/broker/read-ops.js +1 -171
  531. package/dist/core/runtime/broker/rebind.js +1 -318
  532. package/dist/core/runtime/broker/tool-groups.js +1 -246
  533. package/dist/core/runtime/broker/turn-admission.js +1 -31
  534. package/dist/core/runtime/broker/turn-ignition.js +1 -84
  535. package/dist/core/runtime/broker-cli.js +3 -81
  536. package/dist/core/runtime/broker-extension-render.js +5 -135
  537. package/dist/core/runtime/broker-inventory.js +1 -116
  538. package/dist/core/runtime/broker-persona-guidance.js +4 -154
  539. package/dist/core/runtime/broker-protocol.js +3 -152
  540. package/dist/core/runtime/broker-request.js +1 -85
  541. package/dist/core/runtime/broker-sdk.js +1 -129
  542. package/dist/core/runtime/broker.js +1 -1214
  543. package/dist/core/runtime/canvas-extensions.js +1 -96
  544. package/dist/core/runtime/chat-inventory-rows.js +1 -105
  545. package/dist/core/runtime/close.js +1 -265
  546. package/dist/core/runtime/command-expansion.js +9 -104
  547. package/dist/core/runtime/command-surface.js +1 -117
  548. package/dist/core/runtime/connectivity.js +1 -73
  549. package/dist/core/runtime/deliver-live.js +1 -88
  550. package/dist/core/runtime/fault-recovery.js +1 -83
  551. package/dist/core/runtime/fault.js +1 -17
  552. package/dist/core/runtime/fleet.js +1 -58
  553. package/dist/core/runtime/front-door-env.js +1 -16
  554. package/dist/core/runtime/front-door.js +7 -183
  555. package/dist/core/runtime/headless-pi.js +1 -161
  556. package/dist/core/runtime/host.js +1 -457
  557. package/dist/core/runtime/interactive-deliver.js +1 -51
  558. package/dist/core/runtime/invocation.js +0 -10
  559. package/dist/core/runtime/kickoff.js +30 -327
  560. package/dist/core/runtime/launch-config-worker.js +1 -12
  561. package/dist/core/runtime/launch-prompt.js +4 -13
  562. package/dist/core/runtime/launch-target.js +1 -55
  563. package/dist/core/runtime/launch.js +1 -483
  564. package/dist/core/runtime/lifecycle.js +2 -213
  565. package/dist/core/runtime/managed-provider-cooling.js +1 -62
  566. package/dist/core/runtime/memory.js +1 -17
  567. package/dist/core/runtime/model-registry.js +1 -13
  568. package/dist/core/runtime/model-selection.js +1 -135
  569. package/dist/core/runtime/model-swap.js +1 -86
  570. package/dist/core/runtime/naming.js +14 -298
  571. package/dist/core/runtime/nerd-font.js +2 -127
  572. package/dist/core/runtime/node-read.js +2 -386
  573. package/dist/core/runtime/nodes.js +1 -331
  574. package/dist/core/runtime/outcome-document.js +1 -97
  575. package/dist/core/runtime/package-health.js +4 -99
  576. package/dist/core/runtime/persona.js +2 -55
  577. package/dist/core/runtime/pi-cli.js +1 -65
  578. package/dist/core/runtime/pi-vendored.js +1 -66
  579. package/dist/core/runtime/placement-tmux.js +1 -81
  580. package/dist/core/runtime/placement.js +1 -386
  581. package/dist/core/runtime/promote.js +1 -174
  582. package/dist/core/runtime/prospective-inventory-cli.js +3 -61
  583. package/dist/core/runtime/prospective-inventory.js +2 -88
  584. package/dist/core/runtime/recap.js +27 -103
  585. package/dist/core/runtime/recycle.js +1 -190
  586. package/dist/core/runtime/reopen.js +1 -138
  587. package/dist/core/runtime/reset.js +1 -245
  588. package/dist/core/runtime/resume-root.js +10 -290
  589. package/dist/core/runtime/revive-all.js +1 -107
  590. package/dist/core/runtime/revive.js +4 -544
  591. package/dist/core/runtime/roadmap.js +4 -38
  592. package/dist/core/runtime/session-branch.js +1 -46
  593. package/dist/core/runtime/session-cycles.js +1 -110
  594. package/dist/core/runtime/session-list-cache.js +1 -406
  595. package/dist/core/runtime/session-visibility.js +1 -99
  596. package/dist/core/runtime/shell-expansion.js +9 -100
  597. package/dist/core/runtime/situational-context.js +2 -67
  598. package/dist/core/runtime/situational-live.js +1 -41
  599. package/dist/core/runtime/spawn-env.js +1 -255
  600. package/dist/core/runtime/spawn.js +3 -577
  601. package/dist/core/runtime/stamp/channel.js +1 -76
  602. package/dist/core/runtime/stamp/protocol.js +1 -113
  603. package/dist/core/runtime/stop-guard.js +7 -116
  604. package/dist/core/runtime/stop-signals.js +1 -46
  605. package/dist/core/runtime/stream-watchdog.js +1 -134
  606. package/dist/core/runtime/structured-output.js +4 -156
  607. package/dist/core/runtime/surface-bg.js +1 -85
  608. package/dist/core/runtime/tmux-bindings.js +4 -730
  609. package/dist/core/runtime/tmux-chrome.js +1 -5
  610. package/dist/core/runtime/tmux-driver.js +7 -637
  611. package/dist/core/runtime/tool-group-summary.js +6 -85
  612. package/dist/core/runtime/turn-visibility.js +1 -31
  613. package/dist/core/runtime/view-socket.js +1 -83
  614. package/dist/core/runtime/warm-pool.js +1 -395
  615. package/dist/core/scope.js +1 -254
  616. package/dist/core/scoped-state/db.js +1 -135
  617. package/dist/core/scoped-state/migrate.js +3 -181
  618. package/dist/core/scoped-state/paths.js +1 -27
  619. package/dist/core/scoped-state/profiles.js +1 -62
  620. package/dist/core/scoped-state/providers.js +1 -8
  621. package/dist/core/scoped-state/schema.js +3 -16
  622. package/dist/core/scoped-state/settings.js +1 -82
  623. package/dist/core/secrets.js +2 -55
  624. package/dist/core/self-update.js +1 -71
  625. package/dist/core/session-model/session-state.js +1 -180
  626. package/dist/core/shell-segments.js +4 -169
  627. package/dist/core/spawn.js +1 -26
  628. package/dist/core/stdout-errors.js +1 -14
  629. package/dist/core/subscription-state.js +3 -193
  630. package/dist/core/substrate/frontmatter-validation.js +1 -105
  631. package/dist/core/substrate/gate-explain.js +1 -424
  632. package/dist/core/substrate/gate.js +1 -26
  633. package/dist/core/substrate/index.js +1 -30
  634. package/dist/core/substrate/injected-store.js +1 -249
  635. package/dist/core/substrate/listings.js +1 -115
  636. package/dist/core/substrate/on-read-node.js +1 -36
  637. package/dist/core/substrate/on-read.js +9 -315
  638. package/dist/core/substrate/plan.js +1 -266
  639. package/dist/core/substrate/render-node.js +1 -30
  640. package/dist/core/substrate/render.js +65 -689
  641. package/dist/core/substrate/schema.js +1 -186
  642. package/dist/core/substrate/session-cache.js +1 -83
  643. package/dist/core/substrate/subject-fields.js +1 -35
  644. package/dist/core/substrate/subject.js +1 -47
  645. package/dist/core/substrate/surface-match.js +1 -242
  646. package/dist/core/termrender/code-doc.js +5 -92
  647. package/dist/core/termrender/display.js +2 -56
  648. package/dist/core/termrender/termrender.js +14 -719
  649. package/dist/core/termrender/version.js +1 -1
  650. package/dist/core/timing.js +2 -94
  651. package/dist/core/tui/draw.js +2 -378
  652. package/dist/core/tui/fuzzy.js +1 -38
  653. package/dist/core/tui/markdown.js +3 -407
  654. package/dist/core/tui/page-host.js +1 -74
  655. package/dist/core/tui/panel.js +1 -137
  656. package/dist/core/tui/terminal.js +2 -100
  657. package/dist/core/user-settings.js +1 -454
  658. package/dist/core/wake.js +1 -296
  659. package/dist/core/worktree-close.js +6 -228
  660. package/dist/core/worktree-containment.js +3 -48
  661. package/dist/core/worktree-landing.js +4 -56
  662. package/dist/core/worktree-mutation-async.js +10 -280
  663. package/dist/core/worktree-quarantine.js +1 -54
  664. package/dist/core/worktree-sweep.js +6 -453
  665. package/dist/core/worktree.js +18 -899
  666. package/dist/daemon/api/bridge.js +8 -418
  667. package/dist/daemon/api/handlers/attach.js +1 -65
  668. package/dist/daemon/api/handlers/bash-jobs.js +2 -91
  669. package/dist/daemon/api/handlers/broker-ops.js +1 -447
  670. package/dist/daemon/api/handlers/broker-recovery.js +1 -251
  671. package/dist/daemon/api/handlers/canvas.js +6 -490
  672. package/dist/daemon/api/handlers/chat-inventory.js +1 -25
  673. package/dist/daemon/api/handlers/crons.js +1 -373
  674. package/dist/daemon/api/handlers/daemon.js +1 -76
  675. package/dist/daemon/api/handlers/feedback-comments.js +3 -199
  676. package/dist/daemon/api/handlers/files.js +1 -63
  677. package/dist/daemon/api/handlers/focus.js +1 -92
  678. package/dist/daemon/api/handlers/health.js +1 -76
  679. package/dist/daemon/api/handlers/human-requests.js +1 -379
  680. package/dist/daemon/api/handlers/human.js +1 -3
  681. package/dist/daemon/api/handlers/inbox-page.js +1 -89
  682. package/dist/daemon/api/handlers/inbox.js +1 -301
  683. package/dist/daemon/api/handlers/memory.js +1 -50
  684. package/dist/daemon/api/handlers/messages.js +2 -506
  685. package/dist/daemon/api/handlers/model-config.js +1 -44
  686. package/dist/daemon/api/handlers/modelauth.js +1 -165
  687. package/dist/daemon/api/handlers/node-outcomes.js +1 -181
  688. package/dist/daemon/api/handlers/nodes.js +1 -939
  689. package/dist/daemon/api/handlers/profiles.js +1 -140
  690. package/dist/daemon/api/handlers/prospective-chat-inventory.js +1 -59
  691. package/dist/daemon/api/handlers/reports.js +16 -332
  692. package/dist/daemon/api/handlers/review-comments.js +1 -465
  693. package/dist/daemon/api/handlers/reviews.js +1 -200
  694. package/dist/daemon/api/handlers/subscriptions.js +1 -53
  695. package/dist/daemon/api/handlers/validate.js +1 -58
  696. package/dist/daemon/api/handlers/worktree.js +1 -39
  697. package/dist/daemon/api/map.js +2 -735
  698. package/dist/daemon/api/router.js +1 -190
  699. package/dist/daemon/api/server.js +11 -408
  700. package/dist/daemon/boot-migrations.js +1 -31
  701. package/dist/daemon/companion-retire.js +1 -34
  702. package/dist/daemon/control.js +1 -22
  703. package/dist/daemon/cron/armed-context.js +1 -100
  704. package/dist/daemon/cron/capture.js +2 -45
  705. package/dist/daemon/cron/disposition.js +1 -55
  706. package/dist/daemon/cron/escalation.js +3 -124
  707. package/dist/daemon/cron/held.js +1 -20
  708. package/dist/daemon/cron/lease-recovery.js +1 -119
  709. package/dist/daemon/cron/live-runs.js +1 -23
  710. package/dist/daemon/cron/passes.js +1 -58
  711. package/dist/daemon/cron/settle.js +1 -61
  712. package/dist/daemon/cron/sinks.js +2 -59
  713. package/dist/daemon/cron-run.js +1 -405
  714. package/dist/daemon/crtrd-cli.js +1 -23
  715. package/dist/daemon/crtrd.js +8 -854
  716. package/dist/daemon/delivery/run-delivery.js +1 -164
  717. package/dist/daemon/fleet.js +17 -475
  718. package/dist/daemon/human/finish.js +10 -179
  719. package/dist/daemon/human/settle.js +1 -89
  720. package/dist/daemon/human/sweep.js +1 -66
  721. package/dist/daemon/manage.js +2 -595
  722. package/dist/daemon/messaging/node-message.js +1 -99
  723. package/dist/daemon/park-activity.js +1 -30
  724. package/dist/daemon/park-pending.js +1 -52
  725. package/dist/daemon/pidfile.js +1 -37
  726. package/dist/daemon/profile-delete.js +1 -306
  727. package/dist/daemon/reconcilers/bash-deadline.js +1 -80
  728. package/dist/daemon/reconcilers/broker-supervision.js +4 -761
  729. package/dist/daemon/reconcilers/controller-death.js +1 -14
  730. package/dist/daemon/reconcilers/cron-lane.js +1 -29
  731. package/dist/daemon/reconcilers/delivery-lane.js +1 -130
  732. package/dist/daemon/reconcilers/live-obligation.js +1 -87
  733. package/dist/daemon/reconcilers/managed-worktree-sweep.js +1 -202
  734. package/dist/daemon/reconcilers/node-deadline.js +1 -82
  735. package/dist/daemon/reconcilers/node-lifecycle/freeze-lane.js +1 -172
  736. package/dist/daemon/reconcilers/node-lifecycle/respawn-policy.js +1 -59
  737. package/dist/daemon/reconcilers/node-lifecycle/terminating.js +1 -12
  738. package/dist/daemon/reconcilers/node-lifecycle/tick.js +1 -146
  739. package/dist/daemon/reconcilers/node-lifecycle/wants-execution.js +1 -11
  740. package/dist/daemon/reconcilers/pending-review-submit.js +1 -36
  741. package/dist/daemon/reconcilers/storage-maintenance.js +1 -207
  742. package/dist/daemon/review/comment-notify.js +2 -109
  743. package/dist/daemon/review/companion.js +1 -29
  744. package/dist/daemon/review/deliver.js +3 -8
  745. package/dist/daemon/review/finish.js +1 -122
  746. package/dist/daemon/review/sweep.js +1 -18
  747. package/dist/daemon/startup-policy.js +1 -1
  748. package/dist/daemon/supervise-cadence.js +1 -6
  749. package/dist/hook-authoring.js +5 -447
  750. package/dist/hook-process.js +1 -34
  751. package/dist/index.js +1 -52
  752. package/dist/migrations/001-surfaces-frontmatter.js +1 -161
  753. package/dist/migrations/002-profile-project-memory.js +1 -72
  754. package/dist/migrations/003-repository-root-memory-identity/front-door.js +11 -231
  755. package/dist/migrations/003-repository-root-memory-identity/index.js +5 -513
  756. package/dist/migrations/003-repository-root-memory-identity/references.js +5 -469
  757. package/dist/migrations/003-repository-root-memory-identity/repository-facts.js +3 -349
  758. package/dist/migrations/activation.js +2 -89
  759. package/dist/migrations/convergent.js +2 -82
  760. package/dist/migrations/corpus.js +3 -483
  761. package/dist/migrations/frontmatter-splice.js +8 -176
  762. package/dist/migrations/profile-manifests.js +2 -70
  763. package/dist/migrations/registry.js +1 -42
  764. package/dist/migrations/runner.js +1 -85
  765. package/dist/migrations/types.js +0 -24
  766. package/dist/pi-extensions/broker-local.js +2 -106
  767. package/dist/pi-extensions/canvas-bash-valve.js +7 -461
  768. package/dist/pi-extensions/canvas-context-intro.js +2 -113
  769. package/dist/pi-extensions/canvas-doc-substrate.js +9 -178
  770. package/dist/pi-extensions/canvas-goal-capture.js +1 -83
  771. package/dist/pi-extensions/canvas-inbox-watcher.js +1 -1010
  772. package/dist/pi-extensions/canvas-passive-context.js +14 -203
  773. package/dist/pi-extensions/canvas-preview-result.js +2 -72
  774. package/dist/pi-extensions/canvas-prompt-scrub.js +2 -54
  775. package/dist/pi-extensions/canvas-recap.js +11 -405
  776. package/dist/pi-extensions/canvas-review-boundary.js +3 -63
  777. package/dist/pi-extensions/canvas-stamp.js +2 -77
  778. package/dist/pi-extensions/canvas-stophook.js +1 -643
  779. package/dist/pi-extensions/canvas-structured-output.js +13 -35
  780. package/dist/pi-extensions/canvas-tool-guide.js +9 -78
  781. package/dist/pi-extensions/envelope-merge.js +8 -29
  782. package/dist/prompts/review.js +20 -42
  783. package/dist/shared/birth-announcement.js +1 -25
  784. package/dist/shared/crtr-version.js +1 -18
  785. package/dist/shared/env.js +1 -214
  786. package/dist/shared/generated-context.js +11 -226
  787. package/dist/shared/predicates.js +1 -4
  788. package/dist/shared/shell-quote.js +1 -5
  789. package/dist/shared/tool-groups.js +1 -64
  790. package/dist/shared/working-activity.js +1 -27
  791. package/dist/suppress-experimental-warnings.js +1 -15
  792. package/dist/types.js +1 -185
  793. package/docs/public-api.md +10 -9
  794. package/package.json +5 -4
  795. package/runtime.lock.json +5 -5
  796. package/dist/api/__tests__/integration/client.test.d.ts +0 -1
  797. package/dist/api/__tests__/integration/client.test.js +0 -163
  798. package/dist/builtin-pi-packages/pi-crtr-extensions/__tests__/insights-active-init.test.ts +0 -98
  799. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/crtr-commands.test.ts +0 -93
  800. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/integration/provider-rotation.test.ts +0 -2530
  801. package/dist/clients/__tests__/helpers/human-daemon.d.ts +0 -11
  802. package/dist/clients/__tests__/helpers/human-daemon.js +0 -60
  803. package/dist/clients/attach/__tests__/attach-remote-readonly.test.d.ts +0 -1
  804. package/dist/clients/attach/__tests__/attach-remote-readonly.test.js +0 -97
  805. package/dist/clients/attach/__tests__/bash-call-width.test.d.ts +0 -1
  806. package/dist/clients/attach/__tests__/bash-call-width.test.js +0 -38
  807. package/dist/clients/attach/__tests__/chat-view-snapshot-ordering.test.d.ts +0 -1
  808. package/dist/clients/attach/__tests__/chat-view-snapshot-ordering.test.js +0 -175
  809. package/dist/clients/attach/__tests__/completion-frecency.test.d.ts +0 -1
  810. package/dist/clients/attach/__tests__/completion-frecency.test.js +0 -35
  811. package/dist/clients/attach/__tests__/context-message.test.d.ts +0 -1
  812. package/dist/clients/attach/__tests__/context-message.test.js +0 -130
  813. package/dist/clients/attach/__tests__/crtr-output.test.d.ts +0 -1
  814. package/dist/clients/attach/__tests__/crtr-output.test.js +0 -68
  815. package/dist/clients/attach/__tests__/diagram.test.d.ts +0 -1
  816. package/dist/clients/attach/__tests__/diagram.test.js +0 -42
  817. package/dist/clients/attach/__tests__/edit-diff.test.d.ts +0 -1
  818. package/dist/clients/attach/__tests__/edit-diff.test.js +0 -31
  819. package/dist/clients/attach/__tests__/frame-selection.test.d.ts +0 -1
  820. package/dist/clients/attach/__tests__/frame-selection.test.js +0 -84
  821. package/dist/clients/attach/__tests__/group-activity.test.d.ts +0 -1
  822. package/dist/clients/attach/__tests__/group-activity.test.js +0 -165
  823. package/dist/clients/attach/__tests__/oauth-dialog-lifecycle.test.d.ts +0 -1
  824. package/dist/clients/attach/__tests__/oauth-dialog-lifecycle.test.js +0 -83
  825. package/dist/clients/attach/__tests__/pane-tag-successor.test.d.ts +0 -1
  826. package/dist/clients/attach/__tests__/pane-tag-successor.test.js +0 -56
  827. package/dist/clients/attach/__tests__/profile-files.test.d.ts +0 -1
  828. package/dist/clients/attach/__tests__/profile-files.test.js +0 -21
  829. package/dist/clients/attach/__tests__/prompt-preview.test.d.ts +0 -1
  830. package/dist/clients/attach/__tests__/prompt-preview.test.js +0 -21
  831. package/dist/clients/attach/__tests__/ref-autocomplete.test.d.ts +0 -1
  832. package/dist/clients/attach/__tests__/ref-autocomplete.test.js +0 -64
  833. package/dist/clients/attach/__tests__/titled-editor-paste.test.d.ts +0 -1
  834. package/dist/clients/attach/__tests__/titled-editor-paste.test.js +0 -114
  835. package/dist/clients/attach/__tests__/titled-editor-preview.test.d.ts +0 -1
  836. package/dist/clients/attach/__tests__/titled-editor-preview.test.js +0 -83
  837. package/dist/clients/inbox/__tests__/integration/inbox-controller.test.d.ts +0 -1
  838. package/dist/clients/inbox/__tests__/integration/inbox-controller.test.js +0 -81
  839. package/dist/clients/inbox/__tests__/integration/mount-panel.test.d.ts +0 -1
  840. package/dist/clients/inbox/__tests__/integration/mount-panel.test.js +0 -135
  841. package/dist/clients/inbox/__tests__/integration/stale-row-activation.test.d.ts +0 -1
  842. package/dist/clients/inbox/__tests__/integration/stale-row-activation.test.js +0 -66
  843. package/dist/clients/inbox/review/__tests__/editor-roundtrip.test.d.ts +0 -1
  844. package/dist/clients/inbox/review/__tests__/editor-roundtrip.test.js +0 -35
  845. package/dist/clients/inbox/review/__tests__/review-core.test.d.ts +0 -1
  846. package/dist/clients/inbox/review/__tests__/review-core.test.js +0 -52
  847. package/dist/clients/inbox/review/__tests__/teardown-notice.test.d.ts +0 -1
  848. package/dist/clients/inbox/review/__tests__/teardown-notice.test.js +0 -100
  849. package/dist/commands/__tests__/api-client-cold-start-diagnostic.test.d.ts +0 -1
  850. package/dist/commands/__tests__/api-client-cold-start-diagnostic.test.js +0 -69
  851. package/dist/commands/__tests__/human.test.d.ts +0 -1
  852. package/dist/commands/__tests__/human.test.js +0 -172
  853. package/dist/commands/__tests__/integration/dashboard-snapshot.test.d.ts +0 -1
  854. package/dist/commands/__tests__/integration/dashboard-snapshot.test.js +0 -237
  855. package/dist/commands/__tests__/integration/migrate.test.d.ts +0 -1
  856. package/dist/commands/__tests__/integration/migrate.test.js +0 -1330
  857. package/dist/commands/__tests__/node-message.test.d.ts +0 -1
  858. package/dist/commands/__tests__/node-message.test.js +0 -112
  859. package/dist/commands/__tests__/node-new.test.d.ts +0 -1
  860. package/dist/commands/__tests__/node-new.test.js +0 -58
  861. package/dist/commands/__tests__/revive-now-gate.test.d.ts +0 -1
  862. package/dist/commands/__tests__/revive-now-gate.test.js +0 -62
  863. package/dist/commands/__tests__/seam/daemon-status.test.d.ts +0 -1
  864. package/dist/commands/__tests__/seam/daemon-status.test.js +0 -29
  865. package/dist/commands/__tests__/surface-reload-target.test.d.ts +0 -1
  866. package/dist/commands/__tests__/surface-reload-target.test.js +0 -21
  867. package/dist/commands/memory/__tests__/command-selector-and-mutation-guards.test.d.ts +0 -1
  868. package/dist/commands/memory/__tests__/command-selector-and-mutation-guards.test.js +0 -379
  869. package/dist/commands/memory/__tests__/memory-list-and-lint-ignore.test.d.ts +0 -1
  870. package/dist/commands/memory/__tests__/memory-list-and-lint-ignore.test.js +0 -124
  871. package/dist/commands/memory/__tests__/repository-root-lint.test.d.ts +0 -1
  872. package/dist/commands/memory/__tests__/repository-root-lint.test.js +0 -148
  873. package/dist/commands/sys/__tests__/config-model-ladders.test.d.ts +0 -1
  874. package/dist/commands/sys/__tests__/config-model-ladders.test.js +0 -114
  875. package/dist/commands/sys/__tests__/setup-core.test.d.ts +0 -1
  876. package/dist/commands/sys/__tests__/setup-core.test.js +0 -45
  877. package/dist/commands/sys/__tests__/sync-project-guidance.test.d.ts +0 -1
  878. package/dist/commands/sys/__tests__/sync-project-guidance.test.js +0 -244
  879. package/dist/core/__tests__/bash-guard.test.d.ts +0 -1
  880. package/dist/core/__tests__/bash-guard.test.js +0 -190
  881. package/dist/core/__tests__/boot-fault-attempt.test.d.ts +0 -1
  882. package/dist/core/__tests__/boot-fault-attempt.test.js +0 -105
  883. package/dist/core/__tests__/boot.test.d.ts +0 -1
  884. package/dist/core/__tests__/boot.test.js +0 -274
  885. package/dist/core/__tests__/branded-host-concurrency.test.d.ts +0 -1
  886. package/dist/core/__tests__/branded-host-concurrency.test.js +0 -72
  887. package/dist/core/__tests__/broker-extension-canvas-db-boundary.test.d.ts +0 -1
  888. package/dist/core/__tests__/broker-extension-canvas-db-boundary.test.js +0 -75
  889. package/dist/core/__tests__/broker-launch-candidates.test.d.ts +0 -1
  890. package/dist/core/__tests__/broker-launch-candidates.test.js +0 -311
  891. package/dist/core/__tests__/broker-preflight.test.d.ts +0 -1
  892. package/dist/core/__tests__/broker-preflight.test.js +0 -95
  893. package/dist/core/__tests__/broker-stream-watchdog-floor.test.d.ts +0 -1
  894. package/dist/core/__tests__/broker-stream-watchdog-floor.test.js +0 -82
  895. package/dist/core/__tests__/broker-turn-admission.test.d.ts +0 -1
  896. package/dist/core/__tests__/broker-turn-admission.test.js +0 -44
  897. package/dist/core/__tests__/canvas-db-boundary.test.d.ts +0 -1
  898. package/dist/core/__tests__/canvas-db-boundary.test.js +0 -46
  899. package/dist/core/__tests__/canvas-inbox-watcher-hold.test.d.ts +0 -1
  900. package/dist/core/__tests__/canvas-inbox-watcher-hold.test.js +0 -710
  901. package/dist/core/__tests__/canvas-inbox-watcher-naming.test.d.ts +0 -1
  902. package/dist/core/__tests__/canvas-inbox-watcher-naming.test.js +0 -310
  903. package/dist/core/__tests__/canvas-inbox-watcher.test.d.ts +0 -1
  904. package/dist/core/__tests__/canvas-inbox-watcher.test.js +0 -397
  905. package/dist/core/__tests__/canvas.test.d.ts +0 -1
  906. package/dist/core/__tests__/canvas.test.js +0 -138
  907. package/dist/core/__tests__/child-death-wake.test.d.ts +0 -1
  908. package/dist/core/__tests__/child-death-wake.test.js +0 -153
  909. package/dist/core/__tests__/cli-help-contract.test.d.ts +0 -1
  910. package/dist/core/__tests__/cli-help-contract.test.js +0 -152
  911. package/dist/core/__tests__/close.test.d.ts +0 -1
  912. package/dist/core/__tests__/close.test.js +0 -284
  913. package/dist/core/__tests__/collectible.test.d.ts +0 -1
  914. package/dist/core/__tests__/collectible.test.js +0 -89
  915. package/dist/core/__tests__/config-change-delta.test.d.ts +0 -1
  916. package/dist/core/__tests__/config-change-delta.test.js +0 -108
  917. package/dist/core/__tests__/context-intro.test.d.ts +0 -1
  918. package/dist/core/__tests__/context-intro.test.js +0 -123
  919. package/dist/core/__tests__/cron-armed-context-failure.test.d.ts +0 -1
  920. package/dist/core/__tests__/cron-armed-context-failure.test.js +0 -150
  921. package/dist/core/__tests__/cron-held-settlement.test.d.ts +0 -1
  922. package/dist/core/__tests__/cron-held-settlement.test.js +0 -240
  923. package/dist/core/__tests__/cron-node-sink-parked-root.test.d.ts +0 -1
  924. package/dist/core/__tests__/cron-node-sink-parked-root.test.js +0 -166
  925. package/dist/core/__tests__/cron-self-cancel-delivery.test.d.ts +0 -1
  926. package/dist/core/__tests__/cron-self-cancel-delivery.test.js +0 -84
  927. package/dist/core/__tests__/cron-timeout-descendants.test.d.ts +0 -1
  928. package/dist/core/__tests__/cron-timeout-descendants.test.js +0 -114
  929. package/dist/core/__tests__/daemon-boot.test.d.ts +0 -1
  930. package/dist/core/__tests__/daemon-boot.test.js +0 -422
  931. package/dist/core/__tests__/daemon-wedge.test.d.ts +0 -1
  932. package/dist/core/__tests__/daemon-wedge.test.js +0 -106
  933. package/dist/core/__tests__/dead-node-policy-table.test.d.ts +0 -1
  934. package/dist/core/__tests__/dead-node-policy-table.test.js +0 -77
  935. package/dist/core/__tests__/events-contract.test.d.ts +0 -1
  936. package/dist/core/__tests__/events-contract.test.js +0 -76
  937. package/dist/core/__tests__/extension-abort.test.d.ts +0 -1
  938. package/dist/core/__tests__/extension-abort.test.js +0 -21
  939. package/dist/core/__tests__/fault-classifier.test.d.ts +0 -1
  940. package/dist/core/__tests__/fault-classifier.test.js +0 -138
  941. package/dist/core/__tests__/fixtures/api-server-host.d.ts +0 -1
  942. package/dist/core/__tests__/fixtures/api-server-host.js +0 -47
  943. package/dist/core/__tests__/fixtures/c3-custom-provider-ext.d.ts +0 -2
  944. package/dist/core/__tests__/fixtures/c3-custom-provider-ext.js +0 -34
  945. package/dist/core/__tests__/fixtures/c5-command-boundary-ext.d.ts +0 -2
  946. package/dist/core/__tests__/fixtures/c5-command-boundary-ext.js +0 -32
  947. package/dist/core/__tests__/fixtures/fake-engine.d.ts +0 -347
  948. package/dist/core/__tests__/fixtures/fake-engine.js +0 -1509
  949. package/dist/core/__tests__/fixtures/fake-pi-host.d.ts +0 -2
  950. package/dist/core/__tests__/fixtures/fake-pi-host.js +0 -311
  951. package/dist/core/__tests__/fixtures/memory-slash-live-probe.d.ts +0 -1
  952. package/dist/core/__tests__/fixtures/memory-slash-live-probe.js +0 -75
  953. package/dist/core/__tests__/fixtures/metadata-migration-race.d.ts +0 -1
  954. package/dist/core/__tests__/fixtures/metadata-migration-race.js +0 -49
  955. package/dist/core/__tests__/focuses.test.d.ts +0 -1
  956. package/dist/core/__tests__/focuses.test.js +0 -113
  957. package/dist/core/__tests__/fs-utils.test.d.ts +0 -1
  958. package/dist/core/__tests__/fs-utils.test.js +0 -50
  959. package/dist/core/__tests__/helpers/broker-clients.d.ts +0 -43
  960. package/dist/core/__tests__/helpers/broker-clients.js +0 -174
  961. package/dist/core/__tests__/helpers/fleet.d.ts +0 -12
  962. package/dist/core/__tests__/helpers/fleet.js +0 -50
  963. package/dist/core/__tests__/helpers/harness.d.ts +0 -124
  964. package/dist/core/__tests__/helpers/harness.js +0 -806
  965. package/dist/core/__tests__/helpers/viewer-panes.d.ts +0 -12
  966. package/dist/core/__tests__/helpers/viewer-panes.js +0 -133
  967. package/dist/core/__tests__/history-inbox.test.d.ts +0 -1
  968. package/dist/core/__tests__/history-inbox.test.js +0 -121
  969. package/dist/core/__tests__/human-action-delivery.test.d.ts +0 -1
  970. package/dist/core/__tests__/human-action-delivery.test.js +0 -162
  971. package/dist/core/__tests__/human-actions.test.d.ts +0 -1
  972. package/dist/core/__tests__/human-actions.test.js +0 -120
  973. package/dist/core/__tests__/inline-memory-refs.test.d.ts +0 -1
  974. package/dist/core/__tests__/inline-memory-refs.test.js +0 -225
  975. package/dist/core/__tests__/integration/broker-fork-seam.test.d.ts +0 -1
  976. package/dist/core/__tests__/integration/broker-fork-seam.test.js +0 -193
  977. package/dist/core/__tests__/integration/broker-sdk-wiring.test.d.ts +0 -1
  978. package/dist/core/__tests__/integration/broker-sdk-wiring.test.js +0 -750
  979. package/dist/core/__tests__/integration/broker-snapshot-history.test.d.ts +0 -1
  980. package/dist/core/__tests__/integration/broker-snapshot-history.test.js +0 -288
  981. package/dist/core/__tests__/integration/broker-wedge-supervision.test.d.ts +0 -1
  982. package/dist/core/__tests__/integration/broker-wedge-supervision.test.js +0 -103
  983. package/dist/core/__tests__/integration/command-plugins.test.d.ts +0 -1
  984. package/dist/core/__tests__/integration/command-plugins.test.js +0 -1200
  985. package/dist/core/__tests__/integration/deferred-no-wake.test.d.ts +0 -1
  986. package/dist/core/__tests__/integration/deferred-no-wake.test.js +0 -610
  987. package/dist/core/__tests__/integration/flagship-lifecycle.test.d.ts +0 -1
  988. package/dist/core/__tests__/integration/flagship-lifecycle.test.js +0 -264
  989. package/dist/core/__tests__/integration/fresh-home-commands.test.d.ts +0 -1
  990. package/dist/core/__tests__/integration/fresh-home-commands.test.js +0 -49
  991. package/dist/core/__tests__/integration/git-optional-locks.test.d.ts +0 -1
  992. package/dist/core/__tests__/integration/git-optional-locks.test.js +0 -81
  993. package/dist/core/__tests__/integration/host-teardown-process-group.test.d.ts +0 -1
  994. package/dist/core/__tests__/integration/host-teardown-process-group.test.js +0 -480
  995. package/dist/core/__tests__/integration/lifecycle-hooks.test.d.ts +0 -1
  996. package/dist/core/__tests__/integration/lifecycle-hooks.test.js +0 -498
  997. package/dist/core/__tests__/integration/live-mutation-verbs.test.d.ts +0 -1
  998. package/dist/core/__tests__/integration/live-mutation-verbs.test.js +0 -180
  999. package/dist/core/__tests__/integration/live-mutation.test.d.ts +0 -1
  1000. package/dist/core/__tests__/integration/live-mutation.test.js +0 -173
  1001. package/dist/core/__tests__/integration/plugin-revalidate.test.d.ts +0 -1
  1002. package/dist/core/__tests__/integration/plugin-revalidate.test.js +0 -359
  1003. package/dist/core/__tests__/integration/profile-pause.test.d.ts +0 -1
  1004. package/dist/core/__tests__/integration/profile-pause.test.js +0 -115
  1005. package/dist/core/__tests__/integration/refresh-stall-recycle.test.d.ts +0 -1
  1006. package/dist/core/__tests__/integration/refresh-stall-recycle.test.js +0 -151
  1007. package/dist/core/__tests__/integration/revive.test.d.ts +0 -1
  1008. package/dist/core/__tests__/integration/revive.test.js +0 -615
  1009. package/dist/core/__tests__/integration/spawn-root.test.d.ts +0 -1
  1010. package/dist/core/__tests__/integration/spawn-root.test.js +0 -536
  1011. package/dist/core/__tests__/integration/subscription-delivery.test.d.ts +0 -1
  1012. package/dist/core/__tests__/integration/subscription-delivery.test.js +0 -132
  1013. package/dist/core/__tests__/integration/tmux-surface.test.d.ts +0 -1
  1014. package/dist/core/__tests__/integration/tmux-surface.test.js +0 -330
  1015. package/dist/core/__tests__/integration/worktree-land.test.d.ts +0 -1
  1016. package/dist/core/__tests__/integration/worktree-land.test.js +0 -607
  1017. package/dist/core/__tests__/integration/worktree-reap.test.d.ts +0 -1
  1018. package/dist/core/__tests__/integration/worktree-reap.test.js +0 -842
  1019. package/dist/core/__tests__/kickoff.test.d.ts +0 -1
  1020. package/dist/core/__tests__/kickoff.test.js +0 -196
  1021. package/dist/core/__tests__/lifecycle-terminal-reasons.test.d.ts +0 -1
  1022. package/dist/core/__tests__/lifecycle-terminal-reasons.test.js +0 -62
  1023. package/dist/core/__tests__/lifecycle.test.d.ts +0 -1
  1024. package/dist/core/__tests__/lifecycle.test.js +0 -176
  1025. package/dist/core/__tests__/live-lifecycle-prompt.test.d.ts +0 -1
  1026. package/dist/core/__tests__/live-lifecycle-prompt.test.js +0 -63
  1027. package/dist/core/__tests__/memory-resolver-precedence.test.d.ts +0 -1
  1028. package/dist/core/__tests__/memory-resolver-precedence.test.js +0 -228
  1029. package/dist/core/__tests__/migration.test.d.ts +0 -1
  1030. package/dist/core/__tests__/migration.test.js +0 -946
  1031. package/dist/core/__tests__/model-pin-durability.test.d.ts +0 -1
  1032. package/dist/core/__tests__/model-pin-durability.test.js +0 -195
  1033. package/dist/core/__tests__/model-routes-config.test.d.ts +0 -1
  1034. package/dist/core/__tests__/model-routes-config.test.js +0 -150
  1035. package/dist/core/__tests__/nested-store-discovery.test.d.ts +0 -1
  1036. package/dist/core/__tests__/nested-store-discovery.test.js +0 -89
  1037. package/dist/core/__tests__/node-outcome.test.d.ts +0 -1
  1038. package/dist/core/__tests__/node-outcome.test.js +0 -246
  1039. package/dist/core/__tests__/on-read-crouter-home-fence.test.d.ts +0 -1
  1040. package/dist/core/__tests__/on-read-crouter-home-fence.test.js +0 -66
  1041. package/dist/core/__tests__/on-read-dedup-resume.test.d.ts +0 -1
  1042. package/dist/core/__tests__/on-read-dedup-resume.test.js +0 -132
  1043. package/dist/core/__tests__/on-read-nested-store.test.d.ts +0 -1
  1044. package/dist/core/__tests__/on-read-nested-store.test.js +0 -135
  1045. package/dist/core/__tests__/parse-argv-stdin-secret.test.d.ts +0 -1
  1046. package/dist/core/__tests__/parse-argv-stdin-secret.test.js +0 -68
  1047. package/dist/core/__tests__/passive-subscription.test.d.ts +0 -1
  1048. package/dist/core/__tests__/passive-subscription.test.js +0 -120
  1049. package/dist/core/__tests__/pid-identity-match.test.d.ts +0 -1
  1050. package/dist/core/__tests__/pid-identity-match.test.js +0 -145
  1051. package/dist/core/__tests__/pid-zombie.test.d.ts +0 -1
  1052. package/dist/core/__tests__/pid-zombie.test.js +0 -42
  1053. package/dist/core/__tests__/plugin-kinds.test.d.ts +0 -1
  1054. package/dist/core/__tests__/plugin-kinds.test.js +0 -182
  1055. package/dist/core/__tests__/plugin-link-symlinked-scope-root.test.d.ts +0 -1
  1056. package/dist/core/__tests__/plugin-link-symlinked-scope-root.test.js +0 -43
  1057. package/dist/core/__tests__/plugin-page-components.test.d.ts +0 -1
  1058. package/dist/core/__tests__/plugin-page-components.test.js +0 -159
  1059. package/dist/core/__tests__/preview-mirror-cap.test.d.ts +0 -1
  1060. package/dist/core/__tests__/preview-mirror-cap.test.js +0 -53
  1061. package/dist/core/__tests__/preview-registry-sync.test.d.ts +0 -1
  1062. package/dist/core/__tests__/preview-registry-sync.test.js +0 -107
  1063. package/dist/core/__tests__/profile-project-memory-delivery.test.d.ts +0 -1
  1064. package/dist/core/__tests__/profile-project-memory-delivery.test.js +0 -644
  1065. package/dist/core/__tests__/prospective-inventory-capability-parity.test.d.ts +0 -1
  1066. package/dist/core/__tests__/prospective-inventory-capability-parity.test.js +0 -91
  1067. package/dist/core/__tests__/prune.test.d.ts +0 -1
  1068. package/dist/core/__tests__/prune.test.js +0 -243
  1069. package/dist/core/__tests__/push-final-guard.test.d.ts +0 -1
  1070. package/dist/core/__tests__/push-final-guard.test.js +0 -191
  1071. package/dist/core/__tests__/relaunch-root.test.d.ts +0 -1
  1072. package/dist/core/__tests__/relaunch-root.test.js +0 -249
  1073. package/dist/core/__tests__/remote-canvas-target.test.d.ts +0 -1
  1074. package/dist/core/__tests__/remote-canvas-target.test.js +0 -93
  1075. package/dist/core/__tests__/repository-association.test.d.ts +0 -1
  1076. package/dist/core/__tests__/repository-association.test.js +0 -153
  1077. package/dist/core/__tests__/repository-root-identity.test.d.ts +0 -1
  1078. package/dist/core/__tests__/repository-root-identity.test.js +0 -223
  1079. package/dist/core/__tests__/respawn-throttle.test.d.ts +0 -1
  1080. package/dist/core/__tests__/respawn-throttle.test.js +0 -20
  1081. package/dist/core/__tests__/review-model-floor.test.d.ts +0 -1
  1082. package/dist/core/__tests__/review-model-floor.test.js +0 -83
  1083. package/dist/core/__tests__/revive-all.test.d.ts +0 -1
  1084. package/dist/core/__tests__/revive-all.test.js +0 -157
  1085. package/dist/core/__tests__/revive-capacity.test.d.ts +0 -1
  1086. package/dist/core/__tests__/revive-capacity.test.js +0 -184
  1087. package/dist/core/__tests__/revive-parked-fresh.test.d.ts +0 -1
  1088. package/dist/core/__tests__/revive-parked-fresh.test.js +0 -176
  1089. package/dist/core/__tests__/scope-crouter-home-fence.test.d.ts +0 -1
  1090. package/dist/core/__tests__/scope-crouter-home-fence.test.js +0 -55
  1091. package/dist/core/__tests__/seam/broker-attach-multiclient.test.d.ts +0 -1
  1092. package/dist/core/__tests__/seam/broker-attach-multiclient.test.js +0 -262
  1093. package/dist/core/__tests__/seam/broker-attach-stream.test.d.ts +0 -1
  1094. package/dist/core/__tests__/seam/broker-attach-stream.test.js +0 -176
  1095. package/dist/core/__tests__/seam/broker-cap-freeze.test.d.ts +0 -1
  1096. package/dist/core/__tests__/seam/broker-cap-freeze.test.js +0 -155
  1097. package/dist/core/__tests__/seam/broker-crash-teardown.test.d.ts +0 -1
  1098. package/dist/core/__tests__/seam/broker-crash-teardown.test.js +0 -131
  1099. package/dist/core/__tests__/seam/broker-pane-resolution.test.d.ts +0 -1
  1100. package/dist/core/__tests__/seam/broker-pane-resolution.test.js +0 -204
  1101. package/dist/core/__tests__/seam/broker-provider-retry.test.d.ts +0 -1
  1102. package/dist/core/__tests__/seam/broker-provider-retry.test.js +0 -686
  1103. package/dist/core/__tests__/seam/broker-startup-diagnostics.test.d.ts +0 -1
  1104. package/dist/core/__tests__/seam/broker-startup-diagnostics.test.js +0 -82
  1105. package/dist/core/__tests__/seam/broker-whip-interrupt.test.d.ts +0 -1
  1106. package/dist/core/__tests__/seam/broker-whip-interrupt.test.js +0 -50
  1107. package/dist/core/__tests__/seam/deadline-wake-delivery.test.d.ts +0 -1
  1108. package/dist/core/__tests__/seam/deadline-wake-delivery.test.js +0 -138
  1109. package/dist/core/__tests__/seam/dormancy-release.test.d.ts +0 -1
  1110. package/dist/core/__tests__/seam/dormancy-release.test.js +0 -516
  1111. package/dist/core/__tests__/seam/held-deferred-human-prompt.test.d.ts +0 -1
  1112. package/dist/core/__tests__/seam/held-deferred-human-prompt.test.js +0 -65
  1113. package/dist/core/__tests__/seam/inbox-reference-guidance.test.d.ts +0 -1
  1114. package/dist/core/__tests__/seam/inbox-reference-guidance.test.js +0 -84
  1115. package/dist/core/__tests__/seam/memory-slash-node-relative-inventory.test.d.ts +0 -1
  1116. package/dist/core/__tests__/seam/memory-slash-node-relative-inventory.test.js +0 -160
  1117. package/dist/core/__tests__/seam/node-outcome-delivery.test.d.ts +0 -1
  1118. package/dist/core/__tests__/seam/node-outcome-delivery.test.js +0 -177
  1119. package/dist/core/__tests__/seam/prospective-inventory-stdout.test.d.ts +0 -1
  1120. package/dist/core/__tests__/seam/prospective-inventory-stdout.test.js +0 -31
  1121. package/dist/core/__tests__/seam/reopen-invalidated-worktree.test.d.ts +0 -1
  1122. package/dist/core/__tests__/seam/reopen-invalidated-worktree.test.js +0 -60
  1123. package/dist/core/__tests__/seam/self-close-teardown.test.d.ts +0 -1
  1124. package/dist/core/__tests__/seam/self-close-teardown.test.js +0 -49
  1125. package/dist/core/__tests__/seam/yield-refresh-transaction.test.d.ts +0 -1
  1126. package/dist/core/__tests__/seam/yield-refresh-transaction.test.js +0 -100
  1127. package/dist/core/__tests__/secrets.test.d.ts +0 -1
  1128. package/dist/core/__tests__/secrets.test.js +0 -49
  1129. package/dist/core/__tests__/self-update.test.d.ts +0 -1
  1130. package/dist/core/__tests__/self-update.test.js +0 -46
  1131. package/dist/core/__tests__/session-branch.test.d.ts +0 -1
  1132. package/dist/core/__tests__/session-branch.test.js +0 -61
  1133. package/dist/core/__tests__/session-cycles.test.d.ts +0 -1
  1134. package/dist/core/__tests__/session-cycles.test.js +0 -133
  1135. package/dist/core/__tests__/session-model.test.d.ts +0 -1
  1136. package/dist/core/__tests__/session-model.test.js +0 -111
  1137. package/dist/core/__tests__/spawn-worktree-id-conflict.test.d.ts +0 -1
  1138. package/dist/core/__tests__/spawn-worktree-id-conflict.test.js +0 -71
  1139. package/dist/core/__tests__/stdin-body-no-discard.test.d.ts +0 -1
  1140. package/dist/core/__tests__/stdin-body-no-discard.test.js +0 -33
  1141. package/dist/core/__tests__/stdout-errors.test.d.ts +0 -1
  1142. package/dist/core/__tests__/stdout-errors.test.js +0 -16
  1143. package/dist/core/__tests__/stop-guard.test.d.ts +0 -1
  1144. package/dist/core/__tests__/stop-guard.test.js +0 -237
  1145. package/dist/core/__tests__/stream-watchdog.test.d.ts +0 -1
  1146. package/dist/core/__tests__/stream-watchdog.test.js +0 -154
  1147. package/dist/core/__tests__/subscription-pool-credential-guard.test.d.ts +0 -1
  1148. package/dist/core/__tests__/subscription-pool-credential-guard.test.js +0 -95
  1149. package/dist/core/__tests__/tmux-driver-boundary.test.d.ts +0 -1
  1150. package/dist/core/__tests__/tmux-driver-boundary.test.js +0 -50
  1151. package/dist/core/__tests__/warm-claim-preference-snapshot.test.d.ts +0 -1
  1152. package/dist/core/__tests__/warm-claim-preference-snapshot.test.js +0 -54
  1153. package/dist/core/__tests__/worktree-landing.test.d.ts +0 -1
  1154. package/dist/core/__tests__/worktree-landing.test.js +0 -11
  1155. package/dist/core/__tests__/yield-ensures-daemon.test.d.ts +0 -1
  1156. package/dist/core/__tests__/yield-ensures-daemon.test.js +0 -55
  1157. package/dist/core/broker-client/__tests__/transport-relay.test.d.ts +0 -1
  1158. package/dist/core/broker-client/__tests__/transport-relay.test.js +0 -214
  1159. package/dist/core/broker-client/__tests__/transport-socket.test.d.ts +0 -1
  1160. package/dist/core/broker-client/__tests__/transport-socket.test.js +0 -73
  1161. package/dist/core/canvas/__tests__/attention.test.d.ts +0 -1
  1162. package/dist/core/canvas/__tests__/attention.test.js +0 -83
  1163. package/dist/core/canvas/__tests__/history-transcript.test.d.ts +0 -1
  1164. package/dist/core/canvas/__tests__/history-transcript.test.js +0 -102
  1165. package/dist/core/canvas/__tests__/remote-canvas-source.test.d.ts +0 -1
  1166. package/dist/core/canvas/__tests__/remote-canvas-source.test.js +0 -328
  1167. package/dist/core/canvas/__tests__/remote-transport.test.d.ts +0 -1
  1168. package/dist/core/canvas/__tests__/remote-transport.test.js +0 -97
  1169. package/dist/core/canvas/__tests__/render-remote.test.d.ts +0 -1
  1170. package/dist/core/canvas/__tests__/render-remote.test.js +0 -243
  1171. package/dist/core/canvas/__tests__/session-window.test.d.ts +0 -1
  1172. package/dist/core/canvas/__tests__/session-window.test.js +0 -70
  1173. package/dist/core/feed/__tests__/inbox-migrate.test.d.ts +0 -1
  1174. package/dist/core/feed/__tests__/inbox-migrate.test.js +0 -49
  1175. package/dist/core/human/__tests__/page-catalog.test.d.ts +0 -1
  1176. package/dist/core/human/__tests__/page-catalog.test.js +0 -20
  1177. package/dist/core/human/__tests__/page-html-markdown.test.d.ts +0 -1
  1178. package/dist/core/human/__tests__/page-html-markdown.test.js +0 -48
  1179. package/dist/core/human/__tests__/page.test.d.ts +0 -1
  1180. package/dist/core/human/__tests__/page.test.js +0 -92
  1181. package/dist/core/keybindings/__tests__/resolve.test.d.ts +0 -1
  1182. package/dist/core/keybindings/__tests__/resolve.test.js +0 -171
  1183. package/dist/core/profiles/__tests__/env-store.test.d.ts +0 -1
  1184. package/dist/core/profiles/__tests__/env-store.test.js +0 -99
  1185. package/dist/core/profiles/__tests__/fuzzy-match.test.d.ts +0 -1
  1186. package/dist/core/profiles/__tests__/fuzzy-match.test.js +0 -51
  1187. package/dist/core/profiles/__tests__/root-profile.test.d.ts +0 -1
  1188. package/dist/core/profiles/__tests__/root-profile.test.js +0 -59
  1189. package/dist/core/review/__tests__/capture-origin.test.d.ts +0 -1
  1190. package/dist/core/review/__tests__/capture-origin.test.js +0 -150
  1191. package/dist/core/review/__tests__/comments.test.d.ts +0 -1
  1192. package/dist/core/review/__tests__/comments.test.js +0 -116
  1193. package/dist/core/review/__tests__/remap.test.d.ts +0 -1
  1194. package/dist/core/review/__tests__/remap.test.js +0 -177
  1195. package/dist/core/review/__tests__/stage-identity.test.d.ts +0 -1
  1196. package/dist/core/review/__tests__/stage-identity.test.js +0 -150
  1197. package/dist/core/runtime/__tests__/engine-route.test.d.ts +0 -1
  1198. package/dist/core/runtime/__tests__/engine-route.test.js +0 -36
  1199. package/dist/core/runtime/__tests__/install-id-cache-scoping.test.d.ts +0 -1
  1200. package/dist/core/runtime/__tests__/install-id-cache-scoping.test.js +0 -45
  1201. package/dist/core/runtime/__tests__/node-env.test.d.ts +0 -1
  1202. package/dist/core/runtime/__tests__/node-env.test.js +0 -73
  1203. package/dist/core/runtime/__tests__/spawn-env.test.d.ts +0 -1
  1204. package/dist/core/runtime/__tests__/spawn-env.test.js +0 -259
  1205. package/dist/core/substrate/__tests__/surface-match-command.test.d.ts +0 -1
  1206. package/dist/core/substrate/__tests__/surface-match-command.test.js +0 -89
  1207. package/dist/core/substrate/__tests__/surface-match-memory-read.test.d.ts +0 -1
  1208. package/dist/core/substrate/__tests__/surface-match-memory-read.test.js +0 -28
  1209. package/dist/core/substrate/__tests__/surface-match-pre-command.test.d.ts +0 -1
  1210. package/dist/core/substrate/__tests__/surface-match-pre-command.test.js +0 -92
  1211. package/dist/daemon/__tests__/autostart-storm.test.d.ts +0 -1
  1212. package/dist/daemon/__tests__/autostart-storm.test.js +0 -128
  1213. package/dist/daemon/__tests__/broker-ownership.test.d.ts +0 -1
  1214. package/dist/daemon/__tests__/broker-ownership.test.js +0 -25
  1215. package/dist/daemon/__tests__/daemon-ownership.test.d.ts +0 -1
  1216. package/dist/daemon/__tests__/daemon-ownership.test.js +0 -27
  1217. package/dist/daemon/__tests__/helpers/source-daemon.d.ts +0 -30
  1218. package/dist/daemon/__tests__/helpers/source-daemon.js +0 -176
  1219. package/dist/daemon/__tests__/integration/api-startup-readiness.test.d.ts +0 -1
  1220. package/dist/daemon/__tests__/integration/api-startup-readiness.test.js +0 -83
  1221. package/dist/daemon/__tests__/integration/migration-startup.test.d.ts +0 -1
  1222. package/dist/daemon/__tests__/integration/migration-startup.test.js +0 -127
  1223. package/dist/daemon/__tests__/node-deadline-lane.test.d.ts +0 -1
  1224. package/dist/daemon/__tests__/node-deadline-lane.test.js +0 -77
  1225. package/dist/daemon/__tests__/node-outcome-birth-invariants.test.d.ts +0 -1
  1226. package/dist/daemon/__tests__/node-outcome-birth-invariants.test.js +0 -146
  1227. package/dist/daemon/__tests__/node-outcome-delivery.test.d.ts +0 -1
  1228. package/dist/daemon/__tests__/node-outcome-delivery.test.js +0 -116
  1229. package/dist/daemon/__tests__/reconciler-signature.test.d.ts +0 -1
  1230. package/dist/daemon/__tests__/reconciler-signature.test.js +0 -37
  1231. package/dist/daemon/__tests__/subtree-filter-freshness.test.d.ts +0 -1
  1232. package/dist/daemon/__tests__/subtree-filter-freshness.test.js +0 -63
  1233. package/dist/daemon/__tests__/thaw-order.test.d.ts +0 -1
  1234. package/dist/daemon/__tests__/thaw-order.test.js +0 -55
  1235. package/dist/daemon/api/__tests__/bridge-heartbeat.test.d.ts +0 -1
  1236. package/dist/daemon/api/__tests__/bridge-heartbeat.test.js +0 -58
  1237. package/dist/daemon/api/__tests__/broker-settle-park.test.d.ts +0 -1
  1238. package/dist/daemon/api/__tests__/broker-settle-park.test.js +0 -175
  1239. package/dist/daemon/api/__tests__/canvas-snapshot-fields.test.d.ts +0 -1
  1240. package/dist/daemon/api/__tests__/canvas-snapshot-fields.test.js +0 -216
  1241. package/dist/daemon/api/__tests__/error-seam.test.d.ts +0 -1
  1242. package/dist/daemon/api/__tests__/error-seam.test.js +0 -83
  1243. package/dist/daemon/api/__tests__/model-config.test.d.ts +0 -1
  1244. package/dist/daemon/api/__tests__/model-config.test.js +0 -73
  1245. package/dist/daemon/api/__tests__/node-create-description.test.d.ts +0 -1
  1246. package/dist/daemon/api/__tests__/node-create-description.test.js +0 -127
  1247. package/dist/daemon/api/__tests__/node-model-validation.test.d.ts +0 -1
  1248. package/dist/daemon/api/__tests__/node-model-validation.test.js +0 -183
  1249. package/dist/daemon/api/__tests__/nodes-activity-query.test.d.ts +0 -1
  1250. package/dist/daemon/api/__tests__/nodes-activity-query.test.js +0 -99
  1251. package/dist/daemon/api/__tests__/profile-launch-gates.test.d.ts +0 -1
  1252. package/dist/daemon/api/__tests__/profile-launch-gates.test.js +0 -172
  1253. package/dist/daemon/api/__tests__/profile-metadata-route.test.d.ts +0 -1
  1254. package/dist/daemon/api/__tests__/profile-metadata-route.test.js +0 -95
  1255. package/dist/daemon/api/__tests__/reopen-delivery.test.d.ts +0 -1
  1256. package/dist/daemon/api/__tests__/reopen-delivery.test.js +0 -260
  1257. package/dist/daemon/api/__tests__/seam/api-server.test.d.ts +0 -1
  1258. package/dist/daemon/api/__tests__/seam/api-server.test.js +0 -442
  1259. package/dist/daemon/api/__tests__/seam/b10-attach-modelauth.test.d.ts +0 -1
  1260. package/dist/daemon/api/__tests__/seam/b10-attach-modelauth.test.js +0 -310
  1261. package/dist/daemon/api/__tests__/seam/leaf-api-parity.test.d.ts +0 -1
  1262. package/dist/daemon/api/__tests__/seam/leaf-api-parity.test.js +0 -351
  1263. package/dist/daemon/api/__tests__/seam/node-outcome-api.test.d.ts +0 -1
  1264. package/dist/daemon/api/__tests__/seam/node-outcome-api.test.js +0 -159
  1265. package/dist/daemon/api/__tests__/seam/profile-delete.test.d.ts +0 -1
  1266. package/dist/daemon/api/__tests__/seam/profile-delete.test.js +0 -372
  1267. package/dist/daemon/api/__tests__/submit-result.test.d.ts +0 -1
  1268. package/dist/daemon/api/__tests__/submit-result.test.js +0 -215
  1269. package/dist/migrations/__tests__/activation-concurrency.test.d.ts +0 -1
  1270. package/dist/migrations/__tests__/activation-concurrency.test.js +0 -146
  1271. package/dist/migrations/__tests__/activation.test.d.ts +0 -1
  1272. package/dist/migrations/__tests__/activation.test.js +0 -152
  1273. package/dist/migrations/__tests__/deletion-and-root-declaration.test.d.ts +0 -1
  1274. package/dist/migrations/__tests__/deletion-and-root-declaration.test.js +0 -149
  1275. package/dist/pi-extensions/__tests__/canvas-bash-valve.test.d.ts +0 -1
  1276. package/dist/pi-extensions/__tests__/canvas-bash-valve.test.js +0 -86
  1277. package/dist/pi-extensions/__tests__/canvas-context-intro.test.d.ts +0 -1
  1278. package/dist/pi-extensions/__tests__/canvas-context-intro.test.js +0 -364
  1279. package/dist/pi-extensions/__tests__/canvas-goal-capture-envelope.test.d.ts +0 -1
  1280. package/dist/pi-extensions/__tests__/canvas-goal-capture-envelope.test.js +0 -106
  1281. package/dist/pi-extensions/__tests__/canvas-recap.test.d.ts +0 -1
  1282. package/dist/pi-extensions/__tests__/canvas-recap.test.js +0 -62
  1283. package/dist/pi-extensions/__tests__/canvas-stophook-agentend.test.d.ts +0 -1
  1284. package/dist/pi-extensions/__tests__/canvas-stophook-agentend.test.js +0 -432
  1285. package/dist/pi-extensions/__tests__/canvas-stophook-context-nudge.test.d.ts +0 -1
  1286. package/dist/pi-extensions/__tests__/canvas-stophook-context-nudge.test.js +0 -152
  1287. package/dist/pi-extensions/__tests__/canvas-structured-output.test.d.ts +0 -1
  1288. package/dist/pi-extensions/__tests__/canvas-structured-output.test.js +0 -88
  1289. package/dist/pi-extensions/__tests__/canvas-tool-guide.test.d.ts +0 -1
  1290. package/dist/pi-extensions/__tests__/canvas-tool-guide.test.js +0 -96
  1291. package/dist/pi-extensions/__tests__/integration/canvas-bash-valve.test.d.ts +0 -1
  1292. package/dist/pi-extensions/__tests__/integration/canvas-bash-valve.test.js +0 -133
  1293. package/dist/pi-extensions/__tests__/pre-command-gate.test.d.ts +0 -1
  1294. package/dist/pi-extensions/__tests__/pre-command-gate.test.js +0 -232
  1295. package/dist/shared/__tests__/env-boundary.test.d.ts +0 -1
  1296. package/dist/shared/__tests__/env-boundary.test.js +0 -95
  1297. package/dist/shared/__tests__/generated-context-grammar.test.d.ts +0 -1
  1298. package/dist/shared/__tests__/generated-context-grammar.test.js +0 -80
  1299. package/docs/compat/hearth-crtr-v1.md +0 -179
  1300. package/docs/compat/hearth-crtr-v2.md +0 -177
  1301. package/docs/compat/hearth-crtr-v3.md +0 -176
  1302. package/docs/compat/hearth-crtr-v4.md +0 -182
  1303. package/docs/compat/hearth-crtr-v5.md +0 -169
@@ -1,739 +1,10 @@
1
- // Registration kit for the agent-first crtr CLI.
2
- // Hand-rolled path walker — no commander. Rationale: the spec requires flags
3
- // and positional args on input (argv model). Commander's abstraction is more
4
- // complexity than a plain array walk for this interface contract.
5
- // A plain array walk + a small flag parser is ~120 lines and has no surprising
6
- // edge cases.
7
- import { renderRoot, renderBranch, renderLeafArgv } from './help.js';
8
- import { beginPreview, publishPreviewResult, readStdinRaw, peekStdinRaw, emit, handle, setJsonOutput, isJsonOutput } from './io.js';
9
- import { renderResult } from './render.js';
10
- import { CrtrError } from './errors.js';
11
- import { isManifestStaleError } from './manifest-stale.js';
12
- import { operationIdContext } from './events/operation-id.js';
13
- import { ExitCode } from '../types.js';
14
- import { readFileSync } from 'node:fs';
15
- import { spawnSync } from 'node:child_process';
16
- import { constants as osConstants } from 'node:os';
17
- import { isatty } from 'node:tty';
18
- import { resolve } from 'node:path';
19
- // Factory functions
20
- function freezeCommandMetadata(value) {
21
- if (value === null || typeof value !== 'object' || Object.isFrozen(value))
22
- return value;
23
- for (const child of Object.values(value))
24
- freezeCommandMetadata(child);
25
- return Object.freeze(value);
26
- }
27
- export function defineLeaf(opts) {
28
- return Object.freeze({
29
- kind: 'leaf',
30
- name: opts.name,
31
- description: opts.description,
32
- whenToUse: opts.whenToUse,
33
- tier: opts.tier,
34
- help: freezeCommandMetadata(opts.help),
35
- slash: opts.slash === undefined ? undefined : freezeCommandMetadata(opts.slash),
36
- hookEligible: opts.hookEligible,
37
- plugin: opts.plugin,
38
- run: opts.run,
39
- render: opts.render,
40
- });
41
- }
42
- /** Number of a node's own non-hidden subcommands (direct children). Leaves and
43
- * childless branches return 0. */
44
- function visibleSubCount(def) {
45
- if (def.kind !== 'branch')
46
- return 0;
47
- return (def.help.listing ?? []).filter((c) => c.tier !== 'hidden').length;
48
- }
49
- export function defineBranch(opts) {
50
- // A passthrough branch must be childless: walk() only stops at the deepest
51
- // matched node, so a passthrough branch with children would let some
52
- // invocations descend into a child (tree dispatch) while others hit the
53
- // passthrough interception — silently inconsistent transparency. Fail loudly
54
- // at construction instead of letting that split happen at runtime.
55
- if (opts.passthrough !== undefined && opts.children.length > 0) {
56
- throw new Error(`defineBranch("${opts.name}"): a passthrough branch must declare no children (found ${opts.children.length})`);
57
- }
58
- // Assemble the parent-level listing straight from the child defs — each node
59
- // owns its own description/whenToUse/tier, so the parent copies nothing
60
- // (principle 16). Bottom-up construction guarantees a child branch's listing
61
- // is already computed, so subCount is available here.
62
- opts.help.listing = opts.children.map((c) => {
63
- const subCount = visibleSubCount(c);
64
- return {
65
- name: c.name,
66
- description: c.description ?? '',
67
- whenToUse: c.whenToUse ?? '',
68
- tier: c.tier ?? 'normal',
69
- ...(c.plugin !== undefined ? { plugin: c.plugin } : {}),
70
- ...(subCount > 0 ? { subCount } : {}),
71
- };
72
- });
73
- return {
74
- kind: 'branch',
75
- name: opts.name,
76
- description: opts.description,
77
- whenToUse: opts.whenToUse,
78
- tier: opts.tier,
79
- help: opts.help,
80
- rootEntry: opts.rootEntry,
81
- extensible: opts.extensible,
82
- plugin: opts.plugin,
83
- slash: opts.slash,
84
- passthrough: opts.passthrough,
85
- children: opts.children,
86
- };
87
- }
88
- /** Walk the whole tree and collect every node's SlashSpec (depth-first). Used
89
- * by the bootstrap to discover which commands opted into slash exposure. */
90
- export function collectSlashSpecs(root) {
91
- const out = [];
92
- const visit = (node) => {
93
- if (node.slash !== undefined)
94
- out.push(node.slash);
95
- if (node.kind === 'branch')
96
- for (const c of node.children)
97
- visit(c);
98
- };
99
- for (const s of root.subtrees)
100
- visit(s);
101
- return out;
102
- }
103
- /** Assemble root -h from the subtrees themselves. Root owns only the tagline
104
- * and globals; every subtree's concept line, selection rubric, and dynamic
105
- * block come from its own RootEntry. A subtree without a rootEntry does not
106
- * appear in root -h — declaring the parent-level representation is how a
107
- * subtree opts into being listed. */
108
- export function defineRoot(opts) {
109
- // Each listed subtree becomes one <name> block at root, assembled straight
110
- // from its RootEntry. Root composes nothing and hardcodes nothing: add a
111
- // subtree with a rootEntry and it surfaces; its concept, rubric, state tag,
112
- // and dynamic block all travel with it.
113
- const commands = opts.subtrees
114
- .filter((s) => s.rootEntry !== undefined)
115
- .map((s) => {
116
- // Promote this subtree's common/important children into root, and count
117
- // how many other (non-hidden) direct subcommands stay behind `<name> -h`.
118
- const visible = (s.help.listing ?? []).filter((c) => c.tier !== 'hidden');
119
- const promoted = visible
120
- .filter((c) => c.tier === 'common' || c.tier === 'important')
121
- .map((c) => ({
122
- path: `${s.name} ${c.name}`,
123
- // important carries its shortform desc; common shows the bare path.
124
- desc: c.tier === 'important' ? c.description : undefined,
125
- }));
126
- return {
127
- name: s.name,
128
- concept: s.rootEntry.concept,
129
- desc: s.rootEntry.desc,
130
- useWhen: s.rootEntry.useWhen,
131
- dynamicState: s.rootEntry.dynamicState,
132
- subcommands: promoted.length > 0 ? promoted : undefined,
133
- otherSubcommandCount: visible.length - promoted.length,
134
- };
135
- });
136
- const help = {
137
- tagline: opts.tagline,
138
- commands,
139
- globals: opts.globals,
140
- };
141
- return { kind: 'root', help, subtrees: opts.subtrees };
142
- }
143
- /** Validate and return child names for an unknown-path error. */
144
- function childNames(node) {
145
- if (node.kind === 'root')
146
- return node.subtrees.filter((s) => s.tier !== 'hidden').map((s) => s.name);
147
- if (node.kind === 'branch')
148
- return node.children.filter((c) => c.tier !== 'hidden').map((c) => c.name);
149
- return [];
150
- }
151
- /** Walk argv tokens to the deepest matched node.
152
- * Returns { node, path, remaining } where path is the sequence of matched node
153
- * names from root (excluding root itself) and remaining are unconsumed tokens.
154
- * -h / --help tokens are NOT consumed here — the caller checks for them. */
155
- export function walk(root, tokens) {
156
- let current = root;
157
- const path = [];
158
- let i = 0;
159
- while (i < tokens.length) {
160
- const token = tokens[i];
161
- // Stop consuming on -h / --help — leave them for caller to detect
162
- if (token === '-h' || token === '--help')
163
- break;
164
- if (current.kind === 'root') {
165
- const nextNode = current.subtrees.find((s) => s.name === token);
166
- if (nextNode === undefined)
167
- break;
168
- current = nextNode;
169
- path.push(nextNode.name);
170
- i++;
171
- }
172
- else if (current.kind === 'branch') {
173
- const nextNode = current.children.find((c) => c.name === token);
174
- if (nextNode === undefined)
175
- break;
176
- current = nextNode;
177
- path.push(nextNode.name);
178
- i++;
179
- }
180
- else {
181
- // leaf — cannot descend further
182
- break;
183
- }
184
- }
185
- return { node: current, path, remaining: tokens.slice(i) };
186
- }
187
- function renderNode(node) {
188
- if (node.kind === 'root')
189
- return renderRoot(node.help);
190
- if (node.kind === 'branch')
191
- return renderBranch(node.help);
192
- return renderLeafArgv(node.help);
193
- }
194
- /** Render effective Effects for a hook-eligible core leaf, then append any
195
- * commands.json helpAddenda beneath the ordinary contract. Focused parameter
196
- * help returns only the leaf-owned parameter view, because the caller already
197
- * read the ordinary contract and addenda before following its road sign. Both
198
- * plugin lookups read stored manifest bytes only. Addenda validation receives
199
- * the install gate's exact reserved core names and full core path set, so a
200
- * manifest rejected at ingress contributes nothing here either. */
201
- async function renderNodeWithAddenda(node, path, focusedFlag) {
202
- if (focusedFlag !== undefined && node.kind === 'leaf') {
203
- return renderLeafArgv(node.help, focusedFlag);
204
- }
205
- const body = node.kind === 'leaf' && node.effectiveHelp !== undefined
206
- ? renderLeafArgv(await node.effectiveHelp())
207
- : renderNode(node);
208
- if (path.length === 0)
209
- return body;
210
- const { hasEffectiveCommandPlugins } = await import('./command-plugins/presence.js');
211
- if (!hasEffectiveCommandPlugins())
212
- return body;
213
- const [{ collectHelpAddenda }, { SUBTREE_NAMES, coreCommandPaths, extensibleCoreBranches }] = await Promise.all([
214
- import('./command-plugins/help-addenda.js'),
215
- import('../build-root.js'),
216
- ]);
217
- const addenda = await collectHelpAddenda(path.join(' '), {
218
- reservedCoreNames: new Set(SUBTREE_NAMES),
219
- coreCommandPaths,
220
- extensibleCoreBranches,
221
- });
222
- return body + addenda.map((a) => `\n\n<plugin-help plugin="${a.plugin}">\n${a.text}\n</plugin-help>`).join('');
223
- }
224
- function helpRequested(remaining) {
225
- return remaining.some((t) => t === '-h' || t === '--help');
226
- }
227
- /** Resolve the canonical focused-help form `crtr <leaf> --<flag> -h`.
228
- * Only flags that explicitly own a focusedHelp contract select that view;
229
- * every other historical help invocation renders ordinary leaf help. */
230
- function focusedHelpFlag(node, remaining) {
231
- if (node.kind !== 'leaf' || remaining.length !== 2)
232
- return undefined;
233
- const [flagToken, helpToken] = remaining;
234
- if ((helpToken !== '-h' && helpToken !== '--help')
235
- || !flagToken.startsWith('--')
236
- || flagToken.includes('='))
237
- return undefined;
238
- const name = flagToken.slice(2);
239
- const flag = (node.help.params ?? []).find((param) => param.kind === 'flag' && param.name === name);
240
- return flag?.focusedHelp !== undefined ? name : undefined;
241
- }
242
- /** Recover the RAW argv slice after a matched passthrough branch's path,
243
- * unaffected by the `--json`-stripping done to build `tokens`. `path` is a
244
- * prefix of non-`--json` tokens in order, so walking `rawTokens` while
245
- * skipping `--json` occurrences until `path` is fully matched lands the
246
- * cursor exactly where the branch's own args begin — including a literal
247
- * `--json` the external binary itself accepts. */
248
- function rawArgsAfterPath(rawTokens, path) {
249
- let matched = 0;
250
- for (let i = 0; i < rawTokens.length; i++) {
251
- if (matched === path.length)
252
- return rawTokens.slice(i);
253
- if (rawTokens[i] === '--json')
254
- continue;
255
- if (rawTokens[i] === path[matched])
256
- matched++;
257
- }
258
- return [];
259
- }
260
- /** Forward `args` to an external binary verbatim: stdio inherited (streaming
261
- * preserved), and the child's exit code propagated. Never returns — either
262
- * exits with the child's status or throws a structured CrtrError (ENOENT ->
263
- * install hint) for the caller's existing error handler to render. */
264
- function runPassthrough(passthrough, args) {
265
- const result = spawnSync(passthrough.bin, args, { stdio: 'inherit' });
266
- if (result.error !== undefined) {
267
- // Any launch-time failure (not found, not executable, ...) means this
268
- // binary isn't usable from here — surface one structured error with the
269
- // install hint rather than branching on a specific errno. (Node/libuv can
270
- // report EACCES instead of ENOENT for a genuinely-missing binary when PATH
271
- // contains malformed entries — e.g. a literal `~/...` segment — so a
272
- // ENOENT-only check would miss real missing-binary cases on such hosts.)
273
- const err = result.error;
274
- throw new CrtrError('binary_missing', `${passthrough.bin} could not be run (${err.code ?? err.message})`, ExitCode.USAGE, {
275
- received: passthrough.bin,
276
- next: passthrough.installHint,
277
- });
278
- }
279
- if (result.status !== null) {
280
- process.exit(result.status);
281
- }
282
- if (result.signal !== null) {
283
- // Signal-terminated: exit(1) would break the transparent exit-propagation
284
- // contract (a direct shell invocation would show 128+signal, e.g. 143 for
285
- // SIGTERM). Map to the standard 128+signal-number convention.
286
- const signalNumber = osConstants.signals[result.signal];
287
- if (signalNumber !== undefined) {
288
- process.exit(128 + signalNumber);
289
- }
290
- }
291
- // Truly impossible per Node's spawnSync contract (status and signal are
292
- // mutually exclusive and one is always set on a completed run) — fallback only.
293
- process.exit(1);
294
- }
295
- /** Build a structured unknown-path error. Names valid children of the deepest
296
- * matched node and names the entry command per the spec. The entry command is
297
- * the full path to the matched node (not just its local name), so the recovery
298
- * hint is a command that actually exists. No fuzzy matching. */
299
- export function unknownPathError(node, path, bad) {
300
- const valid = childNames(node);
301
- const validStr = valid.length > 0 ? valid.join(', ') : '(none)';
302
- const entryCmd = path.length > 0 ? `crtr ${path.join(' ')} -h` : 'crtr -h';
303
- return new CrtrError('unknown_path', `unknown subcommand: ${bad}`, ExitCode.USAGE, {
304
- received: bad,
305
- next: `Valid children: ${validStr}. Run \`${entryCmd}\` for the full list.`,
306
- });
307
- }
308
- // Argv parser
309
- function parseArgvError(code, message, received, field, next) {
310
- return new CrtrError(code, message, ExitCode.USAGE, {
311
- received,
312
- field,
313
- next: next !== undefined ? next : 'Run the command with -h to see the parameter schema.',
314
- });
315
- }
316
- /** Convert kebab-case flag name to camelCase key. e.g. context-file → contextFile */
317
- function flagNameToKey(name) {
318
- return name.replace(/-([a-z])/g, (_, c) => c.toUpperCase());
319
- }
320
- /** Parse remaining argv tokens against the leaf's InputParam schema.
321
- * Returns a plain object whose keys are camelCase parameter names.
322
- * Optionally tracks which parameters were explicitly provided via a callback. */
323
- export async function parseArgv(params, tokens, options) {
324
- const result = {};
325
- const provided = new Set(); // Track explicitly-provided parameter names
326
- const contextFilePaths = new Map();
327
- // Index params by kind for quick lookup
328
- const positionalParams = params.filter((p) => p.kind === 'positional');
329
- const stdinParam = params.find((p) => p.kind === 'stdin');
330
- const contextFileParam = params.find((p) => p.kind === 'context-file');
331
- const flagParams = params.filter((p) => p.kind === 'flag');
332
- const flagsByName = new Map(flagParams.map((f) => [f.name, f]));
333
- // Apply defaults for bool flags
334
- for (const f of flagParams) {
335
- if (f.type === 'bool') {
336
- result[flagNameToKey(f.name)] = f.default !== undefined ? f.default : false;
337
- }
338
- else if (f.default !== undefined) {
339
- result[flagNameToKey(f.name)] = f.default;
340
- }
341
- }
342
- const positionalValues = [];
343
- let positionalIndex = 0;
344
- let positionalWasSupplied = false; // Track if positional came from argv (not stdin)
345
- let forcedPositional = false; // true after bare --
346
- let i = 0;
347
- while (i < tokens.length) {
348
- const token = tokens[i];
349
- if (token === '--' && !forcedPositional) {
350
- forcedPositional = true;
351
- i++;
352
- continue;
353
- }
354
- if (!forcedPositional && token.startsWith('--')) {
355
- // Flag: --name or --name=value
356
- const eqIdx = token.indexOf('=');
357
- let flagName;
358
- let inlineValue;
359
- if (eqIdx !== -1) {
360
- flagName = token.slice(2, eqIdx);
361
- inlineValue = token.slice(eqIdx + 1);
362
- }
363
- else {
364
- flagName = token.slice(2);
365
- }
366
- // --context-file is handled specially regardless of declared schema
367
- if (flagName === 'context-file') {
368
- if (contextFileParam === undefined) {
369
- throw parseArgvError('unknown_flag', `unknown flag: --context-file`, '--context-file', undefined, 'This leaf does not accept --context-file.');
370
- }
371
- const pathVal = inlineValue !== undefined ? inlineValue : tokens[++i];
372
- if (pathVal === undefined) {
373
- throw parseArgvError('missing_parameter', '--context-file requires a PATH argument', '--context-file', 'context-file');
374
- }
375
- let fileContent;
376
- try {
377
- fileContent = readFileSync(pathVal, 'utf8');
378
- }
379
- catch (err) {
380
- throw parseArgvError('invalid_type', `--context-file: cannot read file: ${pathVal}`, pathVal, 'context-file', 'Provide a readable file path.');
381
- }
382
- let parsed;
383
- try {
384
- parsed = JSON.parse(fileContent);
385
- }
386
- catch {
387
- throw parseArgvError('invalid_type', `--context-file: file is not valid JSON: ${pathVal}`, pathVal, 'context-file', 'Ensure the file contains a valid JSON object.');
388
- }
389
- const contextFileKey = flagNameToKey(contextFileParam.name);
390
- result[contextFileKey] = parsed;
391
- contextFilePaths.set(contextFileKey, resolve(pathVal));
392
- provided.add(contextFileKey);
393
- i++;
394
- continue;
395
- }
396
- const flagDef = flagsByName.get(flagName);
397
- if (flagDef === undefined) {
398
- throw parseArgvError('unknown_flag', `unknown flag: --${flagName}`, `--${flagName}`, undefined, 'Use --<flag-name> for declared flags only. Run -h for the schema.');
399
- }
400
- const key = flagNameToKey(flagName);
401
- provided.add(key);
402
- if (flagDef.type === 'bool') {
403
- if (inlineValue !== undefined) {
404
- throw parseArgvError('invalid_type', `boolean flag --${flagName} takes no value`, `--${flagName}=${inlineValue}`, flagName, `Use --${flagName} (presence = true) with no value.`);
405
- }
406
- result[key] = true;
407
- i++;
408
- continue;
409
- }
410
- const rawVal = inlineValue !== undefined ? inlineValue : tokens[++i];
411
- if (rawVal === undefined || (inlineValue === undefined && rawVal.startsWith('--'))) {
412
- const focusedNext = flagDef.focusedHelp !== undefined && (options?.leafPath?.length ?? 0) > 0
413
- ? `Run \`crtr ${options.leafPath.join(' ')} --${flagName} -h\` and read the focused value contract before retrying.`
414
- : undefined;
415
- throw parseArgvError('missing_parameter', `--${flagName} requires a value`, `--${flagName}`, flagName, focusedNext);
416
- }
417
- let parsedValue;
418
- if (flagDef.type === 'int') {
419
- const n = Number(rawVal);
420
- if (!Number.isInteger(n)) {
421
- throw parseArgvError('invalid_type', `--${flagName} must be an integer`, rawVal, flagName, `Provide an integer value for --${flagName}.`);
422
- }
423
- parsedValue = n;
424
- }
425
- else if (flagDef.type === 'enum') {
426
- const choices = flagDef.choices;
427
- if (choices !== undefined && !choices.includes(rawVal)) {
428
- throw parseArgvError('invalid_type', `--${flagName} must be one of: ${choices.join(', ')}`, rawVal, flagName, `Retry with one of: ${choices.join(', ')}.`);
429
- }
430
- parsedValue = rawVal;
431
- }
432
- else {
433
- // string or path
434
- parsedValue = rawVal;
435
- }
436
- if (flagDef.repeatable === true) {
437
- const existing = result[key];
438
- const arr = Array.isArray(existing) ? existing : [];
439
- arr.push(parsedValue);
440
- result[key] = arr;
441
- }
442
- else {
443
- result[key] = parsedValue;
444
- }
445
- i++;
446
- continue;
447
- }
448
- // Positional (or token after --)
449
- const positionalParam = positionalParams[positionalIndex];
450
- if (positionalParam !== undefined) {
451
- const key = flagNameToKey(positionalParam.name);
452
- if (positionalParam.repeatable === true) {
453
- const values = result[key] ?? [];
454
- values.push(token);
455
- result[key] = values;
456
- }
457
- else {
458
- result[key] = token;
459
- positionalIndex++;
460
- }
461
- positionalValues.push(token);
462
- positionalWasSupplied = true;
463
- provided.add(key);
464
- i++;
465
- continue;
466
- }
467
- if (positionalValues.length > 0) {
468
- // Defer this rejection until flags are parsed: a leaf-specific recovery
469
- // may depend on a target flag that follows the positional body.
470
- if (stdinParam !== undefined && positionalParams.length === 0) {
471
- positionalValues.push(token);
472
- positionalWasSupplied = true;
473
- i++;
474
- continue;
475
- }
476
- // A leaf that also declares a `stdin` param treats its stdin value as
477
- // write-only/sensitive by convention (`profile env set`'s value, etc.).
478
- // An unexpected extra positional is the likely secret-as-argv mistake, so
479
- // never echo it back in the rejection.
480
- if (stdinParam !== undefined) {
481
- throw parseArgvError('bad_invocation', `unexpected extra positional argument (value withheld: this leaf reads "${stdinParam.name}" from stdin, never argv)`, undefined, undefined, `Pipe it on stdin instead of passing it as a positional argument.`);
482
- }
483
- throw parseArgvError('bad_invocation', `unexpected extra positional argument: ${token}`, tokens.join(' '), undefined, 'Use declared flags or positional parameters. Run -h for the schema.');
484
- }
485
- // A leaf declaring no positional param may still take one bare token as its
486
- // stdin body (`crtr node yield "note"`); the resolution below turns it into
487
- // the stdin value. `allowPositional: false` opts out.
488
- if (positionalParams.length === 0 && (stdinParam === undefined || stdinParam.allowPositional === false)) {
489
- throw parseArgvError('bad_invocation', `this leaf takes no positional arguments: ${token}`, token, undefined, 'Use --flag for parameters. Run -h for the schema.');
490
- }
491
- positionalValues.push(token);
492
- positionalWasSupplied = true;
493
- i++;
494
- }
495
- // Resolve stdin if declared. Some leaves permit one positional token to
496
- // supply the stdin body; `-` then means read stdin. A positional alongside
497
- // genuinely piped, non-empty stdin is ambiguous and errors loudly.
498
- let stdinWasSupplied = false;
499
- if (stdinParam !== undefined) {
500
- if (positionalValues.length > 1 && positionalParams.length === 0) {
501
- const conflict = stdinParam.positionalStdinConflict?.(result);
502
- if (conflict !== undefined) {
503
- throw parseArgvError('bad_invocation', conflict.message, undefined, conflict.field, conflict.next);
504
- }
505
- throw parseArgvError('bad_invocation', `unexpected extra positional argument (value withheld: this leaf reads "${stdinParam.name}" from stdin, never argv)`, undefined, undefined, `Pipe it on stdin instead of passing it as a positional argument.`);
506
- }
507
- if (positionalValues.length > 0 && positionalParams.length === 0 && stdinParam.allowPositional !== false) {
508
- const positionalValue = positionalValues[0];
509
- if (positionalValue === '-') {
510
- const raw = await readStdinRaw();
511
- // Empty required stdin is NOT thrown here: it is left unset so the
512
- // completeness check below reports it together with every other
513
- // missing required parameter in ONE error.
514
- if (raw.trim() !== '' || !stdinParam.required) {
515
- result[flagNameToKey(stdinParam.name)] = raw;
516
- }
517
- stdinWasSupplied = true;
518
- }
519
- else {
520
- // A bounded peek, not a full drain: a non-TTY stdin that's merely
521
- // inherited and held open (e.g. this leaf invoked as a subprocess by
522
- // another agent that never closes its own stdin) must not hang the
523
- // whole invocation waiting for a close that will never come.
524
- const piped = await peekStdinRaw();
525
- if (piped.trim() !== '') {
526
- const conflict = stdinParam.positionalStdinConflict?.(result);
527
- throw parseArgvError('bad_invocation', conflict?.message ?? `both a positional argument ("${positionalValue}") and piped stdin were provided for ${stdinParam.name}`, positionalValue, conflict?.field ?? stdinParam.name, conflict?.next ?? `Pass exactly one: either the positional argument or piped stdin, not both.`);
528
- }
529
- result[flagNameToKey(stdinParam.name)] = positionalValue;
530
- stdinWasSupplied = true; // positional supplying stdin counts as supplied
531
- }
532
- }
533
- else {
534
- // Check if stdin is non-TTY (piped, redirected, or positional)
535
- const stdinIsTTY = isatty(0);
536
- // Unbounded drain to EOF — the standard Unix stdin-body contract. A
537
- // heredoc/pipe/redirect/procsub all write and close before this
538
- // process finishes reading, so this always resolves for genuine
539
- // input; a slow producer's bytes must never be silently discarded.
540
- // The non-hang guarantee lives at the spawn boundary instead: every
541
- // crtr-owned subprocess (pi bash tool, the bash valve, async
542
- // execFile('crtr', …) call sites) gives its child an ignored/closed
543
- // stdin, so this only ever blocks on a foreign caller that hands crtr
544
- // a held-open pipe — exactly the contract `cat`/`jq`/`wc` honor too.
545
- const raw = await readStdinRaw();
546
- // As above: an empty required stdin falls through to the completeness
547
- // check so it is reported alongside any missing flags/positional.
548
- if (raw.trim() !== '' || !stdinParam.required) {
549
- result[flagNameToKey(stdinParam.name)] = raw;
550
- }
551
- // stdin is supplied if it was non-TTY (piped) OR if a positional was used
552
- stdinWasSupplied = !stdinIsTTY || positionalWasSupplied;
553
- }
554
- }
555
- // Track provided stdin param
556
- if (stdinWasSupplied && stdinParam !== undefined) {
557
- provided.add(flagNameToKey(stdinParam.name));
558
- }
559
- // Ambient defaults: a param declaring `defaultFromEnv` that the caller did not
560
- // supply takes its value from that environment variable when it is set and
561
- // non-empty. It is recorded as PROVIDED — the caller's environment is a real
562
- // source, not a display default — so it satisfies the required check below and
563
- // ships through the HTTP transport's presence rule (a static `default`
564
- // deliberately does neither).
565
- for (const p of params) {
566
- if (p.kind !== 'flag' && p.kind !== 'positional')
567
- continue;
568
- if (p.defaultFromEnv === undefined)
569
- continue;
570
- const key = flagNameToKey(p.name);
571
- if (provided.has(key))
572
- continue;
573
- const envValue = process.env[p.defaultFromEnv];
574
- if (envValue === undefined || envValue === '')
575
- continue;
576
- result[key] = p.kind === 'positional' && p.repeatable === true ? [envValue] : envValue;
577
- provided.add(key);
578
- }
579
- // Validate required params — COMPLETE, never first-failure. Drip-feeding one
580
- // missing parameter per invocation turns a single correction into a round
581
- // trip per field, so collect every violated requirement (flag, positional,
582
- // context-file, stdin) and report them in ONE error. A missing parameter is
583
- // proof the leaf was invoked without its contract in context, so `Next:`
584
- // mandates the schema read rather than offering the one-field patch.
585
- const missing = [];
586
- for (const p of params) {
587
- const key = flagNameToKey(p.name);
588
- const missingRequiredBool = p.kind === 'flag' && p.type === 'bool' && !provided.has(key);
589
- if (p.required && (missingRequiredBool || result[key] === undefined || result[key] === null)) {
590
- const display = p.kind === 'positional'
591
- ? `positional ${p.name.toUpperCase()}`
592
- : p.kind === 'flag'
593
- ? `--${p.name}`
594
- : p.kind === 'context-file'
595
- ? `--context-file`
596
- : 'stdin';
597
- missing.push({ display, name: p.name });
598
- }
599
- }
600
- if (missing.length > 0) {
601
- const displays = missing.map((m) => m.display).join(', ');
602
- const leafPath = options?.leafPath;
603
- const cmd = leafPath !== undefined && leafPath.length > 0
604
- ? `\`crtr ${leafPath.join(' ')} -h\``
605
- : 'this command with -h';
606
- throw parseArgvError('missing_parameter', missing.length === 1
607
- ? `required parameter is missing: ${displays}`
608
- : `required parameters are missing: ${displays}`, undefined, missing.map((m) => m.name).join(', '), `Run ${cmd} and read the full schema before re-issuing — do not guess parameters one at a time.`);
609
- }
610
- // Notify caller of which parameters were explicitly provided
611
- if (options?.onProvidedParams !== undefined) {
612
- options.onProvidedParams(provided);
613
- }
614
- if (options?.onContextFilePaths !== undefined) {
615
- options.onContextFilePaths(contextFilePaths);
616
- }
617
- return result;
618
- }
619
- /**
620
- * Tokens handled before dispatch and stripped from what the leaf schema parses
621
- * (root `-h` renders them as the Globals footer). They belong to no command, so
622
- * anything reasoning about which command an argv names — the plugin
623
- * revalidation gate, for one — has to ignore them too. One declaration, so a
624
- * new global cannot be added here and missed there.
625
- */
626
- export const GLOBAL_TOKENS = new Set(['--json', '--no-autostart']);
627
- export async function runCli(root, argv) {
628
- // argv is process.argv — strip node binary + script path. `--json` is a
629
- // global: pull it out anywhere it appears so the rest of argv parses against
630
- // the leaf schema unchanged, and switch stdout from rendered prose to the
631
- // leaf's declared `outputs` object as raw JSON. Prose stays the contract for
632
- // an agent READING output; --json is the documented channel (root -h globals)
633
- // for scripts — a cron's bash, external tooling — that must branch on canvas
634
- // state and would otherwise scrape markdown.
635
- // `--no-autostart` is likewise a global: it suppresses cold-socket daemon
636
- // autostart (read from `process.argv` in `cliClient`, spec §7.1) and applies
637
- // to every API-backed verb, so strip it here rather than declaring it on each
638
- // leaf schema (an undeclared flag would otherwise be rejected as unknown).
639
- const rawTokens = argv.slice(2);
640
- if (rawTokens.includes('--json'))
641
- setJsonOutput(true);
642
- const tokens = rawTokens.filter((token) => !GLOBAL_TOKENS.has(token));
643
- // Bare root invocation or -h at root
644
- if (tokens.length === 0 || (tokens.length === 1 && (tokens[0] === '-h' || tokens[0] === '--help'))) {
645
- process.stdout.write(renderRoot(root.help) + '\n');
646
- process.exitCode = ExitCode.SUCCESS;
647
- return;
648
- }
649
- // `crtr --version` / `crtr -v`. The front door already routes both here, so
650
- // without this branch they fall through to the unknown-path error below.
651
- // Imported lazily: `sys/shared.js` locates the package root eagerly at module
652
- // load, and the cold-start check forbids adding that to cli.js's static
653
- // import closure.
654
- if (tokens.length === 1 && (tokens[0] === '--version' || tokens[0] === '-v')) {
655
- const { readPackageVersion } = await import('../commands/sys/shared.js');
656
- process.stdout.write(readPackageVersion() + '\n');
657
- process.exitCode = ExitCode.SUCCESS;
658
- return;
659
- }
660
- let { node, path, remaining } = walk(root, tokens);
661
- try {
662
- // Passthrough branches (e.g. `crtr capture`) opt out of the tree model
663
- // entirely: forward every token after the branch verbatim to an external
664
- // binary before any of the normal unknown-path / help / dispatch logic
665
- // runs, so `crtr capture -h`, `crtr capture <args>`, and bare `crtr capture`
666
- // all reach the external CLI untouched.
667
- if (node.kind === 'branch' && node.passthrough !== undefined) {
668
- runPassthrough(node.passthrough, rawArgsAfterPath(rawTokens, path));
669
- }
670
- // A root/branch node's `remaining` is only non-empty because walk hit
671
- // -h/--help or an unmatched child name (a leaf always consumes the rest
672
- // of the path itself). So a non-help leading token here is always the
673
- // latter: reject it as an unknown path before rendering any help, even
674
- // when a -h/--help token also appears later in `remaining` — otherwise a
675
- // removed/misspelled subcommand followed by -h would render the parent's
676
- // help and exit 0 instead of failing.
677
- if ((node.kind === 'root' || node.kind === 'branch')
678
- && remaining.length > 0
679
- && remaining[0] !== '-h' && remaining[0] !== '--help') {
680
- throw unknownPathError(node, path, remaining[0]);
681
- }
682
- // Help anywhere in remaining tokens → print node help and exit. The exact
683
- // leaf form `--<flag> -h` selects that flag's focused continuation when one
684
- // is declared; no invocation state or acknowledgement token is persisted.
685
- if (helpRequested(remaining)) {
686
- process.stdout.write(await renderNodeWithAddenda(node, path, focusedHelpFlag(node, remaining)) + '\n');
687
- process.exitCode = ExitCode.SUCCESS;
688
- return;
689
- }
690
- // Bare branch or bare root (no -h, remaining fully consumed) → help surface
691
- if (node.kind === 'root' || node.kind === 'branch') {
692
- process.stdout.write(await renderNodeWithAddenda(node, path) + '\n');
693
- process.exitCode = ExitCode.SUCCESS;
694
- return;
695
- }
696
- // Leaf dispatch — argv input model only. Bind the leaf to a const so the
697
- // narrowing established by the branch/root guards above survives the awaits
698
- // below: `node` is now a reassignable `let` (the §5.1 retry re-walks it),
699
- // which TS re-widens to the node union across an `await`.
700
- const leaf = node;
701
- beginPreview(path.join(' '));
702
- const params = leaf.help.params !== undefined ? leaf.help.params : [];
703
- let providedParams = new Set();
704
- let contextFilePaths = new Map();
705
- const input = await parseArgv(params, remaining, {
706
- leafPath: path,
707
- onProvidedParams: (provided) => {
708
- providedParams = provided;
709
- },
710
- onContextFilePaths: (paths) => {
711
- contextFilePaths = paths;
712
- },
713
- });
714
- const context = { providedParams, contextFilePaths };
715
- const result = await operationIdContext.fresh(() => leaf.run(input, context));
716
- publishPreviewResult(result);
717
- if (result !== undefined && result !== null) {
718
- if (isJsonOutput()) {
719
- emit(result);
720
- }
721
- else {
722
- const text = leaf.render !== undefined ? leaf.render(result) : renderResult(result, leaf.help);
723
- process.stdout.write(text + '\n');
724
- }
725
- }
726
- // JSONL leaves call emitLine themselves and return void
727
- }
728
- catch (e) {
729
- // A backend that answered `manifest_stale` says this dispatch was parsed
730
- // from an out-of-date command description. Only the caller above this one
731
- // can act on that — refetching the package and re-walking the ORIGINAL argv
732
- // against the refreshed tree — so it is the single error class this
733
- // dispatcher reports by rethrowing instead of rendering. Whoever declines
734
- // to recover renders it with the same `handle`.
735
- if (isManifestStaleError(e))
736
- throw e;
737
- handle(e);
738
- }
739
- }
1
+ var W=Object.defineProperty;var f=(e,i)=>W(e,"name",{value:i,configurable:!0});import{renderRoot as V,renderBranch as M,renderLeafArgv as T}from"./help.js";import{beginPreview as z,publishPreviewResult as I,readStdinRaw as B,peekStdinRaw as J,emit as G,handle as L,setJsonOutput as K,isJsonOutput as D}from"./io.js";import{renderResult as Y}from"./render.js";import{CrtrError as O}from"./errors.js";import{isManifestStaleError as Q}from"./manifest-stale.js";import{operationIdContext as X}from"./events/operation-id.js";import{ExitCode as P}from"../types.js";import{readFileSync as Z}from"node:fs";import{spawnSync as ee}from"node:child_process";import{constants as ne}from"node:os";import{isatty as te}from"node:tty";import{resolve as ie}from"node:path";function F(e){if(e===null||typeof e!="object"||Object.isFrozen(e))return e;for(const i of Object.values(e))F(i);return Object.freeze(e)}f(F,"freezeCommandMetadata");function _e(e){return Object.freeze({kind:"leaf",name:e.name,description:e.description,whenToUse:e.whenToUse,tier:e.tier,help:F(e.help),slash:e.slash===void 0?void 0:F(e.slash),hookEligible:e.hookEligible,plugin:e.plugin,run:e.run,render:e.render})}f(_e,"defineLeaf");function re(e){return e.kind!=="branch"?0:(e.help.listing??[]).filter(i=>i.tier!=="hidden").length}f(re,"visibleSubCount");function Ue(e){if(e.passthrough!==void 0&&e.children.length>0)throw new Error(`defineBranch("${e.name}"): a passthrough branch must declare no children (found ${e.children.length})`);return e.help.listing=e.children.map(i=>{const r=re(i);return{name:i.name,description:i.description??"",whenToUse:i.whenToUse??"",tier:i.tier??"normal",...i.plugin!==void 0?{plugin:i.plugin}:{},...r>0?{subCount:r}:{}}}),{kind:"branch",name:e.name,description:e.description,whenToUse:e.whenToUse,tier:e.tier,help:e.help,rootEntry:e.rootEntry,extensible:e.extensible,plugin:e.plugin,slash:e.slash,passthrough:e.passthrough,children:e.children}}f(Ue,"defineBranch");function Ne(e){const i=[],r=f(n=>{if(n.slash!==void 0&&i.push(n.slash),n.kind==="branch")for(const o of n.children)r(o)},"visit");for(const n of e.subtrees)r(n);return i}f(Ne,"collectSlashSpecs");function Re(e){const i=e.subtrees.filter(n=>n.rootEntry!==void 0).map(n=>{const o=(n.help.listing??[]).filter(s=>s.tier!=="hidden"),d=o.filter(s=>s.tier==="common"||s.tier==="important").map(s=>({path:`${n.name} ${s.name}`,desc:s.tier==="important"?s.description:void 0}));return{name:n.name,concept:n.rootEntry.concept,desc:n.rootEntry.desc,useWhen:n.rootEntry.useWhen,dynamicState:n.rootEntry.dynamicState,subcommands:d.length>0?d:void 0,otherSubcommandCount:o.length-d.length}});return{kind:"root",help:{tagline:e.tagline,commands:i,globals:e.globals},subtrees:e.subtrees}}f(Re,"defineRoot");function oe(e){return e.kind==="root"?e.subtrees.filter(i=>i.tier!=="hidden").map(i=>i.name):e.kind==="branch"?e.children.filter(i=>i.tier!=="hidden").map(i=>i.name):[]}f(oe,"childNames");function ae(e,i){let r=e;const n=[];let o=0;for(;o<i.length;){const d=i[o];if(d==="-h"||d==="--help")break;if(r.kind==="root"){const s=r.subtrees.find(a=>a.name===d);if(s===void 0)break;r=s,n.push(s.name),o++}else if(r.kind==="branch"){const s=r.children.find(a=>a.name===d);if(s===void 0)break;r=s,n.push(s.name),o++}else break}return{node:r,path:n,remaining:i.slice(o)}}f(ae,"walk");function se(e){return e.kind==="root"?V(e.help):e.kind==="branch"?M(e.help):T(e.help)}f(se,"renderNode");async function H(e,i,r){if(r!==void 0&&e.kind==="leaf")return T(e.help,r);const n=e.kind==="leaf"&&e.effectiveHelp!==void 0?T(await e.effectiveHelp()):se(e);if(i.length===0)return n;const{hasEffectiveCommandPlugins:o}=await import("./command-plugins/presence.js");if(!o())return n;const[{collectHelpAddenda:d},{SUBTREE_NAMES:s,coreCommandPaths:a,extensibleCoreBranches:C}]=await Promise.all([import("./command-plugins/help-addenda.js"),import("../build-root.js")]),y=await d(i.join(" "),{reservedCoreNames:new Set(s),coreCommandPaths:a,extensibleCoreBranches:C});return n+y.map(S=>`
2
+
3
+ <plugin-help plugin="${S.plugin}">
4
+ ${S.text}
5
+ </plugin-help>`).join("")}f(H,"renderNodeWithAddenda");function le(e){return e.some(i=>i==="-h"||i==="--help")}f(le,"helpRequested");function de(e,i){if(e.kind!=="leaf"||i.length!==2)return;const[r,n]=i;if(n!=="-h"&&n!=="--help"||!r.startsWith("--")||r.includes("="))return;const o=r.slice(2);return(e.help.params??[]).find(s=>s.kind==="flag"&&s.name===o)?.focusedHelp!==void 0?o:void 0}f(de,"focusedHelpFlag");function fe(e,i){let r=0;for(let n=0;n<e.length;n++){if(r===i.length)return e.slice(n);e[n]!=="--json"&&e[n]===i[r]&&r++}return[]}f(fe,"rawArgsAfterPath");function ue(e,i){const r=ee(e.bin,i,{stdio:"inherit"});if(r.error!==void 0){const n=r.error;throw new O("binary_missing",`${e.bin} could not be run (${n.code??n.message})`,P.USAGE,{received:e.bin,next:e.installHint})}if(r.status!==null&&process.exit(r.status),r.signal!==null){const n=ne.signals[r.signal];n!==void 0&&process.exit(128+n)}process.exit(1)}f(ue,"runPassthrough");function ce(e,i,r){const n=oe(e),o=n.length>0?n.join(", "):"(none)",d=i.length>0?`crtr ${i.join(" ")} -h`:"crtr -h";return new O("unknown_path",`unknown subcommand: ${r}`,P.USAGE,{received:r,next:`Valid children: ${o}. Run \`${d}\` for the full list.`})}f(ce,"unknownPathError");function p(e,i,r,n,o){return new O(e,i,P.USAGE,{received:r,field:n,next:o!==void 0?o:"Run the command with -h to see the parameter schema."})}f(p,"parseArgvError");function w(e){return e.replace(/-([a-z])/g,(i,r)=>r.toUpperCase())}f(w,"flagNameToKey");async function he(e,i,r){const n={},o=new Set,d=new Map,s=e.filter(t=>t.kind==="positional"),a=e.find(t=>t.kind==="stdin"),C=e.find(t=>t.kind==="context-file"),y=e.filter(t=>t.kind==="flag"),S=new Map(y.map(t=>[t.name,t]));for(const t of y)t.type==="bool"?n[w(t.name)]=t.default!==void 0?t.default:!1:t.default!==void 0&&(n[w(t.name)]=t.default);const b=[];let N=0,m=!1,x=!1,g=0;for(;g<i.length;){const t=i[g];if(t==="--"&&!x){x=!0,g++;continue}if(!x&&t.startsWith("--")){const c=t.indexOf("=");let l,v;if(c!==-1?(l=t.slice(2,c),v=t.slice(c+1)):l=t.slice(2),l==="context-file"){if(C===void 0)throw p("unknown_flag","unknown flag: --context-file","--context-file",void 0,"This leaf does not accept --context-file.");const h=v!==void 0?v:i[++g];if(h===void 0)throw p("missing_parameter","--context-file requires a PATH argument","--context-file","context-file");let U;try{U=Z(h,"utf8")}catch{throw p("invalid_type",`--context-file: cannot read file: ${h}`,h,"context-file","Provide a readable file path.")}let q;try{q=JSON.parse(U)}catch{throw p("invalid_type",`--context-file: file is not valid JSON: ${h}`,h,"context-file","Ensure the file contains a valid JSON object.")}const A=w(C.name);n[A]=q,d.set(A,ie(h)),o.add(A),g++;continue}const $=S.get(l);if($===void 0)throw p("unknown_flag",`unknown flag: --${l}`,`--${l}`,void 0,"Use --<flag-name> for declared flags only. Run -h for the schema.");const j=w(l);if(o.add(j),$.type==="bool"){if(v!==void 0)throw p("invalid_type",`boolean flag --${l} takes no value`,`--${l}=${v}`,l,`Use --${l} (presence = true) with no value.`);n[j]=!0,g++;continue}const k=v!==void 0?v:i[++g];if(k===void 0||v===void 0&&k.startsWith("--")){const h=$.focusedHelp!==void 0&&(r?.leafPath?.length??0)>0?`Run \`crtr ${r.leafPath.join(" ")} --${l} -h\` and read the focused value contract before retrying.`:void 0;throw p("missing_parameter",`--${l} requires a value`,`--${l}`,l,h)}let _;if($.type==="int"){const h=Number(k);if(!Number.isInteger(h))throw p("invalid_type",`--${l} must be an integer`,k,l,`Provide an integer value for --${l}.`);_=h}else if($.type==="enum"){const h=$.choices;if(h!==void 0&&!h.includes(k))throw p("invalid_type",`--${l} must be one of: ${h.join(", ")}`,k,l,`Retry with one of: ${h.join(", ")}.`);_=k}else _=k;if($.repeatable===!0){const h=n[j],U=Array.isArray(h)?h:[];U.push(_),n[j]=U}else n[j]=_;g++;continue}const u=s[N];if(u!==void 0){const c=w(u.name);if(u.repeatable===!0){const l=n[c]??[];l.push(t),n[c]=l}else n[c]=t,N++;b.push(t),m=!0,o.add(c),g++;continue}if(b.length>0){if(a!==void 0&&s.length===0){b.push(t),m=!0,g++;continue}throw a!==void 0?p("bad_invocation",`unexpected extra positional argument (value withheld: this leaf reads "${a.name}" from stdin, never argv)`,void 0,void 0,"Pipe it on stdin instead of passing it as a positional argument."):p("bad_invocation",`unexpected extra positional argument: ${t}`,i.join(" "),void 0,"Use declared flags or positional parameters. Run -h for the schema.")}if(s.length===0&&(a===void 0||a.allowPositional===!1))throw p("bad_invocation",`this leaf takes no positional arguments: ${t}`,t,void 0,"Use --flag for parameters. Run -h for the schema.");b.push(t),m=!0,g++}let R=!1;if(a!==void 0){if(b.length>1&&s.length===0){const t=a.positionalStdinConflict?.(n);throw t!==void 0?p("bad_invocation",t.message,void 0,t.field,t.next):p("bad_invocation",`unexpected extra positional argument (value withheld: this leaf reads "${a.name}" from stdin, never argv)`,void 0,void 0,"Pipe it on stdin instead of passing it as a positional argument.")}if(b.length>0&&s.length===0&&a.allowPositional!==!1){const t=b[0];if(t==="-"){const u=await B();(u.trim()!==""||!a.required)&&(n[w(a.name)]=u),R=!0}else{if((await J()).trim()!==""){const c=a.positionalStdinConflict?.(n);throw p("bad_invocation",c?.message??`both a positional argument ("${t}") and piped stdin were provided for ${a.name}`,t,c?.field??a.name,c?.next??"Pass exactly one: either the positional argument or piped stdin, not both.")}n[w(a.name)]=t,R=!0}}else{const t=te(0),u=await B();(u.trim()!==""||!a.required)&&(n[w(a.name)]=u),R=!t||m}}R&&a!==void 0&&o.add(w(a.name));for(const t of e){if(t.kind!=="flag"&&t.kind!=="positional"||t.defaultFromEnv===void 0)continue;const u=w(t.name);if(o.has(u))continue;const c=process.env[t.defaultFromEnv];c===void 0||c===""||(n[u]=t.kind==="positional"&&t.repeatable===!0?[c]:c,o.add(u))}const E=[];for(const t of e){const u=w(t.name),c=t.kind==="flag"&&t.type==="bool"&&!o.has(u);if(t.required&&(c||n[u]===void 0||n[u]===null)){const l=t.kind==="positional"?`positional ${t.name.toUpperCase()}`:t.kind==="flag"?`--${t.name}`:t.kind==="context-file"?"--context-file":"stdin";E.push({display:l,name:t.name})}}if(E.length>0){const t=E.map(l=>l.display).join(", "),u=r?.leafPath,c=u!==void 0&&u.length>0?`\`crtr ${u.join(" ")} -h\``:"this command with -h";throw p("missing_parameter",E.length===1?`required parameter is missing: ${t}`:`required parameters are missing: ${t}`,void 0,E.map(l=>l.name).join(", "),`Run ${c} and read the full schema before re-issuing \u2014 do not guess parameters one at a time.`)}return r?.onProvidedParams!==void 0&&r.onProvidedParams(o),r?.onContextFilePaths!==void 0&&r.onContextFilePaths(d),n}f(he,"parseArgv");const pe=new Set(["--json","--no-autostart"]);async function Ae(e,i){const r=i.slice(2);r.includes("--json")&&K(!0);const n=r.filter(a=>!pe.has(a));if(n.length===0||n.length===1&&(n[0]==="-h"||n[0]==="--help")){process.stdout.write(V(e.help)+`
6
+ `),process.exitCode=P.SUCCESS;return}if(n.length===1&&(n[0]==="--version"||n[0]==="-v")){const{readPackageVersion:a}=await import("../commands/sys/shared.js");process.stdout.write(a()+`
7
+ `),process.exitCode=P.SUCCESS;return}let{node:o,path:d,remaining:s}=ae(e,n);try{if(o.kind==="branch"&&o.passthrough!==void 0&&ue(o.passthrough,fe(r,d)),(o.kind==="root"||o.kind==="branch")&&s.length>0&&s[0]!=="-h"&&s[0]!=="--help")throw ce(o,d,s[0]);if(le(s)){process.stdout.write(await H(o,d,de(o,s))+`
8
+ `),process.exitCode=P.SUCCESS;return}if(o.kind==="root"||o.kind==="branch"){process.stdout.write(await H(o,d)+`
9
+ `),process.exitCode=P.SUCCESS;return}const a=o;z(d.join(" "));const C=a.help.params!==void 0?a.help.params:[];let y=new Set,S=new Map;const b=await he(C,s,{leafPath:d,onProvidedParams:f(x=>{y=x},"onProvidedParams"),onContextFilePaths:f(x=>{S=x},"onContextFilePaths")}),N={providedParams:y,contextFilePaths:S},m=await X.fresh(()=>a.run(b,N));if(I(m),m!=null)if(D())G(m);else{const x=a.render!==void 0?a.render(m):Y(m,a.help);process.stdout.write(x+`
10
+ `)}}catch(a){if(Q(a))throw a;L(a)}}f(Ae,"runCli");export{pe as GLOBAL_TOKENS,Ne as collectSlashSpecs,Ue as defineBranch,_e as defineLeaf,Re as defineRoot,he as parseArgv,Ae as runCli,ce as unknownPathError,ae as walk};