@remnic/core 9.69.33 → 9.69.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (766) hide show
  1. package/dist/access-admin-ops-surface.d.ts +14 -11
  2. package/dist/access-admin-ops-surface.js +65 -60
  3. package/dist/access-audit.js +2 -2
  4. package/dist/access-authorization-probe.d.ts +14 -11
  5. package/dist/access-authorization-probe.js +66 -61
  6. package/dist/access-boundary.d.ts +14 -11
  7. package/dist/access-boundary.js +65 -60
  8. package/dist/access-cli.js +137 -133
  9. package/dist/access-cli.js.map +1 -1
  10. package/dist/access-coding-context-resolution.d.ts +3 -1
  11. package/dist/access-coding-context-resolution.js +3 -3
  12. package/dist/access-extraction-force-flush.d.ts +14 -11
  13. package/dist/access-extraction-force-flush.js +65 -60
  14. package/dist/access-health-types.d.ts +3 -1
  15. package/dist/access-http-briefing.d.ts +14 -11
  16. package/dist/access-http-briefing.js +66 -61
  17. package/dist/access-http-lcm-compaction.d.ts +14 -11
  18. package/dist/access-http-lifecycle-flush.d.ts +14 -11
  19. package/dist/access-http-offline-stream.d.ts +14 -11
  20. package/dist/access-http-query.d.ts +4 -2
  21. package/dist/access-http-query.js +67 -62
  22. package/dist/access-http.d.ts +15 -12
  23. package/dist/access-http.js +86 -82
  24. package/dist/access-identity-continuity-surface.d.ts +12 -9
  25. package/dist/access-identity-continuity-surface.js +65 -60
  26. package/dist/access-lcm-surface.d.ts +14 -11
  27. package/dist/access-lcm-surface.js +65 -60
  28. package/dist/access-mcp.d.ts +14 -11
  29. package/dist/access-mcp.js +74 -70
  30. package/dist/access-memory-search-fanout.d.ts +4 -2
  31. package/dist/{access-namespace-preflight-DMR-jOMS.d.ts → access-namespace-preflight-D8qri11P.d.ts} +1 -1
  32. package/dist/access-namespace-preflight.d.ts +5 -3
  33. package/dist/access-namespace-preflight.js +65 -60
  34. package/dist/access-observe-transcript.d.ts +12 -9
  35. package/dist/access-observe-transcript.js +3 -3
  36. package/dist/access-observe-write-surface.d.ts +16 -13
  37. package/dist/access-observe-write-surface.js +65 -60
  38. package/dist/access-offline-manifest.d.ts +48 -11
  39. package/dist/access-offline-manifest.js +18 -16
  40. package/dist/access-operations-batch.js +68 -64
  41. package/dist/access-operations.d.ts +15 -12
  42. package/dist/access-operations.js +73 -69
  43. package/dist/access-recall-concurrency.d.ts +14 -11
  44. package/dist/access-recall-concurrency.js +65 -60
  45. package/dist/access-recall-response.d.ts +14 -11
  46. package/dist/access-recall-response.js +65 -60
  47. package/dist/access-recall-surface.d.ts +14 -11
  48. package/dist/access-recall-surface.js +65 -60
  49. package/dist/access-schema.d.ts +56 -13
  50. package/dist/access-schema.js +15 -1
  51. package/dist/{access-service-CJQoQvRa.d.ts → access-service-CKu5ixg9.d.ts} +52 -50
  52. package/dist/access-service-helpers.d.ts +14 -11
  53. package/dist/access-service.d.ts +14 -11
  54. package/dist/access-service.js +65 -60
  55. package/dist/access-surface-catalog.d.ts +14 -11
  56. package/dist/access-surface-catalog.js +67 -62
  57. package/dist/access-surface-catalog.js.map +1 -1
  58. package/dist/access-wearables-meetings-surface.d.ts +5 -3
  59. package/dist/action-confidence.d.ts +3 -1
  60. package/dist/active-memory-bridge.d.ts +3 -1
  61. package/dist/active-memory-bridge.js +2 -2
  62. package/dist/active-recall.d.ts +3 -1
  63. package/dist/active-recall.js +12 -10
  64. package/dist/active-recall.js.map +1 -1
  65. package/dist/activity/digest.d.ts +3 -1
  66. package/dist/adapters/index.d.ts +46 -1
  67. package/dist/adapters/index.js +10 -6
  68. package/dist/adapters/registry.js +2 -2
  69. package/dist/ambient-provenance.d.ts +3 -1
  70. package/dist/artifact-search.d.ts +3 -1
  71. package/dist/{auto-sync-NSHLUAQI.js → auto-sync-4YFATLFQ.js} +10 -9
  72. package/dist/{auto-sync-NSHLUAQI.js.map → auto-sync-4YFATLFQ.js.map} +1 -1
  73. package/dist/behavior-learner.d.ts +3 -1
  74. package/dist/behavior-signals.d.ts +3 -1
  75. package/dist/bootstrap.d.ts +12 -9
  76. package/dist/briefing-window.d.ts +4 -2
  77. package/dist/briefing.d.ts +4 -2
  78. package/dist/briefing.js +26 -25
  79. package/dist/buffer-surprise-report.d.ts +3 -1
  80. package/dist/buffer-turn-helpers.d.ts +3 -1
  81. package/dist/buffer.d.ts +4 -2
  82. package/dist/buffer.js +11 -10
  83. package/dist/bulk-import/index.d.ts +5 -3
  84. package/dist/calibration.d.ts +3 -1
  85. package/dist/calibration.js +3 -2
  86. package/dist/calibration.js.map +1 -1
  87. package/dist/capabilities.d.ts +3 -1
  88. package/dist/{capsule-merge-IPG4IOFP.js → capsule-merge-ZCXUPLNJ.js} +2 -2
  89. package/dist/{catalog-8O9KY9eA.d.ts → catalog-Bq1AxZwF.d.ts} +1 -1
  90. package/dist/causal-behavior.d.ts +3 -1
  91. package/dist/causal-consolidation.d.ts +3 -1
  92. package/dist/causal-consolidation.js +27 -26
  93. package/dist/causal-consolidation.js.map +1 -1
  94. package/dist/causal-trajectory-graph.d.ts +3 -1
  95. package/dist/{chunk-CDKHKZL5.js → chunk-2524MOWK.js} +2 -2
  96. package/dist/{chunk-HVAEXYPL.js → chunk-255PC37A.js} +47 -25
  97. package/dist/chunk-255PC37A.js.map +1 -0
  98. package/dist/{chunk-2C3S7J2S.js → chunk-2BQ4ZIWC.js} +741 -28
  99. package/dist/chunk-2BQ4ZIWC.js.map +1 -0
  100. package/dist/{chunk-RKBLRTNT.js → chunk-2YLMUME2.js} +2 -2
  101. package/dist/{chunk-QOIOACIE.js → chunk-326KUXIR.js} +15 -648
  102. package/dist/chunk-326KUXIR.js.map +1 -0
  103. package/dist/{chunk-DBQWVT2H.js → chunk-3CBI2ZSA.js} +2 -2
  104. package/dist/{chunk-MWFGUESQ.js → chunk-3FJKJ5UZ.js} +2 -2
  105. package/dist/{chunk-NZXEK3UF.js → chunk-3Q3N35W7.js} +2 -2
  106. package/dist/{chunk-YYGZJPOK.js → chunk-42DJ235G.js} +2 -2
  107. package/dist/{chunk-SO7SV523.js → chunk-4MDKNUV4.js} +1 -1
  108. package/dist/chunk-4MDKNUV4.js.map +1 -0
  109. package/dist/chunk-5HYUUFMQ.js +1280 -0
  110. package/dist/chunk-5HYUUFMQ.js.map +1 -0
  111. package/dist/{chunk-2JVJ7UHC.js → chunk-5JG5EBVL.js} +4 -2
  112. package/dist/chunk-5JG5EBVL.js.map +1 -0
  113. package/dist/{chunk-HV7OY4DM.js → chunk-5VAF4ID4.js} +643 -202
  114. package/dist/chunk-5VAF4ID4.js.map +1 -0
  115. package/dist/{chunk-N7RWREIQ.js → chunk-65RENJGB.js} +6 -1
  116. package/dist/chunk-65RENJGB.js.map +1 -0
  117. package/dist/{chunk-JTH2SE6B.js → chunk-6J6K3STG.js} +8 -8
  118. package/dist/{chunk-H4VH5VIB.js → chunk-776GVKL7.js} +2 -2
  119. package/dist/{chunk-BUTCAMJM.js → chunk-A2YQL2FF.js} +5 -5
  120. package/dist/chunk-A5UQ52YQ.js +211 -0
  121. package/dist/chunk-A5UQ52YQ.js.map +1 -0
  122. package/dist/{chunk-X2NFFBTO.js → chunk-A7GQBJP5.js} +4 -4
  123. package/dist/{chunk-CGC5UQCF.js → chunk-AKE4GGQ3.js} +2 -2
  124. package/dist/{chunk-B325AGLK.js → chunk-AZSKROVQ.js} +2 -2
  125. package/dist/{chunk-I5DZ3WGR.js → chunk-BJETIR53.js} +3 -3
  126. package/dist/{chunk-JT3EB7ZL.js → chunk-BNGHPYZU.js} +5 -5
  127. package/dist/chunk-BRZWWUCJ.js +13 -0
  128. package/dist/{chunk-FYDW33ZB.js.map → chunk-BRZWWUCJ.js.map} +1 -1
  129. package/dist/{chunk-3JVLGJCY.js → chunk-C6KRO3SU.js} +2 -2
  130. package/dist/{chunk-5NANRSCD.js → chunk-CNV2A557.js} +5 -5
  131. package/dist/{chunk-PBGVVDLY.js → chunk-DK4X5B6I.js} +2 -2
  132. package/dist/{chunk-MFDTVQJX.js → chunk-DVOBLPSQ.js} +22 -7
  133. package/dist/chunk-DVOBLPSQ.js.map +1 -0
  134. package/dist/{chunk-N2ZNPHA3.js → chunk-ECKG5WSI.js} +2 -2
  135. package/dist/{chunk-PYLL63BF.js → chunk-EEBQFG5E.js} +9 -9
  136. package/dist/{chunk-ET356KSB.js → chunk-F4TWWUMP.js} +2 -2
  137. package/dist/{chunk-RHQMKJFG.js → chunk-F6IVBYFS.js} +55 -51
  138. package/dist/{chunk-RHQMKJFG.js.map → chunk-F6IVBYFS.js.map} +1 -1
  139. package/dist/{chunk-CLLPJ6QT.js → chunk-FQXJAC3T.js} +2 -2
  140. package/dist/{chunk-JGHXXQ2G.js → chunk-FVJ4D6L7.js} +2 -2
  141. package/dist/{chunk-DD5JFCWM.js → chunk-GCBIXUPT.js} +2 -2
  142. package/dist/{chunk-MN3LK3KN.js → chunk-GLZH5VEN.js} +2 -2
  143. package/dist/{chunk-S7T2TY65.js → chunk-HC4GFLMQ.js} +3 -3
  144. package/dist/{chunk-EQHDH4C2.js → chunk-HUT2JR6I.js} +3 -3
  145. package/dist/{chunk-UUQG7HAD.js → chunk-HXSAWV3A.js} +4 -4
  146. package/dist/{chunk-XXIHX75O.js → chunk-J7PB5UQ4.js} +3 -3
  147. package/dist/{chunk-UGPUYIET.js → chunk-JHZCXUQI.js} +221 -400
  148. package/dist/chunk-JHZCXUQI.js.map +1 -0
  149. package/dist/{chunk-LTIZHLV7.js → chunk-JR6H5CYS.js} +2 -2
  150. package/dist/{chunk-FCSZ4K2X.js → chunk-JR6PP7UM.js} +3 -3
  151. package/dist/{chunk-TCUKRAMK.js → chunk-JRWW7GM6.js} +10 -10
  152. package/dist/{chunk-Q726HSJO.js → chunk-JSRVXI6E.js} +16 -15
  153. package/dist/chunk-JSRVXI6E.js.map +1 -0
  154. package/dist/{chunk-DB5TGMLZ.js → chunk-JZ2CHRLB.js} +6 -4
  155. package/dist/{chunk-DB5TGMLZ.js.map → chunk-JZ2CHRLB.js.map} +1 -1
  156. package/dist/{chunk-JEIXTYVG.js → chunk-L2QLDZJC.js} +46 -17
  157. package/dist/chunk-L2QLDZJC.js.map +1 -0
  158. package/dist/{chunk-PL7FYKHT.js → chunk-L2WQVSKP.js} +2 -2
  159. package/dist/{chunk-JSN44KIB.js → chunk-LEMD7WZJ.js} +9 -9
  160. package/dist/{chunk-VZWXFXLX.js → chunk-LMCD5W5B.js} +2 -2
  161. package/dist/{chunk-7BMXZCOT.js → chunk-LNDLXMH6.js} +3 -3
  162. package/dist/{chunk-3QQTXYZ6.js → chunk-LSLCFCCQ.js} +2 -1
  163. package/dist/chunk-LSLCFCCQ.js.map +1 -0
  164. package/dist/{chunk-EONF76DT.js → chunk-LYDJRF45.js} +2 -2
  165. package/dist/{chunk-MKD3OMPS.js → chunk-M3MYMWXG.js} +2 -2
  166. package/dist/{chunk-VGXM5B4H.js → chunk-MNIPH6LD.js} +2 -2
  167. package/dist/{chunk-A7XEPMQ6.js → chunk-MVAQ2WM3.js} +6 -6
  168. package/dist/chunk-MVAQ2WM3.js.map +1 -0
  169. package/dist/{chunk-6N3TQFZU.js → chunk-NN4JEFON.js} +3 -3
  170. package/dist/chunk-NPNSKE76.js +220 -0
  171. package/dist/chunk-NPNSKE76.js.map +1 -0
  172. package/dist/{chunk-MOZXTRC2.js → chunk-OQ7SSRXP.js} +19 -19
  173. package/dist/{chunk-XU6OEECT.js → chunk-OQQXGYMX.js} +3 -3
  174. package/dist/{chunk-4MHYKEOM.js → chunk-OS2AT2JU.js} +10 -10
  175. package/dist/{chunk-N57A4KPV.js → chunk-P3ONDDIJ.js} +2 -2
  176. package/dist/chunk-PCEYGOSL.js +66 -0
  177. package/dist/chunk-PCEYGOSL.js.map +1 -0
  178. package/dist/{chunk-R3HKWWUB.js → chunk-PHP3MUGF.js} +2 -2
  179. package/dist/{chunk-EEOUMG3J.js → chunk-PWPIERBM.js} +38 -6
  180. package/dist/chunk-PWPIERBM.js.map +1 -0
  181. package/dist/chunk-Q4AUIFUA.js +111 -0
  182. package/dist/chunk-Q4AUIFUA.js.map +1 -0
  183. package/dist/{chunk-P3SB5BNT.js → chunk-QATYVTP7.js} +2 -2
  184. package/dist/{chunk-LSYDG6MJ.js → chunk-QBLDCI6E.js} +2 -2
  185. package/dist/{chunk-KCB7F4J7.js → chunk-QURNMKME.js} +2 -2
  186. package/dist/{chunk-XOVKXJEP.js → chunk-R3TLVTWW.js} +3 -3
  187. package/dist/{chunk-XXE5P6HJ.js → chunk-RRZKTSFG.js} +2 -2
  188. package/dist/{chunk-44T3Y7SZ.js → chunk-RUXPVSML.js} +5 -5
  189. package/dist/{chunk-DCJ3YFIC.js → chunk-S2ULTQZR.js} +2 -2
  190. package/dist/{chunk-H272ZPQ3.js → chunk-SHEHQBCG.js} +124 -23
  191. package/dist/chunk-SHEHQBCG.js.map +1 -0
  192. package/dist/{chunk-EEC4PCG5.js → chunk-SZDLX763.js} +2 -2
  193. package/dist/{chunk-E2ZHGBAK.js → chunk-T2JSUEH6.js} +2 -2
  194. package/dist/{chunk-227UFSEQ.js → chunk-TFA6HPOA.js} +2 -2
  195. package/dist/{chunk-BA6WOZOT.js → chunk-TK4FHQRN.js} +4 -4
  196. package/dist/{chunk-W27OW7AB.js → chunk-TKFSXDOB.js} +2 -2
  197. package/dist/chunk-TLHNF6GA.js +647 -0
  198. package/dist/chunk-TLHNF6GA.js.map +1 -0
  199. package/dist/{chunk-7K5Q6COX.js → chunk-TVVEYCNW.js} +4 -4
  200. package/dist/{chunk-FDLDOEO6.js → chunk-UBG4GAEP.js} +51 -6
  201. package/dist/chunk-UBG4GAEP.js.map +1 -0
  202. package/dist/{chunk-CETXNLEX.js → chunk-UDZYNIDJ.js} +2 -2
  203. package/dist/{chunk-H5AFCNGA.js → chunk-UJX4I26O.js} +2 -2
  204. package/dist/{chunk-E6TDQRF6.js → chunk-UYUCCQ46.js} +2 -2
  205. package/dist/{chunk-BLUYQFRH.js → chunk-VELCIWJZ.js} +15 -11
  206. package/dist/chunk-VELCIWJZ.js.map +1 -0
  207. package/dist/{chunk-OQDPBRQ6.js → chunk-VYXDUPYE.js} +2 -2
  208. package/dist/{chunk-ZG74PWRW.js → chunk-VZAKYDMJ.js} +2 -2
  209. package/dist/chunk-W6IJMWTZ.js +72 -0
  210. package/dist/chunk-W6IJMWTZ.js.map +1 -0
  211. package/dist/{chunk-NB5BCFUY.js → chunk-WHHEPAO3.js} +4 -4
  212. package/dist/{chunk-H3TKENU4.js → chunk-WIKO4SCR.js} +5 -5
  213. package/dist/{chunk-TX2UTLXC.js → chunk-WPDKBUWX.js} +2 -2
  214. package/dist/{chunk-YFLLGRXO.js → chunk-X2QPKLPL.js} +2 -2
  215. package/dist/{chunk-PFFZWDPE.js → chunk-XCOV45MO.js} +3 -3
  216. package/dist/{chunk-5BCNEBEN.js → chunk-XPJNT6PI.js} +4 -4
  217. package/dist/chunk-XW2T4QAW.js +1 -0
  218. package/dist/{chunk-J7HFPA6O.js → chunk-Y63ZFP4X.js} +2 -2
  219. package/dist/{chunk-D223ZDQV.js → chunk-YEDVOYL2.js} +2 -2
  220. package/dist/{chunk-TLPZ6MKZ.js → chunk-YEN4TREG.js} +541 -5
  221. package/dist/chunk-YEN4TREG.js.map +1 -0
  222. package/dist/{chunk-22FVR2KE.js → chunk-YJ6VCDMZ.js} +6 -2
  223. package/dist/chunk-YJ6VCDMZ.js.map +1 -0
  224. package/dist/{chunk-RC5DXXWC.js → chunk-YM7YN37H.js} +2 -2
  225. package/dist/{chunk-BPJNF7J2.js → chunk-YNN26CIZ.js} +2 -2
  226. package/dist/{chunk-VLXBE57O.js → chunk-YVGXH72Y.js} +2 -2
  227. package/dist/{chunk-YQAXP5AC.js → chunk-YXLUTALO.js} +5 -5
  228. package/dist/{chunk-DGGB65KC.js → chunk-Z7ACR6MJ.js} +3 -3
  229. package/dist/{chunk-X35W4S3L.js → chunk-ZBEGS7OB.js} +4 -4
  230. package/dist/{chunk-O75CRYGF.js → chunk-ZEFVK7XC.js} +1 -1
  231. package/dist/chunk-ZEFVK7XC.js.map +1 -0
  232. package/dist/{chunk-XUE46UYW.js → chunk-ZLN7AROH.js} +6 -6
  233. package/dist/{chunk-E6JA6XWY.js → chunk-ZTG4P7NZ.js} +1013 -1317
  234. package/dist/chunk-ZTG4P7NZ.js.map +1 -0
  235. package/dist/{chunk-HK32G473.js → chunk-ZWEZXVYH.js} +2 -2
  236. package/dist/{cli-D57e2Mqt.d.ts → cli-Bk7Ctql4.d.ts} +5 -5
  237. package/dist/cli-fallback.d.ts +11 -4
  238. package/dist/cli-fallback.js +5 -1
  239. package/dist/cli.d.ts +16 -13
  240. package/dist/cli.js +107 -103
  241. package/dist/coding/export-okf-codegraph.d.ts +3 -1
  242. package/dist/coding/export-okf-codegraph.js +32 -30
  243. package/dist/coding/export-okf-codegraph.js.map +1 -1
  244. package/dist/coding/pre-action-gate.d.ts +3 -1
  245. package/dist/compat/checks.js +2 -2
  246. package/dist/compat/codex-cli-fallback.d.ts +1 -1
  247. package/dist/compat/codex-cli-fallback.js +5 -1
  248. package/dist/compat/codex-cli-fallback.js.map +1 -1
  249. package/dist/compounding/engine.d.ts +4 -2
  250. package/dist/compounding/engine.js +27 -26
  251. package/dist/compounding/preference-consolidator.d.ts +3 -1
  252. package/dist/compression-optimizer.d.ts +3 -1
  253. package/dist/config.d.ts +3 -1
  254. package/dist/config.js +12 -10
  255. package/dist/connectors/codex-materialize-runner.d.ts +3 -1
  256. package/dist/connectors/codex-materialize-runner.js +26 -25
  257. package/dist/connectors/codex-materialize.d.ts +3 -1
  258. package/dist/connectors/index.d.ts +3 -1
  259. package/dist/connectors/index.js +28 -27
  260. package/dist/consolidation-provenance-check.d.ts +4 -2
  261. package/dist/consolidation-undo.d.ts +4 -2
  262. package/dist/contradiction/index.d.ts +5 -3
  263. package/dist/contradiction/index.js +5 -5
  264. package/dist/{contradiction-scan-NOYMFG66.js → contradiction-scan-GVD4JJ7B.js} +3 -3
  265. package/dist/converge-config.d.ts +3 -1
  266. package/dist/convergence-refresh.d.ts +4 -2
  267. package/dist/convergence-refresh.js +28 -27
  268. package/dist/conversation-index/backend.d.ts +3 -1
  269. package/dist/conversation-index/backend.js +3 -3
  270. package/dist/conversation-index/chunker.d.ts +3 -1
  271. package/dist/conversation-index/faiss-adapter.d.ts +3 -1
  272. package/dist/conversation-index/faiss-adapter.js +2 -2
  273. package/dist/conversation-index/indexer.d.ts +3 -1
  274. package/dist/conversation-index/search.d.ts +3 -1
  275. package/dist/corpus-watermark.d.ts +3 -1
  276. package/dist/corpus-watermark.js +29 -28
  277. package/dist/cross-lingual-recall.d.ts +3 -1
  278. package/dist/day-summary.d.ts +3 -1
  279. package/dist/deep-recall-http-glue.d.ts +14 -11
  280. package/dist/deep-recall-http-glue.js +12 -2
  281. package/dist/deep-recall-mcp-tools.d.ts +14 -11
  282. package/dist/deep-recall-policy-llm.d.ts +3 -1
  283. package/dist/deep-recall-policy-llm.js +4 -3
  284. package/dist/deep-recall-seeds.d.ts +3 -1
  285. package/dist/delinearize.d.ts +3 -1
  286. package/dist/dependency-propagation-config.d.ts +3 -1
  287. package/dist/{dependency-propagation-delivery-CmniEsUK.d.ts → dependency-propagation-delivery-DLiAtj25.d.ts} +1 -1
  288. package/dist/direct-answer-wiring.d.ts +3 -1
  289. package/dist/direct-answer.d.ts +3 -1
  290. package/dist/embedding-fallback.d.ts +3 -1
  291. package/dist/enrichment/index.d.ts +3 -1
  292. package/dist/entity-origin-fields.d.ts +3 -1
  293. package/dist/entity-retrieval.d.ts +4 -2
  294. package/dist/entity-retrieval.js +26 -25
  295. package/dist/entity-schema.d.ts +3 -1
  296. package/dist/episodic-context.d.ts +3 -1
  297. package/dist/eval-trajectory-contracts.d.ts +3 -1
  298. package/dist/eval-trajectory-store.d.ts +3 -1
  299. package/dist/eval-trajectory.d.ts +3 -1
  300. package/dist/explicit-capture.d.ts +12 -9
  301. package/dist/explicit-capture.js +6 -6
  302. package/dist/external-wiki-access.d.ts +14 -11
  303. package/dist/external-wiki-access.js +66 -61
  304. package/dist/external-wiki-collection-registration.d.ts +3 -1
  305. package/dist/external-wiki-collection.d.ts +3 -1
  306. package/dist/external-wiki-mcp-tools.d.ts +14 -11
  307. package/dist/extraction-error-classification.d.ts +3 -1
  308. package/dist/extraction-faithfulness.d.ts +3 -1
  309. package/dist/extraction-faithfulness.js +4 -3
  310. package/dist/extraction-judge-telemetry.d.ts +3 -1
  311. package/dist/extraction-judge-training.d.ts +3 -1
  312. package/dist/extraction-judge.d.ts +3 -1
  313. package/dist/extraction-judge.js +5 -4
  314. package/dist/extraction-liveness.d.ts +3 -1
  315. package/dist/extraction-normalization.d.ts +3 -1
  316. package/dist/extraction-prompt.d.ts +3 -1
  317. package/dist/extraction-source-grounding-rules.d.ts +3 -1
  318. package/dist/extraction-source-grounding.d.ts +3 -1
  319. package/dist/extraction.d.ts +3 -1
  320. package/dist/extraction.js +38 -36
  321. package/dist/fallback-llm.d.ts +3 -1
  322. package/dist/fallback-llm.js +3 -2
  323. package/dist/{first-start-migration-RC345GPL.js → first-start-migration-L3UFX5CU.js} +3 -3
  324. package/dist/generic-recall-paths-DbitKJI5.d.ts +23 -0
  325. package/dist/graph-append-error.d.ts +3 -1
  326. package/dist/graph-dashboard-diff.d.ts +3 -1
  327. package/dist/graph-dashboard-key.d.ts +3 -1
  328. package/dist/graph-dashboard-parser.d.ts +3 -1
  329. package/dist/graph-edge-reinforcement.d.ts +3 -1
  330. package/dist/graph-jsonl.d.ts +3 -1
  331. package/dist/graph-path-reconstruction.d.ts +3 -1
  332. package/dist/graph-path-scoring.d.ts +3 -1
  333. package/dist/graph-snapshot.d.ts +3 -1
  334. package/dist/graph.d.ts +3 -1
  335. package/dist/harmonic-retrieval.js +2 -2
  336. package/dist/importance.d.ts +3 -1
  337. package/dist/importers/index.d.ts +3 -1
  338. package/dist/importers/test-utils.d.ts +3 -1
  339. package/dist/in-flight-reads.d.ts +3 -1
  340. package/dist/{index-BTAsSkPG.d.ts → index-BINUgPFo.d.ts} +2 -2
  341. package/dist/index.d.ts +303 -245
  342. package/dist/index.js +316 -214
  343. package/dist/intent.d.ts +3 -1
  344. package/dist/lcm/engine.d.ts +3 -1
  345. package/dist/lcm/engine.js +2 -2
  346. package/dist/lcm/index.d.ts +3 -1
  347. package/dist/lcm/index.js +7 -7
  348. package/dist/lcm/tools.d.ts +3 -1
  349. package/dist/lifecycle.d.ts +3 -1
  350. package/dist/live-connectors-runner.d.ts +3 -1
  351. package/dist/local-llm-config.d.ts +26 -0
  352. package/dist/local-llm-config.js +1 -0
  353. package/dist/local-llm.d.ts +5 -1
  354. package/dist/local-llm.js +3 -3
  355. package/dist/local-model-endpoint.d.ts +3 -1
  356. package/dist/location/index.d.ts +5 -3
  357. package/dist/location/index.js +29 -28
  358. package/dist/maintenance/memory-governance.d.ts +3 -1
  359. package/dist/maintenance/memory-governance.js +26 -25
  360. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +4 -2
  361. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +26 -25
  362. package/dist/maintenance/rebuild-memory-projection.d.ts +4 -2
  363. package/dist/maintenance/rebuild-memory-projection.js +27 -26
  364. package/dist/{maintenance-DCvQGTzL.d.ts → maintenance-ag1gYztC.d.ts} +378 -4
  365. package/dist/mcp-memory-inspector-app.d.ts +14 -11
  366. package/dist/memory-action-policy.d.ts +3 -1
  367. package/dist/memory-cache.d.ts +3 -1
  368. package/dist/memory-controller.d.ts +3 -1
  369. package/dist/memory-lifecycle-ledger-utils.d.ts +3 -1
  370. package/dist/memory-projection-store.d.ts +3 -1
  371. package/dist/memory-provenance.d.ts +3 -1
  372. package/dist/memory-snapshot.d.ts +3 -1
  373. package/dist/memory-subject-cli.d.ts +14 -11
  374. package/dist/memory-subject.d.ts +14 -11
  375. package/dist/memory-worth-outcomes.d.ts +4 -2
  376. package/dist/migrate/from-engram.js +2 -2
  377. package/dist/models-json.d.ts +3 -1
  378. package/dist/namespaces/migrate.d.ts +5 -3
  379. package/dist/namespaces/migrate.js +27 -26
  380. package/dist/namespaces/principal.d.ts +3 -1
  381. package/dist/namespaces/search.d.ts +3 -1
  382. package/dist/namespaces/search.js +8 -8
  383. package/dist/namespaces/storage.d.ts +5 -3
  384. package/dist/namespaces/storage.js +26 -25
  385. package/dist/native-knowledge.d.ts +3 -1
  386. package/dist/network/tailscale.js +2 -2
  387. package/dist/offline-sync-impression-drain.d.ts +3 -1
  388. package/dist/offline-sync-impression-drain.js +6 -6
  389. package/dist/operator-doctor-corpus.d.ts +3 -1
  390. package/dist/operator-doctor-corpus.js +30 -29
  391. package/dist/operator-doctor-replica.d.ts +3 -1
  392. package/dist/operator-toolkit.d.ts +5 -3
  393. package/dist/operator-toolkit.js +44 -42
  394. package/dist/orchestration/compression-guideline-coordinator.d.ts +4 -2
  395. package/dist/orchestration/maintenance.d.ts +6 -4
  396. package/dist/orchestration/maintenance.js +44 -39
  397. package/dist/{orchestrator-CvCsp1tz.d.ts → orchestrator-Cf3G-3Ed.d.ts} +17 -29
  398. package/dist/orchestrator.d.ts +12 -9
  399. package/dist/orchestrator.js +141 -135
  400. package/dist/patterns-cli.d.ts +3 -1
  401. package/dist/{pipeline-JAdwKBS7.d.ts → pipeline-AwB03fw_.d.ts} +1 -1
  402. package/dist/policy-runtime.d.ts +3 -1
  403. package/dist/proactive-contention.d.ts +3 -1
  404. package/dist/provenance.d.ts +3 -1
  405. package/dist/{public-http-h-yWu9rj.d.ts → public-http-BetSQn7q.d.ts} +1 -1
  406. package/dist/{qmd-Cvw9RWKr.d.ts → qmd-Bfaydrfm.d.ts} +1 -1
  407. package/dist/qmd-preflight.d.ts +4 -2
  408. package/dist/qmd-recall-cache.d.ts +3 -1
  409. package/dist/qmd.d.ts +4 -2
  410. package/dist/qmd.js +2 -2
  411. package/dist/recall-concurrency-config.d.ts +3 -1
  412. package/dist/recall-disclosure-escalation.d.ts +3 -1
  413. package/dist/recall-explain-renderer.d.ts +3 -1
  414. package/dist/recall-explain-renderer.js +3 -3
  415. package/dist/recall-memory-map.d.ts +3 -1
  416. package/dist/recall-navigate-access.d.ts +3 -1
  417. package/dist/recall-navigate-access.js +2 -2
  418. package/dist/recall-navigate-disclosure.d.ts +3 -1
  419. package/dist/recall-navigate-disclosure.js +1 -1
  420. package/dist/recall-navigate.d.ts +3 -1
  421. package/dist/recall-navigate.js +2 -2
  422. package/dist/recall-planner-llm.d.ts +3 -1
  423. package/dist/recall-planner-llm.js +3 -2
  424. package/dist/recall-planner-llm.js.map +1 -1
  425. package/dist/recall-state-view-admission.d.ts +57 -0
  426. package/dist/recall-state-view-admission.js +39 -0
  427. package/dist/recall-state-view-admission.js.map +1 -0
  428. package/dist/recall-state-view-inject.js +2 -2
  429. package/dist/recall-state-view-render.js +2 -2
  430. package/dist/recall-state-view-widen.d.ts +18 -1
  431. package/dist/recall-state-view-widen.js +2 -2
  432. package/dist/recall-state-view-wire.d.ts +1 -1
  433. package/dist/recall-state-view-wire.js +3 -3
  434. package/dist/recall-state-view.d.ts +1 -0
  435. package/dist/recall-state-view.js +1 -1
  436. package/dist/recall-state.d.ts +3 -1
  437. package/dist/recall-tag-filter.d.ts +3 -1
  438. package/dist/recall-timings.d.ts +3 -1
  439. package/dist/recall-xray-cli.d.ts +3 -1
  440. package/dist/recall-xray-cli.js +4 -4
  441. package/dist/recall-xray-renderer.d.ts +3 -1
  442. package/dist/recall-xray-renderer.js +3 -3
  443. package/dist/recall-xray.d.ts +10 -1
  444. package/dist/recall-xray.js +2 -2
  445. package/dist/reconcile/cursor.d.ts +12 -2
  446. package/dist/reconcile/cursor.js +6 -4
  447. package/dist/reconcile/cursor.js.map +1 -1
  448. package/dist/reconcile/manifest.d.ts +38 -2
  449. package/dist/reconcile/manifest.js +15 -5
  450. package/dist/reconcile/plan.d.ts +3 -1
  451. package/dist/replay/normalizers/chatgpt.d.ts +3 -1
  452. package/dist/replay/normalizers/claude.d.ts +3 -1
  453. package/dist/replay/normalizers/openclaw.d.ts +3 -1
  454. package/dist/replay/normalizers/shared.d.ts +3 -1
  455. package/dist/replay/runner.d.ts +3 -1
  456. package/dist/replay/types.d.ts +3 -1
  457. package/dist/replica-divergence.d.ts +3 -1
  458. package/dist/replica-peers-config.d.ts +3 -1
  459. package/dist/{resolution-VKATP2HT.js → resolution-OHJZG45O.js} +6 -6
  460. package/dist/resolution-OHJZG45O.js.map +1 -0
  461. package/dist/resolve-auth-token.d.ts +3 -1
  462. package/dist/resume-bundles.js +13 -11
  463. package/dist/retrieval-agents.d.ts +4 -2
  464. package/dist/retrieval-tiers.d.ts +3 -1
  465. package/dist/routing/engine.d.ts +3 -1
  466. package/dist/routing/store.d.ts +3 -1
  467. package/dist/runtime/child-process.d.ts +1 -1
  468. package/dist/runtime/child-process.js +1 -1
  469. package/dist/salvage-envelope.d.ts +3 -1
  470. package/dist/salvage-envelope.js +2 -2
  471. package/dist/{scope-profiles-BShpTPeV.d.ts → scope-profiles-nxTKvjE-.d.ts} +1 -1
  472. package/dist/search/embed-helper.d.ts +3 -1
  473. package/dist/search/factory.d.ts +3 -1
  474. package/dist/search/factory.js +7 -7
  475. package/dist/search/index.d.ts +3 -1
  476. package/dist/search/index.js +11 -11
  477. package/dist/search/lancedb-backend.d.ts +3 -1
  478. package/dist/search/meilisearch-backend.d.ts +3 -1
  479. package/dist/search/noop-backend.d.ts +3 -1
  480. package/dist/search/orama-backend.d.ts +3 -1
  481. package/dist/search/port.d.ts +3 -1
  482. package/dist/search/remote-backend.d.ts +3 -1
  483. package/dist/{semantic-consolidation-CusOpe9F.d.ts → semantic-consolidation-C83DVakV.d.ts} +1 -1
  484. package/dist/semantic-consolidation.d.ts +4 -2
  485. package/dist/semantic-consolidation.js +27 -26
  486. package/dist/semantic-rule-promotion.js +26 -25
  487. package/dist/semantic-rule-verifier.d.ts +3 -1
  488. package/dist/semantic-rule-verifier.js +26 -25
  489. package/dist/{service-BbuVh1eS.d.ts → service-q-xtOoAr.d.ts} +2 -2
  490. package/dist/session-observer-bands.d.ts +3 -1
  491. package/dist/session-observer-state.d.ts +3 -1
  492. package/dist/shared-context/manager.d.ts +3 -1
  493. package/dist/signal.d.ts +3 -1
  494. package/dist/source-agent-qualifier.d.ts +3 -1
  495. package/dist/source-agent-qualifier.js +35 -33
  496. package/dist/standup/build.js +26 -25
  497. package/dist/{storage-BBLLuVTF.d.ts → storage-Ca0MbTfm.d.ts} +67 -6
  498. package/dist/storage.d.ts +5 -3
  499. package/dist/storage.js +25 -24
  500. package/dist/subject-config.d.ts +3 -1
  501. package/dist/subject-config.js +2 -2
  502. package/dist/summarizer.d.ts +3 -1
  503. package/dist/summarizer.js +6 -6
  504. package/dist/summary-snapshot.d.ts +3 -1
  505. package/dist/support-passport/index.d.ts +50 -15
  506. package/dist/support-passport/index.js +73 -64
  507. package/dist/temporal-supersession.d.ts +4 -2
  508. package/dist/temporal-timeline-recall.d.ts +3 -1
  509. package/dist/temporal-validity.d.ts +3 -1
  510. package/dist/threading.d.ts +3 -1
  511. package/dist/tier-migration.d.ts +4 -2
  512. package/dist/tier-routing.d.ts +3 -1
  513. package/dist/tier-routing.js +2 -2
  514. package/dist/{tier-stats-KA6OZX2C.js → tier-stats-VK5PCO2L.js} +3 -3
  515. package/dist/topics.d.ts +3 -1
  516. package/dist/transcript.d.ts +3 -1
  517. package/dist/transfer/capsule-import.js +1 -1
  518. package/dist/transfer/export-okf.d.ts +3 -1
  519. package/dist/transfer/export-okf.js +27 -26
  520. package/dist/transfer/types.d.ts +24 -24
  521. package/dist/trust-score-stage.d.ts +3 -1
  522. package/dist/trust-score.d.ts +3 -1
  523. package/dist/{types-igV4-sbB.d.ts → types-yDgWDkrJ.d.ts} +60 -34
  524. package/dist/types.d.ts +3 -1
  525. package/dist/types.js +1 -1
  526. package/dist/utility-runtime.d.ts +3 -1
  527. package/dist/verified-recall.js +26 -25
  528. package/dist/who-knows-cli.d.ts +14 -11
  529. package/dist/who-knows-cli.js +27 -26
  530. package/dist/who-knows.d.ts +14 -11
  531. package/dist/who-knows.js +26 -25
  532. package/dist/write-envelope.d.ts +5 -2
  533. package/dist/write-envelope.js +3 -1
  534. package/package.json +2 -2
  535. package/src/access-category-alias.test.ts +216 -0
  536. package/src/access-mcp.test.ts +73 -0
  537. package/src/access-mcp.ts +6 -6
  538. package/src/access-observe-write-surface.ts +19 -4
  539. package/src/access-offline-manifest.ts +297 -16
  540. package/src/access-recall-surface.ts +5 -5
  541. package/src/access-schema.ts +76 -7
  542. package/src/access-service.ts +11 -2
  543. package/src/activity/config.test.ts +124 -1
  544. package/src/activity/config.ts +150 -18
  545. package/src/activity/index.ts +3 -0
  546. package/src/activity/journal-extract-storage.test.ts +129 -0
  547. package/src/activity/journal-extract.test.ts +314 -0
  548. package/src/activity/journal-extract.ts +247 -0
  549. package/src/activity/journal-heading.test.ts +24 -1
  550. package/src/activity/journal-heading.ts +36 -0
  551. package/src/activity/journal-read.test.ts +242 -0
  552. package/src/activity/journal-read.ts +183 -0
  553. package/src/activity/journal-source.test.ts +15 -15
  554. package/src/activity/journal-source.ts +21 -14
  555. package/src/activity/journal-state.lock-worker.ts +30 -0
  556. package/src/activity/journal-state.test.ts +144 -0
  557. package/src/activity/journal-state.ts +107 -0
  558. package/src/activity/journal-strip.test.ts +106 -52
  559. package/src/activity/journal-strip.ts +35 -10
  560. package/src/activity/journal-vault-integration.test.ts +230 -0
  561. package/src/activity/journal-vault-provenance.test.ts +9 -7
  562. package/src/activity/journal-vault-provenance.ts +4 -10
  563. package/src/activity/journal-vault-read.test.ts +3 -2
  564. package/src/activity/journal-vault-read.ts +9 -139
  565. package/src/activity/journal.test.ts +74 -23
  566. package/src/activity/runner.test.ts +116 -1
  567. package/src/activity/runner.ts +25 -0
  568. package/src/activity/scheduler.ts +4 -0
  569. package/src/activity/store.test.ts +18 -0
  570. package/src/activity/store.ts +14 -0
  571. package/src/activity/sync-registration.ts +4 -0
  572. package/src/activity/timeline/analysis-metadata.ts +2 -0
  573. package/src/activity/timeline/analysis-provider.ts +140 -0
  574. package/src/activity/timeline/analysis-run.test.ts +419 -0
  575. package/src/activity/timeline/analysis-run.ts +106 -0
  576. package/src/activity/timeline/analysis.ts +66 -37
  577. package/src/activity/timeline/corrections.ts +9 -0
  578. package/src/activity/timeline/index.ts +3 -0
  579. package/src/activity/timeline/query.test.ts +71 -0
  580. package/src/activity/timeline/query.ts +57 -8
  581. package/src/activity/timeline/regenerate.test.ts +505 -0
  582. package/src/activity/timeline/regenerate.ts +373 -0
  583. package/src/activity/types.ts +40 -5
  584. package/src/adapters/grok-opencode.test.ts +146 -0
  585. package/src/adapters/grok.ts +53 -0
  586. package/src/adapters/index.ts +2 -0
  587. package/src/adapters/opencode.ts +52 -0
  588. package/src/adapters/registry.ts +4 -0
  589. package/src/cli-fallback.ts +13 -4
  590. package/src/config.test.ts +27 -1
  591. package/src/config.ts +17 -1
  592. package/src/dedup/merge.test.ts +732 -25
  593. package/src/fallback-llm.test.ts +53 -0
  594. package/src/fallback-llm.ts +12 -0
  595. package/src/index.ts +2 -0
  596. package/src/local-llm-config.ts +25 -0
  597. package/src/local-llm.ts +3 -1
  598. package/src/orchestration/dependency-propagation-recovery-replay.ts +1 -1
  599. package/src/orchestration/extraction-persist-deps.ts +9 -0
  600. package/src/orchestration/extraction-persist-promotion.test.ts +265 -6
  601. package/src/orchestration/extraction-persist-promotion.ts +42 -3
  602. package/src/orchestration/extraction-persist.ts +3 -3
  603. package/src/orchestration/harmonic-construction-persist.test.ts +115 -4
  604. package/src/orchestration/harmonic-construction-persist.ts +34 -6
  605. package/src/orchestration/maintenance.ts +1 -0
  606. package/src/orchestration/orchestrator-helpers.ts +6 -0
  607. package/src/orchestration/recall-entry.ts +16 -0
  608. package/src/orchestration/recall-internal-deps.ts +14 -0
  609. package/src/orchestration/recall-internal.ts +41 -58
  610. package/src/orchestration/recall-result-formatter.ts +11 -1
  611. package/src/orchestration/recall-search-pipeline.ts +121 -11
  612. package/src/orchestration/recall-state-view-pipeline.test.ts +211 -0
  613. package/src/orchestration/semantic-merge-commit-effects.ts +76 -17
  614. package/src/orchestration/semantic-merge-persist.ts +121 -16
  615. package/src/orchestration/semantic-merge-promotion-payload.ts +133 -54
  616. package/src/orchestrator.ts +7 -35
  617. package/src/providers/codex-subscription.test.ts +666 -0
  618. package/src/providers/codex-subscription.ts +743 -0
  619. package/src/recall-disclosure.test.ts +20 -0
  620. package/src/recall-state-view-admission.ts +114 -0
  621. package/src/recall-state-view-asof.test.ts +176 -0
  622. package/src/recall-state-view-call.test.ts +175 -0
  623. package/src/recall-state-view-config.test.ts +16 -0
  624. package/src/recall-state-view-widen.test.ts +70 -0
  625. package/src/recall-state-view-widen.ts +28 -7
  626. package/src/recall-state-view-wire.ts +3 -1
  627. package/src/recall-state-view-zero-diff.test.ts +20 -11
  628. package/src/recall-state-view.test.ts +142 -0
  629. package/src/recall-state-view.ts +72 -24
  630. package/src/recall-xray-renderer.test.ts +27 -0
  631. package/src/recall-xray-renderer.ts +4 -0
  632. package/src/recall-xray.ts +13 -0
  633. package/src/reconcile/cursor.ts +23 -33
  634. package/src/reconcile/manifest.ts +96 -11
  635. package/src/reconcile-identity-cache.test.ts +378 -0
  636. package/src/runtime/child-process.ts +1 -1
  637. package/src/storage/cas-revision-host.ts +75 -0
  638. package/src/storage/cas-revision-store.test.ts +459 -0
  639. package/src/storage/cas-revision-store.ts +661 -0
  640. package/src/storage/deletion-revision-store.ts +80 -6
  641. package/src/storage/tombstone-blocked-capture-index.ts +15 -0
  642. package/src/storage/tombstone-blocked-capture-mutation.ts +67 -7
  643. package/src/storage/tombstone-blocked-capture-sync.ts +55 -20
  644. package/src/storage-contract/failure-semantics.test.ts +1 -1
  645. package/src/storage-frontmatter-cas.test.ts +698 -1
  646. package/src/storage-replay.test.ts +166 -3
  647. package/src/storage.ts +41 -41
  648. package/src/support-passport/card-projection.ts +82 -33
  649. package/src/temporal-supersession.test.ts +10 -10
  650. package/src/types.ts +10 -29
  651. package/src/write-envelope.ts +1 -1
  652. package/dist/chunk-22FVR2KE.js.map +0 -1
  653. package/dist/chunk-2C3S7J2S.js.map +0 -1
  654. package/dist/chunk-2JVJ7UHC.js.map +0 -1
  655. package/dist/chunk-2QSZNTDO.js +0 -56
  656. package/dist/chunk-2QSZNTDO.js.map +0 -1
  657. package/dist/chunk-3QQTXYZ6.js.map +0 -1
  658. package/dist/chunk-5VCDKQWQ.js +0 -560
  659. package/dist/chunk-5VCDKQWQ.js.map +0 -1
  660. package/dist/chunk-A7XEPMQ6.js.map +0 -1
  661. package/dist/chunk-BLUYQFRH.js.map +0 -1
  662. package/dist/chunk-E6JA6XWY.js.map +0 -1
  663. package/dist/chunk-EEOUMG3J.js.map +0 -1
  664. package/dist/chunk-FDLDOEO6.js.map +0 -1
  665. package/dist/chunk-FYDW33ZB.js +0 -13
  666. package/dist/chunk-H272ZPQ3.js.map +0 -1
  667. package/dist/chunk-HV7OY4DM.js.map +0 -1
  668. package/dist/chunk-HVAEXYPL.js.map +0 -1
  669. package/dist/chunk-JEIXTYVG.js.map +0 -1
  670. package/dist/chunk-LRICZIGN.js +0 -52
  671. package/dist/chunk-LRICZIGN.js.map +0 -1
  672. package/dist/chunk-MFDTVQJX.js.map +0 -1
  673. package/dist/chunk-N7RWREIQ.js.map +0 -1
  674. package/dist/chunk-O75CRYGF.js.map +0 -1
  675. package/dist/chunk-Q726HSJO.js.map +0 -1
  676. package/dist/chunk-QOIOACIE.js.map +0 -1
  677. package/dist/chunk-SEDEKFYQ.js +0 -1
  678. package/dist/chunk-SO7SV523.js.map +0 -1
  679. package/dist/chunk-TLPZ6MKZ.js.map +0 -1
  680. package/dist/chunk-UGPUYIET.js.map +0 -1
  681. package/src/activity/journal-mode.test.ts +0 -32
  682. package/src/activity/journal-mode.ts +0 -20
  683. /package/dist/{capsule-merge-IPG4IOFP.js.map → capsule-merge-ZCXUPLNJ.js.map} +0 -0
  684. /package/dist/{chunk-CDKHKZL5.js.map → chunk-2524MOWK.js.map} +0 -0
  685. /package/dist/{chunk-RKBLRTNT.js.map → chunk-2YLMUME2.js.map} +0 -0
  686. /package/dist/{chunk-DBQWVT2H.js.map → chunk-3CBI2ZSA.js.map} +0 -0
  687. /package/dist/{chunk-MWFGUESQ.js.map → chunk-3FJKJ5UZ.js.map} +0 -0
  688. /package/dist/{chunk-NZXEK3UF.js.map → chunk-3Q3N35W7.js.map} +0 -0
  689. /package/dist/{chunk-YYGZJPOK.js.map → chunk-42DJ235G.js.map} +0 -0
  690. /package/dist/{chunk-JTH2SE6B.js.map → chunk-6J6K3STG.js.map} +0 -0
  691. /package/dist/{chunk-H4VH5VIB.js.map → chunk-776GVKL7.js.map} +0 -0
  692. /package/dist/{chunk-BUTCAMJM.js.map → chunk-A2YQL2FF.js.map} +0 -0
  693. /package/dist/{chunk-X2NFFBTO.js.map → chunk-A7GQBJP5.js.map} +0 -0
  694. /package/dist/{chunk-CGC5UQCF.js.map → chunk-AKE4GGQ3.js.map} +0 -0
  695. /package/dist/{chunk-B325AGLK.js.map → chunk-AZSKROVQ.js.map} +0 -0
  696. /package/dist/{chunk-I5DZ3WGR.js.map → chunk-BJETIR53.js.map} +0 -0
  697. /package/dist/{chunk-JT3EB7ZL.js.map → chunk-BNGHPYZU.js.map} +0 -0
  698. /package/dist/{chunk-3JVLGJCY.js.map → chunk-C6KRO3SU.js.map} +0 -0
  699. /package/dist/{chunk-5NANRSCD.js.map → chunk-CNV2A557.js.map} +0 -0
  700. /package/dist/{chunk-PBGVVDLY.js.map → chunk-DK4X5B6I.js.map} +0 -0
  701. /package/dist/{chunk-N2ZNPHA3.js.map → chunk-ECKG5WSI.js.map} +0 -0
  702. /package/dist/{chunk-PYLL63BF.js.map → chunk-EEBQFG5E.js.map} +0 -0
  703. /package/dist/{chunk-ET356KSB.js.map → chunk-F4TWWUMP.js.map} +0 -0
  704. /package/dist/{chunk-CLLPJ6QT.js.map → chunk-FQXJAC3T.js.map} +0 -0
  705. /package/dist/{chunk-JGHXXQ2G.js.map → chunk-FVJ4D6L7.js.map} +0 -0
  706. /package/dist/{chunk-DD5JFCWM.js.map → chunk-GCBIXUPT.js.map} +0 -0
  707. /package/dist/{chunk-MN3LK3KN.js.map → chunk-GLZH5VEN.js.map} +0 -0
  708. /package/dist/{chunk-S7T2TY65.js.map → chunk-HC4GFLMQ.js.map} +0 -0
  709. /package/dist/{chunk-EQHDH4C2.js.map → chunk-HUT2JR6I.js.map} +0 -0
  710. /package/dist/{chunk-UUQG7HAD.js.map → chunk-HXSAWV3A.js.map} +0 -0
  711. /package/dist/{chunk-XXIHX75O.js.map → chunk-J7PB5UQ4.js.map} +0 -0
  712. /package/dist/{chunk-LTIZHLV7.js.map → chunk-JR6H5CYS.js.map} +0 -0
  713. /package/dist/{chunk-FCSZ4K2X.js.map → chunk-JR6PP7UM.js.map} +0 -0
  714. /package/dist/{chunk-TCUKRAMK.js.map → chunk-JRWW7GM6.js.map} +0 -0
  715. /package/dist/{chunk-PL7FYKHT.js.map → chunk-L2WQVSKP.js.map} +0 -0
  716. /package/dist/{chunk-JSN44KIB.js.map → chunk-LEMD7WZJ.js.map} +0 -0
  717. /package/dist/{chunk-VZWXFXLX.js.map → chunk-LMCD5W5B.js.map} +0 -0
  718. /package/dist/{chunk-7BMXZCOT.js.map → chunk-LNDLXMH6.js.map} +0 -0
  719. /package/dist/{chunk-EONF76DT.js.map → chunk-LYDJRF45.js.map} +0 -0
  720. /package/dist/{chunk-MKD3OMPS.js.map → chunk-M3MYMWXG.js.map} +0 -0
  721. /package/dist/{chunk-VGXM5B4H.js.map → chunk-MNIPH6LD.js.map} +0 -0
  722. /package/dist/{chunk-6N3TQFZU.js.map → chunk-NN4JEFON.js.map} +0 -0
  723. /package/dist/{chunk-MOZXTRC2.js.map → chunk-OQ7SSRXP.js.map} +0 -0
  724. /package/dist/{chunk-XU6OEECT.js.map → chunk-OQQXGYMX.js.map} +0 -0
  725. /package/dist/{chunk-4MHYKEOM.js.map → chunk-OS2AT2JU.js.map} +0 -0
  726. /package/dist/{chunk-N57A4KPV.js.map → chunk-P3ONDDIJ.js.map} +0 -0
  727. /package/dist/{chunk-R3HKWWUB.js.map → chunk-PHP3MUGF.js.map} +0 -0
  728. /package/dist/{chunk-P3SB5BNT.js.map → chunk-QATYVTP7.js.map} +0 -0
  729. /package/dist/{chunk-LSYDG6MJ.js.map → chunk-QBLDCI6E.js.map} +0 -0
  730. /package/dist/{chunk-KCB7F4J7.js.map → chunk-QURNMKME.js.map} +0 -0
  731. /package/dist/{chunk-XOVKXJEP.js.map → chunk-R3TLVTWW.js.map} +0 -0
  732. /package/dist/{chunk-XXE5P6HJ.js.map → chunk-RRZKTSFG.js.map} +0 -0
  733. /package/dist/{chunk-44T3Y7SZ.js.map → chunk-RUXPVSML.js.map} +0 -0
  734. /package/dist/{chunk-DCJ3YFIC.js.map → chunk-S2ULTQZR.js.map} +0 -0
  735. /package/dist/{chunk-EEC4PCG5.js.map → chunk-SZDLX763.js.map} +0 -0
  736. /package/dist/{chunk-E2ZHGBAK.js.map → chunk-T2JSUEH6.js.map} +0 -0
  737. /package/dist/{chunk-227UFSEQ.js.map → chunk-TFA6HPOA.js.map} +0 -0
  738. /package/dist/{chunk-BA6WOZOT.js.map → chunk-TK4FHQRN.js.map} +0 -0
  739. /package/dist/{chunk-W27OW7AB.js.map → chunk-TKFSXDOB.js.map} +0 -0
  740. /package/dist/{chunk-7K5Q6COX.js.map → chunk-TVVEYCNW.js.map} +0 -0
  741. /package/dist/{chunk-CETXNLEX.js.map → chunk-UDZYNIDJ.js.map} +0 -0
  742. /package/dist/{chunk-H5AFCNGA.js.map → chunk-UJX4I26O.js.map} +0 -0
  743. /package/dist/{chunk-E6TDQRF6.js.map → chunk-UYUCCQ46.js.map} +0 -0
  744. /package/dist/{chunk-OQDPBRQ6.js.map → chunk-VYXDUPYE.js.map} +0 -0
  745. /package/dist/{chunk-ZG74PWRW.js.map → chunk-VZAKYDMJ.js.map} +0 -0
  746. /package/dist/{chunk-NB5BCFUY.js.map → chunk-WHHEPAO3.js.map} +0 -0
  747. /package/dist/{chunk-H3TKENU4.js.map → chunk-WIKO4SCR.js.map} +0 -0
  748. /package/dist/{chunk-TX2UTLXC.js.map → chunk-WPDKBUWX.js.map} +0 -0
  749. /package/dist/{chunk-YFLLGRXO.js.map → chunk-X2QPKLPL.js.map} +0 -0
  750. /package/dist/{chunk-PFFZWDPE.js.map → chunk-XCOV45MO.js.map} +0 -0
  751. /package/dist/{chunk-5BCNEBEN.js.map → chunk-XPJNT6PI.js.map} +0 -0
  752. /package/dist/{chunk-SEDEKFYQ.js.map → chunk-XW2T4QAW.js.map} +0 -0
  753. /package/dist/{chunk-J7HFPA6O.js.map → chunk-Y63ZFP4X.js.map} +0 -0
  754. /package/dist/{chunk-D223ZDQV.js.map → chunk-YEDVOYL2.js.map} +0 -0
  755. /package/dist/{chunk-RC5DXXWC.js.map → chunk-YM7YN37H.js.map} +0 -0
  756. /package/dist/{chunk-BPJNF7J2.js.map → chunk-YNN26CIZ.js.map} +0 -0
  757. /package/dist/{chunk-VLXBE57O.js.map → chunk-YVGXH72Y.js.map} +0 -0
  758. /package/dist/{chunk-YQAXP5AC.js.map → chunk-YXLUTALO.js.map} +0 -0
  759. /package/dist/{chunk-DGGB65KC.js.map → chunk-Z7ACR6MJ.js.map} +0 -0
  760. /package/dist/{chunk-X35W4S3L.js.map → chunk-ZBEGS7OB.js.map} +0 -0
  761. /package/dist/{chunk-XUE46UYW.js.map → chunk-ZLN7AROH.js.map} +0 -0
  762. /package/dist/{chunk-HK32G473.js.map → chunk-ZWEZXVYH.js.map} +0 -0
  763. /package/dist/{contradiction-scan-NOYMFG66.js.map → contradiction-scan-GVD4JJ7B.js.map} +0 -0
  764. /package/dist/{first-start-migration-RC345GPL.js.map → first-start-migration-L3UFX5CU.js.map} +0 -0
  765. /package/dist/{resolution-VKATP2HT.js.map → local-llm-config.js.map} +0 -0
  766. /package/dist/{tier-stats-KA6OZX2C.js.map → tier-stats-VK5PCO2L.js.map} +0 -0
@@ -226,3 +226,23 @@ test("MCP engram.recall inputSchema advertises the `disclosure` enum", () => {
226
226
  assert.ok(props && "disclosure" in props, "engram.recall inputSchema must declare 'disclosure'");
227
227
  assert.deepStrictEqual(props?.disclosure?.enum, ["chunk", "section", "raw"]);
228
228
  });
229
+
230
+ test("recallRequestSchema and MCP inputSchema carry the #1952 stateView boolean", () => {
231
+ const base = { query: "when did the job change?", sessionKey: "s" };
232
+ const ok = recallRequestSchema.safeParse({ ...base, stateView: true });
233
+ assert.equal(ok.success, true, "stateView: true must validate");
234
+ assert.equal(ok.success && ok.data.stateView, true);
235
+ const off = recallRequestSchema.safeParse({ ...base, stateView: false });
236
+ assert.equal(off.success && off.data.stateView, false);
237
+ const absent = recallRequestSchema.safeParse(base);
238
+ assert.equal(absent.success && absent.data.stateView, undefined);
239
+ const bad = recallRequestSchema.safeParse({ ...base, stateView: "yes" });
240
+ assert.equal(bad.success, false, "non-boolean stateView must be rejected");
241
+
242
+ const { service } = makeMcpRecallSpyService();
243
+ const server = new EngramMcpServer(service);
244
+ const tools = (server as unknown as { tools: Array<{ name: string; inputSchema: { properties?: Record<string, unknown> } }> }).tools;
245
+ const recallTool = tools.find((t) => t.name === "engram.recall");
246
+ const props = recallTool?.inputSchema?.properties as Record<string, { type?: string }> | undefined;
247
+ assert.ok(props && props.stateView?.type === "boolean", "engram.recall inputSchema must declare stateView: boolean");
248
+ });
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Recall-internal state-view admission (issue #1952).
3
+ *
4
+ * Flag resolution, recent-scan successor-anchor admission, and the X-ray
5
+ * inject-seam annotation live here so recall-internal.ts stays under its
6
+ * ratchet ceiling. Callers keep one-line sites.
7
+ */
8
+
9
+ import { isGenericRecallExcludedPath, type GenericRecallPathPolicy } from "./orchestration/generic-recall-paths.js";
10
+ import { isChangeOrientedQuery, type StateViewResult } from "./recall-state-view.js";
11
+ import { applyRecallStateViews } from "./recall-state-view-wire.js";
12
+ import { shouldFilterSupersededFromRecall } from "./temporal-supersession.js";
13
+ import type { MemoryFile } from "./types.js";
14
+
15
+ /** Config flag OR per-call override, gated on change intent; computed once for all branches. */
16
+ export function resolveRecallStateViewActive(
17
+ options: { stateView?: boolean },
18
+ config: { recallStateViews?: boolean },
19
+ query: string,
20
+ ): boolean {
21
+ return (options.stateView === true || config.recallStateViews === true) && isChangeOrientedQuery(query);
22
+ }
23
+
24
+ /**
25
+ * Superseded-status filtering delegates to shouldFilterSupersededFromRecall
26
+ * so recent-scan and the QMD safety filter share semantics (kill switch,
27
+ * audit mode, PR #402).
28
+ *
29
+ * #1952: an active state view admits a superseded memory whose successor
30
+ * ALSO survives this admission filter — a successor excluded by status or
31
+ * path can never anchor (mirrors the filterSearchResultsByRecallSafety
32
+ * fixpoint). Anchors grow through admitted chain links, so iterate to a
33
+ * fixpoint.
34
+ *
35
+ * PR #713: when `as_of` is active, pass superseded candidates through here
36
+ * — boostSearchResults's `[valid_at, invalid_at)` evaluation is the
37
+ * authoritative historical gate. Other non-active statuses stay excluded.
38
+ */
39
+ export function filterRecentScanMemoriesForStateView(
40
+ memories: readonly MemoryFile[],
41
+ config: GenericRecallPathPolicy,
42
+ supersessionOptions: { enabled: boolean; includeInRecall: boolean },
43
+ stateViewActive: boolean,
44
+ asOfMs: number | undefined,
45
+ ): MemoryFile[] {
46
+ const asOfActive = typeof asOfMs === "number" && Number.isFinite(asOfMs);
47
+ let stateViewAdmittedIds: Set<string> | null = null;
48
+ if (stateViewActive && !asOfActive) {
49
+ stateViewAdmittedIds = new Set(
50
+ memories
51
+ .filter(
52
+ (m) =>
53
+ !isGenericRecallExcludedPath(m.path, config) &&
54
+ m.frontmatter.status !== "superseded" &&
55
+ !shouldFilterSupersededFromRecall(m.frontmatter, supersessionOptions),
56
+ )
57
+ .map((m) => m.frontmatter.id)
58
+ .filter((id): id is string => typeof id === "string" && id.length > 0),
59
+ );
60
+ for (let progress = true; progress; ) {
61
+ progress = false;
62
+ for (const m of memories) {
63
+ const id = m.frontmatter.id;
64
+ if (typeof id !== "string" || id.length === 0) continue;
65
+ if (stateViewAdmittedIds.has(id)) continue;
66
+ if (isGenericRecallExcludedPath(m.path, config)) continue;
67
+ if (m.frontmatter.status !== "superseded") continue;
68
+ if (!shouldFilterSupersededFromRecall(m.frontmatter, supersessionOptions)) continue;
69
+ if (stateViewAdmittedIds.has(m.frontmatter.supersededBy ?? "")) {
70
+ stateViewAdmittedIds.add(id);
71
+ progress = true;
72
+ }
73
+ }
74
+ }
75
+ }
76
+ return memories.filter((m) => {
77
+ if (isGenericRecallExcludedPath(m.path, config)) return false;
78
+ const status = m.frontmatter.status;
79
+ if (!status || status === "active") return true;
80
+ if (status === "superseded") {
81
+ if (asOfActive) return true;
82
+ const id = m.frontmatter.id;
83
+ if (
84
+ stateViewAdmittedIds !== null &&
85
+ typeof id === "string" &&
86
+ stateViewAdmittedIds.has(id)
87
+ ) {
88
+ return true;
89
+ }
90
+ // Include superseded memory only if the canonical gate says
91
+ // NOT to filter it (kill switch off or audit mode on).
92
+ return !shouldFilterSupersededFromRecall(m.frontmatter, supersessionOptions);
93
+ }
94
+ // Other non-active statuses (archived, retired, etc.) are
95
+ // excluded from the recent-scan path by default.
96
+ return false;
97
+ });
98
+ }
99
+
100
+ /** Label the captured X-ray branch through the same inject-seam annotator. */
101
+ export function indexStateViewAnnotatedResults<T extends StateViewResult & { path: string; namespace?: string }>(
102
+ results: T[],
103
+ query: string,
104
+ config: unknown,
105
+ stateViewActive?: boolean,
106
+ asOfMs?: number,
107
+ ): Map<string, T> {
108
+ return new Map(
109
+ applyRecallStateViews(results, query, config, stateViewActive, asOfMs).map((xr) => [
110
+ `${xr.namespace ?? ""}\0${xr.path}`,
111
+ xr,
112
+ ]),
113
+ );
114
+ }
@@ -0,0 +1,176 @@
1
+ /**
2
+ * recall-state-view-asof.test.ts — issue #1952 historical-pinned state views.
3
+ *
4
+ * Proves an `asOf` recall before the successor's validity keeps the
5
+ * predecessor: the inject seam must not discard a predecessor merely
6
+ * because its successor is absent under the same pin, and a valid asOf
7
+ * result is never emptied. Pinned after the successor's validity, the
8
+ * same corpus returns the successor instead.
9
+ *
10
+ * Pre-fix bug: publishRecallResults annotated without the pin, so the
11
+ * "superseded never appears without its successor" contract dropped the
12
+ * predecessor at the seam and the valid historical snapshot rendered
13
+ * empty.
14
+ */
15
+
16
+ import assert from "node:assert/strict";
17
+ import os from "node:os";
18
+ import path from "node:path";
19
+ import { mkdtemp, mkdir, writeFile, rm } from "node:fs/promises";
20
+ import test from "node:test";
21
+
22
+ import { parseConfig } from "./config.js";
23
+ import { Orchestrator } from "./orchestrator.js";
24
+ import type { PluginConfig } from "./types.js";
25
+
26
+ const QUERY = "when did the job title change";
27
+
28
+ async function makeOrchestrator(
29
+ overrides: Partial<PluginConfig> = {},
30
+ ): Promise<{ orchestrator: Orchestrator; memoryDir: string }> {
31
+ const memoryDir = await mkdtemp(path.join(os.tmpdir(), "remnic-sv-asof-"));
32
+ const config = parseConfig({
33
+ openaiApiKey: "sk-test",
34
+ memoryDir,
35
+ workspaceDir: path.join(memoryDir, "workspace"),
36
+ qmdEnabled: false,
37
+ embeddingFallbackEnabled: false,
38
+ multiGraphMemoryEnabled: false,
39
+ entityGraphEnabled: false,
40
+ timeGraphEnabled: false,
41
+ causalGraphEnabled: false,
42
+ extractionJudgeEnabled: false,
43
+ temporalSupersessionEnabled: true,
44
+ temporalSupersessionIncludeInRecall: false,
45
+ contradictionDetectionEnabled: false,
46
+ chunkingEnabled: false,
47
+ extractionMinChars: 0,
48
+ extractionMinImportanceLevel: "trivial",
49
+ inlineSourceAttributionEnabled: false,
50
+ initGateTimeoutMs: 200,
51
+ ...overrides,
52
+ });
53
+ return { orchestrator: new Orchestrator(config), memoryDir };
54
+ }
55
+
56
+ /**
57
+ * Write the supersession pair with explicit validity windows: the
58
+ * successor (`sv-new`) becomes valid one hour after the pin, and the
59
+ * predecessor (`sv-old`) is superseded at that same instant. At the pin
60
+ * the predecessor is the live fact; the successor is not yet valid.
61
+ */
62
+ async function writeTimedPair(memoryDir: string): Promise<{ pin: string; afterFlip: string }> {
63
+ const today = new Date().toISOString().slice(0, 10);
64
+ const factsDir = path.join(memoryDir, "facts", today);
65
+ await mkdir(factsDir, { recursive: true });
66
+ const now = Date.now();
67
+ const pin = new Date(now + 60_000).toISOString();
68
+ const flipAt = new Date(now + 3_600_000).toISOString();
69
+ const afterFlip = new Date(now + 3_660_000).toISOString();
70
+ const successor = [
71
+ "---",
72
+ "id: sv-new",
73
+ "category: fact",
74
+ `created: ${new Date(now).toISOString()}`,
75
+ `updated: ${new Date(now).toISOString()}`,
76
+ "source: extraction",
77
+ "confidence: 0.8",
78
+ "confidenceTier: high",
79
+ "tags: []",
80
+ "status: active",
81
+ `validAt: ${flipAt}`,
82
+ "---",
83
+ "",
84
+ "Current job title: Staff Engineer.",
85
+ "",
86
+ ];
87
+ const predecessor = [
88
+ "---",
89
+ "id: sv-old",
90
+ "category: fact",
91
+ `created: ${new Date(now).toISOString()}`,
92
+ `updated: ${new Date(now).toISOString()}`,
93
+ "source: extraction",
94
+ "confidence: 0.8",
95
+ "confidenceTier: high",
96
+ "tags: []",
97
+ "status: superseded",
98
+ "supersededBy: sv-new",
99
+ `supersededAt: ${flipAt}`,
100
+ "---",
101
+ "",
102
+ "Job title history: the job title used to be Senior Engineer.",
103
+ "",
104
+ ];
105
+ await writeFile(
106
+ path.join(factsDir, "sv-new.md"),
107
+ `${successor.join("\n")}\n`,
108
+ "utf-8",
109
+ );
110
+ await writeFile(
111
+ path.join(factsDir, "sv-old.md"),
112
+ `${predecessor.join("\n")}\n`,
113
+ "utf-8",
114
+ );
115
+ return { pin, afterFlip };
116
+ }
117
+
118
+ test("asOf before the successor's validity keeps the predecessor and never empties the snapshot (#1952)", async () => {
119
+ const { orchestrator, memoryDir } = await makeOrchestrator();
120
+ try {
121
+ const { pin } = await writeTimedPair(memoryDir);
122
+ const out = await orchestrator.recall(QUERY, "sess-sv-asof-before", {
123
+ stateView: true,
124
+ asOf: pin,
125
+ xrayCapture: true,
126
+ });
127
+ assert.ok(out.length > 0, "a valid asOf result must never be emptied");
128
+ assert.ok(
129
+ out.includes("Senior Engineer"),
130
+ `the pin-valid predecessor must survive the state-view seam, got:\n${out}`,
131
+ );
132
+ assert.ok(
133
+ !out.includes("Staff Engineer"),
134
+ `the successor is not yet valid at the pin and must stay filtered, got:\n${out}`,
135
+ );
136
+ assert.ok(
137
+ !out.includes("[superseded "),
138
+ `a predecessor current at the snapshot renders unlabeled, got:\n${out}`,
139
+ );
140
+ const snapshot = orchestrator.getLastXraySnapshot();
141
+ assert.ok(snapshot, "X-ray snapshot must be captured");
142
+ const labels = (snapshot!.results ?? [])
143
+ .map((r) => r.stateView)
144
+ .filter((label) => label !== undefined);
145
+ assert.deepEqual(
146
+ labels,
147
+ ["current"],
148
+ `X-ray must label the pin-valid predecessor current-at-snapshot, got: ${JSON.stringify(labels)}`,
149
+ );
150
+ } finally {
151
+ await orchestrator.destroy();
152
+ await rm(memoryDir, { recursive: true, force: true });
153
+ }
154
+ });
155
+
156
+ test("asOf after the successor's validity returns the successor instead (#1952)", async () => {
157
+ const { orchestrator, memoryDir } = await makeOrchestrator();
158
+ try {
159
+ const { afterFlip } = await writeTimedPair(memoryDir);
160
+ const out = await orchestrator.recall(QUERY, "sess-sv-asof-after", {
161
+ stateView: true,
162
+ asOf: afterFlip,
163
+ });
164
+ assert.ok(
165
+ out.includes("Staff Engineer"),
166
+ `after the flip the successor is the valid fact, got:\n${out}`,
167
+ );
168
+ assert.ok(
169
+ !out.includes("Senior Engineer"),
170
+ `after the flip the predecessor's interval has ended, got:\n${out}`,
171
+ );
172
+ } finally {
173
+ await orchestrator.destroy();
174
+ await rm(memoryDir, { recursive: true, force: true });
175
+ }
176
+ });
@@ -0,0 +1,175 @@
1
+ /**
2
+ * recall-state-view-call.test.ts — issue #1952 per-call wiring.
3
+ *
4
+ * Proves the per-call `stateView` boolean carries through the FINAL
5
+ * annotation (publish inject seam + X-ray capture) on a fallback recall
6
+ * path, even when the global `recallStateViews` flag is false. QMD and
7
+ * embedding fallback are disabled so recall settles on the recent-scan
8
+ * branch — the same "every fallback path" guarantee the trust-map
9
+ * parity tests pin (#1577).
10
+ *
11
+ * Pre-fix bug: recallInternal computed an effective per-request flag
12
+ * (options.stateView OR config) for admission, but publishRecallResults
13
+ * and the X-ray annotator reread `config.recallStateViews` directly, so
14
+ * per-call true + global false admitted the superseded row upstream and
15
+ * then dropped its label/prefix at the inject seam.
16
+ */
17
+
18
+ import assert from "node:assert/strict";
19
+ import os from "node:os";
20
+ import path from "node:path";
21
+ import { mkdtemp, mkdir, writeFile, rm } from "node:fs/promises";
22
+ import test from "node:test";
23
+
24
+ import { parseConfig } from "./config.js";
25
+ import { Orchestrator } from "./orchestrator.js";
26
+ import type { PluginConfig } from "./types.js";
27
+
28
+ const QUERY = "when did the job title change";
29
+ const PREFIX = "[superseded 2026-08-01 by sv-new]";
30
+
31
+ async function makeOrchestrator(
32
+ overrides: Partial<PluginConfig> = {},
33
+ ): Promise<{ orchestrator: Orchestrator; memoryDir: string }> {
34
+ const memoryDir = await mkdtemp(path.join(os.tmpdir(), "remnic-sv-call-"));
35
+ const config = parseConfig({
36
+ openaiApiKey: "sk-test",
37
+ memoryDir,
38
+ workspaceDir: path.join(memoryDir, "workspace"),
39
+ qmdEnabled: false,
40
+ embeddingFallbackEnabled: false,
41
+ multiGraphMemoryEnabled: false,
42
+ entityGraphEnabled: false,
43
+ timeGraphEnabled: false,
44
+ causalGraphEnabled: false,
45
+ extractionJudgeEnabled: false,
46
+ temporalSupersessionEnabled: true,
47
+ temporalSupersessionIncludeInRecall: false,
48
+ contradictionDetectionEnabled: false,
49
+ chunkingEnabled: false,
50
+ extractionMinChars: 0,
51
+ extractionMinImportanceLevel: "trivial",
52
+ inlineSourceAttributionEnabled: false,
53
+ initGateTimeoutMs: 200,
54
+ ...overrides,
55
+ });
56
+ return { orchestrator: new Orchestrator(config), memoryDir };
57
+ }
58
+
59
+ /**
60
+ * Write the supersession pair directly into the facts dir: an active
61
+ * successor (sv-new) and a superseded predecessor (sv-old) pointing at
62
+ * it. temporalSupersession is ON with includeInRecall=false, so sv-old
63
+ * reaches the candidate pool ONLY when a state view is active.
64
+ */
65
+ async function writePair(memoryDir: string): Promise<void> {
66
+ const today = new Date().toISOString().slice(0, 10);
67
+ const factsDir = path.join(memoryDir, "facts", today);
68
+ await mkdir(factsDir, { recursive: true });
69
+ const now = new Date().toISOString();
70
+ const successor = [
71
+ "---",
72
+ "id: sv-new",
73
+ "category: fact",
74
+ `created: ${now}`,
75
+ `updated: ${now}`,
76
+ "source: extraction",
77
+ "confidence: 0.8",
78
+ "confidenceTier: high",
79
+ "tags: []",
80
+ "status: active",
81
+ "---",
82
+ "",
83
+ "Current job title: Staff Engineer.",
84
+ "",
85
+ ];
86
+ const predecessor = [
87
+ "---",
88
+ "id: sv-old",
89
+ "category: fact",
90
+ `created: ${now}`,
91
+ `updated: ${now}`,
92
+ "source: extraction",
93
+ "confidence: 0.8",
94
+ "confidenceTier: high",
95
+ "tags: []",
96
+ "status: superseded",
97
+ "supersededBy: sv-new",
98
+ "supersededAt: 2026-08-01",
99
+ "---",
100
+ "",
101
+ "Job title history: the job title used to be Senior Engineer.",
102
+ "",
103
+ ];
104
+ await writeFile(
105
+ path.join(factsDir, "sv-new.md"),
106
+ `${successor.join("\n")}\n`,
107
+ "utf-8",
108
+ );
109
+ await writeFile(
110
+ path.join(factsDir, "sv-old.md"),
111
+ `${predecessor.join("\n")}\n`,
112
+ "utf-8",
113
+ );
114
+ }
115
+
116
+ test("per-call stateView=true labels the fallback-path injection and X-ray even when the global flag is false (#1952)", async () => {
117
+ const { orchestrator, memoryDir } = await makeOrchestrator();
118
+ try {
119
+ await writePair(memoryDir);
120
+ const out = await orchestrator.recall(QUERY, "sess-sv-call-true", {
121
+ stateView: true,
122
+ xrayCapture: true,
123
+ });
124
+ assert.ok(
125
+ out.includes(PREFIX),
126
+ `per-call true + global false must render the historical prefix, got:\n${out}`,
127
+ );
128
+ const snapshot = orchestrator.getLastXraySnapshot();
129
+ assert.ok(snapshot, "X-ray snapshot must be captured");
130
+ const labels = (snapshot!.results ?? [])
131
+ .map((r) => r.stateView)
132
+ .filter((label) => label !== undefined);
133
+ assert.ok(
134
+ labels.includes("historical") && labels.includes("current"),
135
+ `X-ray must carry stateView labels through the per-call flag, got: ${JSON.stringify(labels)}`,
136
+ );
137
+ } finally {
138
+ await orchestrator.destroy();
139
+ await rm(memoryDir, { recursive: true, force: true });
140
+ }
141
+ });
142
+
143
+ test("precedence is OR: per-call stateView=false never disables a global recallStateViews=true (#1952)", async () => {
144
+ const { orchestrator, memoryDir } = await makeOrchestrator({
145
+ recallStateViews: true,
146
+ });
147
+ try {
148
+ await writePair(memoryDir);
149
+ const out = await orchestrator.recall(QUERY, "sess-sv-call-false", {
150
+ stateView: false,
151
+ });
152
+ assert.ok(
153
+ out.includes(PREFIX),
154
+ `call false + global true must still label (documented OR semantics), got:\n${out}`,
155
+ );
156
+ } finally {
157
+ await orchestrator.destroy();
158
+ await rm(memoryDir, { recursive: true, force: true });
159
+ }
160
+ });
161
+
162
+ test("default stays zero-diff: no flags, no labels, no prefix (#1952)", async () => {
163
+ const { orchestrator, memoryDir } = await makeOrchestrator();
164
+ try {
165
+ await writePair(memoryDir);
166
+ const out = await orchestrator.recall(QUERY, "sess-sv-call-off");
167
+ assert.ok(
168
+ !out.includes("[superseded "),
169
+ `no flags must keep the injection byte-identical (superseded row stays filtered), got:\n${out}`,
170
+ );
171
+ } finally {
172
+ await orchestrator.destroy();
173
+ await rm(memoryDir, { recursive: true, force: true });
174
+ }
175
+ });
@@ -0,0 +1,16 @@
1
+ import assert from "node:assert/strict";
2
+ import test from "node:test";
3
+
4
+ import { parseConfig } from "./config.js";
5
+
6
+ test("parseConfig: recallStateViews defaults false and honors exact disable values", () => {
7
+ const base = { memoryDir: "/tmp/remnic-sv-config-test" };
8
+ assert.equal(parseConfig(base).recallStateViews, false, "absent → false");
9
+ assert.equal(parseConfig({ ...base, recallStateViews: false }).recallStateViews, false);
10
+ assert.equal(parseConfig({ ...base, recallStateViews: 0 }).recallStateViews, false, "0 disables");
11
+ assert.equal(parseConfig({ ...base, recallStateViews: "false" }).recallStateViews, false, '"false" disables');
12
+ assert.equal(parseConfig({ ...base, recallStateViews: "0" }).recallStateViews, false, '"0" disables');
13
+ assert.equal(parseConfig({ ...base, recallStateViews: true }).recallStateViews, true);
14
+ assert.equal(parseConfig({ ...base, recallStateViews: 1 }).recallStateViews, true);
15
+ assert.equal(parseConfig({ ...base, recallStateViews: "true" }).recallStateViews, true, "CLI string 'true' enables");
16
+ });
@@ -64,3 +64,73 @@ test("superseded without successor is dropped", () => {
64
64
  ]);
65
65
  assert.deepEqual(applyRecallStateViews([ORPHAN], CHANGE, ON), []);
66
66
  });
67
+
68
+ test("#1952 per-call override: stateViewActive=true labels even when config is false", () => {
69
+ const OFF = { recallStateViews: false } as const;
70
+ const labeled = widenRecallStateViews([CURRENT], CHANGE, OFF, [HISTORICAL], true);
71
+ assert.deepEqual(
72
+ labeled.map((row) => [row.id, row.stateLabel]),
73
+ [
74
+ ["new-job", "current"],
75
+ ["old-job", "historical"],
76
+ ],
77
+ "per-call true must widen and label against a global false",
78
+ );
79
+ assert.deepEqual(
80
+ applyRecallStateViews([CURRENT, HISTORICAL], CHANGE, OFF, true).map((row) => [
81
+ row.id,
82
+ row.stateLabel,
83
+ ]),
84
+ [
85
+ ["new-job", "current"],
86
+ ["old-job", "historical"],
87
+ ],
88
+ "inject seam must label on the threaded flag, not the config reread",
89
+ );
90
+ });
91
+
92
+ test("#1952 precedence is OR: per-call false never disables a global true", () => {
93
+ const input = [CURRENT];
94
+ const labeled = widenRecallStateViews(input, CHANGE, ON, [HISTORICAL], false);
95
+ assert.equal(labeled.length, 2, "config true + call false still widens");
96
+ assert.equal(labeled[1]?.stateLabel, "historical");
97
+ });
98
+
99
+ test("#1952 override true on a non-change query stays identity (change gate applies)", () => {
100
+ const input = [CURRENT, HISTORICAL];
101
+ assert.equal(widenRecallStateViews(input, NON_CHANGE, { recallStateViews: false }, [], true), input);
102
+ assert.equal(applyRecallStateViews(input, NON_CHANGE, { recallStateViews: false }, true), input);
103
+ assert.equal(input[0]?.stateLabel, undefined);
104
+ });
105
+
106
+ test("asOf mode keeps a pin-filtered predecessor and never widens the pool (#1952)", () => {
107
+ const pin = Date.parse("2026-08-05T00:00:00.000Z");
108
+ const predecessor = fact("old-job", {
109
+ status: "superseded",
110
+ supersededBy: "new-job",
111
+ supersededAt: "2026-08-10T00:00:00.000Z",
112
+ });
113
+ const labeled = widenRecallStateViews(
114
+ [predecessor],
115
+ CHANGE,
116
+ ON,
117
+ [CURRENT, HISTORICAL],
118
+ undefined,
119
+ pin,
120
+ );
121
+ assert.equal(labeled.length, 1, "pool rows must not enter a historical snapshot");
122
+ assert.equal(labeled[0]?.id, "old-job");
123
+ assert.equal(labeled[0]?.stateLabel, "current");
124
+ });
125
+
126
+ test("asOf mode threads through applyRecallStateViews without emptying the result (#1952)", () => {
127
+ const pin = Date.parse("2026-08-05T00:00:00.000Z");
128
+ const predecessor = fact("old-job", {
129
+ status: "superseded",
130
+ supersededBy: "new-job",
131
+ supersededAt: "2026-08-10T00:00:00.000Z",
132
+ });
133
+ const labeled = applyRecallStateViews([predecessor], CHANGE, ON, true, pin);
134
+ assert.equal(labeled.length, 1);
135
+ assert.equal(labeled[0]?.stateLabel, "current");
136
+ });
@@ -19,13 +19,31 @@ export function widenRecallStateViews<T extends StateViewResult>(
19
19
  query: string,
20
20
  config: unknown,
21
21
  pool: readonly T[] = [],
22
+ /**
23
+ * #1952 — per-request effective flag (per-call `stateView` OR config,
24
+ * gated on change intent), computed once at recall entry and threaded
25
+ * through. When `true` it wins over the config read so a per-call
26
+ * override survives a global `false` at the inject seam. Callers that
27
+ * omit it keep the legacy config-only behavior.
28
+ */
29
+ stateViewActive?: boolean,
30
+ /**
31
+ * #1952 — historical recall pin (epoch ms). When set, the pool is
32
+ * never widened (pool rows did not survive the asOf validity filter,
33
+ * so pulling a not-yet-valid successor into a historical snapshot
34
+ * would be wrong) and annotation runs in asOf mode: a predecessor is
35
+ * kept and labeled relative to the snapshot without requiring its
36
+ * successor.
37
+ */
38
+ asOfMs?: number,
22
39
  ): T[] {
23
40
  const raw =
24
41
  typeof config === "object" && config !== null && "recallStateViews" in config
25
42
  ? config.recallStateViews
26
43
  : undefined;
27
- const enabled = parseRecallStateViews(raw);
44
+ const enabled = stateViewActive === true || parseRecallStateViews(raw);
28
45
  if (!enabled || !isChangeOrientedQuery(query)) return results;
46
+ const asOfActive = typeof asOfMs === "number" && Number.isFinite(asOfMs);
29
47
 
30
48
  const candidateIds = new Set<string>();
31
49
  for (const result of results) {
@@ -35,15 +53,18 @@ export function widenRecallStateViews<T extends StateViewResult>(
35
53
 
36
54
  const seen = new Set(candidateIds);
37
55
  const extra: T[] = [];
38
- for (const item of pool) {
39
- const id = resultStateViewId(item);
40
- if (!id || seen.has(id)) continue;
41
- if (!shouldWidenSuperseded(item.supersededBy, candidateIds)) continue;
42
- extra.push(item);
43
- seen.add(id);
56
+ if (!asOfActive) {
57
+ for (const item of pool) {
58
+ const id = resultStateViewId(item);
59
+ if (!id || seen.has(id)) continue;
60
+ if (!shouldWidenSuperseded(item.supersededBy, candidateIds)) continue;
61
+ extra.push(item);
62
+ seen.add(id);
63
+ }
44
64
  }
45
65
 
46
66
  return annotateStateView(extra.length > 0 ? results.concat(extra) : results, query, [], {
47
67
  enabled: true,
68
+ ...(asOfActive ? { asOfMs } : {}),
48
69
  });
49
70
  }
@@ -13,6 +13,8 @@ export function applyRecallStateViews<T extends StateViewResult>(
13
13
  results: T[],
14
14
  query: string,
15
15
  config: unknown,
16
+ stateViewActive?: boolean,
17
+ asOfMs?: number,
16
18
  ): T[] {
17
- return widenRecallStateViews(results, query, config);
19
+ return widenRecallStateViews(results, query, config, [], stateViewActive, asOfMs);
18
20
  }