@remnic/core 9.69.33 → 9.69.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (759) hide show
  1. package/dist/access-admin-ops-surface.d.ts +13 -11
  2. package/dist/access-admin-ops-surface.js +61 -56
  3. package/dist/access-authorization-probe.d.ts +13 -11
  4. package/dist/access-authorization-probe.js +62 -57
  5. package/dist/access-boundary.d.ts +13 -11
  6. package/dist/access-boundary.js +61 -56
  7. package/dist/access-cli.js +129 -125
  8. package/dist/access-cli.js.map +1 -1
  9. package/dist/access-coding-context-resolution.d.ts +2 -1
  10. package/dist/access-coding-context-resolution.js +3 -3
  11. package/dist/access-extraction-force-flush.d.ts +13 -11
  12. package/dist/access-extraction-force-flush.js +61 -56
  13. package/dist/access-health-types.d.ts +2 -1
  14. package/dist/access-http-briefing.d.ts +13 -11
  15. package/dist/access-http-briefing.js +62 -57
  16. package/dist/access-http-lcm-compaction.d.ts +13 -11
  17. package/dist/access-http-lifecycle-flush.d.ts +13 -11
  18. package/dist/access-http-offline-stream.d.ts +13 -11
  19. package/dist/access-http-query.d.ts +3 -2
  20. package/dist/access-http-query.js +63 -58
  21. package/dist/access-http.d.ts +14 -12
  22. package/dist/access-http.js +82 -78
  23. package/dist/access-identity-continuity-surface.d.ts +11 -9
  24. package/dist/access-identity-continuity-surface.js +61 -56
  25. package/dist/access-lcm-surface.d.ts +13 -11
  26. package/dist/access-lcm-surface.js +61 -56
  27. package/dist/access-mcp.d.ts +13 -11
  28. package/dist/access-mcp.js +70 -66
  29. package/dist/access-memory-search-fanout.d.ts +3 -2
  30. package/dist/{access-namespace-preflight-DMR-jOMS.d.ts → access-namespace-preflight-kXG8MvYx.d.ts} +1 -1
  31. package/dist/access-namespace-preflight.d.ts +4 -3
  32. package/dist/access-namespace-preflight.js +61 -56
  33. package/dist/access-observe-transcript.d.ts +11 -9
  34. package/dist/access-observe-transcript.js +3 -3
  35. package/dist/access-observe-write-surface.d.ts +15 -13
  36. package/dist/access-observe-write-surface.js +61 -56
  37. package/dist/access-offline-manifest.d.ts +47 -11
  38. package/dist/access-offline-manifest.js +18 -16
  39. package/dist/access-operations-batch.js +64 -60
  40. package/dist/access-operations.d.ts +14 -12
  41. package/dist/access-operations.js +69 -65
  42. package/dist/access-recall-concurrency.d.ts +13 -11
  43. package/dist/access-recall-concurrency.js +61 -56
  44. package/dist/access-recall-response.d.ts +13 -11
  45. package/dist/access-recall-response.js +61 -56
  46. package/dist/access-recall-surface.d.ts +13 -11
  47. package/dist/access-recall-surface.js +61 -56
  48. package/dist/access-schema.d.ts +55 -13
  49. package/dist/access-schema.js +15 -1
  50. package/dist/{access-service-CJQoQvRa.d.ts → access-service-WUm2LnXZ.d.ts} +52 -50
  51. package/dist/access-service-helpers.d.ts +13 -11
  52. package/dist/access-service.d.ts +13 -11
  53. package/dist/access-service.js +61 -56
  54. package/dist/access-surface-catalog.d.ts +13 -11
  55. package/dist/access-surface-catalog.js +63 -58
  56. package/dist/access-surface-catalog.js.map +1 -1
  57. package/dist/access-wearables-meetings-surface.d.ts +4 -3
  58. package/dist/action-confidence.d.ts +2 -1
  59. package/dist/active-memory-bridge.d.ts +2 -1
  60. package/dist/active-memory-bridge.js +2 -2
  61. package/dist/active-recall.d.ts +2 -1
  62. package/dist/active-recall.js +12 -10
  63. package/dist/active-recall.js.map +1 -1
  64. package/dist/activity/digest.d.ts +2 -1
  65. package/dist/adapters/index.d.ts +46 -1
  66. package/dist/adapters/index.js +10 -6
  67. package/dist/adapters/registry.js +2 -2
  68. package/dist/ambient-provenance.d.ts +2 -1
  69. package/dist/artifact-search.d.ts +2 -1
  70. package/dist/{auto-sync-NSHLUAQI.js → auto-sync-4YFATLFQ.js} +10 -9
  71. package/dist/{auto-sync-NSHLUAQI.js.map → auto-sync-4YFATLFQ.js.map} +1 -1
  72. package/dist/behavior-learner.d.ts +2 -1
  73. package/dist/behavior-signals.d.ts +2 -1
  74. package/dist/bootstrap.d.ts +11 -9
  75. package/dist/briefing-window.d.ts +3 -2
  76. package/dist/briefing.d.ts +3 -2
  77. package/dist/briefing.js +25 -24
  78. package/dist/buffer-surprise-report.d.ts +2 -1
  79. package/dist/buffer-turn-helpers.d.ts +2 -1
  80. package/dist/buffer.d.ts +3 -2
  81. package/dist/buffer.js +11 -10
  82. package/dist/bulk-import/index.d.ts +4 -3
  83. package/dist/calibration.d.ts +2 -1
  84. package/dist/calibration.js +3 -2
  85. package/dist/calibration.js.map +1 -1
  86. package/dist/capabilities.d.ts +2 -1
  87. package/dist/{capsule-merge-IPG4IOFP.js → capsule-merge-ZCXUPLNJ.js} +2 -2
  88. package/dist/{catalog-8O9KY9eA.d.ts → catalog-BaCx29iv.d.ts} +1 -1
  89. package/dist/causal-behavior.d.ts +2 -1
  90. package/dist/causal-consolidation.d.ts +2 -1
  91. package/dist/causal-consolidation.js +26 -25
  92. package/dist/causal-consolidation.js.map +1 -1
  93. package/dist/causal-trajectory-graph.d.ts +2 -1
  94. package/dist/{chunk-CDKHKZL5.js → chunk-2524MOWK.js} +2 -2
  95. package/dist/{chunk-HVAEXYPL.js → chunk-255PC37A.js} +47 -25
  96. package/dist/chunk-255PC37A.js.map +1 -0
  97. package/dist/{chunk-7BMXZCOT.js → chunk-2AU4D4HQ.js} +3 -3
  98. package/dist/{chunk-LTIZHLV7.js → chunk-2JCA2PQT.js} +2 -2
  99. package/dist/{chunk-XXIHX75O.js → chunk-2UZ5ZH6W.js} +3 -3
  100. package/dist/{chunk-QOIOACIE.js → chunk-326KUXIR.js} +15 -648
  101. package/dist/chunk-326KUXIR.js.map +1 -0
  102. package/dist/{chunk-P3SB5BNT.js → chunk-34QW2LK2.js} +2 -2
  103. package/dist/{chunk-EONF76DT.js → chunk-36UBSLFN.js} +2 -2
  104. package/dist/{chunk-DBQWVT2H.js → chunk-3CBI2ZSA.js} +2 -2
  105. package/dist/{chunk-NZXEK3UF.js → chunk-3Q3N35W7.js} +2 -2
  106. package/dist/{chunk-YYGZJPOK.js → chunk-42DJ235G.js} +2 -2
  107. package/dist/{chunk-TCUKRAMK.js → chunk-4JVQRFZD.js} +7 -7
  108. package/dist/{chunk-22FVR2KE.js → chunk-4MIS4CQW.js} +6 -2
  109. package/dist/chunk-4MIS4CQW.js.map +1 -0
  110. package/dist/{chunk-PYLL63BF.js → chunk-4PB2MBY6.js} +9 -9
  111. package/dist/{chunk-UUQG7HAD.js → chunk-4WCNPQQ5.js} +4 -4
  112. package/dist/{chunk-UGPUYIET.js → chunk-5A7ZUOBA.js} +220 -399
  113. package/dist/chunk-5A7ZUOBA.js.map +1 -0
  114. package/dist/chunk-5HYUUFMQ.js +1280 -0
  115. package/dist/chunk-5HYUUFMQ.js.map +1 -0
  116. package/dist/{chunk-H4VH5VIB.js → chunk-5QBDLMGG.js} +2 -2
  117. package/dist/{chunk-RKBLRTNT.js → chunk-5SDSVX7N.js} +2 -2
  118. package/dist/{chunk-DGGB65KC.js → chunk-5THU7NFP.js} +3 -3
  119. package/dist/{chunk-N7RWREIQ.js → chunk-65RENJGB.js} +6 -1
  120. package/dist/chunk-65RENJGB.js.map +1 -0
  121. package/dist/{chunk-BPJNF7J2.js → chunk-6CCRSQWT.js} +2 -2
  122. package/dist/{chunk-XXE5P6HJ.js → chunk-6XYC7NM4.js} +2 -2
  123. package/dist/{chunk-J7HFPA6O.js → chunk-6YAIN5XJ.js} +2 -2
  124. package/dist/{chunk-I5DZ3WGR.js → chunk-757NP436.js} +3 -3
  125. package/dist/{chunk-2C3S7J2S.js → chunk-7CAY3YKP.js} +741 -28
  126. package/dist/chunk-7CAY3YKP.js.map +1 -0
  127. package/dist/{chunk-E6TDQRF6.js → chunk-7J2CGXG3.js} +2 -2
  128. package/dist/{chunk-BUTCAMJM.js → chunk-A2YQL2FF.js} +5 -5
  129. package/dist/chunk-A5UQ52YQ.js +211 -0
  130. package/dist/chunk-A5UQ52YQ.js.map +1 -0
  131. package/dist/{chunk-X2NFFBTO.js → chunk-A7GQBJP5.js} +4 -4
  132. package/dist/{chunk-R3HKWWUB.js → chunk-A7WOWDZK.js} +2 -2
  133. package/dist/{chunk-6N3TQFZU.js → chunk-AIKTQVV3.js} +3 -3
  134. package/dist/{chunk-CGC5UQCF.js → chunk-AKE4GGQ3.js} +2 -2
  135. package/dist/{chunk-W27OW7AB.js → chunk-APFKZVJS.js} +2 -2
  136. package/dist/{chunk-B325AGLK.js → chunk-AQIRQUCP.js} +2 -2
  137. package/dist/{chunk-S7T2TY65.js → chunk-AXFR2NQ5.js} +3 -3
  138. package/dist/{chunk-FCSZ4K2X.js → chunk-BJJWRWER.js} +3 -3
  139. package/dist/{chunk-JT3EB7ZL.js → chunk-BNGHPYZU.js} +5 -5
  140. package/dist/chunk-BRZWWUCJ.js +13 -0
  141. package/dist/{chunk-FYDW33ZB.js.map → chunk-BRZWWUCJ.js.map} +1 -1
  142. package/dist/{chunk-N57A4KPV.js → chunk-C2BFTYD7.js} +2 -2
  143. package/dist/{chunk-3JVLGJCY.js → chunk-C6KRO3SU.js} +2 -2
  144. package/dist/{chunk-Q726HSJO.js → chunk-CRUFVJOX.js} +16 -15
  145. package/dist/chunk-CRUFVJOX.js.map +1 -0
  146. package/dist/{chunk-X35W4S3L.js → chunk-D3IZCN5P.js} +4 -4
  147. package/dist/{chunk-44T3Y7SZ.js → chunk-EJIEQOPB.js} +5 -5
  148. package/dist/{chunk-ET356KSB.js → chunk-F4TWWUMP.js} +2 -2
  149. package/dist/{chunk-CLLPJ6QT.js → chunk-FQXJAC3T.js} +2 -2
  150. package/dist/{chunk-DD5JFCWM.js → chunk-GCBIXUPT.js} +2 -2
  151. package/dist/{chunk-N2ZNPHA3.js → chunk-IFFLUCCU.js} +2 -2
  152. package/dist/{chunk-RHQMKJFG.js → chunk-ISYZ5DUI.js} +51 -47
  153. package/dist/{chunk-RHQMKJFG.js.map → chunk-ISYZ5DUI.js.map} +1 -1
  154. package/dist/{chunk-PFFZWDPE.js → chunk-JZDH2ZZK.js} +3 -3
  155. package/dist/{chunk-TX2UTLXC.js → chunk-K6IPSW5B.js} +2 -2
  156. package/dist/{chunk-4MHYKEOM.js → chunk-KDJHLOZP.js} +10 -10
  157. package/dist/{chunk-KCB7F4J7.js → chunk-KYGOQV37.js} +2 -2
  158. package/dist/{chunk-JEIXTYVG.js → chunk-L2QLDZJC.js} +46 -17
  159. package/dist/chunk-L2QLDZJC.js.map +1 -0
  160. package/dist/{chunk-A7XEPMQ6.js → chunk-LAVJC57X.js} +3 -3
  161. package/dist/chunk-LAVJC57X.js.map +1 -0
  162. package/dist/{chunk-VZWXFXLX.js → chunk-LMCD5W5B.js} +2 -2
  163. package/dist/{chunk-3QQTXYZ6.js → chunk-LSLCFCCQ.js} +2 -1
  164. package/dist/chunk-LSLCFCCQ.js.map +1 -0
  165. package/dist/{chunk-MKD3OMPS.js → chunk-M3MYMWXG.js} +2 -2
  166. package/dist/{chunk-PL7FYKHT.js → chunk-MMG5K6XJ.js} +2 -2
  167. package/dist/{chunk-VGXM5B4H.js → chunk-MNIPH6LD.js} +2 -2
  168. package/dist/{chunk-E6JA6XWY.js → chunk-ND2O2PVN.js} +1013 -1317
  169. package/dist/chunk-ND2O2PVN.js.map +1 -0
  170. package/dist/chunk-NPNSKE76.js +220 -0
  171. package/dist/chunk-NPNSKE76.js.map +1 -0
  172. package/dist/{chunk-XU6OEECT.js → chunk-OQQXGYMX.js} +3 -3
  173. package/dist/{chunk-DB5TGMLZ.js → chunk-OZUXKUPD.js} +6 -4
  174. package/dist/{chunk-DB5TGMLZ.js.map → chunk-OZUXKUPD.js.map} +1 -1
  175. package/dist/chunk-PCEYGOSL.js +66 -0
  176. package/dist/chunk-PCEYGOSL.js.map +1 -0
  177. package/dist/{chunk-LSYDG6MJ.js → chunk-PEXW2JCK.js} +2 -2
  178. package/dist/{chunk-EEOUMG3J.js → chunk-PWPIERBM.js} +38 -6
  179. package/dist/chunk-PWPIERBM.js.map +1 -0
  180. package/dist/chunk-Q4AUIFUA.js +111 -0
  181. package/dist/chunk-Q4AUIFUA.js.map +1 -0
  182. package/dist/{chunk-SO7SV523.js → chunk-Q6LCCIZN.js} +1 -1
  183. package/dist/chunk-Q6LCCIZN.js.map +1 -0
  184. package/dist/{chunk-MOZXTRC2.js → chunk-QF4J3KMV.js} +19 -19
  185. package/dist/{chunk-JGHXXQ2G.js → chunk-QLJ6762U.js} +2 -2
  186. package/dist/{chunk-XOVKXJEP.js → chunk-R3TLVTWW.js} +3 -3
  187. package/dist/{chunk-CETXNLEX.js → chunk-RQO3J4MR.js} +2 -2
  188. package/dist/{chunk-5NANRSCD.js → chunk-RR7G2X7C.js} +5 -5
  189. package/dist/{chunk-DCJ3YFIC.js → chunk-S2ULTQZR.js} +2 -2
  190. package/dist/{chunk-EQHDH4C2.js → chunk-S76KRJDG.js} +3 -3
  191. package/dist/{chunk-H272ZPQ3.js → chunk-SHEHQBCG.js} +124 -23
  192. package/dist/chunk-SHEHQBCG.js.map +1 -0
  193. package/dist/{chunk-EEC4PCG5.js → chunk-SZDLX763.js} +2 -2
  194. package/dist/{chunk-MFDTVQJX.js → chunk-SZWEDG3H.js} +12 -6
  195. package/dist/chunk-SZWEDG3H.js.map +1 -0
  196. package/dist/{chunk-E2ZHGBAK.js → chunk-T2JSUEH6.js} +2 -2
  197. package/dist/{chunk-JSN44KIB.js → chunk-T2YFZ27G.js} +9 -9
  198. package/dist/{chunk-227UFSEQ.js → chunk-TFA6HPOA.js} +2 -2
  199. package/dist/{chunk-BA6WOZOT.js → chunk-TK4FHQRN.js} +4 -4
  200. package/dist/chunk-TLHNF6GA.js +647 -0
  201. package/dist/chunk-TLHNF6GA.js.map +1 -0
  202. package/dist/{chunk-NB5BCFUY.js → chunk-TWYTGIBR.js} +4 -4
  203. package/dist/{chunk-FDLDOEO6.js → chunk-UBG4GAEP.js} +51 -6
  204. package/dist/chunk-UBG4GAEP.js.map +1 -0
  205. package/dist/{chunk-MWFGUESQ.js → chunk-UEZKN6VR.js} +2 -2
  206. package/dist/{chunk-H5AFCNGA.js → chunk-UJX4I26O.js} +2 -2
  207. package/dist/{chunk-BLUYQFRH.js → chunk-VELCIWJZ.js} +15 -11
  208. package/dist/chunk-VELCIWJZ.js.map +1 -0
  209. package/dist/{chunk-PBGVVDLY.js → chunk-VIZR45AN.js} +2 -2
  210. package/dist/{chunk-ZG74PWRW.js → chunk-VZAKYDMJ.js} +2 -2
  211. package/dist/{chunk-JTH2SE6B.js → chunk-W5BLTZZJ.js} +8 -8
  212. package/dist/chunk-W6IJMWTZ.js +72 -0
  213. package/dist/chunk-W6IJMWTZ.js.map +1 -0
  214. package/dist/{chunk-H3TKENU4.js → chunk-WIKO4SCR.js} +5 -5
  215. package/dist/{chunk-YFLLGRXO.js → chunk-X2QPKLPL.js} +2 -2
  216. package/dist/{chunk-MN3LK3KN.js → chunk-X424T5JQ.js} +2 -2
  217. package/dist/{chunk-5BCNEBEN.js → chunk-XPJNT6PI.js} +4 -4
  218. package/dist/{chunk-2JVJ7UHC.js → chunk-XQU3CPF2.js} +4 -2
  219. package/dist/chunk-XQU3CPF2.js.map +1 -0
  220. package/dist/chunk-XW2T4QAW.js +1 -0
  221. package/dist/{chunk-D223ZDQV.js → chunk-YEDVOYL2.js} +2 -2
  222. package/dist/{chunk-TLPZ6MKZ.js → chunk-YEN4TREG.js} +541 -5
  223. package/dist/chunk-YEN4TREG.js.map +1 -0
  224. package/dist/{chunk-RC5DXXWC.js → chunk-YM7YN37H.js} +2 -2
  225. package/dist/{chunk-VLXBE57O.js → chunk-YVGXH72Y.js} +2 -2
  226. package/dist/{chunk-YQAXP5AC.js → chunk-YXLUTALO.js} +5 -5
  227. package/dist/{chunk-OQDPBRQ6.js → chunk-Z7YDVHDI.js} +2 -2
  228. package/dist/{chunk-O75CRYGF.js → chunk-ZEFVK7XC.js} +1 -1
  229. package/dist/chunk-ZEFVK7XC.js.map +1 -0
  230. package/dist/{chunk-XUE46UYW.js → chunk-ZLN7AROH.js} +6 -6
  231. package/dist/{chunk-HV7OY4DM.js → chunk-ZMKYCFJ7.js} +640 -199
  232. package/dist/chunk-ZMKYCFJ7.js.map +1 -0
  233. package/dist/{chunk-HK32G473.js → chunk-ZWEZXVYH.js} +2 -2
  234. package/dist/{cli-D57e2Mqt.d.ts → cli-5mTYh1Tn.d.ts} +5 -5
  235. package/dist/cli-fallback.d.ts +11 -4
  236. package/dist/cli-fallback.js +5 -1
  237. package/dist/cli.d.ts +15 -13
  238. package/dist/cli.js +102 -98
  239. package/dist/coding/export-okf-codegraph.d.ts +2 -1
  240. package/dist/coding/export-okf-codegraph.js +31 -29
  241. package/dist/coding/export-okf-codegraph.js.map +1 -1
  242. package/dist/coding/pre-action-gate.d.ts +2 -1
  243. package/dist/compat/checks.js +2 -2
  244. package/dist/compat/codex-cli-fallback.d.ts +1 -1
  245. package/dist/compat/codex-cli-fallback.js +5 -1
  246. package/dist/compat/codex-cli-fallback.js.map +1 -1
  247. package/dist/compounding/engine.d.ts +3 -2
  248. package/dist/compounding/engine.js +26 -25
  249. package/dist/compounding/preference-consolidator.d.ts +2 -1
  250. package/dist/compression-optimizer.d.ts +2 -1
  251. package/dist/config.d.ts +2 -1
  252. package/dist/config.js +12 -10
  253. package/dist/connectors/codex-materialize-runner.d.ts +2 -1
  254. package/dist/connectors/codex-materialize-runner.js +25 -24
  255. package/dist/connectors/codex-materialize.d.ts +2 -1
  256. package/dist/connectors/index.d.ts +2 -1
  257. package/dist/connectors/index.js +27 -26
  258. package/dist/consolidation-provenance-check.d.ts +3 -2
  259. package/dist/consolidation-undo.d.ts +3 -2
  260. package/dist/contradiction/index.d.ts +4 -3
  261. package/dist/contradiction/index.js +5 -5
  262. package/dist/{contradiction-scan-NOYMFG66.js → contradiction-scan-GVD4JJ7B.js} +3 -3
  263. package/dist/converge-config.d.ts +2 -1
  264. package/dist/convergence-refresh.d.ts +3 -2
  265. package/dist/convergence-refresh.js +27 -26
  266. package/dist/conversation-index/backend.d.ts +2 -1
  267. package/dist/conversation-index/backend.js +3 -3
  268. package/dist/conversation-index/chunker.d.ts +2 -1
  269. package/dist/conversation-index/faiss-adapter.d.ts +2 -1
  270. package/dist/conversation-index/faiss-adapter.js +2 -2
  271. package/dist/conversation-index/indexer.d.ts +2 -1
  272. package/dist/conversation-index/search.d.ts +2 -1
  273. package/dist/corpus-watermark.d.ts +2 -1
  274. package/dist/corpus-watermark.js +28 -27
  275. package/dist/cross-lingual-recall.d.ts +2 -1
  276. package/dist/day-summary.d.ts +2 -1
  277. package/dist/deep-recall-http-glue.d.ts +13 -11
  278. package/dist/deep-recall-http-glue.js +12 -2
  279. package/dist/deep-recall-mcp-tools.d.ts +13 -11
  280. package/dist/deep-recall-policy-llm.d.ts +2 -1
  281. package/dist/deep-recall-policy-llm.js +4 -3
  282. package/dist/deep-recall-seeds.d.ts +2 -1
  283. package/dist/delinearize.d.ts +2 -1
  284. package/dist/dependency-propagation-config.d.ts +2 -1
  285. package/dist/{dependency-propagation-delivery-CmniEsUK.d.ts → dependency-propagation-delivery-CDQCxNll.d.ts} +1 -1
  286. package/dist/direct-answer-wiring.d.ts +2 -1
  287. package/dist/direct-answer.d.ts +2 -1
  288. package/dist/embedding-fallback.d.ts +2 -1
  289. package/dist/enrichment/index.d.ts +2 -1
  290. package/dist/entity-origin-fields.d.ts +2 -1
  291. package/dist/entity-retrieval.d.ts +3 -2
  292. package/dist/entity-retrieval.js +25 -24
  293. package/dist/entity-schema.d.ts +2 -1
  294. package/dist/episodic-context.d.ts +2 -1
  295. package/dist/eval-trajectory-contracts.d.ts +2 -1
  296. package/dist/eval-trajectory-store.d.ts +2 -1
  297. package/dist/eval-trajectory.d.ts +2 -1
  298. package/dist/explicit-capture.d.ts +11 -9
  299. package/dist/explicit-capture.js +6 -6
  300. package/dist/external-wiki-access.d.ts +13 -11
  301. package/dist/external-wiki-access.js +62 -57
  302. package/dist/external-wiki-collection-registration.d.ts +2 -1
  303. package/dist/external-wiki-collection.d.ts +2 -1
  304. package/dist/external-wiki-mcp-tools.d.ts +13 -11
  305. package/dist/extraction-error-classification.d.ts +2 -1
  306. package/dist/extraction-faithfulness.d.ts +2 -1
  307. package/dist/extraction-faithfulness.js +4 -3
  308. package/dist/extraction-judge-telemetry.d.ts +2 -1
  309. package/dist/extraction-judge-training.d.ts +2 -1
  310. package/dist/extraction-judge.d.ts +2 -1
  311. package/dist/extraction-judge.js +5 -4
  312. package/dist/extraction-liveness.d.ts +2 -1
  313. package/dist/extraction-normalization.d.ts +2 -1
  314. package/dist/extraction-prompt.d.ts +2 -1
  315. package/dist/extraction-source-grounding-rules.d.ts +2 -1
  316. package/dist/extraction-source-grounding.d.ts +2 -1
  317. package/dist/extraction.d.ts +2 -1
  318. package/dist/extraction.js +36 -34
  319. package/dist/fallback-llm.d.ts +2 -1
  320. package/dist/fallback-llm.js +3 -2
  321. package/dist/{first-start-migration-RC345GPL.js → first-start-migration-L3UFX5CU.js} +3 -3
  322. package/dist/generic-recall-paths-CqAZyXKX.d.ts +23 -0
  323. package/dist/graph-append-error.d.ts +2 -1
  324. package/dist/graph-dashboard-diff.d.ts +2 -1
  325. package/dist/graph-dashboard-key.d.ts +2 -1
  326. package/dist/graph-dashboard-parser.d.ts +2 -1
  327. package/dist/graph-edge-reinforcement.d.ts +2 -1
  328. package/dist/graph-jsonl.d.ts +2 -1
  329. package/dist/graph-path-reconstruction.d.ts +2 -1
  330. package/dist/graph-path-scoring.d.ts +2 -1
  331. package/dist/graph-snapshot.d.ts +2 -1
  332. package/dist/graph.d.ts +2 -1
  333. package/dist/harmonic-retrieval.js +2 -2
  334. package/dist/importance.d.ts +2 -1
  335. package/dist/importers/index.d.ts +2 -1
  336. package/dist/importers/test-utils.d.ts +2 -1
  337. package/dist/in-flight-reads.d.ts +2 -1
  338. package/dist/{index-BTAsSkPG.d.ts → index-BNluTxBp.d.ts} +2 -2
  339. package/dist/index.d.ts +302 -245
  340. package/dist/index.js +307 -205
  341. package/dist/intent.d.ts +2 -1
  342. package/dist/lcm/engine.d.ts +2 -1
  343. package/dist/lcm/engine.js +2 -2
  344. package/dist/lcm/index.d.ts +2 -1
  345. package/dist/lcm/index.js +4 -4
  346. package/dist/lcm/tools.d.ts +2 -1
  347. package/dist/lifecycle.d.ts +2 -1
  348. package/dist/live-connectors-runner.d.ts +2 -1
  349. package/dist/local-llm.d.ts +4 -1
  350. package/dist/local-llm.js +2 -2
  351. package/dist/local-model-endpoint.d.ts +2 -1
  352. package/dist/location/index.d.ts +4 -3
  353. package/dist/location/index.js +28 -27
  354. package/dist/maintenance/memory-governance.d.ts +2 -1
  355. package/dist/maintenance/memory-governance.js +25 -24
  356. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +3 -2
  357. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +25 -24
  358. package/dist/maintenance/rebuild-memory-projection.d.ts +3 -2
  359. package/dist/maintenance/rebuild-memory-projection.js +26 -25
  360. package/dist/{maintenance-DCvQGTzL.d.ts → maintenance-8hmWOMY_.d.ts} +378 -4
  361. package/dist/mcp-memory-inspector-app.d.ts +13 -11
  362. package/dist/memory-action-policy.d.ts +2 -1
  363. package/dist/memory-cache.d.ts +2 -1
  364. package/dist/memory-controller.d.ts +2 -1
  365. package/dist/memory-lifecycle-ledger-utils.d.ts +2 -1
  366. package/dist/memory-projection-store.d.ts +2 -1
  367. package/dist/memory-provenance.d.ts +2 -1
  368. package/dist/memory-snapshot.d.ts +2 -1
  369. package/dist/memory-subject-cli.d.ts +13 -11
  370. package/dist/memory-subject.d.ts +13 -11
  371. package/dist/memory-worth-outcomes.d.ts +3 -2
  372. package/dist/migrate/from-engram.js +2 -2
  373. package/dist/models-json.d.ts +2 -1
  374. package/dist/namespaces/migrate.d.ts +4 -3
  375. package/dist/namespaces/migrate.js +26 -25
  376. package/dist/namespaces/principal.d.ts +2 -1
  377. package/dist/namespaces/search.d.ts +2 -1
  378. package/dist/namespaces/search.js +8 -8
  379. package/dist/namespaces/storage.d.ts +4 -3
  380. package/dist/namespaces/storage.js +25 -24
  381. package/dist/native-knowledge.d.ts +2 -1
  382. package/dist/network/tailscale.js +2 -2
  383. package/dist/offline-sync-impression-drain.d.ts +2 -1
  384. package/dist/offline-sync-impression-drain.js +6 -6
  385. package/dist/operator-doctor-corpus.d.ts +2 -1
  386. package/dist/operator-doctor-corpus.js +29 -28
  387. package/dist/operator-doctor-replica.d.ts +2 -1
  388. package/dist/operator-toolkit.d.ts +4 -3
  389. package/dist/operator-toolkit.js +43 -41
  390. package/dist/orchestration/compression-guideline-coordinator.d.ts +3 -2
  391. package/dist/orchestration/maintenance.d.ts +5 -4
  392. package/dist/orchestration/maintenance.js +43 -38
  393. package/dist/{orchestrator-CvCsp1tz.d.ts → orchestrator-BUd_3Q86.d.ts} +17 -29
  394. package/dist/orchestrator.d.ts +11 -9
  395. package/dist/orchestrator.js +133 -127
  396. package/dist/patterns-cli.d.ts +2 -1
  397. package/dist/{pipeline-JAdwKBS7.d.ts → pipeline-Dv1Bv0ma.d.ts} +1 -1
  398. package/dist/policy-runtime.d.ts +2 -1
  399. package/dist/proactive-contention.d.ts +2 -1
  400. package/dist/provenance.d.ts +2 -1
  401. package/dist/{public-http-h-yWu9rj.d.ts → public-http-L-IymRBN.d.ts} +1 -1
  402. package/dist/{qmd-Cvw9RWKr.d.ts → qmd-Mj508lHA.d.ts} +1 -1
  403. package/dist/qmd-preflight.d.ts +3 -2
  404. package/dist/qmd-recall-cache.d.ts +2 -1
  405. package/dist/qmd.d.ts +3 -2
  406. package/dist/qmd.js +2 -2
  407. package/dist/recall-concurrency-config.d.ts +2 -1
  408. package/dist/recall-disclosure-escalation.d.ts +2 -1
  409. package/dist/recall-explain-renderer.d.ts +2 -1
  410. package/dist/recall-explain-renderer.js +3 -3
  411. package/dist/recall-memory-map.d.ts +2 -1
  412. package/dist/recall-navigate-access.d.ts +2 -1
  413. package/dist/recall-navigate-access.js +2 -2
  414. package/dist/recall-navigate-disclosure.d.ts +2 -1
  415. package/dist/recall-navigate-disclosure.js +1 -1
  416. package/dist/recall-navigate.d.ts +2 -1
  417. package/dist/recall-navigate.js +2 -2
  418. package/dist/recall-planner-llm.d.ts +2 -1
  419. package/dist/recall-planner-llm.js +3 -2
  420. package/dist/recall-planner-llm.js.map +1 -1
  421. package/dist/recall-state-view-admission.d.ts +56 -0
  422. package/dist/recall-state-view-admission.js +39 -0
  423. package/dist/recall-state-view-inject.js +2 -2
  424. package/dist/recall-state-view-render.js +2 -2
  425. package/dist/recall-state-view-widen.d.ts +18 -1
  426. package/dist/recall-state-view-widen.js +2 -2
  427. package/dist/recall-state-view-wire.d.ts +1 -1
  428. package/dist/recall-state-view-wire.js +3 -3
  429. package/dist/recall-state-view.d.ts +1 -0
  430. package/dist/recall-state-view.js +1 -1
  431. package/dist/recall-state.d.ts +2 -1
  432. package/dist/recall-tag-filter.d.ts +2 -1
  433. package/dist/recall-timings.d.ts +2 -1
  434. package/dist/recall-xray-cli.d.ts +2 -1
  435. package/dist/recall-xray-cli.js +4 -4
  436. package/dist/recall-xray-renderer.d.ts +2 -1
  437. package/dist/recall-xray-renderer.js +3 -3
  438. package/dist/recall-xray.d.ts +9 -1
  439. package/dist/recall-xray.js +2 -2
  440. package/dist/reconcile/cursor.d.ts +11 -2
  441. package/dist/reconcile/cursor.js +6 -4
  442. package/dist/reconcile/cursor.js.map +1 -1
  443. package/dist/reconcile/manifest.d.ts +37 -2
  444. package/dist/reconcile/manifest.js +15 -5
  445. package/dist/reconcile/plan.d.ts +2 -1
  446. package/dist/replay/normalizers/chatgpt.d.ts +2 -1
  447. package/dist/replay/normalizers/claude.d.ts +2 -1
  448. package/dist/replay/normalizers/openclaw.d.ts +2 -1
  449. package/dist/replay/normalizers/shared.d.ts +2 -1
  450. package/dist/replay/runner.d.ts +2 -1
  451. package/dist/replay/types.d.ts +2 -1
  452. package/dist/replica-divergence.d.ts +2 -1
  453. package/dist/replica-peers-config.d.ts +2 -1
  454. package/dist/{resolution-VKATP2HT.js → resolution-OHJZG45O.js} +6 -6
  455. package/dist/resolution-OHJZG45O.js.map +1 -0
  456. package/dist/resolve-auth-token.d.ts +2 -1
  457. package/dist/resume-bundles.js +13 -11
  458. package/dist/retrieval-agents.d.ts +3 -2
  459. package/dist/retrieval-tiers.d.ts +2 -1
  460. package/dist/routing/engine.d.ts +2 -1
  461. package/dist/routing/store.d.ts +2 -1
  462. package/dist/runtime/child-process.d.ts +1 -1
  463. package/dist/runtime/child-process.js +1 -1
  464. package/dist/salvage-envelope.d.ts +2 -1
  465. package/dist/salvage-envelope.js +2 -2
  466. package/dist/{scope-profiles-BShpTPeV.d.ts → scope-profiles-B6BGVbxm.d.ts} +1 -1
  467. package/dist/search/embed-helper.d.ts +2 -1
  468. package/dist/search/factory.d.ts +2 -1
  469. package/dist/search/factory.js +7 -7
  470. package/dist/search/index.d.ts +2 -1
  471. package/dist/search/index.js +11 -11
  472. package/dist/search/lancedb-backend.d.ts +2 -1
  473. package/dist/search/meilisearch-backend.d.ts +2 -1
  474. package/dist/search/noop-backend.d.ts +2 -1
  475. package/dist/search/orama-backend.d.ts +2 -1
  476. package/dist/search/port.d.ts +2 -1
  477. package/dist/search/remote-backend.d.ts +2 -1
  478. package/dist/{semantic-consolidation-CusOpe9F.d.ts → semantic-consolidation-J-598F5M.d.ts} +1 -1
  479. package/dist/semantic-consolidation.d.ts +3 -2
  480. package/dist/semantic-consolidation.js +26 -25
  481. package/dist/semantic-rule-promotion.js +25 -24
  482. package/dist/semantic-rule-verifier.d.ts +2 -1
  483. package/dist/semantic-rule-verifier.js +25 -24
  484. package/dist/{service-BbuVh1eS.d.ts → service-ZQkJ52cz.d.ts} +2 -2
  485. package/dist/session-observer-bands.d.ts +2 -1
  486. package/dist/session-observer-state.d.ts +2 -1
  487. package/dist/shared-context/manager.d.ts +2 -1
  488. package/dist/signal.d.ts +2 -1
  489. package/dist/source-agent-qualifier.d.ts +2 -1
  490. package/dist/source-agent-qualifier.js +34 -32
  491. package/dist/standup/build.js +25 -24
  492. package/dist/{storage-BBLLuVTF.d.ts → storage-CU_hZUgP.d.ts} +67 -6
  493. package/dist/storage.d.ts +4 -3
  494. package/dist/storage.js +24 -23
  495. package/dist/subject-config.d.ts +2 -1
  496. package/dist/subject-config.js +2 -2
  497. package/dist/summarizer.d.ts +2 -1
  498. package/dist/summarizer.js +5 -5
  499. package/dist/summary-snapshot.d.ts +2 -1
  500. package/dist/support-passport/index.d.ts +49 -15
  501. package/dist/support-passport/index.js +69 -60
  502. package/dist/temporal-supersession.d.ts +3 -2
  503. package/dist/temporal-timeline-recall.d.ts +2 -1
  504. package/dist/temporal-validity.d.ts +2 -1
  505. package/dist/threading.d.ts +2 -1
  506. package/dist/tier-migration.d.ts +3 -2
  507. package/dist/tier-routing.d.ts +2 -1
  508. package/dist/tier-routing.js +2 -2
  509. package/dist/{tier-stats-KA6OZX2C.js → tier-stats-VK5PCO2L.js} +3 -3
  510. package/dist/topics.d.ts +2 -1
  511. package/dist/transcript.d.ts +2 -1
  512. package/dist/transfer/capsule-import.js +1 -1
  513. package/dist/transfer/export-okf.d.ts +2 -1
  514. package/dist/transfer/export-okf.js +26 -25
  515. package/dist/transfer/types.d.ts +24 -24
  516. package/dist/trust-score-stage.d.ts +2 -1
  517. package/dist/trust-score.d.ts +2 -1
  518. package/dist/{types-igV4-sbB.d.ts → types-BGxTvLBO.d.ts} +58 -13
  519. package/dist/types.d.ts +2 -1
  520. package/dist/types.js +1 -1
  521. package/dist/utility-runtime.d.ts +2 -1
  522. package/dist/verified-recall.js +25 -24
  523. package/dist/who-knows-cli.d.ts +13 -11
  524. package/dist/who-knows-cli.js +26 -25
  525. package/dist/who-knows.d.ts +13 -11
  526. package/dist/who-knows.js +25 -24
  527. package/dist/write-envelope.d.ts +4 -2
  528. package/dist/write-envelope.js +3 -1
  529. package/package.json +2 -2
  530. package/src/access-category-alias.test.ts +216 -0
  531. package/src/access-mcp.test.ts +73 -0
  532. package/src/access-mcp.ts +6 -6
  533. package/src/access-observe-write-surface.ts +19 -4
  534. package/src/access-offline-manifest.ts +297 -16
  535. package/src/access-recall-surface.ts +5 -5
  536. package/src/access-schema.ts +76 -7
  537. package/src/access-service.ts +11 -2
  538. package/src/activity/config.test.ts +124 -1
  539. package/src/activity/config.ts +150 -18
  540. package/src/activity/index.ts +3 -0
  541. package/src/activity/journal-extract-storage.test.ts +129 -0
  542. package/src/activity/journal-extract.test.ts +314 -0
  543. package/src/activity/journal-extract.ts +247 -0
  544. package/src/activity/journal-heading.test.ts +24 -1
  545. package/src/activity/journal-heading.ts +36 -0
  546. package/src/activity/journal-read.test.ts +242 -0
  547. package/src/activity/journal-read.ts +183 -0
  548. package/src/activity/journal-source.test.ts +15 -15
  549. package/src/activity/journal-source.ts +21 -14
  550. package/src/activity/journal-state.lock-worker.ts +30 -0
  551. package/src/activity/journal-state.test.ts +144 -0
  552. package/src/activity/journal-state.ts +107 -0
  553. package/src/activity/journal-strip.test.ts +106 -52
  554. package/src/activity/journal-strip.ts +35 -10
  555. package/src/activity/journal-vault-integration.test.ts +230 -0
  556. package/src/activity/journal-vault-provenance.test.ts +9 -7
  557. package/src/activity/journal-vault-provenance.ts +4 -10
  558. package/src/activity/journal-vault-read.test.ts +3 -2
  559. package/src/activity/journal-vault-read.ts +9 -139
  560. package/src/activity/journal.test.ts +74 -23
  561. package/src/activity/runner.test.ts +116 -1
  562. package/src/activity/runner.ts +25 -0
  563. package/src/activity/scheduler.ts +4 -0
  564. package/src/activity/store.test.ts +18 -0
  565. package/src/activity/store.ts +14 -0
  566. package/src/activity/sync-registration.ts +4 -0
  567. package/src/activity/timeline/analysis-metadata.ts +2 -0
  568. package/src/activity/timeline/analysis-provider.ts +140 -0
  569. package/src/activity/timeline/analysis-run.test.ts +419 -0
  570. package/src/activity/timeline/analysis-run.ts +106 -0
  571. package/src/activity/timeline/analysis.ts +66 -37
  572. package/src/activity/timeline/corrections.ts +9 -0
  573. package/src/activity/timeline/index.ts +3 -0
  574. package/src/activity/timeline/query.test.ts +71 -0
  575. package/src/activity/timeline/query.ts +57 -8
  576. package/src/activity/timeline/regenerate.test.ts +505 -0
  577. package/src/activity/timeline/regenerate.ts +373 -0
  578. package/src/activity/types.ts +40 -5
  579. package/src/adapters/grok-opencode.test.ts +146 -0
  580. package/src/adapters/grok.ts +53 -0
  581. package/src/adapters/index.ts +2 -0
  582. package/src/adapters/opencode.ts +52 -0
  583. package/src/adapters/registry.ts +4 -0
  584. package/src/cli-fallback.ts +13 -4
  585. package/src/config.test.ts +3 -1
  586. package/src/config.ts +4 -0
  587. package/src/dedup/merge.test.ts +732 -25
  588. package/src/fallback-llm.test.ts +53 -0
  589. package/src/fallback-llm.ts +12 -0
  590. package/src/index.ts +2 -0
  591. package/src/local-llm.ts +3 -1
  592. package/src/orchestration/dependency-propagation-recovery-replay.ts +1 -1
  593. package/src/orchestration/extraction-persist-deps.ts +9 -0
  594. package/src/orchestration/extraction-persist-promotion.test.ts +265 -6
  595. package/src/orchestration/extraction-persist-promotion.ts +42 -3
  596. package/src/orchestration/extraction-persist.ts +3 -3
  597. package/src/orchestration/harmonic-construction-persist.test.ts +115 -4
  598. package/src/orchestration/harmonic-construction-persist.ts +34 -6
  599. package/src/orchestration/maintenance.ts +1 -0
  600. package/src/orchestration/orchestrator-helpers.ts +6 -0
  601. package/src/orchestration/recall-entry.ts +16 -0
  602. package/src/orchestration/recall-internal-deps.ts +14 -0
  603. package/src/orchestration/recall-internal.ts +41 -58
  604. package/src/orchestration/recall-result-formatter.ts +11 -1
  605. package/src/orchestration/recall-search-pipeline.ts +121 -11
  606. package/src/orchestration/recall-state-view-pipeline.test.ts +211 -0
  607. package/src/orchestration/semantic-merge-commit-effects.ts +76 -17
  608. package/src/orchestration/semantic-merge-persist.ts +121 -16
  609. package/src/orchestration/semantic-merge-promotion-payload.ts +133 -54
  610. package/src/orchestrator.ts +7 -35
  611. package/src/providers/codex-subscription.test.ts +666 -0
  612. package/src/providers/codex-subscription.ts +743 -0
  613. package/src/recall-disclosure.test.ts +20 -0
  614. package/src/recall-state-view-admission.ts +114 -0
  615. package/src/recall-state-view-asof.test.ts +176 -0
  616. package/src/recall-state-view-call.test.ts +175 -0
  617. package/src/recall-state-view-config.test.ts +16 -0
  618. package/src/recall-state-view-widen.test.ts +70 -0
  619. package/src/recall-state-view-widen.ts +28 -7
  620. package/src/recall-state-view-wire.ts +3 -1
  621. package/src/recall-state-view-zero-diff.test.ts +20 -11
  622. package/src/recall-state-view.test.ts +142 -0
  623. package/src/recall-state-view.ts +72 -24
  624. package/src/recall-xray-renderer.test.ts +27 -0
  625. package/src/recall-xray-renderer.ts +4 -0
  626. package/src/recall-xray.ts +13 -0
  627. package/src/reconcile/cursor.ts +23 -33
  628. package/src/reconcile/manifest.ts +96 -11
  629. package/src/reconcile-identity-cache.test.ts +378 -0
  630. package/src/runtime/child-process.ts +1 -1
  631. package/src/storage/cas-revision-host.ts +75 -0
  632. package/src/storage/cas-revision-store.test.ts +459 -0
  633. package/src/storage/cas-revision-store.ts +661 -0
  634. package/src/storage/deletion-revision-store.ts +80 -6
  635. package/src/storage/tombstone-blocked-capture-index.ts +15 -0
  636. package/src/storage/tombstone-blocked-capture-mutation.ts +67 -7
  637. package/src/storage/tombstone-blocked-capture-sync.ts +55 -20
  638. package/src/storage-contract/failure-semantics.test.ts +1 -1
  639. package/src/storage-frontmatter-cas.test.ts +698 -1
  640. package/src/storage-replay.test.ts +166 -3
  641. package/src/storage.ts +41 -41
  642. package/src/support-passport/card-projection.ts +82 -33
  643. package/src/temporal-supersession.test.ts +10 -10
  644. package/src/types.ts +7 -7
  645. package/src/write-envelope.ts +1 -1
  646. package/dist/chunk-22FVR2KE.js.map +0 -1
  647. package/dist/chunk-2C3S7J2S.js.map +0 -1
  648. package/dist/chunk-2JVJ7UHC.js.map +0 -1
  649. package/dist/chunk-2QSZNTDO.js +0 -56
  650. package/dist/chunk-2QSZNTDO.js.map +0 -1
  651. package/dist/chunk-3QQTXYZ6.js.map +0 -1
  652. package/dist/chunk-5VCDKQWQ.js +0 -560
  653. package/dist/chunk-5VCDKQWQ.js.map +0 -1
  654. package/dist/chunk-A7XEPMQ6.js.map +0 -1
  655. package/dist/chunk-BLUYQFRH.js.map +0 -1
  656. package/dist/chunk-E6JA6XWY.js.map +0 -1
  657. package/dist/chunk-EEOUMG3J.js.map +0 -1
  658. package/dist/chunk-FDLDOEO6.js.map +0 -1
  659. package/dist/chunk-FYDW33ZB.js +0 -13
  660. package/dist/chunk-H272ZPQ3.js.map +0 -1
  661. package/dist/chunk-HV7OY4DM.js.map +0 -1
  662. package/dist/chunk-HVAEXYPL.js.map +0 -1
  663. package/dist/chunk-JEIXTYVG.js.map +0 -1
  664. package/dist/chunk-LRICZIGN.js +0 -52
  665. package/dist/chunk-LRICZIGN.js.map +0 -1
  666. package/dist/chunk-MFDTVQJX.js.map +0 -1
  667. package/dist/chunk-N7RWREIQ.js.map +0 -1
  668. package/dist/chunk-O75CRYGF.js.map +0 -1
  669. package/dist/chunk-Q726HSJO.js.map +0 -1
  670. package/dist/chunk-QOIOACIE.js.map +0 -1
  671. package/dist/chunk-SEDEKFYQ.js +0 -1
  672. package/dist/chunk-SO7SV523.js.map +0 -1
  673. package/dist/chunk-TLPZ6MKZ.js.map +0 -1
  674. package/dist/chunk-UGPUYIET.js.map +0 -1
  675. package/src/activity/journal-mode.test.ts +0 -32
  676. package/src/activity/journal-mode.ts +0 -20
  677. /package/dist/{capsule-merge-IPG4IOFP.js.map → capsule-merge-ZCXUPLNJ.js.map} +0 -0
  678. /package/dist/{chunk-CDKHKZL5.js.map → chunk-2524MOWK.js.map} +0 -0
  679. /package/dist/{chunk-7BMXZCOT.js.map → chunk-2AU4D4HQ.js.map} +0 -0
  680. /package/dist/{chunk-LTIZHLV7.js.map → chunk-2JCA2PQT.js.map} +0 -0
  681. /package/dist/{chunk-XXIHX75O.js.map → chunk-2UZ5ZH6W.js.map} +0 -0
  682. /package/dist/{chunk-P3SB5BNT.js.map → chunk-34QW2LK2.js.map} +0 -0
  683. /package/dist/{chunk-EONF76DT.js.map → chunk-36UBSLFN.js.map} +0 -0
  684. /package/dist/{chunk-DBQWVT2H.js.map → chunk-3CBI2ZSA.js.map} +0 -0
  685. /package/dist/{chunk-NZXEK3UF.js.map → chunk-3Q3N35W7.js.map} +0 -0
  686. /package/dist/{chunk-YYGZJPOK.js.map → chunk-42DJ235G.js.map} +0 -0
  687. /package/dist/{chunk-TCUKRAMK.js.map → chunk-4JVQRFZD.js.map} +0 -0
  688. /package/dist/{chunk-PYLL63BF.js.map → chunk-4PB2MBY6.js.map} +0 -0
  689. /package/dist/{chunk-UUQG7HAD.js.map → chunk-4WCNPQQ5.js.map} +0 -0
  690. /package/dist/{chunk-H4VH5VIB.js.map → chunk-5QBDLMGG.js.map} +0 -0
  691. /package/dist/{chunk-RKBLRTNT.js.map → chunk-5SDSVX7N.js.map} +0 -0
  692. /package/dist/{chunk-DGGB65KC.js.map → chunk-5THU7NFP.js.map} +0 -0
  693. /package/dist/{chunk-BPJNF7J2.js.map → chunk-6CCRSQWT.js.map} +0 -0
  694. /package/dist/{chunk-XXE5P6HJ.js.map → chunk-6XYC7NM4.js.map} +0 -0
  695. /package/dist/{chunk-J7HFPA6O.js.map → chunk-6YAIN5XJ.js.map} +0 -0
  696. /package/dist/{chunk-I5DZ3WGR.js.map → chunk-757NP436.js.map} +0 -0
  697. /package/dist/{chunk-E6TDQRF6.js.map → chunk-7J2CGXG3.js.map} +0 -0
  698. /package/dist/{chunk-BUTCAMJM.js.map → chunk-A2YQL2FF.js.map} +0 -0
  699. /package/dist/{chunk-X2NFFBTO.js.map → chunk-A7GQBJP5.js.map} +0 -0
  700. /package/dist/{chunk-R3HKWWUB.js.map → chunk-A7WOWDZK.js.map} +0 -0
  701. /package/dist/{chunk-6N3TQFZU.js.map → chunk-AIKTQVV3.js.map} +0 -0
  702. /package/dist/{chunk-CGC5UQCF.js.map → chunk-AKE4GGQ3.js.map} +0 -0
  703. /package/dist/{chunk-W27OW7AB.js.map → chunk-APFKZVJS.js.map} +0 -0
  704. /package/dist/{chunk-B325AGLK.js.map → chunk-AQIRQUCP.js.map} +0 -0
  705. /package/dist/{chunk-S7T2TY65.js.map → chunk-AXFR2NQ5.js.map} +0 -0
  706. /package/dist/{chunk-FCSZ4K2X.js.map → chunk-BJJWRWER.js.map} +0 -0
  707. /package/dist/{chunk-JT3EB7ZL.js.map → chunk-BNGHPYZU.js.map} +0 -0
  708. /package/dist/{chunk-N57A4KPV.js.map → chunk-C2BFTYD7.js.map} +0 -0
  709. /package/dist/{chunk-3JVLGJCY.js.map → chunk-C6KRO3SU.js.map} +0 -0
  710. /package/dist/{chunk-X35W4S3L.js.map → chunk-D3IZCN5P.js.map} +0 -0
  711. /package/dist/{chunk-44T3Y7SZ.js.map → chunk-EJIEQOPB.js.map} +0 -0
  712. /package/dist/{chunk-ET356KSB.js.map → chunk-F4TWWUMP.js.map} +0 -0
  713. /package/dist/{chunk-CLLPJ6QT.js.map → chunk-FQXJAC3T.js.map} +0 -0
  714. /package/dist/{chunk-DD5JFCWM.js.map → chunk-GCBIXUPT.js.map} +0 -0
  715. /package/dist/{chunk-N2ZNPHA3.js.map → chunk-IFFLUCCU.js.map} +0 -0
  716. /package/dist/{chunk-PFFZWDPE.js.map → chunk-JZDH2ZZK.js.map} +0 -0
  717. /package/dist/{chunk-TX2UTLXC.js.map → chunk-K6IPSW5B.js.map} +0 -0
  718. /package/dist/{chunk-4MHYKEOM.js.map → chunk-KDJHLOZP.js.map} +0 -0
  719. /package/dist/{chunk-KCB7F4J7.js.map → chunk-KYGOQV37.js.map} +0 -0
  720. /package/dist/{chunk-VZWXFXLX.js.map → chunk-LMCD5W5B.js.map} +0 -0
  721. /package/dist/{chunk-MKD3OMPS.js.map → chunk-M3MYMWXG.js.map} +0 -0
  722. /package/dist/{chunk-PL7FYKHT.js.map → chunk-MMG5K6XJ.js.map} +0 -0
  723. /package/dist/{chunk-VGXM5B4H.js.map → chunk-MNIPH6LD.js.map} +0 -0
  724. /package/dist/{chunk-XU6OEECT.js.map → chunk-OQQXGYMX.js.map} +0 -0
  725. /package/dist/{chunk-LSYDG6MJ.js.map → chunk-PEXW2JCK.js.map} +0 -0
  726. /package/dist/{chunk-MOZXTRC2.js.map → chunk-QF4J3KMV.js.map} +0 -0
  727. /package/dist/{chunk-JGHXXQ2G.js.map → chunk-QLJ6762U.js.map} +0 -0
  728. /package/dist/{chunk-XOVKXJEP.js.map → chunk-R3TLVTWW.js.map} +0 -0
  729. /package/dist/{chunk-CETXNLEX.js.map → chunk-RQO3J4MR.js.map} +0 -0
  730. /package/dist/{chunk-5NANRSCD.js.map → chunk-RR7G2X7C.js.map} +0 -0
  731. /package/dist/{chunk-DCJ3YFIC.js.map → chunk-S2ULTQZR.js.map} +0 -0
  732. /package/dist/{chunk-EQHDH4C2.js.map → chunk-S76KRJDG.js.map} +0 -0
  733. /package/dist/{chunk-EEC4PCG5.js.map → chunk-SZDLX763.js.map} +0 -0
  734. /package/dist/{chunk-E2ZHGBAK.js.map → chunk-T2JSUEH6.js.map} +0 -0
  735. /package/dist/{chunk-JSN44KIB.js.map → chunk-T2YFZ27G.js.map} +0 -0
  736. /package/dist/{chunk-227UFSEQ.js.map → chunk-TFA6HPOA.js.map} +0 -0
  737. /package/dist/{chunk-BA6WOZOT.js.map → chunk-TK4FHQRN.js.map} +0 -0
  738. /package/dist/{chunk-NB5BCFUY.js.map → chunk-TWYTGIBR.js.map} +0 -0
  739. /package/dist/{chunk-MWFGUESQ.js.map → chunk-UEZKN6VR.js.map} +0 -0
  740. /package/dist/{chunk-H5AFCNGA.js.map → chunk-UJX4I26O.js.map} +0 -0
  741. /package/dist/{chunk-PBGVVDLY.js.map → chunk-VIZR45AN.js.map} +0 -0
  742. /package/dist/{chunk-ZG74PWRW.js.map → chunk-VZAKYDMJ.js.map} +0 -0
  743. /package/dist/{chunk-JTH2SE6B.js.map → chunk-W5BLTZZJ.js.map} +0 -0
  744. /package/dist/{chunk-H3TKENU4.js.map → chunk-WIKO4SCR.js.map} +0 -0
  745. /package/dist/{chunk-YFLLGRXO.js.map → chunk-X2QPKLPL.js.map} +0 -0
  746. /package/dist/{chunk-MN3LK3KN.js.map → chunk-X424T5JQ.js.map} +0 -0
  747. /package/dist/{chunk-5BCNEBEN.js.map → chunk-XPJNT6PI.js.map} +0 -0
  748. /package/dist/{chunk-SEDEKFYQ.js.map → chunk-XW2T4QAW.js.map} +0 -0
  749. /package/dist/{chunk-D223ZDQV.js.map → chunk-YEDVOYL2.js.map} +0 -0
  750. /package/dist/{chunk-RC5DXXWC.js.map → chunk-YM7YN37H.js.map} +0 -0
  751. /package/dist/{chunk-VLXBE57O.js.map → chunk-YVGXH72Y.js.map} +0 -0
  752. /package/dist/{chunk-YQAXP5AC.js.map → chunk-YXLUTALO.js.map} +0 -0
  753. /package/dist/{chunk-OQDPBRQ6.js.map → chunk-Z7YDVHDI.js.map} +0 -0
  754. /package/dist/{chunk-XUE46UYW.js.map → chunk-ZLN7AROH.js.map} +0 -0
  755. /package/dist/{chunk-HK32G473.js.map → chunk-ZWEZXVYH.js.map} +0 -0
  756. /package/dist/{contradiction-scan-NOYMFG66.js.map → contradiction-scan-GVD4JJ7B.js.map} +0 -0
  757. /package/dist/{first-start-migration-RC345GPL.js.map → first-start-migration-L3UFX5CU.js.map} +0 -0
  758. /package/dist/{resolution-VKATP2HT.js.map → recall-state-view-admission.js.map} +0 -0
  759. /package/dist/{tier-stats-KA6OZX2C.js.map → tier-stats-VK5PCO2L.js.map} +0 -0
@@ -263,6 +263,79 @@ test("MCP memory write tools reject malformed arguments before dispatch", async
263
263
  }
264
264
  });
265
265
 
266
+ test("MCP memory write tools admit project-shaped category aliases (#2780)", async () => {
267
+ for (const toolName of ["engram.memory_store", "engram.suggestion_submit"]) {
268
+ let received: Record<string, unknown> | undefined;
269
+ const service = {
270
+ ...makeMockService(),
271
+ memoryStore: async (req: Record<string, unknown>) => {
272
+ received = req;
273
+ return {
274
+ schemaVersion: 1,
275
+ operation: "memory_store",
276
+ namespace: "default",
277
+ dryRun: true,
278
+ accepted: true,
279
+ queued: false,
280
+ status: "validated",
281
+ };
282
+ },
283
+ suggestionSubmit: async (req: Record<string, unknown>) => {
284
+ received = req;
285
+ return {
286
+ schemaVersion: 1,
287
+ operation: "suggestion_submit",
288
+ namespace: "default",
289
+ dryRun: true,
290
+ accepted: true,
291
+ queued: false,
292
+ status: "validated",
293
+ };
294
+ },
295
+ } as unknown as EngramAccessService;
296
+ const server = new EngramMcpServer(service);
297
+
298
+ const response = await server.handleRequest(
299
+ makeToolRequest(toolName, {
300
+ content: "valid durable content",
301
+ category: "project_state",
302
+ dryRun: true,
303
+ })
304
+ );
305
+ const result = (response as Record<string, unknown> & { result?: { isError?: boolean } }).result;
306
+
307
+ assert.equal(result?.isError, false, `${toolName} must admit project-shaped category aliases`);
308
+ assert.equal(
309
+ received?.category,
310
+ "project_state",
311
+ `${toolName} must forward the alias; the write surface coerces it to "fact"`
312
+ );
313
+ }
314
+ });
315
+
316
+ test("MCP memory_store invalid category error names valid categories and the fact hint (#2780)", async () => {
317
+ const server = new EngramMcpServer(makeMockService());
318
+
319
+ for (const bad of ["vibe", "projection", "project_typo"]) {
320
+ const response = await server.handleRequest(
321
+ makeToolRequest("engram.memory_store", {
322
+ content: "valid durable content",
323
+ category: bad,
324
+ dryRun: true,
325
+ })
326
+ );
327
+ const result = (response as Record<string, unknown> & {
328
+ result?: { isError?: boolean; content?: Array<{ text?: string }> };
329
+ }).result;
330
+
331
+ assert.equal(result?.isError, true, `${bad} must reject, not coerce`);
332
+ const text = (result?.content ?? []).map((part) => part.text ?? "").join("\n");
333
+ assert.match(text, /must be one of: /, "error must name the valid categories");
334
+ assert.match(text, /reasoning_trace/, "the full valid list must be present");
335
+ assert.match(text, /for project state\/facts use "fact"/, "error must carry the fact hint");
336
+ }
337
+ });
338
+
266
339
  test("MCP write tools accept and forward client-injected cwd/projectTag (#1434)", async () => {
267
340
  for (const toolName of ["engram.memory_store", "engram.suggestion_submit"]) {
268
341
  let received: Record<string, unknown> | undefined;
package/src/access-mcp.ts CHANGED
@@ -543,10 +543,7 @@ export class EngramMcpServer {
543
543
  topK: { type: "number" },
544
544
  mode: { type: "string", enum: ["auto", "no_recall", "minimal", "full", "graph_mode"] },
545
545
  includeDebug: { type: "boolean" },
546
- // Recall disclosure depth (issue #677). Default `chunk` when
547
- // omitted. Section/raw payload shaping ships in PR 2; this PR
548
- // wires the field end-to-end so clients can already pass it
549
- // without it being silently dropped.
546
+ // Disclosure depth (issue #677); default `chunk` when omitted.
550
547
  disclosure: { type: "string", enum: ["chunk", "section", "raw"] },
551
548
  cwd: { type: "string", description: "Working directory for auto git-context resolution." },
552
549
  projectTag: {
@@ -566,8 +563,11 @@ export class EngramMcpServer {
566
563
  tagMatch: {
567
564
  type: "string",
568
565
  enum: ["any", "all"],
569
- description:
570
- "Tag-filter match mode. 'any' (default) admits results with at least one filter tag; 'all' requires every filter tag.",
566
+ description: "Tag-filter match mode; 'any' (default) or 'all'.",
567
+ },
568
+ stateView: {
569
+ type: "boolean",
570
+ description: "Opt in to state-aware recall views (issue #1952); ORs with the recallStateViews config flag.",
571
571
  },
572
572
  },
573
573
  required: ["query"],
@@ -30,6 +30,7 @@ import {
30
30
  NamespaceNotWritableError,
31
31
  } from "./access-service.js";
32
32
  import { extractionForceFlush } from "./access-extraction-force-flush.js";
33
+ import { coerceProjectCategoryAlias, reapplyCategoryCoercion } from "./access-schema.js";
33
34
  import { ObserveTranscriptPersister, observeTranscriptSessionKey } from "./access-observe-transcript.js";
34
35
  import { FileCalendarSource, buildBriefing, parseBriefingFocus, parseBriefingWindow } from "./briefing.js";
35
36
  import {
@@ -482,9 +483,13 @@ export class AccessObserveWriteSurface {
482
483
  }
483
484
 
484
485
  async memoryStore(
485
- request: EngramAccessMemoryStoreRequest,
486
+ rawRequest: EngramAccessMemoryStoreRequest,
486
487
  hooks?: { enforceWriteQuota?: () => void | Promise<void> }
487
488
  ): Promise<EngramAccessWriteResponse> {
489
+ // #2780: the boundary schema admits project-shaped category guesses;
490
+ // this funnel (MCP/HTTP/CLI all dispatch here) coerces them to the
491
+ // canonical "fact" once and reports the coercion on the response.
492
+ const { request, categoryCoercion } = coerceProjectCategoryAlias(rawRequest);
488
493
  let namespace: string;
489
494
  try {
490
495
  namespace = await this.deps.resolveCodingScopedWriteNamespace(request);
@@ -513,6 +518,7 @@ export class AccessObserveWriteSurface {
513
518
  queued: false,
514
519
  status: "validated",
515
520
  idempotencyKey: request.idempotencyKey?.trim() || undefined,
521
+ ...(categoryCoercion ? { categoryCoercion } : {}),
516
522
  };
517
523
  }
518
524
  const result = await persistExplicitCapture(this.deps.orchestrator, candidate, "memory_store");
@@ -539,13 +545,14 @@ export class AccessObserveWriteSurface {
539
545
  memoryId: result.id,
540
546
  duplicateOf: result.duplicateOf,
541
547
  idempotencyKey: request.idempotencyKey?.trim() || undefined,
548
+ ...(categoryCoercion ? { categoryCoercion } : {}),
542
549
  };
543
550
  log.info(
544
551
  `access-write op=memory_store namespace=${namespace} dryRun=false status=${response.status} memoryId=${response.memoryId ?? "-"} idempotency=${response.idempotencyKey ? "yes" : "no"}`
545
552
  );
546
553
  return response;
547
554
  };
548
- return this.deps.handleIdempotentWrite({
555
+ const response = await this.deps.handleIdempotentWrite({
549
556
  operation: "memory_store",
550
557
  idempotencyKey: request.idempotencyKey,
551
558
  // Shared builder (issue #1989 PR3): byte-parity with the historical
@@ -566,12 +573,16 @@ export class AccessObserveWriteSurface {
566
573
  beforeExecute: hooks?.enforceWriteQuota,
567
574
  execute,
568
575
  });
576
+ // #2780 fix B: rewrite a replayed coercion note from THIS request's raw category.
577
+ return reapplyCategoryCoercion(response, categoryCoercion);
569
578
  }
570
579
 
571
580
  async suggestionSubmit(
572
- request: EngramAccessSuggestionSubmitRequest,
581
+ rawRequest: EngramAccessSuggestionSubmitRequest,
573
582
  hooks?: { enforceWriteQuota?: () => void | Promise<void> }
574
583
  ): Promise<EngramAccessWriteResponse> {
584
+ // #2780: same alias funnel as memory_store — one shared coercion point.
585
+ const { request, categoryCoercion } = coerceProjectCategoryAlias(rawRequest);
575
586
  let namespace: string;
576
587
  try {
577
588
  namespace = await this.deps.resolveCodingScopedWriteNamespace(request);
@@ -599,6 +610,7 @@ export class AccessObserveWriteSurface {
599
610
  queued: true,
600
611
  status: "validated",
601
612
  idempotencyKey: request.idempotencyKey?.trim() || undefined,
613
+ ...(categoryCoercion ? { categoryCoercion } : {}),
602
614
  };
603
615
  }
604
616
  const result = await queueExplicitCaptureForReview(
@@ -622,13 +634,14 @@ export class AccessObserveWriteSurface {
622
634
  memoryId: result.id,
623
635
  duplicateOf: result.duplicateOf,
624
636
  idempotencyKey: request.idempotencyKey?.trim() || undefined,
637
+ ...(categoryCoercion ? { categoryCoercion } : {}),
625
638
  };
626
639
  log.info(
627
640
  `access-write op=suggestion_submit namespace=${namespace} dryRun=false status=${response.status} memoryId=${response.memoryId ?? "-"} idempotency=${response.idempotencyKey ? "yes" : "no"}`
628
641
  );
629
642
  return response;
630
643
  };
631
- return this.deps.handleIdempotentWrite({
644
+ const replayed = await this.deps.handleIdempotentWrite({
632
645
  operation: "suggestion_submit",
633
646
  idempotencyKey: request.idempotencyKey,
634
647
  // Shared builder (issue #1989 PR3): byte-parity with the historical
@@ -649,6 +662,8 @@ export class AccessObserveWriteSurface {
649
662
  beforeExecute: hooks?.enforceWriteQuota,
650
663
  execute,
651
664
  });
665
+ // #2780 fix B: rewrite a replayed coercion note from THIS request's raw category.
666
+ return reapplyCategoryCoercion(replayed, categoryCoercion);
652
667
  }
653
668
 
654
669
  async runObserve(request: EngramAccessObserveRequest): Promise<EngramAccessObserveResponse> {
@@ -1,16 +1,22 @@
1
1
  import * as nodePath from "node:path";
2
- import type { Orchestrator } from "./orchestrator.js";
3
- import { iterateOfflineSyncSnapshotFileRecords } from "./offline-sync.js";
4
2
  import { offlineSyncStorageForSnapshot } from "./offline-sync-impression-drain.js";
3
+ import { iterateOfflineSyncSnapshotFileRecords } from "./offline-sync.js";
4
+ import type { Orchestrator } from "./orchestrator.js";
5
5
  import {
6
- buildReconcileManifestFile,
6
+ CONTENT_HASH_NORMALIZER_VERSION,
7
+ IDENTITY_RESOLUTION_VERSION,
7
8
  RECONCILE_MANIFEST_FORMAT,
8
9
  RECONCILE_MANIFEST_SCHEMA_VERSION,
9
10
  type ReconcileManifest,
10
11
  type ReconcileManifestFile,
12
+ type ReconcileMemoryIdentity,
11
13
  type ReconcileMemoryParser,
14
+ buildReconcileManifestFile,
15
+ citationTemplateFingerprint,
16
+ isCachedIdentityReusable,
17
+ isReconcileMemoryIdentity,
12
18
  } from "./reconcile/manifest.js";
13
- import { isSupportPassportPrivateMemory } from "./support-passport/card-projection.js";
19
+ import { createPersistedSupportPassportPrivateFileExclusion } from "./support-passport/card-projection.js";
14
20
 
15
21
  export interface OfflineSyncManifestRequest {
16
22
  includeTranscripts?: boolean;
@@ -22,14 +28,179 @@ export interface OfflineSyncManifestStreamResponse extends Omit<ReconcileManifes
22
28
  files: AsyncIterable<ReconcileManifestFile>;
23
29
  }
24
30
 
31
+ export interface ServerIdentityCacheEntry {
32
+ path: string;
33
+ sha256: string;
34
+ memory?: ReconcileMemoryIdentity;
35
+ /** Stamped on sha-only entries so an upgrade re-parses them. */
36
+ normalizerVersion?: number;
37
+ identityResolutionVersion?: number;
38
+ /** Stat identity the exclusion classification was computed against. */
39
+ statIdentity?: string;
40
+ /** Persisted support-passport private-memory classification for statIdentity. */
41
+ excluded?: boolean;
42
+ }
43
+
44
+ /**
45
+ * Decide what the manifest stream should persist, and whether a write is
46
+ * needed at all.
47
+ *
48
+ * A write is required whenever the persisted set changed — an identity was
49
+ * rebuilt, or an entry was dropped because its file lost its identity — and
50
+ * also when a completed walk leaves entries for paths it never saw, which are
51
+ * files that have since been deleted. Skipping the write in that last case
52
+ * would strand those entries on disk forever.
53
+ *
54
+ * Pruning is gated on the walk completing: an aborted or partially consumed
55
+ * stream has simply not observed the remaining paths, so it may only add.
56
+ */
57
+ export function planServerIdentityCacheWrite(input: {
58
+ persisted: ReadonlyMap<string, ServerIdentityCacheEntry>;
59
+ yieldedPaths: ReadonlySet<string>;
60
+ streamCompleted: boolean;
61
+ cacheDirty: boolean;
62
+ }): { shouldWrite: boolean; entries: ServerIdentityCacheEntry[] } {
63
+ const entries = input.streamCompleted
64
+ ? [...input.persisted.values()].filter((entry) => input.yieldedPaths.has(entry.path))
65
+ : [...input.persisted.values()];
66
+ return { shouldWrite: input.cacheDirty || entries.length !== input.persisted.size, entries };
67
+ }
68
+
69
+ /**
70
+ * The cache lives under `.remnic/` rather than `state/`: snapshot enumeration
71
+ * excludes internal `.remnic/` paths structurally (`isInternalRemnicStatePath`),
72
+ * whereas `state/` is only filtered by an allowlist of known node-local
73
+ * artifacts. Under `state/` this node-local cache would be advertised as a peer
74
+ * file, so convergence would transfer the cache itself — and the stream rewrites
75
+ * it during finalization, so the advertised digest could go stale mid-transfer.
76
+ */
77
+ function serverIdentityCachePath(storageDir: string): string {
78
+ return nodePath.join(storageDir, ".remnic", "state", "converge-identity-cache.json");
79
+ }
80
+
81
+ async function loadServerIdentityCache(
82
+ storageDir: string,
83
+ citationTemplate?: string
84
+ ): Promise<Map<string, ServerIdentityCacheEntry>> {
85
+ const cache = new Map<string, ServerIdentityCacheEntry>();
86
+ try {
87
+ const raw = JSON.parse(
88
+ await import("node:fs/promises").then((fs) => fs.readFile(serverIdentityCachePath(storageDir), "utf8"))
89
+ ) as {
90
+ citationTemplate?: string;
91
+ files?: unknown[];
92
+ };
93
+ // Identities are derived after stripping inline attribution for a specific
94
+ // citation template; entries written under a different one would produce
95
+ // wrong contentHash values for unchanged files.
96
+ if (raw.citationTemplate !== citationTemplateFingerprint(citationTemplate)) return cache;
97
+ for (const candidate of raw.files ?? []) {
98
+ const entry = candidate as Partial<ServerIdentityCacheEntry> | null;
99
+ if (typeof entry?.path !== "string" || typeof entry.sha256 !== "string") continue;
100
+ if (entry.memory !== undefined && !isReconcileMemoryIdentity(entry.memory)) continue;
101
+ if (entry.statIdentity !== undefined && typeof entry.statIdentity !== "string") continue;
102
+ if (entry.excluded !== undefined && typeof entry.excluded !== "boolean") continue;
103
+ if (entry.normalizerVersion !== undefined && typeof entry.normalizerVersion !== "number") continue;
104
+ if (entry.identityResolutionVersion !== undefined && typeof entry.identityResolutionVersion !== "number") {
105
+ continue;
106
+ }
107
+ cache.set(entry.path, {
108
+ path: entry.path,
109
+ sha256: entry.sha256,
110
+ ...(entry.memory ? { memory: entry.memory } : {}),
111
+ ...(entry.memory
112
+ ? {}
113
+ : {
114
+ ...(typeof entry.normalizerVersion === "number" ? { normalizerVersion: entry.normalizerVersion } : {}),
115
+ ...(typeof entry.identityResolutionVersion === "number"
116
+ ? { identityResolutionVersion: entry.identityResolutionVersion }
117
+ : {}),
118
+ }),
119
+ ...(entry.statIdentity !== undefined && entry.excluded !== undefined
120
+ ? { statIdentity: entry.statIdentity, excluded: entry.excluded }
121
+ : {}),
122
+ });
123
+ }
124
+ } catch {
125
+ // missing or corrupt cache: cold build
126
+ }
127
+ return cache;
128
+ }
129
+
130
+ const serverIdentityCacheWriteLocks = new Map<string, Promise<void>>();
131
+
132
+ /** Serialize cache replacements per path: overlapping manifest streams for one
133
+ * namespace would otherwise each publish a whole-file snapshot, and the slower
134
+ * stream built from older filesystem state would overwrite the newer one. */
135
+ async function withServerIdentityCacheWriteLock(cachePath: string, write: () => Promise<void>): Promise<void> {
136
+ const previous = serverIdentityCacheWriteLocks.get(cachePath) ?? Promise.resolve();
137
+ const next = previous.then(write, write);
138
+ serverIdentityCacheWriteLocks.set(cachePath, next);
139
+ try {
140
+ await next;
141
+ } finally {
142
+ if (serverIdentityCacheWriteLocks.get(cachePath) === next) {
143
+ serverIdentityCacheWriteLocks.delete(cachePath);
144
+ }
145
+ }
146
+ }
147
+
148
+ /** Union of the entries being written and the current on-disk set; on conflict
149
+ * the write wins (it reflects the newer run). Callers hold the write lock. */
150
+ async function mergeServerIdentityCacheEntries(
151
+ fs: typeof import("node:fs/promises"),
152
+ cachePath: string,
153
+ entries: readonly ServerIdentityCacheEntry[],
154
+ citationTemplate: string | undefined,
155
+ dropped: ReadonlySet<string> = new Set()
156
+ ): Promise<ServerIdentityCacheEntry[]> {
157
+ const merged = new Map(entries.map((entry) => [entry.path, entry]));
158
+ try {
159
+ const raw = JSON.parse(await fs.readFile(cachePath, "utf8")) as {
160
+ citationTemplate?: string;
161
+ files?: unknown[];
162
+ };
163
+ if (raw.citationTemplate === citationTemplateFingerprint(citationTemplate)) {
164
+ for (const candidate of raw.files ?? []) {
165
+ const entry = candidate as Partial<ServerIdentityCacheEntry> | null;
166
+ if (typeof entry?.path !== "string" || typeof entry.sha256 !== "string") continue;
167
+ if (entry.memory !== undefined && !isReconcileMemoryIdentity(entry.memory)) continue;
168
+ if (dropped.has(entry.path) || merged.has(entry.path)) continue;
169
+ merged.set(entry.path, {
170
+ path: entry.path,
171
+ sha256: entry.sha256,
172
+ ...(entry.memory ? { memory: entry.memory } : {}),
173
+ ...(entry.memory
174
+ ? {}
175
+ : {
176
+ ...(typeof entry.normalizerVersion === "number" ? { normalizerVersion: entry.normalizerVersion } : {}),
177
+ ...(typeof entry.identityResolutionVersion === "number"
178
+ ? { identityResolutionVersion: entry.identityResolutionVersion }
179
+ : {}),
180
+ }),
181
+ });
182
+ }
183
+ }
184
+ } catch {
185
+ // missing or unreadable current cache: the write set stands alone
186
+ }
187
+ return [...merged.values()];
188
+ }
189
+
25
190
  export async function createOfflineSyncManifestStream(
26
191
  orchestrator: Orchestrator,
27
192
  namespace: string,
28
193
  userExcludeRegexps: RegExp[],
29
194
  options: OfflineSyncManifestRequest,
30
- parseMemory: ReconcileMemoryParser,
195
+ parseMemory: ReconcileMemoryParser
31
196
  ): Promise<OfflineSyncManifestStreamResponse> {
32
197
  const storage = await offlineSyncStorageForSnapshot(orchestrator, namespace);
198
+ const citationTemplate = orchestrator.config.inlineSourceAttributionFormat;
199
+ const identityCache = await loadServerIdentityCache(storage.dir, citationTemplate);
200
+ // The exclusion callback runs before every yield; without the persisted
201
+ // classification it would read and parse every candidate file, defeating the
202
+ // warm-cache skip entirely.
203
+ const classificationUpdates = new Map<string, { statIdentity: string; excluded: boolean }>();
33
204
  const snapshotFiles = iterateOfflineSyncSnapshotFileRecords({
34
205
  root: storage.dir,
35
206
  includeContent: false,
@@ -37,23 +208,133 @@ export async function createOfflineSyncManifestStream(
37
208
  readFileDigest: async ({ filePath }) => storage.digestOfflineSyncFile(filePath),
38
209
  signal: options.signal,
39
210
  userExcludeRegexps,
40
- excludeFile: async ({ filePath }) => {
41
- const memory = await storage.readMemoryByPath(filePath);
42
- return memory ? isSupportPassportPrivateMemory(memory) : false;
43
- },
211
+ excludeFile: createPersistedSupportPassportPrivateFileExclusion(storage, identityCache, classificationUpdates),
44
212
  });
45
213
  return {
46
214
  namespace,
47
215
  format: RECONCILE_MANIFEST_FORMAT,
48
216
  schemaVersion: RECONCILE_MANIFEST_SCHEMA_VERSION,
49
217
  files: (async function* () {
50
- for await (const file of snapshotFiles) {
51
- yield await buildReconcileManifestFile(
52
- file,
53
- async ({ path }) => storage.readOfflineSyncFile(nodePath.join(storage.dir, path)),
54
- parseMemory,
55
- orchestrator.config.inlineSourceAttributionFormat,
56
- );
218
+ // Any change to the persisted set, not just a rebuilt identity: a file
219
+ // that lost its identity, or a completed walk that must prune vanished
220
+ // paths, also has to reach disk or the removal is lost forever.
221
+ let cacheDirty = false;
222
+ let streamCompleted = false;
223
+ // Seeded with every previously cached entry so a partially consumed
224
+ // stream (client disconnect, abort) can only add to the cache. Writing
225
+ // just this run's rebuilds would drop every cache hit, so one edit to a
226
+ // large corpus would shrink the cache to that single entry and force a
227
+ // near-cold rebuild on the next request.
228
+ const persistedEntries = new Map(identityCache);
229
+ const yieldedPaths = new Set<string>();
230
+ const flush = async (): Promise<void> => {
231
+ const { shouldWrite, entries } = planServerIdentityCacheWrite({
232
+ persisted: persistedEntries,
233
+ yieldedPaths,
234
+ streamCompleted,
235
+ cacheDirty,
236
+ });
237
+ if (!shouldWrite) return;
238
+ try {
239
+ const fs = await import("node:fs/promises");
240
+ const cachePath = serverIdentityCachePath(storage.dir);
241
+ await withServerIdentityCacheWriteLock(cachePath, async () => {
242
+ // Merge with whatever is on disk NOW: a concurrent stream for the
243
+ // same namespace may have published newer entries after this
244
+ // request loaded its snapshot, and a blind whole-file replace
245
+ // would discard them.
246
+ const written = new Set(entries.map((entry) => entry.path));
247
+ const dropped = streamCompleted
248
+ ? new Set([...identityCache.keys()].filter((pathName) => !written.has(pathName)))
249
+ : new Set<string>();
250
+ const merged = await mergeServerIdentityCacheEntries(
251
+ fs,
252
+ cachePath,
253
+ entries,
254
+ citationTemplate,
255
+ dropped
256
+ );
257
+ await fs.mkdir(nodePath.dirname(cachePath), { recursive: true });
258
+ const tmp = `${cachePath}.${process.pid}.${Math.random().toString(36).slice(2)}.tmp`;
259
+ await fs.writeFile(
260
+ tmp,
261
+ JSON.stringify({ citationTemplate: citationTemplateFingerprint(citationTemplate), files: merged })
262
+ );
263
+ await fs.rename(tmp, cachePath);
264
+ });
265
+ } catch {
266
+ // cache persistence is best-effort
267
+ }
268
+ };
269
+ try {
270
+ const applyClassification = (path: string, sha256: string): void => {
271
+ const classification = classificationUpdates.get(path);
272
+ if (classification === undefined) return;
273
+ const entry = persistedEntries.get(path) ?? { path, sha256 };
274
+ if (entry.statIdentity === classification.statIdentity && entry.excluded === classification.excluded) {
275
+ return;
276
+ }
277
+ persistedEntries.set(path, {
278
+ ...entry,
279
+ ...(entry.memory ? { memory: entry.memory } : {}),
280
+ statIdentity: classification.statIdentity,
281
+ excluded: classification.excluded,
282
+ });
283
+ cacheDirty = true;
284
+ };
285
+ for await (const file of snapshotFiles) {
286
+ yieldedPaths.add(file.path);
287
+ const cached = identityCache.get(file.path);
288
+ if (
289
+ cached !== undefined &&
290
+ cached.sha256.toLowerCase() === file.sha256.toLowerCase() &&
291
+ isCachedIdentityReusable(cached)
292
+ ) {
293
+ applyClassification(file.path, file.sha256);
294
+ yield {
295
+ ...file,
296
+ ...(cached.memory
297
+ ? { memory: cached.memory }
298
+ : {
299
+ normalizerVersion: cached.normalizerVersion,
300
+ identityResolutionVersion: cached.identityResolutionVersion,
301
+ }),
302
+ };
303
+ continue;
304
+ }
305
+ const built = await buildReconcileManifestFile(
306
+ file,
307
+ async ({ path }) => storage.readOfflineSyncFile(nodePath.join(storage.dir, path)),
308
+ parseMemory,
309
+ citationTemplate
310
+ );
311
+ // Negative results persist too: a memory-shaped file that parses
312
+ // without an identity would otherwise be re-read on every warm run.
313
+ const previous = persistedEntries.get(built.path);
314
+ if (previous?.sha256 !== built.sha256 || (built.memory !== undefined && previous?.memory !== built.memory)) {
315
+ cacheDirty = true;
316
+ }
317
+ if (built.memory === undefined && built.normalizerVersion === undefined) {
318
+ // Read failed: do not persist a negative identity for this SHA.
319
+ yield built;
320
+ continue;
321
+ }
322
+ persistedEntries.set(built.path, {
323
+ path: built.path,
324
+ sha256: built.sha256,
325
+ ...(built.memory !== undefined
326
+ ? { memory: built.memory }
327
+ : {
328
+ normalizerVersion: built.normalizerVersion,
329
+ identityResolutionVersion: built.identityResolutionVersion,
330
+ }),
331
+ });
332
+ applyClassification(built.path, built.sha256);
333
+ yield built;
334
+ }
335
+ streamCompleted = true;
336
+ } finally {
337
+ await flush();
57
338
  }
58
339
  })(),
59
340
  };
@@ -833,11 +833,10 @@ export class AccessRecallSurface {
833
833
  this.deps.budget.gc();
834
834
  }
835
835
  const topK = Number.isFinite(request.topK) ? Math.max(0, Math.floor(request.topK ?? 0)) : undefined;
836
- // Issue #680 — historical recall pin. Validate at the input
837
- // boundary so a malformed `asOf` is rejected with a structured
838
- // 400 instead of silently flooring at NaN inside the orchestrator
839
- // (CLAUDE.md rule 51, gotcha #51). Empty / undefined is fine —
840
- // means "no pin".
836
+ // Issue #680 — historical recall pin. Validate at the input boundary so
837
+ // a malformed `asOf` is rejected with a structured 400 instead of
838
+ // silently flooring at NaN inside the orchestrator (rule 51, gotcha #51).
839
+ // Empty / undefined is fine — means "no pin".
841
840
  let asOf: string | undefined;
842
841
  if (request.asOf !== undefined && request.asOf !== null) {
843
842
  if (typeof request.asOf !== "string" || request.asOf.trim().length === 0) {
@@ -863,6 +862,7 @@ export class AccessRecallSurface {
863
862
  },
864
863
  ...(authenticatedPrincipal ? { principalOverride: authenticatedPrincipal } : {}),
865
864
  ...(request.sourceConnector ? { sourceConnector: request.sourceConnector } : {}),
865
+ ...(request.stateView !== undefined ? { stateView: request.stateView } : {}),
866
866
  ...(asOf !== undefined ? { asOf } : {}),
867
867
  ...(request.includeLowConfidence === true ? { includeLowConfidence: true } : {}),
868
868
  ...(request.abortSignal ? { abortSignal: request.abortSignal } : {}),