@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
@@ -18,6 +18,10 @@ import {
18
18
  type EngramAccessWriteResponse,
19
19
  } from "./access-service.js";
20
20
  import { maybeHandleLifecycleFlush, type LifecycleFlushHttpDeps } from "./access-http-lifecycle-flush.js";
21
+ import {
22
+ respondOfflineManifestStream,
23
+ respondOfflineSnapshotStream,
24
+ } from "./access-http-offline-stream.js";
21
25
  import { nonEmptyQueryParam, optionalQueryString, positiveIntQueryParam } from "./access-http-query.js";
22
26
  import { CorrectionContractError } from "./correction/correction-contract.js";
23
27
  import { WearablesInputError } from "./wearables/errors.js"; import { respondMeetingsList, respondMeetingsGet, respondMeetingsBuild } from "./meetings/http-glue.js";
@@ -42,7 +46,7 @@ import { projectTagProjectId } from "./coding/coding-namespace.js";
42
46
  import { getOperation, type OperationName } from "./access-boundary.js";
43
47
  import { authorizationProbeNamespaces, probeOperationAuthorization } from "./access-authorization-probe.js";
44
48
  import { resolveQueryNamespaceWritablePreflight } from "./access-namespace-preflight.js";
45
- import { respondLcmCompactionCapabilitiesHttp } from "./access-http-lcm-compaction.js";
49
+ import { respondAccessCapabilitiesHttp } from "./access-http-lcm-compaction.js";
46
50
  import {
47
51
  assertOperationAllowed,
48
52
  capabilityAllowsOp,
@@ -898,7 +902,7 @@ export class EngramAccessHttpServer {
898
902
  });
899
903
  return;
900
904
  }
901
- if (req.method === "GET" && pathname === "/engram/v1/capabilities") return respondLcmCompactionCapabilitiesHttp(res);
905
+ if (req.method === "GET" && pathname === "/engram/v1/capabilities") return respondAccessCapabilitiesHttp(res);
902
906
  if (req.method === "GET" && pathname === "/engram/v1/authorization") {
903
907
  res.setHeader("cache-control", "no-store");
904
908
  const probe = probeOperationAuthorization(tokenCapabilityStore.getStore(), parsed.searchParams.getAll("op"));
@@ -910,11 +914,6 @@ export class EngramAccessHttpServer {
910
914
  }
911
915
 
912
916
  if (req.method === "GET" && pathname === "/engram/v1/adapters") {
913
- // Issue #1850 round 5 (finding 1): adapter metadata is served after
914
- // auth but was NOT op-gated, so a deny-all or narrow-ops token reached
915
- // it. enforceTokenOp fail-closes it under the per-token ops allow-list;
916
- // no-op for unrestricted/legacy tokens. There is no namespace axis —
917
- // adapter metadata is not tenant-scoped.
918
917
  this.enforceTokenOp("adapters_status"); // boundary dispatch (issue #1850)
919
918
  const identity = this.resolveAdapterIdentity(req);
920
919
  this.respondJson(res, 200, {
@@ -958,6 +957,21 @@ export class EngramAccessHttpServer {
958
957
  }
959
958
  return;
960
959
  }
960
+ if (
961
+ req.method === "POST" &&
962
+ (pathname === "/engram/v1/external-wikis/search" ||
963
+ pathname === "/remnic/v1/external-wikis/search")
964
+ ) {
965
+ this.enforceTokenOp("external_wiki_search");
966
+ const operation = getOperation("external_wiki_search");
967
+ if (!operation) throw new EngramAccessInputError("external_wiki_search operation is not registered");
968
+ const output = await operation.run(await this.readJsonBody(req), { service: this.service });
969
+ if (!output || typeof output !== "object" || !("result" in output)) {
970
+ throw new Error("external_wiki_search returned an invalid operation result");
971
+ }
972
+ this.respondJson(res, 200, output.result);
973
+ return;
974
+ }
961
975
 
962
976
  if (req.method === "POST" && pathname === "/engram/v1/recall") {
963
977
  this.enforceTokenOp("recall"); // boundary dispatch (issue #1525)
@@ -1055,6 +1069,7 @@ export class EngramAccessHttpServer {
1055
1069
  query: body.query ?? "",
1056
1070
  sessionKey: body.sessionKey,
1057
1071
  authenticatedPrincipal: this.resolveRequestPrincipal(req),
1072
+ sourceConnector: this.resolveConnector(req),
1058
1073
  idempotencyKey: body.idempotencyKey,
1059
1074
  namespace: this.resolveNamespace(req, body.namespace),
1060
1075
  topK: body.topK,
@@ -1078,10 +1093,6 @@ export class EngramAccessHttpServer {
1078
1093
  return;
1079
1094
  }
1080
1095
 
1081
- // Attach / clear coding-agent context for a session (issue #569 PR 5).
1082
- // Mirrors `setCodingContext` on the access service. Connectors call this
1083
- // at session start after resolving a git context for the cwd; `remnic
1084
- // doctor` (PR 8) surfaces the attached context.
1085
1096
  if (req.method === "POST" && pathname === "/engram/v1/coding-context") {
1086
1097
  this.enforceTokenOp("set_coding_context"); // boundary dispatch (issue #1525)
1087
1098
  const body = await this.readValidatedBody(req, "setCodingContext");
@@ -1142,6 +1153,20 @@ export class EngramAccessHttpServer {
1142
1153
  return;
1143
1154
  }
1144
1155
 
1156
+ if (
1157
+ req.method === "GET" &&
1158
+ (pathname === "/engram/v1/offline-sync/capabilities" ||
1159
+ pathname === "/remnic/v1/offline-sync/capabilities")
1160
+ ) {
1161
+ this.enforceTokenOp("offline_sync_snapshot");
1162
+ this.respondJson(res, 200, {
1163
+ version: 1,
1164
+ convergenceFinalization: true,
1165
+ manifestStream: true,
1166
+ });
1167
+ return;
1168
+ }
1169
+
1145
1170
  if (
1146
1171
  req.method === "GET" &&
1147
1172
  (pathname === "/engram/v1/offline-sync/snapshot" || pathname === "/remnic/v1/offline-sync/snapshot")
@@ -1215,10 +1240,44 @@ export class EngramAccessHttpServer {
1215
1240
  includeContent: false,
1216
1241
  signal: this.createRequestAbortSignal(req, res),
1217
1242
  });
1218
- await this.respondOfflineSnapshotStream(res, result);
1243
+ await respondOfflineSnapshotStream(res, result, correlationIdStore.getStore());
1244
+ return;
1245
+ }
1246
+ if (
1247
+ req.method === "GET" &&
1248
+ (pathname === "/engram/v1/offline-sync/manifest-stream" ||
1249
+ pathname === "/remnic/v1/offline-sync/manifest-stream")
1250
+ ) {
1251
+ this.enforceTokenOp("offline_sync_snapshot_stream");
1252
+ const includeTranscriptsRaw = parsed.searchParams.get("include_transcripts");
1253
+ const includeContentRaw = parsed.searchParams.get("content");
1254
+ if (
1255
+ includeTranscriptsRaw !== null &&
1256
+ includeTranscriptsRaw !== "true" &&
1257
+ includeTranscriptsRaw !== "false"
1258
+ ) {
1259
+ throw new EngramAccessInputError(
1260
+ `include_transcripts must be one of: true, false (got: ${includeTranscriptsRaw})`,
1261
+ );
1262
+ }
1263
+ if (includeContentRaw !== null && includeContentRaw !== "false") {
1264
+ throw new EngramAccessInputError("manifest-stream content must be false");
1265
+ }
1266
+ const namespaceParam = parsed.searchParams.get("namespace");
1267
+ const result = await this.service.offlineSyncManifestStream({
1268
+ namespace: this.resolveNamespace(
1269
+ req,
1270
+ namespaceParam && namespaceParam.length > 0 ? namespaceParam : undefined,
1271
+ ),
1272
+ principal: this.resolveRequestPrincipal(req),
1273
+ includeTranscripts: includeTranscriptsRaw !== "false",
1274
+ signal: this.createRequestAbortSignal(req, res),
1275
+ });
1276
+ await respondOfflineManifestStream(res, result, correlationIdStore.getStore());
1219
1277
  return;
1220
1278
  }
1221
1279
 
1280
+
1222
1281
  if (
1223
1282
  req.method === "POST" &&
1224
1283
  (pathname === "/engram/v1/offline-sync/snapshot" || pathname === "/remnic/v1/offline-sync/snapshot")
@@ -1323,6 +1382,7 @@ export class EngramAccessHttpServer {
1323
1382
  return;
1324
1383
  }
1325
1384
 
1385
+
1326
1386
  if (
1327
1387
  req.method === "POST" &&
1328
1388
  (
@@ -1330,7 +1390,8 @@ export class EngramAccessHttpServer {
1330
1390
  pathname === "/remnic/v1/offline-sync/convergence-complete"
1331
1391
  )
1332
1392
  ) {
1333
- this.enforceTokenOp("offline_sync_apply_file_content");
1393
+ void getOperation("offline_sync_apply_file_content");
1394
+ this.enforceTokenAnyOf(["offline_sync_apply_file_content", "offline_sync_apply"]);
1334
1395
  const namespaceParams = parsed.searchParams.getAll("namespace").filter(Boolean);
1335
1396
  const requestedNamespaces: Array<string | undefined> =
1336
1397
  namespaceParams.length > 0 ? namespaceParams : [undefined];
@@ -1386,9 +1447,6 @@ export class EngramAccessHttpServer {
1386
1447
  return;
1387
1448
  }
1388
1449
 
1389
- // Tier-explain (issue #518): structured per-result annotation from
1390
- // the direct-answer retrieval tier. Orthogonal to /recall/explain
1391
- // above, which returns a graph-path explanation document.
1392
1450
  if (req.method === "GET" && pathname === "/engram/v1/recall/tier-explain") {
1393
1451
  this.enforceTokenOp("recall_tier_explain"); // boundary dispatch (issue #1525)
1394
1452
  const sessionParam = parsed.searchParams.get("session");
@@ -1486,6 +1544,7 @@ export class EngramAccessHttpServer {
1486
1544
  namespace,
1487
1545
  budget,
1488
1546
  authenticatedPrincipal: this.resolveRequestPrincipal(req),
1547
+ sourceConnector: this.resolveConnector(req),
1489
1548
  ...(disclosure !== undefined ? { disclosure } : {}),
1490
1549
  });
1491
1550
  } catch (err) {
@@ -1526,11 +1585,6 @@ export class EngramAccessHttpServer {
1526
1585
  return;
1527
1586
  }
1528
1587
 
1529
- // -- Wearables (Limitless / Bee / Omi transcript ingestion). All
1530
- // behavior + validation lives in WearablesService; these routes
1531
- // translate transport shape only. Service validation errors map
1532
- // to 400 via respondWearablesError; backend faults bubble to the
1533
- // global 500 handler.
1534
1588
  if (
1535
1589
  req.method === "GET" &&
1536
1590
  (pathname === "/engram/v1/wearables/status" || pathname === "/remnic/v1/wearables/status")
@@ -3370,62 +3424,6 @@ export class EngramAccessHttpServer {
3370
3424
  res.end(body);
3371
3425
  }
3372
3426
 
3373
- private async respondOfflineSnapshotStream(
3374
- res: ServerResponse,
3375
- snapshot: Awaited<ReturnType<EngramAccessService["offlineSyncSnapshotStream"]>>,
3376
- ): Promise<void> {
3377
- res.statusCode = 200;
3378
- res.setHeader("content-type", "application/x-ndjson; charset=utf-8");
3379
- res.setHeader("cache-control", "no-store");
3380
- const cid = correlationIdStore.getStore();
3381
- if (cid) {
3382
- res.setHeader("x-request-id", cid);
3383
- }
3384
- const waitForDrainOrClose = async (): Promise<boolean> => new Promise((resolve, reject) => {
3385
- const cleanup = () => {
3386
- res.off("drain", onDrain);
3387
- res.off("close", onClose);
3388
- res.off("error", onError);
3389
- };
3390
- const onDrain = () => {
3391
- cleanup();
3392
- resolve(true);
3393
- };
3394
- const onClose = () => {
3395
- cleanup();
3396
- resolve(false);
3397
- };
3398
- const onError = (error: Error) => {
3399
- cleanup();
3400
- reject(error);
3401
- };
3402
- res.once("drain", onDrain);
3403
- res.once("close", onClose);
3404
- res.once("error", onError);
3405
- });
3406
- const writeLine = async (payload: unknown): Promise<boolean> => {
3407
- if (res.destroyed || res.writableEnded) return false;
3408
- if (res.write(`${JSON.stringify(payload)}\n`)) return true;
3409
- if (res.destroyed || res.writableEnded) return false;
3410
- return waitForDrainOrClose();
3411
- };
3412
- if (!await writeLine({
3413
- type: "snapshot",
3414
- namespace: snapshot.namespace,
3415
- format: snapshot.format,
3416
- schemaVersion: snapshot.schemaVersion,
3417
- createdAt: snapshot.createdAt,
3418
- sourceId: snapshot.sourceId,
3419
- includeTranscripts: snapshot.includeTranscripts,
3420
- })) return;
3421
- for await (const file of snapshot.files) {
3422
- if (!await writeLine({ type: "file", file })) return;
3423
- }
3424
- if (!res.destroyed && !res.writableEnded) {
3425
- res.end();
3426
- }
3427
- }
3428
-
3429
3427
  private respondBinary(
3430
3428
  res: ServerResponse,
3431
3429
  status: number,
@@ -3856,6 +3854,15 @@ export class EngramAccessHttpServer {
3856
3854
  void getOperation(op); // preserve the registration side-effect assertion
3857
3855
  assertOperationAllowed(tokenCapabilityStore.getStore(), op);
3858
3856
  }
3857
+
3858
+ private enforceTokenAnyOf(ops: readonly OperationName[]): void {
3859
+ for (const op of ops) void getOperation(op);
3860
+ const capabilities = tokenCapabilityStore.getStore();
3861
+ if (ops.some((op) => capabilityAllowsOp(capabilities, op))) return;
3862
+ throw new EngramAccessForbiddenError(
3863
+ `token is not permitted to call any required operation: ${ops.join(", ")}`,
3864
+ );
3865
+ }
3859
3866
 
3860
3867
  /**
3861
3868
  * Operator/admin routes are unrestricted-only surfaces: a scoped
@@ -260,6 +260,42 @@ const TOOL_OUTPUT_SCHEMAS: Readonly<Record<string, Record<string, unknown>>> = {
260
260
  guidelineVersion: { type: ["number", "null"] } as const,
261
261
  }),
262
262
  memory_search: objectSchema({ query: T_STRING, results: T_ARRAY, count: T_NUMBER }),
263
+ external_wiki_search: objectSchema({
264
+ query: T_STRING,
265
+ hits: {
266
+ type: "array",
267
+ items: {
268
+ type: "object",
269
+ properties: {
270
+ wikiId: T_STRING,
271
+ title: T_STRING,
272
+ path: T_STRING,
273
+ snippet: T_STRING,
274
+ score: T_NUMBER,
275
+ rank: T_NUMBER,
276
+ citations: {
277
+ type: "array",
278
+ items: {
279
+ type: "object",
280
+ properties: {
281
+ path: T_STRING,
282
+ lineStart: T_NUMBER,
283
+ lineEnd: T_NUMBER,
284
+ note: T_STRING,
285
+ },
286
+ required: ["path", "lineStart", "lineEnd", "note"],
287
+ additionalProperties: false,
288
+ },
289
+ },
290
+ indexBlurb: T_STRING,
291
+ },
292
+ required: ["wikiId", "title", "path", "snippet", "score", "rank", "citations"],
293
+ additionalProperties: false,
294
+ },
295
+ },
296
+ count: T_NUMBER,
297
+ degradedWikiIds: T_ARRAY,
298
+ }, ["query", "hits", "count", "degradedWikiIds"]),
263
299
  memory_profile: objectSchema({ profile: T_STRING }),
264
300
  memory_entities_list: objectSchema({ entities: T_ARRAY, count: T_NUMBER }),
265
301
  memory_questions: objectSchema({ questions: T_ARRAY, count: T_NUMBER }),
@@ -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
+ }