@remnic/core 9.48.1 → 9.49.1

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 (616) hide show
  1. package/dist/abstraction-nodes.d.ts +12 -1
  2. package/dist/abstraction-nodes.js +9 -2
  3. package/dist/access-admin-ops-surface.d.ts +11 -10
  4. package/dist/access-admin-ops-surface.js +46 -45
  5. package/dist/access-audit.js +2 -2
  6. package/dist/access-authorization-probe.d.ts +11 -10
  7. package/dist/access-authorization-probe.js +47 -46
  8. package/dist/access-boundary.d.ts +11 -10
  9. package/dist/access-boundary.js +46 -45
  10. package/dist/access-cli.js +127 -121
  11. package/dist/access-cli.js.map +1 -1
  12. package/dist/access-coding-context-resolution.d.ts +1 -1
  13. package/dist/access-extraction-force-flush.d.ts +11 -10
  14. package/dist/access-extraction-force-flush.js +46 -45
  15. package/dist/access-health-types.d.ts +1 -1
  16. package/dist/access-http-lcm-compaction.d.ts +11 -10
  17. package/dist/access-http-lifecycle-flush.d.ts +11 -10
  18. package/dist/access-http-offline-stream.d.ts +11 -10
  19. package/dist/access-http-query.js +46 -45
  20. package/dist/access-http.d.ts +11 -10
  21. package/dist/access-http.js +57 -56
  22. package/dist/access-identity-continuity-surface.d.ts +9 -8
  23. package/dist/access-identity-continuity-surface.js +46 -45
  24. package/dist/access-lcm-surface.d.ts +11 -10
  25. package/dist/access-lcm-surface.js +46 -45
  26. package/dist/access-mcp.d.ts +11 -10
  27. package/dist/access-mcp.js +52 -51
  28. package/dist/access-memory-search-fanout.d.ts +2 -2
  29. package/dist/{access-namespace-preflight--H6HwN85.d.ts → access-namespace-preflight-DuDU301-.d.ts} +1 -1
  30. package/dist/access-namespace-preflight.d.ts +3 -3
  31. package/dist/access-namespace-preflight.js +46 -45
  32. package/dist/access-observe-write-surface.d.ts +11 -10
  33. package/dist/access-observe-write-surface.js +46 -45
  34. package/dist/access-offline-manifest.d.ts +9 -8
  35. package/dist/access-offline-manifest.js +3 -3
  36. package/dist/access-operations-batch.js +48 -47
  37. package/dist/access-operations.d.ts +14 -13
  38. package/dist/access-operations.js +51 -50
  39. package/dist/access-recall-concurrency.d.ts +11 -10
  40. package/dist/access-recall-concurrency.js +46 -45
  41. package/dist/access-recall-response.d.ts +11 -10
  42. package/dist/access-recall-response.js +46 -45
  43. package/dist/access-recall-surface.d.ts +11 -10
  44. package/dist/access-recall-surface.js +46 -45
  45. package/dist/access-schema.d.ts +105 -105
  46. package/dist/access-schema.js +3 -3
  47. package/dist/{access-service-andNjwfD.d.ts → access-service--_3T_v23.d.ts} +7 -7
  48. package/dist/access-service-helpers.d.ts +11 -10
  49. package/dist/access-service.d.ts +11 -10
  50. package/dist/access-service.js +46 -45
  51. package/dist/access-surface-catalog.d.ts +11 -10
  52. package/dist/access-wearables-meetings-surface.d.ts +4 -3
  53. package/dist/action-confidence.d.ts +1 -1
  54. package/dist/active-memory-bridge.d.ts +1 -1
  55. package/dist/active-recall.d.ts +1 -1
  56. package/dist/active-recall.js +3 -2
  57. package/dist/active-recall.js.map +1 -1
  58. package/dist/adapters/index.js +4 -4
  59. package/dist/adapters/registry.js +2 -2
  60. package/dist/ambient-provenance.d.ts +1 -1
  61. package/dist/artifact-search.d.ts +1 -1
  62. package/dist/{auto-sync-7O6RP2RT.js → auto-sync-QFQGOEO2.js} +4 -4
  63. package/dist/behavior-learner.d.ts +1 -1
  64. package/dist/behavior-signals.d.ts +1 -1
  65. package/dist/bootstrap.d.ts +9 -8
  66. package/dist/briefing.d.ts +3 -2
  67. package/dist/briefing.js +15 -14
  68. package/dist/buffer-surprise-report.d.ts +1 -1
  69. package/dist/buffer-turn-helpers.d.ts +1 -1
  70. package/dist/buffer.d.ts +3 -2
  71. package/dist/buffer.js +4 -4
  72. package/dist/bulk-import/index.d.ts +3 -3
  73. package/dist/calibration.d.ts +1 -1
  74. package/dist/calibration.js +1 -1
  75. package/dist/capabilities.d.ts +1 -1
  76. package/dist/{capsule-merge-Q6AR3XL7.js → capsule-merge-KXTRZ23Z.js} +6 -6
  77. package/dist/{catalog-Iwbk9h5E.d.ts → catalog-DjUmUIal.d.ts} +1 -1
  78. package/dist/causal-behavior.d.ts +1 -1
  79. package/dist/causal-behavior.js +3 -3
  80. package/dist/causal-chain.js +3 -3
  81. package/dist/causal-consolidation.d.ts +1 -1
  82. package/dist/causal-consolidation.js +19 -18
  83. package/dist/causal-consolidation.js.map +1 -1
  84. package/dist/causal-retrieval.js +3 -3
  85. package/dist/causal-trajectory-graph.d.ts +1 -1
  86. package/dist/causal-trajectory.d.ts +51 -2
  87. package/dist/causal-trajectory.js +8 -2
  88. package/dist/{chunk-PLCZD3LG.js → chunk-24BKGKGO.js} +91 -45
  89. package/dist/chunk-24BKGKGO.js.map +1 -0
  90. package/dist/{chunk-ICP53SKG.js → chunk-2HIJHXB3.js} +2 -2
  91. package/dist/{chunk-LZGCJSQR.js → chunk-3LD4N2TF.js} +151 -37
  92. package/dist/chunk-3LD4N2TF.js.map +1 -0
  93. package/dist/{chunk-FJ2ND6CZ.js → chunk-47J4EDGR.js} +2 -2
  94. package/dist/{chunk-S55OAS5P.js → chunk-4EABKPZS.js} +4 -4
  95. package/dist/{chunk-GD7UPIBG.js → chunk-4JWJMRPJ.js} +2 -2
  96. package/dist/{chunk-3NDN5P55.js → chunk-4S3ECH3U.js} +2 -2
  97. package/dist/chunk-5GINB5LC.js +13 -0
  98. package/dist/chunk-5GINB5LC.js.map +1 -0
  99. package/dist/{chunk-CGASUJVP.js → chunk-5V6IXHPI.js} +4 -4
  100. package/dist/{chunk-A4JMGKCD.js → chunk-5XCN4XBU.js} +4 -4
  101. package/dist/{chunk-2RPJ4NEE.js → chunk-64BHFFKZ.js} +2 -2
  102. package/dist/{chunk-FQC3DHH2.js → chunk-66SE3BNH.js} +2 -2
  103. package/dist/{chunk-TERNBNJB.js → chunk-6FC3IZ26.js} +2 -2
  104. package/dist/{chunk-53AJILXF.js → chunk-6XGEBQ3R.js} +4 -4
  105. package/dist/{chunk-IP3DHDU2.js → chunk-7BLWBSRL.js} +3 -3
  106. package/dist/{chunk-A2TFK5PG.js → chunk-7NDM2PNK.js} +3 -3
  107. package/dist/{chunk-HRMEYQRO.js → chunk-7VWZ4LRW.js} +2 -2
  108. package/dist/{chunk-RN53QBM4.js → chunk-A4QMKFFO.js} +5 -1
  109. package/dist/chunk-A4QMKFFO.js.map +1 -0
  110. package/dist/chunk-ACPCA4NO.js +321 -0
  111. package/dist/chunk-ACPCA4NO.js.map +1 -0
  112. package/dist/chunk-AMTEYNYK.js +72 -0
  113. package/dist/chunk-AMTEYNYK.js.map +1 -0
  114. package/dist/{chunk-R6YJI3HE.js → chunk-AW4QUFQF.js} +1 -1
  115. package/dist/{chunk-P65YJEEL.js → chunk-AXFWMRKI.js} +2 -2
  116. package/dist/{chunk-WG5HSQ4P.js → chunk-BAKXNQ3C.js} +2 -2
  117. package/dist/{chunk-NM2WP3B7.js → chunk-BJYET5TX.js} +2 -2
  118. package/dist/{chunk-HLKPRWF4.js → chunk-DATDLJAO.js} +6 -6
  119. package/dist/chunk-DJUKBGAD.js +260 -0
  120. package/dist/chunk-DJUKBGAD.js.map +1 -0
  121. package/dist/{chunk-DX3XRGLH.js → chunk-DQTCGVFK.js} +2 -2
  122. package/dist/{chunk-HIDEBEAN.js → chunk-E633OXMH.js} +11 -11
  123. package/dist/{chunk-J7T4MX7P.js → chunk-EEAMSNSG.js} +12 -1
  124. package/dist/chunk-EEAMSNSG.js.map +1 -0
  125. package/dist/{chunk-EZNXW27Q.js → chunk-ELQCS47S.js} +4 -4
  126. package/dist/{chunk-HAYSYUAB.js → chunk-EURCX6PS.js} +2 -2
  127. package/dist/{chunk-RSPSHRZA.js → chunk-FV7YQTN3.js} +2 -2
  128. package/dist/chunk-G73MCJKL.js +20 -0
  129. package/dist/chunk-G73MCJKL.js.map +1 -0
  130. package/dist/{chunk-GWHPQOUC.js → chunk-GGBSF2X7.js} +2 -2
  131. package/dist/{chunk-SYUBB3WM.js → chunk-GKEYXXKX.js} +2 -2
  132. package/dist/{chunk-PELT6ADC.js → chunk-GSEPRIZC.js} +3 -3
  133. package/dist/{chunk-UTVZKHJK.js → chunk-GUKBW4HL.js} +2 -2
  134. package/dist/chunk-GXSOUIA4.js +293 -0
  135. package/dist/chunk-GXSOUIA4.js.map +1 -0
  136. package/dist/{chunk-2F6NP3NT.js → chunk-HDQUQBPW.js} +2 -2
  137. package/dist/{chunk-6HMYUWXR.js → chunk-HTP6XRUI.js} +2 -2
  138. package/dist/{chunk-UYUYZ4WY.js → chunk-IARXXZU4.js} +2 -2
  139. package/dist/{chunk-MNB5RMAY.js → chunk-IIFFC3RL.js} +2 -2
  140. package/dist/{chunk-KQAFEZQX.js → chunk-IPLYGWQF.js} +5 -5
  141. package/dist/{chunk-NZBZ7IS2.js → chunk-JDCQK3C5.js} +2 -2
  142. package/dist/{chunk-ANCC3JJH.js → chunk-JI62YGPI.js} +2 -2
  143. package/dist/{chunk-LULR4IUW.js → chunk-KATEWTQJ.js} +2 -2
  144. package/dist/{chunk-IJ7HK452.js → chunk-KMAP7SNQ.js} +2 -2
  145. package/dist/{chunk-PRVJH7CY.js → chunk-KMWYZTIE.js} +2 -2
  146. package/dist/{chunk-JGSKJHF7.js → chunk-KQS72GCR.js} +2 -2
  147. package/dist/{chunk-3S63QIFQ.js → chunk-LAQ33B5D.js} +1 -1
  148. package/dist/chunk-LAQ33B5D.js.map +1 -0
  149. package/dist/chunk-LNTUXKBT.js +224 -0
  150. package/dist/chunk-LNTUXKBT.js.map +1 -0
  151. package/dist/{chunk-FMCHFSZF.js → chunk-LQKXVQZR.js} +12 -12
  152. package/dist/{chunk-M4DMO67I.js → chunk-LTOAJXZB.js} +4 -4
  153. package/dist/{chunk-NIS256NW.js → chunk-LYMNZZIM.js} +2 -2
  154. package/dist/{chunk-W4FBGYGK.js → chunk-M4MP34AQ.js} +189 -5
  155. package/dist/chunk-M4MP34AQ.js.map +1 -0
  156. package/dist/{chunk-3PY7VHV7.js → chunk-MCA2X4WH.js} +2 -2
  157. package/dist/{chunk-S5NZBKKQ.js → chunk-N3CXAYPJ.js} +3 -3
  158. package/dist/{chunk-WQIHRA5F.js → chunk-N3LL5NEU.js} +2 -2
  159. package/dist/{chunk-G2RBWVFQ.js → chunk-NKL25FCF.js} +2 -2
  160. package/dist/{chunk-LMDRGRJ2.js → chunk-NOB2T2FC.js} +2 -2
  161. package/dist/{chunk-P2OTGMTR.js → chunk-NSGU76YO.js} +2 -2
  162. package/dist/{chunk-D5NGH2EW.js → chunk-O76MWTVS.js} +2 -2
  163. package/dist/{chunk-WZFAPHIK.js → chunk-OIOZ6MOP.js} +3 -3
  164. package/dist/{chunk-DNHVPZOD.js → chunk-P26YHAQH.js} +201 -1
  165. package/dist/chunk-P26YHAQH.js.map +1 -0
  166. package/dist/{chunk-UMOO7IY7.js → chunk-P2KBDJJ6.js} +2 -2
  167. package/dist/{chunk-KVJRXN2E.js → chunk-P4QOYG52.js} +125 -13
  168. package/dist/chunk-P4QOYG52.js.map +1 -0
  169. package/dist/chunk-P77QX3ID.js +332 -0
  170. package/dist/chunk-P77QX3ID.js.map +1 -0
  171. package/dist/{chunk-SXWHN7GC.js → chunk-PDEKQWDV.js} +2 -2
  172. package/dist/{chunk-2EJNXE53.js → chunk-PLCHU56K.js} +3 -3
  173. package/dist/{chunk-45OTV7FZ.js → chunk-PWIMF7LP.js} +38 -38
  174. package/dist/{chunk-7YKVM5H3.js → chunk-PWLB4TRK.js} +3 -3
  175. package/dist/{chunk-RVYVMQK4.js → chunk-QSYL5CXK.js} +3 -3
  176. package/dist/{chunk-NXUJRXSF.js → chunk-QWLW3VQH.js} +2 -2
  177. package/dist/chunk-RBOJCG4T.js +77 -0
  178. package/dist/chunk-RBOJCG4T.js.map +1 -0
  179. package/dist/{chunk-2P3GQVM2.js → chunk-RBPH3GZV.js} +418 -105
  180. package/dist/chunk-RBPH3GZV.js.map +1 -0
  181. package/dist/{chunk-JBPKEARU.js → chunk-RKNJBZ55.js} +4 -4
  182. package/dist/{chunk-QCECHYZL.js → chunk-RVO6TCTU.js} +6 -6
  183. package/dist/{chunk-5L7PTX2Q.js → chunk-S2SJEOTM.js} +2 -2
  184. package/dist/{chunk-52I3YZZ6.js → chunk-S75UQ3T3.js} +3 -3
  185. package/dist/{chunk-LXOM6IQU.js → chunk-SEF4IOFE.js} +2 -2
  186. package/dist/{chunk-DUEEQCTT.js → chunk-SHYIMIX5.js} +2 -2
  187. package/dist/{chunk-KSGEGHYA.js → chunk-T35UJI5R.js} +78 -74
  188. package/dist/chunk-T35UJI5R.js.map +1 -0
  189. package/dist/{chunk-7K5Q6COX.js → chunk-TVVEYCNW.js} +4 -4
  190. package/dist/{chunk-3JUYWPFJ.js → chunk-VFS3MK5F.js} +2 -2
  191. package/dist/chunk-VUDMT5CP.js +86 -0
  192. package/dist/chunk-VUDMT5CP.js.map +1 -0
  193. package/dist/{chunk-CMQZNEIF.js → chunk-WFLBP5GC.js} +8 -1
  194. package/dist/chunk-WFLBP5GC.js.map +1 -0
  195. package/dist/{chunk-WOEVJKKQ.js → chunk-WPZX7MEA.js} +4 -4
  196. package/dist/{chunk-ZRWB5D4H.js → chunk-WT6UL3UA.js} +2 -2
  197. package/dist/{chunk-MC6XO7T4.js → chunk-YLBE6PLR.js} +2 -2
  198. package/dist/{chunk-GF22HWS2.js → chunk-Z54EM5YZ.js} +4 -4
  199. package/dist/{chunk-GVX3NAUU.js → chunk-ZDAYWJV6.js} +2 -2
  200. package/dist/{chunk-4WBGZYZZ.js → chunk-ZJIFYUJI.js} +7 -7
  201. package/dist/chunk-ZJIFYUJI.js.map +1 -0
  202. package/dist/{chunk-JYPO7L3G.js → chunk-ZN4EYMKJ.js} +2 -2
  203. package/dist/{cli-p_WmVo2h.d.ts → cli-BLNmNEMT.d.ts} +16 -14
  204. package/dist/cli.d.ts +14 -13
  205. package/dist/cli.js +90 -87
  206. package/dist/coding/pre-action-gate.d.ts +66 -0
  207. package/dist/coding/pre-action-gate.js +22 -0
  208. package/dist/commitment-ledger.js +2 -2
  209. package/dist/compounding/engine.d.ts +3 -2
  210. package/dist/compounding/engine.js +16 -15
  211. package/dist/compounding/preference-consolidator.d.ts +1 -1
  212. package/dist/compression-optimizer.d.ts +1 -1
  213. package/dist/config.d.ts +1 -1
  214. package/dist/config.js +3 -2
  215. package/dist/connectors/codex-materialize-runner.d.ts +1 -1
  216. package/dist/connectors/codex-materialize-runner.js +15 -14
  217. package/dist/connectors/codex-materialize.d.ts +1 -1
  218. package/dist/connectors/index.d.ts +1 -1
  219. package/dist/connectors/index.js +15 -14
  220. package/dist/consolidation-provenance-check.d.ts +3 -2
  221. package/dist/consolidation-provenance-check.js +6 -6
  222. package/dist/consolidation-undo.d.ts +3 -2
  223. package/dist/consolidation-undo.js +5 -5
  224. package/dist/contradiction/index.d.ts +3 -2
  225. package/dist/contradiction/index.js +3 -3
  226. package/dist/converge-config.d.ts +1 -1
  227. package/dist/convergence-refresh.d.ts +3 -2
  228. package/dist/convergence-refresh.js +18 -17
  229. package/dist/conversation-index/backend.d.ts +1 -1
  230. package/dist/conversation-index/chunker.d.ts +1 -1
  231. package/dist/conversation-index/faiss-adapter.d.ts +1 -1
  232. package/dist/conversation-index/indexer.d.ts +1 -1
  233. package/dist/conversation-index/search.d.ts +1 -1
  234. package/dist/corpus-read-cancellation.d.ts +38 -0
  235. package/dist/corpus-read-cancellation.js +9 -0
  236. package/dist/corpus-read-cancellation.js.map +1 -0
  237. package/dist/corpus-watermark.d.ts +1 -1
  238. package/dist/corpus-watermark.js +21 -20
  239. package/dist/cue-anchors.d.ts +19 -1
  240. package/dist/cue-anchors.js +10 -2
  241. package/dist/day-summary.d.ts +1 -1
  242. package/dist/delinearize.d.ts +1 -1
  243. package/dist/dependency-propagation-config.d.ts +10 -0
  244. package/dist/dependency-propagation-config.js +10 -0
  245. package/dist/dependency-propagation-config.js.map +1 -0
  246. package/dist/deterministic-order.d.ts +4 -0
  247. package/dist/deterministic-order.js +10 -0
  248. package/dist/deterministic-order.js.map +1 -0
  249. package/dist/direct-answer-wiring.d.ts +1 -1
  250. package/dist/direct-answer.d.ts +1 -1
  251. package/dist/embedding-fallback.d.ts +1 -1
  252. package/dist/enrichment/index.d.ts +1 -1
  253. package/dist/entity-retrieval.d.ts +3 -2
  254. package/dist/entity-retrieval.js +15 -14
  255. package/dist/entity-schema.d.ts +1 -1
  256. package/dist/evals.js +2 -2
  257. package/dist/explicit-capture.d.ts +9 -8
  258. package/dist/explicit-capture.js +6 -6
  259. package/dist/external-wiki-access.d.ts +11 -10
  260. package/dist/external-wiki-access.js +47 -46
  261. package/dist/external-wiki-collection-registration.d.ts +1 -1
  262. package/dist/external-wiki-collection.d.ts +1 -1
  263. package/dist/external-wiki-mcp-tools.d.ts +11 -10
  264. package/dist/extraction-error-classification.d.ts +1 -1
  265. package/dist/extraction-faithfulness.d.ts +1 -1
  266. package/dist/extraction-judge-telemetry.d.ts +1 -1
  267. package/dist/extraction-judge-training.d.ts +1 -1
  268. package/dist/extraction-judge.d.ts +1 -1
  269. package/dist/extraction-liveness.d.ts +1 -1
  270. package/dist/extraction-normalization.d.ts +14 -0
  271. package/dist/extraction-normalization.js +22 -0
  272. package/dist/extraction-normalization.js.map +1 -0
  273. package/dist/extraction-prompt.d.ts +4 -3
  274. package/dist/extraction-prompt.js +3 -1
  275. package/dist/extraction-source-grounding-rules.d.ts +1 -1
  276. package/dist/extraction-source-grounding.d.ts +1 -1
  277. package/dist/extraction.d.ts +18 -1
  278. package/dist/extraction.js +24 -21
  279. package/dist/fallback-llm.d.ts +1 -1
  280. package/dist/{first-start-migration-ZSHEFEI3.js → first-start-migration-626C5554.js} +5 -5
  281. package/dist/{forget-DNAJ66ZD.js → forget-GJ42LCBW.js} +2 -2
  282. package/dist/graph-dashboard-diff.d.ts +1 -1
  283. package/dist/graph-dashboard-key.d.ts +1 -1
  284. package/dist/graph-dashboard-parser.d.ts +1 -1
  285. package/dist/graph-edge-reinforcement.d.ts +1 -1
  286. package/dist/graph-snapshot.d.ts +1 -1
  287. package/dist/graph.d.ts +1 -1
  288. package/dist/harmonic-construction.d.ts +43 -0
  289. package/dist/harmonic-construction.js +26 -0
  290. package/dist/harmonic-construction.js.map +1 -0
  291. package/dist/harmonic-retrieval.d.ts +1 -0
  292. package/dist/harmonic-retrieval.js +10 -4
  293. package/dist/importance.d.ts +1 -1
  294. package/dist/importers/index.d.ts +1 -1
  295. package/dist/in-flight-reads.d.ts +47 -3
  296. package/dist/in-flight-reads.js +5 -3
  297. package/dist/index.d.ts +699 -696
  298. package/dist/index.js +197 -150
  299. package/dist/intent.d.ts +1 -1
  300. package/dist/json-store.d.ts +15 -1
  301. package/dist/json-store.js +11 -3
  302. package/dist/lcm/engine.d.ts +1 -1
  303. package/dist/lcm/engine.js +2 -2
  304. package/dist/lcm/index.d.ts +1 -1
  305. package/dist/lcm/index.js +7 -7
  306. package/dist/lcm/tools.d.ts +1 -1
  307. package/dist/lifecycle.d.ts +1 -1
  308. package/dist/live-connectors-runner.d.ts +1 -1
  309. package/dist/local-llm.d.ts +1 -1
  310. package/dist/local-model-endpoint.d.ts +1 -1
  311. package/dist/maintenance/archive-observations.js +2 -2
  312. package/dist/maintenance/atomic-file.d.ts +5 -0
  313. package/dist/maintenance/atomic-file.js +12 -0
  314. package/dist/maintenance/atomic-file.js.map +1 -0
  315. package/dist/maintenance/memory-governance.d.ts +1 -1
  316. package/dist/maintenance/memory-governance.js +15 -14
  317. package/dist/maintenance/migrate-observations.js +3 -3
  318. package/dist/maintenance/observation-ledger-utils.d.ts +1 -1
  319. package/dist/maintenance/observation-ledger-utils.js +2 -2
  320. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +3 -2
  321. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +16 -15
  322. package/dist/maintenance/rebuild-memory-projection.d.ts +3 -2
  323. package/dist/maintenance/rebuild-memory-projection.js +17 -16
  324. package/dist/maintenance/rebuild-observations.js +3 -3
  325. package/dist/{maintenance-BfcuwfJS.d.ts → maintenance-DKbKZi3u.d.ts} +3 -3
  326. package/dist/mcp-memory-inspector-app.d.ts +11 -10
  327. package/dist/memory-action-policy.d.ts +1 -1
  328. package/dist/memory-cache.d.ts +1 -1
  329. package/dist/memory-corpus-version.js +2 -2
  330. package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
  331. package/dist/memory-projection-store.d.ts +1 -1
  332. package/dist/memory-provenance.d.ts +1 -1
  333. package/dist/memory-snapshot.d.ts +1 -1
  334. package/dist/memory-worth-outcomes.d.ts +3 -2
  335. package/dist/models-json.d.ts +1 -1
  336. package/dist/namespaces/migrate.d.ts +4 -3
  337. package/dist/namespaces/migrate.js +20 -19
  338. package/dist/namespaces/principal.d.ts +1 -1
  339. package/dist/namespaces/search.d.ts +1 -1
  340. package/dist/namespaces/search.js +4 -4
  341. package/dist/namespaces/storage.d.ts +4 -3
  342. package/dist/namespaces/storage.js +15 -14
  343. package/dist/native-knowledge.d.ts +1 -1
  344. package/dist/objective-state-writers.js +3 -3
  345. package/dist/objective-state.js +2 -2
  346. package/dist/offline-sync-impression-drain.d.ts +1 -1
  347. package/dist/offline-sync-impression-drain.js +2 -2
  348. package/dist/operator-doctor-corpus.d.ts +1 -1
  349. package/dist/operator-doctor-corpus.js +22 -21
  350. package/dist/operator-doctor-replica.d.ts +1 -1
  351. package/dist/operator-toolkit.d.ts +4 -3
  352. package/dist/operator-toolkit.js +31 -29
  353. package/dist/orchestration/compression-guideline-coordinator.d.ts +3 -2
  354. package/dist/orchestration/maintenance.d.ts +5 -4
  355. package/dist/orchestration/maintenance.js +21 -20
  356. package/dist/{orchestrator-B7nLo4z1.d.ts → orchestrator-BRwD7ceU.d.ts} +7 -7
  357. package/dist/orchestrator.d.ts +9 -8
  358. package/dist/orchestrator.js +127 -121
  359. package/dist/page-versioning.js +5 -5
  360. package/dist/patterns-cli.d.ts +1 -1
  361. package/dist/{pipeline-1h2GpiHP.d.ts → pipeline-DC-1C9T8.d.ts} +1 -1
  362. package/dist/policy-runtime.d.ts +1 -1
  363. package/dist/proactive-contention.d.ts +1 -1
  364. package/dist/provenance.d.ts +1 -1
  365. package/dist/{qmd-UdwoF71D.d.ts → qmd-DdeCEZdb.d.ts} +1 -1
  366. package/dist/qmd-preflight.d.ts +2 -2
  367. package/dist/qmd-recall-cache.d.ts +1 -1
  368. package/dist/qmd.d.ts +2 -2
  369. package/dist/qmd.js +4 -4
  370. package/dist/recall-concurrency-config.d.ts +1 -1
  371. package/dist/recall-disclosure-escalation.d.ts +1 -1
  372. package/dist/recall-explain-renderer.d.ts +1 -1
  373. package/dist/recall-explain-renderer.js +3 -3
  374. package/dist/recall-memory-map.d.ts +1 -1
  375. package/dist/recall-planner-llm.d.ts +1 -1
  376. package/dist/recall-state.d.ts +1 -1
  377. package/dist/recall-state.js +2 -2
  378. package/dist/recall-tag-filter.d.ts +1 -1
  379. package/dist/recall-timings.d.ts +1 -1
  380. package/dist/recall-xray-cli.d.ts +1 -1
  381. package/dist/recall-xray-cli.js +4 -4
  382. package/dist/recall-xray-renderer.d.ts +1 -1
  383. package/dist/recall-xray-renderer.js +3 -3
  384. package/dist/recall-xray.d.ts +1 -1
  385. package/dist/recall-xray.js +2 -2
  386. package/dist/reconcile/cursor.d.ts +1 -1
  387. package/dist/reconcile/manifest.d.ts +1 -1
  388. package/dist/reconcile/plan.d.ts +1 -1
  389. package/dist/relevance.js +2 -2
  390. package/dist/replay/normalizers/chatgpt.d.ts +1 -1
  391. package/dist/replay/normalizers/claude.d.ts +1 -1
  392. package/dist/replay/normalizers/openclaw.d.ts +1 -1
  393. package/dist/replay/normalizers/shared.d.ts +1 -1
  394. package/dist/replay/runner.d.ts +1 -1
  395. package/dist/replay/types.d.ts +1 -1
  396. package/dist/replica-divergence.d.ts +1 -1
  397. package/dist/replica-peers-config.d.ts +1 -1
  398. package/dist/{resolution-3K27T4VO.js → resolution-MDPNOEG6.js} +4 -4
  399. package/dist/resolution-MDPNOEG6.js.map +1 -0
  400. package/dist/resolve-auth-token.d.ts +1 -1
  401. package/dist/resume-bundles.js +8 -7
  402. package/dist/retrieval-agents.d.ts +2 -2
  403. package/dist/retrieval-tiers.d.ts +1 -1
  404. package/dist/routing/engine.d.ts +1 -1
  405. package/dist/routing/store.d.ts +1 -1
  406. package/dist/salvage-envelope.d.ts +1 -1
  407. package/dist/salvage-envelope.js +3 -3
  408. package/dist/schemas.d.ts +213 -116
  409. package/dist/schemas.js +1 -1
  410. package/dist/{scope-profiles-APjhSe-w.d.ts → scope-profiles-BXVq4Jv0.d.ts} +1 -1
  411. package/dist/search/embed-helper.d.ts +1 -1
  412. package/dist/search/factory.d.ts +1 -1
  413. package/dist/search/factory.js +3 -3
  414. package/dist/search/index.d.ts +1 -1
  415. package/dist/search/index.js +3 -3
  416. package/dist/search/lancedb-backend.d.ts +1 -1
  417. package/dist/search/meilisearch-backend.d.ts +1 -1
  418. package/dist/search/noop-backend.d.ts +1 -1
  419. package/dist/search/orama-backend.d.ts +1 -1
  420. package/dist/search/port.d.ts +1 -1
  421. package/dist/search/remote-backend.d.ts +1 -1
  422. package/dist/{semantic-consolidation-CrySDbk3.d.ts → semantic-consolidation-CGYxfa8F.d.ts} +1 -1
  423. package/dist/semantic-consolidation.d.ts +2 -2
  424. package/dist/semantic-consolidation.js +16 -15
  425. package/dist/semantic-rule-promotion.js +15 -14
  426. package/dist/semantic-rule-verifier.d.ts +1 -1
  427. package/dist/semantic-rule-verifier.js +15 -14
  428. package/dist/{service-B5W5IYCx.d.ts → service-CBDBQFCN.d.ts} +2 -2
  429. package/dist/session-observer-bands.d.ts +1 -1
  430. package/dist/session-observer-state.d.ts +1 -1
  431. package/dist/shared-context/manager.d.ts +11 -11
  432. package/dist/signal.d.ts +1 -1
  433. package/dist/source-agent-qualifier.d.ts +1 -1
  434. package/dist/source-agent-qualifier.js +19 -18
  435. package/dist/{storage-COL907QF.d.ts → storage-V--MQi7w.d.ts} +5 -4
  436. package/dist/storage.d.ts +3 -2
  437. package/dist/storage.js +14 -13
  438. package/dist/summarizer.d.ts +1 -1
  439. package/dist/summary-snapshot.d.ts +1 -1
  440. package/dist/temporal-supersession.d.ts +14 -2
  441. package/dist/temporal-supersession.js +1 -1
  442. package/dist/temporal-timeline-recall.d.ts +1 -1
  443. package/dist/temporal-validity.d.ts +1 -1
  444. package/dist/threading.d.ts +1 -1
  445. package/dist/tier-migration.d.ts +3 -2
  446. package/dist/tier-routing.d.ts +1 -1
  447. package/dist/{tier-stats-OPTSBNRH.js → tier-stats-2JCZYEF7.js} +5 -5
  448. package/dist/topics.d.ts +1 -1
  449. package/dist/transcript.d.ts +1 -1
  450. package/dist/transfer/autodetect.js +1 -1
  451. package/dist/transfer/backup.js +1 -1
  452. package/dist/transfer/capsule-export.js +2 -2
  453. package/dist/transfer/capsule-import.js +6 -6
  454. package/dist/transfer/types.d.ts +66 -66
  455. package/dist/trust-score-stage.d.ts +1 -1
  456. package/dist/trust-score.d.ts +1 -1
  457. package/dist/trust-zones.js +2 -2
  458. package/dist/{types-D_Au9qJO.d.ts → types-D_a6Sqjz.d.ts} +25 -8
  459. package/dist/types.d.ts +1 -1
  460. package/dist/types.js +1 -1
  461. package/dist/utility-learner.js +3 -3
  462. package/dist/utility-runtime.d.ts +1 -1
  463. package/dist/utility-runtime.js +4 -4
  464. package/dist/utility-telemetry.js +2 -2
  465. package/dist/verified-recall.js +15 -14
  466. package/dist/work-product-ledger.js +2 -2
  467. package/dist/write-envelope.d.ts +1 -1
  468. package/dist/write-envelope.js +2 -2
  469. package/package.json +32 -2
  470. package/src/abstraction-nodes.ts +182 -4
  471. package/src/causal-trajectory.ts +258 -3
  472. package/src/cli/harmonic-search.ts +23 -0
  473. package/src/cli/research-status-commands.ts +2 -1
  474. package/src/cli.ts +1 -24
  475. package/src/coding/pre-action-gate.test.ts +516 -0
  476. package/src/coding/pre-action-gate.ts +320 -0
  477. package/src/config.test.ts +85 -0
  478. package/src/config.ts +2 -0
  479. package/src/corpus-read-cancellation.ts +42 -0
  480. package/src/cue-anchors.test.ts +90 -0
  481. package/src/cue-anchors.ts +264 -11
  482. package/src/dependency-frontmatter.test.ts +83 -0
  483. package/src/dependency-propagation-config.ts +94 -0
  484. package/src/deterministic-order.ts +14 -0
  485. package/src/entity-retrieval.ts +4 -4
  486. package/src/extraction-normalization.ts +71 -0
  487. package/src/extraction-prompt.ts +45 -11
  488. package/src/extraction.ts +48 -32
  489. package/src/faithfulness-graph-guard.test.ts +27 -0
  490. package/src/harmonic-construction.test.ts +1799 -0
  491. package/src/harmonic-construction.ts +367 -0
  492. package/src/harmonic-retrieval.ts +166 -25
  493. package/src/in-flight-reads.ts +119 -6
  494. package/src/index.ts +4 -5
  495. package/src/json-store.ts +354 -12
  496. package/src/orchestration/consolidation-run.ts +192 -0
  497. package/src/orchestration/contradiction-linking-coordinator.ts +35 -1
  498. package/src/orchestration/dependency-propagation-triggers.test.ts +286 -0
  499. package/src/orchestration/dependency-propagation.test.ts +487 -0
  500. package/src/orchestration/dependency-propagation.ts +263 -0
  501. package/src/orchestration/dependency-revalidation.ts +173 -0
  502. package/src/orchestration/extraction-persist-deps.ts +93 -0
  503. package/src/orchestration/extraction-persist.ts +101 -94
  504. package/src/orchestration/harmonic-construction-persist.ts +86 -0
  505. package/src/orchestration/namespace-read-fanout.ts +13 -2
  506. package/src/orchestration/recall-internal-deps.ts +2 -0
  507. package/src/orchestration/recall-internal.ts +5 -1
  508. package/src/orchestration/recall-search-pipeline.ts +2 -0
  509. package/src/orchestration/recall-search-prefilter.ts +5 -1
  510. package/src/orchestrator.ts +7 -6
  511. package/src/schemas.ts +15 -0
  512. package/src/storage/entity-store.ts +9 -2
  513. package/src/storage/memory-read-store.ts +33 -4
  514. package/src/storage-contract/corpus-read-cancellation.test.ts +408 -0
  515. package/src/storage.ts +75 -19
  516. package/src/temporal-supersession.ts +29 -1
  517. package/src/testing/orchestrator-lite.ts +27 -8
  518. package/src/testing/subjects/extraction-lifecycle.test.ts +91 -50
  519. package/src/types.ts +22 -7
  520. package/dist/chunk-2P3GQVM2.js.map +0 -1
  521. package/dist/chunk-3S63QIFQ.js.map +0 -1
  522. package/dist/chunk-4WBGZYZZ.js.map +0 -1
  523. package/dist/chunk-CMQZNEIF.js.map +0 -1
  524. package/dist/chunk-DNHVPZOD.js.map +0 -1
  525. package/dist/chunk-FZZ2QTJI.js +0 -111
  526. package/dist/chunk-FZZ2QTJI.js.map +0 -1
  527. package/dist/chunk-J7T4MX7P.js.map +0 -1
  528. package/dist/chunk-KSGEGHYA.js.map +0 -1
  529. package/dist/chunk-KVJRXN2E.js.map +0 -1
  530. package/dist/chunk-LPSF4OQH.js +0 -47
  531. package/dist/chunk-LPSF4OQH.js.map +0 -1
  532. package/dist/chunk-LZGCJSQR.js.map +0 -1
  533. package/dist/chunk-OADWQ5CR.js +0 -115
  534. package/dist/chunk-OADWQ5CR.js.map +0 -1
  535. package/dist/chunk-PDJTHRAW.js +0 -36
  536. package/dist/chunk-PDJTHRAW.js.map +0 -1
  537. package/dist/chunk-PLCZD3LG.js.map +0 -1
  538. package/dist/chunk-RN53QBM4.js.map +0 -1
  539. package/dist/chunk-W4FBGYGK.js.map +0 -1
  540. /package/dist/{auto-sync-7O6RP2RT.js.map → auto-sync-QFQGOEO2.js.map} +0 -0
  541. /package/dist/{capsule-merge-Q6AR3XL7.js.map → capsule-merge-KXTRZ23Z.js.map} +0 -0
  542. /package/dist/{chunk-ICP53SKG.js.map → chunk-2HIJHXB3.js.map} +0 -0
  543. /package/dist/{chunk-FJ2ND6CZ.js.map → chunk-47J4EDGR.js.map} +0 -0
  544. /package/dist/{chunk-S55OAS5P.js.map → chunk-4EABKPZS.js.map} +0 -0
  545. /package/dist/{chunk-GD7UPIBG.js.map → chunk-4JWJMRPJ.js.map} +0 -0
  546. /package/dist/{chunk-3NDN5P55.js.map → chunk-4S3ECH3U.js.map} +0 -0
  547. /package/dist/{chunk-CGASUJVP.js.map → chunk-5V6IXHPI.js.map} +0 -0
  548. /package/dist/{chunk-A4JMGKCD.js.map → chunk-5XCN4XBU.js.map} +0 -0
  549. /package/dist/{chunk-2RPJ4NEE.js.map → chunk-64BHFFKZ.js.map} +0 -0
  550. /package/dist/{chunk-FQC3DHH2.js.map → chunk-66SE3BNH.js.map} +0 -0
  551. /package/dist/{chunk-TERNBNJB.js.map → chunk-6FC3IZ26.js.map} +0 -0
  552. /package/dist/{chunk-53AJILXF.js.map → chunk-6XGEBQ3R.js.map} +0 -0
  553. /package/dist/{chunk-IP3DHDU2.js.map → chunk-7BLWBSRL.js.map} +0 -0
  554. /package/dist/{chunk-A2TFK5PG.js.map → chunk-7NDM2PNK.js.map} +0 -0
  555. /package/dist/{chunk-HRMEYQRO.js.map → chunk-7VWZ4LRW.js.map} +0 -0
  556. /package/dist/{chunk-R6YJI3HE.js.map → chunk-AW4QUFQF.js.map} +0 -0
  557. /package/dist/{chunk-P65YJEEL.js.map → chunk-AXFWMRKI.js.map} +0 -0
  558. /package/dist/{chunk-WG5HSQ4P.js.map → chunk-BAKXNQ3C.js.map} +0 -0
  559. /package/dist/{chunk-NM2WP3B7.js.map → chunk-BJYET5TX.js.map} +0 -0
  560. /package/dist/{chunk-HLKPRWF4.js.map → chunk-DATDLJAO.js.map} +0 -0
  561. /package/dist/{chunk-DX3XRGLH.js.map → chunk-DQTCGVFK.js.map} +0 -0
  562. /package/dist/{chunk-HIDEBEAN.js.map → chunk-E633OXMH.js.map} +0 -0
  563. /package/dist/{chunk-EZNXW27Q.js.map → chunk-ELQCS47S.js.map} +0 -0
  564. /package/dist/{chunk-HAYSYUAB.js.map → chunk-EURCX6PS.js.map} +0 -0
  565. /package/dist/{chunk-RSPSHRZA.js.map → chunk-FV7YQTN3.js.map} +0 -0
  566. /package/dist/{chunk-GWHPQOUC.js.map → chunk-GGBSF2X7.js.map} +0 -0
  567. /package/dist/{chunk-SYUBB3WM.js.map → chunk-GKEYXXKX.js.map} +0 -0
  568. /package/dist/{chunk-PELT6ADC.js.map → chunk-GSEPRIZC.js.map} +0 -0
  569. /package/dist/{chunk-UTVZKHJK.js.map → chunk-GUKBW4HL.js.map} +0 -0
  570. /package/dist/{chunk-2F6NP3NT.js.map → chunk-HDQUQBPW.js.map} +0 -0
  571. /package/dist/{chunk-6HMYUWXR.js.map → chunk-HTP6XRUI.js.map} +0 -0
  572. /package/dist/{chunk-UYUYZ4WY.js.map → chunk-IARXXZU4.js.map} +0 -0
  573. /package/dist/{chunk-MNB5RMAY.js.map → chunk-IIFFC3RL.js.map} +0 -0
  574. /package/dist/{chunk-KQAFEZQX.js.map → chunk-IPLYGWQF.js.map} +0 -0
  575. /package/dist/{chunk-NZBZ7IS2.js.map → chunk-JDCQK3C5.js.map} +0 -0
  576. /package/dist/{chunk-ANCC3JJH.js.map → chunk-JI62YGPI.js.map} +0 -0
  577. /package/dist/{chunk-LULR4IUW.js.map → chunk-KATEWTQJ.js.map} +0 -0
  578. /package/dist/{chunk-IJ7HK452.js.map → chunk-KMAP7SNQ.js.map} +0 -0
  579. /package/dist/{chunk-PRVJH7CY.js.map → chunk-KMWYZTIE.js.map} +0 -0
  580. /package/dist/{chunk-JGSKJHF7.js.map → chunk-KQS72GCR.js.map} +0 -0
  581. /package/dist/{chunk-FMCHFSZF.js.map → chunk-LQKXVQZR.js.map} +0 -0
  582. /package/dist/{chunk-M4DMO67I.js.map → chunk-LTOAJXZB.js.map} +0 -0
  583. /package/dist/{chunk-NIS256NW.js.map → chunk-LYMNZZIM.js.map} +0 -0
  584. /package/dist/{chunk-3PY7VHV7.js.map → chunk-MCA2X4WH.js.map} +0 -0
  585. /package/dist/{chunk-S5NZBKKQ.js.map → chunk-N3CXAYPJ.js.map} +0 -0
  586. /package/dist/{chunk-WQIHRA5F.js.map → chunk-N3LL5NEU.js.map} +0 -0
  587. /package/dist/{chunk-G2RBWVFQ.js.map → chunk-NKL25FCF.js.map} +0 -0
  588. /package/dist/{chunk-LMDRGRJ2.js.map → chunk-NOB2T2FC.js.map} +0 -0
  589. /package/dist/{chunk-P2OTGMTR.js.map → chunk-NSGU76YO.js.map} +0 -0
  590. /package/dist/{chunk-D5NGH2EW.js.map → chunk-O76MWTVS.js.map} +0 -0
  591. /package/dist/{chunk-WZFAPHIK.js.map → chunk-OIOZ6MOP.js.map} +0 -0
  592. /package/dist/{chunk-UMOO7IY7.js.map → chunk-P2KBDJJ6.js.map} +0 -0
  593. /package/dist/{chunk-SXWHN7GC.js.map → chunk-PDEKQWDV.js.map} +0 -0
  594. /package/dist/{chunk-2EJNXE53.js.map → chunk-PLCHU56K.js.map} +0 -0
  595. /package/dist/{chunk-45OTV7FZ.js.map → chunk-PWIMF7LP.js.map} +0 -0
  596. /package/dist/{chunk-7YKVM5H3.js.map → chunk-PWLB4TRK.js.map} +0 -0
  597. /package/dist/{chunk-RVYVMQK4.js.map → chunk-QSYL5CXK.js.map} +0 -0
  598. /package/dist/{chunk-NXUJRXSF.js.map → chunk-QWLW3VQH.js.map} +0 -0
  599. /package/dist/{chunk-JBPKEARU.js.map → chunk-RKNJBZ55.js.map} +0 -0
  600. /package/dist/{chunk-QCECHYZL.js.map → chunk-RVO6TCTU.js.map} +0 -0
  601. /package/dist/{chunk-5L7PTX2Q.js.map → chunk-S2SJEOTM.js.map} +0 -0
  602. /package/dist/{chunk-52I3YZZ6.js.map → chunk-S75UQ3T3.js.map} +0 -0
  603. /package/dist/{chunk-LXOM6IQU.js.map → chunk-SEF4IOFE.js.map} +0 -0
  604. /package/dist/{chunk-DUEEQCTT.js.map → chunk-SHYIMIX5.js.map} +0 -0
  605. /package/dist/{chunk-7K5Q6COX.js.map → chunk-TVVEYCNW.js.map} +0 -0
  606. /package/dist/{chunk-3JUYWPFJ.js.map → chunk-VFS3MK5F.js.map} +0 -0
  607. /package/dist/{chunk-WOEVJKKQ.js.map → chunk-WPZX7MEA.js.map} +0 -0
  608. /package/dist/{chunk-ZRWB5D4H.js.map → chunk-WT6UL3UA.js.map} +0 -0
  609. /package/dist/{chunk-MC6XO7T4.js.map → chunk-YLBE6PLR.js.map} +0 -0
  610. /package/dist/{chunk-GF22HWS2.js.map → chunk-Z54EM5YZ.js.map} +0 -0
  611. /package/dist/{chunk-GVX3NAUU.js.map → chunk-ZDAYWJV6.js.map} +0 -0
  612. /package/dist/{chunk-JYPO7L3G.js.map → chunk-ZN4EYMKJ.js.map} +0 -0
  613. /package/dist/{resolution-3K27T4VO.js.map → coding/pre-action-gate.js.map} +0 -0
  614. /package/dist/{first-start-migration-ZSHEFEI3.js.map → first-start-migration-626C5554.js.map} +0 -0
  615. /package/dist/{forget-DNAJ66ZD.js.map → forget-GJ42LCBW.js.map} +0 -0
  616. /package/dist/{tier-stats-OPTSBNRH.js.map → tier-stats-2JCZYEF7.js.map} +0 -0
@@ -1788,6 +1788,18 @@ interface ContradictionScanConfig {
1788
1788
  /** When true, pairs judged "duplicates" are auto-flagged for dedup (still need user approval). Default false. */
1789
1789
  autoMergeDuplicates: boolean;
1790
1790
  }
1791
+ interface DependencyPropagationConfig {
1792
+ /** Master switch. Default false. */
1793
+ enabled: boolean;
1794
+ /** Link types that can identify one-hop dependents. */
1795
+ linkTypes: Array<"supports" | "follows" | "references">;
1796
+ /** Maximum active dependents to revalidate. `0` disables propagation. */
1797
+ maxDependents: number;
1798
+ /** Maximum duration of the single batched revalidation call, in milliseconds. */
1799
+ timeoutMs: number;
1800
+ /** Discover and revalidate dependents without writing supersession changes. */
1801
+ dryRun: boolean;
1802
+ }
1791
1803
  interface HeartbeatConfig {
1792
1804
  enabled: boolean;
1793
1805
  journalPath: string;
@@ -1992,6 +2004,8 @@ interface PluginConfig extends BoundedJsonlStateConfig {
1992
2004
  contradictionAutoResolve: boolean;
1993
2005
  /** Nightly contradiction-scan cron config (issue #520). */
1994
2006
  contradictionScan: ContradictionScanConfig;
2007
+ /** One-hop dependency invalidation propagation settings (issue #2326). */
2008
+ dependencyPropagation: DependencyPropagationConfig;
1995
2009
  /**
1996
2010
  * When enabled, writes that carry `structuredAttributes` mark any older
1997
2011
  * fact with the same `entityRef + attribute_name` supersession key and a
@@ -3819,6 +3833,10 @@ interface MemoryFrontmatter extends SourceConnectorProvenance {
3819
3833
  supersededBy?: string;
3820
3834
  /** Timestamp when superseded */
3821
3835
  supersededAt?: string;
3836
+ /** Why this memory was superseded. Absent means legacy/direct. */
3837
+ supersessionCause?: "direct" | "dependency";
3838
+ /** ID of the superseded memory that caused dependency invalidation. */
3839
+ invalidatedBy?: string;
3822
3840
  /** Timestamp when archived */
3823
3841
  archivedAt?: string;
3824
3842
  /**
@@ -4149,14 +4167,12 @@ interface ExtractedFact {
4149
4167
  confidence: number;
4150
4168
  tags: string[];
4151
4169
  entityRef?: string;
4170
+ cueAnchors?: Array<{
4171
+ type: "entity" | "file" | "tool" | "outcome" | "constraint" | "date";
4172
+ value: string;
4173
+ }>;
4152
4174
  source?: ExtractionPassSource;
4153
- /**
4154
- * Claim-level provenance spans backing this fact (issue #1575).
4155
- * Populated by the PR 2 extraction validator when `provenance.enabled`
4156
- * is true. Absent for legacy extractions — downstream consumers (the
4157
- * faithfulness gate #1576, TrustScore #1577) MUST treat absent as
4158
- * "no verified span" and skip gracefully.
4159
- */
4175
+ /** Claim-level provenance spans. Missing spans fail closed when verification requires them. */
4160
4176
  sources?: ProvenanceSource[];
4161
4177
  /**
4162
4178
  * Coarse provenance strength tag (issue #1575 PR 2). Set by the extraction
@@ -4267,6 +4283,7 @@ interface ExtractionResult {
4267
4283
  entities: EntityMention[];
4268
4284
  questions: ExtractedQuestion[];
4269
4285
  identityReflection?: string;
4286
+ episodeTitle?: string;
4270
4287
  relationships?: ExtractedRelationship[];
4271
4288
  extractionFailure?: string;
4272
4289
  /** Coarse class used by the retry/backoff + circuit-breaker layer (extraction hot loop). */
@@ -4695,4 +4712,4 @@ interface HourlySummary {
4695
4712
  generatedAt: string;
4696
4713
  }
4697
4714
 
4698
- export { type ReplicaPeerConfig as $, type AgentPersonaModelConfig as A, type BriefingSections as B, type CodingContext as C, type DreamsPhase as D, type EntityFile as E, type FaithfulnessFrontmatter as F, type GatewayConfig as G, type HourlySummary as H, type IdentityInjectionMode as I, type MemoryLifecycleEvent as J, type ExtractionResult as K, type LiveConnectorsConfig as L, type MemoryFile as M, type ConsolidationResult as N, type DaySummaryResult as O, type PluginConfig as P, type QmdSearchResult as Q, type RecallPlanMode as R, type SessionObserverBandConfig as S, type TranscriptEntry as T, type ProvenanceSource as U, type TrustWeights as V, type ConversationThread as W, type LifecycleState as X, type VerificationState as Y, type PolicyClass as Z, type ReplicaPeersConfig as _, type DreamsRunResult as a, type WearableSourceConnector as a$, type ExtractionFailureClass as a0, type ImportanceLevel as a1, type ConvergeConflictPolicy as a2, type ActiveRecallChatType as a3, type ActiveRecallQueryMode as a4, type ActiveRecallPromptStyle as a5, type ActiveRecallThinking as a6, type ActiveRecallModelFallbackPolicy as a7, type BehaviorSignalEvent as a8, type BufferSurpriseEvent as a9, summarizeExtractionLiveness as aA, type RetrievalTier as aB, type SignalScanResult as aC, type TopicScore as aD, type QmdSearchExplain as aE, type ActivitySnapshot as aF, type ActivityConfig as aG, type ActivitySourceConfig as aH, type ActivitySourceClient as aI, type FusedWearableConversation as aJ, type FusedDayMeta as aK, type FusedDayFile as aL, type MeetingRecord as aM, type MeetingDetectionSource as aN, type FusedMeeting as aO, type EntityTimelineEntry as aP, type MemoryLink as aQ, type BufferState as aR, type FileHygieneConfig as aS, type EntityRelationship as aT, type EntityActivityEntry as aU, type AccessTrackingEntry as aV, type MemorySummary as aW, type WearableConversation as aX, type WearableSourceSettings as aY, type WearableNativeMemory as aZ, type WearableMemoryMode as a_, type ImportTurn as aa, type BulkImportOptions as ab, type BulkImportSource as ac, type BulkImportResult as ad, type CompressionGuidelineOptimizerEventCounts as ae, type CompressionGuidelineOptimizerActionSummary as af, type CompressionGuidelineOptimizerRuleUpdate as ag, type MemoryActionType as ah, type MemoryActionEvent as ai, type CompressionGuidelineOptimizerState as aj, type ConvergeConfig as ak, type EntityMention as al, type EntitySchemaDefinition as am, type EntitySchemaSectionDefinition as an, type EntityStructuredSection as ao, type ProvenanceConfig as ap, type ImportanceScore as aq, type MemoryIntent as ar, type MemoryActionEligibilityContext as as, type MemoryActionPolicyResult as at, type MemoryLifecycleEventType as au, type MemoryLifecycleStateSummary as av, type ModelProviderConfig as aw, type NativeKnowledgeConfig as ax, type ExtractionBufferSource as ay, type MetaState as az, type RecallTierExplain as b, parseIsoTimestamp as b$, type WearablesConfig as b0, type WearableSyncSummary as b1, type WearableSourceStatus as b2, type WearableDayTranscript as b3, type WearableCorrectionRule as b4, type MeetingBuildInput as b5, type MeetingsConfig as b6, type MeetingsDetectionInput as b7, type FusionConversationInput as b8, type MeetingActivitySnapshot as b9, type BriefingWindow as bA, type BulkImportError as bB, type BulkImportSourceAdapter as bC, type CodexCompatConfig as bD, DEFAULT_RECALL_DISCLOSURE as bE, type DisagreementKind as bF, type ExtractedFact as bG, type FusedContribution as bH, type FusedConversationProvenance as bI, type FusedSegmentProvenance as bJ, type FusionSegmentInput as bK, type ImportSourceRole as bL, type ImportTurnValidationIssue as bM, type MeetingScreenContextEvent as bN, type MeetingSummaryMode as bO, type MemoryActionEligibilitySource as bP, type MemoryObservation as bQ, type MemoryScope as bR, RECALL_DISCLOSURE_LEVELS as bS, type SegmentPickReason as bT, type WearableAuthCheck as bU, type WearableFetchOptions as bV, type WearableFetchPage as bW, type WearableNativeMemoryPage as bX, type WearableTranscriptSegment as bY, isImportRole as bZ, isRecallDisclosure as b_, type DetectedMeeting as ba, type DreamsStatusResult as bb, type RecallSectionConfig as bc, type BootstrapOptions as bd, type BootstrapResult as be, type ConsolidationObservation as bf, type CodingModeConfig as bg, type FusedSpeaker as bh, type FusedSegment as bi, type FusedDisagreement as bj, type FusionOptions as bk, type FusionDayResult as bl, type CodingKnowledgeConfig as bm, type WearableCleanupSettings as bn, type WearableFusionConfig as bo, type WearableDayTranscriptMeta as bp, type ActivityDayMeta as bq, type ActivityDayDigest as br, type ActivitySourceCheck as bs, type ActivitySnapshotPage as bt, type MeetingsDetectionConfig as bu, type MeetingAudioWindow as bv, type MeetingAppSpan as bw, type ActivityExtractionMode as bx, type BriefingConfig as by, type BriefingOpenCommitment as bz, type BriefingFollowup as c, type GmailLiveConnectorConfig as c$, validateImportTurn as c0, type ExtractionLivenessConfig as c1, ExtractionLivenessWarnThrottle as c2, type ExtractionRootStats as c3, type ExtractionWatermarkOrStorage as c4, type ExtractionWatermarkRead as c5, coerceExtractionWatermark as c6, computeExtractionLivenessStatus as c7, evaluateExtractionLiveness as c8, formatAgeMs as c9, type CodexCliReasoningEffort as cA, type CodexCompactionFlushMode as cB, type CodexConnectorConfig as cC, type CodingGraphLspConfig as cD, type CompressionGuidelineActivationState as cE, type CompressionGuidelineOptimizerSourceWindow as cF, type ConfidenceTier as cG, type ConsolidationAction as cH, type ConsolidationItem as cI, type ContradictionScanConfig as cJ, type CronConversationRecallMode as cK, type CronRecallMode as cL, type DreamingConfig as cM, type DreamingNarrativePromptStyle as cN, type DreamsDeepSleepConfig as cO, type DreamsLightSleepConfig as cP, type DreamsPhaseStatus as cQ, type DreamsPhasesConfig as cR, type DreamsRemConfig as cS, type EngramTraceEvent as cT, type ExtractedProcedureStep as cU, type ExtractedQuestion as cV, type ExtractedReasoningTrace as cW, type ExtractedReasoningTraceStep as cX, type ExtractedRelationship as cY, type ExtractionPassSource as cZ, type GitHubLiveConnectorConfig as c_, gatherExtractionLivenessStatus as ca, parseExtractionLivenessConfig as cb, renderExtractionLivenessStats as cc, resolveExtractionLivenessConfig as cd, parseReplicaPeersConfig as ce, resolveReplicaPeersConfig as cf, type AmbientCaptureProvenance as cg, type BufferTurnOwner as ch, ProbeTimeoutError as ci, bufferTurnArrayIsSuffixOfSnapshot as cj, bufferTurnArraysEqual as ck, bufferTurnsEqual as cl, copyBufferTurn as cm, describeError as cn, liveTurnsFromExtractionSnapshot as co, matchingQueuedExtractionPrefixLength as cp, probeWithTimeout as cq, type AgentAccessHttpConfig as cr, type AgentDefaultsConfig as cs, type AgentPersona as ct, type BehaviorLoopAdjustment as cu, type BehaviorSignalDirection as cv, type BehaviorSignalType as cw, type BriefingCalendarSourceError as cx, type BufferEntryState as cy, type ChatConfig as cz, type BriefingFocus as d, type GoogleDriveLiveConnectorConfig as d0, type HeartbeatConfig as d1, type HeartbeatDetectionMode as d2, type LlmTraceCallback as d3, type LlmTraceEvent as d4, type MemoryActionOutcome as d5, type MemoryActionPolicyDecision as d6, type MemoryActionStatus as d7, type MemoryLinkType as d8, type MemoryOsPresetName as d9, type TriggerMode as dA, confidenceTier as dB, type ModelApi as da, type ModelDefinitionConfig as db, type ModelProviderAuthMode as dc, type NamespacePolicy as dd, type NativeKnowledgeFolderRuleConfig as de, type NativeKnowledgeObsidianVaultConfig as df, type NativeKnowledgeOpenClawWorkspaceConfig as dg, type NotionLiveConnectorConfig as dh, type PrincipalFromSessionKeyMode as di, type PrincipalRule as dj, type ProceduralConfig as dk, type QuestionEntry as dl, type ReasoningEffort as dm, type RecallPipelineConfig as dn, type RecallTraceEvent as dp, type RelevanceFeedback as dq, SPECULATIVE_TTL_DAYS as dr, type ScopeProfileAutoPromoteConfig as ds, type ScopeProfileTeamProjectConfig as dt, type ScopeTeamConfig as du, type ScoredEntity as dv, type SemanticChunkingConfigShape as dw, type SignalLevel as dx, type SlotBehaviorConfig as dy, type SlotMismatchMode as dz, type CalendarSource as e, type CalendarEvent as f, type BriefingActiveThread as g, type BriefingResult as h, type BriefingRecentEntity as i, type BufferTurn as j, type ExtractionBufferSnapshot as k, type MemoryFrontmatter as l, type Checkpoint as m, type RecallDisclosure as n, type SourceConnectorProvenance as o, type ScopeProfileConfig as p, type ScopeProfileLayerId as q, type ScopeProfilePromotionTarget as r, type BehaviorLoopPolicyState as s, type SecretRef as t, type AgentAccessAuthToken as u, type ExtractionLivenessStatus as v, type MemoryCategory as w, type CaptureMode as x, type MemoryStatus as y, type MemoryProjectionCurrentState as z };
4715
+ export { type ReplicaPeerConfig as $, type AgentPersonaModelConfig as A, type BriefingSections as B, type CodingContext as C, type DreamsPhase as D, type EntityFile as E, type FaithfulnessFrontmatter as F, type GatewayConfig as G, type HourlySummary as H, type IdentityInjectionMode as I, type MemoryLifecycleEvent as J, type ExtractionResult as K, type LiveConnectorsConfig as L, type MemoryFile as M, type ConsolidationResult as N, type DaySummaryResult as O, type PluginConfig as P, type QmdSearchResult as Q, type RecallPlanMode as R, type SessionObserverBandConfig as S, type TranscriptEntry as T, type ProvenanceSource as U, type TrustWeights as V, type ConversationThread as W, type LifecycleState as X, type VerificationState as Y, type PolicyClass as Z, type ReplicaPeersConfig as _, type DreamsRunResult as a, type WearableNativeMemory as a$, type ExtractionFailureClass as a0, type ImportanceLevel as a1, type ConvergeConflictPolicy as a2, type ActiveRecallChatType as a3, type ActiveRecallQueryMode as a4, type ActiveRecallPromptStyle as a5, type ActiveRecallThinking as a6, type ActiveRecallModelFallbackPolicy as a7, type BehaviorSignalEvent as a8, type BufferSurpriseEvent as a9, type ExtractionBufferSource as aA, type MetaState as aB, summarizeExtractionLiveness as aC, type RetrievalTier as aD, type SignalScanResult as aE, type TopicScore as aF, type QmdSearchExplain as aG, type ActivitySnapshot as aH, type ActivityConfig as aI, type ActivitySourceConfig as aJ, type ActivitySourceClient as aK, type FusedWearableConversation as aL, type FusedDayMeta as aM, type FusedDayFile as aN, type MeetingRecord as aO, type MeetingDetectionSource as aP, type FusedMeeting as aQ, type EntityTimelineEntry as aR, type MemoryLink as aS, type BufferState as aT, type FileHygieneConfig as aU, type EntityRelationship as aV, type EntityActivityEntry as aW, type AccessTrackingEntry as aX, type MemorySummary as aY, type WearableConversation as aZ, type WearableSourceSettings as a_, type ImportTurn as aa, type BulkImportOptions as ab, type BulkImportSource as ac, type BulkImportResult as ad, type CompressionGuidelineOptimizerEventCounts as ae, type CompressionGuidelineOptimizerActionSummary as af, type CompressionGuidelineOptimizerRuleUpdate as ag, type MemoryActionType as ah, type MemoryActionEvent as ai, type CompressionGuidelineOptimizerState as aj, type ConvergeConfig as ak, type EntityMention as al, type DependencyPropagationConfig as am, type EntitySchemaDefinition as an, type EntitySchemaSectionDefinition as ao, type EntityStructuredSection as ap, type ExtractedFact as aq, type ProvenanceConfig as ar, type ImportanceScore as as, type MemoryIntent as at, type MemoryActionEligibilityContext as au, type MemoryActionPolicyResult as av, type MemoryLifecycleEventType as aw, type MemoryLifecycleStateSummary as ax, type ModelProviderConfig as ay, type NativeKnowledgeConfig as az, type RecallTierExplain as b, isRecallDisclosure as b$, type WearableMemoryMode as b0, type WearableSourceConnector as b1, type WearablesConfig as b2, type WearableSyncSummary as b3, type WearableSourceStatus as b4, type WearableDayTranscript as b5, type WearableCorrectionRule as b6, type MeetingBuildInput as b7, type MeetingsConfig as b8, type MeetingsDetectionInput as b9, type BriefingConfig as bA, type BriefingOpenCommitment as bB, type BriefingWindow as bC, type BulkImportError as bD, type BulkImportSourceAdapter as bE, type CodexCompatConfig as bF, DEFAULT_RECALL_DISCLOSURE as bG, type DisagreementKind as bH, type FusedContribution as bI, type FusedConversationProvenance as bJ, type FusedSegmentProvenance as bK, type FusionSegmentInput as bL, type ImportSourceRole as bM, type ImportTurnValidationIssue as bN, type MeetingScreenContextEvent as bO, type MeetingSummaryMode as bP, type MemoryActionEligibilitySource as bQ, type MemoryObservation as bR, type MemoryScope as bS, RECALL_DISCLOSURE_LEVELS as bT, type SegmentPickReason as bU, type WearableAuthCheck as bV, type WearableFetchOptions as bW, type WearableFetchPage as bX, type WearableNativeMemoryPage as bY, type WearableTranscriptSegment as bZ, isImportRole as b_, type FusionConversationInput as ba, type MeetingActivitySnapshot as bb, type DetectedMeeting as bc, type DreamsStatusResult as bd, type RecallSectionConfig as be, type BootstrapOptions as bf, type BootstrapResult as bg, type ConsolidationObservation as bh, type CodingModeConfig as bi, type FusedSpeaker as bj, type FusedSegment as bk, type FusedDisagreement as bl, type FusionOptions as bm, type FusionDayResult as bn, type CodingKnowledgeConfig as bo, type WearableCleanupSettings as bp, type WearableFusionConfig as bq, type WearableDayTranscriptMeta as br, type ActivityDayMeta as bs, type ActivityDayDigest as bt, type ActivitySourceCheck as bu, type ActivitySnapshotPage as bv, type MeetingsDetectionConfig as bw, type MeetingAudioWindow as bx, type MeetingAppSpan as by, type ActivityExtractionMode as bz, type BriefingFollowup as c, type GitHubLiveConnectorConfig as c$, parseIsoTimestamp as c0, validateImportTurn as c1, type ExtractionLivenessConfig as c2, ExtractionLivenessWarnThrottle as c3, type ExtractionRootStats as c4, type ExtractionWatermarkOrStorage as c5, type ExtractionWatermarkRead as c6, coerceExtractionWatermark as c7, computeExtractionLivenessStatus as c8, evaluateExtractionLiveness as c9, type ChatConfig as cA, type CodexCliReasoningEffort as cB, type CodexCompactionFlushMode as cC, type CodexConnectorConfig as cD, type CodingGraphLspConfig as cE, type CompressionGuidelineActivationState as cF, type CompressionGuidelineOptimizerSourceWindow as cG, type ConfidenceTier as cH, type ConsolidationAction as cI, type ConsolidationItem as cJ, type ContradictionScanConfig as cK, type CronConversationRecallMode as cL, type CronRecallMode as cM, type DreamingConfig as cN, type DreamingNarrativePromptStyle as cO, type DreamsDeepSleepConfig as cP, type DreamsLightSleepConfig as cQ, type DreamsPhaseStatus as cR, type DreamsPhasesConfig as cS, type DreamsRemConfig as cT, type EngramTraceEvent as cU, type ExtractedProcedureStep as cV, type ExtractedQuestion as cW, type ExtractedReasoningTrace as cX, type ExtractedReasoningTraceStep as cY, type ExtractedRelationship as cZ, type ExtractionPassSource as c_, formatAgeMs as ca, gatherExtractionLivenessStatus as cb, parseExtractionLivenessConfig as cc, renderExtractionLivenessStats as cd, resolveExtractionLivenessConfig as ce, parseReplicaPeersConfig as cf, resolveReplicaPeersConfig as cg, type AmbientCaptureProvenance as ch, type BufferTurnOwner as ci, ProbeTimeoutError as cj, bufferTurnArrayIsSuffixOfSnapshot as ck, bufferTurnArraysEqual as cl, bufferTurnsEqual as cm, copyBufferTurn as cn, describeError as co, liveTurnsFromExtractionSnapshot as cp, matchingQueuedExtractionPrefixLength as cq, probeWithTimeout as cr, type AgentAccessHttpConfig as cs, type AgentDefaultsConfig as ct, type AgentPersona as cu, type BehaviorLoopAdjustment as cv, type BehaviorSignalDirection as cw, type BehaviorSignalType as cx, type BriefingCalendarSourceError as cy, type BufferEntryState as cz, type BriefingFocus as d, type GmailLiveConnectorConfig as d0, type GoogleDriveLiveConnectorConfig as d1, type HeartbeatConfig as d2, type HeartbeatDetectionMode as d3, type LlmTraceCallback as d4, type LlmTraceEvent as d5, type MemoryActionOutcome as d6, type MemoryActionPolicyDecision as d7, type MemoryActionStatus as d8, type MemoryLinkType as d9, type SlotMismatchMode as dA, type TriggerMode as dB, confidenceTier as dC, type MemoryOsPresetName as da, type ModelApi as db, type ModelDefinitionConfig as dc, type ModelProviderAuthMode as dd, type NamespacePolicy as de, type NativeKnowledgeFolderRuleConfig as df, type NativeKnowledgeObsidianVaultConfig as dg, type NativeKnowledgeOpenClawWorkspaceConfig as dh, type NotionLiveConnectorConfig as di, type PrincipalFromSessionKeyMode as dj, type PrincipalRule as dk, type ProceduralConfig as dl, type QuestionEntry as dm, type ReasoningEffort as dn, type RecallPipelineConfig as dp, type RecallTraceEvent as dq, type RelevanceFeedback as dr, SPECULATIVE_TTL_DAYS as ds, type ScopeProfileAutoPromoteConfig as dt, type ScopeProfileTeamProjectConfig as du, type ScopeTeamConfig as dv, type ScoredEntity as dw, type SemanticChunkingConfigShape as dx, type SignalLevel as dy, type SlotBehaviorConfig as dz, type CalendarSource as e, type CalendarEvent as f, type BriefingActiveThread as g, type BriefingResult as h, type BriefingRecentEntity as i, type BufferTurn as j, type ExtractionBufferSnapshot as k, type MemoryFrontmatter as l, type Checkpoint as m, type RecallDisclosure as n, type SourceConnectorProvenance as o, type ScopeProfileConfig as p, type ScopeProfileLayerId as q, type ScopeProfilePromotionTarget as r, type BehaviorLoopPolicyState as s, type SecretRef as t, type AgentAccessAuthToken as u, type ExtractionLivenessStatus as v, type MemoryCategory as w, type CaptureMode as x, type MemoryStatus as y, type MemoryProjectionCurrentState as z };
package/dist/types.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { aV as AccessTrackingEntry, a3 as ActiveRecallChatType, a7 as ActiveRecallModelFallbackPolicy, a5 as ActiveRecallPromptStyle, a4 as ActiveRecallQueryMode, a6 as ActiveRecallThinking, u as AgentAccessAuthToken, cr as AgentAccessHttpConfig, cs as AgentDefaultsConfig, ct as AgentPersona, A as AgentPersonaModelConfig, cu as BehaviorLoopAdjustment, s as BehaviorLoopPolicyState, cv as BehaviorSignalDirection, a8 as BehaviorSignalEvent, cw as BehaviorSignalType, bd as BootstrapOptions, be as BootstrapResult, g as BriefingActiveThread, cx as BriefingCalendarSourceError, by as BriefingConfig, d as BriefingFocus, c as BriefingFollowup, bz as BriefingOpenCommitment, i as BriefingRecentEntity, h as BriefingResult, B as BriefingSections, bA as BriefingWindow, cy as BufferEntryState, aR as BufferState, a9 as BufferSurpriseEvent, j as BufferTurn, f as CalendarEvent, e as CalendarSource, x as CaptureMode, cz as ChatConfig, m as Checkpoint, cA as CodexCliReasoningEffort, cB as CodexCompactionFlushMode, bD as CodexCompatConfig, cC as CodexConnectorConfig, C as CodingContext, cD as CodingGraphLspConfig, bm as CodingKnowledgeConfig, bg as CodingModeConfig, cE as CompressionGuidelineActivationState, af as CompressionGuidelineOptimizerActionSummary, ae as CompressionGuidelineOptimizerEventCounts, ag as CompressionGuidelineOptimizerRuleUpdate, cF as CompressionGuidelineOptimizerSourceWindow, aj as CompressionGuidelineOptimizerState, cG as ConfidenceTier, cH as ConsolidationAction, cI as ConsolidationItem, bf as ConsolidationObservation, N as ConsolidationResult, cJ as ContradictionScanConfig, ak as ConvergeConfig, a2 as ConvergeConflictPolicy, W as ConversationThread, cK as CronConversationRecallMode, cL as CronRecallMode, bE as DEFAULT_RECALL_DISCLOSURE, O as DaySummaryResult, cM as DreamingConfig, cN as DreamingNarrativePromptStyle, cO as DreamsDeepSleepConfig, cP as DreamsLightSleepConfig, D as DreamsPhase, cQ as DreamsPhaseStatus, cR as DreamsPhasesConfig, cS as DreamsRemConfig, a as DreamsRunResult, bb as DreamsStatusResult, cT as EngramTraceEvent, aU as EntityActivityEntry, E as EntityFile, al as EntityMention, aT as EntityRelationship, am as EntitySchemaDefinition, an as EntitySchemaSectionDefinition, ao as EntityStructuredSection, aP as EntityTimelineEntry, bG as ExtractedFact, cU as ExtractedProcedureStep, cV as ExtractedQuestion, cW as ExtractedReasoningTrace, cX as ExtractedReasoningTraceStep, cY as ExtractedRelationship, a0 as ExtractionFailureClass, cZ as ExtractionPassSource, K as ExtractionResult, F as FaithfulnessFrontmatter, aS as FileHygieneConfig, G as GatewayConfig, c_ as GitHubLiveConnectorConfig, c$ as GmailLiveConnectorConfig, d0 as GoogleDriveLiveConnectorConfig, d1 as HeartbeatConfig, d2 as HeartbeatDetectionMode, H as HourlySummary, I as IdentityInjectionMode, a1 as ImportanceLevel, aq as ImportanceScore, X as LifecycleState, L as LiveConnectorsConfig, d3 as LlmTraceCallback, d4 as LlmTraceEvent, as as MemoryActionEligibilityContext, bP as MemoryActionEligibilitySource, ai as MemoryActionEvent, d5 as MemoryActionOutcome, d6 as MemoryActionPolicyDecision, at as MemoryActionPolicyResult, d7 as MemoryActionStatus, ah as MemoryActionType, w as MemoryCategory, M as MemoryFile, l as MemoryFrontmatter, ar as MemoryIntent, J as MemoryLifecycleEvent, au as MemoryLifecycleEventType, av as MemoryLifecycleStateSummary, aQ as MemoryLink, d8 as MemoryLinkType, bQ as MemoryObservation, d9 as MemoryOsPresetName, z as MemoryProjectionCurrentState, bR as MemoryScope, y as MemoryStatus, aW as MemorySummary, az as MetaState, da as ModelApi, db as ModelDefinitionConfig, dc as ModelProviderAuthMode, aw as ModelProviderConfig, dd as NamespacePolicy, ax as NativeKnowledgeConfig, de as NativeKnowledgeFolderRuleConfig, df as NativeKnowledgeObsidianVaultConfig, dg as NativeKnowledgeOpenClawWorkspaceConfig, dh as NotionLiveConnectorConfig, P as PluginConfig, Z as PolicyClass, di as PrincipalFromSessionKeyMode, dj as PrincipalRule, dk as ProceduralConfig, ap as ProvenanceConfig, U as ProvenanceSource, aE as QmdSearchExplain, Q as QmdSearchResult, dl as QuestionEntry, bS as RECALL_DISCLOSURE_LEVELS, dm as ReasoningEffort, n as RecallDisclosure, dn as RecallPipelineConfig, R as RecallPlanMode, bc as RecallSectionConfig, b as RecallTierExplain, dp as RecallTraceEvent, dq as RelevanceFeedback, aB as RetrievalTier, dr as SPECULATIVE_TTL_DAYS, ds as ScopeProfileAutoPromoteConfig, p as ScopeProfileConfig, q as ScopeProfileLayerId, r as ScopeProfilePromotionTarget, dt as ScopeProfileTeamProjectConfig, du as ScopeTeamConfig, dv as ScoredEntity, t as SecretRef, dw as SemanticChunkingConfigShape, S as SessionObserverBandConfig, dx as SignalLevel, aC as SignalScanResult, dy as SlotBehaviorConfig, dz as SlotMismatchMode, o as SourceConnectorProvenance, aD as TopicScore, T as TranscriptEntry, dA as TriggerMode, V as TrustWeights, Y as VerificationState, dB as confidenceTier, b_ as isRecallDisclosure } from './types-D_Au9qJO.js';
1
+ export { aX as AccessTrackingEntry, a3 as ActiveRecallChatType, a7 as ActiveRecallModelFallbackPolicy, a5 as ActiveRecallPromptStyle, a4 as ActiveRecallQueryMode, a6 as ActiveRecallThinking, u as AgentAccessAuthToken, cs as AgentAccessHttpConfig, ct as AgentDefaultsConfig, cu as AgentPersona, A as AgentPersonaModelConfig, cv as BehaviorLoopAdjustment, s as BehaviorLoopPolicyState, cw as BehaviorSignalDirection, a8 as BehaviorSignalEvent, cx as BehaviorSignalType, bf as BootstrapOptions, bg as BootstrapResult, g as BriefingActiveThread, cy as BriefingCalendarSourceError, bA as BriefingConfig, d as BriefingFocus, c as BriefingFollowup, bB as BriefingOpenCommitment, i as BriefingRecentEntity, h as BriefingResult, B as BriefingSections, bC as BriefingWindow, cz as BufferEntryState, aT as BufferState, a9 as BufferSurpriseEvent, j as BufferTurn, f as CalendarEvent, e as CalendarSource, x as CaptureMode, cA as ChatConfig, m as Checkpoint, cB as CodexCliReasoningEffort, cC as CodexCompactionFlushMode, bF as CodexCompatConfig, cD as CodexConnectorConfig, C as CodingContext, cE as CodingGraphLspConfig, bo as CodingKnowledgeConfig, bi as CodingModeConfig, cF as CompressionGuidelineActivationState, af as CompressionGuidelineOptimizerActionSummary, ae as CompressionGuidelineOptimizerEventCounts, ag as CompressionGuidelineOptimizerRuleUpdate, cG as CompressionGuidelineOptimizerSourceWindow, aj as CompressionGuidelineOptimizerState, cH as ConfidenceTier, cI as ConsolidationAction, cJ as ConsolidationItem, bh as ConsolidationObservation, N as ConsolidationResult, cK as ContradictionScanConfig, ak as ConvergeConfig, a2 as ConvergeConflictPolicy, W as ConversationThread, cL as CronConversationRecallMode, cM as CronRecallMode, bG as DEFAULT_RECALL_DISCLOSURE, O as DaySummaryResult, am as DependencyPropagationConfig, cN as DreamingConfig, cO as DreamingNarrativePromptStyle, cP as DreamsDeepSleepConfig, cQ as DreamsLightSleepConfig, D as DreamsPhase, cR as DreamsPhaseStatus, cS as DreamsPhasesConfig, cT as DreamsRemConfig, a as DreamsRunResult, bd as DreamsStatusResult, cU as EngramTraceEvent, aW as EntityActivityEntry, E as EntityFile, al as EntityMention, aV as EntityRelationship, an as EntitySchemaDefinition, ao as EntitySchemaSectionDefinition, ap as EntityStructuredSection, aR as EntityTimelineEntry, aq as ExtractedFact, cV as ExtractedProcedureStep, cW as ExtractedQuestion, cX as ExtractedReasoningTrace, cY as ExtractedReasoningTraceStep, cZ as ExtractedRelationship, a0 as ExtractionFailureClass, c_ as ExtractionPassSource, K as ExtractionResult, F as FaithfulnessFrontmatter, aU as FileHygieneConfig, G as GatewayConfig, c$ as GitHubLiveConnectorConfig, d0 as GmailLiveConnectorConfig, d1 as GoogleDriveLiveConnectorConfig, d2 as HeartbeatConfig, d3 as HeartbeatDetectionMode, H as HourlySummary, I as IdentityInjectionMode, a1 as ImportanceLevel, as as ImportanceScore, X as LifecycleState, L as LiveConnectorsConfig, d4 as LlmTraceCallback, d5 as LlmTraceEvent, au as MemoryActionEligibilityContext, bQ as MemoryActionEligibilitySource, ai as MemoryActionEvent, d6 as MemoryActionOutcome, d7 as MemoryActionPolicyDecision, av as MemoryActionPolicyResult, d8 as MemoryActionStatus, ah as MemoryActionType, w as MemoryCategory, M as MemoryFile, l as MemoryFrontmatter, at as MemoryIntent, J as MemoryLifecycleEvent, aw as MemoryLifecycleEventType, ax as MemoryLifecycleStateSummary, aS as MemoryLink, d9 as MemoryLinkType, bR as MemoryObservation, da as MemoryOsPresetName, z as MemoryProjectionCurrentState, bS as MemoryScope, y as MemoryStatus, aY as MemorySummary, aB as MetaState, db as ModelApi, dc as ModelDefinitionConfig, dd as ModelProviderAuthMode, ay as ModelProviderConfig, de as NamespacePolicy, az as NativeKnowledgeConfig, df as NativeKnowledgeFolderRuleConfig, dg as NativeKnowledgeObsidianVaultConfig, dh as NativeKnowledgeOpenClawWorkspaceConfig, di as NotionLiveConnectorConfig, P as PluginConfig, Z as PolicyClass, dj as PrincipalFromSessionKeyMode, dk as PrincipalRule, dl as ProceduralConfig, ar as ProvenanceConfig, U as ProvenanceSource, aG as QmdSearchExplain, Q as QmdSearchResult, dm as QuestionEntry, bT as RECALL_DISCLOSURE_LEVELS, dn as ReasoningEffort, n as RecallDisclosure, dp as RecallPipelineConfig, R as RecallPlanMode, be as RecallSectionConfig, b as RecallTierExplain, dq as RecallTraceEvent, dr as RelevanceFeedback, aD as RetrievalTier, ds as SPECULATIVE_TTL_DAYS, dt as ScopeProfileAutoPromoteConfig, p as ScopeProfileConfig, q as ScopeProfileLayerId, r as ScopeProfilePromotionTarget, du as ScopeProfileTeamProjectConfig, dv as ScopeTeamConfig, dw as ScoredEntity, t as SecretRef, dx as SemanticChunkingConfigShape, S as SessionObserverBandConfig, dy as SignalLevel, aE as SignalScanResult, dz as SlotBehaviorConfig, dA as SlotMismatchMode, o as SourceConnectorProvenance, aF as TopicScore, T as TranscriptEntry, dB as TriggerMode, V as TrustWeights, Y as VerificationState, dC as confidenceTier, b$ as isRecallDisclosure } from './types-D_a6Sqjz.js';
2
2
  import './message-parts/index.js';
3
3
  import './bounded-jsonl-state.js';
4
4
  import './external-wiki-config.js';
package/dist/types.js CHANGED
@@ -4,7 +4,7 @@ import {
4
4
  SPECULATIVE_TTL_DAYS,
5
5
  confidenceTier,
6
6
  isRecallDisclosure
7
- } from "./chunk-3S63QIFQ.js";
7
+ } from "./chunk-LAQ33B5D.js";
8
8
  import "./chunk-PZ5AY32C.js";
9
9
  export {
10
10
  DEFAULT_RECALL_DISCLOSURE,
@@ -3,11 +3,11 @@ import {
3
3
  learnUtilityPromotionWeights,
4
4
  readUtilityLearningSnapshot,
5
5
  resolveUtilityLearningStatePath
6
- } from "./chunk-2F6NP3NT.js";
7
- import "./chunk-TERNBNJB.js";
6
+ } from "./chunk-HDQUQBPW.js";
7
+ import "./chunk-6FC3IZ26.js";
8
8
  import "./chunk-TBBDFYXW.js";
9
9
  import "./chunk-A2IYSXDQ.js";
10
- import "./chunk-LPSF4OQH.js";
10
+ import "./chunk-P77QX3ID.js";
11
11
  import "./chunk-PZ5AY32C.js";
12
12
  export {
13
13
  getUtilityLearningStatus,
@@ -1,5 +1,5 @@
1
1
  import { TierRoutingPolicy } from './tier-routing.js';
2
- import './types-D_Au9qJO.js';
2
+ import './types-D_a6Sqjz.js';
3
3
  import './message-parts/index.js';
4
4
  import './bounded-jsonl-state.js';
5
5
  import './operator-doctor-types.js';
@@ -2,12 +2,12 @@ import {
2
2
  applyUtilityPromotionRuntimePolicy,
3
3
  applyUtilityRankingRuntimeDelta,
4
4
  loadUtilityRuntimeValues
5
- } from "./chunk-LXOM6IQU.js";
6
- import "./chunk-2F6NP3NT.js";
7
- import "./chunk-TERNBNJB.js";
5
+ } from "./chunk-SEF4IOFE.js";
6
+ import "./chunk-HDQUQBPW.js";
7
+ import "./chunk-6FC3IZ26.js";
8
8
  import "./chunk-TBBDFYXW.js";
9
9
  import "./chunk-A2IYSXDQ.js";
10
- import "./chunk-LPSF4OQH.js";
10
+ import "./chunk-P77QX3ID.js";
11
11
  import "./chunk-PZ5AY32C.js";
12
12
  export {
13
13
  applyUtilityPromotionRuntimePolicy,
@@ -4,9 +4,9 @@ import {
4
4
  recordUtilityTelemetryEvent,
5
5
  resolveUtilityTelemetryDir,
6
6
  validateUtilityTelemetryEvent
7
- } from "./chunk-TERNBNJB.js";
7
+ } from "./chunk-6FC3IZ26.js";
8
8
  import "./chunk-A2IYSXDQ.js";
9
- import "./chunk-LPSF4OQH.js";
9
+ import "./chunk-P77QX3ID.js";
10
10
  import "./chunk-PZ5AY32C.js";
11
11
  export {
12
12
  getUtilityTelemetryStatus,
@@ -1,33 +1,34 @@
1
1
  import {
2
2
  compareVerifiedEpisodeResults,
3
3
  searchVerifiedEpisodes
4
- } from "./chunk-GD7UPIBG.js";
4
+ } from "./chunk-4JWJMRPJ.js";
5
5
  import "./chunk-B7RWBZXW.js";
6
- import "./chunk-PLCZD3LG.js";
7
- import "./chunk-UHVXE24Y.js";
6
+ import "./chunk-24BKGKGO.js";
8
7
  import "./chunk-ENTCVTQR.js";
8
+ import "./chunk-UHVXE24Y.js";
9
9
  import "./chunk-SXIMQLGV.js";
10
10
  import "./chunk-S2V7RUCL.js";
11
11
  import "./chunk-J6A3CX5N.js";
12
- import "./chunk-3S63QIFQ.js";
13
- import "./chunk-WRJVB3C2.js";
12
+ import "./chunk-LAQ33B5D.js";
14
13
  import "./chunk-S2HLHAZ4.js";
15
14
  import "./chunk-SCU65EZI.js";
15
+ import "./chunk-WRJVB3C2.js";
16
16
  import "./chunk-DM2T26WE.js";
17
17
  import "./chunk-LDXUBPMO.js";
18
18
  import "./chunk-JYIJNNN3.js";
19
19
  import "./chunk-AAD2ZS6P.js";
20
- import "./chunk-SYUBB3WM.js";
21
- import "./chunk-CGASUJVP.js";
22
- import "./chunk-R3DJVOSM.js";
20
+ import "./chunk-GKEYXXKX.js";
21
+ import "./chunk-5V6IXHPI.js";
23
22
  import "./chunk-BT7NVCML.js";
23
+ import "./chunk-R3DJVOSM.js";
24
24
  import "./chunk-YXZG5TVN.js";
25
+ import "./chunk-5GINB5LC.js";
25
26
  import "./chunk-G7D6GZ5J.js";
26
- import "./chunk-7YKVM5H3.js";
27
- import "./chunk-IJ7HK452.js";
28
- import "./chunk-PDJTHRAW.js";
29
- import "./chunk-NZBZ7IS2.js";
30
- import "./chunk-DNHVPZOD.js";
27
+ import "./chunk-PWLB4TRK.js";
28
+ import "./chunk-KMAP7SNQ.js";
29
+ import "./chunk-RBOJCG4T.js";
30
+ import "./chunk-JDCQK3C5.js";
31
+ import "./chunk-P26YHAQH.js";
31
32
  import "./chunk-6CIAGZ6X.js";
32
33
  import "./chunk-XMMESCPD.js";
33
34
  import "./chunk-42JKGUFJ.js";
@@ -38,8 +39,8 @@ import "./chunk-45GF7Y3V.js";
38
39
  import "./chunk-RGMVMVMF.js";
39
40
  import "./chunk-N7RWREIQ.js";
40
41
  import "./chunk-QBSFOKY6.js";
41
- import "./chunk-5GKPFL3S.js";
42
42
  import "./chunk-ZIKENA2C.js";
43
+ import "./chunk-5GKPFL3S.js";
43
44
  import "./chunk-PQVCH2AE.js";
44
45
  import "./chunk-6MKAMLQL.js";
45
46
  import "./chunk-JAKIDQB2.js";
@@ -4,10 +4,10 @@ import {
4
4
  resolveWorkProductLedgerDir,
5
5
  searchWorkProductLedgerEntries,
6
6
  validateWorkProductLedgerEntry
7
- } from "./chunk-ZRWB5D4H.js";
7
+ } from "./chunk-WT6UL3UA.js";
8
8
  import "./chunk-ZBJMUXZH.js";
9
9
  import "./chunk-A2IYSXDQ.js";
10
- import "./chunk-LPSF4OQH.js";
10
+ import "./chunk-P77QX3ID.js";
11
11
  import "./chunk-PZ5AY32C.js";
12
12
  export {
13
13
  getWorkProductLedgerStatus,
@@ -1,4 +1,4 @@
1
- import { w as MemoryCategory } from './types-D_Au9qJO.js';
1
+ import { w as MemoryCategory } from './types-D_a6Sqjz.js';
2
2
  import './message-parts/index.js';
3
3
  import './bounded-jsonl-state.js';
4
4
  import './operator-doctor-types.js';
@@ -11,9 +11,9 @@ import {
11
11
  isMemoryCategory,
12
12
  isSealedMemoryEnvelope,
13
13
  sealedWriteToLegacyArgs
14
- } from "./chunk-CGASUJVP.js";
15
- import "./chunk-R3DJVOSM.js";
14
+ } from "./chunk-5V6IXHPI.js";
16
15
  import "./chunk-BT7NVCML.js";
16
+ import "./chunk-R3DJVOSM.js";
17
17
  import "./chunk-5GKPFL3S.js";
18
18
  import "./chunk-JAKIDQB2.js";
19
19
  import "./chunk-P7FMDTKL.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remnic/core",
3
- "version": "9.48.1",
3
+ "version": "9.49.1",
4
4
  "description": "Framework-agnostic Remnic memory engine — orchestrator, storage, extraction, search, trust zones",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -11,6 +11,16 @@
11
11
  "remnic-source": "./src/index.ts",
12
12
  "import": "./dist/index.js"
13
13
  },
14
+ "./maintenance/atomic-file": {
15
+ "types": "./dist/maintenance/atomic-file.d.ts",
16
+ "remnic-source": "./src/maintenance/atomic-file.ts",
17
+ "import": "./dist/maintenance/atomic-file.js"
18
+ },
19
+ "./maintenance/atomic-file.js": {
20
+ "types": "./dist/maintenance/atomic-file.d.ts",
21
+ "remnic-source": "./src/maintenance/atomic-file.ts",
22
+ "import": "./dist/maintenance/atomic-file.js"
23
+ },
14
24
  "./abort-error": {
15
25
  "types": "./dist/abort-error.d.ts",
16
26
  "remnic-source": "./src/abort-error.ts",
@@ -36,6 +46,16 @@
36
46
  "remnic-source": "./src/abstraction-nodes.ts",
37
47
  "import": "./dist/abstraction-nodes.js"
38
48
  },
49
+ "./harmonic-construction": {
50
+ "types": "./dist/harmonic-construction.d.ts",
51
+ "remnic-source": "./src/harmonic-construction.ts",
52
+ "import": "./dist/harmonic-construction.js"
53
+ },
54
+ "./harmonic-construction.js": {
55
+ "types": "./dist/harmonic-construction.d.ts",
56
+ "remnic-source": "./src/harmonic-construction.ts",
57
+ "import": "./dist/harmonic-construction.js"
58
+ },
39
59
  "./access-audit": {
40
60
  "types": "./dist/access-audit.d.ts",
41
61
  "remnic-source": "./src/access-audit.ts",
@@ -515,6 +535,16 @@
515
535
  "remnic-source": "./src/coding/coding-graph-types.ts",
516
536
  "import": "./dist/coding/coding-graph-types.js"
517
537
  },
538
+ "./coding/pre-action-gate": {
539
+ "types": "./dist/coding/pre-action-gate.d.ts",
540
+ "remnic-source": "./src/coding/pre-action-gate.ts",
541
+ "import": "./dist/coding/pre-action-gate.js"
542
+ },
543
+ "./coding/pre-action-gate.js": {
544
+ "types": "./dist/coding/pre-action-gate.d.ts",
545
+ "remnic-source": "./src/coding/pre-action-gate.ts",
546
+ "import": "./dist/coding/pre-action-gate.js"
547
+ },
518
548
  "./commitment-ledger": {
519
549
  "types": "./dist/commitment-ledger.d.ts",
520
550
  "remnic-source": "./src/commitment-ledger.ts",
@@ -3096,7 +3126,7 @@
3096
3126
  "core"
3097
3127
  ],
3098
3128
  "peerDependencies": {
3099
- "@remnic/coding-graph": "^9.48.1"
3129
+ "@remnic/coding-graph": "^9.49.1"
3100
3130
  },
3101
3131
  "peerDependenciesMeta": {
3102
3132
  "@remnic/coding-graph": {
@@ -1,6 +1,7 @@
1
+ import { mkdir, unlink, writeFile } from "node:fs/promises";
1
2
  import path from "node:path";
2
- import { mkdir, writeFile } from "node:fs/promises";
3
- import { listJsonFiles, readJsonFile } from "./json-store.js";
3
+ import { listJsonFilesStrict, readJsonFile, withJsonStoreMutationLock, writeJsonFileAtomic } from "./json-store.js";
4
+ import { compareDeterministicStrings, mergeSortedUniqueStrings } from "./deterministic-order.js";
4
5
  import {
5
6
  assertIsoRecordedAt,
6
7
  assertSafePathSegment,
@@ -11,6 +12,10 @@ import {
11
12
  validateStringRecord,
12
13
  } from "./store-contract.js";
13
14
 
15
+ function isNotFoundError(error: unknown): boolean {
16
+ return typeof error === "object" && error !== null && "code" in error && error.code === "ENOENT";
17
+ }
18
+
14
19
  export type AbstractionNodeKind = "episode" | "topic" | "project" | "workflow" | "constraint";
15
20
  export type AbstractionLevel = "micro" | "meso" | "macro";
16
21
 
@@ -109,6 +114,177 @@ export async function recordAbstractionNode(options: {
109
114
  return filePath;
110
115
  }
111
116
 
117
+ const MAX_ABSTRACTION_NODE_VALUES = 50;
118
+
119
+ function mergeSortedValues(existing: string[] | undefined, incoming: string[] | undefined): string[] {
120
+ return mergeSortedUniqueStrings(existing, incoming).slice(0, MAX_ABSTRACTION_NODE_VALUES);
121
+ }
122
+
123
+ export const HARMONIC_SOURCE_MEMORY_INSERTED_AT_KEY = "remnic.harmonic.sourceMemoryInsertedAt.v1";
124
+
125
+ function sourceMemoryInsertedAt(node: AbstractionNode | undefined): Map<string, string> {
126
+ const insertedAtById = new Map<string, string>();
127
+ if (!node) return insertedAtById;
128
+ let stored: Record<string, unknown> = {};
129
+ try {
130
+ const parsed = JSON.parse(node.metadata?.[HARMONIC_SOURCE_MEMORY_INSERTED_AT_KEY] ?? "{}") as unknown;
131
+ stored = isRecord(parsed) ? parsed : {};
132
+ } catch {
133
+ stored = {};
134
+ }
135
+ for (const memoryId of node.sourceMemoryIds ?? []) {
136
+ const insertedAt = stored[memoryId];
137
+ insertedAtById.set(
138
+ memoryId,
139
+ typeof insertedAt === "string" && Number.isFinite(Date.parse(insertedAt)) ? insertedAt : node.recordedAt
140
+ );
141
+ }
142
+ return insertedAtById;
143
+ }
144
+
145
+ function mergeRecentSourceMemoryIds(
146
+ existing: AbstractionNode | undefined,
147
+ incoming: AbstractionNode
148
+ ): { ids: string[]; insertedAtJson: string } {
149
+ const insertedAtById = sourceMemoryInsertedAt(existing);
150
+ const incomingSources = [...sourceMemoryInsertedAt(incoming).entries()].sort(
151
+ ([leftId, leftAt], [rightId, rightAt]) =>
152
+ Date.parse(leftAt) - Date.parse(rightAt) || compareDeterministicStrings(leftId, rightId)
153
+ );
154
+ let nextInsertedAtMs = Math.max(
155
+ Date.now(),
156
+ [...insertedAtById.values()].reduce((latest, insertedAt) => Math.max(latest, Date.parse(insertedAt) + 1), 0)
157
+ );
158
+ for (const [memoryId] of incomingSources) {
159
+ if (insertedAtById.has(memoryId)) continue;
160
+ insertedAtById.set(memoryId, new Date(nextInsertedAtMs).toISOString());
161
+ nextInsertedAtMs++;
162
+ }
163
+ const retained = [...insertedAtById.entries()]
164
+ .sort(
165
+ ([leftId, leftAt], [rightId, rightAt]) =>
166
+ Date.parse(rightAt) - Date.parse(leftAt) || compareDeterministicStrings(leftId, rightId)
167
+ )
168
+ .slice(0, MAX_ABSTRACTION_NODE_VALUES);
169
+ const ids = retained.map(([memoryId]) => memoryId).sort(compareDeterministicStrings);
170
+ const retainedInsertedAt = Object.fromEntries(ids.map((memoryId) => [memoryId, insertedAtById.get(memoryId)]));
171
+ return { ids, insertedAtJson: JSON.stringify(retainedInsertedAt) };
172
+ }
173
+
174
+ type AbstractionNodeFile = {
175
+ filePath: string;
176
+ node: AbstractionNode;
177
+ };
178
+
179
+ function compareNodeFiles(left: AbstractionNodeFile, right: AbstractionNodeFile): number {
180
+ return (
181
+ Date.parse(right.node.recordedAt) - Date.parse(left.node.recordedAt) ||
182
+ compareDeterministicStrings(left.filePath, right.filePath)
183
+ );
184
+ }
185
+
186
+ function compareIncomingNodes(left: AbstractionNode, right: AbstractionNode): number {
187
+ return (
188
+ Date.parse(left.recordedAt) - Date.parse(right.recordedAt) ||
189
+ compareDeterministicStrings(canonicalNodeKey(left), canonicalNodeKey(right))
190
+ );
191
+ }
192
+
193
+ function canonicalMetadata(metadata: Record<string, string> | undefined): Record<string, string> {
194
+ return Object.fromEntries(
195
+ Object.entries(metadata ?? {}).sort(([left], [right]) => compareDeterministicStrings(left, right))
196
+ );
197
+ }
198
+
199
+ function canonicalNodeKey(node: AbstractionNode): string {
200
+ return JSON.stringify({
201
+ ...node,
202
+ metadata: canonicalMetadata(node.metadata),
203
+ });
204
+ }
205
+
206
+ function mergeAbstractionNodes(existing: AbstractionNode | undefined, incoming: AbstractionNode): AbstractionNode {
207
+ const incomingIsNewest = !existing || Date.parse(existing.recordedAt) <= Date.parse(incoming.recordedAt);
208
+ const newest = incomingIsNewest ? incoming : existing;
209
+ const older = incomingIsNewest ? existing : incoming;
210
+ if (!newest) throw new Error("abstraction node merge requires a node");
211
+ const retainedSources = mergeRecentSourceMemoryIds(existing, incoming);
212
+ const mergedMetadata = canonicalMetadata({
213
+ ...(older?.metadata ?? {}),
214
+ ...(newest.metadata ?? {}),
215
+ [HARMONIC_SOURCE_MEMORY_INSERTED_AT_KEY]: retainedSources.insertedAtJson,
216
+ });
217
+ return validateAbstractionNode({
218
+ ...newest,
219
+ sourceMemoryIds: retainedSources.ids,
220
+ entityRefs: mergeSortedValues(existing?.entityRefs, incoming.entityRefs),
221
+ tags: mergeSortedValues(existing?.tags, incoming.tags),
222
+ metadata: mergedMetadata,
223
+ });
224
+ }
225
+
226
+ export async function upsertAbstractionNodes(options: {
227
+ memoryDir: string;
228
+ abstractionNodeStoreDir?: string;
229
+ nodes: AbstractionNode[];
230
+ }): Promise<string[]> {
231
+ const rootDir = resolveAbstractionNodeStoreDir(options.memoryDir, options.abstractionNodeStoreDir);
232
+ const incomingNodes = options.nodes.map(validateAbstractionNode);
233
+ if (incomingNodes.length === 0) return [];
234
+ return withJsonStoreMutationLock(rootDir, async () => {
235
+ const nodesDir = path.join(rootDir, "nodes");
236
+ const nodeFiles = await listJsonFilesStrict(nodesDir, { allowMissingDirectory: true });
237
+ const existingNodes = await Promise.all(
238
+ nodeFiles.map(async (filePath) => ({
239
+ filePath,
240
+ node: validateAbstractionNode(await readJsonFile(filePath)),
241
+ }))
242
+ );
243
+ const existingById = new Map<string, AbstractionNodeFile[]>();
244
+ for (const existing of existingNodes) {
245
+ const records = existingById.get(existing.node.nodeId) ?? [];
246
+ records.push(existing);
247
+ existingById.set(existing.node.nodeId, records);
248
+ }
249
+ const incomingById = new Map<string, AbstractionNode[]>();
250
+ for (const incoming of incomingNodes) {
251
+ const records = incomingById.get(incoming.nodeId) ?? [];
252
+ records.push(incoming);
253
+ incomingById.set(incoming.nodeId, records);
254
+ }
255
+
256
+ const filePaths: string[] = [];
257
+ for (const nodeId of [...incomingById.keys()].sort(compareDeterministicStrings)) {
258
+ const existing = (existingById.get(nodeId) ?? []).sort(compareNodeFiles);
259
+ const incoming = (incomingById.get(nodeId) ?? []).sort(compareIncomingNodes);
260
+ let merged: AbstractionNode | undefined;
261
+ for (const next of [...existing].reverse()) merged = mergeAbstractionNodes(merged, next.node);
262
+ for (const next of incoming) merged = mergeAbstractionNodes(merged, next);
263
+ if (!merged) throw new Error(`abstraction node batch has no node: ${nodeId}`);
264
+ const filePath =
265
+ existing[0]?.filePath ?? path.join(nodesDir, recordStoreDay(merged.recordedAt), `${merged.nodeId}.json`);
266
+ await writeJsonFileAtomic(filePath, merged);
267
+ for (const duplicate of existing.slice(1)) {
268
+ await unlink(duplicate.filePath).catch((error) => {
269
+ if (!isNotFoundError(error)) throw error;
270
+ });
271
+ }
272
+ filePaths.push(filePath);
273
+ }
274
+ return filePaths;
275
+ });
276
+ }
277
+
278
+ export async function upsertAbstractionNode(options: {
279
+ memoryDir: string;
280
+ abstractionNodeStoreDir?: string;
281
+ node: AbstractionNode;
282
+ }): Promise<string> {
283
+ const [filePath] = await upsertAbstractionNodes({ ...options, nodes: [options.node] });
284
+ if (!filePath) throw new Error("abstraction node upsert did not write a file");
285
+ return filePath;
286
+ }
287
+
112
288
  export async function getAbstractionNodeStoreStatus(options: {
113
289
  memoryDir: string;
114
290
  abstractionNodeStoreDir?: string;
@@ -117,7 +293,7 @@ export async function getAbstractionNodeStoreStatus(options: {
117
293
  }): Promise<AbstractionNodeStoreStatus> {
118
294
  const rootDir = resolveAbstractionNodeStoreDir(options.memoryDir, options.abstractionNodeStoreDir);
119
295
  const nodesDir = path.join(rootDir, "nodes");
120
- const files = await listJsonFiles(nodesDir);
296
+ const files = await listJsonFilesStrict(nodesDir, { allowMissingDirectory: true });
121
297
  const nodes: AbstractionNode[] = [];
122
298
  const invalidNodes: Array<{ path: string; error: string }> = [];
123
299
 
@@ -132,7 +308,9 @@ export async function getAbstractionNodeStoreStatus(options: {
132
308
  }
133
309
  }
134
310
 
135
- nodes.sort((a, b) => b.recordedAt.localeCompare(a.recordedAt));
311
+ nodes.sort(
312
+ (a, b) => Date.parse(b.recordedAt) - Date.parse(a.recordedAt) || compareDeterministicStrings(a.nodeId, b.nodeId)
313
+ );
136
314
 
137
315
  const byKind: Partial<Record<AbstractionNodeKind, number>> = {};
138
316
  const byLevel: Partial<Record<AbstractionLevel, number>> = {};