@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,85 @@
1
+ /**
2
+ * Recall-navigation command group (issue #1956) — extracted from cli.ts so
3
+ * the surface file stays at its structural ceiling (same seam as
4
+ * deep-recall-commands.ts). `remnic navigate expand|traverse <memoryId>`
5
+ * runs through EngramAccessService.recallNavigate — the same single
6
+ * implementation MCP and HTTP call, sharing one renderer.
7
+ */
8
+
9
+ import type { Orchestrator } from "../orchestrator.js";
10
+ import type { CliCommand } from "../cli.js";
11
+ import { EngramAccessService } from "../access-service.js";
12
+
13
+ function parseLimit(raw: unknown): number | undefined {
14
+ if (raw === undefined || raw === null) return undefined;
15
+ const value = typeof raw === "string" ? Number(raw) : raw;
16
+ if (typeof value !== "number" || !Number.isFinite(value) || !Number.isInteger(value) || value < 1) {
17
+ throw new Error(`--limit must be a positive integer; got ${JSON.stringify(raw)}`);
18
+ }
19
+ return value;
20
+ }
21
+
22
+ export function registerRecallNavigationCommands(cmd: CliCommand, orchestrator: Orchestrator): void {
23
+ const run = async (args: unknown[], action: "expand" | "traverse") => {
24
+ const memoryId = String(args[0] ?? "");
25
+ const options = (args[args.length - 1] ?? {}) as Record<string, unknown>;
26
+ const sessionKey = typeof options.sessionKey === "string" ? options.sessionKey : "";
27
+ if (memoryId.length === 0 || sessionKey.length === 0) {
28
+ console.error("usage: navigate <expand|traverse> <memoryId> --session-key <key> [--namespace <ns>]");
29
+ process.exitCode = 1;
30
+ return;
31
+ }
32
+ let limit: number | undefined;
33
+ try {
34
+ limit = action === "traverse" ? parseLimit(options.limit) : undefined;
35
+ } catch (err) {
36
+ console.error(err instanceof Error ? err.message : String(err));
37
+ process.exitCode = 1;
38
+ return;
39
+ }
40
+ const service = new EngramAccessService(orchestrator);
41
+ try {
42
+ const result = await service.recallNavigate({
43
+ action,
44
+ memoryId,
45
+ sessionKey,
46
+ ...(action === "expand" && typeof options.disclosure === "string"
47
+ ? { disclosure: options.disclosure as "chunk" | "section" | "raw" }
48
+ : {}),
49
+ ...(action === "traverse" && typeof options.relation === "string" ? { relation: options.relation } : {}),
50
+ ...(limit !== undefined ? { limit } : {}),
51
+ ...(typeof options.namespace === "string" && options.namespace.length > 0
52
+ ? { namespace: options.namespace }
53
+ : {}),
54
+ });
55
+ if (options.json === true) {
56
+ console.log(JSON.stringify(result, null, 2));
57
+ } else {
58
+ console.log(result.rendered);
59
+ }
60
+ if (!result.ok) process.exitCode = 1;
61
+ } catch (err) {
62
+ console.error(err instanceof Error ? err.message : String(err));
63
+ process.exitCode = 1;
64
+ }
65
+ };
66
+
67
+ cmd
68
+ .command("navigate expand <memoryId>")
69
+ .description("Re-render a served memory at deeper disclosure (issue #1956)")
70
+ .option("--session-key <key>", "Session key whose recent recalls authorize the id (required)")
71
+ .option("--disclosure <level>", "Target depth: section or raw (default raw)")
72
+ .option("--namespace <ns>", "Namespace to scope the read to")
73
+ .option("--json", "JSON output (items + budget + disclosure spend)")
74
+ .action(async (...args: unknown[]) => run(args, "expand"));
75
+
76
+ cmd
77
+ .command("navigate traverse <memoryId>")
78
+ .description("Follow typed links from a served memory; neighbors as chunk summaries (issue #1956)")
79
+ .option("--session-key <key>", "Session key whose recent recalls authorize the id (required)")
80
+ .option("--relation <type>", "Optional relation filter (supports, contradicts, elaborates, ...)")
81
+ .option("--limit <n>", "Optional cap on returned neighbors")
82
+ .option("--namespace <ns>", "Namespace to scope the read to")
83
+ .option("--json", "JSON output (items + budget + disclosure spend)")
84
+ .action(async (...args: unknown[]) => run(args, "traverse"));
85
+ }
package/src/cli.ts CHANGED
@@ -14,7 +14,7 @@ import { bumpMemoryCorpusVersionForDir } from "./memory-corpus-version.js";
14
14
  import { utcDayRange } from "./transcript.js";
15
15
  import { padEndDisplay, truncateGraphemeSafe } from "./whitespace.js";
16
16
  import { runWearablesCliCommand } from "./wearables/cli.js";
17
- import { registerMeetingsCommands } from "./cli/meetings-commands.js"; import { registerDeepRecallCommands } from "./cli/deep-recall-commands.js";
17
+ import { registerMeetingsCommands } from "./cli/meetings-commands.js"; import { registerDeepRecallCommands } from "./cli/deep-recall-commands.js"; import { registerRecallNavigationCommands } from "./cli/recall-navigation-commands.js";
18
18
  import { registerExportOkfCommand, registerOkfCommands } from "./cli/okf-commands.js";
19
19
  import { registerSkillsCommands } from "./cli/skills-commands.js";
20
20
  import { registerResearchStatusCommands } from "./cli/research-status-commands.js";
@@ -6230,7 +6230,7 @@ export function registerCli(
6230
6230
 
6231
6231
  registerResearchStatusCommands(cmd, orchestrator);
6232
6232
 
6233
- registerCreationLedgerCommands(cmd, orchestrator); registerMeetingsCommands(cmd, orchestrator); registerOkfCommands(cmd, orchestrator); registerDeepRecallCommands(cmd, orchestrator); registerTimelineCommands(cmd, orchestrator);
6233
+ registerCreationLedgerCommands(cmd, orchestrator); registerMeetingsCommands(cmd, orchestrator); registerOkfCommands(cmd, orchestrator); registerDeepRecallCommands(cmd, orchestrator); registerTimelineCommands(cmd, orchestrator); registerRecallNavigationCommands(cmd, orchestrator);
6234
6234
 
6235
6235
  cmd
6236
6236
  .command("trust-zone-promote")
package/src/config.ts CHANGED
@@ -50,6 +50,7 @@ import { parseActiveContextFields } from "./active-context-config.js";
50
50
  import { parseSkillProjectionConfig } from "./procedural/skill-projection.js";
51
51
  import { parseDriftDetectionConfig } from "./preferences/drift-config.js";
52
52
  import { parseDeepRecallConfig } from "./deep-recall-config.js";
53
+ import { parseRecallNavigationConfig } from "./recall-navigation-config.js";
53
54
  import { parseContradictionLocalizationConfig, parseContradictionScanConfig } from "./contradiction-config.js";
54
55
  import { parseGraphPathScoringConfig } from "./graph-path-scoring-config.js";
55
56
  import { parseWritePathDedupConfig } from "./dedup/novelty-gate.js";
@@ -630,6 +631,7 @@ const MEMORY_OS_PRESETS: Record<MemoryOsPresetName, Record<string, unknown>> = {
630
631
  // memory on a conservative preset must set `procedural.enabled: true`
631
632
  // explicitly.
632
633
  procedural: { enabled: false },
634
+ recallNavigation: { enabled: false },
633
635
  },
634
636
  balanced: {
635
637
  maxMemoryTokens: 2000,
@@ -1820,6 +1822,8 @@ export function parseConfig(
1820
1822
  driftDetection: parseDriftDetectionConfig(cfg.driftDetection),
1821
1823
  // Budgeted deep-recall surface (issue #2332)
1822
1824
  deepRecall: parseDeepRecallConfig(cfg.deepRecall),
1825
+ // Session-scoped recall navigation (issue #1956)
1826
+ recallNavigation: parseRecallNavigationConfig(cfg.recallNavigation),
1823
1827
  dependencyPropagation: parseDependencyPropagationConfig(cfg),
1824
1828
  // Temporal Supersession (issue #375)
1825
1829
  temporalSupersessionEnabled: cfg.temporalSupersessionEnabled !== false, // On by default
@@ -11,6 +11,7 @@
11
11
  */
12
12
 
13
13
  import { coerceBool, coerceNumber } from "./connectors/coerce.js";
14
+ import { EngramAccessInputError } from "./access-errors.js";
14
15
 
15
16
  export interface DeepRecallConfig {
16
17
  /** Master switch for the deep-recall surface. Default false. */
@@ -113,3 +114,34 @@ export function parseDeepRecallMaxSteps(raw: unknown): number | undefined {
113
114
  }
114
115
  throw new Error(`maxSteps must be a non-negative integer; got ${JSON.stringify(raw)}`);
115
116
  }
117
+
118
+ /**
119
+ * Resolve the effective per-invocation config from a caller-requested
120
+ * `maxSteps` override (§33 semantics, extracted from the access service so
121
+ * the god file stays under its ratchet cap):
122
+ * - undefined request keeps the parsed config untouched;
123
+ * - `deepRecall.maxSteps: 0` is a documented disable value — any positive
124
+ * override is a refusal, not a ceiling comparison;
125
+ * - otherwise the override must not exceed the configured ceiling.
126
+ */
127
+ export function resolveEffectiveDeepRecallConfig(
128
+ cfg: DeepRecallConfig,
129
+ requestedSteps: number | undefined,
130
+ ): DeepRecallConfig {
131
+ if (requestedSteps === undefined) return cfg;
132
+ if (typeof requestedSteps !== "number" || !Number.isInteger(requestedSteps) || requestedSteps < 0) {
133
+ throw new EngramAccessInputError("deepRecall: maxSteps must be a non-negative integer");
134
+ }
135
+ if (cfg.maxSteps <= 0) {
136
+ if (requestedSteps > 0) {
137
+ throw new EngramAccessInputError(
138
+ "deepRecall: the policy loop is disabled (deepRecall.maxSteps=0); maxSteps must be 0"
139
+ );
140
+ }
141
+ } else if (requestedSteps > cfg.maxSteps) {
142
+ throw new EngramAccessInputError(
143
+ `deepRecall: maxSteps ${requestedSteps} exceeds the configured ceiling ${cfg.maxSteps}`
144
+ );
145
+ }
146
+ return { ...cfg, maxSteps: requestedSteps };
147
+ }
package/src/index.ts CHANGED
@@ -1451,5 +1451,4 @@ export * from "./maintenance/atomic-file.js";
1451
1451
  // Privacy-safe action-to-outcome trajectory eval (issue #2345)
1452
1452
  export * from "./eval-trajectory.js";
1453
1453
  export { MemoryControllerCoordinator, chooseAction, computeEvidenceReportHash, controllerConfigHash, evaluateActiveGates, hashControllerState, verifyEvidenceReport } from "./memory-controller.js";
1454
- export type { ActiveContextAdapter, ActiveContextMessage, ActiveContextPlan, MemoryControllerActionFamily, MemoryControllerChoice, MemoryControllerConfig, MemoryControllerDeps, MemoryControllerEvent, MemoryControllerEvidence, MemoryControllerEvidenceReport, MemoryControllerExecutors, MemoryControllerMode, MemoryControllerPairedSeedEvidence, MemoryControllerReceipt, MemoryControllerRecorder, MemoryControllerReportReader, MemoryControllerRunResult, MemoryControllerState } from "./memory-controller.js";
1455
- export * from "./recall-navigate.js";
1454
+ export type { ActiveContextAdapter, ActiveContextMessage, ActiveContextPlan, MemoryControllerActionFamily, MemoryControllerChoice, MemoryControllerConfig, MemoryControllerDeps, MemoryControllerEvent, MemoryControllerEvidence, MemoryControllerEvidenceReport, MemoryControllerExecutors, MemoryControllerMode, MemoryControllerPairedSeedEvidence, MemoryControllerReceipt, MemoryControllerRecorder, MemoryControllerReportReader, MemoryControllerRunResult, MemoryControllerState } from "./memory-controller.js"; export * from "./recall-navigate.js"; export * from "./recall-navigation.js"; export * from "./recall-navigation-config.js";
@@ -28,6 +28,8 @@ export const MCP_READ_ONLY_TOOL_SUFFIXES: Readonly<Record<string, true>> = {
28
28
  meetings_list: true,
29
29
  meetings_get: true,
30
30
  deep_recall: true,
31
+ memory_expand: true,
32
+ memory_traverse: true,
31
33
  standup: true,
32
34
  action_confidence: true,
33
35
  capsule_list: true,
@@ -43,6 +43,7 @@ import { buildProcedureRecallSection, mergeProcedureInjections } from "../proced
43
43
  import { canRecallToolScopedMemory } from "../tool-scoped-memory.js";
44
44
  import { buildQmdRecallCacheKey, getCachedQmdRecall, setCachedQmdRecall } from "../qmd-recall-cache.js";
45
45
  import { MEMORY_ID_PATTERN } from "../recall-handles.js";
46
+ import { shouldRecordRecallAuthorityHistory } from "../recall-navigation-config.js";
46
47
  import {
47
48
  boundRecallContextComposition, composeRecallContext, contextBudgetForFooter,
48
49
  formatCuriosityFooter, renderAuthorityBoundContent, selectCuriosityQuestion,
@@ -5256,10 +5257,9 @@ export class RecallInternalCoordinator {
5256
5257
  }),
5257
5258
  "last recall record",
5258
5259
  );
5259
- // Issue #1582 — record the admitted memory-id set for handle resolution.
5260
- // Only when handles are enabled: if injection is off, no handle is ever
5261
- // rendered, so there is nothing to resolve and we skip the write.
5262
- if (this.deps.config.recallMemoryHandles && recalledMemoryIds.length > 0) {
5260
+ // Record admitted ids when handles render OR navigation needs authority.
5261
+ // Handles-off + navigation-on is the shipped default; skip only when both are off.
5262
+ if (shouldRecordRecallAuthorityHistory(this.deps.config) && recalledMemoryIds.length > 0) {
5263
5263
  // Only handle-eligible ids aid resolution; filter out non-memory .md
5264
5264
  // basenames (entity reconstructions) so the resolver never records a
5265
5265
  // citation target that cannot be loaded.
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Recall-navigation config parse (issue #1956 / PR #2937).
3
+ *
4
+ * Unknown keys fail closed. Default parse keeps navigation on and display
5
+ * handles off, and that pair still records authority history.
6
+ */
7
+ import assert from "node:assert/strict";
8
+ import { mkdtemp, rm } from "node:fs/promises";
9
+ import { tmpdir } from "node:os";
10
+ import path from "node:path";
11
+ import test from "node:test";
12
+
13
+ import { parseConfig } from "./config.js";
14
+ import {
15
+ parseRecallNavigationConfig,
16
+ RECALL_NAVIGATION_CONFIG_DEFAULTS,
17
+ shouldRecordRecallAuthorityHistory,
18
+ } from "./recall-navigation-config.js";
19
+
20
+ test("parseRecallNavigationConfig rejects unknown keys instead of ignoring them", () => {
21
+ assert.throws(
22
+ () => parseRecallNavigationConfig({ windowSnapshot: 5 }),
23
+ /recallNavigation contains unknown key "windowSnapshot"/,
24
+ );
25
+ assert.throws(
26
+ () => parseConfig({ recallNavigation: { maxNeighbour: 4 } }),
27
+ /unknown key "maxNeighbour"/,
28
+ );
29
+ assert.deepEqual(parseRecallNavigationConfig({}), RECALL_NAVIGATION_CONFIG_DEFAULTS);
30
+ });
31
+
32
+ test("default config records authority history with handles off and navigation on", async () => {
33
+ const memoryDir = await mkdtemp(path.join(tmpdir(), "remnic-nav-defaults-"));
34
+ try {
35
+ const config = parseConfig({ memoryDir });
36
+ assert.equal(config.recallMemoryHandles, false);
37
+ assert.equal(config.recallNavigation.enabled, true);
38
+ assert.equal(shouldRecordRecallAuthorityHistory(config), true);
39
+ assert.equal(
40
+ shouldRecordRecallAuthorityHistory({
41
+ recallMemoryHandles: false,
42
+ recallNavigation: { enabled: false },
43
+ }),
44
+ false,
45
+ );
46
+ assert.equal(
47
+ shouldRecordRecallAuthorityHistory({
48
+ recallMemoryHandles: true,
49
+ recallNavigation: { enabled: false },
50
+ }),
51
+ true,
52
+ );
53
+ } finally {
54
+ await rm(memoryDir, { recursive: true, force: true });
55
+ }
56
+ });
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Recall-navigation config (issue #1956) — the `recallNavigation` block.
3
+ *
4
+ * Parsed the same way `deepRecall` is: shape-validated, string-coercion
5
+ * safe (§24), no silent clamping of documented values (§33). Navigation is
6
+ * a read-only surface over already-served recall results, so it defaults
7
+ * ON; the `conservative` preset pins `enabled: false`.
8
+ */
9
+
10
+ import { coerceBool, coerceNumber } from "./connectors/coerce.js";
11
+
12
+ export interface RecallNavigationConfig {
13
+ /** Master switch. Default true (read-only, additive surface). */
14
+ enabled: boolean;
15
+ /**
16
+ * How many of the session's most recent recall snapshots an expandable
17
+ * or traversable id may come from. Default 3.
18
+ */
19
+ windowSnapshots: number;
20
+ /** Ceiling for a traverse/entity-neighbor limit override. Default 10. */
21
+ maxNeighbors: number;
22
+ }
23
+
24
+ export interface RecallNavigationSettings {
25
+ recallNavigation: RecallNavigationConfig;
26
+ }
27
+
28
+ export const DEFAULT_NAVIGATION_WINDOW_SNAPSHOTS = 3;
29
+
30
+ export const RECALL_NAVIGATION_CONFIG_DEFAULTS: RecallNavigationConfig = {
31
+ enabled: true,
32
+ windowSnapshots: DEFAULT_NAVIGATION_WINDOW_SNAPSHOTS,
33
+ maxNeighbors: 10,
34
+ };
35
+
36
+ /** Record served ids when display handles or navigation authority needs them. */
37
+ export function shouldRecordRecallAuthorityHistory(config: {
38
+ recallMemoryHandles?: boolean;
39
+ recallNavigation?: { enabled?: boolean };
40
+ }): boolean {
41
+ return config.recallMemoryHandles === true || config.recallNavigation?.enabled === true;
42
+ }
43
+
44
+ function parseFlag(src: Record<string, unknown>, key: string, fallback: boolean): boolean {
45
+ const value = src[key];
46
+ if (value === undefined || value === null) return fallback;
47
+ const coerced = coerceBool(value);
48
+ if (coerced === undefined) {
49
+ throw new Error(
50
+ `recallNavigation.${key} must be a boolean (or "true"/"false"/"1"/"0"); got ${JSON.stringify(value)}`,
51
+ );
52
+ }
53
+ return coerced;
54
+ }
55
+
56
+ function parseBoundedInt(
57
+ src: Record<string, unknown>,
58
+ key: string,
59
+ fallback: number,
60
+ min: number,
61
+ max: number,
62
+ ): number {
63
+ const value = src[key];
64
+ if (value === undefined || value === null) return fallback;
65
+ const coerced = coerceNumber(value);
66
+ if (coerced === undefined || !Number.isFinite(coerced) || !Number.isInteger(coerced)) {
67
+ throw new Error(
68
+ `recallNavigation.${key} must be an integer between ${min} and ${max}; got ${JSON.stringify(value)}`,
69
+ );
70
+ }
71
+ if (coerced < min || coerced > max) {
72
+ throw new Error(
73
+ `recallNavigation.${key} must be an integer between ${min} and ${max}; got ${JSON.stringify(value)}`,
74
+ );
75
+ }
76
+ return coerced;
77
+ }
78
+
79
+ export function parseRecallNavigationConfig(raw: unknown): RecallNavigationConfig {
80
+ if (raw === undefined || raw === null) return { ...RECALL_NAVIGATION_CONFIG_DEFAULTS };
81
+ if (typeof raw !== "object" || Array.isArray(raw)) {
82
+ throw new Error(`recallNavigation must be an object; got ${JSON.stringify(raw)}`);
83
+ }
84
+ const src = raw as Record<string, unknown>;
85
+ const { enabled: _enabled, windowSnapshots: _windowSnapshots, maxNeighbors: _maxNeighbors, ...unknown } = src;
86
+ const unknownKey = Object.keys(unknown)[0];
87
+ if (unknownKey !== undefined) {
88
+ throw new Error(`recallNavigation contains unknown key ${JSON.stringify(unknownKey)}`);
89
+ }
90
+ return {
91
+ enabled: parseFlag(src, "enabled", RECALL_NAVIGATION_CONFIG_DEFAULTS.enabled),
92
+ windowSnapshots: parseBoundedInt(
93
+ src,
94
+ "windowSnapshots",
95
+ RECALL_NAVIGATION_CONFIG_DEFAULTS.windowSnapshots,
96
+ 1,
97
+ 50,
98
+ ),
99
+ maxNeighbors: parseBoundedInt(
100
+ src,
101
+ "maxNeighbors",
102
+ RECALL_NAVIGATION_CONFIG_DEFAULTS.maxNeighbors,
103
+ 1,
104
+ 50,
105
+ ),
106
+ };
107
+ }
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Recall-navigation HTTP glue (issue #1956) — route body lives here so
3
+ * access-http.ts stays at its structural ceiling (same seam as
4
+ * deep-recall-http-glue.ts).
5
+ *
6
+ * Input errors map to 400; everything else rethrows to the global 500
7
+ * handler. Config gating (`recallNavigation.enabled`) lives in the service
8
+ * and returns a typed `error: "disabled"` refusal — this module only
9
+ * translates transport shape. Namespace/sessionKey resolution flows through
10
+ * the caller-supplied `scopeFor` gate so a body-supplied namespace passes
11
+ * the SAME effective-namespace allow-list as the query string (issue #1850
12
+ * finding 2), and `authenticatedPrincipal` reaches the service so
13
+ * authorization derives from the presenting principal, never the
14
+ * client-supplied sessionKey.
15
+ */
16
+
17
+ import type { IncomingMessage, ServerResponse } from "node:http";
18
+
19
+ import { EngramAccessInputError } from "./access-errors.js";
20
+ import type { EngramAccessService } from "./access-service.js";
21
+ import type { NavigationAction } from "./recall-navigation.js";
22
+
23
+ type RespondJson = (res: ServerResponse, status: number, payload: unknown) => void;
24
+ type ReadJsonBody = (req: IncomingMessage) => Promise<unknown>;
25
+
26
+ type ScopeFor = (
27
+ bodyNamespace?: string,
28
+ bodySessionKey?: string,
29
+ ) => { namespace?: string; sessionKey?: string; authenticatedPrincipal?: string };
30
+
31
+ const VALID_RELATIONS = [
32
+ "supports",
33
+ "contradicts",
34
+ "elaborates",
35
+ "causes",
36
+ "caused_by",
37
+ "supersedes",
38
+ "follows",
39
+ "references",
40
+ "related",
41
+ ] as const;
42
+
43
+ function optStr(value: unknown): string | undefined {
44
+ return typeof value === "string" ? value : undefined;
45
+ }
46
+
47
+ function optInt(value: unknown): number | undefined {
48
+ if (value === undefined || value === null || value === "") return undefined;
49
+ const parsed = typeof value === "string" ? Number(value) : value;
50
+ if (typeof parsed !== "number" || !Number.isInteger(parsed) || parsed < 1) {
51
+ throw new EngramAccessInputError("limit must be a positive integer");
52
+ }
53
+ return parsed;
54
+ }
55
+
56
+ async function respondNavigation(
57
+ req: IncomingMessage,
58
+ res: ServerResponse,
59
+ respondJson: RespondJson,
60
+ readJsonBody: ReadJsonBody,
61
+ service: EngramAccessService,
62
+ scopeFor: ScopeFor,
63
+ action: Extract<NavigationAction, "expand" | "traverse">,
64
+ ): Promise<void> {
65
+ const body = (await readJsonBody(req)) as Record<string, unknown>;
66
+ const memoryId = optStr(body.memoryId);
67
+ if (memoryId === undefined || memoryId.trim().length === 0) {
68
+ respondJson(res, 400, { error: "invalid_request", detail: "memoryId is required" });
69
+ return;
70
+ }
71
+ const sessionKey = optStr(body.sessionKey);
72
+ if (sessionKey === undefined || sessionKey.trim().length === 0) {
73
+ respondJson(res, 400, { error: "invalid_request", detail: "sessionKey is required" });
74
+ return;
75
+ }
76
+ let disclosure: "chunk" | "section" | "raw" | undefined;
77
+ let relation: string | undefined;
78
+ if (action === "expand") {
79
+ const raw = optStr(body.disclosure);
80
+ if (raw !== undefined && raw !== "chunk" && raw !== "section" && raw !== "raw") {
81
+ respondJson(res, 400, { error: "invalid_request", detail: "disclosure must be one of chunk, section, raw" });
82
+ return;
83
+ }
84
+ disclosure = raw;
85
+ } else {
86
+ relation = optStr(body.relation);
87
+ if (relation !== undefined && !(VALID_RELATIONS as readonly string[]).includes(relation)) {
88
+ respondJson(
89
+ res,
90
+ 400,
91
+ { error: "invalid_request", detail: `relation must be one of ${VALID_RELATIONS.join(", ")}` },
92
+ );
93
+ return;
94
+ }
95
+ }
96
+ let limit: number | undefined;
97
+ try {
98
+ limit = optInt(body.limit);
99
+ } catch (err) {
100
+ respondJson(res, 400, { error: "invalid_request", detail: err instanceof Error ? err.message : String(err) });
101
+ return;
102
+ }
103
+ const scope = scopeFor(optStr(body.namespace), sessionKey);
104
+ const result = await service.recallNavigate({
105
+ action,
106
+ memoryId,
107
+ sessionKey: scope.sessionKey ?? sessionKey,
108
+ ...(disclosure !== undefined ? { disclosure } : {}),
109
+ ...(relation !== undefined ? { relation } : {}),
110
+ ...(limit !== undefined ? { limit } : {}),
111
+ namespace: scope.namespace,
112
+ authenticatedPrincipal: scope.authenticatedPrincipal,
113
+ });
114
+ const { rendered: _rendered, ...payload } = result;
115
+ respondJson(res, 200, payload);
116
+ }
117
+
118
+ export async function maybeRespondRecallNavigation(
119
+ req: IncomingMessage,
120
+ res: ServerResponse,
121
+ pathname: string,
122
+ method: string | undefined,
123
+ enforceTokenOp: (op: "memory_expand" | "memory_traverse") => void,
124
+ respondJson: RespondJson,
125
+ readJsonBody: ReadJsonBody,
126
+ service: EngramAccessService,
127
+ scopeFor: ScopeFor,
128
+ ): Promise<boolean> {
129
+ if (method === "POST" && (pathname === "/engram/v1/memory/expand" || pathname === "/remnic/v1/memory/expand")) {
130
+ enforceTokenOp("memory_expand");
131
+ await respondNavigation(req, res, respondJson, readJsonBody, service, scopeFor, "expand");
132
+ return true;
133
+ }
134
+ if (method === "POST" && (pathname === "/engram/v1/memory/traverse" || pathname === "/remnic/v1/memory/traverse")) {
135
+ enforceTokenOp("memory_traverse");
136
+ await respondNavigation(req, res, respondJson, readJsonBody, service, scopeFor, "traverse");
137
+ return true;
138
+ }
139
+ return false;
140
+ }
141
+
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Recall-navigation MCP tool definitions (issue #1956) — extracted from
3
+ * access-mcp.ts so the surface file stays at its structural ceiling (same
4
+ * seam as deep-recall-mcp-tools.ts). Spread back into `this.tools`
5
+ * (`...RECALL_NAVIGATION_MCP_TOOLS`); the migrated-operation mapping lives
6
+ * in access-mcp.ts's MCP_MIGRATED_OPERATIONS. The `remnic.` canonical alias
7
+ * is minted by withToolAliases at tools/list time.
8
+ *
9
+ * Gating: spread is conditional on `service.recallNavigationEnabled !== false`
10
+ * — the flag defaults TRUE, so the check treats an absent property (older
11
+ * service shape / test stub) as enabled and removes the tools from listing
12
+ * ONLY on an explicit false. Disabled config therefore yields tools absent
13
+ * from tools/list, not present-but-erroring.
14
+ */
15
+
16
+ import type { McpTool } from "./access-mcp.js";
17
+
18
+ export const RECALL_NAVIGATION_MCP_TOOLS: McpTool[] = [
19
+ {
20
+ name: "engram.memory_expand",
21
+ description:
22
+ "Re-render one memory a recall already served to this session at a deeper disclosure level (section or raw). Cheap follow-up — no fresh search. The id must come from this session's recent recall results.",
23
+ inputSchema: {
24
+ type: "object",
25
+ properties: {
26
+ memoryId: { type: "string", description: "Memory id (or [m:xxxx] handle) served by a recent recall. Required." },
27
+ sessionKey: { type: "string", description: "Session key whose recent recalls authorize the id. Required." },
28
+ disclosure: {
29
+ type: "string",
30
+ enum: ["section", "raw"],
31
+ description: "Target depth; must be deeper than the chunk preview already served. Default raw.",
32
+ },
33
+ namespace: { type: "string", description: "Caller namespace to scope this operation to." },
34
+ },
35
+ required: ["memoryId", "sessionKey"],
36
+ additionalProperties: false,
37
+ },
38
+ },
39
+ {
40
+ name: "engram.memory_traverse",
41
+ description:
42
+ "Follow typed links (supports/contradicts/elaborates/causes/caused_by/supersedes/follows/references/related) from a memory a recall already served to this session. Neighbors return as chunk-level summaries, optionally filtered by relation.",
43
+ inputSchema: {
44
+ type: "object",
45
+ properties: {
46
+ memoryId: { type: "string", description: "Memory id (or [m:xxxx] handle) served by a recent recall. Required." },
47
+ sessionKey: { type: "string", description: "Session key whose recent recalls authorize the id. Required." },
48
+ relation: {
49
+ type: "string",
50
+ enum: ["supports", "contradicts", "elaborates", "causes", "caused_by", "supersedes", "follows", "references", "related"],
51
+ description: "Optional relation filter; omitted means every known relation.",
52
+ },
53
+ limit: { type: "integer", minimum: 1, description: "Optional cap on returned neighbors (ceiling: recallNavigation.maxNeighbors)." },
54
+ namespace: { type: "string", description: "Caller namespace to scope this operation to." },
55
+ },
56
+ required: ["memoryId", "sessionKey"],
57
+ additionalProperties: false,
58
+ },
59
+ },
60
+ ];