@remnic/core 9.69.32 → 9.69.34

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 (775) hide show
  1. package/dist/access-admin-ops-surface.d.ts +13 -11
  2. package/dist/access-admin-ops-surface.js +64 -59
  3. package/dist/access-authorization-probe.d.ts +13 -11
  4. package/dist/access-authorization-probe.js +65 -60
  5. package/dist/access-boundary.d.ts +13 -11
  6. package/dist/access-boundary.js +64 -59
  7. package/dist/access-cli.js +140 -136
  8. package/dist/access-cli.js.map +1 -1
  9. package/dist/access-coding-context-resolution.d.ts +2 -1
  10. package/dist/access-coding-context-resolution.js +3 -3
  11. package/dist/access-extraction-force-flush.d.ts +13 -11
  12. package/dist/access-extraction-force-flush.js +64 -59
  13. package/dist/access-health-types.d.ts +2 -1
  14. package/dist/access-http-briefing.d.ts +13 -11
  15. package/dist/access-http-briefing.js +65 -60
  16. package/dist/access-http-lcm-compaction.d.ts +13 -11
  17. package/dist/access-http-lifecycle-flush.d.ts +13 -11
  18. package/dist/access-http-offline-stream.d.ts +13 -11
  19. package/dist/access-http-query.d.ts +3 -2
  20. package/dist/access-http-query.js +66 -61
  21. package/dist/access-http.d.ts +14 -12
  22. package/dist/access-http.js +86 -82
  23. package/dist/access-identity-continuity-surface.d.ts +11 -9
  24. package/dist/access-identity-continuity-surface.js +64 -59
  25. package/dist/access-lcm-surface.d.ts +13 -11
  26. package/dist/access-lcm-surface.js +64 -59
  27. package/dist/access-mcp.d.ts +13 -11
  28. package/dist/access-mcp.js +73 -69
  29. package/dist/access-memory-search-fanout.d.ts +3 -2
  30. package/dist/{access-namespace-preflight-BsvmyENS.d.ts → access-namespace-preflight-kXG8MvYx.d.ts} +1 -1
  31. package/dist/access-namespace-preflight.d.ts +4 -3
  32. package/dist/access-namespace-preflight.js +64 -59
  33. package/dist/access-observe-transcript.d.ts +11 -9
  34. package/dist/access-observe-transcript.js +3 -3
  35. package/dist/access-observe-write-surface.d.ts +15 -13
  36. package/dist/access-observe-write-surface.js +64 -59
  37. package/dist/access-offline-manifest.d.ts +47 -11
  38. package/dist/access-offline-manifest.js +18 -16
  39. package/dist/access-operations-batch.js +67 -63
  40. package/dist/access-operations.d.ts +18 -16
  41. package/dist/access-operations.js +72 -68
  42. package/dist/access-recall-concurrency.d.ts +13 -11
  43. package/dist/access-recall-concurrency.js +64 -59
  44. package/dist/access-recall-response.d.ts +13 -11
  45. package/dist/access-recall-response.js +64 -59
  46. package/dist/access-recall-surface.d.ts +13 -11
  47. package/dist/access-recall-surface.js +64 -59
  48. package/dist/access-schema.d.ts +138 -96
  49. package/dist/access-schema.js +15 -1
  50. package/dist/{access-service-CCpOuS46.d.ts → access-service-WUm2LnXZ.d.ts} +110 -108
  51. package/dist/access-service-helpers.d.ts +13 -11
  52. package/dist/access-service.d.ts +13 -11
  53. package/dist/access-service.js +64 -59
  54. package/dist/access-surface-catalog.d.ts +13 -11
  55. package/dist/access-surface-catalog.js +66 -61
  56. package/dist/access-surface-catalog.js.map +1 -1
  57. package/dist/access-wearables-meetings-surface.d.ts +4 -3
  58. package/dist/action-confidence.d.ts +2 -1
  59. package/dist/active-memory-bridge.d.ts +2 -1
  60. package/dist/active-memory-bridge.js +2 -2
  61. package/dist/active-recall.d.ts +2 -1
  62. package/dist/active-recall.js +14 -12
  63. package/dist/active-recall.js.map +1 -1
  64. package/dist/activity/digest.d.ts +56 -0
  65. package/dist/activity/digest.js +32 -0
  66. package/dist/adapters/index.d.ts +46 -1
  67. package/dist/adapters/index.js +13 -9
  68. package/dist/adapters/registry.js +3 -3
  69. package/dist/ambient-provenance.d.ts +2 -1
  70. package/dist/artifact-search.d.ts +2 -1
  71. package/dist/{auto-sync-NSHLUAQI.js → auto-sync-4YFATLFQ.js} +10 -9
  72. package/dist/{auto-sync-NSHLUAQI.js.map → auto-sync-4YFATLFQ.js.map} +1 -1
  73. package/dist/behavior-learner.d.ts +2 -1
  74. package/dist/behavior-signals.d.ts +2 -1
  75. package/dist/bootstrap.d.ts +11 -9
  76. package/dist/briefing-window.d.ts +3 -2
  77. package/dist/briefing.d.ts +3 -2
  78. package/dist/briefing.js +28 -27
  79. package/dist/buffer-surprise-report.d.ts +2 -1
  80. package/dist/buffer-turn-helpers.d.ts +2 -1
  81. package/dist/buffer.d.ts +3 -2
  82. package/dist/buffer.js +12 -11
  83. package/dist/bulk-import/index.d.ts +4 -3
  84. package/dist/calibration.d.ts +2 -1
  85. package/dist/calibration.js +3 -2
  86. package/dist/calibration.js.map +1 -1
  87. package/dist/capabilities.d.ts +2 -1
  88. package/dist/{capsule-merge-IPG4IOFP.js → capsule-merge-ZCXUPLNJ.js} +2 -2
  89. package/dist/{catalog-CDZLyiXL.d.ts → catalog-BaCx29iv.d.ts} +1 -1
  90. package/dist/causal-behavior.d.ts +2 -1
  91. package/dist/causal-consolidation.d.ts +2 -1
  92. package/dist/causal-consolidation.js +29 -28
  93. package/dist/causal-consolidation.js.map +1 -1
  94. package/dist/causal-trajectory-graph.d.ts +2 -1
  95. package/dist/{chunk-CDKHKZL5.js → chunk-2524MOWK.js} +2 -2
  96. package/dist/{chunk-HVAEXYPL.js → chunk-255PC37A.js} +47 -25
  97. package/dist/chunk-255PC37A.js.map +1 -0
  98. package/dist/{chunk-IY2FVXM6.js → chunk-2AU4D4HQ.js} +3 -3
  99. package/dist/{chunk-QDY6KYTN.js → chunk-2JCA2PQT.js} +3 -3
  100. package/dist/{chunk-RSVEP77Y.js → chunk-2UZ5ZH6W.js} +3 -3
  101. package/dist/{chunk-XQ2Q43XD.js → chunk-326KUXIR.js} +15 -648
  102. package/dist/chunk-326KUXIR.js.map +1 -0
  103. package/dist/{chunk-NWWXSJX5.js → chunk-34QW2LK2.js} +2 -2
  104. package/dist/{chunk-S7DPKM5W.js → chunk-353C5UNV.js} +1 -1
  105. package/dist/{chunk-GQOMZ3MK.js → chunk-36UBSLFN.js} +2 -2
  106. package/dist/{chunk-DBQWVT2H.js → chunk-3CBI2ZSA.js} +2 -2
  107. package/dist/{chunk-NZXEK3UF.js → chunk-3Q3N35W7.js} +2 -2
  108. package/dist/{chunk-YYGZJPOK.js → chunk-42DJ235G.js} +2 -2
  109. package/dist/{chunk-7VJXIDOC.js → chunk-4JVQRFZD.js} +9 -9
  110. package/dist/{chunk-22FVR2KE.js → chunk-4MIS4CQW.js} +6 -2
  111. package/dist/chunk-4MIS4CQW.js.map +1 -0
  112. package/dist/{chunk-WHBVXTUI.js → chunk-4PB2MBY6.js} +9 -9
  113. package/dist/{chunk-TEYN7ZYF.js → chunk-4WCNPQQ5.js} +4 -4
  114. package/dist/{chunk-Z4PCVRTN.js → chunk-5A7ZUOBA.js} +217 -396
  115. package/dist/chunk-5A7ZUOBA.js.map +1 -0
  116. package/dist/chunk-5HYUUFMQ.js +1280 -0
  117. package/dist/chunk-5HYUUFMQ.js.map +1 -0
  118. package/dist/{chunk-RBGREYVJ.js → chunk-5QBDLMGG.js} +2 -2
  119. package/dist/{chunk-RKBLRTNT.js → chunk-5SDSVX7N.js} +2 -2
  120. package/dist/{chunk-LPECRQO4.js → chunk-5THU7NFP.js} +3 -3
  121. package/dist/{chunk-N7RWREIQ.js → chunk-65RENJGB.js} +6 -1
  122. package/dist/chunk-65RENJGB.js.map +1 -0
  123. package/dist/{chunk-LWA7MDVO.js → chunk-6CCRSQWT.js} +2 -2
  124. package/dist/{chunk-TIT2C6WX.js → chunk-6XYC7NM4.js} +2 -2
  125. package/dist/{chunk-FHQSPTPZ.js → chunk-6YAIN5XJ.js} +2 -2
  126. package/dist/{chunk-PV36INNL.js → chunk-757NP436.js} +3 -3
  127. package/dist/{chunk-WJBZMNNS.js → chunk-7CAY3YKP.js} +742 -29
  128. package/dist/chunk-7CAY3YKP.js.map +1 -0
  129. package/dist/{chunk-6H5JYDOM.js → chunk-7J2CGXG3.js} +2 -2
  130. package/dist/{chunk-FBMYGNOC.js → chunk-A2YQL2FF.js} +6 -6
  131. package/dist/chunk-A5UQ52YQ.js +211 -0
  132. package/dist/chunk-A5UQ52YQ.js.map +1 -0
  133. package/dist/{chunk-X2NFFBTO.js → chunk-A7GQBJP5.js} +4 -4
  134. package/dist/{chunk-MPYD657E.js → chunk-A7WOWDZK.js} +2 -2
  135. package/dist/{chunk-C4OTC6WY.js → chunk-AIKTQVV3.js} +3 -3
  136. package/dist/{chunk-CGC5UQCF.js → chunk-AKE4GGQ3.js} +2 -2
  137. package/dist/{chunk-VP67GZ7T.js → chunk-APFKZVJS.js} +2 -2
  138. package/dist/{chunk-M75RYSHS.js → chunk-AQIRQUCP.js} +2 -2
  139. package/dist/{chunk-S7T2TY65.js → chunk-AXFR2NQ5.js} +3 -3
  140. package/dist/{chunk-PSPABFN2.js → chunk-BD7JTBYP.js} +4 -4
  141. package/dist/{chunk-FCSZ4K2X.js → chunk-BJJWRWER.js} +3 -3
  142. package/dist/{chunk-JT3EB7ZL.js → chunk-BNGHPYZU.js} +5 -5
  143. package/dist/chunk-BRZWWUCJ.js +13 -0
  144. package/dist/{chunk-FYDW33ZB.js.map → chunk-BRZWWUCJ.js.map} +1 -1
  145. package/dist/{chunk-MFJBANPX.js → chunk-C2BFTYD7.js} +2 -2
  146. package/dist/{chunk-3JVLGJCY.js → chunk-C6KRO3SU.js} +2 -2
  147. package/dist/{chunk-Q3O3VKRB.js → chunk-CRUFVJOX.js} +16 -15
  148. package/dist/chunk-CRUFVJOX.js.map +1 -0
  149. package/dist/{chunk-AOCP6JA7.js → chunk-D3IZCN5P.js} +4 -4
  150. package/dist/{chunk-ROKKIMON.js → chunk-EJIEQOPB.js} +5 -5
  151. package/dist/{chunk-ET356KSB.js → chunk-F4TWWUMP.js} +2 -2
  152. package/dist/{chunk-CLLPJ6QT.js → chunk-FQXJAC3T.js} +2 -2
  153. package/dist/{chunk-DD5JFCWM.js → chunk-GCBIXUPT.js} +2 -2
  154. package/dist/{chunk-ROGRI25A.js → chunk-I3H5LFOI.js} +2 -2
  155. package/dist/{chunk-S65WXHNK.js → chunk-IFFLUCCU.js} +2 -2
  156. package/dist/{chunk-MYMNC6O5.js → chunk-ISYZ5DUI.js} +64 -60
  157. package/dist/{chunk-MYMNC6O5.js.map → chunk-ISYZ5DUI.js.map} +1 -1
  158. package/dist/{chunk-D5LORF7A.js → chunk-JZDH2ZZK.js} +3 -3
  159. package/dist/{chunk-2GPE5UCR.js → chunk-K6IPSW5B.js} +2 -2
  160. package/dist/{chunk-HG6HXVHQ.js → chunk-KDJHLOZP.js} +10 -10
  161. package/dist/{chunk-I27RSQRR.js → chunk-KYGOQV37.js} +2 -2
  162. package/dist/{chunk-JEIXTYVG.js → chunk-L2QLDZJC.js} +46 -17
  163. package/dist/chunk-L2QLDZJC.js.map +1 -0
  164. package/dist/{chunk-A7XEPMQ6.js → chunk-LAVJC57X.js} +3 -3
  165. package/dist/chunk-LAVJC57X.js.map +1 -0
  166. package/dist/{chunk-VZWXFXLX.js → chunk-LMCD5W5B.js} +2 -2
  167. package/dist/{chunk-3QQTXYZ6.js → chunk-LSLCFCCQ.js} +2 -1
  168. package/dist/chunk-LSLCFCCQ.js.map +1 -0
  169. package/dist/{chunk-MKD3OMPS.js → chunk-M3MYMWXG.js} +2 -2
  170. package/dist/{chunk-DITMGZOL.js → chunk-MMG5K6XJ.js} +2 -2
  171. package/dist/{chunk-VGXM5B4H.js → chunk-MNIPH6LD.js} +2 -2
  172. package/dist/{chunk-CZYYJZB6.js → chunk-ND2O2PVN.js} +1014 -1318
  173. package/dist/chunk-ND2O2PVN.js.map +1 -0
  174. package/dist/chunk-NPNSKE76.js +220 -0
  175. package/dist/chunk-NPNSKE76.js.map +1 -0
  176. package/dist/{chunk-MKWKYHXJ.js → chunk-OB3XMWX5.js} +4 -4
  177. package/dist/{chunk-XU6OEECT.js → chunk-OQQXGYMX.js} +3 -3
  178. package/dist/{chunk-GTWHVXPA.js → chunk-OZUXKUPD.js} +6 -4
  179. package/dist/{chunk-GTWHVXPA.js.map → chunk-OZUXKUPD.js.map} +1 -1
  180. package/dist/chunk-PCEYGOSL.js +66 -0
  181. package/dist/chunk-PCEYGOSL.js.map +1 -0
  182. package/dist/{chunk-47DEYNMR.js → chunk-PEXW2JCK.js} +2 -2
  183. package/dist/{chunk-EEOUMG3J.js → chunk-PWPIERBM.js} +38 -6
  184. package/dist/chunk-PWPIERBM.js.map +1 -0
  185. package/dist/chunk-Q4AUIFUA.js +111 -0
  186. package/dist/chunk-Q4AUIFUA.js.map +1 -0
  187. package/dist/{chunk-SO7SV523.js → chunk-Q6LCCIZN.js} +1 -1
  188. package/dist/chunk-Q6LCCIZN.js.map +1 -0
  189. package/dist/{chunk-42SDNZCU.js → chunk-QF4J3KMV.js} +19 -19
  190. package/dist/{chunk-SB6PSOP7.js → chunk-QLJ6762U.js} +2 -2
  191. package/dist/{chunk-XOVKXJEP.js → chunk-R3TLVTWW.js} +3 -3
  192. package/dist/{chunk-PHNAB54Q.js → chunk-RQO3J4MR.js} +2 -2
  193. package/dist/{chunk-5N53UBH2.js → chunk-RR7G2X7C.js} +5 -5
  194. package/dist/{chunk-DCJ3YFIC.js → chunk-S2ULTQZR.js} +2 -2
  195. package/dist/{chunk-GY5WZBA6.js → chunk-S76KRJDG.js} +3 -3
  196. package/dist/{chunk-H272ZPQ3.js → chunk-SHEHQBCG.js} +124 -23
  197. package/dist/chunk-SHEHQBCG.js.map +1 -0
  198. package/dist/{chunk-EEC4PCG5.js → chunk-SZDLX763.js} +2 -2
  199. package/dist/{chunk-SQJ3SDIW.js → chunk-SZWEDG3H.js} +13 -7
  200. package/dist/chunk-SZWEDG3H.js.map +1 -0
  201. package/dist/{chunk-E2ZHGBAK.js → chunk-T2JSUEH6.js} +2 -2
  202. package/dist/{chunk-QMGXMJ2O.js → chunk-T2YFZ27G.js} +9 -9
  203. package/dist/{chunk-LEPOP46W.js → chunk-TFA6HPOA.js} +4 -4
  204. package/dist/{chunk-BA6WOZOT.js → chunk-TK4FHQRN.js} +4 -4
  205. package/dist/chunk-TLHNF6GA.js +647 -0
  206. package/dist/chunk-TLHNF6GA.js.map +1 -0
  207. package/dist/{chunk-ZNJSBIP4.js → chunk-TNSCIPBQ.js} +4 -4
  208. package/dist/{chunk-YUMDFDUA.js → chunk-TWYTGIBR.js} +4 -4
  209. package/dist/{chunk-FDLDOEO6.js → chunk-UBG4GAEP.js} +51 -6
  210. package/dist/chunk-UBG4GAEP.js.map +1 -0
  211. package/dist/{chunk-EZZV7OQL.js → chunk-UEZKN6VR.js} +2 -2
  212. package/dist/{chunk-HY55QQD7.js → chunk-UJX4I26O.js} +2 -2
  213. package/dist/{chunk-BLUYQFRH.js → chunk-VELCIWJZ.js} +15 -11
  214. package/dist/chunk-VELCIWJZ.js.map +1 -0
  215. package/dist/{chunk-CBCNKKZD.js → chunk-VIZR45AN.js} +2 -2
  216. package/dist/{chunk-ZG74PWRW.js → chunk-VZAKYDMJ.js} +2 -2
  217. package/dist/{chunk-ITPS5DDH.js → chunk-W5BLTZZJ.js} +8 -8
  218. package/dist/chunk-W6IJMWTZ.js +72 -0
  219. package/dist/chunk-W6IJMWTZ.js.map +1 -0
  220. package/dist/{chunk-H3TKENU4.js → chunk-WIKO4SCR.js} +5 -5
  221. package/dist/{chunk-YFLLGRXO.js → chunk-X2QPKLPL.js} +2 -2
  222. package/dist/{chunk-FGGYSN4P.js → chunk-X424T5JQ.js} +2 -2
  223. package/dist/{chunk-NAXDPKVM.js → chunk-XPJNT6PI.js} +4 -4
  224. package/dist/{chunk-2JVJ7UHC.js → chunk-XQU3CPF2.js} +4 -2
  225. package/dist/chunk-XQU3CPF2.js.map +1 -0
  226. package/dist/chunk-XW2T4QAW.js +1 -0
  227. package/dist/{chunk-VED2YHUD.js → chunk-YEDVOYL2.js} +2 -2
  228. package/dist/{chunk-TLPZ6MKZ.js → chunk-YEN4TREG.js} +541 -5
  229. package/dist/chunk-YEN4TREG.js.map +1 -0
  230. package/dist/{chunk-RC5DXXWC.js → chunk-YM7YN37H.js} +2 -2
  231. package/dist/{chunk-VLXBE57O.js → chunk-YVGXH72Y.js} +2 -2
  232. package/dist/{chunk-YQAXP5AC.js → chunk-YXLUTALO.js} +5 -5
  233. package/dist/{chunk-565C6ZFO.js → chunk-Z7YDVHDI.js} +2 -2
  234. package/dist/{chunk-O75CRYGF.js → chunk-ZEFVK7XC.js} +1 -1
  235. package/dist/chunk-ZEFVK7XC.js.map +1 -0
  236. package/dist/{chunk-XUE46UYW.js → chunk-ZLN7AROH.js} +6 -6
  237. package/dist/{chunk-GVG3JYBI.js → chunk-ZMKYCFJ7.js} +640 -199
  238. package/dist/chunk-ZMKYCFJ7.js.map +1 -0
  239. package/dist/{chunk-HK32G473.js → chunk-ZWEZXVYH.js} +2 -2
  240. package/dist/{cli-NEEdq5Rt.d.ts → cli-5mTYh1Tn.d.ts} +5 -5
  241. package/dist/cli-fallback.d.ts +11 -4
  242. package/dist/cli-fallback.js +5 -1
  243. package/dist/cli.d.ts +15 -13
  244. package/dist/cli.js +110 -106
  245. package/dist/coding/export-okf-codegraph.d.ts +2 -1
  246. package/dist/coding/export-okf-codegraph.js +34 -32
  247. package/dist/coding/export-okf-codegraph.js.map +1 -1
  248. package/dist/coding/pre-action-gate.d.ts +2 -1
  249. package/dist/compat/checks.js +2 -2
  250. package/dist/compat/codex-cli-fallback.d.ts +1 -1
  251. package/dist/compat/codex-cli-fallback.js +5 -1
  252. package/dist/compat/codex-cli-fallback.js.map +1 -1
  253. package/dist/compounding/engine.d.ts +3 -2
  254. package/dist/compounding/engine.js +29 -28
  255. package/dist/compounding/preference-consolidator.d.ts +2 -1
  256. package/dist/compression-optimizer.d.ts +2 -1
  257. package/dist/config.d.ts +2 -1
  258. package/dist/config.js +14 -12
  259. package/dist/connectors/codex-materialize-runner.d.ts +2 -1
  260. package/dist/connectors/codex-materialize-runner.js +28 -27
  261. package/dist/connectors/codex-materialize.d.ts +2 -1
  262. package/dist/connectors/index.d.ts +2 -1
  263. package/dist/connectors/index.js +30 -29
  264. package/dist/consolidation-provenance-check.d.ts +3 -2
  265. package/dist/consolidation-undo.d.ts +3 -2
  266. package/dist/contradiction/index.d.ts +4 -3
  267. package/dist/contradiction/index.js +5 -5
  268. package/dist/{contradiction-scan-NOYMFG66.js → contradiction-scan-GVD4JJ7B.js} +3 -3
  269. package/dist/converge-config.d.ts +2 -1
  270. package/dist/convergence-refresh.d.ts +3 -2
  271. package/dist/convergence-refresh.js +30 -29
  272. package/dist/conversation-index/backend.d.ts +2 -1
  273. package/dist/conversation-index/backend.js +3 -3
  274. package/dist/conversation-index/chunker.d.ts +2 -1
  275. package/dist/conversation-index/faiss-adapter.d.ts +2 -1
  276. package/dist/conversation-index/faiss-adapter.js +2 -2
  277. package/dist/conversation-index/indexer.d.ts +2 -1
  278. package/dist/conversation-index/search.d.ts +2 -1
  279. package/dist/corpus-watermark.d.ts +2 -1
  280. package/dist/corpus-watermark.js +31 -30
  281. package/dist/cross-lingual-recall.d.ts +2 -1
  282. package/dist/day-summary.d.ts +2 -1
  283. package/dist/deep-recall-http-glue.d.ts +13 -11
  284. package/dist/deep-recall-http-glue.js +12 -2
  285. package/dist/deep-recall-mcp-tools.d.ts +13 -11
  286. package/dist/deep-recall-policy-llm.d.ts +2 -1
  287. package/dist/deep-recall-policy-llm.js +4 -3
  288. package/dist/deep-recall-seeds.d.ts +2 -1
  289. package/dist/delinearize.d.ts +2 -1
  290. package/dist/dependency-propagation-config.d.ts +2 -1
  291. package/dist/{dependency-propagation-delivery-CQPCu0o5.d.ts → dependency-propagation-delivery-CDQCxNll.d.ts} +1 -1
  292. package/dist/direct-answer-wiring.d.ts +2 -1
  293. package/dist/direct-answer.d.ts +2 -1
  294. package/dist/embedding-fallback.d.ts +2 -1
  295. package/dist/enrichment/index.d.ts +2 -1
  296. package/dist/entity-origin-fields.d.ts +2 -1
  297. package/dist/entity-retrieval.d.ts +3 -2
  298. package/dist/entity-retrieval.js +28 -27
  299. package/dist/entity-schema.d.ts +2 -1
  300. package/dist/episodic-context.d.ts +2 -1
  301. package/dist/eval-trajectory-contracts.d.ts +2 -1
  302. package/dist/eval-trajectory-store.d.ts +2 -1
  303. package/dist/eval-trajectory.d.ts +2 -1
  304. package/dist/explicit-capture.d.ts +11 -9
  305. package/dist/explicit-capture.js +6 -6
  306. package/dist/external-wiki-access.d.ts +13 -11
  307. package/dist/external-wiki-access.js +65 -60
  308. package/dist/external-wiki-collection-registration.d.ts +2 -1
  309. package/dist/external-wiki-collection.d.ts +2 -1
  310. package/dist/external-wiki-mcp-tools.d.ts +13 -11
  311. package/dist/extraction-error-classification.d.ts +2 -1
  312. package/dist/extraction-faithfulness.d.ts +2 -1
  313. package/dist/extraction-faithfulness.js +4 -3
  314. package/dist/extraction-judge-telemetry.d.ts +2 -1
  315. package/dist/extraction-judge-training.d.ts +2 -1
  316. package/dist/extraction-judge.d.ts +2 -1
  317. package/dist/extraction-judge.js +5 -4
  318. package/dist/extraction-liveness.d.ts +2 -1
  319. package/dist/extraction-normalization.d.ts +2 -1
  320. package/dist/extraction-prompt.d.ts +2 -1
  321. package/dist/extraction-source-grounding-rules.d.ts +2 -1
  322. package/dist/extraction-source-grounding.d.ts +2 -1
  323. package/dist/extraction.d.ts +2 -1
  324. package/dist/extraction.js +40 -38
  325. package/dist/fallback-llm.d.ts +2 -1
  326. package/dist/fallback-llm.js +3 -2
  327. package/dist/{first-start-migration-RC345GPL.js → first-start-migration-L3UFX5CU.js} +3 -3
  328. package/dist/generic-recall-paths-CqAZyXKX.d.ts +23 -0
  329. package/dist/graph-append-error.d.ts +2 -1
  330. package/dist/graph-dashboard-diff.d.ts +2 -1
  331. package/dist/graph-dashboard-key.d.ts +2 -1
  332. package/dist/graph-dashboard-parser.d.ts +2 -1
  333. package/dist/graph-edge-reinforcement.d.ts +2 -1
  334. package/dist/graph-jsonl.d.ts +2 -1
  335. package/dist/graph-path-reconstruction.d.ts +2 -1
  336. package/dist/graph-path-scoring.d.ts +2 -1
  337. package/dist/graph-snapshot.d.ts +2 -1
  338. package/dist/graph.d.ts +2 -1
  339. package/dist/harmonic-retrieval.js +2 -2
  340. package/dist/importance.d.ts +2 -1
  341. package/dist/importers/index.d.ts +2 -1
  342. package/dist/importers/test-utils.d.ts +2 -1
  343. package/dist/in-flight-reads.d.ts +2 -1
  344. package/dist/{index-C9VXenR8.d.ts → index-BNluTxBp.d.ts} +2 -2
  345. package/dist/index.d.ts +963 -945
  346. package/dist/index.js +323 -221
  347. package/dist/intent.d.ts +2 -1
  348. package/dist/lcm/engine.d.ts +2 -1
  349. package/dist/lcm/engine.js +2 -2
  350. package/dist/lcm/index.d.ts +2 -1
  351. package/dist/lcm/index.js +7 -7
  352. package/dist/lcm/tools.d.ts +2 -1
  353. package/dist/lifecycle.d.ts +2 -1
  354. package/dist/live-connectors-runner.d.ts +2 -1
  355. package/dist/local-llm.d.ts +4 -1
  356. package/dist/local-llm.js +2 -2
  357. package/dist/local-model-endpoint.d.ts +2 -1
  358. package/dist/location/index.d.ts +4 -3
  359. package/dist/location/index.js +33 -32
  360. package/dist/maintenance/memory-governance.d.ts +2 -1
  361. package/dist/maintenance/memory-governance.js +28 -27
  362. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +3 -2
  363. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +28 -27
  364. package/dist/maintenance/rebuild-memory-projection.d.ts +3 -2
  365. package/dist/maintenance/rebuild-memory-projection.js +29 -28
  366. package/dist/{maintenance-C14sorKa.d.ts → maintenance-8hmWOMY_.d.ts} +378 -4
  367. package/dist/mcp-memory-inspector-app.d.ts +13 -11
  368. package/dist/memory-action-policy.d.ts +2 -1
  369. package/dist/memory-cache.d.ts +2 -1
  370. package/dist/memory-controller.d.ts +2 -1
  371. package/dist/memory-lifecycle-ledger-utils.d.ts +2 -1
  372. package/dist/memory-projection-store.d.ts +2 -1
  373. package/dist/memory-provenance.d.ts +2 -1
  374. package/dist/memory-snapshot.d.ts +2 -1
  375. package/dist/memory-subject-cli.d.ts +13 -11
  376. package/dist/memory-subject.d.ts +13 -11
  377. package/dist/memory-worth-outcomes.d.ts +3 -2
  378. package/dist/migrate/from-engram.js +2 -2
  379. package/dist/models-json.d.ts +2 -1
  380. package/dist/namespaces/migrate.d.ts +4 -3
  381. package/dist/namespaces/migrate.js +29 -28
  382. package/dist/namespaces/principal.d.ts +2 -1
  383. package/dist/namespaces/search.d.ts +2 -1
  384. package/dist/namespaces/search.js +11 -11
  385. package/dist/namespaces/storage.d.ts +4 -3
  386. package/dist/namespaces/storage.js +28 -27
  387. package/dist/native-knowledge.d.ts +2 -1
  388. package/dist/network/tailscale.js +2 -2
  389. package/dist/offline-sync-impression-drain.d.ts +2 -1
  390. package/dist/offline-sync-impression-drain.js +6 -6
  391. package/dist/operator-doctor-corpus.d.ts +2 -1
  392. package/dist/operator-doctor-corpus.js +32 -31
  393. package/dist/operator-doctor-replica.d.ts +2 -1
  394. package/dist/operator-toolkit.d.ts +4 -3
  395. package/dist/operator-toolkit.js +48 -46
  396. package/dist/orchestration/compression-guideline-coordinator.d.ts +3 -2
  397. package/dist/orchestration/maintenance.d.ts +5 -4
  398. package/dist/orchestration/maintenance.js +47 -42
  399. package/dist/{orchestrator-kqSzGv7e.d.ts → orchestrator-BUd_3Q86.d.ts} +17 -29
  400. package/dist/orchestrator.d.ts +11 -9
  401. package/dist/orchestrator.js +144 -138
  402. package/dist/patterns-cli.d.ts +2 -1
  403. package/dist/{pipeline-DRUwHb1X.d.ts → pipeline-Dv1Bv0ma.d.ts} +1 -1
  404. package/dist/policy-runtime.d.ts +2 -1
  405. package/dist/proactive-contention.d.ts +2 -1
  406. package/dist/provenance.d.ts +2 -1
  407. package/dist/{public-http-CW3l0g3P.d.ts → public-http-L-IymRBN.d.ts} +1 -1
  408. package/dist/{qmd-BVWlg1YS.d.ts → qmd-Mj508lHA.d.ts} +1 -1
  409. package/dist/qmd-preflight.d.ts +3 -2
  410. package/dist/qmd-recall-cache.d.ts +2 -1
  411. package/dist/qmd.d.ts +3 -2
  412. package/dist/qmd.js +2 -2
  413. package/dist/recall-concurrency-config.d.ts +2 -1
  414. package/dist/recall-disclosure-escalation.d.ts +2 -1
  415. package/dist/recall-explain-renderer.d.ts +2 -1
  416. package/dist/recall-explain-renderer.js +3 -3
  417. package/dist/recall-memory-map.d.ts +2 -1
  418. package/dist/recall-navigate-access.d.ts +2 -1
  419. package/dist/recall-navigate-access.js +2 -2
  420. package/dist/recall-navigate-disclosure.d.ts +2 -1
  421. package/dist/recall-navigate-disclosure.js +1 -1
  422. package/dist/recall-navigate.d.ts +2 -1
  423. package/dist/recall-navigate.js +2 -2
  424. package/dist/recall-planner-llm.d.ts +2 -1
  425. package/dist/recall-planner-llm.js +3 -2
  426. package/dist/recall-planner-llm.js.map +1 -1
  427. package/dist/recall-state-view-admission.d.ts +56 -0
  428. package/dist/recall-state-view-admission.js +39 -0
  429. package/dist/recall-state-view-admission.js.map +1 -0
  430. package/dist/recall-state-view-inject.js +2 -2
  431. package/dist/recall-state-view-render.js +2 -2
  432. package/dist/recall-state-view-widen.d.ts +18 -1
  433. package/dist/recall-state-view-widen.js +2 -2
  434. package/dist/recall-state-view-wire.d.ts +1 -1
  435. package/dist/recall-state-view-wire.js +3 -3
  436. package/dist/recall-state-view.d.ts +1 -0
  437. package/dist/recall-state-view.js +1 -1
  438. package/dist/recall-state.d.ts +2 -1
  439. package/dist/recall-tag-filter.d.ts +2 -1
  440. package/dist/recall-timings.d.ts +2 -1
  441. package/dist/recall-xray-cli.d.ts +2 -1
  442. package/dist/recall-xray-cli.js +4 -4
  443. package/dist/recall-xray-renderer.d.ts +2 -1
  444. package/dist/recall-xray-renderer.js +3 -3
  445. package/dist/recall-xray.d.ts +9 -1
  446. package/dist/recall-xray.js +2 -2
  447. package/dist/reconcile/cursor.d.ts +11 -2
  448. package/dist/reconcile/cursor.js +6 -4
  449. package/dist/reconcile/cursor.js.map +1 -1
  450. package/dist/reconcile/manifest.d.ts +37 -2
  451. package/dist/reconcile/manifest.js +15 -5
  452. package/dist/reconcile/plan.d.ts +2 -1
  453. package/dist/replay/normalizers/chatgpt.d.ts +2 -1
  454. package/dist/replay/normalizers/claude.d.ts +2 -1
  455. package/dist/replay/normalizers/openclaw.d.ts +2 -1
  456. package/dist/replay/normalizers/shared.d.ts +2 -1
  457. package/dist/replay/runner.d.ts +2 -1
  458. package/dist/replay/types.d.ts +2 -1
  459. package/dist/replica-divergence.d.ts +2 -1
  460. package/dist/replica-peers-config.d.ts +2 -1
  461. package/dist/{resolution-VKATP2HT.js → resolution-OHJZG45O.js} +6 -6
  462. package/dist/resolution-OHJZG45O.js.map +1 -0
  463. package/dist/resolve-auth-token.d.ts +2 -1
  464. package/dist/resume-bundles.js +15 -13
  465. package/dist/retrieval-agents.d.ts +3 -2
  466. package/dist/retrieval-tiers.d.ts +2 -1
  467. package/dist/routing/engine.d.ts +2 -1
  468. package/dist/routing/store.d.ts +2 -1
  469. package/dist/runtime/child-process.d.ts +1 -1
  470. package/dist/runtime/child-process.js +1 -1
  471. package/dist/salvage-envelope.d.ts +2 -1
  472. package/dist/salvage-envelope.js +2 -2
  473. package/dist/schemas.d.ts +176 -176
  474. package/dist/{scope-profiles-Vl00B1KU.d.ts → scope-profiles-B6BGVbxm.d.ts} +1 -1
  475. package/dist/search/embed-helper.d.ts +2 -1
  476. package/dist/search/factory.d.ts +2 -1
  477. package/dist/search/factory.js +10 -10
  478. package/dist/search/index.d.ts +2 -1
  479. package/dist/search/index.js +14 -14
  480. package/dist/search/lancedb-backend.d.ts +2 -1
  481. package/dist/search/lancedb-backend.js +2 -2
  482. package/dist/search/meilisearch-backend.d.ts +2 -1
  483. package/dist/search/meilisearch-backend.js +2 -2
  484. package/dist/search/noop-backend.d.ts +2 -1
  485. package/dist/search/orama-backend.d.ts +2 -1
  486. package/dist/search/orama-backend.js +2 -2
  487. package/dist/search/port.d.ts +2 -1
  488. package/dist/search/remote-backend.d.ts +2 -1
  489. package/dist/{semantic-consolidation-BC9-GFuT.d.ts → semantic-consolidation-J-598F5M.d.ts} +1 -1
  490. package/dist/semantic-consolidation.d.ts +3 -2
  491. package/dist/semantic-consolidation.js +29 -28
  492. package/dist/semantic-rule-promotion.js +28 -27
  493. package/dist/semantic-rule-verifier.d.ts +2 -1
  494. package/dist/semantic-rule-verifier.js +28 -27
  495. package/dist/{service-BOy6dHfc.d.ts → service-ZQkJ52cz.d.ts} +2 -2
  496. package/dist/session-observer-bands.d.ts +2 -1
  497. package/dist/session-observer-state.d.ts +2 -1
  498. package/dist/shared-context/manager.d.ts +8 -7
  499. package/dist/signal.d.ts +2 -1
  500. package/dist/source-agent-qualifier.d.ts +2 -1
  501. package/dist/source-agent-qualifier.js +38 -36
  502. package/dist/standup/build.js +29 -28
  503. package/dist/{storage-BLJRnFi6.d.ts → storage-CU_hZUgP.d.ts} +67 -6
  504. package/dist/storage.d.ts +4 -3
  505. package/dist/storage.js +27 -26
  506. package/dist/subject-config.d.ts +2 -1
  507. package/dist/subject-config.js +2 -2
  508. package/dist/summarizer.d.ts +2 -1
  509. package/dist/summarizer.js +5 -5
  510. package/dist/summary-snapshot.d.ts +2 -1
  511. package/dist/support-passport/index.d.ts +49 -15
  512. package/dist/support-passport/index.js +72 -63
  513. package/dist/temporal-supersession.d.ts +3 -2
  514. package/dist/temporal-timeline-recall.d.ts +2 -1
  515. package/dist/temporal-validity.d.ts +2 -1
  516. package/dist/threading.d.ts +2 -1
  517. package/dist/tier-migration.d.ts +3 -2
  518. package/dist/tier-routing.d.ts +2 -1
  519. package/dist/tier-routing.js +2 -2
  520. package/dist/{tier-stats-KA6OZX2C.js → tier-stats-VK5PCO2L.js} +3 -3
  521. package/dist/topics.d.ts +2 -1
  522. package/dist/transcript.d.ts +2 -1
  523. package/dist/transfer/capsule-import.js +1 -1
  524. package/dist/transfer/export-okf.d.ts +2 -1
  525. package/dist/transfer/export-okf.js +29 -28
  526. package/dist/transfer/types.d.ts +102 -102
  527. package/dist/trust-score-stage.d.ts +2 -1
  528. package/dist/trust-score.d.ts +2 -1
  529. package/dist/{types-YY-eKKU7.d.ts → types-BGxTvLBO.d.ts} +58 -13
  530. package/dist/types.d.ts +2 -1
  531. package/dist/types.js +1 -1
  532. package/dist/utility-runtime.d.ts +2 -1
  533. package/dist/verified-recall.js +28 -27
  534. package/dist/who-knows-cli.d.ts +13 -11
  535. package/dist/who-knows-cli.js +29 -28
  536. package/dist/who-knows.d.ts +13 -11
  537. package/dist/who-knows.js +28 -27
  538. package/dist/write-envelope.d.ts +4 -2
  539. package/dist/write-envelope.js +3 -1
  540. package/package.json +12 -2
  541. package/src/access-category-alias.test.ts +216 -0
  542. package/src/access-mcp.test.ts +73 -0
  543. package/src/access-mcp.ts +6 -6
  544. package/src/access-observe-write-surface.ts +19 -4
  545. package/src/access-offline-manifest.ts +297 -16
  546. package/src/access-recall-surface.ts +5 -5
  547. package/src/access-schema.ts +76 -7
  548. package/src/access-service.ts +11 -2
  549. package/src/activity/config.test.ts +124 -1
  550. package/src/activity/config.ts +150 -18
  551. package/src/activity/index.ts +3 -0
  552. package/src/activity/journal-extract-storage.test.ts +129 -0
  553. package/src/activity/journal-extract.test.ts +314 -0
  554. package/src/activity/journal-extract.ts +247 -0
  555. package/src/activity/journal-heading.test.ts +24 -1
  556. package/src/activity/journal-heading.ts +36 -0
  557. package/src/activity/journal-read.test.ts +242 -0
  558. package/src/activity/journal-read.ts +183 -0
  559. package/src/activity/journal-source.test.ts +15 -15
  560. package/src/activity/journal-source.ts +21 -14
  561. package/src/activity/journal-state.lock-worker.ts +30 -0
  562. package/src/activity/journal-state.test.ts +144 -0
  563. package/src/activity/journal-state.ts +107 -0
  564. package/src/activity/journal-strip.test.ts +106 -52
  565. package/src/activity/journal-strip.ts +35 -10
  566. package/src/activity/journal-vault-integration.test.ts +230 -0
  567. package/src/activity/journal-vault-provenance.test.ts +9 -7
  568. package/src/activity/journal-vault-provenance.ts +4 -10
  569. package/src/activity/journal-vault-read.test.ts +3 -2
  570. package/src/activity/journal-vault-read.ts +9 -139
  571. package/src/activity/journal.test.ts +74 -23
  572. package/src/activity/runner.test.ts +116 -1
  573. package/src/activity/runner.ts +25 -0
  574. package/src/activity/scheduler.ts +4 -0
  575. package/src/activity/store.test.ts +18 -0
  576. package/src/activity/store.ts +14 -0
  577. package/src/activity/sync-registration.ts +4 -0
  578. package/src/activity/timeline/analysis-metadata.ts +2 -0
  579. package/src/activity/timeline/analysis-provider.ts +140 -0
  580. package/src/activity/timeline/analysis-run.test.ts +419 -0
  581. package/src/activity/timeline/analysis-run.ts +106 -0
  582. package/src/activity/timeline/analysis.ts +66 -37
  583. package/src/activity/timeline/corrections.ts +9 -0
  584. package/src/activity/timeline/index.ts +3 -0
  585. package/src/activity/timeline/query.test.ts +71 -0
  586. package/src/activity/timeline/query.ts +57 -8
  587. package/src/activity/timeline/regenerate.test.ts +505 -0
  588. package/src/activity/timeline/regenerate.ts +373 -0
  589. package/src/activity/types.ts +40 -5
  590. package/src/adapters/grok-opencode.test.ts +146 -0
  591. package/src/adapters/grok.ts +53 -0
  592. package/src/adapters/index.ts +2 -0
  593. package/src/adapters/opencode.ts +52 -0
  594. package/src/adapters/registry.ts +4 -0
  595. package/src/cli-fallback.ts +13 -4
  596. package/src/config.test.ts +3 -1
  597. package/src/config.ts +4 -0
  598. package/src/dedup/merge.test.ts +732 -25
  599. package/src/fallback-llm.test.ts +53 -0
  600. package/src/fallback-llm.ts +12 -0
  601. package/src/index.ts +2 -0
  602. package/src/local-llm.ts +3 -1
  603. package/src/orchestration/dependency-propagation-recovery-replay.ts +1 -1
  604. package/src/orchestration/extraction-persist-deps.ts +9 -0
  605. package/src/orchestration/extraction-persist-promotion.test.ts +265 -6
  606. package/src/orchestration/extraction-persist-promotion.ts +42 -3
  607. package/src/orchestration/extraction-persist.ts +3 -3
  608. package/src/orchestration/harmonic-construction-persist.test.ts +115 -4
  609. package/src/orchestration/harmonic-construction-persist.ts +34 -6
  610. package/src/orchestration/maintenance.ts +1 -0
  611. package/src/orchestration/orchestrator-helpers.ts +6 -0
  612. package/src/orchestration/recall-entry.ts +16 -0
  613. package/src/orchestration/recall-internal-deps.ts +14 -0
  614. package/src/orchestration/recall-internal.ts +41 -58
  615. package/src/orchestration/recall-result-formatter.ts +11 -1
  616. package/src/orchestration/recall-search-pipeline.ts +121 -11
  617. package/src/orchestration/recall-state-view-pipeline.test.ts +211 -0
  618. package/src/orchestration/semantic-merge-commit-effects.ts +76 -17
  619. package/src/orchestration/semantic-merge-persist.ts +121 -16
  620. package/src/orchestration/semantic-merge-promotion-payload.ts +133 -54
  621. package/src/orchestrator.ts +7 -35
  622. package/src/providers/codex-subscription.test.ts +666 -0
  623. package/src/providers/codex-subscription.ts +743 -0
  624. package/src/recall-disclosure.test.ts +20 -0
  625. package/src/recall-state-view-admission.ts +114 -0
  626. package/src/recall-state-view-asof.test.ts +176 -0
  627. package/src/recall-state-view-call.test.ts +175 -0
  628. package/src/recall-state-view-config.test.ts +16 -0
  629. package/src/recall-state-view-widen.test.ts +70 -0
  630. package/src/recall-state-view-widen.ts +28 -7
  631. package/src/recall-state-view-wire.ts +3 -1
  632. package/src/recall-state-view-zero-diff.test.ts +20 -11
  633. package/src/recall-state-view.test.ts +142 -0
  634. package/src/recall-state-view.ts +72 -24
  635. package/src/recall-xray-renderer.test.ts +27 -0
  636. package/src/recall-xray-renderer.ts +4 -0
  637. package/src/recall-xray.ts +13 -0
  638. package/src/reconcile/cursor.ts +23 -33
  639. package/src/reconcile/manifest.ts +96 -11
  640. package/src/reconcile-identity-cache.test.ts +378 -0
  641. package/src/runtime/child-process.ts +1 -1
  642. package/src/storage/cas-revision-host.ts +75 -0
  643. package/src/storage/cas-revision-store.test.ts +459 -0
  644. package/src/storage/cas-revision-store.ts +661 -0
  645. package/src/storage/deletion-revision-store.ts +80 -6
  646. package/src/storage/tombstone-blocked-capture-index.ts +15 -0
  647. package/src/storage/tombstone-blocked-capture-mutation.ts +67 -7
  648. package/src/storage/tombstone-blocked-capture-sync.ts +55 -20
  649. package/src/storage-contract/failure-semantics.test.ts +1 -1
  650. package/src/storage-frontmatter-cas.test.ts +698 -1
  651. package/src/storage-replay.test.ts +166 -3
  652. package/src/storage.ts +41 -41
  653. package/src/support-passport/card-projection.ts +82 -33
  654. package/src/temporal-supersession.test.ts +10 -10
  655. package/src/types.ts +7 -7
  656. package/src/write-envelope.ts +1 -1
  657. package/dist/chunk-22FVR2KE.js.map +0 -1
  658. package/dist/chunk-2JVJ7UHC.js.map +0 -1
  659. package/dist/chunk-3QQTXYZ6.js.map +0 -1
  660. package/dist/chunk-4UDQUPT5.js +0 -560
  661. package/dist/chunk-4UDQUPT5.js.map +0 -1
  662. package/dist/chunk-A7XEPMQ6.js.map +0 -1
  663. package/dist/chunk-AU7Q3LSC.js +0 -56
  664. package/dist/chunk-AU7Q3LSC.js.map +0 -1
  665. package/dist/chunk-BLUYQFRH.js.map +0 -1
  666. package/dist/chunk-CZYYJZB6.js.map +0 -1
  667. package/dist/chunk-EEOUMG3J.js.map +0 -1
  668. package/dist/chunk-FDLDOEO6.js.map +0 -1
  669. package/dist/chunk-FYDW33ZB.js +0 -13
  670. package/dist/chunk-GVG3JYBI.js.map +0 -1
  671. package/dist/chunk-H272ZPQ3.js.map +0 -1
  672. package/dist/chunk-HVAEXYPL.js.map +0 -1
  673. package/dist/chunk-JEIXTYVG.js.map +0 -1
  674. package/dist/chunk-LRICZIGN.js +0 -52
  675. package/dist/chunk-LRICZIGN.js.map +0 -1
  676. package/dist/chunk-N7RWREIQ.js.map +0 -1
  677. package/dist/chunk-O75CRYGF.js.map +0 -1
  678. package/dist/chunk-Q3O3VKRB.js.map +0 -1
  679. package/dist/chunk-SEDEKFYQ.js +0 -1
  680. package/dist/chunk-SO7SV523.js.map +0 -1
  681. package/dist/chunk-SQJ3SDIW.js.map +0 -1
  682. package/dist/chunk-TLPZ6MKZ.js.map +0 -1
  683. package/dist/chunk-WJBZMNNS.js.map +0 -1
  684. package/dist/chunk-XQ2Q43XD.js.map +0 -1
  685. package/dist/chunk-Z4PCVRTN.js.map +0 -1
  686. package/src/activity/journal-mode.test.ts +0 -32
  687. package/src/activity/journal-mode.ts +0 -20
  688. /package/dist/{chunk-SEDEKFYQ.js.map → activity/digest.js.map} +0 -0
  689. /package/dist/{capsule-merge-IPG4IOFP.js.map → capsule-merge-ZCXUPLNJ.js.map} +0 -0
  690. /package/dist/{chunk-CDKHKZL5.js.map → chunk-2524MOWK.js.map} +0 -0
  691. /package/dist/{chunk-IY2FVXM6.js.map → chunk-2AU4D4HQ.js.map} +0 -0
  692. /package/dist/{chunk-QDY6KYTN.js.map → chunk-2JCA2PQT.js.map} +0 -0
  693. /package/dist/{chunk-RSVEP77Y.js.map → chunk-2UZ5ZH6W.js.map} +0 -0
  694. /package/dist/{chunk-NWWXSJX5.js.map → chunk-34QW2LK2.js.map} +0 -0
  695. /package/dist/{chunk-S7DPKM5W.js.map → chunk-353C5UNV.js.map} +0 -0
  696. /package/dist/{chunk-GQOMZ3MK.js.map → chunk-36UBSLFN.js.map} +0 -0
  697. /package/dist/{chunk-DBQWVT2H.js.map → chunk-3CBI2ZSA.js.map} +0 -0
  698. /package/dist/{chunk-NZXEK3UF.js.map → chunk-3Q3N35W7.js.map} +0 -0
  699. /package/dist/{chunk-YYGZJPOK.js.map → chunk-42DJ235G.js.map} +0 -0
  700. /package/dist/{chunk-7VJXIDOC.js.map → chunk-4JVQRFZD.js.map} +0 -0
  701. /package/dist/{chunk-WHBVXTUI.js.map → chunk-4PB2MBY6.js.map} +0 -0
  702. /package/dist/{chunk-TEYN7ZYF.js.map → chunk-4WCNPQQ5.js.map} +0 -0
  703. /package/dist/{chunk-RBGREYVJ.js.map → chunk-5QBDLMGG.js.map} +0 -0
  704. /package/dist/{chunk-RKBLRTNT.js.map → chunk-5SDSVX7N.js.map} +0 -0
  705. /package/dist/{chunk-LPECRQO4.js.map → chunk-5THU7NFP.js.map} +0 -0
  706. /package/dist/{chunk-LWA7MDVO.js.map → chunk-6CCRSQWT.js.map} +0 -0
  707. /package/dist/{chunk-TIT2C6WX.js.map → chunk-6XYC7NM4.js.map} +0 -0
  708. /package/dist/{chunk-FHQSPTPZ.js.map → chunk-6YAIN5XJ.js.map} +0 -0
  709. /package/dist/{chunk-PV36INNL.js.map → chunk-757NP436.js.map} +0 -0
  710. /package/dist/{chunk-6H5JYDOM.js.map → chunk-7J2CGXG3.js.map} +0 -0
  711. /package/dist/{chunk-FBMYGNOC.js.map → chunk-A2YQL2FF.js.map} +0 -0
  712. /package/dist/{chunk-X2NFFBTO.js.map → chunk-A7GQBJP5.js.map} +0 -0
  713. /package/dist/{chunk-MPYD657E.js.map → chunk-A7WOWDZK.js.map} +0 -0
  714. /package/dist/{chunk-C4OTC6WY.js.map → chunk-AIKTQVV3.js.map} +0 -0
  715. /package/dist/{chunk-CGC5UQCF.js.map → chunk-AKE4GGQ3.js.map} +0 -0
  716. /package/dist/{chunk-VP67GZ7T.js.map → chunk-APFKZVJS.js.map} +0 -0
  717. /package/dist/{chunk-M75RYSHS.js.map → chunk-AQIRQUCP.js.map} +0 -0
  718. /package/dist/{chunk-S7T2TY65.js.map → chunk-AXFR2NQ5.js.map} +0 -0
  719. /package/dist/{chunk-PSPABFN2.js.map → chunk-BD7JTBYP.js.map} +0 -0
  720. /package/dist/{chunk-FCSZ4K2X.js.map → chunk-BJJWRWER.js.map} +0 -0
  721. /package/dist/{chunk-JT3EB7ZL.js.map → chunk-BNGHPYZU.js.map} +0 -0
  722. /package/dist/{chunk-MFJBANPX.js.map → chunk-C2BFTYD7.js.map} +0 -0
  723. /package/dist/{chunk-3JVLGJCY.js.map → chunk-C6KRO3SU.js.map} +0 -0
  724. /package/dist/{chunk-AOCP6JA7.js.map → chunk-D3IZCN5P.js.map} +0 -0
  725. /package/dist/{chunk-ROKKIMON.js.map → chunk-EJIEQOPB.js.map} +0 -0
  726. /package/dist/{chunk-ET356KSB.js.map → chunk-F4TWWUMP.js.map} +0 -0
  727. /package/dist/{chunk-CLLPJ6QT.js.map → chunk-FQXJAC3T.js.map} +0 -0
  728. /package/dist/{chunk-DD5JFCWM.js.map → chunk-GCBIXUPT.js.map} +0 -0
  729. /package/dist/{chunk-ROGRI25A.js.map → chunk-I3H5LFOI.js.map} +0 -0
  730. /package/dist/{chunk-S65WXHNK.js.map → chunk-IFFLUCCU.js.map} +0 -0
  731. /package/dist/{chunk-D5LORF7A.js.map → chunk-JZDH2ZZK.js.map} +0 -0
  732. /package/dist/{chunk-2GPE5UCR.js.map → chunk-K6IPSW5B.js.map} +0 -0
  733. /package/dist/{chunk-HG6HXVHQ.js.map → chunk-KDJHLOZP.js.map} +0 -0
  734. /package/dist/{chunk-I27RSQRR.js.map → chunk-KYGOQV37.js.map} +0 -0
  735. /package/dist/{chunk-VZWXFXLX.js.map → chunk-LMCD5W5B.js.map} +0 -0
  736. /package/dist/{chunk-MKD3OMPS.js.map → chunk-M3MYMWXG.js.map} +0 -0
  737. /package/dist/{chunk-DITMGZOL.js.map → chunk-MMG5K6XJ.js.map} +0 -0
  738. /package/dist/{chunk-VGXM5B4H.js.map → chunk-MNIPH6LD.js.map} +0 -0
  739. /package/dist/{chunk-MKWKYHXJ.js.map → chunk-OB3XMWX5.js.map} +0 -0
  740. /package/dist/{chunk-XU6OEECT.js.map → chunk-OQQXGYMX.js.map} +0 -0
  741. /package/dist/{chunk-47DEYNMR.js.map → chunk-PEXW2JCK.js.map} +0 -0
  742. /package/dist/{chunk-42SDNZCU.js.map → chunk-QF4J3KMV.js.map} +0 -0
  743. /package/dist/{chunk-SB6PSOP7.js.map → chunk-QLJ6762U.js.map} +0 -0
  744. /package/dist/{chunk-XOVKXJEP.js.map → chunk-R3TLVTWW.js.map} +0 -0
  745. /package/dist/{chunk-PHNAB54Q.js.map → chunk-RQO3J4MR.js.map} +0 -0
  746. /package/dist/{chunk-5N53UBH2.js.map → chunk-RR7G2X7C.js.map} +0 -0
  747. /package/dist/{chunk-DCJ3YFIC.js.map → chunk-S2ULTQZR.js.map} +0 -0
  748. /package/dist/{chunk-GY5WZBA6.js.map → chunk-S76KRJDG.js.map} +0 -0
  749. /package/dist/{chunk-EEC4PCG5.js.map → chunk-SZDLX763.js.map} +0 -0
  750. /package/dist/{chunk-E2ZHGBAK.js.map → chunk-T2JSUEH6.js.map} +0 -0
  751. /package/dist/{chunk-QMGXMJ2O.js.map → chunk-T2YFZ27G.js.map} +0 -0
  752. /package/dist/{chunk-LEPOP46W.js.map → chunk-TFA6HPOA.js.map} +0 -0
  753. /package/dist/{chunk-BA6WOZOT.js.map → chunk-TK4FHQRN.js.map} +0 -0
  754. /package/dist/{chunk-ZNJSBIP4.js.map → chunk-TNSCIPBQ.js.map} +0 -0
  755. /package/dist/{chunk-YUMDFDUA.js.map → chunk-TWYTGIBR.js.map} +0 -0
  756. /package/dist/{chunk-EZZV7OQL.js.map → chunk-UEZKN6VR.js.map} +0 -0
  757. /package/dist/{chunk-HY55QQD7.js.map → chunk-UJX4I26O.js.map} +0 -0
  758. /package/dist/{chunk-CBCNKKZD.js.map → chunk-VIZR45AN.js.map} +0 -0
  759. /package/dist/{chunk-ZG74PWRW.js.map → chunk-VZAKYDMJ.js.map} +0 -0
  760. /package/dist/{chunk-ITPS5DDH.js.map → chunk-W5BLTZZJ.js.map} +0 -0
  761. /package/dist/{chunk-H3TKENU4.js.map → chunk-WIKO4SCR.js.map} +0 -0
  762. /package/dist/{chunk-YFLLGRXO.js.map → chunk-X2QPKLPL.js.map} +0 -0
  763. /package/dist/{chunk-FGGYSN4P.js.map → chunk-X424T5JQ.js.map} +0 -0
  764. /package/dist/{chunk-NAXDPKVM.js.map → chunk-XPJNT6PI.js.map} +0 -0
  765. /package/dist/{contradiction-scan-NOYMFG66.js.map → chunk-XW2T4QAW.js.map} +0 -0
  766. /package/dist/{chunk-VED2YHUD.js.map → chunk-YEDVOYL2.js.map} +0 -0
  767. /package/dist/{chunk-RC5DXXWC.js.map → chunk-YM7YN37H.js.map} +0 -0
  768. /package/dist/{chunk-VLXBE57O.js.map → chunk-YVGXH72Y.js.map} +0 -0
  769. /package/dist/{chunk-YQAXP5AC.js.map → chunk-YXLUTALO.js.map} +0 -0
  770. /package/dist/{chunk-565C6ZFO.js.map → chunk-Z7YDVHDI.js.map} +0 -0
  771. /package/dist/{chunk-XUE46UYW.js.map → chunk-ZLN7AROH.js.map} +0 -0
  772. /package/dist/{chunk-HK32G473.js.map → chunk-ZWEZXVYH.js.map} +0 -0
  773. /package/dist/{resolution-VKATP2HT.js.map → contradiction-scan-GVD4JJ7B.js.map} +0 -0
  774. /package/dist/{first-start-migration-RC345GPL.js.map → first-start-migration-L3UFX5CU.js.map} +0 -0
  775. /package/dist/{tier-stats-KA6OZX2C.js.map → tier-stats-VK5PCO2L.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/causal-consolidation.ts"],"sourcesContent":["/**\n * causal-consolidation.ts — CMC Phase 2: LLM-Assisted Causal Consolidation\n *\n * Uses an LLM to analyze causal trajectory patterns across sessions.\n * The LLM receives the causal chain graph as context — connected trajectories\n * from different sessions — and identifies recurring behavioral patterns,\n * preference signals, and actionable rules.\n *\n * This is the core CMC innovation: the LLM gets cross-session causal context\n * that no other memory system provides. It can see that a user investigated\n * a bug in session 1, attempted a fix in session 2, and succeeded in session 3 —\n * and synthesize a rule or preference from that chain.\n */\n\nimport { createHash } from \"node:crypto\";\nimport { resolveCausalTrajectoryStoreDir, type CausalTrajectoryRecord } from \"./causal-trajectory.js\";\nimport { readChainIndex, resolveChainsDir, type CausalChainIndex, type CausalEdge } from \"./causal-chain.js\";\nimport { listJsonFiles, readJsonFile } from \"./json-store.js\";\nimport { isRecord } from \"./store-contract.js\";\nimport { FallbackLlmClient, fallbackLlmRuntimeContextFromConfig } from \"./fallback-llm.js\";\nimport type { AgentPersonaModelConfig, GatewayConfig, MemoryFile, PluginConfig } from \"./types.js\";\nimport path from \"node:path\";\nimport { log } from \"./logger.js\";\nimport { runPostConsolidationMaterialize } from \"./connectors/codex-materialize-runner.js\";\nimport type { MaterializeResult, RolloutSummaryInput } from \"./connectors/codex-materialize.js\";\nimport { buildExtensionsBlockForConsolidation } from \"./semantic-consolidation.js\";\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface CausalPatternCandidate {\n id: string;\n sourceType: \"causal-pattern\";\n subject: string;\n category: \"principle\" | \"rule\" | \"preference\";\n content: string;\n score: number;\n rationale: string;\n outcome: null;\n provenance: string[];\n agent: string | null;\n workflow: string | null;\n}\n\nexport interface ConsolidationConfig {\n minRecurrence: number;\n minSessions: number;\n successThreshold: number;\n}\n\nexport interface LlmConsolidationResult {\n rules: Array<{\n content: string;\n category: \"rule\" | \"principle\" | \"preference\";\n confidence: number;\n evidence: string[];\n }>;\n preferences: Array<{\n statement: string;\n confidence: number;\n evidence: string[];\n }>;\n}\n\nconst CAUSAL_RULE_CATEGORIES = new Set([\"rule\", \"principle\", \"preference\"]);\n\ninterface ConsolidationLlmClient {\n isAvailable(options?: { agentId?: string; modelChain?: AgentPersonaModelConfig }): boolean;\n chatCompletion(\n messages: Array<{ role: \"system\" | \"user\" | \"assistant\"; content: string }>,\n options?: { temperature?: number; maxTokens?: number; agentId?: string; modelChain?: AgentPersonaModelConfig },\n ): Promise<{ content: string } | null>;\n}\n\n// ─── Trajectory Reading ──────────────────────────────────────────────────────\n\nasync function readAllTrajectories(\n memoryDir: string,\n causalTrajectoryStoreDir?: string,\n): Promise<CausalTrajectoryRecord[]> {\n const root = resolveCausalTrajectoryStoreDir(memoryDir, causalTrajectoryStoreDir);\n const trajectoriesDir = path.join(root, \"trajectories\");\n\n const files = await listJsonFiles(trajectoriesDir).catch(() => [] as string[]);\n const results: CausalTrajectoryRecord[] = [];\n\n for (const filePath of files) {\n try {\n const raw = await readJsonFile(filePath);\n if (isRecord(raw) && typeof raw.trajectoryId === \"string\") {\n results.push(raw as unknown as CausalTrajectoryRecord);\n }\n } catch {\n // skip invalid\n }\n }\n\n return results;\n}\n\n// ─── Context Formatting ──────────────────────────────────────────────────────\n\n/**\n * Format trajectories and their causal connections as a readable context\n * for the LLM. Groups by session and shows chain connections.\n */\nfunction formatCausalContext(\n trajectories: CausalTrajectoryRecord[],\n chainIndex: CausalChainIndex,\n maxChars: number = 8000,\n): string {\n // Group trajectories by session\n const bySession = new Map<string, CausalTrajectoryRecord[]>();\n for (const t of trajectories) {\n const list = bySession.get(t.sessionKey) ?? [];\n list.push(t);\n bySession.set(t.sessionKey, list);\n }\n\n const lines: string[] = [];\n lines.push(`## Causal Trajectories (${trajectories.length} across ${bySession.size} sessions)`);\n lines.push(\"\");\n\n // Format each session's trajectories\n for (const [sessionKey, sessionTrajs] of bySession) {\n lines.push(`### Session: ${sessionKey}`);\n for (const t of sessionTrajs.slice(0, 5)) {\n const outcome = t.outcomeKind === \"success\" ? \"+\" : t.outcomeKind === \"failure\" ? \"-\" : \"~\";\n lines.push(`[${outcome}] Goal: ${t.goal}`);\n lines.push(` Action: ${t.actionSummary}`);\n lines.push(` Outcome: ${t.outcomeSummary}`);\n if (t.followUpSummary) lines.push(` Follow-up: ${t.followUpSummary}`);\n if (t.entityRefs?.length) lines.push(` Entities: ${t.entityRefs.join(\", \")}`);\n }\n lines.push(\"\");\n }\n\n // Format causal chain connections\n const edgeCount = Object.keys(chainIndex.edges).length;\n if (edgeCount > 0) {\n lines.push(`## Cross-Session Causal Chains (${edgeCount} connections)`);\n lines.push(\"\");\n\n const trajectoryMap = new Map(trajectories.map((t) => [t.trajectoryId, t]));\n const shown = new Set<string>();\n\n for (const [edgeId, edge] of Object.entries(chainIndex.edges)) {\n if (shown.size >= 10) break; // limit output size\n const from = trajectoryMap.get(edge.fromTrajectoryId);\n const to = trajectoryMap.get(edge.toTrajectoryId);\n if (!from || !to) continue;\n\n lines.push(`${edge.edgeType}: \"${from.goal}\" (${from.sessionKey}) → \"${to.goal}\" (${to.sessionKey})`);\n shown.add(edgeId);\n }\n lines.push(\"\");\n }\n\n const result = lines.join(\"\\n\");\n return result.length > maxChars ? result.slice(0, maxChars) + \"\\n[truncated]\" : result;\n}\n\n// ─── LLM Consolidation ──────────────────────────────────────────────────────\n\nconst CONSOLIDATION_PROMPT = `You are analyzing a user's causal trajectory history across multiple sessions. Trajectories record what the user tried to do (goal), what they did (action), and what happened (outcome).\n\nYour job is to identify:\n1. BEHAVIORAL RULES: Recurring patterns where the same approach consistently succeeds or fails. These should be actionable guidance for future sessions.\n2. PREFERENCES: What the user cares about, prefers, or consistently chooses — even if never explicitly stated. Infer preferences from what they repeatedly do, retry until successful, or always include in their workflow.\n\nIMPORTANT:\n- Look for CROSS-SESSION patterns — things that repeat across different sessions are more significant than within-session patterns.\n- A user who retries the same goal across sessions has a strong implicit preference for that outcome.\n- Consistent action choices reveal preferences even when the user never says \"I prefer X.\"\n- Frame preferences as \"The user would prefer responses that...\" when applicable.\n\nOutput valid JSON only:\n{\n \"rules\": [\n {\"content\": \"actionable rule text\", \"category\": \"rule|principle\", \"confidence\": 0.0-1.0, \"evidence\": [\"trajectory IDs\"]}\n ],\n \"preferences\": [\n {\"statement\": \"The user would prefer...\", \"confidence\": 0.0-1.0, \"evidence\": [\"trajectory IDs\"]}\n ]\n}\n\nIf no clear patterns exist, return {\"rules\": [], \"preferences\": []}.`;\n\nasync function consolidateWithLlm(\n context: string,\n llm: ConsolidationLlmClient,\n options: { agentId?: string; modelChain?: AgentPersonaModelConfig } = {},\n): Promise<LlmConsolidationResult> {\n const response = await llm.chatCompletion(\n [\n { role: \"system\", content: CONSOLIDATION_PROMPT },\n { role: \"user\", content: context },\n ],\n { temperature: 0.2, maxTokens: 2000, agentId: options.agentId, modelChain: options.modelChain },\n );\n\n if (!response?.content) {\n return { rules: [], preferences: [] };\n }\n\n try {\n // Extract JSON from response (may have markdown code fences)\n let jsonStr = response.content.trim();\n const fenceMatch = jsonStr.match(/```(?:json)?\\s*\\n?([\\s\\S]*?)\\n?\\s*```/);\n if (fenceMatch) jsonStr = fenceMatch[1];\n\n const parsed = JSON.parse(jsonStr);\n const rawRules: unknown[] = Array.isArray(parsed.rules) ? parsed.rules : [];\n const rawPreferences: unknown[] = Array.isArray(parsed.preferences) ? parsed.preferences : [];\n return {\n rules: rawRules\n .map(parseLlmRule)\n .filter((rule): rule is LlmConsolidationResult[\"rules\"][number] => !!rule),\n preferences: rawPreferences\n .map(parseLlmPreference)\n .filter((pref): pref is LlmConsolidationResult[\"preferences\"][number] => !!pref),\n };\n } catch {\n log.warn(\"[cmc] failed to parse LLM consolidation response\");\n return { rules: [], preferences: [] };\n }\n}\n\n// ─── Candidate Generation ────────────────────────────────────────────────────\n\nfunction stablePatternId(content: string): string {\n const digest = createHash(\"sha256\")\n .update(`causal-pattern\\0${content}`)\n .digest(\"hex\")\n .slice(0, 16);\n return `causal-pattern:${digest}`;\n}\n\nfunction parseConfidence(value: unknown): number | undefined {\n if (typeof value !== \"number\" || !Number.isFinite(value)) return undefined;\n return Math.max(0, Math.min(1, value));\n}\n\nfunction parseEvidence(value: unknown): string[] {\n if (!Array.isArray(value)) return [];\n return value.filter((item): item is string => typeof item === \"string\" && item.trim().length > 0);\n}\n\nfunction parseLlmRule(raw: unknown): LlmConsolidationResult[\"rules\"][number] | undefined {\n if (!raw || typeof raw !== \"object\" || Array.isArray(raw)) return undefined;\n const r = raw as Record<string, unknown>;\n const content = typeof r.content === \"string\" ? r.content.trim() : \"\";\n const category = typeof r.category === \"string\" ? r.category : \"\";\n const confidence = parseConfidence(r.confidence);\n if (content.length <= 5 || !CAUSAL_RULE_CATEGORIES.has(category) || confidence === undefined) {\n return undefined;\n }\n return {\n content,\n category: category as \"rule\" | \"principle\" | \"preference\",\n confidence,\n evidence: parseEvidence(r.evidence),\n };\n}\n\nfunction parseLlmPreference(raw: unknown): LlmConsolidationResult[\"preferences\"][number] | undefined {\n if (!raw || typeof raw !== \"object\" || Array.isArray(raw)) return undefined;\n const p = raw as Record<string, unknown>;\n const statement = typeof p.statement === \"string\" ? p.statement.trim() : \"\";\n const confidence = parseConfidence(p.confidence);\n if (statement.length <= 5 || confidence === undefined) return undefined;\n return {\n statement,\n confidence,\n evidence: parseEvidence(p.evidence),\n };\n}\n\nfunction llmResultToCandidates(result: LlmConsolidationResult): CausalPatternCandidate[] {\n const candidates: CausalPatternCandidate[] = [];\n\n for (const rule of result.rules) {\n const category =\n rule.category === \"principle\" || rule.category === \"preference\"\n ? rule.category\n : \"rule\";\n candidates.push({\n id: stablePatternId(rule.content),\n sourceType: \"causal-pattern\",\n subject: rule.content.slice(0, 80),\n category,\n content: rule.content,\n score: Math.min(1, rule.confidence ?? 0.7),\n rationale: \"LLM-identified causal pattern from cross-session trajectory analysis\",\n outcome: null,\n provenance: (rule.evidence ?? []).slice(0, 5),\n agent: null,\n workflow: null,\n });\n }\n\n for (const preference of result.preferences) {\n candidates.push({\n id: stablePatternId(preference.statement),\n sourceType: \"causal-pattern\",\n subject: preference.statement.slice(0, 80),\n category: \"preference\",\n content: preference.statement,\n score: Math.min(1, preference.confidence ?? 0.7),\n rationale: \"LLM-identified preference from cross-session trajectory analysis\",\n outcome: null,\n provenance: (preference.evidence ?? []).slice(0, 5),\n agent: null,\n workflow: null,\n });\n }\n\n return candidates;\n}\n\nfunction normalizePositiveInteger(value: number, fallback: number): number {\n return Number.isFinite(value) && value > 0 ? Math.floor(value) : fallback;\n}\n\nfunction normalizeSuccessThreshold(value: number): number {\n if (!Number.isFinite(value) || value <= 0) return 0;\n return Math.min(1, value);\n}\n\nfunction trajectorySuccessScore(trajectory: CausalTrajectoryRecord): number {\n if (trajectory.outcomeKind === \"success\") return 1;\n if (trajectory.outcomeKind === \"partial\") return 0.5;\n return 0;\n}\n\nfunction averageSuccessScore(trajectories: CausalTrajectoryRecord[]): number {\n if (trajectories.length === 0) return 0;\n const total = trajectories.reduce((sum, trajectory) => sum + trajectorySuccessScore(trajectory), 0);\n return total / trajectories.length;\n}\n\nfunction passesConsolidationGates(\n trajectories: CausalTrajectoryRecord[],\n config: ConsolidationConfig,\n): boolean {\n const minRecurrence = normalizePositiveInteger(config.minRecurrence, 1);\n if (trajectories.length < minRecurrence) return false;\n\n const minSessions = normalizePositiveInteger(config.minSessions, 1);\n const sessionCount = new Set(trajectories.map((trajectory) => trajectory.sessionKey)).size;\n if (sessionCount < minSessions) return false;\n\n const successThreshold = normalizeSuccessThreshold(config.successThreshold);\n if (successThreshold > 0 && averageSuccessScore(trajectories) < successThreshold) {\n return false;\n }\n\n return true;\n}\n\n// ─── Public API ──────────────────────────────────────────────────────────────\n\n/**\n * Run LLM-assisted consolidation: read trajectories, format causal context,\n * ask LLM to identify patterns and preferences.\n */\nexport async function deriveCausalPromotionCandidates(options: {\n memoryDir: string;\n causalTrajectoryStoreDir?: string;\n config: ConsolidationConfig;\n gatewayConfig?: GatewayConfig;\n gatewayAgentId?: string;\n modelChain?: AgentPersonaModelConfig;\n workspaceDir?: string;\n pluginConfig?: PluginConfig;\n llmClient?: ConsolidationLlmClient;\n}): Promise<CausalPatternCandidate[]> {\n try {\n const trajectories = await readAllTrajectories(options.memoryDir, options.causalTrajectoryStoreDir);\n if (!passesConsolidationGates(trajectories, options.config)) return [];\n\n const chainsDir = resolveChainsDir(options.memoryDir, options.causalTrajectoryStoreDir);\n const chainIndex = await readChainIndex(chainsDir);\n\n // Format the causal context for the LLM\n let context = formatCausalContext(trajectories, chainIndex);\n\n // Append memory extensions block if available (#382)\n if (options.pluginConfig) {\n const extBlock = await buildExtensionsBlockForConsolidation(options.pluginConfig);\n if (extBlock.length > 0) {\n context += \"\\n\\n\" + extBlock;\n }\n }\n\n // If no LLM available, fall back to empty (no deterministic fallback)\n const llm = options.llmClient ?? new FallbackLlmClient(\n options.gatewayConfig,\n options.pluginConfig\n ? fallbackLlmRuntimeContextFromConfig(options.pluginConfig, {\n workspaceDir: options.workspaceDir ?? options.pluginConfig.workspaceDir,\n })\n : { workspaceDir: options.workspaceDir },\n );\n const llmOptions = { agentId: options.gatewayAgentId, modelChain: options.modelChain };\n if (!llm.isAvailable(llmOptions)) {\n log.debug(\"[cmc] no LLM available for consolidation — skipping\");\n return [];\n }\n\n // Call LLM for pattern analysis\n const result = await consolidateWithLlm(context, llm, llmOptions);\n const candidates = llmResultToCandidates(result);\n\n log.debug(`[cmc] LLM consolidation produced ${candidates.length} rule(s) and ${result.preferences.length} preference(s)`);\n return candidates;\n } catch (error) {\n log.warn(`[cmc] consolidation failed (non-fatal): ${error instanceof Error ? error.message : String(error)}`);\n return [];\n }\n}\n\n/**\n * Get LLM-synthesized preferences from causal trajectory analysis.\n * Returns formatted preference statements for recall injection.\n */\nexport async function synthesizeCausalPreferencesViaLlm(options: {\n memoryDir: string;\n causalTrajectoryStoreDir?: string;\n gatewayConfig?: GatewayConfig;\n gatewayAgentId?: string;\n modelChain?: AgentPersonaModelConfig;\n workspaceDir?: string;\n minTrajectories?: number;\n}): Promise<string | null> {\n try {\n const trajectories = await readAllTrajectories(options.memoryDir, options.causalTrajectoryStoreDir);\n if (trajectories.length < (options.minTrajectories ?? 2)) return null;\n\n const chainsDir = resolveChainsDir(options.memoryDir, options.causalTrajectoryStoreDir);\n const chainIndex = await readChainIndex(chainsDir);\n const context = formatCausalContext(trajectories, chainIndex);\n\n const llm = new FallbackLlmClient(options.gatewayConfig, {\n workspaceDir: options.workspaceDir,\n });\n const llmOptions = { agentId: options.gatewayAgentId, modelChain: options.modelChain };\n if (!llm.isAvailable(llmOptions)) return null;\n\n const result = await consolidateWithLlm(context, llm, llmOptions);\n if (result.preferences.length === 0 && result.rules.length === 0) return null;\n\n const lines: string[] = [\"## Behavioral Insights (from Causal Chain Analysis)\", \"\"];\n\n for (const pref of result.preferences) {\n lines.push(`- ${pref.statement}`);\n }\n\n for (const rule of result.rules) {\n lines.push(`- ${rule.content}`);\n }\n\n lines.push(\"\");\n return lines.join(\"\\n\");\n } catch (error) {\n log.warn(`[cmc] preference synthesis failed (non-fatal): ${error instanceof Error ? error.message : String(error)}`);\n return null;\n }\n}\n\n/**\n * Optional post-consolidation hook — materializes Codex-native memory artifacts\n * after a causal consolidation run. Guarded by `codexMaterializeMemories` and\n * `codexMaterializeOnConsolidation`. Returns `null` when disabled or when the\n * sentinel is missing (honors user hand-edits).\n *\n * Split from the orchestrator-owned flow so #378 avoids touching\n * orchestrator.ts while Wave 1 edits are in flight.\n */\nexport async function materializeAfterCausalConsolidation(options: {\n config: PluginConfig;\n namespace?: string;\n memories?: MemoryFile[];\n memoryDir?: string;\n codexHome?: string;\n rolloutSummaries?: RolloutSummaryInput[];\n now?: Date;\n}): Promise<MaterializeResult | null> {\n // Delegates to the shared post-consolidation helper — see\n // runPostConsolidationMaterialize in codex-materialize-runner.ts.\n return runPostConsolidationMaterialize(\"[cmc]\", options);\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/causal-consolidation.ts"],"sourcesContent":["/**\n * causal-consolidation.ts — CMC Phase 2: LLM-Assisted Causal Consolidation\n *\n * Uses an LLM to analyze causal trajectory patterns across sessions.\n * The LLM receives the causal chain graph as context — connected trajectories\n * from different sessions — and identifies recurring behavioral patterns,\n * preference signals, and actionable rules.\n *\n * This is the core CMC innovation: the LLM gets cross-session causal context\n * that no other memory system provides. It can see that a user investigated\n * a bug in session 1, attempted a fix in session 2, and succeeded in session 3 —\n * and synthesize a rule or preference from that chain.\n */\n\nimport { createHash } from \"node:crypto\";\nimport { resolveCausalTrajectoryStoreDir, type CausalTrajectoryRecord } from \"./causal-trajectory.js\";\nimport { readChainIndex, resolveChainsDir, type CausalChainIndex, type CausalEdge } from \"./causal-chain.js\";\nimport { listJsonFiles, readJsonFile } from \"./json-store.js\";\nimport { isRecord } from \"./store-contract.js\";\nimport { FallbackLlmClient, fallbackLlmRuntimeContextFromConfig } from \"./fallback-llm.js\";\nimport type { AgentPersonaModelConfig, GatewayConfig, MemoryFile, PluginConfig } from \"./types.js\";\nimport path from \"node:path\";\nimport { log } from \"./logger.js\";\nimport { runPostConsolidationMaterialize } from \"./connectors/codex-materialize-runner.js\";\nimport type { MaterializeResult, RolloutSummaryInput } from \"./connectors/codex-materialize.js\";\nimport { buildExtensionsBlockForConsolidation } from \"./semantic-consolidation.js\";\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface CausalPatternCandidate {\n id: string;\n sourceType: \"causal-pattern\";\n subject: string;\n category: \"principle\" | \"rule\" | \"preference\";\n content: string;\n score: number;\n rationale: string;\n outcome: null;\n provenance: string[];\n agent: string | null;\n workflow: string | null;\n}\n\nexport interface ConsolidationConfig {\n minRecurrence: number;\n minSessions: number;\n successThreshold: number;\n}\n\nexport interface LlmConsolidationResult {\n rules: Array<{\n content: string;\n category: \"rule\" | \"principle\" | \"preference\";\n confidence: number;\n evidence: string[];\n }>;\n preferences: Array<{\n statement: string;\n confidence: number;\n evidence: string[];\n }>;\n}\n\nconst CAUSAL_RULE_CATEGORIES = new Set([\"rule\", \"principle\", \"preference\"]);\n\ninterface ConsolidationLlmClient {\n isAvailable(options?: { agentId?: string; modelChain?: AgentPersonaModelConfig }): boolean;\n chatCompletion(\n messages: Array<{ role: \"system\" | \"user\" | \"assistant\"; content: string }>,\n options?: { temperature?: number; maxTokens?: number; agentId?: string; modelChain?: AgentPersonaModelConfig },\n ): Promise<{ content: string } | null>;\n}\n\n// ─── Trajectory Reading ──────────────────────────────────────────────────────\n\nasync function readAllTrajectories(\n memoryDir: string,\n causalTrajectoryStoreDir?: string,\n): Promise<CausalTrajectoryRecord[]> {\n const root = resolveCausalTrajectoryStoreDir(memoryDir, causalTrajectoryStoreDir);\n const trajectoriesDir = path.join(root, \"trajectories\");\n\n const files = await listJsonFiles(trajectoriesDir).catch(() => [] as string[]);\n const results: CausalTrajectoryRecord[] = [];\n\n for (const filePath of files) {\n try {\n const raw = await readJsonFile(filePath);\n if (isRecord(raw) && typeof raw.trajectoryId === \"string\") {\n results.push(raw as unknown as CausalTrajectoryRecord);\n }\n } catch {\n // skip invalid\n }\n }\n\n return results;\n}\n\n// ─── Context Formatting ──────────────────────────────────────────────────────\n\n/**\n * Format trajectories and their causal connections as a readable context\n * for the LLM. Groups by session and shows chain connections.\n */\nfunction formatCausalContext(\n trajectories: CausalTrajectoryRecord[],\n chainIndex: CausalChainIndex,\n maxChars: number = 8000,\n): string {\n // Group trajectories by session\n const bySession = new Map<string, CausalTrajectoryRecord[]>();\n for (const t of trajectories) {\n const list = bySession.get(t.sessionKey) ?? [];\n list.push(t);\n bySession.set(t.sessionKey, list);\n }\n\n const lines: string[] = [];\n lines.push(`## Causal Trajectories (${trajectories.length} across ${bySession.size} sessions)`);\n lines.push(\"\");\n\n // Format each session's trajectories\n for (const [sessionKey, sessionTrajs] of bySession) {\n lines.push(`### Session: ${sessionKey}`);\n for (const t of sessionTrajs.slice(0, 5)) {\n const outcome = t.outcomeKind === \"success\" ? \"+\" : t.outcomeKind === \"failure\" ? \"-\" : \"~\";\n lines.push(`[${outcome}] Goal: ${t.goal}`);\n lines.push(` Action: ${t.actionSummary}`);\n lines.push(` Outcome: ${t.outcomeSummary}`);\n if (t.followUpSummary) lines.push(` Follow-up: ${t.followUpSummary}`);\n if (t.entityRefs?.length) lines.push(` Entities: ${t.entityRefs.join(\", \")}`);\n }\n lines.push(\"\");\n }\n\n // Format causal chain connections\n const edgeCount = Object.keys(chainIndex.edges).length;\n if (edgeCount > 0) {\n lines.push(`## Cross-Session Causal Chains (${edgeCount} connections)`);\n lines.push(\"\");\n\n const trajectoryMap = new Map(trajectories.map((t) => [t.trajectoryId, t]));\n const shown = new Set<string>();\n\n for (const [edgeId, edge] of Object.entries(chainIndex.edges)) {\n if (shown.size >= 10) break; // limit output size\n const from = trajectoryMap.get(edge.fromTrajectoryId);\n const to = trajectoryMap.get(edge.toTrajectoryId);\n if (!from || !to) continue;\n\n lines.push(`${edge.edgeType}: \"${from.goal}\" (${from.sessionKey}) → \"${to.goal}\" (${to.sessionKey})`);\n shown.add(edgeId);\n }\n lines.push(\"\");\n }\n\n const result = lines.join(\"\\n\");\n return result.length > maxChars ? result.slice(0, maxChars) + \"\\n[truncated]\" : result;\n}\n\n// ─── LLM Consolidation ──────────────────────────────────────────────────────\n\nconst CONSOLIDATION_PROMPT = `You are analyzing a user's causal trajectory history across multiple sessions. Trajectories record what the user tried to do (goal), what they did (action), and what happened (outcome).\n\nYour job is to identify:\n1. BEHAVIORAL RULES: Recurring patterns where the same approach consistently succeeds or fails. These should be actionable guidance for future sessions.\n2. PREFERENCES: What the user cares about, prefers, or consistently chooses — even if never explicitly stated. Infer preferences from what they repeatedly do, retry until successful, or always include in their workflow.\n\nIMPORTANT:\n- Look for CROSS-SESSION patterns — things that repeat across different sessions are more significant than within-session patterns.\n- A user who retries the same goal across sessions has a strong implicit preference for that outcome.\n- Consistent action choices reveal preferences even when the user never says \"I prefer X.\"\n- Frame preferences as \"The user would prefer responses that...\" when applicable.\n\nOutput valid JSON only:\n{\n \"rules\": [\n {\"content\": \"actionable rule text\", \"category\": \"rule|principle\", \"confidence\": 0.0-1.0, \"evidence\": [\"trajectory IDs\"]}\n ],\n \"preferences\": [\n {\"statement\": \"The user would prefer...\", \"confidence\": 0.0-1.0, \"evidence\": [\"trajectory IDs\"]}\n ]\n}\n\nIf no clear patterns exist, return {\"rules\": [], \"preferences\": []}.`;\n\nasync function consolidateWithLlm(\n context: string,\n llm: ConsolidationLlmClient,\n options: { agentId?: string; modelChain?: AgentPersonaModelConfig } = {},\n): Promise<LlmConsolidationResult> {\n const response = await llm.chatCompletion(\n [\n { role: \"system\", content: CONSOLIDATION_PROMPT },\n { role: \"user\", content: context },\n ],\n { temperature: 0.2, maxTokens: 2000, agentId: options.agentId, modelChain: options.modelChain },\n );\n\n if (!response?.content) {\n return { rules: [], preferences: [] };\n }\n\n try {\n // Extract JSON from response (may have markdown code fences)\n let jsonStr = response.content.trim();\n const fenceMatch = jsonStr.match(/```(?:json)?\\s*\\n?([\\s\\S]*?)\\n?\\s*```/);\n if (fenceMatch) jsonStr = fenceMatch[1];\n\n const parsed = JSON.parse(jsonStr);\n const rawRules: unknown[] = Array.isArray(parsed.rules) ? parsed.rules : [];\n const rawPreferences: unknown[] = Array.isArray(parsed.preferences) ? parsed.preferences : [];\n return {\n rules: rawRules\n .map(parseLlmRule)\n .filter((rule): rule is LlmConsolidationResult[\"rules\"][number] => !!rule),\n preferences: rawPreferences\n .map(parseLlmPreference)\n .filter((pref): pref is LlmConsolidationResult[\"preferences\"][number] => !!pref),\n };\n } catch {\n log.warn(\"[cmc] failed to parse LLM consolidation response\");\n return { rules: [], preferences: [] };\n }\n}\n\n// ─── Candidate Generation ────────────────────────────────────────────────────\n\nfunction stablePatternId(content: string): string {\n const digest = createHash(\"sha256\")\n .update(`causal-pattern\\0${content}`)\n .digest(\"hex\")\n .slice(0, 16);\n return `causal-pattern:${digest}`;\n}\n\nfunction parseConfidence(value: unknown): number | undefined {\n if (typeof value !== \"number\" || !Number.isFinite(value)) return undefined;\n return Math.max(0, Math.min(1, value));\n}\n\nfunction parseEvidence(value: unknown): string[] {\n if (!Array.isArray(value)) return [];\n return value.filter((item): item is string => typeof item === \"string\" && item.trim().length > 0);\n}\n\nfunction parseLlmRule(raw: unknown): LlmConsolidationResult[\"rules\"][number] | undefined {\n if (!raw || typeof raw !== \"object\" || Array.isArray(raw)) return undefined;\n const r = raw as Record<string, unknown>;\n const content = typeof r.content === \"string\" ? r.content.trim() : \"\";\n const category = typeof r.category === \"string\" ? r.category : \"\";\n const confidence = parseConfidence(r.confidence);\n if (content.length <= 5 || !CAUSAL_RULE_CATEGORIES.has(category) || confidence === undefined) {\n return undefined;\n }\n return {\n content,\n category: category as \"rule\" | \"principle\" | \"preference\",\n confidence,\n evidence: parseEvidence(r.evidence),\n };\n}\n\nfunction parseLlmPreference(raw: unknown): LlmConsolidationResult[\"preferences\"][number] | undefined {\n if (!raw || typeof raw !== \"object\" || Array.isArray(raw)) return undefined;\n const p = raw as Record<string, unknown>;\n const statement = typeof p.statement === \"string\" ? p.statement.trim() : \"\";\n const confidence = parseConfidence(p.confidence);\n if (statement.length <= 5 || confidence === undefined) return undefined;\n return {\n statement,\n confidence,\n evidence: parseEvidence(p.evidence),\n };\n}\n\nfunction llmResultToCandidates(result: LlmConsolidationResult): CausalPatternCandidate[] {\n const candidates: CausalPatternCandidate[] = [];\n\n for (const rule of result.rules) {\n const category =\n rule.category === \"principle\" || rule.category === \"preference\"\n ? rule.category\n : \"rule\";\n candidates.push({\n id: stablePatternId(rule.content),\n sourceType: \"causal-pattern\",\n subject: rule.content.slice(0, 80),\n category,\n content: rule.content,\n score: Math.min(1, rule.confidence ?? 0.7),\n rationale: \"LLM-identified causal pattern from cross-session trajectory analysis\",\n outcome: null,\n provenance: (rule.evidence ?? []).slice(0, 5),\n agent: null,\n workflow: null,\n });\n }\n\n for (const preference of result.preferences) {\n candidates.push({\n id: stablePatternId(preference.statement),\n sourceType: \"causal-pattern\",\n subject: preference.statement.slice(0, 80),\n category: \"preference\",\n content: preference.statement,\n score: Math.min(1, preference.confidence ?? 0.7),\n rationale: \"LLM-identified preference from cross-session trajectory analysis\",\n outcome: null,\n provenance: (preference.evidence ?? []).slice(0, 5),\n agent: null,\n workflow: null,\n });\n }\n\n return candidates;\n}\n\nfunction normalizePositiveInteger(value: number, fallback: number): number {\n return Number.isFinite(value) && value > 0 ? Math.floor(value) : fallback;\n}\n\nfunction normalizeSuccessThreshold(value: number): number {\n if (!Number.isFinite(value) || value <= 0) return 0;\n return Math.min(1, value);\n}\n\nfunction trajectorySuccessScore(trajectory: CausalTrajectoryRecord): number {\n if (trajectory.outcomeKind === \"success\") return 1;\n if (trajectory.outcomeKind === \"partial\") return 0.5;\n return 0;\n}\n\nfunction averageSuccessScore(trajectories: CausalTrajectoryRecord[]): number {\n if (trajectories.length === 0) return 0;\n const total = trajectories.reduce((sum, trajectory) => sum + trajectorySuccessScore(trajectory), 0);\n return total / trajectories.length;\n}\n\nfunction passesConsolidationGates(\n trajectories: CausalTrajectoryRecord[],\n config: ConsolidationConfig,\n): boolean {\n const minRecurrence = normalizePositiveInteger(config.minRecurrence, 1);\n if (trajectories.length < minRecurrence) return false;\n\n const minSessions = normalizePositiveInteger(config.minSessions, 1);\n const sessionCount = new Set(trajectories.map((trajectory) => trajectory.sessionKey)).size;\n if (sessionCount < minSessions) return false;\n\n const successThreshold = normalizeSuccessThreshold(config.successThreshold);\n if (successThreshold > 0 && averageSuccessScore(trajectories) < successThreshold) {\n return false;\n }\n\n return true;\n}\n\n// ─── Public API ──────────────────────────────────────────────────────────────\n\n/**\n * Run LLM-assisted consolidation: read trajectories, format causal context,\n * ask LLM to identify patterns and preferences.\n */\nexport async function deriveCausalPromotionCandidates(options: {\n memoryDir: string;\n causalTrajectoryStoreDir?: string;\n config: ConsolidationConfig;\n gatewayConfig?: GatewayConfig;\n gatewayAgentId?: string;\n modelChain?: AgentPersonaModelConfig;\n workspaceDir?: string;\n pluginConfig?: PluginConfig;\n llmClient?: ConsolidationLlmClient;\n}): Promise<CausalPatternCandidate[]> {\n try {\n const trajectories = await readAllTrajectories(options.memoryDir, options.causalTrajectoryStoreDir);\n if (!passesConsolidationGates(trajectories, options.config)) return [];\n\n const chainsDir = resolveChainsDir(options.memoryDir, options.causalTrajectoryStoreDir);\n const chainIndex = await readChainIndex(chainsDir);\n\n // Format the causal context for the LLM\n let context = formatCausalContext(trajectories, chainIndex);\n\n // Append memory extensions block if available (#382)\n if (options.pluginConfig) {\n const extBlock = await buildExtensionsBlockForConsolidation(options.pluginConfig);\n if (extBlock.length > 0) {\n context += \"\\n\\n\" + extBlock;\n }\n }\n\n // If no LLM available, fall back to empty (no deterministic fallback)\n const llm = options.llmClient ?? new FallbackLlmClient(\n options.gatewayConfig,\n options.pluginConfig\n ? fallbackLlmRuntimeContextFromConfig(options.pluginConfig, {\n workspaceDir: options.workspaceDir ?? options.pluginConfig.workspaceDir,\n })\n : { workspaceDir: options.workspaceDir },\n );\n const llmOptions = { agentId: options.gatewayAgentId, modelChain: options.modelChain };\n if (!llm.isAvailable(llmOptions)) {\n log.debug(\"[cmc] no LLM available for consolidation — skipping\");\n return [];\n }\n\n // Call LLM for pattern analysis\n const result = await consolidateWithLlm(context, llm, llmOptions);\n const candidates = llmResultToCandidates(result);\n\n log.debug(`[cmc] LLM consolidation produced ${candidates.length} rule(s) and ${result.preferences.length} preference(s)`);\n return candidates;\n } catch (error) {\n log.warn(`[cmc] consolidation failed (non-fatal): ${error instanceof Error ? error.message : String(error)}`);\n return [];\n }\n}\n\n/**\n * Get LLM-synthesized preferences from causal trajectory analysis.\n * Returns formatted preference statements for recall injection.\n */\nexport async function synthesizeCausalPreferencesViaLlm(options: {\n memoryDir: string;\n causalTrajectoryStoreDir?: string;\n gatewayConfig?: GatewayConfig;\n gatewayAgentId?: string;\n modelChain?: AgentPersonaModelConfig;\n workspaceDir?: string;\n minTrajectories?: number;\n}): Promise<string | null> {\n try {\n const trajectories = await readAllTrajectories(options.memoryDir, options.causalTrajectoryStoreDir);\n if (trajectories.length < (options.minTrajectories ?? 2)) return null;\n\n const chainsDir = resolveChainsDir(options.memoryDir, options.causalTrajectoryStoreDir);\n const chainIndex = await readChainIndex(chainsDir);\n const context = formatCausalContext(trajectories, chainIndex);\n\n const llm = new FallbackLlmClient(options.gatewayConfig, {\n workspaceDir: options.workspaceDir,\n });\n const llmOptions = { agentId: options.gatewayAgentId, modelChain: options.modelChain };\n if (!llm.isAvailable(llmOptions)) return null;\n\n const result = await consolidateWithLlm(context, llm, llmOptions);\n if (result.preferences.length === 0 && result.rules.length === 0) return null;\n\n const lines: string[] = [\"## Behavioral Insights (from Causal Chain Analysis)\", \"\"];\n\n for (const pref of result.preferences) {\n lines.push(`- ${pref.statement}`);\n }\n\n for (const rule of result.rules) {\n lines.push(`- ${rule.content}`);\n }\n\n lines.push(\"\");\n return lines.join(\"\\n\");\n } catch (error) {\n log.warn(`[cmc] preference synthesis failed (non-fatal): ${error instanceof Error ? error.message : String(error)}`);\n return null;\n }\n}\n\n/**\n * Optional post-consolidation hook — materializes Codex-native memory artifacts\n * after a causal consolidation run. Guarded by `codexMaterializeMemories` and\n * `codexMaterializeOnConsolidation`. Returns `null` when disabled or when the\n * sentinel is missing (honors user hand-edits).\n *\n * Split from the orchestrator-owned flow so #378 avoids touching\n * orchestrator.ts while Wave 1 edits are in flight.\n */\nexport async function materializeAfterCausalConsolidation(options: {\n config: PluginConfig;\n namespace?: string;\n memories?: MemoryFile[];\n memoryDir?: string;\n codexHome?: string;\n rolloutSummaries?: RolloutSummaryInput[];\n now?: Date;\n}): Promise<MaterializeResult | null> {\n // Delegates to the shared post-consolidation helper — see\n // runPostConsolidationMaterialize in codex-materialize-runner.ts.\n return runPostConsolidationMaterialize(\"[cmc]\", options);\n}\n"],"mappings":"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","names":[]}
@@ -1,11 +1,12 @@
1
1
  import { a as GraphEdge } from './graph-DRkl22KE.js';
2
2
  import { CausalTrajectoryRecord } from './causal-trajectory.js';
3
3
  import './capabilities.js';
4
- import './types-YY-eKKU7.js';
4
+ import './types-BGxTvLBO.js';
5
5
  import './message-parts/index.js';
6
6
  import './bounded-jsonl-state.js';
7
7
  import './operator-doctor-types.js';
8
8
  import './external-wiki-config.js';
9
+ import './recall-state-view.js';
9
10
  import './contradiction-config.js';
10
11
  import './graph-path-scoring-config.js';
11
12
  import './deep-recall-config.js';
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-HL4DB7TO.js";
4
4
  import {
5
5
  launchProcess
6
- } from "./chunk-O75CRYGF.js";
6
+ } from "./chunk-ZEFVK7XC.js";
7
7
 
8
8
  // src/compat/checks.ts
9
9
  import { access, readFile } from "fs/promises";
@@ -647,4 +647,4 @@ async function runCompatChecks(options) {
647
647
  export {
648
648
  runCompatChecks
649
649
  };
650
- //# sourceMappingURL=chunk-CDKHKZL5.js.map
650
+ //# sourceMappingURL=chunk-2524MOWK.js.map
@@ -4,21 +4,16 @@ import {
4
4
 
5
5
  // src/recall-state-view.ts
6
6
  var DEFAULT_RECALL_STATE_VIEWS = false;
7
- var CHANGE_WORDS = ["before", "after", "switch", "switches", "switched", "switching", "change", "changes", "changed", "changing"];
7
+ var CHANGE_WORDS = ["switch", "switches", "switched", "switching", "change", "changes", "changed", "changing"];
8
+ var CHANGE_PHRASE_RE = /\bwhen\s+did\b|\bused\s+to\b/;
9
+ var CHANGE_WORD_RE = new RegExp(`\\b(?:${CHANGE_WORDS.join("|")})\\b`);
10
+ var EVENT_POINTER_RE = /\b(?:before|after)\s+(?:the|a|an|this|that|these|those)\b/;
8
11
  function parseRecallStateViews(raw) {
9
12
  return coerceBooleanLike(raw, "recallStateViews") === true;
10
13
  }
11
14
  function isChangeOrientedQuery(query) {
12
15
  const lower = query.toLowerCase();
13
- if (lower.includes("when did") || lower.includes("used to")) return true;
14
- return CHANGE_WORDS.some((word) => {
15
- const idx = lower.indexOf(word);
16
- if (idx < 0) return false;
17
- const before = idx === 0 || !/[a-z0-9]/.test(lower[idx - 1] ?? "");
18
- const afterIdx = idx + word.length;
19
- const after = afterIdx >= lower.length || !/[a-z0-9]/.test(lower[afterIdx] ?? "");
20
- return before && after;
21
- });
16
+ return CHANGE_PHRASE_RE.test(lower) || CHANGE_WORD_RE.test(lower) || EVENT_POINTER_RE.test(lower);
22
17
  }
23
18
  function shouldWidenSuperseded(successorId, candidateIds) {
24
19
  return typeof successorId === "string" && successorId.length > 0 && candidateIds.has(successorId);
@@ -42,7 +37,7 @@ function buildSuccessorMap(results, chains) {
42
37
  }
43
38
  return byPred;
44
39
  }
45
- function labelFor(id, result, byPred, admittedIds) {
40
+ function labelFor(id, result, byPred, admittedIds, asOfMs) {
46
41
  const successorId = result.supersededBy ?? byPred.get(id);
47
42
  const isPred = shouldWidenSuperseded(successorId, admittedIds);
48
43
  let isSucc = false;
@@ -55,34 +50,61 @@ function labelFor(id, result, byPred, admittedIds) {
55
50
  if (isPred && isSucc) return "transition";
56
51
  if (isPred) return "historical";
57
52
  if (isSucc) return "current";
58
- return result.status === "superseded" ? "historical" : "current";
53
+ if (result.status === "superseded") {
54
+ return asOfMs === null ? "historical" : snapshotStateLabel(result, asOfMs);
55
+ }
56
+ return "current";
57
+ }
58
+ function snapshotStateLabel(result, asOfMs) {
59
+ const supersededAtMs = Date.parse(result.supersededAt ?? "");
60
+ return Number.isFinite(supersededAtMs) && supersededAtMs <= asOfMs ? "historical" : "current";
59
61
  }
60
62
  function annotateStateView(results, query, chains, options = {}) {
61
63
  const enabled = options.enabled === true;
62
64
  if (!enabled || !isChangeOrientedQuery(query)) return results;
65
+ const asOfMs = typeof options.asOfMs === "number" && Number.isFinite(options.asOfMs) ? options.asOfMs : null;
63
66
  const byPred = buildSuccessorMap(results, chains);
64
67
  const candidateIds = /* @__PURE__ */ new Set();
65
68
  for (const result of results) {
66
69
  const id = resultStateViewId(result);
67
70
  if (id) candidateIds.add(id);
68
71
  }
69
- const admitted = [];
70
- for (const result of results) {
72
+ const isSupersededRow = (result) => {
71
73
  const id = resultStateViewId(result);
72
- const successorId = result.supersededBy ?? byPred.get(id);
73
- const superseded = result.status === "superseded" || Boolean(result.supersededBy) || byPred.has(id);
74
- if (!superseded || shouldWidenSuperseded(successorId, candidateIds)) {
75
- admitted.push(result);
74
+ return {
75
+ superseded: result.status === "superseded" || Boolean(result.supersededBy) || byPred.has(id),
76
+ successorId: result.supersededBy ?? byPred.get(id)
77
+ };
78
+ };
79
+ let admitted;
80
+ if (asOfMs !== null) {
81
+ admitted = results.slice();
82
+ } else {
83
+ admitted = [];
84
+ for (const result of results) {
85
+ const { superseded, successorId } = isSupersededRow(result);
86
+ if (!superseded || shouldWidenSuperseded(successorId, candidateIds)) {
87
+ admitted.push(result);
88
+ }
89
+ }
90
+ let admittedIds2 = new Set(admitted.map(resultStateViewId).filter(Boolean));
91
+ for (let changed = true; changed; ) {
92
+ changed = false;
93
+ for (let i = admitted.length - 1; i >= 0; i -= 1) {
94
+ const row = admitted[i];
95
+ const { superseded, successorId } = isSupersededRow(row);
96
+ if (superseded && !shouldWidenSuperseded(successorId, admittedIds2)) {
97
+ admitted.splice(i, 1);
98
+ changed = true;
99
+ }
100
+ }
101
+ if (changed) admittedIds2 = new Set(admitted.map(resultStateViewId).filter(Boolean));
76
102
  }
77
103
  }
78
- const admittedIds = /* @__PURE__ */ new Set();
79
- for (const result of admitted) {
80
- const id = resultStateViewId(result);
81
- if (id) admittedIds.add(id);
82
- }
104
+ const admittedIds = new Set(admitted.map(resultStateViewId).filter(Boolean));
83
105
  return admitted.map((result) => {
84
106
  const id = resultStateViewId(result);
85
- return { ...result, stateLabel: labelFor(id, result, byPred, admittedIds) };
107
+ return { ...result, stateLabel: labelFor(id, result, byPred, admittedIds, asOfMs) };
86
108
  });
87
109
  }
88
110
 
@@ -95,4 +117,4 @@ export {
95
117
  resultStateViewId,
96
118
  annotateStateView
97
119
  };
98
- //# sourceMappingURL=chunk-HVAEXYPL.js.map
120
+ //# sourceMappingURL=chunk-255PC37A.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/recall-state-view.ts"],"sourcesContent":["/**\n * Recall state views (issue #1952).\n *\n * Config key: `recallStateViews` (default false). When false, annotateStateView\n * is identity: same array reference, no `stateLabel`. config.ts is at its\n * fileSizeGrandfather ceiling, so parseConfig wiring waits for a later PR.\n * Call `parseRecallStateViews` at the recall seam when that lands.\n *\n * Change-intent morphology lives here (do not grow intent.ts). A superseded\n * memory is admitted only when its successor is also in the candidate set.\n */\nimport { coerceBooleanLike } from \"./connectors/coerce.js\";\n\nexport type StateLabel = \"current\" | \"historical\" | \"transition\";\n\nexport interface StateViewChain {\n predecessorId: string;\n successorId: string;\n supersededAt?: string;\n}\n\nexport interface StateViewResult {\n id?: string;\n docid?: string;\n status?: string;\n supersededBy?: string;\n supersededAt?: string;\n stateLabel?: StateLabel;\n}\n\nexport const DEFAULT_RECALL_STATE_VIEWS = false;\n\nconst CHANGE_WORDS = [\"switch\", \"switches\", \"switched\", \"switching\", \"change\", \"changes\", \"changed\", \"changing\"];\n\n// Phrase matches are token-bounded: \"when Didi\" must not fire the\n// \"when did\" phrase, and \"confused to\" must not fire \"used to\".\nconst CHANGE_PHRASE_RE = /\\bwhen\\s+did\\b|\\bused\\s+to\\b/;\nconst CHANGE_WORD_RE = new RegExp(`\\\\b(?:${CHANGE_WORDS.join(\"|\")})\\\\b`);\n// Bare \"before\"/\"after\" are ordinary sequencing (\"before lunch\",\n// \"after install\"). They carry change intent only when they point at a\n// specific event through a determiner (\"before the move\", \"after the\n// cutover\").\nconst EVENT_POINTER_RE = /\\b(?:before|after)\\s+(?:the|a|an|this|that|these|those)\\b/;\n\nexport function parseRecallStateViews(raw: unknown): boolean {\n return coerceBooleanLike(raw, \"recallStateViews\") === true;\n}\n\nexport function isChangeOrientedQuery(query: string): boolean {\n const lower = query.toLowerCase();\n return CHANGE_PHRASE_RE.test(lower) || CHANGE_WORD_RE.test(lower) || EVENT_POINTER_RE.test(lower);\n}\n\nexport function shouldWidenSuperseded(\n successorId: string | undefined,\n candidateIds: ReadonlySet<string>,\n): boolean {\n return typeof successorId === \"string\" && successorId.length > 0 && candidateIds.has(successorId);\n}\n\nexport function formatSupersededPrefix(date: string, successorId: string): string {\n return `[superseded ${date} by ${successorId}]`;\n}\n\nexport function resultStateViewId(result: StateViewResult): string {\n return result.id ?? result.docid ?? \"\";\n}\n\nfunction buildSuccessorMap(results: readonly StateViewResult[], chains: readonly StateViewChain[]): Map<string, string> {\n const byPred = new Map<string, string>();\n for (const chain of chains) {\n if (chain.predecessorId && chain.successorId) {\n byPred.set(chain.predecessorId, chain.successorId);\n }\n }\n for (const result of results) {\n const id = resultStateViewId(result);\n if (id && result.supersededBy) byPred.set(id, result.supersededBy);\n }\n return byPred;\n}\n\nfunction labelFor(\n id: string,\n result: StateViewResult,\n byPred: Map<string, string>,\n admittedIds: ReadonlySet<string>,\n asOfMs: number | null,\n): StateLabel {\n const successorId = result.supersededBy ?? byPred.get(id);\n const isPred = shouldWidenSuperseded(successorId, admittedIds);\n let isSucc = false;\n for (const [predId, succId] of byPred) {\n if (succId === id && admittedIds.has(predId)) {\n isSucc = true;\n break;\n }\n }\n if (isPred && isSucc) return \"transition\";\n if (isPred) return \"historical\";\n if (isSucc) return \"current\";\n if (result.status === \"superseded\") {\n // #1952 asOf mode: the successor is legitimately absent under the\n // historical pin. The row was the live fact at the snapshot when the\n // recorded supersession postdates the pin (\"current\" relative to\n // the snapshot); already replaced at the pin is \"historical\".\n return asOfMs === null ? \"historical\" : snapshotStateLabel(result, asOfMs);\n }\n return \"current\";\n}\n\nfunction snapshotStateLabel(result: StateViewResult, asOfMs: number): StateLabel {\n const supersededAtMs = Date.parse(result.supersededAt ?? \"\");\n return Number.isFinite(supersededAtMs) && supersededAtMs <= asOfMs\n ? \"historical\"\n : \"current\";\n}\n\nexport function annotateStateView<T extends StateViewResult>(\n results: T[],\n query: string,\n chains: readonly StateViewChain[],\n options: { enabled?: boolean; asOfMs?: number } = {},\n): T[] {\n const enabled = options.enabled === true;\n if (!enabled || !isChangeOrientedQuery(query)) return results;\n // #1952 asOf mode: under a historical pin the pipeline's isValidAsOf\n // gate already decided validity at the pinned instant, so a predecessor\n // must not be discarded merely because its successor is absent under\n // the same filter. A valid asOf result is never emptied here.\n const asOfMs =\n typeof options.asOfMs === \"number\" && Number.isFinite(options.asOfMs)\n ? options.asOfMs\n : null;\n\n const byPred = buildSuccessorMap(results, chains);\n const candidateIds = new Set<string>();\n for (const result of results) {\n const id = resultStateViewId(result);\n if (id) candidateIds.add(id);\n }\n\n const isSupersededRow = (result: T): { superseded: boolean; successorId: string | undefined } => {\n const id = resultStateViewId(result);\n return {\n superseded: result.status === \"superseded\" || Boolean(result.supersededBy) || byPred.has(id),\n successorId: result.supersededBy ?? byPred.get(id),\n };\n };\n\n let admitted: T[];\n if (asOfMs !== null) {\n admitted = results.slice();\n } else {\n admitted = [];\n for (const result of results) {\n const { superseded, successorId } = isSupersededRow(result);\n if (!superseded || shouldWidenSuperseded(successorId, candidateIds)) {\n admitted.push(result);\n }\n }\n\n // #1952 contract: superseded never appears without its successor. A\n // successor can itself be dropped (filtered elsewhere, or transitively\n // orphaned), so reconcile to a fixpoint instead of trusting the first pass.\n let admittedIds = new Set(admitted.map(resultStateViewId).filter(Boolean));\n for (let changed = true; changed; ) {\n changed = false;\n for (let i = admitted.length - 1; i >= 0; i -= 1) {\n const row = admitted[i]!;\n const { superseded, successorId } = isSupersededRow(row);\n if (superseded && !shouldWidenSuperseded(successorId, admittedIds)) {\n admitted.splice(i, 1);\n changed = true;\n }\n }\n if (changed) admittedIds = new Set(admitted.map(resultStateViewId).filter(Boolean));\n }\n }\n\n const admittedIds = new Set(admitted.map(resultStateViewId).filter(Boolean));\n return admitted.map((result) => {\n const id = resultStateViewId(result);\n return { ...result, stateLabel: labelFor(id, result, byPred, admittedIds, asOfMs) };\n });\n}\n"],"mappings":"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","names":["admittedIds"]}
@@ -4,10 +4,10 @@ import {
4
4
  } from "./chunk-CARRTDKC.js";
5
5
  import {
6
6
  composeSalvagedEnvelope
7
- } from "./chunk-RC5DXXWC.js";
7
+ } from "./chunk-YM7YN37H.js";
8
8
  import {
9
9
  StorageManager
10
- } from "./chunk-GVG3JYBI.js";
10
+ } from "./chunk-ZMKYCFJ7.js";
11
11
  import {
12
12
  parseContinuityImprovementLoops
13
13
  } from "./chunk-LDXUBPMO.js";
@@ -1283,4 +1283,4 @@ export {
1283
1283
  defaultTierMigrationCycleBudget,
1284
1284
  CompoundingEngine
1285
1285
  };
1286
- //# sourceMappingURL=chunk-IY2FVXM6.js.map
1286
+ //# sourceMappingURL=chunk-2AU4D4HQ.js.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  parseFrontmatter
3
- } from "./chunk-GVG3JYBI.js";
3
+ } from "./chunk-ZMKYCFJ7.js";
4
4
  import {
5
5
  activityDigestPath,
6
6
  isValidActivityDate
7
- } from "./chunk-S7DPKM5W.js";
7
+ } from "./chunk-353C5UNV.js";
8
8
  import {
9
9
  EngramAccessInputError
10
10
  } from "./chunk-2Z24E5W2.js";
@@ -199,4 +199,4 @@ export {
199
199
  buildStandup,
200
200
  standupHelp
201
201
  };
202
- //# sourceMappingURL=chunk-QDY6KYTN.js.map
202
+ //# sourceMappingURL=chunk-2JCA2PQT.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  StorageManager
3
- } from "./chunk-GVG3JYBI.js";
3
+ } from "./chunk-ZMKYCFJ7.js";
4
4
  import {
5
5
  composeMemoryEnvelope
6
- } from "./chunk-3QQTXYZ6.js";
6
+ } from "./chunk-LSLCFCCQ.js";
7
7
  import {
8
8
  isErrnoCode
9
9
  } from "./chunk-KNA3BXXL.js";
@@ -546,4 +546,4 @@ export {
546
546
  setSemanticRulePromotionTestHooks,
547
547
  promoteSemanticRuleFromMemory
548
548
  };
549
- //# sourceMappingURL=chunk-RSVEP77Y.js.map
549
+ //# sourceMappingURL=chunk-2UZ5ZH6W.js.map