@remnic/core 9.45.3 → 9.45.4

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 (747) hide show
  1. package/dist/abort-error.d.ts +2 -1
  2. package/dist/abort-error.js +3 -1
  3. package/dist/access-admin-ops-surface.d.ts +14 -10
  4. package/dist/access-admin-ops-surface.js +84 -76
  5. package/dist/access-audit.js +2 -2
  6. package/dist/access-authorization-probe.d.ts +14 -10
  7. package/dist/access-authorization-probe.js +85 -77
  8. package/dist/access-boundary.d.ts +15 -11
  9. package/dist/access-boundary.js +84 -76
  10. package/dist/access-citation-namespace.js +2 -2
  11. package/dist/access-cli.js +193 -181
  12. package/dist/access-cli.js.map +1 -1
  13. package/dist/access-coding-context-resolution.d.ts +16 -0
  14. package/dist/access-coding-context-resolution.js +13 -0
  15. package/dist/access-coding-context-resolution.js.map +1 -0
  16. package/dist/access-extraction-force-flush.d.ts +14 -10
  17. package/dist/access-extraction-force-flush.js +84 -76
  18. package/dist/access-health-types.d.ts +2 -1
  19. package/dist/access-http-lcm-compaction.d.ts +16 -12
  20. package/dist/access-http-lcm-compaction.js +3 -3
  21. package/dist/access-http-lifecycle-flush.d.ts +14 -10
  22. package/dist/access-http-lifecycle-flush.js +2 -2
  23. package/dist/access-http-offline-stream.d.ts +123 -0
  24. package/dist/access-http-offline-stream.js +10 -0
  25. package/dist/access-http-offline-stream.js.map +1 -0
  26. package/dist/access-http-query.js +84 -76
  27. package/dist/access-http.d.ts +15 -10
  28. package/dist/access-http.js +105 -92
  29. package/dist/access-identity-continuity-surface.d.ts +9 -8
  30. package/dist/access-identity-continuity-surface.js +84 -76
  31. package/dist/access-lcm-surface.d.ts +14 -10
  32. package/dist/access-lcm-surface.js +84 -76
  33. package/dist/access-mcp-output-schemas.js +1 -1
  34. package/dist/access-mcp.d.ts +14 -10
  35. package/dist/access-mcp.js +95 -83
  36. package/dist/access-memory-search-fanout.d.ts +3 -2
  37. package/dist/{access-namespace-preflight-5yZ4g6F8.d.ts → access-namespace-preflight-CWUDwB4M.d.ts} +1 -1
  38. package/dist/access-namespace-preflight.d.ts +4 -3
  39. package/dist/access-namespace-preflight.js +84 -76
  40. package/dist/access-observe-helpers.d.ts +1 -0
  41. package/dist/access-observe-helpers.js +1 -1
  42. package/dist/access-observe-write-surface.d.ts +16 -10
  43. package/dist/access-observe-write-surface.js +84 -76
  44. package/dist/access-offline-manifest.d.ts +104 -0
  45. package/dist/access-offline-manifest.js +45 -0
  46. package/dist/access-offline-manifest.js.map +1 -0
  47. package/dist/access-operations-batch.js +86 -78
  48. package/dist/access-operations.d.ts +15 -11
  49. package/dist/access-operations.js +91 -80
  50. package/dist/access-recall-concurrency.d.ts +16 -26
  51. package/dist/access-recall-concurrency.js +86 -77
  52. package/dist/access-recall-response.d.ts +18 -14
  53. package/dist/access-recall-response.js +84 -76
  54. package/dist/access-recall-surface.d.ts +29 -24
  55. package/dist/access-recall-surface.js +84 -76
  56. package/dist/access-schema.js +3 -3
  57. package/dist/{access-service-CiJRsgAB.d.ts → access-service-CsU-ljFD.d.ts} +25 -16
  58. package/dist/access-service-helpers.d.ts +14 -10
  59. package/dist/access-service.d.ts +14 -10
  60. package/dist/access-service.js +84 -76
  61. package/dist/access-surface-catalog.d.ts +14 -10
  62. package/dist/access-surface-catalog.js +4 -0
  63. package/dist/access-surface-catalog.js.map +1 -1
  64. package/dist/access-wearables-meetings-surface.d.ts +4 -3
  65. package/dist/action-confidence.d.ts +2 -1
  66. package/dist/active-memory-bridge.d.ts +2 -1
  67. package/dist/active-recall.d.ts +2 -1
  68. package/dist/active-recall.js +10 -8
  69. package/dist/active-recall.js.map +1 -1
  70. package/dist/adapters/index.js +7 -7
  71. package/dist/adapters/registry.js +3 -3
  72. package/dist/{auto-sync-5OE5QOZB.js → auto-sync-UPTUVE4X.js} +6 -6
  73. package/dist/behavior-learner.d.ts +2 -1
  74. package/dist/behavior-learner.js +1 -1
  75. package/dist/behavior-signals.d.ts +2 -1
  76. package/dist/bootstrap.d.ts +9 -8
  77. package/dist/briefing.d.ts +3 -2
  78. package/dist/briefing.js +23 -22
  79. package/dist/buffer-surprise-report.d.ts +2 -1
  80. package/dist/buffer-turn-helpers.d.ts +2 -1
  81. package/dist/buffer.d.ts +3 -2
  82. package/dist/buffer.js +12 -11
  83. package/dist/bulk-import/index.d.ts +4 -3
  84. package/dist/calibration.d.ts +2 -1
  85. package/dist/capabilities.d.ts +2 -1
  86. package/dist/{capsule-merge-IDWJPCWK.js → capsule-merge-Q6AR3XL7.js} +67 -54
  87. package/dist/capsule-merge-Q6AR3XL7.js.map +1 -0
  88. package/dist/{catalog-scBmy0sO.d.ts → catalog-bctMURhN.d.ts} +1 -1
  89. package/dist/causal-behavior.d.ts +2 -1
  90. package/dist/causal-behavior.js +2 -2
  91. package/dist/causal-chain.js +2 -2
  92. package/dist/causal-consolidation.d.ts +2 -1
  93. package/dist/causal-consolidation.js +27 -26
  94. package/dist/causal-consolidation.js.map +1 -1
  95. package/dist/causal-retrieval.js +2 -2
  96. package/dist/causal-trajectory-graph.d.ts +2 -1
  97. package/dist/causal-trajectory.js +1 -1
  98. package/dist/{chunk-VUPTKTDV.js → chunk-2MRHJNWL.js} +3 -3
  99. package/dist/{chunk-JBPKEARU.js → chunk-2QSZNTDO.js} +7 -7
  100. package/dist/{chunk-5IVLTFOV.js → chunk-44N6ESJ4.js} +2 -2
  101. package/dist/{chunk-WOCNN776.js → chunk-4POAMKV6.js} +100 -41
  102. package/dist/chunk-4POAMKV6.js.map +1 -0
  103. package/dist/{chunk-HO3QBJEY.js → chunk-5546W5SI.js} +2 -2
  104. package/dist/{chunk-U7GW7NE7.js → chunk-5CEECY6P.js} +10 -10
  105. package/dist/{chunk-4UH4BTGK.js → chunk-5SNZSWWR.js} +82 -82
  106. package/dist/{chunk-6CZPDBJS.js → chunk-5U7ID3EZ.js} +3 -3
  107. package/dist/{chunk-GF22HWS2.js → chunk-6NNNURLK.js} +7 -7
  108. package/dist/chunk-773TRRGT.js +36 -0
  109. package/dist/chunk-773TRRGT.js.map +1 -0
  110. package/dist/chunk-7CITSYSH.js +242 -0
  111. package/dist/chunk-7CITSYSH.js.map +1 -0
  112. package/dist/{chunk-227UFSEQ.js → chunk-7RZJWZ46.js} +5 -5
  113. package/dist/{chunk-E5UK4VPE.js → chunk-7SHJHPTY.js} +5 -5
  114. package/dist/{chunk-UVIKWC7M.js → chunk-7YERSTN7.js} +17 -17
  115. package/dist/{chunk-DLVPUX7U.js → chunk-7YKVM5H3.js} +8 -6
  116. package/dist/chunk-7YKVM5H3.js.map +1 -0
  117. package/dist/{chunk-3CE77VAP.js → chunk-A4JMGKCD.js} +87 -74
  118. package/dist/chunk-A4JMGKCD.js.map +1 -0
  119. package/dist/chunk-A5KNZSNA.js +26 -0
  120. package/dist/chunk-A5KNZSNA.js.map +1 -0
  121. package/dist/{chunk-S2NCTZGJ.js → chunk-AJQ57VV3.js} +15 -15
  122. package/dist/chunk-AJQ57VV3.js.map +1 -0
  123. package/dist/{chunk-CUM2BBPN.js → chunk-AUMWZSE7.js} +19 -10
  124. package/dist/chunk-AUMWZSE7.js.map +1 -0
  125. package/dist/{chunk-XYTOI63Z.js → chunk-BGHFOD5A.js} +19 -11
  126. package/dist/chunk-BGHFOD5A.js.map +1 -0
  127. package/dist/{chunk-BUE5E2HL.js → chunk-BGLY7EEM.js} +5 -314
  128. package/dist/chunk-BGLY7EEM.js.map +1 -0
  129. package/dist/chunk-BIPBQQFI.js +44 -0
  130. package/dist/chunk-BIPBQQFI.js.map +1 -0
  131. package/dist/{chunk-S5SLVSVY.js → chunk-BQIFZ2MP.js} +5 -5
  132. package/dist/chunk-BTTPKDIL.js +34 -0
  133. package/dist/{chunk-PVGDJXVK.js.map → chunk-BTTPKDIL.js.map} +1 -1
  134. package/dist/{chunk-E53DSZEN.js → chunk-C26TE27X.js} +3 -3
  135. package/dist/{chunk-LZ4LDKHZ.js → chunk-CLB32OHM.js} +6 -6
  136. package/dist/{chunk-Q6IP2ARR.js → chunk-CSOYVTRX.js} +2 -2
  137. package/dist/{chunk-XOQSEF7X.js → chunk-CVILPI77.js} +6 -6
  138. package/dist/chunk-D3I2MCN7.js +29 -0
  139. package/dist/chunk-D3I2MCN7.js.map +1 -0
  140. package/dist/{chunk-A5OJCXZL.js → chunk-DSUAAZZX.js} +15 -4
  141. package/dist/chunk-DSUAAZZX.js.map +1 -0
  142. package/dist/{chunk-HREE4JHI.js → chunk-DYVMXPCF.js} +486 -287
  143. package/dist/chunk-DYVMXPCF.js.map +1 -0
  144. package/dist/{chunk-J7VGGECD.js → chunk-DZPFMQZ7.js} +1 -1
  145. package/dist/chunk-DZPFMQZ7.js.map +1 -0
  146. package/dist/{chunk-PDLBLTOK.js → chunk-EITZHSX6.js} +9 -9
  147. package/dist/{chunk-D3J5SLQK.js → chunk-EJHEWCGQ.js} +81 -20
  148. package/dist/chunk-EJHEWCGQ.js.map +1 -0
  149. package/dist/{chunk-WUNIWKY4.js → chunk-ELIL2A37.js} +6 -6
  150. package/dist/{chunk-E6PNLPGJ.js → chunk-FZP32336.js} +806 -470
  151. package/dist/chunk-FZP32336.js.map +1 -0
  152. package/dist/{chunk-HZFHQ4AQ.js → chunk-G7A5HLUS.js} +23 -17
  153. package/dist/chunk-G7A5HLUS.js.map +1 -0
  154. package/dist/{chunk-CINZGPSJ.js → chunk-GUMZC2BO.js} +2 -2
  155. package/dist/{chunk-H24WNPA2.js → chunk-GWFSVJ4P.js} +3 -3
  156. package/dist/{chunk-7XC2HX75.js → chunk-GYPQL6XN.js} +157 -16
  157. package/dist/chunk-GYPQL6XN.js.map +1 -0
  158. package/dist/{chunk-TSH56VPU.js → chunk-HAYSYUAB.js} +2 -2
  159. package/dist/{chunk-TDHTVMPG.js → chunk-HFPASSFV.js} +7 -2
  160. package/dist/chunk-HFPASSFV.js.map +1 -0
  161. package/dist/chunk-J2WC5LF4.js +395 -0
  162. package/dist/chunk-J2WC5LF4.js.map +1 -0
  163. package/dist/{chunk-PKNLM44P.js → chunk-JH6BPLOP.js} +9 -9
  164. package/dist/{chunk-KXB4VXHY.js → chunk-JIYDRBVZ.js} +2 -2
  165. package/dist/chunk-JV3C2MNQ.js +74 -0
  166. package/dist/chunk-JV3C2MNQ.js.map +1 -0
  167. package/dist/{chunk-AV5ZEH4M.js → chunk-KVJRXN2E.js} +2 -2
  168. package/dist/{chunk-JVLCVFQ4.js → chunk-KXEFRMCF.js} +3 -3
  169. package/dist/{chunk-WFTIGIIS.js → chunk-L6CQ7WIW.js} +5 -5
  170. package/dist/{chunk-EJUEXZHX.js → chunk-LLJMAULE.js} +2 -2
  171. package/dist/{chunk-N5Z4EVOR.js → chunk-LNEWDF2A.js} +36 -11
  172. package/dist/chunk-LNEWDF2A.js.map +1 -0
  173. package/dist/{chunk-AS7YMSL6.js → chunk-M23RF3LJ.js} +4 -4
  174. package/dist/{chunk-UYLMNVY6.js → chunk-MDISBSYA.js} +16 -9
  175. package/dist/chunk-MDISBSYA.js.map +1 -0
  176. package/dist/{chunk-3F2LKUMU.js → chunk-NIS256NW.js} +2 -2
  177. package/dist/{chunk-YIAA2X3D.js → chunk-NK5RGJ65.js} +3 -3
  178. package/dist/chunk-NLDVVWCL.js +84 -0
  179. package/dist/chunk-NLDVVWCL.js.map +1 -0
  180. package/dist/{chunk-OQ5PRDDS.js → chunk-NTOIP2E6.js} +6 -6
  181. package/dist/{chunk-HLPD7B7P.js → chunk-NUEQKLNB.js} +2 -2
  182. package/dist/{chunk-4J7G5SY4.js → chunk-NZBZ7IS2.js} +72 -24
  183. package/dist/chunk-NZBZ7IS2.js.map +1 -0
  184. package/dist/{chunk-3TBLDMJA.js → chunk-O4KMGRXE.js} +5 -2
  185. package/dist/chunk-O4KMGRXE.js.map +1 -0
  186. package/dist/{chunk-33PLLLL7.js → chunk-P7NGM24P.js} +6 -6
  187. package/dist/{chunk-7TWUCYER.js → chunk-PNRA7FAD.js} +7 -7
  188. package/dist/{chunk-5I4M26Q7.js → chunk-QBSFOKY6.js} +4 -4
  189. package/dist/{chunk-QJAQNXWI.js → chunk-QCECHYZL.js} +76 -79
  190. package/dist/chunk-QCECHYZL.js.map +1 -0
  191. package/dist/{chunk-P4DRWEYC.js → chunk-QVSBTCVP.js} +2 -2
  192. package/dist/{chunk-AAIUERNB.js → chunk-R5RFK3CB.js} +6 -6
  193. package/dist/{chunk-WDISJRMG.js → chunk-RMMVQQA6.js} +2 -2
  194. package/dist/{chunk-KWMXR7XS.js → chunk-S2V7RUCL.js} +8 -1
  195. package/dist/{chunk-KWMXR7XS.js.map → chunk-S2V7RUCL.js.map} +1 -1
  196. package/dist/{chunk-5SM35XZR.js → chunk-S5NZBKKQ.js} +2 -2
  197. package/dist/{chunk-VNA7W7QF.js → chunk-SVH57F5Z.js} +12 -4
  198. package/dist/chunk-SVH57F5Z.js.map +1 -0
  199. package/dist/{chunk-WIPEXG6R.js → chunk-SXIMQLGV.js} +2 -2
  200. package/dist/{chunk-RVLJEII5.js → chunk-SYUBB3WM.js} +256 -187
  201. package/dist/chunk-SYUBB3WM.js.map +1 -0
  202. package/dist/{chunk-OAEQLRCY.js → chunk-TN76AKO3.js} +5 -5
  203. package/dist/{chunk-QN25OCUF.js → chunk-TQ4GD737.js} +5 -5
  204. package/dist/{chunk-VCD4PSK2.js → chunk-TQZ4DVBC.js} +7 -4
  205. package/dist/chunk-TQZ4DVBC.js.map +1 -0
  206. package/dist/{chunk-7K5Q6COX.js → chunk-TVVEYCNW.js} +4 -4
  207. package/dist/{chunk-DNWXFTLD.js → chunk-TYISDI6B.js} +2 -2
  208. package/dist/{chunk-4LMA77JH.js → chunk-U2VLVBBH.js} +3 -3
  209. package/dist/{chunk-5ZE7QHTK.js → chunk-ULVR5KG7.js} +5 -5
  210. package/dist/{chunk-NVRYW264.js → chunk-UQWIKLQK.js} +18 -15
  211. package/dist/chunk-UQWIKLQK.js.map +1 -0
  212. package/dist/{chunk-YV32N67O.js → chunk-URS5GSM7.js} +1 -1
  213. package/dist/chunk-URS5GSM7.js.map +1 -0
  214. package/dist/{chunk-4B77XSG5.js → chunk-UV72DEZD.js} +5 -5
  215. package/dist/{chunk-S2BBISHU.js → chunk-VANZKHTN.js} +3 -3
  216. package/dist/chunk-VHFXP27N.js +250 -0
  217. package/dist/chunk-VHFXP27N.js.map +1 -0
  218. package/dist/{chunk-3Y224NYC.js → chunk-VYISFWVX.js} +2 -2
  219. package/dist/{chunk-TIHMZFIV.js → chunk-W3IC7QOY.js} +3 -3
  220. package/dist/{chunk-NRV4Y3PM.js → chunk-W4FBGYGK.js} +1 -1
  221. package/dist/{chunk-P2BM76KT.js → chunk-WAS4HV46.js} +174 -43
  222. package/dist/chunk-WAS4HV46.js.map +1 -0
  223. package/dist/{chunk-57QKLRBV.js → chunk-WB7JSQCP.js} +2 -1
  224. package/dist/chunk-WB7JSQCP.js.map +1 -0
  225. package/dist/chunk-WGP57SR3.js +68 -0
  226. package/dist/chunk-WGP57SR3.js.map +1 -0
  227. package/dist/{chunk-ECK75GDJ.js → chunk-WQIHRA5F.js} +43 -24
  228. package/dist/chunk-WQIHRA5F.js.map +1 -0
  229. package/dist/{chunk-MU7ZHSZE.js → chunk-WZFAPHIK.js} +2 -2
  230. package/dist/{chunk-T2TTP3KU.js → chunk-X4IDNPOS.js} +2 -2
  231. package/dist/{chunk-BLAKS3CP.js → chunk-XL3TATMJ.js} +3 -3
  232. package/dist/{chunk-W4XJFLAL.js → chunk-XPRJSHNI.js} +2 -2
  233. package/dist/{chunk-5TFP4CUL.js → chunk-XQ3HXAQH.js} +14 -11
  234. package/dist/chunk-XQ3HXAQH.js.map +1 -0
  235. package/dist/{chunk-VWAXN2BN.js → chunk-XSFHWBQO.js} +93 -31
  236. package/dist/chunk-XSFHWBQO.js.map +1 -0
  237. package/dist/{chunk-DL7ZD3JH.js → chunk-XTAUXTDO.js} +14 -9
  238. package/dist/chunk-XTAUXTDO.js.map +1 -0
  239. package/dist/{chunk-JE7EK33X.js → chunk-Y7HRYCNW.js} +2 -2
  240. package/dist/{chunk-E6EE5B67.js → chunk-YK6BDDHP.js} +4 -4
  241. package/dist/{chunk-ES36HTSC.js → chunk-YLHM5BQQ.js} +3 -3
  242. package/dist/{chunk-RN7DY3FC.js → chunk-YMAQDHQM.js} +31 -12
  243. package/dist/chunk-YMAQDHQM.js.map +1 -0
  244. package/dist/{chunk-ULARSG5Z.js → chunk-YN6ASZUG.js} +10 -8
  245. package/dist/{chunk-ULARSG5Z.js.map → chunk-YN6ASZUG.js.map} +1 -1
  246. package/dist/{chunk-IKKWIPYN.js → chunk-YYQAKIDJ.js} +37 -1
  247. package/dist/chunk-YYQAKIDJ.js.map +1 -0
  248. package/dist/{chunk-BJKPPZ6Z.js → chunk-ZFGZ6PZ2.js} +2 -2
  249. package/dist/{chunk-CJ2ZR7UA.js → chunk-ZI32MKDW.js} +267 -214
  250. package/dist/chunk-ZI32MKDW.js.map +1 -0
  251. package/dist/{chunk-64UDOIMI.js → chunk-ZLQ37WJX.js} +2 -2
  252. package/dist/chunk-ZMAYKGPN.js +351 -0
  253. package/dist/chunk-ZMAYKGPN.js.map +1 -0
  254. package/dist/{cli-BUGN3d6_.d.ts → cli-BBHDtG36.d.ts} +5 -5
  255. package/dist/cli.d.ts +16 -12
  256. package/dist/cli.js +138 -124
  257. package/dist/compounding/engine.d.ts +3 -2
  258. package/dist/compounding/engine.js +24 -23
  259. package/dist/compounding/preference-consolidator.d.ts +2 -1
  260. package/dist/compression-optimizer.d.ts +2 -1
  261. package/dist/config.d.ts +2 -1
  262. package/dist/config.js +10 -8
  263. package/dist/connectors/codex-materialize-runner.d.ts +2 -1
  264. package/dist/connectors/codex-materialize-runner.js +23 -22
  265. package/dist/connectors/codex-materialize.d.ts +2 -1
  266. package/dist/connectors/index.d.ts +2 -1
  267. package/dist/connectors/index.js +26 -25
  268. package/dist/consolidation-provenance-check.d.ts +3 -2
  269. package/dist/consolidation-provenance-check.js +4 -4
  270. package/dist/consolidation-undo.d.ts +3 -2
  271. package/dist/consolidation-undo.js +10 -7
  272. package/dist/consolidation-undo.js.map +1 -1
  273. package/dist/contradiction/index.d.ts +3 -2
  274. package/dist/converge-config.d.ts +2 -1
  275. package/dist/convergence-refresh.d.ts +4 -3
  276. package/dist/convergence-refresh.js +27 -26
  277. package/dist/conversation-index/backend.d.ts +2 -1
  278. package/dist/conversation-index/backend.js +2 -2
  279. package/dist/conversation-index/chunker.d.ts +2 -1
  280. package/dist/conversation-index/faiss-adapter.d.ts +2 -1
  281. package/dist/conversation-index/indexer.d.ts +2 -1
  282. package/dist/conversation-index/search.d.ts +2 -1
  283. package/dist/corpus-watermark.d.ts +2 -1
  284. package/dist/corpus-watermark.js +42 -41
  285. package/dist/day-summary.d.ts +2 -1
  286. package/dist/delinearize.d.ts +2 -1
  287. package/dist/direct-answer-wiring.d.ts +2 -1
  288. package/dist/direct-answer-wiring.js +2 -2
  289. package/dist/direct-answer.d.ts +2 -1
  290. package/dist/embedding-fallback.d.ts +2 -1
  291. package/dist/embedding-fallback.js +2 -2
  292. package/dist/enrichment/index.d.ts +2 -1
  293. package/dist/entity-retrieval-boundaries.js +1 -1
  294. package/dist/entity-retrieval.d.ts +3 -2
  295. package/dist/entity-retrieval.js +24 -23
  296. package/dist/entity-schema.d.ts +2 -1
  297. package/dist/explicit-capture.d.ts +9 -8
  298. package/dist/explicit-capture.js +11 -9
  299. package/dist/external-wiki-access.d.ts +127 -0
  300. package/dist/external-wiki-access.js +186 -0
  301. package/dist/external-wiki-access.js.map +1 -0
  302. package/dist/external-wiki-cli.d.ts +13 -0
  303. package/dist/external-wiki-cli.js +96 -0
  304. package/dist/external-wiki-cli.js.map +1 -0
  305. package/dist/external-wiki-collection-registration.d.ts +39 -0
  306. package/dist/external-wiki-collection-registration.js +79 -0
  307. package/dist/external-wiki-collection-registration.js.map +1 -0
  308. package/dist/external-wiki-collection.d.ts +50 -0
  309. package/dist/external-wiki-collection.js +387 -0
  310. package/dist/external-wiki-collection.js.map +1 -0
  311. package/dist/external-wiki-config.d.ts +13 -0
  312. package/dist/external-wiki-config.js +13 -0
  313. package/dist/external-wiki-config.js.map +1 -0
  314. package/dist/external-wiki-guard.d.ts +11 -0
  315. package/dist/external-wiki-guard.js +18 -0
  316. package/dist/external-wiki-guard.js.map +1 -0
  317. package/dist/external-wiki-mcp-tools.d.ts +123 -0
  318. package/dist/external-wiki-mcp-tools.js +8 -0
  319. package/dist/external-wiki-mcp-tools.js.map +1 -0
  320. package/dist/external-wiki-search.d.ts +42 -0
  321. package/dist/external-wiki-search.js +11 -0
  322. package/dist/external-wiki-search.js.map +1 -0
  323. package/dist/external-wiki.d.ts +43 -0
  324. package/dist/external-wiki.js +16 -0
  325. package/dist/external-wiki.js.map +1 -0
  326. package/dist/extraction-error-classification.d.ts +2 -1
  327. package/dist/extraction-faithfulness.d.ts +2 -1
  328. package/dist/extraction-judge-telemetry.d.ts +2 -1
  329. package/dist/extraction-judge-training.d.ts +2 -1
  330. package/dist/extraction-judge.d.ts +2 -1
  331. package/dist/extraction-liveness.d.ts +2 -1
  332. package/dist/extraction-source-grounding-helpers.d.ts +5 -3
  333. package/dist/extraction-source-grounding-helpers.js +1 -1
  334. package/dist/extraction-source-grounding-rules.d.ts +2 -1
  335. package/dist/extraction-source-grounding-rules.js +2 -2
  336. package/dist/extraction-source-grounding.d.ts +2 -1
  337. package/dist/extraction-source-grounding.js +5 -5
  338. package/dist/extraction.d.ts +2 -1
  339. package/dist/extraction.js +45 -43
  340. package/dist/fallback-llm.d.ts +2 -1
  341. package/dist/graph-dashboard-diff.d.ts +2 -1
  342. package/dist/graph-dashboard-key.d.ts +2 -1
  343. package/dist/graph-dashboard-parser.d.ts +2 -1
  344. package/dist/graph-edge-reinforcement.d.ts +2 -1
  345. package/dist/graph-snapshot.d.ts +2 -1
  346. package/dist/graph.d.ts +2 -1
  347. package/dist/harmonic-retrieval.js +2 -2
  348. package/dist/importance.d.ts +2 -1
  349. package/dist/importers/index.d.ts +2 -1
  350. package/dist/in-flight-reads.d.ts +2 -1
  351. package/dist/index.d.ts +362 -350
  352. package/dist/index.js +291 -259
  353. package/dist/intent.d.ts +2 -1
  354. package/dist/lcm/engine.d.ts +2 -1
  355. package/dist/lcm/engine.js +3 -3
  356. package/dist/lcm/index.d.ts +2 -1
  357. package/dist/lcm/index.js +8 -8
  358. package/dist/lcm/tools.d.ts +2 -1
  359. package/dist/lifecycle.d.ts +2 -1
  360. package/dist/live-connectors-runner.d.ts +2 -1
  361. package/dist/local-llm.d.ts +2 -1
  362. package/dist/local-llm.js +2 -2
  363. package/dist/local-model-endpoint.d.ts +2 -1
  364. package/dist/maintenance/memory-governance.d.ts +2 -1
  365. package/dist/maintenance/memory-governance.js +24 -23
  366. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +3 -2
  367. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +24 -23
  368. package/dist/maintenance/rebuild-memory-projection.d.ts +3 -2
  369. package/dist/maintenance/rebuild-memory-projection.js +26 -25
  370. package/dist/{maintenance-LbuS2rUA.d.ts → maintenance-D2mveyCd.d.ts} +3 -3
  371. package/dist/mcp-memory-inspector-app.d.ts +14 -10
  372. package/dist/mcp-read-only-tools.js +1 -1
  373. package/dist/memory-action-policy.d.ts +2 -1
  374. package/dist/memory-cache.d.ts +2 -1
  375. package/dist/memory-lifecycle-ledger-utils.d.ts +2 -1
  376. package/dist/memory-projection-store.d.ts +2 -1
  377. package/dist/memory-provenance.d.ts +2 -1
  378. package/dist/memory-worth-outcomes.d.ts +3 -2
  379. package/dist/models-json.d.ts +2 -1
  380. package/dist/namespaces/migrate.d.ts +4 -3
  381. package/dist/namespaces/migrate.js +40 -39
  382. package/dist/namespaces/principal.d.ts +2 -1
  383. package/dist/namespaces/search.d.ts +2 -1
  384. package/dist/namespaces/search.js +18 -18
  385. package/dist/namespaces/storage.d.ts +4 -3
  386. package/dist/namespaces/storage.js +23 -22
  387. package/dist/native-knowledge.d.ts +2 -1
  388. package/dist/offline-sync-impression-drain.d.ts +2 -1
  389. package/dist/offline-sync-impression-drain.js +11 -9
  390. package/dist/offline-sync.d.ts +29 -3
  391. package/dist/offline-sync.js +6 -2
  392. package/dist/operator-doctor-corpus.d.ts +2 -1
  393. package/dist/operator-doctor-corpus.js +45 -44
  394. package/dist/operator-doctor-replica.d.ts +2 -1
  395. package/dist/operator-doctor-replica.js +3 -3
  396. package/dist/operator-toolkit.d.ts +4 -3
  397. package/dist/operator-toolkit.js +59 -55
  398. package/dist/orchestration/compression-guideline-coordinator.d.ts +3 -2
  399. package/dist/orchestration/maintenance.d.ts +5 -4
  400. package/dist/orchestration/maintenance.js +36 -33
  401. package/dist/{orchestrator-rHiWt32X.d.ts → orchestrator-DJYlwiUv.d.ts} +14 -7
  402. package/dist/orchestrator.d.ts +9 -8
  403. package/dist/orchestrator.js +201 -189
  404. package/dist/page-versioning.js +3 -3
  405. package/dist/patterns-cli.d.ts +2 -1
  406. package/dist/{pipeline-W_97O8BV.d.ts → pipeline-CNjY4wk3.d.ts} +1 -1
  407. package/dist/policy-runtime.d.ts +2 -1
  408. package/dist/policy-runtime.js +1 -1
  409. package/dist/proactive-contention.d.ts +2 -1
  410. package/dist/provenance.d.ts +2 -1
  411. package/dist/provenance.js +2 -2
  412. package/dist/{qmd-LWtMofAf.d.ts → qmd-C0UDZidt.d.ts} +9 -7
  413. package/dist/qmd-preflight.d.ts +5 -4
  414. package/dist/qmd-preflight.js +2 -2
  415. package/dist/qmd-recall-cache.d.ts +2 -1
  416. package/dist/qmd.d.ts +4 -3
  417. package/dist/qmd.js +5 -5
  418. package/dist/recall-concurrency-config.d.ts +2 -1
  419. package/dist/recall-disclosure-escalation.d.ts +2 -1
  420. package/dist/recall-explain-renderer.d.ts +2 -1
  421. package/dist/recall-explain-renderer.js +3 -3
  422. package/dist/recall-memory-map.d.ts +2 -1
  423. package/dist/recall-planner-llm.d.ts +2 -1
  424. package/dist/recall-state.d.ts +2 -1
  425. package/dist/recall-tag-filter.d.ts +2 -1
  426. package/dist/recall-timings.d.ts +2 -1
  427. package/dist/recall-xray-cli.d.ts +2 -1
  428. package/dist/recall-xray-cli.js +4 -4
  429. package/dist/recall-xray-renderer.d.ts +2 -1
  430. package/dist/recall-xray-renderer.js +3 -3
  431. package/dist/recall-xray.d.ts +8 -1
  432. package/dist/recall-xray.js +2 -2
  433. package/dist/reconcile/cursor.d.ts +12 -2
  434. package/dist/reconcile/cursor.js +46 -7
  435. package/dist/reconcile/cursor.js.map +1 -1
  436. package/dist/reconcile/manifest.d.ts +9 -2
  437. package/dist/reconcile/manifest.js +15 -268
  438. package/dist/reconcile/manifest.js.map +1 -1
  439. package/dist/reconcile/plan.d.ts +4 -1
  440. package/dist/reconcile/plan.js +4 -4
  441. package/dist/replay/normalizers/chatgpt.d.ts +2 -1
  442. package/dist/replay/normalizers/claude.d.ts +2 -1
  443. package/dist/replay/normalizers/openclaw.d.ts +2 -1
  444. package/dist/replay/normalizers/shared.d.ts +2 -1
  445. package/dist/replay/runner.d.ts +2 -1
  446. package/dist/replay/types.d.ts +2 -1
  447. package/dist/replica-divergence.d.ts +2 -1
  448. package/dist/replica-divergence.js +2 -2
  449. package/dist/replica-peers-config.d.ts +2 -1
  450. package/dist/resolve-auth-token.d.ts +2 -1
  451. package/dist/resume-bundles.js +12 -10
  452. package/dist/retrieval-agents.d.ts +4 -3
  453. package/dist/retrieval-agents.js +2 -2
  454. package/dist/retrieval-tiers.d.ts +2 -1
  455. package/dist/routing/engine.d.ts +2 -1
  456. package/dist/routing/store.d.ts +2 -1
  457. package/dist/salvage-envelope.d.ts +2 -1
  458. package/dist/schemas.d.ts +32 -32
  459. package/dist/{scope-profiles-BiQKOE-p.d.ts → scope-profiles-BJzp2F5A.d.ts} +1 -1
  460. package/dist/search/embed-helper.d.ts +2 -1
  461. package/dist/search/embed-helper.js +3 -3
  462. package/dist/search/factory.d.ts +4 -2
  463. package/dist/search/factory.js +20 -18
  464. package/dist/search/index.d.ts +2 -1
  465. package/dist/search/index.js +22 -22
  466. package/dist/search/lancedb-backend.d.ts +2 -1
  467. package/dist/search/lancedb-backend.js +4 -4
  468. package/dist/search/meilisearch-backend.d.ts +2 -1
  469. package/dist/search/meilisearch-backend.js +4 -4
  470. package/dist/search/noop-backend.d.ts +2 -1
  471. package/dist/search/orama-backend.d.ts +2 -1
  472. package/dist/search/orama-backend.js +4 -4
  473. package/dist/search/port.d.ts +18 -1
  474. package/dist/search/port.js +1 -1
  475. package/dist/search/remote-backend.d.ts +2 -1
  476. package/dist/search/remote-backend.js +2 -2
  477. package/dist/secure-store/index.js +2 -2
  478. package/dist/{semantic-consolidation-dHYCyqgh.d.ts → semantic-consolidation-D4KAZO2G.d.ts} +1 -1
  479. package/dist/semantic-consolidation.d.ts +3 -2
  480. package/dist/semantic-consolidation.js +25 -24
  481. package/dist/semantic-rule-promotion.js +23 -22
  482. package/dist/semantic-rule-verifier.d.ts +2 -1
  483. package/dist/semantic-rule-verifier.js +24 -23
  484. package/dist/{service-DJG3KCQ4.d.ts → service-BeDxSqE-.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/shared-context/manager.js +2 -2
  489. package/dist/signal.d.ts +2 -1
  490. package/dist/source-agent-qualifier.d.ts +2 -1
  491. package/dist/source-agent-qualifier.js +42 -40
  492. package/dist/{storage-F9FVh-w9.d.ts → storage-DfjxusTE.d.ts} +24 -12
  493. package/dist/storage.d.ts +3 -2
  494. package/dist/storage.js +25 -24
  495. package/dist/summarizer.d.ts +2 -1
  496. package/dist/summarizer.js +5 -5
  497. package/dist/summary-snapshot.d.ts +2 -1
  498. package/dist/temporal-supersession.d.ts +3 -2
  499. package/dist/temporal-timeline-recall.d.ts +2 -1
  500. package/dist/temporal-validity.d.ts +2 -1
  501. package/dist/threading.d.ts +2 -1
  502. package/dist/tier-migration.d.ts +3 -2
  503. package/dist/tier-routing.d.ts +2 -1
  504. package/dist/tool-scoped-memory.d.ts +5 -1
  505. package/dist/tool-scoped-memory.js +3 -1
  506. package/dist/topics.d.ts +2 -1
  507. package/dist/transcript.d.ts +2 -1
  508. package/dist/transfer/capsule-import.js +4 -4
  509. package/dist/transfer/types.d.ts +12 -12
  510. package/dist/trust-score-stage.d.ts +2 -1
  511. package/dist/trust-score.d.ts +2 -1
  512. package/dist/{types-rEwubvim.d.ts → types-yX_FwERf.d.ts} +8 -1
  513. package/dist/types.d.ts +2 -1
  514. package/dist/types.js +1 -1
  515. package/dist/utility-runtime.d.ts +2 -1
  516. package/dist/verified-recall.js +24 -23
  517. package/dist/write-envelope.d.ts +2 -1
  518. package/package.json +2 -2
  519. package/src/abort-error.ts +17 -0
  520. package/src/access-admin-ops-surface.ts +1 -0
  521. package/src/access-boundary.ts +1 -0
  522. package/src/access-coding-context-resolution.ts +42 -0
  523. package/src/access-extraction-force-flush.ts +38 -2
  524. package/src/access-http-lcm-compaction.ts +5 -2
  525. package/src/access-http-offline-stream.ts +79 -0
  526. package/src/access-http.test.ts +310 -3
  527. package/src/access-http.ts +85 -21
  528. package/src/access-mcp-output-schemas.ts +36 -0
  529. package/src/access-mcp.test.ts +95 -1
  530. package/src/access-mcp.ts +7 -9
  531. package/src/access-observe-helpers.ts +64 -22
  532. package/src/access-observe-write-surface.ts +8 -0
  533. package/src/access-offline-manifest.ts +54 -0
  534. package/src/access-operations-batch.ts +3 -3
  535. package/src/access-operations.ts +13 -7
  536. package/src/access-recall-concurrency.ts +3 -27
  537. package/src/access-recall-surface.ts +3 -0
  538. package/src/access-service-health.test.ts +32 -7
  539. package/src/access-service-namespace.test.ts +55 -0
  540. package/src/access-service-observe-idempotency.test.ts +34 -2
  541. package/src/access-service-observe-lcm-parity.test.ts +138 -3
  542. package/src/access-service-observe-scope.test.ts +160 -1
  543. package/src/access-service-offline-file-content.test.ts +345 -1
  544. package/src/access-service.ts +86 -59
  545. package/src/access-surface-catalog.ts +4 -0
  546. package/src/admin/admin-surfaces.ts +2 -0
  547. package/src/binary-lifecycle/pipeline.test.ts +106 -1
  548. package/src/binary-lifecycle/pipeline.ts +3 -0
  549. package/src/coding/git-context.test.ts +47 -0
  550. package/src/coding/git-context.ts +129 -27
  551. package/src/config.test.ts +24 -0
  552. package/src/config.ts +9 -12
  553. package/src/connector-provenance.test.ts +101 -0
  554. package/src/consolidation-undo.ts +3 -0
  555. package/src/convergence-refresh.ts +14 -2
  556. package/src/correction/correction-access-wiring.ts +9 -7
  557. package/src/correction/correction-executor.test.ts +206 -2
  558. package/src/correction/correction-executor.ts +29 -20
  559. package/src/correction/correction-planner.test.ts +36 -0
  560. package/src/correction/correction-planner.ts +9 -15
  561. package/src/correction/correction-service.ts +3 -1
  562. package/src/correction/correction-storage-integration.test.ts +77 -0
  563. package/src/correction/correction-surfaces.test.ts +41 -28
  564. package/src/correction/passive-capture.test.ts +59 -0
  565. package/src/correction/passive-capture.ts +4 -1
  566. package/src/entity-retrieval-boundaries.ts +17 -4
  567. package/src/entity-retrieval.ts +27 -6
  568. package/src/external-wiki-access.test.ts +65 -0
  569. package/src/external-wiki-access.ts +31 -0
  570. package/src/external-wiki-cli.ts +92 -0
  571. package/src/external-wiki-collection-registration.test.ts +163 -0
  572. package/src/external-wiki-collection-registration.ts +101 -0
  573. package/src/external-wiki-collection.test.ts +502 -0
  574. package/src/external-wiki-collection.ts +503 -0
  575. package/src/external-wiki-config.test.ts +135 -0
  576. package/src/external-wiki-config.ts +100 -0
  577. package/src/external-wiki-guard.ts +83 -0
  578. package/src/external-wiki-mcp-tools.ts +23 -0
  579. package/src/external-wiki-search.test.ts +301 -0
  580. package/src/external-wiki-search.ts +362 -0
  581. package/src/external-wiki.test.ts +240 -0
  582. package/src/external-wiki.ts +453 -0
  583. package/src/extraction-scope-source-agent.test.ts +21 -0
  584. package/src/extraction-source-grounding-helpers.ts +243 -53
  585. package/src/extraction-source-grounding-rules.ts +133 -39
  586. package/src/extraction-source-grounding.test.ts +363 -33
  587. package/src/extraction-timeout.test.ts +1 -0
  588. package/src/extraction-watermark.test.ts +150 -7
  589. package/src/extraction.ts +8 -1
  590. package/src/index.ts +8 -0
  591. package/src/mcp-read-only-tools.ts +1 -0
  592. package/src/offline-sync.test.ts +194 -0
  593. package/src/offline-sync.ts +217 -13
  594. package/src/orchestration/external-wiki-recall-guard.test.ts +94 -0
  595. package/src/orchestration/extraction-persist.ts +19 -2
  596. package/src/orchestration/extraction-run-helpers.ts +37 -19
  597. package/src/orchestration/extraction-run.test.ts +171 -2
  598. package/src/orchestration/extraction-run.ts +11 -13
  599. package/src/orchestration/extraction-watermark.ts +106 -17
  600. package/src/orchestration/generic-recall-paths.ts +14 -0
  601. package/src/orchestration/orchestrator-helpers.ts +2 -0
  602. package/src/orchestration/orchestrator-init.ts +9 -0
  603. package/src/orchestration/recall-internal-deps.ts +6 -0
  604. package/src/orchestration/recall-internal.ts +154 -33
  605. package/src/orchestration/recall-rerank-coordinator.ts +60 -25
  606. package/src/orchestration/recall-search-pipeline.test.ts +75 -1
  607. package/src/orchestration/recall-search-pipeline.ts +50 -10
  608. package/src/orchestrator-convergence-refresh.test.ts +36 -2
  609. package/src/orchestrator.ts +13 -3
  610. package/src/page-versioning.ts +5 -19
  611. package/src/procedural/procedure-recall.ts +5 -1
  612. package/src/provenance-surfaces.test.ts +3 -0
  613. package/src/qmd-client.test.ts +78 -17
  614. package/src/qmd.test.ts +24 -0
  615. package/src/qmd.ts +224 -315
  616. package/src/recall-explain-renderer.ts +3 -0
  617. package/src/recall-rerank-coordinator.test.ts +61 -0
  618. package/src/recall-xray-renderer.test.ts +6 -0
  619. package/src/recall-xray.test.ts +88 -1
  620. package/src/recall-xray.ts +15 -0
  621. package/src/reconcile/cursor.test.ts +48 -0
  622. package/src/reconcile/cursor.ts +58 -11
  623. package/src/reconcile/manifest.test.ts +4 -0
  624. package/src/reconcile/manifest.ts +41 -51
  625. package/src/reconcile/plan.test.ts +4 -0
  626. package/src/reconcile/plan.ts +28 -16
  627. package/src/search/factory.ts +6 -6
  628. package/src/search/port.ts +25 -9
  629. package/src/secure-store/secure-fs.ts +20 -12
  630. package/src/secure-store/secure-store.test.ts +41 -2
  631. package/src/spaces/index.test.ts +61 -2
  632. package/src/spaces/index.ts +44 -18
  633. package/src/storage/entity-alias-config.ts +97 -0
  634. package/src/storage/entity-canonical-id-lock.ts +53 -23
  635. package/src/storage/entity-canonical-id-migration.ts +53 -22
  636. package/src/storage/entity-canonical-id-references.ts +3 -0
  637. package/src/storage/entity-id-safety.ts +7 -0
  638. package/src/storage/entity-store.ts +6 -2
  639. package/src/storage/memory-frontmatter-metadata.ts +4 -9
  640. package/src/storage/memory-migration-serialization.ts +10 -15
  641. package/src/storage/tombstone-blocked-capture-mutation.ts +52 -64
  642. package/src/storage/tombstone-blocked-capture-sync.ts +244 -199
  643. package/src/storage-deletion-revisions.test.ts +91 -0
  644. package/src/storage-fact-hash-index-defer.test.ts +446 -163
  645. package/src/storage.ts +534 -245
  646. package/src/tool-scoped-memory.ts +10 -0
  647. package/src/transfer/capsule-import.ts +13 -0
  648. package/src/transfer/capsule-merge.ts +13 -0
  649. package/src/trust-score-recall-paths.test.ts +75 -1
  650. package/src/types.ts +7 -3
  651. package/dist/capsule-merge-IDWJPCWK.js.map +0 -1
  652. package/dist/chunk-3CE77VAP.js.map +0 -1
  653. package/dist/chunk-3TBLDMJA.js.map +0 -1
  654. package/dist/chunk-4J7G5SY4.js.map +0 -1
  655. package/dist/chunk-57QKLRBV.js.map +0 -1
  656. package/dist/chunk-5TFP4CUL.js.map +0 -1
  657. package/dist/chunk-7XC2HX75.js.map +0 -1
  658. package/dist/chunk-A5OJCXZL.js.map +0 -1
  659. package/dist/chunk-BUE5E2HL.js.map +0 -1
  660. package/dist/chunk-CJ2ZR7UA.js.map +0 -1
  661. package/dist/chunk-CUM2BBPN.js.map +0 -1
  662. package/dist/chunk-D3J5SLQK.js.map +0 -1
  663. package/dist/chunk-DL7ZD3JH.js.map +0 -1
  664. package/dist/chunk-DLVPUX7U.js.map +0 -1
  665. package/dist/chunk-E6PNLPGJ.js.map +0 -1
  666. package/dist/chunk-ECK75GDJ.js.map +0 -1
  667. package/dist/chunk-HREE4JHI.js.map +0 -1
  668. package/dist/chunk-HZFHQ4AQ.js.map +0 -1
  669. package/dist/chunk-IKKWIPYN.js.map +0 -1
  670. package/dist/chunk-J7VGGECD.js.map +0 -1
  671. package/dist/chunk-N5Z4EVOR.js.map +0 -1
  672. package/dist/chunk-NVRYW264.js.map +0 -1
  673. package/dist/chunk-P2BM76KT.js.map +0 -1
  674. package/dist/chunk-PVGDJXVK.js +0 -21
  675. package/dist/chunk-QJAQNXWI.js.map +0 -1
  676. package/dist/chunk-RN7DY3FC.js.map +0 -1
  677. package/dist/chunk-RVLJEII5.js.map +0 -1
  678. package/dist/chunk-S2NCTZGJ.js.map +0 -1
  679. package/dist/chunk-TDHTVMPG.js.map +0 -1
  680. package/dist/chunk-UYLMNVY6.js.map +0 -1
  681. package/dist/chunk-VCD4PSK2.js.map +0 -1
  682. package/dist/chunk-VNA7W7QF.js.map +0 -1
  683. package/dist/chunk-VWAXN2BN.js.map +0 -1
  684. package/dist/chunk-WOCNN776.js.map +0 -1
  685. package/dist/chunk-XYTOI63Z.js.map +0 -1
  686. package/dist/chunk-YV32N67O.js.map +0 -1
  687. /package/dist/{auto-sync-5OE5QOZB.js.map → auto-sync-UPTUVE4X.js.map} +0 -0
  688. /package/dist/{chunk-VUPTKTDV.js.map → chunk-2MRHJNWL.js.map} +0 -0
  689. /package/dist/{chunk-JBPKEARU.js.map → chunk-2QSZNTDO.js.map} +0 -0
  690. /package/dist/{chunk-5IVLTFOV.js.map → chunk-44N6ESJ4.js.map} +0 -0
  691. /package/dist/{chunk-HO3QBJEY.js.map → chunk-5546W5SI.js.map} +0 -0
  692. /package/dist/{chunk-U7GW7NE7.js.map → chunk-5CEECY6P.js.map} +0 -0
  693. /package/dist/{chunk-4UH4BTGK.js.map → chunk-5SNZSWWR.js.map} +0 -0
  694. /package/dist/{chunk-6CZPDBJS.js.map → chunk-5U7ID3EZ.js.map} +0 -0
  695. /package/dist/{chunk-GF22HWS2.js.map → chunk-6NNNURLK.js.map} +0 -0
  696. /package/dist/{chunk-227UFSEQ.js.map → chunk-7RZJWZ46.js.map} +0 -0
  697. /package/dist/{chunk-E5UK4VPE.js.map → chunk-7SHJHPTY.js.map} +0 -0
  698. /package/dist/{chunk-UVIKWC7M.js.map → chunk-7YERSTN7.js.map} +0 -0
  699. /package/dist/{chunk-S5SLVSVY.js.map → chunk-BQIFZ2MP.js.map} +0 -0
  700. /package/dist/{chunk-E53DSZEN.js.map → chunk-C26TE27X.js.map} +0 -0
  701. /package/dist/{chunk-LZ4LDKHZ.js.map → chunk-CLB32OHM.js.map} +0 -0
  702. /package/dist/{chunk-Q6IP2ARR.js.map → chunk-CSOYVTRX.js.map} +0 -0
  703. /package/dist/{chunk-XOQSEF7X.js.map → chunk-CVILPI77.js.map} +0 -0
  704. /package/dist/{chunk-PDLBLTOK.js.map → chunk-EITZHSX6.js.map} +0 -0
  705. /package/dist/{chunk-WUNIWKY4.js.map → chunk-ELIL2A37.js.map} +0 -0
  706. /package/dist/{chunk-CINZGPSJ.js.map → chunk-GUMZC2BO.js.map} +0 -0
  707. /package/dist/{chunk-H24WNPA2.js.map → chunk-GWFSVJ4P.js.map} +0 -0
  708. /package/dist/{chunk-TSH56VPU.js.map → chunk-HAYSYUAB.js.map} +0 -0
  709. /package/dist/{chunk-PKNLM44P.js.map → chunk-JH6BPLOP.js.map} +0 -0
  710. /package/dist/{chunk-KXB4VXHY.js.map → chunk-JIYDRBVZ.js.map} +0 -0
  711. /package/dist/{chunk-AV5ZEH4M.js.map → chunk-KVJRXN2E.js.map} +0 -0
  712. /package/dist/{chunk-JVLCVFQ4.js.map → chunk-KXEFRMCF.js.map} +0 -0
  713. /package/dist/{chunk-WFTIGIIS.js.map → chunk-L6CQ7WIW.js.map} +0 -0
  714. /package/dist/{chunk-EJUEXZHX.js.map → chunk-LLJMAULE.js.map} +0 -0
  715. /package/dist/{chunk-AS7YMSL6.js.map → chunk-M23RF3LJ.js.map} +0 -0
  716. /package/dist/{chunk-3F2LKUMU.js.map → chunk-NIS256NW.js.map} +0 -0
  717. /package/dist/{chunk-YIAA2X3D.js.map → chunk-NK5RGJ65.js.map} +0 -0
  718. /package/dist/{chunk-OQ5PRDDS.js.map → chunk-NTOIP2E6.js.map} +0 -0
  719. /package/dist/{chunk-HLPD7B7P.js.map → chunk-NUEQKLNB.js.map} +0 -0
  720. /package/dist/{chunk-33PLLLL7.js.map → chunk-P7NGM24P.js.map} +0 -0
  721. /package/dist/{chunk-7TWUCYER.js.map → chunk-PNRA7FAD.js.map} +0 -0
  722. /package/dist/{chunk-5I4M26Q7.js.map → chunk-QBSFOKY6.js.map} +0 -0
  723. /package/dist/{chunk-P4DRWEYC.js.map → chunk-QVSBTCVP.js.map} +0 -0
  724. /package/dist/{chunk-AAIUERNB.js.map → chunk-R5RFK3CB.js.map} +0 -0
  725. /package/dist/{chunk-WDISJRMG.js.map → chunk-RMMVQQA6.js.map} +0 -0
  726. /package/dist/{chunk-5SM35XZR.js.map → chunk-S5NZBKKQ.js.map} +0 -0
  727. /package/dist/{chunk-WIPEXG6R.js.map → chunk-SXIMQLGV.js.map} +0 -0
  728. /package/dist/{chunk-OAEQLRCY.js.map → chunk-TN76AKO3.js.map} +0 -0
  729. /package/dist/{chunk-QN25OCUF.js.map → chunk-TQ4GD737.js.map} +0 -0
  730. /package/dist/{chunk-7K5Q6COX.js.map → chunk-TVVEYCNW.js.map} +0 -0
  731. /package/dist/{chunk-DNWXFTLD.js.map → chunk-TYISDI6B.js.map} +0 -0
  732. /package/dist/{chunk-4LMA77JH.js.map → chunk-U2VLVBBH.js.map} +0 -0
  733. /package/dist/{chunk-5ZE7QHTK.js.map → chunk-ULVR5KG7.js.map} +0 -0
  734. /package/dist/{chunk-4B77XSG5.js.map → chunk-UV72DEZD.js.map} +0 -0
  735. /package/dist/{chunk-S2BBISHU.js.map → chunk-VANZKHTN.js.map} +0 -0
  736. /package/dist/{chunk-3Y224NYC.js.map → chunk-VYISFWVX.js.map} +0 -0
  737. /package/dist/{chunk-TIHMZFIV.js.map → chunk-W3IC7QOY.js.map} +0 -0
  738. /package/dist/{chunk-NRV4Y3PM.js.map → chunk-W4FBGYGK.js.map} +0 -0
  739. /package/dist/{chunk-MU7ZHSZE.js.map → chunk-WZFAPHIK.js.map} +0 -0
  740. /package/dist/{chunk-T2TTP3KU.js.map → chunk-X4IDNPOS.js.map} +0 -0
  741. /package/dist/{chunk-BLAKS3CP.js.map → chunk-XL3TATMJ.js.map} +0 -0
  742. /package/dist/{chunk-W4XJFLAL.js.map → chunk-XPRJSHNI.js.map} +0 -0
  743. /package/dist/{chunk-JE7EK33X.js.map → chunk-Y7HRYCNW.js.map} +0 -0
  744. /package/dist/{chunk-E6EE5B67.js.map → chunk-YK6BDDHP.js.map} +0 -0
  745. /package/dist/{chunk-ES36HTSC.js.map → chunk-YLHM5BQQ.js.map} +0 -0
  746. /package/dist/{chunk-BJKPPZ6Z.js.map → chunk-ZFGZ6PZ2.js.map} +0 -0
  747. /package/dist/{chunk-64UDOIMI.js.map → chunk-ZLQ37WJX.js.map} +0 -0
@@ -0,0 +1,94 @@
1
+ import assert from "node:assert/strict";
2
+ import { mkdir, symlink } from "node:fs/promises";
3
+ import path from "node:path";
4
+ import test from "node:test";
5
+
6
+ import type { QmdSearchResult } from "../types.js";
7
+ import * as wikiGuard from "../external-wiki-guard.js";
8
+ import { withTempDir } from "../testing/tmp-dir.js";
9
+ import {
10
+ filterRecallCandidates,
11
+ isExternalWikiCollectionName,
12
+ isGenericRecallExcludedPath,
13
+ } from "./generic-recall-paths.js";
14
+
15
+ const { assertExternalWikiRootOutsideMemoryDir } = wikiGuard;
16
+ const assertCanonicalIsolation = (
17
+ wikiGuard as typeof wikiGuard & {
18
+ assertExternalWikiRootOutsideMemoryDirCanonical(memoryDir: string, rootDir: string): Promise<void>;
19
+ }
20
+ ).assertExternalWikiRootOutsideMemoryDirCanonical;
21
+
22
+ function hit(path: string, snippet: string): QmdSearchResult {
23
+ return { docid: path, path, score: 1, snippet };
24
+ }
25
+
26
+ const OVERLAPPING_QUERY = "bounded context budgets";
27
+ const MEMORY_HIT = hit("openclaw-engram/facts/context-budget.md", `The operator chose ${OVERLAPPING_QUERY}.`);
28
+ const WIKI_HIT = hit(
29
+ "qmd://external-wiki-reading/wiki/context-budgets.md",
30
+ `A compiled guide to ${OVERLAPPING_QUERY}.`
31
+ );
32
+
33
+ const MEMORY_POLICY = {
34
+ qmdCollection: "openclaw-engram",
35
+ qmdColdCollection: "openclaw-engram-cold",
36
+ };
37
+
38
+ test("default recall excludes overlapping external wiki hits before applying its limit", () => {
39
+ const recalled = filterRecallCandidates([WIKI_HIT, MEMORY_HIT], {
40
+ namespacesEnabled: false,
41
+ recallNamespaces: [],
42
+ resolveNamespace: () => "default",
43
+ limit: 1,
44
+ pathPolicy: MEMORY_POLICY,
45
+ });
46
+
47
+ assert.deepEqual(recalled, [MEMORY_HIT]);
48
+ assert.equal(isGenericRecallExcludedPath(WIKI_HIT.path, MEMORY_POLICY, "qmd"), true);
49
+ });
50
+
51
+ test("the recall-only guard leaves on-demand external wiki search results available", () => {
52
+ const onDemandResults = [WIKI_HIT];
53
+
54
+ assert.equal(onDemandResults[0]?.path, WIKI_HIT.path);
55
+ assert.match(onDemandResults[0]?.snippet ?? "", new RegExp(OVERLAPPING_QUERY));
56
+ });
57
+
58
+ test("external wiki collection ids cannot masquerade as memory collections", () => {
59
+ assert.equal(isExternalWikiCollectionName("external-wiki-reading"), true);
60
+ assert.equal(isExternalWikiCollectionName("external-wiki-reading--default"), true);
61
+ assert.equal(isExternalWikiCollectionName("openclaw-engram"), false);
62
+ assert.equal(isExternalWikiCollectionName("my-external-wiki-reading"), false);
63
+ });
64
+
65
+ test("external wiki roots cannot enter the primary memory collection walk", () => {
66
+ assert.throws(
67
+ () => assertExternalWikiRootOutsideMemoryDir("/data/memory", "/data/memory"),
68
+ /must be outside memoryDir/
69
+ );
70
+ assert.throws(
71
+ () => assertExternalWikiRootOutsideMemoryDir("/data/memory", "/data/memory/compiled-wiki"),
72
+ /must be outside memoryDir/
73
+ );
74
+ assert.doesNotThrow(() => assertExternalWikiRootOutsideMemoryDir("/data/memory", "/data/compiled-wiki"));
75
+ });
76
+
77
+ test("external wiki root isolation resolves filesystem aliases", async () => {
78
+ assert.equal(typeof assertCanonicalIsolation, "function");
79
+ await withTempDir(async (rootDir) => {
80
+ const memoryDir = path.join(rootDir, "memory");
81
+ const nestedWiki = path.join(memoryDir, "compiled-wiki");
82
+ const wikiAlias = path.join(rootDir, "wiki-alias");
83
+ await mkdir(nestedWiki, { recursive: true });
84
+ await symlink(nestedWiki, wikiAlias);
85
+ const memoryAlias = path.join(rootDir, "memory-alias");
86
+ await symlink(memoryDir, memoryAlias);
87
+
88
+ await assert.rejects(() => assertCanonicalIsolation(memoryDir, wikiAlias), /must be outside memoryDir/);
89
+ await assert.rejects(
90
+ () => assertCanonicalIsolation(memoryDir, path.join(memoryAlias, "future-wiki")),
91
+ /must be outside memoryDir/
92
+ );
93
+ }, "remnic-external-wiki-guard-");
94
+ });
@@ -419,6 +419,7 @@ export class ExtractionPersistCoordinator {
419
419
  source: string;
420
420
  sources?: ProvenanceSource[];
421
421
  provenance?: "verified" | "unverified" | "none";
422
+ toolScoped?: true;
422
423
  }): Promise<void> => {
423
424
  if (
424
425
  !scopeProfileWritePlan ||
@@ -536,6 +537,7 @@ export class ExtractionPersistCoordinator {
536
537
  contentHashSource: options.category === "fact" ? dedupContent : rawContent,
537
538
  ...(options.sources && options.sources.length > 0 ? { sources: options.sources } : {}),
538
539
  ...(options.provenance ? { provenance: options.provenance } : {}),
540
+ ...(options.toolScoped ? { toolScoped: true as const } : {}),
539
541
  });
540
542
  const promotedId = targetPromotion.id;
541
543
  // #1645: if the TARGET namespace's own tombstone blocked this promotion,
@@ -615,8 +617,12 @@ export class ExtractionPersistCoordinator {
615
617
  sources?: ProvenanceSource[];
616
618
  provenance?: "verified" | "unverified" | "none";
617
619
  }): Promise<void> => {
618
- await promoteMemoryToProfileTargets(options);
619
- if (lifecycleCaps.extractionScopeClassification && withholdToolScopedFromSharedNamespace(options)) return;
620
+ const toolScoped = withholdToolScopedFromSharedNamespace(options);
621
+ await promoteMemoryToProfileTargets({
622
+ ...options,
623
+ ...(toolScoped ? { toolScoped: true as const } : {}),
624
+ });
625
+ if (lifecycleCaps.extractionScopeClassification && toolScoped) return;
620
626
  if (
621
627
  !shouldPromoteToShared(
622
628
  this.deps.config,
@@ -939,6 +945,7 @@ export class ExtractionPersistCoordinator {
939
945
  // Claim-level provenance spans (issue #1575 PR 2).
940
946
  ...(options.sources && options.sources.length > 0 ? { sources: options.sources } : {}),
941
947
  ...(options.provenance ? { provenance: options.provenance } : {}),
948
+ ...(toolScoped ? { toolScoped: true as const } : {}),
942
949
  });
943
950
  const promotedId = sharedPromotion.id;
944
951
  // #1645: if the shared namespace's own tombstone blocked this promotion,
@@ -2019,6 +2026,11 @@ export class ExtractionPersistCoordinator {
2019
2026
  ? "extraction-proactive"
2020
2027
  : "extraction";
2021
2028
  const extractionSourceConnector = sourceContext?.sourceConnector;
2029
+ const factToolScoped = withholdToolScopedFromSharedNamespace({
2030
+ content: fact.content,
2031
+ sourceConnector: extractionSourceConnector,
2032
+ procedureSteps: fact.procedureSteps,
2033
+ });
2022
2034
 
2023
2035
  // Check for contradictions before writing (Phase 2B).
2024
2036
  // NOTE: This block was moved above the chunking branch so that the
@@ -2227,6 +2239,7 @@ export class ExtractionPersistCoordinator {
2227
2239
  // PR #2016: never defer here — fallible chunk/artifact writes follow this
2228
2240
  // durable parent .md; flush the hash now so a throw can't strand it (dup).
2229
2241
  deferHashIndexSave: false,
2242
+ ...(factToolScoped ? { toolScoped: true as const } : {}),
2230
2243
  });
2231
2244
  const parentId = parentWrite.id;
2232
2245
  // #1645: surface the tombstone block and gate active post-write paths
@@ -2310,6 +2323,7 @@ export class ExtractionPersistCoordinator {
2310
2323
  ...(fact.sources && fact.sources.length > 0 ? { sources: fact.sources } : {}),
2311
2324
  ...(fact.provenance ? { provenance: fact.provenance } : {}),
2312
2325
  ...(extractionSourceConnector ? { sourceConnector: extractionSourceConnector } : {}),
2326
+ ...(factToolScoped ? { toolScoped: true as const } : {}),
2313
2327
  },
2314
2328
  );
2315
2329
  }
@@ -2457,6 +2471,7 @@ export class ExtractionPersistCoordinator {
2457
2471
  intentActionType: inferredIntent?.actionType,
2458
2472
  intentEntityTypes: inferredIntent?.entityTypes,
2459
2473
  ...(extractionSourceConnector ? { sourceConnector: extractionSourceConnector } : {}),
2474
+ ...(factToolScoped ? { toolScoped: true as const } : {}),
2460
2475
  });
2461
2476
  }
2462
2477
  // v8.2: graph edge building for chunked memories. #1576: skip pending_review.
@@ -2598,6 +2613,7 @@ export class ExtractionPersistCoordinator {
2598
2613
  // #1909: defer the per-fact index flush to the batch save only when
2599
2614
  // fact dedup is on (the batch saver is a no-op otherwise).
2600
2615
  deferHashIndexSave: factDedupEnabled,
2616
+ ...(factToolScoped ? { toolScoped: true as const } : {}),
2601
2617
  });
2602
2618
  const memoryId = factWrite.id;
2603
2619
  // #1645: surface the tombstone block; gate active post-write paths like #1576
@@ -2762,6 +2778,7 @@ export class ExtractionPersistCoordinator {
2762
2778
  intentActionType: inferredIntent?.actionType,
2763
2779
  intentEntityTypes: inferredIntent?.entityTypes,
2764
2780
  ...(extractionSourceConnector ? { sourceConnector: extractionSourceConnector } : {}),
2781
+ ...(factToolScoped ? { toolScoped: true as const } : {}),
2765
2782
  });
2766
2783
  }
2767
2784
  // Register in the target storage content-hash index after successful
@@ -309,11 +309,11 @@ export async function runExtractionPostPersist(
309
309
  }
310
310
 
311
311
  /**
312
- * Advance the extraction liveness watermark for a successfully parsed empty
313
- * extraction (#2223) and record its processed fingerprint when applicable.
314
- * Fingerprinted/import runs treat the metadata save as load-bearing (dedupe
315
- * state) and propagate failures; normal live runs treat the stamp as
316
- * diagnostic liveness and fail open. Deadline errors always propagate.
312
+ * Record a processed fingerprint when applicable and advance the extraction
313
+ * liveness watermark only for a provider-backed empty success. Fingerprinted
314
+ * imports treat the metadata save as load-bearing dedupe state; normal live
315
+ * runs treat the stamp as diagnostic and fail open. Deadline errors always
316
+ * propagate.
317
317
  */
318
318
  export async function commitEmptySuccessExtraction(args: {
319
319
  storage: StorageManager;
@@ -321,6 +321,7 @@ export async function commitEmptySuccessExtraction(args: {
321
321
  extractionFingerprint: string | null;
322
322
  shouldPersistProcessedFingerprint: boolean;
323
323
  hasExtractionFailure: boolean;
324
+ extractionSkippedReason: ExtractionResult["extractionSkippedReason"];
324
325
  recordProcessedExtractionFingerprint: (storage: StorageManager, fingerprint: string, meta: MetaState) => Promise<unknown>;
325
326
  runDeadlineAware: <T>(operation: () => Promise<T>, phase: string, clearTimerOnError?: boolean) => Promise<T>;
326
327
  isDeadlineError: (error: unknown) => boolean;
@@ -331,26 +332,43 @@ export async function commitEmptySuccessExtraction(args: {
331
332
  extractionFingerprint,
332
333
  shouldPersistProcessedFingerprint,
333
334
  hasExtractionFailure,
335
+ extractionSkippedReason,
334
336
  recordProcessedExtractionFingerprint,
335
337
  runDeadlineAware,
336
338
  isDeadlineError,
337
339
  } = args;
338
- let meta = existingMeta;
339
- if (extractionFingerprint && shouldPersistProcessedFingerprint && !hasExtractionFailure) {
340
- meta ??= await storage.loadMeta();
341
- await recordProcessedExtractionFingerprint(storage, extractionFingerprint, meta);
342
- }
343
- if (!hasExtractionFailure) {
344
- const livenessStampFatal = shouldPersistProcessedFingerprint;
345
- try {
346
- meta ??= await runDeadlineAware(() => storage.loadMeta(), "during_empty_success_liveness_load", false);
340
+ const shouldRecordFingerprint =
341
+ extractionFingerprint !== null &&
342
+ shouldPersistProcessedFingerprint &&
343
+ !hasExtractionFailure;
344
+ const shouldStampLiveness =
345
+ !hasExtractionFailure && extractionSkippedReason === undefined;
346
+ if (!shouldRecordFingerprint && !shouldStampLiveness) return;
347
+
348
+ const metadataFailureIsFatal = shouldRecordFingerprint;
349
+ try {
350
+ const meta =
351
+ existingMeta ??
352
+ await runDeadlineAware(
353
+ () => storage.loadMeta(),
354
+ "during_empty_success_liveness_load",
355
+ false,
356
+ );
357
+ if (shouldRecordFingerprint) {
358
+ await recordProcessedExtractionFingerprint(storage, extractionFingerprint, meta);
359
+ }
360
+ if (shouldStampLiveness) {
347
361
  meta.extractionCount += 1;
348
362
  meta.lastExtractionAt = new Date().toISOString();
349
- await runDeadlineAware(() => storage.saveMeta(meta!), "during_empty_success_liveness_save", false);
350
- } catch (err) {
351
- if (isDeadlineError(err)) throw err;
352
- if (livenessStampFatal) throw err;
353
- log.warn("runExtraction: failed to stamp empty-success liveness watermark (non-fatal)", err);
354
363
  }
364
+ await runDeadlineAware(
365
+ () => storage.saveMeta(meta),
366
+ "during_empty_success_liveness_save",
367
+ false,
368
+ );
369
+ } catch (err) {
370
+ if (isDeadlineError(err)) throw err;
371
+ if (metadataFailureIsFatal) throw err;
372
+ log.warn("runExtraction: failed to stamp empty-success liveness watermark (non-fatal)", err);
355
373
  }
356
374
  }
@@ -93,7 +93,11 @@ interface Harness {
93
93
  setRespond: (fn: (turns: BufferTurn[]) => ExtractionResult | Promise<ExtractionResult>) => void;
94
94
  setPassiveCapture: (fn: () => void | Promise<void>) => void;
95
95
  setMemoryBox: (fn: () => void | Promise<void>) => void;
96
+ setBufferClear: (fn: () => void | Promise<void>) => void;
96
97
  setPersist: (fn: () => void | Promise<void>) => void;
98
+ setFingerprintRecorder: (
99
+ fn: ExtractionRunCoordinatorDeps["recordProcessedExtractionFingerprint"],
100
+ ) => void;
97
101
  recordedProcessedCount: () => number;
98
102
  run: (
99
103
  coord: ExtractionRunCoordinator,
@@ -140,6 +144,9 @@ async function makeHarness(overrides: Record<string, unknown> = {}): Promise<Har
140
144
  let persistHandler: () => void | Promise<void> = async () => {};
141
145
  let memoryBoxHandler: () => void | Promise<void> = async () => {};
142
146
  let recordedProcessedCount = 0;
147
+ let fingerprintRecorder:
148
+ ExtractionRunCoordinatorDeps["recordProcessedExtractionFingerprint"] =
149
+ async () => {};
143
150
 
144
151
  let threadingBlocked = false;
145
152
  let persistCalls = 0;
@@ -184,8 +191,9 @@ async function makeHarness(overrides: Record<string, unknown> = {}): Promise<Har
184
191
  requestQmdMaintenance: () => {},
185
192
  runTierMigrationCycle: async () => migrationSummary,
186
193
  getLastPersistExtractionDeferredCount: () => 0,
187
- recordProcessedExtractionFingerprint: async () => {
194
+ recordProcessedExtractionFingerprint: async (storage, fingerprint, meta) => {
188
195
  recordedProcessedCount += 1;
196
+ await fingerprintRecorder(storage, fingerprint, meta);
189
197
  },
190
198
  });
191
199
 
@@ -210,6 +218,14 @@ async function makeHarness(overrides: Record<string, unknown> = {}): Promise<Har
210
218
  setMemoryBox: (fn) => {
211
219
  memoryBoxHandler = fn;
212
220
  },
221
+ setBufferClear: (fn) => {
222
+ buffer.clearAfterExtraction = async () => {
223
+ await fn();
224
+ };
225
+ },
226
+ setFingerprintRecorder: (fn) => {
227
+ fingerprintRecorder = fn;
228
+ },
213
229
  setPersist: (fn) => {
214
230
  persistHandler = fn;
215
231
  },
@@ -685,6 +701,32 @@ test("circuit breaker: a forced flush still calls extract() while the breaker is
685
701
  }
686
702
  });
687
703
 
704
+ test("circuit breaker: a forced local prefilter skip does not heal an open breaker", async () => {
705
+ const h = await makeHarness({
706
+ extractionRetryScheduleMs: [3_600_000],
707
+ extractionBreakerFailureThreshold: 1,
708
+ extractionBreakerCooldownMs: 3_600_000,
709
+ });
710
+ try {
711
+ const coord = h.newCoordinator();
712
+ h.setRespond(() => failureResult("provider_retryable"));
713
+ await h.run(coord, "fp-1");
714
+ assert.equal(coord.getExtractionResilienceStatus().breaker.state, "open");
715
+
716
+ h.setRespond(() => ({
717
+ ...emptySuccessResult(),
718
+ extractionSkippedReason: "mechanical_telemetry",
719
+ }));
720
+ const result = await h.run(coord, "fp-2", { force: true });
721
+
722
+ assert.equal(result.reason, "empty_extraction_result");
723
+ assert.equal(coord.getExtractionResilienceStatus().breaker.state, "open");
724
+ assert.equal(coord.getExtractionResilienceStatus().breaker.consecutiveFailures, 1);
725
+ } finally {
726
+ await h.cleanup();
727
+ }
728
+ });
729
+
688
730
  test("circuit breaker: auth_config failure opens the breaker immediately (no hot loop)", async () => {
689
731
  const h = await makeHarness({
690
732
  extractionRetryScheduleMs: [3_600_000],
@@ -1013,7 +1055,7 @@ test("extraction liveness (#2223): a normal live empty success advances lastExtr
1013
1055
  const result = await coord.runExtraction(liveTurns("nothing-durable-here"), {
1014
1056
  skipCharThreshold: true,
1015
1057
  skipUserTurnThreshold: true,
1016
- clearBufferAfterExtraction: false,
1058
+ clearBufferAfterExtraction: true,
1017
1059
  bufferKey: "nothing-durable-here",
1018
1060
  });
1019
1061
 
@@ -1030,6 +1072,133 @@ test("extraction liveness (#2223): a normal live empty success advances lastExtr
1030
1072
  }
1031
1073
  });
1032
1074
 
1075
+ test("extraction liveness (#2227): prefilter skips do not advance the watermark", async () => {
1076
+ for (const extractionSkippedReason of [
1077
+ "conversation_only_non_memory",
1078
+ "mechanical_telemetry",
1079
+ ] as const) {
1080
+ const h = await makeHarness();
1081
+ try {
1082
+ h.setRespond(() => ({ ...emptySuccessResult(), extractionSkippedReason }));
1083
+ const storage = await h.storageForNs("default");
1084
+ const before = await storage.loadMeta();
1085
+
1086
+ const result = await h.newCoordinator().runExtraction(liveTurns(extractionSkippedReason), {
1087
+ skipCharThreshold: true,
1088
+ skipUserTurnThreshold: true,
1089
+ clearBufferAfterExtraction: true,
1090
+ bufferKey: extractionSkippedReason,
1091
+ });
1092
+
1093
+ assert.equal(result.reason, "empty_extraction_result");
1094
+ const after = await storage.loadMeta();
1095
+ assert.equal(after.extractionCount, before.extractionCount);
1096
+ assert.equal(after.lastExtractionAt, before.lastExtractionAt);
1097
+ } finally {
1098
+ await h.cleanup();
1099
+ }
1100
+ }
1101
+ });
1102
+
1103
+ test("extraction liveness (#2227): passive-correction failure prevents a live empty-success stamp", async () => {
1104
+ const h = await makeHarness();
1105
+ try {
1106
+ h.setRespond(() => emptySuccessResult());
1107
+ h.setPassiveCapture(() => {
1108
+ throw new Error("passive capture failed");
1109
+ });
1110
+ const storage = await h.storageForNs("default");
1111
+ const before = await storage.loadMeta();
1112
+
1113
+ await assert.rejects(
1114
+ h.newCoordinator().runExtraction(liveTurns("passive-capture-failure"), {
1115
+ skipCharThreshold: true,
1116
+ skipUserTurnThreshold: true,
1117
+ clearBufferAfterExtraction: true,
1118
+ bufferKey: "passive-capture-failure",
1119
+ }),
1120
+ /passive capture failed/,
1121
+ );
1122
+
1123
+ const after = await storage.loadMeta();
1124
+ assert.equal(after.extractionCount, before.extractionCount);
1125
+ assert.equal(after.lastExtractionAt, before.lastExtractionAt);
1126
+ } finally {
1127
+ await h.cleanup();
1128
+ }
1129
+ });
1130
+
1131
+ test("extraction liveness (#2227): buffer-clear failure prevents a live empty-success stamp", async () => {
1132
+ const h = await makeHarness();
1133
+ try {
1134
+ h.setRespond(() => emptySuccessResult());
1135
+ h.setBufferClear(() => {
1136
+ throw new Error("buffer clear failed");
1137
+ });
1138
+ const storage = await h.storageForNs("default");
1139
+ const before = await storage.loadMeta();
1140
+
1141
+ await assert.rejects(
1142
+ h.newCoordinator().runExtraction(liveTurns("buffer-clear-failure"), {
1143
+ skipCharThreshold: true,
1144
+ skipUserTurnThreshold: true,
1145
+ clearBufferAfterExtraction: true,
1146
+ bufferKey: "buffer-clear-failure",
1147
+ }),
1148
+ /buffer clear failed/,
1149
+ );
1150
+
1151
+ const after = await storage.loadMeta();
1152
+ assert.equal(after.extractionCount, before.extractionCount);
1153
+ assert.equal(after.lastExtractionAt, before.lastExtractionAt);
1154
+ } finally {
1155
+ await h.cleanup();
1156
+ }
1157
+ });
1158
+
1159
+ test("extraction liveness (#2227): a fingerprinted prefilter skip persists dedupe state without stamping liveness", async () => {
1160
+ const h = await makeHarness();
1161
+ try {
1162
+ h.setRespond(() => ({
1163
+ ...emptySuccessResult(),
1164
+ extractionSkippedReason: "mechanical_telemetry",
1165
+ }));
1166
+ h.setFingerprintRecorder(async (_storage, fingerprint, meta) => {
1167
+ assert.ok(meta, "empty-success commit supplies preloaded metadata");
1168
+ meta.processedExtractionFingerprints = [
1169
+ ...(meta.processedExtractionFingerprints ?? []),
1170
+ { fingerprint, observedAt: new Date().toISOString() },
1171
+ ];
1172
+ });
1173
+ const storage = await h.storageForNs("default");
1174
+ const before = await storage.loadMeta();
1175
+ const baselineFingerprintCount =
1176
+ before.processedExtractionFingerprints?.length ?? 0;
1177
+
1178
+ const result = await h.newCoordinator().runExtraction(
1179
+ makeTurns("fingerprinted-prefilter"),
1180
+ {
1181
+ skipCharThreshold: true,
1182
+ skipUserTurnThreshold: true,
1183
+ clearBufferAfterExtraction: true,
1184
+ bufferKey: "fingerprinted-prefilter",
1185
+ },
1186
+ );
1187
+
1188
+ assert.equal(result.reason, "empty_extraction_result");
1189
+ const after = await storage.loadMeta();
1190
+ assert.equal(after.extractionCount, before.extractionCount);
1191
+ assert.equal(after.lastExtractionAt, before.lastExtractionAt);
1192
+ assert.equal(
1193
+ after.processedExtractionFingerprints?.length,
1194
+ baselineFingerprintCount + 1,
1195
+ );
1196
+ assert.equal(h.recordedProcessedCount(), 1);
1197
+ } finally {
1198
+ await h.cleanup();
1199
+ }
1200
+ });
1201
+
1033
1202
  test("extraction liveness (#2223): a fingerprinted empty success advances the watermark once and records the fingerprint once", async () => {
1034
1203
  const h = await makeHarness();
1035
1204
  try {
@@ -979,7 +979,7 @@ export class ExtractionRunCoordinator {
979
979
  // pre-#1908 clear-buffer behavior applies below.
980
980
  log.warn("runExtraction: failed to load meta for retry bookkeeping (non-fatal)", err);
981
981
  }
982
- } else {
982
+ } else if (result.extractionSkippedReason === undefined) {
983
983
  // Provider responded without failure → breaker heals; clear any
984
984
  // parked backoff for this fingerprint so it proceeds normally.
985
985
  this.resetProviderBreakerOnSuccess();
@@ -1016,19 +1016,20 @@ export class ExtractionRunCoordinator {
1016
1016
  { extractionFailure }
1017
1017
  );
1018
1018
  }
1019
- await commitEmptySuccessExtraction({
1019
+ const emptySuccessCommit = {
1020
1020
  storage,
1021
1021
  meta,
1022
1022
  extractionFingerprint,
1023
1023
  shouldPersistProcessedFingerprint,
1024
1024
  hasExtractionFailure: Boolean(extractionFailure),
1025
+ extractionSkippedReason: result.extractionSkippedReason,
1025
1026
  recordProcessedExtractionFingerprint: this.deps.recordProcessedExtractionFingerprint,
1026
1027
  runDeadlineAware,
1027
- isDeadlineError: (error) => error instanceof ExtractionDeadlineError,
1028
- });
1029
- // Correction-only turns that meet char/user-turn thresholds but yield
1030
- // zero facts still need passive capture (review: "empty extraction skips
1031
- // capture"). selfNamespace/principal already resolved above.
1028
+ isDeadlineError: (error: unknown) => error instanceof ExtractionDeadlineError,
1029
+ };
1030
+ if (shouldPersistProcessedFingerprint) {
1031
+ await commitEmptySuccessExtraction(emptySuccessCommit);
1032
+ }
1032
1033
  await runPassiveCapture(normalizedTurns as BufferTurn[], {
1033
1034
  sessionKey,
1034
1035
  principal,
@@ -1037,16 +1038,13 @@ export class ExtractionRunCoordinator {
1037
1038
  isLiveSession: clearBufferAfterExtraction,
1038
1039
  });
1039
1040
  if (recordedRetryFailure) {
1040
- // Retain the failed turns so the backoff gate can re-attempt them after
1041
- // nextEligibleAt. Clearing here would lose the data the retry state
1042
- // points at (cursor high + codex P1). Trigger/forced paths already
1043
- // retain via clearBufferAfterExtraction=false; this covers the normal
1044
- // live-session path. Overflow is bounded by MAX_BUFFER_ENTRY_COUNT
1045
- // with a loud eviction log.
1046
1041
  log.debug("runExtraction: retaining buffer for backoff retry after failure");
1047
1042
  } else {
1048
1043
  await clearBuffer();
1049
1044
  }
1045
+ if (!shouldPersistProcessedFingerprint) {
1046
+ await commitEmptySuccessExtraction(emptySuccessCommit);
1047
+ }
1050
1048
  return { status: "skipped", reason: "empty_extraction_result", persistedCount: 0, durableOutputCount: 0 };
1051
1049
  }
1052
1050