@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
@@ -20,7 +20,9 @@ import { ProfilingCollector } from "../profiling.js";
20
20
  import { trustResultFor, type TrustStageResultItem } from "../trust-score-stage.js";
21
21
  import type { RecallResultFormatter } from "./recall-result-formatter.js";
22
22
  import type { IdentityInjectionMode, PluginConfig, QmdSearchResult } from "../types.js";
23
- import { applyRecallStateViews } from "../recall-state-view-wire.js";
23
+ import { stateViewPacketActive } from "../recall-state-view-anchors.js";
24
+ import { resultStateViewKey, stateViewPacketKeys } from "../recall-state-view.js";
25
+ import { applyRecallStateViews } from "../recall-state-view-wire.js";
24
26
 
25
27
  export interface RecallEntryDeps {
26
28
  appendRecallSection(
@@ -300,6 +302,15 @@ export class RecallEntryCoordinator {
300
302
  );
301
303
  if (injectable.length === 0) return;
302
304
 
305
+ // #2928 — packet-atomic final budgeting: under packet semantics (state
306
+ // view active, no historical asOf pin) rows of one supersession packet
307
+ // share their canonical packet root key, so the section coordinator's
308
+ // character/token cap admits or drops the packet as a unit.
309
+ const packetKeys =
310
+ stateViewPacketActive(options.stateViewActive === true, options.asOfMs)
311
+ ? stateViewPacketKeys(injectable)
312
+ : [];
313
+
303
314
  const formatted = this.deps.recallResultFormatter.formatQmdResultEntries(
304
315
  options.title,
305
316
  injectable,
@@ -324,6 +335,9 @@ export class RecallEntryCoordinator {
324
335
  ...(memoryId ? { memoryId } : {}),
325
336
  ...(result.path ? { memoryPath: result.path } : {}),
326
337
  ...(result.namespace ? { memoryNamespace: result.namespace } : {}),
338
+ ...(packetKeys[index] && resultStateViewKey(result)
339
+ ? { packetKey: packetKeys[index] }
340
+ : {}),
327
341
  },
328
342
  );
329
343
  }
@@ -98,11 +98,8 @@ import {
98
98
  type RecallInvocationOptions,
99
99
  } from "../orchestrator.js";
100
100
  import { isGenericRecallExcludedPath } from "./generic-recall-paths.js";
101
- import {
102
- filterRecentScanMemories,
103
- resolveRecallStateViewFlags,
104
- } from "../recall-state-view-anchors.js";
105
- import { indexStateViewAnnotatedResults } from "../recall-state-view-admission.js";
101
+ import { filterRecentScanMemories } from "../recall-state-view-anchors.js";
102
+ import { indexStateViewAnnotatedResults, resolveRecallStateViewActive } from "../recall-state-view-admission.js";
106
103
  import type { RecallSectionBuckets } from "./recall-section-coordinator.js";
107
104
  import {
108
105
  reconcileRecallResultPartition,
@@ -248,12 +245,9 @@ export class RecallInternalCoordinator {
248
245
  });
249
246
  // #1952 state views: config flag OR per-call override, gated on change intent; computed once for all branches.
250
247
  const retrievalQuery = queryPolicy.retrievalQuery || prompt;
251
- const { stateViewActive, stateViewPacketActive } = resolveRecallStateViewFlags(
252
- options.stateView,
253
- this.deps.config.recallStateViews,
254
- retrievalQuery,
255
- asOfMs,
256
- );
248
+ const stateViewActive = resolveRecallStateViewActive(options, this.deps.config, prompt);
249
+ const stateViewPacketActive =
250
+ stateViewActive === true && !(typeof asOfMs === "number" && Number.isFinite(asOfMs));
257
251
  const retrievalQueryHash = createHash("sha256")
258
252
  .update(retrievalQuery)
259
253
  .digest("hex");
@@ -5049,6 +5043,7 @@ export class RecallInternalCoordinator {
5049
5043
  // Build a path → QmdSearchResult index so we can pull per-result
5050
5044
  // explain data (e.g. reinforcementBoost) from the result that
5051
5045
  // boostSearchResults annotated before surfacing to xray.
5046
+ // #1952: label the captured branch through the same inject-seam annotator.
5052
5047
  const xrayResultByPath = indexStateViewAnnotatedResults(
5053
5048
  xrayRecalledResults, retrievalQuery, this.deps.config, stateViewActive, asOfMs,
5054
5049
  );
@@ -27,6 +27,13 @@ export interface RecallSectionAppendOptions {
27
27
  memoryId?: string;
28
28
  memoryPath?: string;
29
29
  memoryNamespace?: string;
30
+ /**
31
+ * #2928 — state-view packet key (canonical `stateViewPacketKeys` root).
32
+ * Atomic chunks sharing a packetKey are ONE evidence packet: the final
33
+ * budget admits or drops them together, so a historical row can never
34
+ * render without its linked successor. Absent on non-state rows.
35
+ */
36
+ packetKey?: string;
30
37
  }
31
38
 
32
39
  export interface RecallSectionChunk {
@@ -35,6 +42,7 @@ export interface RecallSectionChunk {
35
42
  memoryId?: string;
36
43
  memoryPath?: string;
37
44
  memoryNamespace?: string;
45
+ packetKey?: string;
38
46
  }
39
47
 
40
48
  export type RecallSectionBuckets = Map<
@@ -160,6 +168,7 @@ export class RecallSectionCoordinator {
160
168
  ...(options.memoryNamespace
161
169
  ? { memoryNamespace: options.memoryNamespace }
162
170
  : {}),
171
+ ...(options.packetKey ? { packetKey: options.packetKey } : {}),
163
172
  });
164
173
  } else {
165
174
  existing.push(finalContent);
@@ -454,15 +463,55 @@ export class RecallSectionCoordinator {
454
463
  let includedPostAtomicContent = false;
455
464
  const postAtomicContents: string[] = [];
456
465
  let includedLeadingContent = false;
466
+ // #2928 — state-view packets: atomic chunks sharing a packetKey are
467
+ // ONE evidence packet (a historical row plus its linked successor).
468
+ // The packet renders as a block at the FIRST member's position,
469
+ // members in incoming order, and is admitted or dropped together —
470
+ // the final character/token budget can never emit one side alone.
471
+ // Chunks without a packetKey keep the pre-#2928 per-row behavior.
472
+ const packetFirstIndex = new Map<string, number>();
473
+ const packetMembers = new Map<number, number[]>();
457
474
  for (const [index, chunk] of section.chunks.entries()) {
475
+ if (!chunk.atomic || !chunk.packetKey) continue;
476
+ const first = packetFirstIndex.get(chunk.packetKey);
477
+ if (first === undefined) {
478
+ packetFirstIndex.set(chunk.packetKey, index);
479
+ packetMembers.set(index, [index]);
480
+ } else {
481
+ packetMembers.get(first)!.push(index);
482
+ }
483
+ }
484
+ const admitMemoryRefs = (memberIndexes: readonly number[]): void => {
485
+ for (const memberIndex of memberIndexes) {
486
+ const member = section.chunks[memberIndex]!;
487
+ if (member.memoryId && member.memoryPath) {
488
+ includedMemories.push(
489
+ member.memoryNamespace
490
+ ? { id: member.memoryId, path: member.memoryPath, namespace: member.memoryNamespace }
491
+ : { id: member.memoryId, path: member.memoryPath },
492
+ );
493
+ }
494
+ }
495
+ };
496
+ for (const [index, chunk] of section.chunks.entries()) {
497
+ const members = chunk.atomic ? packetMembers.get(index) : undefined;
498
+ if (chunk.atomic && chunk.packetKey && members === undefined) {
499
+ // Non-first packet member: decided with its block at the first
500
+ // member's position — never admitted alone (#2928).
501
+ continue;
502
+ }
503
+ const memberIndexes = members ?? [index];
504
+ const content = members
505
+ ? members.map((memberIndex) => section.chunks[memberIndex]!.content).join("\n\n")
506
+ : chunk.content;
458
507
  if (
459
508
  !chunk.atomic &&
460
509
  includedAtomicCount === 0 &&
461
510
  index < firstAtomicIndex
462
511
  ) {
463
512
  const candidate = rendered
464
- ? `${rendered}\n\n${chunk.content}`
465
- : chunk.content;
513
+ ? `${rendered}\n\n${content}`
514
+ : content;
466
515
  if (
467
516
  candidate.length <= allocatedSectionAvailable &&
468
517
  estimateTokenCount(candidate) <= allocatedTokenAvailable
@@ -476,8 +525,8 @@ export class RecallSectionCoordinator {
476
525
  }
477
526
 
478
527
  const candidate = rendered
479
- ? `${rendered}\n\n${chunk.content}`
480
- : chunk.content;
528
+ ? `${rendered}\n\n${content}`
529
+ : content;
481
530
  if (
482
531
  candidate.length > allocatedSectionAvailable ||
483
532
  estimateTokenCount(candidate) > allocatedTokenAvailable
@@ -486,32 +535,26 @@ export class RecallSectionCoordinator {
486
535
  chunk.atomic &&
487
536
  includedAtomicCount === 0 &&
488
537
  includedLeadingContent &&
489
- chunk.content.length <= allocatedSectionAvailable &&
490
- estimateTokenCount(chunk.content) <= allocatedTokenAvailable
538
+ content.length <= allocatedSectionAvailable &&
539
+ estimateTokenCount(content) <= allocatedTokenAvailable
491
540
  ) {
492
- rendered = chunk.content;
541
+ rendered = content;
493
542
  includedLeadingContent = false;
494
- includedAtomicCount = 1;
495
- if (chunk.memoryId && chunk.memoryPath) {
496
- includedMemories.push(
497
- chunk.memoryNamespace
498
- ? { id: chunk.memoryId, path: chunk.memoryPath, namespace: chunk.memoryNamespace }
499
- : { id: chunk.memoryId, path: chunk.memoryPath },
500
- );
501
- }
543
+ includedAtomicCount += memberIndexes.length;
544
+ admitMemoryRefs(memberIndexes);
502
545
  continue;
503
546
  }
504
547
  if (
505
548
  !chunk.atomic &&
506
549
  includedAtomicCount === 0 &&
507
550
  includedLeadingContent &&
508
- chunk.content.length <= allocatedSectionAvailable &&
509
- estimateTokenCount(chunk.content) <= allocatedTokenAvailable
551
+ content.length <= allocatedSectionAvailable &&
552
+ estimateTokenCount(content) <= allocatedTokenAvailable
510
553
  ) {
511
- rendered = chunk.content;
554
+ rendered = content;
512
555
  includedLeadingContent = false;
513
556
  includedPostAtomicContent = true;
514
- postAtomicContents.push(chunk.content);
557
+ postAtomicContents.push(content);
515
558
  continue;
516
559
  }
517
560
  truncated = true;
@@ -520,17 +563,11 @@ export class RecallSectionCoordinator {
520
563
 
521
564
  rendered = candidate;
522
565
  if (chunk.atomic) {
523
- includedAtomicCount += 1;
524
- if (chunk.memoryId && chunk.memoryPath) {
525
- includedMemories.push(
526
- chunk.memoryNamespace
527
- ? { id: chunk.memoryId, path: chunk.memoryPath, namespace: chunk.memoryNamespace }
528
- : { id: chunk.memoryId, path: chunk.memoryPath },
529
- );
530
- }
566
+ includedAtomicCount += memberIndexes.length;
567
+ admitMemoryRefs(memberIndexes);
531
568
  } else {
532
569
  includedPostAtomicContent = true;
533
- postAtomicContents.push(chunk.content);
570
+ postAtomicContents.push(content);
534
571
  }
535
572
  }
536
573
  if (includedAtomicCount === 0) {
@@ -96,8 +96,14 @@ test("default (stateViewActive unset) keeps filtering superseded — zero-diff b
96
96
  const explicitOff = coordinator.filterSearchResultsByRecallSafety(results, memories, {
97
97
  stateViewActive: false,
98
98
  });
99
- assert.deepEqual(baseline.map((r) => r.path), [NEW]);
100
- assert.deepEqual(explicitOff.map((r) => r.path), [NEW]);
99
+ assert.deepEqual(
100
+ baseline.map((r) => r.path),
101
+ [NEW]
102
+ );
103
+ assert.deepEqual(
104
+ explicitOff.map((r) => r.path),
105
+ [NEW]
106
+ );
101
107
  // No chain fields leak onto survivors when the view is off.
102
108
  assert.equal(baseline[0]?.supersededBy, undefined);
103
109
  assert.equal(baseline[0]?.id, undefined);
@@ -17,8 +17,12 @@ import type { GraphEdge, GraphType } from "../graph.js";
17
17
  import { readFile } from "node:fs/promises";
18
18
  import { removeNodeEdgesForRewrite, rollbackNodeEdgeRewrite } from "../graph-jsonl.js";
19
19
  import {
20
- hasCitationForTemplate,
21
- stripCitationForTemplate,
20
+ attachCitation,
21
+ citationTemplateIsDetectable,
22
+ citationTemplatesForMerge,
23
+ lastRecognizedCitationMarker,
24
+ stripRecognizedCitations,
25
+ type CitationContext,
22
26
  } from "../source-attribution.js";
23
27
  import { resolvePipelineProcessingCapabilities } from "../capabilities.js";
24
28
  import { inferMemoryStatus } from "../memory-lifecycle-ledger-utils.js";
@@ -328,27 +332,52 @@ export async function rewriteMergedTargetGraphEdges(
328
332
  }
329
333
  }
330
334
 
335
+ /**
336
+ * Round N+7 (C) + #2916: the citation form of the committed merged body.
337
+ * A liftable incoming marker still wins. The fallback attaches only when
338
+ * the current template can be re-matched later. An already-recognized
339
+ * marker — current, default, or a prior configured format still in
340
+ * history — is left in place so a template change does not duplicate it.
341
+ * All-placeholder templates cannot be stripped, so they are not attached.
342
+ */
343
+ export function committedMergedBody(
344
+ deps: ExtractionPersistDeps,
345
+ mergedContent: string,
346
+ incomingCitedContent: string | undefined,
347
+ incomingCitationContext: Omit<CitationContext, "ts"> | undefined,
348
+ nowIso: string,
349
+ ): string {
350
+ if (resolvePipelineProcessingCapabilities(deps.config).inlineSourceAttribution !== true) {
351
+ return mergedContent;
352
+ }
353
+ const template = deps.config.inlineSourceAttributionFormat;
354
+ const templates = citationTemplatesForMerge(deps.config);
355
+ if (incomingCitedContent !== undefined) {
356
+ const marker = lastRecognizedCitationMarker(incomingCitedContent, templates);
357
+ if (marker) {
358
+ return mergedContent.endsWith(marker) ? mergedContent : `${mergedContent} ${marker}`;
359
+ }
360
+ }
361
+ if (!citationTemplateIsDetectable(template)) return mergedContent;
362
+ if (lastRecognizedCitationMarker(mergedContent, templates)) return mergedContent;
363
+ return attachCitation(
364
+ mergedContent,
365
+ { ...incomingCitationContext, ts: nowIso },
366
+ template,
367
+ );
368
+ }
369
+
331
370
  /**
332
371
  * Round N+2 (C) — the canonical RAW pre-citation merged body for hashing.
333
- * The judge composes mergedContent from the stored target body, which
334
- * carries an appended citation marker when inline source attribution is
335
- * enabled; the ordinary write path hashes `contentHashSource` — the raw
336
- * fact text BEFORE any citation is attached. Hashing the cited body would
337
- * give the merged record a different identity than the equivalent raw
338
- * write (checklist #13), so the configured citation form is stripped
339
- * first, exactly like the write path's `rawChunkedContent`
340
- * canonicalization. Lives in this sibling (extracted from
341
- * semantic-merge-persist.ts) so that file stays within its file-size
342
- * ratchet cap.
372
+ * Strips every recognized citation form (current, default, and any prior
373
+ * configured template still in history). All-placeholder templates are
374
+ * not attached on the merge path, so they never reach this hash input.
343
375
  */
344
376
  export function rawPreCitationMergedBody(deps: ExtractionPersistDeps, mergedContent: string): string {
345
377
  if (resolvePipelineProcessingCapabilities(deps.config).inlineSourceAttribution !== true) {
346
378
  return mergedContent;
347
379
  }
348
- const template = deps.config.inlineSourceAttributionFormat;
349
- return hasCitationForTemplate(mergedContent, template)
350
- ? stripCitationForTemplate(mergedContent, template)
351
- : mergedContent;
380
+ return stripRecognizedCitations(mergedContent, citationTemplatesForMerge(deps.config));
352
381
  }
353
382
 
354
383
  /**
@@ -28,6 +28,7 @@ import { sanitizeMemoryContent } from "../sanitize.js";
28
28
  import { ContentHashIndex } from "../storage/content-hash-index.js";
29
29
  import type { VersioningConfig } from "../page-versioning.js";
30
30
  import {
31
+ committedMergedBody,
31
32
  committedMergedFactHash,
32
33
  discardMergedTargetSnapshot,
33
34
  finalizeMergedVersionPrune,
@@ -57,13 +58,10 @@ import { REFUSED_MERGE_CATEGORIES } from "../dedup/merge-on-write.js";
57
58
  import { inferMemoryStatus } from "../memory-lifecycle-ledger-utils.js";
58
59
  import { inferIntentFromText } from "../intent.js";
59
60
  import {
60
- hasCitationForTemplate,
61
- lastCitationMarkerForTemplate,
62
- stripCitationForTemplate,
61
+ type CitationContext,
63
62
  } from "../source-attribution.js";
64
63
  import {
65
64
  resolveConversationContextCapabilities,
66
- resolvePipelineProcessingCapabilities,
67
65
  resolvePresentationCapabilities,
68
66
  resolveRecallAuxiliaryCapabilities,
69
67
  type GraphConstructionCapabilitySet,
@@ -225,6 +223,14 @@ export interface ApplySemanticMergeOptions {
225
223
  * Absent (or citation-free) commits the judge's merged body unchanged.
226
224
  */
227
225
  incomingCitedContent?: string;
226
+ /**
227
+ * #2916: the citation context of THIS write (agent/session) — the same
228
+ * base a fresh attributed write stamps. When no incoming citation marker
229
+ * is liftable, the committed merged body still receives the configured
230
+ * inline-attribution transform exactly as a fresh attributed write would,
231
+ * stamped with this context and the merge's commit timestamp.
232
+ */
233
+ incomingCitationContext?: Omit<CitationContext, "ts">;
228
234
  /**
229
235
  * Finding C: async probe run after a merge verdict but before any
230
236
  * mutation. True when the would-be target already has promoted
@@ -470,33 +476,6 @@ export function createPathMergeParity(input: {
470
476
  };
471
477
  }
472
478
 
473
- /**
474
- * Round N+7 (C): the committed merged body carries the incoming extraction's
475
- * citation marker (lifted from the caller's cited body for this write)
476
- * appended after the judge's merged text, so incoming claims stay attributed
477
- * even when the merged text embeds the target's older citation — quoted
478
- * excerpts travel without frontmatter, so `sources` alone is not enough.
479
- * Idempotent; a no-op when attribution is off or no marker exists.
480
- */
481
- function committedMergedBody(
482
- deps: ExtractionPersistDeps,
483
- mergedContent: string,
484
- incomingCitedContent: string | undefined,
485
- ): string {
486
- if (
487
- resolvePipelineProcessingCapabilities(deps.config).inlineSourceAttribution !== true ||
488
- incomingCitedContent === undefined
489
- ) {
490
- return mergedContent;
491
- }
492
- const marker = lastCitationMarkerForTemplate(
493
- incomingCitedContent,
494
- deps.config.inlineSourceAttributionFormat,
495
- );
496
- if (!marker || mergedContent.endsWith(marker)) return mergedContent;
497
- return `${mergedContent} ${marker}`;
498
- }
499
-
500
479
  function versioningConfigFrom(deps: ExtractionPersistDeps): VersioningConfig {
501
480
  return {
502
481
  enabled: resolveRecallAuxiliaryCapabilities(deps.config).versioning,
@@ -611,10 +590,19 @@ export async function applySemanticMergeAtPersist(
611
590
  if (target.content !== decision.targetContent) {
612
591
  return { action: "created", reason: "target_changed" };
613
592
  }
614
- // Round N+7 (C): every mutation below commits THIS body — the judge's
615
- // merged text plus the incoming citation marker — and the outcome reports
616
- // it, so caller comparisons describe what storage actually holds.
617
- const committedContent = committedMergedBody(deps, decision.mergedContent, options.incomingCitedContent);
593
+ // Round N+7 (C) + #2916: every mutation below commits THIS body — the
594
+ // judge's merged text in its cited form (the incoming marker when one is
595
+ // liftable, else the configured transform as a fresh attributed write
596
+ // applies it) — and the outcome reports it, so caller comparisons
597
+ // describe what storage actually holds.
598
+ const nowIso = (options.now ? options.now() : new Date()).toISOString();
599
+ const committedContent = committedMergedBody(
600
+ deps,
601
+ decision.mergedContent,
602
+ options.incomingCitedContent,
603
+ options.incomingCitationContext,
604
+ nowIso,
605
+ );
618
606
 
619
607
  // Create-path parity gate (final round) — ONE place enumerates every
620
608
  // trust/scope/verdict field the normal write stamps and bypasses the
@@ -714,7 +702,6 @@ export async function applySemanticMergeAtPersist(
714
702
  // snapshot just read: a writer landing between the read and the write must
715
703
  // win rather than be overwritten from a stale body. The active-target check
716
704
  // above makes a tombstone block structurally impossible here.
717
- const nowIso = (options.now ? options.now() : new Date()).toISOString();
718
705
  let casRevision: string | undefined; // #2813 (P1): OUR content CAS's receipt — feeds the patch stamp below and the catch's rollback comparison
719
706
  let mergePatch: MergeFrontmatterUpdate | undefined;
720
707
  try {
@@ -4,7 +4,9 @@
4
4
  * within its file-size ratchet. Everything here derives from the re-read
5
5
  * COMMITTED record; nothing reads the incoming extraction.
6
6
  */
7
-
7
+ import { createHash } from "node:crypto";
8
+ import { readFile } from "node:fs/promises";
9
+ import { canonicalSemanticFileText } from "../storage/cas-revision-store.js";
8
10
  import { parseOriginClass } from "../security/origin-authority.js";
9
11
  import { log } from "../logger.js";
10
12
  import { inferMemoryStatus } from "../memory-lifecycle-ledger-utils.js";
@@ -76,6 +78,15 @@ export interface MergedTargetPromotionPayload {
76
78
  committedRevision?: string;
77
79
  /** #2813 (P1 B): sha256 hex digest of the durable memory file when committed. */
78
80
  committedDigest?: string;
81
+ /** #2870: canonical SEMANTIC fingerprint of the durable file at
82
+ * payload-build time — access telemetry (`accessCount`/`lastAccessed`)
83
+ * excluded, the same exclusion set `invalidationCommitFingerprint`
84
+ * applies. The final guard re-reads the file and compares THIS, not the
85
+ * byte digest: an access-tracking flush between build and promotion
86
+ * leaves it equal (the flush mints no receipt and touches no semantic
87
+ * line), while any body/confidence/provenance/scope/tags/status change
88
+ * makes it differ. */
89
+ committedSemanticFingerprint?: string;
79
90
  }
80
91
 
81
92
  /**
@@ -151,13 +162,22 @@ export async function buildMergedTargetPromotionPayload(
151
162
  return { payload: null, readFailed: false };
152
163
  }
153
164
  const fm = committed.frontmatter;
154
- // #2813 (P1 B): promotion reads record metadata and digest, then receipt.
155
- // Compare record snapshot digest to receipt's committed digest to catch
156
- // interleaving metadata writers with same body/new metadata.
165
+ // #2870: bind to the record's SEMANTIC identity, not its bytes. The
166
+ // receipt's committed semantic fingerprint — the durable file with the
167
+ // access-telemetry keys (`accessCount:`, `lastAccessed:`) stripped, the
168
+ // same exclusion set `invalidationCommitFingerprint` applies — stays
169
+ // equal across an access-tracking flush (which rewrites exactly those
170
+ // two lines without minting a receipt), so a flush between the merge
171
+ // commit and this reread no longer blocks a valid promotion. Any other
172
+ // frontmatter or body change still refuses. Shards recorded before
173
+ // #2870 carry no stored semantic fingerprint; those keep the stricter
174
+ // full-digest comparison until the next semantic write re-records the
175
+ // shard.
157
176
  const snapshotDigest =
158
177
  typeof storage.readDurableFileDigest === "function"
159
178
  ? await storage.readDurableFileDigest(committed.path).catch(() => null)
160
179
  : null;
180
+ const snapshotSemanticFingerprint = await readDurableSemanticFingerprint(committed.path);
161
181
  const receipt = await readPromotionReceiptStatus(storage, committed.path);
162
182
  if (!receipt.available) {
163
183
  log.warn(
@@ -165,7 +185,22 @@ export async function buildMergedTargetPromotionPayload(
165
185
  );
166
186
  return { payload: null, readFailed: true };
167
187
  }
168
- if (receipt.committedDigest !== undefined && snapshotDigest !== receipt.committedDigest) {
188
+ if (
189
+ receipt.committedSemanticFingerprint !== undefined &&
190
+ snapshotSemanticFingerprint !== receipt.committedSemanticFingerprint
191
+ ) {
192
+ log.warn(
193
+ snapshotSemanticFingerprint == null
194
+ ? `semantic-merge: merged-target promotion refused for ${merge.targetId} — the semantic snapshot fingerprint is unavailable while the CAS receipt carries ${receipt.committedSemanticFingerprint}; promotion and reconciliation retry on the next merge`
195
+ : `semantic-merge: merged-target promotion refused for ${merge.targetId} — record semantic fingerprint (${snapshotSemanticFingerprint}) does not match committed receipt fingerprint (${receipt.committedSemanticFingerprint}); record metadata was mutated concurrently`,
196
+ );
197
+ return { payload: null, readFailed: true };
198
+ }
199
+ if (
200
+ receipt.committedSemanticFingerprint === undefined &&
201
+ receipt.committedDigest !== undefined &&
202
+ snapshotDigest !== receipt.committedDigest
203
+ ) {
169
204
  log.warn(
170
205
  snapshotDigest == null
171
206
  ? `semantic-merge: merged-target promotion refused for ${merge.targetId} — the record snapshot digest is unavailable while the CAS receipt carries committed digest ${receipt.committedDigest}; promotion and reconciliation retry on the next merge`
@@ -210,11 +245,30 @@ export async function buildMergedTargetPromotionPayload(
210
245
  : snapshotDigest !== null
211
246
  ? { committedDigest: snapshotDigest }
212
247
  : {}),
248
+ ...(receipt.committedSemanticFingerprint !== undefined
249
+ ? { committedSemanticFingerprint: receipt.committedSemanticFingerprint }
250
+ : snapshotSemanticFingerprint !== null
251
+ ? { committedSemanticFingerprint: snapshotSemanticFingerprint }
252
+ : {}),
213
253
  },
214
254
  readFailed: false,
215
255
  };
216
256
  }
217
257
 
258
+ /** #2870: canonical SEMANTIC fingerprint of a durable file's CURRENT
259
+ * bytes — the file text with access telemetry stripped
260
+ * ({@link canonicalSemanticFileText}), hashed exactly the way the CAS
261
+ * receipt records it at commit time. Null when the file cannot be read
262
+ * (fail-open, like readDurableFileDigest). */
263
+ export async function readDurableSemanticFingerprint(filePath: string): Promise<string | null> {
264
+ try {
265
+ return createHash("sha256")
266
+ .update(canonicalSemanticFileText(await readFile(filePath, "utf8")))
267
+ .digest("hex");
268
+ } catch {
269
+ return null;
270
+ }
271
+ }
218
272
  /** #2813 (P1 A): read the standing receipt as a three-way truth for the
219
273
  * promotion path. Present and absent are usable identities (absent = the
220
274
  * target predates the sidecar); unavailable is not. A storage whose status
@@ -223,7 +277,7 @@ export async function readPromotionReceiptStatus(
223
277
  storage: Pick<StorageManager, "readCasRevisionStatus">,
224
278
  filePath: string,
225
279
  ): Promise<
226
- | { available: true; revision: string | undefined; committedDigest?: string }
280
+ | { available: true; revision: string | undefined; committedDigest?: string; committedSemanticFingerprint?: string }
227
281
  | { available: false; reason: string }
228
282
  > {
229
283
  try {
@@ -233,6 +287,8 @@ export async function readPromotionReceiptStatus(
233
287
  available: true,
234
288
  revision: status.status === "present" ? status.revision : undefined,
235
289
  committedDigest: status.status === "present" ? status.committedDigest : undefined,
290
+ committedSemanticFingerprint:
291
+ status.status === "present" ? status.committedSemanticFingerprint : undefined,
236
292
  };
237
293
  } catch (err) {
238
294
  return { available: false, reason: err instanceof Error ? err.message : String(err) };
@@ -0,0 +1,85 @@
1
+ import { log } from "../logger.js";
2
+ import {
3
+ qmdStartupCollectionCheckTimeoutMs,
4
+ type SearchCollectionState,
5
+ } from "./orchestrator-helpers.js";
6
+
7
+ export interface QmdStartupCollectionCheckResult {
8
+ namespace: string;
9
+ state: SearchCollectionState;
10
+ }
11
+
12
+ export interface StartupDiscovery<T> {
13
+ value: T;
14
+ complete: boolean;
15
+ }
16
+
17
+ /**
18
+ * Bound any startup discovery that must not hold a readiness gate forever.
19
+ * Discovery APIs such as the namespace catalog do not accept an AbortSignal,
20
+ * so a late result is deliberately ignored after the configured fallback wins.
21
+ */
22
+ export async function startupDiscoveryWithTimeout<T>(
23
+ discover: () => Promise<T>,
24
+ configuredFallback: T,
25
+ timeoutMs = qmdStartupCollectionCheckTimeoutMs(),
26
+ ): Promise<StartupDiscovery<T>> {
27
+ let timer: NodeJS.Timeout | undefined;
28
+ const fallback: StartupDiscovery<T> = {
29
+ value: configuredFallback,
30
+ complete: false,
31
+ };
32
+ const timeoutPromise = new Promise<StartupDiscovery<T>>((resolve) => {
33
+ timer = setTimeout(() => {
34
+ log.warn(
35
+ `startup discovery timed out after ${timeoutMs}ms; using configured fallback fail-open`,
36
+ );
37
+ resolve(fallback);
38
+ }, timeoutMs);
39
+ });
40
+ try {
41
+ return await Promise.race([
42
+ Promise.resolve()
43
+ .then(discover)
44
+ .then((value) => ({ value, complete: true })),
45
+ timeoutPromise,
46
+ ]);
47
+ } finally {
48
+ if (timer) clearTimeout(timer);
49
+ }
50
+ }
51
+
52
+ /**
53
+ * Bound the complete startup collection-check batch, not just each individual
54
+ * check. This preserves service availability when a backend ignores an abort
55
+ * signal or a check promise never settles: startup continues with fail-open
56
+ * `unknown` states and the normal background retry path can repair search.
57
+ */
58
+ export async function qmdStartupCollectionChecksWithTimeout(
59
+ checks: readonly Promise<QmdStartupCollectionCheckResult>[],
60
+ namespaces: readonly string[],
61
+ timeoutMs = qmdStartupCollectionCheckTimeoutMs() + 1_000,
62
+ ): Promise<QmdStartupCollectionCheckResult[]> {
63
+ if (checks.length === 0) return [];
64
+ const settled = new Map<string, QmdStartupCollectionCheckResult>();
65
+ const trackedChecks = checks.map((check) => check.then((result) => {
66
+ settled.set(result.namespace, result);
67
+ return result;
68
+ }));
69
+ let timer: NodeJS.Timeout | undefined;
70
+ const timeoutPromise = new Promise<QmdStartupCollectionCheckResult[]>((resolve) => {
71
+ timer = setTimeout(() => {
72
+ log.warn(
73
+ `QMD startup collection check batch timed out after ${timeoutMs}ms; keeping search enabled fail-open`,
74
+ );
75
+ resolve(namespaces.map((namespace) =>
76
+ settled.get(namespace) ?? { namespace, state: "unknown" as const },
77
+ ));
78
+ }, timeoutMs);
79
+ });
80
+ try {
81
+ return await Promise.race([Promise.all(trackedChecks), timeoutPromise]);
82
+ } finally {
83
+ if (timer) clearTimeout(timer);
84
+ }
85
+ }
@@ -2770,6 +2770,11 @@ test("deferredInitialize startup sync covers cataloged dynamic namespaces (NHZEV
2770
2770
  const orchestrator = Object.create(Orchestrator.prototype) as any;
2771
2771
  let updateArg: string[] | undefined;
2772
2772
  const abortController = new AbortController();
2773
+ // #2980 fences startup work by lifecycle epoch: deferredInitialize() now
2774
+ // begins an epoch that resets the gate fields the selfDeps seam fail-fasts
2775
+ // on (PR #1801 set-trap contract). Prototype fakes must declare them.
2776
+ orchestrator.deferredInitAbort = null;
2777
+ orchestrator.deferredSyncSucceeded = false;
2773
2778
  const memoryDir = path.join(os.tmpdir(), "remnic-startup-maintenance-nhzev");
2774
2779
  const dynamicNamespace = "project-origin-dynamic";
2775
2780
  const dynamicStorageDir = path.join(
@@ -2838,6 +2843,8 @@ test("deferredInitialize startup sync falls back to configured set on catalog re
2838
2843
  const orchestrator = Object.create(Orchestrator.prototype) as any;
2839
2844
  let updateArg: string[] | undefined;
2840
2845
  const abortController = new AbortController();
2846
+ orchestrator.deferredInitAbort = null;
2847
+ orchestrator.deferredSyncSucceeded = false;
2841
2848
 
2842
2849
  orchestrator.config = {
2843
2850
  namespacesEnabled: true,