@remnic/core 10.0.0 → 10.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (259) hide show
  1. package/dist/access-admin-ops-surface.js +35 -33
  2. package/dist/access-authorization-probe.js +36 -34
  3. package/dist/access-boundary.js +35 -33
  4. package/dist/access-cli.js +96 -94
  5. package/dist/access-cli.js.map +1 -1
  6. package/dist/access-extraction-force-flush.js +35 -33
  7. package/dist/access-http-briefing.js +36 -34
  8. package/dist/access-http-query.js +37 -35
  9. package/dist/access-http.js +54 -52
  10. package/dist/access-identity-continuity-surface.js +35 -33
  11. package/dist/access-lcm-surface.js +35 -33
  12. package/dist/access-mcp.js +44 -42
  13. package/dist/access-namespace-preflight.js +35 -33
  14. package/dist/access-observe-write-category.js +4 -4
  15. package/dist/access-observe-write-surface.js +35 -33
  16. package/dist/access-operations-batch.js +36 -34
  17. package/dist/access-operations.js +43 -41
  18. package/dist/access-recall-concurrency.js +35 -33
  19. package/dist/access-recall-response.js +35 -33
  20. package/dist/access-recall-surface.js +35 -33
  21. package/dist/access-schema.js +3 -3
  22. package/dist/access-service.js +35 -33
  23. package/dist/access-surface-catalog.js +37 -35
  24. package/dist/access-surface-catalog.js.map +1 -1
  25. package/dist/active-recall.js +11 -9
  26. package/dist/active-recall.js.map +1 -1
  27. package/dist/adapters/index.js +4 -4
  28. package/dist/adapters/registry.js +2 -2
  29. package/dist/briefing.js +10 -8
  30. package/dist/buffer.js +7 -5
  31. package/dist/{capsule-crypto-YO5QJ6L3.js → capsule-crypto-7FJQINUR.js} +2 -2
  32. package/dist/causal-consolidation.js +11 -9
  33. package/dist/causal-consolidation.js.map +1 -1
  34. package/dist/{chunk-JWFTPRYD.js → chunk-2EZB2DL5.js} +2 -2
  35. package/dist/{chunk-BXLOS5AJ.js → chunk-2NLLXCJG.js} +2 -2
  36. package/dist/{chunk-QKCGOECM.js → chunk-34G4U6HS.js} +2 -2
  37. package/dist/{chunk-YI6XIFQV.js → chunk-34TSXVQS.js} +2 -2
  38. package/dist/{chunk-7YQR6XHY.js → chunk-3I375S4J.js} +58 -58
  39. package/dist/{chunk-XQWKB6PY.js → chunk-3UP6NP4C.js} +2 -2
  40. package/dist/{chunk-OFGTRDWX.js → chunk-47I2EK6G.js} +2 -2
  41. package/dist/{chunk-HWGFTTPS.js → chunk-5FLFPTDK.js} +2 -2
  42. package/dist/{chunk-LHDSCWDK.js → chunk-7AUC2YSU.js} +13 -13
  43. package/dist/{chunk-AU43D3IT.js → chunk-7DB7KYSR.js} +4 -4
  44. package/dist/{chunk-VDX2J7OX.js → chunk-7LCGFUMB.js} +4 -4
  45. package/dist/{chunk-CNBGAFDY.js → chunk-A7V7GZ7F.js} +2 -2
  46. package/dist/{chunk-SWXPR5SE.js → chunk-B2UCJX76.js} +2 -2
  47. package/dist/{chunk-KYUVFCT2.js → chunk-BCTDTVSR.js} +2 -2
  48. package/dist/{chunk-6WRHNA4I.js → chunk-BKPV47BK.js} +36 -36
  49. package/dist/{chunk-QAIVTLL2.js → chunk-BLHPADUX.js} +2 -2
  50. package/dist/{chunk-PRNR47DI.js → chunk-BOT276JC.js} +2 -2
  51. package/dist/{chunk-O43AAJFQ.js → chunk-CRZ7BU6R.js} +2 -2
  52. package/dist/{chunk-2OFDC3AK.js → chunk-DDPPV3KA.js} +2 -2
  53. package/dist/{chunk-VYIBRCVW.js → chunk-DHQUQ34W.js} +2 -2
  54. package/dist/{chunk-7NBUE5VY.js → chunk-DPX3J2N4.js} +2 -2
  55. package/dist/{chunk-EWWK65CI.js → chunk-DX3ZODO3.js} +2 -2
  56. package/dist/{chunk-SFDBLCZV.js → chunk-DYZHVVJM.js} +30 -30
  57. package/dist/{chunk-B454SHPU.js → chunk-E7FN5N5E.js} +2 -2
  58. package/dist/{chunk-AWSP3WNM.js → chunk-EJJMDLVB.js} +2 -2
  59. package/dist/{chunk-KFHEZJQZ.js → chunk-EPFNPPWH.js} +2 -2
  60. package/dist/{chunk-VDVHIRCK.js → chunk-EUYNHJTK.js} +2 -2
  61. package/dist/{chunk-T32YYUT2.js → chunk-FB6FQT4P.js} +2 -2
  62. package/dist/{chunk-XTN54NML.js → chunk-G3T6YMBO.js} +4 -4
  63. package/dist/{chunk-JC7QQ2DJ.js → chunk-GS6LTJFW.js} +2 -2
  64. package/dist/{chunk-WR66CTVU.js → chunk-GYLDYYRA.js} +4 -4
  65. package/dist/{chunk-PQKZLBCJ.js → chunk-GZRTH3WZ.js} +1 -1
  66. package/dist/{chunk-STQC2FYQ.js → chunk-HNU5CZ7E.js} +6 -6
  67. package/dist/{chunk-E4XLFYHV.js → chunk-HPEONBM3.js} +2 -2
  68. package/dist/{chunk-B3OFQP5Y.js → chunk-IB63OVUB.js} +24 -249
  69. package/dist/chunk-IB63OVUB.js.map +1 -0
  70. package/dist/chunk-IM2GO42H.js +312 -0
  71. package/dist/chunk-IM2GO42H.js.map +1 -0
  72. package/dist/{chunk-EZ3F4YIN.js → chunk-JLUS56YZ.js} +5 -5
  73. package/dist/{chunk-UHESJ6TQ.js → chunk-KEGUXZNY.js} +3 -3
  74. package/dist/{chunk-UHESJ6TQ.js.map → chunk-KEGUXZNY.js.map} +1 -1
  75. package/dist/{chunk-J3ZJBX7I.js → chunk-KM2HQZR3.js} +2 -2
  76. package/dist/{chunk-2MMBJE53.js → chunk-LI3OM3NP.js} +7 -7
  77. package/dist/{chunk-MZOQ26LH.js → chunk-LQGX5TCI.js} +2 -2
  78. package/dist/{chunk-KMN2JE4D.js → chunk-LTDWZ2HC.js} +2 -2
  79. package/dist/{chunk-T6RQNV7E.js → chunk-MJ737UIA.js} +2 -2
  80. package/dist/{chunk-7X7A7KVN.js → chunk-NLYOOGZ7.js} +2 -2
  81. package/dist/{chunk-PZ2QQULY.js → chunk-NVZRIHW5.js} +8 -8
  82. package/dist/{chunk-NT2Q6AHC.js → chunk-PCO3P7WJ.js} +2 -2
  83. package/dist/{chunk-VO2BNAA2.js → chunk-PXDEIJL5.js} +2 -2
  84. package/dist/{chunk-LXJZUNLX.js → chunk-QHHWJVVW.js} +2 -2
  85. package/dist/{chunk-XLWMNDQR.js → chunk-QJWZJ7HL.js} +3 -3
  86. package/dist/{chunk-73R4HOOK.js → chunk-QPG72IPU.js} +3 -3
  87. package/dist/{chunk-SIGDETMB.js → chunk-R4NGLTUS.js} +2 -2
  88. package/dist/{chunk-TRN56SPQ.js → chunk-R6NHHKXE.js} +2 -2
  89. package/dist/{chunk-ATFFWIKL.js → chunk-RGGXSN5A.js} +2 -2
  90. package/dist/{chunk-IOMLGJHG.js → chunk-RWZXVCGX.js} +5 -5
  91. package/dist/{chunk-PQ7EB5AD.js → chunk-S3BB34NI.js} +3 -3
  92. package/dist/{chunk-QX3K3INR.js → chunk-SBBZXDVJ.js} +2 -2
  93. package/dist/{chunk-G5I5ZT6O.js → chunk-SFDKLEIY.js} +2 -2
  94. package/dist/{chunk-ZLQ37WJX.js → chunk-SIGAGKNE.js} +8 -2
  95. package/dist/{chunk-ZLQ37WJX.js.map → chunk-SIGAGKNE.js.map} +1 -1
  96. package/dist/chunk-TPSLVZHS.js +102 -0
  97. package/dist/chunk-TPSLVZHS.js.map +1 -0
  98. package/dist/{chunk-TXTRHF3B.js → chunk-TVPDF6CZ.js} +2 -2
  99. package/dist/{chunk-A6WNTVA7.js → chunk-UP3XXGEN.js} +2 -2
  100. package/dist/{chunk-S2GR3T7W.js → chunk-UT7WE7RM.js} +2 -2
  101. package/dist/{chunk-BKVCTTEN.js → chunk-V3NKVYUD.js} +2 -2
  102. package/dist/{chunk-CGBE3N7T.js → chunk-VH76UQK3.js} +2 -2
  103. package/dist/{chunk-Z6EZCN6Z.js → chunk-VKQI47DJ.js} +8 -8
  104. package/dist/{chunk-KV7LFOPF.js → chunk-VSPBXHGR.js} +2 -2
  105. package/dist/{chunk-ZRUC7FD3.js → chunk-VXCTQ3B3.js} +2 -2
  106. package/dist/{chunk-QUNCLKHM.js → chunk-WIVBNNA3.js} +2 -2
  107. package/dist/{chunk-OWV6LKNZ.js → chunk-WWUFQ3AG.js} +2 -2
  108. package/dist/{chunk-DQEMWVMT.js → chunk-X7Y7WX73.js} +1 -1
  109. package/dist/{chunk-GQ6ZF4LD.js → chunk-XG4XXI66.js} +2 -2
  110. package/dist/{chunk-ISX7GVZE.js → chunk-YRULQW5J.js} +4 -4
  111. package/dist/{chunk-VV2MVHCJ.js → chunk-YX5F4V7H.js} +2 -2
  112. package/dist/{chunk-JRDL3FGM.js → chunk-YY5FM5M7.js} +3 -3
  113. package/dist/cli.js +70 -68
  114. package/dist/coding/export-okf-codegraph.js +9 -7
  115. package/dist/coding/export-okf-codegraph.js.map +1 -1
  116. package/dist/compounding/engine.js +10 -8
  117. package/dist/config-qmd.js +1 -1
  118. package/dist/config.js +11 -9
  119. package/dist/connectors/codex-materialize-runner.js +10 -8
  120. package/dist/connectors/index.js +10 -8
  121. package/dist/convergence-refresh.js +12 -10
  122. package/dist/corpus-watermark.js +12 -10
  123. package/dist/deep-recall-http-glue.js +4 -4
  124. package/dist/deep-recall.js +2 -2
  125. package/dist/entity-retrieval.js +10 -8
  126. package/dist/external-wiki-access.js +36 -34
  127. package/dist/extraction.js +14 -12
  128. package/dist/harmonic-retrieval.js +1 -1
  129. package/dist/index.js +118 -116
  130. package/dist/lcm/engine.js +3 -3
  131. package/dist/lcm/index.js +9 -9
  132. package/dist/location/index.js +12 -10
  133. package/dist/maintenance/memory-governance.js +10 -8
  134. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +10 -8
  135. package/dist/maintenance/rebuild-memory-projection.js +11 -9
  136. package/dist/memory-browse-operations.js +36 -34
  137. package/dist/memory-browse.js +7 -5
  138. package/dist/namespaces/migrate.js +11 -9
  139. package/dist/namespaces/search.js +8 -6
  140. package/dist/namespaces/storage.js +10 -8
  141. package/dist/operator-doctor-corpus.js +13 -11
  142. package/dist/operator-toolkit.js +20 -18
  143. package/dist/orchestration/maintenance.js +18 -16
  144. package/dist/orchestrator.js +98 -96
  145. package/dist/qmd-daemon-session.d.ts +45 -0
  146. package/dist/qmd-daemon-session.d.ts.map +1 -0
  147. package/dist/qmd-daemon-session.js +12 -0
  148. package/dist/qmd-daemon-session.js.map +1 -0
  149. package/dist/qmd-mcp-cancel.d.ts +21 -0
  150. package/dist/qmd-mcp-cancel.d.ts.map +1 -0
  151. package/dist/qmd-mcp-cancel.js +11 -0
  152. package/dist/qmd-mcp-cancel.js.map +1 -0
  153. package/dist/qmd-preflight.d.ts +3 -1
  154. package/dist/qmd-preflight.d.ts.map +1 -1
  155. package/dist/qmd-preflight.js +3 -1
  156. package/dist/qmd.d.ts +5 -29
  157. package/dist/qmd.d.ts.map +1 -1
  158. package/dist/qmd.js +6 -2
  159. package/dist/recall-navigation-operations.js +36 -34
  160. package/dist/recall-navigation.js +35 -33
  161. package/dist/recall-state-view-admission.js +7 -5
  162. package/dist/recall-why-service.js +7 -5
  163. package/dist/resume-bundles.js +12 -10
  164. package/dist/search/factory.js +7 -5
  165. package/dist/search/index.js +11 -9
  166. package/dist/semantic-consolidation.js +11 -9
  167. package/dist/semantic-rule-promotion.js +10 -8
  168. package/dist/semantic-rule-verifier.js +10 -8
  169. package/dist/source-agent-qualifier.js +13 -11
  170. package/dist/standup/build.js +10 -8
  171. package/dist/storage.js +9 -7
  172. package/dist/support-passport/index.js +38 -36
  173. package/dist/transfer/backup.js +2 -2
  174. package/dist/transfer/capsule-export.js +2 -2
  175. package/dist/transfer/capsule-import.js +2 -2
  176. package/dist/transfer/export-okf.js +10 -8
  177. package/dist/verified-recall.js +10 -8
  178. package/dist/who-knows-cli.js +11 -9
  179. package/dist/who-knows.js +10 -8
  180. package/package.json +2 -2
  181. package/src/config-qmd.ts +2 -2
  182. package/src/qmd-daemon-session.ts +369 -0
  183. package/src/qmd-mcp-cancel.test.ts +408 -0
  184. package/src/qmd-mcp-cancel.ts +130 -0
  185. package/src/qmd-preflight.ts +10 -1
  186. package/src/qmd-rank-compare.test.ts +100 -0
  187. package/src/qmd.test.ts +16 -1
  188. package/src/qmd.ts +18 -297
  189. package/dist/chunk-B3OFQP5Y.js.map +0 -1
  190. /package/dist/{capsule-crypto-YO5QJ6L3.js.map → capsule-crypto-7FJQINUR.js.map} +0 -0
  191. /package/dist/{chunk-JWFTPRYD.js.map → chunk-2EZB2DL5.js.map} +0 -0
  192. /package/dist/{chunk-BXLOS5AJ.js.map → chunk-2NLLXCJG.js.map} +0 -0
  193. /package/dist/{chunk-QKCGOECM.js.map → chunk-34G4U6HS.js.map} +0 -0
  194. /package/dist/{chunk-YI6XIFQV.js.map → chunk-34TSXVQS.js.map} +0 -0
  195. /package/dist/{chunk-7YQR6XHY.js.map → chunk-3I375S4J.js.map} +0 -0
  196. /package/dist/{chunk-XQWKB6PY.js.map → chunk-3UP6NP4C.js.map} +0 -0
  197. /package/dist/{chunk-OFGTRDWX.js.map → chunk-47I2EK6G.js.map} +0 -0
  198. /package/dist/{chunk-HWGFTTPS.js.map → chunk-5FLFPTDK.js.map} +0 -0
  199. /package/dist/{chunk-LHDSCWDK.js.map → chunk-7AUC2YSU.js.map} +0 -0
  200. /package/dist/{chunk-AU43D3IT.js.map → chunk-7DB7KYSR.js.map} +0 -0
  201. /package/dist/{chunk-VDX2J7OX.js.map → chunk-7LCGFUMB.js.map} +0 -0
  202. /package/dist/{chunk-CNBGAFDY.js.map → chunk-A7V7GZ7F.js.map} +0 -0
  203. /package/dist/{chunk-SWXPR5SE.js.map → chunk-B2UCJX76.js.map} +0 -0
  204. /package/dist/{chunk-KYUVFCT2.js.map → chunk-BCTDTVSR.js.map} +0 -0
  205. /package/dist/{chunk-6WRHNA4I.js.map → chunk-BKPV47BK.js.map} +0 -0
  206. /package/dist/{chunk-QAIVTLL2.js.map → chunk-BLHPADUX.js.map} +0 -0
  207. /package/dist/{chunk-PRNR47DI.js.map → chunk-BOT276JC.js.map} +0 -0
  208. /package/dist/{chunk-O43AAJFQ.js.map → chunk-CRZ7BU6R.js.map} +0 -0
  209. /package/dist/{chunk-2OFDC3AK.js.map → chunk-DDPPV3KA.js.map} +0 -0
  210. /package/dist/{chunk-VYIBRCVW.js.map → chunk-DHQUQ34W.js.map} +0 -0
  211. /package/dist/{chunk-7NBUE5VY.js.map → chunk-DPX3J2N4.js.map} +0 -0
  212. /package/dist/{chunk-EWWK65CI.js.map → chunk-DX3ZODO3.js.map} +0 -0
  213. /package/dist/{chunk-SFDBLCZV.js.map → chunk-DYZHVVJM.js.map} +0 -0
  214. /package/dist/{chunk-B454SHPU.js.map → chunk-E7FN5N5E.js.map} +0 -0
  215. /package/dist/{chunk-AWSP3WNM.js.map → chunk-EJJMDLVB.js.map} +0 -0
  216. /package/dist/{chunk-KFHEZJQZ.js.map → chunk-EPFNPPWH.js.map} +0 -0
  217. /package/dist/{chunk-VDVHIRCK.js.map → chunk-EUYNHJTK.js.map} +0 -0
  218. /package/dist/{chunk-T32YYUT2.js.map → chunk-FB6FQT4P.js.map} +0 -0
  219. /package/dist/{chunk-XTN54NML.js.map → chunk-G3T6YMBO.js.map} +0 -0
  220. /package/dist/{chunk-JC7QQ2DJ.js.map → chunk-GS6LTJFW.js.map} +0 -0
  221. /package/dist/{chunk-WR66CTVU.js.map → chunk-GYLDYYRA.js.map} +0 -0
  222. /package/dist/{chunk-PQKZLBCJ.js.map → chunk-GZRTH3WZ.js.map} +0 -0
  223. /package/dist/{chunk-STQC2FYQ.js.map → chunk-HNU5CZ7E.js.map} +0 -0
  224. /package/dist/{chunk-E4XLFYHV.js.map → chunk-HPEONBM3.js.map} +0 -0
  225. /package/dist/{chunk-EZ3F4YIN.js.map → chunk-JLUS56YZ.js.map} +0 -0
  226. /package/dist/{chunk-J3ZJBX7I.js.map → chunk-KM2HQZR3.js.map} +0 -0
  227. /package/dist/{chunk-2MMBJE53.js.map → chunk-LI3OM3NP.js.map} +0 -0
  228. /package/dist/{chunk-MZOQ26LH.js.map → chunk-LQGX5TCI.js.map} +0 -0
  229. /package/dist/{chunk-KMN2JE4D.js.map → chunk-LTDWZ2HC.js.map} +0 -0
  230. /package/dist/{chunk-T6RQNV7E.js.map → chunk-MJ737UIA.js.map} +0 -0
  231. /package/dist/{chunk-7X7A7KVN.js.map → chunk-NLYOOGZ7.js.map} +0 -0
  232. /package/dist/{chunk-PZ2QQULY.js.map → chunk-NVZRIHW5.js.map} +0 -0
  233. /package/dist/{chunk-NT2Q6AHC.js.map → chunk-PCO3P7WJ.js.map} +0 -0
  234. /package/dist/{chunk-VO2BNAA2.js.map → chunk-PXDEIJL5.js.map} +0 -0
  235. /package/dist/{chunk-LXJZUNLX.js.map → chunk-QHHWJVVW.js.map} +0 -0
  236. /package/dist/{chunk-XLWMNDQR.js.map → chunk-QJWZJ7HL.js.map} +0 -0
  237. /package/dist/{chunk-73R4HOOK.js.map → chunk-QPG72IPU.js.map} +0 -0
  238. /package/dist/{chunk-SIGDETMB.js.map → chunk-R4NGLTUS.js.map} +0 -0
  239. /package/dist/{chunk-TRN56SPQ.js.map → chunk-R6NHHKXE.js.map} +0 -0
  240. /package/dist/{chunk-ATFFWIKL.js.map → chunk-RGGXSN5A.js.map} +0 -0
  241. /package/dist/{chunk-IOMLGJHG.js.map → chunk-RWZXVCGX.js.map} +0 -0
  242. /package/dist/{chunk-PQ7EB5AD.js.map → chunk-S3BB34NI.js.map} +0 -0
  243. /package/dist/{chunk-QX3K3INR.js.map → chunk-SBBZXDVJ.js.map} +0 -0
  244. /package/dist/{chunk-G5I5ZT6O.js.map → chunk-SFDKLEIY.js.map} +0 -0
  245. /package/dist/{chunk-TXTRHF3B.js.map → chunk-TVPDF6CZ.js.map} +0 -0
  246. /package/dist/{chunk-A6WNTVA7.js.map → chunk-UP3XXGEN.js.map} +0 -0
  247. /package/dist/{chunk-S2GR3T7W.js.map → chunk-UT7WE7RM.js.map} +0 -0
  248. /package/dist/{chunk-BKVCTTEN.js.map → chunk-V3NKVYUD.js.map} +0 -0
  249. /package/dist/{chunk-CGBE3N7T.js.map → chunk-VH76UQK3.js.map} +0 -0
  250. /package/dist/{chunk-Z6EZCN6Z.js.map → chunk-VKQI47DJ.js.map} +0 -0
  251. /package/dist/{chunk-KV7LFOPF.js.map → chunk-VSPBXHGR.js.map} +0 -0
  252. /package/dist/{chunk-ZRUC7FD3.js.map → chunk-VXCTQ3B3.js.map} +0 -0
  253. /package/dist/{chunk-QUNCLKHM.js.map → chunk-WIVBNNA3.js.map} +0 -0
  254. /package/dist/{chunk-OWV6LKNZ.js.map → chunk-WWUFQ3AG.js.map} +0 -0
  255. /package/dist/{chunk-DQEMWVMT.js.map → chunk-X7Y7WX73.js.map} +0 -0
  256. /package/dist/{chunk-GQ6ZF4LD.js.map → chunk-XG4XXI66.js.map} +0 -0
  257. /package/dist/{chunk-ISX7GVZE.js.map → chunk-YRULQW5J.js.map} +0 -0
  258. /package/dist/{chunk-VV2MVHCJ.js.map → chunk-YX5F4V7H.js.map} +0 -0
  259. /package/dist/{chunk-JRDL3FGM.js.map → chunk-YY5FM5M7.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":[]}
@@ -3,7 +3,7 @@ import {
3
3
  isArtifactMemoryPath,
4
4
  isLocationDayPath,
5
5
  isMeetingRecordPath
6
- } from "./chunk-NT2Q6AHC.js";
6
+ } from "./chunk-PCO3P7WJ.js";
7
7
  import {
8
8
  isExternalWikiCollectionName
9
9
  } from "./chunk-JV3C2MNQ.js";
@@ -211,4 +211,4 @@ export {
211
211
  isGenericRecallExcludedPath,
212
212
  filterRecallCandidates
213
213
  };
214
- //# sourceMappingURL=chunk-JWFTPRYD.js.map
214
+ //# sourceMappingURL=chunk-2EZB2DL5.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-765K3SAT.js";
4
4
  import {
5
5
  encryptCapsuleFile
6
- } from "./chunk-DQEMWVMT.js";
6
+ } from "./chunk-X7Y7WX73.js";
7
7
  import {
8
8
  computeTransferOutputRel,
9
9
  isTransferPathExcluded
@@ -109,4 +109,4 @@ async function enforceRetention(outDirAbs, retentionDays) {
109
109
  export {
110
110
  backupMemoryDir
111
111
  };
112
- //# sourceMappingURL=chunk-BXLOS5AJ.js.map
112
+ //# sourceMappingURL=chunk-2NLLXCJG.js.map
@@ -10,7 +10,7 @@ import {
10
10
  } from "./chunk-WL7N5VGG.js";
11
11
  import {
12
12
  deriveSourceConnector
13
- } from "./chunk-7X7A7KVN.js";
13
+ } from "./chunk-NLYOOGZ7.js";
14
14
  import {
15
15
  resolvePipelineProcessingCapabilities
16
16
  } from "./chunk-2EMROIXS.js";
@@ -112,4 +112,4 @@ export {
112
112
  renderExtractionConversation,
113
113
  applyGroundingWithConnector
114
114
  };
115
- //# sourceMappingURL=chunk-QKCGOECM.js.map
115
+ //# sourceMappingURL=chunk-34G4U6HS.js.map
@@ -2,7 +2,7 @@ import {
2
2
  SupportPassportError,
3
3
  SupportPassportOwnerCreateGrantRequestSchema,
4
4
  getOperation
5
- } from "./chunk-6WRHNA4I.js";
5
+ } from "./chunk-BKPV47BK.js";
6
6
 
7
7
  // src/support-passport/access-http.ts
8
8
  var OWNER_ROOT = "/engram/v1/support-passport";
@@ -137,4 +137,4 @@ export {
137
137
  SUPPORT_PASSPORT_OWNER_HTTP_ROUTES,
138
138
  handleSupportPassportOwnerHttp
139
139
  };
140
- //# sourceMappingURL=chunk-YI6XIFQV.js.map
140
+ //# sourceMappingURL=chunk-34TSXVQS.js.map
@@ -7,22 +7,22 @@ import {
7
7
  syncWearableSource,
8
8
  wearableSourceLabel
9
9
  } from "./chunk-JDOBIFBK.js";
10
- import {
11
- CompressionGuidelineCoordinator
12
- } from "./chunk-VAOC6GHN.js";
13
10
  import {
14
11
  ActivityStore,
15
12
  MaintenanceScheduler
16
- } from "./chunk-2MMBJE53.js";
13
+ } from "./chunk-LI3OM3NP.js";
17
14
  import {
18
15
  runPeerProfileReasoner
19
16
  } from "./chunk-I74SUMNI.js";
20
17
  import {
21
18
  migrateFromEngram
22
19
  } from "./chunk-VZAKYDMJ.js";
20
+ import {
21
+ CompressionGuidelineCoordinator
22
+ } from "./chunk-VAOC6GHN.js";
23
23
  import {
24
24
  LcmEngine
25
- } from "./chunk-Z6EZCN6Z.js";
25
+ } from "./chunk-VKQI47DJ.js";
26
26
  import {
27
27
  chunkTranscriptEntries
28
28
  } from "./chunk-TECVW3JP.js";
@@ -32,18 +32,24 @@ import {
32
32
  import {
33
33
  CompoundingEngine,
34
34
  defaultTierMigrationCycleBudget
35
- } from "./chunk-KYUVFCT2.js";
35
+ } from "./chunk-BCTDTVSR.js";
36
36
  import {
37
37
  SharedContextManager
38
38
  } from "./chunk-77HNHT6S.js";
39
- import {
40
- cleanArchivedUserMessage
41
- } from "./chunk-47DU4SGJ.js";
42
39
  import {
43
40
  applyUtilityPromotionRuntimePolicy,
44
41
  applyUtilityRankingRuntimeDelta,
45
42
  loadUtilityRuntimeValues
46
43
  } from "./chunk-SWIKABKI.js";
44
+ import {
45
+ cleanArchivedUserMessage
46
+ } from "./chunk-47DU4SGJ.js";
47
+ import {
48
+ TierMigrationExecutor
49
+ } from "./chunk-YRFAYOFQ.js";
50
+ import {
51
+ decideTierTransition
52
+ } from "./chunk-GCBIXUPT.js";
47
53
  import {
48
54
  TmtBuilder
49
55
  } from "./chunk-ECZU5BJH.js";
@@ -56,12 +62,6 @@ import {
56
62
  import {
57
63
  CODEX_THREAD_KEY_PREFIX
58
64
  } from "./chunk-4EX5WZ4M.js";
59
- import {
60
- TierMigrationExecutor
61
- } from "./chunk-YRFAYOFQ.js";
62
- import {
63
- decideTierTransition
64
- } from "./chunk-GCBIXUPT.js";
65
65
  import {
66
66
  buildTargetedFactRecallSection,
67
67
  shouldRecallTargetedFactEvidence
@@ -102,6 +102,9 @@ import {
102
102
  import {
103
103
  applyRuntimeRetrievalPolicy
104
104
  } from "./chunk-5IZL4DCV.js";
105
+ import {
106
+ findUnresolvedEntityRefs
107
+ } from "./chunk-X7XN6YU4.js";
105
108
  import {
106
109
  RelevanceStore
107
110
  } from "./chunk-KATEWTQJ.js";
@@ -111,32 +114,29 @@ import {
111
114
  rerankLocalOrNoop
112
115
  } from "./chunk-LUDXM7MD.js";
113
116
  import {
114
- findUnresolvedEntityRefs
115
- } from "./chunk-X7XN6YU4.js";
117
+ StateViewAnchorTracker,
118
+ filterRecentScanMemories,
119
+ stateViewPacketActive
120
+ } from "./chunk-G2DF5MI7.js";
116
121
  import {
117
122
  indexStateViewAnnotatedResults,
118
123
  resolveRecallStateViewActive
119
- } from "./chunk-HWGFTTPS.js";
124
+ } from "./chunk-5FLFPTDK.js";
120
125
  import {
121
126
  applyRecallStateViews
122
127
  } from "./chunk-DBB5JPSL.js";
123
- import {
124
- StateViewAnchorTracker,
125
- filterRecentScanMemories,
126
- stateViewPacketActive
127
- } from "./chunk-G2DF5MI7.js";
128
128
  import {
129
129
  reorderRecallResultsWithMmr
130
130
  } from "./chunk-YDBIWGNI.js";
131
+ import {
132
+ applyReasoningTraceBoost
133
+ } from "./chunk-ZZTOURJI.js";
131
134
  import {
132
135
  compactRecallContextFromBuckets,
133
136
  decideRecallContextComposition,
134
137
  notifyContextComposition,
135
138
  recallFailureComposition
136
139
  } from "./chunk-HPWJ5B7D.js";
137
- import {
138
- applyReasoningTraceBoost
139
- } from "./chunk-ZZTOURJI.js";
140
140
  import {
141
141
  installPrioritizedEmbedding
142
142
  } from "./chunk-ROI7BK7H.js";
@@ -173,7 +173,7 @@ import {
173
173
  } from "./chunk-OH7QLI6W.js";
174
174
  import {
175
175
  ExtractionEngine
176
- } from "./chunk-B454SHPU.js";
176
+ } from "./chunk-E7FN5N5E.js";
177
177
  import {
178
178
  parseMemoryActionEligibilityContext
179
179
  } from "./chunk-JHU4EYDV.js";
@@ -204,7 +204,7 @@ import {
204
204
  buildEntityRecallSection,
205
205
  entityRecentTranscriptLookbackHours,
206
206
  readRecentEntityTranscriptEntries
207
- } from "./chunk-VYIBRCVW.js";
207
+ } from "./chunk-DHQUQ34W.js";
208
208
  import {
209
209
  planEpisodeWindowsWithFallback
210
210
  } from "./chunk-T3GIETKV.js";
@@ -219,7 +219,7 @@ import {
219
219
  } from "./chunk-4G2YCKLT.js";
220
220
  import {
221
221
  refreshConvergedNamespaces
222
- } from "./chunk-XQWKB6PY.js";
222
+ } from "./chunk-3UP6NP4C.js";
223
223
  import {
224
224
  builtInConnectorPackageSpecifier,
225
225
  ensureBuiltInWearableConnectors,
@@ -228,24 +228,24 @@ import {
228
228
  runTimelinePublishCli,
229
229
  screenCandidateFact,
230
230
  summarizeVaultPublish
231
- } from "./chunk-SFDBLCZV.js";
232
- import {
233
- normalizeReplaySessionKey
234
- } from "./chunk-AJVLDJU6.js";
231
+ } from "./chunk-DYZHVVJM.js";
235
232
  import {
236
233
  RoutingRulesStore
237
234
  } from "./chunk-TBUEE7XF.js";
235
+ import {
236
+ normalizeReplaySessionKey
237
+ } from "./chunk-AJVLDJU6.js";
238
238
  import {
239
239
  compareVerifiedEpisodeResults,
240
240
  searchVerifiedEpisodes
241
- } from "./chunk-SWXPR5SE.js";
241
+ } from "./chunk-B2UCJX76.js";
242
242
  import {
243
243
  ThreadingManager
244
244
  } from "./chunk-OJP3N7UK.js";
245
245
  import {
246
246
  compareVerifiedSemanticRuleResults,
247
247
  searchVerifiedSemanticRules
248
- } from "./chunk-2OFDC3AK.js";
248
+ } from "./chunk-DDPPV3KA.js";
249
249
  import {
250
250
  searchWorkProductLedgerEntries
251
251
  } from "./chunk-G7NYVKD6.js";
@@ -258,10 +258,10 @@ import {
258
258
  import {
259
259
  runNamespaceMaintenanceFanout,
260
260
  summarizeNamespaceMaintenanceHealth
261
- } from "./chunk-PZ2QQULY.js";
261
+ } from "./chunk-NVZRIHW5.js";
262
262
  import {
263
263
  planNamespaceMaintenance
264
- } from "./chunk-JRDL3FGM.js";
264
+ } from "./chunk-YY5FM5M7.js";
265
265
  import {
266
266
  isAboveImportanceThreshold,
267
267
  scoreImportance
@@ -290,7 +290,7 @@ import {
290
290
  materializeAfterSemanticConsolidation,
291
291
  parseConsolidationResponse,
292
292
  parseOperatorAwareConsolidationResponse
293
- } from "./chunk-OWV6LKNZ.js";
293
+ } from "./chunk-WWUFQ3AG.js";
294
294
  import {
295
295
  semanticChunkContent
296
296
  } from "./chunk-2GBFKHBZ.js";
@@ -299,7 +299,7 @@ import {
299
299
  } from "./chunk-6TBIWIAG.js";
300
300
  import {
301
301
  SmartBuffer
302
- } from "./chunk-GQ6ZF4LD.js";
302
+ } from "./chunk-XG4XXI66.js";
303
303
  import {
304
304
  buildRecallQueryPolicy
305
305
  } from "./chunk-C6WMSXCJ.js";
@@ -329,7 +329,7 @@ import {
329
329
  embeddingsFromCosineHits,
330
330
  normalizeConnectorScope,
331
331
  runSeedGraduationPass
332
- } from "./chunk-QAIVTLL2.js";
332
+ } from "./chunk-BLHPADUX.js";
333
333
  import {
334
334
  compileCorrectionRule,
335
335
  correctionsFilePath,
@@ -367,7 +367,7 @@ import {
367
367
  } from "./chunk-QW27DOHG.js";
368
368
  import {
369
369
  MeetingsInputError
370
- } from "./chunk-LHDSCWDK.js";
370
+ } from "./chunk-7AUC2YSU.js";
371
371
  import {
372
372
  WearablesInputError,
373
373
  describeErrorForOperator
@@ -385,7 +385,7 @@ import {
385
385
  } from "./chunk-MFZACYZ6.js";
386
386
  import {
387
387
  NamespaceCatalog
388
- } from "./chunk-CNBGAFDY.js";
388
+ } from "./chunk-A7V7GZ7F.js";
389
389
  import {
390
390
  RecallResultFormatter,
391
391
  SessionContextCoordinator,
@@ -394,17 +394,13 @@ import {
394
394
  detectPassiveCorrections,
395
395
  renderSessionExperiencePreview,
396
396
  scoreSessionExperienceForPrompt
397
- } from "./chunk-6WRHNA4I.js";
397
+ } from "./chunk-BKPV47BK.js";
398
398
  import {
399
399
  importCapsule
400
- } from "./chunk-IOMLGJHG.js";
400
+ } from "./chunk-RWZXVCGX.js";
401
401
  import {
402
402
  isCodingGraphInstalled
403
403
  } from "./chunk-VQ7B2Q6M.js";
404
- import {
405
- listTrustZoneRecords,
406
- searchTrustZoneRecords
407
- } from "./chunk-ROBHL3GL.js";
408
404
  import {
409
405
  applyTrustScoreStage,
410
406
  buildTrustSignalsForRerank,
@@ -412,6 +408,10 @@ import {
412
408
  trustResultFor,
413
409
  trustResultKey
414
410
  } from "./chunk-GNVZQ5JN.js";
411
+ import {
412
+ listTrustZoneRecords,
413
+ searchTrustZoneRecords
414
+ } from "./chunk-ROBHL3GL.js";
415
415
  import {
416
416
  HourlySummarizer
417
417
  } from "./chunk-U46P4UAR.js";
@@ -434,10 +434,10 @@ import {
434
434
  isTopLevelArchivePath,
435
435
  journalPath,
436
436
  writeJournalFile
437
- } from "./chunk-JWFTPRYD.js";
437
+ } from "./chunk-2EZB2DL5.js";
438
438
  import {
439
439
  searchHarmonicRetrieval
440
- } from "./chunk-PQKZLBCJ.js";
440
+ } from "./chunk-GZRTH3WZ.js";
441
441
  import {
442
442
  ProfilingCollector
443
443
  } from "./chunk-BLVHDY2U.js";
@@ -466,7 +466,7 @@ import {
466
466
  } from "./chunk-BMWN7B3Y.js";
467
467
  import {
468
468
  NamespaceStorageRouter
469
- } from "./chunk-KMN2JE4D.js";
469
+ } from "./chunk-LTDWZ2HC.js";
470
470
  import {
471
471
  GraphIndex
472
472
  } from "./chunk-2U3R3DDH.js";
@@ -475,12 +475,12 @@ import {
475
475
  } from "./chunk-GKCXTSFF.js";
476
476
  import {
477
477
  buildChainFollowupGenerator
478
- } from "./chunk-ZRUC7FD3.js";
478
+ } from "./chunk-VXCTQ3B3.js";
479
479
  import {
480
480
  ExtractionDeadlineError,
481
481
  ExtractionRunCoordinator,
482
482
  classifyExtractionOrigin
483
- } from "./chunk-7X7A7KVN.js";
483
+ } from "./chunk-NLYOOGZ7.js";
484
484
  import {
485
485
  ARTIFACT_STATUS_CACHE_TTL_MS,
486
486
  BulkImportBatchPartialFailureError,
@@ -520,7 +520,7 @@ import {
520
520
  throwIfRecallAborted,
521
521
  tokenizeRecallQuery,
522
522
  utcDateKeysForLocalDay
523
- } from "./chunk-NT2Q6AHC.js";
523
+ } from "./chunk-PCO3P7WJ.js";
524
524
  import {
525
525
  inferIntentFromText,
526
526
  intentCompatibilityScore,
@@ -570,7 +570,7 @@ import {
570
570
  reconstructFusionInputs,
571
571
  selfDeps,
572
572
  serializeFusionDay
573
- } from "./chunk-E4XLFYHV.js";
573
+ } from "./chunk-HPEONBM3.js";
574
574
  import {
575
575
  bodyIsEscaped,
576
576
  decodeTranscriptBody,
@@ -587,12 +587,12 @@ import {
587
587
  import {
588
588
  NamespaceSearchRouter,
589
589
  namespaceCollectionName
590
- } from "./chunk-BKVCTTEN.js";
590
+ } from "./chunk-V3NKVYUD.js";
591
591
  import {
592
592
  createConversationIndexRuntime,
593
593
  createSearchBackend,
594
594
  isSearchBackendEnabled
595
- } from "./chunk-EZ3F4YIN.js";
595
+ } from "./chunk-JLUS56YZ.js";
596
596
  import {
597
597
  NoopSearchBackend
598
598
  } from "./chunk-CYEPCZN5.js";
@@ -31096,4 +31096,4 @@ export {
31096
31096
  qmdStartupCollectionChecksWithTimeout,
31097
31097
  Orchestrator
31098
31098
  };
31099
- //# sourceMappingURL=chunk-7YQR6XHY.js.map
31099
+ //# sourceMappingURL=chunk-3I375S4J.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  rebuildMemoryProjection
3
- } from "./chunk-XLWMNDQR.js";
3
+ } from "./chunk-QJWZJ7HL.js";
4
4
 
5
5
  // src/convergence-refresh.ts
6
6
  async function refreshConvergedNamespaces(namespaces, namespaceSearchRouter, getStorage, searchEnabled) {
@@ -32,4 +32,4 @@ async function refreshConvergedNamespaces(namespaces, namespaceSearchRouter, get
32
32
  export {
33
33
  refreshConvergedNamespaces
34
34
  };
35
- //# sourceMappingURL=chunk-XQWKB6PY.js.map
35
+ //# sourceMappingURL=chunk-3UP6NP4C.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  isValidCapsuleSince
3
- } from "./chunk-VDX2J7OX.js";
3
+ } from "./chunk-7LCGFUMB.js";
4
4
  import {
5
5
  CAPSULE_ID_PATTERN
6
6
  } from "./chunk-WEHSQBFR.js";
@@ -563,4 +563,4 @@ export {
563
563
  actionConfidenceRequestSchema,
564
564
  validateRequest
565
565
  };
566
- //# sourceMappingURL=chunk-OFGTRDWX.js.map
566
+ //# sourceMappingURL=chunk-47I2EK6G.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-DBB5JPSL.js";
4
4
  import {
5
5
  isGenericRecallExcludedPath
6
- } from "./chunk-JWFTPRYD.js";
6
+ } from "./chunk-2EZB2DL5.js";
7
7
  import {
8
8
  isChangeOrientedQuery
9
9
  } from "./chunk-EH3HNCAM.js";
@@ -69,4 +69,4 @@ export {
69
69
  filterRecentScanMemoriesForStateView,
70
70
  indexStateViewAnnotatedResults
71
71
  };
72
- //# sourceMappingURL=chunk-HWGFTTPS.js.map
72
+ //# sourceMappingURL=chunk-5FLFPTDK.js.map
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-TB6CBZ5V.js";
7
7
  import {
8
8
  AdapterRegistry
9
- } from "./chunk-XTN54NML.js";
9
+ } from "./chunk-G3T6YMBO.js";
10
10
  import {
11
11
  maybeRespondRecallNavigation
12
12
  } from "./chunk-ZSEFGDCI.js";
@@ -18,13 +18,13 @@ import {
18
18
  } from "./chunk-3HSRWJTC.js";
19
19
  import {
20
20
  respondDeepRecall
21
- } from "./chunk-ATFFWIKL.js";
21
+ } from "./chunk-RGGXSN5A.js";
22
22
  import {
23
23
  handleSupportPassportOwnerHttp
24
- } from "./chunk-YI6XIFQV.js";
24
+ } from "./chunk-34TSXVQS.js";
25
25
  import {
26
26
  buildSupportPassportPublicRequestHandler
27
- } from "./chunk-VDVHIRCK.js";
27
+ } from "./chunk-EUYNHJTK.js";
28
28
  import {
29
29
  handleMcpGetSse
30
30
  } from "./chunk-SRT6SHVZ.js";
@@ -37,10 +37,10 @@ import {
37
37
  processChatMessage,
38
38
  sessionBelongsToPrincipal,
39
39
  subscribeChatTranscript
40
- } from "./chunk-AU43D3IT.js";
40
+ } from "./chunk-7DB7KYSR.js";
41
41
  import {
42
42
  RelayMissionStoreError
43
- } from "./chunk-STQC2FYQ.js";
43
+ } from "./chunk-HNU5CZ7E.js";
44
44
  import {
45
45
  executeResolution,
46
46
  isValidResolutionVerb
@@ -61,10 +61,10 @@ import {
61
61
  optionalNamespaceKindQueryParam,
62
62
  optionalQueryString,
63
63
  positiveIntQueryParam
64
- } from "./chunk-PRNR47DI.js";
64
+ } from "./chunk-BOT276JC.js";
65
65
  import {
66
66
  respondBriefingHttp
67
- } from "./chunk-7NBUE5VY.js";
67
+ } from "./chunk-DPX3J2N4.js";
68
68
  import {
69
69
  maybeHandleLifecycleFlush
70
70
  } from "./chunk-2BPPGNAQ.js";
@@ -75,14 +75,14 @@ import {
75
75
  authorizationProbeNamespaces,
76
76
  authorizationProbeRequiresPrincipalNamespace,
77
77
  probeOperationAuthorization
78
- } from "./chunk-CGBE3N7T.js";
78
+ } from "./chunk-VH76UQK3.js";
79
79
  import {
80
80
  getOperation,
81
81
  resolveQueryNamespaceWritablePreflight
82
- } from "./chunk-6WRHNA4I.js";
82
+ } from "./chunk-BKPV47BK.js";
83
83
  import {
84
84
  handleWhoKnowsHttpQuery
85
- } from "./chunk-T6RQNV7E.js";
85
+ } from "./chunk-MJ737UIA.js";
86
86
  import {
87
87
  isTrustZoneName
88
88
  } from "./chunk-ROBHL3GL.js";
@@ -94,7 +94,7 @@ import {
94
94
  } from "./chunk-QLK3SL7Q.js";
95
95
  import {
96
96
  validateRequest
97
- } from "./chunk-OFGTRDWX.js";
97
+ } from "./chunk-47I2EK6G.js";
98
98
  import {
99
99
  peerManifestRevision
100
100
  } from "./chunk-N7QV3CMX.js";
@@ -3564,4 +3564,4 @@ export {
3564
3564
  resolveDefaultAdminConsolePublicDir,
3565
3565
  EngramAccessHttpServer
3566
3566
  };
3567
- //# sourceMappingURL=chunk-LHDSCWDK.js.map
3567
+ //# sourceMappingURL=chunk-7AUC2YSU.js.map