@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
@@ -2112,39 +2112,6 @@ test("grounding scopes nested entity facts to the enclosing entity", () => {
2112
2112
  }]);
2113
2113
  });
2114
2114
 
2115
- test("grounding preserves punctuation in technology identifiers", () => {
2116
- const cppResult = filterExtractionResultBySource(
2117
- {
2118
- facts: [{
2119
- category: "fact",
2120
- content: "Alice uses C++.",
2121
- confidence: 0.9,
2122
- tags: [],
2123
- }],
2124
- profileUpdates: [],
2125
- entities: [],
2126
- questions: [],
2127
- },
2128
- "Alice uses C.",
2129
- );
2130
- const plainCResult = filterExtractionResultBySource(
2131
- {
2132
- facts: [{
2133
- category: "fact",
2134
- content: "Alice uses C.",
2135
- confidence: 0.9,
2136
- tags: [],
2137
- }],
2138
- profileUpdates: [],
2139
- entities: [],
2140
- questions: [],
2141
- },
2142
- "Alice uses C++.",
2143
- );
2144
-
2145
- assert.deepEqual(cppResult.facts, []);
2146
- assert.deepEqual(plainCResult.facts, []);
2147
- });
2148
2115
 
2149
2116
  test("grounding requires unresolved questions on the asserted target turn", () => {
2150
2117
  const result = filterExtractionResultBySource(
@@ -2321,6 +2288,214 @@ test("grounding aligns predicates after medial source modifiers", () => {
2321
2288
  }
2322
2289
  });
2323
2290
 
2291
+ test("grounding normalizes regular third-person verb inflections", () => {
2292
+ for (const [source, content] of [
2293
+ ["Alice deploys Acme.", "Alice deployed Acme."],
2294
+ ["Alice designs Atlas.", "Alice designed Atlas."],
2295
+ ["Alice manages Beacon.", "Alice managed Beacon."],
2296
+ ["Alice plans Atlas.", "Alice planned Atlas."],
2297
+ ["Alice stops Beacon.", "Alice stopped Beacon."],
2298
+ ["Alice tries again.", "Alice tried again."],
2299
+ ["They add tags.", "They added tags."],
2300
+ ["They call Alice.", "They called Alice."],
2301
+ ["They fill forms.", "They filled forms."],
2302
+ ["Alice Smith plans Atlas.", "Alice Smith planned Atlas."],
2303
+ ["Alice King works at Acme.", "Alice King worked at Acme."],
2304
+ ]) {
2305
+ const result = filterExtractionResultBySource(
2306
+ {
2307
+ facts: [{ category: "fact", content, confidence: 0.9, tags: [] }],
2308
+ profileUpdates: [],
2309
+ entities: [],
2310
+ questions: [],
2311
+ },
2312
+ source,
2313
+ );
2314
+ assert.deepEqual(result.facts.map((fact) => fact.content), [content]);
2315
+ }
2316
+ });
2317
+
2318
+ test("grounding keeps silent-e compatibility out of proper identifiers", () => {
2319
+ for (const [source, content] of [
2320
+ ["Alice works at Strip.", "Alice works at Stripe."],
2321
+ ["Alice met Kat.", "Alice met Kate."],
2322
+ ["Alice owns Plan.", "Alice planned."],
2323
+ ]) {
2324
+ const result = filterExtractionResultBySource(
2325
+ {
2326
+ facts: [{ category: "fact", content, confidence: 0.9, tags: [] }],
2327
+ profileUpdates: [],
2328
+ entities: [],
2329
+ questions: [],
2330
+ },
2331
+ source,
2332
+ );
2333
+ assert.deepEqual(result.facts, []);
2334
+ }
2335
+ });
2336
+
2337
+ test("grounding preserves lowercase identifier tokens ending in s", () => {
2338
+ const result = filterExtractionResultBySource(
2339
+ {
2340
+ facts: [{ category: "fact", content: "alice deployed atla.", confidence: 0.9, tags: [] }],
2341
+ profileUpdates: [],
2342
+ entities: [],
2343
+ questions: [],
2344
+ },
2345
+ "alice deployed atlas.",
2346
+ );
2347
+
2348
+ assert.deepEqual(result.facts, []);
2349
+ });
2350
+
2351
+ test("grounding role normalization matches exact-marked identifiers case-insensitively", () => {
2352
+ const result = filterExtractionResultBySource(
2353
+ {
2354
+ facts: [],
2355
+ profileUpdates: ["User works at Stripe."],
2356
+ entities: [],
2357
+ questions: [],
2358
+ },
2359
+ "I work at stripe.",
2360
+ undefined,
2361
+ { profile: "I work at stripe.", identity: "" },
2362
+ );
2363
+
2364
+ assert.deepEqual(result.profileUpdates, ["User works at Stripe."]);
2365
+ });
2366
+
2367
+ test("grounding does not stem role-source identifiers ending in s", () => {
2368
+ for (const content of ["User uses Redi.", "User uses Redis."]) {
2369
+ const result = filterExtractionResultBySource(
2370
+ {
2371
+ facts: [],
2372
+ profileUpdates: [content],
2373
+ entities: [],
2374
+ questions: [],
2375
+ },
2376
+ "I use redis.",
2377
+ undefined,
2378
+ { profile: "I use redis.", identity: "" },
2379
+ );
2380
+ assert.deepEqual(
2381
+ result.profileUpdates,
2382
+ content.endsWith("Redis.") ? [content] : [],
2383
+ );
2384
+ }
2385
+ });
2386
+
2387
+ test("grounding does not treat role-source object plurals as predicates", () => {
2388
+ const result = filterExtractionResultBySource(
2389
+ {
2390
+ facts: [],
2391
+ profileUpdates: ["User planned."],
2392
+ entities: [],
2393
+ questions: [],
2394
+ },
2395
+ "I own plans.",
2396
+ undefined,
2397
+ { profile: "I own plans.", identity: "" },
2398
+ );
2399
+
2400
+ assert.deepEqual(result.profileUpdates, []);
2401
+ });
2402
+
2403
+ test("grounding falls back to explicitly role-labeled source sentences", () => {
2404
+ const result = filterExtractionResultBySource(
2405
+ {
2406
+ facts: [],
2407
+ profileUpdates: ["User prefers tea."],
2408
+ entities: [],
2409
+ questions: [],
2410
+ },
2411
+ "User prefers tea.",
2412
+ undefined,
2413
+ { profile: "", identity: "" },
2414
+ );
2415
+
2416
+ assert.deepEqual(result.profileUpdates, ["User prefers tea."]);
2417
+ });
2418
+
2419
+ test("grounding uses the main source when a role source is omitted", () => {
2420
+ const result = filterExtractionResultBySource(
2421
+ {
2422
+ facts: [],
2423
+ profileUpdates: ["User prefers tea."],
2424
+ entities: [],
2425
+ questions: [],
2426
+ },
2427
+ "I prefer tea.",
2428
+ undefined,
2429
+ { identity: "" },
2430
+ );
2431
+
2432
+ assert.deepEqual(result.profileUpdates, ["User prefers tea."]);
2433
+ });
2434
+
2435
+ test("grounding keeps C, C++, and C# identifiers pairwise distinct", () => {
2436
+ const identifiers = ["C", "C++", "C#"];
2437
+ for (const sourceIdentifier of identifiers) {
2438
+ for (const candidateIdentifier of identifiers) {
2439
+ const content = `Alice uses ${candidateIdentifier}.`;
2440
+ const result = filterExtractionResultBySource(
2441
+ {
2442
+ facts: [{ category: "fact", content, confidence: 0.9, tags: [] }],
2443
+ profileUpdates: [],
2444
+ entities: [],
2445
+ questions: [],
2446
+ },
2447
+ `Alice uses ${sourceIdentifier}.`,
2448
+ );
2449
+ assert.deepEqual(
2450
+ result.facts.map((fact) => fact.content),
2451
+ sourceIdentifier === candidateIdentifier ? [content] : [],
2452
+ );
2453
+ }
2454
+ }
2455
+ });
2456
+
2457
+
2458
+ test("grounding inherits coordinated subjects and predicates", () => {
2459
+ for (const [source, content] of [
2460
+ ["Alice works at Acme and owns Mars.", "Alice owns Mars."],
2461
+ ["Alice uses PostgreSQL, Redis, and Kafka.", "Alice uses Kafka."],
2462
+ ]) {
2463
+ const result = filterExtractionResultBySource(
2464
+ {
2465
+ facts: [{ category: "fact", content, confidence: 0.9, tags: [] }],
2466
+ profileUpdates: [],
2467
+ entities: [],
2468
+ questions: [],
2469
+ },
2470
+ source,
2471
+ );
2472
+ assert.deepEqual(result.facts.map((fact) => fact.content), [content]);
2473
+ }
2474
+ });
2475
+
2476
+ test("grounding does not inherit across explicit coordinated subjects", () => {
2477
+ for (const [source, content] of [
2478
+ ["Alice works at Acme and Bob owns Mars.", "Alice owns Mars."],
2479
+ ["Alice works at Acme and Bob sleeps.", "Alice sleeps."],
2480
+ ["Alice works at Acme, Bob called Alice, and designed Mars.", "Alice designed Mars."],
2481
+ ["Alice works at Acme and Bob can swim.", "Alice can swim."],
2482
+ ["Acme works with Alice, Acme Labs called Bob, and designed Mars.", "Acme designed Mars."],
2483
+ ["Alice works at Acme and Bob went home.", "Alice went home."],
2484
+ ["Alice works at Acme and Bob ate lunch.", "Alice ate lunch."],
2485
+ ]) {
2486
+ const result = filterExtractionResultBySource(
2487
+ {
2488
+ facts: [{ category: "fact", content, confidence: 0.9, tags: [] }],
2489
+ profileUpdates: [],
2490
+ entities: [],
2491
+ questions: [],
2492
+ },
2493
+ source,
2494
+ );
2495
+ assert.deepEqual(result.facts, []);
2496
+ }
2497
+ });
2498
+
2324
2499
  test("grounding requires causal evidence before removing why questions", () => {
2325
2500
  const question = { question: "Why did Alice deploy Acme?", context: "", priority: 0.5 };
2326
2501
  const unanswered = filterExtractionResultBySource(
@@ -2335,3 +2510,158 @@ test("grounding requires causal evidence before removing why questions", () => {
2335
2510
  );
2336
2511
  assert.deepEqual(answered.questions, []);
2337
2512
  });
2513
+
2514
+ test("grounding rejects partial assertions from source disjunctions", () => {
2515
+ for (const source of [
2516
+ "Alice uses Redis or PostgreSQL.",
2517
+ "Does Alice use Redis or PostgreSQL?\nYes.",
2518
+ ]) {
2519
+ for (const content of ["Alice uses Redis.", "Alice uses PostgreSQL."]) {
2520
+ const result = filterExtractionResultBySource(
2521
+ {
2522
+ facts: [{ category: "fact", content, confidence: 0.9, tags: [] }],
2523
+ profileUpdates: [],
2524
+ entities: [],
2525
+ questions: [],
2526
+ },
2527
+ source,
2528
+ );
2529
+ assert.deepEqual(result.facts, []);
2530
+ }
2531
+ }
2532
+
2533
+ for (const source of [
2534
+ "Alice uses Redis or PostgreSQL.",
2535
+ "Does Alice use Redis or PostgreSQL?\nYes.",
2536
+ ]) {
2537
+ const content = "Alice uses Redis or PostgreSQL.";
2538
+ const result = filterExtractionResultBySource(
2539
+ {
2540
+ facts: [{ category: "fact", content, confidence: 0.9, tags: [] }],
2541
+ profileUpdates: [],
2542
+ entities: [],
2543
+ questions: [],
2544
+ },
2545
+ source,
2546
+ );
2547
+ assert.deepEqual(result.facts.map((fact) => fact.content), [content]);
2548
+ }
2549
+
2550
+ const commonPrefix = filterExtractionResultBySource(
2551
+ {
2552
+ facts: [{
2553
+ category: "fact",
2554
+ content: "Alice uses Redis.",
2555
+ confidence: 0.9,
2556
+ tags: [],
2557
+ }],
2558
+ profileUpdates: [],
2559
+ entities: [],
2560
+ questions: [],
2561
+ },
2562
+ "Alice uses Redis for cache hits or misses.",
2563
+ );
2564
+ assert.deepEqual(
2565
+ commonPrefix.facts.map((fact) => fact.content),
2566
+ ["Alice uses Redis."],
2567
+ );
2568
+ });
2569
+
2570
+ test("grounding aligns object wh-question answers by subject and predicate", () => {
2571
+ for (const [questionText, answer, roleReversedAnswer] of [
2572
+ [
2573
+ "What database does Alice use?",
2574
+ "Alice uses PostgreSQL as the database.",
2575
+ "PostgreSQL uses Alice as the database.",
2576
+ ],
2577
+ ["Who does Alice employ?", "Alice employs Bob.", "Bob employs Alice."],
2578
+ ["Whom does Alice employ?", "Alice employs Bob.", "Bob employs Alice."],
2579
+ ["Who does Alice work with?", "Alice works with Bob.", "Bob works with Alice."],
2580
+ ["Whom does Alice connect to?", "Alice connects to Bob.", "Bob connects to Alice."],
2581
+ ]) {
2582
+ const question = { question: questionText, context: "", priority: 0.5 };
2583
+ const answered = filterExtractionResultBySource(
2584
+ { facts: [], profileUpdates: [], entities: [], questions: [question] },
2585
+ `${questionText}\n${answer}`,
2586
+ );
2587
+ assert.deepEqual(answered.questions, []);
2588
+
2589
+ const roleReversed = filterExtractionResultBySource(
2590
+ { facts: [], profileUpdates: [], entities: [], questions: [question] },
2591
+ `${questionText}\n${roleReversedAnswer}`,
2592
+ );
2593
+ assert.deepEqual(roleReversed.questions, [question]);
2594
+ }
2595
+ });
2596
+
2597
+ test("grounding does not stem verb-like object plurals", () => {
2598
+ const result = filterExtractionResultBySource(
2599
+ {
2600
+ facts: [{
2601
+ category: "fact",
2602
+ content: "Alice sells the plan.",
2603
+ confidence: 0.9,
2604
+ tags: [],
2605
+ }],
2606
+ profileUpdates: [],
2607
+ entities: [],
2608
+ questions: [],
2609
+ },
2610
+ "Alice sells plans.",
2611
+ );
2612
+
2613
+ assert.deepEqual(result.facts, []);
2614
+ });
2615
+
2616
+ test("grounding recognizes capitalized predicates in subjectless role fragments", () => {
2617
+ const result = filterExtractionResultBySource(
2618
+ {
2619
+ facts: [],
2620
+ profileUpdates: ["User uses Redis."],
2621
+ entities: [],
2622
+ questions: [],
2623
+ },
2624
+ "Uses Redis.",
2625
+ undefined,
2626
+ { profile: "Uses Redis.", identity: "" },
2627
+ );
2628
+
2629
+ assert.deepEqual(result.profileUpdates, ["User uses Redis."]);
2630
+ });
2631
+
2632
+ test("grounding keeps sentence-initial plural subjects distinct", () => {
2633
+ const result = filterExtractionResultBySource(
2634
+ {
2635
+ facts: [{
2636
+ category: "fact",
2637
+ content: "Plan is active.",
2638
+ confidence: 0.9,
2639
+ tags: [],
2640
+ }],
2641
+ profileUpdates: [],
2642
+ entities: [],
2643
+ questions: [],
2644
+ },
2645
+ "Plans are active.",
2646
+ );
2647
+
2648
+ assert.deepEqual(result.facts, []);
2649
+ });
2650
+
2651
+ test("grounding preserves plural identifiers after a proper-name copular subject", () => {
2652
+ for (const [source, content] of [
2653
+ ["Alice is atlas.", "Alice is atla."],
2654
+ ["Alice is the atlas.", "Alice is the atla."],
2655
+ ]) {
2656
+ const result = filterExtractionResultBySource(
2657
+ {
2658
+ facts: [{ category: "fact", content, confidence: 0.9, tags: [] }],
2659
+ profileUpdates: [],
2660
+ entities: [],
2661
+ questions: [],
2662
+ },
2663
+ source,
2664
+ );
2665
+ assert.deepEqual(result.facts, []);
2666
+ }
2667
+ });
@@ -205,6 +205,7 @@ test("extraction skips mechanical action telemetry without durable memory cues",
205
205
  profileUpdates: [],
206
206
  entities: [],
207
207
  questions: [],
208
+ extractionSkippedReason: "mechanical_telemetry",
208
209
  });
209
210
  });
210
211
 
@@ -64,6 +64,49 @@ test("aggregate watermark selects the most recent extraction across distinct nam
64
64
  }
65
65
  });
66
66
 
67
+ test("aggregate stats sum extraction counts and select the newest consolidation", async () => {
68
+ const fixture = await namespacedFixture();
69
+ try {
70
+ const result = await readAggregateExtractionWatermark({
71
+ config: fixture.config,
72
+ rootStorage: {
73
+ dir: fixture.memoryDir,
74
+ loadMeta: async () => ({
75
+ lastExtractionAt: "2026-07-20T12:00:00.000Z",
76
+ extractionCount: 2,
77
+ lastConsolidationAt: "2026-07-20T13:00:00.000Z",
78
+ }),
79
+ },
80
+ storageForNamespace: async (namespace, rootDir) => ({
81
+ dir: rootDir,
82
+ loadMeta: async () => ({
83
+ lastExtractionAt:
84
+ namespace === "team-a"
85
+ ? "2026-07-21T12:00:00.000Z"
86
+ : "2026-07-22T12:00:00.000Z",
87
+ extractionCount:
88
+ namespace === "team-a"
89
+ ? 3
90
+ : namespace === fixture.config.sharedNamespace
91
+ ? 7
92
+ : 5,
93
+ lastConsolidationAt:
94
+ namespace === "team-a"
95
+ ? "2026-07-23T13:00:00.000Z"
96
+ : "2026-07-21T13:00:00.000Z",
97
+ }),
98
+ }),
99
+ });
100
+
101
+ assert.deepEqual(result.rootStats, {
102
+ extractionCount: 17,
103
+ lastConsolidationAt: "2026-07-23T13:00:00.000Z",
104
+ });
105
+ } finally {
106
+ await rm(fixture.memoryDir, { recursive: true, force: true });
107
+ }
108
+ });
109
+
67
110
  test("a namespace-isolated extraction advances the daemon aggregate watermark", async () => {
68
111
  const fixture = await namespacedFixture();
69
112
  try {
@@ -89,7 +132,14 @@ test("a partial namespace read returns readFailed instead of a survivor's fresh
89
132
  try {
90
133
  const result = await readAggregateExtractionWatermark({
91
134
  config: fixture.config,
92
- rootStorage: storage(fixture.memoryDir, async () => "2026-07-23T12:00:00.000Z"),
135
+ rootStorage: {
136
+ dir: fixture.memoryDir,
137
+ loadMeta: async () => ({
138
+ lastExtractionAt: "2026-07-23T12:00:00.000Z",
139
+ extractionCount: 2,
140
+ lastConsolidationAt: null,
141
+ }),
142
+ },
93
143
  storageForNamespace: async (namespace) =>
94
144
  storage(fixture.namespaceDirs[namespace], async () => {
95
145
  if (namespace === "team-b") throw new Error("meta store unavailable");
@@ -101,6 +151,7 @@ test("a partial namespace read returns readFailed instead of a survivor's fresh
101
151
  assert.equal(result.readFailed, true);
102
152
  assert.match(result.readError ?? "", /namespace watermark unreadable/);
103
153
  assert.match(result.readError ?? "", /meta store unavailable/);
154
+ assert.equal(result.rootStats, undefined, "partial aggregate counters must not be reported");
104
155
  } finally {
105
156
  await rm(fixture.memoryDir, { recursive: true, force: true });
106
157
  }
@@ -136,17 +187,27 @@ test("default root capability check uses normalized aliases for migrated storage
136
187
  rootStorage: storage(fixture.memoryDir, async () => {
137
188
  throw new Error("inactive legacy root is unreadable");
138
189
  }),
139
- storageForNamespace: async (_namespace, rootDir) =>
140
- storage(rootDir, async () =>
141
- path.resolve(rootDir) === path.resolve(migratedDefaultDir)
142
- ? "2026-07-26T12:00:00.000Z"
143
- : "2026-07-24T12:00:00.000Z",
144
- ),
190
+ storageForNamespace: async (_namespace, rootDir) => ({
191
+ dir: rootDir,
192
+ loadMeta: async () => ({
193
+ lastExtractionAt:
194
+ path.resolve(rootDir) === path.resolve(migratedDefaultDir)
195
+ ? "2026-07-26T12:00:00.000Z"
196
+ : "2026-07-24T12:00:00.000Z",
197
+ extractionCount:
198
+ path.resolve(rootDir) === path.resolve(migratedDefaultDir) ? 7 : 11,
199
+ lastConsolidationAt: null,
200
+ }),
201
+ }),
145
202
  caps: { version: TOKEN_CAPABILITIES_VERSION, namespaces: ["default"] },
146
203
  });
147
204
 
148
205
  assert.equal(result.lastExtractionAt, "2026-07-26T12:00:00.000Z");
149
206
  assert.equal(result.readFailed, false);
207
+ assert.deepEqual(result.rootStats, {
208
+ extractionCount: 7,
209
+ lastConsolidationAt: null,
210
+ });
150
211
  } finally {
151
212
  await rm(fixture.memoryDir, { recursive: true, force: true });
152
213
  }
@@ -169,6 +230,88 @@ test("unparsable non-null timestamp in namespace store fails the aggregate read"
169
230
  }
170
231
  });
171
232
 
233
+ test("overflowed calendar timestamp in namespace store fails the aggregate read", async () => {
234
+ const fixture = await namespacedFixture();
235
+ try {
236
+ const result = await readAggregateExtractionWatermark({
237
+ config: fixture.config,
238
+ rootStorage: storage(fixture.memoryDir, async () => "2026-07-20T12:00:00.000Z"),
239
+ storageForNamespace: async (namespace) =>
240
+ storage(
241
+ fixture.namespaceDirs[namespace],
242
+ async () =>
243
+ namespace === "team-a"
244
+ ? "2026-02-30T12:00:00.000Z"
245
+ : "2026-07-25T12:00:00.000Z",
246
+ ),
247
+ });
248
+
249
+ assert.equal(result.lastExtractionAt, null);
250
+ assert.equal(result.readFailed, true);
251
+ assert.match(result.readError ?? "", /watermark timestamp invalid/);
252
+ } finally {
253
+ await rm(fixture.memoryDir, { recursive: true, force: true });
254
+ }
255
+ });
256
+
257
+ test("valid ISO timestamp variants remain eligible for aggregate watermark selection", async () => {
258
+ const fixture = await namespacedFixture();
259
+ try {
260
+ const result = await readAggregateExtractionWatermark({
261
+ config: fixture.config,
262
+ rootStorage: storage(fixture.memoryDir, async () => "2026-07-19t24:00:00z"),
263
+ storageForNamespace: async (namespace) =>
264
+ storage(
265
+ fixture.namespaceDirs[namespace],
266
+ async () =>
267
+ namespace === "team-a"
268
+ ? "2026-07-20t12:00:00z"
269
+ : "2026-07-20T08:00:00-0500",
270
+ ),
271
+ });
272
+
273
+ assert.equal(result.lastExtractionAt, "2026-07-20T08:00:00-0500");
274
+ assert.equal(result.readFailed, false);
275
+ } finally {
276
+ await rm(fixture.memoryDir, { recursive: true, force: true });
277
+ }
278
+ });
279
+
280
+ test("overflowed consolidation timestamp in namespace store fails the aggregate read", async () => {
281
+ const fixture = await namespacedFixture();
282
+ try {
283
+ const result = await readAggregateExtractionWatermark({
284
+ config: fixture.config,
285
+ rootStorage: {
286
+ dir: fixture.memoryDir,
287
+ loadMeta: async () => ({
288
+ lastExtractionAt: "2026-07-20T12:00:00.000Z",
289
+ extractionCount: 2,
290
+ lastConsolidationAt: "2026-07-20T13:00:00.000Z",
291
+ }),
292
+ },
293
+ storageForNamespace: async (namespace) => ({
294
+ dir: fixture.namespaceDirs[namespace],
295
+ loadMeta: async () => ({
296
+ lastExtractionAt: "2026-07-21T12:00:00.000Z",
297
+ extractionCount: 3,
298
+ lastConsolidationAt:
299
+ namespace === "team-a"
300
+ ? "2026-02-30T13:00:00.000Z"
301
+ : "2026-07-21T13:00:00.000Z",
302
+ }),
303
+ }),
304
+ });
305
+
306
+ assert.equal(result.lastExtractionAt, null);
307
+ assert.equal(result.readFailed, true);
308
+ assert.equal(result.rootStats, undefined);
309
+ assert.match(result.readError ?? "", /consolidation timestamp invalid/);
310
+ } finally {
311
+ await rm(fixture.memoryDir, { recursive: true, force: true });
312
+ }
313
+ });
314
+
172
315
  test("namespace discovery I/O failure is an explicit incomplete read", async () => {
173
316
  const memoryDir = await mkdtemp(path.join(os.tmpdir(), "remnic-extraction-watermark-enumeration-"));
174
317
  try {
package/src/extraction.ts CHANGED
@@ -1161,7 +1161,13 @@ export class ExtractionEngine {
1161
1161
  };
1162
1162
  if (renderedConversation.trim().length === 0) {
1163
1163
  log.debug("extraction skipped — conversation only contained non-memory work-layer context");
1164
- return { facts: [], profileUpdates: [], entities: [], questions: [] };
1164
+ return {
1165
+ facts: [],
1166
+ profileUpdates: [],
1167
+ entities: [],
1168
+ questions: [],
1169
+ extractionSkippedReason: "conversation_only_non_memory",
1170
+ };
1165
1171
  }
1166
1172
  if (
1167
1173
  lifecycleCaps.extractionTelemetryPrefilter &&
@@ -1173,6 +1179,7 @@ export class ExtractionEngine {
1173
1179
  profileUpdates: [],
1174
1180
  entities: [],
1175
1181
  questions: [],
1182
+ extractionSkippedReason: "mechanical_telemetry",
1176
1183
  };
1177
1184
  }
1178
1185
 
package/src/index.ts CHANGED
@@ -28,6 +28,7 @@ export { resolvePluginEntry, type PluginEntryResolverOptions } from "./plugin-en
28
28
 
29
29
  export { parseConfig, isOpenaiApiKeyDisabled, resolveEnvVars } from "./config.js";
30
30
  export { resolveRemnicConfigRecord } from "./config-record.js";
31
+ export * from "./external-wiki.js";
31
32
  export {
32
33
  parseFlexibleIsoTimestamp,
33
34
  parseIsoOffsetTimestamp,
@@ -111,6 +112,7 @@ export {
111
112
  serializeEntityFile,
112
113
  type MemoryWriteResult,
113
114
  } from "./storage.js";
115
+ export { withRawEntityPageMutation } from "./storage/entity-canonical-id-lock.js";
114
116
  export {
115
117
  composeMemoryEnvelope,
116
118
  buildAccessWriteRequestFingerprint,
@@ -836,6 +838,7 @@ export {
836
838
  OFFLINE_SYNC_CHANGESET_FORMAT,
837
839
  OFFLINE_SYNC_FILE_CONTENT_MAX_CHUNK_BYTES,
838
840
  OFFLINE_SYNC_FILE_CONTENT_TRANSFER_CHUNK_BYTES,
841
+ OFFLINE_SYNC_MAX_MTIME_MS,
839
842
  OFFLINE_SYNC_SNAPSHOT_BASE_MAX_BODY_BYTES,
840
843
  OFFLINE_SYNC_SNAPSHOT_FORMAT,
841
844
  OFFLINE_SYNC_STATE_VERSION,
@@ -850,8 +853,10 @@ export {
850
853
  compileOfflineSyncExcludeGlobs,
851
854
  defaultOfflineSyncStatePath,
852
855
  fileStatesFromSnapshot,
856
+ filterOfflineSyncDeletionRevisions,
853
857
  globToRegExp,
854
858
  iterateOfflineSyncSnapshotFileRecords,
859
+ isInternalRemnicStatePath,
855
860
  normalizeOfflineSyncChangeset,
856
861
  normalizeOfflineSyncSnapshot,
857
862
  offlineSyncStateFromSnapshot,
@@ -868,9 +873,12 @@ export {
868
873
  type OfflineSyncChange,
869
874
  type OfflineSyncChangeset,
870
875
  type OfflineSyncConflict,
876
+ type OfflineSyncDeletionRevision,
877
+ type OfflineSyncFileDeleteTarget,
871
878
  type OfflineSyncFileDigest,
872
879
  type OfflineSyncFileRecord,
873
880
  type OfflineSyncFileContentChunk,
881
+ type OfflineSyncRecordDeletionRevision,
874
882
  type OfflineSyncFileState,
875
883
  type OfflineSyncFileTarget,
876
884
  type OfflineSyncFileWriteTarget,
@@ -35,6 +35,7 @@ export const MCP_READ_ONLY_TOOL_SUFFIXES: Readonly<Record<string, true>> = {
35
35
  identity_anchor_get: true,
36
36
  memory_identity: true,
37
37
  memory_search: true,
38
+ external_wiki_search: true,
38
39
  memory_profile: true,
39
40
  memory_entities_list: true,
40
41
  memory_questions: true,