@north-light/crouter 0.3.226 → 0.3.228

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 (288) hide show
  1. package/dist/api/client.d.ts +5 -5
  2. package/dist/api/client.js +3 -3
  3. package/dist/api/dto/broker-ops.d.ts +8 -0
  4. package/dist/api/dto/memory.d.ts +8 -7
  5. package/dist/api/dto/memory.js +2 -2
  6. package/dist/builtin-memory/05-kinds/design/00-base.md +3 -4
  7. package/dist/builtin-memory/05-kinds/design/01-orchestrator.md +4 -3
  8. package/dist/builtin-memory/05-kinds/design/design-contract.md +3 -6
  9. package/dist/builtin-memory/05-kinds/plan/00-base.md +3 -4
  10. package/dist/builtin-memory/05-kinds/plan/01-orchestrator.md +4 -5
  11. package/dist/builtin-memory/05-kinds/plan/plan-contract.md +5 -13
  12. package/dist/builtin-memory/design/guide.md +38 -16
  13. package/dist/builtin-memory/design/roadmap.md +4 -4
  14. package/dist/builtin-memory/insights/init.md +5 -5
  15. package/dist/builtin-memory/internal/INDEX.md +1 -1
  16. package/dist/builtin-memory/internal/examples/INDEX.md +1 -1
  17. package/dist/builtin-memory/internal/memory-loading.md +6 -6
  18. package/dist/builtin-memory/internal/plugins.md +1 -1
  19. package/dist/builtin-memory/plan/guide.md +53 -0
  20. package/dist/builtin-memory/plan/roadmap.md +10 -8
  21. package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/memory-slash-commands.ts +50 -37
  22. package/dist/clients/attach/__tests__/pane-tag-successor.test.js +56 -0
  23. package/dist/clients/attach/__tests__/profile-files.test.js +21 -0
  24. package/dist/clients/attach/chrome/inbox-strip.js +11 -7
  25. package/dist/clients/attach/session/pane-tag.d.ts +28 -2
  26. package/dist/clients/attach/session/pane-tag.js +48 -22
  27. package/dist/clients/attach/session/profile-files.d.ts +6 -0
  28. package/dist/clients/attach/session/profile-files.js +44 -11
  29. package/dist/clients/attach/slash/dispatch.js +4 -7
  30. package/dist/clients/attach/viewer.js +588 -596
  31. package/dist/commands/__tests__/surface-reload-target.test.js +21 -0
  32. package/dist/commands/api-client.d.ts +3 -7
  33. package/dist/commands/api-client.js +7 -12
  34. package/dist/commands/memory/__tests__/command-selector-and-mutation-guards.test.js +292 -0
  35. package/dist/commands/memory/__tests__/repository-root-lint.test.js +146 -0
  36. package/dist/commands/memory/delete.js +51 -24
  37. package/dist/commands/memory/edit.js +50 -10
  38. package/dist/commands/memory/find.js +105 -56
  39. package/dist/commands/memory/history.js +51 -31
  40. package/dist/commands/memory/lint.d.ts +0 -9
  41. package/dist/commands/memory/lint.js +78 -322
  42. package/dist/commands/memory/list.d.ts +12 -4
  43. package/dist/commands/memory/list.js +64 -25
  44. package/dist/commands/memory/move.js +103 -73
  45. package/dist/commands/memory/origin.js +35 -5
  46. package/dist/commands/memory/read.d.ts +4 -0
  47. package/dist/commands/memory/read.js +132 -80
  48. package/dist/commands/memory/shared.d.ts +115 -25
  49. package/dist/commands/memory/shared.js +331 -74
  50. package/dist/commands/memory/write.js +72 -21
  51. package/dist/commands/memory.js +2 -2
  52. package/dist/commands/node/lifecycle.js +2 -2
  53. package/dist/commands/pkg/market-manage.js +25 -24
  54. package/dist/commands/pkg/plugin-manage.d.ts +22 -6
  55. package/dist/commands/pkg/plugin-manage.js +118 -25
  56. package/dist/commands/pkg/shared.d.ts +8 -0
  57. package/dist/commands/pkg/shared.js +23 -20
  58. package/dist/commands/surface-reload.d.ts +5 -0
  59. package/dist/commands/surface-reload.js +9 -1
  60. package/dist/commands/sys/__tests__/migrate.test.js +1140 -22
  61. package/dist/commands/sys/__tests__/sync-project-guidance.test.js +218 -0
  62. package/dist/commands/sys/migrate.js +126 -140
  63. package/dist/commands/sys/panels/profiles-panel.d.ts +66 -0
  64. package/dist/commands/sys/panels/profiles-panel.js +599 -0
  65. package/dist/commands/sys/settings-shell.d.ts +4 -2
  66. package/dist/commands/sys/settings-shell.js +35 -4
  67. package/dist/commands/sys/settings.js +21 -5
  68. package/dist/commands/sys/sync-deps.d.ts +2 -0
  69. package/dist/commands/sys/sync-deps.js +26 -15
  70. package/dist/commands/sys/sync-project-guidance.js +228 -145
  71. package/dist/commands/sys/sync-skills.js +28 -17
  72. package/dist/commands/sys/update.js +11 -3
  73. package/dist/core/__tests__/canvas-inbox-watcher-hold.test.js +15 -2
  74. package/dist/core/__tests__/config-change-delta.test.js +106 -0
  75. package/dist/core/__tests__/context-intro.test.js +13 -9
  76. package/dist/core/__tests__/daemon-boot.test.js +22 -16
  77. package/dist/core/__tests__/fixtures/memory-slash-live-probe.js +5 -1
  78. package/dist/core/__tests__/human-deliver.test.js +19 -0
  79. package/dist/core/__tests__/inline-memory-refs.test.js +50 -46
  80. package/dist/core/__tests__/{serial → integration}/broker-fork-seam.test.js +1 -1
  81. package/dist/core/__tests__/{serial → integration}/broker-sdk-wiring.test.js +1 -1
  82. package/dist/core/__tests__/{serial → integration}/broker-snapshot-history.test.js +1 -1
  83. package/dist/core/__tests__/{serial → integration}/command-plugins.test.js +94 -3
  84. package/dist/core/__tests__/{serial → integration}/deferred-no-wake.test.js +1 -1
  85. package/dist/core/__tests__/{serial → integration}/flagship-lifecycle.test.js +13 -27
  86. package/dist/core/__tests__/{serial → integration}/host-teardown-process-group.test.js +1 -1
  87. package/dist/core/__tests__/{serial → integration}/human-deliver-e2e.test.js +1 -1
  88. package/dist/core/__tests__/{live-mutation-verbs.test.js → integration/live-mutation-verbs.test.js} +22 -33
  89. package/dist/core/__tests__/{serial → integration}/live-mutation.test.js +21 -41
  90. package/dist/core/__tests__/integration/refresh-stall-recycle.test.d.ts +1 -0
  91. package/dist/core/__tests__/{serial → integration}/refresh-stall-recycle.test.js +1 -1
  92. package/dist/core/__tests__/integration/revive.test.d.ts +1 -0
  93. package/dist/core/__tests__/{serial → integration}/revive.test.js +38 -19
  94. package/dist/core/__tests__/integration/spawn-root.test.d.ts +1 -0
  95. package/dist/core/__tests__/{serial → integration}/spawn-root.test.js +104 -1
  96. package/dist/core/__tests__/integration/subscription-delivery.test.d.ts +1 -0
  97. package/dist/core/__tests__/{serial → integration}/subscription-delivery.test.js +1 -1
  98. package/dist/core/__tests__/integration/tmux-surface.test.d.ts +1 -0
  99. package/dist/core/__tests__/{serial → integration}/tmux-surface.test.js +1 -1
  100. package/dist/core/__tests__/integration/worktree-land.test.d.ts +1 -0
  101. package/dist/core/__tests__/integration/worktree-land.test.js +400 -0
  102. package/dist/core/__tests__/integration/worktree-reap.test.d.ts +1 -0
  103. package/dist/core/__tests__/{serial/worktree.test.js → integration/worktree-reap.test.js} +6 -338
  104. package/dist/core/__tests__/kickoff.test.js +16 -5
  105. package/dist/core/__tests__/memory-resolver-precedence.test.js +122 -91
  106. package/dist/core/__tests__/nested-store-discovery.test.js +5 -3
  107. package/dist/core/__tests__/on-read-crouter-home-fence.test.js +2 -1
  108. package/dist/core/__tests__/on-read-dedup-resume.test.js +39 -27
  109. package/dist/core/__tests__/on-read-nested-store.test.js +19 -13
  110. package/dist/core/__tests__/profile-project-memory-delivery.test.js +138 -44
  111. package/dist/core/__tests__/repository-association.test.d.ts +1 -0
  112. package/dist/core/__tests__/repository-association.test.js +153 -0
  113. package/dist/core/__tests__/repository-root-identity.test.d.ts +1 -0
  114. package/dist/core/__tests__/repository-root-identity.test.js +219 -0
  115. package/dist/core/__tests__/seam/memory-slash-node-relative-inventory.test.js +27 -11
  116. package/dist/core/__tests__/warm-claim-preference-snapshot.test.d.ts +1 -0
  117. package/dist/core/__tests__/warm-claim-preference-snapshot.test.js +40 -0
  118. package/dist/core/canvas/canvas.d.ts +3 -0
  119. package/dist/core/canvas/canvas.js +30 -10
  120. package/dist/core/canvas/db.js +28 -1
  121. package/dist/core/canvas/paths.d.ts +4 -6
  122. package/dist/core/canvas/paths.js +8 -6
  123. package/dist/core/canvas/render-source.js +2 -2
  124. package/dist/core/canvas/types.d.ts +9 -13
  125. package/dist/core/exclusive-lock.d.ts +2 -0
  126. package/dist/core/exclusive-lock.js +21 -0
  127. package/dist/core/git.d.ts +0 -1
  128. package/dist/core/git.js +0 -3
  129. package/dist/core/human/__tests__/integration/inbox-core.test.d.ts +1 -0
  130. package/dist/core/human/feedback-companion.js +3 -0
  131. package/dist/core/human/scan.js +8 -1
  132. package/dist/core/keybindings/catalog.d.ts +2 -2
  133. package/dist/core/keybindings/catalog.js +2 -1
  134. package/dist/core/memory/doc-link-grammar.js +2 -2
  135. package/dist/core/memory/history.d.ts +24 -0
  136. package/dist/core/memory/history.js +66 -1
  137. package/dist/core/memory/identity.d.ts +65 -0
  138. package/dist/core/memory/identity.js +185 -0
  139. package/dist/core/memory/inline-ref-guidance.d.ts +1 -1
  140. package/dist/core/memory/inline-ref-guidance.js +1 -1
  141. package/dist/core/memory/inline-ref-inventory.d.ts +3 -10
  142. package/dist/core/memory/inline-ref-inventory.js +30 -62
  143. package/dist/core/memory/lint.d.ts +129 -0
  144. package/dist/core/memory/lint.js +517 -0
  145. package/dist/core/memory/project-namespace.d.ts +31 -0
  146. package/dist/core/memory/project-namespace.js +85 -0
  147. package/dist/core/memory/repository-association.d.ts +31 -0
  148. package/dist/core/memory/repository-association.js +129 -0
  149. package/dist/core/memory/tree.d.ts +39 -0
  150. package/dist/core/memory/tree.js +93 -0
  151. package/dist/core/memory-resolver.d.ts +193 -90
  152. package/dist/core/memory-resolver.js +461 -375
  153. package/dist/core/nested-stores.js +6 -13
  154. package/dist/core/profiles/select.d.ts +4 -1
  155. package/dist/core/profiles/select.js +108 -48
  156. package/dist/core/review/__tests__/capture-origin.test.js +2 -2
  157. package/dist/core/review/__tests__/stage-identity.test.js +2 -2
  158. package/dist/core/review/companion.js +11 -2
  159. package/dist/core/runtime/bearings.d.ts +2 -2
  160. package/dist/core/runtime/bearings.js +3 -3
  161. package/dist/core/runtime/broker/daemon-ops.d.ts +2 -2
  162. package/dist/core/runtime/broker/rebind.js +5 -0
  163. package/dist/core/runtime/broker-extension-render.d.ts +7 -3
  164. package/dist/core/runtime/broker-extension-render.js +10 -5
  165. package/dist/core/runtime/broker-persona-guidance.d.ts +19 -5
  166. package/dist/core/runtime/broker-persona-guidance.js +122 -27
  167. package/dist/core/runtime/deliver-live.d.ts +16 -4
  168. package/dist/core/runtime/deliver-live.js +29 -15
  169. package/dist/core/runtime/kickoff.d.ts +3 -3
  170. package/dist/core/runtime/kickoff.js +8 -16
  171. package/dist/core/runtime/lifecycle.js +2 -3
  172. package/dist/core/runtime/nodes.d.ts +3 -4
  173. package/dist/core/runtime/nodes.js +3 -4
  174. package/dist/core/runtime/persona.d.ts +8 -12
  175. package/dist/core/runtime/persona.js +24 -96
  176. package/dist/core/runtime/promote.d.ts +2 -2
  177. package/dist/core/runtime/promote.js +8 -21
  178. package/dist/core/runtime/revive.js +20 -17
  179. package/dist/core/runtime/spawn.js +18 -7
  180. package/dist/core/runtime/tmux-bindings.js +2 -3
  181. package/dist/core/runtime/warm-pool.js +3 -4
  182. package/dist/core/scope.js +2 -0
  183. package/dist/core/self-update.d.ts +0 -2
  184. package/dist/core/self-update.js +2 -35
  185. package/dist/core/substrate/__tests__/surface-match-memory-read.test.d.ts +1 -0
  186. package/dist/core/substrate/__tests__/surface-match-memory-read.test.js +28 -0
  187. package/dist/core/substrate/index.d.ts +2 -2
  188. package/dist/core/substrate/index.js +1 -1
  189. package/dist/core/substrate/injected-store.d.ts +43 -27
  190. package/dist/core/substrate/injected-store.js +208 -104
  191. package/dist/core/substrate/listings.d.ts +19 -12
  192. package/dist/core/substrate/listings.js +75 -52
  193. package/dist/core/substrate/on-read-node.d.ts +4 -7
  194. package/dist/core/substrate/on-read-node.js +6 -8
  195. package/dist/core/substrate/on-read.d.ts +22 -25
  196. package/dist/core/substrate/on-read.js +103 -147
  197. package/dist/core/substrate/render-node.d.ts +4 -7
  198. package/dist/core/substrate/render-node.js +5 -7
  199. package/dist/core/substrate/render.d.ts +21 -3
  200. package/dist/core/substrate/render.js +291 -223
  201. package/dist/core/substrate/schema.d.ts +1 -13
  202. package/dist/core/substrate/schema.js +5 -40
  203. package/dist/core/substrate/session-cache.d.ts +14 -4
  204. package/dist/core/substrate/session-cache.js +40 -22
  205. package/dist/core/substrate/surface-match.d.ts +9 -7
  206. package/dist/core/substrate/surface-match.js +26 -25
  207. package/dist/daemon/__tests__/helpers/source-daemon.d.ts +30 -0
  208. package/dist/daemon/__tests__/helpers/source-daemon.js +174 -0
  209. package/dist/daemon/__tests__/integration/migration-startup.test.d.ts +1 -0
  210. package/dist/daemon/__tests__/integration/migration-startup.test.js +97 -0
  211. package/dist/daemon/api/__tests__/bridge-heartbeat.test.js +37 -9
  212. package/dist/daemon/api/bridge.d.ts +35 -4
  213. package/dist/daemon/api/bridge.js +50 -8
  214. package/dist/daemon/api/handlers/broker-ops.js +21 -16
  215. package/dist/daemon/api/handlers/memory.js +2 -0
  216. package/dist/daemon/crtrd.js +2 -0
  217. package/dist/daemon/human/finish.js +8 -1
  218. package/dist/daemon/manage.d.ts +0 -1
  219. package/dist/daemon/manage.js +7 -16
  220. package/dist/daemon/startup-policy.d.ts +1 -0
  221. package/dist/daemon/startup-policy.js +1 -0
  222. package/dist/migrations/001-surfaces-frontmatter.js +21 -109
  223. package/dist/migrations/002-profile-project-memory.js +1 -0
  224. package/dist/migrations/003-repository-root-memory-identity/front-door.d.ts +26 -0
  225. package/dist/migrations/003-repository-root-memory-identity/front-door.js +231 -0
  226. package/dist/migrations/003-repository-root-memory-identity/index.d.ts +2 -0
  227. package/dist/migrations/003-repository-root-memory-identity/index.js +513 -0
  228. package/dist/migrations/003-repository-root-memory-identity/references.d.ts +95 -0
  229. package/dist/migrations/003-repository-root-memory-identity/references.js +469 -0
  230. package/dist/migrations/003-repository-root-memory-identity/repository-facts.d.ts +39 -0
  231. package/dist/migrations/003-repository-root-memory-identity/repository-facts.js +349 -0
  232. package/dist/migrations/__tests__/activation-concurrency.test.d.ts +1 -0
  233. package/dist/migrations/__tests__/activation-concurrency.test.js +145 -0
  234. package/dist/migrations/__tests__/activation.test.d.ts +1 -0
  235. package/dist/migrations/__tests__/activation.test.js +149 -0
  236. package/dist/migrations/__tests__/deletion-and-root-declaration.test.d.ts +1 -0
  237. package/dist/migrations/__tests__/deletion-and-root-declaration.test.js +149 -0
  238. package/dist/migrations/activation.d.ts +16 -0
  239. package/dist/migrations/activation.js +78 -0
  240. package/dist/migrations/convergent.d.ts +14 -3
  241. package/dist/migrations/convergent.js +21 -10
  242. package/dist/migrations/corpus.d.ts +78 -0
  243. package/dist/migrations/corpus.js +497 -0
  244. package/dist/migrations/frontmatter-splice.d.ts +15 -0
  245. package/dist/migrations/frontmatter-splice.js +176 -0
  246. package/dist/migrations/registry.d.ts +6 -1
  247. package/dist/migrations/registry.js +7 -2
  248. package/dist/migrations/runner.d.ts +41 -0
  249. package/dist/migrations/runner.js +81 -0
  250. package/dist/migrations/types.d.ts +148 -9
  251. package/dist/migrations/types.js +9 -2
  252. package/dist/pi-extensions/__tests__/canvas-context-intro.test.js +225 -17
  253. package/dist/pi-extensions/__tests__/canvas-goal-capture-envelope.test.js +11 -3
  254. package/dist/pi-extensions/canvas-context-intro.d.ts +3 -5
  255. package/dist/pi-extensions/canvas-context-intro.js +50 -46
  256. package/dist/pi-extensions/canvas-doc-substrate.d.ts +1 -8
  257. package/dist/pi-extensions/canvas-doc-substrate.js +55 -122
  258. package/dist/pi-extensions/canvas-stophook.js +6 -13
  259. package/dist/shared/generated-context.d.ts +0 -3
  260. package/dist/shared/generated-context.js +0 -57
  261. package/dist/shared/tool-groups.js +2 -3
  262. package/package.json +5 -4
  263. package/runtime.lock.json +2 -2
  264. /package/dist/api/__tests__/{serial → integration}/client.test.d.ts +0 -0
  265. /package/dist/api/__tests__/{serial → integration}/client.test.js +0 -0
  266. /package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/{serial → integration}/provider-rotation.test.ts +0 -0
  267. /package/dist/clients/{inbox/__tests__/serial/inbox-controller.test.d.ts → attach/__tests__/pane-tag-successor.test.d.ts} +0 -0
  268. /package/dist/clients/{inbox/__tests__/serial/mount-panel.test.d.ts → attach/__tests__/profile-files.test.d.ts} +0 -0
  269. /package/dist/{core/__tests__/live-mutation-verbs.test.d.ts → clients/inbox/__tests__/integration/inbox-controller.test.d.ts} +0 -0
  270. /package/dist/clients/inbox/__tests__/{serial → integration}/inbox-controller.test.js +0 -0
  271. /package/dist/{core/__tests__/serial/broker-fork-seam.test.d.ts → clients/inbox/__tests__/integration/mount-panel.test.d.ts} +0 -0
  272. /package/dist/clients/inbox/__tests__/{serial → integration}/mount-panel.test.js +0 -0
  273. /package/dist/{core/__tests__/serial/broker-sdk-wiring.test.d.ts → commands/__tests__/surface-reload-target.test.d.ts} +0 -0
  274. /package/dist/{core/__tests__/serial/broker-snapshot-history.test.d.ts → commands/memory/__tests__/command-selector-and-mutation-guards.test.d.ts} +0 -0
  275. /package/dist/{core/__tests__/serial/command-plugins.test.d.ts → commands/memory/__tests__/repository-root-lint.test.d.ts} +0 -0
  276. /package/dist/{core/__tests__/serial/deferred-no-wake.test.d.ts → commands/sys/__tests__/sync-project-guidance.test.d.ts} +0 -0
  277. /package/dist/core/__tests__/{serial/flagship-lifecycle.test.d.ts → config-change-delta.test.d.ts} +0 -0
  278. /package/dist/core/__tests__/{serial/host-teardown-process-group.test.d.ts → integration/broker-fork-seam.test.d.ts} +0 -0
  279. /package/dist/core/__tests__/{serial/human-deliver-e2e.test.d.ts → integration/broker-sdk-wiring.test.d.ts} +0 -0
  280. /package/dist/core/__tests__/{serial/live-mutation.test.d.ts → integration/broker-snapshot-history.test.d.ts} +0 -0
  281. /package/dist/core/__tests__/{serial/refresh-stall-recycle.test.d.ts → integration/command-plugins.test.d.ts} +0 -0
  282. /package/dist/core/__tests__/{serial/revive.test.d.ts → integration/deferred-no-wake.test.d.ts} +0 -0
  283. /package/dist/core/__tests__/{serial/spawn-root.test.d.ts → integration/flagship-lifecycle.test.d.ts} +0 -0
  284. /package/dist/core/__tests__/{serial/subscription-delivery.test.d.ts → integration/host-teardown-process-group.test.d.ts} +0 -0
  285. /package/dist/core/__tests__/{serial/tmux-surface.test.d.ts → integration/human-deliver-e2e.test.d.ts} +0 -0
  286. /package/dist/core/__tests__/{serial/worktree.test.d.ts → integration/live-mutation-verbs.test.d.ts} +0 -0
  287. /package/dist/core/{human/__tests__/serial/inbox-core.test.d.ts → __tests__/integration/live-mutation.test.d.ts} +0 -0
  288. /package/dist/core/human/__tests__/{serial → integration}/inbox-core.test.js +0 -0
@@ -1,41 +1,13 @@
1
- // inline-ref-inventory.ts — the authoritative, broker-side inventory of
2
- // referenceable memory documents for inline memory references (design:
3
- // inline memory references, D2). Built from the SAME resolver + parse path
4
- // as every other memory surface (`listAllMemoryDocs` + `parseSubstrateDoc`,
5
- // via the session parse cache), reused verbatim rather than re-walked or
6
- // shelled out.
7
- //
8
- // This is deliberately NOT `crtr memory list`'s inventory:
9
- // • listAllMemoryDocs() is called with NO scope arg, so inside a running
10
- // node (CRTR_NODE_ID set) the corpus already includes node > project
11
- // stack > profile > user > builtin, nearest first.
12
- // • Dedup is first-wins by NAME alone (not `scope/name`) — a slash token
13
- // maps to exactly one `crtr memory read <name>`, so two same-named docs
14
- // at different scopes must collapse to one inventory row, and the
15
- // winning (nearest) doc supplies the display fields.
16
- // • No gate / visibility-rung / `slash` filtering. Referenceability is
17
- // "resolves in this node's corpus," full stop — gates/rungs govern
18
- // automatic boot/on-read surfacing only (spec §7.1), and `slash` governs
19
- // command registration only (spec §4.3). An explicit human reference
20
- // outranks both.
21
- // • Directory names are referenceable too: a bare-dir `[[ref]]` opens the
22
- // directory's listing through `crtr memory read <dir>`, so every proper
23
- // name-prefix of a winning doc joins the resolution set — resolution
24
- // only, never a display row.
25
- // • A malformed doc (no valid `kind`) is already dropped by
26
- // `parseSubstrateDoc` returning null, so it never reaches the winners map.
27
- //
28
- // `buildRefInventory` is called fresh per read-op / per submission by the
29
- // broker (src/core/runtime/broker.ts), which memoizes it and rebuilds on
30
- // `/reload` — this module itself holds no cache beyond the session parse
31
- // cache it reads through.
32
- import { listAllMemoryDocs } from '../memory-resolver.js';
1
+ // Authoritative broker-side inventory for inline memory references. It uses one
2
+ // target view, exact canonical winners, and the canonical tree for directory
3
+ // browse names; gates, rungs, and slash flags do not affect referenceability.
4
+ import { loadMemoryTargetView } from '../memory-resolver.js';
5
+ import { buildMemoryTree } from './tree.js';
33
6
  import { memoryExtensionEffectiveCatalog, projectEffectiveMemoryExtensions } from './extensions.js';
34
7
  import { parseSubstrateDoc } from '../substrate/schema.js';
35
- import { cachedAllMemoryDocsInclusive, cachedSubstrateDocsInclusive } from '../substrate/session-cache.js';
36
8
  // Display-sort weight matching resolution precedence (node > project >
37
- // profile > user > builtin) — display-only; resolution itself is
38
- // name-only (`names.has(candidate)`), never scope-aware.
9
+ // profile > user > builtin) — display-only; resolution itself is exact
10
+ // canonical-name membership (`names.has(candidate)`).
39
11
  const SCOPE_SORT_RANK = {
40
12
  node: 0,
41
13
  project: 1,
@@ -43,28 +15,22 @@ const SCOPE_SORT_RANK = {
43
15
  user: 3,
44
16
  builtin: 4,
45
17
  };
46
- /**
47
- * Build the inline memory-reference inventory: every referenceable document
48
- * in this node's corpus, precedence-deduped first-wins by canonical name,
49
- * both kinds, no gate/rung/`slash` filtering. Returns display metadata
50
- * (`refs`, stably sorted by winning scope then name) plus the resolution set
51
- * (`names` — doc names plus every proper directory prefix, because a bare-dir
52
- * ref is a legal listing link) that both the broker's per-submission resolver
53
- * and `buildGuidance` test tokens against. `refs` additionally labels Gateway
54
- * eligibility; the terminal viewer still receives every referenceable row.
55
- */
18
+ /** Build the inline inventory from exact target-view winners. `refs` carries
19
+ * metadata rows; `names` adds only canonical directory nodes with members for
20
+ * browse links. Gates, rungs, and `slash` do not affect referenceability. */
56
21
  export function buildRefInventory() {
57
- const memoryDocs = cachedAllMemoryDocsInclusive(listAllMemoryDocs);
58
- const substrateDocs = cachedSubstrateDocsInclusive(listAllMemoryDocs, parseSubstrateDoc);
59
- const substrateDocsByPath = new Map(substrateDocs.map((doc) => [doc.path, doc]));
60
- // First-wins by canonical name: docs arrive already in precedence order
61
- // (listAllMemoryDocs' nearest-first source ordering), so the first doc seen
62
- // for a name is the winner.
22
+ const target = {
23
+ cwd: process.cwd(),
24
+ profileId: process.env['CRTR_PROFILE_ID'] || null,
25
+ nodeId: process.env['CRTR_NODE_ID'] || null,
26
+ };
27
+ const view = loadMemoryTargetView(target, { quiet: true });
63
28
  const winners = new Map();
64
- for (const memoryDoc of memoryDocs) {
65
- const doc = substrateDocsByPath.get(memoryDoc.path);
66
- if (doc !== undefined && !winners.has(doc.name))
67
- winners.set(doc.name, { doc, memoryDoc });
29
+ for (const candidateSet of view.candidateSets()) {
30
+ const memoryDoc = candidateSet.winner;
31
+ const doc = parseSubstrateDoc(memoryDoc);
32
+ if (doc !== null)
33
+ winners.set(candidateSet.name, { doc, memoryDoc });
68
34
  }
69
35
  const refs = [];
70
36
  for (const [name, { doc, memoryDoc }] of winners) {
@@ -79,12 +45,14 @@ export function buildRefInventory() {
79
45
  return a.name.localeCompare(b.name);
80
46
  });
81
47
  const names = new Set(refs.map((r) => r.name));
82
- // Directory names resolve as listing links, so they join the set — but not
83
- // the display rows: a dir has no kind/short-form to show.
84
- for (const name of winners.keys()) {
85
- const segs = name.split('/');
86
- for (let i = 1; i < segs.length; i++)
87
- names.add(segs.slice(0, i).join('/'));
88
- }
48
+ const tree = buildMemoryTree([...winners.values()].map(({ memoryDoc }) => memoryDoc));
49
+ const addDirectoryNames = (node) => {
50
+ if (node.name !== '' && (node.childDirectories.length > 0 || node.childDocuments.length > 0)) {
51
+ names.add(node.name);
52
+ }
53
+ for (const child of node.childDirectories)
54
+ addDirectoryNames(child);
55
+ };
56
+ addDirectoryNames(tree.root);
89
57
  return { refs, names };
90
58
  }
@@ -0,0 +1,129 @@
1
+ import { type MemoryDoc, type MemoryScope, type MemoryStoreDescriptor, type MemoryTarget } from '../memory-resolver.js';
2
+ export type MemoryLintSeverity = 'error' | 'warning' | 'notice';
3
+ export type MemoryLintRule =
4
+ /** Frontmatter does not parse as YAML. */
5
+ 'yaml'
6
+ /** Substrate frontmatter contract violation. */
7
+ | 'schema'
8
+ /** A plugin-declared `extensions` value is invalid. */
9
+ | 'extension'
10
+ /** Body longer than its delivery entries earn. */
11
+ | 'length'
12
+ /** A body short enough to inline still pays a routing line. */
13
+ | 'short-preview'
14
+ /** A `memory-read` glob that fires on every memory read. */
15
+ | 'broad-memory-read'
16
+ /** A project store the runtime refuses to mount: no/invalid repository-root `namespace:`. */
17
+ | 'store-namespace'
18
+ /** `namespace:` declared anywhere but the repository-root store's root INDEX.md. */
19
+ | 'namespace-placement'
20
+ /** Two owner directories in one repository normalize to one effective prefix. */
21
+ | 'owner-path-collision'
22
+ /** `name:` on a store's root INDEX.md, whose identity is the namespace. */
23
+ | 'root-name'
24
+ /** A root INDEX.md in a store that declares no namespace — no address. */
25
+ | 'root-index-unaddressable'
26
+ /** An explicit non-root `name:` that is not a valid store-local name. */
27
+ | 'local-name'
28
+ /** Two files in ONE store owning the same canonical identity. */
29
+ | 'canonical-collision'
30
+ /** One canonical identity held by several stores (inspection data). */
31
+ | 'cross-store-candidates'
32
+ /** A `[[link]]` that resolves to no document or directory. */
33
+ | 'dangling-link'
34
+ /** A `memory-read` route that matches no canonical name. */
35
+ | 'memory-read-route'
36
+ /** A project store's workspace front door is missing or not its root doc. */
37
+ | 'front-door'
38
+ /** Boot entries in a nested store, which never rides the boot catalog. */
39
+ | 'nested-store-boot'
40
+ /** Reference checks skipped because the store's identities are undetermined. */
41
+ | 'reference-check-deferred';
42
+ /** The rules that decide whether a corpus is COMPATIBLE with exact canonical
43
+ * identity — what a plugin candidate gate, the builtin build gate, and
44
+ * migration verification refuse a corpus on, independent of authoring-quality
45
+ * rules such as length or routing lines. */
46
+ export declare const MEMORY_LINT_IDENTITY_RULES: ReadonlySet<MemoryLintRule>;
47
+ export interface MemoryLintFinding {
48
+ severity: MemoryLintSeverity;
49
+ rule: MemoryLintRule;
50
+ /** The markdown file, store root, or project directory at fault. */
51
+ path: string;
52
+ message: string;
53
+ scope?: MemoryScope;
54
+ storeRoot?: string;
55
+ /** The canonical identity the finding is about, when it has one. */
56
+ name?: string;
57
+ /** Every physical path sharing a collided identity, read winner first. */
58
+ paths?: readonly string[];
59
+ }
60
+ export interface MemoryLintResult {
61
+ /** No `error` findings. */
62
+ ok: boolean;
63
+ /** Markdown files examined, including non-document files (`SKILL.md`,
64
+ * `MEMORY.md`) that are YAML-checked but never loaded as documents. */
65
+ checked: number;
66
+ /** Of `checked`, the files the substrate actually loads as memory
67
+ * documents — `checked` minus `SKILL.md`/`MEMORY.md`. */
68
+ documents: number;
69
+ storesLinted: number;
70
+ /** Every finding, in emission order. */
71
+ findings: readonly MemoryLintFinding[];
72
+ errors: readonly MemoryLintFinding[];
73
+ warnings: readonly MemoryLintFinding[];
74
+ notices: readonly MemoryLintFinding[];
75
+ }
76
+ export interface MemoryLintTargetResult extends MemoryLintResult {
77
+ /** Every store the target saw, mounted or not, in precedence order. */
78
+ stores: readonly MemoryStoreDescriptor[];
79
+ /** Projects the selected profile manages that were checked for a workspace
80
+ * front door — zero under a scope filter that excludes project stores. */
81
+ profileProjects: number;
82
+ }
83
+ /** The length rule. Caps come from the parsed entries — an invalid entry already
84
+ * fails the schema check, so it simply matches no cap here. `docName` is the
85
+ * doc's canonical identity; persona layers under `kinds/` are never capped. */
86
+ export declare function lintBodyLength(fm: Record<string, unknown>, body: string, docName: string): string | null;
87
+ /** Warn when a body short enough to inline still pays a routing line. */
88
+ export declare function lintShortPreviewBody(fm: Record<string, unknown>, body: string): string | null;
89
+ /** Every canonical name a reference may target in a corpus: each document's
90
+ * exact identity plus every canonical directory, because reading a directory
91
+ * answers with its own document and its listing. Derived from the canonical
92
+ * tree, never from string prefixes of a name. */
93
+ export declare function resolvableCanonicalNames(docs: readonly MemoryDoc[]): Set<string>;
94
+ export interface MemoryLintStoreOptions {
95
+ /** Canonical names a `[[link]]` or route may target — the target view the
96
+ * store's documents are read in. Omit to skip reference checks entirely
97
+ * (a store linted in isolation, such as the builtin corpus at build time,
98
+ * passes only its own names). */
99
+ resolvable?: ReadonlySet<string>;
100
+ /** Whether a project store must carry a workspace front door: `required` for
101
+ * a profile-managed project, `advisory` (warning) for an unmanaged one that
102
+ * was asked about directly, `ignore` otherwise. A front door on any doc but
103
+ * the store root is an error under every mode. */
104
+ frontDoor?: 'required' | 'advisory' | 'ignore';
105
+ /** A store discovered BELOW the mounted project roots: the boot catalog never
106
+ * includes one, so its boot entries are inert. */
107
+ nestedStore?: boolean;
108
+ }
109
+ /** Lint ONE physical store, whether or not the runtime mounts it. An undeclared
110
+ * or invalid project store still has its files checked — every store-local rule
111
+ * holds before a namespace exists — but its references are deferred, because
112
+ * the identities its links resolve against are undetermined until migration
113
+ * declares the namespace. */
114
+ export declare function lintMemoryStore(store: MemoryStoreDescriptor, options?: MemoryLintStoreOptions): MemoryLintResult;
115
+ export interface MemoryLintTargetOptions {
116
+ /** Whose view to lint. Default: the ambient process (cwd + CRTR_PROFILE_ID +
117
+ * CRTR_NODE_ID). */
118
+ target?: MemoryTarget;
119
+ /** Restrict to one source class. Front-door coverage applies only to an
120
+ * unfiltered or project-scoped view. */
121
+ scope?: MemoryScope;
122
+ /** Also lint `.crouter/memory` stores discovered below the mounted project
123
+ * roots. Default true: they are addressable, so they are lintable. */
124
+ includeDescendants?: boolean;
125
+ }
126
+ /** Lint every store a target sees, then the diagnostics only the merged view
127
+ * produces: references resolved against the view's canonical names, and equal
128
+ * canonical identities held by several stores. */
129
+ export declare function lintMemoryTarget(options?: MemoryLintTargetOptions): MemoryLintTargetResult;