@remnic/core 9.69.42 → 9.69.43

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 (556) hide show
  1. package/dist/access-admin-ops-surface.d.ts +16 -14
  2. package/dist/access-admin-ops-surface.js +33 -25
  3. package/dist/access-authorization-probe.d.ts +16 -14
  4. package/dist/access-authorization-probe.js +34 -26
  5. package/dist/access-boundary.d.ts +16 -14
  6. package/dist/access-boundary.js +33 -25
  7. package/dist/access-cli.js +92 -82
  8. package/dist/access-cli.js.map +1 -1
  9. package/dist/access-coding-context-resolution.d.ts +2 -1
  10. package/dist/access-extraction-force-flush.d.ts +16 -14
  11. package/dist/access-extraction-force-flush.js +33 -25
  12. package/dist/access-health-types.d.ts +2 -1
  13. package/dist/access-http-briefing.d.ts +16 -14
  14. package/dist/access-http-briefing.js +34 -26
  15. package/dist/access-http-lcm-compaction.d.ts +16 -14
  16. package/dist/access-http-lifecycle-flush.d.ts +16 -14
  17. package/dist/access-http-offline-stream.d.ts +16 -14
  18. package/dist/access-http-query.d.ts +3 -2
  19. package/dist/access-http-query.js +35 -27
  20. package/dist/access-http.d.ts +17 -15
  21. package/dist/access-http.js +55 -45
  22. package/dist/access-identity-continuity-surface.d.ts +12 -11
  23. package/dist/access-identity-continuity-surface.js +33 -25
  24. package/dist/access-lcm-surface.d.ts +16 -14
  25. package/dist/access-lcm-surface.js +33 -25
  26. package/dist/access-mcp-output-schemas.js +1 -1
  27. package/dist/access-mcp-shared-context-tools.d.ts +16 -14
  28. package/dist/access-mcp.d.ts +16 -14
  29. package/dist/access-mcp.js +45 -36
  30. package/dist/access-memory-search-fanout.d.ts +3 -2
  31. package/dist/{access-namespace-preflight-ShnAJ9uL.d.ts → access-namespace-preflight-CE-RrXKu.d.ts} +1 -1
  32. package/dist/access-namespace-preflight.d.ts +4 -3
  33. package/dist/access-namespace-preflight.js +33 -25
  34. package/dist/access-observe-transcript.d.ts +12 -11
  35. package/dist/access-observe-write-category.d.ts +4 -3
  36. package/dist/access-observe-write-category.js +4 -4
  37. package/dist/access-observe-write-surface.d.ts +16 -14
  38. package/dist/access-observe-write-surface.js +33 -25
  39. package/dist/access-offline-manifest.d.ts +12 -11
  40. package/dist/access-operations-batch.js +35 -28
  41. package/dist/access-operations.d.ts +17 -15
  42. package/dist/access-operations.js +41 -33
  43. package/dist/access-recall-concurrency.d.ts +16 -14
  44. package/dist/access-recall-concurrency.js +33 -25
  45. package/dist/access-recall-response.d.ts +16 -14
  46. package/dist/access-recall-response.js +33 -25
  47. package/dist/access-recall-surface.d.ts +16 -14
  48. package/dist/access-recall-surface.js +33 -25
  49. package/dist/access-schema.d.ts +115 -114
  50. package/dist/access-schema.js +3 -3
  51. package/dist/{access-service-DjG_e2cM.d.ts → access-service-DxTTTg9O.d.ts} +77 -74
  52. package/dist/access-service-helpers.d.ts +16 -14
  53. package/dist/access-service.d.ts +16 -14
  54. package/dist/access-service.js +33 -25
  55. package/dist/access-surface-catalog.d.ts +16 -14
  56. package/dist/access-surface-catalog.js +39 -27
  57. package/dist/access-surface-catalog.js.map +1 -1
  58. package/dist/access-wearables-meetings-surface.d.ts +5 -4
  59. package/dist/action-confidence.d.ts +2 -1
  60. package/dist/active-memory-bridge.d.ts +2 -1
  61. package/dist/active-recall.d.ts +2 -1
  62. package/dist/active-recall.js +4 -2
  63. package/dist/active-recall.js.map +1 -1
  64. package/dist/activity/digest.d.ts +2 -1
  65. package/dist/ambient-provenance.d.ts +2 -1
  66. package/dist/artifact-search.d.ts +2 -1
  67. package/dist/background-generation.d.ts +2 -1
  68. package/dist/behavior-learner.d.ts +2 -1
  69. package/dist/behavior-signals.d.ts +2 -1
  70. package/dist/bootstrap.d.ts +12 -11
  71. package/dist/briefing-window.d.ts +3 -2
  72. package/dist/briefing.d.ts +3 -2
  73. package/dist/briefing.js +8 -8
  74. package/dist/buffer-surprise-report.d.ts +2 -1
  75. package/dist/buffer-turn-helpers.d.ts +2 -1
  76. package/dist/buffer.d.ts +3 -2
  77. package/dist/bulk-import/index.d.ts +4 -3
  78. package/dist/calibration.d.ts +2 -1
  79. package/dist/capabilities.d.ts +2 -1
  80. package/dist/{capsule-crypto-YO5QJ6L3.js → capsule-crypto-7FJQINUR.js} +2 -2
  81. package/dist/{catalog-BhuXaQHx.d.ts → catalog-Ya3DDn_T.d.ts} +1 -1
  82. package/dist/causal-behavior.d.ts +2 -1
  83. package/dist/causal-consolidation.d.ts +2 -1
  84. package/dist/causal-consolidation.js +9 -9
  85. package/dist/causal-trajectory-graph.d.ts +2 -1
  86. package/dist/{chunk-QVSRE355.js → chunk-2AV75BJW.js} +29 -1
  87. package/dist/chunk-2AV75BJW.js.map +1 -0
  88. package/dist/{chunk-WNPRRBOE.js → chunk-2HDLDBJW.js} +2 -2
  89. package/dist/{chunk-BXLOS5AJ.js → chunk-2NLLXCJG.js} +2 -2
  90. package/dist/{chunk-LWF6GOII.js → chunk-2PIC6CEN.js} +2 -2
  91. package/dist/chunk-2WFOVXVJ.js +95 -0
  92. package/dist/chunk-2WFOVXVJ.js.map +1 -0
  93. package/dist/{chunk-FSUFKIFS.js → chunk-2YIUUXNK.js} +2 -2
  94. package/dist/{chunk-2PDMIPMP.js → chunk-324HBGS4.js} +6 -6
  95. package/dist/chunk-324HBGS4.js.map +1 -0
  96. package/dist/{chunk-OP722LOG.js → chunk-3254BYQV.js} +1 -1
  97. package/dist/{chunk-CQ4BTPX6.js → chunk-3YQ7VLP3.js} +2 -2
  98. package/dist/{chunk-ZFU6QNRN.js → chunk-4WMGRLTV.js} +2 -2
  99. package/dist/{chunk-U26LB4WA.js → chunk-5AJZ7EUW.js} +2 -2
  100. package/dist/chunk-5KVT6G5U.js +31 -0
  101. package/dist/chunk-5KVT6G5U.js.map +1 -0
  102. package/dist/{chunk-WN2OXGGH.js → chunk-66YUOI53.js} +1 -1
  103. package/dist/chunk-66YUOI53.js.map +1 -0
  104. package/dist/{chunk-R45VFSEV.js → chunk-7F47R4H4.js} +2 -2
  105. package/dist/{chunk-2EYZ32LH.js → chunk-7RGX7BMF.js} +24 -2
  106. package/dist/{chunk-2EYZ32LH.js.map → chunk-7RGX7BMF.js.map} +1 -1
  107. package/dist/{chunk-LVFI5LG7.js → chunk-A7GQBJP5.js} +7 -7
  108. package/dist/{chunk-KJQ4Y2PY.js → chunk-AKB44K3D.js} +8 -8
  109. package/dist/chunk-AS2NOPDM.js +30 -0
  110. package/dist/chunk-AS2NOPDM.js.map +1 -0
  111. package/dist/{chunk-CTETTVDN.js → chunk-BZDK5EOD.js} +2 -2
  112. package/dist/{chunk-PLJ2MQFT.js → chunk-C3YEB7CR.js} +7 -7
  113. package/dist/{chunk-ZOGKZ2XT.js → chunk-CRK6F6N3.js} +2 -2
  114. package/dist/{chunk-XJLTQTAO.js → chunk-D7UUB33A.js} +2 -2
  115. package/dist/{chunk-DMTSKY4W.js → chunk-DABSYX7V.js} +3 -3
  116. package/dist/{chunk-3RLWUW7G.js → chunk-DDGQDNQW.js} +2 -2
  117. package/dist/{chunk-EAARGPWI.js → chunk-F3TURDFG.js} +3 -1
  118. package/dist/chunk-F3TURDFG.js.map +1 -0
  119. package/dist/{chunk-DLPMOSNH.js → chunk-GKKLI23D.js} +2 -2
  120. package/dist/{chunk-I65KB36L.js → chunk-GMU7MAHS.js} +9 -9
  121. package/dist/{chunk-JC2OBYYD.js → chunk-HKQAI6XI.js} +2 -2
  122. package/dist/{chunk-7PSRCGWT.js → chunk-IB7FDRRC.js} +2 -2
  123. package/dist/{chunk-GIM2AGFL.js → chunk-IWHNT35B.js} +3 -3
  124. package/dist/{chunk-AHHFBJX7.js → chunk-JDL5BYYF.js} +3 -3
  125. package/dist/{chunk-HSJU6JFT.js → chunk-JWBDHA4F.js} +12 -6
  126. package/dist/chunk-JWBDHA4F.js.map +1 -0
  127. package/dist/{chunk-JMAP6L6Q.js → chunk-KDLOKVX7.js} +2 -2
  128. package/dist/chunk-KIW3OOZE.js +39 -0
  129. package/dist/chunk-KIW3OOZE.js.map +1 -0
  130. package/dist/{chunk-HO2P3FAX.js → chunk-KOM36ILJ.js} +19 -15
  131. package/dist/chunk-KOM36ILJ.js.map +1 -0
  132. package/dist/{chunk-HK44SV6K.js → chunk-KORQWGUA.js} +2 -2
  133. package/dist/{chunk-VDX2J7OX.js → chunk-KQAFEZQX.js} +2 -2
  134. package/dist/{chunk-GWEZNCGA.js → chunk-KY75VZKG.js} +2 -2
  135. package/dist/{chunk-4IGOLIWM.js → chunk-L63M2PE4.js} +2 -2
  136. package/dist/{chunk-BIANISES.js → chunk-LD22AAJI.js} +2 -2
  137. package/dist/{chunk-L732NBPR.js → chunk-LT4H7SL5.js} +96 -42
  138. package/dist/chunk-LT4H7SL5.js.map +1 -0
  139. package/dist/{chunk-K27INAPR.js → chunk-LUAQHDUI.js} +2 -2
  140. package/dist/chunk-LVTT5AUG.js +79 -0
  141. package/dist/chunk-LVTT5AUG.js.map +1 -0
  142. package/dist/{chunk-IUTYNDFS.js → chunk-LXMZM7LM.js} +293 -43
  143. package/dist/chunk-LXMZM7LM.js.map +1 -0
  144. package/dist/{chunk-RXYO6NA6.js → chunk-M6FKXOYV.js} +2 -2
  145. package/dist/{chunk-AAX22E4K.js → chunk-M7H56FOQ.js} +2 -2
  146. package/dist/{chunk-LCVYO3ON.js → chunk-MOL7JK4F.js} +2 -2
  147. package/dist/{chunk-ADARR5KF.js → chunk-NHFXGNGC.js} +42 -39
  148. package/dist/chunk-NHFXGNGC.js.map +1 -0
  149. package/dist/{chunk-HPMCKAET.js → chunk-OGAKUA7I.js} +2 -2
  150. package/dist/{chunk-AOGICQMH.js → chunk-PF7LQ22G.js} +3 -3
  151. package/dist/{chunk-OCWFKD5Q.js → chunk-PPDZSJXB.js} +2 -2
  152. package/dist/{chunk-AUSRUOMQ.js → chunk-PW4HTWXL.js} +2 -2
  153. package/dist/{chunk-ZYRAY5FL.js → chunk-QCTXQ2HW.js} +2 -2
  154. package/dist/{chunk-ETE3SGAH.js → chunk-QUBPZQED.js} +2 -2
  155. package/dist/chunk-QZ4U67KO.js +98 -0
  156. package/dist/chunk-QZ4U67KO.js.map +1 -0
  157. package/dist/{chunk-G3NTZZWT.js → chunk-R3H2AXO2.js} +2 -2
  158. package/dist/{chunk-AIVRD66I.js → chunk-T3F2HWIG.js} +2 -2
  159. package/dist/chunk-TE6S7KDF.js +47 -0
  160. package/dist/chunk-TE6S7KDF.js.map +1 -0
  161. package/dist/{chunk-ZGXHTV5Y.js → chunk-UCLWIMVW.js} +2 -2
  162. package/dist/{chunk-N7B6V7SG.js → chunk-VHANUT45.js} +5 -5
  163. package/dist/{chunk-E4FRR4MA.js → chunk-VJXMFBVR.js} +2 -2
  164. package/dist/{chunk-KCKXOS4Y.js → chunk-VKDXYEA6.js} +3 -3
  165. package/dist/{chunk-Q62GA5U2.js → chunk-VW5TGNJN.js} +2 -2
  166. package/dist/{chunk-Q62GA5U2.js.map → chunk-VW5TGNJN.js.map} +1 -1
  167. package/dist/chunk-VYDGHJIN.js +17 -0
  168. package/dist/chunk-VYDGHJIN.js.map +1 -0
  169. package/dist/{chunk-GWNSKQDA.js → chunk-W44T2KHG.js} +3 -3
  170. package/dist/{chunk-DQEMWVMT.js → chunk-X7Y7WX73.js} +1 -1
  171. package/dist/{chunk-2UINSKQC.js → chunk-XIJHRQ4A.js} +11 -5
  172. package/dist/chunk-XIJHRQ4A.js.map +1 -0
  173. package/dist/{chunk-VBK6SRNE.js → chunk-XOCGC3FJ.js} +2 -2
  174. package/dist/chunk-YE4JBZO5.js +44 -0
  175. package/dist/chunk-YE4JBZO5.js.map +1 -0
  176. package/dist/{chunk-RTXHUVOD.js → chunk-YPB3Y57U.js} +10 -10
  177. package/dist/{chunk-RSSLDMFX.js → chunk-YTV6J4T6.js} +2 -2
  178. package/dist/{chunk-AAAFZW3U.js → chunk-ZBSP4BSN.js} +2 -2
  179. package/dist/{chunk-VVX5PZFS.js → chunk-ZHXSOMYH.js} +2 -2
  180. package/dist/{cli-Cx9s_VRn.d.ts → cli-BfCl5kWD.d.ts} +5 -5
  181. package/dist/cli.d.ts +18 -16
  182. package/dist/cli.js +76 -66
  183. package/dist/coding/export-okf-codegraph.d.ts +2 -1
  184. package/dist/coding/export-okf-codegraph.js +7 -7
  185. package/dist/coding/pre-action-gate.d.ts +2 -1
  186. package/dist/compounding/engine.d.ts +3 -2
  187. package/dist/compounding/engine.js +8 -8
  188. package/dist/compounding/preference-consolidator.d.ts +2 -1
  189. package/dist/compression-optimizer.d.ts +2 -1
  190. package/dist/config.d.ts +2 -1
  191. package/dist/config.js +4 -2
  192. package/dist/connectors/codex-materialize-runner.d.ts +2 -1
  193. package/dist/connectors/codex-materialize-runner.js +8 -8
  194. package/dist/connectors/codex-materialize.d.ts +2 -1
  195. package/dist/connectors/index.d.ts +2 -1
  196. package/dist/connectors/index.js +8 -8
  197. package/dist/consolidation-provenance-check.d.ts +3 -2
  198. package/dist/consolidation-undo.d.ts +3 -2
  199. package/dist/contradiction/index.d.ts +5 -4
  200. package/dist/converge-config.d.ts +2 -1
  201. package/dist/convergence-refresh.d.ts +3 -2
  202. package/dist/convergence-refresh.js +10 -10
  203. package/dist/conversation-index/backend.d.ts +2 -1
  204. package/dist/conversation-index/chunker.d.ts +2 -1
  205. package/dist/conversation-index/faiss-adapter.d.ts +2 -1
  206. package/dist/conversation-index/indexer.d.ts +2 -1
  207. package/dist/conversation-index/search.d.ts +2 -1
  208. package/dist/corpus-watermark.d.ts +2 -1
  209. package/dist/corpus-watermark.js +10 -10
  210. package/dist/cross-lingual-recall.d.ts +2 -1
  211. package/dist/day-summary.d.ts +2 -1
  212. package/dist/deep-recall-config.d.ts +11 -1
  213. package/dist/deep-recall-config.js +6 -3
  214. package/dist/deep-recall-http-glue.d.ts +16 -14
  215. package/dist/deep-recall-http-glue.js +5 -5
  216. package/dist/deep-recall-mcp-tools.d.ts +16 -14
  217. package/dist/deep-recall-policy-llm.d.ts +3 -2
  218. package/dist/deep-recall-seeds.d.ts +2 -1
  219. package/dist/delinearize.d.ts +2 -1
  220. package/dist/dependency-propagation-config.d.ts +2 -1
  221. package/dist/{dependency-propagation-delivery-C2QFQ97b.d.ts → dependency-propagation-delivery-CggS9BFT.d.ts} +1 -1
  222. package/dist/direct-answer-wiring.d.ts +2 -1
  223. package/dist/direct-answer.d.ts +2 -1
  224. package/dist/embedding-fallback.d.ts +2 -1
  225. package/dist/enrichment/index.d.ts +2 -1
  226. package/dist/entity-origin-fields.d.ts +2 -1
  227. package/dist/entity-retrieval.d.ts +3 -2
  228. package/dist/entity-retrieval.js +8 -8
  229. package/dist/entity-schema.d.ts +2 -1
  230. package/dist/episodic-context.d.ts +2 -1
  231. package/dist/eval-trajectory-contracts.d.ts +2 -1
  232. package/dist/eval-trajectory-store.d.ts +2 -1
  233. package/dist/eval-trajectory.d.ts +2 -1
  234. package/dist/explicit-capture.d.ts +12 -11
  235. package/dist/external-wiki-access.d.ts +16 -14
  236. package/dist/external-wiki-access.js +34 -26
  237. package/dist/external-wiki-collection-registration.d.ts +2 -1
  238. package/dist/external-wiki-collection.d.ts +2 -1
  239. package/dist/external-wiki-mcp-tools.d.ts +16 -14
  240. package/dist/extraction-error-classification.d.ts +2 -1
  241. package/dist/extraction-faithfulness.d.ts +3 -2
  242. package/dist/extraction-judge-telemetry.d.ts +3 -2
  243. package/dist/extraction-judge-training.d.ts +3 -2
  244. package/dist/extraction-judge.d.ts +3 -2
  245. package/dist/extraction-liveness.d.ts +2 -1
  246. package/dist/extraction-normalization.d.ts +2 -1
  247. package/dist/extraction-prompt.d.ts +2 -1
  248. package/dist/extraction-source-grounding-rules.d.ts +2 -1
  249. package/dist/extraction-source-grounding.d.ts +2 -1
  250. package/dist/extraction-span-config.d.ts +2 -1
  251. package/dist/extraction-span-materialize.d.ts +2 -1
  252. package/dist/extraction.d.ts +3 -2
  253. package/dist/extraction.js +8 -8
  254. package/dist/fallback-llm-codex-subscription.d.ts +2 -1
  255. package/dist/fallback-llm.d.ts +2 -1
  256. package/dist/{generic-recall-paths-CeKQsQEn.d.ts → generic-recall-paths-CoXPSnCw.d.ts} +1 -1
  257. package/dist/graph-append-error.d.ts +2 -1
  258. package/dist/graph-dashboard-diff.d.ts +2 -1
  259. package/dist/graph-dashboard-key.d.ts +2 -1
  260. package/dist/graph-dashboard-parser.d.ts +2 -1
  261. package/dist/graph-edge-reinforcement.d.ts +2 -1
  262. package/dist/graph-jsonl.d.ts +2 -1
  263. package/dist/graph-path-reconstruction.d.ts +2 -1
  264. package/dist/graph-path-scoring.d.ts +2 -1
  265. package/dist/graph-snapshot.d.ts +2 -1
  266. package/dist/graph.d.ts +2 -1
  267. package/dist/harmonic-retrieval.js +1 -1
  268. package/dist/importance.d.ts +2 -1
  269. package/dist/importers/index.d.ts +2 -1
  270. package/dist/importers/test-utils.d.ts +2 -1
  271. package/dist/in-flight-reads.d.ts +2 -1
  272. package/dist/{index-Bau-Wl0H.d.ts → index-fdw_oK5a.d.ts} +3 -3
  273. package/dist/index.d.ts +704 -702
  274. package/dist/index.js +106 -85
  275. package/dist/intent.d.ts +2 -1
  276. package/dist/lcm/engine.d.ts +2 -1
  277. package/dist/lcm/engine.js +3 -3
  278. package/dist/lcm/index.d.ts +2 -1
  279. package/dist/lcm/index.js +11 -11
  280. package/dist/lcm/tools.d.ts +2 -1
  281. package/dist/lifecycle.d.ts +2 -1
  282. package/dist/live-connectors-runner.d.ts +2 -1
  283. package/dist/{local-llm-Bj-m01Ro.d.ts → local-llm-3-jtw52a.d.ts} +1 -1
  284. package/dist/local-llm-helpers.d.ts +3 -2
  285. package/dist/local-llm.d.ts +3 -2
  286. package/dist/local-model-endpoint.d.ts +2 -1
  287. package/dist/location/index.d.ts +6 -5
  288. package/dist/location/index.js +10 -10
  289. package/dist/maintenance/memory-governance.d.ts +2 -1
  290. package/dist/maintenance/memory-governance.js +8 -8
  291. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +3 -2
  292. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +8 -8
  293. package/dist/maintenance/rebuild-memory-projection.d.ts +3 -2
  294. package/dist/maintenance/rebuild-memory-projection.js +9 -9
  295. package/dist/{maintenance-Ye-y-c7f.d.ts → maintenance-DgeeH0a1.d.ts} +3 -3
  296. package/dist/mcp-memory-inspector-app.d.ts +18 -16
  297. package/dist/mcp-read-only-tools.js +1 -1
  298. package/dist/memory-action-policy.d.ts +2 -1
  299. package/dist/memory-cache.d.ts +2 -1
  300. package/dist/memory-controller.d.ts +2 -1
  301. package/dist/memory-lifecycle-ledger-utils.d.ts +2 -1
  302. package/dist/memory-projection-store.d.ts +2 -1
  303. package/dist/memory-provenance.d.ts +2 -1
  304. package/dist/memory-snapshot.d.ts +2 -1
  305. package/dist/memory-subject-cli.d.ts +16 -14
  306. package/dist/memory-subject.d.ts +16 -14
  307. package/dist/memory-worth-outcomes.d.ts +3 -2
  308. package/dist/models-json.d.ts +2 -1
  309. package/dist/namespaces/migrate.d.ts +4 -3
  310. package/dist/namespaces/migrate.js +9 -9
  311. package/dist/namespaces/principal.d.ts +2 -1
  312. package/dist/namespaces/search.d.ts +2 -1
  313. package/dist/namespaces/search.js +4 -4
  314. package/dist/namespaces/storage.d.ts +4 -3
  315. package/dist/namespaces/storage.js +8 -8
  316. package/dist/native-knowledge.d.ts +2 -1
  317. package/dist/offline-sync-impression-drain.d.ts +2 -1
  318. package/dist/operator-doctor-corpus.d.ts +2 -1
  319. package/dist/operator-doctor-corpus.js +11 -11
  320. package/dist/operator-doctor-replica.d.ts +2 -1
  321. package/dist/operator-toolkit.d.ts +4 -3
  322. package/dist/operator-toolkit.js +19 -18
  323. package/dist/orchestration/compression-guideline-coordinator.d.ts +3 -2
  324. package/dist/orchestration/maintenance.d.ts +5 -4
  325. package/dist/orchestration/maintenance.js +16 -16
  326. package/dist/{orchestrator-fFDDYUUV.d.ts → orchestrator-VXWKdatm.d.ts} +10 -10
  327. package/dist/orchestrator.d.ts +12 -11
  328. package/dist/orchestrator.js +92 -82
  329. package/dist/patterns-cli.d.ts +2 -1
  330. package/dist/{pipeline-D_j5n_Ih.d.ts → pipeline-CwXZBKR5.d.ts} +1 -1
  331. package/dist/policy-runtime.d.ts +2 -1
  332. package/dist/proactive-contention.d.ts +3 -2
  333. package/dist/provenance.d.ts +2 -1
  334. package/dist/{public-http-CjiSqxUx.d.ts → public-http-B55s59aR.d.ts} +1 -1
  335. package/dist/{qmd-CnxVjKrv.d.ts → qmd-DOLTPIQg.d.ts} +1 -1
  336. package/dist/qmd-preflight.d.ts +3 -2
  337. package/dist/qmd-recall-cache.d.ts +2 -1
  338. package/dist/qmd.d.ts +3 -2
  339. package/dist/recall-concurrency-config.d.ts +2 -1
  340. package/dist/recall-disclosure-escalation.d.ts +2 -1
  341. package/dist/recall-explain-renderer.d.ts +2 -1
  342. package/dist/recall-explain-renderer.js +3 -3
  343. package/dist/recall-memory-map.d.ts +2 -1
  344. package/dist/recall-navigate-access.d.ts +2 -1
  345. package/dist/recall-navigate-access.js +2 -2
  346. package/dist/recall-navigate-budget.js +3 -13
  347. package/dist/recall-navigate-budget.js.map +1 -1
  348. package/dist/recall-navigate-disclosure.d.ts +2 -1
  349. package/dist/recall-navigate-disclosure.js +4 -23
  350. package/dist/recall-navigate-disclosure.js.map +1 -1
  351. package/dist/recall-navigate-traverse.js +4 -37
  352. package/dist/recall-navigate-traverse.js.map +1 -1
  353. package/dist/recall-navigate-window.js +4 -26
  354. package/dist/recall-navigate-window.js.map +1 -1
  355. package/dist/recall-navigate.d.ts +2 -1
  356. package/dist/recall-navigate.js +2 -2
  357. package/dist/recall-navigation-config.d.ts +34 -0
  358. package/dist/recall-navigation-config.js +16 -0
  359. package/dist/recall-navigation-config.js.map +1 -0
  360. package/dist/recall-navigation-http-glue.d.ts +171 -0
  361. package/dist/recall-navigation-http-glue.js +9 -0
  362. package/dist/recall-navigation-http-glue.js.map +1 -0
  363. package/dist/recall-navigation-mcp-tools.d.ts +162 -0
  364. package/dist/recall-navigation-mcp-tools.js +8 -0
  365. package/dist/recall-navigation-mcp-tools.js.map +1 -0
  366. package/dist/recall-navigation-operations.d.ts +2 -0
  367. package/dist/recall-navigation-operations.js +245 -0
  368. package/dist/recall-navigation-operations.js.map +1 -0
  369. package/dist/recall-navigation-renderer.d.ts +36 -0
  370. package/dist/recall-navigation-renderer.js +8 -0
  371. package/dist/recall-navigation-renderer.js.map +1 -0
  372. package/dist/recall-navigation.d.ts +121 -0
  373. package/dist/recall-navigation.js +249 -0
  374. package/dist/recall-navigation.js.map +1 -0
  375. package/dist/recall-planner-llm.d.ts +2 -1
  376. package/dist/recall-state-view-admission.d.ts +3 -2
  377. package/dist/recall-state-view-anchors.d.ts +2 -1
  378. package/dist/recall-state.d.ts +2 -1
  379. package/dist/recall-tag-filter.d.ts +2 -1
  380. package/dist/recall-timings.d.ts +2 -1
  381. package/dist/recall-xray-cli.d.ts +2 -1
  382. package/dist/recall-xray-cli.js +4 -4
  383. package/dist/recall-xray-renderer.d.ts +2 -1
  384. package/dist/recall-xray-renderer.js +3 -3
  385. package/dist/recall-xray.d.ts +3 -2
  386. package/dist/recall-xray.js +2 -2
  387. package/dist/reconcile/cursor.d.ts +2 -1
  388. package/dist/reconcile/manifest.d.ts +2 -1
  389. package/dist/reconcile/plan.d.ts +2 -1
  390. package/dist/replay/normalizers/chatgpt.d.ts +2 -1
  391. package/dist/replay/normalizers/claude.d.ts +2 -1
  392. package/dist/replay/normalizers/openclaw.d.ts +2 -1
  393. package/dist/replay/normalizers/shared.d.ts +2 -1
  394. package/dist/replay/runner.d.ts +2 -1
  395. package/dist/replay/types.d.ts +2 -1
  396. package/dist/replica-divergence.d.ts +2 -1
  397. package/dist/replica-peers-config.d.ts +2 -1
  398. package/dist/resolve-auth-token.d.ts +2 -1
  399. package/dist/resume-bundles.js +5 -3
  400. package/dist/retrieval-agents.d.ts +3 -2
  401. package/dist/retrieval-tiers.d.ts +2 -1
  402. package/dist/routing/engine.d.ts +2 -1
  403. package/dist/routing/store.d.ts +2 -1
  404. package/dist/salvage-envelope.d.ts +2 -1
  405. package/dist/schemas.d.ts +160 -160
  406. package/dist/{scope-profiles-BajH5zAT.d.ts → scope-profiles-C564-hrv.d.ts} +1 -1
  407. package/dist/search/embed-helper.d.ts +2 -1
  408. package/dist/search/factory.d.ts +2 -1
  409. package/dist/search/factory.js +3 -3
  410. package/dist/search/index.d.ts +2 -1
  411. package/dist/search/index.js +7 -7
  412. package/dist/search/lancedb-backend.d.ts +2 -1
  413. package/dist/search/meilisearch-backend.d.ts +2 -1
  414. package/dist/search/noop-backend.d.ts +2 -1
  415. package/dist/search/orama-backend.d.ts +2 -1
  416. package/dist/search/port.d.ts +2 -1
  417. package/dist/search/remote-backend.d.ts +2 -1
  418. package/dist/{semantic-consolidation-Bu6d3O7R.d.ts → semantic-consolidation-g6x-ShY8.d.ts} +1 -1
  419. package/dist/semantic-consolidation.d.ts +3 -2
  420. package/dist/semantic-consolidation.js +9 -9
  421. package/dist/semantic-rule-promotion.js +8 -8
  422. package/dist/semantic-rule-verifier.d.ts +2 -1
  423. package/dist/semantic-rule-verifier.js +8 -8
  424. package/dist/{service-ChFwWtLS.d.ts → service-CaCOk0rd.d.ts} +2 -2
  425. package/dist/session-observer-bands.d.ts +2 -1
  426. package/dist/session-observer-state.d.ts +2 -1
  427. package/dist/shared-context/manager.d.ts +8 -7
  428. package/dist/signal.d.ts +2 -1
  429. package/dist/source-agent-qualifier.d.ts +2 -1
  430. package/dist/source-agent-qualifier.js +8 -8
  431. package/dist/standup/build.js +8 -8
  432. package/dist/{storage-BDKQdsmB.d.ts → storage-C9nsZX5Q.d.ts} +1 -1
  433. package/dist/storage.d.ts +3 -2
  434. package/dist/storage.js +7 -7
  435. package/dist/subject-config.d.ts +2 -1
  436. package/dist/summarizer.d.ts +2 -1
  437. package/dist/summary-snapshot.d.ts +2 -1
  438. package/dist/support-passport/index.d.ts +19 -17
  439. package/dist/support-passport/index.js +36 -28
  440. package/dist/{tagging-CwK6um2q.d.ts → tagging-BA4RFdH3.d.ts} +2 -2
  441. package/dist/temporal-supersession.d.ts +3 -2
  442. package/dist/temporal-timeline-recall.d.ts +2 -1
  443. package/dist/temporal-validity.d.ts +2 -1
  444. package/dist/threading.d.ts +2 -1
  445. package/dist/tier-migration.d.ts +3 -2
  446. package/dist/tier-routing.d.ts +2 -1
  447. package/dist/topics.d.ts +2 -1
  448. package/dist/transcript.d.ts +2 -1
  449. package/dist/transfer/backup.js +2 -2
  450. package/dist/transfer/capsule-export.js +2 -2
  451. package/dist/transfer/capsule-import.js +2 -2
  452. package/dist/transfer/export-okf.d.ts +2 -1
  453. package/dist/transfer/export-okf.js +8 -8
  454. package/dist/transfer/types.d.ts +78 -78
  455. package/dist/trust-score-stage.d.ts +2 -1
  456. package/dist/trust-score.d.ts +2 -1
  457. package/dist/{types-B65IoepH.d.ts → types-Sps-lg5I.d.ts} +2 -1
  458. package/dist/types.d.ts +2 -1
  459. package/dist/types.js +1 -1
  460. package/dist/utility-runtime.d.ts +2 -1
  461. package/dist/verified-recall.js +8 -8
  462. package/dist/who-knows-cli.d.ts +16 -14
  463. package/dist/who-knows-cli.js +9 -9
  464. package/dist/who-knows.d.ts +16 -14
  465. package/dist/who-knows.js +8 -8
  466. package/dist/write-envelope.d.ts +2 -1
  467. package/package.json +2 -2
  468. package/src/access-boundary.ts +2 -0
  469. package/src/access-http.ts +3 -3
  470. package/src/access-mcp-output-schemas.ts +30 -0
  471. package/src/access-mcp.ts +3 -3
  472. package/src/access-operations.ts +2 -0
  473. package/src/access-service.ts +13 -23
  474. package/src/access-surface-catalog.test.ts +30 -2
  475. package/src/access-surface-catalog.ts +4 -0
  476. package/src/cli/recall-navigation-commands.ts +85 -0
  477. package/src/cli.ts +2 -2
  478. package/src/config.ts +4 -0
  479. package/src/deep-recall-config.ts +32 -0
  480. package/src/index.ts +1 -2
  481. package/src/mcp-read-only-tools.ts +2 -0
  482. package/src/orchestration/recall-internal.ts +4 -4
  483. package/src/recall-navigation-config.test.ts +56 -0
  484. package/src/recall-navigation-config.ts +107 -0
  485. package/src/recall-navigation-http-glue.ts +141 -0
  486. package/src/recall-navigation-mcp-tools.ts +60 -0
  487. package/src/recall-navigation-operations.ts +111 -0
  488. package/src/recall-navigation-renderer.ts +49 -0
  489. package/src/recall-navigation-surface.test.ts +474 -0
  490. package/src/recall-navigation.test.ts +405 -0
  491. package/src/recall-navigation.ts +429 -0
  492. package/src/recall-xray.ts +1 -1
  493. package/src/types.ts +2 -0
  494. package/dist/chunk-2PDMIPMP.js.map +0 -1
  495. package/dist/chunk-2UINSKQC.js.map +0 -1
  496. package/dist/chunk-ADARR5KF.js.map +0 -1
  497. package/dist/chunk-EAARGPWI.js.map +0 -1
  498. package/dist/chunk-HO2P3FAX.js.map +0 -1
  499. package/dist/chunk-HSJU6JFT.js.map +0 -1
  500. package/dist/chunk-IUTYNDFS.js.map +0 -1
  501. package/dist/chunk-L732NBPR.js.map +0 -1
  502. package/dist/chunk-QVSRE355.js.map +0 -1
  503. package/dist/chunk-WN2OXGGH.js.map +0 -1
  504. /package/dist/{capsule-crypto-YO5QJ6L3.js.map → capsule-crypto-7FJQINUR.js.map} +0 -0
  505. /package/dist/{chunk-WNPRRBOE.js.map → chunk-2HDLDBJW.js.map} +0 -0
  506. /package/dist/{chunk-BXLOS5AJ.js.map → chunk-2NLLXCJG.js.map} +0 -0
  507. /package/dist/{chunk-LWF6GOII.js.map → chunk-2PIC6CEN.js.map} +0 -0
  508. /package/dist/{chunk-FSUFKIFS.js.map → chunk-2YIUUXNK.js.map} +0 -0
  509. /package/dist/{chunk-OP722LOG.js.map → chunk-3254BYQV.js.map} +0 -0
  510. /package/dist/{chunk-CQ4BTPX6.js.map → chunk-3YQ7VLP3.js.map} +0 -0
  511. /package/dist/{chunk-ZFU6QNRN.js.map → chunk-4WMGRLTV.js.map} +0 -0
  512. /package/dist/{chunk-U26LB4WA.js.map → chunk-5AJZ7EUW.js.map} +0 -0
  513. /package/dist/{chunk-R45VFSEV.js.map → chunk-7F47R4H4.js.map} +0 -0
  514. /package/dist/{chunk-LVFI5LG7.js.map → chunk-A7GQBJP5.js.map} +0 -0
  515. /package/dist/{chunk-KJQ4Y2PY.js.map → chunk-AKB44K3D.js.map} +0 -0
  516. /package/dist/{chunk-CTETTVDN.js.map → chunk-BZDK5EOD.js.map} +0 -0
  517. /package/dist/{chunk-PLJ2MQFT.js.map → chunk-C3YEB7CR.js.map} +0 -0
  518. /package/dist/{chunk-ZOGKZ2XT.js.map → chunk-CRK6F6N3.js.map} +0 -0
  519. /package/dist/{chunk-XJLTQTAO.js.map → chunk-D7UUB33A.js.map} +0 -0
  520. /package/dist/{chunk-DMTSKY4W.js.map → chunk-DABSYX7V.js.map} +0 -0
  521. /package/dist/{chunk-3RLWUW7G.js.map → chunk-DDGQDNQW.js.map} +0 -0
  522. /package/dist/{chunk-DLPMOSNH.js.map → chunk-GKKLI23D.js.map} +0 -0
  523. /package/dist/{chunk-I65KB36L.js.map → chunk-GMU7MAHS.js.map} +0 -0
  524. /package/dist/{chunk-JC2OBYYD.js.map → chunk-HKQAI6XI.js.map} +0 -0
  525. /package/dist/{chunk-7PSRCGWT.js.map → chunk-IB7FDRRC.js.map} +0 -0
  526. /package/dist/{chunk-GIM2AGFL.js.map → chunk-IWHNT35B.js.map} +0 -0
  527. /package/dist/{chunk-AHHFBJX7.js.map → chunk-JDL5BYYF.js.map} +0 -0
  528. /package/dist/{chunk-JMAP6L6Q.js.map → chunk-KDLOKVX7.js.map} +0 -0
  529. /package/dist/{chunk-HK44SV6K.js.map → chunk-KORQWGUA.js.map} +0 -0
  530. /package/dist/{chunk-VDX2J7OX.js.map → chunk-KQAFEZQX.js.map} +0 -0
  531. /package/dist/{chunk-GWEZNCGA.js.map → chunk-KY75VZKG.js.map} +0 -0
  532. /package/dist/{chunk-4IGOLIWM.js.map → chunk-L63M2PE4.js.map} +0 -0
  533. /package/dist/{chunk-BIANISES.js.map → chunk-LD22AAJI.js.map} +0 -0
  534. /package/dist/{chunk-K27INAPR.js.map → chunk-LUAQHDUI.js.map} +0 -0
  535. /package/dist/{chunk-RXYO6NA6.js.map → chunk-M6FKXOYV.js.map} +0 -0
  536. /package/dist/{chunk-AAX22E4K.js.map → chunk-M7H56FOQ.js.map} +0 -0
  537. /package/dist/{chunk-LCVYO3ON.js.map → chunk-MOL7JK4F.js.map} +0 -0
  538. /package/dist/{chunk-HPMCKAET.js.map → chunk-OGAKUA7I.js.map} +0 -0
  539. /package/dist/{chunk-AOGICQMH.js.map → chunk-PF7LQ22G.js.map} +0 -0
  540. /package/dist/{chunk-OCWFKD5Q.js.map → chunk-PPDZSJXB.js.map} +0 -0
  541. /package/dist/{chunk-AUSRUOMQ.js.map → chunk-PW4HTWXL.js.map} +0 -0
  542. /package/dist/{chunk-ZYRAY5FL.js.map → chunk-QCTXQ2HW.js.map} +0 -0
  543. /package/dist/{chunk-ETE3SGAH.js.map → chunk-QUBPZQED.js.map} +0 -0
  544. /package/dist/{chunk-G3NTZZWT.js.map → chunk-R3H2AXO2.js.map} +0 -0
  545. /package/dist/{chunk-AIVRD66I.js.map → chunk-T3F2HWIG.js.map} +0 -0
  546. /package/dist/{chunk-ZGXHTV5Y.js.map → chunk-UCLWIMVW.js.map} +0 -0
  547. /package/dist/{chunk-N7B6V7SG.js.map → chunk-VHANUT45.js.map} +0 -0
  548. /package/dist/{chunk-E4FRR4MA.js.map → chunk-VJXMFBVR.js.map} +0 -0
  549. /package/dist/{chunk-KCKXOS4Y.js.map → chunk-VKDXYEA6.js.map} +0 -0
  550. /package/dist/{chunk-GWNSKQDA.js.map → chunk-W44T2KHG.js.map} +0 -0
  551. /package/dist/{chunk-DQEMWVMT.js.map → chunk-X7Y7WX73.js.map} +0 -0
  552. /package/dist/{chunk-VBK6SRNE.js.map → chunk-XOCGC3FJ.js.map} +0 -0
  553. /package/dist/{chunk-RTXHUVOD.js.map → chunk-YPB3Y57U.js.map} +0 -0
  554. /package/dist/{chunk-RSSLDMFX.js.map → chunk-YTV6J4T6.js.map} +0 -0
  555. /package/dist/{chunk-AAAFZW3U.js.map → chunk-ZBSP4BSN.js.map} +0 -0
  556. /package/dist/{chunk-VVX5PZFS.js.map → chunk-ZHXSOMYH.js.map} +0 -0
@@ -0,0 +1,429 @@
1
+ /**
2
+ * Recall navigation (issue #1956) — session-scoped follow-up tools over
3
+ * already-served recall results.
4
+ *
5
+ * Composes existing primitives; owns no new storage and no new link types:
6
+ * - authority: the session's last `windowSnapshots` recall id sets
7
+ * (`RecallHandleHistoryStore`, the same ring `resolveMemoryHandle` reads)
8
+ * - isolation: every read resolves through the caller's resolved readable
9
+ * namespace and ONE storage instance (pattern 30 — no arbitrary-id
10
+ * fishing across namespaces)
11
+ * - disclosure: `planDisclosureStep` enforces strictly-deeper expansion;
12
+ * rendering reuses `shapeMemorySummary` (single formatter, rule 22)
13
+ * - links: frontmatter `links` via `selectTraverseNeighbors`
14
+ * - budget: per-call character cap drawn from the recall character budget,
15
+ * with per-item disclosure/token spend reported through the SAME
16
+ * disclosure accounting X-ray aggregates (`estimateRecallTokens` +
17
+ * `summarizeDisclosureTokens`).
18
+ *
19
+ * Unknown, expired (outside the window), or foreign ids are rejected with a
20
+ * typed error naming the constraint (pattern 39) — never reinterpreted.
21
+ */
22
+
23
+ import { EngramAccessInputError, shapeMemorySummary, type EngramAccessMemorySummary } from "./access-service.js";
24
+ import { parseIdOrHandle, resolveHandle } from "./recall-handles.js";
25
+ import { takeNavigateBudget } from "./recall-navigate-budget.js";
26
+ import { estimateRecallTokens, summarizeDisclosureTokens, type RecallXrayDisclosureSummary } from "./recall-xray.js";
27
+ import { assertIdInNavigationWindow } from "./recall-navigate-window.js";
28
+ import { parseNavigateLinkType } from "./recall-navigate-link.js";
29
+ import { planDisclosureStep } from "./recall-navigate-disclosure.js";
30
+ import { selectTraverseNeighbors, DEFAULT_TRAVERSE_LIMIT, type TraverseNeighbor } from "./recall-navigate-traverse.js";
31
+ import { renderNavigationResult } from "./recall-navigation-renderer.js";
32
+ import type { RecallNavigationConfig } from "./recall-navigation-config.js";
33
+ import type { MemoryFile, RecallDisclosure } from "./types.js";
34
+
35
+ /** Navigation reads touch only these storage members. */
36
+ export type NavigationStorage = Pick<StorageManagerLike, "dir" | "getMemoryById" | "readMemoriesWindow">;
37
+
38
+ /** Structural stand-in so this module does not import StorageManager directly. */
39
+ interface StorageManagerLike {
40
+ dir: string;
41
+ getMemoryById(id: string): Promise<MemoryFile | null>;
42
+ readMemoriesWindow(options?: { maxMemories?: number }): Promise<{ memories: MemoryFile[] }>;
43
+ }
44
+
45
+ /** Injected seams; the service supplies live wiring, tests supply doubles. */
46
+ export interface RecallNavigationDeps {
47
+ readonly config: RecallNavigationConfig;
48
+ /** Per-call character cap for the assembled response payload. */
49
+ readonly recallBudgetChars: number;
50
+ /** Served-id sets for a session, newest snapshot first. */
51
+ readonly recentServedIds: (sessionKey: string, depth: number) => ReadonlyArray<readonly string[]>;
52
+ readonly resolveReadableNamespace: (namespace: string | undefined, principal?: string) => string;
53
+ readonly getStorage: (namespace: string) => Promise<NavigationStorage>;
54
+ }
55
+
56
+ export type NavigationAction = "expand" | "traverse" | "entity_neighbors";
57
+
58
+ export interface RecallNavigationRequest {
59
+ readonly action: NavigationAction;
60
+ /** Memory id (or `[m:xxxx]` handle) served to this session's recent recalls. */
61
+ readonly memoryId: string;
62
+ /** Session whose recall window authorizes the id. Required. */
63
+ readonly sessionKey: string;
64
+ readonly namespace?: string;
65
+ readonly authenticatedPrincipal?: string;
66
+ /** expand: target depth. Must be strictly deeper than the chunk default. */
67
+ readonly disclosure?: RecallDisclosure;
68
+ /** traverse: optional relation filter. */
69
+ readonly relation?: string;
70
+ /** traverse / entity_neighbors: optional result cap. */
71
+ readonly limit?: number;
72
+ }
73
+
74
+ export interface NavigationItem {
75
+ readonly memoryId: string;
76
+ readonly path: string;
77
+ readonly disclosure: RecallDisclosure;
78
+ readonly estimatedTokens: number;
79
+ readonly preview: string;
80
+ /** Present when the disclosure level carries full content (expand). */
81
+ readonly content?: string;
82
+ /** Relation edge that produced this neighbor (traverse only). */
83
+ readonly linkType?: string;
84
+ }
85
+
86
+ export type RecallNavigationError =
87
+ | "disabled"
88
+ | "not_served"
89
+ | "not_found"
90
+ | "not_deeper"
91
+ | "unknown_level"
92
+ | "unknown_relation"
93
+ | "invalid_limit";
94
+
95
+ export type RecallNavigationResult =
96
+ | {
97
+ ok: true;
98
+ action: NavigationAction;
99
+ memoryId: string;
100
+ namespace: string;
101
+ items: NavigationItem[];
102
+ truncated: boolean;
103
+ budget: { chars: number; used: number };
104
+ disclosureSpend: RecallXrayDisclosureSummary;
105
+ rendered: string;
106
+ }
107
+ | {
108
+ ok: false;
109
+ action: NavigationAction;
110
+ error: RecallNavigationError;
111
+ message: string;
112
+ rendered: string;
113
+ };
114
+
115
+ function toNavigationItem(
116
+ summary: EngramAccessMemorySummary,
117
+ extras: { linkType?: string } = {},
118
+ ): NavigationItem {
119
+ const item: {
120
+ memoryId: string;
121
+ path: string;
122
+ disclosure: RecallDisclosure;
123
+ estimatedTokens: number;
124
+ preview: string;
125
+ content?: string;
126
+ linkType?: string;
127
+ } = {
128
+ memoryId: summary.id,
129
+ path: summary.path,
130
+ disclosure: summary.disclosure ?? "chunk",
131
+ estimatedTokens: estimateRecallTokens(summary.content ?? summary.preview),
132
+ preview: summary.preview,
133
+ };
134
+ if (summary.content !== undefined) item.content = summary.content;
135
+ if (extras.linkType !== undefined) item.linkType = extras.linkType;
136
+ return item;
137
+ }
138
+
139
+ /** Greedy fill against JSON.stringify of the structured result (no rendered). */
140
+ function applyBudget(
141
+ request: RecallNavigationRequest,
142
+ extras: { memoryId: string; namespace: string; items: NavigationItem[]; truncated: boolean; budgetChars: number },
143
+ ): { items: NavigationItem[]; truncated: boolean; used: number } {
144
+ const kept: NavigationItem[] = [];
145
+ let truncated = extras.truncated;
146
+ for (const item of extras.items) {
147
+ const candidate = [...kept, item];
148
+ const cost = structuredCost(request, extras, candidate, truncated);
149
+ if (!takeNavigateBudget(extras.budgetChars, cost).ok) {
150
+ if (kept.length === 0) {
151
+ const shrunk = shrinkItemToBudget(request, extras, item);
152
+ if (shrunk !== undefined) {
153
+ return finalizeBudget(request, extras, [shrunk], true);
154
+ }
155
+ }
156
+ truncated = true;
157
+ break;
158
+ }
159
+ kept.push(item);
160
+ }
161
+ return finalizeBudget(request, extras, kept, truncated);
162
+ }
163
+
164
+ function finalizeBudget(
165
+ request: RecallNavigationRequest,
166
+ extras: { memoryId: string; namespace: string; budgetChars: number },
167
+ items: NavigationItem[],
168
+ truncated: boolean,
169
+ ): { items: NavigationItem[]; truncated: boolean; used: number } {
170
+ let kept = items;
171
+ let flag = truncated;
172
+ let used = measuredUsed(request, extras, kept, flag);
173
+ while (used > extras.budgetChars && kept.length > 0) {
174
+ kept = kept.slice(0, -1);
175
+ flag = true;
176
+ used = measuredUsed(request, extras, kept, flag);
177
+ }
178
+ return { items: kept, truncated: flag, used };
179
+ }
180
+
181
+ function structuredBody(
182
+ request: RecallNavigationRequest,
183
+ extras: { memoryId: string; namespace: string; budgetChars: number },
184
+ items: NavigationItem[],
185
+ truncated: boolean,
186
+ used: number,
187
+ ) {
188
+ return {
189
+ ok: true as const,
190
+ action: request.action,
191
+ memoryId: extras.memoryId,
192
+ namespace: extras.namespace,
193
+ items,
194
+ truncated,
195
+ budget: { chars: extras.budgetChars, used },
196
+ disclosureSpend: summarizeDisclosureTokens(
197
+ items.map((item) => ({ disclosure: item.disclosure, estimatedTokens: item.estimatedTokens })),
198
+ ),
199
+ };
200
+ }
201
+
202
+ function structuredCost(
203
+ request: RecallNavigationRequest,
204
+ extras: { memoryId: string; namespace: string; budgetChars: number },
205
+ items: NavigationItem[],
206
+ truncated: boolean,
207
+ used = 0,
208
+ ): number {
209
+ return JSON.stringify(structuredBody(request, extras, items, truncated, used)).length;
210
+ }
211
+
212
+ function measuredUsed(
213
+ request: RecallNavigationRequest,
214
+ extras: { memoryId: string; namespace: string; budgetChars: number },
215
+ items: NavigationItem[],
216
+ truncated: boolean,
217
+ ): number {
218
+ return structuredCost(request, extras, items, truncated, structuredCost(request, extras, items, truncated));
219
+ }
220
+
221
+ function shrinkItemToBudget(
222
+ request: RecallNavigationRequest,
223
+ extras: { memoryId: string; namespace: string; budgetChars: number },
224
+ item: NavigationItem,
225
+ ): NavigationItem | undefined {
226
+ let preview = item.preview;
227
+ let content = item.content ?? "";
228
+ const hasContent = item.content !== undefined;
229
+ while (preview.length > 0 || content.length > 0) {
230
+ const candidate: NavigationItem = hasContent
231
+ ? { ...item, preview, content }
232
+ : { ...item, preview };
233
+ if (takeNavigateBudget(extras.budgetChars, structuredCost(request, extras, [candidate], true)).ok) {
234
+ return candidate;
235
+ }
236
+ if (content.length > 0) content = content.slice(0, Math.max(0, content.length - 16));
237
+ else preview = preview.slice(0, Math.max(0, preview.length - 16));
238
+ }
239
+ return undefined;
240
+ }
241
+
242
+ function errorResult(
243
+ request: RecallNavigationRequest,
244
+ error: RecallNavigationError,
245
+ message: string,
246
+ ): RecallNavigationResult {
247
+ return { ok: false, action: request.action, error, message, rendered: renderNavigationResult({ ok: false, action: request.action, error, message }) };
248
+ }
249
+
250
+ function successResult(
251
+ request: RecallNavigationRequest,
252
+ extras: { memoryId: string; namespace: string; items: NavigationItem[]; truncated: boolean; budgetChars: number },
253
+ ): RecallNavigationResult {
254
+ const budgeted = applyBudget(request, extras);
255
+ const result = structuredBody(request, extras, budgeted.items, budgeted.truncated, budgeted.used);
256
+ return { ...result, rendered: renderNavigationResult(result) };
257
+ }
258
+
259
+ function resolveRequestedMemoryId(
260
+ request: RecallNavigationRequest,
261
+ snapshots: ReadonlyArray<readonly string[]>,
262
+ windowSnapshots: number,
263
+ ): { ok: true; memoryId: string } | { ok: false } {
264
+ const parsed = parseIdOrHandle(request.memoryId);
265
+ if (!parsed.isHandle) return { ok: true, memoryId: parsed.value };
266
+ const resolved = resolveHandle(
267
+ request.memoryId,
268
+ snapshots.map((memoryIds) => ({ memoryIds })),
269
+ windowSnapshots,
270
+ );
271
+ if (resolved.ok) return { ok: true, memoryId: resolved.memoryId };
272
+ if (resolved.reason === "ambiguous") {
273
+ throw new EngramAccessInputError(
274
+ `Memory handle ${request.memoryId} is ambiguous in session ${request.sessionKey}: ${resolved.candidates.join(", ")}. Cite a unique memory id instead.`,
275
+ );
276
+ }
277
+ return { ok: false };
278
+ }
279
+
280
+ function clampLimit(requested: number | undefined, ceiling: number): number {
281
+ if (requested === undefined) return Math.min(DEFAULT_TRAVERSE_LIMIT, ceiling);
282
+ if (!Number.isInteger(requested) || requested < 1) {
283
+ throw new EngramAccessInputError(
284
+ `memory navigation: limit must be a positive integer; got ${JSON.stringify(requested)}`,
285
+ );
286
+ }
287
+ return Math.min(requested, ceiling);
288
+ }
289
+
290
+ /**
291
+ * Run one navigation step. Throws {@link EngramAccessInputError} for caller
292
+ * faults (missing sessionKey, malformed limit); returns typed errors for
293
+ * domain refusals so MCP/HTTP/CLI render the constraint instead of a stack.
294
+ */
295
+ export async function runRecallNavigation(
296
+ deps: RecallNavigationDeps,
297
+ request: RecallNavigationRequest,
298
+ ): Promise<RecallNavigationResult> {
299
+ if (!deps.config.enabled) {
300
+ return errorResult(request, "disabled", "memory navigation is disabled; set recallNavigation.enabled");
301
+ }
302
+ const sessionKey = request.sessionKey?.trim() ?? "";
303
+ if (sessionKey.length === 0) {
304
+ throw new EngramAccessInputError(
305
+ "memory navigation requires a sessionKey: navigation authority is scoped to the session's recent recalls",
306
+ );
307
+ }
308
+ if (request.limit !== undefined) {
309
+ // Validate at the seam so every surface reports the same fault.
310
+ clampLimit(request.limit, deps.config.maxNeighbors);
311
+ }
312
+ const windowSnapshots = deps.config.windowSnapshots;
313
+ const servedIds = deps.recentServedIds(sessionKey, windowSnapshots);
314
+ const resolved = resolveRequestedMemoryId(request, servedIds, windowSnapshots);
315
+ if (!resolved.ok) {
316
+ return errorResult(
317
+ request,
318
+ "not_served",
319
+ `memory ${request.memoryId} was not served to session ${sessionKey} within the last ${windowSnapshots} recall snapshots; run recall first`,
320
+ );
321
+ }
322
+ const authority = assertIdInNavigationWindow({
323
+ snapshots: servedIds.map((ids) => ({ servedIds: ids })),
324
+ memoryId: resolved.memoryId,
325
+ windowSnapshots,
326
+ });
327
+ if (!authority.ok) {
328
+ return errorResult(
329
+ request,
330
+ "not_served",
331
+ `memory ${request.memoryId} was not served to session ${sessionKey} within the last ${windowSnapshots} recall snapshots; run recall first`,
332
+ );
333
+ }
334
+ const memoryId = authority.memoryId;
335
+ const namespace = deps.resolveReadableNamespace(request.namespace, request.authenticatedPrincipal);
336
+ const storage = await deps.getStorage(namespace);
337
+ const memory = await storage.getMemoryById(memoryId);
338
+ if (!memory) {
339
+ return errorResult(
340
+ request,
341
+ "not_found",
342
+ `memory ${memoryId} was not found in namespace ${namespace}; navigation never crosses the resolved namespace`,
343
+ );
344
+ }
345
+
346
+ if (request.action === "expand") {
347
+ const target = request.disclosure ?? "raw";
348
+ const step = planDisclosureStep({ from: "chunk", to: target });
349
+ if (!step.ok) {
350
+ const message =
351
+ step.error === "unknown_level"
352
+ ? `unknown disclosure level ${JSON.stringify(target)}; valid: chunk, section, raw`
353
+ : `disclosure ${JSON.stringify(target)} is not deeper than the chunk level already served; expansion must go deeper (chunk → section → raw)`;
354
+ return errorResult(request, step.error, message);
355
+ }
356
+ const summary = shapeMemorySummary(memory, storage.dir, target);
357
+ return successResult(request, {
358
+ memoryId,
359
+ namespace,
360
+ items: [toNavigationItem(summary)],
361
+ truncated: false,
362
+ budgetChars: deps.recallBudgetChars,
363
+ });
364
+ }
365
+
366
+ if (request.action === "traverse") {
367
+ if (request.relation !== undefined) {
368
+ const parsedRelation = parseNavigateLinkType(request.relation);
369
+ if (!parsedRelation.ok) {
370
+ return errorResult(
371
+ request,
372
+ "unknown_relation",
373
+ `unknown relation ${JSON.stringify(request.relation)}; valid: supports, contradicts, elaborates, causes, caused_by, supersedes, follows, references, related`,
374
+ );
375
+ }
376
+ }
377
+ const links: TraverseNeighbor[] = (memory.frontmatter.links ?? []).map((link) => ({
378
+ targetId: link.targetId,
379
+ linkType: link.linkType,
380
+ }));
381
+ const selection = selectTraverseNeighbors({
382
+ links,
383
+ relation: request.relation,
384
+ limit: clampLimit(request.limit, deps.config.maxNeighbors),
385
+ });
386
+ if (!selection.ok) {
387
+ return errorResult(request, selection.error, `traverse refused: ${selection.error}`);
388
+ }
389
+ const items: NavigationItem[] = [];
390
+ for (const neighbor of selection.neighbors) {
391
+ // Neighbors resolve through the SAME namespace storage: a link pointing
392
+ // at a memory in another namespace simply is not found here, so a stale
393
+ // or foreign edge can never leak content across namespaces.
394
+ const neighborMemory = await storage.getMemoryById(neighbor.targetId);
395
+ if (!neighborMemory) continue;
396
+ items.push(toNavigationItem(shapeMemorySummary(neighborMemory, storage.dir, "chunk"), { linkType: neighbor.linkType }));
397
+ }
398
+ return successResult(request, {
399
+ memoryId,
400
+ namespace,
401
+ items,
402
+ truncated: selection.truncated,
403
+ budgetChars: deps.recallBudgetChars,
404
+ });
405
+ }
406
+
407
+ // entity_neighbors: memories sharing the source memory's entityRef, capped
408
+ // by limit, rendered at chunk depth. No entityRef → no neighbors (empty is
409
+ // an honest answer, not an error).
410
+ const entityRef = memory.frontmatter.entityRef?.trim();
411
+ if (!entityRef) {
412
+ return successResult(request, { memoryId, namespace, items: [], truncated: false, budgetChars: deps.recallBudgetChars });
413
+ }
414
+ const window = await storage.readMemoriesWindow();
415
+ const candidates: NavigationItem[] = [];
416
+ for (const candidate of window.memories) {
417
+ if (candidate.frontmatter.id === memoryId) continue;
418
+ if (candidate.frontmatter.entityRef?.trim() !== entityRef) continue;
419
+ candidates.push(toNavigationItem(shapeMemorySummary(candidate, storage.dir, "chunk")));
420
+ if (candidates.length >= clampLimit(request.limit, deps.config.maxNeighbors)) break;
421
+ }
422
+ return successResult(request, {
423
+ memoryId,
424
+ namespace,
425
+ items: candidates,
426
+ truncated: false,
427
+ budgetChars: deps.recallBudgetChars,
428
+ });
429
+ }
@@ -631,7 +631,7 @@ function cloneResult(result: RecallXrayResult): RecallXrayResult {
631
631
  * "per-disclosure token spend" line and exposed for tests / surfaces.
632
632
  */
633
633
  export function summarizeDisclosureTokens(
634
- results: ReadonlyArray<RecallXrayResult>,
634
+ results: ReadonlyArray<Pick<RecallXrayResult, "disclosure" | "estimatedTokens">>,
635
635
  ): RecallXrayDisclosureSummary {
636
636
  const summary: RecallXrayDisclosureSummary = {
637
637
  chunk: { count: 0, estimatedTokens: 0 },
package/src/types.ts CHANGED
@@ -21,6 +21,7 @@ import type {
21
21
  RecallDriftAnnotation,
22
22
  } from "./preferences/drift-types.js";
23
23
  import type { DeepRecallSettings } from "./deep-recall-config.js";
24
+ import type { RecallNavigationSettings } from "./recall-navigation-config.js";
24
25
  import type { ProceduralMaintenanceConfig } from "./procedural/maintenance-config.js";
25
26
  import type { SkillProjectionConfig } from "./procedural/skill-projection.js";
26
27
  import type { ActionGateConfig } from "./coding/action-gate.js";
@@ -693,6 +694,7 @@ export interface PluginConfig
693
694
  DriftDetectionSettings,
694
695
  ActiveContextConfigFields,
695
696
  DeepRecallSettings,
697
+ RecallNavigationSettings,
696
698
  LocalLlmConfig {
697
699
  openaiApiKey: string | undefined;
698
700
  openaiBaseUrl: string | undefined;