@remnic/core 9.69.39 → 9.69.41

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 (774) hide show
  1. package/dist/access-admin-ops-surface.d.ts +16 -14
  2. package/dist/access-admin-ops-surface.js +75 -74
  3. package/dist/access-audit.js +2 -2
  4. package/dist/access-authorization-probe.d.ts +16 -14
  5. package/dist/access-authorization-probe.js +76 -75
  6. package/dist/access-boundary.d.ts +16 -14
  7. package/dist/access-boundary.js +75 -74
  8. package/dist/access-cli.js +173 -170
  9. package/dist/access-cli.js.map +1 -1
  10. package/dist/access-coding-context-resolution.d.ts +1 -1
  11. package/dist/access-extraction-force-flush.d.ts +16 -14
  12. package/dist/access-extraction-force-flush.js +75 -74
  13. package/dist/access-health-types.d.ts +1 -1
  14. package/dist/access-http-briefing.d.ts +16 -14
  15. package/dist/access-http-briefing.js +76 -75
  16. package/dist/access-http-lcm-compaction.d.ts +16 -14
  17. package/dist/access-http-lifecycle-flush.d.ts +16 -14
  18. package/dist/access-http-offline-stream.d.ts +16 -14
  19. package/dist/access-http-query.d.ts +2 -2
  20. package/dist/access-http-query.js +77 -76
  21. package/dist/access-http.d.ts +17 -15
  22. package/dist/access-http.js +95 -92
  23. package/dist/access-identity-continuity-surface.d.ts +13 -12
  24. package/dist/access-identity-continuity-surface.js +75 -74
  25. package/dist/access-lcm-surface.d.ts +16 -14
  26. package/dist/access-lcm-surface.js +75 -74
  27. package/dist/access-mcp-shared-context-tools.d.ts +156 -0
  28. package/dist/access-mcp-shared-context-tools.js +8 -0
  29. package/dist/access-mcp.d.ts +16 -14
  30. package/dist/access-mcp.js +86 -83
  31. package/dist/access-memory-search-fanout.d.ts +2 -2
  32. package/dist/{access-namespace-preflight-DY4z6L5X.d.ts → access-namespace-preflight-DWsMc9Dh.d.ts} +1 -1
  33. package/dist/access-namespace-preflight.d.ts +3 -3
  34. package/dist/access-namespace-preflight.js +75 -74
  35. package/dist/access-observe-transcript.d.ts +13 -12
  36. package/dist/access-observe-write-category.d.ts +1 -1
  37. package/dist/access-observe-write-category.js +4 -4
  38. package/dist/access-observe-write-surface.d.ts +16 -14
  39. package/dist/access-observe-write-surface.js +75 -74
  40. package/dist/access-offline-manifest.d.ts +37 -13
  41. package/dist/access-offline-manifest.js +15 -11
  42. package/dist/access-operations-batch.js +79 -77
  43. package/dist/access-operations.d.ts +16 -14
  44. package/dist/access-operations.js +84 -82
  45. package/dist/access-recall-concurrency.d.ts +16 -14
  46. package/dist/access-recall-concurrency.js +75 -74
  47. package/dist/access-recall-response.d.ts +16 -14
  48. package/dist/access-recall-response.js +75 -74
  49. package/dist/access-recall-surface.d.ts +16 -14
  50. package/dist/access-recall-surface.js +75 -74
  51. package/dist/access-schema.d.ts +5 -3
  52. package/dist/access-schema.js +3 -3
  53. package/dist/{access-service-MY4bsr_Q.d.ts → access-service-Cisy5YDq.d.ts} +14 -9
  54. package/dist/access-service-helpers.d.ts +16 -14
  55. package/dist/access-service.d.ts +16 -14
  56. package/dist/access-service.js +75 -74
  57. package/dist/access-surface-catalog.d.ts +16 -14
  58. package/dist/access-surface-catalog.js +77 -76
  59. package/dist/access-surface-catalog.js.map +1 -1
  60. package/dist/access-wearables-meetings-surface.d.ts +6 -5
  61. package/dist/action-confidence.d.ts +1 -1
  62. package/dist/active-memory-bridge.d.ts +1 -1
  63. package/dist/active-memory-bridge.js +3 -3
  64. package/dist/active-recall.d.ts +1 -1
  65. package/dist/active-recall.js +10 -9
  66. package/dist/active-recall.js.map +1 -1
  67. package/dist/activity/digest.d.ts +1 -1
  68. package/dist/ambient-provenance.d.ts +1 -1
  69. package/dist/artifact-search.d.ts +1 -1
  70. package/dist/{auto-sync-RP4C6ZPF.js → auto-sync-7PGUFY7U.js} +7 -7
  71. package/dist/background-generation-config.d.ts +1 -1
  72. package/dist/background-generation-config.js +3 -1
  73. package/dist/background-generation.d.ts +1 -1
  74. package/dist/behavior-learner.d.ts +1 -1
  75. package/dist/behavior-signals.d.ts +1 -1
  76. package/dist/bootstrap.d.ts +13 -12
  77. package/dist/briefing-window.d.ts +2 -2
  78. package/dist/briefing.d.ts +2 -2
  79. package/dist/briefing.js +23 -23
  80. package/dist/buffer-surprise-report.d.ts +1 -1
  81. package/dist/buffer-turn-helpers.d.ts +1 -1
  82. package/dist/buffer.d.ts +2 -2
  83. package/dist/buffer.js +7 -7
  84. package/dist/bulk-import/index.d.ts +3 -3
  85. package/dist/calibration.d.ts +3 -2
  86. package/dist/calibration.js +2 -2
  87. package/dist/capabilities.d.ts +1 -1
  88. package/dist/{capsule-crypto-7FJQINUR.js → capsule-crypto-YO5QJ6L3.js} +2 -2
  89. package/dist/{capsule-merge-IPG4IOFP.js → capsule-merge-3MNURAQ3.js} +2 -2
  90. package/dist/{catalog-CW87xGx8.d.ts → catalog-wcX1QhtQ.d.ts} +1 -1
  91. package/dist/causal-behavior.d.ts +1 -1
  92. package/dist/causal-consolidation.d.ts +1 -1
  93. package/dist/causal-consolidation.js +29 -28
  94. package/dist/causal-consolidation.js.map +1 -1
  95. package/dist/causal-trajectory-graph.d.ts +1 -1
  96. package/dist/{chunk-YFTNZMGR.js → chunk-27NO2KVB.js} +31 -8
  97. package/dist/chunk-27NO2KVB.js.map +1 -0
  98. package/dist/{chunk-M6RORUO5.js → chunk-2EYZ32LH.js} +24 -2
  99. package/dist/{chunk-M6RORUO5.js.map → chunk-2EYZ32LH.js.map} +1 -1
  100. package/dist/{chunk-XH3HGI2N.js → chunk-2HQPE2NM.js} +2 -2
  101. package/dist/{chunk-3EKVN2OP.js → chunk-2ZG2LLZT.js} +2 -2
  102. package/dist/{chunk-6EHM2AV7.js → chunk-3BLHPQHT.js} +5 -5
  103. package/dist/{chunk-YKREX63Z.js → chunk-3D75XIYO.js} +5 -3
  104. package/dist/chunk-3D75XIYO.js.map +1 -0
  105. package/dist/{chunk-J272ODKJ.js → chunk-42DJ235G.js} +2 -2
  106. package/dist/{chunk-F4EHXVP7.js → chunk-46RII65S.js} +2 -2
  107. package/dist/{chunk-YUW66UAH.js → chunk-4AX5OYKC.js} +2 -2
  108. package/dist/{chunk-AECJY3GJ.js → chunk-4IGOLIWM.js} +2 -2
  109. package/dist/{chunk-2ZTDRNCS.js → chunk-54QPOE45.js} +2 -2
  110. package/dist/{chunk-O4M4BDIJ.js → chunk-563X6JJX.js} +2 -2
  111. package/dist/{chunk-IL6ODG6M.js → chunk-5EQT62HH.js} +2 -2
  112. package/dist/{chunk-JKKII6GX.js → chunk-6MQMYXSQ.js} +2 -2
  113. package/dist/{chunk-TVVEYCNW.js → chunk-7K5Q6COX.js} +4 -4
  114. package/dist/{chunk-BV4ZKIZH.js → chunk-7ZLC4DTZ.js} +5 -4
  115. package/dist/{chunk-WBM2MVBK.js → chunk-A4OIJYCV.js} +2 -2
  116. package/dist/{chunk-RLJHJQUY.js → chunk-AFJHNHAM.js} +8 -8
  117. package/dist/{chunk-6YAIN5XJ.js → chunk-AIVRD66I.js} +44 -6
  118. package/dist/chunk-AIVRD66I.js.map +1 -0
  119. package/dist/{chunk-OEDW4ER7.js → chunk-AJBWVDRV.js} +2 -1
  120. package/dist/chunk-AJBWVDRV.js.map +1 -0
  121. package/dist/{chunk-4RZLTZVM.js → chunk-AKABVXFS.js} +2 -2
  122. package/dist/{chunk-M6HBPLBA.js → chunk-AUSRUOMQ.js} +2 -2
  123. package/dist/{chunk-QHT7MOUF.js → chunk-BTPCP535.js} +25 -14
  124. package/dist/chunk-BTPCP535.js.map +1 -0
  125. package/dist/{chunk-2NLLXCJG.js → chunk-BXLOS5AJ.js} +2 -2
  126. package/dist/{chunk-Q7CLGFA7.js → chunk-C3G6MW4W.js} +3 -3
  127. package/dist/{chunk-O76F5QPP.js → chunk-D6PY63OM.js} +2 -2
  128. package/dist/{chunk-BD7JTBYP.js → chunk-D7MAYFQP.js} +2 -2
  129. package/dist/{chunk-LMLGBG6H.js → chunk-DBB5JPSL.js} +2 -2
  130. package/dist/{chunk-TSP5WH72.js → chunk-DIXZQTGY.js} +2 -2
  131. package/dist/{chunk-P4ZAEYKG.js → chunk-DM5CU5J7.js} +7 -4
  132. package/dist/chunk-DM5CU5J7.js.map +1 -0
  133. package/dist/{chunk-X7Y7WX73.js → chunk-DQEMWVMT.js} +1 -1
  134. package/dist/{chunk-UHRZ324M.js → chunk-E3I3NDUP.js} +4 -4
  135. package/dist/{chunk-AENM6GKU.js → chunk-E4LMQTST.js} +2 -2
  136. package/dist/{chunk-YDVAM7S4.js → chunk-EH3HNCAM.js} +13 -8
  137. package/dist/chunk-EH3HNCAM.js.map +1 -0
  138. package/dist/{chunk-MUTVRKKY.js → chunk-EMSYMYXO.js} +14 -14
  139. package/dist/{chunk-YNDLCWXS.js → chunk-EZ25VE3G.js} +4 -4
  140. package/dist/{chunk-FXHOZGSE.js → chunk-F5H6YG5P.js} +2 -2
  141. package/dist/{chunk-TRLOFIQC.js → chunk-FGFC2EFR.js} +14 -13
  142. package/dist/chunk-FGFC2EFR.js.map +1 -0
  143. package/dist/{chunk-TNSCIPBQ.js → chunk-G6NQ3L4T.js} +2 -2
  144. package/dist/{chunk-ZMWSYUUL.js → chunk-GCBIXUPT.js} +2 -2
  145. package/dist/{chunk-EYKIDK33.js → chunk-GMH5QPUU.js} +22 -22
  146. package/dist/chunk-GMH5QPUU.js.map +1 -0
  147. package/dist/{chunk-4BCHFSC7.js → chunk-GWNSKQDA.js} +3 -3
  148. package/dist/{chunk-JDX2OA4R.js → chunk-HNHIHXSD.js} +2 -2
  149. package/dist/{chunk-GG5FHZJJ.js → chunk-I33QYUAF.js} +6 -6
  150. package/dist/{chunk-LPYYY4AP.js → chunk-I46BYY7U.js} +653 -328
  151. package/dist/chunk-I46BYY7U.js.map +1 -0
  152. package/dist/{chunk-CZTPU65V.js → chunk-ICN37XHG.js} +74 -27
  153. package/dist/chunk-ICN37XHG.js.map +1 -0
  154. package/dist/chunk-IFBSZGW3.js +42 -0
  155. package/dist/chunk-IFBSZGW3.js.map +1 -0
  156. package/dist/{chunk-AAZEKXUP.js → chunk-IYIPXAIJ.js} +2 -2
  157. package/dist/{chunk-ACY4ZPF7.js → chunk-J2MGTGKC.js} +10 -5
  158. package/dist/chunk-J2MGTGKC.js.map +1 -0
  159. package/dist/chunk-JATHBCAV.js +94 -0
  160. package/dist/chunk-JATHBCAV.js.map +1 -0
  161. package/dist/{chunk-5U7K4W6K.js → chunk-JDOBQPJY.js} +3 -3
  162. package/dist/{chunk-TG3FAM2S.js → chunk-JL4TQYM5.js} +48 -1
  163. package/dist/{chunk-TG3FAM2S.js.map → chunk-JL4TQYM5.js.map} +1 -1
  164. package/dist/{chunk-UZZ7SQT3.js → chunk-JMWUPUE6.js} +2 -2
  165. package/dist/{chunk-ENBPQEVU.js → chunk-JSD7Q7LD.js} +2 -2
  166. package/dist/{chunk-QTQ6XKGT.js → chunk-K5D2XVNN.js} +4 -4
  167. package/dist/chunk-K5D2XVNN.js.map +1 -0
  168. package/dist/{chunk-3CBI2ZSA.js → chunk-KG2OOAFF.js} +20 -12
  169. package/dist/chunk-KG2OOAFF.js.map +1 -0
  170. package/dist/{chunk-Q432REND.js → chunk-KJLLPG26.js} +2 -2
  171. package/dist/{chunk-JTQR6L2N.js → chunk-KLUC2GSG.js} +6 -6
  172. package/dist/{chunk-OB3XMWX5.js → chunk-KVO2BTA4.js} +2 -2
  173. package/dist/{chunk-PCOVEDPK.js → chunk-KZJM7R4F.js} +3 -3
  174. package/dist/{chunk-X4TD4O2F.js → chunk-LE2KZ72G.js} +3 -3
  175. package/dist/{chunk-HIP6DKJJ.js → chunk-LQVXSRAJ.js} +2 -2
  176. package/dist/{chunk-A7GQBJP5.js → chunk-LVFI5LG7.js} +7 -7
  177. package/dist/{chunk-FWWWUPOE.js → chunk-MCMS4VUK.js} +25 -15
  178. package/dist/chunk-MCMS4VUK.js.map +1 -0
  179. package/dist/{chunk-5SPCMAUC.js → chunk-N6XTC56E.js} +13 -81
  180. package/dist/chunk-N6XTC56E.js.map +1 -0
  181. package/dist/{chunk-VBSNUH4J.js → chunk-ND7MAIJC.js} +2 -2
  182. package/dist/{chunk-TNZNSMVJ.js → chunk-NYWCFC3K.js} +301 -348
  183. package/dist/chunk-NYWCFC3K.js.map +1 -0
  184. package/dist/{chunk-54NX5EG4.js → chunk-P66QH6R6.js} +2 -2
  185. package/dist/{chunk-62D2PAAM.js → chunk-PAAJWQH5.js} +4 -4
  186. package/dist/{chunk-TA4C3XB7.js → chunk-PFKIOYJH.js} +2 -2
  187. package/dist/{chunk-WIWLX65T.js → chunk-PGGPRF6J.js} +2 -2
  188. package/dist/{chunk-V6EGNVUT.js → chunk-PIWFNPQT.js} +4 -4
  189. package/dist/{chunk-BLDBT6HZ.js → chunk-PJRKLB4Z.js} +18 -2
  190. package/dist/chunk-PJRKLB4Z.js.map +1 -0
  191. package/dist/{chunk-4JVQRFZD.js → chunk-PLJ2MQFT.js} +11 -11
  192. package/dist/{chunk-4RX5O34R.js → chunk-PQ42DJNG.js} +2 -2
  193. package/dist/{chunk-37CAEC7E.js → chunk-PWPIERBM.js} +4 -4
  194. package/dist/{chunk-ZEGL7YCC.js → chunk-Q62GA5U2.js} +2 -2
  195. package/dist/{chunk-CC37E3QM.js → chunk-QKCXRS5A.js} +16 -1
  196. package/dist/chunk-QKCXRS5A.js.map +1 -0
  197. package/dist/{chunk-WKDFJXW5.js → chunk-QM2SPLKQ.js} +1 -1
  198. package/dist/chunk-QM2SPLKQ.js.map +1 -0
  199. package/dist/{chunk-GAS7KYC7.js → chunk-RQQO3ORQ.js} +2 -2
  200. package/dist/{chunk-UZEHHXYC.js → chunk-S4MJTIPG.js} +85 -81
  201. package/dist/chunk-S4MJTIPG.js.map +1 -0
  202. package/dist/chunk-SK7D34OL.js +68 -0
  203. package/dist/chunk-SK7D34OL.js.map +1 -0
  204. package/dist/{chunk-LQNRVPTV.js → chunk-TRTLWUDD.js} +164 -130
  205. package/dist/chunk-TRTLWUDD.js.map +1 -0
  206. package/dist/{chunk-JXN77SGO.js → chunk-U2VDCFXW.js} +1 -1
  207. package/dist/chunk-U2VDCFXW.js.map +1 -0
  208. package/dist/{chunk-CWTCMZGE.js → chunk-UHSOPTNB.js} +132 -6
  209. package/dist/chunk-UHSOPTNB.js.map +1 -0
  210. package/dist/{chunk-3NPNBVFR.js → chunk-UZGHKD3T.js} +2 -2
  211. package/dist/{chunk-IQEJIOEU.js → chunk-V2EXYQEQ.js} +20 -12
  212. package/dist/chunk-V2EXYQEQ.js.map +1 -0
  213. package/dist/{chunk-OPBFP4TF.js → chunk-V2TOGJPM.js} +46 -13
  214. package/dist/chunk-V2TOGJPM.js.map +1 -0
  215. package/dist/{chunk-VJIE4D2I.js → chunk-V62YYBBY.js} +4 -4
  216. package/dist/{chunk-KQAFEZQX.js → chunk-VDX2J7OX.js} +2 -2
  217. package/dist/{chunk-6H2G7RFT.js → chunk-VNQRRUNS.js} +11 -10
  218. package/dist/chunk-VNQRRUNS.js.map +1 -0
  219. package/dist/{chunk-6AGWBKQU.js → chunk-VSN2DMQK.js} +2 -2
  220. package/dist/{chunk-ZHXSOMYH.js → chunk-VVX5PZFS.js} +2 -2
  221. package/dist/{chunk-GI4ZBWPQ.js → chunk-W7UV2ZCA.js} +3 -3
  222. package/dist/{chunk-GMIQV6DD.js → chunk-WBQ4ONQJ.js} +2 -2
  223. package/dist/{chunk-FNHLI2RE.js → chunk-WFMQN7JE.js} +3 -3
  224. package/dist/{chunk-MVAQ2WM3.js → chunk-WGZHSQDV.js} +9 -5
  225. package/dist/chunk-WGZHSQDV.js.map +1 -0
  226. package/dist/{chunk-IYKZJVL5.js → chunk-WN2OXGGH.js} +1 -1
  227. package/dist/chunk-WN2OXGGH.js.map +1 -0
  228. package/dist/{chunk-ZBW7A667.js → chunk-WPGA4RYI.js} +2 -2
  229. package/dist/{chunk-YQNNHLCG.js → chunk-WPGR3RW4.js} +2 -2
  230. package/dist/{chunk-SV4Z2S67.js → chunk-WUUGE7QC.js} +54 -21
  231. package/dist/chunk-WUUGE7QC.js.map +1 -0
  232. package/dist/{chunk-NXGSONWM.js → chunk-WZIO3TW6.js} +2 -2
  233. package/dist/{chunk-ZZUVBZL2.js → chunk-X2QPKLPL.js} +2 -2
  234. package/dist/{chunk-5HYUUFMQ.js → chunk-XCPNH2MG.js} +259 -10
  235. package/dist/chunk-XCPNH2MG.js.map +1 -0
  236. package/dist/{chunk-VSL63CFJ.js → chunk-XRS65T4O.js} +9 -9
  237. package/dist/{chunk-5N4MZLEH.js → chunk-YFXAWGMR.js} +2 -2
  238. package/dist/{chunk-KQW3YGEN.js → chunk-YR5QT4SR.js} +32 -9
  239. package/dist/chunk-YR5QT4SR.js.map +1 -0
  240. package/dist/{chunk-CARRTDKC.js → chunk-Z22M4JCY.js} +4 -3
  241. package/dist/chunk-Z22M4JCY.js.map +1 -0
  242. package/dist/{chunk-D545Z7UH.js → chunk-Z535ADTC.js} +3 -3
  243. package/dist/{chunk-B36GUU6T.js → chunk-Z7NBT6AK.js} +38 -5
  244. package/dist/chunk-Z7NBT6AK.js.map +1 -0
  245. package/dist/{chunk-5YCNDC3C.js → chunk-ZX6NNFSY.js} +3 -3
  246. package/dist/{chunk-3N3PBBEH.js → chunk-ZYSOT6HD.js} +2 -2
  247. package/dist/{chunk-MCRVQ5YQ.js → chunk-ZZEIL3MI.js} +2 -2
  248. package/dist/{cli-DGq0MNpO.d.ts → cli-CUlMlS2N.d.ts} +5 -5
  249. package/dist/cli.d.ts +18 -16
  250. package/dist/cli.js +129 -126
  251. package/dist/coding/export-okf-codegraph.d.ts +1 -1
  252. package/dist/coding/export-okf-codegraph.js +22 -22
  253. package/dist/coding/pre-action-gate.d.ts +1 -1
  254. package/dist/compounding/engine.d.ts +2 -2
  255. package/dist/compounding/engine.js +25 -25
  256. package/dist/compounding/preference-consolidator.d.ts +1 -1
  257. package/dist/compression-optimizer.d.ts +1 -1
  258. package/dist/config.d.ts +1 -1
  259. package/dist/config.js +10 -9
  260. package/dist/connectors/codex-materialize-runner.d.ts +1 -1
  261. package/dist/connectors/codex-materialize-runner.js +25 -25
  262. package/dist/connectors/codex-materialize.d.ts +1 -1
  263. package/dist/connectors/codex-materialize.js +2 -2
  264. package/dist/connectors/index.d.ts +1 -1
  265. package/dist/connectors/index.js +25 -25
  266. package/dist/consolidation-provenance-check.d.ts +2 -2
  267. package/dist/consolidation-undo.d.ts +2 -2
  268. package/dist/contradiction/index.d.ts +6 -5
  269. package/dist/contradiction/index.js +4 -4
  270. package/dist/{contradiction-scan-BSGKZHYJ.js → contradiction-scan-GVD4JJ7B.js} +4 -4
  271. package/dist/converge-config.d.ts +1 -1
  272. package/dist/convergence-refresh.d.ts +2 -2
  273. package/dist/convergence-refresh.js +26 -26
  274. package/dist/conversation-index/backend.d.ts +1 -1
  275. package/dist/conversation-index/chunker.d.ts +1 -1
  276. package/dist/conversation-index/faiss-adapter.d.ts +1 -1
  277. package/dist/conversation-index/indexer.d.ts +1 -1
  278. package/dist/conversation-index/search.d.ts +1 -1
  279. package/dist/corpus-watermark.d.ts +1 -1
  280. package/dist/corpus-watermark.js +25 -25
  281. package/dist/cross-lingual-recall.d.ts +1 -1
  282. package/dist/dashboard-runtime.js +2 -2
  283. package/dist/day-summary.d.ts +1 -1
  284. package/dist/deep-recall-config.d.ts +12 -1
  285. package/dist/deep-recall-config.js +5 -3
  286. package/dist/deep-recall-http-glue.d.ts +19 -15
  287. package/dist/deep-recall-http-glue.js +7 -4
  288. package/dist/deep-recall-mcp-tools.d.ts +16 -14
  289. package/dist/deep-recall-policy-llm.d.ts +14 -3
  290. package/dist/deep-recall-policy-llm.js +3 -3
  291. package/dist/deep-recall-seeds.d.ts +4 -1
  292. package/dist/deep-recall-seeds.js +1 -1
  293. package/dist/deep-recall.d.ts +12 -1
  294. package/dist/deep-recall.js +3 -2
  295. package/dist/delinearize.d.ts +1 -1
  296. package/dist/dependency-propagation-config.d.ts +1 -1
  297. package/dist/{dependency-propagation-delivery-Cq1ekOwV.d.ts → dependency-propagation-delivery-BDDjImQn.d.ts} +1 -1
  298. package/dist/direct-answer-wiring.d.ts +1 -1
  299. package/dist/direct-answer.d.ts +1 -1
  300. package/dist/embedding-fallback.d.ts +1 -1
  301. package/dist/enrichment/index.d.ts +1 -1
  302. package/dist/entity-origin-fields.d.ts +1 -1
  303. package/dist/entity-retrieval.d.ts +2 -2
  304. package/dist/entity-retrieval.js +24 -24
  305. package/dist/entity-schema.d.ts +1 -1
  306. package/dist/episodic-context.d.ts +1 -1
  307. package/dist/eval-trajectory-contracts.d.ts +1 -1
  308. package/dist/eval-trajectory-store.d.ts +1 -1
  309. package/dist/eval-trajectory.d.ts +1 -1
  310. package/dist/explicit-capture.d.ts +13 -12
  311. package/dist/explicit-capture.js +3 -3
  312. package/dist/external-wiki-access.d.ts +16 -14
  313. package/dist/external-wiki-access.js +76 -75
  314. package/dist/external-wiki-collection-registration.d.ts +1 -1
  315. package/dist/external-wiki-collection.d.ts +1 -1
  316. package/dist/external-wiki-mcp-tools.d.ts +16 -14
  317. package/dist/extraction-error-classification.d.ts +14 -3
  318. package/dist/extraction-error-classification.js +5 -3
  319. package/dist/extraction-faithfulness.d.ts +4 -3
  320. package/dist/extraction-faithfulness.js +3 -3
  321. package/dist/extraction-judge-telemetry.d.ts +4 -3
  322. package/dist/extraction-judge-training.d.ts +4 -3
  323. package/dist/extraction-judge.d.ts +4 -3
  324. package/dist/extraction-judge.js +3 -3
  325. package/dist/extraction-liveness.d.ts +1 -1
  326. package/dist/extraction-normalization.d.ts +1 -1
  327. package/dist/extraction-prompt.d.ts +1 -1
  328. package/dist/extraction-source-grounding-rules.d.ts +1 -1
  329. package/dist/extraction-source-grounding.d.ts +1 -1
  330. package/dist/extraction-span-config.d.ts +1 -1
  331. package/dist/extraction-span-materialize.d.ts +1 -1
  332. package/dist/extraction.d.ts +4 -4
  333. package/dist/extraction.js +40 -38
  334. package/dist/fallback-llm-codex-subscription.d.ts +65 -10
  335. package/dist/fallback-llm-codex-subscription.js +19 -1
  336. package/dist/fallback-llm.d.ts +25 -28
  337. package/dist/fallback-llm.js +4 -3
  338. package/dist/{first-start-migration-ZWMV5CX4.js → first-start-migration-L3UFX5CU.js} +4 -4
  339. package/dist/{generic-recall-paths-BcySh_f9.d.ts → generic-recall-paths-CpDzNO_I.d.ts} +1 -1
  340. package/dist/graph-append-error.d.ts +1 -1
  341. package/dist/graph-dashboard-diff.d.ts +1 -1
  342. package/dist/graph-dashboard-key.d.ts +1 -1
  343. package/dist/graph-dashboard-parser.d.ts +1 -1
  344. package/dist/graph-edge-reinforcement.d.ts +1 -1
  345. package/dist/graph-jsonl.d.ts +1 -1
  346. package/dist/graph-path-reconstruction.d.ts +1 -1
  347. package/dist/graph-path-scoring.d.ts +1 -1
  348. package/dist/graph-snapshot.d.ts +1 -1
  349. package/dist/graph.d.ts +1 -1
  350. package/dist/harmonic-retrieval.js +3 -3
  351. package/dist/importance.d.ts +1 -1
  352. package/dist/importers/index.d.ts +1 -1
  353. package/dist/importers/test-utils.d.ts +1 -1
  354. package/dist/in-flight-reads.d.ts +1 -1
  355. package/dist/{index-DWOb4wz9.d.ts → index-CtmmCJoo.d.ts} +3 -3
  356. package/dist/index.d.ts +80 -40
  357. package/dist/index.js +316 -296
  358. package/dist/intent.d.ts +1 -1
  359. package/dist/lcm/engine.d.ts +1 -1
  360. package/dist/lcm/engine.js +3 -3
  361. package/dist/lcm/index.d.ts +1 -1
  362. package/dist/lcm/index.js +11 -11
  363. package/dist/lcm/tools.d.ts +1 -1
  364. package/dist/lifecycle.d.ts +1 -1
  365. package/dist/live-connectors-runner.d.ts +1 -1
  366. package/dist/local-llm-DpXIvm6F.d.ts +247 -0
  367. package/dist/local-llm-config.d.ts +4 -1
  368. package/dist/local-llm-config.js +4 -2
  369. package/dist/local-llm-helpers.d.ts +18 -69
  370. package/dist/local-llm-helpers.js +1 -1
  371. package/dist/local-llm.d.ts +3 -170
  372. package/dist/local-llm.js +2 -2
  373. package/dist/local-model-endpoint.d.ts +1 -1
  374. package/dist/location/index.d.ts +3 -3
  375. package/dist/location/index.js +25 -25
  376. package/dist/maintenance/memory-governance.d.ts +1 -1
  377. package/dist/maintenance/memory-governance.js +24 -24
  378. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +2 -2
  379. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +23 -23
  380. package/dist/maintenance/rebuild-memory-projection.d.ts +2 -2
  381. package/dist/maintenance/rebuild-memory-projection.js +25 -25
  382. package/dist/{maintenance-CW9wCzMP.d.ts → maintenance-CNgoLsoM.d.ts} +13 -6
  383. package/dist/mcp-memory-inspector-app.d.ts +16 -14
  384. package/dist/memory-action-policy.d.ts +1 -1
  385. package/dist/memory-cache.d.ts +1 -1
  386. package/dist/memory-controller.d.ts +1 -1
  387. package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
  388. package/dist/memory-projection-store.d.ts +1 -1
  389. package/dist/memory-provenance.d.ts +1 -1
  390. package/dist/memory-snapshot.d.ts +1 -1
  391. package/dist/memory-subject-cli.d.ts +16 -14
  392. package/dist/memory-subject.d.ts +16 -14
  393. package/dist/memory-worth-outcomes.d.ts +2 -2
  394. package/dist/models-json.d.ts +1 -1
  395. package/dist/namespaces/migrate.d.ts +3 -3
  396. package/dist/namespaces/migrate.js +24 -24
  397. package/dist/namespaces/principal.d.ts +1 -1
  398. package/dist/namespaces/search.d.ts +12 -1
  399. package/dist/namespaces/search.js +9 -9
  400. package/dist/namespaces/storage.d.ts +3 -3
  401. package/dist/namespaces/storage.js +23 -23
  402. package/dist/native-knowledge.d.ts +1 -1
  403. package/dist/offline-sync-impression-drain.d.ts +1 -1
  404. package/dist/operator-doctor-corpus.d.ts +1 -1
  405. package/dist/operator-doctor-corpus.js +26 -26
  406. package/dist/operator-doctor-replica.d.ts +1 -1
  407. package/dist/operator-toolkit.d.ts +3 -3
  408. package/dist/operator-toolkit.js +45 -44
  409. package/dist/orchestration/compression-guideline-coordinator.d.ts +2 -2
  410. package/dist/orchestration/maintenance.d.ts +4 -4
  411. package/dist/orchestration/maintenance.js +36 -36
  412. package/dist/{orchestrator-ComHLm49.d.ts → orchestrator-DT7ybIFz.d.ts} +32 -11
  413. package/dist/orchestrator.d.ts +13 -12
  414. package/dist/orchestrator.js +176 -171
  415. package/dist/patterns-cli.d.ts +1 -1
  416. package/dist/{pipeline-CiYcqqhl.d.ts → pipeline-CgBEmHcz.d.ts} +1 -1
  417. package/dist/policy-runtime.d.ts +1 -1
  418. package/dist/proactive-contention.d.ts +2 -2
  419. package/dist/provenance.d.ts +1 -1
  420. package/dist/{public-http-CuK4_Cb1.d.ts → public-http-C8P8fyiO.d.ts} +1 -1
  421. package/dist/{qmd-qXD4vatU.d.ts → qmd-BkY8KpCh.d.ts} +2 -2
  422. package/dist/qmd-preflight.d.ts +2 -2
  423. package/dist/qmd-recall-cache.d.ts +1 -1
  424. package/dist/qmd.d.ts +2 -2
  425. package/dist/qmd.js +2 -2
  426. package/dist/recall-concurrency-config.d.ts +1 -1
  427. package/dist/recall-disclosure-escalation.d.ts +1 -1
  428. package/dist/recall-explain-renderer.d.ts +1 -1
  429. package/dist/recall-explain-renderer.js +3 -3
  430. package/dist/recall-memory-map.d.ts +1 -1
  431. package/dist/recall-navigate-access.d.ts +1 -1
  432. package/dist/recall-navigate-access.js +2 -2
  433. package/dist/recall-navigate-disclosure.d.ts +1 -1
  434. package/dist/recall-navigate-disclosure.js +1 -1
  435. package/dist/recall-navigate.d.ts +1 -1
  436. package/dist/recall-navigate.js +2 -2
  437. package/dist/recall-planner-llm.d.ts +3 -2
  438. package/dist/recall-planner-llm.js +4 -3
  439. package/dist/recall-planner-llm.js.map +1 -1
  440. package/dist/recall-state-view-admission.d.ts +13 -3
  441. package/dist/recall-state-view-admission.js +9 -9
  442. package/dist/recall-state-view-anchors.d.ts +1 -1
  443. package/dist/recall-state-view-anchors.js +2 -2
  444. package/dist/recall-state-view-inject.js +2 -2
  445. package/dist/recall-state-view-render.js +2 -2
  446. package/dist/recall-state-view-widen.js +2 -2
  447. package/dist/recall-state-view-wire.js +3 -3
  448. package/dist/recall-state-view.d.ts +10 -1
  449. package/dist/recall-state-view.js +5 -3
  450. package/dist/recall-state.d.ts +1 -1
  451. package/dist/recall-tag-filter.d.ts +1 -1
  452. package/dist/recall-timings.d.ts +1 -1
  453. package/dist/recall-xray-cli.d.ts +1 -1
  454. package/dist/recall-xray-cli.js +4 -4
  455. package/dist/recall-xray-renderer.d.ts +1 -1
  456. package/dist/recall-xray-renderer.js +3 -3
  457. package/dist/recall-xray.d.ts +1 -1
  458. package/dist/recall-xray.js +2 -2
  459. package/dist/reconcile/cursor.d.ts +1 -1
  460. package/dist/reconcile/cursor.js +2 -2
  461. package/dist/reconcile/manifest.d.ts +1 -1
  462. package/dist/reconcile/manifest.js +4 -4
  463. package/dist/reconcile/plan.d.ts +1 -1
  464. package/dist/reconcile/plan.js +2 -2
  465. package/dist/replay/normalizers/chatgpt.d.ts +1 -1
  466. package/dist/replay/normalizers/claude.d.ts +1 -1
  467. package/dist/replay/normalizers/openclaw.d.ts +1 -1
  468. package/dist/replay/normalizers/shared.d.ts +1 -1
  469. package/dist/replay/runner.d.ts +1 -1
  470. package/dist/replay/types.d.ts +1 -1
  471. package/dist/replica-divergence.d.ts +1 -1
  472. package/dist/replica-peers-config.d.ts +1 -1
  473. package/dist/{resolution-4GG3QZRJ.js → resolution-LXFQQ4AE.js} +5 -5
  474. package/dist/resolution-LXFQQ4AE.js.map +1 -0
  475. package/dist/resolve-auth-token.d.ts +1 -1
  476. package/dist/resume-bundles.js +12 -11
  477. package/dist/retrieval-agents.d.ts +2 -2
  478. package/dist/retrieval-tiers.d.ts +1 -1
  479. package/dist/routing/engine.d.ts +1 -1
  480. package/dist/routing/store.d.ts +1 -1
  481. package/dist/salvage-envelope.d.ts +1 -1
  482. package/dist/{scope-profiles-BT9rqC3w.d.ts → scope-profiles-BBPjZ9jb.d.ts} +1 -1
  483. package/dist/search/embed-helper.d.ts +1 -1
  484. package/dist/search/factory.d.ts +1 -1
  485. package/dist/search/factory.js +8 -8
  486. package/dist/search/index.d.ts +1 -1
  487. package/dist/search/index.js +12 -12
  488. package/dist/search/lancedb-backend.d.ts +1 -1
  489. package/dist/search/lancedb-backend.js +2 -2
  490. package/dist/search/meilisearch-backend.d.ts +1 -1
  491. package/dist/search/meilisearch-backend.js +2 -2
  492. package/dist/search/noop-backend.d.ts +1 -1
  493. package/dist/search/orama-backend.d.ts +1 -1
  494. package/dist/search/orama-backend.js +2 -2
  495. package/dist/search/port.d.ts +2 -2
  496. package/dist/search/port.js +1 -1
  497. package/dist/search/remote-backend.d.ts +1 -1
  498. package/dist/search/remote-backend.js +2 -2
  499. package/dist/{semantic-consolidation-CmZi7thY.d.ts → semantic-consolidation-BPFFVO84.d.ts} +1 -1
  500. package/dist/semantic-consolidation.d.ts +2 -2
  501. package/dist/semantic-consolidation.js +26 -26
  502. package/dist/semantic-rule-promotion.js +23 -23
  503. package/dist/semantic-rule-verifier.d.ts +1 -1
  504. package/dist/semantic-rule-verifier.js +23 -23
  505. package/dist/{service-CLkA7AQB.d.ts → service-jKcr6Jvr.d.ts} +2 -2
  506. package/dist/session-observer-bands.d.ts +1 -1
  507. package/dist/session-observer-state.d.ts +1 -1
  508. package/dist/shared-context/manager.d.ts +1 -1
  509. package/dist/shared-context/manager.js +2 -2
  510. package/dist/shared-context/write-output-controls.d.ts +34 -0
  511. package/dist/shared-context/write-output-controls.js +10 -0
  512. package/dist/shared-context/write-output-controls.js.map +1 -0
  513. package/dist/signal.d.ts +1 -1
  514. package/dist/source-agent-qualifier.d.ts +1 -1
  515. package/dist/source-agent-qualifier.js +31 -31
  516. package/dist/source-attribution.d.ts +23 -1
  517. package/dist/source-attribution.js +13 -3
  518. package/dist/standup/build.js +23 -23
  519. package/dist/{storage-wvX01lht.d.ts → storage-C-0Ah5OY.d.ts} +2 -1
  520. package/dist/storage.d.ts +2 -2
  521. package/dist/storage.js +22 -22
  522. package/dist/subject-config.d.ts +1 -1
  523. package/dist/summarizer.d.ts +1 -1
  524. package/dist/summarizer.js +6 -6
  525. package/dist/summary-snapshot.d.ts +1 -1
  526. package/dist/support-passport/index.d.ts +18 -17
  527. package/dist/support-passport/index.js +78 -77
  528. package/dist/task-llm-config.d.ts +16 -0
  529. package/dist/task-llm-config.js +12 -0
  530. package/dist/task-llm-config.js.map +1 -0
  531. package/dist/temporal-supersession.d.ts +2 -2
  532. package/dist/temporal-timeline-recall.d.ts +1 -1
  533. package/dist/temporal-validity.d.ts +1 -1
  534. package/dist/threading.d.ts +1 -1
  535. package/dist/tier-migration.d.ts +2 -2
  536. package/dist/tier-routing.d.ts +1 -1
  537. package/dist/tier-routing.js +3 -3
  538. package/dist/{tier-stats-LUSUUNU6.js → tier-stats-VK5PCO2L.js} +4 -4
  539. package/dist/topics.d.ts +1 -1
  540. package/dist/transcript.d.ts +1 -1
  541. package/dist/transfer/backup.js +2 -2
  542. package/dist/transfer/capsule-export.js +2 -2
  543. package/dist/transfer/capsule-import.js +3 -3
  544. package/dist/transfer/export-okf.d.ts +1 -1
  545. package/dist/transfer/export-okf.js +23 -23
  546. package/dist/trust-score-stage.d.ts +1 -1
  547. package/dist/trust-score.d.ts +1 -1
  548. package/dist/{types-Cyr32ABj.d.ts → types-cK5LydjL.d.ts} +6 -1
  549. package/dist/types.d.ts +1 -1
  550. package/dist/types.js +1 -1
  551. package/dist/utility-runtime.d.ts +1 -1
  552. package/dist/verified-recall.js +23 -23
  553. package/dist/who-knows-cli.d.ts +16 -14
  554. package/dist/who-knows-cli.js +24 -24
  555. package/dist/who-knows.d.ts +16 -14
  556. package/dist/who-knows.js +23 -23
  557. package/dist/write-envelope.d.ts +1 -1
  558. package/package.json +12 -2
  559. package/src/access-category-alias.test.ts +93 -0
  560. package/src/access-http.ts +1 -1
  561. package/src/access-mcp-shared-context-tools.ts +103 -0
  562. package/src/access-mcp.ts +4 -74
  563. package/src/access-offline-manifest.ts +52 -2
  564. package/src/access-operations-batch.ts +45 -2
  565. package/src/access-schema.ts +9 -4
  566. package/src/access-service.ts +14 -7
  567. package/src/activity/config.test.ts +61 -0
  568. package/src/activity/config.ts +40 -1
  569. package/src/activity/timeline/analysis-provider.ts +8 -2
  570. package/src/activity/timeline/analysis-run.test.ts +82 -0
  571. package/src/activity/timeline/publish-cli.test.ts +30 -0
  572. package/src/activity/timeline/publish-cli.ts +7 -0
  573. package/src/activity/timeline/query.ts +8 -1
  574. package/src/activity/timeline/regenerate.test.ts +130 -2
  575. package/src/activity/timeline/regenerate.ts +14 -6
  576. package/src/activity/vault-frontmatter.test.ts +99 -1
  577. package/src/activity/vault-frontmatter.ts +131 -0
  578. package/src/activity/vault-publish.ts +6 -0
  579. package/src/activity/vault-publisher.test.ts +172 -0
  580. package/src/activity/vault-publisher.ts +69 -15
  581. package/src/activity/vault-region.test.ts +7 -2
  582. package/src/activity/vault-region.ts +7 -3
  583. package/src/background-generation-config.ts +32 -6
  584. package/src/background-generation.test.ts +10 -1
  585. package/src/cli/deep-recall-commands.ts +22 -10
  586. package/src/cli/timeline-publish-commands.ts +9 -0
  587. package/src/config.test.ts +170 -43
  588. package/src/config.ts +22 -5
  589. package/src/dedup/merge.test.ts +283 -0
  590. package/src/deep-recall-boundary.test.ts +66 -0
  591. package/src/deep-recall-cli.test.ts +82 -0
  592. package/src/deep-recall-config.test.ts +56 -0
  593. package/src/deep-recall-config.ts +32 -0
  594. package/src/deep-recall-http-glue.ts +10 -10
  595. package/src/deep-recall-policy-llm.test.ts +242 -0
  596. package/src/deep-recall-policy-llm.ts +37 -7
  597. package/src/deep-recall-seeds.test.ts +53 -0
  598. package/src/deep-recall-seeds.ts +7 -1
  599. package/src/deep-recall-surface.test.ts +93 -0
  600. package/src/deep-recall.test.ts +121 -0
  601. package/src/deep-recall.ts +88 -28
  602. package/src/extraction-error-classification.ts +36 -1
  603. package/src/extraction-timeout.test.ts +110 -1
  604. package/src/extraction.test.ts +19 -1
  605. package/src/extraction.ts +23 -21
  606. package/src/fallback-llm-codex-subscription.ts +220 -12
  607. package/src/fallback-llm-parse-failure.test.ts +156 -0
  608. package/src/fallback-llm.test.ts +178 -0
  609. package/src/fallback-llm.ts +200 -198
  610. package/src/index.ts +1 -0
  611. package/src/local-llm-config.ts +11 -10
  612. package/src/local-llm-headers-timeout.test.ts +30 -0
  613. package/src/local-llm-helpers.ts +28 -0
  614. package/src/local-llm.ts +8 -19
  615. package/src/meetings/config.test.ts +58 -0
  616. package/src/namespaces/search.test.ts +51 -1
  617. package/src/namespaces/search.ts +48 -3
  618. package/src/orchestration/extraction-persist-promotion.test.ts +228 -2
  619. package/src/orchestration/extraction-persist-promotion.ts +17 -14
  620. package/src/orchestration/extraction-persist.ts +1 -1
  621. package/src/orchestration/orchestrator-helpers.test.ts +104 -0
  622. package/src/orchestration/orchestrator-init.ts +366 -106
  623. package/src/orchestration/recall-entry.ts +15 -1
  624. package/src/orchestration/recall-internal.ts +6 -11
  625. package/src/orchestration/recall-section-coordinator.ts +65 -28
  626. package/src/orchestration/recall-state-view-pipeline.test.ts +8 -2
  627. package/src/orchestration/semantic-merge-commit-effects.ts +45 -16
  628. package/src/orchestration/semantic-merge-persist.ts +23 -36
  629. package/src/orchestration/semantic-merge-promotion-payload.ts +62 -6
  630. package/src/orchestration/startup-collection-checks.ts +85 -0
  631. package/src/orchestrator-flush.test.ts +7 -0
  632. package/src/orchestrator-init.test.ts +1539 -0
  633. package/src/orchestrator.ts +7 -0
  634. package/src/providers/codex-subscription.test.ts +127 -0
  635. package/src/providers/codex-subscription.ts +1 -1
  636. package/src/qmd.ts +21 -10
  637. package/src/recall-state-view-admission.ts +11 -1
  638. package/src/recall-state-view-budget.test.ts +424 -0
  639. package/src/recall-state-view-cron-intent.test.ts +268 -0
  640. package/src/recall-state-view-widen.test.ts +14 -5
  641. package/src/recall-state-view-widen.ts +8 -1
  642. package/src/recall-state-view.ts +35 -18
  643. package/src/reconcile-identity-cache.test.ts +82 -1
  644. package/src/search/port.ts +1 -1
  645. package/src/shared-context/envelope-io.ts +25 -0
  646. package/src/shared-context/envelope-wiring.test.ts +4 -2
  647. package/src/shared-context/manager.ts +1 -0
  648. package/src/shared-context/write-output-controls.test.ts +192 -0
  649. package/src/shared-context/write-output-controls.ts +72 -0
  650. package/src/source-attribution.test.ts +39 -0
  651. package/src/source-attribution.ts +72 -0
  652. package/src/storage/cas-revision-store.test.ts +4 -0
  653. package/src/storage/cas-revision-store.ts +104 -12
  654. package/src/storage-frontmatter-cas.test.ts +19 -17
  655. package/src/summarizer.ts +5 -1
  656. package/src/task-llm-config.test.ts +124 -0
  657. package/src/task-llm-config.ts +88 -0
  658. package/src/testing/subjects/startup-discovery-lifecycle.test.ts +273 -0
  659. package/src/types.ts +6 -0
  660. package/dist/chunk-3CBI2ZSA.js.map +0 -1
  661. package/dist/chunk-5HYUUFMQ.js.map +0 -1
  662. package/dist/chunk-5SPCMAUC.js.map +0 -1
  663. package/dist/chunk-6H2G7RFT.js.map +0 -1
  664. package/dist/chunk-6YAIN5XJ.js.map +0 -1
  665. package/dist/chunk-ACY4ZPF7.js.map +0 -1
  666. package/dist/chunk-B36GUU6T.js.map +0 -1
  667. package/dist/chunk-BLDBT6HZ.js.map +0 -1
  668. package/dist/chunk-CARRTDKC.js.map +0 -1
  669. package/dist/chunk-CC37E3QM.js.map +0 -1
  670. package/dist/chunk-CWTCMZGE.js.map +0 -1
  671. package/dist/chunk-CZTPU65V.js.map +0 -1
  672. package/dist/chunk-EYKIDK33.js.map +0 -1
  673. package/dist/chunk-FWWWUPOE.js.map +0 -1
  674. package/dist/chunk-IQEJIOEU.js.map +0 -1
  675. package/dist/chunk-IYKZJVL5.js.map +0 -1
  676. package/dist/chunk-JXN77SGO.js.map +0 -1
  677. package/dist/chunk-KQW3YGEN.js.map +0 -1
  678. package/dist/chunk-LPYYY4AP.js.map +0 -1
  679. package/dist/chunk-LQNRVPTV.js.map +0 -1
  680. package/dist/chunk-MVAQ2WM3.js.map +0 -1
  681. package/dist/chunk-OEDW4ER7.js.map +0 -1
  682. package/dist/chunk-OPBFP4TF.js.map +0 -1
  683. package/dist/chunk-P4ZAEYKG.js.map +0 -1
  684. package/dist/chunk-QHT7MOUF.js.map +0 -1
  685. package/dist/chunk-QTQ6XKGT.js.map +0 -1
  686. package/dist/chunk-SV4Z2S67.js.map +0 -1
  687. package/dist/chunk-TNZNSMVJ.js.map +0 -1
  688. package/dist/chunk-TRLOFIQC.js.map +0 -1
  689. package/dist/chunk-UZEHHXYC.js.map +0 -1
  690. package/dist/chunk-WKDFJXW5.js.map +0 -1
  691. package/dist/chunk-YDVAM7S4.js.map +0 -1
  692. package/dist/chunk-YFTNZMGR.js.map +0 -1
  693. package/dist/chunk-YKREX63Z.js.map +0 -1
  694. /package/dist/{capsule-crypto-7FJQINUR.js.map → access-mcp-shared-context-tools.js.map} +0 -0
  695. /package/dist/{auto-sync-RP4C6ZPF.js.map → auto-sync-7PGUFY7U.js.map} +0 -0
  696. /package/dist/{contradiction-scan-BSGKZHYJ.js.map → capsule-crypto-YO5QJ6L3.js.map} +0 -0
  697. /package/dist/{capsule-merge-IPG4IOFP.js.map → capsule-merge-3MNURAQ3.js.map} +0 -0
  698. /package/dist/{chunk-XH3HGI2N.js.map → chunk-2HQPE2NM.js.map} +0 -0
  699. /package/dist/{chunk-3EKVN2OP.js.map → chunk-2ZG2LLZT.js.map} +0 -0
  700. /package/dist/{chunk-6EHM2AV7.js.map → chunk-3BLHPQHT.js.map} +0 -0
  701. /package/dist/{chunk-J272ODKJ.js.map → chunk-42DJ235G.js.map} +0 -0
  702. /package/dist/{chunk-F4EHXVP7.js.map → chunk-46RII65S.js.map} +0 -0
  703. /package/dist/{chunk-YUW66UAH.js.map → chunk-4AX5OYKC.js.map} +0 -0
  704. /package/dist/{chunk-AECJY3GJ.js.map → chunk-4IGOLIWM.js.map} +0 -0
  705. /package/dist/{chunk-2ZTDRNCS.js.map → chunk-54QPOE45.js.map} +0 -0
  706. /package/dist/{chunk-O4M4BDIJ.js.map → chunk-563X6JJX.js.map} +0 -0
  707. /package/dist/{chunk-IL6ODG6M.js.map → chunk-5EQT62HH.js.map} +0 -0
  708. /package/dist/{chunk-JKKII6GX.js.map → chunk-6MQMYXSQ.js.map} +0 -0
  709. /package/dist/{chunk-TVVEYCNW.js.map → chunk-7K5Q6COX.js.map} +0 -0
  710. /package/dist/{chunk-BV4ZKIZH.js.map → chunk-7ZLC4DTZ.js.map} +0 -0
  711. /package/dist/{chunk-WBM2MVBK.js.map → chunk-A4OIJYCV.js.map} +0 -0
  712. /package/dist/{chunk-RLJHJQUY.js.map → chunk-AFJHNHAM.js.map} +0 -0
  713. /package/dist/{chunk-4RZLTZVM.js.map → chunk-AKABVXFS.js.map} +0 -0
  714. /package/dist/{chunk-M6HBPLBA.js.map → chunk-AUSRUOMQ.js.map} +0 -0
  715. /package/dist/{chunk-2NLLXCJG.js.map → chunk-BXLOS5AJ.js.map} +0 -0
  716. /package/dist/{chunk-Q7CLGFA7.js.map → chunk-C3G6MW4W.js.map} +0 -0
  717. /package/dist/{chunk-O76F5QPP.js.map → chunk-D6PY63OM.js.map} +0 -0
  718. /package/dist/{chunk-BD7JTBYP.js.map → chunk-D7MAYFQP.js.map} +0 -0
  719. /package/dist/{chunk-LMLGBG6H.js.map → chunk-DBB5JPSL.js.map} +0 -0
  720. /package/dist/{chunk-TSP5WH72.js.map → chunk-DIXZQTGY.js.map} +0 -0
  721. /package/dist/{chunk-X7Y7WX73.js.map → chunk-DQEMWVMT.js.map} +0 -0
  722. /package/dist/{chunk-UHRZ324M.js.map → chunk-E3I3NDUP.js.map} +0 -0
  723. /package/dist/{chunk-AENM6GKU.js.map → chunk-E4LMQTST.js.map} +0 -0
  724. /package/dist/{chunk-MUTVRKKY.js.map → chunk-EMSYMYXO.js.map} +0 -0
  725. /package/dist/{chunk-YNDLCWXS.js.map → chunk-EZ25VE3G.js.map} +0 -0
  726. /package/dist/{chunk-FXHOZGSE.js.map → chunk-F5H6YG5P.js.map} +0 -0
  727. /package/dist/{chunk-TNSCIPBQ.js.map → chunk-G6NQ3L4T.js.map} +0 -0
  728. /package/dist/{chunk-ZMWSYUUL.js.map → chunk-GCBIXUPT.js.map} +0 -0
  729. /package/dist/{chunk-4BCHFSC7.js.map → chunk-GWNSKQDA.js.map} +0 -0
  730. /package/dist/{chunk-JDX2OA4R.js.map → chunk-HNHIHXSD.js.map} +0 -0
  731. /package/dist/{chunk-GG5FHZJJ.js.map → chunk-I33QYUAF.js.map} +0 -0
  732. /package/dist/{chunk-AAZEKXUP.js.map → chunk-IYIPXAIJ.js.map} +0 -0
  733. /package/dist/{chunk-5U7K4W6K.js.map → chunk-JDOBQPJY.js.map} +0 -0
  734. /package/dist/{chunk-UZZ7SQT3.js.map → chunk-JMWUPUE6.js.map} +0 -0
  735. /package/dist/{chunk-ENBPQEVU.js.map → chunk-JSD7Q7LD.js.map} +0 -0
  736. /package/dist/{chunk-Q432REND.js.map → chunk-KJLLPG26.js.map} +0 -0
  737. /package/dist/{chunk-JTQR6L2N.js.map → chunk-KLUC2GSG.js.map} +0 -0
  738. /package/dist/{chunk-OB3XMWX5.js.map → chunk-KVO2BTA4.js.map} +0 -0
  739. /package/dist/{chunk-PCOVEDPK.js.map → chunk-KZJM7R4F.js.map} +0 -0
  740. /package/dist/{chunk-X4TD4O2F.js.map → chunk-LE2KZ72G.js.map} +0 -0
  741. /package/dist/{chunk-HIP6DKJJ.js.map → chunk-LQVXSRAJ.js.map} +0 -0
  742. /package/dist/{chunk-A7GQBJP5.js.map → chunk-LVFI5LG7.js.map} +0 -0
  743. /package/dist/{chunk-VBSNUH4J.js.map → chunk-ND7MAIJC.js.map} +0 -0
  744. /package/dist/{chunk-54NX5EG4.js.map → chunk-P66QH6R6.js.map} +0 -0
  745. /package/dist/{chunk-62D2PAAM.js.map → chunk-PAAJWQH5.js.map} +0 -0
  746. /package/dist/{chunk-TA4C3XB7.js.map → chunk-PFKIOYJH.js.map} +0 -0
  747. /package/dist/{chunk-WIWLX65T.js.map → chunk-PGGPRF6J.js.map} +0 -0
  748. /package/dist/{chunk-V6EGNVUT.js.map → chunk-PIWFNPQT.js.map} +0 -0
  749. /package/dist/{chunk-4JVQRFZD.js.map → chunk-PLJ2MQFT.js.map} +0 -0
  750. /package/dist/{chunk-4RX5O34R.js.map → chunk-PQ42DJNG.js.map} +0 -0
  751. /package/dist/{chunk-37CAEC7E.js.map → chunk-PWPIERBM.js.map} +0 -0
  752. /package/dist/{chunk-ZEGL7YCC.js.map → chunk-Q62GA5U2.js.map} +0 -0
  753. /package/dist/{chunk-GAS7KYC7.js.map → chunk-RQQO3ORQ.js.map} +0 -0
  754. /package/dist/{chunk-3NPNBVFR.js.map → chunk-UZGHKD3T.js.map} +0 -0
  755. /package/dist/{chunk-VJIE4D2I.js.map → chunk-V62YYBBY.js.map} +0 -0
  756. /package/dist/{chunk-KQAFEZQX.js.map → chunk-VDX2J7OX.js.map} +0 -0
  757. /package/dist/{chunk-6AGWBKQU.js.map → chunk-VSN2DMQK.js.map} +0 -0
  758. /package/dist/{chunk-ZHXSOMYH.js.map → chunk-VVX5PZFS.js.map} +0 -0
  759. /package/dist/{chunk-GI4ZBWPQ.js.map → chunk-W7UV2ZCA.js.map} +0 -0
  760. /package/dist/{chunk-GMIQV6DD.js.map → chunk-WBQ4ONQJ.js.map} +0 -0
  761. /package/dist/{chunk-FNHLI2RE.js.map → chunk-WFMQN7JE.js.map} +0 -0
  762. /package/dist/{chunk-ZBW7A667.js.map → chunk-WPGA4RYI.js.map} +0 -0
  763. /package/dist/{chunk-YQNNHLCG.js.map → chunk-WPGR3RW4.js.map} +0 -0
  764. /package/dist/{chunk-NXGSONWM.js.map → chunk-WZIO3TW6.js.map} +0 -0
  765. /package/dist/{chunk-ZZUVBZL2.js.map → chunk-X2QPKLPL.js.map} +0 -0
  766. /package/dist/{chunk-VSL63CFJ.js.map → chunk-XRS65T4O.js.map} +0 -0
  767. /package/dist/{chunk-5N4MZLEH.js.map → chunk-YFXAWGMR.js.map} +0 -0
  768. /package/dist/{chunk-D545Z7UH.js.map → chunk-Z535ADTC.js.map} +0 -0
  769. /package/dist/{chunk-5YCNDC3C.js.map → chunk-ZX6NNFSY.js.map} +0 -0
  770. /package/dist/{chunk-3N3PBBEH.js.map → chunk-ZYSOT6HD.js.map} +0 -0
  771. /package/dist/{chunk-MCRVQ5YQ.js.map → chunk-ZZEIL3MI.js.map} +0 -0
  772. /package/dist/{resolution-4GG3QZRJ.js.map → contradiction-scan-GVD4JJ7B.js.map} +0 -0
  773. /package/dist/{first-start-migration-ZWMV5CX4.js.map → first-start-migration-L3UFX5CU.js.map} +0 -0
  774. /package/dist/{tier-stats-LUSUUNU6.js.map → tier-stats-VK5PCO2L.js.map} +0 -0
@@ -482,6 +482,78 @@ export function lastCitationMarkerForTemplate(
482
482
  return last;
483
483
  }
484
484
 
485
+ /**
486
+ * True when a template can be matched and stripped later. All-placeholder
487
+ * templates such as `{agent}{sessionId}` have no literal anchors.
488
+ */
489
+ export function citationTemplateIsDetectable(template: string): boolean {
490
+ if (typeof template !== "string" || template.length === 0) return false;
491
+ if (template === DEFAULT_CITATION_FORMAT) return true;
492
+ PLACEHOLDER_REGEX.lastIndex = 0;
493
+ if (!PLACEHOLDER_REGEX.test(template)) {
494
+ PLACEHOLDER_REGEX.lastIndex = 0;
495
+ return true;
496
+ }
497
+ PLACEHOLDER_REGEX.lastIndex = 0;
498
+ return templateMatcher(template) !== null;
499
+ }
500
+
501
+ /**
502
+ * Templates the merge path may lift, preserve, or strip: the default
503
+ * format, the current format when it is detectable, then any prior
504
+ * configured formats the caller still holds. Undetectable shapes are
505
+ * dropped so we never hash or attach a marker we cannot re-match.
506
+ */
507
+ export function citationTemplatesToRecognize(
508
+ primary: string | undefined,
509
+ extra: readonly string[] = [],
510
+ ): string[] {
511
+ const out: string[] = [];
512
+ const add = (template: string | undefined): void => {
513
+ if (typeof template !== "string" || template.length === 0) return;
514
+ if (!citationTemplateIsDetectable(template)) return;
515
+ if (!out.includes(template)) out.push(template);
516
+ };
517
+ add(DEFAULT_CITATION_FORMAT);
518
+ add(primary);
519
+ for (const template of extra) add(template);
520
+ return out;
521
+ }
522
+
523
+ /**
524
+ * Prior formats the caller still holds, if any. Absent or malformed
525
+ * history is ignored — fail safe, do not invent templates.
526
+ */
527
+ export function citationTemplatesForMerge(config: {
528
+ inlineSourceAttributionFormat?: string;
529
+ inlineSourceAttributionFormatHistory?: unknown;
530
+ }): string[] {
531
+ const raw = config.inlineSourceAttributionFormatHistory;
532
+ const extra = Array.isArray(raw)
533
+ ? raw.filter((value): value is string => typeof value === "string" && value.length > 0)
534
+ : [];
535
+ return citationTemplatesToRecognize(config.inlineSourceAttributionFormat, extra);
536
+ }
537
+
538
+ export function lastRecognizedCitationMarker(
539
+ text: string,
540
+ templates: readonly string[],
541
+ ): string | null {
542
+ for (const template of templates) {
543
+ const marker = lastCitationMarkerForTemplate(text, template);
544
+ if (marker) return marker;
545
+ }
546
+ return null;
547
+ }
548
+
549
+ export function stripRecognizedCitations(text: string, templates: readonly string[]): string {
550
+ let out = text;
551
+ for (const template of templates) {
552
+ out = stripCitationForTemplate(out, template);
553
+ }
554
+ return out;
555
+ }
556
+
485
557
  /**
486
558
  * Attach an inline citation to fact text.
487
559
  *
@@ -226,6 +226,7 @@ test("an evidenced gated recovery defers a reserve-only marker to the path-locke
226
226
  status: "present",
227
227
  revision: b.pendingRevision,
228
228
  committedDigest: store.digestContent("landed bytes"),
229
+ committedSemanticFingerprint: store.digestContent("landed bytes"),
229
230
  });
230
231
  });
231
232
  });
@@ -258,6 +259,7 @@ test("recoverPendingRevision publishes a crashed reservation whose write landed
258
259
  status: "present",
259
260
  revision: b.pendingRevision,
260
261
  committedDigest: store.digestContent("new durable bytes"),
262
+ committedSemanticFingerprint: store.digestContent("new durable bytes"),
261
263
  });
262
264
  assert.equal(await store.recoverPendingRevision(target), "committed", "idempotent");
263
265
  });
@@ -361,6 +363,7 @@ test("beginRevisionTransaction with expectedContent persists expectedDigest in p
361
363
  status: "present",
362
364
  revision: txn2.pendingRevision,
363
365
  committedDigest: store.digestContent(expectedContent),
366
+ committedSemanticFingerprint: store.digestContent(expectedContent),
364
367
  });
365
368
  });
366
369
  });
@@ -425,6 +428,7 @@ test("legacy pending shards without writeLanded treat expectedDigest as already
425
428
  status: "present",
426
429
  revision: "2026-08-01T00:00:00.000Z",
427
430
  committedDigest: expectedDigest,
431
+ committedSemanticFingerprint: expectedDigest,
428
432
  });
429
433
  });
430
434
  });
@@ -35,6 +35,15 @@ type CasRevisionShard = {
35
35
  writeLanded?: boolean;
36
36
  /** #2813 (P1 B): sha256 hex digest of the durable memory file when committed. */
37
37
  committedDigest?: string | null;
38
+ /** #2870: sha256 of the durable file's canonical SEMANTIC text — the
39
+ * file with the access-telemetry frontmatter keys (`accessCount:`,
40
+ * `lastAccessed:`) stripped, the same exclusion set
41
+ * `invalidationCommitFingerprint` applies to parsed records. Promotion
42
+ * binds to THIS, never to the byte digest: an access-tracking flush
43
+ * rewrites exactly those two lines without minting a receipt
44
+ * (`isSemanticFrontmatterChange` is false), and must not invalidate a
45
+ * valid promotion. null means the file was absent at commit. */
46
+ committedSemanticFingerprint?: string | null;
38
47
  };
39
48
 
40
49
  type CasRevisionMetadata = {
@@ -51,7 +60,7 @@ type CasRevisionMetadata = {
51
60
  * `readRevision` collapses this into `undefined`; callers that transact
52
61
  * on receipt identity MUST refuse instead. */
53
62
  export type CasRevisionReadStatus =
54
- | { status: "present"; revision: string; committedDigest?: string }
63
+ | { status: "present"; revision: string; committedDigest?: string; committedSemanticFingerprint?: string }
55
64
  | { status: "absent" }
56
65
  | { status: "unavailable"; reason: string };
57
66
 
@@ -78,7 +87,7 @@ export interface CasRevisionTransaction {
78
87
  type CasShardView =
79
88
  | { kind: "missing" }
80
89
  | { kind: "foreign" }
81
- | { kind: "committed"; revision: string; committedDigest?: string; foreign: boolean }
90
+ | { kind: "committed"; revision: string; committedDigest?: string; committedSemanticFingerprint?: string; foreign: boolean }
82
91
  | {
83
92
  kind: "pending";
84
93
  revision: string;
@@ -89,6 +98,29 @@ type CasShardView =
89
98
  writeLanded?: boolean;
90
99
  };
91
100
 
101
+ const ACCESS_TELEMETRY_FRONTMATTER_KEY = /^(?:accessCount|lastAccessed):/;
102
+
103
+ /**
104
+ * #2870: canonical SEMANTIC text of a durable memory file — the file with
105
+ * the access-telemetry frontmatter keys (`accessCount:`, `lastAccessed:`)
106
+ * removed. This is the file-level twin of `invalidationCommitFingerprint`
107
+ * (deletion-revision-store.ts): the same exclusion set, computed without
108
+ * parsing, so the CAS receipt can record it at commit time from the same
109
+ * bytes the digests come from. Only TOP-LEVEL frontmatter lines are
110
+ * stripped — serialized frontmatter is flat `key: value` lines, and nested
111
+ * blocks (links:) are indented and never match. A file without a leading
112
+ * frontmatter block is returned unchanged.
113
+ */
114
+ export function canonicalSemanticFileText(raw: string): string {
115
+ const lines = raw.split("\n");
116
+ if (lines[0] !== "---") return raw;
117
+ const closing = lines.indexOf("---", 1);
118
+ if (closing === -1) return raw;
119
+ const frontmatter = lines
120
+ .slice(1, closing)
121
+ .filter((line) => !ACCESS_TELEMETRY_FRONTMATTER_KEY.test(line));
122
+ return [...lines.slice(0, 1), ...frontmatter, ...lines.slice(closing)].join("\n");
123
+ }
92
124
  const CAS_REVISION_LOCK_STALE_MS = 60_000;
93
125
  const CAS_REVISION_LOCK_MAX_WAIT_MS = 120_000;
94
126
  const SHA256_HEX = /^[0-9a-f]{64}$/;
@@ -252,6 +284,10 @@ export class CasRevisionStore {
252
284
  const foreign = root.path !== relativePath;
253
285
  const committedDigest =
254
286
  typeof root.committedDigest === "string" ? root.committedDigest : undefined;
287
+ const committedSemanticFingerprint =
288
+ typeof root.committedSemanticFingerprint === "string"
289
+ ? root.committedSemanticFingerprint
290
+ : undefined;
255
291
  return root.state === "pending"
256
292
  ? {
257
293
  kind: "pending",
@@ -262,7 +298,13 @@ export class CasRevisionStore {
262
298
  expectedDigest: root.expectedDigest as string | null | undefined,
263
299
  ...(typeof root.writeLanded === "boolean" ? { writeLanded: root.writeLanded } : {}),
264
300
  }
265
- : { kind: "committed", revision: root.revision, committedDigest, foreign };
301
+ : {
302
+ kind: "committed",
303
+ revision: root.revision,
304
+ committedDigest,
305
+ committedSemanticFingerprint,
306
+ foreign,
307
+ };
266
308
  }
267
309
  // Pre-two-phase shard: a full-shape match reads as committed; anything
268
310
  // else keeps the legacy fall-through (legacy metadata, then absence).
@@ -274,14 +316,26 @@ export class CasRevisionStore {
274
316
  ) {
275
317
  const committedDigest =
276
318
  typeof root.committedDigest === "string" ? root.committedDigest : undefined;
277
- return { kind: "committed", revision: root.revision, committedDigest, foreign: false };
319
+ const committedSemanticFingerprint =
320
+ typeof root.committedSemanticFingerprint === "string"
321
+ ? root.committedSemanticFingerprint
322
+ : undefined;
323
+ return {
324
+ kind: "committed",
325
+ revision: root.revision,
326
+ committedDigest,
327
+ committedSemanticFingerprint,
328
+ foreign: false,
329
+ };
278
330
  }
279
331
  return { kind: "foreign" };
280
332
  }
281
333
 
282
- private async readStandingRevision(relativePath: string): Promise<string | undefined> {
334
+ private async readStandingRevision(relativePath: string): Promise<
335
+ { revision: string; committedDigest?: string; committedSemanticFingerprint?: string } | undefined
336
+ > {
283
337
  try {
284
- return (await this.readStandingRevisionStrict(relativePath))?.revision;
338
+ return await this.readStandingRevisionStrict(relativePath);
285
339
  } catch (error) {
286
340
  log.warn(`CasRevisionStore failed to read standing revision for ${relativePath}: ${error}`);
287
341
  return undefined;
@@ -299,7 +353,9 @@ export class CasRevisionStore {
299
353
  * refuse instead of mistaking the failure for absence. */
300
354
  private async readStandingRevisionStrict(
301
355
  relativePath: string,
302
- ): Promise<{ revision: string; committedDigest?: string } | undefined> {
356
+ ): Promise<
357
+ { revision: string; committedDigest?: string; committedSemanticFingerprint?: string } | undefined
358
+ > {
303
359
  const { shardPath } = await this.getSafeShardInfo(relativePath);
304
360
  const view = await this.readShardView(shardPath, relativePath);
305
361
  if (view.kind === "pending") {
@@ -308,7 +364,11 @@ export class CasRevisionStore {
308
364
  );
309
365
  }
310
366
  if (view.kind === "committed" && !view.foreign) {
311
- return { revision: view.revision, committedDigest: view.committedDigest };
367
+ return {
368
+ revision: view.revision,
369
+ committedDigest: view.committedDigest,
370
+ committedSemanticFingerprint: view.committedSemanticFingerprint,
371
+ };
312
372
  }
313
373
  const legacyMap = await this.readLegacyMetadata();
314
374
  const legacyRev = legacyMap.get(relativePath);
@@ -326,6 +386,7 @@ export class CasRevisionStore {
326
386
  baselineDigest?: string | null;
327
387
  expectedDigest?: string | null;
328
388
  committedDigest?: string | null;
389
+ committedSemanticFingerprint?: string | null;
329
390
  writeLanded?: boolean;
330
391
  },
331
392
  ): Promise<void> {
@@ -335,6 +396,9 @@ export class CasRevisionStore {
335
396
  if (evidence?.committedDigest !== undefined) {
336
397
  payload.committedDigest = evidence.committedDigest;
337
398
  }
399
+ if (evidence?.committedSemanticFingerprint !== undefined) {
400
+ payload.committedSemanticFingerprint = evidence.committedSemanticFingerprint;
401
+ }
338
402
  } else {
339
403
  payload = { version: 1, path: relativePath, revision, state };
340
404
  if (previous !== undefined) payload.previous = previous;
@@ -401,7 +465,7 @@ export class CasRevisionStore {
401
465
  async readRevision(filePath: string): Promise<string | undefined> {
402
466
  try {
403
467
  const relativePath = await this.resolveRelativePath(filePath);
404
- return await this.readStandingRevision(relativePath);
468
+ return (await this.readStandingRevision(relativePath))?.revision;
405
469
  } catch (error) {
406
470
  log.warn(`CasRevisionStore.readRevision failed for ${filePath}: ${error}`);
407
471
  return undefined;
@@ -426,6 +490,9 @@ export class CasRevisionStore {
426
490
  ...(standing.committedDigest !== undefined
427
491
  ? { committedDigest: standing.committedDigest }
428
492
  : {}),
493
+ ...(standing.committedSemanticFingerprint !== undefined
494
+ ? { committedSemanticFingerprint: standing.committedSemanticFingerprint }
495
+ : {}),
429
496
  };
430
497
  } catch (error) {
431
498
  return { status: "unavailable", reason: error instanceof Error ? error.message : String(error) };
@@ -477,19 +544,34 @@ export class CasRevisionStore {
477
544
  }
478
545
 
479
546
  public async digestDurableFile(filePath: string): Promise<string | null> {
547
+ const bytes = await this.readDurableBytes(filePath);
548
+ return bytes === null ? null : createHash("sha256").update(bytes).digest("hex");
549
+ }
550
+
551
+ /** #2870: canonical SEMANTIC fingerprint of the durable file — its text
552
+ * with the access-telemetry frontmatter keys stripped
553
+ * ({@link canonicalSemanticFileText}), hashed. Null means the file was
554
+ * absent. A fingerprint, never memory content. */
555
+ public async semanticFingerprintDurableFile(filePath: string): Promise<string | null> {
556
+ const bytes = await this.readDurableBytes(filePath);
557
+ return bytes === null
558
+ ? null
559
+ : createHash("sha256").update(canonicalSemanticFileText(bytes.toString("utf8"))).digest("hex");
560
+ }
561
+
562
+ private async readDurableBytes(filePath: string): Promise<Buffer | null> {
480
563
  const relativePath = await this.resolveRelativePath(filePath);
481
564
  const baseDir = path.resolve(this.baseDir);
482
565
  const target = await resolveSafeStoragePath(baseDir, relativePath);
483
- let bytes: Buffer;
484
566
  try {
485
- bytes = await readFile(target);
567
+ return await readFile(target);
486
568
  } catch (error) {
487
569
  if (isErrnoCode(error, "ENOENT")) return null;
488
570
  throw new Error(
489
571
  `CAS revision evidence: durable memory file ${relativePath} is unreadable: ${error instanceof Error ? error.message : String(error)}`,
490
572
  );
491
573
  }
492
- return createHash("sha256").update(bytes).digest("hex");
574
+
493
575
  }
494
576
 
495
577
  /** #2807: mark the reserved write as landed. Verifies a pre-recorded
@@ -531,8 +613,14 @@ export class CasRevisionStore {
531
613
  if (outcome === "commit") {
532
614
  const committedDigest =
533
615
  view.expectedDigest ?? (await this.digestDurableFile(relativePath));
616
+ // #2870: publish the canonical semantic fingerprint alongside the
617
+ // byte digest so promotion can bind semantic identity without
618
+ // refusing on access-only telemetry flushes.
619
+ const committedSemanticFingerprint =
620
+ await this.semanticFingerprintDurableFile(relativePath);
534
621
  await this.writeShard(shardPath, relativePath, token, lock, "committed", undefined, {
535
622
  committedDigest,
623
+ committedSemanticFingerprint,
536
624
  });
537
625
  } else if (view.previous !== undefined) {
538
626
  await this.writeShard(shardPath, relativePath, view.previous, lock, "committed");
@@ -577,8 +665,11 @@ export class CasRevisionStore {
577
665
  if (fileWriteLanded) {
578
666
  const committedDigest =
579
667
  view.expectedDigest ?? (await this.digestDurableFile(relativePath));
668
+ const committedSemanticFingerprint =
669
+ await this.semanticFingerprintDurableFile(relativePath);
580
670
  await this.writeShard(shardPath, relativePath, view.revision, lock, "committed", undefined, {
581
671
  committedDigest,
672
+ committedSemanticFingerprint,
582
673
  });
583
674
  } else if (view.previous !== undefined) {
584
675
  await this.writeShard(shardPath, relativePath, view.previous, lock, "committed");
@@ -623,6 +714,7 @@ export class CasRevisionStore {
623
714
  if (view.expectedDigest !== undefined && currentDigest === view.expectedDigest) {
624
715
  await this.writeShard(shardPath, relativePath, view.revision, lock, "committed", undefined, {
625
716
  committedDigest: view.expectedDigest,
717
+ committedSemanticFingerprint: await this.semanticFingerprintDurableFile(relativePath),
626
718
  });
627
719
  return "committed";
628
720
  }
@@ -267,11 +267,13 @@ test("readCasRevisionStatus distinguishes present, absent, and unavailable recei
267
267
  assert.equal(await storage.writeMemoryFrontmatter(memory, { status: "archived" }), true);
268
268
  const standing = await storage.readCasRevision(memory.path);
269
269
  assert.ok(standing);
270
- assert.deepEqual(await storage.readCasRevisionStatus(memory.path), {
271
- status: "present",
272
- revision: standing,
273
- committedDigest: createHash("sha256").update(await readFile(memory.path)).digest("hex"),
274
- });
270
+ const archived = await storage.readCasRevisionStatus(memory.path);
271
+ assert.equal(archived.status, "present");
272
+ assert.equal(archived.revision, standing);
273
+ assert.equal(
274
+ archived.status === "present" ? archived.committedDigest : undefined,
275
+ createHash("sha256").update(await readFile(memory.path)).digest("hex"),
276
+ );
275
277
 
276
278
  // A torn shard write: the receipt EXISTS but cannot be read. That is
277
279
  // unavailability — never absence — while the fail-open read keeps
@@ -554,11 +556,13 @@ test("a receipt publication failure after the memory write recovers from recorde
554
556
 
555
557
  // #2807: writeLanded recorded evidence, so the next unlocked read
556
558
  // publishes the reserved token with the intended file digest.
557
- assert.deepEqual(await storage.readCasRevisionStatus(before.path), {
558
- status: "present",
559
- revision: reserved,
560
- committedDigest: createHash("sha256").update(onDisk).digest("hex"),
561
- });
559
+ const published = await storage.readCasRevisionStatus(before.path);
560
+ assert.equal(published.status, "present");
561
+ assert.equal(published.revision, reserved);
562
+ assert.equal(
563
+ published.status === "present" ? published.committedDigest : undefined,
564
+ createHash("sha256").update(onDisk).digest("hex"),
565
+ );
562
566
  assert.equal(
563
567
  await storage.updateMemory(created.id, "Second body after evidence recovery."),
564
568
  true,
@@ -676,13 +680,11 @@ test("restart after a crash between write and commit publishes the reserved rece
676
680
 
677
681
  const restarted = new StorageManager(dir);
678
682
  const landedBytes = await readFile(memory.path);
679
- assert.deepEqual(
680
- await restarted.readCasRevisionStatus(memory.path),
681
- {
682
- status: "present",
683
- revision: reserved,
684
- committedDigest: createHash("sha256").update(landedBytes).digest("hex"),
685
- },
683
+ const restartedStatus = await restarted.readCasRevisionStatus(memory.path);
684
+ assert.ok(
685
+ restartedStatus.status === "present" &&
686
+ restartedStatus.revision === reserved &&
687
+ restartedStatus.committedDigest === createHash("sha256").update(landedBytes).digest("hex"),
686
688
  "the first read after restart publishes the reserved token from writeLanded evidence",
687
689
  );
688
690
  assert.equal(
package/src/summarizer.ts CHANGED
@@ -223,7 +223,11 @@ export class HourlySummarizer {
223
223
  if (this.config.backgroundGeneration) {
224
224
  try {
225
225
  const text = await completeBackgroundGeneration(this.config, [
226
- { role: "system", content: "You are a conversation summarization system. Output valid JSON only." },
226
+ {
227
+ role: "system",
228
+ content:
229
+ "You are a conversation summarization system. Summarize the following conversation transcript into 3-5 concise bullet points.\n\nGuidelines:\n- Focus on what was accomplished, decided, or discussed\n- Include specific topics, projects, or entities mentioned\n- Note any significant user requests or agent actions\n- Keep bullets brief but informative (1-2 sentences each)\n- Skip trivial greetings or meta-conversation\n- Use present tense for ongoing work, past for completed items\n\nRespond with valid JSON only, matching this schema:\n{\"bullets\": [\"bullet 1\", \"bullet 2\", \"bullet 3\"]}",
230
+ },
227
231
  { role: "user", content: `Summarize this conversation:\n\n${conversation}` },
228
232
  ]);
229
233
  const parsed = parseBackgroundGenerationJson(text, (value) => HourlySummarySchema.parse(value));
@@ -0,0 +1,124 @@
1
+ import assert from "node:assert/strict";
2
+ import test from "node:test";
3
+
4
+ import { parseConfig } from "./config.js";
5
+ import { initLogger, resetLogger } from "./logger.js";
6
+ import { parseTaskLlmConfig, resetTaskLlmLegacyWarningsForTest } from "./task-llm-config.js";
7
+
8
+ function captureWarns(): string[] {
9
+ const warns: string[] = [];
10
+ initLogger(
11
+ {
12
+ info() {},
13
+ warn(msg) {
14
+ warns.push(msg);
15
+ },
16
+ error() {},
17
+ },
18
+ false,
19
+ { timestamps: false },
20
+ );
21
+ return warns;
22
+ }
23
+
24
+ test("taskLlmTimeoutMs wins over legacy localLlmTimeoutMs", () => {
25
+ resetTaskLlmLegacyWarningsForTest();
26
+ const parsed = parseTaskLlmConfig({
27
+ taskLlmTimeoutMs: 90_000,
28
+ localLlmTimeoutMs: 12_000,
29
+ });
30
+ assert.equal(parsed.timeoutMs, 90_000);
31
+ assert.equal(parsed.localTimeoutMs, 12_000);
32
+ });
33
+
34
+ test("taskLlmFallback wins over legacy localLlmFallback", () => {
35
+ resetTaskLlmLegacyWarningsForTest();
36
+ const parsed = parseTaskLlmConfig({
37
+ taskLlmFallback: false,
38
+ localLlmFallback: true,
39
+ });
40
+ assert.equal(parsed.fallback, false);
41
+ });
42
+
43
+ test("legacy localLlmTimeoutMs is read when taskLlmTimeoutMs is absent and warns once", () => {
44
+ resetTaskLlmLegacyWarningsForTest();
45
+ const warns = captureWarns();
46
+ try {
47
+ const first = parseTaskLlmConfig({ localLlmTimeoutMs: 45_000 });
48
+ const second = parseTaskLlmConfig({ localLlmTimeoutMs: 45_000 });
49
+ assert.equal(first.timeoutMs, 45_000);
50
+ assert.equal(second.timeoutMs, 45_000);
51
+ const legacyWarns = warns.filter((line) => line.includes("localLlmTimeoutMs is a legacy alias for taskLlmTimeoutMs"));
52
+ assert.equal(legacyWarns.length, 1);
53
+ } finally {
54
+ resetLogger();
55
+ resetTaskLlmLegacyWarningsForTest();
56
+ }
57
+ });
58
+
59
+ test("legacy localLlmFallback is read when taskLlmFallback is absent and warns once", () => {
60
+ resetTaskLlmLegacyWarningsForTest();
61
+ const warns = captureWarns();
62
+ try {
63
+ const first = parseTaskLlmConfig({ localLlmFallback: false });
64
+ const second = parseTaskLlmConfig({ localLlmFallback: false });
65
+ assert.equal(first.fallback, false);
66
+ assert.equal(second.fallback, false);
67
+ const legacyWarns = warns.filter((line) => line.includes("localLlmFallback is a legacy alias for taskLlmFallback"));
68
+ assert.equal(legacyWarns.length, 1);
69
+ } finally {
70
+ resetLogger();
71
+ resetTaskLlmLegacyWarningsForTest();
72
+ }
73
+ });
74
+
75
+ test("neither key uses defaults and does not warn", () => {
76
+ resetTaskLlmLegacyWarningsForTest();
77
+ const warns = captureWarns();
78
+ try {
79
+ const parsed = parseTaskLlmConfig({});
80
+ assert.equal(parsed.timeoutMs, 180_000);
81
+ assert.equal(parsed.localTimeoutMs, 180_000);
82
+ assert.equal(parsed.fallback, true);
83
+ assert.equal(warns.some((line) => line.includes("legacy alias")), false);
84
+ } finally {
85
+ resetLogger();
86
+ resetTaskLlmLegacyWarningsForTest();
87
+ }
88
+ });
89
+
90
+ test("present-with-undefined taskLlmTimeoutMs does not fall through to the legacy key", () => {
91
+ resetTaskLlmLegacyWarningsForTest();
92
+ const parsed = parseTaskLlmConfig({
93
+ taskLlmTimeoutMs: undefined,
94
+ localLlmTimeoutMs: 12_000,
95
+ });
96
+ assert.equal(parsed.timeoutMs, 180_000);
97
+ assert.equal(parsed.localTimeoutMs, 12_000);
98
+ });
99
+
100
+ test("taskLlmFallback coerces string false", () => {
101
+ resetTaskLlmLegacyWarningsForTest();
102
+ const parsed = parseTaskLlmConfig({ taskLlmFallback: "false" });
103
+ assert.equal(parsed.fallback, false);
104
+ });
105
+
106
+ test("parseConfig wires taskLlmTimeoutMs onto PluginConfig and keeps localLlmTimeoutMs independent", () => {
107
+ resetTaskLlmLegacyWarningsForTest();
108
+ const cfg = parseConfig({
109
+ taskLlmTimeoutMs: 90_000,
110
+ localLlmTimeoutMs: 12_000,
111
+ taskLlmFallback: false,
112
+ });
113
+ assert.equal(cfg.taskLlmTimeoutMs, 90_000);
114
+ assert.equal(cfg.localLlmTimeoutMs, 12_000);
115
+ assert.equal(cfg.localLlmFallback, false);
116
+ assert.equal(cfg.taskLlmFallback, false);
117
+ });
118
+
119
+ test("parseConfig legacy-only timeout still populates taskLlmTimeoutMs", () => {
120
+ resetTaskLlmLegacyWarningsForTest();
121
+ const cfg = parseConfig({ localLlmTimeoutMs: 600_000 });
122
+ assert.equal(cfg.taskLlmTimeoutMs, 600_000);
123
+ assert.equal(cfg.localLlmTimeoutMs, 600_000);
124
+ });
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Honest names for the gateway/task LLM chain (issue #2967).
3
+ *
4
+ * `FallbackLlmClient` is the primary configured path in gateway mode, not a
5
+ * secondary recovery path. `taskLlmTimeoutMs` / `taskLlmFallback` are the
6
+ * current keys. `localLlmTimeoutMs` / `localLlmFallback` remain documented
7
+ * legacy aliases, read only when the corresponding new key is absent.
8
+ */
9
+ import { coerceBool, coerceNumber } from "./connectors/coerce.js";
10
+ import { log } from "./logger.js";
11
+
12
+ const DEFAULT_TIMEOUT_MS = 180_000;
13
+ const MIN_TIMEOUT_MS = 1;
14
+ const MAX_TIMEOUT_MS = 86_400_000;
15
+
16
+ const warnedLegacy = new Set<string>();
17
+
18
+ export function resetTaskLlmLegacyWarningsForTest(): void {
19
+ warnedLegacy.clear();
20
+ }
21
+
22
+ function warnLegacyOnce(legacyKey: string, currentKey: string, extra: string): void {
23
+ if (warnedLegacy.has(legacyKey)) return;
24
+ warnedLegacy.add(legacyKey);
25
+ log.warn(
26
+ `config: ${legacyKey} is a legacy alias for ${currentKey}; set ${currentKey} instead. ${legacyKey} still works when ${currentKey} is absent. ${extra}`,
27
+ );
28
+ }
29
+
30
+ function parseBoundedIntegerMs(value: unknown, fallback: number): number {
31
+ const coerced = coerceNumber(value);
32
+ if (coerced === undefined) return fallback;
33
+ return Math.min(MAX_TIMEOUT_MS, Math.max(MIN_TIMEOUT_MS, Math.floor(coerced)));
34
+ }
35
+
36
+ function hasOwnKey(raw: Record<string, unknown>, key: string): boolean {
37
+ return Object.hasOwn(raw, key);
38
+ }
39
+
40
+ export interface ParsedTaskLlmConfig {
41
+ timeoutMs: number;
42
+ localTimeoutMs: number;
43
+ fallback: boolean;
44
+ }
45
+
46
+ /**
47
+ * Resolve task-LLM timeout and local→task fallback.
48
+ *
49
+ * New key wins when present (including present-with-`undefined`, which takes
50
+ * the default rather than falling through to the legacy key). Legacy keys are
51
+ * read only when the new key is absent, and warn once per process.
52
+ */
53
+ export function parseTaskLlmConfig(cfg: Record<string, unknown>): ParsedTaskLlmConfig {
54
+ const localTimeoutMs = hasOwnKey(cfg, "localLlmTimeoutMs")
55
+ ? parseBoundedIntegerMs(cfg.localLlmTimeoutMs, DEFAULT_TIMEOUT_MS)
56
+ : DEFAULT_TIMEOUT_MS;
57
+
58
+ let timeoutMs: number;
59
+ if (hasOwnKey(cfg, "taskLlmTimeoutMs")) {
60
+ timeoutMs = parseBoundedIntegerMs(cfg.taskLlmTimeoutMs, DEFAULT_TIMEOUT_MS);
61
+ } else if (hasOwnKey(cfg, "localLlmTimeoutMs")) {
62
+ warnLegacyOnce(
63
+ "localLlmTimeoutMs",
64
+ "taskLlmTimeoutMs",
65
+ "localLlmTimeoutMs remains the local-endpoint timeout; without taskLlmTimeoutMs it also sizes the gateway/task chain.",
66
+ );
67
+ timeoutMs = localTimeoutMs;
68
+ } else {
69
+ timeoutMs = DEFAULT_TIMEOUT_MS;
70
+ }
71
+
72
+ let fallback: boolean;
73
+ if (hasOwnKey(cfg, "taskLlmFallback")) {
74
+ const coerced = coerceBool(cfg.taskLlmFallback, "taskLlmFallback");
75
+ fallback = coerced !== undefined ? coerced : true;
76
+ } else if (hasOwnKey(cfg, "localLlmFallback")) {
77
+ warnLegacyOnce(
78
+ "localLlmFallback",
79
+ "taskLlmFallback",
80
+ "taskLlmFallback is the current name for using the gateway/task chain when the local path fails.",
81
+ );
82
+ fallback = cfg.localLlmFallback !== false;
83
+ } else {
84
+ fallback = true;
85
+ }
86
+
87
+ return { timeoutMs, localTimeoutMs, fallback };
88
+ }