@remnic/core 9.45.2 → 9.45.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (749) hide show
  1. package/dist/abort-error.d.ts +2 -1
  2. package/dist/abort-error.js +3 -1
  3. package/dist/access-admin-ops-surface.d.ts +14 -10
  4. package/dist/access-admin-ops-surface.js +84 -76
  5. package/dist/access-audit.js +2 -2
  6. package/dist/access-authorization-probe.d.ts +14 -10
  7. package/dist/access-authorization-probe.js +85 -77
  8. package/dist/access-boundary.d.ts +15 -11
  9. package/dist/access-boundary.js +84 -76
  10. package/dist/access-citation-namespace.js +2 -2
  11. package/dist/access-cli.js +193 -181
  12. package/dist/access-cli.js.map +1 -1
  13. package/dist/access-coding-context-resolution.d.ts +16 -0
  14. package/dist/access-coding-context-resolution.js +13 -0
  15. package/dist/access-coding-context-resolution.js.map +1 -0
  16. package/dist/access-extraction-force-flush.d.ts +14 -10
  17. package/dist/access-extraction-force-flush.js +84 -76
  18. package/dist/access-health-types.d.ts +2 -1
  19. package/dist/access-http-lcm-compaction.d.ts +16 -12
  20. package/dist/access-http-lcm-compaction.js +3 -3
  21. package/dist/access-http-lifecycle-flush.d.ts +14 -10
  22. package/dist/access-http-lifecycle-flush.js +2 -2
  23. package/dist/access-http-offline-stream.d.ts +123 -0
  24. package/dist/access-http-offline-stream.js +10 -0
  25. package/dist/access-http-offline-stream.js.map +1 -0
  26. package/dist/access-http-query.js +84 -76
  27. package/dist/access-http.d.ts +15 -10
  28. package/dist/access-http.js +105 -92
  29. package/dist/access-identity-continuity-surface.d.ts +9 -8
  30. package/dist/access-identity-continuity-surface.js +84 -76
  31. package/dist/access-lcm-surface.d.ts +14 -10
  32. package/dist/access-lcm-surface.js +84 -76
  33. package/dist/access-mcp-output-schemas.js +1 -1
  34. package/dist/access-mcp.d.ts +14 -10
  35. package/dist/access-mcp.js +95 -83
  36. package/dist/access-memory-search-fanout.d.ts +3 -2
  37. package/dist/{access-namespace-preflight-5yZ4g6F8.d.ts → access-namespace-preflight-CWUDwB4M.d.ts} +1 -1
  38. package/dist/access-namespace-preflight.d.ts +4 -3
  39. package/dist/access-namespace-preflight.js +84 -76
  40. package/dist/access-observe-helpers.d.ts +1 -0
  41. package/dist/access-observe-helpers.js +1 -1
  42. package/dist/access-observe-write-surface.d.ts +16 -10
  43. package/dist/access-observe-write-surface.js +84 -76
  44. package/dist/access-offline-manifest.d.ts +104 -0
  45. package/dist/access-offline-manifest.js +45 -0
  46. package/dist/access-offline-manifest.js.map +1 -0
  47. package/dist/access-operations-batch.js +86 -78
  48. package/dist/access-operations.d.ts +18 -14
  49. package/dist/access-operations.js +91 -80
  50. package/dist/access-recall-concurrency.d.ts +16 -26
  51. package/dist/access-recall-concurrency.js +86 -77
  52. package/dist/access-recall-response.d.ts +18 -14
  53. package/dist/access-recall-response.js +84 -76
  54. package/dist/access-recall-surface.d.ts +29 -24
  55. package/dist/access-recall-surface.js +84 -76
  56. package/dist/access-schema.d.ts +84 -84
  57. package/dist/access-schema.js +3 -3
  58. package/dist/{access-service-CiJRsgAB.d.ts → access-service-CsU-ljFD.d.ts} +25 -16
  59. package/dist/access-service-helpers.d.ts +14 -10
  60. package/dist/access-service.d.ts +14 -10
  61. package/dist/access-service.js +84 -76
  62. package/dist/access-surface-catalog.d.ts +14 -10
  63. package/dist/access-surface-catalog.js +4 -0
  64. package/dist/access-surface-catalog.js.map +1 -1
  65. package/dist/access-wearables-meetings-surface.d.ts +4 -3
  66. package/dist/action-confidence.d.ts +2 -1
  67. package/dist/active-memory-bridge.d.ts +2 -1
  68. package/dist/active-recall.d.ts +2 -1
  69. package/dist/active-recall.js +10 -8
  70. package/dist/active-recall.js.map +1 -1
  71. package/dist/adapters/index.js +7 -7
  72. package/dist/adapters/registry.js +3 -3
  73. package/dist/{auto-sync-5OE5QOZB.js → auto-sync-UPTUVE4X.js} +6 -6
  74. package/dist/behavior-learner.d.ts +2 -1
  75. package/dist/behavior-learner.js +1 -1
  76. package/dist/behavior-signals.d.ts +2 -1
  77. package/dist/bootstrap.d.ts +9 -8
  78. package/dist/briefing.d.ts +3 -2
  79. package/dist/briefing.js +23 -22
  80. package/dist/buffer-surprise-report.d.ts +2 -1
  81. package/dist/buffer-turn-helpers.d.ts +2 -1
  82. package/dist/buffer.d.ts +3 -2
  83. package/dist/buffer.js +12 -11
  84. package/dist/bulk-import/index.d.ts +4 -3
  85. package/dist/calibration.d.ts +2 -1
  86. package/dist/capabilities.d.ts +2 -1
  87. package/dist/{capsule-merge-IDWJPCWK.js → capsule-merge-Q6AR3XL7.js} +67 -54
  88. package/dist/capsule-merge-Q6AR3XL7.js.map +1 -0
  89. package/dist/{catalog-scBmy0sO.d.ts → catalog-bctMURhN.d.ts} +1 -1
  90. package/dist/causal-behavior.d.ts +2 -1
  91. package/dist/causal-behavior.js +2 -2
  92. package/dist/causal-chain.js +2 -2
  93. package/dist/causal-consolidation.d.ts +2 -1
  94. package/dist/causal-consolidation.js +27 -26
  95. package/dist/causal-consolidation.js.map +1 -1
  96. package/dist/causal-retrieval.js +2 -2
  97. package/dist/causal-trajectory-graph.d.ts +2 -1
  98. package/dist/causal-trajectory.js +1 -1
  99. package/dist/{chunk-VUPTKTDV.js → chunk-2MRHJNWL.js} +3 -3
  100. package/dist/{chunk-JBPKEARU.js → chunk-2QSZNTDO.js} +7 -7
  101. package/dist/{chunk-5IVLTFOV.js → chunk-44N6ESJ4.js} +2 -2
  102. package/dist/{chunk-WOCNN776.js → chunk-4POAMKV6.js} +100 -41
  103. package/dist/chunk-4POAMKV6.js.map +1 -0
  104. package/dist/{chunk-HO3QBJEY.js → chunk-5546W5SI.js} +2 -2
  105. package/dist/{chunk-U7GW7NE7.js → chunk-5CEECY6P.js} +10 -10
  106. package/dist/{chunk-4UH4BTGK.js → chunk-5SNZSWWR.js} +82 -82
  107. package/dist/{chunk-6CZPDBJS.js → chunk-5U7ID3EZ.js} +3 -3
  108. package/dist/{chunk-GF22HWS2.js → chunk-6NNNURLK.js} +7 -7
  109. package/dist/chunk-773TRRGT.js +36 -0
  110. package/dist/chunk-773TRRGT.js.map +1 -0
  111. package/dist/chunk-7CITSYSH.js +242 -0
  112. package/dist/chunk-7CITSYSH.js.map +1 -0
  113. package/dist/{chunk-227UFSEQ.js → chunk-7RZJWZ46.js} +5 -5
  114. package/dist/{chunk-E5UK4VPE.js → chunk-7SHJHPTY.js} +5 -5
  115. package/dist/{chunk-UVIKWC7M.js → chunk-7YERSTN7.js} +17 -17
  116. package/dist/{chunk-DLVPUX7U.js → chunk-7YKVM5H3.js} +8 -6
  117. package/dist/chunk-7YKVM5H3.js.map +1 -0
  118. package/dist/{chunk-3CE77VAP.js → chunk-A4JMGKCD.js} +87 -74
  119. package/dist/chunk-A4JMGKCD.js.map +1 -0
  120. package/dist/chunk-A5KNZSNA.js +26 -0
  121. package/dist/chunk-A5KNZSNA.js.map +1 -0
  122. package/dist/{chunk-S2NCTZGJ.js → chunk-AJQ57VV3.js} +15 -15
  123. package/dist/chunk-AJQ57VV3.js.map +1 -0
  124. package/dist/{chunk-CUM2BBPN.js → chunk-AUMWZSE7.js} +19 -10
  125. package/dist/chunk-AUMWZSE7.js.map +1 -0
  126. package/dist/{chunk-XYTOI63Z.js → chunk-BGHFOD5A.js} +19 -11
  127. package/dist/chunk-BGHFOD5A.js.map +1 -0
  128. package/dist/{chunk-BUE5E2HL.js → chunk-BGLY7EEM.js} +5 -314
  129. package/dist/chunk-BGLY7EEM.js.map +1 -0
  130. package/dist/chunk-BIPBQQFI.js +44 -0
  131. package/dist/chunk-BIPBQQFI.js.map +1 -0
  132. package/dist/{chunk-S5SLVSVY.js → chunk-BQIFZ2MP.js} +5 -5
  133. package/dist/chunk-BTTPKDIL.js +34 -0
  134. package/dist/{chunk-PVGDJXVK.js.map → chunk-BTTPKDIL.js.map} +1 -1
  135. package/dist/{chunk-E53DSZEN.js → chunk-C26TE27X.js} +3 -3
  136. package/dist/{chunk-LZ4LDKHZ.js → chunk-CLB32OHM.js} +6 -6
  137. package/dist/{chunk-Q6IP2ARR.js → chunk-CSOYVTRX.js} +2 -2
  138. package/dist/{chunk-XOQSEF7X.js → chunk-CVILPI77.js} +6 -6
  139. package/dist/chunk-D3I2MCN7.js +29 -0
  140. package/dist/chunk-D3I2MCN7.js.map +1 -0
  141. package/dist/{chunk-A5OJCXZL.js → chunk-DSUAAZZX.js} +15 -4
  142. package/dist/chunk-DSUAAZZX.js.map +1 -0
  143. package/dist/{chunk-HREE4JHI.js → chunk-DYVMXPCF.js} +486 -287
  144. package/dist/chunk-DYVMXPCF.js.map +1 -0
  145. package/dist/{chunk-J7VGGECD.js → chunk-DZPFMQZ7.js} +1 -1
  146. package/dist/chunk-DZPFMQZ7.js.map +1 -0
  147. package/dist/{chunk-PDLBLTOK.js → chunk-EITZHSX6.js} +9 -9
  148. package/dist/{chunk-D3J5SLQK.js → chunk-EJHEWCGQ.js} +81 -20
  149. package/dist/chunk-EJHEWCGQ.js.map +1 -0
  150. package/dist/{chunk-WUNIWKY4.js → chunk-ELIL2A37.js} +6 -6
  151. package/dist/{chunk-E6PNLPGJ.js → chunk-FZP32336.js} +806 -470
  152. package/dist/chunk-FZP32336.js.map +1 -0
  153. package/dist/{chunk-4L6HUREQ.js → chunk-G7A5HLUS.js} +23 -17
  154. package/dist/chunk-G7A5HLUS.js.map +1 -0
  155. package/dist/{chunk-CINZGPSJ.js → chunk-GUMZC2BO.js} +2 -2
  156. package/dist/{chunk-H24WNPA2.js → chunk-GWFSVJ4P.js} +3 -3
  157. package/dist/{chunk-7XC2HX75.js → chunk-GYPQL6XN.js} +157 -16
  158. package/dist/chunk-GYPQL6XN.js.map +1 -0
  159. package/dist/{chunk-TSH56VPU.js → chunk-HAYSYUAB.js} +2 -2
  160. package/dist/{chunk-TDHTVMPG.js → chunk-HFPASSFV.js} +7 -2
  161. package/dist/chunk-HFPASSFV.js.map +1 -0
  162. package/dist/chunk-J2WC5LF4.js +395 -0
  163. package/dist/chunk-J2WC5LF4.js.map +1 -0
  164. package/dist/{chunk-PKNLM44P.js → chunk-JH6BPLOP.js} +9 -9
  165. package/dist/{chunk-KXB4VXHY.js → chunk-JIYDRBVZ.js} +2 -2
  166. package/dist/chunk-JV3C2MNQ.js +74 -0
  167. package/dist/chunk-JV3C2MNQ.js.map +1 -0
  168. package/dist/{chunk-AV5ZEH4M.js → chunk-KVJRXN2E.js} +2 -2
  169. package/dist/{chunk-JVLCVFQ4.js → chunk-KXEFRMCF.js} +3 -3
  170. package/dist/{chunk-WFTIGIIS.js → chunk-L6CQ7WIW.js} +5 -5
  171. package/dist/{chunk-EJUEXZHX.js → chunk-LLJMAULE.js} +2 -2
  172. package/dist/{chunk-N5Z4EVOR.js → chunk-LNEWDF2A.js} +36 -11
  173. package/dist/chunk-LNEWDF2A.js.map +1 -0
  174. package/dist/{chunk-AS7YMSL6.js → chunk-M23RF3LJ.js} +4 -4
  175. package/dist/{chunk-UYLMNVY6.js → chunk-MDISBSYA.js} +16 -9
  176. package/dist/chunk-MDISBSYA.js.map +1 -0
  177. package/dist/{chunk-3F2LKUMU.js → chunk-NIS256NW.js} +2 -2
  178. package/dist/{chunk-YIAA2X3D.js → chunk-NK5RGJ65.js} +3 -3
  179. package/dist/chunk-NLDVVWCL.js +84 -0
  180. package/dist/chunk-NLDVVWCL.js.map +1 -0
  181. package/dist/{chunk-OQ5PRDDS.js → chunk-NTOIP2E6.js} +6 -6
  182. package/dist/{chunk-HLPD7B7P.js → chunk-NUEQKLNB.js} +2 -2
  183. package/dist/{chunk-4J7G5SY4.js → chunk-NZBZ7IS2.js} +72 -24
  184. package/dist/chunk-NZBZ7IS2.js.map +1 -0
  185. package/dist/{chunk-3TBLDMJA.js → chunk-O4KMGRXE.js} +5 -2
  186. package/dist/chunk-O4KMGRXE.js.map +1 -0
  187. package/dist/{chunk-33PLLLL7.js → chunk-P7NGM24P.js} +6 -6
  188. package/dist/{chunk-7TWUCYER.js → chunk-PNRA7FAD.js} +7 -7
  189. package/dist/{chunk-5I4M26Q7.js → chunk-QBSFOKY6.js} +4 -4
  190. package/dist/{chunk-QJAQNXWI.js → chunk-QCECHYZL.js} +76 -79
  191. package/dist/chunk-QCECHYZL.js.map +1 -0
  192. package/dist/{chunk-P4DRWEYC.js → chunk-QVSBTCVP.js} +2 -2
  193. package/dist/{chunk-AAIUERNB.js → chunk-R5RFK3CB.js} +6 -6
  194. package/dist/{chunk-WDISJRMG.js → chunk-RMMVQQA6.js} +2 -2
  195. package/dist/{chunk-KWMXR7XS.js → chunk-S2V7RUCL.js} +8 -1
  196. package/dist/{chunk-KWMXR7XS.js.map → chunk-S2V7RUCL.js.map} +1 -1
  197. package/dist/{chunk-5SM35XZR.js → chunk-S5NZBKKQ.js} +2 -2
  198. package/dist/{chunk-VNA7W7QF.js → chunk-SVH57F5Z.js} +12 -4
  199. package/dist/chunk-SVH57F5Z.js.map +1 -0
  200. package/dist/{chunk-WIPEXG6R.js → chunk-SXIMQLGV.js} +2 -2
  201. package/dist/{chunk-RVLJEII5.js → chunk-SYUBB3WM.js} +256 -187
  202. package/dist/chunk-SYUBB3WM.js.map +1 -0
  203. package/dist/{chunk-OAEQLRCY.js → chunk-TN76AKO3.js} +5 -5
  204. package/dist/{chunk-QN25OCUF.js → chunk-TQ4GD737.js} +5 -5
  205. package/dist/{chunk-VCD4PSK2.js → chunk-TQZ4DVBC.js} +7 -4
  206. package/dist/chunk-TQZ4DVBC.js.map +1 -0
  207. package/dist/{chunk-7K5Q6COX.js → chunk-TVVEYCNW.js} +4 -4
  208. package/dist/{chunk-DNWXFTLD.js → chunk-TYISDI6B.js} +2 -2
  209. package/dist/{chunk-4LMA77JH.js → chunk-U2VLVBBH.js} +3 -3
  210. package/dist/{chunk-5ZE7QHTK.js → chunk-ULVR5KG7.js} +5 -5
  211. package/dist/{chunk-NVRYW264.js → chunk-UQWIKLQK.js} +18 -15
  212. package/dist/chunk-UQWIKLQK.js.map +1 -0
  213. package/dist/{chunk-YV32N67O.js → chunk-URS5GSM7.js} +1 -1
  214. package/dist/chunk-URS5GSM7.js.map +1 -0
  215. package/dist/{chunk-4B77XSG5.js → chunk-UV72DEZD.js} +5 -5
  216. package/dist/{chunk-S2BBISHU.js → chunk-VANZKHTN.js} +3 -3
  217. package/dist/chunk-VHFXP27N.js +250 -0
  218. package/dist/chunk-VHFXP27N.js.map +1 -0
  219. package/dist/{chunk-3Y224NYC.js → chunk-VYISFWVX.js} +2 -2
  220. package/dist/{chunk-TIHMZFIV.js → chunk-W3IC7QOY.js} +3 -3
  221. package/dist/{chunk-NRV4Y3PM.js → chunk-W4FBGYGK.js} +1 -1
  222. package/dist/{chunk-P2BM76KT.js → chunk-WAS4HV46.js} +174 -43
  223. package/dist/chunk-WAS4HV46.js.map +1 -0
  224. package/dist/{chunk-57QKLRBV.js → chunk-WB7JSQCP.js} +2 -1
  225. package/dist/chunk-WB7JSQCP.js.map +1 -0
  226. package/dist/chunk-WGP57SR3.js +68 -0
  227. package/dist/chunk-WGP57SR3.js.map +1 -0
  228. package/dist/{chunk-ECK75GDJ.js → chunk-WQIHRA5F.js} +43 -24
  229. package/dist/chunk-WQIHRA5F.js.map +1 -0
  230. package/dist/{chunk-MU7ZHSZE.js → chunk-WZFAPHIK.js} +2 -2
  231. package/dist/{chunk-T2TTP3KU.js → chunk-X4IDNPOS.js} +2 -2
  232. package/dist/{chunk-BLAKS3CP.js → chunk-XL3TATMJ.js} +3 -3
  233. package/dist/{chunk-W4XJFLAL.js → chunk-XPRJSHNI.js} +2 -2
  234. package/dist/{chunk-5TFP4CUL.js → chunk-XQ3HXAQH.js} +14 -11
  235. package/dist/chunk-XQ3HXAQH.js.map +1 -0
  236. package/dist/{chunk-VWAXN2BN.js → chunk-XSFHWBQO.js} +93 -31
  237. package/dist/chunk-XSFHWBQO.js.map +1 -0
  238. package/dist/{chunk-DL7ZD3JH.js → chunk-XTAUXTDO.js} +14 -9
  239. package/dist/chunk-XTAUXTDO.js.map +1 -0
  240. package/dist/{chunk-JE7EK33X.js → chunk-Y7HRYCNW.js} +2 -2
  241. package/dist/{chunk-E6EE5B67.js → chunk-YK6BDDHP.js} +4 -4
  242. package/dist/{chunk-ES36HTSC.js → chunk-YLHM5BQQ.js} +3 -3
  243. package/dist/{chunk-RN7DY3FC.js → chunk-YMAQDHQM.js} +31 -12
  244. package/dist/chunk-YMAQDHQM.js.map +1 -0
  245. package/dist/{chunk-ULARSG5Z.js → chunk-YN6ASZUG.js} +10 -8
  246. package/dist/{chunk-ULARSG5Z.js.map → chunk-YN6ASZUG.js.map} +1 -1
  247. package/dist/{chunk-IKKWIPYN.js → chunk-YYQAKIDJ.js} +37 -1
  248. package/dist/chunk-YYQAKIDJ.js.map +1 -0
  249. package/dist/{chunk-BJKPPZ6Z.js → chunk-ZFGZ6PZ2.js} +2 -2
  250. package/dist/{chunk-CJ2ZR7UA.js → chunk-ZI32MKDW.js} +267 -214
  251. package/dist/chunk-ZI32MKDW.js.map +1 -0
  252. package/dist/{chunk-64UDOIMI.js → chunk-ZLQ37WJX.js} +2 -2
  253. package/dist/chunk-ZMAYKGPN.js +351 -0
  254. package/dist/chunk-ZMAYKGPN.js.map +1 -0
  255. package/dist/{cli-BUGN3d6_.d.ts → cli-BBHDtG36.d.ts} +5 -5
  256. package/dist/cli.d.ts +16 -12
  257. package/dist/cli.js +138 -124
  258. package/dist/compounding/engine.d.ts +3 -2
  259. package/dist/compounding/engine.js +24 -23
  260. package/dist/compounding/preference-consolidator.d.ts +2 -1
  261. package/dist/compression-optimizer.d.ts +2 -1
  262. package/dist/config.d.ts +2 -1
  263. package/dist/config.js +10 -8
  264. package/dist/connectors/codex-materialize-runner.d.ts +2 -1
  265. package/dist/connectors/codex-materialize-runner.js +23 -22
  266. package/dist/connectors/codex-materialize.d.ts +2 -1
  267. package/dist/connectors/index.d.ts +2 -1
  268. package/dist/connectors/index.js +26 -25
  269. package/dist/consolidation-provenance-check.d.ts +3 -2
  270. package/dist/consolidation-provenance-check.js +4 -4
  271. package/dist/consolidation-undo.d.ts +3 -2
  272. package/dist/consolidation-undo.js +10 -7
  273. package/dist/consolidation-undo.js.map +1 -1
  274. package/dist/contradiction/index.d.ts +3 -2
  275. package/dist/converge-config.d.ts +2 -1
  276. package/dist/convergence-refresh.d.ts +4 -3
  277. package/dist/convergence-refresh.js +27 -26
  278. package/dist/conversation-index/backend.d.ts +2 -1
  279. package/dist/conversation-index/backend.js +2 -2
  280. package/dist/conversation-index/chunker.d.ts +2 -1
  281. package/dist/conversation-index/faiss-adapter.d.ts +2 -1
  282. package/dist/conversation-index/indexer.d.ts +2 -1
  283. package/dist/conversation-index/search.d.ts +2 -1
  284. package/dist/corpus-watermark.d.ts +2 -1
  285. package/dist/corpus-watermark.js +42 -41
  286. package/dist/day-summary.d.ts +2 -1
  287. package/dist/delinearize.d.ts +2 -1
  288. package/dist/direct-answer-wiring.d.ts +2 -1
  289. package/dist/direct-answer-wiring.js +2 -2
  290. package/dist/direct-answer.d.ts +2 -1
  291. package/dist/embedding-fallback.d.ts +2 -1
  292. package/dist/embedding-fallback.js +2 -2
  293. package/dist/enrichment/index.d.ts +2 -1
  294. package/dist/entity-retrieval-boundaries.js +1 -1
  295. package/dist/entity-retrieval.d.ts +3 -2
  296. package/dist/entity-retrieval.js +24 -23
  297. package/dist/entity-schema.d.ts +2 -1
  298. package/dist/explicit-capture.d.ts +9 -8
  299. package/dist/explicit-capture.js +11 -9
  300. package/dist/external-wiki-access.d.ts +127 -0
  301. package/dist/external-wiki-access.js +186 -0
  302. package/dist/external-wiki-access.js.map +1 -0
  303. package/dist/external-wiki-cli.d.ts +13 -0
  304. package/dist/external-wiki-cli.js +96 -0
  305. package/dist/external-wiki-cli.js.map +1 -0
  306. package/dist/external-wiki-collection-registration.d.ts +39 -0
  307. package/dist/external-wiki-collection-registration.js +79 -0
  308. package/dist/external-wiki-collection-registration.js.map +1 -0
  309. package/dist/external-wiki-collection.d.ts +50 -0
  310. package/dist/external-wiki-collection.js +387 -0
  311. package/dist/external-wiki-collection.js.map +1 -0
  312. package/dist/external-wiki-config.d.ts +13 -0
  313. package/dist/external-wiki-config.js +13 -0
  314. package/dist/external-wiki-config.js.map +1 -0
  315. package/dist/external-wiki-guard.d.ts +11 -0
  316. package/dist/external-wiki-guard.js +18 -0
  317. package/dist/external-wiki-guard.js.map +1 -0
  318. package/dist/external-wiki-mcp-tools.d.ts +123 -0
  319. package/dist/external-wiki-mcp-tools.js +8 -0
  320. package/dist/external-wiki-mcp-tools.js.map +1 -0
  321. package/dist/external-wiki-search.d.ts +42 -0
  322. package/dist/external-wiki-search.js +11 -0
  323. package/dist/external-wiki-search.js.map +1 -0
  324. package/dist/external-wiki.d.ts +43 -0
  325. package/dist/external-wiki.js +16 -0
  326. package/dist/external-wiki.js.map +1 -0
  327. package/dist/extraction-error-classification.d.ts +2 -1
  328. package/dist/extraction-faithfulness.d.ts +2 -1
  329. package/dist/extraction-judge-telemetry.d.ts +2 -1
  330. package/dist/extraction-judge-training.d.ts +2 -1
  331. package/dist/extraction-judge.d.ts +2 -1
  332. package/dist/extraction-liveness.d.ts +2 -1
  333. package/dist/extraction-source-grounding-helpers.d.ts +5 -3
  334. package/dist/extraction-source-grounding-helpers.js +1 -1
  335. package/dist/extraction-source-grounding-rules.d.ts +2 -1
  336. package/dist/extraction-source-grounding-rules.js +2 -2
  337. package/dist/extraction-source-grounding.d.ts +2 -1
  338. package/dist/extraction-source-grounding.js +5 -5
  339. package/dist/extraction.d.ts +2 -1
  340. package/dist/extraction.js +45 -43
  341. package/dist/fallback-llm.d.ts +2 -1
  342. package/dist/graph-dashboard-diff.d.ts +2 -1
  343. package/dist/graph-dashboard-key.d.ts +2 -1
  344. package/dist/graph-dashboard-parser.d.ts +2 -1
  345. package/dist/graph-edge-reinforcement.d.ts +2 -1
  346. package/dist/graph-snapshot.d.ts +2 -1
  347. package/dist/graph.d.ts +2 -1
  348. package/dist/harmonic-retrieval.js +2 -2
  349. package/dist/importance.d.ts +2 -1
  350. package/dist/importers/index.d.ts +2 -1
  351. package/dist/in-flight-reads.d.ts +2 -1
  352. package/dist/index.d.ts +732 -720
  353. package/dist/index.js +291 -259
  354. package/dist/intent.d.ts +2 -1
  355. package/dist/lcm/engine.d.ts +2 -1
  356. package/dist/lcm/engine.js +3 -3
  357. package/dist/lcm/index.d.ts +2 -1
  358. package/dist/lcm/index.js +8 -8
  359. package/dist/lcm/tools.d.ts +2 -1
  360. package/dist/lifecycle.d.ts +2 -1
  361. package/dist/live-connectors-runner.d.ts +2 -1
  362. package/dist/local-llm.d.ts +2 -1
  363. package/dist/local-llm.js +2 -2
  364. package/dist/local-model-endpoint.d.ts +2 -1
  365. package/dist/maintenance/memory-governance.d.ts +2 -1
  366. package/dist/maintenance/memory-governance.js +24 -23
  367. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +3 -2
  368. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +24 -23
  369. package/dist/maintenance/rebuild-memory-projection.d.ts +3 -2
  370. package/dist/maintenance/rebuild-memory-projection.js +26 -25
  371. package/dist/{maintenance-LbuS2rUA.d.ts → maintenance-D2mveyCd.d.ts} +3 -3
  372. package/dist/mcp-memory-inspector-app.d.ts +14 -10
  373. package/dist/mcp-read-only-tools.js +1 -1
  374. package/dist/memory-action-policy.d.ts +2 -1
  375. package/dist/memory-cache.d.ts +2 -1
  376. package/dist/memory-lifecycle-ledger-utils.d.ts +2 -1
  377. package/dist/memory-projection-store.d.ts +2 -1
  378. package/dist/memory-provenance.d.ts +2 -1
  379. package/dist/memory-worth-outcomes.d.ts +3 -2
  380. package/dist/models-json.d.ts +2 -1
  381. package/dist/namespaces/migrate.d.ts +4 -3
  382. package/dist/namespaces/migrate.js +40 -39
  383. package/dist/namespaces/principal.d.ts +2 -1
  384. package/dist/namespaces/search.d.ts +2 -1
  385. package/dist/namespaces/search.js +18 -18
  386. package/dist/namespaces/storage.d.ts +4 -3
  387. package/dist/namespaces/storage.js +23 -22
  388. package/dist/native-knowledge.d.ts +2 -1
  389. package/dist/offline-sync-impression-drain.d.ts +2 -1
  390. package/dist/offline-sync-impression-drain.js +11 -9
  391. package/dist/offline-sync.d.ts +29 -3
  392. package/dist/offline-sync.js +6 -2
  393. package/dist/operator-doctor-corpus.d.ts +2 -1
  394. package/dist/operator-doctor-corpus.js +45 -44
  395. package/dist/operator-doctor-replica.d.ts +2 -1
  396. package/dist/operator-doctor-replica.js +3 -3
  397. package/dist/operator-toolkit.d.ts +4 -3
  398. package/dist/operator-toolkit.js +59 -55
  399. package/dist/orchestration/compression-guideline-coordinator.d.ts +3 -2
  400. package/dist/orchestration/maintenance.d.ts +5 -4
  401. package/dist/orchestration/maintenance.js +36 -33
  402. package/dist/{orchestrator-rHiWt32X.d.ts → orchestrator-DJYlwiUv.d.ts} +14 -7
  403. package/dist/orchestrator.d.ts +9 -8
  404. package/dist/orchestrator.js +201 -189
  405. package/dist/page-versioning.js +3 -3
  406. package/dist/patterns-cli.d.ts +2 -1
  407. package/dist/{pipeline-W_97O8BV.d.ts → pipeline-CNjY4wk3.d.ts} +1 -1
  408. package/dist/policy-runtime.d.ts +2 -1
  409. package/dist/policy-runtime.js +1 -1
  410. package/dist/proactive-contention.d.ts +2 -1
  411. package/dist/provenance.d.ts +2 -1
  412. package/dist/provenance.js +2 -2
  413. package/dist/{qmd-LWtMofAf.d.ts → qmd-C0UDZidt.d.ts} +9 -7
  414. package/dist/qmd-preflight.d.ts +5 -4
  415. package/dist/qmd-preflight.js +2 -2
  416. package/dist/qmd-recall-cache.d.ts +2 -1
  417. package/dist/qmd.d.ts +4 -3
  418. package/dist/qmd.js +5 -5
  419. package/dist/recall-concurrency-config.d.ts +2 -1
  420. package/dist/recall-disclosure-escalation.d.ts +2 -1
  421. package/dist/recall-explain-renderer.d.ts +2 -1
  422. package/dist/recall-explain-renderer.js +3 -3
  423. package/dist/recall-memory-map.d.ts +2 -1
  424. package/dist/recall-planner-llm.d.ts +2 -1
  425. package/dist/recall-state.d.ts +2 -1
  426. package/dist/recall-tag-filter.d.ts +2 -1
  427. package/dist/recall-timings.d.ts +2 -1
  428. package/dist/recall-xray-cli.d.ts +2 -1
  429. package/dist/recall-xray-cli.js +4 -4
  430. package/dist/recall-xray-renderer.d.ts +2 -1
  431. package/dist/recall-xray-renderer.js +3 -3
  432. package/dist/recall-xray.d.ts +8 -1
  433. package/dist/recall-xray.js +2 -2
  434. package/dist/reconcile/cursor.d.ts +12 -2
  435. package/dist/reconcile/cursor.js +46 -7
  436. package/dist/reconcile/cursor.js.map +1 -1
  437. package/dist/reconcile/manifest.d.ts +9 -2
  438. package/dist/reconcile/manifest.js +15 -268
  439. package/dist/reconcile/manifest.js.map +1 -1
  440. package/dist/reconcile/plan.d.ts +6 -2
  441. package/dist/reconcile/plan.js +4 -4
  442. package/dist/replay/normalizers/chatgpt.d.ts +2 -1
  443. package/dist/replay/normalizers/claude.d.ts +2 -1
  444. package/dist/replay/normalizers/openclaw.d.ts +2 -1
  445. package/dist/replay/normalizers/shared.d.ts +2 -1
  446. package/dist/replay/runner.d.ts +2 -1
  447. package/dist/replay/types.d.ts +2 -1
  448. package/dist/replica-divergence.d.ts +2 -1
  449. package/dist/replica-divergence.js +2 -2
  450. package/dist/replica-peers-config.d.ts +2 -1
  451. package/dist/resolve-auth-token.d.ts +2 -1
  452. package/dist/resume-bundles.js +12 -10
  453. package/dist/retrieval-agents.d.ts +4 -3
  454. package/dist/retrieval-agents.js +2 -2
  455. package/dist/retrieval-tiers.d.ts +2 -1
  456. package/dist/routing/engine.d.ts +2 -1
  457. package/dist/routing/store.d.ts +2 -1
  458. package/dist/salvage-envelope.d.ts +2 -1
  459. package/dist/schemas.d.ts +76 -76
  460. package/dist/{scope-profiles-BiQKOE-p.d.ts → scope-profiles-BJzp2F5A.d.ts} +1 -1
  461. package/dist/search/embed-helper.d.ts +2 -1
  462. package/dist/search/embed-helper.js +3 -3
  463. package/dist/search/factory.d.ts +4 -2
  464. package/dist/search/factory.js +20 -18
  465. package/dist/search/index.d.ts +2 -1
  466. package/dist/search/index.js +22 -22
  467. package/dist/search/lancedb-backend.d.ts +2 -1
  468. package/dist/search/lancedb-backend.js +4 -4
  469. package/dist/search/meilisearch-backend.d.ts +2 -1
  470. package/dist/search/meilisearch-backend.js +4 -4
  471. package/dist/search/noop-backend.d.ts +2 -1
  472. package/dist/search/orama-backend.d.ts +2 -1
  473. package/dist/search/orama-backend.js +4 -4
  474. package/dist/search/port.d.ts +18 -1
  475. package/dist/search/port.js +1 -1
  476. package/dist/search/remote-backend.d.ts +2 -1
  477. package/dist/search/remote-backend.js +2 -2
  478. package/dist/secure-store/index.js +2 -2
  479. package/dist/{semantic-consolidation-dHYCyqgh.d.ts → semantic-consolidation-D4KAZO2G.d.ts} +1 -1
  480. package/dist/semantic-consolidation.d.ts +3 -2
  481. package/dist/semantic-consolidation.js +25 -24
  482. package/dist/semantic-rule-promotion.js +23 -22
  483. package/dist/semantic-rule-verifier.d.ts +2 -1
  484. package/dist/semantic-rule-verifier.js +24 -23
  485. package/dist/{service-DJG3KCQ4.d.ts → service-BeDxSqE-.d.ts} +2 -2
  486. package/dist/session-observer-bands.d.ts +2 -1
  487. package/dist/session-observer-state.d.ts +2 -1
  488. package/dist/shared-context/manager.d.ts +10 -9
  489. package/dist/shared-context/manager.js +2 -2
  490. package/dist/signal.d.ts +2 -1
  491. package/dist/source-agent-qualifier.d.ts +2 -1
  492. package/dist/source-agent-qualifier.js +42 -40
  493. package/dist/{storage-F9FVh-w9.d.ts → storage-DfjxusTE.d.ts} +24 -12
  494. package/dist/storage.d.ts +3 -2
  495. package/dist/storage.js +25 -24
  496. package/dist/summarizer.d.ts +2 -1
  497. package/dist/summarizer.js +5 -5
  498. package/dist/summary-snapshot.d.ts +2 -1
  499. package/dist/temporal-supersession.d.ts +3 -2
  500. package/dist/temporal-timeline-recall.d.ts +2 -1
  501. package/dist/temporal-validity.d.ts +2 -1
  502. package/dist/threading.d.ts +2 -1
  503. package/dist/tier-migration.d.ts +3 -2
  504. package/dist/tier-routing.d.ts +2 -1
  505. package/dist/tool-scoped-memory.d.ts +5 -1
  506. package/dist/tool-scoped-memory.js +3 -1
  507. package/dist/topics.d.ts +2 -1
  508. package/dist/transcript.d.ts +2 -1
  509. package/dist/transfer/capsule-import.js +4 -4
  510. package/dist/transfer/types.d.ts +66 -66
  511. package/dist/trust-score-stage.d.ts +2 -1
  512. package/dist/trust-score.d.ts +2 -1
  513. package/dist/{types-rEwubvim.d.ts → types-yX_FwERf.d.ts} +8 -1
  514. package/dist/types.d.ts +2 -1
  515. package/dist/types.js +1 -1
  516. package/dist/utility-runtime.d.ts +2 -1
  517. package/dist/verified-recall.js +24 -23
  518. package/dist/write-envelope.d.ts +2 -1
  519. package/package.json +2 -2
  520. package/src/abort-error.ts +17 -0
  521. package/src/access-admin-ops-surface.ts +1 -0
  522. package/src/access-boundary.ts +1 -0
  523. package/src/access-coding-context-resolution.ts +42 -0
  524. package/src/access-extraction-force-flush.ts +38 -2
  525. package/src/access-http-lcm-compaction.ts +5 -2
  526. package/src/access-http-offline-stream.ts +79 -0
  527. package/src/access-http.test.ts +310 -3
  528. package/src/access-http.ts +85 -21
  529. package/src/access-mcp-output-schemas.ts +36 -0
  530. package/src/access-mcp.test.ts +95 -1
  531. package/src/access-mcp.ts +7 -9
  532. package/src/access-observe-helpers.ts +64 -22
  533. package/src/access-observe-write-surface.ts +8 -0
  534. package/src/access-offline-manifest.ts +54 -0
  535. package/src/access-operations-batch.ts +3 -3
  536. package/src/access-operations.ts +13 -7
  537. package/src/access-recall-concurrency.ts +3 -27
  538. package/src/access-recall-surface.ts +3 -0
  539. package/src/access-service-health.test.ts +32 -7
  540. package/src/access-service-namespace.test.ts +55 -0
  541. package/src/access-service-observe-idempotency.test.ts +34 -2
  542. package/src/access-service-observe-lcm-parity.test.ts +138 -3
  543. package/src/access-service-observe-scope.test.ts +160 -1
  544. package/src/access-service-offline-file-content.test.ts +345 -1
  545. package/src/access-service.ts +86 -59
  546. package/src/access-surface-catalog.ts +4 -0
  547. package/src/admin/admin-surfaces.ts +2 -0
  548. package/src/binary-lifecycle/pipeline.test.ts +106 -1
  549. package/src/binary-lifecycle/pipeline.ts +3 -0
  550. package/src/coding/git-context.test.ts +47 -0
  551. package/src/coding/git-context.ts +129 -27
  552. package/src/config.test.ts +24 -0
  553. package/src/config.ts +9 -12
  554. package/src/connector-provenance.test.ts +101 -0
  555. package/src/consolidation-undo.ts +3 -0
  556. package/src/converge-conflict-policy-type.test.ts +15 -0
  557. package/src/convergence-refresh.ts +14 -2
  558. package/src/correction/correction-access-wiring.ts +9 -7
  559. package/src/correction/correction-executor.test.ts +206 -2
  560. package/src/correction/correction-executor.ts +29 -20
  561. package/src/correction/correction-planner.test.ts +36 -0
  562. package/src/correction/correction-planner.ts +9 -15
  563. package/src/correction/correction-service.ts +3 -1
  564. package/src/correction/correction-storage-integration.test.ts +77 -0
  565. package/src/correction/correction-surfaces.test.ts +41 -28
  566. package/src/correction/passive-capture.test.ts +59 -0
  567. package/src/correction/passive-capture.ts +4 -1
  568. package/src/entity-retrieval-boundaries.ts +17 -4
  569. package/src/entity-retrieval.ts +27 -6
  570. package/src/external-wiki-access.test.ts +65 -0
  571. package/src/external-wiki-access.ts +31 -0
  572. package/src/external-wiki-cli.ts +92 -0
  573. package/src/external-wiki-collection-registration.test.ts +163 -0
  574. package/src/external-wiki-collection-registration.ts +101 -0
  575. package/src/external-wiki-collection.test.ts +502 -0
  576. package/src/external-wiki-collection.ts +503 -0
  577. package/src/external-wiki-config.test.ts +135 -0
  578. package/src/external-wiki-config.ts +100 -0
  579. package/src/external-wiki-guard.ts +83 -0
  580. package/src/external-wiki-mcp-tools.ts +23 -0
  581. package/src/external-wiki-search.test.ts +301 -0
  582. package/src/external-wiki-search.ts +362 -0
  583. package/src/external-wiki.test.ts +240 -0
  584. package/src/external-wiki.ts +453 -0
  585. package/src/extraction-scope-source-agent.test.ts +21 -0
  586. package/src/extraction-source-grounding-helpers.ts +243 -53
  587. package/src/extraction-source-grounding-rules.ts +133 -39
  588. package/src/extraction-source-grounding.test.ts +363 -33
  589. package/src/extraction-timeout.test.ts +1 -0
  590. package/src/extraction-watermark.test.ts +150 -7
  591. package/src/extraction.ts +8 -1
  592. package/src/index.ts +8 -0
  593. package/src/mcp-read-only-tools.ts +1 -0
  594. package/src/offline-sync.test.ts +194 -0
  595. package/src/offline-sync.ts +217 -13
  596. package/src/orchestration/external-wiki-recall-guard.test.ts +94 -0
  597. package/src/orchestration/extraction-persist.ts +19 -2
  598. package/src/orchestration/extraction-run-helpers.ts +37 -19
  599. package/src/orchestration/extraction-run.test.ts +171 -2
  600. package/src/orchestration/extraction-run.ts +11 -13
  601. package/src/orchestration/extraction-watermark.ts +106 -17
  602. package/src/orchestration/generic-recall-paths.ts +14 -0
  603. package/src/orchestration/orchestrator-helpers.ts +2 -0
  604. package/src/orchestration/orchestrator-init.ts +9 -0
  605. package/src/orchestration/recall-internal-deps.ts +6 -0
  606. package/src/orchestration/recall-internal.ts +154 -33
  607. package/src/orchestration/recall-rerank-coordinator.ts +60 -25
  608. package/src/orchestration/recall-search-pipeline.test.ts +75 -1
  609. package/src/orchestration/recall-search-pipeline.ts +50 -10
  610. package/src/orchestrator-convergence-refresh.test.ts +36 -2
  611. package/src/orchestrator.ts +13 -3
  612. package/src/page-versioning.ts +5 -19
  613. package/src/procedural/procedure-recall.ts +5 -1
  614. package/src/provenance-surfaces.test.ts +3 -0
  615. package/src/qmd-client.test.ts +78 -17
  616. package/src/qmd.test.ts +24 -0
  617. package/src/qmd.ts +224 -315
  618. package/src/recall-explain-renderer.ts +3 -0
  619. package/src/recall-rerank-coordinator.test.ts +61 -0
  620. package/src/recall-xray-renderer.test.ts +6 -0
  621. package/src/recall-xray.test.ts +88 -1
  622. package/src/recall-xray.ts +15 -0
  623. package/src/reconcile/cursor.test.ts +48 -0
  624. package/src/reconcile/cursor.ts +58 -11
  625. package/src/reconcile/manifest.test.ts +4 -0
  626. package/src/reconcile/manifest.ts +41 -51
  627. package/src/reconcile/plan.test.ts +4 -0
  628. package/src/reconcile/plan.ts +29 -16
  629. package/src/search/factory.ts +6 -6
  630. package/src/search/port.ts +25 -9
  631. package/src/secure-store/secure-fs.ts +20 -12
  632. package/src/secure-store/secure-store.test.ts +41 -2
  633. package/src/spaces/index.test.ts +61 -2
  634. package/src/spaces/index.ts +44 -18
  635. package/src/storage/entity-alias-config.ts +97 -0
  636. package/src/storage/entity-canonical-id-lock.ts +53 -23
  637. package/src/storage/entity-canonical-id-migration.ts +53 -22
  638. package/src/storage/entity-canonical-id-references.ts +3 -0
  639. package/src/storage/entity-id-safety.ts +7 -0
  640. package/src/storage/entity-store.ts +6 -2
  641. package/src/storage/memory-frontmatter-metadata.ts +4 -9
  642. package/src/storage/memory-migration-serialization.ts +10 -15
  643. package/src/storage/tombstone-blocked-capture-mutation.ts +52 -64
  644. package/src/storage/tombstone-blocked-capture-sync.ts +244 -199
  645. package/src/storage-deletion-revisions.test.ts +91 -0
  646. package/src/storage-fact-hash-index-defer.test.ts +446 -163
  647. package/src/storage.ts +534 -245
  648. package/src/tool-scoped-memory.ts +10 -0
  649. package/src/transfer/capsule-import.ts +13 -0
  650. package/src/transfer/capsule-merge.ts +13 -0
  651. package/src/trust-score-recall-paths.test.ts +75 -1
  652. package/src/types.ts +7 -3
  653. package/dist/capsule-merge-IDWJPCWK.js.map +0 -1
  654. package/dist/chunk-3CE77VAP.js.map +0 -1
  655. package/dist/chunk-3TBLDMJA.js.map +0 -1
  656. package/dist/chunk-4J7G5SY4.js.map +0 -1
  657. package/dist/chunk-4L6HUREQ.js.map +0 -1
  658. package/dist/chunk-57QKLRBV.js.map +0 -1
  659. package/dist/chunk-5TFP4CUL.js.map +0 -1
  660. package/dist/chunk-7XC2HX75.js.map +0 -1
  661. package/dist/chunk-A5OJCXZL.js.map +0 -1
  662. package/dist/chunk-BUE5E2HL.js.map +0 -1
  663. package/dist/chunk-CJ2ZR7UA.js.map +0 -1
  664. package/dist/chunk-CUM2BBPN.js.map +0 -1
  665. package/dist/chunk-D3J5SLQK.js.map +0 -1
  666. package/dist/chunk-DL7ZD3JH.js.map +0 -1
  667. package/dist/chunk-DLVPUX7U.js.map +0 -1
  668. package/dist/chunk-E6PNLPGJ.js.map +0 -1
  669. package/dist/chunk-ECK75GDJ.js.map +0 -1
  670. package/dist/chunk-HREE4JHI.js.map +0 -1
  671. package/dist/chunk-IKKWIPYN.js.map +0 -1
  672. package/dist/chunk-J7VGGECD.js.map +0 -1
  673. package/dist/chunk-N5Z4EVOR.js.map +0 -1
  674. package/dist/chunk-NVRYW264.js.map +0 -1
  675. package/dist/chunk-P2BM76KT.js.map +0 -1
  676. package/dist/chunk-PVGDJXVK.js +0 -21
  677. package/dist/chunk-QJAQNXWI.js.map +0 -1
  678. package/dist/chunk-RN7DY3FC.js.map +0 -1
  679. package/dist/chunk-RVLJEII5.js.map +0 -1
  680. package/dist/chunk-S2NCTZGJ.js.map +0 -1
  681. package/dist/chunk-TDHTVMPG.js.map +0 -1
  682. package/dist/chunk-UYLMNVY6.js.map +0 -1
  683. package/dist/chunk-VCD4PSK2.js.map +0 -1
  684. package/dist/chunk-VNA7W7QF.js.map +0 -1
  685. package/dist/chunk-VWAXN2BN.js.map +0 -1
  686. package/dist/chunk-WOCNN776.js.map +0 -1
  687. package/dist/chunk-XYTOI63Z.js.map +0 -1
  688. package/dist/chunk-YV32N67O.js.map +0 -1
  689. /package/dist/{auto-sync-5OE5QOZB.js.map → auto-sync-UPTUVE4X.js.map} +0 -0
  690. /package/dist/{chunk-VUPTKTDV.js.map → chunk-2MRHJNWL.js.map} +0 -0
  691. /package/dist/{chunk-JBPKEARU.js.map → chunk-2QSZNTDO.js.map} +0 -0
  692. /package/dist/{chunk-5IVLTFOV.js.map → chunk-44N6ESJ4.js.map} +0 -0
  693. /package/dist/{chunk-HO3QBJEY.js.map → chunk-5546W5SI.js.map} +0 -0
  694. /package/dist/{chunk-U7GW7NE7.js.map → chunk-5CEECY6P.js.map} +0 -0
  695. /package/dist/{chunk-4UH4BTGK.js.map → chunk-5SNZSWWR.js.map} +0 -0
  696. /package/dist/{chunk-6CZPDBJS.js.map → chunk-5U7ID3EZ.js.map} +0 -0
  697. /package/dist/{chunk-GF22HWS2.js.map → chunk-6NNNURLK.js.map} +0 -0
  698. /package/dist/{chunk-227UFSEQ.js.map → chunk-7RZJWZ46.js.map} +0 -0
  699. /package/dist/{chunk-E5UK4VPE.js.map → chunk-7SHJHPTY.js.map} +0 -0
  700. /package/dist/{chunk-UVIKWC7M.js.map → chunk-7YERSTN7.js.map} +0 -0
  701. /package/dist/{chunk-S5SLVSVY.js.map → chunk-BQIFZ2MP.js.map} +0 -0
  702. /package/dist/{chunk-E53DSZEN.js.map → chunk-C26TE27X.js.map} +0 -0
  703. /package/dist/{chunk-LZ4LDKHZ.js.map → chunk-CLB32OHM.js.map} +0 -0
  704. /package/dist/{chunk-Q6IP2ARR.js.map → chunk-CSOYVTRX.js.map} +0 -0
  705. /package/dist/{chunk-XOQSEF7X.js.map → chunk-CVILPI77.js.map} +0 -0
  706. /package/dist/{chunk-PDLBLTOK.js.map → chunk-EITZHSX6.js.map} +0 -0
  707. /package/dist/{chunk-WUNIWKY4.js.map → chunk-ELIL2A37.js.map} +0 -0
  708. /package/dist/{chunk-CINZGPSJ.js.map → chunk-GUMZC2BO.js.map} +0 -0
  709. /package/dist/{chunk-H24WNPA2.js.map → chunk-GWFSVJ4P.js.map} +0 -0
  710. /package/dist/{chunk-TSH56VPU.js.map → chunk-HAYSYUAB.js.map} +0 -0
  711. /package/dist/{chunk-PKNLM44P.js.map → chunk-JH6BPLOP.js.map} +0 -0
  712. /package/dist/{chunk-KXB4VXHY.js.map → chunk-JIYDRBVZ.js.map} +0 -0
  713. /package/dist/{chunk-AV5ZEH4M.js.map → chunk-KVJRXN2E.js.map} +0 -0
  714. /package/dist/{chunk-JVLCVFQ4.js.map → chunk-KXEFRMCF.js.map} +0 -0
  715. /package/dist/{chunk-WFTIGIIS.js.map → chunk-L6CQ7WIW.js.map} +0 -0
  716. /package/dist/{chunk-EJUEXZHX.js.map → chunk-LLJMAULE.js.map} +0 -0
  717. /package/dist/{chunk-AS7YMSL6.js.map → chunk-M23RF3LJ.js.map} +0 -0
  718. /package/dist/{chunk-3F2LKUMU.js.map → chunk-NIS256NW.js.map} +0 -0
  719. /package/dist/{chunk-YIAA2X3D.js.map → chunk-NK5RGJ65.js.map} +0 -0
  720. /package/dist/{chunk-OQ5PRDDS.js.map → chunk-NTOIP2E6.js.map} +0 -0
  721. /package/dist/{chunk-HLPD7B7P.js.map → chunk-NUEQKLNB.js.map} +0 -0
  722. /package/dist/{chunk-33PLLLL7.js.map → chunk-P7NGM24P.js.map} +0 -0
  723. /package/dist/{chunk-7TWUCYER.js.map → chunk-PNRA7FAD.js.map} +0 -0
  724. /package/dist/{chunk-5I4M26Q7.js.map → chunk-QBSFOKY6.js.map} +0 -0
  725. /package/dist/{chunk-P4DRWEYC.js.map → chunk-QVSBTCVP.js.map} +0 -0
  726. /package/dist/{chunk-AAIUERNB.js.map → chunk-R5RFK3CB.js.map} +0 -0
  727. /package/dist/{chunk-WDISJRMG.js.map → chunk-RMMVQQA6.js.map} +0 -0
  728. /package/dist/{chunk-5SM35XZR.js.map → chunk-S5NZBKKQ.js.map} +0 -0
  729. /package/dist/{chunk-WIPEXG6R.js.map → chunk-SXIMQLGV.js.map} +0 -0
  730. /package/dist/{chunk-OAEQLRCY.js.map → chunk-TN76AKO3.js.map} +0 -0
  731. /package/dist/{chunk-QN25OCUF.js.map → chunk-TQ4GD737.js.map} +0 -0
  732. /package/dist/{chunk-7K5Q6COX.js.map → chunk-TVVEYCNW.js.map} +0 -0
  733. /package/dist/{chunk-DNWXFTLD.js.map → chunk-TYISDI6B.js.map} +0 -0
  734. /package/dist/{chunk-4LMA77JH.js.map → chunk-U2VLVBBH.js.map} +0 -0
  735. /package/dist/{chunk-5ZE7QHTK.js.map → chunk-ULVR5KG7.js.map} +0 -0
  736. /package/dist/{chunk-4B77XSG5.js.map → chunk-UV72DEZD.js.map} +0 -0
  737. /package/dist/{chunk-S2BBISHU.js.map → chunk-VANZKHTN.js.map} +0 -0
  738. /package/dist/{chunk-3Y224NYC.js.map → chunk-VYISFWVX.js.map} +0 -0
  739. /package/dist/{chunk-TIHMZFIV.js.map → chunk-W3IC7QOY.js.map} +0 -0
  740. /package/dist/{chunk-NRV4Y3PM.js.map → chunk-W4FBGYGK.js.map} +0 -0
  741. /package/dist/{chunk-MU7ZHSZE.js.map → chunk-WZFAPHIK.js.map} +0 -0
  742. /package/dist/{chunk-T2TTP3KU.js.map → chunk-X4IDNPOS.js.map} +0 -0
  743. /package/dist/{chunk-BLAKS3CP.js.map → chunk-XL3TATMJ.js.map} +0 -0
  744. /package/dist/{chunk-W4XJFLAL.js.map → chunk-XPRJSHNI.js.map} +0 -0
  745. /package/dist/{chunk-JE7EK33X.js.map → chunk-Y7HRYCNW.js.map} +0 -0
  746. /package/dist/{chunk-E6EE5B67.js.map → chunk-YK6BDDHP.js.map} +0 -0
  747. /package/dist/{chunk-ES36HTSC.js.map → chunk-YLHM5BQQ.js.map} +0 -0
  748. /package/dist/{chunk-BJKPPZ6Z.js.map → chunk-ZFGZ6PZ2.js.map} +0 -0
  749. /package/dist/{chunk-64UDOIMI.js.map → chunk-ZLQ37WJX.js.map} +0 -0
@@ -17,6 +17,7 @@ import path from "node:path";
17
17
  import { test } from "node:test";
18
18
 
19
19
  import { withTempDir as managedWithTempDir } from "../testing/tmp-dir.js";
20
+ import { writeFileAtomically } from "../maintenance/atomic-file.js";
20
21
  import {
21
22
  CorrectionContractError,
22
23
  MEMORY_CATEGORIES,
@@ -301,6 +302,41 @@ test("plan persists atomically to state/corrections/pending/<planId>.json and ro
301
302
  });
302
303
  });
303
304
 
305
+ test("#2206 cancellation after atomic plan commit returns the persisted plan without temp files", async () => {
306
+ await withTempDir(async (dir) => {
307
+ const state: StubState = {
308
+ candidatesById: new Map([["mem-x", makeCandidate({ memoryId: "mem-x", content: "old fact" })]]),
309
+ llmResult: {
310
+ classification: "outdated",
311
+ confidence: 0.9,
312
+ actions: [{ kind: "edit", memoryId: "mem-x", patch: "new fact" }],
313
+ relevance: [{ memoryId: "mem-x", why: "outdated" }],
314
+ warnings: [],
315
+ },
316
+ writeReplacementCalls: 0,
317
+ propagateCalls: 0,
318
+ retireCalls: 0,
319
+ };
320
+ const abortController = new AbortController();
321
+ const deps = makeDeps(dir, state);
322
+ deps.writePlanFile = async (outputPath, content) => {
323
+ await writeFileAtomically(outputPath, content);
324
+ abortController.abort(new Error("correction deadline exceeded"));
325
+ };
326
+ const planner = new CorrectionPlanner(deps);
327
+
328
+ const plan = await planner.plan(
329
+ { text: "old fact", targetIds: ["mem-x"] },
330
+ ["default"],
331
+ { abortSignal: abortController.signal },
332
+ );
333
+ const pendingDir = path.join(dir, "state", "corrections", "pending");
334
+ assert.equal(abortController.signal.aborted, true);
335
+ assert.equal((await planner.loadPlan("default", plan.planId))?.planId, plan.planId);
336
+ assert.equal((await readdir(pendingDir)).some((name) => name.endsWith(".tmp")), false);
337
+ });
338
+ });
339
+
304
340
  test("plan expires after TTL — apply-time rejection is tested in executor; here we verify the timestamp", async () => {
305
341
  await withTempDir(async (dir) => {
306
342
  const state: StubState = {
@@ -20,9 +20,10 @@
20
20
  * only thing it persists is the plan document itself.
21
21
  */
22
22
 
23
- import { throwIfAborted } from "../abort-error.js";
24
- import { mkdir, readFile, rename, unlink, readdir, writeFile } from "node:fs/promises";
23
+ import { readFile, readdir, unlink } from "node:fs/promises";
25
24
  import path from "node:path";
25
+ import { throwIfAborted } from "../abort-error.js";
26
+ import { writeFileAtomically } from "../maintenance/atomic-file.js";
26
27
  import { serializeMutations } from "../utils/serialize-mutations.js";
27
28
  import {
28
29
  CORRECTION_TEXT_MAX,
@@ -109,6 +110,8 @@ export interface PlannerDeps {
109
110
  }): Promise<string>;
110
111
  /** Per-namespace storage dir root (so the plan lands in the right state/). */
111
112
  storageDir(namespace: string): Promise<string>;
113
+ /** Atomic persistence seam used by focused lifecycle tests. */
114
+ writePlanFile?: (outputPath: string, content: string) => Promise<unknown>;
112
115
  /** Max affected memories per plan (issue config: default 10). */
113
116
  readonly maxAffected: number;
114
117
  /** Plan TTL in hours (issue config: default 24). */
@@ -431,13 +434,8 @@ export class CorrectionPlanner {
431
434
  : plan;
432
435
  await serializeMutations(`correction-plan:${target}`, async () => {
433
436
  throwIfAborted(abortSignal, "correction planning aborted");
434
- await mkdir(dir, { recursive: true });
435
- const tmp = `${target}.${process.pid}.${Date.now().toString(36)}.tmp`;
436
- throwIfAborted(abortSignal, "correction planning aborted");
437
- await writeFile(tmp, `${JSON.stringify(persistedPlan)}\n`, "utf-8");
438
- throwIfAborted(abortSignal, "correction planning aborted");
439
- // rename() is atomic on POSIX for same-filesystem renames (rule 54).
440
- await rename(tmp, target);
437
+ const writePlanFile = this.deps.writePlanFile ?? writeFileAtomically;
438
+ await writePlanFile(target, `${JSON.stringify(persistedPlan)}\n`);
441
439
  });
442
440
  return plan;
443
441
  }
@@ -520,9 +518,7 @@ export class CorrectionPlanner {
520
518
  : a,
521
519
  );
522
520
  }
523
- const tmp = `${file}.${process.pid}.${Date.now().toString(36)}.tmp`;
524
- await writeFile(tmp, `${JSON.stringify(plan)}\n`, "utf-8");
525
- await rename(tmp, file);
521
+ await writeFileAtomically(file, `${JSON.stringify(plan)}\n`);
526
522
  });
527
523
  }
528
524
  /**
@@ -545,9 +541,7 @@ export class CorrectionPlanner {
545
541
  if (!plan || plan.status !== "applying") return;
546
542
  plan.status = "pending";
547
543
  delete plan.applyingAt;
548
- const tmp = `${file}.${process.pid}.${Date.now().toString(36)}.tmp`;
549
- await writeFile(tmp, `${JSON.stringify(plan)}\n`, "utf-8");
550
- await rename(tmp, file);
544
+ await writeFileAtomically(file, `${JSON.stringify(plan)}\n`);
551
545
  });
552
546
  }
553
547
 
@@ -52,6 +52,7 @@ export interface CorrectionNamespacePolicy {
52
52
  namespace: string;
53
53
  sessionKey?: string;
54
54
  principal?: string;
55
+ abortSignal?: AbortSignal;
55
56
  }): Promise<boolean>;
56
57
  /** Namespaces the caller may read — scopes the planner's search. */
57
58
  readableNamespaces(request: {
@@ -144,11 +145,12 @@ export class CorrectionService {
144
145
  abortSignal: opts.abortSignal,
145
146
  // Authorize rescope destinations through the namespace policy bound to
146
147
  // THIS caller's principal (review thread: authorize-rescope-destination).
147
- canWriteDestination: (dest) =>
148
+ canWriteDestination: (dest, abortSignal) =>
148
149
  this.deps.policy.canWriteNamespace({
149
150
  namespace: dest,
150
151
  ...(opts.sessionKey ? { sessionKey: opts.sessionKey } : {}),
151
152
  ...(opts.principal ? { principal: opts.principal } : {}),
153
+ ...(abortSignal ? { abortSignal } : {}),
152
154
  }),
153
155
  });
154
156
  }
@@ -16,12 +16,17 @@ import type { MemoryFile } from "../types.js";
16
16
 
17
17
  import { StorageManager, ContentHashIndex } from "../storage.js";
18
18
  import { sanitizeMemoryContent } from "../sanitize.js";
19
+ import { loadRedactionRules } from "../extraction-redaction-rules.js";
20
+ import { writeFileAtomically } from "../maintenance/atomic-file.js";
19
21
  import {
22
+ type CorrectionAccessWiring,
20
23
  isEligibleCorrectionCandidate,
21
24
  applyEditMemory,
22
25
  appendTombstoneFn,
26
+ appendAuditRecordFn,
23
27
  retireMemoryFn,
24
28
  rescopeMemoryFn,
29
+ registerRedactionRuleFn,
25
30
  writeReplacementMemory,
26
31
  } from "./correction-access-wiring.js";
27
32
 
@@ -292,6 +297,78 @@ test("#2128 tombstone append returns its committed id after cancellation", async
292
297
  }
293
298
  });
294
299
 
300
+ test("#2206 redaction adapter returns after a committed rule write despite cancellation", async () => {
301
+ const { storage, cleanup } = await makeStorage("remnic-corr-redaction-abort-");
302
+ try {
303
+ const abortController = new AbortController();
304
+ let commitCompleted = false;
305
+ const wiring = {
306
+ orchestrator: { getStorage: async () => storage },
307
+ } as unknown as CorrectionAccessWiring;
308
+
309
+ await registerRedactionRuleFn(
310
+ wiring,
311
+ "default",
312
+ "do-not-store-this",
313
+ abortController.signal,
314
+ async (outputPath, content) => {
315
+ await writeFileAtomically(outputPath, content);
316
+ commitCompleted = true;
317
+ abortController.abort(new Error("correction deadline exceeded"));
318
+ },
319
+ );
320
+
321
+ assert.equal(commitCompleted, true);
322
+ assert.deepEqual(
323
+ (await loadRedactionRules(storage.dir)).map((rule) => rule.pattern),
324
+ ["do-not-store-this"],
325
+ );
326
+ } finally {
327
+ await cleanup();
328
+ }
329
+ });
330
+
331
+ test("#2206 audit adapter returns its committed id despite cancellation", async () => {
332
+ const { storage, cleanup } = await makeStorage("remnic-corr-audit-abort-");
333
+ try {
334
+ const originalWriteSealedMemory = storage.writeSealedMemory.bind(storage);
335
+ const abortController = new AbortController();
336
+ let committed = false;
337
+ storage.writeSealedMemory = async (...args: Parameters<typeof storage.writeSealedMemory>) => {
338
+ const result = await originalWriteSealedMemory(...args);
339
+ committed = true;
340
+ abortController.abort(new Error("correction deadline exceeded"));
341
+ return result;
342
+ };
343
+ const wiring = {
344
+ orchestrator: { getStorage: async () => storage },
345
+ } as unknown as CorrectionAccessWiring;
346
+
347
+ const auditId = await appendAuditRecordFn(
348
+ wiring,
349
+ "default",
350
+ {
351
+ planId: "plan-2206",
352
+ classification: "outdated",
353
+ outcome: {
354
+ planId: "plan-2206",
355
+ status: "partial",
356
+ results: [],
357
+ auditMemoryId: "",
358
+ appliedAt: "2026-07-30T00:00:00.000Z",
359
+ },
360
+ requestText: "update the stored fact",
361
+ },
362
+ abortController.signal,
363
+ );
364
+
365
+ assert.equal(committed, true);
366
+ assert.equal((await storage.getMemoryById(auditId))?.frontmatter.category, "correction");
367
+ } finally {
368
+ await cleanup();
369
+ }
370
+ });
371
+
295
372
  // ---------------------------------------------------------------------------
296
373
  // item 4: per-key tombstone emission
297
374
  // ---------------------------------------------------------------------------
@@ -39,8 +39,8 @@ function extractToolNames(response: unknown): Set<string> {
39
39
  }
40
40
 
41
41
  interface MockCalls {
42
- planRequests: Array<{ text: string; targetIds?: string[]; principal?: string }>;
43
- applyRequests: Array<{ planId: string; confirm: boolean; principal?: string }>;
42
+ planRequests: Array<{ text: string; targetIds?: string[]; principal?: string; abortSignal?: AbortSignal }>;
43
+ applyRequests: Array<{ planId: string; confirm: boolean; principal?: string; abortSignal?: AbortSignal }>;
44
44
  }
45
45
 
46
46
  function makeMockService(
@@ -50,22 +50,26 @@ function makeMockService(
50
50
  const calls: MockCalls = { planRequests: [], applyRequests: [] };
51
51
  const service = {
52
52
  briefingEnabled: true,
53
- correctionPlan(req: {
54
- text: string;
55
- targetIds?: string[];
56
- principal?: string;
57
- }): Promise<CorrectionPlan> {
58
- calls.planRequests.push(req);
53
+ correctionPlan(
54
+ req: {
55
+ text: string;
56
+ targetIds?: string[];
57
+ principal?: string;
58
+ },
59
+ opts?: { abortSignal?: AbortSignal },
60
+ ): Promise<CorrectionPlan> {
61
+ calls.planRequests.push({ ...req, ...(opts?.abortSignal ? { abortSignal: opts.abortSignal } : {}) });
59
62
  return Promise.resolve(planResponse);
60
63
  },
61
64
  correctionApply(
62
65
  planId: string,
63
- opts: { confirm?: boolean; principal?: string },
66
+ opts: { confirm?: boolean; principal?: string; abortSignal?: AbortSignal },
64
67
  ): Promise<CorrectionOutcome> {
65
68
  calls.applyRequests.push({
66
69
  planId,
67
70
  confirm: opts.confirm === true,
68
71
  ...(opts.principal ? { principal: opts.principal } : {}),
72
+ ...(opts.abortSignal ? { abortSignal: opts.abortSignal } : {}),
69
73
  });
70
74
  return Promise.resolve(applyResponse);
71
75
  },
@@ -130,22 +134,26 @@ test("tools/list gate: correction tools present when correctionVisible on (defau
130
134
  // MCP dispatch: tools/call → boundary operation → service method
131
135
  // ---------------------------------------------------------------------------
132
136
 
133
- test("MCP surface: memory_correct_plan dispatches to service.correctionPlan", async () => {
137
+ test("MCP surface: memory_correct_plan forwards the request abort signal", async () => {
134
138
  const { service, calls } = makeMockService(STUB_PLAN, STUB_OUTCOME);
135
139
  const server = new EngramMcpServer(service, { emitLegacyTools: true, correctionVisible: true });
136
- const response = await server.handleRequest({
137
- jsonrpc: "2.0",
138
- id: 1,
139
- method: "tools/call",
140
- params: {
141
- name: "engram.memory_correct_plan",
142
- arguments: { text: "we migrated to MySQL in March", targetIds: ["mem-1"] },
140
+ const abortController = new AbortController();
141
+ const response = await server.handleRequest(
142
+ {
143
+ jsonrpc: "2.0",
144
+ id: 1,
145
+ method: "tools/call",
146
+ params: {
147
+ name: "engram.memory_correct_plan",
148
+ arguments: { text: "we migrated to MySQL in March", targetIds: ["mem-1"] },
149
+ },
143
150
  },
144
- });
151
+ { abortSignal: abortController.signal },
152
+ );
145
153
  assert.equal(calls.planRequests.length, 1, "service.correctionPlan called exactly once");
146
154
  assert.equal(calls.planRequests[0]?.text, "we migrated to MySQL in March");
147
155
  assert.deepEqual(calls.planRequests[0]?.targetIds, ["mem-1"]);
148
- // The response result is the plan returned by the service.
156
+ assert.equal(calls.planRequests[0]?.abortSignal, abortController.signal);
149
157
  assert.equal(
150
158
  typeof response === "object" && response !== null && "result" in response,
151
159
  true,
@@ -153,21 +161,26 @@ test("MCP surface: memory_correct_plan dispatches to service.correctionPlan", as
153
161
  );
154
162
  });
155
163
 
156
- test("MCP surface: memory_correct_apply dispatches to service.correctionApply with confirm", async () => {
164
+ test("MCP surface: memory_correct_apply forwards confirmation and the request abort signal", async () => {
157
165
  const { service, calls } = makeMockService(STUB_PLAN, STUB_OUTCOME);
158
166
  const server = new EngramMcpServer(service, { emitLegacyTools: true, correctionVisible: true });
159
- await server.handleRequest({
160
- jsonrpc: "2.0",
161
- id: 2,
162
- method: "tools/call",
163
- params: {
164
- name: "engram.memory_correct_apply",
165
- arguments: { planId: "corr-test-1", confirm: true },
167
+ const abortController = new AbortController();
168
+ await server.handleRequest(
169
+ {
170
+ jsonrpc: "2.0",
171
+ id: 2,
172
+ method: "tools/call",
173
+ params: {
174
+ name: "engram.memory_correct_apply",
175
+ arguments: { planId: "corr-test-1", confirm: true },
176
+ },
166
177
  },
167
- });
178
+ { abortSignal: abortController.signal },
179
+ );
168
180
  assert.equal(calls.applyRequests.length, 1, "service.correctionApply called exactly once");
169
181
  assert.equal(calls.applyRequests[0]?.planId, "corr-test-1");
170
182
  assert.equal(calls.applyRequests[0]?.confirm, true);
183
+ assert.equal(calls.applyRequests[0]?.abortSignal, abortController.signal);
171
184
  });
172
185
 
173
186
  test("MCP surface: remnic.memory_correct_plan alias dispatches identically", async () => {
@@ -165,6 +165,65 @@ test("dedup: different bufferKey → both processed", async () => {
165
165
  assert.strictEqual(dedup.size, 2);
166
166
  });
167
167
 
168
+ test("#2206 dedup records a plan that commits as cancellation arrives", async () => {
169
+ const plan = makePlan();
170
+ const abortController = new AbortController();
171
+ let planningCalls = 0;
172
+ const deps = mockDeps(plan);
173
+ deps.planCorrection = async () => {
174
+ planningCalls += 1;
175
+ abortController.abort(new Error("extraction deadline exceeded"));
176
+ return plan;
177
+ };
178
+ const dedup = new Set<string>();
179
+ const correction = makeCorrection();
180
+
181
+ const first = await capturePassiveCorrections(
182
+ [correction],
183
+ { ...LIVE_CTX, abortSignal: abortController.signal },
184
+ QUEUE_CONFIG,
185
+ deps,
186
+ dedup,
187
+ );
188
+ const second = await capturePassiveCorrections(
189
+ [correction],
190
+ LIVE_CTX,
191
+ QUEUE_CONFIG,
192
+ deps,
193
+ dedup,
194
+ );
195
+
196
+ assert.deepEqual(first.plans.map((candidate) => candidate.planId), [plan.planId]);
197
+ assert.equal(first.telemetry.queued, 1, "the committed pending plan must count as queued");
198
+ assert.equal(dedup.size, 1);
199
+ assert.equal(second.telemetry.queued, 0);
200
+ assert.equal(planningCalls, 1);
201
+ });
202
+
203
+ test("#2206 auto mode counts a plan left pending when cancellation lands at commit", async () => {
204
+ const plan = makePlan({ confidence: 0.9, classification: "outdated" });
205
+ const abortController = new AbortController();
206
+ const appliedPlans: string[] = [];
207
+ const deps = mockDeps(plan, { appliedPlans });
208
+ deps.planCorrection = async () => {
209
+ abortController.abort(new Error("extraction deadline exceeded"));
210
+ return plan;
211
+ };
212
+
213
+ const result = await capturePassiveCorrections(
214
+ [makeCorrection()],
215
+ { ...LIVE_CTX, abortSignal: abortController.signal },
216
+ AUTO_CONFIG,
217
+ deps,
218
+ new Set<string>(),
219
+ );
220
+
221
+ assert.equal(abortController.signal.aborted, true, "cancellation must land as planning commits");
222
+ assert.deepEqual(result.plans.map((candidate) => candidate.planId), [plan.planId]);
223
+ assert.equal(result.telemetry.queued, 1);
224
+ assert.deepEqual(appliedPlans, []);
225
+ });
226
+
168
227
  // ---------------------------------------------------------------------------
169
228
  // Auto mode + guards
170
229
  // ---------------------------------------------------------------------------
@@ -262,10 +262,13 @@ export async function capturePassiveCorrections(
262
262
  );
263
263
  continue;
264
264
  }
265
- if (ctx.abortSignal?.aborted) return { telemetry, plans };
266
265
  plans.push(plan);
267
266
  // Record the fingerprint only after a successful plan.
268
267
  dedupState.add(fp);
268
+ if (ctx.abortSignal?.aborted) {
269
+ telemetry.queued += 1;
270
+ return { telemetry, plans };
271
+ }
269
272
 
270
273
  // 3. Dispatch by mode
271
274
  if (config.mode === "queue") {
@@ -64,6 +64,19 @@ function isIntlWordBoundary(source: string, index: number): boolean {
64
64
  return UNICODE_WORD_SEGMENTER?.segment(source).containing(index)?.index === index;
65
65
  }
66
66
 
67
+ function isStandaloneJapaneseLeadingParticle(
68
+ particle: string,
69
+ source: string,
70
+ boundaryIndex: number,
71
+ ): boolean {
72
+ if (!JAPANESE_WORD_SEGMENTER || boundaryIndex <= 0 || !JAPANESE_PARTICLE_RE.test(particle)) {
73
+ return false;
74
+ }
75
+ const particleStart = boundaryIndex - particle.length;
76
+ const segment = JAPANESE_WORD_SEGMENTER.segment(source).containing(particleStart);
77
+ return segment?.index === particleStart
78
+ && segment.index + segment.segment.length === boundaryIndex;
79
+ }
67
80
  function isKoreanUnspacedQuestionBoundary(suffix: string): boolean {
68
81
  return KOREAN_UNSPACED_QUESTION_PARTICLES.some((particle) =>
69
82
  suffix.startsWith(particle) &&
@@ -91,18 +104,15 @@ function isUnicodePhraseBoundary(
91
104
  source: string = "",
92
105
  boundaryIndex: number = -1,
93
106
  strictUnicode = false,
94
- allowLeadingParticle = false,
95
107
  ): boolean {
96
108
  return (
97
109
  character.length === 0
98
110
  || !UNICODE_WORD_OR_NUMBER_RE.test(character)
99
- || (allowLeadingParticle && isJapaneseParticleBoundary(character))
100
111
  || isJapaneseParticleBoundary(suffix)
101
112
  || (!strictUnicode &&
102
113
  boundaryIndex >= 0 &&
103
114
  !JAPANESE_KANA_RE.test(suffix) &&
104
115
  isIntlWordBoundary(source, boundaryIndex))
105
- || (allowLeadingParticle && isKoreanParticleBoundary(character))
106
116
  || isKoreanParticleBoundary(suffix)
107
117
  );
108
118
  }
@@ -117,7 +127,10 @@ export function containsPhrase(haystack: string, needle: string): boolean {
117
127
  const before = lastUnicodeCharacter(searchHaystack.slice(0, offset));
118
128
  const after = searchHaystack.slice(offset + searchNeedle.length);
119
129
  if (
120
- isUnicodePhraseBoundary(before, "", searchHaystack, offset, caseInsensitive, true)
130
+ (
131
+ isUnicodePhraseBoundary(before, "", searchHaystack, offset, caseInsensitive)
132
+ || isStandaloneJapaneseLeadingParticle(before, searchHaystack, offset)
133
+ )
121
134
  && isUnicodePhraseBoundary(
122
135
  firstUnicodeCharacter(after),
123
136
  after,
@@ -403,23 +403,37 @@ async function readCurrentPersistedEntityIndex(
403
403
  const namespaceEntityIndexCache = new Map<string, EntityMentionIndex>();
404
404
  const MAX_NAMESPACE_ENTITY_INDEX_CACHE_ENTRIES = 32;
405
405
 
406
+ function nativeEntityIndexRevision(chunks: NativeKnowledgeChunk[]): string {
407
+ const projection = chunks.map((chunk) => [
408
+ chunk.chunkId,
409
+ chunk.sourcePath,
410
+ chunk.title,
411
+ chunk.sourceKind,
412
+ uniqueStrings(chunk.aliases ?? []),
413
+ compactLine(chunk.content, 180),
414
+ chunk.derivedDate ?? null,
415
+ ]);
416
+ return createHash("sha256").update(JSON.stringify(projection)).digest("hex");
417
+ }
418
+
406
419
  function namespaceEntityIndexCacheKey(
407
420
  storages: StorageManager[],
408
421
  recallNamespaces: string[],
422
+ nativeRevision: string,
409
423
  ): string {
410
- const namespaceKey = uniqueStrings(recallNamespaces).sort().join("\u001f");
424
+ const namespaceKey = uniqueStrings(recallNamespaces).join("\u001f");
411
425
  const storageKey = storages
412
426
  .map((scopedStorage) => {
413
427
  const aliases = Object.entries(scopedStorage.entityAliases)
414
428
  .sort(([left], [right]) => left.localeCompare(right));
415
429
  return (
416
430
  `${path.resolve(scopedStorage.dir)}@${scopedStorage.getMemoryStatusVersion()}` +
417
- `:${scopedStorage.getMemoryCorpusVersion()}:${scopedStorage.hotCacheKeyId()}:${JSON.stringify(aliases)}`
431
+ `:${scopedStorage.getMemoryCorpusVersion()}:${scopedStorage.getEntityMutationVersion()}` +
432
+ `:${scopedStorage.hotCacheKeyId()}:${JSON.stringify(aliases)}`
418
433
  );
419
434
  })
420
- .sort()
421
435
  .join("\u001f");
422
- return `${namespaceKey}\u001e${storageKey}`;
436
+ return `${namespaceKey}\u001e${storageKey}\u001e${nativeRevision}`;
423
437
  }
424
438
 
425
439
  function rememberNamespaceEntityIndex(key: string, index: EntityMentionIndex): void {
@@ -1030,6 +1044,9 @@ export async function buildEntityRecallSection(options: BuildEntityRecallSection
1030
1044
  resolveNamespaceCapabilities(options.config).namespaces &&
1031
1045
  options.namespaceStorage !== undefined &&
1032
1046
  (options.recallNamespaces?.length ?? 0) > 0;
1047
+ if (namespaceScoped) {
1048
+ nativeChunks = await readNativeChunks(options.config, options.recallNamespaces);
1049
+ }
1033
1050
  const resolvedStorages = namespaceScoped
1034
1051
  ? await resolveEntityIndexStorages(
1035
1052
  options.storage,
@@ -1039,8 +1056,12 @@ export async function buildEntityRecallSection(options: BuildEntityRecallSection
1039
1056
  )
1040
1057
  : undefined;
1041
1058
  const namespaceCacheKey =
1042
- resolvedStorages && options.recallNamespaces
1043
- ? namespaceEntityIndexCacheKey(resolvedStorages, options.recallNamespaces)
1059
+ resolvedStorages && options.recallNamespaces && nativeChunks
1060
+ ? namespaceEntityIndexCacheKey(
1061
+ resolvedStorages,
1062
+ options.recallNamespaces,
1063
+ nativeEntityIndexRevision(nativeChunks),
1064
+ )
1044
1065
  : undefined;
1045
1066
  let index: EntityMentionIndex | undefined = namespaceCacheKey
1046
1067
  ? namespaceEntityIndexCache.get(namespaceCacheKey)
@@ -0,0 +1,65 @@
1
+ import assert from "node:assert/strict";
2
+ import { mkdir, mkdtemp, rm, writeFile } from "node:fs/promises";
3
+ import os from "node:os";
4
+ import path from "node:path";
5
+ import test from "node:test";
6
+
7
+ import type { EngramAccessService } from "./access-service.js";
8
+ import { externalWikiSearchOperation } from "./external-wiki-access.js";
9
+ import type { ExternalWikiRoot } from "./external-wiki.js";
10
+
11
+ async function fixtureRoot(): Promise<ExternalWikiRoot> {
12
+ const rootDir = await mkdtemp(path.join(os.tmpdir(), "remnic-external-wiki-access-"));
13
+ await mkdir(path.join(rootDir, "wiki"), { recursive: true });
14
+ await writeFile(
15
+ path.join(rootDir, "INDEX.md"),
16
+ "- [[wiki/planning|Planning Systems]] - deterministic planner fan-out\n",
17
+ "utf8"
18
+ );
19
+ await writeFile(
20
+ path.join(rootDir, "wiki", "planning.md"),
21
+ "# Planning Systems\n\nDeterministic planner fan-out keeps cited evidence.\n",
22
+ "utf8"
23
+ );
24
+ return {
25
+ id: "planning",
26
+ rootDir,
27
+ enabled: true,
28
+ pagesDir: "wiki",
29
+ indexFile: "INDEX.md",
30
+ indexInQmd: false,
31
+ includeInDefaultRecall: false,
32
+ };
33
+ }
34
+
35
+ test("external wiki operation searches roots from the service config", async () => {
36
+ const root = await fixtureRoot();
37
+ try {
38
+ const service = { configRef: { externalWikis: [root] } } as EngramAccessService;
39
+ const output = await externalWikiSearchOperation.run(
40
+ { query: "deterministic planner", limit: 2, maxCharsPerHit: 200 },
41
+ { service }
42
+ );
43
+ assert.equal(output.result.hits[0]?.wikiId, "planning");
44
+ assert.equal(output.result.hits[0]?.path, "wiki/planning.md");
45
+ } finally {
46
+ await rm(root.rootDir, { recursive: true, force: true });
47
+ }
48
+ });
49
+
50
+ test("external wiki operation rejects empty query and unknown fields", async () => {
51
+ let configRead = false;
52
+ const service = {
53
+ get configRef() {
54
+ configRead = true;
55
+ return { externalWikis: [] };
56
+ },
57
+ } as unknown as EngramAccessService;
58
+
59
+ await assert.rejects(externalWikiSearchOperation.run({ query: " " }, { service }), /query is required/i);
60
+ await assert.rejects(
61
+ externalWikiSearchOperation.run({ query: "topic", unexpected: true }, { service }),
62
+ /unrecognized key/i
63
+ );
64
+ assert.equal(configRead, false);
65
+ });
@@ -0,0 +1,31 @@
1
+ import { z } from "zod";
2
+
3
+ import { defineOperation } from "./access-boundary.js";
4
+ import {
5
+ type ExternalWikiSearchInput,
6
+ type ExternalWikiSearchResult,
7
+ searchExternalWikis,
8
+ } from "./external-wiki-search.js";
9
+
10
+ const externalWikiSearchSchema = z
11
+ .object({
12
+ query: z.string().trim().min(1, "query is required").max(2_048),
13
+ limit: z.number().int().min(1).max(20).optional(),
14
+ wikiId: z.string().trim().min(1).max(256).optional(),
15
+ maxCharsPerHit: z.number().int().min(1).max(8_000).optional(),
16
+ })
17
+ .strict();
18
+
19
+ export interface ExternalWikiSearchOutput {
20
+ readonly result: ExternalWikiSearchResult;
21
+ }
22
+
23
+ export const externalWikiSearchOperation = defineOperation<ExternalWikiSearchInput, ExternalWikiSearchOutput>({
24
+ name: "external_wiki_search",
25
+ description: "Search configured external compiled-wiki roots and return cited snippets.",
26
+ schema: externalWikiSearchSchema,
27
+ fleetWide: true,
28
+ handler: async (input, ctx) => ({
29
+ result: await searchExternalWikis(ctx.service.configRef.externalWikis, input),
30
+ }),
31
+ });