@remnic/core 9.7.14 → 9.7.15

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 (349) hide show
  1. package/dist/access-admin-ops-surface.d.ts +6 -6
  2. package/dist/access-admin-ops-surface.js +22 -22
  3. package/dist/access-boundary.d.ts +6 -6
  4. package/dist/access-boundary.js +23 -23
  5. package/dist/access-cli.js +48 -48
  6. package/dist/access-http.d.ts +6 -6
  7. package/dist/access-http.js +28 -28
  8. package/dist/access-identity-continuity-surface.d.ts +5 -5
  9. package/dist/access-identity-continuity-surface.js +22 -22
  10. package/dist/access-lcm-surface.d.ts +6 -6
  11. package/dist/access-lcm-surface.js +22 -22
  12. package/dist/access-mcp.d.ts +6 -6
  13. package/dist/access-mcp.js +27 -27
  14. package/dist/access-observe-write-surface.d.ts +6 -6
  15. package/dist/access-observe-write-surface.js +22 -22
  16. package/dist/access-operations-batch.js +25 -25
  17. package/dist/access-operations.d.ts +9 -9
  18. package/dist/access-operations.js +26 -26
  19. package/dist/access-recall-surface.d.ts +6 -6
  20. package/dist/access-recall-surface.js +22 -22
  21. package/dist/access-schema.d.ts +64 -64
  22. package/dist/{access-service-CPhSnLOH.d.ts → access-service-DpcYZ9Nl.d.ts} +4 -4
  23. package/dist/access-service.d.ts +6 -6
  24. package/dist/access-service.js +22 -22
  25. package/dist/access-surface-catalog.d.ts +6 -6
  26. package/dist/action-confidence.d.ts +1 -1
  27. package/dist/active-memory-bridge.d.ts +1 -1
  28. package/dist/active-recall.d.ts +1 -1
  29. package/dist/active-recall.js +1 -1
  30. package/dist/behavior-learner.d.ts +1 -1
  31. package/dist/behavior-signals.d.ts +1 -1
  32. package/dist/bootstrap.d.ts +5 -5
  33. package/dist/briefing.d.ts +2 -2
  34. package/dist/briefing.js +6 -6
  35. package/dist/buffer-surprise-report.d.ts +1 -1
  36. package/dist/buffer.d.ts +2 -2
  37. package/dist/bulk-import/index.d.ts +3 -3
  38. package/dist/calibration.d.ts +1 -1
  39. package/dist/capabilities.d.ts +1 -1
  40. package/dist/{capsule-merge-Z2HUO6IK.js → capsule-merge-5KKJQBWQ.js} +4 -4
  41. package/dist/{catalog-uX9sT9ws.d.ts → catalog-C9444P10.d.ts} +1 -1
  42. package/dist/causal-behavior.d.ts +1 -1
  43. package/dist/causal-behavior.js +2 -2
  44. package/dist/causal-chain.js +2 -2
  45. package/dist/causal-consolidation.d.ts +1 -1
  46. package/dist/causal-consolidation.js +9 -9
  47. package/dist/causal-retrieval.js +2 -2
  48. package/dist/causal-trajectory-graph.d.ts +1 -1
  49. package/dist/causal-trajectory-graph.js +1 -1
  50. package/dist/causal-trajectory.js +1 -1
  51. package/dist/{chunk-2E6G7FCE.js → chunk-2AZXIZEN.js} +3 -3
  52. package/dist/{chunk-OBMR4VIX.js → chunk-2S6QHZGJ.js} +186 -15
  53. package/dist/chunk-2S6QHZGJ.js.map +1 -0
  54. package/dist/{chunk-5S7Z5SHA.js → chunk-34RC5RT7.js} +2 -2
  55. package/dist/{chunk-RBQLJSJ7.js → chunk-3IY64MV6.js} +4 -2
  56. package/dist/chunk-3IY64MV6.js.map +1 -0
  57. package/dist/{chunk-VZ5OJE4X.js → chunk-5VQJBH2G.js} +2 -2
  58. package/dist/{chunk-N3JDIRBW.js → chunk-74F5STS4.js} +2 -2
  59. package/dist/{chunk-OC35KQIN.js → chunk-A5UXZRRM.js} +3 -3
  60. package/dist/{chunk-OKUEZOGW.js → chunk-AITCS2RC.js} +2 -2
  61. package/dist/{chunk-7XGSIUP5.js → chunk-AJLLIIML.js} +1 -1
  62. package/dist/{chunk-EEARRVZ2.js → chunk-BS4SGLWV.js} +2 -2
  63. package/dist/{chunk-ND5M64JJ.js → chunk-DCFV7A7H.js} +6 -6
  64. package/dist/{chunk-7LFXDGLH.js → chunk-DMSDUGDM.js} +3 -3
  65. package/dist/{chunk-PK5XBDA6.js → chunk-DPAENM7O.js} +2 -2
  66. package/dist/{chunk-AHLPZ2SF.js → chunk-DYP3YYJJ.js} +7 -3
  67. package/dist/chunk-DYP3YYJJ.js.map +1 -0
  68. package/dist/{chunk-7MW3CVLD.js → chunk-DZKHSDOM.js} +2 -2
  69. package/dist/{chunk-HG32URJJ.js → chunk-E6CBU7XP.js} +2 -2
  70. package/dist/{chunk-DDGV7NAX.js → chunk-EHCONI6E.js} +2 -2
  71. package/dist/{chunk-4LEF6XWJ.js → chunk-FDCTQWLW.js} +2 -2
  72. package/dist/{chunk-VYOFVVNK.js → chunk-FIJUY7GG.js} +9 -9
  73. package/dist/{chunk-UTRJFDP2.js → chunk-FNZQGN76.js} +2 -2
  74. package/dist/{chunk-V53GJUSL.js → chunk-G4CN3ZXL.js} +6 -6
  75. package/dist/{chunk-IKSELOIV.js → chunk-G6XXLKC5.js} +3 -3
  76. package/dist/{chunk-KGWXHWAH.js → chunk-HDTQVNWD.js} +3 -3
  77. package/dist/{chunk-5UNWK7KU.js → chunk-HF77M34J.js} +2 -2
  78. package/dist/{chunk-IFJ23BHU.js → chunk-INELTPRG.js} +10 -1
  79. package/dist/chunk-INELTPRG.js.map +1 -0
  80. package/dist/{chunk-JMBVCAR4.js → chunk-JREB6UFH.js} +2 -2
  81. package/dist/{chunk-7ICYQUOL.js → chunk-K7LOWSLU.js} +38 -9
  82. package/dist/chunk-K7LOWSLU.js.map +1 -0
  83. package/dist/{chunk-MKDRQAA3.js → chunk-KDXVOFYY.js} +2 -2
  84. package/dist/{chunk-ZIDSD6VC.js → chunk-LRNMRXJO.js} +2 -2
  85. package/dist/{chunk-GMSDQUCR.js → chunk-LZOV7MX7.js} +12 -12
  86. package/dist/{chunk-ANADNYWK.js → chunk-OAZVR2BV.js} +3 -3
  87. package/dist/{chunk-F7AU34FC.js → chunk-OVJ2HIPE.js} +21 -21
  88. package/dist/{chunk-A7B4RMQG.js → chunk-PBNZVPFS.js} +3 -3
  89. package/dist/{chunk-B3F4CWQR.js → chunk-PBSAPHHA.js} +1 -1
  90. package/dist/chunk-PBSAPHHA.js.map +1 -0
  91. package/dist/{chunk-XVLEGMJI.js → chunk-PLQE6MJA.js} +2 -2
  92. package/dist/{chunk-NKCPUHCI.js → chunk-PQVK2S3J.js} +2 -2
  93. package/dist/{chunk-67ZCJLJY.js → chunk-Q5WG43OP.js} +3 -3
  94. package/dist/{chunk-ASKEM4AR.js → chunk-QKQYXZVS.js} +25 -23
  95. package/dist/chunk-QKQYXZVS.js.map +1 -0
  96. package/dist/{chunk-NUWYOKS6.js → chunk-QQGPUKMT.js} +2 -2
  97. package/dist/{chunk-NUWYOKS6.js.map → chunk-QQGPUKMT.js.map} +1 -1
  98. package/dist/{chunk-WU46YPY6.js → chunk-RAR2BSEM.js} +1 -1
  99. package/dist/{chunk-WU46YPY6.js.map → chunk-RAR2BSEM.js.map} +1 -1
  100. package/dist/{chunk-W5NKDU24.js → chunk-RO4LQGT3.js} +2 -2
  101. package/dist/{chunk-4B4MUS5D.js → chunk-RVZRYUQH.js} +2 -2
  102. package/dist/{chunk-FBNWOMCE.js → chunk-T7Y5KPLN.js} +2 -2
  103. package/dist/{chunk-HLTAPHZZ.js → chunk-UDQUSU27.js} +2 -2
  104. package/dist/{chunk-AD6AMF2N.js → chunk-VDW4VU7B.js} +5 -5
  105. package/dist/{chunk-6CALL5VN.js → chunk-VJVNLNDQ.js} +3 -3
  106. package/dist/{chunk-UN3CH3CO.js → chunk-XDSXEKYK.js} +2 -2
  107. package/dist/{chunk-X47LWMKA.js → chunk-XMMESCPD.js} +26 -1
  108. package/dist/chunk-XMMESCPD.js.map +1 -0
  109. package/dist/{chunk-TXVD7PLT.js → chunk-ZHIVCODT.js} +2 -2
  110. package/dist/{cli-_Y2Bmt6A.d.ts → cli-Cd5fMmhq.d.ts} +5 -5
  111. package/dist/cli.d.ts +8 -8
  112. package/dist/cli.js +42 -42
  113. package/dist/compounding/engine.d.ts +2 -2
  114. package/dist/compounding/engine.js +6 -6
  115. package/dist/compounding/preference-consolidator.d.ts +1 -1
  116. package/dist/compression-optimizer.d.ts +1 -1
  117. package/dist/config.d.ts +1 -1
  118. package/dist/config.js +1 -1
  119. package/dist/connectors/codex-materialize-runner.d.ts +1 -1
  120. package/dist/connectors/codex-materialize-runner.js +6 -6
  121. package/dist/connectors/codex-materialize.d.ts +1 -1
  122. package/dist/connectors/index.d.ts +1 -1
  123. package/dist/connectors/index.js +6 -6
  124. package/dist/consolidation-provenance-check.d.ts +2 -2
  125. package/dist/consolidation-provenance-check.js +4 -4
  126. package/dist/consolidation-undo.d.ts +2 -2
  127. package/dist/consolidation-undo.js +3 -3
  128. package/dist/contradiction/index.d.ts +2 -2
  129. package/dist/conversation-index/backend.d.ts +1 -1
  130. package/dist/conversation-index/chunker.d.ts +1 -1
  131. package/dist/conversation-index/faiss-adapter.d.ts +1 -1
  132. package/dist/conversation-index/indexer.d.ts +1 -1
  133. package/dist/conversation-index/search.d.ts +1 -1
  134. package/dist/day-summary.d.ts +1 -1
  135. package/dist/delinearize.d.ts +1 -1
  136. package/dist/direct-answer-wiring.d.ts +1 -1
  137. package/dist/direct-answer.d.ts +1 -1
  138. package/dist/embedding-fallback.d.ts +1 -1
  139. package/dist/enrichment/index.d.ts +1 -1
  140. package/dist/entity-retrieval.d.ts +2 -2
  141. package/dist/entity-retrieval.js +6 -6
  142. package/dist/entity-schema.d.ts +1 -1
  143. package/dist/explicit-capture.d.ts +5 -5
  144. package/dist/extraction-faithfulness.d.ts +1 -1
  145. package/dist/extraction-judge-telemetry.d.ts +1 -1
  146. package/dist/extraction-judge-training.d.ts +1 -1
  147. package/dist/extraction-judge.d.ts +1 -1
  148. package/dist/extraction.d.ts +1 -1
  149. package/dist/fallback-llm.d.ts +1 -1
  150. package/dist/graph-dashboard-diff.d.ts +1 -1
  151. package/dist/graph-dashboard-key.d.ts +1 -1
  152. package/dist/graph-dashboard-parser.d.ts +1 -1
  153. package/dist/{graph-edge-decay-FO7AM4UR.js → graph-edge-decay-IOGBBAGC.js} +3 -3
  154. package/dist/graph-edge-reinforcement.d.ts +1 -1
  155. package/dist/graph-snapshot.d.ts +1 -1
  156. package/dist/graph-snapshot.js +2 -2
  157. package/dist/graph.d.ts +55 -10
  158. package/dist/graph.js +1 -1
  159. package/dist/identity-continuity.d.ts +1 -1
  160. package/dist/importance.d.ts +1 -1
  161. package/dist/importers/index.d.ts +1 -1
  162. package/dist/in-flight-reads.d.ts +1 -1
  163. package/dist/index.d.ts +386 -386
  164. package/dist/index.js +48 -48
  165. package/dist/intent.d.ts +1 -1
  166. package/dist/lcm/engine.d.ts +1 -1
  167. package/dist/lcm/index.d.ts +1 -1
  168. package/dist/lcm/tools.d.ts +1 -1
  169. package/dist/lifecycle.d.ts +1 -1
  170. package/dist/live-connectors-runner.d.ts +1 -1
  171. package/dist/local-llm.d.ts +1 -1
  172. package/dist/local-model-endpoint.d.ts +1 -1
  173. package/dist/maintenance/memory-governance.d.ts +1 -1
  174. package/dist/maintenance/memory-governance.js +6 -6
  175. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +6 -6
  176. package/dist/maintenance/rebuild-memory-projection.js +7 -7
  177. package/dist/mcp-memory-inspector-app.d.ts +6 -6
  178. package/dist/memory-action-policy.d.ts +1 -1
  179. package/dist/memory-cache.d.ts +44 -2
  180. package/dist/memory-cache.js +7 -1
  181. package/dist/memory-corpus-version.js +2 -2
  182. package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
  183. package/dist/memory-projection-store.d.ts +1 -1
  184. package/dist/memory-provenance.d.ts +1 -1
  185. package/dist/memory-worth-outcomes.d.ts +2 -2
  186. package/dist/models-json.d.ts +1 -1
  187. package/dist/namespaces/migrate.d.ts +3 -3
  188. package/dist/namespaces/migrate.js +15 -15
  189. package/dist/namespaces/principal.d.ts +1 -1
  190. package/dist/namespaces/search.d.ts +1 -1
  191. package/dist/namespaces/search.js +9 -9
  192. package/dist/namespaces/storage.d.ts +3 -3
  193. package/dist/namespaces/storage.js +6 -6
  194. package/dist/native-knowledge.d.ts +1 -1
  195. package/dist/operator-toolkit.d.ts +2 -2
  196. package/dist/operator-toolkit.js +21 -21
  197. package/dist/orchestration/compression-guideline-coordinator.d.ts +2 -2
  198. package/dist/orchestration/maintenance.d.ts +2 -2
  199. package/dist/orchestration/maintenance.js +8 -8
  200. package/dist/{orchestrator-BbZ_dQSU.d.ts → orchestrator-Bp_jeBHK.d.ts} +4 -4
  201. package/dist/orchestrator.d.ts +5 -5
  202. package/dist/orchestrator.js +48 -48
  203. package/dist/page-versioning.js +3 -3
  204. package/dist/patterns-cli.d.ts +1 -1
  205. package/dist/{pipeline-FRMDb1fn.d.ts → pipeline-BAj5bx7g.d.ts} +1 -1
  206. package/dist/policy-runtime.d.ts +1 -1
  207. package/dist/provenance.d.ts +1 -1
  208. package/dist/{qmd-xJRrHFbA.d.ts → qmd-_MDSlj1m.d.ts} +1 -1
  209. package/dist/qmd-preflight.d.ts +2 -2
  210. package/dist/qmd-recall-cache.d.ts +1 -1
  211. package/dist/qmd.d.ts +2 -2
  212. package/dist/qmd.js +3 -3
  213. package/dist/recall-disclosure-escalation.d.ts +1 -1
  214. package/dist/recall-explain-renderer.d.ts +1 -1
  215. package/dist/recall-explain-renderer.js +3 -3
  216. package/dist/recall-planner-llm.d.ts +1 -1
  217. package/dist/recall-state.d.ts +1 -1
  218. package/dist/recall-tag-filter.d.ts +1 -1
  219. package/dist/recall-timings.d.ts +1 -1
  220. package/dist/recall-xray-cli.d.ts +1 -1
  221. package/dist/recall-xray-cli.js +4 -4
  222. package/dist/recall-xray-renderer.d.ts +1 -1
  223. package/dist/recall-xray-renderer.js +3 -3
  224. package/dist/recall-xray.d.ts +1 -1
  225. package/dist/recall-xray.js +2 -2
  226. package/dist/replay/normalizers/chatgpt.d.ts +1 -1
  227. package/dist/replay/normalizers/claude.d.ts +1 -1
  228. package/dist/replay/normalizers/openclaw.d.ts +1 -1
  229. package/dist/replay/normalizers/shared.d.ts +1 -1
  230. package/dist/replay/runner.d.ts +1 -1
  231. package/dist/replay/types.d.ts +1 -1
  232. package/dist/resolve-auth-token.d.ts +1 -1
  233. package/dist/resume-bundles.js +2 -2
  234. package/dist/retrieval-agents.d.ts +2 -2
  235. package/dist/retrieval-tiers.d.ts +1 -1
  236. package/dist/routing/engine.d.ts +1 -1
  237. package/dist/routing/store.d.ts +1 -1
  238. package/dist/schemas.d.ts +74 -74
  239. package/dist/search/embed-helper.d.ts +1 -1
  240. package/dist/search/factory.d.ts +1 -1
  241. package/dist/search/factory.js +8 -8
  242. package/dist/search/index.d.ts +1 -1
  243. package/dist/search/index.js +8 -8
  244. package/dist/search/lancedb-backend.d.ts +1 -1
  245. package/dist/search/lancedb-backend.js +2 -2
  246. package/dist/search/meilisearch-backend.d.ts +1 -1
  247. package/dist/search/meilisearch-backend.js +2 -2
  248. package/dist/search/noop-backend.d.ts +1 -1
  249. package/dist/search/orama-backend.d.ts +1 -1
  250. package/dist/search/orama-backend.js +2 -2
  251. package/dist/search/port.d.ts +12 -1
  252. package/dist/search/port.js +1 -1
  253. package/dist/search/remote-backend.d.ts +1 -1
  254. package/dist/search/remote-backend.js +2 -2
  255. package/dist/{semantic-consolidation-fvdZRa5Z.d.ts → semantic-consolidation-C2m5eHHE.d.ts} +1 -1
  256. package/dist/semantic-consolidation.d.ts +2 -2
  257. package/dist/semantic-consolidation.js +7 -7
  258. package/dist/semantic-rule-promotion.js +6 -6
  259. package/dist/semantic-rule-verifier.d.ts +1 -1
  260. package/dist/semantic-rule-verifier.js +6 -6
  261. package/dist/session-observer-bands.d.ts +1 -1
  262. package/dist/session-observer-state.d.ts +1 -1
  263. package/dist/shared-context/manager.d.ts +9 -9
  264. package/dist/signal.d.ts +1 -1
  265. package/dist/{storage-CrvzaM9C.d.ts → storage-hr_Y2z5R.d.ts} +17 -1
  266. package/dist/storage.d.ts +2 -2
  267. package/dist/storage.js +5 -5
  268. package/dist/summarizer.d.ts +1 -1
  269. package/dist/summary-snapshot.d.ts +1 -1
  270. package/dist/temporal-supersession.d.ts +2 -2
  271. package/dist/temporal-timeline-recall.d.ts +1 -1
  272. package/dist/temporal-validity.d.ts +1 -1
  273. package/dist/threading.d.ts +1 -1
  274. package/dist/tier-migration.d.ts +2 -2
  275. package/dist/tier-routing.d.ts +1 -1
  276. package/dist/topics.d.ts +1 -1
  277. package/dist/transcript.d.ts +1 -1
  278. package/dist/transfer/capsule-import.js +4 -4
  279. package/dist/transfer/types.d.ts +66 -66
  280. package/dist/trust-score-stage.d.ts +1 -1
  281. package/dist/trust-score.d.ts +1 -1
  282. package/dist/{types-Bl4BWDM8.d.ts → types-Cg8q7W7_.d.ts} +10 -0
  283. package/dist/types.d.ts +1 -1
  284. package/dist/types.js +1 -1
  285. package/dist/utility-runtime.d.ts +1 -1
  286. package/dist/verified-recall.js +6 -6
  287. package/package.json +2 -2
  288. package/src/config.ts +9 -0
  289. package/src/graph.test.ts +137 -1
  290. package/src/graph.ts +274 -17
  291. package/src/memory-cache.ts +70 -0
  292. package/src/namespaces/storage.ts +2 -0
  293. package/src/orchestration/maintenance.ts +7 -0
  294. package/src/orchestration/workspace-ops.ts +4 -0
  295. package/src/orchestrator.ts +6 -1
  296. package/src/qmd.test.ts +22 -0
  297. package/src/qmd.ts +13 -1
  298. package/src/search/port.ts +11 -0
  299. package/src/storage.ts +60 -13
  300. package/src/types.ts +15 -0
  301. package/dist/chunk-7ICYQUOL.js.map +0 -1
  302. package/dist/chunk-AHLPZ2SF.js.map +0 -1
  303. package/dist/chunk-ASKEM4AR.js.map +0 -1
  304. package/dist/chunk-B3F4CWQR.js.map +0 -1
  305. package/dist/chunk-IFJ23BHU.js.map +0 -1
  306. package/dist/chunk-OBMR4VIX.js.map +0 -1
  307. package/dist/chunk-RBQLJSJ7.js.map +0 -1
  308. package/dist/chunk-X47LWMKA.js.map +0 -1
  309. /package/dist/{capsule-merge-Z2HUO6IK.js.map → capsule-merge-5KKJQBWQ.js.map} +0 -0
  310. /package/dist/{chunk-2E6G7FCE.js.map → chunk-2AZXIZEN.js.map} +0 -0
  311. /package/dist/{chunk-5S7Z5SHA.js.map → chunk-34RC5RT7.js.map} +0 -0
  312. /package/dist/{chunk-VZ5OJE4X.js.map → chunk-5VQJBH2G.js.map} +0 -0
  313. /package/dist/{chunk-N3JDIRBW.js.map → chunk-74F5STS4.js.map} +0 -0
  314. /package/dist/{chunk-OC35KQIN.js.map → chunk-A5UXZRRM.js.map} +0 -0
  315. /package/dist/{chunk-OKUEZOGW.js.map → chunk-AITCS2RC.js.map} +0 -0
  316. /package/dist/{chunk-7XGSIUP5.js.map → chunk-AJLLIIML.js.map} +0 -0
  317. /package/dist/{chunk-EEARRVZ2.js.map → chunk-BS4SGLWV.js.map} +0 -0
  318. /package/dist/{chunk-ND5M64JJ.js.map → chunk-DCFV7A7H.js.map} +0 -0
  319. /package/dist/{chunk-7LFXDGLH.js.map → chunk-DMSDUGDM.js.map} +0 -0
  320. /package/dist/{chunk-PK5XBDA6.js.map → chunk-DPAENM7O.js.map} +0 -0
  321. /package/dist/{chunk-7MW3CVLD.js.map → chunk-DZKHSDOM.js.map} +0 -0
  322. /package/dist/{chunk-HG32URJJ.js.map → chunk-E6CBU7XP.js.map} +0 -0
  323. /package/dist/{chunk-DDGV7NAX.js.map → chunk-EHCONI6E.js.map} +0 -0
  324. /package/dist/{chunk-4LEF6XWJ.js.map → chunk-FDCTQWLW.js.map} +0 -0
  325. /package/dist/{chunk-VYOFVVNK.js.map → chunk-FIJUY7GG.js.map} +0 -0
  326. /package/dist/{chunk-UTRJFDP2.js.map → chunk-FNZQGN76.js.map} +0 -0
  327. /package/dist/{chunk-V53GJUSL.js.map → chunk-G4CN3ZXL.js.map} +0 -0
  328. /package/dist/{chunk-IKSELOIV.js.map → chunk-G6XXLKC5.js.map} +0 -0
  329. /package/dist/{chunk-KGWXHWAH.js.map → chunk-HDTQVNWD.js.map} +0 -0
  330. /package/dist/{chunk-5UNWK7KU.js.map → chunk-HF77M34J.js.map} +0 -0
  331. /package/dist/{chunk-JMBVCAR4.js.map → chunk-JREB6UFH.js.map} +0 -0
  332. /package/dist/{chunk-MKDRQAA3.js.map → chunk-KDXVOFYY.js.map} +0 -0
  333. /package/dist/{chunk-ZIDSD6VC.js.map → chunk-LRNMRXJO.js.map} +0 -0
  334. /package/dist/{chunk-GMSDQUCR.js.map → chunk-LZOV7MX7.js.map} +0 -0
  335. /package/dist/{chunk-ANADNYWK.js.map → chunk-OAZVR2BV.js.map} +0 -0
  336. /package/dist/{chunk-F7AU34FC.js.map → chunk-OVJ2HIPE.js.map} +0 -0
  337. /package/dist/{chunk-A7B4RMQG.js.map → chunk-PBNZVPFS.js.map} +0 -0
  338. /package/dist/{chunk-XVLEGMJI.js.map → chunk-PLQE6MJA.js.map} +0 -0
  339. /package/dist/{chunk-NKCPUHCI.js.map → chunk-PQVK2S3J.js.map} +0 -0
  340. /package/dist/{chunk-67ZCJLJY.js.map → chunk-Q5WG43OP.js.map} +0 -0
  341. /package/dist/{chunk-W5NKDU24.js.map → chunk-RO4LQGT3.js.map} +0 -0
  342. /package/dist/{chunk-4B4MUS5D.js.map → chunk-RVZRYUQH.js.map} +0 -0
  343. /package/dist/{chunk-FBNWOMCE.js.map → chunk-T7Y5KPLN.js.map} +0 -0
  344. /package/dist/{chunk-HLTAPHZZ.js.map → chunk-UDQUSU27.js.map} +0 -0
  345. /package/dist/{chunk-AD6AMF2N.js.map → chunk-VDW4VU7B.js.map} +0 -0
  346. /package/dist/{chunk-6CALL5VN.js.map → chunk-VJVNLNDQ.js.map} +0 -0
  347. /package/dist/{chunk-UN3CH3CO.js.map → chunk-XDSXEKYK.js.map} +0 -0
  348. /package/dist/{chunk-TXVD7PLT.js.map → chunk-ZHIVCODT.js.map} +0 -0
  349. /package/dist/{graph-edge-decay-FO7AM4UR.js.map → graph-edge-decay-IOGBBAGC.js.map} +0 -0
@@ -312,6 +312,8 @@ export class NamespaceStorageRouter {
312
312
  this.config.hotMemoriesCacheEnabled,
313
313
  this.config.hotMemoriesCacheTtlMs,
314
314
  );
315
+ const { scopedCacheInvalidationEnabled } = this.config;
316
+ StorageManager.setScopedCacheInvalidationDefault(root, scopedCacheInvalidationEnabled);
315
317
  // Propagate the inline-attribution template so that router-created storages
316
318
  // (used by extraction and shared-promotion paths) strip citations consistently,
317
319
  // matching the behaviour of the primary this.storage instance in the orchestrator.
@@ -523,6 +523,13 @@ export class MaintenanceScheduler {
523
523
  this.lastQmdEmbedAtMs = now;
524
524
  }
525
525
  }
526
+ // Note: a successful QMD update/embed clears the global QMD result caches
527
+ // itself (QmdClient.runUpdateForCollection / runEmbedForCollection), so
528
+ // this scheduler does not invalidate them here — every refresh path
529
+ // (direct update, namespace router, wearable/OpenClaw sync) funnels through
530
+ // the backend and clears centrally. A no-op pass (throttle/unavailable/
531
+ // backoff) does not advance lastUpdateRanAtMs, so it leaves caches warm
532
+ // (#1904, Codex/Cursor).
526
533
  } finally {
527
534
  this.qmdMaintenanceInFlight = false;
528
535
  if (this.qmdMaintenancePending) {
@@ -646,6 +646,10 @@ export class WorkspaceOpsCoordinator {
646
646
  },
647
647
  },
648
648
  reindexSearch: async () => {
649
+ // qmd.update() clears the global QMD result caches itself on success
650
+ // (QmdClient.runUpdateForCollection), so newly-indexed wearable
651
+ // transcript/fact content is never hidden by a pre-sync cache entry
652
+ // (#1904, Codex).
649
653
  await this.deps.qmd.update();
650
654
  },
651
655
  });
@@ -1338,12 +1338,16 @@ export class Orchestrator {
1338
1338
  // — including the ephemeral ones recall sub-stages build over the same dir
1339
1339
  // — honors the operator's setting. Destructured (not `config.<flag>`) so
1340
1340
  // this single access-layer read stays off the scattered-flag ratchet.
1341
- const { hotMemoriesCacheEnabled } = config;
1341
+ const { hotMemoriesCacheEnabled, scopedCacheInvalidationEnabled } = config;
1342
1342
  StorageManager.setHotMemoriesCacheDefault(
1343
1343
  config.memoryDir,
1344
1344
  hotMemoriesCacheEnabled,
1345
1345
  config.hotMemoriesCacheTtlMs,
1346
1346
  );
1347
+ // Register the #1904 scope-invalidation gate for this dir so every
1348
+ // StorageManager over it (including ephemeral recall sub-stage instances)
1349
+ // honors the operator's rollback lever.
1350
+ StorageManager.setScopedCacheInvalidationDefault(config.memoryDir, scopedCacheInvalidationEnabled);
1347
1351
  this.profiler = new ProfilingCollector({
1348
1352
  enabled: resolvePipelineProcessingCapabilities(this.config).profiling,
1349
1353
  storageDir: config.profilingStorageDir || path.join(config.memoryDir, "profiling"),
@@ -1512,6 +1516,7 @@ export class Orchestrator {
1512
1516
  config.hotMemoriesCacheEnabled,
1513
1517
  config.hotMemoriesCacheTtlMs,
1514
1518
  );
1519
+ StorageManager.setScopedCacheInvalidationDefault(parentDir, scopedCacheInvalidationEnabled);
1515
1520
  return new StorageManager(parentDir, config.entitySchemas, config.hotMemoriesCacheEnabled);
1516
1521
  },
1517
1522
  });
package/src/qmd.test.ts CHANGED
@@ -357,6 +357,28 @@ test("QmdClient keeps legacy --json for older QMD query subprocess output", asyn
357
357
  ]);
358
358
  });
359
359
 
360
+ test("QmdClient clears the global QMD result caches on a successful refresh (#1904)", async () => {
361
+ // The centralized invalidation lives in QmdClient.runUpdateForCollection /
362
+ // runEmbedForCollection so every refresh path (direct update, namespace
363
+ // router, wearable/OpenClaw sync) invalidates the cached pre-refresh bundles
364
+ // without each caller having to remember. Defend that contract.
365
+ const { QmdClient } = await import("./qmd.js");
366
+ const { setCachedQmdSearch, getCachedQmdSearch } = await import("./memory-cache.js");
367
+ const client = new QmdClient("test", 5) as any;
368
+ client.available = true;
369
+ client.runQmdCommand = async () => ({ stdout: "", stderr: "" });
370
+ setCachedQmdSearch("stale-bundle", [{ path: "facts/old.md" }]);
371
+ assert.notEqual(getCachedQmdSearch("stale-bundle"), null, "cache populated before refresh");
372
+ // updateCollectionStrict uses force=true, bypassing throttle/backoff gates so
373
+ // the refresh deterministically reaches the success point that clears caches.
374
+ await client.updateCollectionStrict("test");
375
+ assert.equal(
376
+ getCachedQmdSearch("stale-bundle"),
377
+ null,
378
+ "a successful refresh must clear the cached pre-refresh QMD bundle",
379
+ );
380
+ });
381
+
360
382
  test("parseQmdExplain preserves qmd 2.5 nested RRF trace fields", () => {
361
383
  assert.deepEqual(
362
384
  parseQmdExplain({
package/src/qmd.ts CHANGED
@@ -2,7 +2,7 @@ import { createHash } from "node:crypto";
2
2
  import os from "node:os";
3
3
  import path from "node:path";
4
4
  import { log } from "./logger.js";
5
- import { getCachedQmdSearch, setCachedQmdSearch } from "./memory-cache.js";
5
+ import { clearQmdResultCaches, getCachedQmdSearch, setCachedQmdSearch } from "./memory-cache.js";
6
6
  import {
7
7
  abortError,
8
8
  isAbortError,
@@ -2739,6 +2739,13 @@ export class QmdClient implements SearchBackend {
2739
2739
  this.lastUpdateRunAtMs = at;
2740
2740
  globalState.lastGlobalUpdateRunAtMs = at;
2741
2741
  }
2742
+ // A successful index refresh makes newly-persisted facts searchable, so
2743
+ // any cached pre-refresh QMD search/recall bundle is now stale. Clear the
2744
+ // global QMD result caches here, at the single success point EVERY update
2745
+ // path funnels through (direct calls, wearable/OpenClaw sync reindex, and
2746
+ // the namespace router's per-backend update), so no caller can forget and
2747
+ // serve a stale bundle past the refresh (#1904, Codex/Cursor).
2748
+ clearQmdResultCaches();
2742
2749
  log.debug(`QMD update completed for collection=${name}`);
2743
2750
  } catch (err) {
2744
2751
  const at = Date.now();
@@ -2853,6 +2860,9 @@ export class QmdClient implements SearchBackend {
2853
2860
  globalState.lastEmbedByCollectionMs[name] = at;
2854
2861
  }
2855
2862
  globalState.lastGlobalEmbedRunAtMs = at;
2863
+ // A successful embed changes vector searchability, so cached pre-embed
2864
+ // bundles may now be stale. Clear at this single success point (#1904).
2865
+ clearQmdResultCaches();
2856
2866
  log.debug(`QMD embed completed for collection=${name}`);
2857
2867
  } catch (err) {
2858
2868
  let failure: unknown = err;
@@ -2869,6 +2879,8 @@ export class QmdClient implements SearchBackend {
2869
2879
  }
2870
2880
  globalState.lastGlobalEmbedRunAtMs = recoveredAt;
2871
2881
  globalState.lastGlobalEmbedFailAtMs = null;
2882
+ // Recovery also changed vector searchability — clear cached bundles.
2883
+ clearQmdResultCaches();
2872
2884
  log.warn(`QMD embed for collection ${name} recovered by forcing a full vector rebuild`);
2873
2885
  return;
2874
2886
  } catch (retryErr) {
@@ -119,6 +119,17 @@ export interface SearchBackend {
119
119
 
120
120
  // ── Maintenance ──
121
121
  update(execution?: SearchExecutionOptions): Promise<void>;
122
+ /**
123
+ * Wall-clock ms of the most recent SUCCESSFUL index refresh, or null when the
124
+ * backend has never run one. Ordinary update() is fail-open: it returns
125
+ * silently (without throwing or advancing this timestamp) when the backend is
126
+ * unavailable or the call is suppressed by a min-interval / failure backoff.
127
+ * Callers that must know whether update() actually indexed — so they can
128
+ * invalidate dependent caches only on a real refresh — snapshot this before
129
+ * the call and treat the backend as refreshed iff the value advanced. Optional
130
+ * because not every backend tracks it; absent means "assume refreshed".
131
+ */
132
+ readonly lastUpdateRanAtMs?: number | null;
122
133
  /**
123
134
  * Optional strict refresh used by callers that must know whether the backend
124
135
  * was actually refreshed before writing success markers. Ordinary update
package/src/storage.ts CHANGED
@@ -33,6 +33,8 @@ import {
33
33
  getCachedMemories,
34
34
  invalidateAllForDir,
35
35
  invalidateDerivedAndGlobalForDir,
36
+ invalidateForScope,
37
+ invalidateForScopeExceptHot,
36
38
  setCachedEntities,
37
39
  setCachedMemories,
38
40
  updateCacheOnDelete,
@@ -2385,6 +2387,17 @@ export class StorageManager {
2385
2387
  */
2386
2388
  private static hotMemoriesCacheProcessDefaultSeeded = false;
2387
2389
 
2390
+ /**
2391
+ * Per-memory-directory gate for scope-aware cache invalidation (issue #1904).
2392
+ * Registered from config by the orchestrator via
2393
+ * setScopedCacheInvalidationDefault() so every StorageManager built over a
2394
+ * memory dir — including ephemeral recall sub-stage instances — honors the
2395
+ * operator's setting. Unregistered dirs default to `true` (scoped on). Set
2396
+ * `false` to restore the pre-#1904 full-clear-per-write behavior (rollback
2397
+ * lever). Read once per write via isScopedCacheInvalidationEnabled().
2398
+ */
2399
+ private static readonly scopedCacheInvalidationByDir = new Map<string, boolean>();
2400
+
2388
2401
  // Module-level maps for readAllMemories() keyed by base directory, shared
2389
2402
  // across all StorageManager instances (static) so concurrent callers over
2390
2403
  // the same dir cooperate.
@@ -2752,6 +2765,15 @@ export class StorageManager {
2752
2765
  }
2753
2766
  }
2754
2767
 
2768
+ /** Register the operator's scope-aware cache invalidation gate for a memory
2769
+ * dir (issue #1904). The orchestrator/access layer calls this with
2770
+ * the operator's scopedCacheInvalidationEnabled flag so the setting reaches every
2771
+ * StorageManager built over the dir, including ephemeral recall-sub-stage
2772
+ * instances. Only an explicit `false` disables; `undefined` leaves it on. */
2773
+ static setScopedCacheInvalidationDefault(memoryDir: string, enabled: boolean | undefined): void {
2774
+ StorageManager.scopedCacheInvalidationByDir.set(memoryDir, enabled !== false);
2775
+ }
2776
+
2755
2777
  /**
2756
2778
  * The LIVE class object of this instance (issue #1809 review of the
2757
2779
  * storage decomposition): extracted store modules must read/write the
@@ -4110,7 +4132,7 @@ export class StorageManager {
4110
4132
 
4111
4133
  await this.snapshotBeforeWrite(filePath, "write");
4112
4134
  await this.writeStorageSecureFile(filePath, fileContent);
4113
- await this.patchHotMemoriesCache({ addedPath: filePath });
4135
+ await this.patchHotMemoriesCache({ addedPath: filePath }, "memory-create");
4114
4136
  await this.appendGeneratedMemoryLifecycleEventFailOpen("storage.writeMemory", {
4115
4137
  memoryId: id,
4116
4138
  eventType: "created",
@@ -4559,6 +4581,10 @@ export class StorageManager {
4559
4581
  StorageManager.hotMemoriesCacheDefault = true;
4560
4582
  StorageManager.hotMemoriesCacheTtlMs = 60_000;
4561
4583
  StorageManager.hotMemoriesCacheProcessDefaultSeeded = false;
4584
+ // Reset the #1904 scope-invalidation gate so a legacy-mode (=false) test
4585
+ // dir cannot leak its setting into a later test constructing over a reused
4586
+ // temp path.
4587
+ StorageManager.scopedCacheInvalidationByDir.clear();
4562
4588
  }
4563
4589
 
4564
4590
  /** Cancel any in-flight concurrent read so the next readAllMemories()
@@ -4579,13 +4605,21 @@ export class StorageManager {
4579
4605
  // corpus sentinel too so PEER processes rescan instead of serving a warm
4580
4606
  // pre-mutation corpus entry (issue #1902 cross-process coherence).
4581
4607
  this.bumpMemoryCorpusVersion();
4582
- // Invalidation chokepoint (issue #1535): eagerly evict EVERY process-level
4583
- // cache layer that can serve memory-derived content for this dir hot,
4584
- // archive, entity, derived episode/rule views, and both QMD result caches
4585
- // (qmdSearchCache and qmdRecallCache). Before this call was added, the QMD
4586
- // recall cache was never invalidated on mutations, so recall served
4587
- // pre-edit bundles for the remainder of its fresh/stale TTL window.
4588
- invalidateAllForDir(this.baseDir);
4608
+ // Invalidation chokepoint (issue #1535 / #1904): evict the layers a
4609
+ // memory-mutate can affect hot, archive, derived episode/rule views, and
4610
+ // both QMD result caches (qmdSearchCache and qmdRecallCache). Before the QMD
4611
+ // caches were invalidated on mutations, recall served pre-edit bundles for
4612
+ // the remainder of its fresh/stale TTL window. The `entities` layer is NOT
4613
+ // in memory-mutate scope: these funnel callers (update/frontmatter/move/
4614
+ // archive/invalidate/bulk/offline-sync) never rewrite entity files, and the
4615
+ // ones that touch entity-derived state additionally bump the status version
4616
+ // (which does the full clear). scopedCacheInvalidationEnabled=false restores
4617
+ // the pre-#1904 full clear of every layer (rollback lever).
4618
+ if (StorageManager.scopedCacheInvalidationByDir.get(this.baseDir) ?? true) {
4619
+ invalidateForScope(this.baseDir, "memory-mutate");
4620
+ } else {
4621
+ invalidateAllForDir(this.baseDir);
4622
+ }
4589
4623
  // Issue #1579 — tombstone store is a cache layer too (rule 25: clear ALL
4590
4624
  // cache layers). A tombstone append from another path (supersession /
4591
4625
  // correction) must be visible to the next writeMemory lookup on this
@@ -4614,7 +4648,10 @@ export class StorageManager {
4614
4648
  * coherence is preserved. Bulk/ambiguous mutations keep the wholesale
4615
4649
  * invalidateAllMemoriesCache() drop instead (issue #1902 Step 5).
4616
4650
  */
4617
- private async patchHotMemoriesCache(opts: { addedPath?: string; removedPath?: string }): Promise<void> {
4651
+ private async patchHotMemoriesCache(
4652
+ opts: { addedPath?: string; removedPath?: string },
4653
+ scope: "memory-create" | "memory-mutate" = "memory-mutate",
4654
+ ): Promise<void> {
4618
4655
  const prevVersion = this.getMemoryCorpusVersion();
4619
4656
  // Snapshot the key identity once (issue #1902, Codex Medium): a mid-await
4620
4657
  // setSecureStoreKey change would otherwise let the post-await patch/re-key
@@ -4684,9 +4721,19 @@ export class StorageManager {
4684
4721
  const patched = getCachedMemories(this.baseDir, prevVersion, keyId);
4685
4722
  if (patched) setCachedMemories(this.baseDir, patched, produced, keyId, this.hotCacheTtlMs());
4686
4723
  }
4687
- // Evict every OTHER layer; the hot layer is patched (or intentionally left
4688
- // to be version-rejected) above, not dropped here.
4689
- invalidateDerivedAndGlobalForDir(this.baseDir);
4724
+ // Evict the non-hot layers; the hot layer is patched (or intentionally left
4725
+ // to be version-rejected) above, not dropped here. Scope-aware (issue #1904):
4726
+ // a `memory-create` evicts ONLY the derived episode/rule views, keeping the
4727
+ // global QMD result caches and the version-keyed entity cache warm (a create
4728
+ // adds a doc that is not yet in the QMD index and changes no existing doc's
4729
+ // recall visibility). A `memory-mutate` (or scoped-off rollback) still evicts
4730
+ // the derived + global QMD views so a superseded/edited memory cannot resurface
4731
+ // from a stale recall bundle (issue #1535 correctness contract).
4732
+ if (scope === "memory-create" && (StorageManager.scopedCacheInvalidationByDir.get(this.baseDir) ?? true)) {
4733
+ invalidateForScopeExceptHot(this.baseDir, "memory-create");
4734
+ } else {
4735
+ invalidateDerivedAndGlobalForDir(this.baseDir);
4736
+ }
4690
4737
  if (this.tombstoneStore) {
4691
4738
  this.tombstoneStore.invalidate();
4692
4739
  this.tombstoneStore = null;
@@ -6648,7 +6695,7 @@ export class StorageManager {
6648
6695
  await this.writeStorageSecureFile(filePath, fileContent);
6649
6696
  // Keep the version-keyed hot-memories cache coherent with the new chunk
6650
6697
  // file (issue #1902) — same single-file patch path writeMemory uses.
6651
- await this.patchHotMemoriesCache({ addedPath: filePath });
6698
+ await this.patchHotMemoriesCache({ addedPath: filePath }, "memory-create");
6652
6699
  log.debug(`wrote chunk ${id} (${chunkIndex + 1}/${chunkTotal}) to ${filePath}`);
6653
6700
  return id;
6654
6701
  }
package/src/types.ts CHANGED
@@ -1054,6 +1054,15 @@ export interface PluginConfig {
1054
1054
  * pure-daemon deployments with no external edits).
1055
1055
  */
1056
1056
  hotMemoriesCacheTtlMs: number;
1057
+ /**
1058
+ * Scope-aware cache invalidation (issue #1904). When true (default), a memory
1059
+ * write evicts only the cache layers it can actually affect — a plain fact
1060
+ * `create` no longer nukes the global QMD result caches or the version-keyed
1061
+ * entity cache, so continuous extraction stops keeping every cache
1062
+ * permanently cold. Set false to restore the pre-#1904 behavior of clearing
1063
+ * every layer on every write (rollback lever; no featureset change).
1064
+ */
1065
+ scopedCacheInvalidationEnabled: boolean;
1057
1066
  // Unified TrustScore recall stage (issue #1577). Combines memory-worth,
1058
1067
  // provenance, faithfulness, corroboration, contradiction, feedback, recency,
1059
1068
  // and optional domain calibration into one [0,1] trust score applied as a
@@ -1993,6 +2002,12 @@ export interface PluginConfig {
1993
2002
  tagRecallMaxMatches: number;
1994
2003
  // v8.2 multi-graph memory (PR 18)
1995
2004
  multiGraphMemoryEnabled: boolean;
2005
+ // Incremental GraphIndex edge cache (issue #1904). When true (default), a
2006
+ // single-writer edge append is pushed into the warm edge cache in place
2007
+ // (revalidated by file size for cross-process coherence) instead of nulling
2008
+ // the 6 MB / 30k-edge cache and re-reading + re-parsing it (2-4 s). Set false
2009
+ // to restore the pre-#1904 behavior of nulling the edge cache on every write.
2010
+ graphEdgeCacheIncrementalEnabled: boolean;
1996
2011
  // v8.2 PR 19A: graph recall planner gating
1997
2012
  graphRecallEnabled: boolean;
1998
2013
  graphRecallMaxExpansions: number;