@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
@@ -23,8 +23,9 @@
23
23
  */
24
24
  import path from "node:path";
25
25
 
26
+ import { abortError } from "../abort-error.js";
27
+ import { launchProcess, launchProcessSync } from "../runtime/child-process.js";
26
28
  import { expandTildePath } from "../utils/path.js";
27
- import { launchProcessSync } from "../runtime/child-process.js";
28
29
 
29
30
  // Re-export so existing callers / tests that imported `expandTildePath` from
30
31
  // this module keep working. CLAUDE.md #17 requires consistent `~` expansion
@@ -64,19 +65,30 @@ export interface GitContext {
64
65
  defaultBranch: string | null;
65
66
  }
66
67
 
68
+ export interface GitInvokeOptions {
69
+ abortSignal?: AbortSignal;
70
+ timeoutMs?: number;
71
+ }
72
+
73
+ export interface GitInvokeResult {
74
+ stdout: string;
75
+ exitCode: number;
76
+ }
77
+
67
78
  /**
68
- * Injectable git-invocation surface. Only the commands `resolveGitContext`
69
- * actually needs are exposed. Tests inject a mock implementation to avoid
70
- * spawning a real git process.
79
+ * Run `git <args>` with `cwd` as the working directory. Implementations
80
+ * should return non-zero exit codes rather than throwing for command failure.
71
81
  */
72
82
  export interface GitInvoker {
73
- /**
74
- * Run `git <args>` with `cwd` as the working directory. Must return
75
- * `{ stdout, exitCode }` with `stdout` trimmed by the caller as needed.
76
- * Implementations should NOT throw for non-zero exit codes — they should
77
- * return the exit code so the resolver can decide how to recover.
78
- */
79
- (cwd: string, args: string[]): { stdout: string; exitCode: number };
83
+ (
84
+ cwd: string,
85
+ args: string[],
86
+ options?: GitInvokeOptions,
87
+ ): GitInvokeResult | Promise<GitInvokeResult>;
88
+ }
89
+
90
+ export interface SyncGitInvoker {
91
+ (cwd: string, args: string[]): GitInvokeResult;
80
92
  }
81
93
 
82
94
  // ──────────────────────────────────────────────────────────────────────────
@@ -85,7 +97,7 @@ export interface GitInvoker {
85
97
 
86
98
  const DEFAULT_GIT_TIMEOUT_MS = 2_000;
87
99
 
88
- export function defaultGitInvoker(): GitInvoker {
100
+ export function defaultGitInvokerSync(): SyncGitInvoker {
89
101
  return (cwd: string, args: string[]) => {
90
102
  const result = launchProcessSync("git", args, {
91
103
  cwd,
@@ -93,10 +105,7 @@ export function defaultGitInvoker(): GitInvoker {
93
105
  timeout: DEFAULT_GIT_TIMEOUT_MS,
94
106
  shell: false,
95
107
  });
96
- if (result.error) {
97
- // Spawn failure (git not on PATH, timeout, etc.). Surface as non-zero.
98
- return { stdout: "", exitCode: 127 };
99
- }
108
+ if (result.error) return { stdout: "", exitCode: 127 };
100
109
  return {
101
110
  stdout: typeof result.stdout === "string" ? result.stdout : "",
102
111
  exitCode: typeof result.status === "number" ? result.status : 1,
@@ -104,6 +113,73 @@ export function defaultGitInvoker(): GitInvoker {
104
113
  };
105
114
  }
106
115
 
116
+ export function defaultGitInvoker(): GitInvoker {
117
+ return (cwd, args, options = {}) => {
118
+ if (options.abortSignal?.aborted) {
119
+ throw options.abortSignal.reason instanceof Error
120
+ ? options.abortSignal.reason
121
+ : abortError("git context resolution aborted");
122
+ }
123
+
124
+ const child = launchProcess("git", args, {
125
+ cwd,
126
+ encoding: "utf-8",
127
+ shell: false,
128
+ stdio: ["ignore", "pipe", "ignore"],
129
+ });
130
+ const { promise, resolve, reject } = Promise.withResolvers<GitInvokeResult>();
131
+ let stdout = "";
132
+ let settled = false;
133
+ let timer: NodeJS.Timeout | undefined;
134
+
135
+ const cleanup = (): void => {
136
+ clearTimeout(timer);
137
+ options.abortSignal?.removeEventListener("abort", onAbort);
138
+ };
139
+ const finish = (result: GitInvokeResult): void => {
140
+ if (settled) return;
141
+ settled = true;
142
+ cleanup();
143
+ resolve(result);
144
+ };
145
+ const fail = (error: Error): void => {
146
+ if (settled) return;
147
+ settled = true;
148
+ cleanup();
149
+ reject(error);
150
+ };
151
+ const onAbort = (): void => {
152
+ child.kill("SIGTERM");
153
+ fail(
154
+ options.abortSignal?.reason instanceof Error
155
+ ? options.abortSignal.reason
156
+ : abortError("git context resolution aborted"),
157
+ );
158
+ };
159
+
160
+ child.stdout?.setEncoding("utf-8");
161
+ child.stdout?.on("data", (chunk: string | Buffer) => {
162
+ stdout += chunk.toString();
163
+ });
164
+ child.once("error", () => finish({ stdout: "", exitCode: 127 }));
165
+ child.once("close", (exitCode: number | null) => {
166
+ finish({ stdout, exitCode: typeof exitCode === "number" ? exitCode : 1 });
167
+ });
168
+ options.abortSignal?.addEventListener("abort", onAbort, { once: true });
169
+
170
+ const timeoutMs = Math.max(
171
+ 1,
172
+ Math.min(DEFAULT_GIT_TIMEOUT_MS, options.timeoutMs ?? DEFAULT_GIT_TIMEOUT_MS),
173
+ );
174
+ timer = setTimeout(() => {
175
+ child.kill("SIGTERM");
176
+ finish({ stdout: "", exitCode: 124 });
177
+ }, timeoutMs);
178
+ if (options.abortSignal?.aborted) onAbort();
179
+ return promise;
180
+ };
181
+ }
182
+
107
183
  // ──────────────────────────────────────────────────────────────────────────
108
184
  // Stable hashing
109
185
  // ──────────────────────────────────────────────────────────────────────────
@@ -239,17 +315,21 @@ export function normalizeOriginUrl(rawUrl: string): string {
239
315
  export interface ResolveGitContextOptions {
240
316
  /** Inject a git invoker (tests). Defaults to spawning real `git`. */
241
317
  invoker?: GitInvoker;
318
+ abortSignal?: AbortSignal;
319
+ /** Absolute epoch deadline shared with the extraction lifecycle. */
320
+ deadlineMs?: number;
321
+ /** Injectable clock for deadline tests. */
322
+ now?: () => number;
242
323
  }
243
324
 
244
325
  /**
245
326
  * Detect the git project + branch for `cwd`.
246
327
  *
247
- * Returns `null` when:
248
- * - `cwd` is not an absolute path (invalid input, CLAUDE.md #51)
249
- * - `cwd` is not inside a git worktree
250
- * - `git` is not available on PATH
328
+ * Returns `null` when `cwd` is invalid, outside a worktree, or git is
329
+ * unavailable. Unexpected command failures also resolve to `null`.
251
330
  *
252
- * Never throws.
331
+ * Caller cancellation and an exhausted deadline reject so lifecycle callers
332
+ * can stop promptly instead of treating an interrupted probe as "not a repo".
253
333
  */
254
334
  export async function resolveGitContext(
255
335
  cwd: string,
@@ -272,9 +352,24 @@ export async function resolveGitContext(
272
352
  if (!path.isAbsolute(expanded)) return null;
273
353
 
274
354
  const invoker = options.invoker ?? defaultGitInvoker();
355
+ const now = options.now ?? Date.now;
356
+ const invoke = async (probeCwd: string, args: string[]): Promise<GitInvokeResult> => {
357
+ if (options.abortSignal?.aborted) {
358
+ throw options.abortSignal.reason instanceof Error
359
+ ? options.abortSignal.reason
360
+ : abortError("git context resolution aborted");
361
+ }
362
+ const remainingMs =
363
+ options.deadlineMs === undefined ? DEFAULT_GIT_TIMEOUT_MS : options.deadlineMs - now();
364
+ if (remainingMs <= 0) throw abortError("git context resolution deadline exceeded");
365
+ return invoker(probeCwd, args, {
366
+ abortSignal: options.abortSignal,
367
+ timeoutMs: Math.min(DEFAULT_GIT_TIMEOUT_MS, remainingMs),
368
+ });
369
+ };
275
370
 
276
371
  // 1. Locate the repo root.
277
- const topLevel = invoker(expanded, ["rev-parse", "--show-toplevel"]);
372
+ const topLevel = await invoke(expanded, ["rev-parse", "--show-toplevel"]);
278
373
  if (topLevel.exitCode !== 0) return null;
279
374
  const rootPath = topLevel.stdout.trim();
280
375
  if (!rootPath) return null;
@@ -284,13 +379,13 @@ export async function resolveGitContext(
284
379
  // HEAD ref is unborn and `--abbrev-ref HEAD` fails, but
285
380
  // `symbolic-ref HEAD` still returns the target branch. Fall back
286
381
  // so newly-initialized repos get a sensible branch name.
287
- const branchResult = invoker(rootPath, ["rev-parse", "--abbrev-ref", "HEAD"]);
382
+ const branchResult = await invoke(rootPath, ["rev-parse", "--abbrev-ref", "HEAD"]);
288
383
  let branch: string | null = null;
289
384
  if (branchResult.exitCode === 0) {
290
385
  const raw = branchResult.stdout.trim();
291
386
  branch = raw && raw !== "HEAD" ? raw : null;
292
387
  } else {
293
- const unbornRef = invoker(rootPath, ["symbolic-ref", "--quiet", "HEAD"]);
388
+ const unbornRef = await invoke(rootPath, ["symbolic-ref", "--quiet", "HEAD"]);
294
389
  if (unbornRef.exitCode === 0) {
295
390
  const raw = unbornRef.stdout.trim();
296
391
  const prefix = "refs/heads/";
@@ -302,7 +397,7 @@ export async function resolveGitContext(
302
397
  }
303
398
 
304
399
  // 3. Origin URL — optional. Used to derive a stable `projectId`.
305
- const originResult = invoker(rootPath, ["remote", "get-url", "origin"]);
400
+ const originResult = await invoke(rootPath, ["remote", "get-url", "origin"]);
306
401
  let projectId: string;
307
402
  if (originResult.exitCode === 0) {
308
403
  const normalized = normalizeOriginUrl(originResult.stdout);
@@ -312,7 +407,7 @@ export async function resolveGitContext(
312
407
  }
313
408
 
314
409
  // 4. Default branch — best effort.
315
- const headRef = invoker(rootPath, ["symbolic-ref", "--quiet", "refs/remotes/origin/HEAD"]);
410
+ const headRef = await invoke(rootPath, ["symbolic-ref", "--quiet", "refs/remotes/origin/HEAD"]);
316
411
  let defaultBranch: string | null = null;
317
412
  if (headRef.exitCode === 0) {
318
413
  const raw = headRef.stdout.trim();
@@ -330,7 +425,14 @@ export async function resolveGitContext(
330
425
  defaultBranch,
331
426
  };
332
427
  } catch {
333
- // Never throws — any unexpected error falls back to "not in a repo".
428
+ if (options.abortSignal?.aborted) {
429
+ throw options.abortSignal.reason instanceof Error
430
+ ? options.abortSignal.reason
431
+ : abortError("git context resolution aborted");
432
+ }
433
+ if (options.deadlineMs !== undefined && (options.now ?? Date.now)() >= options.deadlineMs) {
434
+ throw abortError("git context resolution deadline exceeded");
435
+ }
334
436
  return null;
335
437
  }
336
438
  }
@@ -533,6 +533,30 @@ test("parseConfig initGateTimeoutMs defaults to OpenClaw cold-start budget", ()
533
533
  assert.equal(result.initGateTimeoutMs, 30_000);
534
534
  });
535
535
 
536
+ test("parseConfig keeps external wiki merge out of default recall", () => {
537
+ assert.equal(parseConfig({}).wikiMergeIntoRecall, false);
538
+ assert.equal(parseConfig({ wikiMergeIntoRecall: false }).wikiMergeIntoRecall, false);
539
+ assert.throws(
540
+ () => parseConfig({ wikiMergeIntoRecall: true }),
541
+ /wikiMergeIntoRecall=true is not supported/,
542
+ );
543
+ assert.throws(
544
+ () => parseConfig({ wikiMergeIntoRecall: "maybe" }),
545
+ /wikiMergeIntoRecall must be a boolean-like value/,
546
+ );
547
+ });
548
+
549
+ test("parseConfig rejects external wiki collections as default memory collections", () => {
550
+ assert.throws(
551
+ () => parseConfig({ qmdCollection: "external-wiki-reading" }),
552
+ /qmdCollection must be a memory collection/,
553
+ );
554
+ assert.throws(
555
+ () => parseConfig({ qmdColdCollection: "external-wiki-archive" }),
556
+ /qmdColdCollection must be a memory collection/,
557
+ );
558
+ });
559
+
536
560
  test("parseConfig qmdSearchStrategy defaults to hybrid and validates the enum", () => {
537
561
  // Default must equal the historical lex+vec+hyde behavior. Issue #1335.
538
562
  assert.equal(parseConfig({}).qmdSearchStrategy, "hybrid");
package/src/config.ts CHANGED
@@ -27,6 +27,7 @@ import type {
27
27
  TrustWeights,
28
28
  } from "./types.js";
29
29
  import { parseConvergeConfig } from "./converge-config.js";
30
+ import { parseExternalWikiRecallGuard } from "./external-wiki-guard.js";
30
31
  import { log } from "./logger.js";
31
32
  import { cloneDefaultSessionObserverBands } from "./session-observer-bands.js";
32
33
  import { readEnvVar, resolveHomeDir } from "./runtime/env.js";
@@ -62,6 +63,7 @@ import { parseCodingKnowledgeConfig } from "./coding/coding-knowledge-config.js"
62
63
  import { parseChatConfig } from "./chat/chat-config.js";
63
64
  import { parseCorrectionIntentConfig, parseFaithfulnessGateConfig } from "./faithfulness-config.js";
64
65
  import { parseOfflineSyncExcludes } from "./offline-sync.js";
66
+ import { parseExternalWikiRoots } from "./external-wiki-config.js";
65
67
  import {
66
68
  parseScopeProfiles,
67
69
  parseScopeTeams,
@@ -1558,6 +1560,9 @@ export function parseConfig(
1558
1560
  "maintenance.namespaceLockStaleMs",
1559
1561
  );
1560
1562
 
1563
+ const { wikiMergeIntoRecall, qmdCollection, qmdColdCollection } =
1564
+ parseExternalWikiRecallGuard(cfg);
1565
+
1561
1566
  return {
1562
1567
  openaiApiKey: apiKey,
1563
1568
  openaiBaseUrl: baseUrl,
@@ -1608,13 +1613,8 @@ export function parseConfig(
1608
1613
  typeof cfg.maxMemoryTokens === "number" ? cfg.maxMemoryTokens : 2000,
1609
1614
  memoryOsPreset,
1610
1615
  qmdEnabled: cfg.qmdEnabled !== false,
1611
- qmdCollection:
1612
- typeof cfg.qmdCollection === "string"
1613
- ? cfg.qmdCollection
1614
- // TODO(#403): Keep legacy collection name for backwards compat so existing
1615
- // installs don't lose their QMD vector store data on upgrade. New installs
1616
- // can override via qmdCollection config. Consider migrating in a future PR.
1617
- : "openclaw-engram",
1616
+ qmdCollection,
1617
+ wikiMergeIntoRecall,
1618
1618
  qmdMaxResults:
1619
1619
  typeof cfg.qmdMaxResults === "number" ? cfg.qmdMaxResults : 8,
1620
1620
  qmdEmbeddingBacklogThreshold: (() => {
@@ -1627,11 +1627,7 @@ export function parseConfig(
1627
1627
  return Number.isFinite(n) && Number.isInteger(n) && n >= 0 ? n : 1000;
1628
1628
  })(),
1629
1629
  qmdColdTierEnabled: cfg.qmdColdTierEnabled === true,
1630
- qmdColdCollection:
1631
- typeof cfg.qmdColdCollection === "string" && cfg.qmdColdCollection.length > 0
1632
- ? cfg.qmdColdCollection
1633
- // TODO(#403): Keep legacy collection name for backwards compat.
1634
- : "openclaw-engram-cold",
1630
+ qmdColdCollection,
1635
1631
  qmdColdMaxResults:
1636
1632
  typeof cfg.qmdColdMaxResults === "number" ? cfg.qmdColdMaxResults : 8,
1637
1633
  // Issue #678 PR 2/4: gate hot/cold tier migration (a deep-sleep activity)
@@ -1705,6 +1701,7 @@ export function parseConfig(
1705
1701
  ? cfg.qmdPath
1706
1702
  : undefined,
1707
1703
  memoryDir,
1704
+ externalWikis: parseExternalWikiRoots(cfg.externalWikis, memoryDir),
1708
1705
  debug: cfg.debug === true,
1709
1706
  identityEnabled: cfg.identityEnabled !== false,
1710
1707
  identityContinuityEnabled,
@@ -16,9 +16,11 @@ import path from "node:path";
16
16
  import test from "node:test";
17
17
 
18
18
  import { EngramMcpServer } from "./access-mcp.js";
19
+ import { getOperation } from "./access-boundary.js";
19
20
  import { memoryStoreOperation } from "./access-operations.js";
20
21
  import type {
21
22
  EngramAccessMemoryStoreRequest,
23
+ EngramAccessRecallRequest,
22
24
  EngramAccessService,
23
25
  EngramAccessWriteResponse,
24
26
  } from "./access-service.js";
@@ -117,6 +119,26 @@ test("memory_store via MCP with no sourceConnector (operator) → service receiv
117
119
  );
118
120
  });
119
121
 
122
+ test("recall operation forwards only the server-resolved connector", async () => {
123
+ const captured: EngramAccessRecallRequest[] = [];
124
+ const service = {
125
+ recall: (request: EngramAccessRecallRequest) => {
126
+ captured.push(request);
127
+ return Promise.resolve({});
128
+ },
129
+ } as unknown as EngramAccessService;
130
+ const recallOperation = getOperation("recall");
131
+ assert.ok(recallOperation);
132
+
133
+ await recallOperation.run(
134
+ { query: "shared namespace query", sourceConnector: "spoofed-client" },
135
+ { service, sourceConnector: "chatgpt" },
136
+ );
137
+
138
+ assert.equal(captured.length, 1);
139
+ assert.equal(captured[0]?.sourceConnector, "chatgpt");
140
+ });
141
+
120
142
  // ---------------------------------------------------------------------------
121
143
  // Test 4: client-supplied sourceConnector in args is IGNORED
122
144
  // ---------------------------------------------------------------------------
@@ -217,3 +239,82 @@ test("StorageManager.writeMemory without sourceConnector → frontmatter omits i
217
239
  await rm(baseDir, { recursive: true, force: true });
218
240
  }
219
241
  });
242
+
243
+ test("StorageManager classifies connector-attributed tool memories at write time", async () => {
244
+ StorageManager.clearAllStaticCaches();
245
+ const baseDir = await mkdtemp(path.join(os.tmpdir(), "prov-tool-scope-"));
246
+ try {
247
+ const storage = new StorageManager(baseDir);
248
+ await storage.ensureDirectories();
249
+
250
+ const { id } = await storage.writeMemory(
251
+ "fact",
252
+ "Use the search tool with a path argument.",
253
+ { sourceConnector: "chatgpt" },
254
+ );
255
+
256
+ assert.equal((await storage.getMemoryById(id))?.frontmatter.toolScoped, true);
257
+ } finally {
258
+ StorageManager.clearAllStaticCaches();
259
+ await rm(baseDir, { recursive: true, force: true });
260
+ }
261
+ });
262
+
263
+ test("StorageManager leaves unattributed tool-like memories unpartitioned", async () => {
264
+ StorageManager.clearAllStaticCaches();
265
+ const baseDir = await mkdtemp(path.join(os.tmpdir(), "prov-tool-scope-"));
266
+ try {
267
+ const storage = new StorageManager(baseDir);
268
+ await storage.ensureDirectories();
269
+
270
+ const { id } = await storage.writeMemory(
271
+ "fact",
272
+ "Use the search tool with a path argument.",
273
+ );
274
+
275
+ assert.equal((await storage.getMemoryById(id))?.frontmatter.toolScoped, undefined);
276
+ } finally {
277
+ StorageManager.clearAllStaticCaches();
278
+ await rm(baseDir, { recursive: true, force: true });
279
+ }
280
+ });
281
+
282
+ test("StorageManager preserves an explicit structured tool classification", async () => {
283
+ StorageManager.clearAllStaticCaches();
284
+ const baseDir = await mkdtemp(path.join(os.tmpdir(), "prov-tool-scope-"));
285
+ try {
286
+ const storage = new StorageManager(baseDir);
287
+ await storage.ensureDirectories();
288
+
289
+ const { id } = await storage.writeMemory(
290
+ "procedure",
291
+ "Workflow for locating an implementation",
292
+ { sourceConnector: "chatgpt", toolScoped: true },
293
+ );
294
+
295
+ assert.equal((await storage.getMemoryById(id))?.frontmatter.toolScoped, true);
296
+ } finally {
297
+ StorageManager.clearAllStaticCaches();
298
+ await rm(baseDir, { recursive: true, force: true });
299
+ }
300
+ });
301
+ test("StorageManager preserves connector partition metadata on artifacts", async () => {
302
+ StorageManager.clearAllStaticCaches();
303
+ const baseDir = await mkdtemp(path.join(os.tmpdir(), "prov-artifact-tool-scope-"));
304
+ try {
305
+ const storage = new StorageManager(baseDir);
306
+ await storage.ensureDirectories();
307
+ const id = await storage.writeArtifact("Use the search tool with a path argument.", {
308
+ sourceConnector: "chatgpt",
309
+ toolScoped: true,
310
+ });
311
+ const artifact = (await storage.searchArtifacts("search tool", 10)).find(
312
+ (candidate) => candidate.frontmatter.id === id,
313
+ );
314
+ assert.equal(artifact?.frontmatter.sourceConnector, "chatgpt");
315
+ assert.equal(artifact?.frontmatter.toolScoped, true);
316
+ } finally {
317
+ StorageManager.clearAllStaticCaches();
318
+ await rm(baseDir, { recursive: true, force: true });
319
+ }
320
+ });
@@ -27,6 +27,7 @@ import type { StorageManager } from "./storage.js";
27
27
  import type { VersioningConfig } from "./page-versioning.js";
28
28
  import { bumpMemoryCorpusVersionForDir } from "./memory-corpus-version.js";
29
29
  import { requestEntityCanonicalIdReconcile } from "./storage/entity-canonical-id-references.js";
30
+ import { withRawEntityPageMutation } from "./storage/entity-canonical-id-lock.js";
30
31
  import { getVersion } from "./page-versioning.js";
31
32
 
32
33
  /**
@@ -643,6 +644,7 @@ export async function runConsolidationUndo(options: {
643
644
  }
644
645
  try {
645
646
  await mkdir(path.dirname(p.sourcePath), { recursive: true });
647
+ await withRawEntityPageMutation(memoryDir, p.sourcePath, async () => {
646
648
  // Use exclusive create (wx / O_EXCL) so that if another process
647
649
  // recreates the source file between planning and execution, this
648
650
  // write fails with EEXIST instead of silently overwriting the new
@@ -658,6 +660,7 @@ export async function runConsolidationUndo(options: {
658
660
  // Restored bytes predate the current migration journal and can carry
659
661
  // legacy entity references (issue #2213) — request one reconcile pass.
660
662
  await requestEntityCanonicalIdReconcile(path.join(memoryDir, "state"));
663
+ });
661
664
  result.restores.push({
662
665
  entry: p.entry,
663
666
  sourcePath: p.sourcePath,
@@ -9,12 +9,24 @@ type ConvergenceStorage = NonNullable<RebuildMemoryProjectionOptions["storage"]>
9
9
  export async function refreshConvergedNamespaces(
10
10
  namespaces: readonly string[],
11
11
  namespaceSearchRouter: Pick<NamespaceSearchRouter, "updateNamespacesDetailed">,
12
- getStorage: (namespace: string) => Promise<ConvergenceStorage>
12
+ getStorage: (namespace: string) => Promise<ConvergenceStorage>,
13
+ searchEnabled: boolean,
13
14
  ): Promise<void> {
14
15
  const targetNamespaces = Array.from(new Set(namespaces.map((namespace) => namespace.trim()).filter(Boolean)));
15
16
  if (targetNamespaces.length === 0) return;
16
17
 
17
- await namespaceSearchRouter.updateNamespacesDetailed(targetNamespaces, undefined, { strict: true });
18
+ const searchResult = await namespaceSearchRouter.updateNamespacesDetailed(
19
+ targetNamespaces,
20
+ undefined,
21
+ { strict: true },
22
+ );
23
+ if (searchEnabled) {
24
+ const eligible = new Set(searchResult.eligibleNamespaces);
25
+ const skipped = targetNamespaces.filter((namespace) => !eligible.has(namespace));
26
+ if (skipped.length > 0) {
27
+ throw new Error(`search refresh skipped namespaces: ${skipped.join(", ")}`);
28
+ }
29
+ }
18
30
 
19
31
  for (const namespace of targetNamespaces) {
20
32
  const storage = await getStorage(namespace);
@@ -25,7 +25,8 @@ import { throwIfAborted } from "../abort-error.js";
25
25
  import { composeMemoryEnvelope, isMemoryCategory } from "../write-envelope.js";
26
26
  import { log } from "../logger.js";
27
27
  import { createHash } from "node:crypto";
28
- import { mkdir, writeFile } from "node:fs/promises";
28
+ import { REDACTION_RULES_SUBDIR } from "../extraction-redaction-rules.js";
29
+ import { writeFileAtomically } from "../maintenance/atomic-file.js";
29
30
  import type { Orchestrator } from "../orchestrator.js";
30
31
  import type { MemoryFile, MemoryStatus, PluginConfig } from "../types.js";
31
32
  import { stripAttributesSuffix } from "../structured-attributes.js";
@@ -568,6 +569,7 @@ async function rescopeMemoryFn(
568
569
  ...(fm.entityRef ? { entityRef: fm.entityRef } : {}),
569
570
  ...(fm.structuredAttributes ? { structuredAttributes: fm.structuredAttributes } : {}),
570
571
  ...(fm.valid_at ? { validAt: fm.valid_at } : {}),
572
+ ...(fm.sourceConnector ? { sourceConnector: fm.sourceConnector } : {}),
571
573
  },
572
574
  { source: `correction:rescope:${namespace}` },
573
575
  { salvage: true },
@@ -581,6 +583,7 @@ async function rescopeMemoryFn(
581
583
  ...(fm.memoryKind ? { memoryKind: fm.memoryKind } : {}),
582
584
  ...(Array.isArray(fm.links) ? { links: fm.links } : {}),
583
585
  ...(fm.intentGoal ? { intentGoal: fm.intentGoal } : {}),
586
+ ...(fm.toolScoped ? { toolScoped: true as const } : {}),
584
587
  });
585
588
  if (destBlocked) {
586
589
  // #1645: destination tombstone-blocked the rescope (pending_review). Don't
@@ -703,14 +706,14 @@ async function registerRedactionRuleFn(
703
706
  namespace: string,
704
707
  pattern: string,
705
708
  abortSignal?: AbortSignal,
709
+ writeRule: (outputPath: string, content: string) => Promise<unknown> = writeFileAtomically,
706
710
  ): Promise<void> {
707
711
  // Persist the redaction rule under state/ so extraction consults it the
708
712
  // same way tombstones are consulted (route through the same chokepoint).
709
713
  throwIfAborted(abortSignal, "correction apply aborted");
710
714
  const storage = await wiring.orchestrator.getStorage(namespace);
711
715
  throwIfAborted(abortSignal, "correction apply aborted");
712
- const dir = path.join(storage.dir, "state", "corrections", "redaction-rules");
713
- await mkdir(dir, { recursive: true });
716
+ const dir = path.join(storage.dir, REDACTION_RULES_SUBDIR);
714
717
  throwIfAborted(abortSignal, "correction apply aborted");
715
718
  // Idempotent: filename is a slug + short hash of the full pattern so
716
719
  // re-registering the same pattern overwrites rather than duplicates, while
@@ -721,12 +724,10 @@ async function registerRedactionRuleFn(
721
724
  const patternHash = createHash("sha256").update(pattern).digest("hex").slice(0, 16);
722
725
  const slug = `${slugBase}-${patternHash}`;
723
726
  throwIfAborted(abortSignal, "correction apply aborted");
724
- await writeFile(
727
+ await writeRule(
725
728
  path.join(dir, `${slug}.json`),
726
729
  `${JSON.stringify({ pattern, namespace, createdAt: new Date().toISOString() })}\n`,
727
- "utf-8",
728
730
  );
729
- throwIfAborted(abortSignal, "correction apply aborted");
730
731
  }
731
732
 
732
733
  async function appendAuditRecordFn(
@@ -761,7 +762,6 @@ async function appendAuditRecordFn(
761
762
  ),
762
763
  {},
763
764
  );
764
- throwIfAborted(abortSignal, "correction apply aborted");
765
765
  return id;
766
766
  }
767
767
 
@@ -1081,6 +1081,8 @@ export {
1081
1081
  isEligibleCorrectionCandidate,
1082
1082
  applyEditMemory,
1083
1083
  appendTombstoneFn,
1084
+ appendAuditRecordFn,
1085
+ registerRedactionRuleFn,
1084
1086
  retireMemoryFn,
1085
1087
  rescopeMemoryFn,
1086
1088
  writeReplacementMemory,