@remnic/core 9.45.2 → 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 (749) 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 +18 -14
  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.d.ts +84 -84
  57. package/dist/access-schema.js +3 -3
  58. package/dist/{access-service-CiJRsgAB.d.ts → access-service-CsU-ljFD.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 -76
  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 +7 -7
  72. package/dist/adapters/registry.js +3 -3
  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 +23 -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 +27 -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-VUPTKTDV.js → chunk-2MRHJNWL.js} +3 -3
  100. package/dist/{chunk-JBPKEARU.js → chunk-2QSZNTDO.js} +7 -7
  101. package/dist/{chunk-5IVLTFOV.js → chunk-44N6ESJ4.js} +2 -2
  102. package/dist/{chunk-WOCNN776.js → chunk-4POAMKV6.js} +100 -41
  103. package/dist/chunk-4POAMKV6.js.map +1 -0
  104. package/dist/{chunk-HO3QBJEY.js → chunk-5546W5SI.js} +2 -2
  105. package/dist/{chunk-U7GW7NE7.js → chunk-5CEECY6P.js} +10 -10
  106. package/dist/{chunk-4UH4BTGK.js → chunk-5SNZSWWR.js} +82 -82
  107. package/dist/{chunk-6CZPDBJS.js → chunk-5U7ID3EZ.js} +3 -3
  108. package/dist/{chunk-GF22HWS2.js → chunk-6NNNURLK.js} +7 -7
  109. package/dist/chunk-773TRRGT.js +36 -0
  110. package/dist/chunk-773TRRGT.js.map +1 -0
  111. package/dist/chunk-7CITSYSH.js +242 -0
  112. package/dist/chunk-7CITSYSH.js.map +1 -0
  113. package/dist/{chunk-227UFSEQ.js → chunk-7RZJWZ46.js} +5 -5
  114. package/dist/{chunk-E5UK4VPE.js → chunk-7SHJHPTY.js} +5 -5
  115. package/dist/{chunk-UVIKWC7M.js → chunk-7YERSTN7.js} +17 -17
  116. package/dist/{chunk-DLVPUX7U.js → chunk-7YKVM5H3.js} +8 -6
  117. package/dist/chunk-7YKVM5H3.js.map +1 -0
  118. package/dist/{chunk-3CE77VAP.js → chunk-A4JMGKCD.js} +87 -74
  119. package/dist/chunk-A4JMGKCD.js.map +1 -0
  120. package/dist/chunk-A5KNZSNA.js +26 -0
  121. package/dist/chunk-A5KNZSNA.js.map +1 -0
  122. package/dist/{chunk-S2NCTZGJ.js → chunk-AJQ57VV3.js} +15 -15
  123. package/dist/chunk-AJQ57VV3.js.map +1 -0
  124. package/dist/{chunk-CUM2BBPN.js → chunk-AUMWZSE7.js} +19 -10
  125. package/dist/chunk-AUMWZSE7.js.map +1 -0
  126. package/dist/{chunk-XYTOI63Z.js → chunk-BGHFOD5A.js} +19 -11
  127. package/dist/chunk-BGHFOD5A.js.map +1 -0
  128. package/dist/{chunk-BUE5E2HL.js → chunk-BGLY7EEM.js} +5 -314
  129. package/dist/chunk-BGLY7EEM.js.map +1 -0
  130. package/dist/chunk-BIPBQQFI.js +44 -0
  131. package/dist/chunk-BIPBQQFI.js.map +1 -0
  132. package/dist/{chunk-S5SLVSVY.js → chunk-BQIFZ2MP.js} +5 -5
  133. package/dist/chunk-BTTPKDIL.js +34 -0
  134. package/dist/{chunk-PVGDJXVK.js.map → chunk-BTTPKDIL.js.map} +1 -1
  135. package/dist/{chunk-E53DSZEN.js → chunk-C26TE27X.js} +3 -3
  136. package/dist/{chunk-LZ4LDKHZ.js → chunk-CLB32OHM.js} +6 -6
  137. package/dist/{chunk-Q6IP2ARR.js → chunk-CSOYVTRX.js} +2 -2
  138. package/dist/{chunk-XOQSEF7X.js → chunk-CVILPI77.js} +6 -6
  139. package/dist/chunk-D3I2MCN7.js +29 -0
  140. package/dist/chunk-D3I2MCN7.js.map +1 -0
  141. package/dist/{chunk-A5OJCXZL.js → chunk-DSUAAZZX.js} +15 -4
  142. package/dist/chunk-DSUAAZZX.js.map +1 -0
  143. package/dist/{chunk-HREE4JHI.js → chunk-DYVMXPCF.js} +486 -287
  144. package/dist/chunk-DYVMXPCF.js.map +1 -0
  145. package/dist/{chunk-J7VGGECD.js → chunk-DZPFMQZ7.js} +1 -1
  146. package/dist/chunk-DZPFMQZ7.js.map +1 -0
  147. package/dist/{chunk-PDLBLTOK.js → chunk-EITZHSX6.js} +9 -9
  148. package/dist/{chunk-D3J5SLQK.js → chunk-EJHEWCGQ.js} +81 -20
  149. package/dist/chunk-EJHEWCGQ.js.map +1 -0
  150. package/dist/{chunk-WUNIWKY4.js → chunk-ELIL2A37.js} +6 -6
  151. package/dist/{chunk-E6PNLPGJ.js → chunk-FZP32336.js} +806 -470
  152. package/dist/chunk-FZP32336.js.map +1 -0
  153. package/dist/{chunk-4L6HUREQ.js → chunk-G7A5HLUS.js} +23 -17
  154. package/dist/chunk-G7A5HLUS.js.map +1 -0
  155. package/dist/{chunk-CINZGPSJ.js → chunk-GUMZC2BO.js} +2 -2
  156. package/dist/{chunk-H24WNPA2.js → chunk-GWFSVJ4P.js} +3 -3
  157. package/dist/{chunk-7XC2HX75.js → chunk-GYPQL6XN.js} +157 -16
  158. package/dist/chunk-GYPQL6XN.js.map +1 -0
  159. package/dist/{chunk-TSH56VPU.js → chunk-HAYSYUAB.js} +2 -2
  160. package/dist/{chunk-TDHTVMPG.js → chunk-HFPASSFV.js} +7 -2
  161. package/dist/chunk-HFPASSFV.js.map +1 -0
  162. package/dist/chunk-J2WC5LF4.js +395 -0
  163. package/dist/chunk-J2WC5LF4.js.map +1 -0
  164. package/dist/{chunk-PKNLM44P.js → chunk-JH6BPLOP.js} +9 -9
  165. package/dist/{chunk-KXB4VXHY.js → chunk-JIYDRBVZ.js} +2 -2
  166. package/dist/chunk-JV3C2MNQ.js +74 -0
  167. package/dist/chunk-JV3C2MNQ.js.map +1 -0
  168. package/dist/{chunk-AV5ZEH4M.js → chunk-KVJRXN2E.js} +2 -2
  169. package/dist/{chunk-JVLCVFQ4.js → chunk-KXEFRMCF.js} +3 -3
  170. package/dist/{chunk-WFTIGIIS.js → chunk-L6CQ7WIW.js} +5 -5
  171. package/dist/{chunk-EJUEXZHX.js → chunk-LLJMAULE.js} +2 -2
  172. package/dist/{chunk-N5Z4EVOR.js → chunk-LNEWDF2A.js} +36 -11
  173. package/dist/chunk-LNEWDF2A.js.map +1 -0
  174. package/dist/{chunk-AS7YMSL6.js → chunk-M23RF3LJ.js} +4 -4
  175. package/dist/{chunk-UYLMNVY6.js → chunk-MDISBSYA.js} +16 -9
  176. package/dist/chunk-MDISBSYA.js.map +1 -0
  177. package/dist/{chunk-3F2LKUMU.js → chunk-NIS256NW.js} +2 -2
  178. package/dist/{chunk-YIAA2X3D.js → chunk-NK5RGJ65.js} +3 -3
  179. package/dist/chunk-NLDVVWCL.js +84 -0
  180. package/dist/chunk-NLDVVWCL.js.map +1 -0
  181. package/dist/{chunk-OQ5PRDDS.js → chunk-NTOIP2E6.js} +6 -6
  182. package/dist/{chunk-HLPD7B7P.js → chunk-NUEQKLNB.js} +2 -2
  183. package/dist/{chunk-4J7G5SY4.js → chunk-NZBZ7IS2.js} +72 -24
  184. package/dist/chunk-NZBZ7IS2.js.map +1 -0
  185. package/dist/{chunk-3TBLDMJA.js → chunk-O4KMGRXE.js} +5 -2
  186. package/dist/chunk-O4KMGRXE.js.map +1 -0
  187. package/dist/{chunk-33PLLLL7.js → chunk-P7NGM24P.js} +6 -6
  188. package/dist/{chunk-7TWUCYER.js → chunk-PNRA7FAD.js} +7 -7
  189. package/dist/{chunk-5I4M26Q7.js → chunk-QBSFOKY6.js} +4 -4
  190. package/dist/{chunk-QJAQNXWI.js → chunk-QCECHYZL.js} +76 -79
  191. package/dist/chunk-QCECHYZL.js.map +1 -0
  192. package/dist/{chunk-P4DRWEYC.js → chunk-QVSBTCVP.js} +2 -2
  193. package/dist/{chunk-AAIUERNB.js → chunk-R5RFK3CB.js} +6 -6
  194. package/dist/{chunk-WDISJRMG.js → chunk-RMMVQQA6.js} +2 -2
  195. package/dist/{chunk-KWMXR7XS.js → chunk-S2V7RUCL.js} +8 -1
  196. package/dist/{chunk-KWMXR7XS.js.map → chunk-S2V7RUCL.js.map} +1 -1
  197. package/dist/{chunk-5SM35XZR.js → chunk-S5NZBKKQ.js} +2 -2
  198. package/dist/{chunk-VNA7W7QF.js → chunk-SVH57F5Z.js} +12 -4
  199. package/dist/chunk-SVH57F5Z.js.map +1 -0
  200. package/dist/{chunk-WIPEXG6R.js → chunk-SXIMQLGV.js} +2 -2
  201. package/dist/{chunk-RVLJEII5.js → chunk-SYUBB3WM.js} +256 -187
  202. package/dist/chunk-SYUBB3WM.js.map +1 -0
  203. package/dist/{chunk-OAEQLRCY.js → chunk-TN76AKO3.js} +5 -5
  204. package/dist/{chunk-QN25OCUF.js → chunk-TQ4GD737.js} +5 -5
  205. package/dist/{chunk-VCD4PSK2.js → chunk-TQZ4DVBC.js} +7 -4
  206. package/dist/chunk-TQZ4DVBC.js.map +1 -0
  207. package/dist/{chunk-7K5Q6COX.js → chunk-TVVEYCNW.js} +4 -4
  208. package/dist/{chunk-DNWXFTLD.js → chunk-TYISDI6B.js} +2 -2
  209. package/dist/{chunk-4LMA77JH.js → chunk-U2VLVBBH.js} +3 -3
  210. package/dist/{chunk-5ZE7QHTK.js → chunk-ULVR5KG7.js} +5 -5
  211. package/dist/{chunk-NVRYW264.js → chunk-UQWIKLQK.js} +18 -15
  212. package/dist/chunk-UQWIKLQK.js.map +1 -0
  213. package/dist/{chunk-YV32N67O.js → chunk-URS5GSM7.js} +1 -1
  214. package/dist/chunk-URS5GSM7.js.map +1 -0
  215. package/dist/{chunk-4B77XSG5.js → chunk-UV72DEZD.js} +5 -5
  216. package/dist/{chunk-S2BBISHU.js → chunk-VANZKHTN.js} +3 -3
  217. package/dist/chunk-VHFXP27N.js +250 -0
  218. package/dist/chunk-VHFXP27N.js.map +1 -0
  219. package/dist/{chunk-3Y224NYC.js → chunk-VYISFWVX.js} +2 -2
  220. package/dist/{chunk-TIHMZFIV.js → chunk-W3IC7QOY.js} +3 -3
  221. package/dist/{chunk-NRV4Y3PM.js → chunk-W4FBGYGK.js} +1 -1
  222. package/dist/{chunk-P2BM76KT.js → chunk-WAS4HV46.js} +174 -43
  223. package/dist/chunk-WAS4HV46.js.map +1 -0
  224. package/dist/{chunk-57QKLRBV.js → chunk-WB7JSQCP.js} +2 -1
  225. package/dist/chunk-WB7JSQCP.js.map +1 -0
  226. package/dist/chunk-WGP57SR3.js +68 -0
  227. package/dist/chunk-WGP57SR3.js.map +1 -0
  228. package/dist/{chunk-ECK75GDJ.js → chunk-WQIHRA5F.js} +43 -24
  229. package/dist/chunk-WQIHRA5F.js.map +1 -0
  230. package/dist/{chunk-MU7ZHSZE.js → chunk-WZFAPHIK.js} +2 -2
  231. package/dist/{chunk-T2TTP3KU.js → chunk-X4IDNPOS.js} +2 -2
  232. package/dist/{chunk-BLAKS3CP.js → chunk-XL3TATMJ.js} +3 -3
  233. package/dist/{chunk-W4XJFLAL.js → chunk-XPRJSHNI.js} +2 -2
  234. package/dist/{chunk-5TFP4CUL.js → chunk-XQ3HXAQH.js} +14 -11
  235. package/dist/chunk-XQ3HXAQH.js.map +1 -0
  236. package/dist/{chunk-VWAXN2BN.js → chunk-XSFHWBQO.js} +93 -31
  237. package/dist/chunk-XSFHWBQO.js.map +1 -0
  238. package/dist/{chunk-DL7ZD3JH.js → chunk-XTAUXTDO.js} +14 -9
  239. package/dist/chunk-XTAUXTDO.js.map +1 -0
  240. package/dist/{chunk-JE7EK33X.js → chunk-Y7HRYCNW.js} +2 -2
  241. package/dist/{chunk-E6EE5B67.js → chunk-YK6BDDHP.js} +4 -4
  242. package/dist/{chunk-ES36HTSC.js → chunk-YLHM5BQQ.js} +3 -3
  243. package/dist/{chunk-RN7DY3FC.js → chunk-YMAQDHQM.js} +31 -12
  244. package/dist/chunk-YMAQDHQM.js.map +1 -0
  245. package/dist/{chunk-ULARSG5Z.js → chunk-YN6ASZUG.js} +10 -8
  246. package/dist/{chunk-ULARSG5Z.js.map → chunk-YN6ASZUG.js.map} +1 -1
  247. package/dist/{chunk-IKKWIPYN.js → chunk-YYQAKIDJ.js} +37 -1
  248. package/dist/chunk-YYQAKIDJ.js.map +1 -0
  249. package/dist/{chunk-BJKPPZ6Z.js → chunk-ZFGZ6PZ2.js} +2 -2
  250. package/dist/{chunk-CJ2ZR7UA.js → chunk-ZI32MKDW.js} +267 -214
  251. package/dist/chunk-ZI32MKDW.js.map +1 -0
  252. package/dist/{chunk-64UDOIMI.js → chunk-ZLQ37WJX.js} +2 -2
  253. package/dist/chunk-ZMAYKGPN.js +351 -0
  254. package/dist/chunk-ZMAYKGPN.js.map +1 -0
  255. package/dist/{cli-BUGN3d6_.d.ts → cli-BBHDtG36.d.ts} +5 -5
  256. package/dist/cli.d.ts +16 -12
  257. package/dist/cli.js +138 -124
  258. package/dist/compounding/engine.d.ts +3 -2
  259. package/dist/compounding/engine.js +24 -23
  260. package/dist/compounding/preference-consolidator.d.ts +2 -1
  261. package/dist/compression-optimizer.d.ts +2 -1
  262. package/dist/config.d.ts +2 -1
  263. package/dist/config.js +10 -8
  264. package/dist/connectors/codex-materialize-runner.d.ts +2 -1
  265. package/dist/connectors/codex-materialize-runner.js +23 -22
  266. package/dist/connectors/codex-materialize.d.ts +2 -1
  267. package/dist/connectors/index.d.ts +2 -1
  268. package/dist/connectors/index.js +26 -25
  269. package/dist/consolidation-provenance-check.d.ts +3 -2
  270. package/dist/consolidation-provenance-check.js +4 -4
  271. package/dist/consolidation-undo.d.ts +3 -2
  272. package/dist/consolidation-undo.js +10 -7
  273. package/dist/consolidation-undo.js.map +1 -1
  274. package/dist/contradiction/index.d.ts +3 -2
  275. package/dist/converge-config.d.ts +2 -1
  276. package/dist/convergence-refresh.d.ts +4 -3
  277. package/dist/convergence-refresh.js +27 -26
  278. package/dist/conversation-index/backend.d.ts +2 -1
  279. package/dist/conversation-index/backend.js +2 -2
  280. package/dist/conversation-index/chunker.d.ts +2 -1
  281. package/dist/conversation-index/faiss-adapter.d.ts +2 -1
  282. package/dist/conversation-index/indexer.d.ts +2 -1
  283. package/dist/conversation-index/search.d.ts +2 -1
  284. package/dist/corpus-watermark.d.ts +2 -1
  285. package/dist/corpus-watermark.js +42 -41
  286. package/dist/day-summary.d.ts +2 -1
  287. package/dist/delinearize.d.ts +2 -1
  288. package/dist/direct-answer-wiring.d.ts +2 -1
  289. package/dist/direct-answer-wiring.js +2 -2
  290. package/dist/direct-answer.d.ts +2 -1
  291. package/dist/embedding-fallback.d.ts +2 -1
  292. package/dist/embedding-fallback.js +2 -2
  293. package/dist/enrichment/index.d.ts +2 -1
  294. package/dist/entity-retrieval-boundaries.js +1 -1
  295. package/dist/entity-retrieval.d.ts +3 -2
  296. package/dist/entity-retrieval.js +24 -23
  297. package/dist/entity-schema.d.ts +2 -1
  298. package/dist/explicit-capture.d.ts +9 -8
  299. package/dist/explicit-capture.js +11 -9
  300. package/dist/external-wiki-access.d.ts +127 -0
  301. package/dist/external-wiki-access.js +186 -0
  302. package/dist/external-wiki-access.js.map +1 -0
  303. package/dist/external-wiki-cli.d.ts +13 -0
  304. package/dist/external-wiki-cli.js +96 -0
  305. package/dist/external-wiki-cli.js.map +1 -0
  306. package/dist/external-wiki-collection-registration.d.ts +39 -0
  307. package/dist/external-wiki-collection-registration.js +79 -0
  308. package/dist/external-wiki-collection-registration.js.map +1 -0
  309. package/dist/external-wiki-collection.d.ts +50 -0
  310. package/dist/external-wiki-collection.js +387 -0
  311. package/dist/external-wiki-collection.js.map +1 -0
  312. package/dist/external-wiki-config.d.ts +13 -0
  313. package/dist/external-wiki-config.js +13 -0
  314. package/dist/external-wiki-config.js.map +1 -0
  315. package/dist/external-wiki-guard.d.ts +11 -0
  316. package/dist/external-wiki-guard.js +18 -0
  317. package/dist/external-wiki-guard.js.map +1 -0
  318. package/dist/external-wiki-mcp-tools.d.ts +123 -0
  319. package/dist/external-wiki-mcp-tools.js +8 -0
  320. package/dist/external-wiki-mcp-tools.js.map +1 -0
  321. package/dist/external-wiki-search.d.ts +42 -0
  322. package/dist/external-wiki-search.js +11 -0
  323. package/dist/external-wiki-search.js.map +1 -0
  324. package/dist/external-wiki.d.ts +43 -0
  325. package/dist/external-wiki.js +16 -0
  326. package/dist/external-wiki.js.map +1 -0
  327. package/dist/extraction-error-classification.d.ts +2 -1
  328. package/dist/extraction-faithfulness.d.ts +2 -1
  329. package/dist/extraction-judge-telemetry.d.ts +2 -1
  330. package/dist/extraction-judge-training.d.ts +2 -1
  331. package/dist/extraction-judge.d.ts +2 -1
  332. package/dist/extraction-liveness.d.ts +2 -1
  333. package/dist/extraction-source-grounding-helpers.d.ts +5 -3
  334. package/dist/extraction-source-grounding-helpers.js +1 -1
  335. package/dist/extraction-source-grounding-rules.d.ts +2 -1
  336. package/dist/extraction-source-grounding-rules.js +2 -2
  337. package/dist/extraction-source-grounding.d.ts +2 -1
  338. package/dist/extraction-source-grounding.js +5 -5
  339. package/dist/extraction.d.ts +2 -1
  340. package/dist/extraction.js +45 -43
  341. package/dist/fallback-llm.d.ts +2 -1
  342. package/dist/graph-dashboard-diff.d.ts +2 -1
  343. package/dist/graph-dashboard-key.d.ts +2 -1
  344. package/dist/graph-dashboard-parser.d.ts +2 -1
  345. package/dist/graph-edge-reinforcement.d.ts +2 -1
  346. package/dist/graph-snapshot.d.ts +2 -1
  347. package/dist/graph.d.ts +2 -1
  348. package/dist/harmonic-retrieval.js +2 -2
  349. package/dist/importance.d.ts +2 -1
  350. package/dist/importers/index.d.ts +2 -1
  351. package/dist/in-flight-reads.d.ts +2 -1
  352. package/dist/index.d.ts +732 -720
  353. package/dist/index.js +291 -259
  354. package/dist/intent.d.ts +2 -1
  355. package/dist/lcm/engine.d.ts +2 -1
  356. package/dist/lcm/engine.js +3 -3
  357. package/dist/lcm/index.d.ts +2 -1
  358. package/dist/lcm/index.js +8 -8
  359. package/dist/lcm/tools.d.ts +2 -1
  360. package/dist/lifecycle.d.ts +2 -1
  361. package/dist/live-connectors-runner.d.ts +2 -1
  362. package/dist/local-llm.d.ts +2 -1
  363. package/dist/local-llm.js +2 -2
  364. package/dist/local-model-endpoint.d.ts +2 -1
  365. package/dist/maintenance/memory-governance.d.ts +2 -1
  366. package/dist/maintenance/memory-governance.js +24 -23
  367. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +3 -2
  368. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +24 -23
  369. package/dist/maintenance/rebuild-memory-projection.d.ts +3 -2
  370. package/dist/maintenance/rebuild-memory-projection.js +26 -25
  371. package/dist/{maintenance-LbuS2rUA.d.ts → maintenance-D2mveyCd.d.ts} +3 -3
  372. package/dist/mcp-memory-inspector-app.d.ts +14 -10
  373. package/dist/mcp-read-only-tools.js +1 -1
  374. package/dist/memory-action-policy.d.ts +2 -1
  375. package/dist/memory-cache.d.ts +2 -1
  376. package/dist/memory-lifecycle-ledger-utils.d.ts +2 -1
  377. package/dist/memory-projection-store.d.ts +2 -1
  378. package/dist/memory-provenance.d.ts +2 -1
  379. package/dist/memory-worth-outcomes.d.ts +3 -2
  380. package/dist/models-json.d.ts +2 -1
  381. package/dist/namespaces/migrate.d.ts +4 -3
  382. package/dist/namespaces/migrate.js +40 -39
  383. package/dist/namespaces/principal.d.ts +2 -1
  384. package/dist/namespaces/search.d.ts +2 -1
  385. package/dist/namespaces/search.js +18 -18
  386. package/dist/namespaces/storage.d.ts +4 -3
  387. package/dist/namespaces/storage.js +23 -22
  388. package/dist/native-knowledge.d.ts +2 -1
  389. package/dist/offline-sync-impression-drain.d.ts +2 -1
  390. package/dist/offline-sync-impression-drain.js +11 -9
  391. package/dist/offline-sync.d.ts +29 -3
  392. package/dist/offline-sync.js +6 -2
  393. package/dist/operator-doctor-corpus.d.ts +2 -1
  394. package/dist/operator-doctor-corpus.js +45 -44
  395. package/dist/operator-doctor-replica.d.ts +2 -1
  396. package/dist/operator-doctor-replica.js +3 -3
  397. package/dist/operator-toolkit.d.ts +4 -3
  398. package/dist/operator-toolkit.js +59 -55
  399. package/dist/orchestration/compression-guideline-coordinator.d.ts +3 -2
  400. package/dist/orchestration/maintenance.d.ts +5 -4
  401. package/dist/orchestration/maintenance.js +36 -33
  402. package/dist/{orchestrator-rHiWt32X.d.ts → orchestrator-DJYlwiUv.d.ts} +14 -7
  403. package/dist/orchestrator.d.ts +9 -8
  404. package/dist/orchestrator.js +201 -189
  405. package/dist/page-versioning.js +3 -3
  406. package/dist/patterns-cli.d.ts +2 -1
  407. package/dist/{pipeline-W_97O8BV.d.ts → pipeline-CNjY4wk3.d.ts} +1 -1
  408. package/dist/policy-runtime.d.ts +2 -1
  409. package/dist/policy-runtime.js +1 -1
  410. package/dist/proactive-contention.d.ts +2 -1
  411. package/dist/provenance.d.ts +2 -1
  412. package/dist/provenance.js +2 -2
  413. package/dist/{qmd-LWtMofAf.d.ts → qmd-C0UDZidt.d.ts} +9 -7
  414. package/dist/qmd-preflight.d.ts +5 -4
  415. package/dist/qmd-preflight.js +2 -2
  416. package/dist/qmd-recall-cache.d.ts +2 -1
  417. package/dist/qmd.d.ts +4 -3
  418. package/dist/qmd.js +5 -5
  419. package/dist/recall-concurrency-config.d.ts +2 -1
  420. package/dist/recall-disclosure-escalation.d.ts +2 -1
  421. package/dist/recall-explain-renderer.d.ts +2 -1
  422. package/dist/recall-explain-renderer.js +3 -3
  423. package/dist/recall-memory-map.d.ts +2 -1
  424. package/dist/recall-planner-llm.d.ts +2 -1
  425. package/dist/recall-state.d.ts +2 -1
  426. package/dist/recall-tag-filter.d.ts +2 -1
  427. package/dist/recall-timings.d.ts +2 -1
  428. package/dist/recall-xray-cli.d.ts +2 -1
  429. package/dist/recall-xray-cli.js +4 -4
  430. package/dist/recall-xray-renderer.d.ts +2 -1
  431. package/dist/recall-xray-renderer.js +3 -3
  432. package/dist/recall-xray.d.ts +8 -1
  433. package/dist/recall-xray.js +2 -2
  434. package/dist/reconcile/cursor.d.ts +12 -2
  435. package/dist/reconcile/cursor.js +46 -7
  436. package/dist/reconcile/cursor.js.map +1 -1
  437. package/dist/reconcile/manifest.d.ts +9 -2
  438. package/dist/reconcile/manifest.js +15 -268
  439. package/dist/reconcile/manifest.js.map +1 -1
  440. package/dist/reconcile/plan.d.ts +6 -2
  441. package/dist/reconcile/plan.js +4 -4
  442. package/dist/replay/normalizers/chatgpt.d.ts +2 -1
  443. package/dist/replay/normalizers/claude.d.ts +2 -1
  444. package/dist/replay/normalizers/openclaw.d.ts +2 -1
  445. package/dist/replay/normalizers/shared.d.ts +2 -1
  446. package/dist/replay/runner.d.ts +2 -1
  447. package/dist/replay/types.d.ts +2 -1
  448. package/dist/replica-divergence.d.ts +2 -1
  449. package/dist/replica-divergence.js +2 -2
  450. package/dist/replica-peers-config.d.ts +2 -1
  451. package/dist/resolve-auth-token.d.ts +2 -1
  452. package/dist/resume-bundles.js +12 -10
  453. package/dist/retrieval-agents.d.ts +4 -3
  454. package/dist/retrieval-agents.js +2 -2
  455. package/dist/retrieval-tiers.d.ts +2 -1
  456. package/dist/routing/engine.d.ts +2 -1
  457. package/dist/routing/store.d.ts +2 -1
  458. package/dist/salvage-envelope.d.ts +2 -1
  459. package/dist/schemas.d.ts +76 -76
  460. package/dist/{scope-profiles-BiQKOE-p.d.ts → scope-profiles-BJzp2F5A.d.ts} +1 -1
  461. package/dist/search/embed-helper.d.ts +2 -1
  462. package/dist/search/embed-helper.js +3 -3
  463. package/dist/search/factory.d.ts +4 -2
  464. package/dist/search/factory.js +20 -18
  465. package/dist/search/index.d.ts +2 -1
  466. package/dist/search/index.js +22 -22
  467. package/dist/search/lancedb-backend.d.ts +2 -1
  468. package/dist/search/lancedb-backend.js +4 -4
  469. package/dist/search/meilisearch-backend.d.ts +2 -1
  470. package/dist/search/meilisearch-backend.js +4 -4
  471. package/dist/search/noop-backend.d.ts +2 -1
  472. package/dist/search/orama-backend.d.ts +2 -1
  473. package/dist/search/orama-backend.js +4 -4
  474. package/dist/search/port.d.ts +18 -1
  475. package/dist/search/port.js +1 -1
  476. package/dist/search/remote-backend.d.ts +2 -1
  477. package/dist/search/remote-backend.js +2 -2
  478. package/dist/secure-store/index.js +2 -2
  479. package/dist/{semantic-consolidation-dHYCyqgh.d.ts → semantic-consolidation-D4KAZO2G.d.ts} +1 -1
  480. package/dist/semantic-consolidation.d.ts +3 -2
  481. package/dist/semantic-consolidation.js +25 -24
  482. package/dist/semantic-rule-promotion.js +23 -22
  483. package/dist/semantic-rule-verifier.d.ts +2 -1
  484. package/dist/semantic-rule-verifier.js +24 -23
  485. package/dist/{service-DJG3KCQ4.d.ts → service-BeDxSqE-.d.ts} +2 -2
  486. package/dist/session-observer-bands.d.ts +2 -1
  487. package/dist/session-observer-state.d.ts +2 -1
  488. package/dist/shared-context/manager.d.ts +10 -9
  489. package/dist/shared-context/manager.js +2 -2
  490. package/dist/signal.d.ts +2 -1
  491. package/dist/source-agent-qualifier.d.ts +2 -1
  492. package/dist/source-agent-qualifier.js +42 -40
  493. package/dist/{storage-F9FVh-w9.d.ts → storage-DfjxusTE.d.ts} +24 -12
  494. package/dist/storage.d.ts +3 -2
  495. package/dist/storage.js +25 -24
  496. package/dist/summarizer.d.ts +2 -1
  497. package/dist/summarizer.js +5 -5
  498. package/dist/summary-snapshot.d.ts +2 -1
  499. package/dist/temporal-supersession.d.ts +3 -2
  500. package/dist/temporal-timeline-recall.d.ts +2 -1
  501. package/dist/temporal-validity.d.ts +2 -1
  502. package/dist/threading.d.ts +2 -1
  503. package/dist/tier-migration.d.ts +3 -2
  504. package/dist/tier-routing.d.ts +2 -1
  505. package/dist/tool-scoped-memory.d.ts +5 -1
  506. package/dist/tool-scoped-memory.js +3 -1
  507. package/dist/topics.d.ts +2 -1
  508. package/dist/transcript.d.ts +2 -1
  509. package/dist/transfer/capsule-import.js +4 -4
  510. package/dist/transfer/types.d.ts +66 -66
  511. package/dist/trust-score-stage.d.ts +2 -1
  512. package/dist/trust-score.d.ts +2 -1
  513. package/dist/{types-rEwubvim.d.ts → types-yX_FwERf.d.ts} +8 -1
  514. package/dist/types.d.ts +2 -1
  515. package/dist/types.js +1 -1
  516. package/dist/utility-runtime.d.ts +2 -1
  517. package/dist/verified-recall.js +24 -23
  518. package/dist/write-envelope.d.ts +2 -1
  519. package/package.json +2 -2
  520. package/src/abort-error.ts +17 -0
  521. package/src/access-admin-ops-surface.ts +1 -0
  522. package/src/access-boundary.ts +1 -0
  523. package/src/access-coding-context-resolution.ts +42 -0
  524. package/src/access-extraction-force-flush.ts +38 -2
  525. package/src/access-http-lcm-compaction.ts +5 -2
  526. package/src/access-http-offline-stream.ts +79 -0
  527. package/src/access-http.test.ts +310 -3
  528. package/src/access-http.ts +85 -21
  529. package/src/access-mcp-output-schemas.ts +36 -0
  530. package/src/access-mcp.test.ts +95 -1
  531. package/src/access-mcp.ts +7 -9
  532. package/src/access-observe-helpers.ts +64 -22
  533. package/src/access-observe-write-surface.ts +8 -0
  534. package/src/access-offline-manifest.ts +54 -0
  535. package/src/access-operations-batch.ts +3 -3
  536. package/src/access-operations.ts +13 -7
  537. package/src/access-recall-concurrency.ts +3 -27
  538. package/src/access-recall-surface.ts +3 -0
  539. package/src/access-service-health.test.ts +32 -7
  540. package/src/access-service-namespace.test.ts +55 -0
  541. package/src/access-service-observe-idempotency.test.ts +34 -2
  542. package/src/access-service-observe-lcm-parity.test.ts +138 -3
  543. package/src/access-service-observe-scope.test.ts +160 -1
  544. package/src/access-service-offline-file-content.test.ts +345 -1
  545. package/src/access-service.ts +86 -59
  546. package/src/access-surface-catalog.ts +4 -0
  547. package/src/admin/admin-surfaces.ts +2 -0
  548. package/src/binary-lifecycle/pipeline.test.ts +106 -1
  549. package/src/binary-lifecycle/pipeline.ts +3 -0
  550. package/src/coding/git-context.test.ts +47 -0
  551. package/src/coding/git-context.ts +129 -27
  552. package/src/config.test.ts +24 -0
  553. package/src/config.ts +9 -12
  554. package/src/connector-provenance.test.ts +101 -0
  555. package/src/consolidation-undo.ts +3 -0
  556. package/src/converge-conflict-policy-type.test.ts +15 -0
  557. package/src/convergence-refresh.ts +14 -2
  558. package/src/correction/correction-access-wiring.ts +9 -7
  559. package/src/correction/correction-executor.test.ts +206 -2
  560. package/src/correction/correction-executor.ts +29 -20
  561. package/src/correction/correction-planner.test.ts +36 -0
  562. package/src/correction/correction-planner.ts +9 -15
  563. package/src/correction/correction-service.ts +3 -1
  564. package/src/correction/correction-storage-integration.test.ts +77 -0
  565. package/src/correction/correction-surfaces.test.ts +41 -28
  566. package/src/correction/passive-capture.test.ts +59 -0
  567. package/src/correction/passive-capture.ts +4 -1
  568. package/src/entity-retrieval-boundaries.ts +17 -4
  569. package/src/entity-retrieval.ts +27 -6
  570. package/src/external-wiki-access.test.ts +65 -0
  571. package/src/external-wiki-access.ts +31 -0
  572. package/src/external-wiki-cli.ts +92 -0
  573. package/src/external-wiki-collection-registration.test.ts +163 -0
  574. package/src/external-wiki-collection-registration.ts +101 -0
  575. package/src/external-wiki-collection.test.ts +502 -0
  576. package/src/external-wiki-collection.ts +503 -0
  577. package/src/external-wiki-config.test.ts +135 -0
  578. package/src/external-wiki-config.ts +100 -0
  579. package/src/external-wiki-guard.ts +83 -0
  580. package/src/external-wiki-mcp-tools.ts +23 -0
  581. package/src/external-wiki-search.test.ts +301 -0
  582. package/src/external-wiki-search.ts +362 -0
  583. package/src/external-wiki.test.ts +240 -0
  584. package/src/external-wiki.ts +453 -0
  585. package/src/extraction-scope-source-agent.test.ts +21 -0
  586. package/src/extraction-source-grounding-helpers.ts +243 -53
  587. package/src/extraction-source-grounding-rules.ts +133 -39
  588. package/src/extraction-source-grounding.test.ts +363 -33
  589. package/src/extraction-timeout.test.ts +1 -0
  590. package/src/extraction-watermark.test.ts +150 -7
  591. package/src/extraction.ts +8 -1
  592. package/src/index.ts +8 -0
  593. package/src/mcp-read-only-tools.ts +1 -0
  594. package/src/offline-sync.test.ts +194 -0
  595. package/src/offline-sync.ts +217 -13
  596. package/src/orchestration/external-wiki-recall-guard.test.ts +94 -0
  597. package/src/orchestration/extraction-persist.ts +19 -2
  598. package/src/orchestration/extraction-run-helpers.ts +37 -19
  599. package/src/orchestration/extraction-run.test.ts +171 -2
  600. package/src/orchestration/extraction-run.ts +11 -13
  601. package/src/orchestration/extraction-watermark.ts +106 -17
  602. package/src/orchestration/generic-recall-paths.ts +14 -0
  603. package/src/orchestration/orchestrator-helpers.ts +2 -0
  604. package/src/orchestration/orchestrator-init.ts +9 -0
  605. package/src/orchestration/recall-internal-deps.ts +6 -0
  606. package/src/orchestration/recall-internal.ts +154 -33
  607. package/src/orchestration/recall-rerank-coordinator.ts +60 -25
  608. package/src/orchestration/recall-search-pipeline.test.ts +75 -1
  609. package/src/orchestration/recall-search-pipeline.ts +50 -10
  610. package/src/orchestrator-convergence-refresh.test.ts +36 -2
  611. package/src/orchestrator.ts +13 -3
  612. package/src/page-versioning.ts +5 -19
  613. package/src/procedural/procedure-recall.ts +5 -1
  614. package/src/provenance-surfaces.test.ts +3 -0
  615. package/src/qmd-client.test.ts +78 -17
  616. package/src/qmd.test.ts +24 -0
  617. package/src/qmd.ts +224 -315
  618. package/src/recall-explain-renderer.ts +3 -0
  619. package/src/recall-rerank-coordinator.test.ts +61 -0
  620. package/src/recall-xray-renderer.test.ts +6 -0
  621. package/src/recall-xray.test.ts +88 -1
  622. package/src/recall-xray.ts +15 -0
  623. package/src/reconcile/cursor.test.ts +48 -0
  624. package/src/reconcile/cursor.ts +58 -11
  625. package/src/reconcile/manifest.test.ts +4 -0
  626. package/src/reconcile/manifest.ts +41 -51
  627. package/src/reconcile/plan.test.ts +4 -0
  628. package/src/reconcile/plan.ts +29 -16
  629. package/src/search/factory.ts +6 -6
  630. package/src/search/port.ts +25 -9
  631. package/src/secure-store/secure-fs.ts +20 -12
  632. package/src/secure-store/secure-store.test.ts +41 -2
  633. package/src/spaces/index.test.ts +61 -2
  634. package/src/spaces/index.ts +44 -18
  635. package/src/storage/entity-alias-config.ts +97 -0
  636. package/src/storage/entity-canonical-id-lock.ts +53 -23
  637. package/src/storage/entity-canonical-id-migration.ts +53 -22
  638. package/src/storage/entity-canonical-id-references.ts +3 -0
  639. package/src/storage/entity-id-safety.ts +7 -0
  640. package/src/storage/entity-store.ts +6 -2
  641. package/src/storage/memory-frontmatter-metadata.ts +4 -9
  642. package/src/storage/memory-migration-serialization.ts +10 -15
  643. package/src/storage/tombstone-blocked-capture-mutation.ts +52 -64
  644. package/src/storage/tombstone-blocked-capture-sync.ts +244 -199
  645. package/src/storage-deletion-revisions.test.ts +91 -0
  646. package/src/storage-fact-hash-index-defer.test.ts +446 -163
  647. package/src/storage.ts +534 -245
  648. package/src/tool-scoped-memory.ts +10 -0
  649. package/src/transfer/capsule-import.ts +13 -0
  650. package/src/transfer/capsule-merge.ts +13 -0
  651. package/src/trust-score-recall-paths.test.ts +75 -1
  652. package/src/types.ts +7 -3
  653. package/dist/capsule-merge-IDWJPCWK.js.map +0 -1
  654. package/dist/chunk-3CE77VAP.js.map +0 -1
  655. package/dist/chunk-3TBLDMJA.js.map +0 -1
  656. package/dist/chunk-4J7G5SY4.js.map +0 -1
  657. package/dist/chunk-4L6HUREQ.js.map +0 -1
  658. package/dist/chunk-57QKLRBV.js.map +0 -1
  659. package/dist/chunk-5TFP4CUL.js.map +0 -1
  660. package/dist/chunk-7XC2HX75.js.map +0 -1
  661. package/dist/chunk-A5OJCXZL.js.map +0 -1
  662. package/dist/chunk-BUE5E2HL.js.map +0 -1
  663. package/dist/chunk-CJ2ZR7UA.js.map +0 -1
  664. package/dist/chunk-CUM2BBPN.js.map +0 -1
  665. package/dist/chunk-D3J5SLQK.js.map +0 -1
  666. package/dist/chunk-DL7ZD3JH.js.map +0 -1
  667. package/dist/chunk-DLVPUX7U.js.map +0 -1
  668. package/dist/chunk-E6PNLPGJ.js.map +0 -1
  669. package/dist/chunk-ECK75GDJ.js.map +0 -1
  670. package/dist/chunk-HREE4JHI.js.map +0 -1
  671. package/dist/chunk-IKKWIPYN.js.map +0 -1
  672. package/dist/chunk-J7VGGECD.js.map +0 -1
  673. package/dist/chunk-N5Z4EVOR.js.map +0 -1
  674. package/dist/chunk-NVRYW264.js.map +0 -1
  675. package/dist/chunk-P2BM76KT.js.map +0 -1
  676. package/dist/chunk-PVGDJXVK.js +0 -21
  677. package/dist/chunk-QJAQNXWI.js.map +0 -1
  678. package/dist/chunk-RN7DY3FC.js.map +0 -1
  679. package/dist/chunk-RVLJEII5.js.map +0 -1
  680. package/dist/chunk-S2NCTZGJ.js.map +0 -1
  681. package/dist/chunk-TDHTVMPG.js.map +0 -1
  682. package/dist/chunk-UYLMNVY6.js.map +0 -1
  683. package/dist/chunk-VCD4PSK2.js.map +0 -1
  684. package/dist/chunk-VNA7W7QF.js.map +0 -1
  685. package/dist/chunk-VWAXN2BN.js.map +0 -1
  686. package/dist/chunk-WOCNN776.js.map +0 -1
  687. package/dist/chunk-XYTOI63Z.js.map +0 -1
  688. package/dist/chunk-YV32N67O.js.map +0 -1
  689. /package/dist/{auto-sync-5OE5QOZB.js.map → auto-sync-UPTUVE4X.js.map} +0 -0
  690. /package/dist/{chunk-VUPTKTDV.js.map → chunk-2MRHJNWL.js.map} +0 -0
  691. /package/dist/{chunk-JBPKEARU.js.map → chunk-2QSZNTDO.js.map} +0 -0
  692. /package/dist/{chunk-5IVLTFOV.js.map → chunk-44N6ESJ4.js.map} +0 -0
  693. /package/dist/{chunk-HO3QBJEY.js.map → chunk-5546W5SI.js.map} +0 -0
  694. /package/dist/{chunk-U7GW7NE7.js.map → chunk-5CEECY6P.js.map} +0 -0
  695. /package/dist/{chunk-4UH4BTGK.js.map → chunk-5SNZSWWR.js.map} +0 -0
  696. /package/dist/{chunk-6CZPDBJS.js.map → chunk-5U7ID3EZ.js.map} +0 -0
  697. /package/dist/{chunk-GF22HWS2.js.map → chunk-6NNNURLK.js.map} +0 -0
  698. /package/dist/{chunk-227UFSEQ.js.map → chunk-7RZJWZ46.js.map} +0 -0
  699. /package/dist/{chunk-E5UK4VPE.js.map → chunk-7SHJHPTY.js.map} +0 -0
  700. /package/dist/{chunk-UVIKWC7M.js.map → chunk-7YERSTN7.js.map} +0 -0
  701. /package/dist/{chunk-S5SLVSVY.js.map → chunk-BQIFZ2MP.js.map} +0 -0
  702. /package/dist/{chunk-E53DSZEN.js.map → chunk-C26TE27X.js.map} +0 -0
  703. /package/dist/{chunk-LZ4LDKHZ.js.map → chunk-CLB32OHM.js.map} +0 -0
  704. /package/dist/{chunk-Q6IP2ARR.js.map → chunk-CSOYVTRX.js.map} +0 -0
  705. /package/dist/{chunk-XOQSEF7X.js.map → chunk-CVILPI77.js.map} +0 -0
  706. /package/dist/{chunk-PDLBLTOK.js.map → chunk-EITZHSX6.js.map} +0 -0
  707. /package/dist/{chunk-WUNIWKY4.js.map → chunk-ELIL2A37.js.map} +0 -0
  708. /package/dist/{chunk-CINZGPSJ.js.map → chunk-GUMZC2BO.js.map} +0 -0
  709. /package/dist/{chunk-H24WNPA2.js.map → chunk-GWFSVJ4P.js.map} +0 -0
  710. /package/dist/{chunk-TSH56VPU.js.map → chunk-HAYSYUAB.js.map} +0 -0
  711. /package/dist/{chunk-PKNLM44P.js.map → chunk-JH6BPLOP.js.map} +0 -0
  712. /package/dist/{chunk-KXB4VXHY.js.map → chunk-JIYDRBVZ.js.map} +0 -0
  713. /package/dist/{chunk-AV5ZEH4M.js.map → chunk-KVJRXN2E.js.map} +0 -0
  714. /package/dist/{chunk-JVLCVFQ4.js.map → chunk-KXEFRMCF.js.map} +0 -0
  715. /package/dist/{chunk-WFTIGIIS.js.map → chunk-L6CQ7WIW.js.map} +0 -0
  716. /package/dist/{chunk-EJUEXZHX.js.map → chunk-LLJMAULE.js.map} +0 -0
  717. /package/dist/{chunk-AS7YMSL6.js.map → chunk-M23RF3LJ.js.map} +0 -0
  718. /package/dist/{chunk-3F2LKUMU.js.map → chunk-NIS256NW.js.map} +0 -0
  719. /package/dist/{chunk-YIAA2X3D.js.map → chunk-NK5RGJ65.js.map} +0 -0
  720. /package/dist/{chunk-OQ5PRDDS.js.map → chunk-NTOIP2E6.js.map} +0 -0
  721. /package/dist/{chunk-HLPD7B7P.js.map → chunk-NUEQKLNB.js.map} +0 -0
  722. /package/dist/{chunk-33PLLLL7.js.map → chunk-P7NGM24P.js.map} +0 -0
  723. /package/dist/{chunk-7TWUCYER.js.map → chunk-PNRA7FAD.js.map} +0 -0
  724. /package/dist/{chunk-5I4M26Q7.js.map → chunk-QBSFOKY6.js.map} +0 -0
  725. /package/dist/{chunk-P4DRWEYC.js.map → chunk-QVSBTCVP.js.map} +0 -0
  726. /package/dist/{chunk-AAIUERNB.js.map → chunk-R5RFK3CB.js.map} +0 -0
  727. /package/dist/{chunk-WDISJRMG.js.map → chunk-RMMVQQA6.js.map} +0 -0
  728. /package/dist/{chunk-5SM35XZR.js.map → chunk-S5NZBKKQ.js.map} +0 -0
  729. /package/dist/{chunk-WIPEXG6R.js.map → chunk-SXIMQLGV.js.map} +0 -0
  730. /package/dist/{chunk-OAEQLRCY.js.map → chunk-TN76AKO3.js.map} +0 -0
  731. /package/dist/{chunk-QN25OCUF.js.map → chunk-TQ4GD737.js.map} +0 -0
  732. /package/dist/{chunk-7K5Q6COX.js.map → chunk-TVVEYCNW.js.map} +0 -0
  733. /package/dist/{chunk-DNWXFTLD.js.map → chunk-TYISDI6B.js.map} +0 -0
  734. /package/dist/{chunk-4LMA77JH.js.map → chunk-U2VLVBBH.js.map} +0 -0
  735. /package/dist/{chunk-5ZE7QHTK.js.map → chunk-ULVR5KG7.js.map} +0 -0
  736. /package/dist/{chunk-4B77XSG5.js.map → chunk-UV72DEZD.js.map} +0 -0
  737. /package/dist/{chunk-S2BBISHU.js.map → chunk-VANZKHTN.js.map} +0 -0
  738. /package/dist/{chunk-3Y224NYC.js.map → chunk-VYISFWVX.js.map} +0 -0
  739. /package/dist/{chunk-TIHMZFIV.js.map → chunk-W3IC7QOY.js.map} +0 -0
  740. /package/dist/{chunk-NRV4Y3PM.js.map → chunk-W4FBGYGK.js.map} +0 -0
  741. /package/dist/{chunk-MU7ZHSZE.js.map → chunk-WZFAPHIK.js.map} +0 -0
  742. /package/dist/{chunk-T2TTP3KU.js.map → chunk-X4IDNPOS.js.map} +0 -0
  743. /package/dist/{chunk-BLAKS3CP.js.map → chunk-XL3TATMJ.js.map} +0 -0
  744. /package/dist/{chunk-W4XJFLAL.js.map → chunk-XPRJSHNI.js.map} +0 -0
  745. /package/dist/{chunk-JE7EK33X.js.map → chunk-Y7HRYCNW.js.map} +0 -0
  746. /package/dist/{chunk-E6EE5B67.js.map → chunk-YK6BDDHP.js.map} +0 -0
  747. /package/dist/{chunk-ES36HTSC.js.map → chunk-YLHM5BQQ.js.map} +0 -0
  748. /package/dist/{chunk-BJKPPZ6Z.js.map → chunk-ZFGZ6PZ2.js.map} +0 -0
  749. /package/dist/{chunk-64UDOIMI.js.map → chunk-ZLQ37WJX.js.map} +0 -0
@@ -7,7 +7,7 @@
7
7
  */
8
8
 
9
9
  import assert from "node:assert/strict";
10
- import { mkdtemp, rm } from "node:fs/promises";
10
+ import { mkdir, mkdtemp, rm, writeFile } from "node:fs/promises";
11
11
  import os from "node:os";
12
12
  import path from "node:path";
13
13
  import test from "node:test";
@@ -1283,3 +1283,97 @@ test("MCP graph_edge_decay_run: unrestricted and legacy tokens reach the handler
1283
1283
  await rm(dir, { recursive: true, force: true });
1284
1284
  }
1285
1285
  });
1286
+
1287
+ function readMcpResult(response: unknown): Record<string, unknown> {
1288
+ assert.ok(response && typeof response === "object" && "result" in response);
1289
+ const result = response.result;
1290
+ assert.ok(result && typeof result === "object");
1291
+ return Object.fromEntries(Object.entries(result));
1292
+ }
1293
+
1294
+ test("MCP external_wiki_search exposes aliases and dispatches the stable result", async () => {
1295
+ const rootDir = await mkdtemp(path.join(os.tmpdir(), "remnic-mcp-external-wiki-"));
1296
+ await mkdir(path.join(rootDir, "wiki"), { recursive: true });
1297
+ await writeFile(
1298
+ path.join(rootDir, "INDEX.md"),
1299
+ "- [[wiki/retrieval|Retrieval Architecture]] - cited hybrid retrieval\n",
1300
+ "utf8",
1301
+ );
1302
+ await writeFile(
1303
+ path.join(rootDir, "wiki", "retrieval.md"),
1304
+ "# Retrieval Architecture\n\nHybrid retrieval keeps cited sources.\n",
1305
+ "utf8",
1306
+ );
1307
+ try {
1308
+ const service = {
1309
+ ...makeMockService(),
1310
+ configRef: {
1311
+ externalWikis: [{
1312
+ id: "reading",
1313
+ rootDir,
1314
+ enabled: true,
1315
+ pagesDir: "wiki",
1316
+ indexFile: "INDEX.md",
1317
+ indexInQmd: false,
1318
+ includeInDefaultRecall: false,
1319
+ }],
1320
+ },
1321
+ } as unknown as EngramAccessService;
1322
+ const server = new EngramMcpServer(service);
1323
+
1324
+ const listed = await server.handleRequest({
1325
+ jsonrpc: "2.0",
1326
+ id: 1,
1327
+ method: "tools/list",
1328
+ params: {},
1329
+ });
1330
+ const listedResult = readMcpResult(listed);
1331
+ assert.ok(Array.isArray(listedResult.tools));
1332
+ const toolNames = listedResult.tools.flatMap((tool) =>
1333
+ tool && typeof tool === "object" && "name" in tool && typeof tool.name === "string"
1334
+ ? [tool.name]
1335
+ : []
1336
+ );
1337
+ assert.ok(toolNames.includes("remnic.external_wiki_search"));
1338
+ assert.ok(toolNames.includes("engram.external_wiki_search"));
1339
+
1340
+ let canonicalResult: unknown;
1341
+ for (const name of ["remnic.external_wiki_search", "engram.external_wiki_search"]) {
1342
+ const response = await server.handleRequest(makeToolRequest(name, {
1343
+ query: "hybrid retrieval",
1344
+ limit: 3,
1345
+ wikiId: "reading",
1346
+ maxCharsPerHit: 400,
1347
+ }));
1348
+ const result = readMcpResult(response);
1349
+ assert.equal(result.isError, false);
1350
+ assert.ok(result.structuredContent && typeof result.structuredContent === "object");
1351
+ if (canonicalResult === undefined) canonicalResult = result.structuredContent;
1352
+ else assert.deepEqual(result.structuredContent, canonicalResult);
1353
+ }
1354
+ assert.ok(canonicalResult && typeof canonicalResult === "object" && "hits" in canonicalResult);
1355
+ assert.ok(Array.isArray(canonicalResult.hits));
1356
+ assert.equal(canonicalResult.hits.length, 1);
1357
+ const firstHit = canonicalResult.hits[0];
1358
+ assert.ok(firstHit && typeof firstHit === "object" && "path" in firstHit);
1359
+ assert.equal(firstHit.path, "wiki/retrieval.md");
1360
+ } finally {
1361
+ await rm(rootDir, { recursive: true, force: true });
1362
+ }
1363
+ });
1364
+
1365
+ test("MCP external_wiki_search rejects an empty query before service dispatch", async () => {
1366
+ let configRead = false;
1367
+ const service = {
1368
+ ...makeMockService(),
1369
+ get configRef() {
1370
+ configRead = true;
1371
+ return parseConfig({ memoryDir: os.tmpdir(), externalWikis: [] });
1372
+ },
1373
+ } as unknown as EngramAccessService;
1374
+ const server = new EngramMcpServer(service);
1375
+
1376
+ const response = await server.handleRequest(makeToolRequest("remnic.external_wiki_search", { query: " " }));
1377
+ assert.equal(readMcpResult(response).isError, true);
1378
+ assert.equal(configRead, false);
1379
+ });
package/src/access-mcp.ts CHANGED
@@ -43,7 +43,10 @@ import type { RecallDisclosure, RecallPlanMode } from "./types.js";
43
43
  import { expandTildePath } from "./utils/path.js";
44
44
 
45
45
  import { applyToolOutputSchemas } from "./access-mcp-output-schemas.js";
46
- import { MCP_READ_ONLY_TOOL_SUFFIXES } from "./mcp-read-only-tools.js";import { MEETINGS_MCP_TOOLS } from "./meetings/mcp-tools.js";import { WEARABLES_MCP_TOOLS } from "./wearables/mcp-tools.js";
46
+ import { MCP_READ_ONLY_TOOL_SUFFIXES } from "./mcp-read-only-tools.js";
47
+ import { MEETINGS_MCP_TOOLS } from "./meetings/mcp-tools.js";
48
+ import { WEARABLES_MCP_TOOLS } from "./wearables/mcp-tools.js";
49
+ import { EXTERNAL_WIKI_MCP_TOOLS } from "./external-wiki-mcp-tools.js";
47
50
  import { abortError, isAbortError } from "./abort-error.js";
48
51
  type JsonRpcId = string | number | null;
49
52
 
@@ -152,16 +155,10 @@ function withToolAliases(tool: McpTool, emitLegacyTools = true): McpTool[] {
152
155
  return emitLegacyTools ? [canonicalTool, tool] : [canonicalTool];
153
156
  }
154
157
 
155
- /**
156
- * MCP tool name (legacy `engram.*` form, since {@link toLegacyToolName}
157
- * canonicalizes incoming calls) → boundary operation it dispatches through.
158
- * A tool appears here once its `access-operations.ts` registration lands and
159
- * its surface-local validation is deleted. The fitness test
160
- * (`access-surface-catalog.test.ts`) asserts this map and the catalog agree.
161
- */
162
158
  const MCP_MIGRATED_OPERATIONS: Readonly<Record<string, OperationName>> = {
163
159
  "engram.memory_get": "memory_get",
164
160
  "engram.memory_search": "memory_search",
161
+ "engram.external_wiki_search": "external_wiki_search",
165
162
  "engram.memory_store": "memory_store",
166
163
  "engram.coding_decision": "coding_decision",
167
164
  "engram.coding_architecture": "coding_architecture",
@@ -1427,7 +1424,7 @@ export class EngramMcpServer {
1427
1424
  additionalProperties: false,
1428
1425
  },
1429
1426
  },
1430
- // ── Memory search & debug tools ────────────────────────────────────
1427
+ ...EXTERNAL_WIKI_MCP_TOOLS,
1431
1428
  {
1432
1429
  name: "engram.memory_search",
1433
1430
  description:
@@ -2740,6 +2737,7 @@ export class EngramMcpServer {
2740
2737
  const result = (await op.run(envelope, {
2741
2738
  service: this.service,
2742
2739
  authenticatedPrincipal: effectivePrincipal,
2740
+ ...(sourceConnector ? { sourceConnector } : {}),
2743
2741
  ...(abortSignal ? { abortSignal } : {}),
2744
2742
  })) as { result: unknown };
2745
2743
  throwMcpAbort(abortSignal, "MCP recall aborted before postprocessing");
@@ -3,10 +3,31 @@ type PendingObservePreparation = {
3
3
  scopeHint?: string;
4
4
  principal?: string;
5
5
  namespace?: string;
6
+ scopeResolved: boolean;
7
+ resolvedScopeFences: Array<{ principal?: string; namespace?: string }>;
6
8
  released: Promise<void>;
7
9
  release: () => void;
8
10
  };
9
11
 
12
+ function resolvedScopesMatch(
13
+ left: { principal?: string; namespace?: string },
14
+ right: { principal?: string; namespace?: string },
15
+ ): boolean {
16
+ return left.principal === right.principal && left.namespace === right.namespace;
17
+ }
18
+
19
+ function preparationMatchesScope(
20
+ reservation: PendingObservePreparation,
21
+ principal: string | undefined,
22
+ namespace: string | undefined,
23
+ scopeHint: string | undefined,
24
+ ): boolean {
25
+ if (reservation.scopeResolved) {
26
+ return resolvedScopesMatch(reservation, { principal, namespace });
27
+ }
28
+ return reservation.scopeHint === undefined || scopeHint === undefined || reservation.scopeHint === scopeHint;
29
+ }
30
+
10
31
  export type PendingObservePreparationHandle = {
11
32
  isCancelled(): boolean;
12
33
  setScope(principal?: string, namespace?: string): void;
@@ -40,6 +61,8 @@ export class PendingObserveExtractionTracker {
40
61
  let resolveReleased: () => void = () => {};
41
62
  const reservation: PendingObservePreparation = {
42
63
  cancelled: false,
64
+ scopeResolved: false,
65
+ resolvedScopeFences: [],
43
66
  scopeHint,
44
67
  released: new Promise<void>((resolve) => {
45
68
  resolveReleased = resolve;
@@ -61,15 +84,38 @@ export class PendingObserveExtractionTracker {
61
84
  setScope: (principal, namespace) => {
62
85
  reservation.principal = principal;
63
86
  reservation.namespace = namespace;
87
+ reservation.scopeResolved = true;
88
+ if (reservation.resolvedScopeFences.some((fence) => resolvedScopesMatch(reservation, fence))) {
89
+ reservation.cancelled = true;
90
+ }
64
91
  },
65
92
  release: reservation.release,
66
93
  };
67
94
  }
68
95
 
69
- private async waitForPreparations(sessionKey: string): Promise<void> {
96
+ private async waitForPreparations(
97
+ sessionKey: string,
98
+ principal: string | undefined,
99
+ namespace: string | undefined,
100
+ scopeHint: string | undefined,
101
+ ): Promise<void> {
70
102
  while (true) {
71
- const pending = [...(this.preparations.get(sessionKey) ?? [])].filter(
72
- (reservation) => !reservation.cancelled,
103
+ const reservations = [...(this.preparations.get(sessionKey) ?? [])];
104
+ for (const reservation of reservations) {
105
+ if (
106
+ !reservation.cancelled &&
107
+ !reservation.scopeResolved &&
108
+ !preparationMatchesScope(reservation, principal, namespace, scopeHint) &&
109
+ !reservation.resolvedScopeFences.some((fence) =>
110
+ resolvedScopesMatch(fence, { principal, namespace }),
111
+ )
112
+ ) {
113
+ reservation.resolvedScopeFences.push({ principal, namespace });
114
+ }
115
+ }
116
+ const pending = reservations.filter(
117
+ (reservation) =>
118
+ !reservation.cancelled && preparationMatchesScope(reservation, principal, namespace, scopeHint),
73
119
  );
74
120
  if (pending.length === 0) return;
75
121
  await Promise.all(pending.map((reservation) => reservation.released));
@@ -103,6 +149,19 @@ export class PendingObserveExtractionTracker {
103
149
  });
104
150
  }
105
151
 
152
+ cancelPreparations(sessionKey: string, scopeHint?: string): void {
153
+ for (const reservation of this.preparations.get(sessionKey) ?? []) {
154
+ if (
155
+ scopeHint !== undefined &&
156
+ reservation.scopeHint !== undefined &&
157
+ reservation.scopeHint !== scopeHint
158
+ ) {
159
+ continue;
160
+ }
161
+ reservation.cancelled = true;
162
+ }
163
+ }
164
+
106
165
  cancel(
107
166
  sessionKey: string,
108
167
  principal?: string,
@@ -110,24 +169,7 @@ export class PendingObserveExtractionTracker {
110
169
  scopeHint?: string,
111
170
  ): void {
112
171
  for (const reservation of this.preparations.get(sessionKey) ?? []) {
113
- const principalMatches =
114
- principal === undefined ||
115
- reservation.principal === undefined ||
116
- reservation.principal === principal;
117
- const namespaceMatches =
118
- namespace === undefined ||
119
- reservation.namespace === undefined ||
120
- reservation.namespace === namespace;
121
- const resolvedScopeMatches =
122
- namespace !== undefined &&
123
- reservation.namespace === namespace &&
124
- principalMatches;
125
- const scopeHintMismatch =
126
- (reservation.scopeHint !== undefined && reservation.scopeHint !== scopeHint) ||
127
- (reservation.scopeHint === undefined && scopeHint !== undefined);
128
- if ((!resolvedScopeMatches && scopeHintMismatch) || !principalMatches || !namespaceMatches) {
129
- continue;
130
- }
172
+ if (!preparationMatchesScope(reservation, principal, namespace, scopeHint)) continue;
131
173
  reservation.cancelled = true;
132
174
  }
133
175
 
@@ -158,7 +200,7 @@ export class PendingObserveExtractionTracker {
158
200
  registerCancellation?.(abortTracked);
159
201
  abortSignal?.addEventListener("abort", abortTracked, { once: true });
160
202
  try {
161
- await this.waitForPreparations(sessionKey);
203
+ await this.waitForPreparations(sessionKey, principal, namespace, scopeHint);
162
204
  while (true) {
163
205
  const entry = this.entries.get(key);
164
206
  if (!entry) return;
@@ -110,6 +110,10 @@ export interface AccessObserveWriteSurfaceDeps {
110
110
  authenticatedPrincipal?: string;
111
111
  }
112
112
  ): Promise<MemoryScopePlan>;
113
+ cancelPendingObservePreparations?(
114
+ sessionKey: string,
115
+ scopeHint?: string,
116
+ ): void;
113
117
  cancelPendingObserveExtractions?(
114
118
  sessionKey: string,
115
119
  principal?: string,
@@ -132,6 +136,10 @@ export class AccessObserveWriteSurface {
132
136
  private quarantineStoreInstance?: WriteQuarantineStore;
133
137
  private readonly pendingObserveExtractions = new PendingObserveExtractionTracker();
134
138
 
139
+ public cancelPendingObservePreparations(sessionKey: string, scopeHint?: string): void {
140
+ this.pendingObserveExtractions.cancelPreparations(sessionKey, scopeHint);
141
+ }
142
+
135
143
  public cancelPendingObserveExtractions(
136
144
  sessionKey: string,
137
145
  principal?: string,
@@ -0,0 +1,54 @@
1
+ import * as nodePath from "node:path";
2
+ import type { Orchestrator } from "./orchestrator.js";
3
+ import { iterateOfflineSyncSnapshotFileRecords } from "./offline-sync.js";
4
+ import { offlineSyncStorageForSnapshot } from "./offline-sync-impression-drain.js";
5
+ import {
6
+ buildReconcileManifestFile,
7
+ RECONCILE_MANIFEST_FORMAT,
8
+ RECONCILE_MANIFEST_SCHEMA_VERSION,
9
+ type ReconcileManifest,
10
+ type ReconcileManifestFile,
11
+ type ReconcileMemoryParser,
12
+ } from "./reconcile/manifest.js";
13
+
14
+ export interface OfflineSyncManifestRequest {
15
+ includeTranscripts?: boolean;
16
+ signal?: AbortSignal;
17
+ }
18
+
19
+ export interface OfflineSyncManifestStreamResponse extends Omit<ReconcileManifest, "files"> {
20
+ namespace: string;
21
+ files: AsyncIterable<ReconcileManifestFile>;
22
+ }
23
+
24
+ export async function createOfflineSyncManifestStream(
25
+ orchestrator: Orchestrator,
26
+ namespace: string,
27
+ userExcludeRegexps: RegExp[],
28
+ options: OfflineSyncManifestRequest,
29
+ parseMemory: ReconcileMemoryParser,
30
+ ): Promise<OfflineSyncManifestStreamResponse> {
31
+ const storage = await offlineSyncStorageForSnapshot(orchestrator, namespace);
32
+ const snapshotFiles = iterateOfflineSyncSnapshotFileRecords({
33
+ root: storage.dir,
34
+ includeContent: false,
35
+ includeTranscripts: options.includeTranscripts !== false,
36
+ readFileDigest: async ({ filePath }) => storage.digestOfflineSyncFile(filePath),
37
+ signal: options.signal,
38
+ userExcludeRegexps,
39
+ });
40
+ return {
41
+ namespace,
42
+ format: RECONCILE_MANIFEST_FORMAT,
43
+ schemaVersion: RECONCILE_MANIFEST_SCHEMA_VERSION,
44
+ files: (async function* () {
45
+ for await (const file of snapshotFiles) {
46
+ yield await buildReconcileManifestFile(
47
+ file,
48
+ async ({ path }) => storage.readOfflineSyncFile(nodePath.join(storage.dir, path)),
49
+ parseMemory,
50
+ );
51
+ }
52
+ })(),
53
+ };
54
+ }
@@ -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, 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
  }