@north-light/crouter 0.3.317 → 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 (1305) hide show
  1. package/README.md +0 -3
  2. package/dist/api/client.d.ts +1 -1
  3. package/dist/api/client.js +2 -912
  4. package/dist/api/dto/attach.js +0 -13
  5. package/dist/api/dto/bash-jobs.js +1 -9
  6. package/dist/api/dto/broker-ops.js +0 -6
  7. package/dist/api/dto/broker.js +0 -20
  8. package/dist/api/dto/canvas.js +0 -2
  9. package/dist/api/dto/chat-inventory.js +0 -11
  10. package/dist/api/dto/common.js +1 -15
  11. package/dist/api/dto/config.js +0 -3
  12. package/dist/api/dto/crons.js +1 -10
  13. package/dist/api/dto/files.js +0 -7
  14. package/dist/api/dto/focus.js +0 -10
  15. package/dist/api/dto/health.js +0 -2
  16. package/dist/api/dto/human-requests.js +0 -4
  17. package/dist/api/dto/human.js +0 -4
  18. package/dist/api/dto/inbox.js +0 -4
  19. package/dist/api/dto/lifecycle.js +0 -3
  20. package/dist/api/dto/mail.js +0 -1
  21. package/dist/api/dto/memory.js +0 -6
  22. package/dist/api/dto/messages.js +0 -2
  23. package/dist/api/dto/model-config.js +0 -1
  24. package/dist/api/dto/modelauth.js +0 -4
  25. package/dist/api/dto/node-outcomes.js +0 -2
  26. package/dist/api/dto/nodes.js +0 -3
  27. package/dist/api/dto/profiles.js +1 -4
  28. package/dist/api/dto/recovery.js +0 -1
  29. package/dist/api/dto/reports.js +0 -2
  30. package/dist/api/dto/review-comments.js +0 -5
  31. package/dist/api/dto/reviews.js +0 -5
  32. package/dist/api/dto/subscriptions.js +0 -2
  33. package/dist/api/dto/worktree.js +0 -6
  34. package/dist/api/errors.js +1 -40
  35. package/dist/api/index.js +1 -33
  36. package/dist/api/plugin-manifest-schema.js +0 -23
  37. package/dist/api/routes.js +1 -147
  38. package/dist/build-root.js +1 -198
  39. package/dist/cli.js +3 -99
  40. package/dist/clients/attach/ansi-cells.js +1 -137
  41. package/dist/clients/attach/chrome/bash-jobs.js +1 -31
  42. package/dist/clients/attach/chrome/canvas-panels.js +1 -194
  43. package/dist/clients/attach/chrome/completion-bell.js +1 -89
  44. package/dist/clients/attach/chrome/cron-wait.js +1 -34
  45. package/dist/clients/attach/chrome/git-info.js +2 -44
  46. package/dist/clients/attach/chrome/header.js +1 -30
  47. package/dist/clients/attach/chrome/inbox-strip.js +1 -199
  48. package/dist/clients/attach/chrome/recap.js +1 -19
  49. package/dist/clients/attach/chrome/review-wait.js +1 -22
  50. package/dist/clients/attach/chrome/roster.js +4 -275
  51. package/dist/clients/attach/chrome/status-line.js +1 -117
  52. package/dist/clients/attach/chrome/ticket-panel.js +1 -280
  53. package/dist/clients/attach/chrome/widgets.js +1 -51
  54. package/dist/clients/attach/command.js +1 -107
  55. package/dist/clients/attach/config.js +1 -274
  56. package/dist/clients/attach/input/capabilities.js +1 -104
  57. package/dist/clients/attach/input/clipboard-image.js +3 -220
  58. package/dist/clients/attach/input/completion-frecency.js +1 -141
  59. package/dist/clients/attach/input/controller.js +7 -377
  60. package/dist/clients/attach/input/overlay-owner.js +1 -199
  61. package/dist/clients/attach/input/ref-autocomplete.js +2 -176
  62. package/dist/clients/attach/input/titled-editor.js +4 -859
  63. package/dist/clients/attach/overlays/auth.js +2 -271
  64. package/dist/clients/attach/overlays/dialogs.js +2 -102
  65. package/dist/clients/attach/overlays/file-review.js +2 -128
  66. package/dist/clients/attach/overlays/graph.js +1 -661
  67. package/dist/clients/attach/overlays/help.js +1 -211
  68. package/dist/clients/attach/overlays/mcp.js +1 -302
  69. package/dist/clients/attach/overlays/pickers.js +1 -163
  70. package/dist/clients/attach/render/activity-slot.js +1 -13
  71. package/dist/clients/attach/render/assistant-message.js +1 -56
  72. package/dist/clients/attach/render/card-presentation.js +5 -218
  73. package/dist/clients/attach/render/chat-view.js +5 -1708
  74. package/dist/clients/attach/render/condensed-history.js +1 -60
  75. package/dist/clients/attach/render/context-message.js +1 -63
  76. package/dist/clients/attach/render/crtr-output.js +17 -905
  77. package/dist/clients/attach/render/diagram.js +7 -111
  78. package/dist/clients/attach/render/edit-diff.js +5 -304
  79. package/dist/clients/attach/render/glyph-codepoints.js +1 -42
  80. package/dist/clients/attach/render/group-activity.js +2 -263
  81. package/dist/clients/attach/render/group-recap.js +1 -152
  82. package/dist/clients/attach/render/markdown-source.js +5 -266
  83. package/dist/clients/attach/render/measured-container.js +1 -322
  84. package/dist/clients/attach/render/page-block.js +1 -183
  85. package/dist/clients/attach/render/scroll-animation.js +1 -80
  86. package/dist/clients/attach/render/tool-calls.js +3 -361
  87. package/dist/clients/attach/render/transcript-copy.js +2 -81
  88. package/dist/clients/attach/render/transcript-search.js +1 -152
  89. package/dist/clients/attach/render/viewport.js +1 -184
  90. package/dist/clients/attach/session/banner.js +1 -29
  91. package/dist/clients/attach/session/bindings.js +1 -71
  92. package/dist/clients/attach/session/chrome-refresh.js +1 -94
  93. package/dist/clients/attach/session/connection.js +1 -186
  94. package/dist/clients/attach/session/context.js +0 -16
  95. package/dist/clients/attach/session/editor-frame.js +1 -142
  96. package/dist/clients/attach/session/editor-inventory.js +6 -160
  97. package/dist/clients/attach/session/file-links.js +1 -68
  98. package/dist/clients/attach/session/focus-events.js +1 -12
  99. package/dist/clients/attach/session/frame.js +1 -214
  100. package/dist/clients/attach/session/frames.js +1 -188
  101. package/dist/clients/attach/session/identity.js +1 -26
  102. package/dist/clients/attach/session/input-wiring.js +1 -140
  103. package/dist/clients/attach/session/invariant.js +1 -15
  104. package/dist/clients/attach/session/keys.js +1 -77
  105. package/dist/clients/attach/session/layout.js +1 -59
  106. package/dist/clients/attach/session/mouse.js +1 -78
  107. package/dist/clients/attach/session/pane-focus.js +1 -42
  108. package/dist/clients/attach/session/pane-tag.js +1 -112
  109. package/dist/clients/attach/session/pi-assets.js +1 -24
  110. package/dist/clients/attach/session/pi-oauth-flows.js +1 -21
  111. package/dist/clients/attach/session/profile-files.js +1 -228
  112. package/dist/clients/attach/session/reconnect.js +1 -175
  113. package/dist/clients/attach/session/selection.js +3 -108
  114. package/dist/clients/attach/session/state-sync.js +1 -67
  115. package/dist/clients/attach/session/surface-frame.js +1 -73
  116. package/dist/clients/attach/session/surface-host.js +1 -255
  117. package/dist/clients/attach/session/teardown.js +5 -94
  118. package/dist/clients/attach/session/transcript-search.js +3 -151
  119. package/dist/clients/attach/session/whip-achievements.js +2 -145
  120. package/dist/clients/attach/session/whip.js +1 -362
  121. package/dist/clients/attach/slash/dispatch.js +1 -706
  122. package/dist/clients/attach/slash/prompt-preview.js +1 -121
  123. package/dist/clients/attach/viewer.js +1 -1
  124. package/dist/clients/conversation/projection.js +1 -324
  125. package/dist/clients/conversation/submit.js +1 -51
  126. package/dist/clients/inbox/controller.js +1 -701
  127. package/dist/clients/inbox/dto-adapt.js +1 -93
  128. package/dist/clients/inbox/layout.js +1 -9
  129. package/dist/clients/inbox/page-adapter.js +1 -55
  130. package/dist/clients/inbox/resolve.js +1 -35
  131. package/dist/clients/inbox/review/anchors.js +1 -89
  132. package/dist/clients/inbox/review/comments-client.js +1 -98
  133. package/dist/clients/inbox/review/companion-pane.js +1 -82
  134. package/dist/clients/inbox/review/document-surface.js +2 -1188
  135. package/dist/clients/inbox/review/frame.js +1 -216
  136. package/dist/clients/inbox/review/keys.js +1 -123
  137. package/dist/clients/inbox/review/launch.js +1 -151
  138. package/dist/clients/inbox/review/live-source.js +1 -160
  139. package/dist/clients/inbox/review/nvim.js +1 -44
  140. package/dist/clients/inbox/review/remap.js +1 -157
  141. package/dist/clients/inbox/review/review-client.js +1 -123
  142. package/dist/clients/inbox/review/roundtrip.js +3 -36
  143. package/dist/clients/inbox/review/state.js +4 -315
  144. package/dist/clients/inbox/review-adapter.js +1 -43
  145. package/dist/clients/inbox/surface.js +1 -152
  146. package/dist/clients/inbox/tui/ansi.js +3 -321
  147. package/dist/clients/inbox/tui/input.js +5 -392
  148. package/dist/clients/inbox/tui/keys.js +1 -104
  149. package/dist/clients/inbox/tui/page-body.js +1 -66
  150. package/dist/clients/inbox/tui/panel.js +1 -84
  151. package/dist/clients/inbox/tui/render.js +2 -368
  152. package/dist/clients/inbox/tui/slots.js +3 -134
  153. package/dist/clients/inbox/tui/types.js +0 -1
  154. package/dist/clients/inbox/tui.js +1 -86
  155. package/dist/clients/surfaces/host.js +0 -1
  156. package/dist/commands/api-client.js +4 -290
  157. package/dist/commands/attention.js +1 -215
  158. package/dist/commands/canvas-browse.js +1 -70
  159. package/dist/commands/canvas-config.js +2 -192
  160. package/dist/commands/canvas-history/grep.js +7 -85
  161. package/dist/commands/canvas-history/read.js +3 -50
  162. package/dist/commands/canvas-history/search.js +10 -99
  163. package/dist/commands/canvas-history/shared.js +1 -139
  164. package/dist/commands/canvas-history/stats.js +6 -68
  165. package/dist/commands/canvas-history.js +1 -32
  166. package/dist/commands/canvas-issue.js +14 -149
  167. package/dist/commands/canvas-prune.js +1 -108
  168. package/dist/commands/canvas-roster.js +1 -69
  169. package/dist/commands/canvas-snapshot.js +1 -34
  170. package/dist/commands/canvas-use.js +1 -61
  171. package/dist/commands/canvas.js +1 -49
  172. package/dist/commands/chord.js +1 -241
  173. package/dist/commands/cron.js +11 -534
  174. package/dist/commands/dashboard.js +1 -85
  175. package/dist/commands/human/components.js +3 -77
  176. package/dist/commands/human/feedback.js +1 -112
  177. package/dist/commands/human/prompts.js +1 -331
  178. package/dist/commands/human/queue.js +1 -191
  179. package/dist/commands/human/request.js +1 -266
  180. package/dist/commands/human/review.js +1 -288
  181. package/dist/commands/human/shared.js +1 -67
  182. package/dist/commands/human.js +4 -60
  183. package/dist/commands/memory/delete.js +1 -100
  184. package/dist/commands/memory/edit.js +21 -219
  185. package/dist/commands/memory/find.js +2 -244
  186. package/dist/commands/memory/history.js +5 -199
  187. package/dist/commands/memory/lint.js +1 -107
  188. package/dist/commands/memory/list.js +1 -142
  189. package/dist/commands/memory/move.js +1 -223
  190. package/dist/commands/memory/origin.js +1 -130
  191. package/dist/commands/memory/read.js +6 -232
  192. package/dist/commands/memory/shared.js +12 -802
  193. package/dist/commands/memory/write.js +13 -235
  194. package/dist/commands/memory.js +1 -30
  195. package/dist/commands/node/bash.js +5 -245
  196. package/dist/commands/node/create.js +3 -332
  197. package/dist/commands/node/inspect.js +12 -300
  198. package/dist/commands/node/lifecycle.js +2 -453
  199. package/dist/commands/node/message.js +1 -161
  200. package/dist/commands/node/outcome.js +4 -134
  201. package/dist/commands/node/pyramid.js +2 -79
  202. package/dist/commands/node/subscription.js +1 -78
  203. package/dist/commands/node/wait.js +7 -163
  204. package/dist/commands/node-context.js +2 -159
  205. package/dist/commands/node-inspect-artifacts.js +8 -109
  206. package/dist/commands/node-lifecycle-revive.js +1 -217
  207. package/dist/commands/node-snapshot.js +1 -37
  208. package/dist/commands/node-transcript.js +1 -62
  209. package/dist/commands/node-worktree.js +1 -138
  210. package/dist/commands/node.js +1 -29
  211. package/dist/commands/pkg/browse/actions.js +1 -198
  212. package/dist/commands/pkg/browse/catalog.js +1 -466
  213. package/dist/commands/pkg/browse/command-view.js +1 -191
  214. package/dist/commands/pkg/browse/detail-panel.js +1 -402
  215. package/dist/commands/pkg/browse/doc-view.js +1 -89
  216. package/dist/commands/pkg/browse/list-panel.js +2 -168
  217. package/dist/commands/pkg/browse/model.js +1 -36
  218. package/dist/commands/pkg/browse/shell.js +1 -640
  219. package/dist/commands/pkg/browse.js +1 -27
  220. package/dist/commands/pkg/market-inspect.js +1 -141
  221. package/dist/commands/pkg/market-manage.js +1 -327
  222. package/dist/commands/pkg/market.js +1 -14
  223. package/dist/commands/pkg/plugin-inspect.js +1 -168
  224. package/dist/commands/pkg/plugin-manage.js +17 -1109
  225. package/dist/commands/pkg/plugin.js +1 -14
  226. package/dist/commands/pkg/shared.js +1 -62
  227. package/dist/commands/pkg.js +1 -21
  228. package/dist/commands/profile/default.js +1 -139
  229. package/dist/commands/profile/delete.js +1 -66
  230. package/dist/commands/profile/env.js +3 -188
  231. package/dist/commands/profile/kind.js +2 -35
  232. package/dist/commands/profile/list.js +1 -43
  233. package/dist/commands/profile/meta.js +1 -67
  234. package/dist/commands/profile/new.js +1 -115
  235. package/dist/commands/profile/pause.js +1 -59
  236. package/dist/commands/profile/project.js +1 -113
  237. package/dist/commands/profile/rename.js +1 -38
  238. package/dist/commands/profile/show.js +1 -52
  239. package/dist/commands/profile.js +1 -35
  240. package/dist/commands/push.js +9 -265
  241. package/dist/commands/revive.js +10 -181
  242. package/dist/commands/surface/node/cycle.js +1 -83
  243. package/dist/commands/surface/node/focus.js +1 -81
  244. package/dist/commands/surface/node/id.js +1 -38
  245. package/dist/commands/surface/node/pin.js +1 -42
  246. package/dist/commands/surface/node/placement.js +1 -134
  247. package/dist/commands/surface-edit.js +1 -157
  248. package/dist/commands/surface-inbox.js +1 -98
  249. package/dist/commands/surface-inspect.js +1 -39
  250. package/dist/commands/surface-node.js +1 -19
  251. package/dist/commands/surface-reload.js +2 -134
  252. package/dist/commands/surface-tmux-spread.js +1 -214
  253. package/dist/commands/surface.js +1 -28
  254. package/dist/commands/sys/branch.js +1 -19
  255. package/dist/commands/sys/config.js +1 -353
  256. package/dist/commands/sys/context/admin/actions.js +2 -246
  257. package/dist/commands/sys/context/admin/detail-panel.js +1 -247
  258. package/dist/commands/sys/context/admin/docs-panel.js +1 -191
  259. package/dist/commands/sys/context/admin/list-view.js +1 -183
  260. package/dist/commands/sys/context/admin/model.js +1 -229
  261. package/dist/commands/sys/context/admin/rail-panel.js +1 -227
  262. package/dist/commands/sys/context/admin/read-view.js +2 -194
  263. package/dist/commands/sys/context/admin/shell.js +1 -910
  264. package/dist/commands/sys/context/admin.js +2 -126
  265. package/dist/commands/sys/context/doc.js +3 -197
  266. package/dist/commands/sys/context/prompt-review.js +11 -291
  267. package/dist/commands/sys/context/resolve.js +10 -489
  268. package/dist/commands/sys/context/sysprompt.js +5 -96
  269. package/dist/commands/sys/context.js +1 -20
  270. package/dist/commands/sys/daemon.js +1 -313
  271. package/dist/commands/sys/doctor.js +1 -617
  272. package/dist/commands/sys/feedback.js +7 -228
  273. package/dist/commands/sys/logs.js +3 -129
  274. package/dist/commands/sys/migrate.js +1 -94
  275. package/dist/commands/sys/panels/broker-limits-panel.js +2 -110
  276. package/dist/commands/sys/panels/dependencies-panel.js +1 -80
  277. package/dist/commands/sys/panels/keybindings-panel.js +1 -703
  278. package/dist/commands/sys/panels/models-panel.js +1 -1133
  279. package/dist/commands/sys/panels/plugins-panel.js +1 -80
  280. package/dist/commands/sys/panels/prefs-panel.js +1 -85
  281. package/dist/commands/sys/panels/profiles-panel.js +1 -601
  282. package/dist/commands/sys/panels/provider-panel.js +1 -538
  283. package/dist/commands/sys/settings-shell.js +1 -400
  284. package/dist/commands/sys/settings.js +1 -46
  285. package/dist/commands/sys/setup-core.js +6 -579
  286. package/dist/commands/sys/setup-settings-runner.js +1 -16
  287. package/dist/commands/sys/setup-wizard.js +1 -279
  288. package/dist/commands/sys/setup.js +1 -34
  289. package/dist/commands/sys/shared.js +1 -81
  290. package/dist/commands/sys/support/prepare.js +3 -239
  291. package/dist/commands/sys/support/submit.js +6 -524
  292. package/dist/commands/sys/support.js +1 -18
  293. package/dist/commands/sys/sync-deps.js +15 -498
  294. package/dist/commands/sys/sync-project-guidance.js +4 -481
  295. package/dist/commands/sys/sync-shared.js +1 -49
  296. package/dist/commands/sys/sync-skills.js +2 -311
  297. package/dist/commands/sys/sync.js +1 -18
  298. package/dist/commands/sys/update.js +1 -147
  299. package/dist/commands/sys/worktrees.js +5 -53
  300. package/dist/commands/sys.js +1 -18
  301. package/dist/core/activity-signal.js +2 -38
  302. package/dist/core/asset-root.js +1 -18
  303. package/dist/core/auth-file.js +2 -179
  304. package/dist/core/auth-interaction.js +3 -94
  305. package/dist/core/auto-update.js +4 -94
  306. package/dist/core/bash-guard.js +11 -393
  307. package/dist/core/bash-jobs.js +7 -411
  308. package/dist/core/bootstrap.js +2 -53
  309. package/dist/core/broker-client/client.js +1 -184
  310. package/dist/core/broker-client/index.js +1 -13
  311. package/dist/core/broker-client/transport-relay.js +1 -157
  312. package/dist/core/broker-client/transport-socket.js +1 -179
  313. package/dist/core/broker-client/transport.js +1 -26
  314. package/dist/core/canvas/attention.js +1 -47
  315. package/dist/core/canvas/boot-id.js +1 -26
  316. package/dist/core/canvas/boot.js +1 -186
  317. package/dist/core/canvas/browse/app.js +3 -919
  318. package/dist/core/canvas/browse/model.js +1 -477
  319. package/dist/core/canvas/browse/pins.js +1 -29
  320. package/dist/core/canvas/browse/render.js +3 -1055
  321. package/dist/core/canvas/canvas.js +15 -922
  322. package/dist/core/canvas/crons.js +11 -481
  323. package/dist/core/canvas/daemon-owner.js +2 -146
  324. package/dist/core/canvas/db.js +2 -100
  325. package/dist/core/canvas/deliveries.js +22 -283
  326. package/dist/core/canvas/delivery-contract.js +1 -8
  327. package/dist/core/canvas/executions.js +1 -68
  328. package/dist/core/canvas/extensions.js +1 -83
  329. package/dist/core/canvas/focuses.js +1 -77
  330. package/dist/core/canvas/history.js +24 -860
  331. package/dist/core/canvas/index.js +1 -15
  332. package/dist/core/canvas/install-id.js +1 -84
  333. package/dist/core/canvas/labels.js +1 -43
  334. package/dist/core/canvas/meta-file.js +1 -89
  335. package/dist/core/canvas/migrations.js +41 -1150
  336. package/dist/core/canvas/nav-model.js +1 -231
  337. package/dist/core/canvas/nav-render.js +1 -260
  338. package/dist/core/canvas/node-order.js +1 -37
  339. package/dist/core/canvas/node-recap.js +2 -67
  340. package/dist/core/canvas/node-sql-migration.js +2 -209
  341. package/dist/core/canvas/paths.js +1 -153
  342. package/dist/core/canvas/pid.js +4 -683
  343. package/dist/core/canvas/recovery.js +3 -565
  344. package/dist/core/canvas/remote-canvas-source.js +1 -288
  345. package/dist/core/canvas/remote-transport.js +1 -57
  346. package/dist/core/canvas/render-source.js +10 -635
  347. package/dist/core/canvas/sessions.js +1 -78
  348. package/dist/core/canvas/source.js +1 -47
  349. package/dist/core/canvas/status-glyph.js +1 -132
  350. package/dist/core/canvas/telemetry.js +1 -35
  351. package/dist/core/canvas/types.js +1 -6
  352. package/dist/core/canvas/waits.js +4 -68
  353. package/dist/core/canvas/worktrees.js +1 -93
  354. package/dist/core/clipboard-text.js +1 -57
  355. package/dist/core/command-hooks/artifact.js +1 -145
  356. package/dist/core/command-hooks/catalog.js +1 -38
  357. package/dist/core/command-hooks/compose.js +1 -99
  358. package/dist/core/command-hooks/discovery.js +1 -228
  359. package/dist/core/command-hooks/help.js +1 -18
  360. package/dist/core/command-hooks/index.js +1 -7
  361. package/dist/core/command-hooks/lifecycle-catalog.js +1 -9
  362. package/dist/core/command-hooks/lifecycle-create.js +1 -51
  363. package/dist/core/command-hooks/report.js +1 -28
  364. package/dist/core/command-hooks/schema.js +1 -157
  365. package/dist/core/command-hooks/transport/exec-invoke.js +1 -276
  366. package/dist/core/command-hooks/transport/exec-lifecycle.js +1 -211
  367. package/dist/core/command-manifests/manifest.js +1 -324
  368. package/dist/core/command-manifests/registry.js +1 -118
  369. package/dist/core/command-manifests/schema.js +1 -736
  370. package/dist/core/command-plugins/bundle.js +1 -261
  371. package/dist/core/command-plugins/compose.js +1 -65
  372. package/dist/core/command-plugins/discovery.js +1 -245
  373. package/dist/core/command-plugins/endpoint.js +1 -48
  374. package/dist/core/command-plugins/extensions.js +1 -166
  375. package/dist/core/command-plugins/help-addenda.js +1 -44
  376. package/dist/core/command-plugins/presence.js +1 -17
  377. package/dist/core/command-plugins/revalidate.js +2 -152
  378. package/dist/core/command-plugins/transport/exec-invoke.js +1 -215
  379. package/dist/core/command-plugins/transport/http-fetch.js +1 -68
  380. package/dist/core/command-plugins/transport/http-invoke.js +3 -546
  381. package/dist/core/command.js +10 -739
  382. package/dist/core/config.js +1 -1059
  383. package/dist/core/document-lines.js +3 -6
  384. package/dist/core/env-name.js +1 -9
  385. package/dist/core/errors.js +1 -52
  386. package/dist/core/events/emit.js +1 -17
  387. package/dist/core/events/envelope.js +1 -84
  388. package/dist/core/events/errors.js +1 -69
  389. package/dist/core/events/index.js +1 -4
  390. package/dist/core/events/operation-id.js +1 -24
  391. package/dist/core/events/read.js +1 -623
  392. package/dist/core/events/serialize.js +1 -199
  393. package/dist/core/events/source.js +1 -31
  394. package/dist/core/events/types.js +1 -11
  395. package/dist/core/exclusive-lock.js +1 -197
  396. package/dist/core/fault-classifier.js +1 -96
  397. package/dist/core/feed/feed.js +7 -202
  398. package/dist/core/feed/inbox-migrate.js +3 -135
  399. package/dist/core/feed/inbox.js +10 -122
  400. package/dist/core/feed/messages.js +6 -212
  401. package/dist/core/frontmatter.js +1 -35
  402. package/dist/core/fs-utils.js +3 -202
  403. package/dist/core/git.js +2 -103
  404. package/dist/core/help.js +9 -310
  405. package/dist/core/host-exports/builtins.js +9 -68
  406. package/dist/core/host-exports/export.js +3 -124
  407. package/dist/core/human/action-binding.js +1 -40
  408. package/dist/core/human/answer-text.js +5 -100
  409. package/dist/core/human/answer.js +1 -119
  410. package/dist/core/human/claim.js +3 -67
  411. package/dist/core/human/completion.js +1 -27
  412. package/dist/core/human/component-docs.js +78 -272
  413. package/dist/core/human/convention.js +2 -82
  414. package/dist/core/human/feedback-companion.js +1 -106
  415. package/dist/core/human/feedback.js +1 -88
  416. package/dist/core/human/page-authoring.js +1 -19
  417. package/dist/core/human/page-catalog.js +1 -172
  418. package/dist/core/human/page-errors.js +1 -7
  419. package/dist/core/human/page-eval.js +1 -125
  420. package/dist/core/human/page-html-markdown.js +8 -260
  421. package/dist/core/human/page-markdown.js +17 -295
  422. package/dist/core/human/page-schema.js +1 -373
  423. package/dist/core/human/page-synth.js +8 -27
  424. package/dist/core/human/page.js +1 -198
  425. package/dist/core/human/requests.js +15 -466
  426. package/dist/core/human/review-schema.js +1 -34
  427. package/dist/core/human/root.js +1 -11
  428. package/dist/core/human/scan.js +1 -69
  429. package/dist/core/human/summary.js +1 -5
  430. package/dist/core/human/tickets.js +1 -171
  431. package/dist/core/human/types.js +0 -1
  432. package/dist/core/human/visible-paths.js +1 -77
  433. package/dist/core/human-actions.js +1 -101
  434. package/dist/core/inspector/chrome.js +1 -14
  435. package/dist/core/inspector/contract.js +0 -1
  436. package/dist/core/inspector/core.js +2 -295
  437. package/dist/core/inspector/host.js +4 -538
  438. package/dist/core/inspector/model.js +2 -226
  439. package/dist/core/inspector/text.js +6 -45
  440. package/dist/core/inspector/transport.js +1 -36
  441. package/dist/core/inspector/tui.js +2 -295
  442. package/dist/core/installed-plugins.js +1 -78
  443. package/dist/core/io.js +7 -356
  444. package/dist/core/keybindings/attach-control.js +1 -42
  445. package/dist/core/keybindings/background-bash.js +1 -33
  446. package/dist/core/keybindings/catalog.js +1 -256
  447. package/dist/core/keybindings/inbox.js +1 -25
  448. package/dist/core/keybindings/index.js +1 -7
  449. package/dist/core/keybindings/match.js +1 -127
  450. package/dist/core/keybindings/persistence.js +1 -49
  451. package/dist/core/keybindings/resolve.js +1 -348
  452. package/dist/core/keybindings/types.js +0 -1
  453. package/dist/core/locked-file.js +1 -118
  454. package/dist/core/log.js +3 -27
  455. package/dist/core/manifest-recovery.js +1 -72
  456. package/dist/core/manifest-stale.js +1 -39
  457. package/dist/core/manifest.js +1 -20
  458. package/dist/core/memory/doc-link-grammar.js +2 -109
  459. package/dist/core/memory/extensions.js +1 -221
  460. package/dist/core/memory/history.js +6 -268
  461. package/dist/core/memory/identity.js +1 -181
  462. package/dist/core/memory/inline-ref-grammar.js +1 -98
  463. package/dist/core/memory/inline-ref-guidance.js +2 -35
  464. package/dist/core/memory/inline-ref-inventory.js +1 -59
  465. package/dist/core/memory/lint.js +2 -671
  466. package/dist/core/memory/project-namespace.js +2 -85
  467. package/dist/core/memory/repository-association.js +1 -129
  468. package/dist/core/memory/tree.js +1 -93
  469. package/dist/core/memory-resolver.js +2 -611
  470. package/dist/core/model-config.js +1 -107
  471. package/dist/core/model-routes.js +1 -201
  472. package/dist/core/nested-stores.js +2 -166
  473. package/dist/core/output.js +7 -99
  474. package/dist/core/pagination.js +1 -88
  475. package/dist/core/plugin-swap-lock.js +1 -31
  476. package/dist/core/pool-credential-store.js +1 -116
  477. package/dist/core/predicate.js +1 -191
  478. package/dist/core/preview-registry.js +2 -411
  479. package/dist/core/preview-result-path.js +1 -26
  480. package/dist/core/profiles/default-binding.js +1 -24
  481. package/dist/core/profiles/deletion-reservation.js +1 -42
  482. package/dist/core/profiles/env-store.js +2 -162
  483. package/dist/core/profiles/fuzzy-match.js +1 -92
  484. package/dist/core/profiles/manifest.js +1 -574
  485. package/dist/core/profiles/select.js +35 -741
  486. package/dist/core/profiles/state-block.js +3 -17
  487. package/dist/core/provider-error-recognition.js +1 -74
  488. package/dist/core/provider-failure.js +1 -86
  489. package/dist/core/provider-management.js +1 -22
  490. package/dist/core/remote-canvas-target.js +1 -30
  491. package/dist/core/render.js +18 -138
  492. package/dist/core/resolver.js +1 -111
  493. package/dist/core/review/birth.js +1 -52
  494. package/dist/core/review/comments.js +5 -279
  495. package/dist/core/review/companion.js +1 -215
  496. package/dist/core/review/document.js +2 -138
  497. package/dist/core/review/project.js +1 -36
  498. package/dist/core/review/realize.js +1 -71
  499. package/dist/core/review/remap.js +4 -141
  500. package/dist/core/review/signal.js +1 -12
  501. package/dist/core/review/stage.js +1 -184
  502. package/dist/core/review/store.js +1 -168
  503. package/dist/core/review/types.js +1 -23
  504. package/dist/core/runtime/advertised-command-invocation.js +1 -233
  505. package/dist/core/runtime/auth-reload.js +1 -67
  506. package/dist/core/runtime/banner.js +1 -51
  507. package/dist/core/runtime/bearings-render.js +18 -250
  508. package/dist/core/runtime/bearings.js +7 -194
  509. package/dist/core/runtime/bin-contributions.js +2 -186
  510. package/dist/core/runtime/boot-root.js +1 -107
  511. package/dist/core/runtime/branded-host.js +2 -264
  512. package/dist/core/runtime/broker/auth-reload.js +1 -157
  513. package/dist/core/runtime/broker/client-registry.js +1 -179
  514. package/dist/core/runtime/broker/daemon-ops.js +1 -88
  515. package/dist/core/runtime/broker/engine-drive.js +1 -354
  516. package/dist/core/runtime/broker/engine-routing.js +1 -211
  517. package/dist/core/runtime/broker/event-projection.js +1 -193
  518. package/dist/core/runtime/broker/extension-abort.js +1 -36
  519. package/dist/core/runtime/broker/fault-retry.js +1 -588
  520. package/dist/core/runtime/broker/frame-client.js +1 -132
  521. package/dist/core/runtime/broker/frame-dispatch.js +1 -183
  522. package/dist/core/runtime/broker/frame-engine-control.js +1 -231
  523. package/dist/core/runtime/broker/frame-memory-refs.js +1 -41
  524. package/dist/core/runtime/broker/frame-model-query.js +1 -69
  525. package/dist/core/runtime/broker/frame-read.js +1 -116
  526. package/dist/core/runtime/broker/frame-replies.js +1 -64
  527. package/dist/core/runtime/broker/frame-session.js +4 -203
  528. package/dist/core/runtime/broker/held-deferred-inbox.js +1 -13
  529. package/dist/core/runtime/broker/inbox.js +13 -163
  530. package/dist/core/runtime/broker/node-named.js +1 -27
  531. package/dist/core/runtime/broker/read-ops.js +1 -171
  532. package/dist/core/runtime/broker/rebind.js +1 -318
  533. package/dist/core/runtime/broker/tool-groups.js +1 -246
  534. package/dist/core/runtime/broker/turn-admission.js +1 -31
  535. package/dist/core/runtime/broker/turn-ignition.js +1 -84
  536. package/dist/core/runtime/broker-cli.js +3 -81
  537. package/dist/core/runtime/broker-extension-render.js +5 -135
  538. package/dist/core/runtime/broker-inventory.js +1 -116
  539. package/dist/core/runtime/broker-persona-guidance.js +4 -154
  540. package/dist/core/runtime/broker-protocol.js +3 -152
  541. package/dist/core/runtime/broker-request.js +1 -85
  542. package/dist/core/runtime/broker-sdk.js +1 -129
  543. package/dist/core/runtime/broker.js +1 -1214
  544. package/dist/core/runtime/canvas-extensions.js +1 -96
  545. package/dist/core/runtime/chat-inventory-rows.js +1 -105
  546. package/dist/core/runtime/close.js +1 -265
  547. package/dist/core/runtime/command-expansion.js +9 -104
  548. package/dist/core/runtime/command-surface.js +1 -117
  549. package/dist/core/runtime/connectivity.js +1 -73
  550. package/dist/core/runtime/deliver-live.js +1 -88
  551. package/dist/core/runtime/fault-recovery.js +1 -83
  552. package/dist/core/runtime/fault.js +1 -17
  553. package/dist/core/runtime/fleet.js +1 -58
  554. package/dist/core/runtime/front-door-env.js +1 -16
  555. package/dist/core/runtime/front-door.js +7 -183
  556. package/dist/core/runtime/headless-pi.js +1 -161
  557. package/dist/core/runtime/host.js +1 -457
  558. package/dist/core/runtime/interactive-deliver.js +1 -51
  559. package/dist/core/runtime/invocation.js +0 -10
  560. package/dist/core/runtime/kickoff.js +30 -327
  561. package/dist/core/runtime/launch-config-worker.js +1 -12
  562. package/dist/core/runtime/launch-prompt.js +4 -13
  563. package/dist/core/runtime/launch-target.js +1 -55
  564. package/dist/core/runtime/launch.js +1 -483
  565. package/dist/core/runtime/lifecycle.js +2 -213
  566. package/dist/core/runtime/managed-provider-cooling.js +1 -62
  567. package/dist/core/runtime/memory.js +1 -17
  568. package/dist/core/runtime/model-registry.js +1 -13
  569. package/dist/core/runtime/model-selection.js +1 -135
  570. package/dist/core/runtime/model-swap.js +1 -86
  571. package/dist/core/runtime/naming.js +14 -298
  572. package/dist/core/runtime/nerd-font.js +2 -127
  573. package/dist/core/runtime/node-read.js +2 -386
  574. package/dist/core/runtime/nodes.js +1 -331
  575. package/dist/core/runtime/outcome-document.js +1 -97
  576. package/dist/core/runtime/package-health.js +4 -99
  577. package/dist/core/runtime/persona.js +2 -55
  578. package/dist/core/runtime/pi-cli.js +1 -65
  579. package/dist/core/runtime/pi-vendored.js +1 -66
  580. package/dist/core/runtime/placement-tmux.js +1 -81
  581. package/dist/core/runtime/placement.js +1 -386
  582. package/dist/core/runtime/promote.js +1 -174
  583. package/dist/core/runtime/prospective-inventory-cli.js +3 -61
  584. package/dist/core/runtime/prospective-inventory.js +2 -88
  585. package/dist/core/runtime/recap.js +27 -103
  586. package/dist/core/runtime/recycle.js +1 -190
  587. package/dist/core/runtime/reopen.js +1 -138
  588. package/dist/core/runtime/reset.js +1 -245
  589. package/dist/core/runtime/resume-root.js +10 -290
  590. package/dist/core/runtime/revive-all.js +1 -107
  591. package/dist/core/runtime/revive.js +4 -544
  592. package/dist/core/runtime/roadmap.js +4 -38
  593. package/dist/core/runtime/session-branch.js +1 -46
  594. package/dist/core/runtime/session-cycles.js +1 -110
  595. package/dist/core/runtime/session-list-cache.js +1 -406
  596. package/dist/core/runtime/session-visibility.js +1 -99
  597. package/dist/core/runtime/shell-expansion.js +9 -100
  598. package/dist/core/runtime/situational-context.js +2 -67
  599. package/dist/core/runtime/situational-live.js +1 -41
  600. package/dist/core/runtime/spawn-env.js +1 -255
  601. package/dist/core/runtime/spawn.js +3 -577
  602. package/dist/core/runtime/stamp/channel.js +1 -76
  603. package/dist/core/runtime/stamp/protocol.js +1 -113
  604. package/dist/core/runtime/stop-guard.js +7 -116
  605. package/dist/core/runtime/stop-signals.js +1 -46
  606. package/dist/core/runtime/stream-watchdog.js +1 -134
  607. package/dist/core/runtime/structured-output.js +4 -156
  608. package/dist/core/runtime/surface-bg.js +1 -85
  609. package/dist/core/runtime/tmux-bindings.js +4 -730
  610. package/dist/core/runtime/tmux-chrome.js +1 -5
  611. package/dist/core/runtime/tmux-driver.js +7 -637
  612. package/dist/core/runtime/tool-group-summary.js +6 -85
  613. package/dist/core/runtime/turn-visibility.js +1 -31
  614. package/dist/core/runtime/view-socket.js +1 -83
  615. package/dist/core/runtime/warm-pool.d.ts +3 -2
  616. package/dist/core/runtime/warm-pool.js +1 -385
  617. package/dist/core/scope.js +1 -254
  618. package/dist/core/scoped-state/db.js +1 -135
  619. package/dist/core/scoped-state/migrate.js +3 -181
  620. package/dist/core/scoped-state/paths.js +1 -27
  621. package/dist/core/scoped-state/profiles.js +1 -62
  622. package/dist/core/scoped-state/providers.js +1 -8
  623. package/dist/core/scoped-state/schema.js +3 -16
  624. package/dist/core/scoped-state/settings.js +1 -82
  625. package/dist/core/secrets.js +2 -55
  626. package/dist/core/self-update.js +1 -71
  627. package/dist/core/session-model/session-state.js +1 -180
  628. package/dist/core/shell-segments.js +4 -169
  629. package/dist/core/spawn.js +1 -26
  630. package/dist/core/stdout-errors.js +1 -14
  631. package/dist/core/subscription-state.js +3 -193
  632. package/dist/core/substrate/frontmatter-validation.js +1 -105
  633. package/dist/core/substrate/gate-explain.js +1 -424
  634. package/dist/core/substrate/gate.js +1 -26
  635. package/dist/core/substrate/index.js +1 -30
  636. package/dist/core/substrate/injected-store.js +1 -249
  637. package/dist/core/substrate/listings.js +1 -115
  638. package/dist/core/substrate/on-read-node.js +1 -36
  639. package/dist/core/substrate/on-read.js +9 -315
  640. package/dist/core/substrate/plan.js +1 -266
  641. package/dist/core/substrate/render-node.js +1 -30
  642. package/dist/core/substrate/render.js +65 -689
  643. package/dist/core/substrate/schema.js +1 -186
  644. package/dist/core/substrate/session-cache.js +1 -83
  645. package/dist/core/substrate/subject-fields.js +1 -35
  646. package/dist/core/substrate/subject.js +1 -47
  647. package/dist/core/substrate/surface-match.js +1 -242
  648. package/dist/core/termrender/code-doc.js +5 -92
  649. package/dist/core/termrender/display.js +2 -56
  650. package/dist/core/termrender/termrender.js +14 -719
  651. package/dist/core/termrender/version.js +1 -1
  652. package/dist/core/timing.js +2 -94
  653. package/dist/core/tui/draw.js +2 -378
  654. package/dist/core/tui/fuzzy.js +1 -38
  655. package/dist/core/tui/markdown.js +3 -407
  656. package/dist/core/tui/page-host.js +1 -74
  657. package/dist/core/tui/panel.js +1 -137
  658. package/dist/core/tui/terminal.js +2 -100
  659. package/dist/core/user-settings.js +1 -454
  660. package/dist/core/wake.js +1 -296
  661. package/dist/core/worktree-close.js +6 -228
  662. package/dist/core/worktree-containment.js +3 -48
  663. package/dist/core/worktree-landing.js +4 -56
  664. package/dist/core/worktree-mutation-async.js +10 -280
  665. package/dist/core/worktree-quarantine.js +1 -54
  666. package/dist/core/worktree-sweep.js +6 -453
  667. package/dist/core/worktree.js +18 -899
  668. package/dist/daemon/api/bridge.js +8 -418
  669. package/dist/daemon/api/handlers/attach.js +1 -65
  670. package/dist/daemon/api/handlers/bash-jobs.js +2 -91
  671. package/dist/daemon/api/handlers/broker-ops.js +1 -447
  672. package/dist/daemon/api/handlers/broker-recovery.js +1 -251
  673. package/dist/daemon/api/handlers/canvas.js +6 -490
  674. package/dist/daemon/api/handlers/chat-inventory.js +1 -25
  675. package/dist/daemon/api/handlers/crons.js +1 -373
  676. package/dist/daemon/api/handlers/daemon.js +1 -76
  677. package/dist/daemon/api/handlers/feedback-comments.js +3 -199
  678. package/dist/daemon/api/handlers/files.js +1 -63
  679. package/dist/daemon/api/handlers/focus.js +1 -92
  680. package/dist/daemon/api/handlers/health.js +1 -76
  681. package/dist/daemon/api/handlers/human-requests.js +1 -379
  682. package/dist/daemon/api/handlers/human.js +1 -3
  683. package/dist/daemon/api/handlers/inbox-page.js +1 -89
  684. package/dist/daemon/api/handlers/inbox.js +1 -301
  685. package/dist/daemon/api/handlers/memory.js +1 -50
  686. package/dist/daemon/api/handlers/messages.js +2 -506
  687. package/dist/daemon/api/handlers/model-config.js +1 -44
  688. package/dist/daemon/api/handlers/modelauth.js +1 -165
  689. package/dist/daemon/api/handlers/node-outcomes.js +1 -181
  690. package/dist/daemon/api/handlers/nodes.js +1 -943
  691. package/dist/daemon/api/handlers/profiles.js +1 -140
  692. package/dist/daemon/api/handlers/prospective-chat-inventory.js +1 -59
  693. package/dist/daemon/api/handlers/reports.js +16 -332
  694. package/dist/daemon/api/handlers/review-comments.js +1 -465
  695. package/dist/daemon/api/handlers/reviews.js +1 -200
  696. package/dist/daemon/api/handlers/subscriptions.js +1 -53
  697. package/dist/daemon/api/handlers/validate.js +1 -58
  698. package/dist/daemon/api/handlers/worktree.js +1 -39
  699. package/dist/daemon/api/map.js +2 -735
  700. package/dist/daemon/api/router.js +1 -190
  701. package/dist/daemon/api/server.js +11 -408
  702. package/dist/daemon/boot-migrations.js +1 -31
  703. package/dist/daemon/companion-retire.js +1 -34
  704. package/dist/daemon/control.js +1 -22
  705. package/dist/daemon/cron/armed-context.js +1 -100
  706. package/dist/daemon/cron/capture.js +2 -45
  707. package/dist/daemon/cron/disposition.js +1 -55
  708. package/dist/daemon/cron/escalation.js +3 -124
  709. package/dist/daemon/cron/held.js +1 -20
  710. package/dist/daemon/cron/lease-recovery.js +1 -119
  711. package/dist/daemon/cron/live-runs.js +1 -23
  712. package/dist/daemon/cron/passes.js +1 -58
  713. package/dist/daemon/cron/settle.js +1 -61
  714. package/dist/daemon/cron/sinks.js +2 -59
  715. package/dist/daemon/cron-run.js +1 -405
  716. package/dist/daemon/crtrd-cli.js +1 -23
  717. package/dist/daemon/crtrd.js +8 -854
  718. package/dist/daemon/delivery/run-delivery.js +1 -164
  719. package/dist/daemon/fleet.js +17 -475
  720. package/dist/daemon/human/finish.js +10 -179
  721. package/dist/daemon/human/settle.js +1 -89
  722. package/dist/daemon/human/sweep.js +1 -66
  723. package/dist/daemon/manage.js +2 -595
  724. package/dist/daemon/messaging/node-message.js +1 -99
  725. package/dist/daemon/park-activity.js +1 -30
  726. package/dist/daemon/park-pending.js +1 -52
  727. package/dist/daemon/pidfile.js +1 -37
  728. package/dist/daemon/profile-delete.js +1 -306
  729. package/dist/daemon/reconcilers/bash-deadline.js +1 -80
  730. package/dist/daemon/reconcilers/broker-supervision.js +4 -761
  731. package/dist/daemon/reconcilers/controller-death.js +1 -14
  732. package/dist/daemon/reconcilers/cron-lane.js +1 -29
  733. package/dist/daemon/reconcilers/delivery-lane.js +1 -130
  734. package/dist/daemon/reconcilers/live-obligation.js +1 -87
  735. package/dist/daemon/reconcilers/managed-worktree-sweep.js +1 -202
  736. package/dist/daemon/reconcilers/node-deadline.js +1 -82
  737. package/dist/daemon/reconcilers/node-lifecycle/freeze-lane.js +1 -172
  738. package/dist/daemon/reconcilers/node-lifecycle/respawn-policy.js +1 -59
  739. package/dist/daemon/reconcilers/node-lifecycle/terminating.js +1 -12
  740. package/dist/daemon/reconcilers/node-lifecycle/tick.js +1 -146
  741. package/dist/daemon/reconcilers/node-lifecycle/wants-execution.js +1 -11
  742. package/dist/daemon/reconcilers/pending-review-submit.js +1 -36
  743. package/dist/daemon/reconcilers/storage-maintenance.js +1 -207
  744. package/dist/daemon/review/comment-notify.js +2 -109
  745. package/dist/daemon/review/companion.js +1 -29
  746. package/dist/daemon/review/deliver.js +3 -8
  747. package/dist/daemon/review/finish.js +1 -122
  748. package/dist/daemon/review/sweep.js +1 -18
  749. package/dist/daemon/startup-policy.js +1 -1
  750. package/dist/daemon/supervise-cadence.js +1 -6
  751. package/dist/hook-authoring.js +5 -447
  752. package/dist/hook-process.js +1 -34
  753. package/dist/index.js +1 -52
  754. package/dist/migrations/001-surfaces-frontmatter.js +1 -161
  755. package/dist/migrations/002-profile-project-memory.js +1 -72
  756. package/dist/migrations/003-repository-root-memory-identity/front-door.js +11 -231
  757. package/dist/migrations/003-repository-root-memory-identity/index.js +5 -513
  758. package/dist/migrations/003-repository-root-memory-identity/references.js +5 -469
  759. package/dist/migrations/003-repository-root-memory-identity/repository-facts.js +3 -349
  760. package/dist/migrations/activation.js +2 -89
  761. package/dist/migrations/convergent.js +2 -82
  762. package/dist/migrations/corpus.js +3 -483
  763. package/dist/migrations/frontmatter-splice.js +8 -176
  764. package/dist/migrations/profile-manifests.js +2 -70
  765. package/dist/migrations/registry.js +1 -42
  766. package/dist/migrations/runner.js +1 -85
  767. package/dist/migrations/types.js +0 -24
  768. package/dist/pi-extensions/broker-local.js +2 -106
  769. package/dist/pi-extensions/canvas-bash-valve.js +7 -461
  770. package/dist/pi-extensions/canvas-context-intro.js +2 -113
  771. package/dist/pi-extensions/canvas-doc-substrate.js +9 -178
  772. package/dist/pi-extensions/canvas-goal-capture.js +1 -83
  773. package/dist/pi-extensions/canvas-inbox-watcher.js +1 -1010
  774. package/dist/pi-extensions/canvas-passive-context.js +14 -203
  775. package/dist/pi-extensions/canvas-preview-result.js +2 -72
  776. package/dist/pi-extensions/canvas-prompt-scrub.js +2 -54
  777. package/dist/pi-extensions/canvas-recap.js +11 -405
  778. package/dist/pi-extensions/canvas-review-boundary.js +3 -63
  779. package/dist/pi-extensions/canvas-stamp.js +2 -77
  780. package/dist/pi-extensions/canvas-stophook.js +1 -643
  781. package/dist/pi-extensions/canvas-structured-output.js +13 -35
  782. package/dist/pi-extensions/canvas-tool-guide.js +9 -78
  783. package/dist/pi-extensions/envelope-merge.js +8 -29
  784. package/dist/prompts/review.js +20 -42
  785. package/dist/shared/birth-announcement.js +1 -25
  786. package/dist/shared/crtr-version.js +1 -18
  787. package/dist/shared/env.js +1 -214
  788. package/dist/shared/generated-context.js +11 -226
  789. package/dist/shared/predicates.js +1 -4
  790. package/dist/shared/shell-quote.js +1 -5
  791. package/dist/shared/tool-groups.js +1 -64
  792. package/dist/shared/working-activity.js +1 -27
  793. package/dist/suppress-experimental-warnings.js +1 -15
  794. package/dist/types.js +1 -185
  795. package/docs/public-api.md +10 -9
  796. package/package.json +6 -5
  797. package/runtime.lock.json +5 -5
  798. package/dist/api/__tests__/integration/client.test.d.ts +0 -1
  799. package/dist/api/__tests__/integration/client.test.js +0 -163
  800. package/dist/builtin-pi-packages/pi-crtr-extensions/__tests__/insights-active-init.test.ts +0 -98
  801. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/crtr-commands.test.ts +0 -93
  802. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/integration/provider-rotation.test.ts +0 -2530
  803. package/dist/clients/__tests__/helpers/human-daemon.d.ts +0 -11
  804. package/dist/clients/__tests__/helpers/human-daemon.js +0 -60
  805. package/dist/clients/attach/__tests__/attach-remote-readonly.test.d.ts +0 -1
  806. package/dist/clients/attach/__tests__/attach-remote-readonly.test.js +0 -97
  807. package/dist/clients/attach/__tests__/bash-call-width.test.d.ts +0 -1
  808. package/dist/clients/attach/__tests__/bash-call-width.test.js +0 -38
  809. package/dist/clients/attach/__tests__/chat-view-snapshot-ordering.test.d.ts +0 -1
  810. package/dist/clients/attach/__tests__/chat-view-snapshot-ordering.test.js +0 -175
  811. package/dist/clients/attach/__tests__/completion-frecency.test.d.ts +0 -1
  812. package/dist/clients/attach/__tests__/completion-frecency.test.js +0 -35
  813. package/dist/clients/attach/__tests__/context-message.test.d.ts +0 -1
  814. package/dist/clients/attach/__tests__/context-message.test.js +0 -130
  815. package/dist/clients/attach/__tests__/crtr-output.test.d.ts +0 -1
  816. package/dist/clients/attach/__tests__/crtr-output.test.js +0 -68
  817. package/dist/clients/attach/__tests__/diagram.test.d.ts +0 -1
  818. package/dist/clients/attach/__tests__/diagram.test.js +0 -42
  819. package/dist/clients/attach/__tests__/edit-diff.test.d.ts +0 -1
  820. package/dist/clients/attach/__tests__/edit-diff.test.js +0 -31
  821. package/dist/clients/attach/__tests__/frame-selection.test.d.ts +0 -1
  822. package/dist/clients/attach/__tests__/frame-selection.test.js +0 -84
  823. package/dist/clients/attach/__tests__/group-activity.test.d.ts +0 -1
  824. package/dist/clients/attach/__tests__/group-activity.test.js +0 -165
  825. package/dist/clients/attach/__tests__/oauth-dialog-lifecycle.test.d.ts +0 -1
  826. package/dist/clients/attach/__tests__/oauth-dialog-lifecycle.test.js +0 -83
  827. package/dist/clients/attach/__tests__/pane-tag-successor.test.d.ts +0 -1
  828. package/dist/clients/attach/__tests__/pane-tag-successor.test.js +0 -56
  829. package/dist/clients/attach/__tests__/profile-files.test.d.ts +0 -1
  830. package/dist/clients/attach/__tests__/profile-files.test.js +0 -21
  831. package/dist/clients/attach/__tests__/prompt-preview.test.d.ts +0 -1
  832. package/dist/clients/attach/__tests__/prompt-preview.test.js +0 -21
  833. package/dist/clients/attach/__tests__/ref-autocomplete.test.d.ts +0 -1
  834. package/dist/clients/attach/__tests__/ref-autocomplete.test.js +0 -64
  835. package/dist/clients/attach/__tests__/titled-editor-paste.test.d.ts +0 -1
  836. package/dist/clients/attach/__tests__/titled-editor-paste.test.js +0 -114
  837. package/dist/clients/attach/__tests__/titled-editor-preview.test.d.ts +0 -1
  838. package/dist/clients/attach/__tests__/titled-editor-preview.test.js +0 -83
  839. package/dist/clients/inbox/__tests__/integration/inbox-controller.test.d.ts +0 -1
  840. package/dist/clients/inbox/__tests__/integration/inbox-controller.test.js +0 -81
  841. package/dist/clients/inbox/__tests__/integration/mount-panel.test.d.ts +0 -1
  842. package/dist/clients/inbox/__tests__/integration/mount-panel.test.js +0 -135
  843. package/dist/clients/inbox/__tests__/integration/stale-row-activation.test.d.ts +0 -1
  844. package/dist/clients/inbox/__tests__/integration/stale-row-activation.test.js +0 -66
  845. package/dist/clients/inbox/review/__tests__/editor-roundtrip.test.d.ts +0 -1
  846. package/dist/clients/inbox/review/__tests__/editor-roundtrip.test.js +0 -35
  847. package/dist/clients/inbox/review/__tests__/review-core.test.d.ts +0 -1
  848. package/dist/clients/inbox/review/__tests__/review-core.test.js +0 -52
  849. package/dist/clients/inbox/review/__tests__/teardown-notice.test.d.ts +0 -1
  850. package/dist/clients/inbox/review/__tests__/teardown-notice.test.js +0 -100
  851. package/dist/commands/__tests__/api-client-cold-start-diagnostic.test.d.ts +0 -1
  852. package/dist/commands/__tests__/api-client-cold-start-diagnostic.test.js +0 -69
  853. package/dist/commands/__tests__/human.test.d.ts +0 -1
  854. package/dist/commands/__tests__/human.test.js +0 -172
  855. package/dist/commands/__tests__/integration/dashboard-snapshot.test.d.ts +0 -1
  856. package/dist/commands/__tests__/integration/dashboard-snapshot.test.js +0 -237
  857. package/dist/commands/__tests__/integration/migrate.test.d.ts +0 -1
  858. package/dist/commands/__tests__/integration/migrate.test.js +0 -1330
  859. package/dist/commands/__tests__/node-message.test.d.ts +0 -1
  860. package/dist/commands/__tests__/node-message.test.js +0 -112
  861. package/dist/commands/__tests__/node-new.test.d.ts +0 -1
  862. package/dist/commands/__tests__/node-new.test.js +0 -58
  863. package/dist/commands/__tests__/revive-now-gate.test.d.ts +0 -1
  864. package/dist/commands/__tests__/revive-now-gate.test.js +0 -62
  865. package/dist/commands/__tests__/seam/daemon-status.test.d.ts +0 -1
  866. package/dist/commands/__tests__/seam/daemon-status.test.js +0 -29
  867. package/dist/commands/__tests__/surface-reload-target.test.d.ts +0 -1
  868. package/dist/commands/__tests__/surface-reload-target.test.js +0 -21
  869. package/dist/commands/memory/__tests__/command-selector-and-mutation-guards.test.d.ts +0 -1
  870. package/dist/commands/memory/__tests__/command-selector-and-mutation-guards.test.js +0 -379
  871. package/dist/commands/memory/__tests__/memory-list-and-lint-ignore.test.d.ts +0 -1
  872. package/dist/commands/memory/__tests__/memory-list-and-lint-ignore.test.js +0 -124
  873. package/dist/commands/memory/__tests__/repository-root-lint.test.d.ts +0 -1
  874. package/dist/commands/memory/__tests__/repository-root-lint.test.js +0 -148
  875. package/dist/commands/sys/__tests__/config-model-ladders.test.d.ts +0 -1
  876. package/dist/commands/sys/__tests__/config-model-ladders.test.js +0 -114
  877. package/dist/commands/sys/__tests__/setup-core.test.d.ts +0 -1
  878. package/dist/commands/sys/__tests__/setup-core.test.js +0 -45
  879. package/dist/commands/sys/__tests__/sync-project-guidance.test.d.ts +0 -1
  880. package/dist/commands/sys/__tests__/sync-project-guidance.test.js +0 -244
  881. package/dist/core/__tests__/bash-guard.test.d.ts +0 -1
  882. package/dist/core/__tests__/bash-guard.test.js +0 -190
  883. package/dist/core/__tests__/boot-fault-attempt.test.d.ts +0 -1
  884. package/dist/core/__tests__/boot-fault-attempt.test.js +0 -105
  885. package/dist/core/__tests__/boot.test.d.ts +0 -1
  886. package/dist/core/__tests__/boot.test.js +0 -274
  887. package/dist/core/__tests__/branded-host-concurrency.test.d.ts +0 -1
  888. package/dist/core/__tests__/branded-host-concurrency.test.js +0 -72
  889. package/dist/core/__tests__/broker-extension-canvas-db-boundary.test.d.ts +0 -1
  890. package/dist/core/__tests__/broker-extension-canvas-db-boundary.test.js +0 -75
  891. package/dist/core/__tests__/broker-launch-candidates.test.d.ts +0 -1
  892. package/dist/core/__tests__/broker-launch-candidates.test.js +0 -311
  893. package/dist/core/__tests__/broker-preflight.test.d.ts +0 -1
  894. package/dist/core/__tests__/broker-preflight.test.js +0 -95
  895. package/dist/core/__tests__/broker-stream-watchdog-floor.test.d.ts +0 -1
  896. package/dist/core/__tests__/broker-stream-watchdog-floor.test.js +0 -82
  897. package/dist/core/__tests__/broker-turn-admission.test.d.ts +0 -1
  898. package/dist/core/__tests__/broker-turn-admission.test.js +0 -44
  899. package/dist/core/__tests__/canvas-db-boundary.test.d.ts +0 -1
  900. package/dist/core/__tests__/canvas-db-boundary.test.js +0 -46
  901. package/dist/core/__tests__/canvas-inbox-watcher-hold.test.d.ts +0 -1
  902. package/dist/core/__tests__/canvas-inbox-watcher-hold.test.js +0 -710
  903. package/dist/core/__tests__/canvas-inbox-watcher-naming.test.d.ts +0 -1
  904. package/dist/core/__tests__/canvas-inbox-watcher-naming.test.js +0 -310
  905. package/dist/core/__tests__/canvas-inbox-watcher.test.d.ts +0 -1
  906. package/dist/core/__tests__/canvas-inbox-watcher.test.js +0 -397
  907. package/dist/core/__tests__/canvas.test.d.ts +0 -1
  908. package/dist/core/__tests__/canvas.test.js +0 -138
  909. package/dist/core/__tests__/child-death-wake.test.d.ts +0 -1
  910. package/dist/core/__tests__/child-death-wake.test.js +0 -153
  911. package/dist/core/__tests__/cli-help-contract.test.d.ts +0 -1
  912. package/dist/core/__tests__/cli-help-contract.test.js +0 -152
  913. package/dist/core/__tests__/close.test.d.ts +0 -1
  914. package/dist/core/__tests__/close.test.js +0 -284
  915. package/dist/core/__tests__/collectible.test.d.ts +0 -1
  916. package/dist/core/__tests__/collectible.test.js +0 -89
  917. package/dist/core/__tests__/config-change-delta.test.d.ts +0 -1
  918. package/dist/core/__tests__/config-change-delta.test.js +0 -108
  919. package/dist/core/__tests__/context-intro.test.d.ts +0 -1
  920. package/dist/core/__tests__/context-intro.test.js +0 -123
  921. package/dist/core/__tests__/cron-armed-context-failure.test.d.ts +0 -1
  922. package/dist/core/__tests__/cron-armed-context-failure.test.js +0 -150
  923. package/dist/core/__tests__/cron-held-settlement.test.d.ts +0 -1
  924. package/dist/core/__tests__/cron-held-settlement.test.js +0 -240
  925. package/dist/core/__tests__/cron-node-sink-parked-root.test.d.ts +0 -1
  926. package/dist/core/__tests__/cron-node-sink-parked-root.test.js +0 -166
  927. package/dist/core/__tests__/cron-self-cancel-delivery.test.d.ts +0 -1
  928. package/dist/core/__tests__/cron-self-cancel-delivery.test.js +0 -84
  929. package/dist/core/__tests__/cron-timeout-descendants.test.d.ts +0 -1
  930. package/dist/core/__tests__/cron-timeout-descendants.test.js +0 -114
  931. package/dist/core/__tests__/daemon-boot.test.d.ts +0 -1
  932. package/dist/core/__tests__/daemon-boot.test.js +0 -422
  933. package/dist/core/__tests__/daemon-wedge.test.d.ts +0 -1
  934. package/dist/core/__tests__/daemon-wedge.test.js +0 -106
  935. package/dist/core/__tests__/dead-node-policy-table.test.d.ts +0 -1
  936. package/dist/core/__tests__/dead-node-policy-table.test.js +0 -77
  937. package/dist/core/__tests__/events-contract.test.d.ts +0 -1
  938. package/dist/core/__tests__/events-contract.test.js +0 -76
  939. package/dist/core/__tests__/extension-abort.test.d.ts +0 -1
  940. package/dist/core/__tests__/extension-abort.test.js +0 -21
  941. package/dist/core/__tests__/fault-classifier.test.d.ts +0 -1
  942. package/dist/core/__tests__/fault-classifier.test.js +0 -138
  943. package/dist/core/__tests__/fixtures/api-server-host.d.ts +0 -1
  944. package/dist/core/__tests__/fixtures/api-server-host.js +0 -47
  945. package/dist/core/__tests__/fixtures/c3-custom-provider-ext.d.ts +0 -2
  946. package/dist/core/__tests__/fixtures/c3-custom-provider-ext.js +0 -34
  947. package/dist/core/__tests__/fixtures/c5-command-boundary-ext.d.ts +0 -2
  948. package/dist/core/__tests__/fixtures/c5-command-boundary-ext.js +0 -32
  949. package/dist/core/__tests__/fixtures/fake-engine.d.ts +0 -347
  950. package/dist/core/__tests__/fixtures/fake-engine.js +0 -1509
  951. package/dist/core/__tests__/fixtures/fake-pi-host.d.ts +0 -2
  952. package/dist/core/__tests__/fixtures/fake-pi-host.js +0 -311
  953. package/dist/core/__tests__/fixtures/memory-slash-live-probe.d.ts +0 -1
  954. package/dist/core/__tests__/fixtures/memory-slash-live-probe.js +0 -75
  955. package/dist/core/__tests__/fixtures/metadata-migration-race.d.ts +0 -1
  956. package/dist/core/__tests__/fixtures/metadata-migration-race.js +0 -49
  957. package/dist/core/__tests__/focuses.test.d.ts +0 -1
  958. package/dist/core/__tests__/focuses.test.js +0 -113
  959. package/dist/core/__tests__/fs-utils.test.d.ts +0 -1
  960. package/dist/core/__tests__/fs-utils.test.js +0 -50
  961. package/dist/core/__tests__/helpers/broker-clients.d.ts +0 -43
  962. package/dist/core/__tests__/helpers/broker-clients.js +0 -174
  963. package/dist/core/__tests__/helpers/fleet.d.ts +0 -12
  964. package/dist/core/__tests__/helpers/fleet.js +0 -50
  965. package/dist/core/__tests__/helpers/harness.d.ts +0 -124
  966. package/dist/core/__tests__/helpers/harness.js +0 -806
  967. package/dist/core/__tests__/helpers/viewer-panes.d.ts +0 -12
  968. package/dist/core/__tests__/helpers/viewer-panes.js +0 -133
  969. package/dist/core/__tests__/history-inbox.test.d.ts +0 -1
  970. package/dist/core/__tests__/history-inbox.test.js +0 -121
  971. package/dist/core/__tests__/human-action-delivery.test.d.ts +0 -1
  972. package/dist/core/__tests__/human-action-delivery.test.js +0 -162
  973. package/dist/core/__tests__/human-actions.test.d.ts +0 -1
  974. package/dist/core/__tests__/human-actions.test.js +0 -120
  975. package/dist/core/__tests__/inline-memory-refs.test.d.ts +0 -1
  976. package/dist/core/__tests__/inline-memory-refs.test.js +0 -225
  977. package/dist/core/__tests__/integration/broker-fork-seam.test.d.ts +0 -1
  978. package/dist/core/__tests__/integration/broker-fork-seam.test.js +0 -193
  979. package/dist/core/__tests__/integration/broker-sdk-wiring.test.d.ts +0 -1
  980. package/dist/core/__tests__/integration/broker-sdk-wiring.test.js +0 -750
  981. package/dist/core/__tests__/integration/broker-snapshot-history.test.d.ts +0 -1
  982. package/dist/core/__tests__/integration/broker-snapshot-history.test.js +0 -288
  983. package/dist/core/__tests__/integration/broker-wedge-supervision.test.d.ts +0 -1
  984. package/dist/core/__tests__/integration/broker-wedge-supervision.test.js +0 -103
  985. package/dist/core/__tests__/integration/command-plugins.test.d.ts +0 -1
  986. package/dist/core/__tests__/integration/command-plugins.test.js +0 -1200
  987. package/dist/core/__tests__/integration/deferred-no-wake.test.d.ts +0 -1
  988. package/dist/core/__tests__/integration/deferred-no-wake.test.js +0 -610
  989. package/dist/core/__tests__/integration/flagship-lifecycle.test.d.ts +0 -1
  990. package/dist/core/__tests__/integration/flagship-lifecycle.test.js +0 -264
  991. package/dist/core/__tests__/integration/fresh-home-commands.test.d.ts +0 -1
  992. package/dist/core/__tests__/integration/fresh-home-commands.test.js +0 -49
  993. package/dist/core/__tests__/integration/git-optional-locks.test.d.ts +0 -1
  994. package/dist/core/__tests__/integration/git-optional-locks.test.js +0 -81
  995. package/dist/core/__tests__/integration/host-teardown-process-group.test.d.ts +0 -1
  996. package/dist/core/__tests__/integration/host-teardown-process-group.test.js +0 -480
  997. package/dist/core/__tests__/integration/lifecycle-hooks.test.d.ts +0 -1
  998. package/dist/core/__tests__/integration/lifecycle-hooks.test.js +0 -498
  999. package/dist/core/__tests__/integration/live-mutation-verbs.test.d.ts +0 -1
  1000. package/dist/core/__tests__/integration/live-mutation-verbs.test.js +0 -180
  1001. package/dist/core/__tests__/integration/live-mutation.test.d.ts +0 -1
  1002. package/dist/core/__tests__/integration/live-mutation.test.js +0 -173
  1003. package/dist/core/__tests__/integration/plugin-revalidate.test.d.ts +0 -1
  1004. package/dist/core/__tests__/integration/plugin-revalidate.test.js +0 -359
  1005. package/dist/core/__tests__/integration/profile-pause.test.d.ts +0 -1
  1006. package/dist/core/__tests__/integration/profile-pause.test.js +0 -115
  1007. package/dist/core/__tests__/integration/refresh-stall-recycle.test.d.ts +0 -1
  1008. package/dist/core/__tests__/integration/refresh-stall-recycle.test.js +0 -151
  1009. package/dist/core/__tests__/integration/revive.test.d.ts +0 -1
  1010. package/dist/core/__tests__/integration/revive.test.js +0 -615
  1011. package/dist/core/__tests__/integration/spawn-root.test.d.ts +0 -1
  1012. package/dist/core/__tests__/integration/spawn-root.test.js +0 -536
  1013. package/dist/core/__tests__/integration/subscription-delivery.test.d.ts +0 -1
  1014. package/dist/core/__tests__/integration/subscription-delivery.test.js +0 -132
  1015. package/dist/core/__tests__/integration/tmux-surface.test.d.ts +0 -1
  1016. package/dist/core/__tests__/integration/tmux-surface.test.js +0 -330
  1017. package/dist/core/__tests__/integration/worktree-land.test.d.ts +0 -1
  1018. package/dist/core/__tests__/integration/worktree-land.test.js +0 -607
  1019. package/dist/core/__tests__/integration/worktree-reap.test.d.ts +0 -1
  1020. package/dist/core/__tests__/integration/worktree-reap.test.js +0 -842
  1021. package/dist/core/__tests__/kickoff.test.d.ts +0 -1
  1022. package/dist/core/__tests__/kickoff.test.js +0 -196
  1023. package/dist/core/__tests__/lifecycle-terminal-reasons.test.d.ts +0 -1
  1024. package/dist/core/__tests__/lifecycle-terminal-reasons.test.js +0 -62
  1025. package/dist/core/__tests__/lifecycle.test.d.ts +0 -1
  1026. package/dist/core/__tests__/lifecycle.test.js +0 -176
  1027. package/dist/core/__tests__/live-lifecycle-prompt.test.d.ts +0 -1
  1028. package/dist/core/__tests__/live-lifecycle-prompt.test.js +0 -63
  1029. package/dist/core/__tests__/memory-resolver-precedence.test.d.ts +0 -1
  1030. package/dist/core/__tests__/memory-resolver-precedence.test.js +0 -228
  1031. package/dist/core/__tests__/migration.test.d.ts +0 -1
  1032. package/dist/core/__tests__/migration.test.js +0 -946
  1033. package/dist/core/__tests__/model-pin-durability.test.d.ts +0 -1
  1034. package/dist/core/__tests__/model-pin-durability.test.js +0 -195
  1035. package/dist/core/__tests__/model-routes-config.test.d.ts +0 -1
  1036. package/dist/core/__tests__/model-routes-config.test.js +0 -150
  1037. package/dist/core/__tests__/nested-store-discovery.test.d.ts +0 -1
  1038. package/dist/core/__tests__/nested-store-discovery.test.js +0 -89
  1039. package/dist/core/__tests__/node-outcome.test.d.ts +0 -1
  1040. package/dist/core/__tests__/node-outcome.test.js +0 -246
  1041. package/dist/core/__tests__/on-read-crouter-home-fence.test.d.ts +0 -1
  1042. package/dist/core/__tests__/on-read-crouter-home-fence.test.js +0 -66
  1043. package/dist/core/__tests__/on-read-dedup-resume.test.d.ts +0 -1
  1044. package/dist/core/__tests__/on-read-dedup-resume.test.js +0 -132
  1045. package/dist/core/__tests__/on-read-nested-store.test.d.ts +0 -1
  1046. package/dist/core/__tests__/on-read-nested-store.test.js +0 -135
  1047. package/dist/core/__tests__/parse-argv-stdin-secret.test.d.ts +0 -1
  1048. package/dist/core/__tests__/parse-argv-stdin-secret.test.js +0 -68
  1049. package/dist/core/__tests__/passive-subscription.test.d.ts +0 -1
  1050. package/dist/core/__tests__/passive-subscription.test.js +0 -120
  1051. package/dist/core/__tests__/pid-identity-match.test.d.ts +0 -1
  1052. package/dist/core/__tests__/pid-identity-match.test.js +0 -145
  1053. package/dist/core/__tests__/pid-zombie.test.d.ts +0 -1
  1054. package/dist/core/__tests__/pid-zombie.test.js +0 -42
  1055. package/dist/core/__tests__/plugin-kinds.test.d.ts +0 -1
  1056. package/dist/core/__tests__/plugin-kinds.test.js +0 -182
  1057. package/dist/core/__tests__/plugin-link-symlinked-scope-root.test.d.ts +0 -1
  1058. package/dist/core/__tests__/plugin-link-symlinked-scope-root.test.js +0 -43
  1059. package/dist/core/__tests__/plugin-page-components.test.d.ts +0 -1
  1060. package/dist/core/__tests__/plugin-page-components.test.js +0 -159
  1061. package/dist/core/__tests__/preview-mirror-cap.test.d.ts +0 -1
  1062. package/dist/core/__tests__/preview-mirror-cap.test.js +0 -53
  1063. package/dist/core/__tests__/preview-registry-sync.test.d.ts +0 -1
  1064. package/dist/core/__tests__/preview-registry-sync.test.js +0 -107
  1065. package/dist/core/__tests__/profile-project-memory-delivery.test.d.ts +0 -1
  1066. package/dist/core/__tests__/profile-project-memory-delivery.test.js +0 -644
  1067. package/dist/core/__tests__/prospective-inventory-capability-parity.test.d.ts +0 -1
  1068. package/dist/core/__tests__/prospective-inventory-capability-parity.test.js +0 -91
  1069. package/dist/core/__tests__/prune.test.d.ts +0 -1
  1070. package/dist/core/__tests__/prune.test.js +0 -243
  1071. package/dist/core/__tests__/push-final-guard.test.d.ts +0 -1
  1072. package/dist/core/__tests__/push-final-guard.test.js +0 -191
  1073. package/dist/core/__tests__/relaunch-root.test.d.ts +0 -1
  1074. package/dist/core/__tests__/relaunch-root.test.js +0 -249
  1075. package/dist/core/__tests__/remote-canvas-target.test.d.ts +0 -1
  1076. package/dist/core/__tests__/remote-canvas-target.test.js +0 -93
  1077. package/dist/core/__tests__/repository-association.test.d.ts +0 -1
  1078. package/dist/core/__tests__/repository-association.test.js +0 -153
  1079. package/dist/core/__tests__/repository-root-identity.test.d.ts +0 -1
  1080. package/dist/core/__tests__/repository-root-identity.test.js +0 -223
  1081. package/dist/core/__tests__/respawn-throttle.test.d.ts +0 -1
  1082. package/dist/core/__tests__/respawn-throttle.test.js +0 -20
  1083. package/dist/core/__tests__/review-model-floor.test.d.ts +0 -1
  1084. package/dist/core/__tests__/review-model-floor.test.js +0 -83
  1085. package/dist/core/__tests__/revive-all.test.d.ts +0 -1
  1086. package/dist/core/__tests__/revive-all.test.js +0 -157
  1087. package/dist/core/__tests__/revive-capacity.test.d.ts +0 -1
  1088. package/dist/core/__tests__/revive-capacity.test.js +0 -184
  1089. package/dist/core/__tests__/revive-parked-fresh.test.d.ts +0 -1
  1090. package/dist/core/__tests__/revive-parked-fresh.test.js +0 -176
  1091. package/dist/core/__tests__/scope-crouter-home-fence.test.d.ts +0 -1
  1092. package/dist/core/__tests__/scope-crouter-home-fence.test.js +0 -55
  1093. package/dist/core/__tests__/seam/broker-attach-multiclient.test.d.ts +0 -1
  1094. package/dist/core/__tests__/seam/broker-attach-multiclient.test.js +0 -262
  1095. package/dist/core/__tests__/seam/broker-attach-stream.test.d.ts +0 -1
  1096. package/dist/core/__tests__/seam/broker-attach-stream.test.js +0 -176
  1097. package/dist/core/__tests__/seam/broker-cap-freeze.test.d.ts +0 -1
  1098. package/dist/core/__tests__/seam/broker-cap-freeze.test.js +0 -155
  1099. package/dist/core/__tests__/seam/broker-crash-teardown.test.d.ts +0 -1
  1100. package/dist/core/__tests__/seam/broker-crash-teardown.test.js +0 -131
  1101. package/dist/core/__tests__/seam/broker-pane-resolution.test.d.ts +0 -1
  1102. package/dist/core/__tests__/seam/broker-pane-resolution.test.js +0 -204
  1103. package/dist/core/__tests__/seam/broker-provider-retry.test.d.ts +0 -1
  1104. package/dist/core/__tests__/seam/broker-provider-retry.test.js +0 -686
  1105. package/dist/core/__tests__/seam/broker-startup-diagnostics.test.d.ts +0 -1
  1106. package/dist/core/__tests__/seam/broker-startup-diagnostics.test.js +0 -82
  1107. package/dist/core/__tests__/seam/broker-whip-interrupt.test.d.ts +0 -1
  1108. package/dist/core/__tests__/seam/broker-whip-interrupt.test.js +0 -50
  1109. package/dist/core/__tests__/seam/deadline-wake-delivery.test.d.ts +0 -1
  1110. package/dist/core/__tests__/seam/deadline-wake-delivery.test.js +0 -138
  1111. package/dist/core/__tests__/seam/dormancy-release.test.d.ts +0 -1
  1112. package/dist/core/__tests__/seam/dormancy-release.test.js +0 -516
  1113. package/dist/core/__tests__/seam/held-deferred-human-prompt.test.d.ts +0 -1
  1114. package/dist/core/__tests__/seam/held-deferred-human-prompt.test.js +0 -65
  1115. package/dist/core/__tests__/seam/inbox-reference-guidance.test.d.ts +0 -1
  1116. package/dist/core/__tests__/seam/inbox-reference-guidance.test.js +0 -84
  1117. package/dist/core/__tests__/seam/memory-slash-node-relative-inventory.test.d.ts +0 -1
  1118. package/dist/core/__tests__/seam/memory-slash-node-relative-inventory.test.js +0 -160
  1119. package/dist/core/__tests__/seam/node-outcome-delivery.test.d.ts +0 -1
  1120. package/dist/core/__tests__/seam/node-outcome-delivery.test.js +0 -177
  1121. package/dist/core/__tests__/seam/prospective-inventory-stdout.test.d.ts +0 -1
  1122. package/dist/core/__tests__/seam/prospective-inventory-stdout.test.js +0 -31
  1123. package/dist/core/__tests__/seam/reopen-invalidated-worktree.test.d.ts +0 -1
  1124. package/dist/core/__tests__/seam/reopen-invalidated-worktree.test.js +0 -60
  1125. package/dist/core/__tests__/seam/self-close-teardown.test.d.ts +0 -1
  1126. package/dist/core/__tests__/seam/self-close-teardown.test.js +0 -49
  1127. package/dist/core/__tests__/seam/yield-refresh-transaction.test.d.ts +0 -1
  1128. package/dist/core/__tests__/seam/yield-refresh-transaction.test.js +0 -100
  1129. package/dist/core/__tests__/secrets.test.d.ts +0 -1
  1130. package/dist/core/__tests__/secrets.test.js +0 -49
  1131. package/dist/core/__tests__/self-update.test.d.ts +0 -1
  1132. package/dist/core/__tests__/self-update.test.js +0 -46
  1133. package/dist/core/__tests__/session-branch.test.d.ts +0 -1
  1134. package/dist/core/__tests__/session-branch.test.js +0 -61
  1135. package/dist/core/__tests__/session-cycles.test.d.ts +0 -1
  1136. package/dist/core/__tests__/session-cycles.test.js +0 -133
  1137. package/dist/core/__tests__/session-model.test.d.ts +0 -1
  1138. package/dist/core/__tests__/session-model.test.js +0 -111
  1139. package/dist/core/__tests__/spawn-worktree-id-conflict.test.d.ts +0 -1
  1140. package/dist/core/__tests__/spawn-worktree-id-conflict.test.js +0 -71
  1141. package/dist/core/__tests__/stdin-body-no-discard.test.d.ts +0 -1
  1142. package/dist/core/__tests__/stdin-body-no-discard.test.js +0 -33
  1143. package/dist/core/__tests__/stdout-errors.test.d.ts +0 -1
  1144. package/dist/core/__tests__/stdout-errors.test.js +0 -16
  1145. package/dist/core/__tests__/stop-guard.test.d.ts +0 -1
  1146. package/dist/core/__tests__/stop-guard.test.js +0 -237
  1147. package/dist/core/__tests__/stream-watchdog.test.d.ts +0 -1
  1148. package/dist/core/__tests__/stream-watchdog.test.js +0 -154
  1149. package/dist/core/__tests__/subscription-pool-credential-guard.test.d.ts +0 -1
  1150. package/dist/core/__tests__/subscription-pool-credential-guard.test.js +0 -95
  1151. package/dist/core/__tests__/tmux-driver-boundary.test.d.ts +0 -1
  1152. package/dist/core/__tests__/tmux-driver-boundary.test.js +0 -50
  1153. package/dist/core/__tests__/warm-claim-preference-snapshot.test.d.ts +0 -1
  1154. package/dist/core/__tests__/warm-claim-preference-snapshot.test.js +0 -54
  1155. package/dist/core/__tests__/worktree-landing.test.d.ts +0 -1
  1156. package/dist/core/__tests__/worktree-landing.test.js +0 -11
  1157. package/dist/core/__tests__/yield-ensures-daemon.test.d.ts +0 -1
  1158. package/dist/core/__tests__/yield-ensures-daemon.test.js +0 -55
  1159. package/dist/core/broker-client/__tests__/transport-relay.test.d.ts +0 -1
  1160. package/dist/core/broker-client/__tests__/transport-relay.test.js +0 -214
  1161. package/dist/core/broker-client/__tests__/transport-socket.test.d.ts +0 -1
  1162. package/dist/core/broker-client/__tests__/transport-socket.test.js +0 -73
  1163. package/dist/core/canvas/__tests__/attention.test.d.ts +0 -1
  1164. package/dist/core/canvas/__tests__/attention.test.js +0 -83
  1165. package/dist/core/canvas/__tests__/history-transcript.test.d.ts +0 -1
  1166. package/dist/core/canvas/__tests__/history-transcript.test.js +0 -102
  1167. package/dist/core/canvas/__tests__/remote-canvas-source.test.d.ts +0 -1
  1168. package/dist/core/canvas/__tests__/remote-canvas-source.test.js +0 -328
  1169. package/dist/core/canvas/__tests__/remote-transport.test.d.ts +0 -1
  1170. package/dist/core/canvas/__tests__/remote-transport.test.js +0 -97
  1171. package/dist/core/canvas/__tests__/render-remote.test.d.ts +0 -1
  1172. package/dist/core/canvas/__tests__/render-remote.test.js +0 -243
  1173. package/dist/core/canvas/__tests__/session-window.test.d.ts +0 -1
  1174. package/dist/core/canvas/__tests__/session-window.test.js +0 -70
  1175. package/dist/core/feed/__tests__/inbox-migrate.test.d.ts +0 -1
  1176. package/dist/core/feed/__tests__/inbox-migrate.test.js +0 -49
  1177. package/dist/core/human/__tests__/page-catalog.test.d.ts +0 -1
  1178. package/dist/core/human/__tests__/page-catalog.test.js +0 -20
  1179. package/dist/core/human/__tests__/page-html-markdown.test.d.ts +0 -1
  1180. package/dist/core/human/__tests__/page-html-markdown.test.js +0 -48
  1181. package/dist/core/human/__tests__/page.test.d.ts +0 -1
  1182. package/dist/core/human/__tests__/page.test.js +0 -92
  1183. package/dist/core/keybindings/__tests__/resolve.test.d.ts +0 -1
  1184. package/dist/core/keybindings/__tests__/resolve.test.js +0 -171
  1185. package/dist/core/profiles/__tests__/env-store.test.d.ts +0 -1
  1186. package/dist/core/profiles/__tests__/env-store.test.js +0 -99
  1187. package/dist/core/profiles/__tests__/fuzzy-match.test.d.ts +0 -1
  1188. package/dist/core/profiles/__tests__/fuzzy-match.test.js +0 -51
  1189. package/dist/core/profiles/__tests__/root-profile.test.d.ts +0 -1
  1190. package/dist/core/profiles/__tests__/root-profile.test.js +0 -59
  1191. package/dist/core/review/__tests__/capture-origin.test.d.ts +0 -1
  1192. package/dist/core/review/__tests__/capture-origin.test.js +0 -150
  1193. package/dist/core/review/__tests__/comments.test.d.ts +0 -1
  1194. package/dist/core/review/__tests__/comments.test.js +0 -116
  1195. package/dist/core/review/__tests__/remap.test.d.ts +0 -1
  1196. package/dist/core/review/__tests__/remap.test.js +0 -177
  1197. package/dist/core/review/__tests__/stage-identity.test.d.ts +0 -1
  1198. package/dist/core/review/__tests__/stage-identity.test.js +0 -150
  1199. package/dist/core/runtime/__tests__/engine-route.test.d.ts +0 -1
  1200. package/dist/core/runtime/__tests__/engine-route.test.js +0 -36
  1201. package/dist/core/runtime/__tests__/install-id-cache-scoping.test.d.ts +0 -1
  1202. package/dist/core/runtime/__tests__/install-id-cache-scoping.test.js +0 -45
  1203. package/dist/core/runtime/__tests__/node-env.test.d.ts +0 -1
  1204. package/dist/core/runtime/__tests__/node-env.test.js +0 -73
  1205. package/dist/core/runtime/__tests__/spawn-env.test.d.ts +0 -1
  1206. package/dist/core/runtime/__tests__/spawn-env.test.js +0 -259
  1207. package/dist/core/substrate/__tests__/surface-match-command.test.d.ts +0 -1
  1208. package/dist/core/substrate/__tests__/surface-match-command.test.js +0 -89
  1209. package/dist/core/substrate/__tests__/surface-match-memory-read.test.d.ts +0 -1
  1210. package/dist/core/substrate/__tests__/surface-match-memory-read.test.js +0 -28
  1211. package/dist/core/substrate/__tests__/surface-match-pre-command.test.d.ts +0 -1
  1212. package/dist/core/substrate/__tests__/surface-match-pre-command.test.js +0 -92
  1213. package/dist/daemon/__tests__/autostart-storm.test.d.ts +0 -1
  1214. package/dist/daemon/__tests__/autostart-storm.test.js +0 -128
  1215. package/dist/daemon/__tests__/broker-ownership.test.d.ts +0 -1
  1216. package/dist/daemon/__tests__/broker-ownership.test.js +0 -25
  1217. package/dist/daemon/__tests__/daemon-ownership.test.d.ts +0 -1
  1218. package/dist/daemon/__tests__/daemon-ownership.test.js +0 -27
  1219. package/dist/daemon/__tests__/helpers/source-daemon.d.ts +0 -30
  1220. package/dist/daemon/__tests__/helpers/source-daemon.js +0 -176
  1221. package/dist/daemon/__tests__/integration/api-startup-readiness.test.d.ts +0 -1
  1222. package/dist/daemon/__tests__/integration/api-startup-readiness.test.js +0 -83
  1223. package/dist/daemon/__tests__/integration/migration-startup.test.d.ts +0 -1
  1224. package/dist/daemon/__tests__/integration/migration-startup.test.js +0 -127
  1225. package/dist/daemon/__tests__/node-deadline-lane.test.d.ts +0 -1
  1226. package/dist/daemon/__tests__/node-deadline-lane.test.js +0 -77
  1227. package/dist/daemon/__tests__/node-outcome-birth-invariants.test.d.ts +0 -1
  1228. package/dist/daemon/__tests__/node-outcome-birth-invariants.test.js +0 -146
  1229. package/dist/daemon/__tests__/node-outcome-delivery.test.d.ts +0 -1
  1230. package/dist/daemon/__tests__/node-outcome-delivery.test.js +0 -116
  1231. package/dist/daemon/__tests__/reconciler-signature.test.d.ts +0 -1
  1232. package/dist/daemon/__tests__/reconciler-signature.test.js +0 -37
  1233. package/dist/daemon/__tests__/subtree-filter-freshness.test.d.ts +0 -1
  1234. package/dist/daemon/__tests__/subtree-filter-freshness.test.js +0 -63
  1235. package/dist/daemon/__tests__/thaw-order.test.d.ts +0 -1
  1236. package/dist/daemon/__tests__/thaw-order.test.js +0 -55
  1237. package/dist/daemon/api/__tests__/bridge-heartbeat.test.d.ts +0 -1
  1238. package/dist/daemon/api/__tests__/bridge-heartbeat.test.js +0 -58
  1239. package/dist/daemon/api/__tests__/broker-settle-park.test.d.ts +0 -1
  1240. package/dist/daemon/api/__tests__/broker-settle-park.test.js +0 -175
  1241. package/dist/daemon/api/__tests__/canvas-snapshot-fields.test.d.ts +0 -1
  1242. package/dist/daemon/api/__tests__/canvas-snapshot-fields.test.js +0 -216
  1243. package/dist/daemon/api/__tests__/error-seam.test.d.ts +0 -1
  1244. package/dist/daemon/api/__tests__/error-seam.test.js +0 -83
  1245. package/dist/daemon/api/__tests__/model-config.test.d.ts +0 -1
  1246. package/dist/daemon/api/__tests__/model-config.test.js +0 -73
  1247. package/dist/daemon/api/__tests__/node-create-description.test.d.ts +0 -1
  1248. package/dist/daemon/api/__tests__/node-create-description.test.js +0 -107
  1249. package/dist/daemon/api/__tests__/node-model-validation.test.d.ts +0 -1
  1250. package/dist/daemon/api/__tests__/node-model-validation.test.js +0 -183
  1251. package/dist/daemon/api/__tests__/nodes-activity-query.test.d.ts +0 -1
  1252. package/dist/daemon/api/__tests__/nodes-activity-query.test.js +0 -99
  1253. package/dist/daemon/api/__tests__/profile-launch-gates.test.d.ts +0 -1
  1254. package/dist/daemon/api/__tests__/profile-launch-gates.test.js +0 -172
  1255. package/dist/daemon/api/__tests__/profile-metadata-route.test.d.ts +0 -1
  1256. package/dist/daemon/api/__tests__/profile-metadata-route.test.js +0 -95
  1257. package/dist/daemon/api/__tests__/reopen-delivery.test.d.ts +0 -1
  1258. package/dist/daemon/api/__tests__/reopen-delivery.test.js +0 -260
  1259. package/dist/daemon/api/__tests__/seam/api-server.test.d.ts +0 -1
  1260. package/dist/daemon/api/__tests__/seam/api-server.test.js +0 -442
  1261. package/dist/daemon/api/__tests__/seam/b10-attach-modelauth.test.d.ts +0 -1
  1262. package/dist/daemon/api/__tests__/seam/b10-attach-modelauth.test.js +0 -310
  1263. package/dist/daemon/api/__tests__/seam/leaf-api-parity.test.d.ts +0 -1
  1264. package/dist/daemon/api/__tests__/seam/leaf-api-parity.test.js +0 -351
  1265. package/dist/daemon/api/__tests__/seam/node-outcome-api.test.d.ts +0 -1
  1266. package/dist/daemon/api/__tests__/seam/node-outcome-api.test.js +0 -159
  1267. package/dist/daemon/api/__tests__/seam/profile-delete.test.d.ts +0 -1
  1268. package/dist/daemon/api/__tests__/seam/profile-delete.test.js +0 -372
  1269. package/dist/daemon/api/__tests__/submit-result.test.d.ts +0 -1
  1270. package/dist/daemon/api/__tests__/submit-result.test.js +0 -215
  1271. package/dist/migrations/__tests__/activation-concurrency.test.d.ts +0 -1
  1272. package/dist/migrations/__tests__/activation-concurrency.test.js +0 -146
  1273. package/dist/migrations/__tests__/activation.test.d.ts +0 -1
  1274. package/dist/migrations/__tests__/activation.test.js +0 -152
  1275. package/dist/migrations/__tests__/deletion-and-root-declaration.test.d.ts +0 -1
  1276. package/dist/migrations/__tests__/deletion-and-root-declaration.test.js +0 -149
  1277. package/dist/pi-extensions/__tests__/canvas-bash-valve.test.d.ts +0 -1
  1278. package/dist/pi-extensions/__tests__/canvas-bash-valve.test.js +0 -86
  1279. package/dist/pi-extensions/__tests__/canvas-context-intro.test.d.ts +0 -1
  1280. package/dist/pi-extensions/__tests__/canvas-context-intro.test.js +0 -364
  1281. package/dist/pi-extensions/__tests__/canvas-goal-capture-envelope.test.d.ts +0 -1
  1282. package/dist/pi-extensions/__tests__/canvas-goal-capture-envelope.test.js +0 -106
  1283. package/dist/pi-extensions/__tests__/canvas-recap.test.d.ts +0 -1
  1284. package/dist/pi-extensions/__tests__/canvas-recap.test.js +0 -62
  1285. package/dist/pi-extensions/__tests__/canvas-stophook-agentend.test.d.ts +0 -1
  1286. package/dist/pi-extensions/__tests__/canvas-stophook-agentend.test.js +0 -432
  1287. package/dist/pi-extensions/__tests__/canvas-stophook-context-nudge.test.d.ts +0 -1
  1288. package/dist/pi-extensions/__tests__/canvas-stophook-context-nudge.test.js +0 -152
  1289. package/dist/pi-extensions/__tests__/canvas-structured-output.test.d.ts +0 -1
  1290. package/dist/pi-extensions/__tests__/canvas-structured-output.test.js +0 -88
  1291. package/dist/pi-extensions/__tests__/canvas-tool-guide.test.d.ts +0 -1
  1292. package/dist/pi-extensions/__tests__/canvas-tool-guide.test.js +0 -96
  1293. package/dist/pi-extensions/__tests__/integration/canvas-bash-valve.test.d.ts +0 -1
  1294. package/dist/pi-extensions/__tests__/integration/canvas-bash-valve.test.js +0 -133
  1295. package/dist/pi-extensions/__tests__/pre-command-gate.test.d.ts +0 -1
  1296. package/dist/pi-extensions/__tests__/pre-command-gate.test.js +0 -232
  1297. package/dist/shared/__tests__/env-boundary.test.d.ts +0 -1
  1298. package/dist/shared/__tests__/env-boundary.test.js +0 -95
  1299. package/dist/shared/__tests__/generated-context-grammar.test.d.ts +0 -1
  1300. package/dist/shared/__tests__/generated-context-grammar.test.js +0 -80
  1301. package/docs/compat/hearth-crtr-v1.md +0 -179
  1302. package/docs/compat/hearth-crtr-v2.md +0 -177
  1303. package/docs/compat/hearth-crtr-v3.md +0 -176
  1304. package/docs/compat/hearth-crtr-v4.md +0 -182
  1305. package/docs/compat/hearth-crtr-v5.md +0 -169
@@ -1,905 +1,17 @@
1
- import { truncateToVisualLines } from '@earendil-works/pi-coding-agent';
2
- import { Box, Text, truncateToWidth, visibleWidth, wrapTextWithAnsi } from '@earendil-works/pi-tui';
3
- import { parse as parseYaml, stringify as stringifyYaml } from 'yaml';
4
- import { crtrPreviewRecords, HELP_ICON, iconForPath, suppressOutputForPath, summarizePath, } from '../../../core/preview-registry.js';
5
- import { parseSurfaces } from '../../../core/substrate/schema.js';
6
- import { FoldedToolCallController } from './tool-calls.js';
7
- // Hard cap on a collapsed crtr card's total rendered lines (rule 12,
8
- // inline-ui-placement): help synthesis or a normal truncated result never
9
- // shows more than this many lines total, blank spacer + status + body +
10
- // expand hint included. PREVIEW_BODY_BUDGET reserves the 3 fixed/possible
11
- // non-body lines (leading blank, status line, one-line expand hint — shown
12
- // unconditionally for help, conditionally for a normal truncated result) so
13
- // blank(1) + status(1) + body(<=budget) + hint(<=1) never exceeds the cap.
14
- const PREVIEW_MAX_LINES = 20;
15
- const PREVIEW_BODY_BUDGET = PREVIEW_MAX_LINES - 3;
16
- const HEREDOC_OPEN = /<<-?\s*(["']?)([A-Za-z_][A-Za-z0-9_]*)\1/g;
17
- const CRTR_IN_COMMAND_POSITION = /(?:^|[\n;&|()]\s*)(?:[A-Za-z_][A-Za-z0-9_]*=\S+\s+)*(?:[^\s;&|()]+\/)?(?:crtr|crouter)(?=\s|$)/;
18
- export const CRTR_OUTPUT_CUSTOM_TYPE = 'crtr-output';
19
- export function stripHeredocBodies(command) {
20
- const lines = command.split('\n');
21
- const out = [];
22
- let i = 0;
23
- while (i < lines.length) {
24
- const line = lines[i];
25
- out.push(line);
26
- i++;
27
- const delims = [];
28
- HEREDOC_OPEN.lastIndex = 0;
29
- let match;
30
- while ((match = HEREDOC_OPEN.exec(line)) !== null)
31
- delims.push(match[2]);
32
- for (const delim of delims) {
33
- while (i < lines.length) {
34
- const probe = lines[i].replace(/^\t+/, '');
35
- i++;
36
- if (probe === delim)
37
- break;
38
- }
39
- }
40
- }
41
- return out.join('\n');
42
- }
43
- export function isCrtrBashCommand(command) {
44
- return typeof command === 'string' && CRTR_IN_COMMAND_POSITION.test(stripHeredocBodies(command));
45
- }
46
- /** Pull the crtr/crouter invocation's own argv tokens out of a full shell
47
- * command string: drop everything before the matched binary token, then cut
48
- * at the next shell-level terminator so a chained `&& echo done` or piped
49
- * `| cat` doesn't leak into the "argv". Tokenized with quote-awareness (see
50
- * tokenizeShellSegment) so a quoted argument that merely *contains* `-h` (a
51
- * prompt string, a literal flag mentioned in prose) is one opaque token, not
52
- * split into a bare `-h` — still not a real shell parse (no backslash escapes,
53
- * no `$()`), but adequate for viewer-only chrome (worst case: a stale/empty
54
- * lookup, never a wrong agent result). */
55
- function extractCrtrInvocationTokens(command) {
56
- const stripped = stripHeredocBodies(command);
57
- const match = CRTR_IN_COMMAND_POSITION.exec(stripped);
58
- if (match === null)
59
- return undefined;
60
- const tail = stripped.slice(match.index + match[0].length);
61
- const stopAt = tail.search(/[\n;&|)]/);
62
- const segment = (stopAt === -1 ? tail : tail.slice(0, stopAt)).trim();
63
- return segment === '' ? [] : dropRedirectTail(tokenizeShellSegment(segment));
64
- }
65
- /** A crtr invocation's own argv never includes a shell redirect (`>`, `>>`,
66
- * `<`, `<<`, with an optional leading fd digit and/or trailing `&fd`
67
- * duplication, e.g. `2>&1`, `&>`, `1>`) — that's plumbing on the OUTER bash
68
- * call, not part of crtr's own path/args. The terminator scan above already
69
- * cuts the segment on a bare `&`, which coincidentally lands mid-redirect
70
- * for something like `-h 2>&1` (segment becomes `-h 2>`, leaving a dangling
71
- * `2>` token) — rather than special-case that scan, this drops the first
72
- * token that STARTS WITH a redirect operator (and everything after it, since
73
- * nothing past a redirect is ever crtr's own arg). Matching on the prefix
74
- * (not the whole token) is what catches an operator glued to its target with
75
- * no separating space, e.g. `2>/tmp/log` / `>/tmp/log` — bash treats those as
76
- * operator+word regardless of spacing, but this whitespace tokenizer keeps
77
- * them as one token, so a full-string match would miss them. */
78
- const REDIRECT_TOKEN = /^(?:\d*|&)(?:>>|<<|>|<)/;
79
- function dropRedirectTail(tokens) {
80
- const redirectIdx = tokens.findIndex((t) => REDIRECT_TOKEN.test(t));
81
- return redirectIdx === -1 ? tokens : tokens.slice(0, redirectIdx);
82
- }
83
- /** Split a shell command segment into tokens, treating a single- or
84
- * double-quoted span as one opaque token (quote characters stripped, no
85
- * escape handling) instead of letting whitespace inside it create extra
86
- * tokens. This is what keeps `-h` embedded in a quoted prompt string (e.g.
87
- * `node new "write about -h flags"`) from ever being mistaken for a real
88
- * `-h` token by isCrtrHelpInvocation below. */
89
- function tokenizeShellSegment(segment) {
90
- const tokens = [];
91
- let current = '';
92
- let inToken = false;
93
- let quote = null;
94
- for (const ch of segment) {
95
- if (quote !== null) {
96
- if (ch === quote)
97
- quote = null;
98
- else
99
- current += ch;
100
- inToken = true;
101
- continue;
102
- }
103
- if (ch === '"' || ch === "'") {
104
- quote = ch;
105
- inToken = true;
106
- continue;
107
- }
108
- if (/\s/.test(ch)) {
109
- if (inToken) {
110
- tokens.push(current);
111
- current = '';
112
- inToken = false;
113
- }
114
- continue;
115
- }
116
- current += ch;
117
- inToken = true;
118
- }
119
- if (inToken)
120
- tokens.push(current);
121
- return tokens;
122
- }
123
- /** True when a crtr bash invocation's OWN argv carries a bare -h/--help
124
- * token — the dispatcher renders the leaf's schema, not a result, so it is
125
- * never useful to preview like a normal command's output (see
126
- * src/core/help.ts renderLeafArgv: schema text, not agent-facing result
127
- * text). Checked against extractCrtrInvocationTokens' tokens (scoped to the
128
- * crtr segment only, quote-aware), never the raw command string — a `-h`
129
- * appearing before the crtr segment (`echo -h && crtr canvas snapshot`),
130
- * after it (`crtr canvas snapshot && echo --help`), or inside a quoted
131
- * argument (`crtr node new "write about -h flags"`) must never count. This is
132
- * structural (every leaf's -h has the same shape), so it needs no per-leaf
133
- * metadata — unlike suppressOutput below, which is command-owned. */
134
- export function isCrtrHelpInvocation(command) {
135
- if (typeof command !== 'string')
136
- return false;
137
- const tokens = extractCrtrInvocationTokens(command);
138
- return tokens !== undefined && tokens.some((t) => t === '-h' || t === '--help');
139
- }
140
- export function commandPreviewMeta(command) {
141
- const tokens = extractCrtrInvocationTokens(command);
142
- const isHelp = tokens !== undefined && tokens.some((t) => t === '-h' || t === '--help');
143
- return {
144
- isHelp,
145
- suppressOutput: tokens !== undefined && tokens.length > 0 && suppressOutputForPath(tokens),
146
- };
147
- }
148
- function commandFromArgs(args) {
149
- if (!args || typeof args !== 'object')
150
- return '';
151
- const command = args.command;
152
- return typeof command === 'string' ? command : '';
153
- }
154
- const CRTR_FLAG_TOKEN = /^-{1,2}[A-Za-z0-9]/;
155
- const CRTR_ATTACHED_FLAG_VALUE = /^(--?[A-Za-z0-9][^=]*)(=)(.*)$/;
156
- const CRTR_NUMBER_VALUE = /^-?(?:\d+(?:\.\d+)?|\.\d+)$/;
157
- // Memory routing
158
- //
159
- // `memory write` and `memory edit` decide who sees a document, when, and at what
160
- // context cost. Folded, their argv is a wall of frontmatter flags that wraps over
161
- // several rows, so the row states the routing itself instead: the scope the
162
- // document landed in, its gate, its surface entries with the rung each delivers
163
- // at, and its `when-and-why-to-read` line.
164
- //
165
- // The frontmatter flags are in the invocation's own argv — the same text the
166
- // write copies verbatim into the document. `scope` is not a flag: the selector
167
- // rules resolve it, and the leaf reports it in its RESULT. The result is
168
- // reachable here because this definition observes every settled tool result
169
- // (`observeResult`), which runs before a fold hides the result record.
170
- const MEMORY_ROUTING_LEAVES = new Set(['memory write', 'memory edit']);
171
- /** Every value the invocation passed for one flag, in either spelling
172
- * (`--flag value`, `--flag=value`). A flag left without a value takes the next
173
- * flag token as its own, so the separated spelling only claims a non-flag. */
174
- function crtrFlagValues(tokens, flag) {
175
- const attached = `--${flag}=`;
176
- const values = [];
177
- tokens.forEach((token, index) => {
178
- if (token === `--${flag}`) {
179
- const value = tokens[index + 1];
180
- if (value !== undefined && !CRTR_FLAG_TOKEN.test(value))
181
- values.push(value);
182
- return;
183
- }
184
- if (token.startsWith(attached))
185
- values.push(token.slice(attached.length));
186
- });
187
- return values;
188
- }
189
- function crtrFlagValue(tokens, flag) {
190
- return crtrFlagValues(tokens, flag)[0];
191
- }
192
- function parsedYaml(raw) {
193
- try {
194
- return parseYaml(raw);
195
- }
196
- catch {
197
- return undefined;
198
- }
199
- }
200
- /** A predicate printed the way it is authored on the command line: one-line
201
- * YAML flow. Anything that is not a field→matcher map is shown as typed. */
202
- function predicateText(raw) {
203
- const parsed = parsedYaml(raw);
204
- return parsed === null || typeof parsed !== 'object' || Array.isArray(parsed)
205
- ? raw.trim()
206
- : stringifyYaml(parsed, { collectionStyle: 'flow', flowCollectionPadding: false, lineWidth: 0 }).trim();
207
- }
208
- function predicateValueText(value) {
209
- return stringifyYaml(value, { collectionStyle: 'flow', flowCollectionPadding: false, lineWidth: 0 }).trim();
210
- }
211
- function stringField(record, field) {
212
- const value = record?.[field];
213
- return typeof value === 'string' && value !== '' ? value : undefined;
214
- }
215
- /** The routing a `memory write`/`memory edit` invocation states, or undefined
216
- * for every other leaf. The result record is authoritative where it speaks:
217
- * it carries the scope the selector rules chose and the resolved canonical
218
- * name, which composes the store's namespace onto the name that was passed. */
219
- function memoryRouting(tokens, records) {
220
- const leaf = tokens.slice(0, 2).join(' ');
221
- if (!MEMORY_ROUTING_LEAVES.has(leaf))
222
- return undefined;
223
- const positional = tokens[2] !== undefined && !CRTR_FLAG_TOKEN.test(tokens[2]) ? tokens[2] : undefined;
224
- // One bash call may run several crtr invocations; the row shows the first, so
225
- // it reads the first record this leaf produced.
226
- const result = records.find((record) => record.path === leaf)?.result;
227
- const gate = crtrFlagValue(tokens, 'gate');
228
- return {
229
- leaf,
230
- name: stringField(result, 'name') ?? positional ?? '',
231
- scope: stringField(result, 'scope') ?? crtrFlagValue(tokens, 'scope'),
232
- gate: gate === undefined ? undefined : predicateText(gate),
233
- surfaces: parseSurfaces(crtrFlagValues(tokens, 'surface').map(parsedYaml)),
234
- whenAndWhyToRead: crtrFlagValue(tokens, 'when-and-why-to-read'),
235
- };
236
- }
237
- /** How much of the document the entry delivers, toned by how much context it
238
- * costs every agent it reaches. */
239
- function rungTone(rung) {
240
- return rung === 'content' ? 'warning' : rung === 'preview' ? 'accent' : 'muted';
241
- }
242
- /** One `surfaces` entry in its authored key order: the event, what it matches,
243
- * the predicates that narrow it, and the rung it delivers at. */
244
- function surfaceEntryText(entry, theme) {
245
- const constraints = [entry.on];
246
- if (entry.match !== undefined)
247
- constraints.push(entry.match.join(' '));
248
- if (entry.matchFrontmatter !== undefined)
249
- constraints.push(`match-frontmatter ${predicateValueText(entry.matchFrontmatter)}`);
250
- if (entry.gate !== undefined)
251
- constraints.push(`gate ${predicateValueText(entry.gate)}`);
252
- return `${theme.fg('text', constraints.join(' '))} ${theme.fg('dim', 'at')} ${theme.fg(rungTone(entry.at), entry.at)}`;
253
- }
254
- const ROUTING_INDENT = ' ';
255
- /** The routing block under the folded call's header line: one line per field,
256
- * in the order the substrate resolves them. A fact the invocation does not
257
- * state is left out rather than shown as empty. */
258
- function memoryRoutingFields(routing, theme) {
259
- const label = (text) => theme.fg('dim', text);
260
- const fields = [];
261
- if (routing.scope !== undefined)
262
- fields.push({ label: label('scope'), values: [theme.fg('text', routing.scope)] });
263
- if (routing.gate !== undefined)
264
- fields.push({ label: label('gate'), values: [theme.fg('text', routing.gate)] });
265
- fields.push({
266
- label: label('surface'),
267
- values: routing.surfaces.length === 0
268
- ? [theme.fg('muted', 'none')]
269
- : routing.surfaces.map((entry) => surfaceEntryText(entry, theme)),
270
- });
271
- if (routing.whenAndWhyToRead !== undefined) {
272
- fields.push({ label: label('when-and-why-to-read'), values: [theme.fg('text', routing.whenAndWhyToRead)] });
273
- }
274
- return fields;
275
- }
276
- /** One field's rows: the label, then its values in a column of their own. Each
277
- * value starts at that column — so a second surface entry reads as a sibling of
278
- * the first — and a value too long for the pane wraps under it. A field that
279
- * states SEVERAL values wraps one notch deeper still, which is what keeps a
280
- * wrapped surface entry from reading as the next entry. */
281
- function routingFieldLines(field, width) {
282
- const head = `${ROUTING_INDENT}${field.label} `;
283
- const column = visibleWidth(head);
284
- const valueIndent = ' '.repeat(column);
285
- const wrapIndent = field.values.length > 1 ? `${valueIndent} ` : valueIndent;
286
- const lines = [];
287
- for (const value of field.values) {
288
- const wrapped = wrapTextWithAnsi(value, Math.max(1, width - visibleWidth(wrapIndent)));
289
- wrapped.forEach((line, index) => {
290
- const prefix = index > 0 ? wrapIndent : lines.length === 0 ? head : valueIndent;
291
- lines.push(`${prefix}${line}`);
292
- });
293
- }
294
- return lines;
295
- }
296
- /** A folded memory call: its header line, then its routing fields. Values WRAP
297
- * rather than clip — the row states the document's whole reach, so a value cut
298
- * off at the pane edge is routing the human cannot read. Wrapping keeps the
299
- * folded call painting exactly the rows it reports, because the viewer
300
- * measures a block by rendering it at the width it paints at and caches that
301
- * measurement per width (MeasuredContainer). What must hold at every width is
302
- * that no row overhangs the pane, or the terminal wraps a row nobody counted. */
303
- class FoldedCrtrCallComponent {
304
- header;
305
- fields;
306
- constructor(header, fields) {
307
- this.header = header;
308
- this.fields = fields;
309
- }
310
- invalidate() { }
311
- render(width) {
312
- const lines = wrapTextWithAnsi(this.header, Math.max(1, width));
313
- for (const field of this.fields)
314
- lines.push(...routingFieldLines(field, width));
315
- // Final backstop: a pane too narrow to leave the value column any room to
316
- // wrap into (24 cells for when-and-why-to-read, 12 for a wrapped surface
317
- // entry) is the only way a row can overhang. It erases the value it clips
318
- // rather than trimming it — at that width the label alone fills the pane.
319
- return lines.map((line) => truncateToWidth(line, width, ''));
320
- }
321
- }
322
- /** Syntax-color flags and their values while leaving the command path and
323
- * positional arguments in the folded row's existing bold title style. */
324
- function styleFoldedCrtrTokens(tokens, theme) {
325
- let expectsValue = false;
326
- return tokens.map((token) => {
327
- const attached = CRTR_ATTACHED_FLAG_VALUE.exec(token);
328
- if (attached !== null) {
329
- expectsValue = false;
330
- const valueColor = CRTR_NUMBER_VALUE.test(attached[3]) ? 'syntaxNumber' : 'syntaxString';
331
- return `${theme.fg('syntaxKeyword', attached[1])}${theme.fg('syntaxOperator', attached[2])}${theme.fg(valueColor, attached[3])}`;
332
- }
333
- if (expectsValue && !CRTR_FLAG_TOKEN.test(token)) {
334
- expectsValue = false;
335
- return theme.fg(CRTR_NUMBER_VALUE.test(token) ? 'syntaxNumber' : 'syntaxString', token);
336
- }
337
- if (CRTR_FLAG_TOKEN.test(token)) {
338
- expectsValue = true;
339
- return theme.fg('syntaxKeyword', token);
340
- }
341
- expectsValue = false;
342
- return theme.fg('toolTitle', theme.bold(token));
343
- }).join(' ');
344
- }
345
- function resultText(result) {
346
- return (result.content ?? [])
347
- .filter((part) => part?.type === 'text' || typeof part?.text === 'string')
348
- .map((part) => part.text ?? '')
349
- .join('\n')
350
- .trimEnd();
351
- }
352
- function styledLabelValue(indent, marker, label, separator, value, theme) {
353
- const styledMarker = marker === '' ? '' : theme.fg('accent', marker);
354
- return `${indent}${styledMarker}${theme.fg('dim', label)}${theme.fg('dim', separator)}${theme.fg('text', value)}`;
355
- }
356
- function lineStyle(line, theme, preserveSyntax = false) {
357
- const trimmed = line.trim();
358
- if (trimmed === '')
359
- return '';
360
- if (/^<\/?(?:command|subcommand|runtime-state|crtr-[^>\s]+|error)(?:\s|>|$)/.test(trimmed)) {
361
- const color = trimmed.startsWith('<error') ? 'error' : 'accent';
362
- return theme.fg(color, theme.bold(line));
363
- }
364
- if (/^(Input|Output|Effects|Branches|Globals|Output \(|Effects$)/.test(trimmed)) {
365
- return theme.fg('toolTitle', theme.bold(line));
366
- }
367
- if (/^(Spawned|Created|Updated|Wrote|Deleted|Promoted|Demoted|Closed|Revived|Recycled|Configured|Registered|Removed|Subscribed|Unsubscribed|Canceled)\b/i.test(trimmed)) {
368
- return theme.fg('success', line);
369
- }
370
- if (/^(crtr:|Command exited|Command timed out|Command aborted|unknown subcommand|error\b)/i.test(trimmed)) {
371
- return theme.fg('error', line);
372
- }
373
- if (/^(warning|warn|blocked|attention)\b/i.test(trimmed) || trimmed.includes('⚠')) {
374
- return theme.fg('warning', line);
375
- }
376
- if (/^[●✓]/.test(trimmed))
377
- return theme.fg('success', line);
378
- if (/^[○◌]/.test(trimmed))
379
- return theme.fg('muted', line);
380
- if (/^[✗⊘]/.test(trimmed))
381
- return theme.fg('error', line);
382
- const bulletField = /^(\s*)-\s+([^:]+)(:\s*)(.*)$/.exec(line);
383
- if (bulletField !== null) {
384
- return styledLabelValue(bulletField[1], preserveSyntax ? '- ' : '• ', bulletField[2], bulletField[3], bulletField[4], theme);
385
- }
386
- const proseField = /^(\s*)\*\*([^*]+):\*\*(\s*)(.*)$/.exec(line);
387
- if (proseField !== null) {
388
- if (preserveSyntax) {
389
- return `${proseField[1]}${theme.fg('dim', '**')}${theme.fg('dim', proseField[2])}${theme.fg('dim', ':**')}${proseField[3]}${theme.fg('text', proseField[4])}`;
390
- }
391
- return styledLabelValue(proseField[1], '', proseField[2], `:${proseField[3]}`, proseField[4], theme);
392
- }
393
- if (/^\s*-\s+/.test(line)) {
394
- const match = /^(\s*)-\s+(.*)$/.exec(line);
395
- const marker = preserveSyntax ? '-' : '•';
396
- return `${match[1]}${theme.fg('accent', marker)} ${theme.fg('text', match[2])}`;
397
- }
398
- const countHeading = /^(\s*)(\d+\s+[^:]+:)$/.exec(line);
399
- if (countHeading !== null)
400
- return `${countHeading[1]}${theme.fg('toolTitle', theme.bold(countHeading[2]))}`;
401
- const next = /^(\s*)(Next:)(\s*)(.*)$/.exec(line);
402
- if (next !== null) {
403
- return `${next[1]}${theme.fg('accent', theme.bold(next[2]))}${next[3]}${theme.fg('text', next[4])}`;
404
- }
405
- const tree = /^(\s*)([├└│─┬┼┌┐┘└]+\s*)(.*)$/.exec(line);
406
- if (tree !== null)
407
- return `${tree[1]}${theme.fg('border', tree[2])}${theme.fg('text', tree[3])}`;
408
- return theme.fg('text', line);
409
- }
410
- export function renderCrtrOutputText(text, theme, preserveSyntax = false) {
411
- const body = text || '(no output)';
412
- return body.split('\n').map((line) => lineStyle(line, theme, preserveSyntax)).join('\n');
413
- }
414
- // Help preview synthesis
415
- //
416
- // A collapsed `-h` card must never just parrot the call header (the command
417
- // path, already shown by renderCall) or bottom out in a bare "(schema — ctrl+o
418
- // to expand)" with zero information. Instead it synthesizes a short,
419
- // human-useful slice straight out of the command's own rendered help text —
420
- // still the command's own words (rule 12: previews are command-owned content,
421
- // not generic renderer chrome), just the compact slice of it. Parsed directly
422
- // off the exact shapes renderRoot/renderBranch/renderLeafArgv produce
423
- // (src/core/help.ts) — text-only parsing (no import of help.ts/command.ts:
424
- // this file must stay bundle-safe, see preview-registry.ts's header) so it is
425
- // necessarily best-effort, not a real re-parse.
426
- /** A slash-command echo message's body is `$ crtr <argv>\n\n<schema>`
427
- * (see isHelpFromCrtrOutputContent below); strip that echo line + its
428
- * blank-line separator so synthesis always sees the bare schema, same as
429
- * the bash-card path where `text` already IS the bare schema. */
430
- function stripCrtrEchoPrefix(text) {
431
- if (!text.startsWith('$ '))
432
- return text;
433
- const nlIdx = text.indexOf('\n');
434
- if (nlIdx === -1)
435
- return '';
436
- const rest = text.slice(nlIdx + 1);
437
- return rest.startsWith('\n') ? rest.slice(1) : rest;
438
- }
439
- /** renderRoot emits one `<command name="X">` block per subtree with NO
440
- * description attribute; renderBranch emits exactly one `<command
441
- * name="X" description="Y">` block (always WITH the attribute) for the
442
- * branch itself. Leaf help (renderLeafArgv) never emits a `<command>` tag at
443
- * all. That structural difference is enough to tell all three apart from
444
- * the rendered text alone, with no shared type import. */
445
- function classifyHelpText(text) {
446
- const tag = /<command name="[^"]*"([^>]*)>/.exec(text);
447
- if (tag === null)
448
- return 'leaf';
449
- return /\bdescription="/.test(tag[1]) ? 'branch' : 'root';
450
- }
451
- /** Root help: a tagline, then one `<command name="X">\n<concept line>` block
452
- * per subtree (see renderRoot). Preview = tagline + `name — concept` per
453
- * subtree, in source order — the same information density as the root -h's
454
- * own orientation line, just one row per subtree instead of the full
455
- * useWhen/subcommand-listing/state detail. */
456
- function synthesizeRootPreview(text) {
457
- const firstTagIdx = text.indexOf('<command name="');
458
- const tagline = (firstTagIdx === -1 ? text : text.slice(0, firstTagIdx)).trim();
459
- const commands = [];
460
- const re = /<command name="([^"]*)">\n([^\n]*)/g;
461
- let m;
462
- while ((m = re.exec(text)) !== null)
463
- commands.push(`${m[1]} \u2014 ${m[2]}`);
464
- return [tagline, ...(commands.length > 0 ? ['', ...commands] : [])].join('\n');
465
- }
466
- /** Branch help: one `<command name="X" description="Y">` block, then one
467
- * self-closing `<subcommand name="..." description="..." whenToUse="..."/>`
468
- * per child (see renderBranch). Preview = `name — description` for the
469
- * branch itself, then the same for each subcommand — dropping whenToUse
470
- * (already the longest field) and any dynamicState/model prose, which is
471
- * exactly the detail ctrl+o exists to reveal. */
472
- function synthesizeBranchPreview(text) {
473
- const head = /^<command name="([^"]*)" description="([^"]*)">/.exec(text);
474
- const name = head?.[1] ?? '';
475
- const description = head?.[2] ?? '';
476
- const subs = [];
477
- const re = /<subcommand name="([^"]*)" description="([^"]*)"[^>]*\/>/g;
478
- let m;
479
- while ((m = re.exec(text)) !== null)
480
- subs.push(`${m[1]} \u2014 ${m[2]}`);
481
- return [`${name} \u2014 ${description}`, ...(subs.length > 0 ? ['', ...subs] : [])].join('\n');
482
- }
483
- /** Leaf help: `name: summary.` first line, then an `Input`-headed param block
484
- * (each row ` LABEL description...`, or one un-indented note line when the
485
- * leaf takes no params — see renderLeafArgv/paramLabel). Preview = the
486
- * summary line verbatim (already concise) plus a compact param-name roll-call
487
- * (or the note line) — never the per-param descriptions, Output, or
488
- * Effects sections, which is exactly the schema detail ctrl+o reveals. */
489
- function synthesizeLeafPreview(text) {
490
- const lines = text.split('\n');
491
- const out = [lines[0] ?? ''];
492
- const inputIdx = lines.indexOf('Input');
493
- if (inputIdx === -1)
494
- return out.join('\n');
495
- const outputIdx = lines.findIndex((l) => l.startsWith('Output ('));
496
- const end = outputIdx === -1 ? lines.length : outputIdx;
497
- const block = lines.slice(inputIdx + 1, end).filter((l) => l.trim() !== '');
498
- const paramNames = block.map((l) => /^\s{2}(\S+)/.exec(l)?.[1]);
499
- if (block.length > 0 && paramNames.every((n) => n !== undefined)) {
500
- out.push('', `Params: ${paramNames.join(', ')}`);
501
- }
502
- else if (block.length > 0) {
503
- // No param rows (renderLeafArgv's inputNote path) — the note is itself
504
- // already a one-line summary, e.g. "No input parameters."
505
- out.push('', block[0]);
506
- }
507
- return out.join('\n');
508
- }
509
- /** Synthesize a collapsed-preview body for any `-h` schema text, dispatching
510
- * on classifyHelpText. This is the ONLY place that turns raw help text into
511
- * preview prose — both the bash-card path (CrtrResultComponent) and the
512
- * slash-command echo path (CrtrOutputMessageComponent, via
513
- * stripCrtrEchoPrefix) route through it, so the two surfaces read the same
514
- * way. */
515
- function synthesizeHelpPreviewText(rawText) {
516
- const text = stripCrtrEchoPrefix(rawText);
517
- const kind = classifyHelpText(text);
518
- if (kind === 'root')
519
- return synthesizeRootPreview(text);
520
- if (kind === 'branch')
521
- return synthesizeBranchPreview(text);
522
- return synthesizeLeafPreview(text);
523
- }
524
- /** Style one summarizer-produced SummaryLine for terminal rendering: an
525
- * empty text stays blank (no color codes to wrap nothing in), otherwise the
526
- * tone maps straight to a theme color name \u2014 'plain' is the same
527
- * 'toolOutput' color the generic renderer's default line style uses,
528
- * everything else (success/error/warning/muted/accent) is already a real
529
- * theme color name used elsewhere in this file. */
530
- function renderSummaryLine(line, theme, lead = false) {
531
- if (line.text === '')
532
- return '';
533
- // The shared mutation grammar emits aligned `label : value` rows. Keep the
534
- // alignment, but establish hierarchy inside the row instead of painting the
535
- // whole receipt the same gray.
536
- const keyValue = /^(.*?)(\s*:\s{2})(.*)$/.exec(line.text);
537
- if (keyValue !== null && (line.tone === undefined || line.tone === 'plain')) {
538
- return `${theme.fg('dim', keyValue[1])}${theme.fg('dim', keyValue[2])}${theme.fg('text', keyValue[3])}`;
539
- }
540
- const tone = line.tone ?? 'plain';
541
- if (tone === 'muted')
542
- return theme.fg('muted', line.text);
543
- const color = tone === 'plain' ? 'text' : tone;
544
- const rendered = theme.fg(color, line.text);
545
- return lead && tone === 'plain' ? theme.bold(rendered) : rendered;
546
- }
547
- /** Only ever rendered for a running or failed call (see statusLines below): a
548
- * SUCCESSFUL call shows no body status line at all, so the success/help
549
- * branches would be dead here. */
550
- function statusLine(options, theme) {
551
- return options.isPartial ? theme.fg('warning', '⟳ crtr running') : theme.fg('error', '✗ crtr failed');
552
- }
553
- const DEFAULT_PREVIEW_STATE = { isHelp: false, suppressOutput: false };
554
- /** Collapsed previews are line-budgeted cards: a line wider than the pane is
555
- * clipped with an ellipsis so one long line can never blow the budget. */
556
- function clampRenderedLines(lines, width) {
557
- if (width <= 0)
558
- return lines.map(() => '');
559
- return lines.map((line) => truncateToWidth(line, width, '…'));
560
- }
561
- /** Expanded = raw truth, so every line wraps instead of clipping — an expanded
562
- * card has no line budget to protect and clipped output hides the very detail
563
- * the expansion was for (long paths, findings, stack frames). */
564
- function wrapRenderedLines(lines, width) {
565
- if (width <= 0)
566
- return lines.map(() => '');
567
- return lines.flatMap((line) => (line === '' ? [''] : wrapTextWithAnsi(line, width)));
568
- }
569
- const PI_TRUNCATION_MARKER = /^\[Showing lines \d+-\d+ of \d+ \([^)]+ limit\)\. Full output: .+\]$/;
570
- function isPiTruncationMarker(line) {
571
- return PI_TRUNCATION_MARKER.test(line.trim());
572
- }
573
- function splitGenericTableRow(line) {
574
- const trimmed = line.trim();
575
- if (!trimmed.includes('|'))
576
- return null;
577
- // GFM permits omitting either outer pipe (`name | version`, `--- | ---`);
578
- // only strip the ones actually present rather than requiring both.
579
- const body = trimmed.replace(/^\|/, '').replace(/\|$/, '');
580
- const cells = [];
581
- let current = '';
582
- let i = 0;
583
- while (i < body.length) {
584
- const ch = body[i];
585
- if (ch === '\\' && body[i + 1] === '|') {
586
- current += '|';
587
- i += 2;
588
- continue;
589
- }
590
- if (ch === '|') {
591
- cells.push(current.trim());
592
- current = '';
593
- i++;
594
- continue;
595
- }
596
- current += ch;
597
- i++;
598
- }
599
- cells.push(current.trim());
600
- return cells.length >= 2 ? cells : null;
601
- }
602
- function isTableSeparator(cells) {
603
- return cells.every((cell) => /^:?-{3,}:?$/.test(cell));
604
- }
605
- function hasEdgePipe(line) {
606
- const trimmed = line.trim();
607
- return trimmed.startsWith('|') || trimmed.endsWith('|');
608
- }
609
- function readGenericTableBlock(lines, start) {
610
- const first = splitGenericTableRow(lines[start]);
611
- if (first === null)
612
- return null;
613
- const rows = [first];
614
- let next = start + 1;
615
- while (next < lines.length) {
616
- const cells = splitGenericTableRow(lines[next]);
617
- if (cells === null || cells.length !== first.length)
618
- break;
619
- rows.push(cells);
620
- next++;
621
- }
622
- // A single matched row with no edge pipe at all (e.g. prose that happens
623
- // to contain one literal `|`, `warning: use x | y`) is too weak a signal
624
- // to treat as a table — a real GFM row omitting both edges only reads as
625
- // one when it's part of a multi-row block (header+separator, or several
626
- // consecutive same-shaped rows).
627
- if (rows.length === 1 && !hasEdgePipe(lines[start]))
628
- return null;
629
- const separatorIndex = rows.findIndex(isTableSeparator);
630
- if (separatorIndex === 1) {
631
- return { next, rows: [rows[0], ...rows.slice(2)], headerRows: 1 };
632
- }
633
- if (separatorIndex !== -1) {
634
- return { next, rows: rows.filter((_, i) => i !== separatorIndex), headerRows: 0 };
635
- }
636
- return { next, rows, headerRows: 0 };
637
- }
638
- function sum(nums) {
639
- return nums.reduce((acc, n) => acc + n, 0);
640
- }
641
- function tableColumnWidths(rows, width) {
642
- const columnCount = rows[0]?.length ?? 0;
643
- if (columnCount === 0)
644
- return [];
645
- const separatorWidth = Math.max(0, columnCount - 1) * 2;
646
- const available = Math.max(columnCount, width - separatorWidth);
647
- const minWidth = available >= columnCount * 3 ? 3 : 1;
648
- const widths = Array.from({ length: columnCount }, (_, col) => Math.max(1, ...rows.map((row) => visibleWidth(row[col] ?? ''))));
649
- while (sum(widths) > available) {
650
- let widest = -1;
651
- for (let i = 0; i < widths.length; i++) {
652
- if (widths[i] > minWidth && (widest === -1 || widths[i] > widths[widest]))
653
- widest = i;
654
- }
655
- if (widest === -1)
656
- break;
657
- widths[widest] = widths[widest] - 1;
658
- }
659
- return widths;
660
- }
661
- function padToVisibleWidth(text, width) {
662
- const missing = width - visibleWidth(text);
663
- return missing > 0 ? `${text}${' '.repeat(missing)}` : text;
664
- }
665
- function formatGenericTableRow(cells, widths) {
666
- return cells
667
- .map((cell, i) => padToVisibleWidth(truncateToWidth(cell, widths[i] ?? 1, '…'), widths[i] ?? 1))
668
- .join(' ')
669
- .trimEnd();
670
- }
671
- /** Collect the preview's logical lines. NO line budget and NO horizontal
672
- * clipping happens here: tables are grid-shaped so their cells are clipped to
673
- * their column width (wrapping a cell would break the grid), but ordinary text
674
- * lines are kept whole and wrapped later, where the budget is applied to the
675
- * resulting VISUAL lines (renderGenericPreview). Clipping a preview line would
676
- * hide content twice over — the card is already shortened vertically. */
677
- function collectGenericPreviewLines(text, width) {
678
- const sourceLines = (text || '(no output)').split('\n');
679
- const lines = [];
680
- const push = (line) => {
681
- lines.push(line);
682
- };
683
- let i = 0;
684
- while (i < sourceLines.length) {
685
- const table = readGenericTableBlock(sourceLines, i);
686
- if (table !== null) {
687
- const widths = tableColumnWidths(table.rows, width);
688
- for (let rowIndex = 0; rowIndex < table.rows.length; rowIndex++) {
689
- push({
690
- text: formatGenericTableRow(table.rows[rowIndex], widths),
691
- tone: rowIndex < table.headerRows ? 'accent' : undefined,
692
- });
693
- }
694
- i = table.next;
695
- continue;
696
- }
697
- const textLine = sourceLines[i];
698
- push({
699
- text: textLine,
700
- tone: isPiTruncationMarker(textLine) ? 'muted' : undefined,
701
- });
702
- i++;
703
- }
704
- return lines;
705
- }
706
- /** Style, wrap, then budget — the same order pi's own previews use
707
- * (truncateToVisualLines renders through a Text component first). The budget
708
- * counts VISUAL lines, so a wrapped long line costs what it actually occupies
709
- * and nothing is silently clipped off the right edge. */
710
- function renderGenericPreview(text, lineBudget, width, theme) {
711
- const styled = collectGenericPreviewLines(text, width).map((line) => line.tone !== undefined ? renderSummaryLine(line, theme, line.tone === 'accent') : lineStyle(line.text, theme));
712
- const visual = wrapRenderedLines(styled, width);
713
- if (visual.length <= lineBudget)
714
- return { lines: visual, skippedCount: 0 };
715
- return { lines: visual.slice(0, lineBudget), skippedCount: visual.length - lineBudget };
716
- }
717
- class CrtrResultComponent {
718
- text;
719
- options;
720
- context;
721
- theme;
722
- command;
723
- staticPreview;
724
- structuredPreview;
725
- constructor(text, options, context, theme,
726
- /** Source command for the preview lookup (the bash-call path). Omit (or
727
- * pass a static preview below) for a path with no per-leaf lookup, e.g.
728
- * CrtrOutputMessageComponent. */
729
- command, staticPreview = DEFAULT_PREVIEW_STATE, structuredPreview) {
730
- this.text = text;
731
- this.options = options;
732
- this.context = context;
733
- this.theme = theme;
734
- this.command = command;
735
- this.staticPreview = staticPreview;
736
- this.structuredPreview = structuredPreview;
737
- }
738
- /** Both isHelp and suppressOutput are synchronous structural lookups (see
739
- * commandPreviewMeta), so this never needs to invalidate/upgrade a later
740
- * paint — the first render already has the final answer. */
741
- currentPreview() {
742
- if (this.command === undefined)
743
- return this.staticPreview;
744
- return commandPreviewMeta(this.command);
745
- }
746
- render(width) {
747
- const preview = this.currentPreview();
748
- const isPartial = Boolean(this.options.isPartial);
749
- const isError = Boolean(this.context.isError);
750
- const isRunningOrFailed = isPartial || isError;
751
- // The body carries a status line ONLY while running or failed (⟳ running /
752
- // ✗ failed) — the states the call header never shows and where the detail
753
- // matters. A SUCCESSFUL call (help or normal) gets NO body status: the
754
- // header already named the command (<icon> crtr <path> / <icon> crtr help) and the
755
- // output speaks for itself, so a "✓ crtr done" line is pure noise.
756
- const statusLines = isRunningOrFailed ? [statusLine(this.options, this.theme)] : [];
757
- if (this.options.expanded) {
758
- // Expanded = raw truth (never redirect-/-h-stripped, never
759
- // synthesized): the exact command as invoked, plus the exact output,
760
- // still lineStyle-colored for readability but otherwise unmodified.
761
- const styled = renderCrtrOutputText(this.text, this.theme, true);
762
- const commandLine = this.command !== undefined
763
- ? [this.theme.fg('muted', `$ ${this.command}`), '']
764
- : [];
765
- return wrapRenderedLines(['', ...statusLines, ...commandLine, ...styled.split('\n')], width);
766
- }
767
- // Collapse order (rule 12, inline-ui-placement): help schema synthesis,
768
- // then a command-owned structured summary (summarizePath), then a bare
769
- // suppressOutput hint, then generic truncation. A still-RUNNING command
770
- // is always shown raw — there is nothing to summarize yet. Structured
771
- // errors can be summarized too; a result without a preview record retains
772
- // the exact generic raw fallback.
773
- // suppressOutput stays success-only (checked below): a failure is exactly
774
- // when a suppressed leaf's raw output becomes diagnostically important.
775
- if (!isPartial) {
776
- if (preview.isHelp) {
777
- // A collapsed -h card gets a synthesized preview of the schema (rule
778
- // 12), never the header's own path repeated and never the raw schema
779
- // dump — see synthesizeHelpPreviewText. A -h invocation is never
780
- // partial-or-failed in practice (the dispatcher renders the schema
781
- // unconditionally), so statusLines is effectively always [] here and
782
- // the body is JUST the preview content, no repeated help label.
783
- const styled = renderCrtrOutputText(synthesizeHelpPreviewText(this.text), this.theme);
784
- const truncated = truncateToVisualLines(styled, PREVIEW_BODY_BUDGET, width);
785
- const lines = truncated.visualLines ?? [];
786
- const hint = this.theme.fg('dim', '(schema — ctrl+o to expand)');
787
- return clampRenderedLines(['', ...statusLines, ...lines, hint], width);
788
- }
789
- const tokens = this.command !== undefined ? extractCrtrInvocationTokens(this.command) : undefined;
790
- const summary = tokens !== undefined && this.structuredPreview !== undefined
791
- ? summarizePath(this.structuredPreview, tokens)
792
- : null;
793
- if (summary !== null) {
794
- // A command-owned summary of the leaf's exact result object — never
795
- // a parse of its rendered payload.
796
- const firstContentIndex = summary.findIndex((line) => line.text !== '');
797
- const summaryLines = summary.map((line, index) => renderSummaryLine(line, this.theme, index === firstContentIndex));
798
- const truncated = truncateToVisualLines(summaryLines.join('\n'), PREVIEW_BODY_BUDGET, width);
799
- const lines = truncated.visualLines ?? [];
800
- const hint = this.theme.fg('dim', '(ctrl+o to expand)');
801
- return clampRenderedLines(['', ...statusLines, ...lines, hint], width);
802
- }
803
- if (!isError && preview.suppressOutput) {
804
- // suppressOutput leaves (command-owned, e.g. canvas snapshot) stay a
805
- // bare hint — the payload is a machine-readable dump with no useful
806
- // human slice to synthesize, unlike help text's structured shape.
807
- // Success-only: a failed run of a suppressed leaf still shows the raw
808
- // output below, since that is exactly when the detail matters.
809
- const hint = this.theme.fg('dim', '(suppressed — ctrl+o to expand)');
810
- return clampRenderedLines(['', ...statusLines, hint], width);
811
- }
812
- }
813
- const generic = renderGenericPreview(this.text, PREVIEW_BODY_BUDGET, width, this.theme);
814
- if (generic.skippedCount > 0) {
815
- const hint = this.theme.fg('dim', `… (${generic.skippedCount} more lines, ctrl+o to expand)`);
816
- return clampRenderedLines(['', ...statusLines, ...generic.lines, hint], width);
817
- }
818
- return clampRenderedLines(['', ...statusLines, ...generic.lines], width);
819
- }
820
- invalidate() { }
821
- }
822
- /** First-line convention from crtr-commands/index.ts's pi.sendMessage:
823
- * `$ crtr <argv>\n\n<output>`. Help-only here, never suppressOutput: this
824
- * path renders a slash-command's own static `$ crtr ...` echo, not a live
825
- * bash-call result keyed to a real leaf path, so there is no per-leaf
826
- * suppressOutput lookup to make. */
827
- function isHelpFromCrtrOutputContent(content) {
828
- const firstLine = content.split('\n', 1)[0];
829
- return firstLine.startsWith('$ ') && isCrtrHelpInvocation(firstLine.slice(2));
830
- }
831
- export class CrtrOutputMessageComponent extends Box {
832
- content;
833
- theme;
834
- body;
835
- expanded;
836
- constructor(content, expanded, theme) {
837
- super(1, 1, (text) => theme.bg('customMessageBg', text));
838
- this.content = content;
839
- this.theme = theme;
840
- this.expanded = expanded;
841
- const preview = { isHelp: isHelpFromCrtrOutputContent(content), suppressOutput: false };
842
- this.body = new CrtrResultComponent(content, { expanded }, {}, theme, undefined, preview);
843
- this.addChild(this.body);
844
- }
845
- setExpanded(expanded) {
846
- if (this.expanded === expanded)
847
- return;
848
- this.expanded = expanded;
849
- const preview = { isHelp: isHelpFromCrtrOutputContent(this.content), suppressOutput: false };
850
- this.body = new CrtrResultComponent(this.content, { expanded }, {}, this.theme, undefined, preview);
851
- this.clear();
852
- this.addChild(this.body);
853
- }
854
- }
855
- export function createCrtrBashToolDefinition(args, fold = new FoldedToolCallController()) {
856
- const command = commandFromArgs(args);
857
- if (!isCrtrBashCommand(command))
858
- return undefined;
859
- // The invocations' own result records, kept from the settled tool result so a
860
- // folded row can still state a fact the argv does not carry.
861
- let records = [];
862
- const observeResult = (result, isPartial) => {
863
- if (isPartial)
864
- return;
865
- records = crtrPreviewRecords(result);
866
- };
867
- const definition = {
868
- name: 'bash',
869
- label: 'bash',
870
- description: 'Render crtr bash output with crtr-specific chrome in the attach viewer.',
871
- parameters: {},
872
- renderCall(callArgs, theme, context) {
873
- const currentCommand = commandFromArgs(callArgs) || command;
874
- // Semantic card, not a bash echo: the header names what the invocation
875
- // IS (help schema vs. a crtr command), and the body previews only the
876
- // crtr segment's own path/args (extractCrtrInvocationTokens, -h/--help
877
- // stripped) — no leading `$`, no raw shell chrome (chained `&&`/`|`
878
- // siblings, env-var prefixes) leaking through.
879
- const tokens = extractCrtrInvocationTokens(currentCommand);
880
- const isHelp = tokens !== undefined && tokens.some((t) => t === '-h' || t === '--help');
881
- const pathTokens = (tokens ?? []).filter((t) => t !== '-h' && t !== '--help');
882
- const path = pathTokens.join(' ');
883
- const icon = isHelp ? HELP_ICON : iconForPath(pathTokens);
884
- const prefix = isHelp ? `${icon} crtr help` : `${icon} crtr`;
885
- const styledPrefix = theme.fg('accent', theme.bold(prefix));
886
- // A memory write/edit folds to its routing, not to its flag dump: the
887
- // fold is what the human scans, and these flags are the document's whole
888
- // reach.
889
- const routing = fold.folded && !isHelp ? memoryRouting(pathTokens, records) : undefined;
890
- if (routing !== undefined) {
891
- const named = routing.name === '' ? '' : ` ${theme.fg('toolTitle', theme.bold(routing.name))}`;
892
- const header = `${styledPrefix} ${theme.fg('toolTitle', theme.bold(routing.leaf))}${named}`;
893
- return fold.capture(new FoldedCrtrCallComponent(header, memoryRoutingFields(routing, theme)));
894
- }
895
- const styledPath = path
896
- ? ` ${fold.folded ? styleFoldedCrtrTokens(pathTokens, theme) : theme.fg('toolTitle', theme.bold(path))}`
897
- : '';
898
- return fold.capture(new Text(`${styledPrefix}${styledPath}`, 0, 0));
899
- },
900
- renderResult(result, options, theme, context) {
901
- return new CrtrResultComponent(resultText(result), options, context, theme, command, DEFAULT_PREVIEW_STATE, crtrPreviewRecords(result).at(-1));
902
- },
903
- };
904
- return { definition, observeResult };
905
- }
1
+ var X=Object.defineProperty;var c=(e,t)=>X(e,"name",{value:t,configurable:!0});import{truncateToVisualLines as O}from"@earendil-works/pi-coding-agent";import{Box as J,Text as Q,truncateToWidth as R,visibleWidth as T,wrapTextWithAnsi as v}from"@earendil-works/pi-tui";import{parse as tt,stringify as _}from"yaml";import{crtrPreviewRecords as A,HELP_ICON as et,iconForPath as nt,suppressOutputForPath as rt,summarizePath as st}from"../../../core/preview-registry.js";import{parseSurfaces as it}from"../../../core/substrate/schema.js";import{FoldedToolCallController as ot}from"./tool-calls.js";const ct=20,P=ct-3,L=/<<-?\s*(["']?)([A-Za-z_][A-Za-z0-9_]*)\1/g,W=/(?:^|[\n;&|()]\s*)(?:[A-Za-z_][A-Za-z0-9_]*=\S+\s+)*(?:[^\s;&|()]+\/)?(?:crtr|crouter)(?=\s|$)/,Xt="crtr-output";function F(e){const t=e.split(`
2
+ `),n=[];let r=0;for(;r<t.length;){const s=t[r];n.push(s),r++;const i=[];L.lastIndex=0;let o;for(;(o=L.exec(s))!==null;)i.push(o[2]);for(const u of i)for(;r<t.length;){const a=t[r].replace(/^\t+/,"");if(r++,a===u)break}}return n.join(`
3
+ `)}c(F,"stripHeredocBodies");function ut(e){return typeof e=="string"&&W.test(F(e))}c(ut,"isCrtrBashCommand");function y(e){const t=F(e),n=W.exec(t);if(n===null)return;const r=t.slice(n.index+n[0].length),s=r.search(/[\n;&|)]/),i=(s===-1?r:r.slice(0,s)).trim();return i===""?[]:lt(dt(i))}c(y,"extractCrtrInvocationTokens");const at=/^(?:\d*|&)(?:>>|<<|>|<)/;function lt(e){const t=e.findIndex(n=>at.test(n));return t===-1?e:e.slice(0,t)}c(lt,"dropRedirectTail");function dt(e){const t=[];let n="",r=!1,s=null;for(const i of e){if(s!==null){i===s?s=null:n+=i,r=!0;continue}if(i==='"'||i==="'"){s=i,r=!0;continue}if(/\s/.test(i)){r&&(t.push(n),n="",r=!1);continue}n+=i,r=!0}return r&&t.push(n),t}c(dt,"tokenizeShellSegment");function ft(e){if(typeof e!="string")return!1;const t=y(e);return t!==void 0&&t.some(n=>n==="-h"||n==="--help")}c(ft,"isCrtrHelpInvocation");function pt(e){const t=y(e);return{isHelp:t!==void 0&&t.some(r=>r==="-h"||r==="--help"),suppressOutput:t!==void 0&&t.length>0&&rt(t)}}c(pt,"commandPreviewMeta");function M(e){if(!e||typeof e!="object")return"";const t=e.command;return typeof t=="string"?t:""}c(M,"commandFromArgs");const C=/^-{1,2}[A-Za-z0-9]/,mt=/^(--?[A-Za-z0-9][^=]*)(=)(.*)$/,N=/^-?(?:\d+(?:\.\d+)?|\.\d+)$/,ht=new Set(["memory write","memory edit"]);function S(e,t){const n=`--${t}=`,r=[];return e.forEach((s,i)=>{if(s===`--${t}`){const o=e[i+1];o!==void 0&&!C.test(o)&&r.push(o);return}s.startsWith(n)&&r.push(s.slice(n.length))}),r}c(S,"crtrFlagValues");function E(e,t){return S(e,t)[0]}c(E,"crtrFlagValue");function j(e){try{return tt(e)}catch{return}}c(j,"parsedYaml");function gt(e){const t=j(e);return t===null||typeof t!="object"||Array.isArray(t)?e.trim():_(t,{collectionStyle:"flow",flowCollectionPadding:!1,lineWidth:0}).trim()}c(gt,"predicateText");function H(e){return _(e,{collectionStyle:"flow",flowCollectionPadding:!1,lineWidth:0}).trim()}c(H,"predicateValueText");function V(e,t){const n=e?.[t];return typeof n=="string"&&n!==""?n:void 0}c(V,"stringField");function xt(e,t){const n=e.slice(0,2).join(" ");if(!ht.has(n))return;const r=e[2]!==void 0&&!C.test(e[2])?e[2]:void 0,s=t.find(o=>o.path===n)?.result,i=E(e,"gate");return{leaf:n,name:V(s,"name")??r??"",scope:V(s,"scope")??E(e,"scope"),gate:i===void 0?void 0:gt(i),surfaces:it(S(e,"surface").map(j)),whenAndWhyToRead:E(e,"when-and-why-to-read")}}c(xt,"memoryRouting");function $t(e){return e==="content"?"warning":e==="preview"?"accent":"muted"}c($t,"rungTone");function bt(e,t){const n=[e.on];return e.match!==void 0&&n.push(e.match.join(" ")),e.matchFrontmatter!==void 0&&n.push(`match-frontmatter ${H(e.matchFrontmatter)}`),e.gate!==void 0&&n.push(`gate ${H(e.gate)}`),`${t.fg("text",n.join(" "))} ${t.fg("dim","at")} ${t.fg($t(e.at),e.at)}`}c(bt,"surfaceEntryText");const wt=" ";function Tt(e,t){const n=c(s=>t.fg("dim",s),"label"),r=[];return e.scope!==void 0&&r.push({label:n("scope"),values:[t.fg("text",e.scope)]}),e.gate!==void 0&&r.push({label:n("gate"),values:[t.fg("text",e.gate)]}),r.push({label:n("surface"),values:e.surfaces.length===0?[t.fg("muted","none")]:e.surfaces.map(s=>bt(s,t))}),e.whenAndWhyToRead!==void 0&&r.push({label:n("when-and-why-to-read"),values:[t.fg("text",e.whenAndWhyToRead)]}),r}c(Tt,"memoryRoutingFields");function yt(e,t){const n=`${wt}${e.label} `,r=T(n),s=" ".repeat(r),i=e.values.length>1?`${s} `:s,o=[];for(const u of e.values)v(u,Math.max(1,t-T(i))).forEach((l,d)=>{const f=d>0?i:o.length===0?n:s;o.push(`${f}${l}`)});return o}c(yt,"routingFieldLines");class Ct{static{c(this,"FoldedCrtrCallComponent")}header;fields;constructor(t,n){this.header=t,this.fields=n}invalidate(){}render(t){const n=v(this.header,Math.max(1,t));for(const r of this.fields)n.push(...yt(r,t));return n.map(r=>R(r,t,""))}}function Rt(e,t){let n=!1;return e.map(r=>{const s=mt.exec(r);if(s!==null){n=!1;const i=N.test(s[3])?"syntaxNumber":"syntaxString";return`${t.fg("syntaxKeyword",s[1])}${t.fg("syntaxOperator",s[2])}${t.fg(i,s[3])}`}return n&&!C.test(r)?(n=!1,t.fg(N.test(r)?"syntaxNumber":"syntaxString",r)):C.test(r)?(n=!0,t.fg("syntaxKeyword",r)):(n=!1,t.fg("toolTitle",t.bold(r)))}).join(" ")}c(Rt,"styleFoldedCrtrTokens");function vt(e){return(e.content??[]).filter(t=>t?.type==="text"||typeof t?.text=="string").map(t=>t.text??"").join(`
4
+ `).trimEnd()}c(vt,"resultText");function U(e,t,n,r,s,i){const o=t===""?"":i.fg("accent",t);return`${e}${o}${i.fg("dim",n)}${i.fg("dim",r)}${i.fg("text",s)}`}c(U,"styledLabelValue");function z(e,t,n=!1){const r=e.trim();if(r==="")return"";if(/^<\/?(?:command|subcommand|runtime-state|crtr-[^>\s]+|error)(?:\s|>|$)/.test(r)){const l=r.startsWith("<error")?"error":"accent";return t.fg(l,t.bold(e))}if(/^(Input|Output|Effects|Branches|Globals|Output \(|Effects$)/.test(r))return t.fg("toolTitle",t.bold(e));if(/^(Spawned|Created|Updated|Wrote|Deleted|Promoted|Demoted|Closed|Revived|Recycled|Configured|Registered|Removed|Subscribed|Unsubscribed|Canceled)\b/i.test(r))return t.fg("success",e);if(/^(crtr:|Command exited|Command timed out|Command aborted|unknown subcommand|error\b)/i.test(r))return t.fg("error",e);if(/^(warning|warn|blocked|attention)\b/i.test(r)||r.includes("\u26A0"))return t.fg("warning",e);if(/^[●✓]/.test(r))return t.fg("success",e);if(/^[○◌]/.test(r))return t.fg("muted",e);if(/^[✗⊘]/.test(r))return t.fg("error",e);const s=/^(\s*)-\s+([^:]+)(:\s*)(.*)$/.exec(e);if(s!==null)return U(s[1],n?"- ":"\u2022 ",s[2],s[3],s[4],t);const i=/^(\s*)\*\*([^*]+):\*\*(\s*)(.*)$/.exec(e);if(i!==null)return n?`${i[1]}${t.fg("dim","**")}${t.fg("dim",i[2])}${t.fg("dim",":**")}${i[3]}${t.fg("text",i[4])}`:U(i[1],"",i[2],`:${i[3]}`,i[4],t);if(/^\s*-\s+/.test(e)){const l=/^(\s*)-\s+(.*)$/.exec(e),d=n?"-":"\u2022";return`${l[1]}${t.fg("accent",d)} ${t.fg("text",l[2])}`}const o=/^(\s*)(\d+\s+[^:]+:)$/.exec(e);if(o!==null)return`${o[1]}${t.fg("toolTitle",t.bold(o[2]))}`;const u=/^(\s*)(Next:)(\s*)(.*)$/.exec(e);if(u!==null)return`${u[1]}${t.fg("accent",t.bold(u[2]))}${u[3]}${t.fg("text",u[4])}`;const a=/^(\s*)([├└│─┬┼┌┐┘└]+\s*)(.*)$/.exec(e);return a!==null?`${a[1]}${t.fg("border",a[2])}${t.fg("text",a[3])}`:t.fg("text",e)}c(z,"lineStyle");function B(e,t,n=!1){return(e||"(no output)").split(`
5
+ `).map(s=>z(s,t,n)).join(`
6
+ `)}c(B,"renderCrtrOutputText");function Pt(e){if(!e.startsWith("$ "))return e;const t=e.indexOf(`
7
+ `);if(t===-1)return"";const n=e.slice(t+1);return n.startsWith(`
8
+ `)?n.slice(1):n}c(Pt,"stripCrtrEchoPrefix");function Et(e){const t=/<command name="[^"]*"([^>]*)>/.exec(e);return t===null?"leaf":/\bdescription="/.test(t[1])?"branch":"root"}c(Et,"classifyHelpText");function It(e){const t=e.indexOf('<command name="'),n=(t===-1?e:e.slice(0,t)).trim(),r=[],s=/<command name="([^"]*)">\n([^\n]*)/g;let i;for(;(i=s.exec(e))!==null;)r.push(`${i[1]} \u2014 ${i[2]}`);return[n,...r.length>0?["",...r]:[]].join(`
9
+ `)}c(It,"synthesizeRootPreview");function Ot(e){const t=/^<command name="([^"]*)" description="([^"]*)">/.exec(e),n=t?.[1]??"",r=t?.[2]??"",s=[],i=/<subcommand name="([^"]*)" description="([^"]*)"[^>]*\/>/g;let o;for(;(o=i.exec(e))!==null;)s.push(`${o[1]} \u2014 ${o[2]}`);return[`${n} \u2014 ${r}`,...s.length>0?["",...s]:[]].join(`
10
+ `)}c(Ot,"synthesizeBranchPreview");function _t(e){const t=e.split(`
11
+ `),n=[t[0]??""],r=t.indexOf("Input");if(r===-1)return n.join(`
12
+ `);const s=t.findIndex(a=>a.startsWith("Output (")),i=s===-1?t.length:s,o=t.slice(r+1,i).filter(a=>a.trim()!==""),u=o.map(a=>/^\s{2}(\S+)/.exec(a)?.[1]);return o.length>0&&u.every(a=>a!==void 0)?n.push("",`Params: ${u.join(", ")}`):o.length>0&&n.push("",o[0]),n.join(`
13
+ `)}c(_t,"synthesizeLeafPreview");function At(e){const t=Pt(e),n=Et(t);return n==="root"?It(t):n==="branch"?Ot(t):_t(t)}c(At,"synthesizeHelpPreviewText");function D(e,t,n=!1){if(e.text==="")return"";const r=/^(.*?)(\s*:\s{2})(.*)$/.exec(e.text);if(r!==null&&(e.tone===void 0||e.tone==="plain"))return`${t.fg("dim",r[1])}${t.fg("dim",r[2])}${t.fg("text",r[3])}`;const s=e.tone??"plain";if(s==="muted")return t.fg("muted",e.text);const i=s==="plain"?"text":s,o=t.fg(i,e.text);return n&&s==="plain"?t.bold(o):o}c(D,"renderSummaryLine");function Lt(e,t){return e.isPartial?t.fg("warning","\u27F3 crtr running"):t.fg("error","\u2717 crtr failed")}c(Lt,"statusLine");const G={isHelp:!1,suppressOutput:!1};function $(e,t){return t<=0?e.map(()=>""):e.map(n=>R(n,t,"\u2026"))}c($,"clampRenderedLines");function k(e,t){return t<=0?e.map(()=>""):e.flatMap(n=>n===""?[""]:v(n,t))}c(k,"wrapRenderedLines");const Wt=/^\[Showing lines \d+-\d+ of \d+ \([^)]+ limit\)\. Full output: .+\]$/;function Ft(e){return Wt.test(e.trim())}c(Ft,"isPiTruncationMarker");function Y(e){const t=e.trim();if(!t.includes("|"))return null;const n=t.replace(/^\|/,"").replace(/\|$/,""),r=[];let s="",i=0;for(;i<n.length;){const o=n[i];if(o==="\\"&&n[i+1]==="|"){s+="|",i+=2;continue}if(o==="|"){r.push(s.trim()),s="",i++;continue}s+=o,i++}return r.push(s.trim()),r.length>=2?r:null}c(Y,"splitGenericTableRow");function Mt(e){return e.every(t=>/^:?-{3,}:?$/.test(t))}c(Mt,"isTableSeparator");function Nt(e){const t=e.trim();return t.startsWith("|")||t.endsWith("|")}c(Nt,"hasEdgePipe");function St(e,t){const n=Y(e[t]);if(n===null)return null;const r=[n];let s=t+1;for(;s<e.length;){const o=Y(e[s]);if(o===null||o.length!==n.length)break;r.push(o),s++}if(r.length===1&&!Nt(e[t]))return null;const i=r.findIndex(Mt);return i===1?{next:s,rows:[r[0],...r.slice(2)],headerRows:1}:i!==-1?{next:s,rows:r.filter((o,u)=>u!==i),headerRows:0}:{next:s,rows:r,headerRows:0}}c(St,"readGenericTableBlock");function jt(e){return e.reduce((t,n)=>t+n,0)}c(jt,"sum");function Ht(e,t){const n=e[0]?.length??0;if(n===0)return[];const r=Math.max(0,n-1)*2,s=Math.max(n,t-r),i=s>=n*3?3:1,o=Array.from({length:n},(u,a)=>Math.max(1,...e.map(l=>T(l[a]??""))));for(;jt(o)>s;){let u=-1;for(let a=0;a<o.length;a++)o[a]>i&&(u===-1||o[a]>o[u])&&(u=a);if(u===-1)break;o[u]=o[u]-1}return o}c(Ht,"tableColumnWidths");function Vt(e,t){const n=t-T(e);return n>0?`${e}${" ".repeat(n)}`:e}c(Vt,"padToVisibleWidth");function Ut(e,t){return e.map((n,r)=>Vt(R(n,t[r]??1,"\u2026"),t[r]??1)).join(" ").trimEnd()}c(Ut,"formatGenericTableRow");function zt(e,t){const n=(e||"(no output)").split(`
14
+ `),r=[],s=c(o=>{r.push(o)},"push");let i=0;for(;i<n.length;){const o=St(n,i);if(o!==null){const a=Ht(o.rows,t);for(let l=0;l<o.rows.length;l++)s({text:Ut(o.rows[l],a),tone:l<o.headerRows?"accent":void 0});i=o.next;continue}const u=n[i];s({text:u,tone:Ft(u)?"muted":void 0}),i++}return r}c(zt,"collectGenericPreviewLines");function Bt(e,t,n,r){const s=zt(e,n).map(o=>o.tone!==void 0?D(o,r,o.tone==="accent"):z(o.text,r)),i=k(s,n);return i.length<=t?{lines:i,skippedCount:0}:{lines:i.slice(0,t),skippedCount:i.length-t}}c(Bt,"renderGenericPreview");class I{static{c(this,"CrtrResultComponent")}text;options;context;theme;command;staticPreview;structuredPreview;constructor(t,n,r,s,i,o=G,u){this.text=t,this.options=n,this.context=r,this.theme=s,this.command=i,this.staticPreview=o,this.structuredPreview=u}currentPreview(){return this.command===void 0?this.staticPreview:pt(this.command)}render(t){const n=this.currentPreview(),r=!!this.options.isPartial,s=!!this.context.isError,o=r||s?[Lt(this.options,this.theme)]:[];if(this.options.expanded){const a=B(this.text,this.theme,!0),l=this.command!==void 0?[this.theme.fg("muted",`$ ${this.command}`),""]:[];return k(["",...o,...l,...a.split(`
15
+ `)],t)}if(!r){if(n.isHelp){const d=B(At(this.text),this.theme),p=O(d,P,t).visualLines??[],h=this.theme.fg("dim","(schema \u2014 ctrl+o to expand)");return $(["",...o,...p,h],t)}const a=this.command!==void 0?y(this.command):void 0,l=a!==void 0&&this.structuredPreview!==void 0?st(this.structuredPreview,a):null;if(l!==null){const d=l.findIndex(g=>g.text!==""),f=l.map((g,w)=>D(g,this.theme,w===d)),h=O(f.join(`
16
+ `),P,t).visualLines??[],b=this.theme.fg("dim","(ctrl+o to expand)");return $(["",...o,...h,b],t)}if(!s&&n.suppressOutput){const d=this.theme.fg("dim","(suppressed \u2014 ctrl+o to expand)");return $(["",...o,d],t)}}const u=Bt(this.text,P,t,this.theme);if(u.skippedCount>0){const a=this.theme.fg("dim",`\u2026 (${u.skippedCount} more lines, ctrl+o to expand)`);return $(["",...o,...u.lines,a],t)}return $(["",...o,...u.lines],t)}invalidate(){}}function Z(e){const t=e.split(`
17
+ `,1)[0];return t.startsWith("$ ")&&ft(t.slice(2))}c(Z,"isHelpFromCrtrOutputContent");class Jt extends J{static{c(this,"CrtrOutputMessageComponent")}content;theme;body;expanded;constructor(t,n,r){super(1,1,i=>r.bg("customMessageBg",i)),this.content=t,this.theme=r,this.expanded=n;const s={isHelp:Z(t),suppressOutput:!1};this.body=new I(t,{expanded:n},{},r,void 0,s),this.addChild(this.body)}setExpanded(t){if(this.expanded===t)return;this.expanded=t;const n={isHelp:Z(this.content),suppressOutput:!1};this.body=new I(this.content,{expanded:t},{},this.theme,void 0,n),this.clear(),this.addChild(this.body)}}function Qt(e,t=new ot){const n=M(e);if(!ut(n))return;let r=[];return{definition:{name:"bash",label:"bash",description:"Render crtr bash output with crtr-specific chrome in the attach viewer.",parameters:{},renderCall(o,u,a){const l=M(o)||n,d=y(l),f=d!==void 0&&d.some(m=>m==="-h"||m==="--help"),p=(d??[]).filter(m=>m!=="-h"&&m!=="--help"),h=p.join(" "),b=f?et:nt(p),g=f?`${b} crtr help`:`${b} crtr`,w=u.fg("accent",u.bold(g)),x=t.folded&&!f?xt(p,r):void 0;if(x!==void 0){const m=x.name===""?"":` ${u.fg("toolTitle",u.bold(x.name))}`,q=`${w} ${u.fg("toolTitle",u.bold(x.leaf))}${m}`;return t.capture(new Ct(q,Tt(x,u)))}const K=h?` ${t.folded?Rt(p,u):u.fg("toolTitle",u.bold(h))}`:"";return t.capture(new Q(`${w}${K}`,0,0))},renderResult(o,u,a,l){return new I(vt(o),u,l,a,n,G,A(o).at(-1))}},observeResult:c((o,u)=>{u||(r=A(o))},"observeResult")}}c(Qt,"createCrtrBashToolDefinition");export{Xt as CRTR_OUTPUT_CUSTOM_TYPE,Jt as CrtrOutputMessageComponent,pt as commandPreviewMeta,Qt as createCrtrBashToolDefinition,ut as isCrtrBashCommand,ft as isCrtrHelpInvocation,B as renderCrtrOutputText,F as stripHeredocBodies};