@remnic/core 9.69.41 → 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 (611) hide show
  1. package/dist/access-admin-ops-surface.d.ts +16 -13
  2. package/dist/access-admin-ops-surface.js +48 -40
  3. package/dist/access-authorization-probe.d.ts +16 -13
  4. package/dist/access-authorization-probe.js +49 -41
  5. package/dist/access-boundary.d.ts +16 -13
  6. package/dist/access-boundary.js +48 -40
  7. package/dist/access-cli.js +115 -105
  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 -13
  11. package/dist/access-extraction-force-flush.js +48 -40
  12. package/dist/access-health-types.d.ts +2 -1
  13. package/dist/access-http-briefing.d.ts +16 -13
  14. package/dist/access-http-briefing.js +49 -41
  15. package/dist/access-http-lcm-compaction.d.ts +16 -13
  16. package/dist/access-http-lifecycle-flush.d.ts +16 -13
  17. package/dist/access-http-offline-stream.d.ts +16 -13
  18. package/dist/access-http-query.d.ts +3 -2
  19. package/dist/access-http-query.js +50 -42
  20. package/dist/access-http.d.ts +17 -14
  21. package/dist/access-http.js +70 -60
  22. package/dist/access-identity-continuity-surface.d.ts +12 -11
  23. package/dist/access-identity-continuity-surface.js +48 -40
  24. package/dist/access-lcm-surface.d.ts +16 -13
  25. package/dist/access-lcm-surface.js +48 -40
  26. package/dist/access-mcp-output-schemas.js +1 -1
  27. package/dist/access-mcp-shared-context-tools.d.ts +16 -13
  28. package/dist/access-mcp.d.ts +16 -13
  29. package/dist/access-mcp.js +60 -51
  30. package/dist/access-memory-search-fanout.d.ts +3 -2
  31. package/dist/{access-namespace-preflight-DWsMc9Dh.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 +48 -40
  34. package/dist/access-observe-transcript.d.ts +12 -11
  35. package/dist/access-observe-write-category.d.ts +18 -1
  36. package/dist/access-observe-write-category.js +21 -4
  37. package/dist/access-observe-write-surface.d.ts +16 -13
  38. package/dist/access-observe-write-surface.js +48 -40
  39. package/dist/access-offline-manifest.d.ts +12 -11
  40. package/dist/access-offline-manifest.js +6 -6
  41. package/dist/access-operations-batch.js +50 -43
  42. package/dist/access-operations.d.ts +17 -14
  43. package/dist/access-operations.js +56 -48
  44. package/dist/access-recall-concurrency.d.ts +16 -13
  45. package/dist/access-recall-concurrency.js +48 -40
  46. package/dist/access-recall-response.d.ts +16 -13
  47. package/dist/access-recall-response.js +48 -40
  48. package/dist/access-recall-surface.d.ts +16 -13
  49. package/dist/access-recall-surface.js +48 -40
  50. package/dist/access-schema.d.ts +5 -1
  51. package/dist/access-schema.js +3 -3
  52. package/dist/{access-service-Cisy5YDq.d.ts → access-service-DxTTTg9O.d.ts} +15 -11
  53. package/dist/access-service-helpers.d.ts +16 -13
  54. package/dist/access-service.d.ts +16 -13
  55. package/dist/access-service.js +48 -40
  56. package/dist/access-surface-catalog.d.ts +16 -13
  57. package/dist/access-surface-catalog.js +54 -42
  58. package/dist/access-surface-catalog.js.map +1 -1
  59. package/dist/access-wearables-meetings-surface.d.ts +5 -4
  60. package/dist/action-confidence.d.ts +2 -1
  61. package/dist/active-memory-bridge.d.ts +2 -1
  62. package/dist/active-recall.d.ts +2 -1
  63. package/dist/active-recall.js +9 -7
  64. package/dist/active-recall.js.map +1 -1
  65. package/dist/activity/digest.d.ts +2 -1
  66. package/dist/ambient-provenance.d.ts +2 -1
  67. package/dist/artifact-search.d.ts +2 -1
  68. package/dist/{auto-sync-7PGUFY7U.js → auto-sync-QZD4RD6H.js} +9 -5
  69. package/dist/{auto-sync-7PGUFY7U.js.map → auto-sync-QZD4RD6H.js.map} +1 -1
  70. package/dist/background-generation.d.ts +2 -1
  71. package/dist/behavior-learner.d.ts +2 -1
  72. package/dist/behavior-signals.d.ts +2 -1
  73. package/dist/bootstrap.d.ts +12 -11
  74. package/dist/briefing-window.d.ts +3 -2
  75. package/dist/briefing.d.ts +3 -2
  76. package/dist/briefing.js +13 -13
  77. package/dist/buffer-surprise-report.d.ts +2 -1
  78. package/dist/buffer-turn-helpers.d.ts +2 -1
  79. package/dist/buffer.d.ts +3 -2
  80. package/dist/buffer.js +7 -7
  81. package/dist/bulk-import/index.d.ts +4 -3
  82. package/dist/calibration.d.ts +2 -1
  83. package/dist/capabilities.d.ts +2 -1
  84. package/dist/{capsule-crypto-YO5QJ6L3.js → capsule-crypto-7FJQINUR.js} +2 -2
  85. package/dist/{catalog-wcX1QhtQ.d.ts → catalog-Ya3DDn_T.d.ts} +1 -1
  86. package/dist/causal-behavior.d.ts +2 -1
  87. package/dist/causal-consolidation.d.ts +2 -1
  88. package/dist/causal-consolidation.js +14 -14
  89. package/dist/causal-trajectory-graph.d.ts +2 -1
  90. package/dist/{chunk-QVSRE355.js → chunk-2AV75BJW.js} +29 -1
  91. package/dist/chunk-2AV75BJW.js.map +1 -0
  92. package/dist/{chunk-563X6JJX.js → chunk-2HDLDBJW.js} +2 -2
  93. package/dist/{chunk-BXLOS5AJ.js → chunk-2NLLXCJG.js} +2 -2
  94. package/dist/{chunk-WBQ4ONQJ.js → chunk-2PIC6CEN.js} +2 -2
  95. package/dist/chunk-2WFOVXVJ.js +95 -0
  96. package/dist/chunk-2WFOVXVJ.js.map +1 -0
  97. package/dist/{chunk-54QPOE45.js → chunk-2YIUUXNK.js} +2 -2
  98. package/dist/{chunk-XRS65T4O.js → chunk-324HBGS4.js} +6 -6
  99. package/dist/chunk-324HBGS4.js.map +1 -0
  100. package/dist/{chunk-AKABVXFS.js → chunk-3254BYQV.js} +1 -1
  101. package/dist/{chunk-XCPNH2MG.js → chunk-3KJTSCSX.js} +5 -5
  102. package/dist/{chunk-I33QYUAF.js → chunk-3YQ7VLP3.js} +2 -2
  103. package/dist/{chunk-JMWUPUE6.js → chunk-46FVFU7S.js} +2 -2
  104. package/dist/{chunk-PFKIOYJH.js → chunk-4WMGRLTV.js} +7 -7
  105. package/dist/{chunk-KLUC2GSG.js → chunk-5AJZ7EUW.js} +5 -5
  106. package/dist/chunk-5KVT6G5U.js +31 -0
  107. package/dist/chunk-5KVT6G5U.js.map +1 -0
  108. package/dist/{chunk-WN2OXGGH.js → chunk-66YUOI53.js} +1 -1
  109. package/dist/chunk-66YUOI53.js.map +1 -0
  110. package/dist/{chunk-Z7NBT6AK.js → chunk-6EGIQEKC.js} +2 -2
  111. package/dist/{chunk-6MQMYXSQ.js → chunk-7F47R4H4.js} +2 -2
  112. package/dist/{chunk-YFXAWGMR.js → chunk-7L54ARML.js} +2 -2
  113. package/dist/{chunk-2EYZ32LH.js → chunk-7RGX7BMF.js} +24 -2
  114. package/dist/{chunk-2EYZ32LH.js.map → chunk-7RGX7BMF.js.map} +1 -1
  115. package/dist/{chunk-LVFI5LG7.js → chunk-A7GQBJP5.js} +7 -7
  116. package/dist/{chunk-EMSYMYXO.js → chunk-AKB44K3D.js} +8 -8
  117. package/dist/chunk-AS2NOPDM.js +30 -0
  118. package/dist/chunk-AS2NOPDM.js.map +1 -0
  119. package/dist/{chunk-3BLHPQHT.js → chunk-BPXJINHW.js} +5 -5
  120. package/dist/{chunk-D6PY63OM.js → chunk-BZDK5EOD.js} +2 -2
  121. package/dist/{chunk-2J3V5QEO.js → chunk-C3QXITIP.js} +4 -4
  122. package/dist/{chunk-PLJ2MQFT.js → chunk-C3YEB7CR.js} +7 -7
  123. package/dist/{chunk-DM5CU5J7.js → chunk-CRK6F6N3.js} +3 -2
  124. package/dist/chunk-CRK6F6N3.js.map +1 -0
  125. package/dist/{chunk-2ZG2LLZT.js → chunk-D7UUB33A.js} +2 -2
  126. package/dist/{chunk-E3I3NDUP.js → chunk-DABSYX7V.js} +7 -7
  127. package/dist/{chunk-KJLLPG26.js → chunk-DDGQDNQW.js} +2 -2
  128. package/dist/{chunk-K5D2XVNN.js → chunk-F2FJTOV6.js} +2 -2
  129. package/dist/{chunk-EAARGPWI.js → chunk-F3TURDFG.js} +3 -1
  130. package/dist/chunk-F3TURDFG.js.map +1 -0
  131. package/dist/{chunk-7ZLC4DTZ.js → chunk-F6PTJLEM.js} +1 -1
  132. package/dist/chunk-F6PTJLEM.js.map +1 -0
  133. package/dist/{chunk-P66QH6R6.js → chunk-GKKLI23D.js} +2 -2
  134. package/dist/{chunk-ICN37XHG.js → chunk-GMU7MAHS.js} +19 -19
  135. package/dist/{chunk-RQQO3ORQ.js → chunk-GR76OKET.js} +13 -4
  136. package/dist/{chunk-RQQO3ORQ.js.map → chunk-GR76OKET.js.map} +1 -1
  137. package/dist/{chunk-PQ42DJNG.js → chunk-H2N6SLTR.js} +2 -2
  138. package/dist/{chunk-ND7MAIJC.js → chunk-HKQAI6XI.js} +2 -2
  139. package/dist/{chunk-C3G6MW4W.js → chunk-IB7FDRRC.js} +2 -2
  140. package/dist/{chunk-WFMQN7JE.js → chunk-IWHNT35B.js} +3 -3
  141. package/dist/{chunk-W7UV2ZCA.js → chunk-JDL5BYYF.js} +3 -3
  142. package/dist/{chunk-N6XTC56E.js → chunk-JWBDHA4F.js} +15 -11
  143. package/dist/chunk-JWBDHA4F.js.map +1 -0
  144. package/dist/{chunk-5EQT62HH.js → chunk-KDLOKVX7.js} +2 -2
  145. package/dist/chunk-KIW3OOZE.js +39 -0
  146. package/dist/chunk-KIW3OOZE.js.map +1 -0
  147. package/dist/{chunk-GMH5QPUU.js → chunk-KOM36ILJ.js} +19 -15
  148. package/dist/chunk-KOM36ILJ.js.map +1 -0
  149. package/dist/{chunk-V62YYBBY.js → chunk-KORQWGUA.js} +2 -2
  150. package/dist/{chunk-VDX2J7OX.js → chunk-KQAFEZQX.js} +2 -2
  151. package/dist/{chunk-WZIO3TW6.js → chunk-KY75VZKG.js} +2 -2
  152. package/dist/{chunk-4IGOLIWM.js → chunk-L63M2PE4.js} +2 -2
  153. package/dist/{chunk-PGGPRF6J.js → chunk-LD22AAJI.js} +2 -2
  154. package/dist/{chunk-NYWCFC3K.js → chunk-LT4H7SL5.js} +113 -59
  155. package/dist/chunk-LT4H7SL5.js.map +1 -0
  156. package/dist/{chunk-A4OIJYCV.js → chunk-LUAQHDUI.js} +2 -2
  157. package/dist/chunk-LVTT5AUG.js +79 -0
  158. package/dist/chunk-LVTT5AUG.js.map +1 -0
  159. package/dist/{chunk-S4MJTIPG.js → chunk-LXMZM7LM.js} +330 -78
  160. package/dist/chunk-LXMZM7LM.js.map +1 -0
  161. package/dist/{chunk-DIXZQTGY.js → chunk-M6FKXOYV.js} +2 -2
  162. package/dist/{chunk-Z535ADTC.js → chunk-M7H56FOQ.js} +2 -2
  163. package/dist/{chunk-JSD7Q7LD.js → chunk-MOL7JK4F.js} +2 -2
  164. package/dist/{chunk-I46BYY7U.js → chunk-NHFXGNGC.js} +92 -71
  165. package/dist/chunk-NHFXGNGC.js.map +1 -0
  166. package/dist/{chunk-ZX6NNFSY.js → chunk-OGAKUA7I.js} +2 -2
  167. package/dist/{chunk-KZJM7R4F.js → chunk-PF7LQ22G.js} +6 -6
  168. package/dist/{chunk-UZGHKD3T.js → chunk-PPDZSJXB.js} +2 -2
  169. package/dist/{chunk-AUSRUOMQ.js → chunk-PW4HTWXL.js} +2 -2
  170. package/dist/{chunk-LE2KZ72G.js → chunk-QCTXQ2HW.js} +2 -2
  171. package/dist/{chunk-I3H5LFOI.js → chunk-QNJQCLI6.js} +4 -4
  172. package/dist/{chunk-46RII65S.js → chunk-QUBPZQED.js} +2 -2
  173. package/dist/chunk-QZ4U67KO.js +98 -0
  174. package/dist/chunk-QZ4U67KO.js.map +1 -0
  175. package/dist/{chunk-E4LMQTST.js → chunk-R3H2AXO2.js} +2 -2
  176. package/dist/{chunk-XVDZFTN5.js → chunk-RFIJH2OE.js} +5 -5
  177. package/dist/{chunk-BTPCP535.js → chunk-RJ7Z7YXK.js} +5 -5
  178. package/dist/{chunk-TBXAY2SS.js → chunk-SGHGCFVV.js} +5 -5
  179. package/dist/{chunk-AIVRD66I.js → chunk-T3F2HWIG.js} +2 -2
  180. package/dist/chunk-TE6S7KDF.js +47 -0
  181. package/dist/chunk-TE6S7KDF.js.map +1 -0
  182. package/dist/{chunk-WPGA4RYI.js → chunk-UCLWIMVW.js} +2 -2
  183. package/dist/{chunk-6P4REYKL.js → chunk-UDAUULK2.js} +28 -2
  184. package/dist/{chunk-6P4REYKL.js.map → chunk-UDAUULK2.js.map} +1 -1
  185. package/dist/{chunk-V2EXYQEQ.js → chunk-VHANUT45.js} +7 -7
  186. package/dist/{chunk-AFJHNHAM.js → chunk-VJXMFBVR.js} +2 -2
  187. package/dist/{chunk-FGFC2EFR.js → chunk-VKDXYEA6.js} +3 -3
  188. package/dist/{chunk-Q62GA5U2.js → chunk-VW5TGNJN.js} +2 -2
  189. package/dist/{chunk-Q62GA5U2.js.map → chunk-VW5TGNJN.js.map} +1 -1
  190. package/dist/chunk-VYDGHJIN.js +17 -0
  191. package/dist/chunk-VYDGHJIN.js.map +1 -0
  192. package/dist/{chunk-GWNSKQDA.js → chunk-W44T2KHG.js} +3 -3
  193. package/dist/{chunk-H3TKENU4.js → chunk-WIKO4SCR.js} +5 -5
  194. package/dist/{chunk-DQEMWVMT.js → chunk-X7Y7WX73.js} +1 -1
  195. package/dist/{chunk-MCMS4VUK.js → chunk-XIJHRQ4A.js} +14 -8
  196. package/dist/chunk-XIJHRQ4A.js.map +1 -0
  197. package/dist/{chunk-2HQPE2NM.js → chunk-XOCGC3FJ.js} +2 -2
  198. package/dist/chunk-YE4JBZO5.js +44 -0
  199. package/dist/chunk-YE4JBZO5.js.map +1 -0
  200. package/dist/{chunk-V2TOGJPM.js → chunk-YPB3Y57U.js} +14 -13
  201. package/dist/chunk-YPB3Y57U.js.map +1 -0
  202. package/dist/{chunk-ZZEIL3MI.js → chunk-YTV6J4T6.js} +2 -2
  203. package/dist/{chunk-ZZEIL3MI.js.map → chunk-YTV6J4T6.js.map} +1 -1
  204. package/dist/{chunk-IYIPXAIJ.js → chunk-ZBSP4BSN.js} +2 -2
  205. package/dist/{chunk-VVX5PZFS.js → chunk-ZHXSOMYH.js} +2 -2
  206. package/dist/{cli-CUlMlS2N.d.ts → cli-BfCl5kWD.d.ts} +5 -5
  207. package/dist/cli.d.ts +18 -15
  208. package/dist/cli.js +94 -84
  209. package/dist/coding/export-okf-codegraph.d.ts +2 -1
  210. package/dist/coding/export-okf-codegraph.js +13 -13
  211. package/dist/coding/pre-action-gate.d.ts +2 -1
  212. package/dist/compounding/engine.d.ts +3 -2
  213. package/dist/compounding/engine.js +13 -13
  214. package/dist/compounding/preference-consolidator.d.ts +2 -1
  215. package/dist/compression-optimizer.d.ts +2 -1
  216. package/dist/config.d.ts +2 -1
  217. package/dist/config.js +9 -7
  218. package/dist/connectors/codex-materialize-runner.d.ts +2 -1
  219. package/dist/connectors/codex-materialize-runner.js +13 -13
  220. package/dist/connectors/codex-materialize.d.ts +2 -1
  221. package/dist/connectors/index.d.ts +2 -1
  222. package/dist/connectors/index.js +14 -14
  223. package/dist/consolidation-provenance-check.d.ts +3 -2
  224. package/dist/consolidation-undo.d.ts +3 -2
  225. package/dist/contradiction/index.d.ts +5 -4
  226. package/dist/contradiction/index.js +3 -3
  227. package/dist/converge-config.d.ts +2 -1
  228. package/dist/convergence-refresh.d.ts +3 -2
  229. package/dist/convergence-refresh.js +16 -16
  230. package/dist/conversation-index/backend.d.ts +2 -1
  231. package/dist/conversation-index/chunker.d.ts +2 -1
  232. package/dist/conversation-index/faiss-adapter.d.ts +2 -1
  233. package/dist/conversation-index/indexer.d.ts +2 -1
  234. package/dist/conversation-index/search.d.ts +2 -1
  235. package/dist/corpus-watermark.d.ts +2 -1
  236. package/dist/corpus-watermark.js +16 -16
  237. package/dist/cross-lingual-recall.d.ts +2 -1
  238. package/dist/day-summary.d.ts +2 -1
  239. package/dist/deep-recall-config.d.ts +11 -1
  240. package/dist/deep-recall-config.js +6 -3
  241. package/dist/deep-recall-http-glue.d.ts +16 -13
  242. package/dist/deep-recall-http-glue.js +5 -5
  243. package/dist/deep-recall-mcp-tools.d.ts +16 -13
  244. package/dist/deep-recall-policy-llm.d.ts +3 -2
  245. package/dist/deep-recall-seeds.d.ts +2 -1
  246. package/dist/delinearize.d.ts +2 -1
  247. package/dist/dependency-propagation-config.d.ts +2 -1
  248. package/dist/{dependency-propagation-delivery-BDDjImQn.d.ts → dependency-propagation-delivery-CggS9BFT.d.ts} +1 -1
  249. package/dist/direct-answer-wiring.d.ts +2 -1
  250. package/dist/direct-answer.d.ts +2 -1
  251. package/dist/embedding-fallback.d.ts +2 -1
  252. package/dist/enrichment/index.d.ts +2 -1
  253. package/dist/entity-origin-fields.d.ts +2 -1
  254. package/dist/entity-retrieval.d.ts +3 -2
  255. package/dist/entity-retrieval.js +13 -13
  256. package/dist/entity-schema.d.ts +2 -1
  257. package/dist/episodic-context.d.ts +2 -1
  258. package/dist/eval-trajectory-contracts.d.ts +2 -1
  259. package/dist/eval-trajectory-store.d.ts +2 -1
  260. package/dist/eval-trajectory.d.ts +2 -1
  261. package/dist/explicit-capture.d.ts +12 -11
  262. package/dist/explicit-capture.js +3 -3
  263. package/dist/external-wiki-access.d.ts +16 -13
  264. package/dist/external-wiki-access.js +49 -41
  265. package/dist/external-wiki-collection-registration.d.ts +2 -1
  266. package/dist/external-wiki-collection.d.ts +2 -1
  267. package/dist/external-wiki-mcp-tools.d.ts +16 -13
  268. package/dist/extraction-error-classification.d.ts +2 -1
  269. package/dist/extraction-faithfulness.d.ts +3 -2
  270. package/dist/extraction-judge-telemetry.d.ts +3 -2
  271. package/dist/extraction-judge-training.d.ts +3 -2
  272. package/dist/extraction-judge.d.ts +3 -2
  273. package/dist/extraction-liveness.d.ts +2 -1
  274. package/dist/extraction-normalization.d.ts +2 -1
  275. package/dist/extraction-prompt.d.ts +2 -1
  276. package/dist/extraction-source-grounding-rules.d.ts +2 -1
  277. package/dist/extraction-source-grounding.d.ts +2 -1
  278. package/dist/extraction-span-config.d.ts +2 -1
  279. package/dist/extraction-span-materialize.d.ts +2 -1
  280. package/dist/extraction.d.ts +3 -2
  281. package/dist/extraction.js +21 -21
  282. package/dist/fallback-llm-codex-subscription.d.ts +2 -1
  283. package/dist/fallback-llm.d.ts +2 -1
  284. package/dist/{generic-recall-paths-CpDzNO_I.d.ts → generic-recall-paths-CoXPSnCw.d.ts} +1 -1
  285. package/dist/graph-append-error.d.ts +2 -1
  286. package/dist/graph-dashboard-diff.d.ts +2 -1
  287. package/dist/graph-dashboard-key.d.ts +2 -1
  288. package/dist/graph-dashboard-parser.d.ts +2 -1
  289. package/dist/graph-edge-reinforcement.d.ts +2 -1
  290. package/dist/graph-jsonl.d.ts +2 -1
  291. package/dist/graph-path-reconstruction.d.ts +2 -1
  292. package/dist/graph-path-scoring.d.ts +2 -1
  293. package/dist/graph-snapshot.d.ts +2 -1
  294. package/dist/graph.d.ts +2 -1
  295. package/dist/harmonic-retrieval.js +1 -1
  296. package/dist/importance.d.ts +2 -1
  297. package/dist/importers/index.d.ts +2 -1
  298. package/dist/importers/test-utils.d.ts +2 -1
  299. package/dist/in-flight-reads.d.ts +2 -1
  300. package/dist/{index-CtmmCJoo.d.ts → index-fdw_oK5a.d.ts} +3 -3
  301. package/dist/index.d.ts +28 -25
  302. package/dist/index.js +183 -162
  303. package/dist/intent.d.ts +2 -1
  304. package/dist/lcm/engine.d.ts +2 -1
  305. package/dist/lcm/engine.js +3 -3
  306. package/dist/lcm/index.d.ts +2 -1
  307. package/dist/lcm/index.js +11 -11
  308. package/dist/lcm/tools.d.ts +2 -1
  309. package/dist/lifecycle.d.ts +2 -1
  310. package/dist/live-connectors-runner.d.ts +2 -1
  311. package/dist/{local-llm-DpXIvm6F.d.ts → local-llm-3-jtw52a.d.ts} +1 -1
  312. package/dist/local-llm-helpers.d.ts +3 -2
  313. package/dist/local-llm.d.ts +3 -2
  314. package/dist/local-model-endpoint.d.ts +2 -1
  315. package/dist/location/index.d.ts +7 -209
  316. package/dist/location/index.js +68 -62
  317. package/dist/maintenance/memory-governance.d.ts +2 -1
  318. package/dist/maintenance/memory-governance.js +13 -13
  319. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +3 -2
  320. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +14 -14
  321. package/dist/maintenance/rebuild-memory-projection.d.ts +3 -2
  322. package/dist/maintenance/rebuild-memory-projection.js +15 -15
  323. package/dist/{maintenance-CNgoLsoM.d.ts → maintenance-DgeeH0a1.d.ts} +3 -3
  324. package/dist/mcp-memory-inspector-app.d.ts +18 -15
  325. package/dist/mcp-read-only-tools.js +1 -1
  326. package/dist/memory-action-policy.d.ts +2 -1
  327. package/dist/memory-cache.d.ts +2 -1
  328. package/dist/memory-controller.d.ts +2 -1
  329. package/dist/memory-lifecycle-ledger-utils.d.ts +2 -1
  330. package/dist/memory-projection-store.d.ts +2 -1
  331. package/dist/memory-provenance.d.ts +2 -1
  332. package/dist/memory-snapshot.d.ts +2 -1
  333. package/dist/memory-subject-cli.d.ts +16 -13
  334. package/dist/memory-subject.d.ts +16 -13
  335. package/dist/memory-worth-outcomes.d.ts +3 -2
  336. package/dist/models-json.d.ts +2 -1
  337. package/dist/namespaces/migrate.d.ts +4 -3
  338. package/dist/namespaces/migrate.js +14 -14
  339. package/dist/namespaces/principal.d.ts +2 -1
  340. package/dist/namespaces/search.d.ts +2 -1
  341. package/dist/namespaces/search.js +4 -4
  342. package/dist/namespaces/storage.d.ts +4 -3
  343. package/dist/namespaces/storage.js +13 -13
  344. package/dist/native-knowledge.d.ts +2 -1
  345. package/dist/offline-sync-impression-drain.d.ts +2 -1
  346. package/dist/offline-sync-impression-drain.js +5 -5
  347. package/dist/operator-doctor-corpus.d.ts +2 -1
  348. package/dist/operator-doctor-corpus.js +17 -17
  349. package/dist/operator-doctor-replica.d.ts +2 -1
  350. package/dist/operator-toolkit.d.ts +4 -3
  351. package/dist/operator-toolkit.js +29 -28
  352. package/dist/orchestration/compression-guideline-coordinator.d.ts +3 -2
  353. package/dist/orchestration/maintenance.d.ts +5 -4
  354. package/dist/orchestration/maintenance.js +26 -26
  355. package/dist/{orchestrator-DT7ybIFz.d.ts → orchestrator-VXWKdatm.d.ts} +12 -10
  356. package/dist/orchestrator.d.ts +12 -11
  357. package/dist/orchestrator.js +115 -105
  358. package/dist/patterns-cli.d.ts +2 -1
  359. package/dist/{pipeline-CgBEmHcz.d.ts → pipeline-CwXZBKR5.d.ts} +1 -1
  360. package/dist/policy-runtime.d.ts +2 -1
  361. package/dist/proactive-contention.d.ts +3 -2
  362. package/dist/provenance.d.ts +2 -1
  363. package/dist/{public-http-C8P8fyiO.d.ts → public-http-B55s59aR.d.ts} +1 -1
  364. package/dist/{qmd-BkY8KpCh.d.ts → qmd-DOLTPIQg.d.ts} +1 -1
  365. package/dist/qmd-preflight.d.ts +3 -2
  366. package/dist/qmd-recall-cache.d.ts +2 -1
  367. package/dist/qmd.d.ts +3 -2
  368. package/dist/recall-concurrency-config.d.ts +2 -1
  369. package/dist/recall-disclosure-escalation.d.ts +2 -1
  370. package/dist/recall-explain-renderer.d.ts +2 -1
  371. package/dist/recall-explain-renderer.js +3 -3
  372. package/dist/recall-memory-map.d.ts +2 -1
  373. package/dist/recall-navigate-access.d.ts +2 -1
  374. package/dist/recall-navigate-access.js +2 -2
  375. package/dist/recall-navigate-budget.js +3 -13
  376. package/dist/recall-navigate-budget.js.map +1 -1
  377. package/dist/recall-navigate-disclosure.d.ts +2 -1
  378. package/dist/recall-navigate-disclosure.js +4 -23
  379. package/dist/recall-navigate-disclosure.js.map +1 -1
  380. package/dist/recall-navigate-traverse.js +4 -37
  381. package/dist/recall-navigate-traverse.js.map +1 -1
  382. package/dist/recall-navigate-window.js +4 -26
  383. package/dist/recall-navigate-window.js.map +1 -1
  384. package/dist/recall-navigate.d.ts +2 -1
  385. package/dist/recall-navigate.js +2 -2
  386. package/dist/recall-navigation-config.d.ts +34 -0
  387. package/dist/recall-navigation-config.js +16 -0
  388. package/dist/recall-navigation-config.js.map +1 -0
  389. package/dist/recall-navigation-http-glue.d.ts +171 -0
  390. package/dist/recall-navigation-http-glue.js +9 -0
  391. package/dist/recall-navigation-http-glue.js.map +1 -0
  392. package/dist/recall-navigation-mcp-tools.d.ts +162 -0
  393. package/dist/recall-navigation-mcp-tools.js +8 -0
  394. package/dist/recall-navigation-mcp-tools.js.map +1 -0
  395. package/dist/recall-navigation-operations.d.ts +2 -0
  396. package/dist/recall-navigation-operations.js +245 -0
  397. package/dist/recall-navigation-operations.js.map +1 -0
  398. package/dist/recall-navigation-renderer.d.ts +36 -0
  399. package/dist/recall-navigation-renderer.js +8 -0
  400. package/dist/recall-navigation-renderer.js.map +1 -0
  401. package/dist/recall-navigation.d.ts +121 -0
  402. package/dist/recall-navigation.js +249 -0
  403. package/dist/recall-navigation.js.map +1 -0
  404. package/dist/recall-planner-llm.d.ts +2 -1
  405. package/dist/recall-state-view-admission.d.ts +3 -2
  406. package/dist/recall-state-view-admission.js +4 -4
  407. package/dist/recall-state-view-anchors.d.ts +2 -1
  408. package/dist/recall-state.d.ts +2 -1
  409. package/dist/recall-tag-filter.d.ts +2 -1
  410. package/dist/recall-timings.d.ts +2 -1
  411. package/dist/recall-xray-cli.d.ts +2 -1
  412. package/dist/recall-xray-cli.js +4 -4
  413. package/dist/recall-xray-renderer.d.ts +2 -1
  414. package/dist/recall-xray-renderer.js +3 -3
  415. package/dist/recall-xray.d.ts +3 -2
  416. package/dist/recall-xray.js +2 -2
  417. package/dist/reconcile/cursor.d.ts +2 -1
  418. package/dist/reconcile/manifest.d.ts +2 -1
  419. package/dist/reconcile/plan.d.ts +2 -1
  420. package/dist/replay/normalizers/chatgpt.d.ts +2 -1
  421. package/dist/replay/normalizers/claude.d.ts +2 -1
  422. package/dist/replay/normalizers/openclaw.d.ts +2 -1
  423. package/dist/replay/normalizers/shared.d.ts +2 -1
  424. package/dist/replay/runner.d.ts +2 -1
  425. package/dist/replay/types.d.ts +2 -1
  426. package/dist/replica-divergence.d.ts +2 -1
  427. package/dist/replica-peers-config.d.ts +2 -1
  428. package/dist/resolution-LXFQQ4AE.js +3 -3
  429. package/dist/resolve-auth-token.d.ts +2 -1
  430. package/dist/resume-bundles.js +10 -8
  431. package/dist/retrieval-agents.d.ts +3 -2
  432. package/dist/retrieval-tiers.d.ts +2 -1
  433. package/dist/routing/engine.d.ts +2 -1
  434. package/dist/routing/store.d.ts +2 -1
  435. package/dist/salvage-envelope.d.ts +2 -1
  436. package/dist/schemas.d.ts +2 -2
  437. package/dist/{scope-profiles-BBPjZ9jb.d.ts → scope-profiles-C564-hrv.d.ts} +1 -1
  438. package/dist/search/embed-helper.d.ts +2 -1
  439. package/dist/search/factory.d.ts +2 -1
  440. package/dist/search/factory.js +3 -3
  441. package/dist/search/index.d.ts +2 -1
  442. package/dist/search/index.js +7 -7
  443. package/dist/search/lancedb-backend.d.ts +2 -1
  444. package/dist/search/meilisearch-backend.d.ts +2 -1
  445. package/dist/search/noop-backend.d.ts +2 -1
  446. package/dist/search/orama-backend.d.ts +2 -1
  447. package/dist/search/port.d.ts +2 -1
  448. package/dist/search/remote-backend.d.ts +2 -1
  449. package/dist/{semantic-consolidation-BPFFVO84.d.ts → semantic-consolidation-g6x-ShY8.d.ts} +1 -1
  450. package/dist/semantic-consolidation.d.ts +3 -2
  451. package/dist/semantic-consolidation.js +14 -14
  452. package/dist/semantic-rule-promotion.js +13 -13
  453. package/dist/semantic-rule-verifier.d.ts +2 -1
  454. package/dist/semantic-rule-verifier.js +13 -13
  455. package/dist/{service-jKcr6Jvr.d.ts → service-CaCOk0rd.d.ts} +13 -2
  456. package/dist/session-observer-bands.d.ts +2 -1
  457. package/dist/session-observer-state.d.ts +2 -1
  458. package/dist/shared-context/manager.d.ts +2 -1
  459. package/dist/signal.d.ts +2 -1
  460. package/dist/source-agent-qualifier.d.ts +2 -1
  461. package/dist/source-agent-qualifier.js +20 -20
  462. package/dist/standup/build.js +14 -14
  463. package/dist/{storage-C-0Ah5OY.d.ts → storage-C9nsZX5Q.d.ts} +1 -1
  464. package/dist/storage.d.ts +3 -2
  465. package/dist/storage.js +12 -12
  466. package/dist/subject-config.d.ts +2 -1
  467. package/dist/subject-config.js +2 -2
  468. package/dist/summarizer.d.ts +2 -1
  469. package/dist/summary-snapshot.d.ts +2 -1
  470. package/dist/support-passport/index.d.ts +19 -16
  471. package/dist/support-passport/index.js +51 -43
  472. package/dist/tagging-BA4RFdH3.d.ts +240 -0
  473. package/dist/temporal-supersession.d.ts +3 -2
  474. package/dist/temporal-timeline-recall.d.ts +2 -1
  475. package/dist/temporal-validity.d.ts +2 -1
  476. package/dist/threading.d.ts +2 -1
  477. package/dist/tier-migration.d.ts +3 -2
  478. package/dist/tier-routing.d.ts +2 -1
  479. package/dist/topics.d.ts +2 -1
  480. package/dist/transcript.d.ts +2 -1
  481. package/dist/transfer/backup.js +2 -2
  482. package/dist/transfer/capsule-export.js +2 -2
  483. package/dist/transfer/capsule-import.js +2 -2
  484. package/dist/transfer/export-okf.d.ts +2 -1
  485. package/dist/transfer/export-okf.js +13 -13
  486. package/dist/trust-score-stage.d.ts +2 -1
  487. package/dist/trust-score.d.ts +2 -1
  488. package/dist/{types-cK5LydjL.d.ts → types-Sps-lg5I.d.ts} +3 -2
  489. package/dist/types.d.ts +2 -1
  490. package/dist/types.js +1 -1
  491. package/dist/utility-runtime.d.ts +2 -1
  492. package/dist/verified-recall.js +13 -13
  493. package/dist/who-knows-cli.d.ts +16 -13
  494. package/dist/who-knows-cli.js +14 -14
  495. package/dist/who-knows.d.ts +16 -13
  496. package/dist/who-knows.js +13 -13
  497. package/dist/write-envelope.d.ts +2 -1
  498. package/package.json +2 -2
  499. package/src/access-boundary.ts +2 -0
  500. package/src/access-http.test.ts +1 -0
  501. package/src/access-http.ts +3 -3
  502. package/src/access-mcp-output-schemas.ts +30 -0
  503. package/src/access-mcp.ts +6 -9
  504. package/src/access-observe-write-category.ts +1 -0
  505. package/src/access-observe-write-surface.ts +3 -3
  506. package/src/access-operations-batch.ts +2 -2
  507. package/src/access-operations.ts +2 -0
  508. package/src/access-schema.ts +1 -0
  509. package/src/access-service.ts +17 -28
  510. package/src/access-surface-catalog.test.ts +30 -2
  511. package/src/access-surface-catalog.ts +4 -0
  512. package/src/cli/recall-navigation-commands.ts +85 -0
  513. package/src/cli.ts +2 -2
  514. package/src/config.ts +4 -0
  515. package/src/deep-recall-config.ts +32 -0
  516. package/src/index.ts +1 -2
  517. package/src/location/phase5-wiring.test.ts +408 -0
  518. package/src/location/tagging.ts +58 -0
  519. package/src/mcp-read-only-tools.ts +2 -0
  520. package/src/orchestration/orchestrator-helpers.ts +2 -0
  521. package/src/orchestration/recall-internal.ts +4 -4
  522. package/src/orchestration/workspace-ops.ts +14 -0
  523. package/src/recall-navigation-config.test.ts +56 -0
  524. package/src/recall-navigation-config.ts +107 -0
  525. package/src/recall-navigation-http-glue.ts +141 -0
  526. package/src/recall-navigation-mcp-tools.ts +60 -0
  527. package/src/recall-navigation-operations.ts +111 -0
  528. package/src/recall-navigation-renderer.ts +49 -0
  529. package/src/recall-navigation-surface.test.ts +474 -0
  530. package/src/recall-navigation.test.ts +405 -0
  531. package/src/recall-navigation.ts +429 -0
  532. package/src/recall-xray.ts +1 -1
  533. package/src/types.ts +2 -0
  534. package/src/wearables/pipeline.ts +19 -0
  535. package/src/wearables/service.ts +8 -0
  536. package/dist/chunk-7ZLC4DTZ.js.map +0 -1
  537. package/dist/chunk-DM5CU5J7.js.map +0 -1
  538. package/dist/chunk-EAARGPWI.js.map +0 -1
  539. package/dist/chunk-GMH5QPUU.js.map +0 -1
  540. package/dist/chunk-I46BYY7U.js.map +0 -1
  541. package/dist/chunk-MCMS4VUK.js.map +0 -1
  542. package/dist/chunk-N6XTC56E.js.map +0 -1
  543. package/dist/chunk-NYWCFC3K.js.map +0 -1
  544. package/dist/chunk-QVSRE355.js.map +0 -1
  545. package/dist/chunk-S4MJTIPG.js.map +0 -1
  546. package/dist/chunk-V2TOGJPM.js.map +0 -1
  547. package/dist/chunk-WN2OXGGH.js.map +0 -1
  548. package/dist/chunk-XRS65T4O.js.map +0 -1
  549. /package/dist/{capsule-crypto-YO5QJ6L3.js.map → capsule-crypto-7FJQINUR.js.map} +0 -0
  550. /package/dist/{chunk-563X6JJX.js.map → chunk-2HDLDBJW.js.map} +0 -0
  551. /package/dist/{chunk-BXLOS5AJ.js.map → chunk-2NLLXCJG.js.map} +0 -0
  552. /package/dist/{chunk-WBQ4ONQJ.js.map → chunk-2PIC6CEN.js.map} +0 -0
  553. /package/dist/{chunk-54QPOE45.js.map → chunk-2YIUUXNK.js.map} +0 -0
  554. /package/dist/{chunk-AKABVXFS.js.map → chunk-3254BYQV.js.map} +0 -0
  555. /package/dist/{chunk-XCPNH2MG.js.map → chunk-3KJTSCSX.js.map} +0 -0
  556. /package/dist/{chunk-I33QYUAF.js.map → chunk-3YQ7VLP3.js.map} +0 -0
  557. /package/dist/{chunk-JMWUPUE6.js.map → chunk-46FVFU7S.js.map} +0 -0
  558. /package/dist/{chunk-PFKIOYJH.js.map → chunk-4WMGRLTV.js.map} +0 -0
  559. /package/dist/{chunk-KLUC2GSG.js.map → chunk-5AJZ7EUW.js.map} +0 -0
  560. /package/dist/{chunk-Z7NBT6AK.js.map → chunk-6EGIQEKC.js.map} +0 -0
  561. /package/dist/{chunk-6MQMYXSQ.js.map → chunk-7F47R4H4.js.map} +0 -0
  562. /package/dist/{chunk-YFXAWGMR.js.map → chunk-7L54ARML.js.map} +0 -0
  563. /package/dist/{chunk-LVFI5LG7.js.map → chunk-A7GQBJP5.js.map} +0 -0
  564. /package/dist/{chunk-EMSYMYXO.js.map → chunk-AKB44K3D.js.map} +0 -0
  565. /package/dist/{chunk-3BLHPQHT.js.map → chunk-BPXJINHW.js.map} +0 -0
  566. /package/dist/{chunk-D6PY63OM.js.map → chunk-BZDK5EOD.js.map} +0 -0
  567. /package/dist/{chunk-2J3V5QEO.js.map → chunk-C3QXITIP.js.map} +0 -0
  568. /package/dist/{chunk-PLJ2MQFT.js.map → chunk-C3YEB7CR.js.map} +0 -0
  569. /package/dist/{chunk-2ZG2LLZT.js.map → chunk-D7UUB33A.js.map} +0 -0
  570. /package/dist/{chunk-E3I3NDUP.js.map → chunk-DABSYX7V.js.map} +0 -0
  571. /package/dist/{chunk-KJLLPG26.js.map → chunk-DDGQDNQW.js.map} +0 -0
  572. /package/dist/{chunk-K5D2XVNN.js.map → chunk-F2FJTOV6.js.map} +0 -0
  573. /package/dist/{chunk-P66QH6R6.js.map → chunk-GKKLI23D.js.map} +0 -0
  574. /package/dist/{chunk-ICN37XHG.js.map → chunk-GMU7MAHS.js.map} +0 -0
  575. /package/dist/{chunk-PQ42DJNG.js.map → chunk-H2N6SLTR.js.map} +0 -0
  576. /package/dist/{chunk-ND7MAIJC.js.map → chunk-HKQAI6XI.js.map} +0 -0
  577. /package/dist/{chunk-C3G6MW4W.js.map → chunk-IB7FDRRC.js.map} +0 -0
  578. /package/dist/{chunk-WFMQN7JE.js.map → chunk-IWHNT35B.js.map} +0 -0
  579. /package/dist/{chunk-W7UV2ZCA.js.map → chunk-JDL5BYYF.js.map} +0 -0
  580. /package/dist/{chunk-5EQT62HH.js.map → chunk-KDLOKVX7.js.map} +0 -0
  581. /package/dist/{chunk-V62YYBBY.js.map → chunk-KORQWGUA.js.map} +0 -0
  582. /package/dist/{chunk-VDX2J7OX.js.map → chunk-KQAFEZQX.js.map} +0 -0
  583. /package/dist/{chunk-WZIO3TW6.js.map → chunk-KY75VZKG.js.map} +0 -0
  584. /package/dist/{chunk-4IGOLIWM.js.map → chunk-L63M2PE4.js.map} +0 -0
  585. /package/dist/{chunk-PGGPRF6J.js.map → chunk-LD22AAJI.js.map} +0 -0
  586. /package/dist/{chunk-A4OIJYCV.js.map → chunk-LUAQHDUI.js.map} +0 -0
  587. /package/dist/{chunk-DIXZQTGY.js.map → chunk-M6FKXOYV.js.map} +0 -0
  588. /package/dist/{chunk-Z535ADTC.js.map → chunk-M7H56FOQ.js.map} +0 -0
  589. /package/dist/{chunk-JSD7Q7LD.js.map → chunk-MOL7JK4F.js.map} +0 -0
  590. /package/dist/{chunk-ZX6NNFSY.js.map → chunk-OGAKUA7I.js.map} +0 -0
  591. /package/dist/{chunk-KZJM7R4F.js.map → chunk-PF7LQ22G.js.map} +0 -0
  592. /package/dist/{chunk-UZGHKD3T.js.map → chunk-PPDZSJXB.js.map} +0 -0
  593. /package/dist/{chunk-AUSRUOMQ.js.map → chunk-PW4HTWXL.js.map} +0 -0
  594. /package/dist/{chunk-LE2KZ72G.js.map → chunk-QCTXQ2HW.js.map} +0 -0
  595. /package/dist/{chunk-I3H5LFOI.js.map → chunk-QNJQCLI6.js.map} +0 -0
  596. /package/dist/{chunk-46RII65S.js.map → chunk-QUBPZQED.js.map} +0 -0
  597. /package/dist/{chunk-E4LMQTST.js.map → chunk-R3H2AXO2.js.map} +0 -0
  598. /package/dist/{chunk-XVDZFTN5.js.map → chunk-RFIJH2OE.js.map} +0 -0
  599. /package/dist/{chunk-BTPCP535.js.map → chunk-RJ7Z7YXK.js.map} +0 -0
  600. /package/dist/{chunk-TBXAY2SS.js.map → chunk-SGHGCFVV.js.map} +0 -0
  601. /package/dist/{chunk-AIVRD66I.js.map → chunk-T3F2HWIG.js.map} +0 -0
  602. /package/dist/{chunk-WPGA4RYI.js.map → chunk-UCLWIMVW.js.map} +0 -0
  603. /package/dist/{chunk-V2EXYQEQ.js.map → chunk-VHANUT45.js.map} +0 -0
  604. /package/dist/{chunk-AFJHNHAM.js.map → chunk-VJXMFBVR.js.map} +0 -0
  605. /package/dist/{chunk-FGFC2EFR.js.map → chunk-VKDXYEA6.js.map} +0 -0
  606. /package/dist/{chunk-GWNSKQDA.js.map → chunk-W44T2KHG.js.map} +0 -0
  607. /package/dist/{chunk-H3TKENU4.js.map → chunk-WIKO4SCR.js.map} +0 -0
  608. /package/dist/{chunk-DQEMWVMT.js.map → chunk-X7Y7WX73.js.map} +0 -0
  609. /package/dist/{chunk-2HQPE2NM.js.map → chunk-XOCGC3FJ.js.map} +0 -0
  610. /package/dist/{chunk-IYIPXAIJ.js.map → chunk-ZBSP4BSN.js.map} +0 -0
  611. /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;
@@ -15,6 +15,7 @@
15
15
  * write for the run has succeeded.
16
16
  */
17
17
 
18
+ import { fillWearableConversationLocations } from "../location/tagging.js";
18
19
  import { cleanConversation } from "./cleanup.js";
19
20
  import { describeErrorForOperator, WearablesInputError } from "./errors.js";
20
21
  import {
@@ -50,6 +51,7 @@ import {
50
51
  saveSyncState,
51
52
  updateSourceSyncState,
52
53
  } from "./sync-state.js";
54
+ import type { LocationConfig } from "../location/types.js";
53
55
  import type {
54
56
  WearableConversation,
55
57
  WearableSourceConnector,
@@ -122,6 +124,11 @@ export interface WearableSyncDeps {
122
124
  listSupportMemories?(): Promise<Array<{ id: string; content: string }>>;
123
125
  /** Clock injection for tests. */
124
126
  now?: () => Date;
127
+ /**
128
+ * Location config for the missing-only conversation location fill
129
+ * (issue #2925). Absent, or location tagging disabled, changes nothing.
130
+ */
131
+ locationConfig?: LocationConfig;
125
132
  }
126
133
 
127
134
  /** Format a Date as YYYY-MM-DD in the given IANA timezone. */
@@ -382,6 +389,18 @@ export async function syncWearableSource(
382
389
  summary.redactions += cleaned.redactions;
383
390
  summary.correctionsApplied += cleaned.correctionsApplied;
384
391
 
392
+ // Missing-only location fill (issue #2925): run before the body is
393
+ // composed so a qualifying dominant-overlap place reaches the day
394
+ // transcript and memory headers exactly like a provider-supplied
395
+ // location would. Source-provided values are never overwritten, and
396
+ // the helper no-ops unless both location gates are on.
397
+ if (deps.locationConfig) {
398
+ await fillWearableConversationLocations(cleaned.conversations, {
399
+ memoryDir: deps.memoryDir,
400
+ config: deps.locationConfig,
401
+ });
402
+ }
403
+
385
404
  if (fetched.conversations.length === 0) {
386
405
  // No provider data at all. A transient provider hiccup can
387
406
  // legitimately produce an empty result, so an existing stored
@@ -13,6 +13,7 @@ import {
13
13
  } from "./corrections.js";
14
14
  import { describeErrorForOperator, WearablesInputError } from "./errors.js";
15
15
  import { inferMemoryStatus } from "../memory-lifecycle-ledger-utils.js";
16
+ import type { LocationConfig } from "../location/types.js";
16
17
  import { isSupportPassportPrivateMemory } from "../support-passport/card-projection.js";
17
18
  import {
18
19
  bodyIsEscaped,
@@ -143,6 +144,12 @@ export interface WearablesServiceDeps {
143
144
  * fails the sync.
144
145
  */
145
146
  onDaysSynced?: (days: readonly string[]) => void | Promise<void>;
147
+ /**
148
+ * Location config for the missing-only conversation location fill
149
+ * (issue #2925). Absent changes nothing; the fill itself stays gated
150
+ * on the location tagging flags.
151
+ */
152
+ locationConfig?: LocationConfig;
146
153
  }
147
154
 
148
155
  export interface WearableTranscriptSearchResult {
@@ -351,6 +358,7 @@ export class WearablesService {
351
358
  options,
352
359
  {
353
360
  memoryDir: storage.dir,
361
+ locationConfig: this.deps.locationConfig,
354
362
  readDayContentHash: async (source, date) => {
355
363
  const raw = await storage.readWearableDayTranscript(source, date);
356
364
  if (raw === null) return null;