@remnic/core 9.69.39 → 9.69.41

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 (774) hide show
  1. package/dist/access-admin-ops-surface.d.ts +16 -14
  2. package/dist/access-admin-ops-surface.js +75 -74
  3. package/dist/access-audit.js +2 -2
  4. package/dist/access-authorization-probe.d.ts +16 -14
  5. package/dist/access-authorization-probe.js +76 -75
  6. package/dist/access-boundary.d.ts +16 -14
  7. package/dist/access-boundary.js +75 -74
  8. package/dist/access-cli.js +173 -170
  9. package/dist/access-cli.js.map +1 -1
  10. package/dist/access-coding-context-resolution.d.ts +1 -1
  11. package/dist/access-extraction-force-flush.d.ts +16 -14
  12. package/dist/access-extraction-force-flush.js +75 -74
  13. package/dist/access-health-types.d.ts +1 -1
  14. package/dist/access-http-briefing.d.ts +16 -14
  15. package/dist/access-http-briefing.js +76 -75
  16. package/dist/access-http-lcm-compaction.d.ts +16 -14
  17. package/dist/access-http-lifecycle-flush.d.ts +16 -14
  18. package/dist/access-http-offline-stream.d.ts +16 -14
  19. package/dist/access-http-query.d.ts +2 -2
  20. package/dist/access-http-query.js +77 -76
  21. package/dist/access-http.d.ts +17 -15
  22. package/dist/access-http.js +95 -92
  23. package/dist/access-identity-continuity-surface.d.ts +13 -12
  24. package/dist/access-identity-continuity-surface.js +75 -74
  25. package/dist/access-lcm-surface.d.ts +16 -14
  26. package/dist/access-lcm-surface.js +75 -74
  27. package/dist/access-mcp-shared-context-tools.d.ts +156 -0
  28. package/dist/access-mcp-shared-context-tools.js +8 -0
  29. package/dist/access-mcp.d.ts +16 -14
  30. package/dist/access-mcp.js +86 -83
  31. package/dist/access-memory-search-fanout.d.ts +2 -2
  32. package/dist/{access-namespace-preflight-DY4z6L5X.d.ts → access-namespace-preflight-DWsMc9Dh.d.ts} +1 -1
  33. package/dist/access-namespace-preflight.d.ts +3 -3
  34. package/dist/access-namespace-preflight.js +75 -74
  35. package/dist/access-observe-transcript.d.ts +13 -12
  36. package/dist/access-observe-write-category.d.ts +1 -1
  37. package/dist/access-observe-write-category.js +4 -4
  38. package/dist/access-observe-write-surface.d.ts +16 -14
  39. package/dist/access-observe-write-surface.js +75 -74
  40. package/dist/access-offline-manifest.d.ts +37 -13
  41. package/dist/access-offline-manifest.js +15 -11
  42. package/dist/access-operations-batch.js +79 -77
  43. package/dist/access-operations.d.ts +16 -14
  44. package/dist/access-operations.js +84 -82
  45. package/dist/access-recall-concurrency.d.ts +16 -14
  46. package/dist/access-recall-concurrency.js +75 -74
  47. package/dist/access-recall-response.d.ts +16 -14
  48. package/dist/access-recall-response.js +75 -74
  49. package/dist/access-recall-surface.d.ts +16 -14
  50. package/dist/access-recall-surface.js +75 -74
  51. package/dist/access-schema.d.ts +5 -3
  52. package/dist/access-schema.js +3 -3
  53. package/dist/{access-service-MY4bsr_Q.d.ts → access-service-Cisy5YDq.d.ts} +14 -9
  54. package/dist/access-service-helpers.d.ts +16 -14
  55. package/dist/access-service.d.ts +16 -14
  56. package/dist/access-service.js +75 -74
  57. package/dist/access-surface-catalog.d.ts +16 -14
  58. package/dist/access-surface-catalog.js +77 -76
  59. package/dist/access-surface-catalog.js.map +1 -1
  60. package/dist/access-wearables-meetings-surface.d.ts +6 -5
  61. package/dist/action-confidence.d.ts +1 -1
  62. package/dist/active-memory-bridge.d.ts +1 -1
  63. package/dist/active-memory-bridge.js +3 -3
  64. package/dist/active-recall.d.ts +1 -1
  65. package/dist/active-recall.js +10 -9
  66. package/dist/active-recall.js.map +1 -1
  67. package/dist/activity/digest.d.ts +1 -1
  68. package/dist/ambient-provenance.d.ts +1 -1
  69. package/dist/artifact-search.d.ts +1 -1
  70. package/dist/{auto-sync-RP4C6ZPF.js → auto-sync-7PGUFY7U.js} +7 -7
  71. package/dist/background-generation-config.d.ts +1 -1
  72. package/dist/background-generation-config.js +3 -1
  73. package/dist/background-generation.d.ts +1 -1
  74. package/dist/behavior-learner.d.ts +1 -1
  75. package/dist/behavior-signals.d.ts +1 -1
  76. package/dist/bootstrap.d.ts +13 -12
  77. package/dist/briefing-window.d.ts +2 -2
  78. package/dist/briefing.d.ts +2 -2
  79. package/dist/briefing.js +23 -23
  80. package/dist/buffer-surprise-report.d.ts +1 -1
  81. package/dist/buffer-turn-helpers.d.ts +1 -1
  82. package/dist/buffer.d.ts +2 -2
  83. package/dist/buffer.js +7 -7
  84. package/dist/bulk-import/index.d.ts +3 -3
  85. package/dist/calibration.d.ts +3 -2
  86. package/dist/calibration.js +2 -2
  87. package/dist/capabilities.d.ts +1 -1
  88. package/dist/{capsule-crypto-7FJQINUR.js → capsule-crypto-YO5QJ6L3.js} +2 -2
  89. package/dist/{capsule-merge-IPG4IOFP.js → capsule-merge-3MNURAQ3.js} +2 -2
  90. package/dist/{catalog-CW87xGx8.d.ts → catalog-wcX1QhtQ.d.ts} +1 -1
  91. package/dist/causal-behavior.d.ts +1 -1
  92. package/dist/causal-consolidation.d.ts +1 -1
  93. package/dist/causal-consolidation.js +29 -28
  94. package/dist/causal-consolidation.js.map +1 -1
  95. package/dist/causal-trajectory-graph.d.ts +1 -1
  96. package/dist/{chunk-YFTNZMGR.js → chunk-27NO2KVB.js} +31 -8
  97. package/dist/chunk-27NO2KVB.js.map +1 -0
  98. package/dist/{chunk-M6RORUO5.js → chunk-2EYZ32LH.js} +24 -2
  99. package/dist/{chunk-M6RORUO5.js.map → chunk-2EYZ32LH.js.map} +1 -1
  100. package/dist/{chunk-XH3HGI2N.js → chunk-2HQPE2NM.js} +2 -2
  101. package/dist/{chunk-3EKVN2OP.js → chunk-2ZG2LLZT.js} +2 -2
  102. package/dist/{chunk-6EHM2AV7.js → chunk-3BLHPQHT.js} +5 -5
  103. package/dist/{chunk-YKREX63Z.js → chunk-3D75XIYO.js} +5 -3
  104. package/dist/chunk-3D75XIYO.js.map +1 -0
  105. package/dist/{chunk-J272ODKJ.js → chunk-42DJ235G.js} +2 -2
  106. package/dist/{chunk-F4EHXVP7.js → chunk-46RII65S.js} +2 -2
  107. package/dist/{chunk-YUW66UAH.js → chunk-4AX5OYKC.js} +2 -2
  108. package/dist/{chunk-AECJY3GJ.js → chunk-4IGOLIWM.js} +2 -2
  109. package/dist/{chunk-2ZTDRNCS.js → chunk-54QPOE45.js} +2 -2
  110. package/dist/{chunk-O4M4BDIJ.js → chunk-563X6JJX.js} +2 -2
  111. package/dist/{chunk-IL6ODG6M.js → chunk-5EQT62HH.js} +2 -2
  112. package/dist/{chunk-JKKII6GX.js → chunk-6MQMYXSQ.js} +2 -2
  113. package/dist/{chunk-TVVEYCNW.js → chunk-7K5Q6COX.js} +4 -4
  114. package/dist/{chunk-BV4ZKIZH.js → chunk-7ZLC4DTZ.js} +5 -4
  115. package/dist/{chunk-WBM2MVBK.js → chunk-A4OIJYCV.js} +2 -2
  116. package/dist/{chunk-RLJHJQUY.js → chunk-AFJHNHAM.js} +8 -8
  117. package/dist/{chunk-6YAIN5XJ.js → chunk-AIVRD66I.js} +44 -6
  118. package/dist/chunk-AIVRD66I.js.map +1 -0
  119. package/dist/{chunk-OEDW4ER7.js → chunk-AJBWVDRV.js} +2 -1
  120. package/dist/chunk-AJBWVDRV.js.map +1 -0
  121. package/dist/{chunk-4RZLTZVM.js → chunk-AKABVXFS.js} +2 -2
  122. package/dist/{chunk-M6HBPLBA.js → chunk-AUSRUOMQ.js} +2 -2
  123. package/dist/{chunk-QHT7MOUF.js → chunk-BTPCP535.js} +25 -14
  124. package/dist/chunk-BTPCP535.js.map +1 -0
  125. package/dist/{chunk-2NLLXCJG.js → chunk-BXLOS5AJ.js} +2 -2
  126. package/dist/{chunk-Q7CLGFA7.js → chunk-C3G6MW4W.js} +3 -3
  127. package/dist/{chunk-O76F5QPP.js → chunk-D6PY63OM.js} +2 -2
  128. package/dist/{chunk-BD7JTBYP.js → chunk-D7MAYFQP.js} +2 -2
  129. package/dist/{chunk-LMLGBG6H.js → chunk-DBB5JPSL.js} +2 -2
  130. package/dist/{chunk-TSP5WH72.js → chunk-DIXZQTGY.js} +2 -2
  131. package/dist/{chunk-P4ZAEYKG.js → chunk-DM5CU5J7.js} +7 -4
  132. package/dist/chunk-DM5CU5J7.js.map +1 -0
  133. package/dist/{chunk-X7Y7WX73.js → chunk-DQEMWVMT.js} +1 -1
  134. package/dist/{chunk-UHRZ324M.js → chunk-E3I3NDUP.js} +4 -4
  135. package/dist/{chunk-AENM6GKU.js → chunk-E4LMQTST.js} +2 -2
  136. package/dist/{chunk-YDVAM7S4.js → chunk-EH3HNCAM.js} +13 -8
  137. package/dist/chunk-EH3HNCAM.js.map +1 -0
  138. package/dist/{chunk-MUTVRKKY.js → chunk-EMSYMYXO.js} +14 -14
  139. package/dist/{chunk-YNDLCWXS.js → chunk-EZ25VE3G.js} +4 -4
  140. package/dist/{chunk-FXHOZGSE.js → chunk-F5H6YG5P.js} +2 -2
  141. package/dist/{chunk-TRLOFIQC.js → chunk-FGFC2EFR.js} +14 -13
  142. package/dist/chunk-FGFC2EFR.js.map +1 -0
  143. package/dist/{chunk-TNSCIPBQ.js → chunk-G6NQ3L4T.js} +2 -2
  144. package/dist/{chunk-ZMWSYUUL.js → chunk-GCBIXUPT.js} +2 -2
  145. package/dist/{chunk-EYKIDK33.js → chunk-GMH5QPUU.js} +22 -22
  146. package/dist/chunk-GMH5QPUU.js.map +1 -0
  147. package/dist/{chunk-4BCHFSC7.js → chunk-GWNSKQDA.js} +3 -3
  148. package/dist/{chunk-JDX2OA4R.js → chunk-HNHIHXSD.js} +2 -2
  149. package/dist/{chunk-GG5FHZJJ.js → chunk-I33QYUAF.js} +6 -6
  150. package/dist/{chunk-LPYYY4AP.js → chunk-I46BYY7U.js} +653 -328
  151. package/dist/chunk-I46BYY7U.js.map +1 -0
  152. package/dist/{chunk-CZTPU65V.js → chunk-ICN37XHG.js} +74 -27
  153. package/dist/chunk-ICN37XHG.js.map +1 -0
  154. package/dist/chunk-IFBSZGW3.js +42 -0
  155. package/dist/chunk-IFBSZGW3.js.map +1 -0
  156. package/dist/{chunk-AAZEKXUP.js → chunk-IYIPXAIJ.js} +2 -2
  157. package/dist/{chunk-ACY4ZPF7.js → chunk-J2MGTGKC.js} +10 -5
  158. package/dist/chunk-J2MGTGKC.js.map +1 -0
  159. package/dist/chunk-JATHBCAV.js +94 -0
  160. package/dist/chunk-JATHBCAV.js.map +1 -0
  161. package/dist/{chunk-5U7K4W6K.js → chunk-JDOBQPJY.js} +3 -3
  162. package/dist/{chunk-TG3FAM2S.js → chunk-JL4TQYM5.js} +48 -1
  163. package/dist/{chunk-TG3FAM2S.js.map → chunk-JL4TQYM5.js.map} +1 -1
  164. package/dist/{chunk-UZZ7SQT3.js → chunk-JMWUPUE6.js} +2 -2
  165. package/dist/{chunk-ENBPQEVU.js → chunk-JSD7Q7LD.js} +2 -2
  166. package/dist/{chunk-QTQ6XKGT.js → chunk-K5D2XVNN.js} +4 -4
  167. package/dist/chunk-K5D2XVNN.js.map +1 -0
  168. package/dist/{chunk-3CBI2ZSA.js → chunk-KG2OOAFF.js} +20 -12
  169. package/dist/chunk-KG2OOAFF.js.map +1 -0
  170. package/dist/{chunk-Q432REND.js → chunk-KJLLPG26.js} +2 -2
  171. package/dist/{chunk-JTQR6L2N.js → chunk-KLUC2GSG.js} +6 -6
  172. package/dist/{chunk-OB3XMWX5.js → chunk-KVO2BTA4.js} +2 -2
  173. package/dist/{chunk-PCOVEDPK.js → chunk-KZJM7R4F.js} +3 -3
  174. package/dist/{chunk-X4TD4O2F.js → chunk-LE2KZ72G.js} +3 -3
  175. package/dist/{chunk-HIP6DKJJ.js → chunk-LQVXSRAJ.js} +2 -2
  176. package/dist/{chunk-A7GQBJP5.js → chunk-LVFI5LG7.js} +7 -7
  177. package/dist/{chunk-FWWWUPOE.js → chunk-MCMS4VUK.js} +25 -15
  178. package/dist/chunk-MCMS4VUK.js.map +1 -0
  179. package/dist/{chunk-5SPCMAUC.js → chunk-N6XTC56E.js} +13 -81
  180. package/dist/chunk-N6XTC56E.js.map +1 -0
  181. package/dist/{chunk-VBSNUH4J.js → chunk-ND7MAIJC.js} +2 -2
  182. package/dist/{chunk-TNZNSMVJ.js → chunk-NYWCFC3K.js} +301 -348
  183. package/dist/chunk-NYWCFC3K.js.map +1 -0
  184. package/dist/{chunk-54NX5EG4.js → chunk-P66QH6R6.js} +2 -2
  185. package/dist/{chunk-62D2PAAM.js → chunk-PAAJWQH5.js} +4 -4
  186. package/dist/{chunk-TA4C3XB7.js → chunk-PFKIOYJH.js} +2 -2
  187. package/dist/{chunk-WIWLX65T.js → chunk-PGGPRF6J.js} +2 -2
  188. package/dist/{chunk-V6EGNVUT.js → chunk-PIWFNPQT.js} +4 -4
  189. package/dist/{chunk-BLDBT6HZ.js → chunk-PJRKLB4Z.js} +18 -2
  190. package/dist/chunk-PJRKLB4Z.js.map +1 -0
  191. package/dist/{chunk-4JVQRFZD.js → chunk-PLJ2MQFT.js} +11 -11
  192. package/dist/{chunk-4RX5O34R.js → chunk-PQ42DJNG.js} +2 -2
  193. package/dist/{chunk-37CAEC7E.js → chunk-PWPIERBM.js} +4 -4
  194. package/dist/{chunk-ZEGL7YCC.js → chunk-Q62GA5U2.js} +2 -2
  195. package/dist/{chunk-CC37E3QM.js → chunk-QKCXRS5A.js} +16 -1
  196. package/dist/chunk-QKCXRS5A.js.map +1 -0
  197. package/dist/{chunk-WKDFJXW5.js → chunk-QM2SPLKQ.js} +1 -1
  198. package/dist/chunk-QM2SPLKQ.js.map +1 -0
  199. package/dist/{chunk-GAS7KYC7.js → chunk-RQQO3ORQ.js} +2 -2
  200. package/dist/{chunk-UZEHHXYC.js → chunk-S4MJTIPG.js} +85 -81
  201. package/dist/chunk-S4MJTIPG.js.map +1 -0
  202. package/dist/chunk-SK7D34OL.js +68 -0
  203. package/dist/chunk-SK7D34OL.js.map +1 -0
  204. package/dist/{chunk-LQNRVPTV.js → chunk-TRTLWUDD.js} +164 -130
  205. package/dist/chunk-TRTLWUDD.js.map +1 -0
  206. package/dist/{chunk-JXN77SGO.js → chunk-U2VDCFXW.js} +1 -1
  207. package/dist/chunk-U2VDCFXW.js.map +1 -0
  208. package/dist/{chunk-CWTCMZGE.js → chunk-UHSOPTNB.js} +132 -6
  209. package/dist/chunk-UHSOPTNB.js.map +1 -0
  210. package/dist/{chunk-3NPNBVFR.js → chunk-UZGHKD3T.js} +2 -2
  211. package/dist/{chunk-IQEJIOEU.js → chunk-V2EXYQEQ.js} +20 -12
  212. package/dist/chunk-V2EXYQEQ.js.map +1 -0
  213. package/dist/{chunk-OPBFP4TF.js → chunk-V2TOGJPM.js} +46 -13
  214. package/dist/chunk-V2TOGJPM.js.map +1 -0
  215. package/dist/{chunk-VJIE4D2I.js → chunk-V62YYBBY.js} +4 -4
  216. package/dist/{chunk-KQAFEZQX.js → chunk-VDX2J7OX.js} +2 -2
  217. package/dist/{chunk-6H2G7RFT.js → chunk-VNQRRUNS.js} +11 -10
  218. package/dist/chunk-VNQRRUNS.js.map +1 -0
  219. package/dist/{chunk-6AGWBKQU.js → chunk-VSN2DMQK.js} +2 -2
  220. package/dist/{chunk-ZHXSOMYH.js → chunk-VVX5PZFS.js} +2 -2
  221. package/dist/{chunk-GI4ZBWPQ.js → chunk-W7UV2ZCA.js} +3 -3
  222. package/dist/{chunk-GMIQV6DD.js → chunk-WBQ4ONQJ.js} +2 -2
  223. package/dist/{chunk-FNHLI2RE.js → chunk-WFMQN7JE.js} +3 -3
  224. package/dist/{chunk-MVAQ2WM3.js → chunk-WGZHSQDV.js} +9 -5
  225. package/dist/chunk-WGZHSQDV.js.map +1 -0
  226. package/dist/{chunk-IYKZJVL5.js → chunk-WN2OXGGH.js} +1 -1
  227. package/dist/chunk-WN2OXGGH.js.map +1 -0
  228. package/dist/{chunk-ZBW7A667.js → chunk-WPGA4RYI.js} +2 -2
  229. package/dist/{chunk-YQNNHLCG.js → chunk-WPGR3RW4.js} +2 -2
  230. package/dist/{chunk-SV4Z2S67.js → chunk-WUUGE7QC.js} +54 -21
  231. package/dist/chunk-WUUGE7QC.js.map +1 -0
  232. package/dist/{chunk-NXGSONWM.js → chunk-WZIO3TW6.js} +2 -2
  233. package/dist/{chunk-ZZUVBZL2.js → chunk-X2QPKLPL.js} +2 -2
  234. package/dist/{chunk-5HYUUFMQ.js → chunk-XCPNH2MG.js} +259 -10
  235. package/dist/chunk-XCPNH2MG.js.map +1 -0
  236. package/dist/{chunk-VSL63CFJ.js → chunk-XRS65T4O.js} +9 -9
  237. package/dist/{chunk-5N4MZLEH.js → chunk-YFXAWGMR.js} +2 -2
  238. package/dist/{chunk-KQW3YGEN.js → chunk-YR5QT4SR.js} +32 -9
  239. package/dist/chunk-YR5QT4SR.js.map +1 -0
  240. package/dist/{chunk-CARRTDKC.js → chunk-Z22M4JCY.js} +4 -3
  241. package/dist/chunk-Z22M4JCY.js.map +1 -0
  242. package/dist/{chunk-D545Z7UH.js → chunk-Z535ADTC.js} +3 -3
  243. package/dist/{chunk-B36GUU6T.js → chunk-Z7NBT6AK.js} +38 -5
  244. package/dist/chunk-Z7NBT6AK.js.map +1 -0
  245. package/dist/{chunk-5YCNDC3C.js → chunk-ZX6NNFSY.js} +3 -3
  246. package/dist/{chunk-3N3PBBEH.js → chunk-ZYSOT6HD.js} +2 -2
  247. package/dist/{chunk-MCRVQ5YQ.js → chunk-ZZEIL3MI.js} +2 -2
  248. package/dist/{cli-DGq0MNpO.d.ts → cli-CUlMlS2N.d.ts} +5 -5
  249. package/dist/cli.d.ts +18 -16
  250. package/dist/cli.js +129 -126
  251. package/dist/coding/export-okf-codegraph.d.ts +1 -1
  252. package/dist/coding/export-okf-codegraph.js +22 -22
  253. package/dist/coding/pre-action-gate.d.ts +1 -1
  254. package/dist/compounding/engine.d.ts +2 -2
  255. package/dist/compounding/engine.js +25 -25
  256. package/dist/compounding/preference-consolidator.d.ts +1 -1
  257. package/dist/compression-optimizer.d.ts +1 -1
  258. package/dist/config.d.ts +1 -1
  259. package/dist/config.js +10 -9
  260. package/dist/connectors/codex-materialize-runner.d.ts +1 -1
  261. package/dist/connectors/codex-materialize-runner.js +25 -25
  262. package/dist/connectors/codex-materialize.d.ts +1 -1
  263. package/dist/connectors/codex-materialize.js +2 -2
  264. package/dist/connectors/index.d.ts +1 -1
  265. package/dist/connectors/index.js +25 -25
  266. package/dist/consolidation-provenance-check.d.ts +2 -2
  267. package/dist/consolidation-undo.d.ts +2 -2
  268. package/dist/contradiction/index.d.ts +6 -5
  269. package/dist/contradiction/index.js +4 -4
  270. package/dist/{contradiction-scan-BSGKZHYJ.js → contradiction-scan-GVD4JJ7B.js} +4 -4
  271. package/dist/converge-config.d.ts +1 -1
  272. package/dist/convergence-refresh.d.ts +2 -2
  273. package/dist/convergence-refresh.js +26 -26
  274. package/dist/conversation-index/backend.d.ts +1 -1
  275. package/dist/conversation-index/chunker.d.ts +1 -1
  276. package/dist/conversation-index/faiss-adapter.d.ts +1 -1
  277. package/dist/conversation-index/indexer.d.ts +1 -1
  278. package/dist/conversation-index/search.d.ts +1 -1
  279. package/dist/corpus-watermark.d.ts +1 -1
  280. package/dist/corpus-watermark.js +25 -25
  281. package/dist/cross-lingual-recall.d.ts +1 -1
  282. package/dist/dashboard-runtime.js +2 -2
  283. package/dist/day-summary.d.ts +1 -1
  284. package/dist/deep-recall-config.d.ts +12 -1
  285. package/dist/deep-recall-config.js +5 -3
  286. package/dist/deep-recall-http-glue.d.ts +19 -15
  287. package/dist/deep-recall-http-glue.js +7 -4
  288. package/dist/deep-recall-mcp-tools.d.ts +16 -14
  289. package/dist/deep-recall-policy-llm.d.ts +14 -3
  290. package/dist/deep-recall-policy-llm.js +3 -3
  291. package/dist/deep-recall-seeds.d.ts +4 -1
  292. package/dist/deep-recall-seeds.js +1 -1
  293. package/dist/deep-recall.d.ts +12 -1
  294. package/dist/deep-recall.js +3 -2
  295. package/dist/delinearize.d.ts +1 -1
  296. package/dist/dependency-propagation-config.d.ts +1 -1
  297. package/dist/{dependency-propagation-delivery-Cq1ekOwV.d.ts → dependency-propagation-delivery-BDDjImQn.d.ts} +1 -1
  298. package/dist/direct-answer-wiring.d.ts +1 -1
  299. package/dist/direct-answer.d.ts +1 -1
  300. package/dist/embedding-fallback.d.ts +1 -1
  301. package/dist/enrichment/index.d.ts +1 -1
  302. package/dist/entity-origin-fields.d.ts +1 -1
  303. package/dist/entity-retrieval.d.ts +2 -2
  304. package/dist/entity-retrieval.js +24 -24
  305. package/dist/entity-schema.d.ts +1 -1
  306. package/dist/episodic-context.d.ts +1 -1
  307. package/dist/eval-trajectory-contracts.d.ts +1 -1
  308. package/dist/eval-trajectory-store.d.ts +1 -1
  309. package/dist/eval-trajectory.d.ts +1 -1
  310. package/dist/explicit-capture.d.ts +13 -12
  311. package/dist/explicit-capture.js +3 -3
  312. package/dist/external-wiki-access.d.ts +16 -14
  313. package/dist/external-wiki-access.js +76 -75
  314. package/dist/external-wiki-collection-registration.d.ts +1 -1
  315. package/dist/external-wiki-collection.d.ts +1 -1
  316. package/dist/external-wiki-mcp-tools.d.ts +16 -14
  317. package/dist/extraction-error-classification.d.ts +14 -3
  318. package/dist/extraction-error-classification.js +5 -3
  319. package/dist/extraction-faithfulness.d.ts +4 -3
  320. package/dist/extraction-faithfulness.js +3 -3
  321. package/dist/extraction-judge-telemetry.d.ts +4 -3
  322. package/dist/extraction-judge-training.d.ts +4 -3
  323. package/dist/extraction-judge.d.ts +4 -3
  324. package/dist/extraction-judge.js +3 -3
  325. package/dist/extraction-liveness.d.ts +1 -1
  326. package/dist/extraction-normalization.d.ts +1 -1
  327. package/dist/extraction-prompt.d.ts +1 -1
  328. package/dist/extraction-source-grounding-rules.d.ts +1 -1
  329. package/dist/extraction-source-grounding.d.ts +1 -1
  330. package/dist/extraction-span-config.d.ts +1 -1
  331. package/dist/extraction-span-materialize.d.ts +1 -1
  332. package/dist/extraction.d.ts +4 -4
  333. package/dist/extraction.js +40 -38
  334. package/dist/fallback-llm-codex-subscription.d.ts +65 -10
  335. package/dist/fallback-llm-codex-subscription.js +19 -1
  336. package/dist/fallback-llm.d.ts +25 -28
  337. package/dist/fallback-llm.js +4 -3
  338. package/dist/{first-start-migration-ZWMV5CX4.js → first-start-migration-L3UFX5CU.js} +4 -4
  339. package/dist/{generic-recall-paths-BcySh_f9.d.ts → generic-recall-paths-CpDzNO_I.d.ts} +1 -1
  340. package/dist/graph-append-error.d.ts +1 -1
  341. package/dist/graph-dashboard-diff.d.ts +1 -1
  342. package/dist/graph-dashboard-key.d.ts +1 -1
  343. package/dist/graph-dashboard-parser.d.ts +1 -1
  344. package/dist/graph-edge-reinforcement.d.ts +1 -1
  345. package/dist/graph-jsonl.d.ts +1 -1
  346. package/dist/graph-path-reconstruction.d.ts +1 -1
  347. package/dist/graph-path-scoring.d.ts +1 -1
  348. package/dist/graph-snapshot.d.ts +1 -1
  349. package/dist/graph.d.ts +1 -1
  350. package/dist/harmonic-retrieval.js +3 -3
  351. package/dist/importance.d.ts +1 -1
  352. package/dist/importers/index.d.ts +1 -1
  353. package/dist/importers/test-utils.d.ts +1 -1
  354. package/dist/in-flight-reads.d.ts +1 -1
  355. package/dist/{index-DWOb4wz9.d.ts → index-CtmmCJoo.d.ts} +3 -3
  356. package/dist/index.d.ts +80 -40
  357. package/dist/index.js +316 -296
  358. package/dist/intent.d.ts +1 -1
  359. package/dist/lcm/engine.d.ts +1 -1
  360. package/dist/lcm/engine.js +3 -3
  361. package/dist/lcm/index.d.ts +1 -1
  362. package/dist/lcm/index.js +11 -11
  363. package/dist/lcm/tools.d.ts +1 -1
  364. package/dist/lifecycle.d.ts +1 -1
  365. package/dist/live-connectors-runner.d.ts +1 -1
  366. package/dist/local-llm-DpXIvm6F.d.ts +247 -0
  367. package/dist/local-llm-config.d.ts +4 -1
  368. package/dist/local-llm-config.js +4 -2
  369. package/dist/local-llm-helpers.d.ts +18 -69
  370. package/dist/local-llm-helpers.js +1 -1
  371. package/dist/local-llm.d.ts +3 -170
  372. package/dist/local-llm.js +2 -2
  373. package/dist/local-model-endpoint.d.ts +1 -1
  374. package/dist/location/index.d.ts +3 -3
  375. package/dist/location/index.js +25 -25
  376. package/dist/maintenance/memory-governance.d.ts +1 -1
  377. package/dist/maintenance/memory-governance.js +24 -24
  378. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +2 -2
  379. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +23 -23
  380. package/dist/maintenance/rebuild-memory-projection.d.ts +2 -2
  381. package/dist/maintenance/rebuild-memory-projection.js +25 -25
  382. package/dist/{maintenance-CW9wCzMP.d.ts → maintenance-CNgoLsoM.d.ts} +13 -6
  383. package/dist/mcp-memory-inspector-app.d.ts +16 -14
  384. package/dist/memory-action-policy.d.ts +1 -1
  385. package/dist/memory-cache.d.ts +1 -1
  386. package/dist/memory-controller.d.ts +1 -1
  387. package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
  388. package/dist/memory-projection-store.d.ts +1 -1
  389. package/dist/memory-provenance.d.ts +1 -1
  390. package/dist/memory-snapshot.d.ts +1 -1
  391. package/dist/memory-subject-cli.d.ts +16 -14
  392. package/dist/memory-subject.d.ts +16 -14
  393. package/dist/memory-worth-outcomes.d.ts +2 -2
  394. package/dist/models-json.d.ts +1 -1
  395. package/dist/namespaces/migrate.d.ts +3 -3
  396. package/dist/namespaces/migrate.js +24 -24
  397. package/dist/namespaces/principal.d.ts +1 -1
  398. package/dist/namespaces/search.d.ts +12 -1
  399. package/dist/namespaces/search.js +9 -9
  400. package/dist/namespaces/storage.d.ts +3 -3
  401. package/dist/namespaces/storage.js +23 -23
  402. package/dist/native-knowledge.d.ts +1 -1
  403. package/dist/offline-sync-impression-drain.d.ts +1 -1
  404. package/dist/operator-doctor-corpus.d.ts +1 -1
  405. package/dist/operator-doctor-corpus.js +26 -26
  406. package/dist/operator-doctor-replica.d.ts +1 -1
  407. package/dist/operator-toolkit.d.ts +3 -3
  408. package/dist/operator-toolkit.js +45 -44
  409. package/dist/orchestration/compression-guideline-coordinator.d.ts +2 -2
  410. package/dist/orchestration/maintenance.d.ts +4 -4
  411. package/dist/orchestration/maintenance.js +36 -36
  412. package/dist/{orchestrator-ComHLm49.d.ts → orchestrator-DT7ybIFz.d.ts} +32 -11
  413. package/dist/orchestrator.d.ts +13 -12
  414. package/dist/orchestrator.js +176 -171
  415. package/dist/patterns-cli.d.ts +1 -1
  416. package/dist/{pipeline-CiYcqqhl.d.ts → pipeline-CgBEmHcz.d.ts} +1 -1
  417. package/dist/policy-runtime.d.ts +1 -1
  418. package/dist/proactive-contention.d.ts +2 -2
  419. package/dist/provenance.d.ts +1 -1
  420. package/dist/{public-http-CuK4_Cb1.d.ts → public-http-C8P8fyiO.d.ts} +1 -1
  421. package/dist/{qmd-qXD4vatU.d.ts → qmd-BkY8KpCh.d.ts} +2 -2
  422. package/dist/qmd-preflight.d.ts +2 -2
  423. package/dist/qmd-recall-cache.d.ts +1 -1
  424. package/dist/qmd.d.ts +2 -2
  425. package/dist/qmd.js +2 -2
  426. package/dist/recall-concurrency-config.d.ts +1 -1
  427. package/dist/recall-disclosure-escalation.d.ts +1 -1
  428. package/dist/recall-explain-renderer.d.ts +1 -1
  429. package/dist/recall-explain-renderer.js +3 -3
  430. package/dist/recall-memory-map.d.ts +1 -1
  431. package/dist/recall-navigate-access.d.ts +1 -1
  432. package/dist/recall-navigate-access.js +2 -2
  433. package/dist/recall-navigate-disclosure.d.ts +1 -1
  434. package/dist/recall-navigate-disclosure.js +1 -1
  435. package/dist/recall-navigate.d.ts +1 -1
  436. package/dist/recall-navigate.js +2 -2
  437. package/dist/recall-planner-llm.d.ts +3 -2
  438. package/dist/recall-planner-llm.js +4 -3
  439. package/dist/recall-planner-llm.js.map +1 -1
  440. package/dist/recall-state-view-admission.d.ts +13 -3
  441. package/dist/recall-state-view-admission.js +9 -9
  442. package/dist/recall-state-view-anchors.d.ts +1 -1
  443. package/dist/recall-state-view-anchors.js +2 -2
  444. package/dist/recall-state-view-inject.js +2 -2
  445. package/dist/recall-state-view-render.js +2 -2
  446. package/dist/recall-state-view-widen.js +2 -2
  447. package/dist/recall-state-view-wire.js +3 -3
  448. package/dist/recall-state-view.d.ts +10 -1
  449. package/dist/recall-state-view.js +5 -3
  450. package/dist/recall-state.d.ts +1 -1
  451. package/dist/recall-tag-filter.d.ts +1 -1
  452. package/dist/recall-timings.d.ts +1 -1
  453. package/dist/recall-xray-cli.d.ts +1 -1
  454. package/dist/recall-xray-cli.js +4 -4
  455. package/dist/recall-xray-renderer.d.ts +1 -1
  456. package/dist/recall-xray-renderer.js +3 -3
  457. package/dist/recall-xray.d.ts +1 -1
  458. package/dist/recall-xray.js +2 -2
  459. package/dist/reconcile/cursor.d.ts +1 -1
  460. package/dist/reconcile/cursor.js +2 -2
  461. package/dist/reconcile/manifest.d.ts +1 -1
  462. package/dist/reconcile/manifest.js +4 -4
  463. package/dist/reconcile/plan.d.ts +1 -1
  464. package/dist/reconcile/plan.js +2 -2
  465. package/dist/replay/normalizers/chatgpt.d.ts +1 -1
  466. package/dist/replay/normalizers/claude.d.ts +1 -1
  467. package/dist/replay/normalizers/openclaw.d.ts +1 -1
  468. package/dist/replay/normalizers/shared.d.ts +1 -1
  469. package/dist/replay/runner.d.ts +1 -1
  470. package/dist/replay/types.d.ts +1 -1
  471. package/dist/replica-divergence.d.ts +1 -1
  472. package/dist/replica-peers-config.d.ts +1 -1
  473. package/dist/{resolution-4GG3QZRJ.js → resolution-LXFQQ4AE.js} +5 -5
  474. package/dist/resolution-LXFQQ4AE.js.map +1 -0
  475. package/dist/resolve-auth-token.d.ts +1 -1
  476. package/dist/resume-bundles.js +12 -11
  477. package/dist/retrieval-agents.d.ts +2 -2
  478. package/dist/retrieval-tiers.d.ts +1 -1
  479. package/dist/routing/engine.d.ts +1 -1
  480. package/dist/routing/store.d.ts +1 -1
  481. package/dist/salvage-envelope.d.ts +1 -1
  482. package/dist/{scope-profiles-BT9rqC3w.d.ts → scope-profiles-BBPjZ9jb.d.ts} +1 -1
  483. package/dist/search/embed-helper.d.ts +1 -1
  484. package/dist/search/factory.d.ts +1 -1
  485. package/dist/search/factory.js +8 -8
  486. package/dist/search/index.d.ts +1 -1
  487. package/dist/search/index.js +12 -12
  488. package/dist/search/lancedb-backend.d.ts +1 -1
  489. package/dist/search/lancedb-backend.js +2 -2
  490. package/dist/search/meilisearch-backend.d.ts +1 -1
  491. package/dist/search/meilisearch-backend.js +2 -2
  492. package/dist/search/noop-backend.d.ts +1 -1
  493. package/dist/search/orama-backend.d.ts +1 -1
  494. package/dist/search/orama-backend.js +2 -2
  495. package/dist/search/port.d.ts +2 -2
  496. package/dist/search/port.js +1 -1
  497. package/dist/search/remote-backend.d.ts +1 -1
  498. package/dist/search/remote-backend.js +2 -2
  499. package/dist/{semantic-consolidation-CmZi7thY.d.ts → semantic-consolidation-BPFFVO84.d.ts} +1 -1
  500. package/dist/semantic-consolidation.d.ts +2 -2
  501. package/dist/semantic-consolidation.js +26 -26
  502. package/dist/semantic-rule-promotion.js +23 -23
  503. package/dist/semantic-rule-verifier.d.ts +1 -1
  504. package/dist/semantic-rule-verifier.js +23 -23
  505. package/dist/{service-CLkA7AQB.d.ts → service-jKcr6Jvr.d.ts} +2 -2
  506. package/dist/session-observer-bands.d.ts +1 -1
  507. package/dist/session-observer-state.d.ts +1 -1
  508. package/dist/shared-context/manager.d.ts +1 -1
  509. package/dist/shared-context/manager.js +2 -2
  510. package/dist/shared-context/write-output-controls.d.ts +34 -0
  511. package/dist/shared-context/write-output-controls.js +10 -0
  512. package/dist/shared-context/write-output-controls.js.map +1 -0
  513. package/dist/signal.d.ts +1 -1
  514. package/dist/source-agent-qualifier.d.ts +1 -1
  515. package/dist/source-agent-qualifier.js +31 -31
  516. package/dist/source-attribution.d.ts +23 -1
  517. package/dist/source-attribution.js +13 -3
  518. package/dist/standup/build.js +23 -23
  519. package/dist/{storage-wvX01lht.d.ts → storage-C-0Ah5OY.d.ts} +2 -1
  520. package/dist/storage.d.ts +2 -2
  521. package/dist/storage.js +22 -22
  522. package/dist/subject-config.d.ts +1 -1
  523. package/dist/summarizer.d.ts +1 -1
  524. package/dist/summarizer.js +6 -6
  525. package/dist/summary-snapshot.d.ts +1 -1
  526. package/dist/support-passport/index.d.ts +18 -17
  527. package/dist/support-passport/index.js +78 -77
  528. package/dist/task-llm-config.d.ts +16 -0
  529. package/dist/task-llm-config.js +12 -0
  530. package/dist/task-llm-config.js.map +1 -0
  531. package/dist/temporal-supersession.d.ts +2 -2
  532. package/dist/temporal-timeline-recall.d.ts +1 -1
  533. package/dist/temporal-validity.d.ts +1 -1
  534. package/dist/threading.d.ts +1 -1
  535. package/dist/tier-migration.d.ts +2 -2
  536. package/dist/tier-routing.d.ts +1 -1
  537. package/dist/tier-routing.js +3 -3
  538. package/dist/{tier-stats-LUSUUNU6.js → tier-stats-VK5PCO2L.js} +4 -4
  539. package/dist/topics.d.ts +1 -1
  540. package/dist/transcript.d.ts +1 -1
  541. package/dist/transfer/backup.js +2 -2
  542. package/dist/transfer/capsule-export.js +2 -2
  543. package/dist/transfer/capsule-import.js +3 -3
  544. package/dist/transfer/export-okf.d.ts +1 -1
  545. package/dist/transfer/export-okf.js +23 -23
  546. package/dist/trust-score-stage.d.ts +1 -1
  547. package/dist/trust-score.d.ts +1 -1
  548. package/dist/{types-Cyr32ABj.d.ts → types-cK5LydjL.d.ts} +6 -1
  549. package/dist/types.d.ts +1 -1
  550. package/dist/types.js +1 -1
  551. package/dist/utility-runtime.d.ts +1 -1
  552. package/dist/verified-recall.js +23 -23
  553. package/dist/who-knows-cli.d.ts +16 -14
  554. package/dist/who-knows-cli.js +24 -24
  555. package/dist/who-knows.d.ts +16 -14
  556. package/dist/who-knows.js +23 -23
  557. package/dist/write-envelope.d.ts +1 -1
  558. package/package.json +12 -2
  559. package/src/access-category-alias.test.ts +93 -0
  560. package/src/access-http.ts +1 -1
  561. package/src/access-mcp-shared-context-tools.ts +103 -0
  562. package/src/access-mcp.ts +4 -74
  563. package/src/access-offline-manifest.ts +52 -2
  564. package/src/access-operations-batch.ts +45 -2
  565. package/src/access-schema.ts +9 -4
  566. package/src/access-service.ts +14 -7
  567. package/src/activity/config.test.ts +61 -0
  568. package/src/activity/config.ts +40 -1
  569. package/src/activity/timeline/analysis-provider.ts +8 -2
  570. package/src/activity/timeline/analysis-run.test.ts +82 -0
  571. package/src/activity/timeline/publish-cli.test.ts +30 -0
  572. package/src/activity/timeline/publish-cli.ts +7 -0
  573. package/src/activity/timeline/query.ts +8 -1
  574. package/src/activity/timeline/regenerate.test.ts +130 -2
  575. package/src/activity/timeline/regenerate.ts +14 -6
  576. package/src/activity/vault-frontmatter.test.ts +99 -1
  577. package/src/activity/vault-frontmatter.ts +131 -0
  578. package/src/activity/vault-publish.ts +6 -0
  579. package/src/activity/vault-publisher.test.ts +172 -0
  580. package/src/activity/vault-publisher.ts +69 -15
  581. package/src/activity/vault-region.test.ts +7 -2
  582. package/src/activity/vault-region.ts +7 -3
  583. package/src/background-generation-config.ts +32 -6
  584. package/src/background-generation.test.ts +10 -1
  585. package/src/cli/deep-recall-commands.ts +22 -10
  586. package/src/cli/timeline-publish-commands.ts +9 -0
  587. package/src/config.test.ts +170 -43
  588. package/src/config.ts +22 -5
  589. package/src/dedup/merge.test.ts +283 -0
  590. package/src/deep-recall-boundary.test.ts +66 -0
  591. package/src/deep-recall-cli.test.ts +82 -0
  592. package/src/deep-recall-config.test.ts +56 -0
  593. package/src/deep-recall-config.ts +32 -0
  594. package/src/deep-recall-http-glue.ts +10 -10
  595. package/src/deep-recall-policy-llm.test.ts +242 -0
  596. package/src/deep-recall-policy-llm.ts +37 -7
  597. package/src/deep-recall-seeds.test.ts +53 -0
  598. package/src/deep-recall-seeds.ts +7 -1
  599. package/src/deep-recall-surface.test.ts +93 -0
  600. package/src/deep-recall.test.ts +121 -0
  601. package/src/deep-recall.ts +88 -28
  602. package/src/extraction-error-classification.ts +36 -1
  603. package/src/extraction-timeout.test.ts +110 -1
  604. package/src/extraction.test.ts +19 -1
  605. package/src/extraction.ts +23 -21
  606. package/src/fallback-llm-codex-subscription.ts +220 -12
  607. package/src/fallback-llm-parse-failure.test.ts +156 -0
  608. package/src/fallback-llm.test.ts +178 -0
  609. package/src/fallback-llm.ts +200 -198
  610. package/src/index.ts +1 -0
  611. package/src/local-llm-config.ts +11 -10
  612. package/src/local-llm-headers-timeout.test.ts +30 -0
  613. package/src/local-llm-helpers.ts +28 -0
  614. package/src/local-llm.ts +8 -19
  615. package/src/meetings/config.test.ts +58 -0
  616. package/src/namespaces/search.test.ts +51 -1
  617. package/src/namespaces/search.ts +48 -3
  618. package/src/orchestration/extraction-persist-promotion.test.ts +228 -2
  619. package/src/orchestration/extraction-persist-promotion.ts +17 -14
  620. package/src/orchestration/extraction-persist.ts +1 -1
  621. package/src/orchestration/orchestrator-helpers.test.ts +104 -0
  622. package/src/orchestration/orchestrator-init.ts +366 -106
  623. package/src/orchestration/recall-entry.ts +15 -1
  624. package/src/orchestration/recall-internal.ts +6 -11
  625. package/src/orchestration/recall-section-coordinator.ts +65 -28
  626. package/src/orchestration/recall-state-view-pipeline.test.ts +8 -2
  627. package/src/orchestration/semantic-merge-commit-effects.ts +45 -16
  628. package/src/orchestration/semantic-merge-persist.ts +23 -36
  629. package/src/orchestration/semantic-merge-promotion-payload.ts +62 -6
  630. package/src/orchestration/startup-collection-checks.ts +85 -0
  631. package/src/orchestrator-flush.test.ts +7 -0
  632. package/src/orchestrator-init.test.ts +1539 -0
  633. package/src/orchestrator.ts +7 -0
  634. package/src/providers/codex-subscription.test.ts +127 -0
  635. package/src/providers/codex-subscription.ts +1 -1
  636. package/src/qmd.ts +21 -10
  637. package/src/recall-state-view-admission.ts +11 -1
  638. package/src/recall-state-view-budget.test.ts +424 -0
  639. package/src/recall-state-view-cron-intent.test.ts +268 -0
  640. package/src/recall-state-view-widen.test.ts +14 -5
  641. package/src/recall-state-view-widen.ts +8 -1
  642. package/src/recall-state-view.ts +35 -18
  643. package/src/reconcile-identity-cache.test.ts +82 -1
  644. package/src/search/port.ts +1 -1
  645. package/src/shared-context/envelope-io.ts +25 -0
  646. package/src/shared-context/envelope-wiring.test.ts +4 -2
  647. package/src/shared-context/manager.ts +1 -0
  648. package/src/shared-context/write-output-controls.test.ts +192 -0
  649. package/src/shared-context/write-output-controls.ts +72 -0
  650. package/src/source-attribution.test.ts +39 -0
  651. package/src/source-attribution.ts +72 -0
  652. package/src/storage/cas-revision-store.test.ts +4 -0
  653. package/src/storage/cas-revision-store.ts +104 -12
  654. package/src/storage-frontmatter-cas.test.ts +19 -17
  655. package/src/summarizer.ts +5 -1
  656. package/src/task-llm-config.test.ts +124 -0
  657. package/src/task-llm-config.ts +88 -0
  658. package/src/testing/subjects/startup-discovery-lifecycle.test.ts +273 -0
  659. package/src/types.ts +6 -0
  660. package/dist/chunk-3CBI2ZSA.js.map +0 -1
  661. package/dist/chunk-5HYUUFMQ.js.map +0 -1
  662. package/dist/chunk-5SPCMAUC.js.map +0 -1
  663. package/dist/chunk-6H2G7RFT.js.map +0 -1
  664. package/dist/chunk-6YAIN5XJ.js.map +0 -1
  665. package/dist/chunk-ACY4ZPF7.js.map +0 -1
  666. package/dist/chunk-B36GUU6T.js.map +0 -1
  667. package/dist/chunk-BLDBT6HZ.js.map +0 -1
  668. package/dist/chunk-CARRTDKC.js.map +0 -1
  669. package/dist/chunk-CC37E3QM.js.map +0 -1
  670. package/dist/chunk-CWTCMZGE.js.map +0 -1
  671. package/dist/chunk-CZTPU65V.js.map +0 -1
  672. package/dist/chunk-EYKIDK33.js.map +0 -1
  673. package/dist/chunk-FWWWUPOE.js.map +0 -1
  674. package/dist/chunk-IQEJIOEU.js.map +0 -1
  675. package/dist/chunk-IYKZJVL5.js.map +0 -1
  676. package/dist/chunk-JXN77SGO.js.map +0 -1
  677. package/dist/chunk-KQW3YGEN.js.map +0 -1
  678. package/dist/chunk-LPYYY4AP.js.map +0 -1
  679. package/dist/chunk-LQNRVPTV.js.map +0 -1
  680. package/dist/chunk-MVAQ2WM3.js.map +0 -1
  681. package/dist/chunk-OEDW4ER7.js.map +0 -1
  682. package/dist/chunk-OPBFP4TF.js.map +0 -1
  683. package/dist/chunk-P4ZAEYKG.js.map +0 -1
  684. package/dist/chunk-QHT7MOUF.js.map +0 -1
  685. package/dist/chunk-QTQ6XKGT.js.map +0 -1
  686. package/dist/chunk-SV4Z2S67.js.map +0 -1
  687. package/dist/chunk-TNZNSMVJ.js.map +0 -1
  688. package/dist/chunk-TRLOFIQC.js.map +0 -1
  689. package/dist/chunk-UZEHHXYC.js.map +0 -1
  690. package/dist/chunk-WKDFJXW5.js.map +0 -1
  691. package/dist/chunk-YDVAM7S4.js.map +0 -1
  692. package/dist/chunk-YFTNZMGR.js.map +0 -1
  693. package/dist/chunk-YKREX63Z.js.map +0 -1
  694. /package/dist/{capsule-crypto-7FJQINUR.js.map → access-mcp-shared-context-tools.js.map} +0 -0
  695. /package/dist/{auto-sync-RP4C6ZPF.js.map → auto-sync-7PGUFY7U.js.map} +0 -0
  696. /package/dist/{contradiction-scan-BSGKZHYJ.js.map → capsule-crypto-YO5QJ6L3.js.map} +0 -0
  697. /package/dist/{capsule-merge-IPG4IOFP.js.map → capsule-merge-3MNURAQ3.js.map} +0 -0
  698. /package/dist/{chunk-XH3HGI2N.js.map → chunk-2HQPE2NM.js.map} +0 -0
  699. /package/dist/{chunk-3EKVN2OP.js.map → chunk-2ZG2LLZT.js.map} +0 -0
  700. /package/dist/{chunk-6EHM2AV7.js.map → chunk-3BLHPQHT.js.map} +0 -0
  701. /package/dist/{chunk-J272ODKJ.js.map → chunk-42DJ235G.js.map} +0 -0
  702. /package/dist/{chunk-F4EHXVP7.js.map → chunk-46RII65S.js.map} +0 -0
  703. /package/dist/{chunk-YUW66UAH.js.map → chunk-4AX5OYKC.js.map} +0 -0
  704. /package/dist/{chunk-AECJY3GJ.js.map → chunk-4IGOLIWM.js.map} +0 -0
  705. /package/dist/{chunk-2ZTDRNCS.js.map → chunk-54QPOE45.js.map} +0 -0
  706. /package/dist/{chunk-O4M4BDIJ.js.map → chunk-563X6JJX.js.map} +0 -0
  707. /package/dist/{chunk-IL6ODG6M.js.map → chunk-5EQT62HH.js.map} +0 -0
  708. /package/dist/{chunk-JKKII6GX.js.map → chunk-6MQMYXSQ.js.map} +0 -0
  709. /package/dist/{chunk-TVVEYCNW.js.map → chunk-7K5Q6COX.js.map} +0 -0
  710. /package/dist/{chunk-BV4ZKIZH.js.map → chunk-7ZLC4DTZ.js.map} +0 -0
  711. /package/dist/{chunk-WBM2MVBK.js.map → chunk-A4OIJYCV.js.map} +0 -0
  712. /package/dist/{chunk-RLJHJQUY.js.map → chunk-AFJHNHAM.js.map} +0 -0
  713. /package/dist/{chunk-4RZLTZVM.js.map → chunk-AKABVXFS.js.map} +0 -0
  714. /package/dist/{chunk-M6HBPLBA.js.map → chunk-AUSRUOMQ.js.map} +0 -0
  715. /package/dist/{chunk-2NLLXCJG.js.map → chunk-BXLOS5AJ.js.map} +0 -0
  716. /package/dist/{chunk-Q7CLGFA7.js.map → chunk-C3G6MW4W.js.map} +0 -0
  717. /package/dist/{chunk-O76F5QPP.js.map → chunk-D6PY63OM.js.map} +0 -0
  718. /package/dist/{chunk-BD7JTBYP.js.map → chunk-D7MAYFQP.js.map} +0 -0
  719. /package/dist/{chunk-LMLGBG6H.js.map → chunk-DBB5JPSL.js.map} +0 -0
  720. /package/dist/{chunk-TSP5WH72.js.map → chunk-DIXZQTGY.js.map} +0 -0
  721. /package/dist/{chunk-X7Y7WX73.js.map → chunk-DQEMWVMT.js.map} +0 -0
  722. /package/dist/{chunk-UHRZ324M.js.map → chunk-E3I3NDUP.js.map} +0 -0
  723. /package/dist/{chunk-AENM6GKU.js.map → chunk-E4LMQTST.js.map} +0 -0
  724. /package/dist/{chunk-MUTVRKKY.js.map → chunk-EMSYMYXO.js.map} +0 -0
  725. /package/dist/{chunk-YNDLCWXS.js.map → chunk-EZ25VE3G.js.map} +0 -0
  726. /package/dist/{chunk-FXHOZGSE.js.map → chunk-F5H6YG5P.js.map} +0 -0
  727. /package/dist/{chunk-TNSCIPBQ.js.map → chunk-G6NQ3L4T.js.map} +0 -0
  728. /package/dist/{chunk-ZMWSYUUL.js.map → chunk-GCBIXUPT.js.map} +0 -0
  729. /package/dist/{chunk-4BCHFSC7.js.map → chunk-GWNSKQDA.js.map} +0 -0
  730. /package/dist/{chunk-JDX2OA4R.js.map → chunk-HNHIHXSD.js.map} +0 -0
  731. /package/dist/{chunk-GG5FHZJJ.js.map → chunk-I33QYUAF.js.map} +0 -0
  732. /package/dist/{chunk-AAZEKXUP.js.map → chunk-IYIPXAIJ.js.map} +0 -0
  733. /package/dist/{chunk-5U7K4W6K.js.map → chunk-JDOBQPJY.js.map} +0 -0
  734. /package/dist/{chunk-UZZ7SQT3.js.map → chunk-JMWUPUE6.js.map} +0 -0
  735. /package/dist/{chunk-ENBPQEVU.js.map → chunk-JSD7Q7LD.js.map} +0 -0
  736. /package/dist/{chunk-Q432REND.js.map → chunk-KJLLPG26.js.map} +0 -0
  737. /package/dist/{chunk-JTQR6L2N.js.map → chunk-KLUC2GSG.js.map} +0 -0
  738. /package/dist/{chunk-OB3XMWX5.js.map → chunk-KVO2BTA4.js.map} +0 -0
  739. /package/dist/{chunk-PCOVEDPK.js.map → chunk-KZJM7R4F.js.map} +0 -0
  740. /package/dist/{chunk-X4TD4O2F.js.map → chunk-LE2KZ72G.js.map} +0 -0
  741. /package/dist/{chunk-HIP6DKJJ.js.map → chunk-LQVXSRAJ.js.map} +0 -0
  742. /package/dist/{chunk-A7GQBJP5.js.map → chunk-LVFI5LG7.js.map} +0 -0
  743. /package/dist/{chunk-VBSNUH4J.js.map → chunk-ND7MAIJC.js.map} +0 -0
  744. /package/dist/{chunk-54NX5EG4.js.map → chunk-P66QH6R6.js.map} +0 -0
  745. /package/dist/{chunk-62D2PAAM.js.map → chunk-PAAJWQH5.js.map} +0 -0
  746. /package/dist/{chunk-TA4C3XB7.js.map → chunk-PFKIOYJH.js.map} +0 -0
  747. /package/dist/{chunk-WIWLX65T.js.map → chunk-PGGPRF6J.js.map} +0 -0
  748. /package/dist/{chunk-V6EGNVUT.js.map → chunk-PIWFNPQT.js.map} +0 -0
  749. /package/dist/{chunk-4JVQRFZD.js.map → chunk-PLJ2MQFT.js.map} +0 -0
  750. /package/dist/{chunk-4RX5O34R.js.map → chunk-PQ42DJNG.js.map} +0 -0
  751. /package/dist/{chunk-37CAEC7E.js.map → chunk-PWPIERBM.js.map} +0 -0
  752. /package/dist/{chunk-ZEGL7YCC.js.map → chunk-Q62GA5U2.js.map} +0 -0
  753. /package/dist/{chunk-GAS7KYC7.js.map → chunk-RQQO3ORQ.js.map} +0 -0
  754. /package/dist/{chunk-3NPNBVFR.js.map → chunk-UZGHKD3T.js.map} +0 -0
  755. /package/dist/{chunk-VJIE4D2I.js.map → chunk-V62YYBBY.js.map} +0 -0
  756. /package/dist/{chunk-KQAFEZQX.js.map → chunk-VDX2J7OX.js.map} +0 -0
  757. /package/dist/{chunk-6AGWBKQU.js.map → chunk-VSN2DMQK.js.map} +0 -0
  758. /package/dist/{chunk-ZHXSOMYH.js.map → chunk-VVX5PZFS.js.map} +0 -0
  759. /package/dist/{chunk-GI4ZBWPQ.js.map → chunk-W7UV2ZCA.js.map} +0 -0
  760. /package/dist/{chunk-GMIQV6DD.js.map → chunk-WBQ4ONQJ.js.map} +0 -0
  761. /package/dist/{chunk-FNHLI2RE.js.map → chunk-WFMQN7JE.js.map} +0 -0
  762. /package/dist/{chunk-ZBW7A667.js.map → chunk-WPGA4RYI.js.map} +0 -0
  763. /package/dist/{chunk-YQNNHLCG.js.map → chunk-WPGR3RW4.js.map} +0 -0
  764. /package/dist/{chunk-NXGSONWM.js.map → chunk-WZIO3TW6.js.map} +0 -0
  765. /package/dist/{chunk-ZZUVBZL2.js.map → chunk-X2QPKLPL.js.map} +0 -0
  766. /package/dist/{chunk-VSL63CFJ.js.map → chunk-XRS65T4O.js.map} +0 -0
  767. /package/dist/{chunk-5N4MZLEH.js.map → chunk-YFXAWGMR.js.map} +0 -0
  768. /package/dist/{chunk-D545Z7UH.js.map → chunk-Z535ADTC.js.map} +0 -0
  769. /package/dist/{chunk-5YCNDC3C.js.map → chunk-ZX6NNFSY.js.map} +0 -0
  770. /package/dist/{chunk-3N3PBBEH.js.map → chunk-ZYSOT6HD.js.map} +0 -0
  771. /package/dist/{chunk-MCRVQ5YQ.js.map → chunk-ZZEIL3MI.js.map} +0 -0
  772. /package/dist/{resolution-4GG3QZRJ.js.map → contradiction-scan-GVD4JJ7B.js.map} +0 -0
  773. /package/dist/{first-start-migration-ZWMV5CX4.js.map → first-start-migration-L3UFX5CU.js.map} +0 -0
  774. /package/dist/{tier-stats-LUSUUNU6.js.map → tier-stats-VK5PCO2L.js.map} +0 -0
@@ -0,0 +1,242 @@
1
+ /**
2
+ * Deep-recall policy LLM budget/cancellation regressions (issue #2915).
3
+ *
4
+ * One `timeoutMs` budget must span the local and fallback legs: the fallback
5
+ * leg receives only what the local leg left on the clock, and never starts
6
+ * once the budget is spent. A spent budget also starts neither leg. The
7
+ * transport cancellation signal reaches both legs and rejects as AbortError
8
+ * when the signal is already aborted, when abort lands during the local
9
+ * leg, and when abort lands during the fallback. Deterministic: legs
10
+ * advance a patched clock instead of sleeping.
11
+ */
12
+
13
+ import test from "node:test";
14
+ import assert from "node:assert/strict";
15
+
16
+ import { isAbortError } from "./abort-error.js";
17
+ import { parseConfig } from "./config.js";
18
+ import { callDeepRecallPolicyLlm } from "./deep-recall-policy-llm.js";
19
+ import type { FallbackLlmClient } from "./fallback-llm.js";
20
+ import type { LocalLlmClient } from "./local-llm.js";
21
+
22
+ interface CapturedCall {
23
+ timeoutMs?: number;
24
+ signal?: AbortSignal;
25
+ }
26
+
27
+ function fakeClients(input: {
28
+ localBehavior?: (call: CapturedCall) => Promise<{ content: string } | null>;
29
+ fallbackBehavior?: (call: CapturedCall) => Promise<{ content: string } | null>;
30
+ }): {
31
+ localLlm: LocalLlmClient;
32
+ fallbackLlm: FallbackLlmClient;
33
+ localCalls: CapturedCall[];
34
+ fallbackCalls: CapturedCall[];
35
+ } {
36
+ const localCalls: CapturedCall[] = [];
37
+ const fallbackCalls: CapturedCall[] = [];
38
+ const localLlm = {
39
+ chatCompletion: async (_messages: unknown, options: { timeoutMs?: number; signal?: AbortSignal }) => {
40
+ const call = { ...(options.timeoutMs !== undefined ? { timeoutMs: options.timeoutMs } : {}), ...(options.signal ? { signal: options.signal } : {}) };
41
+ localCalls.push(call);
42
+ if (input.localBehavior) return input.localBehavior(call);
43
+ return { content: "local-ok" };
44
+ },
45
+ } as unknown as LocalLlmClient;
46
+ const fallbackLlm = {
47
+ chatCompletion: async (_messages: unknown, options: { timeoutMs?: number; signal?: AbortSignal }) => {
48
+ const call = { ...(options.timeoutMs !== undefined ? { timeoutMs: options.timeoutMs } : {}), ...(options.signal ? { signal: options.signal } : {}) };
49
+ fallbackCalls.push(call);
50
+ if (input.fallbackBehavior) return input.fallbackBehavior(call);
51
+ return { content: "fallback-ok" };
52
+ },
53
+ } as unknown as FallbackLlmClient;
54
+ return { localLlm, fallbackLlm, localCalls, fallbackCalls };
55
+ }
56
+
57
+ test("one step timeout spans both legs: a spent budget never starts the fallback (issue #2915)", async () => {
58
+ const realNow = Date.now;
59
+ let clock = 1_000_000;
60
+ Date.now = () => clock;
61
+ try {
62
+ const { localLlm, fallbackLlm, fallbackCalls } = fakeClients({
63
+ // The local leg burns the whole 50ms budget before failing.
64
+ localBehavior: () => {
65
+ clock += 60;
66
+ return Promise.reject(new Error("local leg failed"));
67
+ },
68
+ fallbackBehavior: () => {
69
+ throw new Error("the fallback must not start once the step budget is spent");
70
+ },
71
+ });
72
+ const result = await callDeepRecallPolicyLlm({
73
+ statePrompt: "state",
74
+ config: parseConfig({}),
75
+ localLlm,
76
+ fallbackLlm,
77
+ timeoutMs: 50,
78
+ });
79
+ assert.equal(result, null, "both legs failed/spent — the loop treats that as a stop");
80
+ assert.equal(fallbackCalls.length, 0, "the fallback leg never restarted the step timeout");
81
+ } finally {
82
+ Date.now = realNow;
83
+ }
84
+ });
85
+
86
+ test("the fallback leg receives only the budget the local leg left (issue #2915)", async () => {
87
+ const realNow = Date.now;
88
+ let clock = 1_000_000;
89
+ Date.now = () => clock;
90
+ try {
91
+ const { localLlm, fallbackLlm, fallbackCalls } = fakeClients({
92
+ localBehavior: () => {
93
+ clock += 30;
94
+ return Promise.reject(new Error("local leg failed"));
95
+ },
96
+ fallbackBehavior: () => Promise.resolve({ content: "fallback-ok" }),
97
+ });
98
+ const result = await callDeepRecallPolicyLlm({
99
+ statePrompt: "state",
100
+ config: parseConfig({}),
101
+ localLlm,
102
+ fallbackLlm,
103
+ timeoutMs: 200,
104
+ });
105
+ assert.equal(result, "fallback-ok");
106
+ assert.equal(fallbackCalls.length, 1);
107
+ const fallbackTimeout = fallbackCalls[0]?.timeoutMs;
108
+ assert.ok(
109
+ fallbackTimeout !== undefined && fallbackTimeout > 0 && fallbackTimeout <= 170,
110
+ `fallback timeout must be the remaining budget (got ${String(fallbackTimeout)}), not a restarted 200`,
111
+ );
112
+ } finally {
113
+ Date.now = realNow;
114
+ }
115
+ });
116
+
117
+ test("the cancellation signal reaches both legs and stops the fallback after abort (issue #2915)", async () => {
118
+ // Part A — a live signal is forwarded to both legs' options.
119
+ const live = fakeClients({
120
+ localBehavior: () => Promise.reject(new Error("local leg failed")),
121
+ });
122
+ const liveController = new AbortController();
123
+ const forwarded = await callDeepRecallPolicyLlm({
124
+ statePrompt: "state",
125
+ config: parseConfig({}),
126
+ localLlm: live.localLlm,
127
+ fallbackLlm: live.fallbackLlm,
128
+ timeoutMs: 0,
129
+ signal: liveController.signal,
130
+ });
131
+ assert.equal(forwarded, "fallback-ok");
132
+ assert.equal(live.localCalls[0]?.signal, liveController.signal, "the local leg received the transport signal");
133
+ assert.equal(live.fallbackCalls[0]?.signal, liveController.signal, "the fallback leg received the transport signal");
134
+
135
+ // Part B — cancellation during the local leg stops before the fallback.
136
+ const cancelled = fakeClients({
137
+ localBehavior: () => {
138
+ liveController.abort();
139
+ return Promise.reject(new Error("local leg failed"));
140
+ },
141
+ fallbackBehavior: () => {
142
+ throw new Error("the fallback must not run after cancellation");
143
+ },
144
+ });
145
+ await assert.rejects(
146
+ callDeepRecallPolicyLlm({
147
+ statePrompt: "state",
148
+ config: parseConfig({}),
149
+ localLlm: cancelled.localLlm,
150
+ fallbackLlm: cancelled.fallbackLlm,
151
+ timeoutMs: 0,
152
+ signal: liveController.signal,
153
+ }),
154
+ (err: unknown) => isAbortError(err),
155
+ "cancellation after the local leg surfaces as a standard AbortError",
156
+ );
157
+ assert.equal(cancelled.fallbackCalls.length, 0);
158
+ });
159
+
160
+ test("a pre-aborted signal rejects before either policy leg (issue #2915)", async () => {
161
+ const controller = new AbortController();
162
+ controller.abort();
163
+ const clients = fakeClients({
164
+ localBehavior: () => {
165
+ throw new Error("the local leg must not start after pre-abort");
166
+ },
167
+ fallbackBehavior: () => {
168
+ throw new Error("the fallback leg must not start after pre-abort");
169
+ },
170
+ });
171
+ await assert.rejects(
172
+ callDeepRecallPolicyLlm({
173
+ statePrompt: "state",
174
+ config: parseConfig({}),
175
+ localLlm: clients.localLlm,
176
+ fallbackLlm: clients.fallbackLlm,
177
+ timeoutMs: 0,
178
+ signal: controller.signal,
179
+ }),
180
+ (err: unknown) => isAbortError(err),
181
+ "pre-aborted policy call surfaces as a standard AbortError",
182
+ );
183
+ assert.equal(clients.localCalls.length, 0, "the local leg never started");
184
+ assert.equal(clients.fallbackCalls.length, 0, "the fallback leg never started");
185
+ });
186
+
187
+ test("abort during the fallback leg rejects as AbortError instead of null (issue #2915)", async () => {
188
+ const controller = new AbortController();
189
+ const clients = fakeClients({
190
+ localBehavior: () => Promise.reject(new Error("local leg failed")),
191
+ fallbackBehavior: () => {
192
+ controller.abort();
193
+ return Promise.reject(new Error("fallback failed after abort"));
194
+ },
195
+ });
196
+ await assert.rejects(
197
+ callDeepRecallPolicyLlm({
198
+ statePrompt: "state",
199
+ config: parseConfig({}),
200
+ localLlm: clients.localLlm,
201
+ fallbackLlm: clients.fallbackLlm,
202
+ timeoutMs: 0,
203
+ signal: controller.signal,
204
+ }),
205
+ (err: unknown) => isAbortError(err),
206
+ "cancellation during the fallback leg is not converted to null",
207
+ );
208
+ assert.equal(clients.fallbackCalls.length, 1, "the fallback leg started before abort");
209
+ });
210
+
211
+ test("a spent shared budget starts neither local nor fallback (issue #2915)", async () => {
212
+ const realNow = Date.now;
213
+ const config = parseConfig({});
214
+ let clock = 1_000_000;
215
+ Date.now = () => {
216
+ const now = clock;
217
+ clock += 100;
218
+ return now;
219
+ };
220
+ try {
221
+ const { localLlm, fallbackLlm, localCalls, fallbackCalls } = fakeClients({
222
+ localBehavior: () => {
223
+ throw new Error("the local leg must not start once the step budget is spent");
224
+ },
225
+ fallbackBehavior: () => {
226
+ throw new Error("the fallback leg must not start once the step budget is spent");
227
+ },
228
+ });
229
+ const result = await callDeepRecallPolicyLlm({
230
+ statePrompt: "state",
231
+ config,
232
+ localLlm,
233
+ fallbackLlm,
234
+ timeoutMs: 50,
235
+ });
236
+ assert.equal(result, null, "exhausted budget is a stop, not an unbounded call");
237
+ assert.equal(localCalls.length, 0, "the local leg never started without a timeout");
238
+ assert.equal(fallbackCalls.length, 0, "the fallback leg never started");
239
+ } finally {
240
+ Date.now = realNow;
241
+ }
242
+ });
@@ -6,11 +6,20 @@
6
6
  * fallback client with the shared background-task chain options. Never a
7
7
  * raw OpenAI client. Returns null when both legs fail — the loop treats
8
8
  * that as a stop, never a crash.
9
+ *
10
+ * One `timeoutMs` budget spans BOTH legs (issue #2915): the fallback leg
11
+ * receives only what the local leg left on the clock, so a single policy
12
+ * step can no longer outlive `stepTimeoutMs` by failing slowly locally and
13
+ * restarting the full timeout remotely. A spent budget starts neither leg.
14
+ * The transport cancellation signal is forwarded to both legs and checked
15
+ * before each start and after each caught failure so an abort is never
16
+ * converted to null.
9
17
  */
10
18
 
11
19
  import { gatewayTaskChainOptions, type FallbackLlmClient } from "./fallback-llm.js";
12
20
  import type { LocalLlmClient } from "./local-llm.js";
13
21
  import type { PluginConfig } from "./types.js";
22
+ import { isAbortError, throwIfAborted } from "./abort-error.js";
14
23
 
15
24
  export const DEEP_RECALL_POLICY_SYSTEM_PROMPT =
16
25
  "You are the retrieval policy for a long-term memory system. Given the question, the current working set of retrieved memories, and the frontier of anchor-linked candidates, choose exactly one action: REFINE (rewrite the query), EXPAND (follow named frontier nodes), or STOP. Respond with JSON only.";
@@ -21,30 +30,48 @@ export async function callDeepRecallPolicyLlm(input: {
21
30
  localLlm: LocalLlmClient | null;
22
31
  fallbackLlm: FallbackLlmClient | null;
23
32
  timeoutMs: number;
33
+ /** Transport cancellation (issue #2915); forwarded to both LLM legs. */
34
+ signal?: AbortSignal;
24
35
  }): Promise<string | null> {
25
36
  const messages: Array<{ role: "system" | "user"; content: string }> = [
26
37
  { role: "system", content: DEEP_RECALL_POLICY_SYSTEM_PROMPT },
27
38
  { role: "user", content: input.statePrompt },
28
39
  ];
29
- const timeout = input.timeoutMs > 0 ? input.timeoutMs : undefined;
40
+ const startedAtMs = Date.now();
41
+ const remainingMs = (): number | undefined =>
42
+ input.timeoutMs > 0 ? input.timeoutMs - (Date.now() - startedAtMs) : undefined;
30
43
  const skipLocal = input.config.modelSource === "gateway";
31
44
  const gatewayChain = gatewayTaskChainOptions(input.config);
45
+ const abortMessage = "deep recall policy call aborted";
46
+
47
+ throwIfAborted(input.signal, abortMessage);
32
48
 
33
49
  if (input.localLlm && !skipLocal) {
50
+ const timeout = remainingMs();
51
+ if (timeout !== undefined && timeout <= 0) {
52
+ return null;
53
+ }
34
54
  try {
35
55
  const result = await input.localLlm.chatCompletion(messages, {
36
56
  temperature: 0.1,
37
57
  maxTokens: 1024,
38
- ...(timeout ? { timeoutMs: timeout } : {}),
58
+ ...(timeout !== undefined ? { timeoutMs: timeout } : {}),
39
59
  responseFormat: { type: "json_object" },
40
60
  operation: "deep-recall-policy",
61
+ ...(input.signal ? { signal: input.signal } : {}),
41
62
  });
42
63
  if (result?.content) return result.content;
43
- } catch {
44
- // fall through to the gateway leg
64
+ } catch (err) {
65
+ if (isAbortError(err)) throw err;
66
+ throwIfAborted(input.signal, abortMessage);
45
67
  }
46
68
  }
47
69
 
70
+ throwIfAborted(input.signal, abortMessage);
71
+ const remaining = remainingMs();
72
+ if (remaining !== undefined && remaining <= 0) {
73
+ return null;
74
+ }
48
75
  if (input.fallbackLlm) {
49
76
  try {
50
77
  const result = await input.fallbackLlm.chatCompletion(
@@ -52,14 +79,17 @@ export async function callDeepRecallPolicyLlm(input: {
52
79
  {
53
80
  temperature: 0.1,
54
81
  maxTokens: 1024,
55
- ...(timeout ? { timeoutMs: timeout } : {}),
82
+ ...(remaining !== undefined ? { timeoutMs: remaining } : {}),
56
83
  ...gatewayChain,
84
+ ...(input.signal ? { signal: input.signal } : {}),
57
85
  },
58
86
  );
59
87
  if (result?.content) return result.content;
60
- } catch {
61
- // both legs failed — caller treats null as a stop
88
+ } catch (err) {
89
+ if (isAbortError(err)) throw err;
90
+ throwIfAborted(input.signal, abortMessage);
62
91
  }
63
92
  }
93
+ throwIfAborted(input.signal, abortMessage);
64
94
  return null;
65
95
  }
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Deep-recall seed-search wiring regressions (issue #2915).
3
+ *
4
+ * The seed search must forward the transport cancellation signal into the
5
+ * namespace search router, and keep asking the router for exactly the capped
6
+ * candidate set (`maxResults`), resolving each returned hit per hit — never
7
+ * pre-scanning the namespace corpus.
8
+ */
9
+
10
+ import test from "node:test";
11
+ import assert from "node:assert/strict";
12
+
13
+ import { createDeepRecallSeedSearch } from "./deep-recall-seeds.js";
14
+ import type { DeepRecallSeedRouter } from "./deep-recall-seeds.js";
15
+
16
+ test("seed search forwards the cancellation signal and the capped limit to the router (issue #2915)", async () => {
17
+ const controller = new AbortController();
18
+ type RouterCall = Parameters<DeepRecallSeedRouter["searchAcrossNamespaces"]>[0];
19
+ let captured: RouterCall | undefined;
20
+ let resolverCalls = 0;
21
+ const router: DeepRecallSeedRouter = {
22
+ async searchAcrossNamespaces(options) {
23
+ captured = options;
24
+ return [
25
+ { path: "facts/2026-08-23/fact-one.md", docid: "doc-1", score: 0.9 },
26
+ { path: "facts/2026-08-23/fact-two.md", docid: "doc-2", score: 0.8 },
27
+ ];
28
+ },
29
+ };
30
+ const searchSeed = createDeepRecallSeedSearch({
31
+ namespace: "ns_signals",
32
+ storage: { dir: "/synthetic/ns_signals", readMemoryByPath: async () => null },
33
+ router,
34
+ resolver: {
35
+ async readQmdResultMemory() {
36
+ resolverCalls += 1;
37
+ return { frontmatter: { id: `fact-${resolverCalls}` } };
38
+ },
39
+ },
40
+ signal: controller.signal,
41
+ });
42
+
43
+ const seeds = await searchSeed("payments routing", 2);
44
+
45
+ assert.deepEqual(seeds, [
46
+ { memoryId: "fact-1", score: 0.9 },
47
+ { memoryId: "fact-2", score: 0.8 },
48
+ ]);
49
+ assert.equal(captured?.namespaces?.[0], "ns_signals");
50
+ assert.equal(captured?.maxResults, 2, "the router is asked for the capped candidate set, not the corpus");
51
+ assert.equal(captured?.execution?.signal, controller.signal, "the transport signal reaches the search router");
52
+ assert.equal(resolverCalls, 2, "each returned hit is resolved per hit");
53
+ });
@@ -33,7 +33,10 @@ export interface DeepRecallSeedRouter {
33
33
  query: string;
34
34
  namespaces: string[];
35
35
  maxResults?: number;
36
- execution?: { onDegradation?: (degradation: SearchDegradation) => void };
36
+ execution?: {
37
+ signal?: AbortSignal;
38
+ onDegradation?: (degradation: SearchDegradation) => void;
39
+ };
37
40
  }): Promise<ReadonlyArray<{ path?: string; docid?: string; score?: number }>>;
38
41
  }
39
42
 
@@ -97,6 +100,8 @@ export function createDeepRecallSeedSearch(deps: {
97
100
  storage: DeepRecallSeedStorage;
98
101
  router: DeepRecallSeedRouter;
99
102
  resolver: DeepRecallSeedResultResolver;
103
+ /** Transport cancellation (issue #2915); forwarded to the search router. */
104
+ signal?: AbortSignal;
100
105
  }): (query: string, limit: number) => Promise<DeepRecallSeedHit[]> {
101
106
  return async (query, limit) => {
102
107
  if (limit <= 0) return [];
@@ -106,6 +111,7 @@ export function createDeepRecallSeedSearch(deps: {
106
111
  namespaces: [deps.namespace],
107
112
  maxResults: limit,
108
113
  execution: {
114
+ ...(deps.signal ? { signal: deps.signal } : {}),
109
115
  onDegradation: (degradation) => {
110
116
  if (degradation.code === "backend_unavailable") unavailable.push(degradation);
111
117
  },
@@ -900,3 +900,96 @@ test("deep recall seeds resolve collection-qualified paths when namespaces are d
900
900
  await rm(memoryDir, { recursive: true, force: true });
901
901
  }
902
902
  });
903
+
904
+ test("HTTP deep recall rejects malformed, empty, and fractional maxSteps instead of defaulting (issue #2915)", async () => {
905
+ // `""` previously coerced to 0 (a documented DISABLE value) and `"abc"`
906
+ // fell back to the configured default: both silently reinterpreted what
907
+ // the caller explicitly sent (§39).
908
+ const memoryDir = await mkdtemp(path.join(tmpdir(), "remnic-deep-recall-maxsteps-"));
909
+ try {
910
+ const config = parseConfig({
911
+ memoryDir,
912
+ deepRecall: { enabled: true, maxSteps: 0 },
913
+ });
914
+ const service = Object.create(EngramAccessService.prototype) as EngramAccessService;
915
+ const host = service as unknown as { orchestrator: unknown };
916
+ let deepRecallCalls = 0;
917
+ host.orchestrator = {
918
+ config,
919
+ async getStorage() {
920
+ throw new Error("the service must not be reached with invalid maxSteps");
921
+ },
922
+ async searchAcrossNamespaces() {
923
+ deepRecallCalls += 1;
924
+ return [];
925
+ },
926
+ localLlm: null,
927
+ fastGatewayLlm: null,
928
+ };
929
+ const server = new EngramAccessHttpServer({
930
+ service,
931
+ port: 0,
932
+ trustPrincipalHeader: true,
933
+ adminConsoleEnabled: false,
934
+ authTokenEntriesGetter: () => [{ token: "operator-token", capabilities: { version: 1 } }],
935
+ });
936
+ const status = await server.start();
937
+ try {
938
+ for (const maxSteps of ["", "abc", "1.5", -1]) {
939
+ const response = await fetch(`http://127.0.0.1:${status.port}/engram/v1/recall/deep`, {
940
+ method: "POST",
941
+ headers: { "content-type": "application/json", authorization: "Bearer operator-token" },
942
+ body: JSON.stringify({ query: "payments routing", maxSteps }),
943
+ });
944
+ assert.equal(response.status, 400, `maxSteps ${JSON.stringify(maxSteps)} must be rejected`);
945
+ const body = await response.text();
946
+ assert.match(body, /maxSteps/, "the rejection names the rejected field");
947
+ }
948
+ assert.equal(deepRecallCalls, 0, "no search ran for rejected input");
949
+ } finally {
950
+ await server.stop();
951
+ }
952
+ } finally {
953
+ await rm(memoryDir, { recursive: true, force: true });
954
+ }
955
+ });
956
+
957
+ test("service deepRecall propagates a pre-aborted transport signal before any seed search (issue #2915)", async () => {
958
+ const memoryDir = await mkdtemp(path.join(tmpdir(), "remnic-deep-recall-abort-"));
959
+ try {
960
+ const config = parseConfig({
961
+ memoryDir,
962
+ namespacesEnabled: false,
963
+ deepRecall: { enabled: true, maxSteps: 2 },
964
+ });
965
+ const service = Object.create(EngramAccessService.prototype) as EngramAccessService;
966
+ const host = service as unknown as { orchestrator: unknown };
967
+ let seedSearches = 0;
968
+ host.orchestrator = {
969
+ config,
970
+ async getStorage() {
971
+ return { dir: memoryDir, async readMemoryByPath() {
972
+ return null;
973
+ }, async getMemoryById() {
974
+ return null;
975
+ } };
976
+ },
977
+ async searchAcrossNamespaces() {
978
+ seedSearches += 1;
979
+ return [];
980
+ },
981
+ localLlm: null,
982
+ fastGatewayLlm: null,
983
+ };
984
+ const controller = new AbortController();
985
+ controller.abort();
986
+ await assert.rejects(
987
+ service.deepRecall({ query: "payments routing", abortSignal: controller.signal }),
988
+ (err: unknown) => err instanceof Error && err.name === "AbortError",
989
+ "cancellation reaches the engine through the service and surfaces as AbortError",
990
+ );
991
+ assert.equal(seedSearches, 0, "a cancelled invocation performs no seed search");
992
+ } finally {
993
+ await rm(memoryDir, { recursive: true, force: true });
994
+ }
995
+ });
@@ -346,3 +346,124 @@ test("deep recall retires an expanded node from the frontier", async () => {
346
346
  );
347
347
  assert.equal(result.trace.length, 2, "the loop stops rather than looping on the same node");
348
348
  });
349
+
350
+ test("deep recall ranks by distinct shared anchors, not working-set memory count (issue #2915)", async () => {
351
+ // "node-candidate-c" shares ONE anchor with a node holding TWO working-set
352
+ // memories; "node-candidate-d" shares TWO distinct anchors with one
353
+ // working-set memory. Counting per memory (the old bug) scored both 2 and
354
+ // the nodeId tiebreak expanded C first; distinct anchors must rank D first.
355
+ const node = (nodeId: string, ...sourceMemoryIds: string[]): DeepRecallGraphSnapshot["nodes"][number] => ({
356
+ schemaVersion: 1,
357
+ nodeId,
358
+ recordedAt: "2026-08-01T00:00:00.000Z",
359
+ sessionKey: "test-session",
360
+ kind: "topic",
361
+ abstractionLevel: "meso",
362
+ title: `Synthetic ${nodeId}`,
363
+ summary: `Synthetic ${nodeId} summary`,
364
+ sourceMemoryIds,
365
+ });
366
+ const anchor = (anchorId: string, anchorValue: string, ...nodeRefs: string[]): DeepRecallGraphSnapshot["anchors"][number] => ({
367
+ schemaVersion: 1,
368
+ anchorId,
369
+ anchorType: "entity",
370
+ anchorValue,
371
+ normalizedCue: anchorValue,
372
+ recordedAt: "2026-08-01T00:00:00.000Z",
373
+ sessionKey: "test-session",
374
+ nodeRefs,
375
+ });
376
+ const graph: DeepRecallGraphSnapshot = {
377
+ nodes: [
378
+ node("node-holder", "mem-w1", "mem-w2"),
379
+ node("node-holder2", "mem-w3"),
380
+ node("node-candidate-c", "mem-c1"),
381
+ node("node-candidate-d", "mem-d1"),
382
+ ],
383
+ anchors: [
384
+ anchor("anchor-one", "shared+one", "node-holder", "node-candidate-c"),
385
+ anchor("anchor-two", "shared+two", "node-holder2", "node-candidate-d"),
386
+ anchor("anchor-three", "shared+three", "node-holder2", "node-candidate-d"),
387
+ ],
388
+ };
389
+ const result = await runBudgetedDeepRecall(
390
+ {
391
+ config: makeConfig({ maxSteps: 3 }),
392
+ searchSeed: async () => [
393
+ { memoryId: "mem-w1", score: 0.9 },
394
+ { memoryId: "mem-w2", score: 0.8 },
395
+ { memoryId: "mem-w3", score: 0.7 },
396
+ ],
397
+ loadGraph: async () => graph,
398
+ loadMemory: async (memoryId) => ({ memoryId, content: `Content of ${memoryId}.`, active: true }),
399
+ callPolicy: async (statePrompt) => {
400
+ const first = /FRONTIER \(anchor-linked candidates not yet retrieved\):\n- ([^:]+):/.exec(statePrompt)?.[1];
401
+ return first
402
+ ? JSON.stringify({ action: "EXPAND", expandNodeIds: [first], reason: "follow the top candidate" })
403
+ : JSON.stringify({ action: "STOP", reason: "frontier empty" });
404
+ },
405
+ },
406
+ "shared anchors",
407
+ );
408
+ assert.equal(result.trace[0]?.action, "EXPAND");
409
+ assert.equal(
410
+ result.trace[0]?.detail,
411
+ "node-candidate-d",
412
+ "two distinct shared anchors outrank one anchor reached through two memories",
413
+ );
414
+ assert.ok(result.entries.some((entry) => entry.memoryId === "mem-d1"), "the top-ranked candidate was expanded");
415
+ });
416
+
417
+ test("deep recall aborts before any dependency call when the signal is already aborted (issue #2915)", async () => {
418
+ const controller = new AbortController();
419
+ controller.abort();
420
+ let seedCalls = 0;
421
+ await assert.rejects(
422
+ runBudgetedDeepRecall(
423
+ {
424
+ config: makeConfig(),
425
+ searchSeed: async () => {
426
+ seedCalls += 1;
427
+ return [];
428
+ },
429
+ loadGraph: async () => {
430
+ throw new Error("must not load the graph after abort");
431
+ },
432
+ loadMemory: async () => null,
433
+ callPolicy: async () => {
434
+ throw new Error("must not call the policy after abort");
435
+ },
436
+ signal: controller.signal,
437
+ },
438
+ "anything",
439
+ ),
440
+ (err: unknown) => err instanceof Error && err.name === "AbortError",
441
+ "cancellation must surface as a standard AbortError",
442
+ );
443
+ assert.equal(seedCalls, 0, "no seed search runs after cancellation");
444
+ });
445
+
446
+ test("deep recall propagates cancellation from a stalled policy call instead of waiting for the deadline (issue #2915)", async () => {
447
+ const controller = new AbortController();
448
+ // The policy leg aborts the transport mid-call and then never settles:
449
+ // without signal racing the invocation would hang until totalTimeoutMs.
450
+ const resultPromise = runBudgetedDeepRecall(
451
+ {
452
+ config: makeConfig({ totalTimeoutMs: 10_000 }),
453
+ searchSeed: async () => [{ memoryId: "mem-1", score: 0.9 }],
454
+ loadGraph: async () => ({ nodes: [], anchors: [] }),
455
+ loadMemory: async (memoryId) => ({ memoryId, content: "one", active: true }),
456
+ callPolicy: () => {
457
+ controller.abort();
458
+ return new Promise<string | null>(() => {});
459
+ },
460
+ signal: controller.signal,
461
+ },
462
+ "stalled policy",
463
+ );
464
+ await assert.rejects(
465
+ resultPromise,
466
+ (err: unknown) => err instanceof Error && err.name === "AbortError",
467
+ "a cancelled call must stop at cancellation time, not at totalTimeoutMs",
468
+ );
469
+ });