@remnic/core 9.45.3 → 9.45.5

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 (766) 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 -75
  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 -76
  8. package/dist/access-boundary.d.ts +15 -11
  9. package/dist/access-boundary.js +84 -75
  10. package/dist/access-citation-namespace.js +2 -2
  11. package/dist/access-cli.js +191 -177
  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 -75
  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 -75
  27. package/dist/access-http.d.ts +15 -11
  28. package/dist/access-http.js +104 -90
  29. package/dist/access-identity-continuity-surface.d.ts +9 -8
  30. package/dist/access-identity-continuity-surface.js +84 -75
  31. package/dist/access-lcm-surface.d.ts +14 -10
  32. package/dist/access-lcm-surface.js +84 -75
  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 -82
  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 -75
  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 -75
  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 -77
  48. package/dist/access-operations.d.ts +18 -14
  49. package/dist/access-operations.js +91 -79
  50. package/dist/access-recall-concurrency.d.ts +16 -26
  51. package/dist/access-recall-concurrency.js +86 -76
  52. package/dist/access-recall-response.d.ts +18 -14
  53. package/dist/access-recall-response.js +84 -75
  54. package/dist/access-recall-surface.d.ts +29 -24
  55. package/dist/access-recall-surface.js +84 -75
  56. package/dist/access-schema.d.ts +84 -84
  57. package/dist/access-schema.js +3 -3
  58. package/dist/{access-service-CiJRsgAB.d.ts → access-service-CNN89xyn.d.ts} +25 -16
  59. package/dist/access-service-helpers.d.ts +14 -10
  60. package/dist/access-service.d.ts +14 -10
  61. package/dist/access-service.js +84 -75
  62. package/dist/access-surface-catalog.d.ts +14 -10
  63. package/dist/access-surface-catalog.js +4 -0
  64. package/dist/access-surface-catalog.js.map +1 -1
  65. package/dist/access-wearables-meetings-surface.d.ts +4 -3
  66. package/dist/action-confidence.d.ts +2 -1
  67. package/dist/active-memory-bridge.d.ts +2 -1
  68. package/dist/active-recall.d.ts +2 -1
  69. package/dist/active-recall.js +10 -8
  70. package/dist/active-recall.js.map +1 -1
  71. package/dist/adapters/index.js +4 -4
  72. package/dist/adapters/registry.js +2 -2
  73. package/dist/{auto-sync-5OE5QOZB.js → auto-sync-UPTUVE4X.js} +6 -6
  74. package/dist/behavior-learner.d.ts +2 -1
  75. package/dist/behavior-learner.js +1 -1
  76. package/dist/behavior-signals.d.ts +2 -1
  77. package/dist/bootstrap.d.ts +9 -8
  78. package/dist/briefing.d.ts +3 -2
  79. package/dist/briefing.js +24 -22
  80. package/dist/buffer-surprise-report.d.ts +2 -1
  81. package/dist/buffer-turn-helpers.d.ts +2 -1
  82. package/dist/buffer.d.ts +3 -2
  83. package/dist/buffer.js +12 -11
  84. package/dist/bulk-import/index.d.ts +4 -3
  85. package/dist/calibration.d.ts +2 -1
  86. package/dist/capabilities.d.ts +2 -1
  87. package/dist/{capsule-merge-IDWJPCWK.js → capsule-merge-Q6AR3XL7.js} +67 -54
  88. package/dist/capsule-merge-Q6AR3XL7.js.map +1 -0
  89. package/dist/{catalog-scBmy0sO.d.ts → catalog-bctMURhN.d.ts} +1 -1
  90. package/dist/causal-behavior.d.ts +2 -1
  91. package/dist/causal-behavior.js +2 -2
  92. package/dist/causal-chain.js +2 -2
  93. package/dist/causal-consolidation.d.ts +2 -1
  94. package/dist/causal-consolidation.js +28 -26
  95. package/dist/causal-consolidation.js.map +1 -1
  96. package/dist/causal-retrieval.js +2 -2
  97. package/dist/causal-trajectory-graph.d.ts +2 -1
  98. package/dist/causal-trajectory.js +1 -1
  99. package/dist/{chunk-E5UK4VPE.js → chunk-2FSTB6BJ.js} +5 -5
  100. package/dist/{chunk-5ZE7QHTK.js → chunk-2X2T2UVE.js} +5 -5
  101. package/dist/{chunk-P4DRWEYC.js → chunk-3COYXTGM.js} +2 -2
  102. package/dist/{chunk-5IVLTFOV.js → chunk-44N6ESJ4.js} +2 -2
  103. package/dist/{chunk-DL7ZD3JH.js → chunk-4FBVAGV3.js} +14 -9
  104. package/dist/chunk-4FBVAGV3.js.map +1 -0
  105. package/dist/{chunk-WOCNN776.js → chunk-4POAMKV6.js} +100 -41
  106. package/dist/chunk-4POAMKV6.js.map +1 -0
  107. package/dist/{chunk-HO3QBJEY.js → chunk-5546W5SI.js} +2 -2
  108. package/dist/{chunk-AAIUERNB.js → chunk-5QJQHBLE.js} +6 -6
  109. package/dist/{chunk-6CZPDBJS.js → chunk-5U7ID3EZ.js} +3 -3
  110. package/dist/{chunk-RN7DY3FC.js → chunk-6ISC4AVB.js} +31 -12
  111. package/dist/chunk-6ISC4AVB.js.map +1 -0
  112. package/dist/chunk-773TRRGT.js +36 -0
  113. package/dist/chunk-773TRRGT.js.map +1 -0
  114. package/dist/chunk-7T4TOGMS.js +242 -0
  115. package/dist/chunk-7T4TOGMS.js.map +1 -0
  116. package/dist/{chunk-DLVPUX7U.js → chunk-7YKVM5H3.js} +8 -6
  117. package/dist/chunk-7YKVM5H3.js.map +1 -0
  118. package/dist/chunk-7YQ6ESEA.js +322 -0
  119. package/dist/chunk-7YQ6ESEA.js.map +1 -0
  120. package/dist/{chunk-DNWXFTLD.js → chunk-A4IJCD2Z.js} +2 -2
  121. package/dist/{chunk-3CE77VAP.js → chunk-A4JMGKCD.js} +87 -74
  122. package/dist/chunk-A4JMGKCD.js.map +1 -0
  123. package/dist/chunk-A5KNZSNA.js +26 -0
  124. package/dist/chunk-A5KNZSNA.js.map +1 -0
  125. package/dist/{chunk-PKNLM44P.js → chunk-AC5OWJLV.js} +9 -9
  126. package/dist/{chunk-LZ4LDKHZ.js → chunk-AMAUBUKY.js} +6 -6
  127. package/dist/{chunk-CUM2BBPN.js → chunk-AUMWZSE7.js} +19 -10
  128. package/dist/chunk-AUMWZSE7.js.map +1 -0
  129. package/dist/{chunk-BUE5E2HL.js → chunk-BGLY7EEM.js} +5 -314
  130. package/dist/chunk-BGLY7EEM.js.map +1 -0
  131. package/dist/chunk-BIPBQQFI.js +44 -0
  132. package/dist/chunk-BIPBQQFI.js.map +1 -0
  133. package/dist/{chunk-S5SLVSVY.js → chunk-BQIFZ2MP.js} +5 -5
  134. package/dist/chunk-BTTPKDIL.js +34 -0
  135. package/dist/{chunk-PVGDJXVK.js.map → chunk-BTTPKDIL.js.map} +1 -1
  136. package/dist/chunk-CK5KOVHW.js +69 -0
  137. package/dist/chunk-CK5KOVHW.js.map +1 -0
  138. package/dist/{chunk-Q6IP2ARR.js → chunk-CSOYVTRX.js} +2 -2
  139. package/dist/{chunk-XOQSEF7X.js → chunk-CVILPI77.js} +6 -6
  140. package/dist/{chunk-VWAXN2BN.js → chunk-CX4ZUMC6.js} +91 -83
  141. package/dist/chunk-CX4ZUMC6.js.map +1 -0
  142. package/dist/{chunk-NVRYW264.js → chunk-DAJPRXBR.js} +16 -13
  143. package/dist/chunk-DAJPRXBR.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-4LMA77JH.js → chunk-E5XQIWAL.js} +3 -3
  147. package/dist/{chunk-WUNIWKY4.js → chunk-ELIL2A37.js} +6 -6
  148. package/dist/{chunk-OQ5PRDDS.js → chunk-ERZ2R42X.js} +6 -6
  149. package/dist/{chunk-U7GW7NE7.js → chunk-FIK3CQNA.js} +10 -10
  150. package/dist/{chunk-D3J5SLQK.js → chunk-FR27HBBA.js} +81 -20
  151. package/dist/chunk-FR27HBBA.js.map +1 -0
  152. package/dist/{chunk-E6PNLPGJ.js → chunk-FUCYDRE5.js} +838 -480
  153. package/dist/chunk-FUCYDRE5.js.map +1 -0
  154. package/dist/{chunk-HZFHQ4AQ.js → chunk-G7A5HLUS.js} +23 -17
  155. package/dist/chunk-G7A5HLUS.js.map +1 -0
  156. package/dist/{chunk-33PLLLL7.js → chunk-GFCVUY6G.js} +6 -6
  157. package/dist/{chunk-HREE4JHI.js → chunk-GODSPTOT.js} +477 -278
  158. package/dist/chunk-GODSPTOT.js.map +1 -0
  159. package/dist/{chunk-S2NCTZGJ.js → chunk-GRUYA45P.js} +15 -15
  160. package/dist/chunk-GRUYA45P.js.map +1 -0
  161. package/dist/{chunk-VUPTKTDV.js → chunk-GUAL4PQH.js} +3 -3
  162. package/dist/{chunk-CINZGPSJ.js → chunk-GUMZC2BO.js} +2 -2
  163. package/dist/{chunk-H24WNPA2.js → chunk-GWFSVJ4P.js} +3 -3
  164. package/dist/{chunk-7XC2HX75.js → chunk-GYPQL6XN.js} +157 -16
  165. package/dist/chunk-GYPQL6XN.js.map +1 -0
  166. package/dist/{chunk-TSH56VPU.js → chunk-HAYSYUAB.js} +2 -2
  167. package/dist/{chunk-PDLBLTOK.js → chunk-HC3PBX23.js} +9 -9
  168. package/dist/{chunk-TDHTVMPG.js → chunk-HFPASSFV.js} +7 -2
  169. package/dist/chunk-HFPASSFV.js.map +1 -0
  170. package/dist/chunk-J2WC5LF4.js +395 -0
  171. package/dist/chunk-J2WC5LF4.js.map +1 -0
  172. package/dist/{chunk-KXB4VXHY.js → chunk-JIYDRBVZ.js} +2 -2
  173. package/dist/chunk-JV3C2MNQ.js +74 -0
  174. package/dist/chunk-JV3C2MNQ.js.map +1 -0
  175. package/dist/{chunk-HLPD7B7P.js → chunk-JZH4LWHB.js} +2 -2
  176. package/dist/{chunk-AV5ZEH4M.js → chunk-KVJRXN2E.js} +2 -2
  177. package/dist/{chunk-WFTIGIIS.js → chunk-L6CQ7WIW.js} +5 -5
  178. package/dist/{chunk-227UFSEQ.js → chunk-LEPOP46W.js} +4 -4
  179. package/dist/{chunk-EJUEXZHX.js → chunk-LLJMAULE.js} +2 -2
  180. package/dist/{chunk-N5Z4EVOR.js → chunk-LNEWDF2A.js} +36 -11
  181. package/dist/chunk-LNEWDF2A.js.map +1 -0
  182. package/dist/{chunk-QN25OCUF.js → chunk-LPYDOLSM.js} +5 -5
  183. package/dist/{chunk-AS7YMSL6.js → chunk-M23RF3LJ.js} +4 -4
  184. package/dist/{chunk-OAEQLRCY.js → chunk-MO4HSXHZ.js} +5 -5
  185. package/dist/{chunk-ECK75GDJ.js → chunk-N3LL5NEU.js} +43 -24
  186. package/dist/chunk-N3LL5NEU.js.map +1 -0
  187. package/dist/chunk-NEF7LR5J.js +29 -0
  188. package/dist/chunk-NEF7LR5J.js.map +1 -0
  189. package/dist/{chunk-3F2LKUMU.js → chunk-NIS256NW.js} +2 -2
  190. package/dist/{chunk-YIAA2X3D.js → chunk-NK5RGJ65.js} +3 -3
  191. package/dist/chunk-NLDVVWCL.js +84 -0
  192. package/dist/chunk-NLDVVWCL.js.map +1 -0
  193. package/dist/{chunk-4J7G5SY4.js → chunk-NZBZ7IS2.js} +72 -24
  194. package/dist/chunk-NZBZ7IS2.js.map +1 -0
  195. package/dist/{chunk-3TBLDMJA.js → chunk-O4KMGRXE.js} +5 -2
  196. package/dist/chunk-O4KMGRXE.js.map +1 -0
  197. package/dist/{chunk-7TWUCYER.js → chunk-PNRA7FAD.js} +7 -7
  198. package/dist/{chunk-5I4M26Q7.js → chunk-QBSFOKY6.js} +4 -4
  199. package/dist/{chunk-E53DSZEN.js → chunk-QR6G5KF4.js} +3 -3
  200. package/dist/{chunk-CJ2ZR7UA.js → chunk-QUENPGWZ.js} +261 -211
  201. package/dist/chunk-QUENPGWZ.js.map +1 -0
  202. package/dist/{chunk-4UH4BTGK.js → chunk-QVJPH7SH.js} +84 -84
  203. package/dist/{chunk-UYLMNVY6.js → chunk-R3KHKU7M.js} +16 -9
  204. package/dist/chunk-R3KHKU7M.js.map +1 -0
  205. package/dist/{chunk-JBPKEARU.js → chunk-RKNJBZ55.js} +4 -4
  206. package/dist/{chunk-WDISJRMG.js → chunk-RMMVQQA6.js} +2 -2
  207. package/dist/{chunk-JVLCVFQ4.js → chunk-RNHVVMFN.js} +3 -3
  208. package/dist/{chunk-QJAQNXWI.js → chunk-RVO6TCTU.js} +81 -84
  209. package/dist/chunk-RVO6TCTU.js.map +1 -0
  210. package/dist/chunk-S2HLHAZ4.js +16 -0
  211. package/dist/chunk-S2HLHAZ4.js.map +1 -0
  212. package/dist/{chunk-KWMXR7XS.js → chunk-S2V7RUCL.js} +8 -1
  213. package/dist/{chunk-KWMXR7XS.js.map → chunk-S2V7RUCL.js.map} +1 -1
  214. package/dist/{chunk-5SM35XZR.js → chunk-S5NZBKKQ.js} +2 -2
  215. package/dist/{chunk-VNA7W7QF.js → chunk-SVH57F5Z.js} +12 -4
  216. package/dist/chunk-SVH57F5Z.js.map +1 -0
  217. package/dist/{chunk-WIPEXG6R.js → chunk-SXIMQLGV.js} +2 -2
  218. package/dist/{chunk-RVLJEII5.js → chunk-SYUBB3WM.js} +256 -187
  219. package/dist/chunk-SYUBB3WM.js.map +1 -0
  220. package/dist/{chunk-VCD4PSK2.js → chunk-TQZ4DVBC.js} +7 -4
  221. package/dist/chunk-TQZ4DVBC.js.map +1 -0
  222. package/dist/{chunk-7K5Q6COX.js → chunk-TVVEYCNW.js} +4 -4
  223. package/dist/{chunk-YV32N67O.js → chunk-URS5GSM7.js} +1 -1
  224. package/dist/chunk-URS5GSM7.js.map +1 -0
  225. package/dist/{chunk-4B77XSG5.js → chunk-UV72DEZD.js} +5 -5
  226. package/dist/{chunk-BJKPPZ6Z.js → chunk-UW66OZTD.js} +2 -2
  227. package/dist/{chunk-XYTOI63Z.js → chunk-V2TNYF6Q.js} +19 -11
  228. package/dist/chunk-V2TNYF6Q.js.map +1 -0
  229. package/dist/{chunk-S2BBISHU.js → chunk-VANZKHTN.js} +3 -3
  230. package/dist/chunk-VHFXP27N.js +250 -0
  231. package/dist/chunk-VHFXP27N.js.map +1 -0
  232. package/dist/chunk-VL35ZFSZ.js +102 -0
  233. package/dist/chunk-VL35ZFSZ.js.map +1 -0
  234. package/dist/{chunk-3Y224NYC.js → chunk-VYISFWVX.js} +2 -2
  235. package/dist/{chunk-JE7EK33X.js → chunk-W2V7UESE.js} +2 -2
  236. package/dist/{chunk-TIHMZFIV.js → chunk-W3IC7QOY.js} +3 -3
  237. package/dist/{chunk-NRV4Y3PM.js → chunk-W4FBGYGK.js} +1 -1
  238. package/dist/{chunk-P2BM76KT.js → chunk-WAS4HV46.js} +174 -43
  239. package/dist/chunk-WAS4HV46.js.map +1 -0
  240. package/dist/{chunk-57QKLRBV.js → chunk-WB7JSQCP.js} +2 -1
  241. package/dist/chunk-WB7JSQCP.js.map +1 -0
  242. package/dist/{chunk-A5OJCXZL.js → chunk-WZ3TOIDW.js} +15 -4
  243. package/dist/chunk-WZ3TOIDW.js.map +1 -0
  244. package/dist/{chunk-MU7ZHSZE.js → chunk-WZFAPHIK.js} +2 -2
  245. package/dist/{chunk-T2TTP3KU.js → chunk-X4IDNPOS.js} +2 -2
  246. package/dist/{chunk-UVIKWC7M.js → chunk-XAGYS7X6.js} +17 -17
  247. package/dist/{chunk-BLAKS3CP.js → chunk-XL3TATMJ.js} +3 -3
  248. package/dist/{chunk-W4XJFLAL.js → chunk-XPRJSHNI.js} +2 -2
  249. package/dist/{chunk-5TFP4CUL.js → chunk-XQ3HXAQH.js} +14 -11
  250. package/dist/chunk-XQ3HXAQH.js.map +1 -0
  251. package/dist/{chunk-E6EE5B67.js → chunk-YK6BDDHP.js} +4 -4
  252. package/dist/{chunk-ES36HTSC.js → chunk-YLHM5BQQ.js} +3 -3
  253. package/dist/{chunk-ULARSG5Z.js → chunk-YN6ASZUG.js} +10 -8
  254. package/dist/{chunk-ULARSG5Z.js.map → chunk-YN6ASZUG.js.map} +1 -1
  255. package/dist/{chunk-VOUOLGIP.js → chunk-YRFAYOFQ.js} +11 -13
  256. package/dist/chunk-YRFAYOFQ.js.map +1 -0
  257. package/dist/{chunk-IKKWIPYN.js → chunk-YYQAKIDJ.js} +37 -1
  258. package/dist/chunk-YYQAKIDJ.js.map +1 -0
  259. package/dist/{chunk-GF22HWS2.js → chunk-Z54EM5YZ.js} +4 -4
  260. package/dist/{chunk-64UDOIMI.js → chunk-ZLQ37WJX.js} +2 -2
  261. package/dist/{cli-BUGN3d6_.d.ts → cli-BHBswmUa.d.ts} +5 -5
  262. package/dist/cli.d.ts +16 -12
  263. package/dist/cli.js +138 -123
  264. package/dist/compounding/engine.d.ts +3 -2
  265. package/dist/compounding/engine.js +25 -23
  266. package/dist/compounding/preference-consolidator.d.ts +2 -1
  267. package/dist/compression-optimizer.d.ts +2 -1
  268. package/dist/config.d.ts +2 -1
  269. package/dist/config.js +10 -8
  270. package/dist/connectors/codex-materialize-runner.d.ts +2 -1
  271. package/dist/connectors/codex-materialize-runner.js +24 -22
  272. package/dist/connectors/codex-materialize.d.ts +2 -1
  273. package/dist/connectors/index.d.ts +2 -1
  274. package/dist/connectors/index.js +27 -25
  275. package/dist/consolidation-provenance-check.d.ts +3 -2
  276. package/dist/consolidation-provenance-check.js +4 -4
  277. package/dist/consolidation-undo.d.ts +3 -2
  278. package/dist/consolidation-undo.js +10 -7
  279. package/dist/consolidation-undo.js.map +1 -1
  280. package/dist/contradiction/index.d.ts +3 -2
  281. package/dist/converge-config.d.ts +2 -1
  282. package/dist/convergence-refresh.d.ts +4 -3
  283. package/dist/convergence-refresh.js +28 -26
  284. package/dist/conversation-index/backend.d.ts +2 -1
  285. package/dist/conversation-index/backend.js +2 -2
  286. package/dist/conversation-index/chunker.d.ts +2 -1
  287. package/dist/conversation-index/faiss-adapter.d.ts +2 -1
  288. package/dist/conversation-index/indexer.d.ts +2 -1
  289. package/dist/conversation-index/search.d.ts +2 -1
  290. package/dist/corpus-watermark.d.ts +2 -1
  291. package/dist/corpus-watermark.js +43 -41
  292. package/dist/day-summary.d.ts +2 -1
  293. package/dist/delinearize.d.ts +2 -1
  294. package/dist/direct-answer-wiring.d.ts +2 -1
  295. package/dist/direct-answer-wiring.js +2 -2
  296. package/dist/direct-answer.d.ts +2 -1
  297. package/dist/embedding-fallback.d.ts +2 -1
  298. package/dist/embedding-fallback.js +2 -2
  299. package/dist/enrichment/index.d.ts +2 -1
  300. package/dist/entity-retrieval-boundaries.js +1 -1
  301. package/dist/entity-retrieval.d.ts +3 -2
  302. package/dist/entity-retrieval.js +25 -23
  303. package/dist/entity-schema.d.ts +2 -1
  304. package/dist/explicit-capture.d.ts +9 -8
  305. package/dist/explicit-capture.js +11 -9
  306. package/dist/external-wiki-access.d.ts +127 -0
  307. package/dist/external-wiki-access.js +187 -0
  308. package/dist/external-wiki-access.js.map +1 -0
  309. package/dist/external-wiki-cli.d.ts +13 -0
  310. package/dist/external-wiki-cli.js +10 -0
  311. package/dist/external-wiki-cli.js.map +1 -0
  312. package/dist/external-wiki-collection-registration.d.ts +39 -0
  313. package/dist/external-wiki-collection-registration.js +79 -0
  314. package/dist/external-wiki-collection-registration.js.map +1 -0
  315. package/dist/external-wiki-collection.d.ts +50 -0
  316. package/dist/external-wiki-collection.js +387 -0
  317. package/dist/external-wiki-collection.js.map +1 -0
  318. package/dist/external-wiki-config.d.ts +13 -0
  319. package/dist/external-wiki-config.js +13 -0
  320. package/dist/external-wiki-config.js.map +1 -0
  321. package/dist/external-wiki-guard.d.ts +11 -0
  322. package/dist/external-wiki-guard.js +18 -0
  323. package/dist/external-wiki-guard.js.map +1 -0
  324. package/dist/external-wiki-mcp-tools.d.ts +123 -0
  325. package/dist/external-wiki-mcp-tools.js +8 -0
  326. package/dist/external-wiki-mcp-tools.js.map +1 -0
  327. package/dist/external-wiki-search.d.ts +42 -0
  328. package/dist/external-wiki-search.js +11 -0
  329. package/dist/external-wiki-search.js.map +1 -0
  330. package/dist/external-wiki.d.ts +39 -0
  331. package/dist/external-wiki.js +14 -0
  332. package/dist/external-wiki.js.map +1 -0
  333. package/dist/extraction-error-classification.d.ts +2 -1
  334. package/dist/extraction-faithfulness.d.ts +2 -1
  335. package/dist/extraction-judge-telemetry.d.ts +2 -1
  336. package/dist/extraction-judge-training.d.ts +2 -1
  337. package/dist/extraction-judge.d.ts +2 -1
  338. package/dist/extraction-liveness.d.ts +2 -1
  339. package/dist/extraction-source-grounding-helpers.d.ts +5 -3
  340. package/dist/extraction-source-grounding-helpers.js +1 -1
  341. package/dist/extraction-source-grounding-rules.d.ts +2 -1
  342. package/dist/extraction-source-grounding-rules.js +2 -2
  343. package/dist/extraction-source-grounding.d.ts +2 -1
  344. package/dist/extraction-source-grounding.js +5 -5
  345. package/dist/extraction.d.ts +2 -1
  346. package/dist/extraction.js +46 -43
  347. package/dist/fallback-llm.d.ts +2 -1
  348. package/dist/{first-start-migration-F2QJD66E.js → first-start-migration-ZSHEFEI3.js} +10 -12
  349. package/dist/{first-start-migration-F2QJD66E.js.map → first-start-migration-ZSHEFEI3.js.map} +1 -1
  350. package/dist/graph-dashboard-diff.d.ts +2 -1
  351. package/dist/graph-dashboard-key.d.ts +2 -1
  352. package/dist/graph-dashboard-parser.d.ts +2 -1
  353. package/dist/graph-edge-reinforcement.d.ts +2 -1
  354. package/dist/graph-snapshot.d.ts +2 -1
  355. package/dist/graph.d.ts +2 -1
  356. package/dist/harmonic-retrieval.js +2 -2
  357. package/dist/importance.d.ts +2 -1
  358. package/dist/importers/index.d.ts +2 -1
  359. package/dist/in-flight-reads.d.ts +2 -1
  360. package/dist/index.d.ts +443 -430
  361. package/dist/index.js +304 -269
  362. package/dist/intent.d.ts +2 -1
  363. package/dist/lcm/engine.d.ts +2 -1
  364. package/dist/lcm/engine.js +2 -2
  365. package/dist/lcm/index.d.ts +2 -1
  366. package/dist/lcm/index.js +7 -7
  367. package/dist/lcm/tools.d.ts +2 -1
  368. package/dist/lifecycle.d.ts +2 -1
  369. package/dist/live-connectors-runner.d.ts +2 -1
  370. package/dist/local-llm.d.ts +2 -1
  371. package/dist/local-llm.js +2 -2
  372. package/dist/local-model-endpoint.d.ts +2 -1
  373. package/dist/maintenance/memory-governance.d.ts +2 -1
  374. package/dist/maintenance/memory-governance.js +25 -23
  375. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +3 -2
  376. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +25 -23
  377. package/dist/maintenance/rebuild-memory-projection.d.ts +3 -2
  378. package/dist/maintenance/rebuild-memory-projection.js +27 -25
  379. package/dist/{maintenance-LbuS2rUA.d.ts → maintenance-CoRikzIt.d.ts} +3 -3
  380. package/dist/mcp-memory-inspector-app.d.ts +14 -10
  381. package/dist/mcp-read-only-tools.js +1 -1
  382. package/dist/memory-action-policy.d.ts +2 -1
  383. package/dist/memory-cache.d.ts +2 -1
  384. package/dist/memory-lifecycle-ledger-utils.d.ts +2 -1
  385. package/dist/memory-projection-store.d.ts +2 -1
  386. package/dist/memory-provenance.d.ts +2 -1
  387. package/dist/memory-snapshot.d.ts +10 -0
  388. package/dist/memory-snapshot.js +8 -0
  389. package/dist/memory-snapshot.js.map +1 -0
  390. package/dist/memory-worth-outcomes.d.ts +3 -2
  391. package/dist/models-json.d.ts +2 -1
  392. package/dist/namespaces/migrate.d.ts +4 -3
  393. package/dist/namespaces/migrate.js +41 -39
  394. package/dist/namespaces/principal.d.ts +2 -1
  395. package/dist/namespaces/search.d.ts +2 -1
  396. package/dist/namespaces/search.js +18 -18
  397. package/dist/namespaces/storage.d.ts +4 -3
  398. package/dist/namespaces/storage.js +24 -22
  399. package/dist/native-knowledge.d.ts +2 -1
  400. package/dist/offline-sync-impression-drain.d.ts +2 -1
  401. package/dist/offline-sync-impression-drain.js +11 -9
  402. package/dist/offline-sync.d.ts +29 -3
  403. package/dist/offline-sync.js +6 -2
  404. package/dist/operator-doctor-corpus.d.ts +2 -1
  405. package/dist/operator-doctor-corpus.js +46 -44
  406. package/dist/operator-doctor-replica.d.ts +2 -1
  407. package/dist/operator-doctor-replica.js +3 -3
  408. package/dist/operator-toolkit.d.ts +4 -3
  409. package/dist/operator-toolkit.js +60 -55
  410. package/dist/orchestration/compression-guideline-coordinator.d.ts +3 -2
  411. package/dist/orchestration/maintenance.d.ts +5 -4
  412. package/dist/orchestration/maintenance.js +37 -33
  413. package/dist/{orchestrator-rHiWt32X.d.ts → orchestrator-BJeq7Pw1.d.ts} +14 -7
  414. package/dist/orchestrator.d.ts +9 -8
  415. package/dist/orchestrator.js +200 -186
  416. package/dist/page-versioning.js +3 -3
  417. package/dist/patterns-cli.d.ts +2 -1
  418. package/dist/{pipeline-W_97O8BV.d.ts → pipeline-CNjY4wk3.d.ts} +1 -1
  419. package/dist/policy-runtime.d.ts +2 -1
  420. package/dist/policy-runtime.js +1 -1
  421. package/dist/proactive-contention.d.ts +2 -1
  422. package/dist/provenance.d.ts +2 -1
  423. package/dist/provenance.js +2 -2
  424. package/dist/{qmd-LWtMofAf.d.ts → qmd-C0UDZidt.d.ts} +9 -7
  425. package/dist/qmd-preflight.d.ts +5 -4
  426. package/dist/qmd-preflight.js +2 -2
  427. package/dist/qmd-recall-cache.d.ts +2 -1
  428. package/dist/qmd.d.ts +4 -3
  429. package/dist/qmd.js +8 -8
  430. package/dist/recall-concurrency-config.d.ts +2 -1
  431. package/dist/recall-disclosure-escalation.d.ts +2 -1
  432. package/dist/recall-explain-renderer.d.ts +2 -1
  433. package/dist/recall-explain-renderer.js +3 -3
  434. package/dist/recall-memory-map.d.ts +2 -1
  435. package/dist/recall-planner-llm.d.ts +2 -1
  436. package/dist/recall-state.d.ts +2 -1
  437. package/dist/recall-tag-filter.d.ts +2 -1
  438. package/dist/recall-timings.d.ts +2 -1
  439. package/dist/recall-xray-cli.d.ts +2 -1
  440. package/dist/recall-xray-cli.js +4 -4
  441. package/dist/recall-xray-renderer.d.ts +2 -1
  442. package/dist/recall-xray-renderer.js +3 -3
  443. package/dist/recall-xray.d.ts +8 -1
  444. package/dist/recall-xray.js +2 -2
  445. package/dist/reconcile/cursor.d.ts +12 -2
  446. package/dist/reconcile/cursor.js +46 -7
  447. package/dist/reconcile/cursor.js.map +1 -1
  448. package/dist/reconcile/manifest.d.ts +9 -2
  449. package/dist/reconcile/manifest.js +15 -268
  450. package/dist/reconcile/manifest.js.map +1 -1
  451. package/dist/reconcile/plan.d.ts +4 -1
  452. package/dist/reconcile/plan.js +4 -4
  453. package/dist/replay/normalizers/chatgpt.d.ts +2 -1
  454. package/dist/replay/normalizers/claude.d.ts +2 -1
  455. package/dist/replay/normalizers/openclaw.d.ts +2 -1
  456. package/dist/replay/normalizers/shared.d.ts +2 -1
  457. package/dist/replay/runner.d.ts +2 -1
  458. package/dist/replay/types.d.ts +2 -1
  459. package/dist/replica-divergence.d.ts +2 -1
  460. package/dist/replica-divergence.js +2 -2
  461. package/dist/replica-peers-config.d.ts +2 -1
  462. package/dist/resolve-auth-token.d.ts +2 -1
  463. package/dist/resume-bundles.js +12 -10
  464. package/dist/retrieval-agents.d.ts +4 -3
  465. package/dist/retrieval-agents.js +2 -2
  466. package/dist/retrieval-tiers.d.ts +2 -1
  467. package/dist/routing/engine.d.ts +2 -1
  468. package/dist/routing/store.d.ts +2 -1
  469. package/dist/salvage-envelope.d.ts +2 -1
  470. package/dist/schemas.d.ts +54 -54
  471. package/dist/{scope-profiles-BiQKOE-p.d.ts → scope-profiles-BJzp2F5A.d.ts} +1 -1
  472. package/dist/search/embed-helper.d.ts +2 -1
  473. package/dist/search/embed-helper.js +3 -3
  474. package/dist/search/factory.d.ts +4 -2
  475. package/dist/search/factory.js +20 -18
  476. package/dist/search/index.d.ts +2 -1
  477. package/dist/search/index.js +20 -20
  478. package/dist/search/lancedb-backend.d.ts +2 -1
  479. package/dist/search/lancedb-backend.js +4 -4
  480. package/dist/search/meilisearch-backend.d.ts +2 -1
  481. package/dist/search/meilisearch-backend.js +4 -4
  482. package/dist/search/noop-backend.d.ts +2 -1
  483. package/dist/search/orama-backend.d.ts +2 -1
  484. package/dist/search/orama-backend.js +4 -4
  485. package/dist/search/port.d.ts +18 -1
  486. package/dist/search/port.js +1 -1
  487. package/dist/search/remote-backend.d.ts +2 -1
  488. package/dist/search/remote-backend.js +2 -2
  489. package/dist/secure-store/index.js +2 -2
  490. package/dist/{semantic-consolidation-dHYCyqgh.d.ts → semantic-consolidation-D4KAZO2G.d.ts} +1 -1
  491. package/dist/semantic-consolidation.d.ts +3 -2
  492. package/dist/semantic-consolidation.js +26 -24
  493. package/dist/semantic-rule-promotion.js +24 -22
  494. package/dist/semantic-rule-verifier.d.ts +2 -1
  495. package/dist/semantic-rule-verifier.js +25 -23
  496. package/dist/{service-DJG3KCQ4.d.ts → service-DWC4tq7p.d.ts} +2 -2
  497. package/dist/session-observer-bands.d.ts +2 -1
  498. package/dist/session-observer-state.d.ts +2 -1
  499. package/dist/shared-context/manager.d.ts +10 -9
  500. package/dist/shared-context/manager.js +2 -2
  501. package/dist/signal.d.ts +2 -1
  502. package/dist/source-agent-qualifier.d.ts +2 -1
  503. package/dist/source-agent-qualifier.js +43 -40
  504. package/dist/{storage-F9FVh-w9.d.ts → storage-DPGjB-8e.d.ts} +28 -13
  505. package/dist/storage.d.ts +3 -2
  506. package/dist/storage.js +26 -24
  507. package/dist/summarizer.d.ts +2 -1
  508. package/dist/summarizer.js +5 -5
  509. package/dist/summary-snapshot.d.ts +2 -1
  510. package/dist/temporal-supersession.d.ts +3 -2
  511. package/dist/temporal-timeline-recall.d.ts +2 -1
  512. package/dist/temporal-validity.d.ts +2 -1
  513. package/dist/threading.d.ts +2 -1
  514. package/dist/tier-migration.d.ts +3 -2
  515. package/dist/tier-migration.js +1 -1
  516. package/dist/tier-routing.d.ts +2 -1
  517. package/dist/tool-scoped-memory.d.ts +5 -1
  518. package/dist/tool-scoped-memory.js +3 -1
  519. package/dist/topics.d.ts +2 -1
  520. package/dist/transcript.d.ts +2 -1
  521. package/dist/transfer/capsule-import.js +4 -4
  522. package/dist/transfer/types.d.ts +66 -66
  523. package/dist/trust-score-stage.d.ts +2 -1
  524. package/dist/trust-score.d.ts +2 -1
  525. package/dist/{types-rEwubvim.d.ts → types-yX_FwERf.d.ts} +8 -1
  526. package/dist/types.d.ts +2 -1
  527. package/dist/types.js +1 -1
  528. package/dist/utility-runtime.d.ts +2 -1
  529. package/dist/verified-recall.js +25 -23
  530. package/dist/write-envelope.d.ts +2 -1
  531. package/package.json +2 -2
  532. package/src/abort-error.ts +17 -0
  533. package/src/access-admin-ops-surface.ts +1 -0
  534. package/src/access-boundary.ts +1 -0
  535. package/src/access-coding-context-resolution.ts +42 -0
  536. package/src/access-extraction-force-flush.ts +38 -2
  537. package/src/access-http-lcm-compaction.ts +5 -2
  538. package/src/access-http-offline-stream.ts +80 -0
  539. package/src/access-http.test.ts +310 -3
  540. package/src/access-http.ts +84 -77
  541. package/src/access-mcp-output-schemas.ts +36 -0
  542. package/src/access-mcp.test.ts +95 -1
  543. package/src/access-mcp.ts +7 -9
  544. package/src/access-observe-helpers.ts +64 -22
  545. package/src/access-observe-write-surface.ts +8 -0
  546. package/src/access-offline-manifest.ts +54 -0
  547. package/src/access-operations-batch.ts +3 -3
  548. package/src/access-operations.ts +13 -7
  549. package/src/access-recall-concurrency.ts +3 -27
  550. package/src/access-recall-surface.ts +3 -0
  551. package/src/access-service-health.test.ts +32 -7
  552. package/src/access-service-namespace.test.ts +55 -0
  553. package/src/access-service-observe-idempotency.test.ts +34 -2
  554. package/src/access-service-observe-lcm-parity.test.ts +183 -23
  555. package/src/access-service-observe-scope.test.ts +160 -1
  556. package/src/access-service-offline-file-content.test.ts +345 -1
  557. package/src/access-service.ts +88 -62
  558. package/src/access-surface-catalog.ts +4 -0
  559. package/src/admin/admin-surfaces.ts +2 -0
  560. package/src/binary-lifecycle/pipeline.test.ts +106 -1
  561. package/src/binary-lifecycle/pipeline.ts +3 -0
  562. package/src/coding/git-context.test.ts +47 -0
  563. package/src/coding/git-context.ts +129 -27
  564. package/src/config.test.ts +24 -0
  565. package/src/config.ts +9 -12
  566. package/src/connector-provenance.test.ts +101 -0
  567. package/src/consolidation-undo.ts +3 -0
  568. package/src/convergence-refresh.ts +14 -2
  569. package/src/correction/correction-access-wiring.ts +9 -7
  570. package/src/correction/correction-executor.test.ts +206 -2
  571. package/src/correction/correction-executor.ts +29 -20
  572. package/src/correction/correction-planner.test.ts +36 -0
  573. package/src/correction/correction-planner.ts +9 -15
  574. package/src/correction/correction-service.ts +3 -1
  575. package/src/correction/correction-storage-integration.test.ts +77 -0
  576. package/src/correction/correction-surfaces.test.ts +41 -28
  577. package/src/correction/passive-capture.test.ts +59 -0
  578. package/src/correction/passive-capture.ts +4 -1
  579. package/src/entity-retrieval-boundaries.ts +17 -4
  580. package/src/entity-retrieval.ts +27 -6
  581. package/src/external-wiki-access.test.ts +65 -0
  582. package/src/external-wiki-access.ts +31 -0
  583. package/src/external-wiki-cli.ts +100 -0
  584. package/src/external-wiki-collection-registration.test.ts +163 -0
  585. package/src/external-wiki-collection-registration.ts +101 -0
  586. package/src/external-wiki-collection.test.ts +502 -0
  587. package/src/external-wiki-collection.ts +503 -0
  588. package/src/external-wiki-config.test.ts +135 -0
  589. package/src/external-wiki-config.ts +100 -0
  590. package/src/external-wiki-guard.ts +83 -0
  591. package/src/external-wiki-mcp-tools.ts +23 -0
  592. package/src/external-wiki-search.test.ts +367 -0
  593. package/src/external-wiki-search.ts +362 -0
  594. package/src/external-wiki.test.ts +240 -0
  595. package/src/external-wiki.ts +427 -0
  596. package/src/extraction-scope-source-agent.test.ts +21 -0
  597. package/src/extraction-source-grounding-helpers.ts +243 -53
  598. package/src/extraction-source-grounding-rules.ts +133 -39
  599. package/src/extraction-source-grounding.test.ts +363 -33
  600. package/src/extraction-timeout.test.ts +1 -0
  601. package/src/extraction-watermark.test.ts +150 -7
  602. package/src/extraction.ts +8 -1
  603. package/src/index.ts +9 -5
  604. package/src/maintenance/first-start-migration.ts +11 -11
  605. package/src/mcp-read-only-tools.ts +1 -0
  606. package/src/memory-snapshot.ts +15 -0
  607. package/src/offline-sync.test.ts +194 -0
  608. package/src/offline-sync.ts +217 -13
  609. package/src/orchestration/external-wiki-recall-guard.test.ts +94 -0
  610. package/src/orchestration/extraction-persist.ts +19 -2
  611. package/src/orchestration/extraction-run-helpers.ts +37 -19
  612. package/src/orchestration/extraction-run.test.ts +171 -2
  613. package/src/orchestration/extraction-run.ts +11 -13
  614. package/src/orchestration/extraction-watermark.ts +106 -17
  615. package/src/orchestration/generic-recall-paths.ts +14 -0
  616. package/src/orchestration/orchestrator-helpers.ts +2 -0
  617. package/src/orchestration/orchestrator-init.ts +9 -0
  618. package/src/orchestration/recall-internal-deps.ts +6 -0
  619. package/src/orchestration/recall-internal.ts +154 -33
  620. package/src/orchestration/recall-rerank-coordinator.ts +60 -25
  621. package/src/orchestration/recall-search-pipeline.test.ts +75 -1
  622. package/src/orchestration/recall-search-pipeline.ts +50 -10
  623. package/src/orchestrator-convergence-refresh.test.ts +36 -2
  624. package/src/orchestrator.ts +13 -3
  625. package/src/page-versioning.ts +5 -19
  626. package/src/procedural/procedure-recall.ts +5 -1
  627. package/src/provenance-surfaces.test.ts +3 -0
  628. package/src/qmd-client.test.ts +78 -17
  629. package/src/qmd.test.ts +24 -0
  630. package/src/qmd.ts +224 -315
  631. package/src/recall-explain-renderer.ts +3 -0
  632. package/src/recall-rerank-coordinator.test.ts +61 -0
  633. package/src/recall-xray-renderer.test.ts +6 -0
  634. package/src/recall-xray.test.ts +88 -1
  635. package/src/recall-xray.ts +15 -0
  636. package/src/reconcile/cursor.test.ts +48 -0
  637. package/src/reconcile/cursor.ts +58 -11
  638. package/src/reconcile/manifest.test.ts +4 -0
  639. package/src/reconcile/manifest.ts +41 -51
  640. package/src/reconcile/plan.test.ts +4 -0
  641. package/src/reconcile/plan.ts +28 -16
  642. package/src/search/factory.ts +6 -6
  643. package/src/search/port.ts +25 -9
  644. package/src/secure-store/secure-fs.ts +20 -12
  645. package/src/secure-store/secure-store.test.ts +41 -2
  646. package/src/spaces/index.test.ts +61 -2
  647. package/src/spaces/index.ts +44 -18
  648. package/src/storage/entity-alias-config.ts +97 -0
  649. package/src/storage/entity-canonical-id-lock.ts +53 -23
  650. package/src/storage/entity-canonical-id-migration.ts +53 -22
  651. package/src/storage/entity-canonical-id-references.ts +3 -0
  652. package/src/storage/entity-id-safety.ts +7 -0
  653. package/src/storage/entity-store.ts +6 -2
  654. package/src/storage/memory-frontmatter-metadata.ts +4 -9
  655. package/src/storage/memory-migration-serialization.ts +10 -15
  656. package/src/storage/tombstone-blocked-capture-mutation.ts +52 -64
  657. package/src/storage/tombstone-blocked-capture-sync.ts +244 -199
  658. package/src/storage-contract/cache-coherence.test.ts +99 -0
  659. package/src/storage-deletion-revisions.test.ts +91 -0
  660. package/src/storage-fact-hash-index-defer.test.ts +460 -170
  661. package/src/storage.ts +572 -284
  662. package/src/testing/subjects/first-start-tier-migration.test.ts +75 -0
  663. package/src/tier-migration.ts +10 -12
  664. package/src/tool-scoped-memory.ts +10 -0
  665. package/src/transfer/capsule-import.ts +13 -0
  666. package/src/transfer/capsule-merge.ts +13 -0
  667. package/src/trust-score-recall-paths.test.ts +75 -1
  668. package/src/types.ts +7 -3
  669. package/dist/capsule-merge-IDWJPCWK.js.map +0 -1
  670. package/dist/chunk-3CE77VAP.js.map +0 -1
  671. package/dist/chunk-3TBLDMJA.js.map +0 -1
  672. package/dist/chunk-4J7G5SY4.js.map +0 -1
  673. package/dist/chunk-57QKLRBV.js.map +0 -1
  674. package/dist/chunk-5TFP4CUL.js.map +0 -1
  675. package/dist/chunk-7XC2HX75.js.map +0 -1
  676. package/dist/chunk-A5OJCXZL.js.map +0 -1
  677. package/dist/chunk-BUE5E2HL.js.map +0 -1
  678. package/dist/chunk-CJ2ZR7UA.js.map +0 -1
  679. package/dist/chunk-CUM2BBPN.js.map +0 -1
  680. package/dist/chunk-D3J5SLQK.js.map +0 -1
  681. package/dist/chunk-DL7ZD3JH.js.map +0 -1
  682. package/dist/chunk-DLVPUX7U.js.map +0 -1
  683. package/dist/chunk-E6PNLPGJ.js.map +0 -1
  684. package/dist/chunk-ECK75GDJ.js.map +0 -1
  685. package/dist/chunk-HREE4JHI.js.map +0 -1
  686. package/dist/chunk-HZFHQ4AQ.js.map +0 -1
  687. package/dist/chunk-IKKWIPYN.js.map +0 -1
  688. package/dist/chunk-J7VGGECD.js.map +0 -1
  689. package/dist/chunk-N5Z4EVOR.js.map +0 -1
  690. package/dist/chunk-NVRYW264.js.map +0 -1
  691. package/dist/chunk-P2BM76KT.js.map +0 -1
  692. package/dist/chunk-PVGDJXVK.js +0 -21
  693. package/dist/chunk-QJAQNXWI.js.map +0 -1
  694. package/dist/chunk-RN7DY3FC.js.map +0 -1
  695. package/dist/chunk-RVLJEII5.js.map +0 -1
  696. package/dist/chunk-S2NCTZGJ.js.map +0 -1
  697. package/dist/chunk-TDHTVMPG.js.map +0 -1
  698. package/dist/chunk-UYLMNVY6.js.map +0 -1
  699. package/dist/chunk-VCD4PSK2.js.map +0 -1
  700. package/dist/chunk-VNA7W7QF.js.map +0 -1
  701. package/dist/chunk-VOUOLGIP.js.map +0 -1
  702. package/dist/chunk-VWAXN2BN.js.map +0 -1
  703. package/dist/chunk-WOCNN776.js.map +0 -1
  704. package/dist/chunk-XYTOI63Z.js.map +0 -1
  705. package/dist/chunk-YV32N67O.js.map +0 -1
  706. /package/dist/{auto-sync-5OE5QOZB.js.map → auto-sync-UPTUVE4X.js.map} +0 -0
  707. /package/dist/{chunk-E5UK4VPE.js.map → chunk-2FSTB6BJ.js.map} +0 -0
  708. /package/dist/{chunk-5ZE7QHTK.js.map → chunk-2X2T2UVE.js.map} +0 -0
  709. /package/dist/{chunk-P4DRWEYC.js.map → chunk-3COYXTGM.js.map} +0 -0
  710. /package/dist/{chunk-5IVLTFOV.js.map → chunk-44N6ESJ4.js.map} +0 -0
  711. /package/dist/{chunk-HO3QBJEY.js.map → chunk-5546W5SI.js.map} +0 -0
  712. /package/dist/{chunk-AAIUERNB.js.map → chunk-5QJQHBLE.js.map} +0 -0
  713. /package/dist/{chunk-6CZPDBJS.js.map → chunk-5U7ID3EZ.js.map} +0 -0
  714. /package/dist/{chunk-DNWXFTLD.js.map → chunk-A4IJCD2Z.js.map} +0 -0
  715. /package/dist/{chunk-PKNLM44P.js.map → chunk-AC5OWJLV.js.map} +0 -0
  716. /package/dist/{chunk-LZ4LDKHZ.js.map → chunk-AMAUBUKY.js.map} +0 -0
  717. /package/dist/{chunk-S5SLVSVY.js.map → chunk-BQIFZ2MP.js.map} +0 -0
  718. /package/dist/{chunk-Q6IP2ARR.js.map → chunk-CSOYVTRX.js.map} +0 -0
  719. /package/dist/{chunk-XOQSEF7X.js.map → chunk-CVILPI77.js.map} +0 -0
  720. /package/dist/{chunk-4LMA77JH.js.map → chunk-E5XQIWAL.js.map} +0 -0
  721. /package/dist/{chunk-WUNIWKY4.js.map → chunk-ELIL2A37.js.map} +0 -0
  722. /package/dist/{chunk-OQ5PRDDS.js.map → chunk-ERZ2R42X.js.map} +0 -0
  723. /package/dist/{chunk-U7GW7NE7.js.map → chunk-FIK3CQNA.js.map} +0 -0
  724. /package/dist/{chunk-33PLLLL7.js.map → chunk-GFCVUY6G.js.map} +0 -0
  725. /package/dist/{chunk-VUPTKTDV.js.map → chunk-GUAL4PQH.js.map} +0 -0
  726. /package/dist/{chunk-CINZGPSJ.js.map → chunk-GUMZC2BO.js.map} +0 -0
  727. /package/dist/{chunk-H24WNPA2.js.map → chunk-GWFSVJ4P.js.map} +0 -0
  728. /package/dist/{chunk-TSH56VPU.js.map → chunk-HAYSYUAB.js.map} +0 -0
  729. /package/dist/{chunk-PDLBLTOK.js.map → chunk-HC3PBX23.js.map} +0 -0
  730. /package/dist/{chunk-KXB4VXHY.js.map → chunk-JIYDRBVZ.js.map} +0 -0
  731. /package/dist/{chunk-HLPD7B7P.js.map → chunk-JZH4LWHB.js.map} +0 -0
  732. /package/dist/{chunk-AV5ZEH4M.js.map → chunk-KVJRXN2E.js.map} +0 -0
  733. /package/dist/{chunk-WFTIGIIS.js.map → chunk-L6CQ7WIW.js.map} +0 -0
  734. /package/dist/{chunk-227UFSEQ.js.map → chunk-LEPOP46W.js.map} +0 -0
  735. /package/dist/{chunk-EJUEXZHX.js.map → chunk-LLJMAULE.js.map} +0 -0
  736. /package/dist/{chunk-QN25OCUF.js.map → chunk-LPYDOLSM.js.map} +0 -0
  737. /package/dist/{chunk-AS7YMSL6.js.map → chunk-M23RF3LJ.js.map} +0 -0
  738. /package/dist/{chunk-OAEQLRCY.js.map → chunk-MO4HSXHZ.js.map} +0 -0
  739. /package/dist/{chunk-3F2LKUMU.js.map → chunk-NIS256NW.js.map} +0 -0
  740. /package/dist/{chunk-YIAA2X3D.js.map → chunk-NK5RGJ65.js.map} +0 -0
  741. /package/dist/{chunk-7TWUCYER.js.map → chunk-PNRA7FAD.js.map} +0 -0
  742. /package/dist/{chunk-5I4M26Q7.js.map → chunk-QBSFOKY6.js.map} +0 -0
  743. /package/dist/{chunk-E53DSZEN.js.map → chunk-QR6G5KF4.js.map} +0 -0
  744. /package/dist/{chunk-4UH4BTGK.js.map → chunk-QVJPH7SH.js.map} +0 -0
  745. /package/dist/{chunk-JBPKEARU.js.map → chunk-RKNJBZ55.js.map} +0 -0
  746. /package/dist/{chunk-WDISJRMG.js.map → chunk-RMMVQQA6.js.map} +0 -0
  747. /package/dist/{chunk-JVLCVFQ4.js.map → chunk-RNHVVMFN.js.map} +0 -0
  748. /package/dist/{chunk-5SM35XZR.js.map → chunk-S5NZBKKQ.js.map} +0 -0
  749. /package/dist/{chunk-WIPEXG6R.js.map → chunk-SXIMQLGV.js.map} +0 -0
  750. /package/dist/{chunk-7K5Q6COX.js.map → chunk-TVVEYCNW.js.map} +0 -0
  751. /package/dist/{chunk-4B77XSG5.js.map → chunk-UV72DEZD.js.map} +0 -0
  752. /package/dist/{chunk-BJKPPZ6Z.js.map → chunk-UW66OZTD.js.map} +0 -0
  753. /package/dist/{chunk-S2BBISHU.js.map → chunk-VANZKHTN.js.map} +0 -0
  754. /package/dist/{chunk-3Y224NYC.js.map → chunk-VYISFWVX.js.map} +0 -0
  755. /package/dist/{chunk-JE7EK33X.js.map → chunk-W2V7UESE.js.map} +0 -0
  756. /package/dist/{chunk-TIHMZFIV.js.map → chunk-W3IC7QOY.js.map} +0 -0
  757. /package/dist/{chunk-NRV4Y3PM.js.map → chunk-W4FBGYGK.js.map} +0 -0
  758. /package/dist/{chunk-MU7ZHSZE.js.map → chunk-WZFAPHIK.js.map} +0 -0
  759. /package/dist/{chunk-T2TTP3KU.js.map → chunk-X4IDNPOS.js.map} +0 -0
  760. /package/dist/{chunk-UVIKWC7M.js.map → chunk-XAGYS7X6.js.map} +0 -0
  761. /package/dist/{chunk-BLAKS3CP.js.map → chunk-XL3TATMJ.js.map} +0 -0
  762. /package/dist/{chunk-W4XJFLAL.js.map → chunk-XPRJSHNI.js.map} +0 -0
  763. /package/dist/{chunk-E6EE5B67.js.map → chunk-YK6BDDHP.js.map} +0 -0
  764. /package/dist/{chunk-ES36HTSC.js.map → chunk-YLHM5BQQ.js.map} +0 -0
  765. /package/dist/{chunk-GF22HWS2.js.map → chunk-Z54EM5YZ.js.map} +0 -0
  766. /package/dist/{chunk-64UDOIMI.js.map → chunk-ZLQ37WJX.js.map} +0 -0
@@ -88,7 +88,7 @@ defineOperation({ name: "recall", description: "Semantic recall.", schema: stric
88
88
  if (input.tags !== undefined) { if (!Array.isArray(input.tags) || !input.tags.every((t) => typeof t === "string")) throw new EngramAccessInputError("tags must be an array of strings"); tags = input.tags; }
89
89
  let tagMatch: "any" | "all" | undefined;
90
90
  if (input.tagMatch !== undefined) { if (input.tagMatch !== "any" && input.tagMatch !== "all") throw new EngramAccessInputError("tagMatch must be one of: any, all"); tagMatch = input.tagMatch; }
91
- const result = await ctx.service.recall({ query: typeof input.query === "string" ? input.query : "", sessionKey: optStr(input.sessionKey), authenticatedPrincipal: ctx.authenticatedPrincipal, namespace: optStr(input.namespace), topK: optNum(input.topK), mode: optStr(input.mode) as RecallPlanMode | "auto" | undefined, includeDebug: input.includeDebug === true, disclosure, cwd: optStr(input.cwd), projectTag: optStr(input.projectTag), asOf: optStr(input.asOf), ...(tags ? { tags } : {}), ...(tagMatch ? { tagMatch } : {}), ...(ctx.abortSignal ? { abortSignal: ctx.abortSignal } : {}) });
91
+ const result = await ctx.service.recall({ query: typeof input.query === "string" ? input.query : "", sessionKey: optStr(input.sessionKey), authenticatedPrincipal: ctx.authenticatedPrincipal, sourceConnector: ctx.sourceConnector, namespace: optStr(input.namespace), topK: optNum(input.topK), mode: optStr(input.mode) as RecallPlanMode | "auto" | undefined, includeDebug: input.includeDebug === true, disclosure, cwd: optStr(input.cwd), projectTag: optStr(input.projectTag), asOf: optStr(input.asOf), ...(tags ? { tags } : {}), ...(tagMatch ? { tagMatch } : {}), ...(ctx.abortSignal ? { abortSignal: ctx.abortSignal } : {}) });
92
92
  return { result };
93
93
  },
94
94
  });
@@ -115,7 +115,7 @@ defineOperation({ name: "recall_xray", description: "X-ray recall.", schema: str
115
115
  let budget: number | undefined;
116
116
  if (input.budget !== undefined) { const p = typeof input.budget === "number" ? input.budget : typeof input.budget === "string" ? Number(input.budget) : undefined; if (p === undefined || !Number.isFinite(p) || p <= 0 || !Number.isInteger(p)) throw new EngramAccessInputError("recall_xray: budget expects a positive integer"); budget = p; }
117
117
  const dr = optStr(input.disclosure);
118
- return { result: await ctx.service.recallXray({ query: defStr(input.query, ""), sessionKey: optStr(input.sessionKey), namespace: optStr(input.namespace), budget, authenticatedPrincipal: ctx.authenticatedPrincipal, ...(dr && dr !== "" ? { disclosure: dr as RecallDisclosure } : {}), ...(ctx.abortSignal ? { abortSignal: ctx.abortSignal } : {}) }) };
118
+ return { result: await ctx.service.recallXray({ query: defStr(input.query, ""), sessionKey: optStr(input.sessionKey), namespace: optStr(input.namespace), budget, authenticatedPrincipal: ctx.authenticatedPrincipal, sourceConnector: ctx.sourceConnector, ...(dr && dr !== "" ? { disclosure: dr as RecallDisclosure } : {}), ...(ctx.abortSignal ? { abortSignal: ctx.abortSignal } : {}) }) };
119
119
  },
120
120
  });
121
121
  defineOperation({ name: "namespace_writable", description: "Read-only preflight: is a namespace writable for the caller's principal?", allowedByOps: ["namespace_writable", "observe", "memory_store"], schema: strictSchema({ namespace: S.str, sessionKey: S.str, op: S.str, cwd: S.str, projectTag: S.str }), handler: async (input, ctx) => {
@@ -163,7 +163,7 @@ defineOperation({ name: "chatgpt_memory_inspector", description: "Memory inspect
163
163
  if (input.currentContextScopes !== undefined) ii.currentContextScopes = input.currentContextScopes as string[];
164
164
  if (input.allowUnverifiedPreview !== undefined) ii.allowUnverifiedPreview = input.allowUnverifiedPreview as boolean;
165
165
  const rsk = ii.sessionKey ?? (ctx.authenticatedPrincipal ? "remnic:chatgpt-memory-inspector:" + randomUUID() : undefined);
166
- const xr = await ctx.service.recallXray({ query: ii.query, sessionKey: rsk, namespace: ii.namespace, currentContextScopes: ii.currentContextScopes, authenticatedPrincipal: ctx.authenticatedPrincipal, mode: "full", disclosure: "chunk", includeRecall: true, ...(ctx.abortSignal ? { abortSignal: ctx.abortSignal } : {}) });
166
+ const xr = await ctx.service.recallXray({ query: ii.query, sessionKey: rsk, namespace: ii.namespace, currentContextScopes: ii.currentContextScopes, authenticatedPrincipal: ctx.authenticatedPrincipal, ...(ctx.sourceConnector ? { sourceConnector: ctx.sourceConnector } : {}), mode: "full", disclosure: "chunk", includeRecall: true, ...(ctx.abortSignal ? { abortSignal: ctx.abortSignal } : {}) });
167
167
  const x = xr.snapshotFound === true ? (xr.snapshot ?? null) : null;
168
168
  const r = xr.recall ?? { query: ii.query, namespace: ii.namespace ?? x?.namespace ?? "global", context: "", count: 0, memoryIds: [], results: [], fallbackUsed: false, sourcesUsed: [], disclosure: "chunk" as const };
169
169
  const ac = await ctx.service.actionConfidence(buildChatGptMemoryInspectorActionRequest(ii, r, x));
@@ -18,6 +18,7 @@ import { defineOperation } from "./access-boundary.js";
18
18
  import { memoryStoreRequestSchema, type MemoryStoreRequest } from "./access-schema.js";
19
19
  import { EngramAccessInputError } from "./access-service.js";
20
20
  import { CorrectionContractError } from "./correction/correction-contract.js";
21
+ import { externalWikiSearchOperation } from "./external-wiki-access.js";
21
22
  import type {
22
23
  EngramAccessMemoryResponse,
23
24
  EngramAccessWriteResponse,
@@ -401,13 +402,16 @@ export const memoryCorrectPlanOperation = defineOperation<
401
402
  schema: memoryCorrectPlanSchema as z.ZodType<MemoryCorrectPlanInput>,
402
403
  handler: async (input, ctx) => {
403
404
  try {
404
- const result = await ctx.service.correctionPlan({
405
- text: input.text,
406
- ...(input.targetIds ? { targetIds: input.targetIds } : {}),
407
- ...(input.sessionKey ? { sessionKey: input.sessionKey } : {}),
408
- ...(input.namespace ? { namespace: input.namespace } : {}),
409
- ...(ctx.authenticatedPrincipal ? { principal: ctx.authenticatedPrincipal } : {}),
410
- });
405
+ const result = await ctx.service.correctionPlan(
406
+ {
407
+ text: input.text,
408
+ ...(input.targetIds ? { targetIds: input.targetIds } : {}),
409
+ ...(input.sessionKey ? { sessionKey: input.sessionKey } : {}),
410
+ ...(input.namespace ? { namespace: input.namespace } : {}),
411
+ ...(ctx.authenticatedPrincipal ? { principal: ctx.authenticatedPrincipal } : {}),
412
+ },
413
+ ctx.abortSignal ? { abortSignal: ctx.abortSignal } : undefined,
414
+ );
411
415
  return { result };
412
416
  } catch (err) {
413
417
  if (err instanceof CorrectionContractError) throw new EngramAccessInputError(err.message);
@@ -461,6 +465,7 @@ export const memoryCorrectApplyOperation = defineOperation<
461
465
  ...(input.sessionKey ? { sessionKey: input.sessionKey } : {}),
462
466
  ...(input.namespace ? { namespace: input.namespace } : {}),
463
467
  ...(ctx.authenticatedPrincipal ? { principal: ctx.authenticatedPrincipal } : {}),
468
+ ...(ctx.abortSignal ? { abortSignal: ctx.abortSignal } : {}),
464
469
  });
465
470
  return { result };
466
471
  } catch (err) {
@@ -684,6 +689,7 @@ import "./relay/mission-access.js";
684
689
  export const REGISTERED_OPERATIONS = [
685
690
  memoryGetOperation.spec.name,
686
691
  memorySearchOperation.spec.name,
692
+ externalWikiSearchOperation.spec.name,
687
693
  memoryStoreOperation.spec.name,
688
694
  codingDecisionOperation.spec.name,
689
695
  codingArchitectureOperation.spec.name,
@@ -13,7 +13,7 @@
13
13
  * module. `raceAbort` and `attachFlightAbort` need no host (they operate on the
14
14
  * caller signal / flight object alone).
15
15
  */
16
- import { abortError, throwIfAborted } from "./abort-error.js";
16
+ import { abortError, raceAbort, throwIfAborted } from "./abort-error.js";
17
17
  import { hashAccessIdempotencyPayload } from "./access-idempotency.js";
18
18
  import {
19
19
  EngramAccessInputError,
@@ -27,6 +27,8 @@ import {
27
27
  toBudgetWarning,
28
28
  } from "./cross-namespace-budget.js";
29
29
 
30
+ export { raceAbort } from "./abort-error.js";
31
+
30
32
  /**
31
33
  * Per-principal recall concurrency slot (issue #1906). `active` counts
32
34
  * in-flight recalls holding a permit; `waiters` is the FIFO queue of callers
@@ -199,32 +201,6 @@ export async function withRecallConcurrency<T>(
199
201
  }
200
202
  }
201
203
 
202
- /**
203
- * Race `p` against `signal` (issue #1906). A single-flight caller waits on
204
- * the shared flight promise but must be able to leave on its own abort. The
205
- * abort listener is removed as soon as the race settles (either `p` won or
206
- * the abort fired) so a settled-first promise never leaks a listener on a
207
- * long-lived signal.
208
- *
209
- * Pre-check the signal BEFORE building the race: an already-aborted signal
210
- * must win even when `p` is already fulfilled. `Promise.race` settles from
211
- * already-resolved members in array order, so a fulfilled `p` (index 0) would
212
- * otherwise beat the synchronously-rejected abort racer (index 1) and let an
213
- * aborted caller proceed into its own persistence + budget accounting before
214
- * the next abort check runs (round 15 #1).
215
- */
216
- export function raceAbort<T>(p: Promise<T>, signal?: AbortSignal): Promise<T> {
217
- if (!signal) return p;
218
- if (signal.aborted) return Promise.reject(abortError("operation aborted"));
219
- let onAbort: (() => void) | undefined;
220
- const racer = new Promise<never>((_resolve, reject) => {
221
- onAbort = () => reject(abortError("operation aborted"));
222
- signal.addEventListener("abort", onAbort, { once: true });
223
- });
224
- return Promise.race([p, racer]).finally(() => {
225
- if (onAbort) signal.removeEventListener("abort", onAbort);
226
- });
227
- }
228
204
 
229
205
  /**
230
206
  * Attach a caller to a single-flight recall (issue #1906 review). Increments
@@ -862,6 +862,7 @@ export class AccessRecallSurface {
862
862
  contextComposition = composition;
863
863
  },
864
864
  ...(authenticatedPrincipal ? { principalOverride: authenticatedPrincipal } : {}),
865
+ ...(request.sourceConnector ? { sourceConnector: request.sourceConnector } : {}),
865
866
  ...(asOf !== undefined ? { asOf } : {}),
866
867
  ...(request.includeLowConfidence === true ? { includeLowConfidence: true } : {}),
867
868
  ...(request.abortSignal ? { abortSignal: request.abortSignal } : {}),
@@ -943,6 +944,7 @@ export class AccessRecallSurface {
943
944
  namespace?: string;
944
945
  budget?: number;
945
946
  authenticatedPrincipal?: string;
947
+ sourceConnector?: string;
946
948
  /**
947
949
  * Disclosure depth used to shape per-result payload (issue #677
948
950
  * PR 3/4). When set, each X-ray result is decorated with the
@@ -1095,6 +1097,7 @@ export class AccessRecallSurface {
1095
1097
  ...(authenticatedPrincipal
1096
1098
  ? { principalOverride: authenticatedPrincipal }
1097
1099
  : {}),
1100
+ ...(request.sourceConnector ? { sourceConnector: request.sourceConnector } : {}),
1098
1101
  ...(request.currentContextScopes !== undefined
1099
1102
  ? { currentContextScopes: request.currentContextScopes }
1100
1103
  : {}),
@@ -474,10 +474,12 @@ test("health keeps namespace QMD failures scoped to the namespace", async () =>
474
474
  }
475
475
  });
476
476
 
477
- test("health surfaces extraction liveness as degraded when the buffer is non-empty and the watermark is stale", async () => {
477
+ test("health surfaces extraction liveness as degraded when the buffer is non-empty and the watermark is stale", async (t) => {
478
+ const nowMs = Date.parse("2026-07-30T12:00:00.000Z");
479
+ t.mock.timers.enable({ apis: ["Date"], now: nowMs });
478
480
  const memoryDir = await mkdtemp(path.join(os.tmpdir(), "remnic-health-liveness-"));
479
481
  try {
480
- const oldTs = new Date(Date.now() - 10_000).toISOString();
482
+ const oldTs = new Date(nowMs - 10_000).toISOString();
481
483
  const config = parseConfig({ memoryDir, qmdEnabled: false, extractionLiveness: { staleWindowMs: 1000 } });
482
484
  const service = new EngramAccessService({
483
485
  config,
@@ -506,16 +508,25 @@ test("health surfaces extraction liveness as degraded when the buffer is non-emp
506
508
  assert.equal(health.extraction.bufferedSessionCount, 3);
507
509
  assert.equal(health.extraction.pendingTurnCount, 12);
508
510
  assert.equal(health.extraction.lastExtractionAt, oldTs);
509
- const oldestAge = health.extraction.oldestBufferedTurnAgeMs ?? -1;
510
- assert.ok(
511
- oldestAge >= 10_000 && oldestAge < 60_000,
512
- `oldest buffered turn age reflects the ~10s offset, not merely non-negative (got ${oldestAge}ms)`,
513
- );
511
+ assert.equal(health.extraction.oldestBufferedTurnAgeMs, 10_000);
514
512
  assert.ok(
515
513
  health.extraction.degradedReason !== null && health.extraction.degradedReason.length > 0,
516
514
  "degraded reason is populated",
517
515
  );
516
+ const scopedHealth = await tokenCapabilityStore.run(
517
+ { version: TOKEN_CAPABILITIES_VERSION, namespaces: ["default"] },
518
+ () => service.health(),
519
+ );
520
+ assert.equal(scopedHealth.extraction.lastExtractionAt, null);
521
+ assert.equal(scopedHealth.extraction.degraded, true);
522
+ assert.equal(scopedHealth.extraction.bufferedSessionCount, 3);
523
+ assert.equal(scopedHealth.extraction.pendingTurnCount, 12);
524
+ assert.equal(scopedHealth.extraction.oldestBufferedTurnAgeMs, 10_000);
525
+ assert.match(scopedHealth.extraction.degradedReason ?? "", /3 buffered session/);
526
+ assert.match(scopedHealth.extraction.degradedReason ?? "", /12 turn\(s\) pending extraction/);
527
+ assert.doesNotMatch(scopedHealth.extraction.degradedReason ?? "", /last succeeded|unreadable/);
518
528
  } finally {
529
+ t.mock.timers.reset();
519
530
  await rm(memoryDir, { recursive: true, force: true });
520
531
  }
521
532
  });
@@ -672,6 +683,13 @@ test("health reports extraction liveness degraded when the buffer read fails (§
672
683
  assert.equal(health.extraction.degraded, true, "an unreadable buffer must not report a healthy pipeline");
673
684
  assert.match(health.extraction.degradedReason ?? "", /unreadable/);
674
685
  assert.match(health.extraction.degradedReason ?? "", /buffer file corrupt/);
686
+ const scopedHealth = await tokenCapabilityStore.run(
687
+ { version: TOKEN_CAPABILITIES_VERSION, namespaces: ["default"] },
688
+ () => service.health(),
689
+ );
690
+ assert.equal(scopedHealth.extraction.lastExtractionAt, null);
691
+ assert.match(scopedHealth.extraction.degradedReason ?? "", /extraction buffer unreadable/);
692
+ assert.doesNotMatch(scopedHealth.extraction.degradedReason ?? "", /buffer file corrupt/);
675
693
  } finally {
676
694
  await rm(memoryDir, { recursive: true, force: true });
677
695
  }
@@ -702,6 +720,13 @@ test("health reports extraction liveness degraded when the watermark (meta) read
702
720
  assert.equal(health.extraction.degraded, true, "an unreadable watermark must not report a healthy pipeline");
703
721
  assert.match(health.extraction.degradedReason ?? "", /watermark unreadable/);
704
722
  assert.match(health.extraction.degradedReason ?? "", /meta\.json unreadable/);
723
+ const scopedHealth = await tokenCapabilityStore.run(
724
+ { version: TOKEN_CAPABILITIES_VERSION, namespaces: ["default"] },
725
+ () => service.health(),
726
+ );
727
+ assert.equal(scopedHealth.extraction.lastExtractionAt, null);
728
+ assert.match(scopedHealth.extraction.degradedReason ?? "", /extraction watermark unreadable/);
729
+ assert.doesNotMatch(scopedHealth.extraction.degradedReason ?? "", /meta\.json unreadable/);
705
730
  } finally {
706
731
  await rm(memoryDir, { recursive: true, force: true });
707
732
  }
@@ -1265,6 +1265,52 @@ test("offlineSyncFiles reports symlink requested paths as input errors", async (
1265
1265
  }
1266
1266
  });
1267
1267
 
1268
+ test("offlineSyncSnapshot and stream expose durable namespace deletion revisions", async () => {
1269
+ const root = await mkdtemp(path.join(os.tmpdir(), "remnic-offline-snapshot-deletions-"));
1270
+ try {
1271
+ const relPath = "facts/deleted.md";
1272
+ const filePath = path.join(root, relPath);
1273
+ await mkdir(path.dirname(filePath), { recursive: true });
1274
+ await writeFile(filePath, "deleted content");
1275
+ const storage = new StorageManager(root);
1276
+ await storage.deleteOfflineSyncFile(filePath);
1277
+ const mtimeMs = (await storage.readDeletionRevisions()).get(relPath);
1278
+ assert.ok(mtimeMs !== undefined);
1279
+
1280
+ const { service } = makeService();
1281
+ (service as unknown as {
1282
+ orchestrator: {
1283
+ config: PluginConfig;
1284
+ getStorage(namespace: string): Promise<StorageManager>;
1285
+ };
1286
+ }).orchestrator.getStorage = async () => storage;
1287
+
1288
+ const snapshot = await service.offlineSyncSnapshot({
1289
+ namespace: "team",
1290
+ principal: "reader",
1291
+ includeContent: false,
1292
+ });
1293
+ const stream = await service.offlineSyncSnapshotStream({
1294
+ namespace: "team",
1295
+ principal: "reader",
1296
+ includeContent: false,
1297
+ });
1298
+
1299
+ assert.deepEqual(snapshot.deletions, [{ path: relPath, mtimeMs }]);
1300
+ assert.deepEqual(stream.deletions, snapshot.deletions);
1301
+
1302
+ await writeFile(filePath, "recreated content");
1303
+ const recreatedStream = await service.offlineSyncSnapshotStream({
1304
+ namespace: "team",
1305
+ principal: "reader",
1306
+ includeContent: false,
1307
+ });
1308
+ assert.deepEqual(recreatedStream.deletions, []);
1309
+ } finally {
1310
+ await rm(root, { recursive: true, force: true });
1311
+ }
1312
+ });
1313
+
1268
1314
  test("offlineSyncSnapshot does not trust client base capture time for server fast-base scans", async () => {
1269
1315
  const root = await mkdtemp(path.join(os.tmpdir(), "remnic-offline-snapshot-client-clock-"));
1270
1316
  try {
@@ -1294,6 +1340,9 @@ test("offlineSyncSnapshot does not trust client base capture time for server fas
1294
1340
  async drainPendingMemoryLifecycleEventsForSync() {
1295
1341
  return { folded: false, pendingDeferred: false };
1296
1342
  },
1343
+ async readDeletionRevisions() {
1344
+ return new Map<string, number>();
1345
+ },
1297
1346
  async readOfflineSyncFile(targetPath: string) {
1298
1347
  return readFile(targetPath);
1299
1348
  },
@@ -1358,6 +1407,9 @@ test("offlineSyncSnapshot drains pending recall-impression spills so a recorded
1358
1407
  async drainPendingMemoryLifecycleEventsForSync() {
1359
1408
  return { folded: false, pendingDeferred: false };
1360
1409
  },
1410
+ async readDeletionRevisions() {
1411
+ return new Map<string, number>();
1412
+ },
1361
1413
  async readOfflineSyncFile(targetPath: string) {
1362
1414
  return readFile(targetPath);
1363
1415
  },
@@ -1441,6 +1493,9 @@ test("offlineSyncSnapshot does NOT drain the global impression queue during a na
1441
1493
  lifecycleDrainCalls += 1;
1442
1494
  return { folded: false, pendingDeferred: false };
1443
1495
  },
1496
+ async readDeletionRevisions() {
1497
+ return new Map<string, number>();
1498
+ },
1444
1499
  async readOfflineSyncFile(targetPath: string) {
1445
1500
  return readFile(targetPath);
1446
1501
  },
@@ -35,7 +35,7 @@ interface ObserveProbe {
35
35
  }>;
36
36
  }
37
37
 
38
- function makeObserveProbe(memoryDir: string): ObserveProbe {
38
+ function makeObserveProbe(memoryDir: string, projectScope = true): ObserveProbe {
39
39
  const contexts = new Map<string, CodingContext>();
40
40
  const lcmCalls: ObserveProbe["lcmCalls"] = [];
41
41
  const extractionCalls: ObserveProbe["extractionCalls"] = [];
@@ -47,7 +47,7 @@ function makeObserveProbe(memoryDir: string): ObserveProbe {
47
47
  namespacePolicies: [
48
48
  { name: "pi-geek", readPrincipals: ["pi-geek"], writePrincipals: ["pi-geek"] },
49
49
  ],
50
- codingMode: { projectScope: true },
50
+ codingMode: { projectScope },
51
51
  memoryDir,
52
52
  // Disable objective-state snapshots so the probe doesn't need a writable
53
53
  // storage backend — the idempotency contract under test is LCM + extraction.
@@ -274,6 +274,38 @@ test("#1649 review fix: rebinding the session's ambient coding context makes the
274
274
  }
275
275
  });
276
276
 
277
+ test("#2206 project-scope-off ignores ambient coding context in observe idempotency", async () => {
278
+ const memoryDir = mkdtempSync(join(tmpdir(), "remnic-observe-unscoped-replay-"));
279
+ try {
280
+ const probe = makeObserveProbe(memoryDir, false);
281
+ const service = new EngramAccessService(probe.orch);
282
+ const key = "observe-batch-unscoped-replay-#6";
283
+ const req = observeRequest({
284
+ idempotencyKey: key,
285
+ projectTag: "Acme/Webshop",
286
+ });
287
+
288
+ const first = await service.observe(req);
289
+ assert.equal(first.effectiveNamespace, "default");
290
+ assert.equal(first.scopeDebug?.codingOverlayApplied, false);
291
+ assert.equal(probe.contexts.size, 0, "disabled project scoping must not attach projectTag context");
292
+ probe.contexts.set(req.sessionKey, {
293
+ projectId: "tag:ignored-while-unscoped",
294
+ branch: "changed-branch",
295
+ rootPath: "/projects/ignored",
296
+ defaultBranch: "main",
297
+ });
298
+ assert.ok(probe.contexts.has(req.sessionKey), "the ambient context change must be injected");
299
+
300
+ const replay = await service.observe(req);
301
+ assert.equal(replay.idempotencyReplay, true);
302
+ assert.equal(probe.extractionCalls.length, 1);
303
+ assert.equal(probe.lcmCalls.length, 1);
304
+ } finally {
305
+ rmSync(memoryDir, { recursive: true, force: true });
306
+ }
307
+ });
308
+
277
309
  test("#1649 review fix: projectTag observe replays correctly despite scope resolution side effects", async () => {
278
310
  // The fingerprint folds in the RESOLVED writeNamespace (not the raw ambient
279
311
  // context). resolveMemoryScopePlan seeds the session context from projectTag
@@ -34,7 +34,7 @@ import { EngramAccessForbiddenError } from "./access-errors.js";
34
34
  import { Orchestrator } from "./orchestrator.js";
35
35
  import { ExtractionDeadlineError } from "./orchestration/extraction-run.js";
36
36
  import { SessionOwnershipError } from "./orchestration/session-context.js";
37
- import type { EngramAccessObserveRequest } from "./access-service.js";
37
+ import type { EngramAccessObserveRequest, MemoryScopePlan } from "./access-service.js";
38
38
  import {
39
39
  combineNamespaces,
40
40
  lcmSessionKeyForNamespace,
@@ -910,19 +910,28 @@ test("#2128: post-flush retained cleanup is best effort and receives lifecycle g
910
910
  }]);
911
911
  });
912
912
 
913
- test("#2128: post-flush retained cleanup stops on abort or deadline", async () => {
913
+ test("#2128: post-flush retained cleanup stops on abort or deadline", async (t) => {
914
914
  const probe = makeParityProbe(withSelfPolicyPrefix("pi-geek"));
915
- (probe.orch as unknown as {
916
- buffer: {
917
- clearRetainedTurnsForSession(
915
+ let cleanupStarted: (() => void) | undefined;
916
+ const cleanupCalls: Array<{
917
+ sessionKey: string;
918
+ ownerPrincipal: string | undefined;
919
+ options: { abortSignal?: AbortSignal; deadlineMs?: number } | undefined;
920
+ }> = [];
921
+ Object.defineProperty(probe.orch, "buffer", {
922
+ configurable: true,
923
+ value: {
924
+ clearRetainedTurnsForSession: async (
918
925
  sessionKey: string,
919
926
  ownerPrincipal?: string,
920
927
  options?: { abortSignal?: AbortSignal; deadlineMs?: number },
921
- ): Promise<void>;
922
- };
923
- }).buffer = {
924
- clearRetainedTurnsForSession: async () => new Promise<void>(() => {}),
925
- };
928
+ ) => {
929
+ cleanupCalls.push({ sessionKey, ownerPrincipal, options });
930
+ cleanupStarted?.();
931
+ return new Promise<void>(() => {});
932
+ },
933
+ },
934
+ });
926
935
  const service = new EngramAccessService(probe.orch);
927
936
  const abortController = new AbortController();
928
937
  setTimeout(() => abortController.abort(), 5).unref();
@@ -941,22 +950,173 @@ test("#2128: post-flush retained cleanup stops on abort or deadline", async () =
941
950
  ]),
942
951
  /extraction force-flush aborted/,
943
952
  );
953
+ assert.deepEqual(cleanupCalls[0], {
954
+ sessionKey: "pi-geek:cleanup-abort",
955
+ ownerPrincipal: "pi-geek",
956
+ options: { abortSignal: abortController.signal, deadlineMs: undefined },
957
+ });
944
958
 
959
+ const cleanupStartedPromise = new Promise<void>((resolve) => {
960
+ cleanupStarted = resolve;
961
+ });
962
+ t.mock.timers.enable({ apis: ["setTimeout", "Date"], now: 0 });
963
+ const deadlineFlush = service.extractionForceFlush({
964
+ sessionKey: "pi-geek:cleanup-deadline",
965
+ authenticatedPrincipal: "pi-geek",
966
+ deadlineMs: 5,
967
+ });
968
+ await Promise.race([
969
+ cleanupStartedPromise,
970
+ new Promise<never>((_resolve, reject) =>
971
+ setImmediate(() => reject(new Error("deadline cleanup did not start"))),
972
+ ),
973
+ ]);
974
+ assert.deepEqual(cleanupCalls[1], {
975
+ sessionKey: "pi-geek:cleanup-deadline",
976
+ ownerPrincipal: "pi-geek",
977
+ options: { abortSignal: undefined, deadlineMs: 5 },
978
+ });
979
+ t.mock.timers.tick(5);
945
980
  await assert.rejects(
946
- () =>
947
- Promise.race([
948
- service.extractionForceFlush({
949
- sessionKey: "pi-geek:cleanup-deadline",
950
- authenticatedPrincipal: "pi-geek",
951
- deadlineMs: Date.now() + 5,
952
- }),
953
- new Promise<never>((_resolve, reject) =>
954
- setTimeout(() => reject(new Error("deadline cleanup test timed out")), 100),
955
- ),
956
- ]),
981
+ deadlineFlush,
957
982
  /replay extraction deadline exceeded \(retained_turn_cleanup\)/,
958
983
  );
959
984
  });
985
+ test("#2206: an expired force-flush deadline stops before scope resolution", async () => {
986
+ const probe = makeParityProbe({ namespacesEnabled: false } as Partial<PluginConfig>);
987
+ const service = new EngramAccessService(probe.orch);
988
+ let scopeResolutionStarted = false;
989
+ const internals = service as unknown as {
990
+ resolveMemoryScopePlan: (request: unknown) => Promise<never>;
991
+ };
992
+ internals.resolveMemoryScopePlan = async () => {
993
+ scopeResolutionStarted = true;
994
+ throw new Error("scope resolution must not start");
995
+ };
996
+
997
+ await assert.rejects(
998
+ service.extractionForceFlush({
999
+ sessionKey: "expired-scope-resolution",
1000
+ deadlineMs: 1,
1001
+ }),
1002
+ /scope_resolution/,
1003
+ );
1004
+ assert.equal(scopeResolutionStarted, false);
1005
+ });
1006
+
1007
+ test("#2206: abort during scope resolution cancels pre-resolution observe preparations", async () => {
1008
+ const probe = makeParityProbe(withSelfPolicyPrefix("pi-geek"));
1009
+ const service = new EngramAccessService(probe.orch);
1010
+ const abortController = new AbortController();
1011
+ let releaseObserveScope!: () => void;
1012
+ let signalObserveScopeStarted!: () => void;
1013
+ let signalFlushScopeStarted!: () => void;
1014
+ const observeScopeGate = new Promise<void>((resolve) => {
1015
+ releaseObserveScope = resolve;
1016
+ });
1017
+ const observeScopeStarted = new Promise<void>((resolve) => {
1018
+ signalObserveScopeStarted = resolve;
1019
+ });
1020
+ const flushScopeStarted = new Promise<void>((resolve) => {
1021
+ signalFlushScopeStarted = resolve;
1022
+ });
1023
+ const internals = service as unknown as {
1024
+ resolveMemoryScopePlan: (
1025
+ request: EngramAccessObserveRequest & { messages?: unknown },
1026
+ ) => Promise<MemoryScopePlan>;
1027
+ };
1028
+ const resolveMemoryScopePlan = internals.resolveMemoryScopePlan.bind(service);
1029
+ internals.resolveMemoryScopePlan = async (request) => {
1030
+ if (request.messages !== undefined) {
1031
+ signalObserveScopeStarted();
1032
+ await observeScopeGate;
1033
+ return resolveMemoryScopePlan(request);
1034
+ }
1035
+ signalFlushScopeStarted();
1036
+ return new Promise<never>(() => {});
1037
+ };
1038
+
1039
+ const observe = service.observe(observeRequest({
1040
+ sessionKey: "pi-geek:abort-scope-resolution",
1041
+ namespace: "pi-geek",
1042
+ authenticatedPrincipal: "pi-geek",
1043
+ skipExtraction: false,
1044
+ }));
1045
+ await observeScopeStarted;
1046
+ const flush = service.extractionForceFlush({
1047
+ sessionKey: "pi-geek:abort-scope-resolution",
1048
+ namespace: "pi-geek",
1049
+ authenticatedPrincipal: "pi-geek",
1050
+ abortSignal: abortController.signal,
1051
+ });
1052
+ await flushScopeStarted;
1053
+ abortController.abort();
1054
+
1055
+ await assert.rejects(flush, /extraction force-flush aborted/);
1056
+ releaseObserveScope();
1057
+ const response = await observe;
1058
+ assert.equal(response.extractionQueued, false);
1059
+ assert.equal(probe.extractionCalls.length, 0);
1060
+ });
1061
+
1062
+ test("#2206: scope-resolution deadline cancels preparations by raw projectTag and cwd hints", async () => {
1063
+ const rawHintCases = [
1064
+ { projectTag: "Acme/Webshop" },
1065
+ { cwd: "/workspace/acme/webshop" },
1066
+ ];
1067
+
1068
+ for (const rawHintCase of rawHintCases) {
1069
+ const probe = makeParityProbe(withSelfPolicyPrefix("pi-geek"));
1070
+ const service = new EngramAccessService(probe.orch);
1071
+ let releaseObserveScope!: () => void;
1072
+ let signalObserveScopeStarted!: () => void;
1073
+ let flushScopeStarted = false;
1074
+ const observeScopeGate = new Promise<void>((resolve) => {
1075
+ releaseObserveScope = resolve;
1076
+ });
1077
+ const observeScopeStarted = new Promise<void>((resolve) => {
1078
+ signalObserveScopeStarted = resolve;
1079
+ });
1080
+ const internals = service as unknown as {
1081
+ resolveMemoryScopePlan: (
1082
+ request: EngramAccessObserveRequest & { messages?: unknown },
1083
+ ) => Promise<MemoryScopePlan>;
1084
+ };
1085
+ const resolveMemoryScopePlan = internals.resolveMemoryScopePlan.bind(service);
1086
+ internals.resolveMemoryScopePlan = async (request) => {
1087
+ if (request.messages !== undefined) {
1088
+ signalObserveScopeStarted();
1089
+ await observeScopeGate;
1090
+ return resolveMemoryScopePlan(request);
1091
+ }
1092
+ flushScopeStarted = true;
1093
+ throw new Error("scope resolution must not start");
1094
+ };
1095
+
1096
+ const observe = service.observe(observeRequest({
1097
+ sessionKey: "pi-geek:raw-hint-deadline",
1098
+ authenticatedPrincipal: "pi-geek",
1099
+ skipExtraction: false,
1100
+ ...rawHintCase,
1101
+ }));
1102
+ await observeScopeStarted;
1103
+ await assert.rejects(
1104
+ service.extractionForceFlush({
1105
+ sessionKey: "pi-geek:raw-hint-deadline",
1106
+ authenticatedPrincipal: "pi-geek",
1107
+ deadlineMs: Date.now() - 1,
1108
+ ...rawHintCase,
1109
+ }),
1110
+ /scope_resolution/,
1111
+ );
1112
+ assert.equal(flushScopeStarted, false);
1113
+ releaseObserveScope();
1114
+ const response = await observe;
1115
+ assert.equal(response.extractionQueued, false);
1116
+ assert.equal(probe.extractionCalls.length, 0);
1117
+ }
1118
+ });
1119
+
960
1120
  test("#2128: aborted or expired extraction force-flush never touches a buffer", async () => {
961
1121
  const probe = makeParityProbe(withSelfPolicyPrefix("pi-geek"));
962
1122
  const service = new EngramAccessService(probe.orch);
@@ -981,7 +1141,7 @@ test("#2128: aborted or expired extraction force-flush never touches a buffer",
981
1141
  }),
982
1142
  (error: unknown) =>
983
1143
  error instanceof EngramAccessInputError &&
984
- error.message === "extraction force-flush deadline exceeded before buffer drain",
1144
+ error.message === "replay extraction deadline exceeded (scope_resolution)",
985
1145
  );
986
1146
  assert.equal(probe.extractionForceFlushCalls.length, 0);
987
1147
  });
@@ -1017,7 +1177,7 @@ test("#2128: self-deps wires force-flush cancellation into the observe tracker",
1017
1177
  }),
1018
1178
  (error: unknown) =>
1019
1179
  error instanceof EngramAccessInputError &&
1020
- error.message === "extraction force-flush deadline exceeded before buffer drain",
1180
+ error.message === "replay extraction deadline exceeded (scope_resolution)",
1021
1181
  );
1022
1182
  assert.deepEqual(cancellations, [{
1023
1183
  sessionKey: "pi-geek:cancel-hook",