@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
@@ -46,11 +46,13 @@ import { TranscriptManager } from "../transcript.js";
46
46
  import type { PluginConfig } from "../types.js";
47
47
  import { type UtilityRuntimeValues, loadUtilityRuntimeValues } from "../utility-runtime.js";
48
48
  import { WearablesService } from "../wearables/service.js";
49
+ import { startupDiscoveryWithTimeout } from "./startup-collection-checks.js";
49
50
  import type { MeetingsService } from "../meetings/service.js";
50
51
  import {
51
52
  COMPACTION_SIGNAL_MAX_AGE_MS,
52
53
  defaultWorkspaceDir,
53
54
  qmdStartupCollectionCheckWithTimeout,
55
+ qmdStartupCollectionChecksWithTimeout,
54
56
  } from "../orchestrator.js";
55
57
 
56
58
  export interface OrchestratorInitDeps {
@@ -98,19 +100,204 @@ export interface OrchestratorInitDeps {
98
100
  }
99
101
 
100
102
  export class OrchestratorInitCoordinator {
103
+ private nextStartupEpoch = 0;
104
+ private activeStartupEpoch: number | null = null;
105
+ private startupClosed = false;
106
+ private maintenanceNamespacesFlight:
107
+ | { epoch: number; promise: Promise<string[]> }
108
+ | undefined;
109
+ private correctionCatalogFlight:
110
+ | { epoch: number; promise: Promise<Awaited<ReturnType<NamespaceCatalog["listNamespaces"]>>> }
111
+ | undefined;
112
+ private recoveredCorrectionNamespaces = new Set<string>();
113
+ private correctionRecoveryChain: Promise<void> = Promise.resolve();
114
+ private startupEpochAbort:
115
+ | { epoch: number; controller: AbortController }
116
+ | undefined;
117
+
101
118
  constructor(
102
119
  private readonly deps: OrchestratorInitDeps,
103
120
  ) {}
104
121
 
122
+ /** Retire the current lifecycle without constructing a lazy coordinator. */
123
+ retireStartupEpoch(): void {
124
+ this.startupEpochAbort?.controller.abort();
125
+ this.startupEpochAbort = undefined;
126
+ this.startupClosed = true;
127
+ this.activeStartupEpoch = null;
128
+ }
129
+
130
+ private beginStartupEpoch(): number {
131
+ this.startupEpochAbort?.controller.abort();
132
+ this.startupEpochAbort = undefined;
133
+ // A replacement lifecycle owns new deferred work. Abort the previous
134
+ // controller before replacing it so stale warmup/cache/cron phases cannot
135
+ // continue after a same-instance re-initialize.
136
+ this.deps.deferredInitAbort?.abort();
137
+ this.deps.deferredInitAbort = null;
138
+ this.deps.deferredSyncSucceeded = false;
139
+ const epoch = ++this.nextStartupEpoch;
140
+ this.startupEpochAbort = { epoch, controller: new AbortController() };
141
+ this.activeStartupEpoch = epoch;
142
+ this.startupClosed = false;
143
+ this.maintenanceNamespacesFlight = undefined;
144
+ this.correctionCatalogFlight = undefined;
145
+ this.recoveredCorrectionNamespaces = new Set<string>();
146
+ this.correctionRecoveryChain = Promise.resolve();
147
+ return epoch;
148
+ }
149
+
150
+ private currentOrNewStartupEpoch(): number | null {
151
+ if (this.startupClosed) return null;
152
+ return this.activeStartupEpoch ?? this.beginStartupEpoch();
153
+ }
154
+
155
+ private isCurrentStartupEpoch(epoch: number): boolean {
156
+ return !this.startupClosed && this.activeStartupEpoch === epoch;
157
+ }
158
+
159
+ private startupEpochSignal(epoch: number): AbortSignal | undefined {
160
+ return this.startupEpochAbort?.epoch === epoch
161
+ ? this.startupEpochAbort.controller.signal
162
+ : undefined;
163
+ }
164
+
165
+ private linkedEpochAbortController(
166
+ epoch: number,
167
+ externalSignal?: AbortSignal,
168
+ ): { controller: AbortController; dispose(): void } {
169
+ const controller = new AbortController();
170
+ const signals = [this.startupEpochSignal(epoch), externalSignal]
171
+ .filter((signal): signal is AbortSignal => signal !== undefined);
172
+ const abort = () => controller.abort();
173
+ for (const signal of signals) {
174
+ if (signal.aborted) abort();
175
+ else signal.addEventListener("abort", abort, { once: true });
176
+ }
177
+ return {
178
+ controller,
179
+ dispose: () => {
180
+ for (const signal of signals) signal.removeEventListener("abort", abort);
181
+ },
182
+ };
183
+ }
184
+
185
+ private async probeForStartupEpoch(
186
+ epoch: number,
187
+ externalSignal?: AbortSignal,
188
+ ): Promise<boolean> {
189
+ const abort = this.linkedEpochAbortController(epoch, externalSignal);
190
+ try {
191
+ if (!this.isCurrentStartupEpoch(epoch) || abort.controller.signal.aborted) return false;
192
+ return await this.deps.qmd.probe({ signal: abort.controller.signal });
193
+ } finally {
194
+ abort.dispose();
195
+ }
196
+ }
197
+
198
+ private maintenanceNamespacesFlightFor(epoch: number): Promise<string[]> {
199
+ if (this.maintenanceNamespacesFlight?.epoch === epoch) {
200
+ return this.maintenanceNamespacesFlight.promise;
201
+ }
202
+ const promise = Promise.resolve().then(() => {
203
+ if (!this.isCurrentStartupEpoch(epoch)) return [];
204
+ return this.deps.maintenanceNamespaces();
205
+ });
206
+ this.maintenanceNamespacesFlight = { epoch, promise };
207
+ void promise.catch(() => {
208
+ if (
209
+ this.isCurrentStartupEpoch(epoch) &&
210
+ this.maintenanceNamespacesFlight?.epoch === epoch &&
211
+ this.maintenanceNamespacesFlight.promise === promise
212
+ ) {
213
+ this.maintenanceNamespacesFlight = undefined;
214
+ }
215
+ });
216
+ return promise;
217
+ }
218
+
219
+ private correctionCatalogFlightFor(
220
+ epoch: number,
221
+ ): Promise<Awaited<ReturnType<NamespaceCatalog["listNamespaces"]>>> {
222
+ if (!this.isCurrentStartupEpoch(epoch)) {
223
+ return Promise.resolve([]);
224
+ }
225
+ if (this.correctionCatalogFlight?.epoch === epoch) {
226
+ return this.correctionCatalogFlight.promise;
227
+ }
228
+ const promise = Promise.resolve().then(() => {
229
+ if (!this.isCurrentStartupEpoch(epoch)) return [];
230
+ return this.deps.namespaceCatalog.listNamespaces();
231
+ });
232
+ this.correctionCatalogFlight = { epoch, promise };
233
+ return promise;
234
+ }
235
+
236
+ private enqueueCorrectionRecovery(epoch: number, namespaces: Iterable<string>): Promise<void> {
237
+ if (!this.isCurrentStartupEpoch(epoch)) return Promise.resolve();
238
+ const unrecovered = [...new Set(namespaces)].filter(
239
+ (namespace) => !this.recoveredCorrectionNamespaces.has(namespace),
240
+ );
241
+ if (unrecovered.length === 0) return this.correctionRecoveryChain;
242
+ for (const namespace of unrecovered) this.recoveredCorrectionNamespaces.add(namespace);
243
+
244
+ this.correctionRecoveryChain = this.correctionRecoveryChain.then(async () => {
245
+ if (!this.isCurrentStartupEpoch(epoch)) return;
246
+ try {
247
+ const recovered = await this.deps.passiveCorrectionService().recoverStaleApplyingPlans(
248
+ unrecovered,
249
+ );
250
+ if (recovered > 0) {
251
+ log.info(`correction: recovered ${recovered} stale applying plan(s) on startup`);
252
+ }
253
+ } catch (staleErr) {
254
+ log.debug(`correction: stale-plan recovery skipped: ${staleErr instanceof Error ? staleErr.message : String(staleErr)}`);
255
+ }
256
+ });
257
+ return this.correctionRecoveryChain;
258
+ }
259
+
260
+ private async startupNamespaces(epoch: number): Promise<{ namespaces: string[]; complete: boolean }> {
261
+ if (!this.isCurrentStartupEpoch(epoch)) {
262
+ return { namespaces: this.deps.configuredNamespaceList(), complete: false };
263
+ }
264
+ if (!resolveNamespaceCapabilities(this.deps.config).namespaces) {
265
+ return { namespaces: [this.deps.config.defaultNamespace], complete: true };
266
+ }
267
+ const discovery = await startupDiscoveryWithTimeout(
268
+ () => this.maintenanceNamespacesFlightFor(epoch),
269
+ this.deps.configuredNamespaceList(),
270
+ );
271
+ return { namespaces: discovery.value, complete: discovery.complete };
272
+ }
273
+
105
274
  async initialize(): Promise<void> {
275
+ const epoch = this.beginStartupEpoch();
106
276
  // Recreate the deferred-ready gate on every initialize() call.
107
277
  // The same Orchestrator instance may be reused across stop/start cycles
108
278
  // (src/index.ts does this). Without this reset, the second cycle's
109
279
  // `await orchestrator.deferredReady` resolves immediately (already settled
110
280
  // from the first cycle) while the new deferredInitialize() is still running.
281
+ let resolveDeferred: (() => void) | undefined;
111
282
  this.deps.deferredReady = new Promise<void>((resolve) => {
112
- this.deps.resolveDeferredReady = resolve;
283
+ resolveDeferred = () => resolve();
284
+ this.deps.resolveDeferredReady = resolveDeferred;
113
285
  });
286
+ const settleOwnDeferredReady = () => {
287
+ if (this.deps.resolveDeferredReady === resolveDeferred) {
288
+ this.deps.resolveDeferredReady = null;
289
+ }
290
+ resolveDeferred?.();
291
+ };
292
+ const exitIfStale = () => {
293
+ if (this.isCurrentStartupEpoch(epoch)) return false;
294
+ if (this.startupClosed && this.deps.resolveInit) {
295
+ this.deps.resolveInit();
296
+ this.deps.resolveInit = null;
297
+ }
298
+ settleOwnDeferredReady();
299
+ return true;
300
+ };
114
301
 
115
302
  try {
116
303
  await migrateFromEngram({
@@ -148,30 +335,40 @@ export class OrchestratorInitCoordinator {
148
335
  await this.deps.namespaceCatalog.registerConfiguredNamespaces().catch(() => undefined);
149
336
  }
150
337
  // #1713 Item 2: recover stale `applying` correction plans left behind
151
- // by a process that died mid-apply. Best-effort — a failure here must
152
- // never block initialization (rule 13). Runs for every configured
153
- // namespace since correction plans can exist in any of them.
338
+ // by a process that died mid-apply. The raw catalog flight is per-startup
339
+ // epoch: fallback recovery stays bounded, while a guarded late result can
340
+ // recover dynamic plans without restarting any QMD work.
154
341
  try {
155
- // #1713 Item 2 + P2 (cursor): sweep ALL known namespaces — configured
156
- // + catalog-discovered — so stale applying plans in derived namespaces
157
- // (coding-scoped, session-derived) are also recovered.
158
342
  const correctionNamespaces = new Set(this.deps.configuredNamespaceList());
159
343
  if (this.deps.namespaceCatalog.enabled) {
160
344
  try {
161
- for (const rec of await this.deps.namespaceCatalog.listNamespaces()) {
345
+ const catalogFlight = this.correctionCatalogFlightFor(epoch);
346
+ const catalogDiscovery = await startupDiscoveryWithTimeout(
347
+ () => catalogFlight,
348
+ [],
349
+ );
350
+ for (const rec of catalogDiscovery.value) {
162
351
  correctionNamespaces.add(rec.namespace);
163
352
  }
353
+ if (!catalogDiscovery.complete) {
354
+ void catalogFlight.then(
355
+ (records) => {
356
+ if (!this.isCurrentStartupEpoch(epoch)) return;
357
+ void this.enqueueCorrectionRecovery(
358
+ epoch,
359
+ records.map((record) => record.namespace),
360
+ );
361
+ },
362
+ () => undefined,
363
+ );
364
+ }
164
365
  } catch { /* best-effort */ }
165
366
  }
166
- const recovered = await this.deps.passiveCorrectionService().recoverStaleApplyingPlans(
167
- [...correctionNamespaces],
168
- );
169
- if (recovered > 0) {
170
- log.info(`correction: recovered ${recovered} stale applying plan(s) on startup`);
171
- }
367
+ await this.enqueueCorrectionRecovery(epoch, correctionNamespaces);
172
368
  } catch (staleErr) {
173
369
  log.debug(`correction: stale-plan recovery skipped: ${staleErr instanceof Error ? staleErr.message : String(staleErr)}`);
174
370
  }
371
+ if (exitIfStale()) return;
175
372
  await this.deps.relevance.load();
176
373
  await this.deps.negatives.load();
177
374
  await this.deps.lastRecall.load();
@@ -253,7 +450,7 @@ export class OrchestratorInitCoordinator {
253
450
  // this.deps.qmd while it's still the real client, then get errors when
254
451
  // deferredInitialize() swaps it to NoopSearchBackend mid-query.
255
452
  try {
256
- const available = await this.deps.qmd.probe();
453
+ const available = await this.probeForStartupEpoch(epoch);
257
454
  if (available) {
258
455
  log.info(`Search backend: available ${this.deps.qmd.debugStatus()}`);
259
456
  // Ensure collections at startup for the catalog-union namespace set, not
@@ -263,55 +460,69 @@ export class OrchestratorInitCoordinator {
263
460
  // after a restart. `registerConfiguredNamespaces()` already seeded the
264
461
  // catalog above, so `maintenanceNamespaces()` is readable here; it falls
265
462
  // back to the configured set on any catalog read failure.
266
- const namespaces = resolveNamespaceCapabilities(this.deps.config).namespaces
267
- ? await this.deps.maintenanceNamespaces()
268
- : [this.deps.config.defaultNamespace];
269
- const states = await Promise.all(
270
- namespaces.map(async (namespace) => {
271
- const collectionCheckAbort = new AbortController();
272
- const state = await qmdStartupCollectionCheckWithTimeout(
273
- resolveNamespaceCapabilities(this.deps.config).namespaces
274
- ? this.deps.namespaceSearchRouter.ensureNamespaceCollection(
275
- namespace,
276
- { signal: collectionCheckAbort.signal },
277
- )
278
- : this.deps.qmd.ensureCollection(
279
- this.deps.config.memoryDir,
280
- this.deps.config.qmdCollection,
281
- { signal: collectionCheckAbort.signal },
282
- ),
283
- collectionCheckAbort,
284
- namespace,
285
- );
286
- return { namespace, state };
287
- }),
288
- );
289
- const defaultState =
290
- states.find(
291
- (entry) => entry.namespace === this.deps.config.defaultNamespace,
292
- )?.state ?? "unknown";
293
- if (defaultState === "missing") {
294
- await this.deps.disposeSearchBackendIfNeeded();
295
- this.deps.qmd = new NoopSearchBackend();
296
- log.warn(
297
- "Search collection missing for Remnic memory store; disabling search retrieval for this runtime (fallback retrieval remains enabled)",
298
- );
299
- } else if (defaultState === "unknown") {
300
- log.warn(
301
- "Search collection check unavailable; keeping search retrieval enabled for fail-open behavior",
302
- );
303
- } else if (defaultState === "skipped") {
304
- log.debug(
305
- "Search collection check skipped (remote or daemon-only mode)",
306
- );
307
- }
308
- for (const entry of states) {
309
- if (entry.namespace === this.deps.config.defaultNamespace) continue;
310
- if (entry.state === "missing") {
463
+ const namespaceCapabilities = resolveNamespaceCapabilities(this.deps.config).namespaces;
464
+ const discovery = await this.startupNamespaces(epoch);
465
+ if (!this.isCurrentStartupEpoch(epoch)) {
466
+ log.debug("startup collection check skipped for a retired startup epoch");
467
+ } else {
468
+ const checks = discovery.namespaces.map(async (namespace) => {
469
+ const epochAbort = this.linkedEpochAbortController(epoch);
470
+ try {
471
+ const state = await qmdStartupCollectionCheckWithTimeout(
472
+ namespaceCapabilities
473
+ ? this.deps.namespaceSearchRouter.ensureNamespaceCollection(
474
+ namespace,
475
+ { signal: epochAbort.controller.signal },
476
+ )
477
+ : this.deps.qmd.ensureCollection(
478
+ this.deps.config.memoryDir,
479
+ this.deps.config.qmdCollection,
480
+ { signal: epochAbort.controller.signal },
481
+ ),
482
+ epochAbort.controller,
483
+ namespace,
484
+ );
485
+ return { namespace, state };
486
+ } finally {
487
+ epochAbort.dispose();
488
+ }
489
+ });
490
+ const states = await qmdStartupCollectionChecksWithTimeout(checks, discovery.namespaces);
491
+ if (!this.isCurrentStartupEpoch(epoch)) {
492
+ log.debug("startup collection-check batch completed for a retired startup epoch");
493
+ } else {
494
+ const defaultState =
495
+ states.find(
496
+ (entry) => entry.namespace === this.deps.config.defaultNamespace,
497
+ )?.state ?? "unknown";
498
+ if (defaultState === "missing") {
499
+ await this.deps.disposeSearchBackendIfNeeded();
500
+ if (!this.isCurrentStartupEpoch(epoch)) {
501
+ log.debug("startup collection-check disposal completed for a retired startup epoch");
502
+ } else {
503
+ this.deps.qmd = new NoopSearchBackend();
504
+ log.warn(
505
+ "Search collection missing for Remnic memory store; disabling search retrieval for this runtime (fallback retrieval remains enabled)",
506
+ );
507
+ }
508
+ } else if (defaultState === "unknown") {
311
509
  log.warn(
312
- `Search collection missing for namespace '${entry.namespace}'; namespace retrieval will fail open to non-search paths`,
510
+ "Search collection check unavailable; keeping search retrieval enabled for fail-open behavior",
511
+ );
512
+ } else if (defaultState === "skipped") {
513
+ log.debug(
514
+ "Search collection check skipped (remote or daemon-only mode)",
313
515
  );
314
516
  }
517
+ for (const entry of states) {
518
+ if (entry.namespace === this.deps.config.defaultNamespace) continue;
519
+ if (entry.state === "missing") {
520
+ log.warn(
521
+ `Search collection missing for namespace '${entry.namespace}'; namespace retrieval will fail open to non-search paths`,
522
+ );
523
+ }
524
+ }
525
+ }
315
526
  }
316
527
  } else if (this.deps.qmd instanceof NoopSearchBackend) {
317
528
  log.debug(`Search backend: noop (search intentionally disabled)`);
@@ -321,6 +532,7 @@ export class OrchestratorInitCoordinator {
321
532
  } catch (err) {
322
533
  log.error(`QMD probe/collection check failed (non-fatal): ${err}`);
323
534
  }
535
+ if (exitIfStale()) return;
324
536
 
325
537
  // Open the init gate — essential state (storage, aliases, relevance,
326
538
  // transcript, summarizer, buffer) is loaded AND QMD state is finalized
@@ -344,15 +556,16 @@ export class OrchestratorInitCoordinator {
344
556
  // overwrite this.deps.resolveDeferredReady before .finally() runs — that would
345
557
  // cause the first cycle's .finally() to resolve the *second* cycle's
346
558
  // promise prematurely while leaving the first cycle's promise pending.
347
- const resolveDeferred = this.deps.resolveDeferredReady;
348
- this.deps.resolveDeferredReady = null;
559
+ if (this.deps.resolveDeferredReady === resolveDeferred) {
560
+ this.deps.resolveDeferredReady = null;
561
+ }
349
562
  this.deps.deferredInitAbort = new AbortController();
350
563
  this.deps.deferredInitialize(this.deps.deferredInitAbort.signal)
351
564
  .catch((err) => {
352
565
  log.error(`deferred initialization failed (non-fatal): ${err}`);
353
566
  })
354
567
  .finally(() => {
355
- resolveDeferred?.();
568
+ settleOwnDeferredReady();
356
569
  });
357
570
  } catch (err) {
358
571
  // Resolve both gates so callers never hang on permanently-pending promises
@@ -364,19 +577,18 @@ export class OrchestratorInitCoordinator {
364
577
  //
365
578
  // - deferredReady: CLI callers await this for full QMD readiness. Without
366
579
  // resolution it hangs forever since deferredInitialize() never ran.
367
- if (this.deps.resolveInit) {
580
+ if ((this.isCurrentStartupEpoch(epoch) || this.startupClosed) && this.deps.resolveInit) {
368
581
  this.deps.resolveInit();
369
582
  this.deps.resolveInit = null;
370
583
  }
371
- if (this.deps.resolveDeferredReady) {
372
- this.deps.resolveDeferredReady();
373
- this.deps.resolveDeferredReady = null;
374
- }
584
+ settleOwnDeferredReady();
375
585
  throw err;
376
586
  }
377
587
  }
378
588
 
379
589
  async deferredInitialize(signal: AbortSignal): Promise<void> {
590
+ const epoch = this.currentOrNewStartupEpoch();
591
+ if (epoch === null) return;
380
592
  const lifecycleCaps = resolveMemoryLifecycleCapabilities(this.deps.config);
381
593
 
382
594
  // Sync QMD index with current disk state so recall finds recently-written
@@ -387,20 +599,28 @@ export class OrchestratorInitCoordinator {
387
599
  if (this.deps.qmd.isAvailable() && resolveQmdCapabilities(this.deps.config).qmdMaintenance) {
388
600
  try {
389
601
  log.info("QMD startup sync: updating index to match current disk state");
602
+ const discovery = await this.startupNamespaces(epoch);
603
+ if (signal.aborted || !this.isCurrentStartupEpoch(epoch)) return;
390
604
  if (resolveNamespaceCapabilities(this.deps.config).namespaces) {
391
605
  // Cover cataloged dynamic namespaces at startup too (NHZEV, codex P2):
392
606
  // a dynamic namespace written before a daemon restart must be synced on
393
607
  // boot, not only by the debounced runQmdMaintenance() path. Same union +
394
608
  // catalog-read-failure fallback as runQmdMaintenance.
395
609
  await this.deps.namespaceSearchRouter.updateNamespaces(
396
- await this.deps.maintenanceNamespaces(),
610
+ discovery.namespaces,
397
611
  { signal },
398
612
  );
399
613
  } else {
400
614
  await this.deps.qmd.update({ signal });
401
615
  }
616
+ if (signal.aborted || !this.isCurrentStartupEpoch(epoch)) return;
402
617
  log.info("QMD startup sync: complete");
403
- this.deps.deferredSyncSucceeded = true;
618
+ if (discovery.complete) {
619
+ this.deps.deferredSyncSucceeded = true;
620
+ } else {
621
+ this.deps.deferredSyncSucceeded = false;
622
+ log.warn("QMD startup sync used configured namespace fallback; retry remains armed");
623
+ }
404
624
  } catch (err) {
405
625
  log.warn(`QMD startup sync failed (non-fatal): ${err}`);
406
626
  // deferredSyncSucceeded stays false — server retry will attempt sync
@@ -412,7 +632,7 @@ export class OrchestratorInitCoordinator {
412
632
  this.deps.deferredSyncSucceeded = true;
413
633
  }
414
634
 
415
- if (signal.aborted) return;
635
+ if (signal.aborted || !this.isCurrentStartupEpoch(epoch)) return;
416
636
 
417
637
  // Warmup: run cheap searches to pre-load QMD embedding models and the
418
638
  // embedding-fallback JSON index so the first real recall is fast.
@@ -446,7 +666,7 @@ export class OrchestratorInitCoordinator {
446
666
  );
447
667
  }
448
668
  await Promise.all(warmupPromises);
449
- if (signal.aborted) return;
669
+ if (signal.aborted || !this.isCurrentStartupEpoch(epoch)) return;
450
670
 
451
671
  // Pre-warm knowledge index, memory, and entity caches.
452
672
  // Awaited so callers of `deferredReady` can rely on warmups being complete
@@ -468,11 +688,12 @@ export class OrchestratorInitCoordinator {
468
688
  cacheWarmups.push(this.deps.storage.readAllMemories().then(() => {}).catch(() => {}));
469
689
  cacheWarmups.push(this.deps.storage.readAllEntityFiles().then(() => {}).catch(() => {}));
470
690
  await Promise.all(cacheWarmups);
471
- if (signal.aborted) return;
691
+ if (signal.aborted || !this.isCurrentStartupEpoch(epoch)) return;
472
692
 
473
693
  if (resolveIndexingCapabilities(this.deps.config).conversationIndex && this.deps.conversationIndexBackend) {
474
694
  try {
475
695
  const init = await this.deps.conversationIndexBackend.initialize();
696
+ if (signal.aborted || !this.isCurrentStartupEpoch(epoch)) return;
476
697
  if (!init.enabled) {
477
698
  this.deps.config.conversationIndexEnabled = false;
478
699
  }
@@ -484,12 +705,13 @@ export class OrchestratorInitCoordinator {
484
705
  log.debug(init.message);
485
706
  }
486
707
  } catch (err) {
708
+ if (signal.aborted || !this.isCurrentStartupEpoch(epoch)) return;
487
709
  log.error(`Conversation index initialization failed (non-fatal): ${err}`);
488
710
  this.deps.config.conversationIndexEnabled = false;
489
711
  }
490
712
  }
491
713
 
492
- if (signal.aborted) return;
714
+ if (signal.aborted || !this.isCurrentStartupEpoch(epoch)) return;
493
715
 
494
716
  if (resolveLocalLlmCapabilities(this.deps.config).localLlm) {
495
717
  try {
@@ -499,7 +721,7 @@ export class OrchestratorInitCoordinator {
499
721
  }
500
722
  }
501
723
 
502
- if (signal.aborted) return;
724
+ if (signal.aborted || !this.isCurrentStartupEpoch(epoch)) return;
503
725
 
504
726
  // Await cron auto-registration so callers that `await deferredReady` can
505
727
  // rely on cron jobs being registered when it resolves. Without this, the
@@ -515,11 +737,12 @@ export class OrchestratorInitCoordinator {
515
737
  // touched by the lifecycle policy, run a one-time rate-limited demotion
516
738
  // sweep (capped at 50 demotions) so the hot tier isn't flooded on the
517
739
  // first real cron pass. Non-fatal — a failure here must not break init.
518
- if (signal.aborted) return;
740
+ if (signal.aborted || !this.isCurrentStartupEpoch(epoch)) return;
519
741
  if (lifecycleCaps.lifecyclePolicy && resolveQmdCapabilities(this.deps.config).qmdTierMigration) {
520
742
  try {
521
743
  const { runFirstStartMigration } = await import("../maintenance/first-start-migration.js"
522
744
  );
745
+ if (signal.aborted || !this.isCurrentStartupEpoch(epoch)) return;
523
746
  const result = await runFirstStartMigration({
524
747
  storage: this.deps.storage,
525
748
  config: this.deps.config,
@@ -548,7 +771,7 @@ export class OrchestratorInitCoordinator {
548
771
  // The timer is unref'd, so one-shot CLI runs exit naturally without
549
772
  // ever ticking; idempotent across stop/start cycles via the handle
550
773
  // guard. Non-fatal: a failure to start must not break init.
551
- if (signal.aborted) return;
774
+ if (signal.aborted || !this.isCurrentStartupEpoch(epoch)) return;
552
775
  if (
553
776
  !this.deps.wearablesAutoSyncHandle &&
554
777
  this.deps.config.wearables.enabled &&
@@ -562,7 +785,7 @@ export class OrchestratorInitCoordinator {
562
785
  // starting now would leave a live interval on a destroyed
563
786
  // orchestrator (Cursor review on PR #1464). Handle creation
564
787
  // below is synchronous, so no further window exists.
565
- if (signal.aborted) return;
788
+ if (signal.aborted || !this.isCurrentStartupEpoch(epoch)) return;
566
789
  this.deps.wearablesAutoSyncHandle = startWearablesAutoSync(
567
790
  {
568
791
  intervalMinutes: this.deps.config.wearables.autoSyncIntervalMinutes,
@@ -612,11 +835,13 @@ export class OrchestratorInitCoordinator {
612
835
  */
613
836
  async startupSearchSync(signal?: AbortSignal): Promise<boolean> {
614
837
  if (signal?.aborted) return false;
838
+ const epoch = this.currentOrNewStartupEpoch();
839
+ if (epoch === null) return false;
615
840
 
616
- const available = await this.deps.qmd.probe();
841
+ const available = await this.probeForStartupEpoch(epoch, signal);
617
842
  if (!available) return false;
618
- if (signal?.aborted) {
619
- log.debug("startupSearchSync: aborted after probe");
843
+ if (signal?.aborted || !this.isCurrentStartupEpoch(epoch)) {
844
+ log.debug("startupSearchSync: aborted or retired after probe");
620
845
  return false;
621
846
  }
622
847
 
@@ -635,27 +860,49 @@ export class OrchestratorInitCoordinator {
635
860
  // re-synced here too, otherwise after a backend-was-unavailable-at-boot
636
861
  // recovery its collection stays stale. Falls back to the configured set on any
637
862
  // catalog read failure.
638
- const namespaces = resolveNamespaceCapabilities(this.deps.config).namespaces
639
- ? await this.deps.maintenanceNamespaces()
640
- : [this.deps.config.defaultNamespace];
863
+ const discovery = await this.startupNamespaces(epoch);
864
+ if (signal?.aborted || !this.isCurrentStartupEpoch(epoch)) {
865
+ log.debug("startupSearchSync: aborted or retired after namespace discovery");
866
+ return false;
867
+ }
868
+ const namespaces = discovery.namespaces;
641
869
 
642
870
  const states = await Promise.all(
643
- namespaces.map(async (namespace) => ({
644
- namespace,
645
- state: resolveNamespaceCapabilities(this.deps.config).namespaces
646
- ? await this.deps.namespaceSearchRouter.ensureNamespaceCollection(namespace, { signal })
647
- : await this.deps.qmd.ensureCollection(this.deps.config.memoryDir, this.deps.config.qmdCollection, { signal }),
648
- })),
871
+ namespaces.map(async (namespace) => {
872
+ const epochAbort = this.linkedEpochAbortController(epoch, signal);
873
+ try {
874
+ return {
875
+ namespace,
876
+ state: resolveNamespaceCapabilities(this.deps.config).namespaces
877
+ ? await this.deps.namespaceSearchRouter.ensureNamespaceCollection(
878
+ namespace,
879
+ { signal: epochAbort.controller.signal },
880
+ )
881
+ : await this.deps.qmd.ensureCollection(
882
+ this.deps.config.memoryDir,
883
+ this.deps.config.qmdCollection,
884
+ { signal: epochAbort.controller.signal },
885
+ ),
886
+ };
887
+ } finally {
888
+ epochAbort.dispose();
889
+ }
890
+ }),
649
891
  );
650
892
 
651
- if (signal?.aborted) {
652
- log.debug("startupSearchSync: aborted after ensureCollection");
893
+ if (signal?.aborted || !this.isCurrentStartupEpoch(epoch)) {
894
+ log.debug("startupSearchSync: aborted or retired after ensureCollection");
653
895
  return false;
654
896
  }
655
897
 
656
898
  const defaultState =
657
899
  states.find((e) => e.namespace === this.deps.config.defaultNamespace)?.state ?? "unknown";
658
900
  if (defaultState === "missing") {
901
+ await this.deps.disposeSearchBackendIfNeeded();
902
+ if (signal?.aborted || !this.isCurrentStartupEpoch(epoch)) {
903
+ log.debug("startupSearchSync: aborted or retired while disposing a missing backend");
904
+ return false;
905
+ }
659
906
  // Reset the real backend's available flag before replacing it with noop.
660
907
  // probe() set available=true earlier in this call; without this reset,
661
908
  // any code that captured a reference to the old backend (e.g. a concurrent
@@ -664,7 +911,6 @@ export class OrchestratorInitCoordinator {
664
911
  if ("available" in this.deps.qmd) {
665
912
  (this.deps.qmd as any).available = false;
666
913
  }
667
- await this.deps.disposeSearchBackendIfNeeded();
668
914
  this.deps.qmd = new NoopSearchBackend();
669
915
  log.warn("startupSearchSync: search collection missing; disabling search (fallback retrieval remains enabled)");
670
916
  return false;
@@ -687,17 +933,22 @@ export class OrchestratorInitCoordinator {
687
933
  (this.deps.qmd as any).resetUpdateThrottles();
688
934
  }
689
935
  log.info("startupSearchSync: updating index to match current disk state");
936
+ const updateAbort = this.linkedEpochAbortController(epoch, signal);
690
937
  let namespacesUpdated = 0;
691
- if (resolveNamespaceCapabilities(this.deps.config).namespaces) {
692
- namespacesUpdated = await this.deps.namespaceSearchRouter.updateNamespaces(
693
- namespaces,
694
- { signal },
695
- );
696
- } else {
697
- await this.deps.qmd.update({ signal });
938
+ try {
939
+ if (resolveNamespaceCapabilities(this.deps.config).namespaces) {
940
+ namespacesUpdated = await this.deps.namespaceSearchRouter.updateNamespaces(
941
+ namespaces,
942
+ { signal: updateAbort.controller.signal },
943
+ );
944
+ } else {
945
+ await this.deps.qmd.update({ signal: updateAbort.controller.signal });
946
+ }
947
+ } finally {
948
+ updateAbort.dispose();
698
949
  }
699
- if (signal?.aborted) {
700
- log.debug("startupSearchSync: aborted after update");
950
+ if (signal?.aborted || !this.isCurrentStartupEpoch(epoch)) {
951
+ log.debug("startupSearchSync: aborted or retired after update");
701
952
  return false;
702
953
  }
703
954
  const failTsAfter = "lastUpdateFailedAtMs" in this.deps.qmd
@@ -728,15 +979,24 @@ export class OrchestratorInitCoordinator {
728
979
  }
729
980
 
730
981
  // Warmup search to pre-load embedding models
731
- if (!signal?.aborted) {
982
+ if (!signal?.aborted && this.isCurrentStartupEpoch(epoch)) {
983
+ const warmupAbort = this.linkedEpochAbortController(epoch, signal);
732
984
  try {
733
- await this.deps.qmd.search("warmup", this.deps.config.defaultNamespace, 1, undefined, { signal });
985
+ await this.deps.qmd.search(
986
+ "warmup",
987
+ this.deps.config.defaultNamespace,
988
+ 1,
989
+ undefined,
990
+ { signal: warmupAbort.controller.signal },
991
+ );
734
992
  log.info("startupSearchSync: warmup complete");
735
993
  } catch (err) {
736
994
  log.debug(`startupSearchSync: warmup search failed (non-fatal): ${err}`);
995
+ } finally {
996
+ warmupAbort.dispose();
737
997
  }
738
998
  }
739
999
 
740
- return true;
1000
+ return discovery.complete;
741
1001
  }
742
1002
  }