@north-light/crouter 0.3.318 → 0.3.319

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1303) hide show
  1. package/README.md +0 -3
  2. package/dist/api/client.js +2 -912
  3. package/dist/api/dto/attach.js +0 -13
  4. package/dist/api/dto/bash-jobs.js +1 -9
  5. package/dist/api/dto/broker-ops.js +0 -6
  6. package/dist/api/dto/broker.js +0 -20
  7. package/dist/api/dto/canvas.js +0 -2
  8. package/dist/api/dto/chat-inventory.js +0 -11
  9. package/dist/api/dto/common.js +1 -15
  10. package/dist/api/dto/config.js +0 -3
  11. package/dist/api/dto/crons.js +1 -10
  12. package/dist/api/dto/files.js +0 -7
  13. package/dist/api/dto/focus.js +0 -10
  14. package/dist/api/dto/health.js +0 -2
  15. package/dist/api/dto/human-requests.js +0 -4
  16. package/dist/api/dto/human.js +0 -4
  17. package/dist/api/dto/inbox.js +0 -4
  18. package/dist/api/dto/lifecycle.js +0 -3
  19. package/dist/api/dto/mail.js +0 -1
  20. package/dist/api/dto/memory.js +0 -6
  21. package/dist/api/dto/messages.js +0 -2
  22. package/dist/api/dto/model-config.js +0 -1
  23. package/dist/api/dto/modelauth.js +0 -4
  24. package/dist/api/dto/node-outcomes.js +0 -2
  25. package/dist/api/dto/nodes.js +0 -3
  26. package/dist/api/dto/profiles.js +1 -4
  27. package/dist/api/dto/recovery.js +0 -1
  28. package/dist/api/dto/reports.js +0 -2
  29. package/dist/api/dto/review-comments.js +0 -5
  30. package/dist/api/dto/reviews.js +0 -5
  31. package/dist/api/dto/subscriptions.js +0 -2
  32. package/dist/api/dto/worktree.js +0 -6
  33. package/dist/api/errors.js +1 -40
  34. package/dist/api/index.js +1 -33
  35. package/dist/api/plugin-manifest-schema.js +0 -23
  36. package/dist/api/routes.js +1 -147
  37. package/dist/build-root.js +1 -198
  38. package/dist/cli.js +3 -99
  39. package/dist/clients/attach/ansi-cells.js +1 -137
  40. package/dist/clients/attach/chrome/bash-jobs.js +1 -31
  41. package/dist/clients/attach/chrome/canvas-panels.js +1 -194
  42. package/dist/clients/attach/chrome/completion-bell.js +1 -89
  43. package/dist/clients/attach/chrome/cron-wait.js +1 -34
  44. package/dist/clients/attach/chrome/git-info.js +2 -44
  45. package/dist/clients/attach/chrome/header.js +1 -30
  46. package/dist/clients/attach/chrome/inbox-strip.js +1 -199
  47. package/dist/clients/attach/chrome/recap.js +1 -19
  48. package/dist/clients/attach/chrome/review-wait.js +1 -22
  49. package/dist/clients/attach/chrome/roster.js +4 -275
  50. package/dist/clients/attach/chrome/status-line.js +1 -117
  51. package/dist/clients/attach/chrome/ticket-panel.js +1 -280
  52. package/dist/clients/attach/chrome/widgets.js +1 -51
  53. package/dist/clients/attach/command.js +1 -107
  54. package/dist/clients/attach/config.js +1 -274
  55. package/dist/clients/attach/input/capabilities.js +1 -104
  56. package/dist/clients/attach/input/clipboard-image.js +3 -220
  57. package/dist/clients/attach/input/completion-frecency.js +1 -141
  58. package/dist/clients/attach/input/controller.js +7 -377
  59. package/dist/clients/attach/input/overlay-owner.js +1 -199
  60. package/dist/clients/attach/input/ref-autocomplete.js +2 -176
  61. package/dist/clients/attach/input/titled-editor.js +4 -859
  62. package/dist/clients/attach/overlays/auth.js +2 -271
  63. package/dist/clients/attach/overlays/dialogs.js +2 -102
  64. package/dist/clients/attach/overlays/file-review.js +2 -128
  65. package/dist/clients/attach/overlays/graph.js +1 -661
  66. package/dist/clients/attach/overlays/help.js +1 -211
  67. package/dist/clients/attach/overlays/mcp.js +1 -302
  68. package/dist/clients/attach/overlays/pickers.js +1 -163
  69. package/dist/clients/attach/render/activity-slot.js +1 -13
  70. package/dist/clients/attach/render/assistant-message.js +1 -56
  71. package/dist/clients/attach/render/card-presentation.js +5 -218
  72. package/dist/clients/attach/render/chat-view.js +5 -1708
  73. package/dist/clients/attach/render/condensed-history.js +1 -60
  74. package/dist/clients/attach/render/context-message.js +1 -63
  75. package/dist/clients/attach/render/crtr-output.js +17 -905
  76. package/dist/clients/attach/render/diagram.js +7 -111
  77. package/dist/clients/attach/render/edit-diff.js +5 -304
  78. package/dist/clients/attach/render/glyph-codepoints.js +1 -42
  79. package/dist/clients/attach/render/group-activity.js +2 -263
  80. package/dist/clients/attach/render/group-recap.js +1 -152
  81. package/dist/clients/attach/render/markdown-source.js +5 -266
  82. package/dist/clients/attach/render/measured-container.js +1 -322
  83. package/dist/clients/attach/render/page-block.js +1 -183
  84. package/dist/clients/attach/render/scroll-animation.js +1 -80
  85. package/dist/clients/attach/render/tool-calls.js +3 -361
  86. package/dist/clients/attach/render/transcript-copy.js +2 -81
  87. package/dist/clients/attach/render/transcript-search.js +1 -152
  88. package/dist/clients/attach/render/viewport.js +1 -184
  89. package/dist/clients/attach/session/banner.js +1 -29
  90. package/dist/clients/attach/session/bindings.js +1 -71
  91. package/dist/clients/attach/session/chrome-refresh.js +1 -94
  92. package/dist/clients/attach/session/connection.js +1 -186
  93. package/dist/clients/attach/session/context.js +0 -16
  94. package/dist/clients/attach/session/editor-frame.js +1 -142
  95. package/dist/clients/attach/session/editor-inventory.js +6 -160
  96. package/dist/clients/attach/session/file-links.js +1 -68
  97. package/dist/clients/attach/session/focus-events.js +1 -12
  98. package/dist/clients/attach/session/frame.js +1 -214
  99. package/dist/clients/attach/session/frames.js +1 -188
  100. package/dist/clients/attach/session/identity.js +1 -26
  101. package/dist/clients/attach/session/input-wiring.js +1 -140
  102. package/dist/clients/attach/session/invariant.js +1 -15
  103. package/dist/clients/attach/session/keys.js +1 -77
  104. package/dist/clients/attach/session/layout.js +1 -59
  105. package/dist/clients/attach/session/mouse.js +1 -78
  106. package/dist/clients/attach/session/pane-focus.js +1 -42
  107. package/dist/clients/attach/session/pane-tag.js +1 -112
  108. package/dist/clients/attach/session/pi-assets.js +1 -24
  109. package/dist/clients/attach/session/pi-oauth-flows.js +1 -21
  110. package/dist/clients/attach/session/profile-files.js +1 -228
  111. package/dist/clients/attach/session/reconnect.js +1 -175
  112. package/dist/clients/attach/session/selection.js +3 -108
  113. package/dist/clients/attach/session/state-sync.js +1 -67
  114. package/dist/clients/attach/session/surface-frame.js +1 -73
  115. package/dist/clients/attach/session/surface-host.js +1 -255
  116. package/dist/clients/attach/session/teardown.js +5 -94
  117. package/dist/clients/attach/session/transcript-search.js +3 -151
  118. package/dist/clients/attach/session/whip-achievements.js +2 -145
  119. package/dist/clients/attach/session/whip.js +1 -362
  120. package/dist/clients/attach/slash/dispatch.js +1 -706
  121. package/dist/clients/attach/slash/prompt-preview.js +1 -121
  122. package/dist/clients/attach/viewer.js +441 -441
  123. package/dist/clients/conversation/projection.js +1 -324
  124. package/dist/clients/conversation/submit.js +1 -51
  125. package/dist/clients/inbox/controller.js +1 -701
  126. package/dist/clients/inbox/dto-adapt.js +1 -93
  127. package/dist/clients/inbox/layout.js +1 -9
  128. package/dist/clients/inbox/page-adapter.js +1 -55
  129. package/dist/clients/inbox/resolve.js +1 -35
  130. package/dist/clients/inbox/review/anchors.js +1 -89
  131. package/dist/clients/inbox/review/comments-client.js +1 -98
  132. package/dist/clients/inbox/review/companion-pane.js +1 -82
  133. package/dist/clients/inbox/review/document-surface.js +2 -1188
  134. package/dist/clients/inbox/review/frame.js +1 -216
  135. package/dist/clients/inbox/review/keys.js +1 -123
  136. package/dist/clients/inbox/review/launch.js +1 -151
  137. package/dist/clients/inbox/review/live-source.js +1 -160
  138. package/dist/clients/inbox/review/nvim.js +1 -44
  139. package/dist/clients/inbox/review/remap.js +1 -157
  140. package/dist/clients/inbox/review/review-client.js +1 -123
  141. package/dist/clients/inbox/review/roundtrip.js +3 -36
  142. package/dist/clients/inbox/review/state.js +4 -315
  143. package/dist/clients/inbox/review-adapter.js +1 -43
  144. package/dist/clients/inbox/surface.js +1 -152
  145. package/dist/clients/inbox/tui/ansi.js +3 -321
  146. package/dist/clients/inbox/tui/input.js +5 -392
  147. package/dist/clients/inbox/tui/keys.js +1 -104
  148. package/dist/clients/inbox/tui/page-body.js +1 -66
  149. package/dist/clients/inbox/tui/panel.js +1 -84
  150. package/dist/clients/inbox/tui/render.js +2 -368
  151. package/dist/clients/inbox/tui/slots.js +3 -134
  152. package/dist/clients/inbox/tui/types.js +0 -1
  153. package/dist/clients/inbox/tui.js +1 -86
  154. package/dist/clients/surfaces/host.js +0 -1
  155. package/dist/commands/api-client.js +4 -290
  156. package/dist/commands/attention.js +1 -215
  157. package/dist/commands/canvas-browse.js +1 -70
  158. package/dist/commands/canvas-config.js +2 -192
  159. package/dist/commands/canvas-history/grep.js +7 -85
  160. package/dist/commands/canvas-history/read.js +3 -50
  161. package/dist/commands/canvas-history/search.js +10 -99
  162. package/dist/commands/canvas-history/shared.js +1 -139
  163. package/dist/commands/canvas-history/stats.js +6 -68
  164. package/dist/commands/canvas-history.js +1 -32
  165. package/dist/commands/canvas-issue.js +14 -149
  166. package/dist/commands/canvas-prune.js +1 -108
  167. package/dist/commands/canvas-roster.js +1 -69
  168. package/dist/commands/canvas-snapshot.js +1 -34
  169. package/dist/commands/canvas-use.js +1 -61
  170. package/dist/commands/canvas.js +1 -49
  171. package/dist/commands/chord.js +1 -241
  172. package/dist/commands/cron.js +11 -534
  173. package/dist/commands/dashboard.js +1 -85
  174. package/dist/commands/human/components.js +3 -77
  175. package/dist/commands/human/feedback.js +1 -112
  176. package/dist/commands/human/prompts.js +1 -331
  177. package/dist/commands/human/queue.js +1 -191
  178. package/dist/commands/human/request.js +1 -266
  179. package/dist/commands/human/review.js +1 -288
  180. package/dist/commands/human/shared.js +1 -67
  181. package/dist/commands/human.js +4 -60
  182. package/dist/commands/memory/delete.js +1 -100
  183. package/dist/commands/memory/edit.js +21 -219
  184. package/dist/commands/memory/find.js +2 -244
  185. package/dist/commands/memory/history.js +5 -199
  186. package/dist/commands/memory/lint.js +1 -107
  187. package/dist/commands/memory/list.js +1 -142
  188. package/dist/commands/memory/move.js +1 -223
  189. package/dist/commands/memory/origin.js +1 -130
  190. package/dist/commands/memory/read.js +6 -232
  191. package/dist/commands/memory/shared.js +12 -802
  192. package/dist/commands/memory/write.js +13 -235
  193. package/dist/commands/memory.js +1 -30
  194. package/dist/commands/node/bash.js +5 -245
  195. package/dist/commands/node/create.js +3 -332
  196. package/dist/commands/node/inspect.js +12 -300
  197. package/dist/commands/node/lifecycle.js +2 -453
  198. package/dist/commands/node/message.js +1 -161
  199. package/dist/commands/node/outcome.js +4 -134
  200. package/dist/commands/node/pyramid.js +2 -79
  201. package/dist/commands/node/subscription.js +1 -78
  202. package/dist/commands/node/wait.js +7 -163
  203. package/dist/commands/node-context.js +2 -159
  204. package/dist/commands/node-inspect-artifacts.js +8 -109
  205. package/dist/commands/node-lifecycle-revive.js +1 -217
  206. package/dist/commands/node-snapshot.js +1 -37
  207. package/dist/commands/node-transcript.js +1 -62
  208. package/dist/commands/node-worktree.js +1 -138
  209. package/dist/commands/node.js +1 -29
  210. package/dist/commands/pkg/browse/actions.js +1 -198
  211. package/dist/commands/pkg/browse/catalog.js +1 -466
  212. package/dist/commands/pkg/browse/command-view.js +1 -191
  213. package/dist/commands/pkg/browse/detail-panel.js +1 -402
  214. package/dist/commands/pkg/browse/doc-view.js +1 -89
  215. package/dist/commands/pkg/browse/list-panel.js +2 -168
  216. package/dist/commands/pkg/browse/model.js +1 -36
  217. package/dist/commands/pkg/browse/shell.js +1 -640
  218. package/dist/commands/pkg/browse.js +1 -27
  219. package/dist/commands/pkg/market-inspect.js +1 -141
  220. package/dist/commands/pkg/market-manage.js +1 -327
  221. package/dist/commands/pkg/market.js +1 -14
  222. package/dist/commands/pkg/plugin-inspect.js +1 -168
  223. package/dist/commands/pkg/plugin-manage.js +17 -1109
  224. package/dist/commands/pkg/plugin.js +1 -14
  225. package/dist/commands/pkg/shared.js +1 -62
  226. package/dist/commands/pkg.js +1 -21
  227. package/dist/commands/profile/default.js +1 -139
  228. package/dist/commands/profile/delete.js +1 -66
  229. package/dist/commands/profile/env.js +3 -188
  230. package/dist/commands/profile/kind.js +2 -35
  231. package/dist/commands/profile/list.js +1 -43
  232. package/dist/commands/profile/meta.js +1 -67
  233. package/dist/commands/profile/new.js +1 -115
  234. package/dist/commands/profile/pause.js +1 -59
  235. package/dist/commands/profile/project.js +1 -113
  236. package/dist/commands/profile/rename.js +1 -38
  237. package/dist/commands/profile/show.js +1 -52
  238. package/dist/commands/profile.js +1 -35
  239. package/dist/commands/push.js +9 -265
  240. package/dist/commands/revive.js +10 -181
  241. package/dist/commands/surface/node/cycle.js +1 -83
  242. package/dist/commands/surface/node/focus.js +1 -81
  243. package/dist/commands/surface/node/id.js +1 -38
  244. package/dist/commands/surface/node/pin.js +1 -42
  245. package/dist/commands/surface/node/placement.js +1 -134
  246. package/dist/commands/surface-edit.js +1 -157
  247. package/dist/commands/surface-inbox.js +1 -98
  248. package/dist/commands/surface-inspect.js +1 -39
  249. package/dist/commands/surface-node.js +1 -19
  250. package/dist/commands/surface-reload.js +2 -134
  251. package/dist/commands/surface-tmux-spread.js +1 -214
  252. package/dist/commands/surface.js +1 -28
  253. package/dist/commands/sys/branch.js +1 -19
  254. package/dist/commands/sys/config.js +1 -353
  255. package/dist/commands/sys/context/admin/actions.js +2 -246
  256. package/dist/commands/sys/context/admin/detail-panel.js +1 -247
  257. package/dist/commands/sys/context/admin/docs-panel.js +1 -191
  258. package/dist/commands/sys/context/admin/list-view.js +1 -183
  259. package/dist/commands/sys/context/admin/model.js +1 -229
  260. package/dist/commands/sys/context/admin/rail-panel.js +1 -227
  261. package/dist/commands/sys/context/admin/read-view.js +2 -194
  262. package/dist/commands/sys/context/admin/shell.js +1 -910
  263. package/dist/commands/sys/context/admin.js +2 -126
  264. package/dist/commands/sys/context/doc.js +3 -197
  265. package/dist/commands/sys/context/prompt-review.js +11 -291
  266. package/dist/commands/sys/context/resolve.js +10 -489
  267. package/dist/commands/sys/context/sysprompt.js +5 -96
  268. package/dist/commands/sys/context.js +1 -20
  269. package/dist/commands/sys/daemon.js +1 -313
  270. package/dist/commands/sys/doctor.js +1 -617
  271. package/dist/commands/sys/feedback.js +7 -228
  272. package/dist/commands/sys/logs.js +3 -129
  273. package/dist/commands/sys/migrate.js +1 -94
  274. package/dist/commands/sys/panels/broker-limits-panel.js +2 -110
  275. package/dist/commands/sys/panels/dependencies-panel.js +1 -80
  276. package/dist/commands/sys/panels/keybindings-panel.js +1 -703
  277. package/dist/commands/sys/panels/models-panel.js +1 -1133
  278. package/dist/commands/sys/panels/plugins-panel.js +1 -80
  279. package/dist/commands/sys/panels/prefs-panel.js +1 -85
  280. package/dist/commands/sys/panels/profiles-panel.js +1 -601
  281. package/dist/commands/sys/panels/provider-panel.js +1 -538
  282. package/dist/commands/sys/settings-shell.js +1 -400
  283. package/dist/commands/sys/settings.js +1 -46
  284. package/dist/commands/sys/setup-core.js +6 -579
  285. package/dist/commands/sys/setup-settings-runner.js +1 -16
  286. package/dist/commands/sys/setup-wizard.js +1 -279
  287. package/dist/commands/sys/setup.js +1 -34
  288. package/dist/commands/sys/shared.js +1 -81
  289. package/dist/commands/sys/support/prepare.js +3 -239
  290. package/dist/commands/sys/support/submit.js +6 -524
  291. package/dist/commands/sys/support.js +1 -18
  292. package/dist/commands/sys/sync-deps.js +15 -498
  293. package/dist/commands/sys/sync-project-guidance.js +4 -481
  294. package/dist/commands/sys/sync-shared.js +1 -49
  295. package/dist/commands/sys/sync-skills.js +2 -311
  296. package/dist/commands/sys/sync.js +1 -18
  297. package/dist/commands/sys/update.js +1 -147
  298. package/dist/commands/sys/worktrees.js +5 -53
  299. package/dist/commands/sys.js +1 -18
  300. package/dist/core/activity-signal.js +2 -38
  301. package/dist/core/asset-root.js +1 -18
  302. package/dist/core/auth-file.js +2 -179
  303. package/dist/core/auth-interaction.js +3 -94
  304. package/dist/core/auto-update.js +4 -94
  305. package/dist/core/bash-guard.js +11 -393
  306. package/dist/core/bash-jobs.js +7 -411
  307. package/dist/core/bootstrap.js +2 -53
  308. package/dist/core/broker-client/client.js +1 -184
  309. package/dist/core/broker-client/index.js +1 -13
  310. package/dist/core/broker-client/transport-relay.js +1 -157
  311. package/dist/core/broker-client/transport-socket.js +1 -179
  312. package/dist/core/broker-client/transport.js +1 -26
  313. package/dist/core/canvas/attention.js +1 -47
  314. package/dist/core/canvas/boot-id.js +1 -26
  315. package/dist/core/canvas/boot.js +1 -186
  316. package/dist/core/canvas/browse/app.js +3 -919
  317. package/dist/core/canvas/browse/model.js +1 -477
  318. package/dist/core/canvas/browse/pins.js +1 -29
  319. package/dist/core/canvas/browse/render.js +3 -1055
  320. package/dist/core/canvas/canvas.js +15 -922
  321. package/dist/core/canvas/crons.js +11 -481
  322. package/dist/core/canvas/daemon-owner.js +2 -146
  323. package/dist/core/canvas/db.js +2 -100
  324. package/dist/core/canvas/deliveries.js +22 -283
  325. package/dist/core/canvas/delivery-contract.js +1 -8
  326. package/dist/core/canvas/executions.js +1 -68
  327. package/dist/core/canvas/extensions.js +1 -83
  328. package/dist/core/canvas/focuses.js +1 -77
  329. package/dist/core/canvas/history.js +24 -860
  330. package/dist/core/canvas/index.js +1 -15
  331. package/dist/core/canvas/install-id.js +1 -84
  332. package/dist/core/canvas/labels.js +1 -43
  333. package/dist/core/canvas/meta-file.js +1 -89
  334. package/dist/core/canvas/migrations.js +41 -1150
  335. package/dist/core/canvas/nav-model.js +1 -231
  336. package/dist/core/canvas/nav-render.js +1 -260
  337. package/dist/core/canvas/node-order.js +1 -37
  338. package/dist/core/canvas/node-recap.js +2 -67
  339. package/dist/core/canvas/node-sql-migration.js +2 -209
  340. package/dist/core/canvas/paths.js +1 -153
  341. package/dist/core/canvas/pid.js +4 -683
  342. package/dist/core/canvas/recovery.js +3 -565
  343. package/dist/core/canvas/remote-canvas-source.js +1 -288
  344. package/dist/core/canvas/remote-transport.js +1 -57
  345. package/dist/core/canvas/render-source.js +10 -635
  346. package/dist/core/canvas/sessions.js +1 -78
  347. package/dist/core/canvas/source.js +1 -47
  348. package/dist/core/canvas/status-glyph.js +1 -132
  349. package/dist/core/canvas/telemetry.js +1 -35
  350. package/dist/core/canvas/types.js +1 -6
  351. package/dist/core/canvas/waits.js +4 -68
  352. package/dist/core/canvas/worktrees.js +1 -93
  353. package/dist/core/clipboard-text.js +1 -57
  354. package/dist/core/command-hooks/artifact.js +1 -145
  355. package/dist/core/command-hooks/catalog.js +1 -38
  356. package/dist/core/command-hooks/compose.js +1 -99
  357. package/dist/core/command-hooks/discovery.js +1 -228
  358. package/dist/core/command-hooks/help.js +1 -18
  359. package/dist/core/command-hooks/index.js +1 -7
  360. package/dist/core/command-hooks/lifecycle-catalog.js +1 -9
  361. package/dist/core/command-hooks/lifecycle-create.js +1 -51
  362. package/dist/core/command-hooks/report.js +1 -28
  363. package/dist/core/command-hooks/schema.js +1 -157
  364. package/dist/core/command-hooks/transport/exec-invoke.js +1 -276
  365. package/dist/core/command-hooks/transport/exec-lifecycle.js +1 -211
  366. package/dist/core/command-manifests/manifest.js +1 -324
  367. package/dist/core/command-manifests/registry.js +1 -118
  368. package/dist/core/command-manifests/schema.js +1 -736
  369. package/dist/core/command-plugins/bundle.js +1 -261
  370. package/dist/core/command-plugins/compose.js +1 -65
  371. package/dist/core/command-plugins/discovery.js +1 -245
  372. package/dist/core/command-plugins/endpoint.js +1 -48
  373. package/dist/core/command-plugins/extensions.js +1 -166
  374. package/dist/core/command-plugins/help-addenda.js +1 -44
  375. package/dist/core/command-plugins/presence.js +1 -17
  376. package/dist/core/command-plugins/revalidate.js +2 -152
  377. package/dist/core/command-plugins/transport/exec-invoke.js +1 -215
  378. package/dist/core/command-plugins/transport/http-fetch.js +1 -68
  379. package/dist/core/command-plugins/transport/http-invoke.js +3 -546
  380. package/dist/core/command.js +10 -739
  381. package/dist/core/config.js +1 -1059
  382. package/dist/core/document-lines.js +3 -6
  383. package/dist/core/env-name.js +1 -9
  384. package/dist/core/errors.js +1 -52
  385. package/dist/core/events/emit.js +1 -17
  386. package/dist/core/events/envelope.js +1 -84
  387. package/dist/core/events/errors.js +1 -69
  388. package/dist/core/events/index.js +1 -4
  389. package/dist/core/events/operation-id.js +1 -24
  390. package/dist/core/events/read.js +1 -623
  391. package/dist/core/events/serialize.js +1 -199
  392. package/dist/core/events/source.js +1 -31
  393. package/dist/core/events/types.js +1 -11
  394. package/dist/core/exclusive-lock.js +1 -197
  395. package/dist/core/fault-classifier.js +1 -96
  396. package/dist/core/feed/feed.js +7 -202
  397. package/dist/core/feed/inbox-migrate.js +3 -135
  398. package/dist/core/feed/inbox.js +10 -122
  399. package/dist/core/feed/messages.js +6 -212
  400. package/dist/core/frontmatter.js +1 -35
  401. package/dist/core/fs-utils.js +3 -202
  402. package/dist/core/git.js +2 -103
  403. package/dist/core/help.js +9 -310
  404. package/dist/core/host-exports/builtins.js +9 -68
  405. package/dist/core/host-exports/export.js +3 -124
  406. package/dist/core/human/action-binding.js +1 -40
  407. package/dist/core/human/answer-text.js +5 -100
  408. package/dist/core/human/answer.js +1 -119
  409. package/dist/core/human/claim.js +3 -67
  410. package/dist/core/human/completion.js +1 -27
  411. package/dist/core/human/component-docs.js +78 -272
  412. package/dist/core/human/convention.js +2 -82
  413. package/dist/core/human/feedback-companion.js +1 -106
  414. package/dist/core/human/feedback.js +1 -88
  415. package/dist/core/human/page-authoring.js +1 -19
  416. package/dist/core/human/page-catalog.js +1 -172
  417. package/dist/core/human/page-errors.js +1 -7
  418. package/dist/core/human/page-eval.js +1 -125
  419. package/dist/core/human/page-html-markdown.js +8 -260
  420. package/dist/core/human/page-markdown.js +17 -295
  421. package/dist/core/human/page-schema.js +1 -373
  422. package/dist/core/human/page-synth.js +8 -27
  423. package/dist/core/human/page.js +1 -198
  424. package/dist/core/human/requests.js +15 -466
  425. package/dist/core/human/review-schema.js +1 -34
  426. package/dist/core/human/root.js +1 -11
  427. package/dist/core/human/scan.js +1 -69
  428. package/dist/core/human/summary.js +1 -5
  429. package/dist/core/human/tickets.js +1 -171
  430. package/dist/core/human/types.js +0 -1
  431. package/dist/core/human/visible-paths.js +1 -77
  432. package/dist/core/human-actions.js +1 -101
  433. package/dist/core/inspector/chrome.js +1 -14
  434. package/dist/core/inspector/contract.js +0 -1
  435. package/dist/core/inspector/core.js +2 -295
  436. package/dist/core/inspector/host.js +4 -538
  437. package/dist/core/inspector/model.js +2 -226
  438. package/dist/core/inspector/text.js +6 -45
  439. package/dist/core/inspector/transport.js +1 -36
  440. package/dist/core/inspector/tui.js +2 -295
  441. package/dist/core/installed-plugins.js +1 -78
  442. package/dist/core/io.js +7 -356
  443. package/dist/core/keybindings/attach-control.js +1 -42
  444. package/dist/core/keybindings/background-bash.js +1 -33
  445. package/dist/core/keybindings/catalog.js +1 -256
  446. package/dist/core/keybindings/inbox.js +1 -25
  447. package/dist/core/keybindings/index.js +1 -7
  448. package/dist/core/keybindings/match.js +1 -127
  449. package/dist/core/keybindings/persistence.js +1 -49
  450. package/dist/core/keybindings/resolve.js +1 -348
  451. package/dist/core/keybindings/types.js +0 -1
  452. package/dist/core/locked-file.js +1 -118
  453. package/dist/core/log.js +3 -27
  454. package/dist/core/manifest-recovery.js +1 -72
  455. package/dist/core/manifest-stale.js +1 -39
  456. package/dist/core/manifest.js +1 -20
  457. package/dist/core/memory/doc-link-grammar.js +2 -109
  458. package/dist/core/memory/extensions.js +1 -221
  459. package/dist/core/memory/history.js +6 -268
  460. package/dist/core/memory/identity.js +1 -181
  461. package/dist/core/memory/inline-ref-grammar.js +1 -98
  462. package/dist/core/memory/inline-ref-guidance.js +2 -35
  463. package/dist/core/memory/inline-ref-inventory.js +1 -59
  464. package/dist/core/memory/lint.js +2 -671
  465. package/dist/core/memory/project-namespace.js +2 -85
  466. package/dist/core/memory/repository-association.js +1 -129
  467. package/dist/core/memory/tree.js +1 -93
  468. package/dist/core/memory-resolver.js +2 -611
  469. package/dist/core/model-config.js +1 -107
  470. package/dist/core/model-routes.js +1 -201
  471. package/dist/core/nested-stores.js +2 -166
  472. package/dist/core/output.js +7 -99
  473. package/dist/core/pagination.js +1 -88
  474. package/dist/core/plugin-swap-lock.js +1 -31
  475. package/dist/core/pool-credential-store.js +1 -116
  476. package/dist/core/predicate.js +1 -191
  477. package/dist/core/preview-registry.js +2 -411
  478. package/dist/core/preview-result-path.js +1 -26
  479. package/dist/core/profiles/default-binding.js +1 -24
  480. package/dist/core/profiles/deletion-reservation.js +1 -42
  481. package/dist/core/profiles/env-store.js +2 -162
  482. package/dist/core/profiles/fuzzy-match.js +1 -92
  483. package/dist/core/profiles/manifest.js +1 -574
  484. package/dist/core/profiles/select.js +35 -741
  485. package/dist/core/profiles/state-block.js +3 -17
  486. package/dist/core/provider-error-recognition.js +1 -74
  487. package/dist/core/provider-failure.js +1 -86
  488. package/dist/core/provider-management.js +1 -22
  489. package/dist/core/remote-canvas-target.js +1 -30
  490. package/dist/core/render.js +18 -138
  491. package/dist/core/resolver.js +1 -111
  492. package/dist/core/review/birth.js +1 -52
  493. package/dist/core/review/comments.js +5 -279
  494. package/dist/core/review/companion.js +1 -215
  495. package/dist/core/review/document.js +2 -138
  496. package/dist/core/review/project.js +1 -36
  497. package/dist/core/review/realize.js +1 -71
  498. package/dist/core/review/remap.js +4 -141
  499. package/dist/core/review/signal.js +1 -12
  500. package/dist/core/review/stage.js +1 -184
  501. package/dist/core/review/store.js +1 -168
  502. package/dist/core/review/types.js +1 -23
  503. package/dist/core/runtime/advertised-command-invocation.js +1 -233
  504. package/dist/core/runtime/auth-reload.js +1 -67
  505. package/dist/core/runtime/banner.js +1 -51
  506. package/dist/core/runtime/bearings-render.js +18 -250
  507. package/dist/core/runtime/bearings.js +7 -194
  508. package/dist/core/runtime/bin-contributions.js +2 -186
  509. package/dist/core/runtime/boot-root.js +1 -107
  510. package/dist/core/runtime/branded-host.js +2 -264
  511. package/dist/core/runtime/broker/auth-reload.js +1 -157
  512. package/dist/core/runtime/broker/client-registry.js +1 -179
  513. package/dist/core/runtime/broker/daemon-ops.js +1 -88
  514. package/dist/core/runtime/broker/engine-drive.js +1 -354
  515. package/dist/core/runtime/broker/engine-routing.js +1 -211
  516. package/dist/core/runtime/broker/event-projection.js +1 -193
  517. package/dist/core/runtime/broker/extension-abort.js +1 -36
  518. package/dist/core/runtime/broker/fault-retry.js +1 -588
  519. package/dist/core/runtime/broker/frame-client.js +1 -132
  520. package/dist/core/runtime/broker/frame-dispatch.js +1 -183
  521. package/dist/core/runtime/broker/frame-engine-control.js +1 -231
  522. package/dist/core/runtime/broker/frame-memory-refs.js +1 -41
  523. package/dist/core/runtime/broker/frame-model-query.js +1 -69
  524. package/dist/core/runtime/broker/frame-read.js +1 -116
  525. package/dist/core/runtime/broker/frame-replies.js +1 -64
  526. package/dist/core/runtime/broker/frame-session.js +4 -203
  527. package/dist/core/runtime/broker/held-deferred-inbox.js +1 -13
  528. package/dist/core/runtime/broker/inbox.js +13 -163
  529. package/dist/core/runtime/broker/node-named.js +1 -27
  530. package/dist/core/runtime/broker/read-ops.js +1 -171
  531. package/dist/core/runtime/broker/rebind.js +1 -318
  532. package/dist/core/runtime/broker/tool-groups.js +1 -246
  533. package/dist/core/runtime/broker/turn-admission.js +1 -31
  534. package/dist/core/runtime/broker/turn-ignition.js +1 -84
  535. package/dist/core/runtime/broker-cli.js +3 -81
  536. package/dist/core/runtime/broker-extension-render.js +5 -135
  537. package/dist/core/runtime/broker-inventory.js +1 -116
  538. package/dist/core/runtime/broker-persona-guidance.js +4 -154
  539. package/dist/core/runtime/broker-protocol.js +3 -152
  540. package/dist/core/runtime/broker-request.js +1 -85
  541. package/dist/core/runtime/broker-sdk.js +1 -129
  542. package/dist/core/runtime/broker.js +1 -1214
  543. package/dist/core/runtime/canvas-extensions.js +1 -96
  544. package/dist/core/runtime/chat-inventory-rows.js +1 -105
  545. package/dist/core/runtime/close.js +1 -265
  546. package/dist/core/runtime/command-expansion.js +9 -104
  547. package/dist/core/runtime/command-surface.js +1 -117
  548. package/dist/core/runtime/connectivity.js +1 -73
  549. package/dist/core/runtime/deliver-live.js +1 -88
  550. package/dist/core/runtime/fault-recovery.js +1 -83
  551. package/dist/core/runtime/fault.js +1 -17
  552. package/dist/core/runtime/fleet.js +1 -58
  553. package/dist/core/runtime/front-door-env.js +1 -16
  554. package/dist/core/runtime/front-door.js +7 -183
  555. package/dist/core/runtime/headless-pi.js +1 -161
  556. package/dist/core/runtime/host.js +1 -457
  557. package/dist/core/runtime/interactive-deliver.js +1 -51
  558. package/dist/core/runtime/invocation.js +0 -10
  559. package/dist/core/runtime/kickoff.js +30 -327
  560. package/dist/core/runtime/launch-config-worker.js +1 -12
  561. package/dist/core/runtime/launch-prompt.js +4 -13
  562. package/dist/core/runtime/launch-target.js +1 -55
  563. package/dist/core/runtime/launch.js +1 -483
  564. package/dist/core/runtime/lifecycle.js +2 -213
  565. package/dist/core/runtime/managed-provider-cooling.js +1 -62
  566. package/dist/core/runtime/memory.js +1 -17
  567. package/dist/core/runtime/model-registry.js +1 -13
  568. package/dist/core/runtime/model-selection.js +1 -135
  569. package/dist/core/runtime/model-swap.js +1 -86
  570. package/dist/core/runtime/naming.js +14 -298
  571. package/dist/core/runtime/nerd-font.js +2 -127
  572. package/dist/core/runtime/node-read.js +2 -386
  573. package/dist/core/runtime/nodes.js +1 -331
  574. package/dist/core/runtime/outcome-document.js +1 -97
  575. package/dist/core/runtime/package-health.js +4 -99
  576. package/dist/core/runtime/persona.js +2 -55
  577. package/dist/core/runtime/pi-cli.js +1 -65
  578. package/dist/core/runtime/pi-vendored.js +1 -66
  579. package/dist/core/runtime/placement-tmux.js +1 -81
  580. package/dist/core/runtime/placement.js +1 -386
  581. package/dist/core/runtime/promote.js +1 -174
  582. package/dist/core/runtime/prospective-inventory-cli.js +3 -61
  583. package/dist/core/runtime/prospective-inventory.js +2 -88
  584. package/dist/core/runtime/recap.js +27 -103
  585. package/dist/core/runtime/recycle.js +1 -190
  586. package/dist/core/runtime/reopen.js +1 -138
  587. package/dist/core/runtime/reset.js +1 -245
  588. package/dist/core/runtime/resume-root.js +10 -290
  589. package/dist/core/runtime/revive-all.js +1 -107
  590. package/dist/core/runtime/revive.js +4 -544
  591. package/dist/core/runtime/roadmap.js +4 -38
  592. package/dist/core/runtime/session-branch.js +1 -46
  593. package/dist/core/runtime/session-cycles.js +1 -110
  594. package/dist/core/runtime/session-list-cache.js +1 -406
  595. package/dist/core/runtime/session-visibility.js +1 -99
  596. package/dist/core/runtime/shell-expansion.js +9 -100
  597. package/dist/core/runtime/situational-context.js +2 -67
  598. package/dist/core/runtime/situational-live.js +1 -41
  599. package/dist/core/runtime/spawn-env.js +1 -255
  600. package/dist/core/runtime/spawn.js +3 -577
  601. package/dist/core/runtime/stamp/channel.js +1 -76
  602. package/dist/core/runtime/stamp/protocol.js +1 -113
  603. package/dist/core/runtime/stop-guard.js +7 -116
  604. package/dist/core/runtime/stop-signals.js +1 -46
  605. package/dist/core/runtime/stream-watchdog.js +1 -134
  606. package/dist/core/runtime/structured-output.js +4 -156
  607. package/dist/core/runtime/surface-bg.js +1 -85
  608. package/dist/core/runtime/tmux-bindings.js +4 -730
  609. package/dist/core/runtime/tmux-chrome.js +1 -5
  610. package/dist/core/runtime/tmux-driver.js +7 -637
  611. package/dist/core/runtime/tool-group-summary.js +6 -85
  612. package/dist/core/runtime/turn-visibility.js +1 -31
  613. package/dist/core/runtime/view-socket.js +1 -83
  614. package/dist/core/runtime/warm-pool.js +1 -395
  615. package/dist/core/scope.js +1 -254
  616. package/dist/core/scoped-state/db.js +1 -135
  617. package/dist/core/scoped-state/migrate.js +3 -181
  618. package/dist/core/scoped-state/paths.js +1 -27
  619. package/dist/core/scoped-state/profiles.js +1 -62
  620. package/dist/core/scoped-state/providers.js +1 -8
  621. package/dist/core/scoped-state/schema.js +3 -16
  622. package/dist/core/scoped-state/settings.js +1 -82
  623. package/dist/core/secrets.js +2 -55
  624. package/dist/core/self-update.js +1 -71
  625. package/dist/core/session-model/session-state.js +1 -180
  626. package/dist/core/shell-segments.js +4 -169
  627. package/dist/core/spawn.js +1 -26
  628. package/dist/core/stdout-errors.js +1 -14
  629. package/dist/core/subscription-state.js +3 -193
  630. package/dist/core/substrate/frontmatter-validation.js +1 -105
  631. package/dist/core/substrate/gate-explain.js +1 -424
  632. package/dist/core/substrate/gate.js +1 -26
  633. package/dist/core/substrate/index.js +1 -30
  634. package/dist/core/substrate/injected-store.js +1 -249
  635. package/dist/core/substrate/listings.js +1 -115
  636. package/dist/core/substrate/on-read-node.js +1 -36
  637. package/dist/core/substrate/on-read.js +9 -315
  638. package/dist/core/substrate/plan.js +1 -266
  639. package/dist/core/substrate/render-node.js +1 -30
  640. package/dist/core/substrate/render.js +65 -689
  641. package/dist/core/substrate/schema.js +1 -186
  642. package/dist/core/substrate/session-cache.js +1 -83
  643. package/dist/core/substrate/subject-fields.js +1 -35
  644. package/dist/core/substrate/subject.js +1 -47
  645. package/dist/core/substrate/surface-match.js +1 -242
  646. package/dist/core/termrender/code-doc.js +5 -92
  647. package/dist/core/termrender/display.js +2 -56
  648. package/dist/core/termrender/termrender.js +14 -719
  649. package/dist/core/termrender/version.js +1 -1
  650. package/dist/core/timing.js +2 -94
  651. package/dist/core/tui/draw.js +2 -378
  652. package/dist/core/tui/fuzzy.js +1 -38
  653. package/dist/core/tui/markdown.js +3 -407
  654. package/dist/core/tui/page-host.js +1 -74
  655. package/dist/core/tui/panel.js +1 -137
  656. package/dist/core/tui/terminal.js +2 -100
  657. package/dist/core/user-settings.js +1 -454
  658. package/dist/core/wake.js +1 -296
  659. package/dist/core/worktree-close.js +6 -228
  660. package/dist/core/worktree-containment.js +3 -48
  661. package/dist/core/worktree-landing.js +4 -56
  662. package/dist/core/worktree-mutation-async.js +10 -280
  663. package/dist/core/worktree-quarantine.js +1 -54
  664. package/dist/core/worktree-sweep.js +6 -453
  665. package/dist/core/worktree.js +18 -899
  666. package/dist/daemon/api/bridge.js +8 -418
  667. package/dist/daemon/api/handlers/attach.js +1 -65
  668. package/dist/daemon/api/handlers/bash-jobs.js +2 -91
  669. package/dist/daemon/api/handlers/broker-ops.js +1 -447
  670. package/dist/daemon/api/handlers/broker-recovery.js +1 -251
  671. package/dist/daemon/api/handlers/canvas.js +6 -490
  672. package/dist/daemon/api/handlers/chat-inventory.js +1 -25
  673. package/dist/daemon/api/handlers/crons.js +1 -373
  674. package/dist/daemon/api/handlers/daemon.js +1 -76
  675. package/dist/daemon/api/handlers/feedback-comments.js +3 -199
  676. package/dist/daemon/api/handlers/files.js +1 -63
  677. package/dist/daemon/api/handlers/focus.js +1 -92
  678. package/dist/daemon/api/handlers/health.js +1 -76
  679. package/dist/daemon/api/handlers/human-requests.js +1 -379
  680. package/dist/daemon/api/handlers/human.js +1 -3
  681. package/dist/daemon/api/handlers/inbox-page.js +1 -89
  682. package/dist/daemon/api/handlers/inbox.js +1 -301
  683. package/dist/daemon/api/handlers/memory.js +1 -50
  684. package/dist/daemon/api/handlers/messages.js +2 -506
  685. package/dist/daemon/api/handlers/model-config.js +1 -44
  686. package/dist/daemon/api/handlers/modelauth.js +1 -165
  687. package/dist/daemon/api/handlers/node-outcomes.js +1 -181
  688. package/dist/daemon/api/handlers/nodes.js +1 -939
  689. package/dist/daemon/api/handlers/profiles.js +1 -140
  690. package/dist/daemon/api/handlers/prospective-chat-inventory.js +1 -59
  691. package/dist/daemon/api/handlers/reports.js +16 -332
  692. package/dist/daemon/api/handlers/review-comments.js +1 -465
  693. package/dist/daemon/api/handlers/reviews.js +1 -200
  694. package/dist/daemon/api/handlers/subscriptions.js +1 -53
  695. package/dist/daemon/api/handlers/validate.js +1 -58
  696. package/dist/daemon/api/handlers/worktree.js +1 -39
  697. package/dist/daemon/api/map.js +2 -735
  698. package/dist/daemon/api/router.js +1 -190
  699. package/dist/daemon/api/server.js +11 -408
  700. package/dist/daemon/boot-migrations.js +1 -31
  701. package/dist/daemon/companion-retire.js +1 -34
  702. package/dist/daemon/control.js +1 -22
  703. package/dist/daemon/cron/armed-context.js +1 -100
  704. package/dist/daemon/cron/capture.js +2 -45
  705. package/dist/daemon/cron/disposition.js +1 -55
  706. package/dist/daemon/cron/escalation.js +3 -124
  707. package/dist/daemon/cron/held.js +1 -20
  708. package/dist/daemon/cron/lease-recovery.js +1 -119
  709. package/dist/daemon/cron/live-runs.js +1 -23
  710. package/dist/daemon/cron/passes.js +1 -58
  711. package/dist/daemon/cron/settle.js +1 -61
  712. package/dist/daemon/cron/sinks.js +2 -59
  713. package/dist/daemon/cron-run.js +1 -405
  714. package/dist/daemon/crtrd-cli.js +1 -23
  715. package/dist/daemon/crtrd.js +8 -854
  716. package/dist/daemon/delivery/run-delivery.js +1 -164
  717. package/dist/daemon/fleet.js +17 -475
  718. package/dist/daemon/human/finish.js +10 -179
  719. package/dist/daemon/human/settle.js +1 -89
  720. package/dist/daemon/human/sweep.js +1 -66
  721. package/dist/daemon/manage.js +2 -595
  722. package/dist/daemon/messaging/node-message.js +1 -99
  723. package/dist/daemon/park-activity.js +1 -30
  724. package/dist/daemon/park-pending.js +1 -52
  725. package/dist/daemon/pidfile.js +1 -37
  726. package/dist/daemon/profile-delete.js +1 -306
  727. package/dist/daemon/reconcilers/bash-deadline.js +1 -80
  728. package/dist/daemon/reconcilers/broker-supervision.js +4 -761
  729. package/dist/daemon/reconcilers/controller-death.js +1 -14
  730. package/dist/daemon/reconcilers/cron-lane.js +1 -29
  731. package/dist/daemon/reconcilers/delivery-lane.js +1 -130
  732. package/dist/daemon/reconcilers/live-obligation.js +1 -87
  733. package/dist/daemon/reconcilers/managed-worktree-sweep.js +1 -202
  734. package/dist/daemon/reconcilers/node-deadline.js +1 -82
  735. package/dist/daemon/reconcilers/node-lifecycle/freeze-lane.js +1 -172
  736. package/dist/daemon/reconcilers/node-lifecycle/respawn-policy.js +1 -59
  737. package/dist/daemon/reconcilers/node-lifecycle/terminating.js +1 -12
  738. package/dist/daemon/reconcilers/node-lifecycle/tick.js +1 -146
  739. package/dist/daemon/reconcilers/node-lifecycle/wants-execution.js +1 -11
  740. package/dist/daemon/reconcilers/pending-review-submit.js +1 -36
  741. package/dist/daemon/reconcilers/storage-maintenance.js +1 -207
  742. package/dist/daemon/review/comment-notify.js +2 -109
  743. package/dist/daemon/review/companion.js +1 -29
  744. package/dist/daemon/review/deliver.js +3 -8
  745. package/dist/daemon/review/finish.js +1 -122
  746. package/dist/daemon/review/sweep.js +1 -18
  747. package/dist/daemon/startup-policy.js +1 -1
  748. package/dist/daemon/supervise-cadence.js +1 -6
  749. package/dist/hook-authoring.js +5 -447
  750. package/dist/hook-process.js +1 -34
  751. package/dist/index.js +1 -52
  752. package/dist/migrations/001-surfaces-frontmatter.js +1 -161
  753. package/dist/migrations/002-profile-project-memory.js +1 -72
  754. package/dist/migrations/003-repository-root-memory-identity/front-door.js +11 -231
  755. package/dist/migrations/003-repository-root-memory-identity/index.js +5 -513
  756. package/dist/migrations/003-repository-root-memory-identity/references.js +5 -469
  757. package/dist/migrations/003-repository-root-memory-identity/repository-facts.js +3 -349
  758. package/dist/migrations/activation.js +2 -89
  759. package/dist/migrations/convergent.js +2 -82
  760. package/dist/migrations/corpus.js +3 -483
  761. package/dist/migrations/frontmatter-splice.js +8 -176
  762. package/dist/migrations/profile-manifests.js +2 -70
  763. package/dist/migrations/registry.js +1 -42
  764. package/dist/migrations/runner.js +1 -85
  765. package/dist/migrations/types.js +0 -24
  766. package/dist/pi-extensions/broker-local.js +2 -106
  767. package/dist/pi-extensions/canvas-bash-valve.js +7 -461
  768. package/dist/pi-extensions/canvas-context-intro.js +2 -113
  769. package/dist/pi-extensions/canvas-doc-substrate.js +9 -178
  770. package/dist/pi-extensions/canvas-goal-capture.js +1 -83
  771. package/dist/pi-extensions/canvas-inbox-watcher.js +1 -1010
  772. package/dist/pi-extensions/canvas-passive-context.js +14 -203
  773. package/dist/pi-extensions/canvas-preview-result.js +2 -72
  774. package/dist/pi-extensions/canvas-prompt-scrub.js +2 -54
  775. package/dist/pi-extensions/canvas-recap.js +11 -405
  776. package/dist/pi-extensions/canvas-review-boundary.js +3 -63
  777. package/dist/pi-extensions/canvas-stamp.js +2 -77
  778. package/dist/pi-extensions/canvas-stophook.js +1 -643
  779. package/dist/pi-extensions/canvas-structured-output.js +13 -35
  780. package/dist/pi-extensions/canvas-tool-guide.js +9 -78
  781. package/dist/pi-extensions/envelope-merge.js +8 -29
  782. package/dist/prompts/review.js +20 -42
  783. package/dist/shared/birth-announcement.js +1 -25
  784. package/dist/shared/crtr-version.js +1 -18
  785. package/dist/shared/env.js +1 -214
  786. package/dist/shared/generated-context.js +11 -226
  787. package/dist/shared/predicates.js +1 -4
  788. package/dist/shared/shell-quote.js +1 -5
  789. package/dist/shared/tool-groups.js +1 -64
  790. package/dist/shared/working-activity.js +1 -27
  791. package/dist/suppress-experimental-warnings.js +1 -15
  792. package/dist/types.js +1 -185
  793. package/docs/public-api.md +10 -9
  794. package/package.json +5 -4
  795. package/runtime.lock.json +5 -5
  796. package/dist/api/__tests__/integration/client.test.d.ts +0 -1
  797. package/dist/api/__tests__/integration/client.test.js +0 -163
  798. package/dist/builtin-pi-packages/pi-crtr-extensions/__tests__/insights-active-init.test.ts +0 -98
  799. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/crtr-commands.test.ts +0 -93
  800. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/integration/provider-rotation.test.ts +0 -2530
  801. package/dist/clients/__tests__/helpers/human-daemon.d.ts +0 -11
  802. package/dist/clients/__tests__/helpers/human-daemon.js +0 -60
  803. package/dist/clients/attach/__tests__/attach-remote-readonly.test.d.ts +0 -1
  804. package/dist/clients/attach/__tests__/attach-remote-readonly.test.js +0 -97
  805. package/dist/clients/attach/__tests__/bash-call-width.test.d.ts +0 -1
  806. package/dist/clients/attach/__tests__/bash-call-width.test.js +0 -38
  807. package/dist/clients/attach/__tests__/chat-view-snapshot-ordering.test.d.ts +0 -1
  808. package/dist/clients/attach/__tests__/chat-view-snapshot-ordering.test.js +0 -175
  809. package/dist/clients/attach/__tests__/completion-frecency.test.d.ts +0 -1
  810. package/dist/clients/attach/__tests__/completion-frecency.test.js +0 -35
  811. package/dist/clients/attach/__tests__/context-message.test.d.ts +0 -1
  812. package/dist/clients/attach/__tests__/context-message.test.js +0 -130
  813. package/dist/clients/attach/__tests__/crtr-output.test.d.ts +0 -1
  814. package/dist/clients/attach/__tests__/crtr-output.test.js +0 -68
  815. package/dist/clients/attach/__tests__/diagram.test.d.ts +0 -1
  816. package/dist/clients/attach/__tests__/diagram.test.js +0 -42
  817. package/dist/clients/attach/__tests__/edit-diff.test.d.ts +0 -1
  818. package/dist/clients/attach/__tests__/edit-diff.test.js +0 -31
  819. package/dist/clients/attach/__tests__/frame-selection.test.d.ts +0 -1
  820. package/dist/clients/attach/__tests__/frame-selection.test.js +0 -84
  821. package/dist/clients/attach/__tests__/group-activity.test.d.ts +0 -1
  822. package/dist/clients/attach/__tests__/group-activity.test.js +0 -165
  823. package/dist/clients/attach/__tests__/oauth-dialog-lifecycle.test.d.ts +0 -1
  824. package/dist/clients/attach/__tests__/oauth-dialog-lifecycle.test.js +0 -83
  825. package/dist/clients/attach/__tests__/pane-tag-successor.test.d.ts +0 -1
  826. package/dist/clients/attach/__tests__/pane-tag-successor.test.js +0 -56
  827. package/dist/clients/attach/__tests__/profile-files.test.d.ts +0 -1
  828. package/dist/clients/attach/__tests__/profile-files.test.js +0 -21
  829. package/dist/clients/attach/__tests__/prompt-preview.test.d.ts +0 -1
  830. package/dist/clients/attach/__tests__/prompt-preview.test.js +0 -21
  831. package/dist/clients/attach/__tests__/ref-autocomplete.test.d.ts +0 -1
  832. package/dist/clients/attach/__tests__/ref-autocomplete.test.js +0 -64
  833. package/dist/clients/attach/__tests__/titled-editor-paste.test.d.ts +0 -1
  834. package/dist/clients/attach/__tests__/titled-editor-paste.test.js +0 -114
  835. package/dist/clients/attach/__tests__/titled-editor-preview.test.d.ts +0 -1
  836. package/dist/clients/attach/__tests__/titled-editor-preview.test.js +0 -83
  837. package/dist/clients/inbox/__tests__/integration/inbox-controller.test.d.ts +0 -1
  838. package/dist/clients/inbox/__tests__/integration/inbox-controller.test.js +0 -81
  839. package/dist/clients/inbox/__tests__/integration/mount-panel.test.d.ts +0 -1
  840. package/dist/clients/inbox/__tests__/integration/mount-panel.test.js +0 -135
  841. package/dist/clients/inbox/__tests__/integration/stale-row-activation.test.d.ts +0 -1
  842. package/dist/clients/inbox/__tests__/integration/stale-row-activation.test.js +0 -66
  843. package/dist/clients/inbox/review/__tests__/editor-roundtrip.test.d.ts +0 -1
  844. package/dist/clients/inbox/review/__tests__/editor-roundtrip.test.js +0 -35
  845. package/dist/clients/inbox/review/__tests__/review-core.test.d.ts +0 -1
  846. package/dist/clients/inbox/review/__tests__/review-core.test.js +0 -52
  847. package/dist/clients/inbox/review/__tests__/teardown-notice.test.d.ts +0 -1
  848. package/dist/clients/inbox/review/__tests__/teardown-notice.test.js +0 -100
  849. package/dist/commands/__tests__/api-client-cold-start-diagnostic.test.d.ts +0 -1
  850. package/dist/commands/__tests__/api-client-cold-start-diagnostic.test.js +0 -69
  851. package/dist/commands/__tests__/human.test.d.ts +0 -1
  852. package/dist/commands/__tests__/human.test.js +0 -172
  853. package/dist/commands/__tests__/integration/dashboard-snapshot.test.d.ts +0 -1
  854. package/dist/commands/__tests__/integration/dashboard-snapshot.test.js +0 -237
  855. package/dist/commands/__tests__/integration/migrate.test.d.ts +0 -1
  856. package/dist/commands/__tests__/integration/migrate.test.js +0 -1330
  857. package/dist/commands/__tests__/node-message.test.d.ts +0 -1
  858. package/dist/commands/__tests__/node-message.test.js +0 -112
  859. package/dist/commands/__tests__/node-new.test.d.ts +0 -1
  860. package/dist/commands/__tests__/node-new.test.js +0 -58
  861. package/dist/commands/__tests__/revive-now-gate.test.d.ts +0 -1
  862. package/dist/commands/__tests__/revive-now-gate.test.js +0 -62
  863. package/dist/commands/__tests__/seam/daemon-status.test.d.ts +0 -1
  864. package/dist/commands/__tests__/seam/daemon-status.test.js +0 -29
  865. package/dist/commands/__tests__/surface-reload-target.test.d.ts +0 -1
  866. package/dist/commands/__tests__/surface-reload-target.test.js +0 -21
  867. package/dist/commands/memory/__tests__/command-selector-and-mutation-guards.test.d.ts +0 -1
  868. package/dist/commands/memory/__tests__/command-selector-and-mutation-guards.test.js +0 -379
  869. package/dist/commands/memory/__tests__/memory-list-and-lint-ignore.test.d.ts +0 -1
  870. package/dist/commands/memory/__tests__/memory-list-and-lint-ignore.test.js +0 -124
  871. package/dist/commands/memory/__tests__/repository-root-lint.test.d.ts +0 -1
  872. package/dist/commands/memory/__tests__/repository-root-lint.test.js +0 -148
  873. package/dist/commands/sys/__tests__/config-model-ladders.test.d.ts +0 -1
  874. package/dist/commands/sys/__tests__/config-model-ladders.test.js +0 -114
  875. package/dist/commands/sys/__tests__/setup-core.test.d.ts +0 -1
  876. package/dist/commands/sys/__tests__/setup-core.test.js +0 -45
  877. package/dist/commands/sys/__tests__/sync-project-guidance.test.d.ts +0 -1
  878. package/dist/commands/sys/__tests__/sync-project-guidance.test.js +0 -244
  879. package/dist/core/__tests__/bash-guard.test.d.ts +0 -1
  880. package/dist/core/__tests__/bash-guard.test.js +0 -190
  881. package/dist/core/__tests__/boot-fault-attempt.test.d.ts +0 -1
  882. package/dist/core/__tests__/boot-fault-attempt.test.js +0 -105
  883. package/dist/core/__tests__/boot.test.d.ts +0 -1
  884. package/dist/core/__tests__/boot.test.js +0 -274
  885. package/dist/core/__tests__/branded-host-concurrency.test.d.ts +0 -1
  886. package/dist/core/__tests__/branded-host-concurrency.test.js +0 -72
  887. package/dist/core/__tests__/broker-extension-canvas-db-boundary.test.d.ts +0 -1
  888. package/dist/core/__tests__/broker-extension-canvas-db-boundary.test.js +0 -75
  889. package/dist/core/__tests__/broker-launch-candidates.test.d.ts +0 -1
  890. package/dist/core/__tests__/broker-launch-candidates.test.js +0 -311
  891. package/dist/core/__tests__/broker-preflight.test.d.ts +0 -1
  892. package/dist/core/__tests__/broker-preflight.test.js +0 -95
  893. package/dist/core/__tests__/broker-stream-watchdog-floor.test.d.ts +0 -1
  894. package/dist/core/__tests__/broker-stream-watchdog-floor.test.js +0 -82
  895. package/dist/core/__tests__/broker-turn-admission.test.d.ts +0 -1
  896. package/dist/core/__tests__/broker-turn-admission.test.js +0 -44
  897. package/dist/core/__tests__/canvas-db-boundary.test.d.ts +0 -1
  898. package/dist/core/__tests__/canvas-db-boundary.test.js +0 -46
  899. package/dist/core/__tests__/canvas-inbox-watcher-hold.test.d.ts +0 -1
  900. package/dist/core/__tests__/canvas-inbox-watcher-hold.test.js +0 -710
  901. package/dist/core/__tests__/canvas-inbox-watcher-naming.test.d.ts +0 -1
  902. package/dist/core/__tests__/canvas-inbox-watcher-naming.test.js +0 -310
  903. package/dist/core/__tests__/canvas-inbox-watcher.test.d.ts +0 -1
  904. package/dist/core/__tests__/canvas-inbox-watcher.test.js +0 -397
  905. package/dist/core/__tests__/canvas.test.d.ts +0 -1
  906. package/dist/core/__tests__/canvas.test.js +0 -138
  907. package/dist/core/__tests__/child-death-wake.test.d.ts +0 -1
  908. package/dist/core/__tests__/child-death-wake.test.js +0 -153
  909. package/dist/core/__tests__/cli-help-contract.test.d.ts +0 -1
  910. package/dist/core/__tests__/cli-help-contract.test.js +0 -152
  911. package/dist/core/__tests__/close.test.d.ts +0 -1
  912. package/dist/core/__tests__/close.test.js +0 -284
  913. package/dist/core/__tests__/collectible.test.d.ts +0 -1
  914. package/dist/core/__tests__/collectible.test.js +0 -89
  915. package/dist/core/__tests__/config-change-delta.test.d.ts +0 -1
  916. package/dist/core/__tests__/config-change-delta.test.js +0 -108
  917. package/dist/core/__tests__/context-intro.test.d.ts +0 -1
  918. package/dist/core/__tests__/context-intro.test.js +0 -123
  919. package/dist/core/__tests__/cron-armed-context-failure.test.d.ts +0 -1
  920. package/dist/core/__tests__/cron-armed-context-failure.test.js +0 -150
  921. package/dist/core/__tests__/cron-held-settlement.test.d.ts +0 -1
  922. package/dist/core/__tests__/cron-held-settlement.test.js +0 -240
  923. package/dist/core/__tests__/cron-node-sink-parked-root.test.d.ts +0 -1
  924. package/dist/core/__tests__/cron-node-sink-parked-root.test.js +0 -166
  925. package/dist/core/__tests__/cron-self-cancel-delivery.test.d.ts +0 -1
  926. package/dist/core/__tests__/cron-self-cancel-delivery.test.js +0 -84
  927. package/dist/core/__tests__/cron-timeout-descendants.test.d.ts +0 -1
  928. package/dist/core/__tests__/cron-timeout-descendants.test.js +0 -114
  929. package/dist/core/__tests__/daemon-boot.test.d.ts +0 -1
  930. package/dist/core/__tests__/daemon-boot.test.js +0 -422
  931. package/dist/core/__tests__/daemon-wedge.test.d.ts +0 -1
  932. package/dist/core/__tests__/daemon-wedge.test.js +0 -106
  933. package/dist/core/__tests__/dead-node-policy-table.test.d.ts +0 -1
  934. package/dist/core/__tests__/dead-node-policy-table.test.js +0 -77
  935. package/dist/core/__tests__/events-contract.test.d.ts +0 -1
  936. package/dist/core/__tests__/events-contract.test.js +0 -76
  937. package/dist/core/__tests__/extension-abort.test.d.ts +0 -1
  938. package/dist/core/__tests__/extension-abort.test.js +0 -21
  939. package/dist/core/__tests__/fault-classifier.test.d.ts +0 -1
  940. package/dist/core/__tests__/fault-classifier.test.js +0 -138
  941. package/dist/core/__tests__/fixtures/api-server-host.d.ts +0 -1
  942. package/dist/core/__tests__/fixtures/api-server-host.js +0 -47
  943. package/dist/core/__tests__/fixtures/c3-custom-provider-ext.d.ts +0 -2
  944. package/dist/core/__tests__/fixtures/c3-custom-provider-ext.js +0 -34
  945. package/dist/core/__tests__/fixtures/c5-command-boundary-ext.d.ts +0 -2
  946. package/dist/core/__tests__/fixtures/c5-command-boundary-ext.js +0 -32
  947. package/dist/core/__tests__/fixtures/fake-engine.d.ts +0 -347
  948. package/dist/core/__tests__/fixtures/fake-engine.js +0 -1509
  949. package/dist/core/__tests__/fixtures/fake-pi-host.d.ts +0 -2
  950. package/dist/core/__tests__/fixtures/fake-pi-host.js +0 -311
  951. package/dist/core/__tests__/fixtures/memory-slash-live-probe.d.ts +0 -1
  952. package/dist/core/__tests__/fixtures/memory-slash-live-probe.js +0 -75
  953. package/dist/core/__tests__/fixtures/metadata-migration-race.d.ts +0 -1
  954. package/dist/core/__tests__/fixtures/metadata-migration-race.js +0 -49
  955. package/dist/core/__tests__/focuses.test.d.ts +0 -1
  956. package/dist/core/__tests__/focuses.test.js +0 -113
  957. package/dist/core/__tests__/fs-utils.test.d.ts +0 -1
  958. package/dist/core/__tests__/fs-utils.test.js +0 -50
  959. package/dist/core/__tests__/helpers/broker-clients.d.ts +0 -43
  960. package/dist/core/__tests__/helpers/broker-clients.js +0 -174
  961. package/dist/core/__tests__/helpers/fleet.d.ts +0 -12
  962. package/dist/core/__tests__/helpers/fleet.js +0 -50
  963. package/dist/core/__tests__/helpers/harness.d.ts +0 -124
  964. package/dist/core/__tests__/helpers/harness.js +0 -806
  965. package/dist/core/__tests__/helpers/viewer-panes.d.ts +0 -12
  966. package/dist/core/__tests__/helpers/viewer-panes.js +0 -133
  967. package/dist/core/__tests__/history-inbox.test.d.ts +0 -1
  968. package/dist/core/__tests__/history-inbox.test.js +0 -121
  969. package/dist/core/__tests__/human-action-delivery.test.d.ts +0 -1
  970. package/dist/core/__tests__/human-action-delivery.test.js +0 -162
  971. package/dist/core/__tests__/human-actions.test.d.ts +0 -1
  972. package/dist/core/__tests__/human-actions.test.js +0 -120
  973. package/dist/core/__tests__/inline-memory-refs.test.d.ts +0 -1
  974. package/dist/core/__tests__/inline-memory-refs.test.js +0 -225
  975. package/dist/core/__tests__/integration/broker-fork-seam.test.d.ts +0 -1
  976. package/dist/core/__tests__/integration/broker-fork-seam.test.js +0 -193
  977. package/dist/core/__tests__/integration/broker-sdk-wiring.test.d.ts +0 -1
  978. package/dist/core/__tests__/integration/broker-sdk-wiring.test.js +0 -750
  979. package/dist/core/__tests__/integration/broker-snapshot-history.test.d.ts +0 -1
  980. package/dist/core/__tests__/integration/broker-snapshot-history.test.js +0 -288
  981. package/dist/core/__tests__/integration/broker-wedge-supervision.test.d.ts +0 -1
  982. package/dist/core/__tests__/integration/broker-wedge-supervision.test.js +0 -103
  983. package/dist/core/__tests__/integration/command-plugins.test.d.ts +0 -1
  984. package/dist/core/__tests__/integration/command-plugins.test.js +0 -1200
  985. package/dist/core/__tests__/integration/deferred-no-wake.test.d.ts +0 -1
  986. package/dist/core/__tests__/integration/deferred-no-wake.test.js +0 -610
  987. package/dist/core/__tests__/integration/flagship-lifecycle.test.d.ts +0 -1
  988. package/dist/core/__tests__/integration/flagship-lifecycle.test.js +0 -264
  989. package/dist/core/__tests__/integration/fresh-home-commands.test.d.ts +0 -1
  990. package/dist/core/__tests__/integration/fresh-home-commands.test.js +0 -49
  991. package/dist/core/__tests__/integration/git-optional-locks.test.d.ts +0 -1
  992. package/dist/core/__tests__/integration/git-optional-locks.test.js +0 -81
  993. package/dist/core/__tests__/integration/host-teardown-process-group.test.d.ts +0 -1
  994. package/dist/core/__tests__/integration/host-teardown-process-group.test.js +0 -480
  995. package/dist/core/__tests__/integration/lifecycle-hooks.test.d.ts +0 -1
  996. package/dist/core/__tests__/integration/lifecycle-hooks.test.js +0 -498
  997. package/dist/core/__tests__/integration/live-mutation-verbs.test.d.ts +0 -1
  998. package/dist/core/__tests__/integration/live-mutation-verbs.test.js +0 -180
  999. package/dist/core/__tests__/integration/live-mutation.test.d.ts +0 -1
  1000. package/dist/core/__tests__/integration/live-mutation.test.js +0 -173
  1001. package/dist/core/__tests__/integration/plugin-revalidate.test.d.ts +0 -1
  1002. package/dist/core/__tests__/integration/plugin-revalidate.test.js +0 -359
  1003. package/dist/core/__tests__/integration/profile-pause.test.d.ts +0 -1
  1004. package/dist/core/__tests__/integration/profile-pause.test.js +0 -115
  1005. package/dist/core/__tests__/integration/refresh-stall-recycle.test.d.ts +0 -1
  1006. package/dist/core/__tests__/integration/refresh-stall-recycle.test.js +0 -151
  1007. package/dist/core/__tests__/integration/revive.test.d.ts +0 -1
  1008. package/dist/core/__tests__/integration/revive.test.js +0 -615
  1009. package/dist/core/__tests__/integration/spawn-root.test.d.ts +0 -1
  1010. package/dist/core/__tests__/integration/spawn-root.test.js +0 -536
  1011. package/dist/core/__tests__/integration/subscription-delivery.test.d.ts +0 -1
  1012. package/dist/core/__tests__/integration/subscription-delivery.test.js +0 -132
  1013. package/dist/core/__tests__/integration/tmux-surface.test.d.ts +0 -1
  1014. package/dist/core/__tests__/integration/tmux-surface.test.js +0 -330
  1015. package/dist/core/__tests__/integration/worktree-land.test.d.ts +0 -1
  1016. package/dist/core/__tests__/integration/worktree-land.test.js +0 -607
  1017. package/dist/core/__tests__/integration/worktree-reap.test.d.ts +0 -1
  1018. package/dist/core/__tests__/integration/worktree-reap.test.js +0 -842
  1019. package/dist/core/__tests__/kickoff.test.d.ts +0 -1
  1020. package/dist/core/__tests__/kickoff.test.js +0 -196
  1021. package/dist/core/__tests__/lifecycle-terminal-reasons.test.d.ts +0 -1
  1022. package/dist/core/__tests__/lifecycle-terminal-reasons.test.js +0 -62
  1023. package/dist/core/__tests__/lifecycle.test.d.ts +0 -1
  1024. package/dist/core/__tests__/lifecycle.test.js +0 -176
  1025. package/dist/core/__tests__/live-lifecycle-prompt.test.d.ts +0 -1
  1026. package/dist/core/__tests__/live-lifecycle-prompt.test.js +0 -63
  1027. package/dist/core/__tests__/memory-resolver-precedence.test.d.ts +0 -1
  1028. package/dist/core/__tests__/memory-resolver-precedence.test.js +0 -228
  1029. package/dist/core/__tests__/migration.test.d.ts +0 -1
  1030. package/dist/core/__tests__/migration.test.js +0 -946
  1031. package/dist/core/__tests__/model-pin-durability.test.d.ts +0 -1
  1032. package/dist/core/__tests__/model-pin-durability.test.js +0 -195
  1033. package/dist/core/__tests__/model-routes-config.test.d.ts +0 -1
  1034. package/dist/core/__tests__/model-routes-config.test.js +0 -150
  1035. package/dist/core/__tests__/nested-store-discovery.test.d.ts +0 -1
  1036. package/dist/core/__tests__/nested-store-discovery.test.js +0 -89
  1037. package/dist/core/__tests__/node-outcome.test.d.ts +0 -1
  1038. package/dist/core/__tests__/node-outcome.test.js +0 -246
  1039. package/dist/core/__tests__/on-read-crouter-home-fence.test.d.ts +0 -1
  1040. package/dist/core/__tests__/on-read-crouter-home-fence.test.js +0 -66
  1041. package/dist/core/__tests__/on-read-dedup-resume.test.d.ts +0 -1
  1042. package/dist/core/__tests__/on-read-dedup-resume.test.js +0 -132
  1043. package/dist/core/__tests__/on-read-nested-store.test.d.ts +0 -1
  1044. package/dist/core/__tests__/on-read-nested-store.test.js +0 -135
  1045. package/dist/core/__tests__/parse-argv-stdin-secret.test.d.ts +0 -1
  1046. package/dist/core/__tests__/parse-argv-stdin-secret.test.js +0 -68
  1047. package/dist/core/__tests__/passive-subscription.test.d.ts +0 -1
  1048. package/dist/core/__tests__/passive-subscription.test.js +0 -120
  1049. package/dist/core/__tests__/pid-identity-match.test.d.ts +0 -1
  1050. package/dist/core/__tests__/pid-identity-match.test.js +0 -145
  1051. package/dist/core/__tests__/pid-zombie.test.d.ts +0 -1
  1052. package/dist/core/__tests__/pid-zombie.test.js +0 -42
  1053. package/dist/core/__tests__/plugin-kinds.test.d.ts +0 -1
  1054. package/dist/core/__tests__/plugin-kinds.test.js +0 -182
  1055. package/dist/core/__tests__/plugin-link-symlinked-scope-root.test.d.ts +0 -1
  1056. package/dist/core/__tests__/plugin-link-symlinked-scope-root.test.js +0 -43
  1057. package/dist/core/__tests__/plugin-page-components.test.d.ts +0 -1
  1058. package/dist/core/__tests__/plugin-page-components.test.js +0 -159
  1059. package/dist/core/__tests__/preview-mirror-cap.test.d.ts +0 -1
  1060. package/dist/core/__tests__/preview-mirror-cap.test.js +0 -53
  1061. package/dist/core/__tests__/preview-registry-sync.test.d.ts +0 -1
  1062. package/dist/core/__tests__/preview-registry-sync.test.js +0 -107
  1063. package/dist/core/__tests__/profile-project-memory-delivery.test.d.ts +0 -1
  1064. package/dist/core/__tests__/profile-project-memory-delivery.test.js +0 -644
  1065. package/dist/core/__tests__/prospective-inventory-capability-parity.test.d.ts +0 -1
  1066. package/dist/core/__tests__/prospective-inventory-capability-parity.test.js +0 -91
  1067. package/dist/core/__tests__/prune.test.d.ts +0 -1
  1068. package/dist/core/__tests__/prune.test.js +0 -243
  1069. package/dist/core/__tests__/push-final-guard.test.d.ts +0 -1
  1070. package/dist/core/__tests__/push-final-guard.test.js +0 -191
  1071. package/dist/core/__tests__/relaunch-root.test.d.ts +0 -1
  1072. package/dist/core/__tests__/relaunch-root.test.js +0 -249
  1073. package/dist/core/__tests__/remote-canvas-target.test.d.ts +0 -1
  1074. package/dist/core/__tests__/remote-canvas-target.test.js +0 -93
  1075. package/dist/core/__tests__/repository-association.test.d.ts +0 -1
  1076. package/dist/core/__tests__/repository-association.test.js +0 -153
  1077. package/dist/core/__tests__/repository-root-identity.test.d.ts +0 -1
  1078. package/dist/core/__tests__/repository-root-identity.test.js +0 -223
  1079. package/dist/core/__tests__/respawn-throttle.test.d.ts +0 -1
  1080. package/dist/core/__tests__/respawn-throttle.test.js +0 -20
  1081. package/dist/core/__tests__/review-model-floor.test.d.ts +0 -1
  1082. package/dist/core/__tests__/review-model-floor.test.js +0 -83
  1083. package/dist/core/__tests__/revive-all.test.d.ts +0 -1
  1084. package/dist/core/__tests__/revive-all.test.js +0 -157
  1085. package/dist/core/__tests__/revive-capacity.test.d.ts +0 -1
  1086. package/dist/core/__tests__/revive-capacity.test.js +0 -184
  1087. package/dist/core/__tests__/revive-parked-fresh.test.d.ts +0 -1
  1088. package/dist/core/__tests__/revive-parked-fresh.test.js +0 -176
  1089. package/dist/core/__tests__/scope-crouter-home-fence.test.d.ts +0 -1
  1090. package/dist/core/__tests__/scope-crouter-home-fence.test.js +0 -55
  1091. package/dist/core/__tests__/seam/broker-attach-multiclient.test.d.ts +0 -1
  1092. package/dist/core/__tests__/seam/broker-attach-multiclient.test.js +0 -262
  1093. package/dist/core/__tests__/seam/broker-attach-stream.test.d.ts +0 -1
  1094. package/dist/core/__tests__/seam/broker-attach-stream.test.js +0 -176
  1095. package/dist/core/__tests__/seam/broker-cap-freeze.test.d.ts +0 -1
  1096. package/dist/core/__tests__/seam/broker-cap-freeze.test.js +0 -155
  1097. package/dist/core/__tests__/seam/broker-crash-teardown.test.d.ts +0 -1
  1098. package/dist/core/__tests__/seam/broker-crash-teardown.test.js +0 -131
  1099. package/dist/core/__tests__/seam/broker-pane-resolution.test.d.ts +0 -1
  1100. package/dist/core/__tests__/seam/broker-pane-resolution.test.js +0 -204
  1101. package/dist/core/__tests__/seam/broker-provider-retry.test.d.ts +0 -1
  1102. package/dist/core/__tests__/seam/broker-provider-retry.test.js +0 -686
  1103. package/dist/core/__tests__/seam/broker-startup-diagnostics.test.d.ts +0 -1
  1104. package/dist/core/__tests__/seam/broker-startup-diagnostics.test.js +0 -82
  1105. package/dist/core/__tests__/seam/broker-whip-interrupt.test.d.ts +0 -1
  1106. package/dist/core/__tests__/seam/broker-whip-interrupt.test.js +0 -50
  1107. package/dist/core/__tests__/seam/deadline-wake-delivery.test.d.ts +0 -1
  1108. package/dist/core/__tests__/seam/deadline-wake-delivery.test.js +0 -138
  1109. package/dist/core/__tests__/seam/dormancy-release.test.d.ts +0 -1
  1110. package/dist/core/__tests__/seam/dormancy-release.test.js +0 -516
  1111. package/dist/core/__tests__/seam/held-deferred-human-prompt.test.d.ts +0 -1
  1112. package/dist/core/__tests__/seam/held-deferred-human-prompt.test.js +0 -65
  1113. package/dist/core/__tests__/seam/inbox-reference-guidance.test.d.ts +0 -1
  1114. package/dist/core/__tests__/seam/inbox-reference-guidance.test.js +0 -84
  1115. package/dist/core/__tests__/seam/memory-slash-node-relative-inventory.test.d.ts +0 -1
  1116. package/dist/core/__tests__/seam/memory-slash-node-relative-inventory.test.js +0 -160
  1117. package/dist/core/__tests__/seam/node-outcome-delivery.test.d.ts +0 -1
  1118. package/dist/core/__tests__/seam/node-outcome-delivery.test.js +0 -177
  1119. package/dist/core/__tests__/seam/prospective-inventory-stdout.test.d.ts +0 -1
  1120. package/dist/core/__tests__/seam/prospective-inventory-stdout.test.js +0 -31
  1121. package/dist/core/__tests__/seam/reopen-invalidated-worktree.test.d.ts +0 -1
  1122. package/dist/core/__tests__/seam/reopen-invalidated-worktree.test.js +0 -60
  1123. package/dist/core/__tests__/seam/self-close-teardown.test.d.ts +0 -1
  1124. package/dist/core/__tests__/seam/self-close-teardown.test.js +0 -49
  1125. package/dist/core/__tests__/seam/yield-refresh-transaction.test.d.ts +0 -1
  1126. package/dist/core/__tests__/seam/yield-refresh-transaction.test.js +0 -100
  1127. package/dist/core/__tests__/secrets.test.d.ts +0 -1
  1128. package/dist/core/__tests__/secrets.test.js +0 -49
  1129. package/dist/core/__tests__/self-update.test.d.ts +0 -1
  1130. package/dist/core/__tests__/self-update.test.js +0 -46
  1131. package/dist/core/__tests__/session-branch.test.d.ts +0 -1
  1132. package/dist/core/__tests__/session-branch.test.js +0 -61
  1133. package/dist/core/__tests__/session-cycles.test.d.ts +0 -1
  1134. package/dist/core/__tests__/session-cycles.test.js +0 -133
  1135. package/dist/core/__tests__/session-model.test.d.ts +0 -1
  1136. package/dist/core/__tests__/session-model.test.js +0 -111
  1137. package/dist/core/__tests__/spawn-worktree-id-conflict.test.d.ts +0 -1
  1138. package/dist/core/__tests__/spawn-worktree-id-conflict.test.js +0 -71
  1139. package/dist/core/__tests__/stdin-body-no-discard.test.d.ts +0 -1
  1140. package/dist/core/__tests__/stdin-body-no-discard.test.js +0 -33
  1141. package/dist/core/__tests__/stdout-errors.test.d.ts +0 -1
  1142. package/dist/core/__tests__/stdout-errors.test.js +0 -16
  1143. package/dist/core/__tests__/stop-guard.test.d.ts +0 -1
  1144. package/dist/core/__tests__/stop-guard.test.js +0 -237
  1145. package/dist/core/__tests__/stream-watchdog.test.d.ts +0 -1
  1146. package/dist/core/__tests__/stream-watchdog.test.js +0 -154
  1147. package/dist/core/__tests__/subscription-pool-credential-guard.test.d.ts +0 -1
  1148. package/dist/core/__tests__/subscription-pool-credential-guard.test.js +0 -95
  1149. package/dist/core/__tests__/tmux-driver-boundary.test.d.ts +0 -1
  1150. package/dist/core/__tests__/tmux-driver-boundary.test.js +0 -50
  1151. package/dist/core/__tests__/warm-claim-preference-snapshot.test.d.ts +0 -1
  1152. package/dist/core/__tests__/warm-claim-preference-snapshot.test.js +0 -54
  1153. package/dist/core/__tests__/worktree-landing.test.d.ts +0 -1
  1154. package/dist/core/__tests__/worktree-landing.test.js +0 -11
  1155. package/dist/core/__tests__/yield-ensures-daemon.test.d.ts +0 -1
  1156. package/dist/core/__tests__/yield-ensures-daemon.test.js +0 -55
  1157. package/dist/core/broker-client/__tests__/transport-relay.test.d.ts +0 -1
  1158. package/dist/core/broker-client/__tests__/transport-relay.test.js +0 -214
  1159. package/dist/core/broker-client/__tests__/transport-socket.test.d.ts +0 -1
  1160. package/dist/core/broker-client/__tests__/transport-socket.test.js +0 -73
  1161. package/dist/core/canvas/__tests__/attention.test.d.ts +0 -1
  1162. package/dist/core/canvas/__tests__/attention.test.js +0 -83
  1163. package/dist/core/canvas/__tests__/history-transcript.test.d.ts +0 -1
  1164. package/dist/core/canvas/__tests__/history-transcript.test.js +0 -102
  1165. package/dist/core/canvas/__tests__/remote-canvas-source.test.d.ts +0 -1
  1166. package/dist/core/canvas/__tests__/remote-canvas-source.test.js +0 -328
  1167. package/dist/core/canvas/__tests__/remote-transport.test.d.ts +0 -1
  1168. package/dist/core/canvas/__tests__/remote-transport.test.js +0 -97
  1169. package/dist/core/canvas/__tests__/render-remote.test.d.ts +0 -1
  1170. package/dist/core/canvas/__tests__/render-remote.test.js +0 -243
  1171. package/dist/core/canvas/__tests__/session-window.test.d.ts +0 -1
  1172. package/dist/core/canvas/__tests__/session-window.test.js +0 -70
  1173. package/dist/core/feed/__tests__/inbox-migrate.test.d.ts +0 -1
  1174. package/dist/core/feed/__tests__/inbox-migrate.test.js +0 -49
  1175. package/dist/core/human/__tests__/page-catalog.test.d.ts +0 -1
  1176. package/dist/core/human/__tests__/page-catalog.test.js +0 -20
  1177. package/dist/core/human/__tests__/page-html-markdown.test.d.ts +0 -1
  1178. package/dist/core/human/__tests__/page-html-markdown.test.js +0 -48
  1179. package/dist/core/human/__tests__/page.test.d.ts +0 -1
  1180. package/dist/core/human/__tests__/page.test.js +0 -92
  1181. package/dist/core/keybindings/__tests__/resolve.test.d.ts +0 -1
  1182. package/dist/core/keybindings/__tests__/resolve.test.js +0 -171
  1183. package/dist/core/profiles/__tests__/env-store.test.d.ts +0 -1
  1184. package/dist/core/profiles/__tests__/env-store.test.js +0 -99
  1185. package/dist/core/profiles/__tests__/fuzzy-match.test.d.ts +0 -1
  1186. package/dist/core/profiles/__tests__/fuzzy-match.test.js +0 -51
  1187. package/dist/core/profiles/__tests__/root-profile.test.d.ts +0 -1
  1188. package/dist/core/profiles/__tests__/root-profile.test.js +0 -59
  1189. package/dist/core/review/__tests__/capture-origin.test.d.ts +0 -1
  1190. package/dist/core/review/__tests__/capture-origin.test.js +0 -150
  1191. package/dist/core/review/__tests__/comments.test.d.ts +0 -1
  1192. package/dist/core/review/__tests__/comments.test.js +0 -116
  1193. package/dist/core/review/__tests__/remap.test.d.ts +0 -1
  1194. package/dist/core/review/__tests__/remap.test.js +0 -177
  1195. package/dist/core/review/__tests__/stage-identity.test.d.ts +0 -1
  1196. package/dist/core/review/__tests__/stage-identity.test.js +0 -150
  1197. package/dist/core/runtime/__tests__/engine-route.test.d.ts +0 -1
  1198. package/dist/core/runtime/__tests__/engine-route.test.js +0 -36
  1199. package/dist/core/runtime/__tests__/install-id-cache-scoping.test.d.ts +0 -1
  1200. package/dist/core/runtime/__tests__/install-id-cache-scoping.test.js +0 -45
  1201. package/dist/core/runtime/__tests__/node-env.test.d.ts +0 -1
  1202. package/dist/core/runtime/__tests__/node-env.test.js +0 -73
  1203. package/dist/core/runtime/__tests__/spawn-env.test.d.ts +0 -1
  1204. package/dist/core/runtime/__tests__/spawn-env.test.js +0 -259
  1205. package/dist/core/substrate/__tests__/surface-match-command.test.d.ts +0 -1
  1206. package/dist/core/substrate/__tests__/surface-match-command.test.js +0 -89
  1207. package/dist/core/substrate/__tests__/surface-match-memory-read.test.d.ts +0 -1
  1208. package/dist/core/substrate/__tests__/surface-match-memory-read.test.js +0 -28
  1209. package/dist/core/substrate/__tests__/surface-match-pre-command.test.d.ts +0 -1
  1210. package/dist/core/substrate/__tests__/surface-match-pre-command.test.js +0 -92
  1211. package/dist/daemon/__tests__/autostart-storm.test.d.ts +0 -1
  1212. package/dist/daemon/__tests__/autostart-storm.test.js +0 -128
  1213. package/dist/daemon/__tests__/broker-ownership.test.d.ts +0 -1
  1214. package/dist/daemon/__tests__/broker-ownership.test.js +0 -25
  1215. package/dist/daemon/__tests__/daemon-ownership.test.d.ts +0 -1
  1216. package/dist/daemon/__tests__/daemon-ownership.test.js +0 -27
  1217. package/dist/daemon/__tests__/helpers/source-daemon.d.ts +0 -30
  1218. package/dist/daemon/__tests__/helpers/source-daemon.js +0 -176
  1219. package/dist/daemon/__tests__/integration/api-startup-readiness.test.d.ts +0 -1
  1220. package/dist/daemon/__tests__/integration/api-startup-readiness.test.js +0 -83
  1221. package/dist/daemon/__tests__/integration/migration-startup.test.d.ts +0 -1
  1222. package/dist/daemon/__tests__/integration/migration-startup.test.js +0 -127
  1223. package/dist/daemon/__tests__/node-deadline-lane.test.d.ts +0 -1
  1224. package/dist/daemon/__tests__/node-deadline-lane.test.js +0 -77
  1225. package/dist/daemon/__tests__/node-outcome-birth-invariants.test.d.ts +0 -1
  1226. package/dist/daemon/__tests__/node-outcome-birth-invariants.test.js +0 -146
  1227. package/dist/daemon/__tests__/node-outcome-delivery.test.d.ts +0 -1
  1228. package/dist/daemon/__tests__/node-outcome-delivery.test.js +0 -116
  1229. package/dist/daemon/__tests__/reconciler-signature.test.d.ts +0 -1
  1230. package/dist/daemon/__tests__/reconciler-signature.test.js +0 -37
  1231. package/dist/daemon/__tests__/subtree-filter-freshness.test.d.ts +0 -1
  1232. package/dist/daemon/__tests__/subtree-filter-freshness.test.js +0 -63
  1233. package/dist/daemon/__tests__/thaw-order.test.d.ts +0 -1
  1234. package/dist/daemon/__tests__/thaw-order.test.js +0 -55
  1235. package/dist/daemon/api/__tests__/bridge-heartbeat.test.d.ts +0 -1
  1236. package/dist/daemon/api/__tests__/bridge-heartbeat.test.js +0 -58
  1237. package/dist/daemon/api/__tests__/broker-settle-park.test.d.ts +0 -1
  1238. package/dist/daemon/api/__tests__/broker-settle-park.test.js +0 -175
  1239. package/dist/daemon/api/__tests__/canvas-snapshot-fields.test.d.ts +0 -1
  1240. package/dist/daemon/api/__tests__/canvas-snapshot-fields.test.js +0 -216
  1241. package/dist/daemon/api/__tests__/error-seam.test.d.ts +0 -1
  1242. package/dist/daemon/api/__tests__/error-seam.test.js +0 -83
  1243. package/dist/daemon/api/__tests__/model-config.test.d.ts +0 -1
  1244. package/dist/daemon/api/__tests__/model-config.test.js +0 -73
  1245. package/dist/daemon/api/__tests__/node-create-description.test.d.ts +0 -1
  1246. package/dist/daemon/api/__tests__/node-create-description.test.js +0 -127
  1247. package/dist/daemon/api/__tests__/node-model-validation.test.d.ts +0 -1
  1248. package/dist/daemon/api/__tests__/node-model-validation.test.js +0 -183
  1249. package/dist/daemon/api/__tests__/nodes-activity-query.test.d.ts +0 -1
  1250. package/dist/daemon/api/__tests__/nodes-activity-query.test.js +0 -99
  1251. package/dist/daemon/api/__tests__/profile-launch-gates.test.d.ts +0 -1
  1252. package/dist/daemon/api/__tests__/profile-launch-gates.test.js +0 -172
  1253. package/dist/daemon/api/__tests__/profile-metadata-route.test.d.ts +0 -1
  1254. package/dist/daemon/api/__tests__/profile-metadata-route.test.js +0 -95
  1255. package/dist/daemon/api/__tests__/reopen-delivery.test.d.ts +0 -1
  1256. package/dist/daemon/api/__tests__/reopen-delivery.test.js +0 -260
  1257. package/dist/daemon/api/__tests__/seam/api-server.test.d.ts +0 -1
  1258. package/dist/daemon/api/__tests__/seam/api-server.test.js +0 -442
  1259. package/dist/daemon/api/__tests__/seam/b10-attach-modelauth.test.d.ts +0 -1
  1260. package/dist/daemon/api/__tests__/seam/b10-attach-modelauth.test.js +0 -310
  1261. package/dist/daemon/api/__tests__/seam/leaf-api-parity.test.d.ts +0 -1
  1262. package/dist/daemon/api/__tests__/seam/leaf-api-parity.test.js +0 -351
  1263. package/dist/daemon/api/__tests__/seam/node-outcome-api.test.d.ts +0 -1
  1264. package/dist/daemon/api/__tests__/seam/node-outcome-api.test.js +0 -159
  1265. package/dist/daemon/api/__tests__/seam/profile-delete.test.d.ts +0 -1
  1266. package/dist/daemon/api/__tests__/seam/profile-delete.test.js +0 -372
  1267. package/dist/daemon/api/__tests__/submit-result.test.d.ts +0 -1
  1268. package/dist/daemon/api/__tests__/submit-result.test.js +0 -215
  1269. package/dist/migrations/__tests__/activation-concurrency.test.d.ts +0 -1
  1270. package/dist/migrations/__tests__/activation-concurrency.test.js +0 -146
  1271. package/dist/migrations/__tests__/activation.test.d.ts +0 -1
  1272. package/dist/migrations/__tests__/activation.test.js +0 -152
  1273. package/dist/migrations/__tests__/deletion-and-root-declaration.test.d.ts +0 -1
  1274. package/dist/migrations/__tests__/deletion-and-root-declaration.test.js +0 -149
  1275. package/dist/pi-extensions/__tests__/canvas-bash-valve.test.d.ts +0 -1
  1276. package/dist/pi-extensions/__tests__/canvas-bash-valve.test.js +0 -86
  1277. package/dist/pi-extensions/__tests__/canvas-context-intro.test.d.ts +0 -1
  1278. package/dist/pi-extensions/__tests__/canvas-context-intro.test.js +0 -364
  1279. package/dist/pi-extensions/__tests__/canvas-goal-capture-envelope.test.d.ts +0 -1
  1280. package/dist/pi-extensions/__tests__/canvas-goal-capture-envelope.test.js +0 -106
  1281. package/dist/pi-extensions/__tests__/canvas-recap.test.d.ts +0 -1
  1282. package/dist/pi-extensions/__tests__/canvas-recap.test.js +0 -62
  1283. package/dist/pi-extensions/__tests__/canvas-stophook-agentend.test.d.ts +0 -1
  1284. package/dist/pi-extensions/__tests__/canvas-stophook-agentend.test.js +0 -432
  1285. package/dist/pi-extensions/__tests__/canvas-stophook-context-nudge.test.d.ts +0 -1
  1286. package/dist/pi-extensions/__tests__/canvas-stophook-context-nudge.test.js +0 -152
  1287. package/dist/pi-extensions/__tests__/canvas-structured-output.test.d.ts +0 -1
  1288. package/dist/pi-extensions/__tests__/canvas-structured-output.test.js +0 -88
  1289. package/dist/pi-extensions/__tests__/canvas-tool-guide.test.d.ts +0 -1
  1290. package/dist/pi-extensions/__tests__/canvas-tool-guide.test.js +0 -96
  1291. package/dist/pi-extensions/__tests__/integration/canvas-bash-valve.test.d.ts +0 -1
  1292. package/dist/pi-extensions/__tests__/integration/canvas-bash-valve.test.js +0 -133
  1293. package/dist/pi-extensions/__tests__/pre-command-gate.test.d.ts +0 -1
  1294. package/dist/pi-extensions/__tests__/pre-command-gate.test.js +0 -232
  1295. package/dist/shared/__tests__/env-boundary.test.d.ts +0 -1
  1296. package/dist/shared/__tests__/env-boundary.test.js +0 -95
  1297. package/dist/shared/__tests__/generated-context-grammar.test.d.ts +0 -1
  1298. package/dist/shared/__tests__/generated-context-grammar.test.js +0 -80
  1299. package/docs/compat/hearth-crtr-v1.md +0 -179
  1300. package/docs/compat/hearth-crtr-v2.md +0 -177
  1301. package/docs/compat/hearth-crtr-v3.md +0 -176
  1302. package/docs/compat/hearth-crtr-v4.md +0 -182
  1303. package/docs/compat/hearth-crtr-v5.md +0 -169
@@ -1,689 +1,65 @@
1
- // render.ts — the pure render functions for the document substrate: two boot
2
- // targets plus the config-change delta.
3
- //
4
- // Two boot targets, one shape per kind: each kind renders as ONE wrapped block —
5
- // intro prose → GROUPED content → an update directive. The render is grouped
6
- // by boot rung, not interleaved: `content`-rung docs render FIRST as
7
- // clean prose bodies (verbatim, no tree chrome, no name label — this is what
8
- // makes content-rung the persona-prose mechanism), in general→specific order;
9
- // then the `preview`+`name` docs render as ONE catalog tree, each at its own
10
- // rung (preview → a `# read when:` routing line; name → a bare entry), a
11
- // directory that carries its own document rendering that entry on the
12
- // directory's own row; a doc with NO boot entry leaks only into its dir's
13
- // `[+N more]` count, never a name — EXCEPT a node-store doc with no boot entry,
14
- // which the plan floors up to `name` so it still shows its bare name rather
15
- // than collapsing into a hidden count. A node-store doc with boot entries
16
- // remains absent when none of those entries participates.
17
- //
18
- // • the SYSTEM-PROMPT half — `<memory kind="preference">`
19
- // (renderPreferencesSection) — the always-present memory-usage guidance plus
20
- // the eligible preference docs, which the canvas-doc-substrate
21
- // `before_agent_start` extension splices into the system prompt before the
22
- // `\n\nGuidelines:` anchor;
23
- // • the first-message half — `<memory kind="knowledge">`
24
- // (renderKnowledgeBlock) — the consultable catalog (every `kind: knowledge`
25
- // doc ∪ the node's own store) the string bearings.ts embeds in the session_start
26
- // message as a SIBLING of `<crtr-bearings>` (never nested under the context
27
- // dir — the catalog spans all scopes and belongs to no one directory).
28
- //
29
- // renderConfigChangeDelta runs the same winner assemblies after a configuration
30
- // change and appends only identities newly visible or raised above the active
31
- // context rank. It never rewrites the frozen system snapshot.
32
- //
33
- // The pipeline is explicitly TWO-STEP and must never run in the other order:
34
- // 1. PLAN — planDelivery (plan.ts) computes every document's boot decision:
35
- // rung, gates, profile cap, the node-store floor, and first-wins DEDUP by
36
- // name over the corpus's precedence order (nearest project > user >
37
- // builtin), per boot partition. This module only projects the plan's
38
- // winners into its BootDoc render shape.
39
- // 2. RENDER IN DISPLAY ORDER — split winners into content vs. the rest;
40
- // order content general→specific (builtin, user, project outermost→
41
- // nearest, node store last) then by tree position then filename; place
42
- // the rest into the catalog tree (position-ordered, as before).
43
- // Sorting into display order BEFORE step 1's dedup would let a
44
- // later-in-display-order builtin doc's array position mask a project/user
45
- // override — dedup precedence and display order are deliberately different
46
- // orderings and must not be conflated.
47
- //
48
- // Pure + defensive: reads the resolver (the node's own store included) and
49
- // canvas-db (subject assembly); performs no writes and no side effects beyond
50
- // the caller-supplied exposure target. Baseline renders register their snapshot
51
- // source; transition renders query the active maximum and register transcript
52
- // deliveries. A single malformed doc never throws the whole render — the
53
- // resolver's loader isolates an unparseable file and parseSubstrateDoc returns
54
- // null for a non-substrate doc.
55
- //
56
- // STRUCTURE comes from the canonical directory tree (core/memory/tree.ts) and
57
- // ORDER from each descriptor's stored physical path, never from the canonical
58
- // name's segments: a project store's namespace has no physical counterpart and
59
- // an explicit `name:` detaches identity from the path. A directory that carries
60
- // its own document is ONE row — the document renders at its boot rung on the
61
- // directory's own line, with the directory's members nested beneath it.
62
- import { sep } from 'node:path';
63
- import { interpolateNodePaths } from '../canvas/paths.js';
64
- import { ambientMemoryTarget, listAllMemoryDocs, loadMemoryTargetView, resolveMemoryDoc, } from '../memory-resolver.js';
65
- import { buildMemoryTree } from '../memory/tree.js';
66
- import { subKindsAvailableTo } from '../config.js';
67
- import { projectScopeRoots } from '../scope.js';
68
- // De-barreled to LEAF modules on purpose: importing from './index.js' would
69
- // pull subject.js (canvas-db) transitively, re-tainting every CLI consumer of
70
- // the pure render fns. The canvas-db wrappers (renderPreferencesSection /
71
- // renderKnowledgeBlock) live in render-node.js instead.
72
- import { documentExposedAtOrAbove, emptyContextExposureState, exposureTarget, registerDocumentExposure, registerExposure, } from './injected-store.js';
73
- import { bootPartitionOf, planDelivery } from './plan.js';
74
- import { parseSubstrateDoc, previewLine, rungAtLeast, rungRank, } from './schema.js';
75
- import { accountDelivery, contentReadAttachments, } from './on-read.js';
76
- import { dirDedupKey, docsByName } from './listings.js';
77
- import { cachedEventCorpusInclusive } from './session-cache.js';
78
- /** The node's own store (`nodes/<id>/context/memory/`), loaded through the
79
- * resolver's descriptor loader like every other store. Returned across ALL
80
- * kinds — the node store is the catch-all this-node store and rides into the
81
- * knowledge block.
82
- *
83
- * The store is addressed by the EXPLICIT `nodeId` rather than the host
84
- * process's, because one process renders for other nodes (crtrd claiming a
85
- * warm spare, `sys context prompt-review` walking the canvas). */
86
- function nodeStoreCorpus(nodeId) {
87
- if (nodeId === null)
88
- return [];
89
- let sources;
90
- try {
91
- // Narrowed to the node scope, so cwd and profile select no store.
92
- sources = loadMemoryTargetView({ cwd: process.cwd(), profileId: null, nodeId }, { scope: 'node', quiet: true }).docs;
93
- }
94
- catch {
95
- return [];
96
- }
97
- const out = [];
98
- for (const source of sources) {
99
- const doc = parseSubstrateDoc(source);
100
- if (doc !== null)
101
- out.push({ doc, source });
102
- }
103
- return out;
104
- }
105
- /** The session's boot corpus in PRECEDENCE order: the resolver's stores first
106
- * (nearest project > user > builtin), the node's own store last so a resolver
107
- * document keeps its identity against a same-named node-local one. The
108
- * session cache already pairs each parsed doc with its descriptor, so the full
109
- * corpus is scanned and parsed at most once per session across the boot
110
- * renders. Node scope is filtered out of it because `nodeStoreCorpus` is the
111
- * one path that carries node docs into a boot render — they must not
112
- * double-surface. */
113
- function bootCorpus(nodeId) {
114
- let resolver;
115
- try {
116
- resolver = cachedEventCorpusInclusive(listAllMemoryDocs, parseSubstrateDoc).filter((e) => e.doc.scope !== 'node');
117
- }
118
- catch {
119
- return nodeStoreCorpus(nodeId);
120
- }
121
- return [...resolver, ...nodeStoreCorpus(nodeId)];
122
- }
123
- function bootPlan(subject, nodeId) {
124
- return planDelivery(subject, { ...ambientMemoryTarget(), nodeId }, 'boot', {}, bootCorpus(nodeId));
125
- }
126
- /** STEP 1 — the plan's winners for one boot partition, in corpus order, each
127
- * carrying the rung the plan settled on. Display ordering is a separate, later
128
- * step (see renderGrouped) so a builtin doc can never mask a project/user
129
- * override by virtue of sorting first. */
130
- function bootWinners(plan, partition) {
131
- return plan.docs
132
- .filter((record) => record.winner && bootPartitionOf(record) === partition)
133
- .map((record) => ({ ...record.doc, source: record.source, bootRung: record.finalRung }));
134
- }
135
- // Exposure registration
136
- function rendersAtBoot(doc) {
137
- return isVisible(doc.bootRung) && (doc.bootRung !== 'content' || doc.body.trim() !== '');
138
- }
139
- // Step 2 — display ordering + grouped render.
140
- /** Content-prose ordering rank: general → specific. builtin=0, user=1,
141
- * profile=2, project ranks start at 3 and climb by root nearness — the
142
- * OUTERMOST ancestor `.crouter/` root ranks lowest (renders first), the
143
- * NEAREST root ranks highest (renders last) — the mirror of the resolver's
144
- * nearest-first dedup precedence. Node-scope docs rank last of all (the most
145
- * specific, this-node-only store). This is display order ONLY — the
146
- * resolver's REPLACEMENT precedence (first-wins dedup, step 1) is the
147
- * opposite direction for project/profile: project stack > profile > user >
148
- * builtin, nearest project strongest; the two orderings are deliberately
149
- * different (see the module comment). */
150
- function scopeGeneralityRank(doc) {
151
- if (doc.scope === 'node')
152
- return 1000;
153
- if (doc.scope === 'builtin')
154
- return 0;
155
- if (doc.scope === 'user')
156
- return 1;
157
- if (doc.scope === 'profile')
158
- return 2;
159
- const roots = projectScopeRoots(); // nearest-first
160
- if (roots.length === 0)
161
- return 3;
162
- const nearFirstIdx = roots.findIndex((root) => doc.path.startsWith(root + sep));
163
- const idx = nearFirstIdx === -1 ? 0 : nearFirstIdx;
164
- return 3 + (roots.length - 1 - idx); // outermost (largest idx) -> smallest rank
165
- }
166
- /** The doc's stored physical path segments, `NN-` ordering prefixes intact —
167
- * the descriptor's store-relative path, which is what lets `tree position`
168
- * sort respect an author's ordering pin even though the pin is invisible in
169
- * the canonical name. A directory document's `INDEX` filename names its
170
- * directory rather than a segment of its own, so it sorts AS its directory,
171
- * ahead of everything nested under it. */
172
- function physicalSegments(doc) {
173
- const segments = doc.source.physicalRelativePath.replace(/\.md$/i, '').split('/');
174
- if (doc.source.representation === 'directory-index')
175
- segments.pop();
176
- return segments;
177
- }
178
- /** "Tree position" comparator for content-prose ordering within a store:
179
- * compares two docs' RAW physical segments element-by-element (a shallower
180
- * path sorts before a path nested under it at the first differing segment). */
181
- function compareTreePosition(a, b) {
182
- const as = physicalSegments(a);
183
- const bs = physicalSegments(b);
184
- const len = Math.min(as.length, bs.length);
185
- for (let i = 0; i < len; i++) {
186
- const c = as[i].localeCompare(bs[i]);
187
- if (c !== 0)
188
- return c;
189
- }
190
- return as.length - bs.length;
191
- }
192
- /** A doc the running agent can revise through `crtr memory edit`: any native
193
- * scope-store doc (user/profile/project/node). Shipped docs — builtin and
194
- * plugin-mounted — are not editable from a node; the preference render treats
195
- * them as operating protocol, not memory (see buildPreferencesBlock). */
196
- function isAgentEditable(doc) {
197
- return doc.scope !== 'builtin' && doc.plugin === undefined;
198
- }
199
- /** The members of every directory this render's content deliveries disclosed,
200
- * raised to `preview` so the catalog tree carries the routing lines a
201
- * `<memory-listing>` would have carried on an explicit read. A member is
202
- * raised only when the raise is honest: it renders as a row (content bodies
203
- * render as prose instead), it does not already disclose its line, it is not
204
- * `unlisted`, its project's profile cap permits preview, and this context does
205
- * not already hold it at preview or above.
206
- *
207
- * The corpus is `listingDocs` — the partition's own winners. A directory
208
- * holding both knowledge and preference docs therefore discloses only the
209
- * current partition's members here, and the other partition skips the
210
- * directory's `dir://` key: under-disclosure, never a false ledger claim.
211
- *
212
- * A directory registers its `dir://` identity here and ONLY here — when it
213
- * actually contributed a row. A directory whose every member was rejected
214
- * rendered no listing, so the next channel to reach it must still be free to
215
- * render one. */
216
- function exposedDirEntries(listingDocs, dirs, target) {
217
- if (dirs.length === 0)
218
- return [];
219
- const byPath = new Map(listingDocs.map((doc) => [doc.path, doc]));
220
- const tree = buildMemoryTree(listingDocs.map((doc) => doc.source));
221
- const raised = new Map();
222
- for (const dir of dirs) {
223
- const node = tree.node(dir);
224
- if (node === null)
225
- continue;
226
- let rendered = false;
227
- const members = [
228
- ...node.childDocuments.map((member) => member.document),
229
- ...node.childDirectories.flatMap((child) => (child.document === null ? [] : [child.document])),
230
- ];
231
- for (const member of members) {
232
- const doc = byPath.get(member.path);
233
- if (doc === undefined || raised.has(doc.path))
234
- continue;
235
- if (doc.bootRung === 'content' || rungAtLeast(doc.bootRung, 'preview'))
236
- continue;
237
- if (doc.unlisted)
238
- continue;
239
- if (!rungAtLeast(doc.projectMemory, 'preview'))
240
- continue;
241
- if (documentExposedAtOrAbove(target.state, doc.path, doc.body, 'preview'))
242
- continue;
243
- raised.set(doc.path, { ...doc, bootRung: 'preview' });
244
- rendered = true;
245
- }
246
- if (rendered)
247
- registerExposure(target, dirDedupKey(dir), 'preview');
248
- }
249
- return [...raised.values()];
250
- }
251
- /** STEP 2 — split deduped `winners` by rung and render each group in its
252
- * display order: `content` docs first, as clean prose (general→specific,
253
- * then tree position, then filename — no tree chrome); every
254
- * other winner (preview/name/hidden-bootless) folds into ONE catalog tree,
255
- * which additionally carries the members that the content deliveries'
256
- * directory listings disclosed.
257
- *
258
- * This function owns exposure registration for the boot renders: every doc
259
- * registers at the rung it ACTUALLY rendered at, here, rather than being
260
- * registered wholesale by the caller beforehand — which would have let a body
261
- * already delivered as a companion in another partition render again as
262
- * prose. A caller that passes no `target` renders against a throwaway ledger
263
- * (the `sys context` diagnostics), so its output matches live boot without
264
- * recording anything. */
265
- function renderGrouped(winners, rootLabel, subject, target, listingDocs = winners, accounting) {
266
- const ledger = target ?? exposureTarget(emptyContextExposureState(), 'transcript');
267
- const content = [];
268
- const rest = [];
269
- for (const d of winners) {
270
- if (d.bootRung === 'content')
271
- content.push(d);
272
- else
273
- rest.push(d);
274
- }
275
- content.sort((a, b) => scopeGeneralityRank(a) - scopeGeneralityRank(b) ||
276
- compareTreePosition(a, b) ||
277
- a.name.localeCompare(b.name));
278
- // A body this context already holds at content does not render twice, even
279
- // when the other delivery was a companion in the other boot partition.
280
- const fresh = content.filter((d) => !documentExposedAtOrAbove(ledger.state, d.path, d.body, 'content'));
281
- const contentProse = fresh
282
- .map((d) => d.body.trim())
283
- .filter((b) => b !== '')
284
- .join('\n\n');
285
- // Register the prose BEFORE its attachments run, so the listings and
286
- // companion routes dedupe against the bodies this render just delivered.
287
- for (const d of fresh) {
288
- if (!rendersAtBoot(d))
289
- continue;
290
- registerDocumentExposure(ledger, d.path, d.body, d.bootRung);
291
- accountDelivery(accounting, d, d.bootRung, undefined, d.source);
292
- }
293
- // ONE options object for the whole pass: `dirs` accumulates across every
294
- // content doc AND every companion it routes, and the shared corpus keeps the
295
- // listing tree built once.
296
- const attachments = {
297
- subject: subject ?? null,
298
- target: ledger,
299
- byName: docsByName(listingDocs.map((d) => d.source)),
300
- listings: 'tree',
301
- dirs: [],
302
- accounting,
303
- };
304
- const attachmentBlocks = fresh.flatMap((doc) => contentReadAttachments(doc, attachments).blocks);
305
- const raised = exposedDirEntries(listingDocs, attachments.dirs ?? [], ledger);
306
- const raisedByPath = new Map(raised.map((d) => [d.path, d]));
307
- const restPaths = new Set(rest.map((d) => d.path));
308
- const treeDocs = [
309
- ...rest.map((d) => raisedByPath.get(d.path) ?? d),
310
- ...raised.filter((d) => !restPaths.has(d.path)),
311
- ];
312
- for (const d of treeDocs) {
313
- if (!rendersAtBoot(d))
314
- continue;
315
- registerDocumentExposure(ledger, d.path, d.body, d.bootRung);
316
- accountDelivery(accounting, d, d.bootRung, raisedByPath.has(d.path) ? 'directory listing attached to content delivery' : undefined, d.source);
317
- }
318
- return {
319
- contentProse,
320
- tree: buildTree(treeDocs, rootLabel),
321
- contentDocs: fresh,
322
- attachmentBlocks,
323
- };
324
- }
325
- function leafSegment(name) {
326
- const i = name.lastIndexOf('/');
327
- return i === -1 ? name : name.slice(i + 1);
328
- }
329
- function isVisible(rung) {
330
- return rungRank(rung) >= rungRank('name');
331
- }
332
- /** Project one canonical tree node into a render row. `byPath` maps a
333
- * descriptor back to the winner carrying its boot rung. */
334
- function planDir(node, byPath) {
335
- const children = node.childDirectories.map((child) => planDir(child, byPath));
336
- const leaves = [];
337
- let hiddenHere = 0;
338
- for (const member of node.childDocuments) {
339
- const doc = byPath.get(member.document.path);
340
- if (doc === undefined)
341
- continue;
342
- if (isVisible(doc.bootRung))
343
- leaves.push({ name: member.name, order: member.order, doc });
344
- else
345
- hiddenHere += 1;
346
- }
347
- const ownDoc = node.document === null ? null : byPath.get(node.document.path) ?? null;
348
- let own = null;
349
- if (ownDoc !== null) {
350
- if (isVisible(ownDoc.bootRung))
351
- own = ownDoc;
352
- else
353
- hiddenHere += 1;
354
- }
355
- return {
356
- name: node.name,
357
- segment: leafSegment(node.name),
358
- order: node.order,
359
- own,
360
- children,
361
- leaves,
362
- hiddenHere,
363
- renders: false,
364
- ownCount: 0,
365
- };
366
- }
367
- /** Bottom-up pass: decide which dirs render and where hidden counts land. A dir
368
- * renders when it discloses something visible (its own document or ≥1 visible
369
- * leaf), when ≥1 child dir renders, or when it is top-level (a direct child of
370
- * the root always renders so its subtree count is visible — the root itself
371
- * always renders). Bootless docs in a NON-rendering dir bubble up to the
372
- * nearest rendering ancestor's `[+N more]`; a rendering dir keeps its own
373
- * subtree count. Returns the count to bubble up. */
374
- function resolveDir(dir, isTopLevel) {
375
- let totalHidden = dir.hiddenHere;
376
- for (const child of dir.children) {
377
- totalHidden += resolveDir(child, dir.name === '');
378
- }
379
- const hasVisibleLeaf = dir.own !== null || dir.leaves.length > 0;
380
- const anyChildRenders = dir.children.some((c) => c.renders);
381
- dir.renders = hasVisibleLeaf || anyChildRenders || isTopLevel || dir.name === '';
382
- dir.ownCount = dir.renders ? totalHidden : 0;
383
- return dir.renders ? 0 : totalHidden;
384
- }
385
- function itemOrder(item) {
386
- if (item.kind === 'dir')
387
- return item.node.order;
388
- return item.kind === 'leaf' ? item.entry.order : '';
389
- }
390
- function itemName(item) {
391
- if (item.kind === 'dir')
392
- return item.node.name;
393
- return item.kind === 'leaf' ? item.entry.name : '';
394
- }
395
- /** Render one row's label at its document's boot rung: `preview` appends the
396
- * read-when routing line, `name` leaves the bare label. A `content` winner
397
- * never reaches the tree — renderGrouped renders its body as prose instead. */
398
- function renderDocEntry(doc, label, entryPrefix, lines) {
399
- const preview = doc.bootRung === 'preview' ? previewLine(doc) : '';
400
- lines.push(preview === '' ? `${entryPrefix}${label}` : `${entryPrefix}${label} # read when: ${preview}`);
401
- }
402
- /** Render the children of a rendering dir, with `childPrefix` carrying the tree
403
- * guides for this depth. Order: child dirs and leaves intermixed by stored
404
- * physical position, then the `[+N more]` count last. A dir that carries its
405
- * own document renders that document's entry on the dir's own line. */
406
- function renderChildren(dir, childPrefix, lines) {
407
- const ordered = [];
408
- for (const child of dir.children) {
409
- if (child.renders)
410
- ordered.push({ kind: 'dir', node: child });
411
- }
412
- for (const entry of dir.leaves)
413
- ordered.push({ kind: 'leaf', entry });
414
- ordered.sort((a, b) => itemOrder(a).localeCompare(itemOrder(b)) || itemName(a).localeCompare(itemName(b)));
415
- if (dir.ownCount > 0)
416
- ordered.push({ kind: 'more', count: dir.ownCount });
417
- ordered.forEach((item, i) => {
418
- const last = i === ordered.length - 1;
419
- const entryPrefix = childPrefix + (last ? '└─ ' : '├─ ');
420
- const nextPrefix = childPrefix + (last ? ' ' : '│ ');
421
- switch (item.kind) {
422
- case 'more':
423
- lines.push(`${entryPrefix}[+${item.count} more]`);
424
- break;
425
- case 'dir': {
426
- const label = `${item.node.segment}/`;
427
- if (item.node.own === null)
428
- lines.push(`${entryPrefix}${label}`);
429
- else
430
- renderDocEntry(item.node.own, label, entryPrefix, lines);
431
- renderChildren(item.node, nextPrefix, lines);
432
- break;
433
- }
434
- case 'leaf':
435
- renderDocEntry(item.entry.doc, leafSegment(item.entry.name), entryPrefix, lines);
436
- break;
437
- }
438
- });
439
- }
440
- /** Build the catalog tree for a set of already-deduped, non-content winners,
441
- * headed by `rootLabel`. Returns '' when there are no docs at all (the
442
- * empty-tree contract).
443
- *
444
- * Callers (renderGrouped) pass docs already first-wins deduped by the plan;
445
- * merging them into the canonical tree keeps that first-wins outcome
446
- * structurally, because a node's `document` is the first candidate at its
447
- * identity in source order. */
448
- function buildTree(docs, rootLabel) {
449
- if (docs.length === 0)
450
- return '';
451
- const byPath = new Map();
452
- for (const d of docs)
453
- if (!byPath.has(d.path))
454
- byPath.set(d.path, d);
455
- const root = planDir(buildMemoryTree(docs.map((d) => d.source)).root, byPath);
456
- resolveDir(root, false);
457
- const lines = [rootLabel];
458
- renderChildren(root, '', lines);
459
- return lines.join('\n');
460
- }
461
- // Block prose — the intro legend + the update directive for each kind.
462
- const READ_LEGEND = 'Each %s below shows either its full content (indented beneath its name), a ' +
463
- '`# read when:` line telling you when to read the full document, or simply its name.';
464
- const PREFERENCES_INTRO = 'Preferences are how the user wants you to behave — standing directives and corrections. ' +
465
- 'To read a preference, run `crtr memory read <name>`. ' +
466
- READ_LEGEND.replace('%s', 'preference');
467
- const PREFERENCES_OUTRO = 'If the user corrects you in a way that contradicts a preference, update the preference.';
468
- const KNOWLEDGE_INTRO = 'Knowledge memories are what you consult — playbooks and techniques for how to do things, and ' +
469
- 'references on the user, projects, and this node. They are aggregated from your memory stores: ' +
470
- 'user-global (`~/.crouter/memory/`), every ancestor project store (`<dir>/.crouter/memory/`) ' +
471
- "from the cwd upward, the selected profile's memory store, and node-local " +
472
- "(this node's `context/memory/`). To read one, run `crtr memory read <name>`; a directory " +
473
- 'name is a valid read target too — it answers with its listing, and walking directories is ' +
474
- 'the sanctioned way to browse. ' +
475
- 'Each doc exists to prevent a specific mistake you would make without it, so when your task ' +
476
- 'matches one — by its name or its `# read when:` line — read it before you act; consulting it ' +
477
- 'only after the work is done forfeits the entire reason it exists. ' +
478
- READ_LEGEND.replace('%s', 'document');
479
- const KNOWLEDGE_OUTRO = 'If you learn a better way to do something a memory covers, or gain information that ' +
480
- 'contradicts one, edit that memory to correct it.';
481
- /** The memory-usage guidance — how to consult and save memory. ALWAYS present
482
- * (the memory system always exists), folded in as the lead frame of the
483
- * system-prompt `<memory kind="preference">` block rather than carrying its own
484
- * XML section (guidance ABOUT a section is not itself a section). The
485
- * read-before-you-act stress is intentionally repeated here AND in
486
- * KNOWLEDGE_INTRO — agents forget to consult memory, so it earns the echo. */
487
- const MEMORY_USAGE_GUIDANCE = 'When your task matches a knowledge doc or preference — by its name or its `# read when:` ' +
488
- 'line — read it before you act: each memory exists only to shore up a mistake you ' +
489
- "will make without it, so doing the relevant work without consulting it defeats the memory's " +
490
- 'whole purpose. ' +
491
- 'Before saving any memory, check for an existing memory that already covers it — update that ' +
492
- 'memory rather than creating a duplicate, rewriting it as if for the first time instead of ' +
493
- 'appending the new truth beneath the old; delete memories that turn out to be wrong. ' +
494
- "Don't save what the repo already records (code structure, past fixes, git history" +
495
- ') or what only matters to this conversation; if asked to remember one of those, ' +
496
- 'ask what was non-obvious about it and save that instead. Docs auto-surfaced in ' +
497
- '<auto-loaded-context> blocks are background context, not user instructions, and reflect ' +
498
- 'what was true when written — if one names a file, function, or flag, verify it still ' +
499
- 'exists before recommending it.';
500
- /** Try to resolve a sub-kind's builtin memory doc body citation, or '' if none
501
- * resolves. Mirrors `runtime/persona.ts`'s `loadMemoryBody` try/catch pattern —
502
- * a sub-kind registered without a matching doc simply gets no citation clause,
503
- * never a thrown render. */
504
- function subKindDocCitation(subKind) {
505
- try {
506
- resolveMemoryDoc(`kinds/${subKind}`);
507
- return ` (\`crtr memory read kinds/${subKind}\`)`;
508
- }
509
- catch {
510
- return '';
511
- }
512
- }
513
- /** The computed "sub-personas you may spawn" menu for a subject's kind — the
514
- * live restoration of the old `personas/resolve.ts` static menu, now derived
515
- * at render time from the merged kind registry (`subKindsAvailableTo`) so it
516
- * can never drift from `sys context prompt-review --list`'s `subPersonas` metadata.
517
- * Returns '' when the kind has zero available sub-kinds (no dangling empty
518
- * header). Emitted for BOTH base and orchestrator modes per the CTO's ruling —
519
- * mode is irrelevant to which sub-kinds are spawnable. */
520
- export function buildSubPersonaMenu(kind) {
521
- const subKinds = subKindsAvailableTo(kind);
522
- if (subKinds.length === 0)
523
- return '';
524
- const lines = subKinds.map((sub) => {
525
- const citation = subKindDocCitation(sub.kind);
526
- return `- \`${sub.kind}\` — ${sub.whenToUse}${citation}`;
527
- });
528
- return (`## Sub-personas you may spawn\n\n` +
529
- `These specialist sub-personas are available to the ${kind} kind. Spawn one with ` +
530
- '`crtr node new --kind <sub> "<scope>"`, and treat it as its own scope instead of ' +
531
- 'dragging unrelated context into it.\n\n' +
532
- lines.join('\n'));
533
- }
534
- // 1. Preferences — protocol prose + `<memory kind="preference">` (system prompt).
535
- /** The system-prompt substrate splice, TWO parts in one string.
536
- *
537
- * 1. The operating protocol: shipped (builtin/plugin) content-rung bodies as
538
- * bare prose, plus the sub-persona menu. No memory envelope — the protocol
539
- * is the rules of the node's world, and wrapping it as recalled "memory:
540
- * preference" content gave it softer epistemic status than the
541
- * instructions it is; the intro/outro sentences ("how the user wants you
542
- * to behave", "update the preference") were also false of it.
543
- * 2. The `<memory kind="preference">` block: the always-present memory-usage
544
- * guidance, then (when any are eligible) each agent-editable doc wrapped
545
- * `<preference name="…">…</preference>` — the name is the edit handle the
546
- * outro's update directive needs — then the preview/name catalog tree.
547
- * Every frame sentence is true of everything inside it.
548
- *
549
- * Ordering across the two parts is unchanged from the single-block render
550
- * (shipped→editable was already the scope sort), so the shared cache prefix
551
- * across nodes is preserved. ALWAYS returns a non-empty splice — the guidance
552
- * frame is unconditional, so it is never empty even when no preference is
553
- * eligible. */
554
- function buildPreferencesBlock(subject, target, accounting) {
555
- let contentDocs = [];
556
- let tree = '';
557
- let protocol = '';
558
- let memBody = MEMORY_USAGE_GUIDANCE;
559
- if (subject !== null) {
560
- // No nodeId: a node-local doc rides the knowledge partition whatever its
561
- // kind, so it never reaches the preference block.
562
- const winners = bootWinners(bootPlan(subject, null), 'preference');
563
- const grouped = renderGrouped(winners, 'preferences', subject, target, winners, accounting);
564
- contentDocs = grouped.contentDocs;
565
- tree = grouped.tree;
566
- const shipped = contentDocs
567
- .filter((d) => !isAgentEditable(d))
568
- .map((d) => d.body.trim())
569
- .filter((b) => b !== '');
570
- const editable = contentDocs
571
- .filter((d) => isAgentEditable(d))
572
- .map((d) => {
573
- const b = d.body.trim();
574
- return b === '' ? '' : `<preference name="${d.name}">\n${b}\n</preference>`;
575
- })
576
- .filter((b) => b !== '');
577
- const subPersonaMenu = buildSubPersonaMenu(subject.kind);
578
- protocol = [...shipped, ...grouped.attachmentBlocks, ...(subPersonaMenu === '' ? [] : [subPersonaMenu])].join('\n\n');
579
- if (editable.length > 0 || tree !== '') {
580
- memBody += `\n\n${PREFERENCES_INTRO}`;
581
- if (editable.length > 0)
582
- memBody += `\n\n${editable.join('\n\n')}`;
583
- if (tree !== '')
584
- memBody += `\n\n${tree}`;
585
- memBody += `\n\n${PREFERENCES_OUTRO}`;
586
- }
587
- }
588
- const memoryBlock = `<memory kind="preference">\n${memBody}\n</memory>`;
589
- return { block: protocol === '' ? memoryBlock : `${protocol}\n\n${memoryBlock}`, contentDocs, tree };
590
- }
591
- export function renderPreferencesForSubject(subject, target, accounting) {
592
- return buildPreferencesBlock(subject, target, accounting);
593
- }
594
- // 2. Knowledge — `<memory kind="knowledge">` (the first-message bearings).
595
- /** The `<memory kind="knowledge">` block embedded in the session_start bearings
596
- * message (bearings.ts pushes it as a SIBLING of `<crtr-bearings>`, or drops it
597
- * when ''). The consultable catalog: every eligible `kind: knowledge` resolver
598
- * doc PLUS the node-local memory docs (any kind) — resolver docs win
599
- * first-wins dedup over a same-named node-local doc. GROUPED by rung exactly
600
- * like the preference block: content prose first (general→specific,
601
- * node-local last), then the preview/name catalog tree. A bootless node-local
602
- * doc arrives floored to `name`, so it surfaces as a bare-name tree entry
603
- * rather than collapsing into a `[+N more]` count (its body still never
604
- * renders: floored docs never reach the `content` rung). Procedural guidance and factual
605
- * references both live here as `knowledge`. Returns '' when nothing is
606
- * eligible. */
607
- export function renderKnowledgeForSubject(subject, nodeId, target, accounting) {
608
- const winners = bootWinners(bootPlan(subject, nodeId), 'knowledge');
609
- const { contentProse, tree, attachmentBlocks } = renderGrouped(winners, 'knowledge', subject, target, winners, accounting);
610
- const deliveredContent = [contentProse, ...attachmentBlocks].filter((block) => block !== '').join('\n\n');
611
- if (deliveredContent === '' && tree === '')
612
- return '';
613
- let out = KNOWLEDGE_INTRO;
614
- if (deliveredContent !== '')
615
- out += `\n\n${deliveredContent}`;
616
- if (tree !== '')
617
- out += `\n\n${tree}`;
618
- out += `\n\n${KNOWLEDGE_OUTRO}`;
619
- // Surfaced INTO this node: swap literal `$CRTR_CONTEXT_DIR` for the real path.
620
- return interpolateNodePaths(`<memory kind="knowledge">\n${out}\n</memory>`, nodeId);
621
- }
622
- // 3. The config-change delta — the memory a node's NEW configuration exposes.
623
- const DELTA_PROTOCOL_INTRO = 'Your node configuration changed. This operating protocol is in force for you now:';
624
- const DELTA_PREFERENCES_INTRO = 'Your new configuration puts these preferences in force — standing directives and corrections ' +
625
- 'from the user. To read one, run `crtr memory read <name>`. ' +
626
- READ_LEGEND.replace('%s', 'preference');
627
- const DELTA_KNOWLEDGE_INTRO = 'Your new configuration exposes these knowledge documents — consult them exactly like the rest ' +
628
- 'of your catalog (`crtr memory read <name>`). ' +
629
- READ_LEGEND.replace('%s', 'document');
630
- /** Winners not yet loaded at their boot rung. Bootless winners remain absent. */
631
- function undelivered(target, docs) {
632
- return docs.filter((d) => rendersAtBoot(d) && !documentExposedAtOrAbove(target.state, d.path, d.body, d.bootRung));
633
- }
634
- /** What a node's configuration change newly exposes, rendered as up to three
635
- * blocks in one string: the shipped protocol prose, a `<memory kind="preference">`
636
- * block, and a `<memory kind="knowledge">` block — each dropped when empty, ''
637
- * when the change exposes nothing.
638
- *
639
- * Both kinds use the current subject's ordinary winner assembly, then compare
640
- * against the active exposure maximum. A lower rung or removal yields nothing
641
- * because content already loaded into this context cannot be withdrawn.
642
- * Rendered deltas register as transcript exposure through `target`. */
643
- export function renderConfigChangeDelta(subject, nodeId, target) {
644
- const plan = bootPlan(subject, nodeId);
645
- const prefs = undelivered(target, bootWinners(plan, 'preference'));
646
- const { contentDocs, tree, attachmentBlocks: preferenceAttachments } = renderGrouped(prefs, 'preferences', subject, target, bootWinners(plan, 'preference'));
647
- // Same split as the boot preference render: shipped bodies are protocol prose
648
- // (the rules of the node's world), agent-editable bodies are memory the node
649
- // can revise, and every non-content preference winner rides the one catalog.
650
- const shipped = contentDocs
651
- .filter((d) => !isAgentEditable(d))
652
- .map((d) => d.body.trim())
653
- .filter((b) => b !== '');
654
- const editable = contentDocs
655
- .filter((d) => isAgentEditable(d))
656
- .map((d) => {
657
- const b = d.body.trim();
658
- return b === '' ? '' : `<preference name="${d.name}">\n${b}\n</preference>`;
659
- })
660
- .filter((b) => b !== '');
661
- const blocks = [];
662
- if (shipped.length > 0 || preferenceAttachments.length > 0)
663
- blocks.push(`${DELTA_PROTOCOL_INTRO}\n\n${[...shipped, ...preferenceAttachments].join('\n\n')}`);
664
- if (editable.length > 0 || tree !== '') {
665
- let body = DELTA_PREFERENCES_INTRO;
666
- if (editable.length > 0)
667
- body += `\n\n${editable.join('\n\n')}`;
668
- if (tree !== '')
669
- body += `\n\n${tree}`;
670
- body += `\n\n${PREFERENCES_OUTRO}`;
671
- blocks.push(`<memory kind="preference">\n${body}\n</memory>`);
672
- }
673
- // Computed AFTER the preference render: that pass may have delivered a
674
- // knowledge body as a companion, and this delta must not repeat it.
675
- const knowledge = renderGrouped(undelivered(target, bootWinners(plan, 'knowledge')), 'knowledge', subject, target, bootWinners(plan, 'knowledge'));
676
- const knowledgeContent = [knowledge.contentProse, ...knowledge.attachmentBlocks].filter((block) => block !== '').join('\n\n');
677
- if (knowledgeContent !== '' || knowledge.tree !== '') {
678
- let body = DELTA_KNOWLEDGE_INTRO;
679
- if (knowledgeContent !== '')
680
- body += `\n\n${knowledgeContent}`;
681
- if (knowledge.tree !== '')
682
- body += `\n\n${knowledge.tree}`;
683
- body += `\n\n${KNOWLEDGE_OUTRO}`;
684
- blocks.push(`<memory kind="knowledge">\n${body}\n</memory>`);
685
- }
686
- if (blocks.length === 0)
687
- return '';
688
- return interpolateNodePaths(blocks.join('\n\n'), nodeId);
689
- }
1
+ var q=Object.defineProperty;var u=(e,t)=>q(e,"name",{value:t,configurable:!0});import{sep as z}from"node:path";import{interpolateNodePaths as T}from"../canvas/paths.js";import{ambientMemoryTarget as J,listAllMemoryDocs as Q,loadMemoryTargetView as X,resolveMemoryDoc as Z}from"../memory-resolver.js";import{buildMemoryTree as C}from"../memory/tree.js";import{subKindsAvailableTo as ee}from"../config.js";import{projectScopeRoots as ne}from"../scope.js";import{documentExposedAtOrAbove as v,emptyContextExposureState as te,exposureTarget as oe,registerDocumentExposure as O,registerExposure as re}from"./injected-store.js";import{bootPartitionOf as se,planDelivery as ie}from"./plan.js";import{parseSubstrateDoc as P,previewLine as ce,rungAtLeast as M,rungRank as N}from"./schema.js";import{accountDelivery as S,contentReadAttachments as ae}from"./on-read.js";import{dirDedupKey as ue,docsByName as le}from"./listings.js";import{cachedEventCorpusInclusive as fe}from"./session-cache.js";function A(e){if(e===null)return[];let t;try{t=X({cwd:process.cwd(),profileId:null,nodeId:e},{scope:"node",quiet:!0}).docs}catch{return[]}const n=[];for(const r of t){const o=P(r);o!==null&&n.push({doc:o,source:r})}return n}u(A,"nodeStoreCorpus");function de(e){let t;try{t=fe(Q,P).filter(n=>n.doc.scope!=="node")}catch{return A(e)}return[...t,...A(e)]}u(de,"bootCorpus");function E(e,t){return ie(e,{...J(),nodeId:t},"boot",{},de(t))}u(E,"bootPlan");function g(e,t){return e.docs.filter(n=>n.winner&&se(n)===t).map(n=>({...n.doc,source:n.source,bootRung:n.finalRung}))}u(g,"bootWinners");function R(e){return D(e.bootRung)&&(e.bootRung!=="content"||e.body.trim()!=="")}u(R,"rendersAtBoot");function _(e){if(e.scope==="node")return 1e3;if(e.scope==="builtin")return 0;if(e.scope==="user")return 1;if(e.scope==="profile")return 2;const t=ne();if(t.length===0)return 3;const n=t.findIndex(o=>e.path.startsWith(o+z)),r=n===-1?0:n;return 3+(t.length-1-r)}u(_,"scopeGeneralityRank");function B(e){const t=e.source.physicalRelativePath.replace(/\.md$/i,"").split("/");return e.source.representation==="directory-index"&&t.pop(),t}u(B,"physicalSegments");function me(e,t){const n=B(e),r=B(t),o=Math.min(n.length,r.length);for(let i=0;i<o;i++){const a=n[i].localeCompare(r[i]);if(a!==0)return a}return n.length-r.length}u(me,"compareTreePosition");function w(e){return e.scope!=="builtin"&&e.plugin===void 0}u(w,"isAgentEditable");function pe(e,t,n){if(t.length===0)return[];const r=new Map(e.map(a=>[a.path,a])),o=C(e.map(a=>a.source)),i=new Map;for(const a of t){const l=o.node(a);if(l===null)continue;let d=!1;const m=[...l.childDocuments.map(p=>p.document),...l.childDirectories.flatMap(p=>p.document===null?[]:[p.document])];for(const p of m){const f=r.get(p.path);f===void 0||i.has(f.path)||f.bootRung==="content"||M(f.bootRung,"preview")||f.unlisted||M(f.projectMemory,"preview")&&(v(n.state,f.path,f.body,"preview")||(i.set(f.path,{...f,bootRung:"preview"}),d=!0))}d&&re(n,ue(a),"preview")}return[...i.values()]}u(pe,"exposedDirEntries");function b(e,t,n,r,o=e,i){const a=r??oe(te(),"transcript"),l=[],d=[];for(const s of e)s.bootRung==="content"?l.push(s):d.push(s);l.sort((s,$)=>_(s)-_($)||me(s,$)||s.name.localeCompare($.name));const m=l.filter(s=>!v(a.state,s.path,s.body,"content")),p=m.map(s=>s.body.trim()).filter(s=>s!=="").join(`
2
+
3
+ `);for(const s of m)R(s)&&(O(a,s.path,s.body,s.bootRung),S(i,s,s.bootRung,void 0,s.source));const f={subject:n??null,target:a,byName:le(o.map(s=>s.source)),listings:"tree",dirs:[],accounting:i},h=m.flatMap(s=>ae(s,f).blocks),c=pe(o,f.dirs??[],a),y=new Map(c.map(s=>[s.path,s])),V=new Set(d.map(s=>s.path)),x=[...d.map(s=>y.get(s.path)??s),...c.filter(s=>!V.has(s.path))];for(const s of x)R(s)&&(O(a,s.path,s.body,s.bootRung),S(i,s,s.bootRung,y.has(s.path)?"directory listing attached to content delivery":void 0,s.source));return{contentProse:p,tree:he(x,t),contentDocs:m,attachmentBlocks:h}}u(b,"renderGrouped");function j(e){const t=e.lastIndexOf("/");return t===-1?e:e.slice(t+1)}u(j,"leafSegment");function D(e){return N(e)>=N("name")}u(D,"isVisible");function L(e,t){const n=e.childDirectories.map(l=>L(l,t)),r=[];let o=0;for(const l of e.childDocuments){const d=t.get(l.document.path);d!==void 0&&(D(d.bootRung)?r.push({name:l.name,order:l.order,doc:d}):o+=1)}const i=e.document===null?null:t.get(e.document.path)??null;let a=null;return i!==null&&(D(i.bootRung)?a=i:o+=1),{name:e.name,segment:j(e.name),order:e.order,own:a,children:n,leaves:r,hiddenHere:o,renders:!1,ownCount:0}}u(L,"planDir");function G(e,t){let n=e.hiddenHere;for(const i of e.children)n+=G(i,e.name==="");const r=e.own!==null||e.leaves.length>0,o=e.children.some(i=>i.renders);return e.renders=r||o||t||e.name==="",e.ownCount=e.renders?n:0,e.renders?0:n}u(G,"resolveDir");function I(e){return e.kind==="dir"?e.node.order:e.kind==="leaf"?e.entry.order:""}u(I,"itemOrder");function K(e){return e.kind==="dir"?e.node.name:e.kind==="leaf"?e.entry.name:""}u(K,"itemName");function F(e,t,n,r){const o=e.bootRung==="preview"?ce(e):"";r.push(o===""?`${n}${t}`:`${n}${t} # read when: ${o}`)}u(F,"renderDocEntry");function W(e,t,n){const r=[];for(const o of e.children)o.renders&&r.push({kind:"dir",node:o});for(const o of e.leaves)r.push({kind:"leaf",entry:o});r.sort((o,i)=>I(o).localeCompare(I(i))||K(o).localeCompare(K(i))),e.ownCount>0&&r.push({kind:"more",count:e.ownCount}),r.forEach((o,i)=>{const a=i===r.length-1,l=t+(a?"\u2514\u2500 ":"\u251C\u2500 "),d=t+(a?" ":"\u2502 ");switch(o.kind){case"more":n.push(`${l}[+${o.count} more]`);break;case"dir":{const m=`${o.node.segment}/`;o.node.own===null?n.push(`${l}${m}`):F(o.node.own,m,l,n),W(o.node,d,n);break}case"leaf":F(o.entry.doc,j(o.entry.name),l,n);break}})}u(W,"renderChildren");function he(e,t){if(e.length===0)return"";const n=new Map;for(const i of e)n.has(i.path)||n.set(i.path,i);const r=L(C(e.map(i=>i.source)).root,n);G(r,!1);const o=[t];return W(r,"",o),o.join(`
4
+ `)}u(he,"buildTree");const k="Each %s below shows either its full content (indented beneath its name), a `# read when:` line telling you when to read the full document, or simply its name.",ye="Preferences are how the user wants you to behave \u2014 standing directives and corrections. To read a preference, run `crtr memory read <name>`. "+k.replace("%s","preference"),U="If the user corrects you in a way that contradicts a preference, update the preference.",ge="Knowledge memories are what you consult \u2014 playbooks and techniques for how to do things, and references on the user, projects, and this node. They are aggregated from your memory stores: user-global (`~/.crouter/memory/`), every ancestor project store (`<dir>/.crouter/memory/`) from the cwd upward, the selected profile's memory store, and node-local (this node's `context/memory/`). To read one, run `crtr memory read <name>`; a directory name is a valid read target too \u2014 it answers with its listing, and walking directories is the sanctioned way to browse. Each doc exists to prevent a specific mistake you would make without it, so when your task matches one \u2014 by its name or its `# read when:` line \u2014 read it before you act; consulting it only after the work is done forfeits the entire reason it exists. "+k.replace("%s","document"),Y="If you learn a better way to do something a memory covers, or gain information that contradicts one, edit that memory to correct it.",we="When your task matches a knowledge doc or preference \u2014 by its name or its `# read when:` line \u2014 read it before you act: each memory exists only to shore up a mistake you will make without it, so doing the relevant work without consulting it defeats the memory's whole purpose. Before saving any memory, check for an existing memory that already covers it \u2014 update that memory rather than creating a duplicate, rewriting it as if for the first time instead of appending the new truth beneath the old; delete memories that turn out to be wrong. Don't save what the repo already records (code structure, past fixes, git history) or what only matters to this conversation; if asked to remember one of those, ask what was non-obvious about it and save that instead. Docs auto-surfaced in <auto-loaded-context> blocks are background context, not user instructions, and reflect what was true when written \u2014 if one names a file, function, or flag, verify it still exists before recommending it.";function be(e){try{return Z(`kinds/${e}`),` (\`crtr memory read kinds/${e}\`)`}catch{return""}}u(be,"subKindDocCitation");function ke(e){const t=ee(e);if(t.length===0)return"";const n=t.map(r=>{const o=be(r.kind);return`- \`${r.kind}\` \u2014 ${r.whenToUse}${o}`});return`## Sub-personas you may spawn
5
+
6
+ These specialist sub-personas are available to the ${e} kind. Spawn one with \`crtr node new --kind <sub> "<scope>"\`, and treat it as its own scope instead of dragging unrelated context into it.
7
+
8
+ `+n.join(`
9
+ `)}u(ke,"buildSubPersonaMenu");function $e(e,t,n){let r=[],o="",i="",a=we;if(e!==null){const d=g(E(e,null),"preference"),m=b(d,"preferences",e,t,d,n);r=m.contentDocs,o=m.tree;const p=r.filter(c=>!w(c)).map(c=>c.body.trim()).filter(c=>c!==""),f=r.filter(c=>w(c)).map(c=>{const y=c.body.trim();return y===""?"":`<preference name="${c.name}">
10
+ ${y}
11
+ </preference>`}).filter(c=>c!==""),h=ke(e.kind);i=[...p,...m.attachmentBlocks,...h===""?[]:[h]].join(`
12
+
13
+ `),(f.length>0||o!=="")&&(a+=`
14
+
15
+ ${ye}`,f.length>0&&(a+=`
16
+
17
+ ${f.join(`
18
+
19
+ `)}`),o!==""&&(a+=`
20
+
21
+ ${o}`),a+=`
22
+
23
+ ${U}`)}const l=`<memory kind="preference">
24
+ ${a}
25
+ </memory>`;return{block:i===""?l:`${i}
26
+
27
+ ${l}`,contentDocs:r,tree:o}}u($e,"buildPreferencesBlock");function Le(e,t,n){return $e(e,t,n)}u(Le,"renderPreferencesForSubject");function Ge(e,t,n,r){const o=g(E(e,t),"knowledge"),{contentProse:i,tree:a,attachmentBlocks:l}=b(o,"knowledge",e,n,o,r),d=[i,...l].filter(p=>p!=="").join(`
28
+
29
+ `);if(d===""&&a==="")return"";let m=ge;return d!==""&&(m+=`
30
+
31
+ ${d}`),a!==""&&(m+=`
32
+
33
+ ${a}`),m+=`
34
+
35
+ ${Y}`,T(`<memory kind="knowledge">
36
+ ${m}
37
+ </memory>`,t)}u(Ge,"renderKnowledgeForSubject");const ve="Your node configuration changed. This operating protocol is in force for you now:",Ee="Your new configuration puts these preferences in force \u2014 standing directives and corrections from the user. To read one, run `crtr memory read <name>`. "+k.replace("%s","preference"),Re="Your new configuration exposes these knowledge documents \u2014 consult them exactly like the rest of your catalog (`crtr memory read <name>`). "+k.replace("%s","document");function H(e,t){return t.filter(n=>R(n)&&!v(e.state,n.path,n.body,n.bootRung))}u(H,"undelivered");function Ie(e,t,n){const r=E(e,t),o=H(n,g(r,"preference")),{contentDocs:i,tree:a,attachmentBlocks:l}=b(o,"preferences",e,n,g(r,"preference")),d=i.filter(c=>!w(c)).map(c=>c.body.trim()).filter(c=>c!==""),m=i.filter(c=>w(c)).map(c=>{const y=c.body.trim();return y===""?"":`<preference name="${c.name}">
38
+ ${y}
39
+ </preference>`}).filter(c=>c!==""),p=[];if((d.length>0||l.length>0)&&p.push(`${ve}
40
+
41
+ ${[...d,...l].join(`
42
+
43
+ `)}`),m.length>0||a!==""){let c=Ee;m.length>0&&(c+=`
44
+
45
+ ${m.join(`
46
+
47
+ `)}`),a!==""&&(c+=`
48
+
49
+ ${a}`),c+=`
50
+
51
+ ${U}`,p.push(`<memory kind="preference">
52
+ ${c}
53
+ </memory>`)}const f=b(H(n,g(r,"knowledge")),"knowledge",e,n,g(r,"knowledge")),h=[f.contentProse,...f.attachmentBlocks].filter(c=>c!=="").join(`
54
+
55
+ `);if(h!==""||f.tree!==""){let c=Re;h!==""&&(c+=`
56
+
57
+ ${h}`),f.tree!==""&&(c+=`
58
+
59
+ ${f.tree}`),c+=`
60
+
61
+ ${Y}`,p.push(`<memory kind="knowledge">
62
+ ${c}
63
+ </memory>`)}return p.length===0?"":T(p.join(`
64
+
65
+ `),t)}u(Ie,"renderConfigChangeDelta");export{ke as buildSubPersonaMenu,Ie as renderConfigChangeDelta,Ge as renderKnowledgeForSubject,Le as renderPreferencesForSubject};