@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,235 +1,13 @@
1
- import { envNodeId, envProfileId } from '../../shared/env.js';
2
- import { dirname, join } from 'node:path';
3
- import { defineLeaf } from '../../core/command.js';
4
- import { usage } from '../../core/errors.js';
5
- import { docLinkNames } from '../../core/memory/doc-link-grammar.js';
6
- import { lintMemoryDocument, resolvableCanonicalNames } from '../../core/memory/lint.js';
7
- import { descendantStoreRoots } from '../../core/nested-stores.js';
8
- import { projectScopeRoots } from '../../core/scope.js';
9
- import { loadMemoryTargetView, openProjectMemoryStore } from '../../core/memory-resolver.js';
10
- import { parsedSubstrateSurfaces } from '../../core/substrate/frontmatter-validation.js';
11
- import { ensureDir, realpathOrSelf, walkFiles, writeText } from '../../core/fs-utils.js';
12
- import { associateRepository } from '../../core/memory/repository-association.js';
13
- import { appendHistoryRecord, buildHistoryRecord, historyLogPathFor, } from '../../core/memory/history.js';
14
- import { DOC_RATIONALE_CONSTRAINT, GUIDE_CANONICAL_NAMES, GUIDE_DOC_LINKS, GUIDE_PREDICATE_VOCABULARY, GUIDE_ROUTING_LINE, GUIDE_SURFACES, planNewDocumentPlacement, resolveWriteSelector, requireMountedStore, buildOrigin, coerceGate, coerceLintIgnore, coerceSurface, memoryExtensionCatalogForDoc, memoryExtensionFieldCatalogHelp, overlayParam, requireCanonicalName, selectorParam, parseRequestedExtensionChanges, applyExtensionChanges, serializeMemoryDoc, } from './shared.js';
15
- function emptyMemoryStore(memoryDir) {
16
- return walkFiles(memoryDir, (name) => name.endsWith('.md') && name !== 'SKILL.md', (name) => name === '.crouter').length === 0;
17
- }
18
- function hasWorkspaceFrontDoor(surfaces) {
19
- const workspaceOpen = surfaces.some((entry) => entry['on'] === 'workspace-open' && entry['at'] === 'content');
20
- const readEntry = surfaces.some((entry) => {
21
- if (entry['on'] !== 'read' || entry['at'] !== 'content')
22
- return false;
23
- const match = entry['match'];
24
- return match === './**' || (Array.isArray(match) && match.includes('./**'));
25
- });
26
- return workspaceOpen && readEntry;
27
- }
28
- // A topic's memory set stays usable only when authors treat cohesion as a creation
29
- // gate; otherwise small corrections accumulate as overlapping leaves whose routing
30
- // lines cannot tell a future reader which one owns the topic.
31
- export const writeLeaf = defineLeaf({
32
- name: 'write',
33
- description: 'create a memory document',
34
- whenToUse: 'you are recording a new knowledge document or preference that does not exist yet. Creation only — a name already taken at the resolved scope is an error, because revising a stored document goes through `crtr memory edit`, which requires a rationale and records the revision.',
35
- help: {
36
- name: 'memory write',
37
- summary: 'create a memory document at the resolved store from frontmatter flags + a stdin body',
38
- guide: 'Every frontmatter flag decides who sees this doc, when, and at what context cost. Each rung up is paid by every future agent at every boot or read, so default each rung down.\n\n' +
39
- 'Pick the kind. knowledge is consulted for facts or procedures; preference directs behavior. The kind choice is about how the doc is used, not about how long it is.\n\n' +
40
- 'Store reusable current truth, not session notes. Useful memories are non-obvious procedures, gotchas, durable preferences, and cross-repo conventions. Do not store chat summaries, implementation history, or facts already recorded in the repo.\n\n' +
41
- GUIDE_SURFACES + '\n\n' +
42
- 'Choose the scope. `project` is for facts any agent in one repo needs. `user` is for person-wide facts and preferences that should follow the user everywhere. `profile` is for the profile’s bundle of dirs: cross-repo conventions, how the pieces relate, or the user’s stance toward that body of work. `node` is scratch memory only this running node sees; it rides into this node’s knowledge block and dies with the node. When unsure, choose the narrowest scope that will still reach the next agent who needs it.\n\n' +
43
- 'A workspace front door is an ordinary doc carrying the entry pair {on: workspace-open, at: content} plus {on: read, match: "./**", at: content}: it enters first-message context when cwd/profile mounts its project store and fires on any file read beneath the store’s owning dir. Target the exact project with --dir. Keep only the project constraints, key commands, architecture orientation, and conventions that differ from defaults. `crtr memory lint` requires this front door on the repository-root guide for a repository managed by the selected profile; nested stores may carry ordinary guides without a missing-door finding.\n\n' +
44
- 'Choose the hook — boot vs read. A boot entry rides the boot catalog every agent sees; a read entry fires only when a matching file is actually read. Put code-specific knowledge in the owning project store, give it the narrowest real file glob, and keep it off boot when the file read is the useful trigger. Knowledge about a person or process usually has no file boundary, so skip read entries and route it through boot instead.\n\n' +
45
- 'Write the routing line (--when-and-why-to-read) first, before storing anything. ' + GUIDE_ROUTING_LINE + '\n\n' +
46
- GUIDE_PREDICATE_VOCABULARY + '\n\n' +
47
- GUIDE_CANONICAL_NAMES + '\n\n' +
48
- GUIDE_DOC_LINKS + '\n\n' +
49
- 'When a doc grows long or information-rich, nest it into a graph instead of letting it become a scroll. The main doc at the topic’s path keeps the high-level, most load-bearing information, most important first; depth splits into reference docs under the topic’s directory (`area/topic/...`), each pointed at with a `[[link]]`. Split by subject: a leaf earns its link by covering a different subject a task might need on its own; a leaf of offloaded “further evidence”, examples, or references is never followed, so supporting material either sits in the main doc next to the point it supports or gets cut. The main doc is the entry point a reader can act from alone; a reference leaf is loaded only when the task needs that depth. Give reference leaves no surfaces at all — the directory listing and the link from the main doc are how they are found, so any routing entry just double-charges every boot or read for depth the graph already routes. State each fact once. Keep facts that affect action or judgment, including constraints, exceptions, numbers, and exact names. Remove known context, inferable conclusions, filler transitions, and examples that resolve no ambiguity. `crtr memory lint` caps body length by delivery rung and its findings carry the split guidance.\n\n' +
50
- 'A directory needs no index doc: reading a directory name returns its listing — each member’s routing line — so never author a doc that merely lists, fronts, or paraphrases its siblings. Write a directory-level doc only for synthesis: an operating guide or the cluster’s mechanics, ordering, conditions, and relationships, content no single member can carry. Guided entrance into a topic is an ordinary member doc, found through the listing like any other.\n\n' +
51
- 'Find before write. Prefer slightly expanding an existing document with `crtr memory edit`, nesting genuinely separate depth under its topic, and updating the existing `when-and-why-to-read` (plus its INDEX router when present) over creating another similar memory. A new document earns its own identity only when it has a distinct read trigger and a coherent body whose merge into the existing document would make it harder to route or use. Group related docs with path names (area/topic). Provenance is stamped here and preserved by every later revision.\n\n' +
52
- 'This leaf validates the document it just wrote and reports any finding; a silent result means it is clean, so there is nothing to run afterwards. The check is scoped to this one document — `crtr memory lint` remains the corpus-wide sweep, and only it catches store-level faults such as a canonical collision or a missing workspace front door.\n\n' +
53
- '--rationale is the gap this doc exists to close — the observed agent failure that prompted it, captured from user signal (a correction, a mistake you watched happen) rather than inferred from the doc’s own content. If the rationale is guessable from reading the doc, it is not the real one — a guessable gap is one agents do not actually fall into. Omit the flag when you have no observed gap to record.\n\n' +
54
- 'Revise an existing doc with `crtr memory edit`.',
55
- params: [
56
- { kind: 'positional', name: 'name', required: true, constraint: 'Full canonical identity. Project writes require `<namespace>/<local name>`; writing the namespace itself targets the repository-root document. A trailing `/INDEX` is invalid because directory documents answer at the directory name. The identity must be free in the selected exact store.' },
57
- overlayParam('kind', { required: true }),
58
- overlayParam('when-and-why-to-read', { required: true }),
59
- overlayParam('short-form'),
60
- overlayParam('unlisted'),
61
- overlayParam('surface'),
62
- overlayParam('gate'),
63
- overlayParam('lint-ignore'),
64
- overlayParam('slash'),
65
- { kind: 'flag', name: 'rationale', type: 'string', required: false, constraint: DOC_RATIONALE_CONSTRAINT },
66
- { kind: 'flag', name: 'extension', type: 'string', required: false, repeatable: true, constraint: 'Set one declared plugin field as `extensions.<plugin>.<field>=VALUE`. The path is required in full; booleans accept only true or false, numbers require finite numeric syntax, and strings/enums preserve the literal text after the first =. Every requested field validates before the document is written.' },
67
- selectorParam('scope-write'),
68
- selectorParam('dir'),
69
- selectorParam('profile'),
70
- { kind: 'stdin', name: 'body', required: true, constraint: 'Document body (markdown, no frontmatter). Piped on stdin only — this leaf already claims the one positional for NAME, so a second bare argv token is rejected, not silently accepted as the body.' },
71
- ],
72
- output: [
73
- { name: 'name', type: 'string', required: true, constraint: 'The full canonical document name written — the resolved identity, which composes a namespace onto the name you passed when the store declares one.' },
74
- { name: 'scope', type: 'string', required: true, constraint: 'Scope the document was written to: user, project, profile, or node. The selector rules decide this, so it is the one placement fact the invocation does not already state.' },
75
- { name: 'path', type: 'string', required: true, constraint: 'Absolute path to the written document.' },
76
- { name: 'findings', type: 'object[]', required: false, constraint: 'Authoring problems in the document just written, each {severity, rule, message}. ABSENT when the document is clean, which is the normal case — a silent result means it validated. Covers every rule that reads one document: yaml, schema, extension, length, short-preview, local-name, namespace-placement, root-name, nested-store-boot, broad-memory-read, and a workspace front door on a non-root doc. Reference rules (dangling-link, memory-read-route) run only when the document actually carries a `[[link]]` or a memory-read route. The document is written either way: a finding reports what to revise with `crtr memory edit`, it does not mean the write failed.' },
77
- ],
78
- outputKind: 'object',
79
- dynamicState: () => memoryExtensionFieldCatalogHelp('write'),
80
- effects: [
81
- 'Creates the selected physical memory document with the given frontmatter fields + stdin body, and opens its mirrored `.history` sidecar with a `create` record. An empty repository-root store is initialized at its root namespace only when the ordinary workspace front door surfaces are supplied.'
82
- ],
83
- },
84
- run: async (input) => {
85
- const name = input['name'];
86
- const kind = input['kind'];
87
- const scopeArg = input['scope'];
88
- const profileArg = input['profile'];
89
- const body = input['body'] ?? '';
90
- const dirArg = input['dir'];
91
- const selector = resolveWriteSelector({ scope: scopeArg, profile: profileArg, dir: dirArg });
92
- const { scope, memoryDir, store } = selector;
93
- let initializing = false;
94
- if (scope === 'project' && store.mountStatus !== 'ready' && dirArg !== undefined && emptyMemoryStore(memoryDir)) {
95
- const association = associateRepository(realpathOrSelf(dirArg));
96
- if (association.ok) {
97
- if (association.association.ownerRelativePath !== '') {
98
- throw usage(`${dirArg} is a nested store in the repository rooted at ${association.association.repositoryRoot}; only the repository root declares a namespace`, {
99
- next: 'crtr memory write <namespace> --dir <repositoryRoot>, or crtr sys migrate --dir <repositoryRoot>',
100
- });
101
- }
102
- initializing = true;
103
- }
104
- else if (association.code === 'no-project-root') {
105
- initializing = true;
106
- }
107
- }
108
- if (scope === 'project' && store.mountStatus !== 'ready' && !initializing)
109
- requireMountedStore(store);
110
- let canonicalName;
111
- let path;
112
- if (initializing) {
113
- canonicalName = requireCanonicalName(name);
114
- path = join(memoryDir, 'INDEX.md');
115
- }
116
- else {
117
- const placement = planNewDocumentPlacement(store, name);
118
- canonicalName = placement.canonicalName;
119
- path = placement.path;
120
- }
121
- const lintIgnore = coerceLintIgnore(input['lintIgnore']);
122
- const extensionChanges = parseRequestedExtensionChanges(input['extension'], undefined, memoryExtensionCatalogForDoc({ scope, path }));
123
- const frontmatter = {};
124
- frontmatter['kind'] = kind;
125
- if (initializing)
126
- frontmatter['namespace'] = canonicalName;
127
- // Provenance is runtime-stamped ONCE, here — who/when/where authored this
128
- // doc. Every later revision preserves it, so it always points at the
129
- // conversation that created the doc, not the last one to touch it.
130
- // `crtr memory origin <name>` derefs it.
131
- const origin = buildOrigin();
132
- frontmatter['origin'] = origin;
133
- const setIf = (key, value) => {
134
- if (value !== undefined)
135
- frontmatter[key] = value;
136
- };
137
- setIf('when-and-why-to-read', input['whenAndWhyToRead']);
138
- setIf('short-form', input['shortForm']);
139
- if (input['unlisted'] === true)
140
- frontmatter['unlisted'] = true;
141
- if (input['surface'] !== undefined) {
142
- frontmatter['surfaces'] = input['surface'].map(coerceSurface);
143
- }
144
- if (input['gate'] !== undefined)
145
- frontmatter['gate'] = coerceGate(input['gate']);
146
- setIf('lint-ignore', lintIgnore);
147
- if (input['slash'] === true)
148
- frontmatter['slash'] = true;
149
- setIf('rationale', input['rationale']);
150
- applyExtensionChanges(frontmatter, extensionChanges.sets, extensionChanges.unsets);
151
- // One field consumers read for recency, live from the first byte.
152
- frontmatter['last-updated'] = origin['created'];
153
- // A workspace-open entry fires only when cwd/profile mounts the doc's
154
- // project store, so outside project scope it is a dead route — reject it
155
- // at authoring time.
156
- const surfacesVal = frontmatter['surfaces'];
157
- if (scope !== 'project' &&
158
- Array.isArray(surfacesVal) &&
159
- surfacesVal.some((e) => e !== null && typeof e === 'object' && e['on'] === 'workspace-open')) {
160
- throw usage('a workspace-open surfaces entry is a project-store mount route; user, profile, and node memory cannot carry one — drop the entry or write to a project store');
161
- }
162
- if (initializing) {
163
- const surfaces = Array.isArray(surfacesVal) ? surfacesVal.filter((entry) => entry !== null && typeof entry === 'object') : [];
164
- if (!hasWorkspaceFrontDoor(surfaces)) {
165
- throw usage('empty project initialization requires the ordinary workspace front door: --surface \'{on: workspace-open, at: content}\' and --surface \'{on: read, match: "./**", at: content}\'', {
166
- memory: canonicalName,
167
- next: `Pass both front-door surfaces when initializing ${canonicalName} with --dir.`,
168
- });
169
- }
170
- }
171
- const after = serializeMemoryDoc(frontmatter, body);
172
- ensureDir(memoryDir);
173
- writeText(path, after);
174
- const logPath = historyLogPathFor(memoryDir, path);
175
- appendHistoryRecord(logPath, buildHistoryRecord({ op: 'create', before: '', after }));
176
- // Validate what was just authored, here, rather than returning a follow_up
177
- // asking the author to go run lint — an obligation every write carries is
178
- // the command's job, not a decision to hand back. Scoped to this one
179
- // document: a corpus-wide sweep would surface unrelated findings from other
180
- // docs on every write, which teaches an author to ignore the output.
181
- //
182
- // Each rule that needs an index beyond this file is paid for ONLY when the
183
- // document can actually trip it. Reference resolution needs every canonical
184
- // name in the view — seconds on a large corpus — so it is bought only when
185
- // the doc carries a reference; nested-store detection walks the project
186
- // roots, so it is bought only when the doc carries a boot entry.
187
- const surfaceEntries = parsedSubstrateSurfaces(frontmatter);
188
- const carriesReference = docLinkNames(body).length > 0 || surfaceEntries.some((entry) => entry.on === 'memory-read');
189
- const carriesBootEntry = surfaceEntries.some((entry) => entry.on === 'boot');
190
- // Initializing created the root declaration after selector resolution, so
191
- // validate against a freshly described store: the stale descriptor has no
192
- // repository-root association yet and would reject its valid namespace.
193
- const lintStore = initializing ? openProjectMemoryStore(store.ownerDir ?? dirname(dirname(memoryDir))) : store;
194
- const lint = lintMemoryDocument(lintStore, path, {
195
- ...(carriesReference
196
- ? {
197
- resolvable: resolvableCanonicalNames(loadMemoryTargetView({
198
- cwd: store.ownerDir ?? process.cwd(),
199
- profileId: envProfileId() || null,
200
- nodeId: envNodeId() || null,
201
- }, { quiet: true, includeDescendants: true }).docs),
202
- }
203
- : {}),
204
- ...(carriesBootEntry
205
- ? {
206
- nestedStore: descendantStoreRoots(projectScopeRoots(process.cwd(), envProfileId() || null))
207
- .map((root) => realpathOrSelf(join(root, 'memory')))
208
- .includes(realpathOrSelf(memoryDir)),
209
- }
210
- : {}),
211
- });
212
- // Findings ride the RESULT only. `memory lint` also streams them to stderr
213
- // because it walks hundreds of files and the stream is progress; one
214
- // document has no progress to report, and an agent that captures 2>&1
215
- // would pay for every finding twice.
216
- // The result confirms only what the caller could not already know: the
217
- // resolved identity, where the selector rules put it, and anything wrong
218
- // with what they just wrote. Echoing back the frontmatter flags just spent
219
- // charges the author a second time for text they typed one call ago.
220
- return {
221
- name: canonicalName,
222
- scope,
223
- path,
224
- ...(lint.findings.length === 0
225
- ? {}
226
- : {
227
- findings: lint.findings.map((finding) => ({
228
- severity: finding.severity,
229
- rule: finding.rule,
230
- message: finding.message,
231
- })),
232
- }),
233
- };
234
- },
235
- });
1
+ var U=Object.defineProperty;var h=(t,r)=>U(t,"name",{value:r,configurable:!0});import{envNodeId as _,envProfileId as D}from"../../shared/env.js";import{dirname as q,join as N}from"node:path";import{defineLeaf as G}from"../../core/command.js";import{usage as b}from"../../core/errors.js";import{docLinkNames as F}from"../../core/memory/doc-link-grammar.js";import{lintMemoryDocument as M,resolvableCanonicalNames as W}from"../../core/memory/lint.js";import{descendantStoreRoots as K}from"../../core/nested-stores.js";import{projectScopeRoots as z}from"../../core/scope.js";import{loadMemoryTargetView as V,openProjectMemoryStore as B}from"../../core/memory-resolver.js";import{parsedSubstrateSurfaces as H}from"../../core/substrate/frontmatter-validation.js";import{ensureDir as X,realpathOrSelf as v,walkFiles as $,writeText as Y}from"../../core/fs-utils.js";import{associateRepository as J}from"../../core/memory/repository-association.js";import{appendHistoryRecord as Q,buildHistoryRecord as Z,historyLogPathFor as ee}from"../../core/memory/history.js";import{DOC_RATIONALE_CONSTRAINT as te,GUIDE_CANONICAL_NAMES as oe,GUIDE_DOC_LINKS as re,GUIDE_PREDICATE_VOCABULARY as ne,GUIDE_ROUTING_LINE as ae,GUIDE_SURFACES as ie,planNewDocumentPlacement as se,resolveWriteSelector as ce,requireMountedStore as de,buildOrigin as le,coerceGate as he,coerceLintIgnore as me,coerceSurface as ue,memoryExtensionCatalogForDoc as pe,memoryExtensionFieldCatalogHelp as fe,overlayParam as a,requireCanonicalName as ye,selectorParam as k,parseRequestedExtensionChanges as ge,applyExtensionChanges as we,serializeMemoryDoc as be}from"./shared.js";function ve(t){return $(t,r=>r.endsWith(".md")&&r!=="SKILL.md",r=>r===".crouter").length===0}h(ve,"emptyMemoryStore");function ke(t){const r=t.some(n=>n.on==="workspace-open"&&n.at==="content"),w=t.some(n=>{if(n.on!=="read"||n.at!=="content")return!1;const m=n.match;return m==="./**"||Array.isArray(m)&&m.includes("./**")});return r&&w}h(ke,"hasWorkspaceFrontDoor");const Ue=G({name:"write",description:"create a memory document",whenToUse:"you are recording a new knowledge document or preference that does not exist yet. Creation only \u2014 a name already taken at the resolved scope is an error, because revising a stored document goes through `crtr memory edit`, which requires a rationale and records the revision.",help:{name:"memory write",summary:"create a memory document at the resolved store from frontmatter flags + a stdin body",guide:`Every frontmatter flag decides who sees this doc, when, and at what context cost. Each rung up is paid by every future agent at every boot or read, so default each rung down.
2
+
3
+ Pick the kind. knowledge is consulted for facts or procedures; preference directs behavior. The kind choice is about how the doc is used, not about how long it is.
4
+
5
+ Store reusable current truth, not session notes. Useful memories are non-obvious procedures, gotchas, durable preferences, and cross-repo conventions. Do not store chat summaries, implementation history, or facts already recorded in the repo.
6
+
7
+ `+ie+'\n\nChoose the scope. `project` is for facts any agent in one repo needs. `user` is for person-wide facts and preferences that should follow the user everywhere. `profile` is for the profile\u2019s bundle of dirs: cross-repo conventions, how the pieces relate, or the user\u2019s stance toward that body of work. `node` is scratch memory only this running node sees; it rides into this node\u2019s knowledge block and dies with the node. When unsure, choose the narrowest scope that will still reach the next agent who needs it.\n\nA workspace front door is an ordinary doc carrying the entry pair {on: workspace-open, at: content} plus {on: read, match: "./**", at: content}: it enters first-message context when cwd/profile mounts its project store and fires on any file read beneath the store\u2019s owning dir. Target the exact project with --dir. Keep only the project constraints, key commands, architecture orientation, and conventions that differ from defaults. `crtr memory lint` requires this front door on the repository-root guide for a repository managed by the selected profile; nested stores may carry ordinary guides without a missing-door finding.\n\nChoose the hook \u2014 boot vs read. A boot entry rides the boot catalog every agent sees; a read entry fires only when a matching file is actually read. Put code-specific knowledge in the owning project store, give it the narrowest real file glob, and keep it off boot when the file read is the useful trigger. Knowledge about a person or process usually has no file boundary, so skip read entries and route it through boot instead.\n\nWrite the routing line (--when-and-why-to-read) first, before storing anything. '+ae+`
8
+
9
+ `+ne+`
10
+
11
+ `+oe+`
12
+
13
+ `+re+"\n\nWhen a doc grows long or information-rich, nest it into a graph instead of letting it become a scroll. The main doc at the topic\u2019s path keeps the high-level, most load-bearing information, most important first; depth splits into reference docs under the topic\u2019s directory (`area/topic/...`), each pointed at with a `[[link]]`. Split by subject: a leaf earns its link by covering a different subject a task might need on its own; a leaf of offloaded \u201Cfurther evidence\u201D, examples, or references is never followed, so supporting material either sits in the main doc next to the point it supports or gets cut. The main doc is the entry point a reader can act from alone; a reference leaf is loaded only when the task needs that depth. Give reference leaves no surfaces at all \u2014 the directory listing and the link from the main doc are how they are found, so any routing entry just double-charges every boot or read for depth the graph already routes. State each fact once. Keep facts that affect action or judgment, including constraints, exceptions, numbers, and exact names. Remove known context, inferable conclusions, filler transitions, and examples that resolve no ambiguity. `crtr memory lint` caps body length by delivery rung and its findings carry the split guidance.\n\nA directory needs no index doc: reading a directory name returns its listing \u2014 each member\u2019s routing line \u2014 so never author a doc that merely lists, fronts, or paraphrases its siblings. Write a directory-level doc only for synthesis: an operating guide or the cluster\u2019s mechanics, ordering, conditions, and relationships, content no single member can carry. Guided entrance into a topic is an ordinary member doc, found through the listing like any other.\n\nFind before write. Prefer slightly expanding an existing document with `crtr memory edit`, nesting genuinely separate depth under its topic, and updating the existing `when-and-why-to-read` (plus its INDEX router when present) over creating another similar memory. A new document earns its own identity only when it has a distinct read trigger and a coherent body whose merge into the existing document would make it harder to route or use. Group related docs with path names (area/topic). Provenance is stamped here and preserved by every later revision.\n\nThis leaf validates the document it just wrote and reports any finding; a silent result means it is clean, so there is nothing to run afterwards. The check is scoped to this one document \u2014 `crtr memory lint` remains the corpus-wide sweep, and only it catches store-level faults such as a canonical collision or a missing workspace front door.\n\n--rationale is the gap this doc exists to close \u2014 the observed agent failure that prompted it, captured from user signal (a correction, a mistake you watched happen) rather than inferred from the doc\u2019s own content. If the rationale is guessable from reading the doc, it is not the real one \u2014 a guessable gap is one agents do not actually fall into. Omit the flag when you have no observed gap to record.\n\nRevise an existing doc with `crtr memory edit`.",params:[{kind:"positional",name:"name",required:!0,constraint:"Full canonical identity. Project writes require `<namespace>/<local name>`; writing the namespace itself targets the repository-root document. A trailing `/INDEX` is invalid because directory documents answer at the directory name. The identity must be free in the selected exact store."},a("kind",{required:!0}),a("when-and-why-to-read",{required:!0}),a("short-form"),a("unlisted"),a("surface"),a("gate"),a("lint-ignore"),a("slash"),{kind:"flag",name:"rationale",type:"string",required:!1,constraint:te},{kind:"flag",name:"extension",type:"string",required:!1,repeatable:!0,constraint:"Set one declared plugin field as `extensions.<plugin>.<field>=VALUE`. The path is required in full; booleans accept only true or false, numbers require finite numeric syntax, and strings/enums preserve the literal text after the first =. Every requested field validates before the document is written."},k("scope-write"),k("dir"),k("profile"),{kind:"stdin",name:"body",required:!0,constraint:"Document body (markdown, no frontmatter). Piped on stdin only \u2014 this leaf already claims the one positional for NAME, so a second bare argv token is rejected, not silently accepted as the body."}],output:[{name:"name",type:"string",required:!0,constraint:"The full canonical document name written \u2014 the resolved identity, which composes a namespace onto the name you passed when the store declares one."},{name:"scope",type:"string",required:!0,constraint:"Scope the document was written to: user, project, profile, or node. The selector rules decide this, so it is the one placement fact the invocation does not already state."},{name:"path",type:"string",required:!0,constraint:"Absolute path to the written document."},{name:"findings",type:"object[]",required:!1,constraint:"Authoring problems in the document just written, each {severity, rule, message}. ABSENT when the document is clean, which is the normal case \u2014 a silent result means it validated. Covers every rule that reads one document: yaml, schema, extension, length, short-preview, local-name, namespace-placement, root-name, nested-store-boot, broad-memory-read, and a workspace front door on a non-root doc. Reference rules (dangling-link, memory-read-route) run only when the document actually carries a `[[link]]` or a memory-read route. The document is written either way: a finding reports what to revise with `crtr memory edit`, it does not mean the write failed."}],outputKind:"object",dynamicState:h(()=>fe("write"),"dynamicState"),effects:["Creates the selected physical memory document with the given frontmatter fields + stdin body, and opens its mirrored `.history` sidecar with a `create` record. An empty repository-root store is initialized at its root namespace only when the ordinary workspace front door surfaces are supplied."]},run:h(async t=>{const r=t.name,w=t.kind,n=t.scope,m=t.profile,x=t.body??"",f=t.dir,R=ce({scope:n,profile:m,dir:f}),{scope:u,memoryDir:d,store:i}=R;let s=!1;if(u==="project"&&i.mountStatus!=="ready"&&f!==void 0&&ve(d)){const e=J(v(f));if(e.ok){if(e.association.ownerRelativePath!=="")throw b(`${f} is a nested store in the repository rooted at ${e.association.repositoryRoot}; only the repository root declares a namespace`,{next:"crtr memory write <namespace> --dir <repositoryRoot>, or crtr sys migrate --dir <repositoryRoot>"});s=!0}else e.code==="no-project-root"&&(s=!0)}u==="project"&&i.mountStatus!=="ready"&&!s&&de(i);let l,c;if(s)l=ye(r),c=N(d,"INDEX.md");else{const e=se(i,r);l=e.canonicalName,c=e.path}const T=me(t.lintIgnore),A=ge(t.extension,void 0,pe({scope:u,path:c})),o={};o.kind=w,s&&(o.namespace=l);const j=le();o.origin=j;const y=h((e,p)=>{p!==void 0&&(o[e]=p)},"setIf");y("when-and-why-to-read",t.whenAndWhyToRead),y("short-form",t.shortForm),t.unlisted===!0&&(o.unlisted=!0),t.surface!==void 0&&(o.surfaces=t.surface.map(ue)),t.gate!==void 0&&(o.gate=he(t.gate)),y("lint-ignore",T),t.slash===!0&&(o.slash=!0),y("rationale",t.rationale),we(o,A.sets,A.unsets),o["last-updated"]=j.created;const g=o.surfaces;if(u!=="project"&&Array.isArray(g)&&g.some(e=>e!==null&&typeof e=="object"&&e.on==="workspace-open"))throw b("a workspace-open surfaces entry is a project-store mount route; user, profile, and node memory cannot carry one \u2014 drop the entry or write to a project store");if(s){const e=Array.isArray(g)?g.filter(p=>p!==null&&typeof p=="object"):[];if(!ke(e))throw b(`empty project initialization requires the ordinary workspace front door: --surface '{on: workspace-open, at: content}' and --surface '{on: read, match: "./**", at: content}'`,{memory:l,next:`Pass both front-door surfaces when initializing ${l} with --dir.`})}const E=be(o,x);X(d),Y(c,E);const C=ee(d,c);Q(C,Z({op:"create",before:"",after:E}));const S=H(o),P=F(x).length>0||S.some(e=>e.on==="memory-read"),L=S.some(e=>e.on==="boot"),O=s?B(i.ownerDir??q(q(d))):i,I=M(O,c,{...P?{resolvable:W(V({cwd:i.ownerDir??process.cwd(),profileId:D()||null,nodeId:_()||null},{quiet:!0,includeDescendants:!0}).docs)}:{},...L?{nestedStore:K(z(process.cwd(),D()||null)).map(e=>v(N(e,"memory"))).includes(v(d))}:{}});return{name:l,scope:u,path:c,...I.findings.length===0?{}:{findings:I.findings.map(e=>({severity:e.severity,rule:e.rule,message:e.message}))}}},"run")});export{Ue as writeLeaf};
@@ -1,30 +1 @@
1
- // `crtr memory` subtree — the document substrate (knowledge and preferences)
2
- // accessed via the CLI. Flat leaves: list, read, find, write, edit, move,
3
- // history, delete, origin, lint.
4
- import { defineBranch } from '../core/command.js';
5
- import { listLeaf } from './memory/list.js';
6
- import { readLeaf } from './memory/read.js';
7
- import { findLeaf } from './memory/find.js';
8
- import { writeLeaf } from './memory/write.js';
9
- import { editLeaf } from './memory/edit.js';
10
- import { moveLeaf } from './memory/move.js';
11
- import { historyLeaf } from './memory/history.js';
12
- import { deleteLeaf } from './memory/delete.js';
13
- import { originLeaf } from './memory/origin.js';
14
- import { lintLeaf } from './memory/lint.js';
15
- export function registerMemory() {
16
- return defineBranch({
17
- name: 'memory',
18
- rootEntry: {
19
- concept: 'a memory document you read on demand — knowledge or a preference',
20
- desc: 'list, read, search, and write memory documents',
21
- useWhen: 'durable knowledge and preferences shared across nodes and sessions — use when prior guidance may apply to the current task, or when a non-obvious reusable truth should outlive this conversation. Every document has one canonical name, a crtr identifier rather than a file path — read docs through the command surface, never cat or find the markdown off disk. Slash commands are authored here too — one is a document flagged invocable.',
22
- },
23
- help: {
24
- name: 'memory',
25
- summary: 'list, read, search, and write memory documents — knowledge and preferences',
26
- model: 'One address per document: its canonical name, the store’s namespace composed with its store-local name. A repository declares that namespace once, as `namespace:` on the root `INDEX.md` of `<repository root>/.crouter/memory/`, and a store nested inside the repository composes under that namespace plus its own path from the repository root; user, profile, node, and builtin names carry no namespace, and an installed plugin’s documents mount under the plugin’s own name. Resolution is exact — a file path, a bare leaf, a `<scope>/<name>` spelling, and a trailing `/INDEX` all fail — so `find` is the discovery surface when you do not know a name and `list` browses the whole inventory. A trailing `INDEX` is never part of an address, so a directory may carry its own document: reading the directory name returns that body together with the directory’s immediate listing. Precedence — node > project stack > profile > user > builtin — picks the winner among documents sharing ONE canonical name; `--paths` reports every physical candidate behind a name, and `--dir <project>` reaches one exact store. One verb per operation: `write` creates, `edit` revises (every revision carries a rationale and is recorded), `move` relocates or renames a doc and rewrites inbound `[[refs]]` corpus-wide, `delete` removes, and `history` reads how a document reached its current state. Beyond listings, delivery is explicit `surfaces` routing: each entry names the event that fires it (boot, workspace-open, read, memory-read, command) and how much delivers (name, preview, content). A selected profile widens the project stack to every project in its purview, and each of those relationships caps what its stores deliver to the boot and workspace-open events; `read`, find, listings, and file- and command-routed delivery see the full corpus regardless.',
27
- },
28
- children: [listLeaf, readLeaf, findLeaf, writeLeaf, editLeaf, moveLeaf, historyLeaf, deleteLeaf, originLeaf, lintLeaf],
29
- });
30
- }
1
+ var a=Object.defineProperty;var e=(r,o)=>a(r,"name",{value:o,configurable:!0});import{defineBranch as t}from"../core/command.js";import{listLeaf as n}from"./memory/list.js";import{readLeaf as s}from"./memory/read.js";import{findLeaf as i}from"./memory/find.js";import{writeLeaf as d}from"./memory/write.js";import{editLeaf as m}from"./memory/edit.js";import{moveLeaf as c}from"./memory/move.js";import{historyLeaf as l}from"./memory/history.js";import{deleteLeaf as h}from"./memory/delete.js";import{originLeaf as p}from"./memory/origin.js";import{lintLeaf as f}from"./memory/lint.js";function A(){return t({name:"memory",rootEntry:{concept:"a memory document you read on demand \u2014 knowledge or a preference",desc:"list, read, search, and write memory documents",useWhen:"durable knowledge and preferences shared across nodes and sessions \u2014 use when prior guidance may apply to the current task, or when a non-obvious reusable truth should outlive this conversation. Every document has one canonical name, a crtr identifier rather than a file path \u2014 read docs through the command surface, never cat or find the markdown off disk. Slash commands are authored here too \u2014 one is a document flagged invocable."},help:{name:"memory",summary:"list, read, search, and write memory documents \u2014 knowledge and preferences",model:"One address per document: its canonical name, the store\u2019s namespace composed with its store-local name. A repository declares that namespace once, as `namespace:` on the root `INDEX.md` of `<repository root>/.crouter/memory/`, and a store nested inside the repository composes under that namespace plus its own path from the repository root; user, profile, node, and builtin names carry no namespace, and an installed plugin\u2019s documents mount under the plugin\u2019s own name. Resolution is exact \u2014 a file path, a bare leaf, a `<scope>/<name>` spelling, and a trailing `/INDEX` all fail \u2014 so `find` is the discovery surface when you do not know a name and `list` browses the whole inventory. A trailing `INDEX` is never part of an address, so a directory may carry its own document: reading the directory name returns that body together with the directory\u2019s immediate listing. Precedence \u2014 node > project stack > profile > user > builtin \u2014 picks the winner among documents sharing ONE canonical name; `--paths` reports every physical candidate behind a name, and `--dir <project>` reaches one exact store. One verb per operation: `write` creates, `edit` revises (every revision carries a rationale and is recorded), `move` relocates or renames a doc and rewrites inbound `[[refs]]` corpus-wide, `delete` removes, and `history` reads how a document reached its current state. Beyond listings, delivery is explicit `surfaces` routing: each entry names the event that fires it (boot, workspace-open, read, memory-read, command) and how much delivers (name, preview, content). A selected profile widens the project stack to every project in its purview, and each of those relationships caps what its stores deliver to the boot and workspace-open events; `read`, find, listings, and file- and command-routed delivery see the full corpus regardless."},children:[n,s,i,d,m,c,l,h,p,f]})}e(A,"registerMemory");export{A as registerMemory};
@@ -1,245 +1,5 @@
1
- // `crtr node bash` — file-backed background job controls.
2
- import { envNodeId } from '../../shared/env.js';
3
- import { defineBranch, defineLeaf } from '../../core/command.js';
4
- import { InputError } from '../../core/io.js';
5
- import { contextDir } from '../../core/canvas/paths.js';
6
- import { existsSync } from 'node:fs';
7
- import { activeBackgroundBashJobs, backgroundRunningBashJobs, bashJobCommandLine, bashJobPaths, clearJobDeadline, formatBashElapsed, isSafeBashJobId, jobStartedAtMs, readJobPgid, stopBackgroundBashJob, tailJobLog, writeJobDeadlineMs } from '../../core/bash-jobs.js';
8
- import { parseDurationMs } from '../../core/wake.js';
9
- import { cliClient, getNodeOrNull } from '../api-client.js';
10
- import { nodeInPane } from '../surface/node/placement.js';
11
- function resolveBashTarget(input, missingMessage) {
12
- const pane = input['pane'] ?? process.env['TMUX_PANE'];
13
- let id = input['node'];
14
- if (id === undefined || id === '')
15
- id = nodeInPane(pane);
16
- if (id === undefined || id === '')
17
- id = envNodeId();
18
- if (id === undefined || id === '') {
19
- throw new InputError({ error: 'no_node', message: missingMessage, next: 'Run from inside a node, pass --node <id>, or --pane <pane>.' });
20
- }
21
- return { id, pane };
22
- }
23
- const nodeBashBackground = defineLeaf({
24
- name: 'background',
25
- description: 'hand the focused node’s running bash command to its background job system',
26
- whenToUse: 'the tmux prefix menu invokes this when a foreground bash command should stop blocking the agent immediately but keep running as a file-backed background job',
27
- tier: 'hidden',
28
- help: {
29
- name: 'node bash background',
30
- summary: 'hand every running foreground bash command for one node to its file-backed background job system',
31
- params: [
32
- { kind: 'flag', name: 'node', type: 'string', required: false, constraint: 'Node whose running bash command to background. Defaults to the node in --pane, else the caller (CRTR_NODE_ID).' },
33
- { kind: 'flag', name: 'pane', type: 'string', required: false, constraint: 'tmux pane showing the target node, when --node is omitted. Defaults to $TMUX_PANE. The prefix menu passes this for you.' },
34
- ],
35
- output: [
36
- { name: 'node_id', type: 'string', required: true, constraint: 'The target node.' },
37
- { name: 'jobs', type: 'object[]', required: true, constraint: 'Per handed-off job {job_id, elapsed_ms} — the foreground elapsed time in milliseconds at the moment of handoff.' },
38
- ],
39
- outputKind: 'object',
40
- effects: ['Signals every foreground bash command currently running for the node to return from its tool call immediately while its detached supervisor keeps the command running.', 'Each handed-off command retains its log under the node context jobs directory and sends the node an urgent inbox message when it exits, which steers the node mid-turn.'],
41
- },
42
- run: async (input) => {
43
- const { id } = resolveBashTarget(input, 'no node found for the bash handoff');
44
- if ((await getNodeOrNull(id)) === null) {
45
- throw new InputError({ error: 'not_found', message: `no node: ${id}`, next: 'List nodes with `crtr node inspect list`.' });
46
- }
47
- const jobs = backgroundRunningBashJobs(contextDir(id));
48
- const now = Date.now();
49
- const elapsed = jobs.map((job) => ({ job_id: job.jobId, elapsed_ms: now - (jobStartedAtMs(job.jobId) ?? now) }));
50
- // No tmux toast. A tmux status-line message commandeers the whole client's
51
- // status bar for seconds over an action the user just took deliberately;
52
- // the viewer reports its own handoff in its own status line, which is where
53
- // someone watching that pane is already looking.
54
- return { node_id: id, jobs: elapsed };
55
- },
56
- render: (result) => {
57
- const jobs = result['jobs'];
58
- if (jobs.length === 0)
59
- return `No foreground bash command is running for ${result['node_id']}.`;
60
- const oldestElapsedMs = Math.max(...jobs.map((job) => job.elapsed_ms));
61
- return `Handed ${jobs.length} bash command(s) to the background job system for ${result['node_id']} · ran ${formatBashElapsed(oldestElapsedMs)} in the foreground.`;
62
- },
63
- });
64
- const nodeBashList = defineLeaf({
65
- name: 'list',
66
- description: 'list a node’s live background bash jobs',
67
- whenToUse: 'the Inspector’s jobs section reads this to show what a node handed off to the background',
68
- tier: 'hidden',
69
- help: {
70
- name: 'node bash list',
71
- summary: 'read every still-running background bash job owned by one node',
72
- params: [
73
- { kind: 'flag', name: 'node', type: 'string', required: false, constraint: 'Node whose background jobs to list. Defaults to the node in --pane, else the caller (CRTR_NODE_ID).' },
74
- { kind: 'flag', name: 'pane', type: 'string', required: false, constraint: 'tmux pane showing the target node, when --node is omitted. Defaults to $TMUX_PANE.' },
75
- { kind: 'flag', name: 'tail', type: 'int', required: false, default: 0, constraint: 'Include this many trailing log lines per job (0 = none).' },
76
- ],
77
- output: [
78
- { name: 'node_id', type: 'string', required: true, constraint: 'The target node.' },
79
- { name: 'jobs', type: 'object[]', required: true, constraint: 'Oldest-first {job_id, command, purpose, started_at, elapsed_ms, deadline_at, log_path, pgid, log_tail} for every live background job; purpose is a human-readable label or null; deadline_at is the auto-cancel time or null for a job that runs to completion.' },
80
- ],
81
- outputKind: 'object',
82
- effects: ['Reads the node context jobs directory. Changes nothing.'],
83
- },
84
- run: async (input) => {
85
- const { id } = resolveBashTarget(input, 'no node found for the bash job list');
86
- const node = await getNodeOrNull(id);
87
- if (node === null) {
88
- throw new InputError({ error: 'not_found', message: `no node: ${id}`, next: 'List nodes with `crtr node inspect list`.' });
89
- }
90
- const now = Date.now();
91
- const tail = Math.max(0, Math.trunc(Number(input['tail'] ?? 0)));
92
- const dir = contextDir(node.node_id);
93
- const jobs = activeBackgroundBashJobs(dir).map((job) => ({
94
- job_id: job.jobId,
95
- command: job.command,
96
- purpose: job.purpose,
97
- started_at: new Date(job.startedAtMs).toISOString(),
98
- elapsed_ms: now - job.startedAtMs,
99
- deadline_at: job.deadlineAtMs === null ? null : new Date(job.deadlineAtMs).toISOString(),
100
- log_path: job.logPath,
101
- pgid: readJobPgid(dir, job.jobId) ?? null,
102
- log_tail: tailJobLog(job.logPath, tail),
103
- }));
104
- return { node_id: node.node_id, jobs };
105
- },
106
- render: (result) => {
107
- const jobs = result['jobs'];
108
- if (jobs.length === 0)
109
- return `No background bash jobs for ${result['node_id']}.`;
110
- return jobs.map((job) => `${job.job_id} · ${formatBashElapsed(job.elapsed_ms)} · ${bashJobCommandLine(job.command)}${job.purpose === null ? '' : `\n purpose: ${job.purpose}`}${job.deadline_at === null ? '' : `\n cancels at: ${job.deadline_at}`}\n log: ${job.log_path}`).join('\n');
111
- },
112
- });
113
- const nodeBashKill = defineLeaf({
114
- name: 'kill',
115
- description: 'stop one of a node’s background bash jobs',
116
- whenToUse: 'the user watching the Inspector or the attach cockpit’s bash row wants a long-running background job to stop now, or an agent is abandoning work it backgrounded',
117
- tier: 'hidden',
118
- help: {
119
- name: 'node bash kill',
120
- summary: 'best-effort stop a background bash job and tell the owning node it was canceled',
121
- params: [
122
- { kind: 'positional', name: 'job', required: true, constraint: 'Job id, as reported by node bash list.' },
123
- { kind: 'flag', name: 'node', type: 'string', required: false, constraint: 'Node owning the job. Defaults to the node in --pane, else the caller (CRTR_NODE_ID).' },
124
- { kind: 'flag', name: 'pane', type: 'string', required: false, constraint: 'tmux pane showing the target node, when --node is omitted. Defaults to $TMUX_PANE.' },
125
- ],
126
- output: [
127
- { name: 'node_id', type: 'string', required: true, constraint: 'The owning node.' },
128
- { name: 'signaled', type: 'boolean', required: true, constraint: 'True when at least one observed supervisor-tree process received SIGTERM.' },
129
- ],
130
- outputKind: 'object',
131
- effects: [
132
- 'Snapshots the supervisor’s observable process tree, sends SIGTERM then SIGKILL to those processes, and cannot stop a descendant that detached and reparented before the snapshot.',
133
- 'Records the job’s exit so it stops showing as live, and sends the owning node an urgent inbox message saying the job was stopped — which steers that node mid-turn.',
134
- ],
135
- },
136
- run: async (input) => {
137
- const { id } = resolveBashTarget(input, 'no node found for the bash job');
138
- const node = await getNodeOrNull(id);
139
- if (node === null) {
140
- throw new InputError({ error: 'not_found', message: `no node: ${id}`, next: 'List nodes with `crtr node inspect list`.' });
141
- }
142
- const jobId = input['job'];
143
- if (!isSafeBashJobId(jobId)) {
144
- throw new InputError({ error: 'invalid_job_id', message: `invalid background job id: ${jobId}`, next: 'Use a job id reported by `crtr node bash list`.' });
145
- }
146
- const dir = contextDir(node.node_id);
147
- const paths = bashJobPaths(dir, jobId);
148
- const stopped = await stopBackgroundBashJob(dir, jobId);
149
- if (stopped.kind === 'missing') {
150
- throw new InputError({ error: 'not_found', message: `no background job ${jobId} for ${node.node_id}`, next: 'List live jobs with `crtr node bash list`.' });
151
- }
152
- if (stopped.kind === 'retired') {
153
- throw new InputError({
154
- error: 'not_found',
155
- message: `background job ${jobId} for ${node.node_id} is no longer running`,
156
- next: `It finished or was already stopped, so nothing was signaled. Log: ${stopped.logPath}`,
157
- });
158
- }
159
- if (stopped.kind === 'not-stoppable') {
160
- throw new InputError({
161
- error: 'not_stoppable',
162
- message: `job ${jobId} recorded no trusted process identity`,
163
- next: `It started before crtr persisted its supervisor identity. Stop it by hand, then it will disappear from the list. Log: ${paths.jobLog}`,
164
- });
165
- }
166
- await cliClient().sendMessage(node.node_id, {
167
- body: `Background bash job ${jobId} was stopped by the user before it finished. Log: ${paths.jobLog} Command: ${paths.cmdSh}`,
168
- tier: 'urgent',
169
- });
170
- return { node_id: node.node_id, signaled: stopped.signaled };
171
- },
172
- render: (result) => `Canceled a background bash job for ${result['node_id']}${result['signaled'] === true ? '' : ' (no observed job process was still running)'}.`,
173
- });
174
- const nodeBashExtend = defineLeaf({
175
- name: 'extend',
176
- description: 'claim an auto-backgrounded bash job so the daemon does not cancel it at its deadline',
177
- whenToUse: 'a command the valve auto-backgrounded is worth keeping past its cancel deadline — give it more time with --for, or let it run to completion with --keep',
178
- tier: 'hidden',
179
- help: {
180
- name: 'node bash extend',
181
- summary: 'move or clear the auto-cancel deadline on one of a node’s live background bash jobs',
182
- params: [
183
- { kind: 'positional', name: 'job', required: true, constraint: 'Job id, as reported by node bash list or the auto-background notice.' },
184
- { kind: 'flag', name: 'for', type: 'string', required: false, constraint: 'New window from now before the job is canceled, as a duration (e.g. 90s, 10m, 1h30m). Mutually exclusive with --keep; give exactly one.' },
185
- { kind: 'flag', name: 'keep', type: 'bool', required: false, constraint: 'Remove the deadline entirely so the job runs to completion. Mutually exclusive with --for; give exactly one.' },
186
- { kind: 'flag', name: 'node', type: 'string', required: false, constraint: 'Node owning the job. Defaults to the node in --pane, else the caller (CRTR_NODE_ID).' },
187
- { kind: 'flag', name: 'pane', type: 'string', required: false, constraint: 'tmux pane showing the target node, when --node is omitted. Defaults to $TMUX_PANE.' },
188
- ],
189
- output: [
190
- { name: 'node_id', type: 'string', required: true, constraint: 'The owning node.' },
191
- { name: 'deadline_at', type: 'string', required: false, constraint: 'The job’s new auto-cancel time (ISO), or absent when --keep cleared the deadline so the job runs to completion.' },
192
- ],
193
- outputKind: 'object',
194
- effects: ['Rewrites or removes the job’s deadline file. The daemon’s deadline lane reads it on its next scan. Signals nothing.'],
195
- },
196
- run: async (input) => {
197
- const { id } = resolveBashTarget(input, 'no node found for the bash job');
198
- const node = await getNodeOrNull(id);
199
- if (node === null) {
200
- throw new InputError({ error: 'not_found', message: `no node: ${id}`, next: 'List nodes with `crtr node inspect list`.' });
201
- }
202
- const jobId = input['job'];
203
- if (!isSafeBashJobId(jobId)) {
204
- throw new InputError({ error: 'invalid_job_id', message: `invalid background job id: ${jobId}`, next: 'Use a job id reported by `crtr node bash list`.' });
205
- }
206
- const forDuration = input['for'];
207
- const keep = input['keep'] === true;
208
- if (keep === (forDuration !== undefined && forDuration !== '')) {
209
- throw new InputError({ error: 'invalid_args', message: 'give exactly one of --for <duration> or --keep', next: 'Extend by a window with --for 10m, or drop the deadline with --keep.' });
210
- }
211
- const dir = contextDir(node.node_id);
212
- const paths = bashJobPaths(dir, jobId);
213
- if (!existsSync(paths.dir)) {
214
- throw new InputError({ error: 'not_found', message: `no background job ${jobId} for ${node.node_id}`, next: 'List live jobs with `crtr node bash list`.' });
215
- }
216
- if (!existsSync(paths.jobBg) || existsSync(paths.jobExit)) {
217
- throw new InputError({ error: 'not_running', message: `background job ${jobId} for ${node.node_id} is no longer running`, next: `It finished or was stopped, so there is no deadline to change. Log: ${paths.jobLog}` });
218
- }
219
- if (keep) {
220
- clearJobDeadline(paths);
221
- return { node_id: node.node_id };
222
- }
223
- const durationMs = parseDurationMs(forDuration);
224
- if (durationMs === null || durationMs <= 0) {
225
- throw new InputError({ error: 'invalid_duration', message: `not a duration: ${forDuration}`, next: 'Use a value like 90s, 10m, or 1h30m.' });
226
- }
227
- const deadlineMs = Date.now() + durationMs;
228
- writeJobDeadlineMs(paths, deadlineMs);
229
- return { node_id: node.node_id, deadline_at: new Date(deadlineMs).toISOString() };
230
- },
231
- render: (result) => result['deadline_at'] === undefined
232
- ? `Cleared the deadline — the background job will run to completion for ${result['node_id']}.`
233
- : `Background job for ${result['node_id']} will be canceled at ${result['deadline_at']} unless extended again.`,
234
- });
235
- export const nodeBash = defineBranch({
236
- name: 'bash',
237
- description: 'control file-backed bash jobs owned by a node',
238
- whenToUse: 'a running bash command must be handed off, listed, stopped, or its auto-cancel deadline changed — the tmux prefix menu backgrounds, the Inspector’s jobs section lists and cancels',
239
- tier: 'hidden',
240
- help: {
241
- name: 'node bash',
242
- summary: 'control file-backed bash jobs owned by a node',
243
- },
244
- children: [nodeBashBackground, nodeBashList, nodeBashKill, nodeBashExtend],
245
- });
1
+ var k=Object.defineProperty;var i=(n,t)=>k(n,"name",{value:t,configurable:!0});import{envNodeId as j}from"../../shared/env.js";import{defineBranch as y,defineLeaf as h}from"../../core/command.js";import{InputError as d}from"../../core/io.js";import{contextDir as c}from"../../core/canvas/paths.js";import{existsSync as m}from"node:fs";import{activeBackgroundBashJobs as x,backgroundRunningBashJobs as $,bashJobCommandLine as v,bashJobPaths as f,clearJobDeadline as I,formatBashElapsed as w,isSafeBashJobId as _,jobStartedAtMs as D,readJobPgid as T,stopBackgroundBashJob as M,tailJobLog as q,writeJobDeadlineMs as N}from"../../core/bash-jobs.js";import{parseDurationMs as L}from"../../core/wake.js";import{cliClient as B,getNodeOrNull as u}from"../api-client.js";import{nodeInPane as E}from"../surface/node/placement.js";function b(n,t){const e=n.pane??process.env.TMUX_PANE;let o=n.node;if((o===void 0||o==="")&&(o=E(e)),(o===void 0||o==="")&&(o=j()),o===void 0||o==="")throw new d({error:"no_node",message:t,next:"Run from inside a node, pass --node <id>, or --pane <pane>."});return{id:o,pane:e}}i(b,"resolveBashTarget");const S=h({name:"background",description:"hand the focused node\u2019s running bash command to its background job system",whenToUse:"the tmux prefix menu invokes this when a foreground bash command should stop blocking the agent immediately but keep running as a file-backed background job",tier:"hidden",help:{name:"node bash background",summary:"hand every running foreground bash command for one node to its file-backed background job system",params:[{kind:"flag",name:"node",type:"string",required:!1,constraint:"Node whose running bash command to background. Defaults to the node in --pane, else the caller (CRTR_NODE_ID)."},{kind:"flag",name:"pane",type:"string",required:!1,constraint:"tmux pane showing the target node, when --node is omitted. Defaults to $TMUX_PANE. The prefix menu passes this for you."}],output:[{name:"node_id",type:"string",required:!0,constraint:"The target node."},{name:"jobs",type:"object[]",required:!0,constraint:"Per handed-off job {job_id, elapsed_ms} \u2014 the foreground elapsed time in milliseconds at the moment of handoff."}],outputKind:"object",effects:["Signals every foreground bash command currently running for the node to return from its tool call immediately while its detached supervisor keeps the command running.","Each handed-off command retains its log under the node context jobs directory and sends the node an urgent inbox message when it exits, which steers the node mid-turn."]},run:i(async n=>{const{id:t}=b(n,"no node found for the bash handoff");if(await u(t)===null)throw new d({error:"not_found",message:`no node: ${t}`,next:"List nodes with `crtr node inspect list`."});const e=$(c(t)),o=Date.now(),r=e.map(s=>({job_id:s.jobId,elapsed_ms:o-(D(s.jobId)??o)}));return{node_id:t,jobs:r}},"run"),render:i(n=>{const t=n.jobs;if(t.length===0)return`No foreground bash command is running for ${n.node_id}.`;const e=Math.max(...t.map(o=>o.elapsed_ms));return`Handed ${t.length} bash command(s) to the background job system for ${n.node_id} \xB7 ran ${w(e)} in the foreground.`},"render")}),R=h({name:"list",description:"list a node\u2019s live background bash jobs",whenToUse:"the Inspector\u2019s jobs section reads this to show what a node handed off to the background",tier:"hidden",help:{name:"node bash list",summary:"read every still-running background bash job owned by one node",params:[{kind:"flag",name:"node",type:"string",required:!1,constraint:"Node whose background jobs to list. Defaults to the node in --pane, else the caller (CRTR_NODE_ID)."},{kind:"flag",name:"pane",type:"string",required:!1,constraint:"tmux pane showing the target node, when --node is omitted. Defaults to $TMUX_PANE."},{kind:"flag",name:"tail",type:"int",required:!1,default:0,constraint:"Include this many trailing log lines per job (0 = none)."}],output:[{name:"node_id",type:"string",required:!0,constraint:"The target node."},{name:"jobs",type:"object[]",required:!0,constraint:"Oldest-first {job_id, command, purpose, started_at, elapsed_ms, deadline_at, log_path, pgid, log_tail} for every live background job; purpose is a human-readable label or null; deadline_at is the auto-cancel time or null for a job that runs to completion."}],outputKind:"object",effects:["Reads the node context jobs directory. Changes nothing."]},run:i(async n=>{const{id:t}=b(n,"no node found for the bash job list"),e=await u(t);if(e===null)throw new d({error:"not_found",message:`no node: ${t}`,next:"List nodes with `crtr node inspect list`."});const o=Date.now(),r=Math.max(0,Math.trunc(Number(n.tail??0))),s=c(e.node_id),l=x(s).map(a=>({job_id:a.jobId,command:a.command,purpose:a.purpose,started_at:new Date(a.startedAtMs).toISOString(),elapsed_ms:o-a.startedAtMs,deadline_at:a.deadlineAtMs===null?null:new Date(a.deadlineAtMs).toISOString(),log_path:a.logPath,pgid:T(s,a.jobId)??null,log_tail:q(a.logPath,r)}));return{node_id:e.node_id,jobs:l}},"run"),render:i(n=>{const t=n.jobs;return t.length===0?`No background bash jobs for ${n.node_id}.`:t.map(e=>`${e.job_id} \xB7 ${w(e.elapsed_ms)} \xB7 ${v(e.command)}${e.purpose===null?"":`
2
+ purpose: ${e.purpose}`}${e.deadline_at===null?"":`
3
+ cancels at: ${e.deadline_at}`}
4
+ log: ${e.log_path}`).join(`
5
+ `)},"render")}),U=h({name:"kill",description:"stop one of a node\u2019s background bash jobs",whenToUse:"the user watching the Inspector or the attach cockpit\u2019s bash row wants a long-running background job to stop now, or an agent is abandoning work it backgrounded",tier:"hidden",help:{name:"node bash kill",summary:"best-effort stop a background bash job and tell the owning node it was canceled",params:[{kind:"positional",name:"job",required:!0,constraint:"Job id, as reported by node bash list."},{kind:"flag",name:"node",type:"string",required:!1,constraint:"Node owning the job. Defaults to the node in --pane, else the caller (CRTR_NODE_ID)."},{kind:"flag",name:"pane",type:"string",required:!1,constraint:"tmux pane showing the target node, when --node is omitted. Defaults to $TMUX_PANE."}],output:[{name:"node_id",type:"string",required:!0,constraint:"The owning node."},{name:"signaled",type:"boolean",required:!0,constraint:"True when at least one observed supervisor-tree process received SIGTERM."}],outputKind:"object",effects:["Snapshots the supervisor\u2019s observable process tree, sends SIGTERM then SIGKILL to those processes, and cannot stop a descendant that detached and reparented before the snapshot.","Records the job\u2019s exit so it stops showing as live, and sends the owning node an urgent inbox message saying the job was stopped \u2014 which steers that node mid-turn."]},run:i(async n=>{const{id:t}=b(n,"no node found for the bash job"),e=await u(t);if(e===null)throw new d({error:"not_found",message:`no node: ${t}`,next:"List nodes with `crtr node inspect list`."});const o=n.job;if(!_(o))throw new d({error:"invalid_job_id",message:`invalid background job id: ${o}`,next:"Use a job id reported by `crtr node bash list`."});const r=c(e.node_id),s=f(r,o),l=await M(r,o);if(l.kind==="missing")throw new d({error:"not_found",message:`no background job ${o} for ${e.node_id}`,next:"List live jobs with `crtr node bash list`."});if(l.kind==="retired")throw new d({error:"not_found",message:`background job ${o} for ${e.node_id} is no longer running`,next:`It finished or was already stopped, so nothing was signaled. Log: ${l.logPath}`});if(l.kind==="not-stoppable")throw new d({error:"not_stoppable",message:`job ${o} recorded no trusted process identity`,next:`It started before crtr persisted its supervisor identity. Stop it by hand, then it will disappear from the list. Log: ${s.jobLog}`});return await B().sendMessage(e.node_id,{body:`Background bash job ${o} was stopped by the user before it finished. Log: ${s.jobLog} Command: ${s.cmdSh}`,tier:"urgent"}),{node_id:e.node_id,signaled:l.signaled}},"run"),render:i(n=>`Canceled a background bash job for ${n.node_id}${n.signaled===!0?"":" (no observed job process was still running)"}.`,"render")}),J=h({name:"extend",description:"claim an auto-backgrounded bash job so the daemon does not cancel it at its deadline",whenToUse:"a command the valve auto-backgrounded is worth keeping past its cancel deadline \u2014 give it more time with --for, or let it run to completion with --keep",tier:"hidden",help:{name:"node bash extend",summary:"move or clear the auto-cancel deadline on one of a node\u2019s live background bash jobs",params:[{kind:"positional",name:"job",required:!0,constraint:"Job id, as reported by node bash list or the auto-background notice."},{kind:"flag",name:"for",type:"string",required:!1,constraint:"New window from now before the job is canceled, as a duration (e.g. 90s, 10m, 1h30m). Mutually exclusive with --keep; give exactly one."},{kind:"flag",name:"keep",type:"bool",required:!1,constraint:"Remove the deadline entirely so the job runs to completion. Mutually exclusive with --for; give exactly one."},{kind:"flag",name:"node",type:"string",required:!1,constraint:"Node owning the job. Defaults to the node in --pane, else the caller (CRTR_NODE_ID)."},{kind:"flag",name:"pane",type:"string",required:!1,constraint:"tmux pane showing the target node, when --node is omitted. Defaults to $TMUX_PANE."}],output:[{name:"node_id",type:"string",required:!0,constraint:"The owning node."},{name:"deadline_at",type:"string",required:!1,constraint:"The job\u2019s new auto-cancel time (ISO), or absent when --keep cleared the deadline so the job runs to completion."}],outputKind:"object",effects:["Rewrites or removes the job\u2019s deadline file. The daemon\u2019s deadline lane reads it on its next scan. Signals nothing."]},run:i(async n=>{const{id:t}=b(n,"no node found for the bash job"),e=await u(t);if(e===null)throw new d({error:"not_found",message:`no node: ${t}`,next:"List nodes with `crtr node inspect list`."});const o=n.job;if(!_(o))throw new d({error:"invalid_job_id",message:`invalid background job id: ${o}`,next:"Use a job id reported by `crtr node bash list`."});const r=n.for,s=n.keep===!0;if(s===(r!==void 0&&r!==""))throw new d({error:"invalid_args",message:"give exactly one of --for <duration> or --keep",next:"Extend by a window with --for 10m, or drop the deadline with --keep."});const l=c(e.node_id),a=f(l,o);if(!m(a.dir))throw new d({error:"not_found",message:`no background job ${o} for ${e.node_id}`,next:"List live jobs with `crtr node bash list`."});if(!m(a.jobBg)||m(a.jobExit))throw new d({error:"not_running",message:`background job ${o} for ${e.node_id} is no longer running`,next:`It finished or was stopped, so there is no deadline to change. Log: ${a.jobLog}`});if(s)return I(a),{node_id:e.node_id};const g=L(r);if(g===null||g<=0)throw new d({error:"invalid_duration",message:`not a duration: ${r}`,next:"Use a value like 90s, 10m, or 1h30m."});const p=Date.now()+g;return N(a,p),{node_id:e.node_id,deadline_at:new Date(p).toISOString()}},"run"),render:i(n=>n.deadline_at===void 0?`Cleared the deadline \u2014 the background job will run to completion for ${n.node_id}.`:`Background job for ${n.node_id} will be canceled at ${n.deadline_at} unless extended again.`,"render")}),Q=y({name:"bash",description:"control file-backed bash jobs owned by a node",whenToUse:"a running bash command must be handed off, listed, stopped, or its auto-cancel deadline changed \u2014 the tmux prefix menu backgrounds, the Inspector\u2019s jobs section lists and cancels",tier:"hidden",help:{name:"node bash",summary:"control file-backed bash jobs owned by a node"},children:[S,R,U,J]});export{Q as nodeBash};