@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
@@ -1,5 +1,4 @@
1
1
  import { log } from "./logger.js";
2
- import path from "node:path";
3
2
  import type { AgentPersonaModelConfig, GatewayConfig, ModelProviderConfig, PluginConfig } from "./types.js";
4
3
  import { extractJsonCandidates } from "./json-extract.js";
5
4
  import {
@@ -10,25 +9,39 @@ import {
10
9
  import {
11
10
  resolveProviderApiKey,
12
11
  getGatewayRuntimeAuthForModel,
13
- type GetRuntimeAuthForModelFn,
14
- type ResolveApiKeyFn,
15
12
  } from "./resolve-provider-secret.js";
16
13
  import {
17
14
  CODEX_SUBSCRIPTION_PROVIDER_ID,
18
15
  codexSubscriptionBuiltinProviderConfig,
19
- getCodexSubscriptionRunnerForOwner,
20
16
  } from "./providers/codex-subscription.js";
21
17
  import { loadModelsJsonProviders } from "./models-json.js";
22
18
  import {
23
19
  abortReason,
20
+ classifyThrownProviderError,
21
+ codexDeadlineHeadroomMs,
22
+ defaultOpenClawWorkspaceDir,
23
+ extractResponsesOutputText,
24
+ fallbackLlmRuntimeContextFromConfig,
24
25
  isTerminalCodexSubscriptionError,
26
+ isTimeoutError,
27
+ isUnsupportedJsonSchemaError,
28
+ normalizeRuntimePath,
25
29
  raceFallbackLlmDeadline,
30
+ readGatewayWorkspaceDir,
26
31
  tryCodexSubscriptionProvider,
27
32
  withCodexRuntimeShutdown,
33
+ type FallbackLlmRuntimeContext,
34
+ type StructuredParseFailure,
35
+ type StructuredParseResult,
36
+ } from "./fallback-llm-codex-subscription.js";
37
+
38
+ export {
39
+ fallbackLlmRuntimeContextFromConfig,
40
+ type FallbackLlmRuntimeContext,
41
+ type StructuredParseFailure,
42
+ type StructuredParseFailureReason,
43
+ type StructuredParseResult,
28
44
  } from "./fallback-llm-codex-subscription.js";
29
- import type { CodexCliFallbackRunner } from "./cli-fallback.js";
30
- import { resolveHomeDir } from "./runtime/env.js";
31
- import { expandTildePath } from "./utils/path.js";
32
45
 
33
46
  export interface FallbackLlmOptions {
34
47
  temperature?: number;
@@ -53,6 +66,13 @@ export interface FallbackLlmOptions {
53
66
  agentId?: string;
54
67
  /** Reject a transport-successful response and continue through the configured model chain. */
55
68
  acceptResponse?: (response: FallbackLlmResponse) => boolean;
69
+ /**
70
+ * Optional out-box for the terminal failure cause (issue #2891): when every
71
+ * model in the chain fails, the last thrown provider error is recorded here
72
+ * so callers can classify it (e.g. HTTP 429 → rate-limited) in memory
73
+ * instead of seeing only null. Never logged.
74
+ */
75
+ failureDiag?: { lastError?: unknown };
56
76
  }
57
77
 
58
78
  export interface FallbackLlmAvailabilityOptions {
@@ -87,36 +107,9 @@ export interface FallbackLlmResponse {
87
107
  };
88
108
  }
89
109
 
90
- export interface FallbackLlmRuntimeContext {
91
- agentDir?: string;
92
- getRuntimeAuthForModel?: GetRuntimeAuthForModelFn | null;
93
- resolveApiKeyForProvider?: ResolveApiKeyFn | null;
94
- workspaceDir?: string;
95
- /** Per-runtime Codex child owner. Shutdown must terminate only this runner. */
96
- codexSubscriptionRunner?: CodexCliFallbackRunner;
97
- }
98
-
99
- export function fallbackLlmRuntimeContextFromConfig(
100
- config: Pick<
101
- GatewayBackedRuntimeConfig,
102
- "providerApiKeyResolver" | "runtimeAuthForModelResolver" | "workspaceDir"
103
- >,
104
- overrides: FallbackLlmRuntimeContext = {},
105
- ): FallbackLlmRuntimeContext {
106
- return {
107
- workspaceDir: config.workspaceDir,
108
- resolveApiKeyForProvider: config.providerApiKeyResolver,
109
- getRuntimeAuthForModel: config.runtimeAuthForModelResolver,
110
- codexSubscriptionRunner: getCodexSubscriptionRunnerForOwner(config),
111
- ...overrides,
112
- };
113
- }
114
-
115
- type GatewayBackedRuntimeConfig = {
116
- providerApiKeyResolver?: ResolveApiKeyFn | null;
117
- runtimeAuthForModelResolver?: GetRuntimeAuthForModelFn | null;
118
- workspaceDir?: string;
119
- };
110
+ type ChatCompletionOutcome =
111
+ | { ok: true; response: FallbackLlmResponse }
112
+ | { ok: false; failure: Omit<StructuredParseFailure, "result"> };
120
113
 
121
114
  interface ModelRef {
122
115
  providerId: string;
@@ -125,22 +118,6 @@ interface ModelRef {
125
118
  modelString: string;
126
119
  }
127
120
 
128
- function isUnsupportedJsonSchemaError(error: unknown): boolean {
129
- const message = error instanceof Error ? error.message : String(error);
130
- // Require an HTTP status plus explicit schema/format context. A bare
131
- // "unsupported" (e.g. "'temperature' is unsupported with this model") must
132
- // NOT trigger the schema-stripping retry, or we pay a duplicate request
133
- // for unrelated provider errors.
134
- if (!/\b(?:400|404|422)\b/.test(message)) {
135
- return false;
136
- }
137
- if (/(?:response[_ ]?format|json[_ ]?schema|structured[_ ]?output)/i.test(message)) {
138
- return true;
139
- }
140
- // "unsupported" only counts when adjacent to schema/format terminology.
141
- return /\bunsupported\b[\s\S]{0,40}\b(?:schema|format)\b/i.test(message);
142
- }
143
-
144
121
  const PROVIDER_ALIASES: Record<string, readonly string[]> = {
145
122
  "openai-codex": ["codex"],
146
123
  codex: ["openai-codex"],
@@ -152,16 +129,7 @@ const LEGACY_PROVIDER_IDS = new Set(["openai-codex", "claude-cli"]);
152
129
  const MANAGED_SECRETREF_MARKER = ["secretref", "managed"].join("-");
153
130
  const PROVIDER_API_KEY_FIELD = ["api", "Key"].join("") as keyof ModelProviderConfig;
154
131
 
155
- /**
156
- * Built-in provider fallbacks for providers that are commonly configured via
157
- * OAuth or gateway-managed auth rather than an explicit apiKey in
158
- * openclaw.json. These entries let resolveProviderConfig() succeed so the
159
- * chain proceeds to tryModel() → resolveRuntimeAuth(), which is where the
160
- * gateway's native OAuth token exchange happens.
161
- *
162
- * Without these, OAuth-only providers like `openai` are rejected with
163
- * "provider not found" before runtime auth is ever attempted.
164
- */
132
+ /** Built-in OAuth/managed-auth providers so resolveProviderConfig reaches runtime auth. */
165
133
  const BUILT_IN_PROVIDER_FALLBACKS: Record<string, ModelProviderConfig> = {
166
134
  anthropic: {
167
135
  baseUrl: "https://api.anthropic.com/v1",
@@ -182,9 +150,10 @@ const BUILT_IN_PROVIDER_FALLBACKS: Record<string, ModelProviderConfig> = {
182
150
  };
183
151
 
184
152
  /**
185
- * Generic fallback LLM client that uses the gateway's default AI configuration
186
- * and walks through the full fallback chain (primary + fallbacks).
187
- * Supports OpenAI and Anthropic API formats.
153
+ * Gateway/task LLM client. In `modelSource: "gateway"` this is the primary
154
+ * configured path (taskModelChain / agent persona), not a secondary recovery
155
+ * client. The class name stays `FallbackLlmClient` because it is imported
156
+ * widely; prefer the `TaskLlmClient` alias in new code. Issue #2967.
188
157
  */
189
158
  export class FallbackLlmClient {
190
159
  private gatewayConfig: GatewayConfig | undefined;
@@ -224,6 +193,18 @@ export class FallbackLlmClient {
224
193
  messages: Array<{ role: "system" | "user" | "assistant"; content: string }>,
225
194
  options: FallbackLlmOptions = {},
226
195
  ): Promise<FallbackLlmResponse | null> {
196
+ const outcome = await this.completeChat(messages, options);
197
+ return outcome.ok ? outcome.response : null;
198
+ }
199
+
200
+ /**
201
+ * Same transport walk as chatCompletion, but tagged so structured parse can
202
+ * tell timeout / empty / HTTP error apart instead of collapsing them to null.
203
+ */
204
+ private async completeChat(
205
+ messages: Array<{ role: "system" | "user" | "assistant"; content: string }>,
206
+ options: FallbackLlmOptions = {},
207
+ ): Promise<ChatCompletionOutcome> {
227
208
  const models = this.getModelChain(
228
209
  options.agentId,
229
210
  options.model,
@@ -231,28 +212,52 @@ export class FallbackLlmClient {
231
212
  options.includeDefaultModelFallback,
232
213
  );
233
214
  if (models.length === 0) {
234
- log.warn("fallback LLM: no models configured in gateway");
235
- return null;
215
+ log.warn("task LLM: no models configured in gateway");
216
+ return { ok: false, failure: { failureReason: "no_models", errorClass: "no_models" } };
236
217
  }
237
218
  options = withCodexRuntimeShutdown(options, this.runtimeContext.codexSubscriptionRunner);
238
219
 
220
+ let lastFailure: Omit<StructuredParseFailure, "result"> = {
221
+ failureReason: "http_error",
222
+ errorClass: "network",
223
+ };
224
+
225
+ const recordFailure = (
226
+ failure: Omit<StructuredParseFailure, "result">,
227
+ attemptedModel?: string,
228
+ ): void => {
229
+ lastFailure = attemptedModel ? { ...failure, attemptedModel } : failure;
230
+ };
231
+
232
+ const throwIfCallerAborted = (signal: AbortSignal | undefined): void => {
233
+ if (!signal?.aborted) return;
234
+ const reason = abortReason(signal);
235
+ if (isTimeoutError(reason) && !options.signal?.aborted) {
236
+ recordFailure({ failureReason: "timeout", errorClass: "timeout" });
237
+ return;
238
+ }
239
+ throw reason;
240
+ };
241
+
239
242
  const runChain = async (
240
243
  initialOptions: FallbackLlmOptions,
241
244
  ): Promise<FallbackLlmResponse | null> => {
242
245
  let runOptions = initialOptions;
243
246
  let lastRejectedResponse: FallbackLlmResponse | null = null;
247
+ let lastError: unknown;
244
248
  let terminalError: unknown;
245
249
  // Try each model in the chain
246
250
  for (let i = 0; i < models.length; i++) {
247
251
  if (runOptions.signal?.aborted) {
248
- throw abortReason(runOptions.signal);
252
+ throwIfCallerAborted(runOptions.signal);
253
+ if (lastFailure.failureReason === "timeout") return null;
249
254
  }
250
255
  const model = models[i];
251
256
  const isFallback = i > 0;
252
257
 
253
258
  try {
254
259
  const result = await this.tryModel(model, messages, runOptions);
255
- if (result) {
260
+ if (result?.content) {
256
261
  const response = {
257
262
  content: result.content,
258
263
  modelUsed: model.modelString,
@@ -260,26 +265,29 @@ export class FallbackLlmClient {
260
265
  };
261
266
  if (runOptions.acceptResponse && !runOptions.acceptResponse(response)) {
262
267
  lastRejectedResponse = response;
263
- log.debug(`fallback LLM: ${model.modelString} returned rejected output, trying next...`);
268
+ log.debug(`task LLM: ${model.modelString} returned rejected output, trying next...`);
264
269
  continue;
265
270
  }
266
271
  if (isFallback) {
267
- log.debug(`fallback LLM: succeeded using ${model.modelString} (fallback ${i})`);
272
+ log.debug(`task LLM: succeeded using ${model.modelString} (fallback ${i})`);
268
273
  }
269
274
  return response;
270
275
  }
276
+ recordFailure({ failureReason: "empty", errorClass: "empty" }, model.modelString);
271
277
  } catch (err) {
272
278
  if (isTerminalCodexSubscriptionError(err) && runOptions.signal?.aborted) {
273
279
  throw err;
274
280
  }
275
281
  if (runOptions.signal?.aborted) {
276
- throw abortReason(runOptions.signal);
282
+ throwIfCallerAborted(runOptions.signal);
283
+ if (lastFailure.failureReason === "timeout") return null;
277
284
  }
285
+ lastError = err;
278
286
  if (
279
287
  (runOptions.jsonSchema || runOptions.responsesJsonSchema) &&
280
288
  isUnsupportedJsonSchemaError(err)
281
289
  ) {
282
- log.debug(`fallback LLM: ${model.modelString} rejected native JSON schema; retrying without it`);
290
+ log.debug(`task LLM: ${model.modelString} rejected native JSON schema; retrying without it`);
283
291
  // Degrade to prompt-only for the REST of the chain too, so an
284
292
  // N-model chain where every provider rejects structured output
285
293
  // costs N+1 requests instead of 2N.
@@ -290,7 +298,7 @@ export class FallbackLlmClient {
290
298
  };
291
299
  try {
292
300
  const result = await this.tryModel(model, messages, runOptions);
293
- if (result) {
301
+ if (result?.content) {
294
302
  const response = {
295
303
  content: result.content,
296
304
  modelUsed: model.modelString,
@@ -300,21 +308,28 @@ export class FallbackLlmClient {
300
308
  return response;
301
309
  }
302
310
  lastRejectedResponse = response;
303
- log.debug(`fallback LLM: ${model.modelString} unstructured retry output rejected by acceptResponse, trying next model...`);
311
+ log.debug(`task LLM: ${model.modelString} unstructured retry output rejected by acceptResponse, trying next model...`);
304
312
  continue;
305
313
  }
314
+ recordFailure({ failureReason: "empty", errorClass: "empty" }, model.modelString);
306
315
  } catch (retryError) {
307
316
  if (isTerminalCodexSubscriptionError(retryError) && runOptions.signal?.aborted) {
308
317
  throw retryError;
309
318
  }
310
- if (runOptions.signal?.aborted) throw abortReason(runOptions.signal);
319
+ if (runOptions.signal?.aborted) {
320
+ throwIfCallerAborted(runOptions.signal);
321
+ if (lastFailure.failureReason === "timeout") return null;
322
+ }
323
+ lastError = retryError;
324
+ const retryClassified = classifyThrownProviderError(retryError);
325
+ recordFailure(retryClassified, model.modelString);
311
326
  const retryErrorMsg = runOptions.redactProviderErrors
312
327
  ? "provider error details redacted"
313
328
  : retryError instanceof Error
314
329
  ? retryError.message
315
330
  : String(retryError);
316
331
  log.debug(
317
- `fallback LLM: ${model.modelString} unstructured retry failed (${retryErrorMsg})`,
332
+ `task LLM: ${model.modelString} unstructured retry failed (${retryErrorMsg})`,
318
333
  );
319
334
  if (isTerminalCodexSubscriptionError(retryError)) {
320
335
  terminalError = retryError;
@@ -322,12 +337,14 @@ export class FallbackLlmClient {
322
337
  }
323
338
  continue;
324
339
  }
340
+ const classified = classifyThrownProviderError(err);
341
+ recordFailure(classified, model.modelString);
325
342
  const errorMsg = runOptions.redactProviderErrors
326
343
  ? "provider error details redacted"
327
344
  : err instanceof Error
328
345
  ? err.message
329
346
  : String(err);
330
- log.debug(`fallback LLM: ${model.modelString} failed (${errorMsg}), trying next...`);
347
+ log.debug(`task LLM: ${model.modelString} failed (${errorMsg}), trying next...`);
331
348
  if (isTerminalCodexSubscriptionError(err)) {
332
349
  terminalError = err;
333
350
  }
@@ -335,7 +352,10 @@ export class FallbackLlmClient {
335
352
  }
336
353
  }
337
354
 
338
- log.warn(`fallback LLM: all ${models.length} models in chain failed`);
355
+ log.warn(`task LLM: all ${models.length} models in chain failed`);
356
+ if (options.failureDiag && lastError !== undefined && !lastRejectedResponse) {
357
+ options.failureDiag.lastError = lastError;
358
+ }
339
359
  // A terminal typed provider failure must reach the caller when the
340
360
  // chain is exhausted — the documented timeout/re-login guidance
341
361
  // depends on it (issue #2833).
@@ -345,42 +365,54 @@ export class FallbackLlmClient {
345
365
  return lastRejectedResponse;
346
366
  };
347
367
 
368
+ const toOutcome = (response: FallbackLlmResponse | null): ChatCompletionOutcome => {
369
+ if (response) return { ok: true, response };
370
+ return { ok: false, failure: lastFailure };
371
+ };
372
+
348
373
  if (typeof options.timeoutMs === "number") {
349
374
  if (options.timeoutMs <= 0) {
350
- log.warn("fallback LLM: timed out before request started");
351
- return null;
375
+ log.warn("task LLM: timed out before request started");
376
+ return { ok: false, failure: { failureReason: "timeout", errorClass: "timeout" } };
352
377
  }
353
378
  const controller = new AbortController();
354
379
  const onCallerAbort = (): void => {
355
380
  controller.abort(abortReason(options.signal));
356
381
  };
357
382
  options.signal?.addEventListener("abort", onCallerAbort, { once: true });
358
- if (options.signal?.aborted) {
359
- onCallerAbort();
360
- }
383
+ if (options.signal?.aborted) onCallerAbort();
361
384
  const timedOptions = { ...options, signal: controller.signal };
362
385
  const chain = runChain(timedOptions);
363
- const guarded = chain.then(
364
- (value) => value,
365
- (err) => {
366
- if (isTerminalCodexSubscriptionError(err)) throw err;
367
- return null;
368
- },
369
- );
386
+ const guarded = chain.catch((err) => {
387
+ if (isTerminalCodexSubscriptionError(err)) throw err;
388
+ return null;
389
+ });
370
390
  try {
371
- const outcome = await raceFallbackLlmDeadline(guarded, options.timeoutMs, () => {
372
- log.warn(`fallback LLM: timed out after ${options.timeoutMs}ms`);
373
- controller.abort(
374
- new Error(`fallback LLM timed out after ${options.timeoutMs}ms`),
375
- );
376
- });
377
- return outcome.timedOut ? null : outcome.value;
391
+ const timeoutError = Object.assign(
392
+ new Error(`task LLM timed out after ${options.timeoutMs}ms`),
393
+ { name: "TimeoutError" },
394
+ );
395
+ const outcome = await raceFallbackLlmDeadline(
396
+ guarded,
397
+ options.timeoutMs,
398
+ () => {
399
+ log.warn(`task LLM: timed out after ${options.timeoutMs}ms`);
400
+ recordFailure({ failureReason: "timeout", errorClass: "timeout" });
401
+ controller.abort(timeoutError);
402
+ if (options.failureDiag) options.failureDiag.lastError = timeoutError;
403
+ },
404
+ models.some((m) => m.providerConfig.api === "codex-cli") ? codexDeadlineHeadroomMs(options.timeoutMs) : 0,
405
+ );
406
+ if (outcome.timedOut) {
407
+ return { ok: false, failure: { failureReason: "timeout", errorClass: "timeout" } };
408
+ }
409
+ return toOutcome(outcome.value);
378
410
  } finally {
379
411
  options.signal?.removeEventListener("abort", onCallerAbort);
380
412
  }
381
413
  }
382
414
 
383
- return await runChain(options);
415
+ return toOutcome(await runChain(options));
384
416
  }
385
417
 
386
418
  /**
@@ -404,13 +436,10 @@ export class FallbackLlmClient {
404
436
  messages: Array<{ role: "system" | "user" | "assistant"; content: string }>,
405
437
  schema: { parse: (data: unknown) => T },
406
438
  options: FallbackLlmOptions = {},
407
- ): Promise<
408
- | { result: T; modelUsed: string }
409
- | { result: null; failureReason: "no_models" | "empty" | "http_error" }
410
- > {
411
- let response: FallbackLlmResponse | null;
439
+ ): Promise<StructuredParseResult<T>> {
440
+ let outcome: ChatCompletionOutcome;
412
441
  try {
413
- response = await this.chatCompletion(messages, options);
442
+ outcome = await this.completeChat(messages, options);
414
443
  } catch (err) {
415
444
  // Caller aborts must propagate (e.g. recall planner cancellation) — do
416
445
  // not swallow them as a provider failure, or abort-driven callers lose
@@ -418,38 +447,65 @@ export class FallbackLlmClient {
418
447
  // Terminal codex-subscription failures propagate for the same reason:
419
448
  // their TimeoutError/auth guidance is the documented contract.
420
449
  if (options.signal?.aborted || isTerminalCodexSubscriptionError(err)) throw err;
421
- log.warn("fallback LLM: chatCompletion threw during structured parse:", err);
422
- return { result: null, failureReason: "http_error" };
450
+ if (isTimeoutError(err)) {
451
+ return { result: null, failureReason: "timeout", errorClass: "timeout" };
452
+ }
453
+ log.warn("task LLM: chatCompletion threw during structured parse:", err);
454
+ return { result: null, ...classifyThrownProviderError(err) };
423
455
  }
424
- if (!response?.content) {
425
- // chatCompletion returns null both when no models are configured
426
- // (auth/config) and when every configured model errored (transient).
427
- // Disambiguate via the resolved model chain so the retry layer can pick
428
- // the right failure class.
429
- const hasModels =
430
- this.getModelChain(
431
- options.agentId,
432
- options.model,
433
- options.modelChain,
434
- options.includeDefaultModelFallback,
435
- ).length > 0;
436
- return { result: null, failureReason: hasModels ? "http_error" : "no_models" };
456
+ if (!outcome.ok) {
457
+ return { result: null, ...outcome.failure };
458
+ }
459
+ const response = outcome.response;
460
+ if (!response.content) {
461
+ return {
462
+ result: null,
463
+ failureReason: "empty",
464
+ attemptedModel: response.modelUsed,
465
+ errorClass: "empty",
466
+ };
437
467
  }
438
468
 
439
469
  try {
440
470
  const candidates = extractJsonCandidates(response.content);
471
+ let sawJson = false;
472
+ let sawSchemaReject = false;
441
473
  for (const c of candidates) {
474
+ let parsed: unknown;
475
+ try {
476
+ parsed = JSON.parse(c);
477
+ sawJson = true;
478
+ } catch {
479
+ continue;
480
+ }
442
481
  try {
443
- const parsed = JSON.parse(c);
444
482
  return { result: schema.parse(parsed), modelUsed: response.modelUsed };
445
483
  } catch {
446
- // keep trying other candidates
484
+ sawSchemaReject = true;
447
485
  }
448
486
  }
449
- return { result: null, failureReason: "empty" };
487
+ if (sawSchemaReject) {
488
+ return {
489
+ result: null,
490
+ failureReason: "schema_rejection",
491
+ attemptedModel: response.modelUsed,
492
+ errorClass: "schema_rejection",
493
+ };
494
+ }
495
+ return {
496
+ result: null,
497
+ failureReason: "empty",
498
+ attemptedModel: response.modelUsed,
499
+ errorClass: "empty",
500
+ };
450
501
  } catch (err) {
451
- log.warn("fallback LLM: failed to parse structured output:", err);
452
- return { result: null, failureReason: "empty" };
502
+ log.warn("task LLM: failed to parse structured output:", err);
503
+ return {
504
+ result: null,
505
+ failureReason: "empty",
506
+ attemptedModel: response.modelUsed,
507
+ errorClass: "empty",
508
+ };
453
509
  }
454
510
  }
455
511
 
@@ -476,9 +532,9 @@ export class FallbackLlmClient {
476
532
 
477
533
  if (modelChainOverride?.primary) {
478
534
  modelConfig = modelChainOverride;
479
- log.debug("fallback LLM: using explicit model chain override");
535
+ log.debug("task LLM: using explicit model chain override");
480
536
  } else if (modelChainOverride) {
481
- log.warn("fallback LLM: ignoring explicit model chain override without primary model");
537
+ log.warn("task LLM: ignoring explicit model chain override without primary model");
482
538
  }
483
539
 
484
540
  if (!modelConfig && agentId) {
@@ -487,10 +543,10 @@ export class FallbackLlmClient {
487
543
  );
488
544
  if (persona?.model) {
489
545
  modelConfig = persona.model;
490
- log.debug(`fallback LLM: using agent persona "${agentId}" model chain`);
546
+ log.debug(`task LLM: using agent persona "${agentId}" model chain`);
491
547
  } else {
492
548
  log.warn(
493
- `fallback LLM: agent persona "${agentId}" not found or has no model config, falling back to defaults`,
549
+ `task LLM: agent persona "${agentId}" not found or has no model config, falling back to defaults`,
494
550
  );
495
551
  }
496
552
  }
@@ -552,7 +608,7 @@ export class FallbackLlmClient {
552
608
  chain.push(defaultRef);
553
609
  modelStrings.push(trimmed); // keep dedupe correct for later default fallbacks
554
610
  log.debug(
555
- `fallback LLM: appended gateway default model "${trimmed}" as implicit last resort`,
611
+ `task LLM: appended gateway default model "${trimmed}" as implicit last resort`,
556
612
  );
557
613
  }
558
614
  }
@@ -571,7 +627,7 @@ export class FallbackLlmClient {
571
627
  // Parse "provider/model" format (e.g., "openai/gpt-5.5", "anthropic/claude-opus-4-6")
572
628
  const parts = modelString.split("/");
573
629
  if (parts.length < 2) {
574
- log.warn(`fallback LLM: invalid model format: ${modelString}`);
630
+ log.warn(`task LLM: invalid model format: ${modelString}`);
575
631
  return null;
576
632
  }
577
633
 
@@ -586,7 +642,7 @@ export class FallbackLlmClient {
586
642
  const providerConfig = resolvedProvider?.config;
587
643
  if (!providerConfig) {
588
644
  log.warn(
589
- `fallback LLM: provider not found: ${requestedProviderId} ` +
645
+ `task LLM: provider not found: ${requestedProviderId} ` +
590
646
  `(tried: ${this.providerResolutionCandidates(requestedProviderId).join(", ")})`,
591
647
  );
592
648
  return null;
@@ -613,7 +669,7 @@ export class FallbackLlmClient {
613
669
  const config = providers[candidate];
614
670
  if (config) {
615
671
  if (candidate !== providerId) {
616
- log.debug(`fallback LLM: provider "${providerId}" resolved via alias "${candidate}"`);
672
+ log.debug(`task LLM: provider "${providerId}" resolved via alias "${candidate}"`);
617
673
  }
618
674
  return { providerId: candidate, config };
619
675
  }
@@ -622,17 +678,17 @@ export class FallbackLlmClient {
622
678
  const config = this.resolveFromModelsJson(candidate);
623
679
  if (config) {
624
680
  if (candidate !== providerId) {
625
- log.debug(`fallback LLM: provider "${providerId}" resolved via models.json alias "${candidate}"`);
681
+ log.debug(`task LLM: provider "${providerId}" resolved via models.json alias "${candidate}"`);
626
682
  }
627
683
  return { providerId: candidate, config };
628
684
  }
629
685
  const builtInConfig = BUILT_IN_PROVIDER_FALLBACKS[candidate];
630
686
  if (builtInConfig) {
631
687
  if (candidate === providerId) {
632
- log.debug(`fallback LLM: provider "${providerId}" resolved from built-in defaults`);
688
+ log.debug(`task LLM: provider "${providerId}" resolved from built-in defaults`);
633
689
  return { providerId, config: builtInConfig };
634
690
  }
635
- log.debug(`fallback LLM: provider "${providerId}" resolved via built-in alias "${candidate}"`);
691
+ log.debug(`task LLM: provider "${providerId}" resolved via built-in alias "${candidate}"`);
636
692
  return { providerId: candidate, config: builtInConfig };
637
693
  }
638
694
  }
@@ -654,7 +710,7 @@ export class FallbackLlmClient {
654
710
  const allProviders = loadModelsJsonProviders();
655
711
  const config = allProviders[providerId];
656
712
  if (config) {
657
- log.debug(`fallback LLM: resolved provider "${providerId}" from models.json (api: ${config.api ?? "default"})`);
713
+ log.debug(`task LLM: resolved provider "${providerId}" from models.json (api: ${config.api ?? "default"})`);
658
714
  return config;
659
715
  }
660
716
  return null;
@@ -761,13 +817,13 @@ export class FallbackLlmClient {
761
817
 
762
818
  if (result?.apiKey || result?.baseUrl) {
763
819
  log.debug(
764
- `fallback LLM: resolved runtime auth for "${model.modelString}" (source: ${result.source ?? "unknown"}, mode: ${result.mode ?? "unknown"})`,
820
+ `task LLM: resolved runtime auth for "${model.modelString}" (source: ${result.source ?? "unknown"}, mode: ${result.mode ?? "unknown"})`,
765
821
  );
766
822
  return { apiKey: result.apiKey, baseUrl: result.baseUrl };
767
823
  }
768
824
  } catch (err) {
769
825
  log.debug(
770
- `fallback LLM: gateway runtime auth failed for "${model.modelString}": ${err instanceof Error ? err.message : String(err)}`,
826
+ `task LLM: gateway runtime auth failed for "${model.modelString}": ${err instanceof Error ? err.message : String(err)}`,
771
827
  );
772
828
  }
773
829
  return null;
@@ -848,7 +904,7 @@ export class FallbackLlmClient {
848
904
 
849
905
  if (!response.ok) {
850
906
  const error = await response.text();
851
- throw new Error(`OpenAI API error: ${response.status} ${error}`);
907
+ throw Object.assign(new Error(`OpenAI API error: ${response.status} ${error}`), { status: response.status });
852
908
  }
853
909
 
854
910
  const data = (await response.json()) as {
@@ -920,7 +976,7 @@ export class FallbackLlmClient {
920
976
 
921
977
  if (!response.ok) {
922
978
  const error = await response.text();
923
- throw new Error(`Ollama API error: ${response.status} ${error}`);
979
+ throw Object.assign(new Error(`Ollama API error: ${response.status} ${error}`), { status: response.status });
924
980
  }
925
981
 
926
982
  const data = (await response.json()) as {
@@ -1018,7 +1074,7 @@ export class FallbackLlmClient {
1018
1074
 
1019
1075
  if (!response.ok) {
1020
1076
  const error = await response.text();
1021
- throw new Error(`OpenAI Responses API error: ${response.status} ${error}`);
1077
+ throw Object.assign(new Error(`OpenAI Responses API error: ${response.status} ${error}`), { status: response.status });
1022
1078
  }
1023
1079
 
1024
1080
  const data = (await response.json()) as {
@@ -1110,7 +1166,7 @@ export class FallbackLlmClient {
1110
1166
 
1111
1167
  if (!response.ok) {
1112
1168
  const error = await response.text();
1113
- throw new Error(`Anthropic API error: ${response.status} ${error}`);
1169
+ throw Object.assign(new Error(`Anthropic API error: ${response.status} ${error}`), { status: response.status });
1114
1170
  }
1115
1171
 
1116
1172
  const data = (await response.json()) as {
@@ -1142,57 +1198,3 @@ export class FallbackLlmClient {
1142
1198
  }
1143
1199
  }
1144
1200
 
1145
- function normalizeRuntimePath(value: unknown): string | undefined {
1146
- if (typeof value !== "string") return undefined;
1147
- const trimmed = value.trim();
1148
- return trimmed.length > 0 ? expandTildePath(trimmed) : undefined;
1149
- }
1150
-
1151
- function readGatewayWorkspaceDir(gatewayConfig: GatewayConfig | undefined): string | undefined {
1152
- if (!gatewayConfig || typeof gatewayConfig !== "object") return undefined;
1153
- const raw = gatewayConfig as Record<string, unknown>;
1154
- return (
1155
- normalizeRuntimePath(raw.workspaceDir) ??
1156
- normalizeRuntimePath(raw.workspacePath) ??
1157
- normalizeRuntimePath(raw.workspace)
1158
- );
1159
- }
1160
-
1161
- function defaultOpenClawWorkspaceDir(): string {
1162
- return path.join(resolveHomeDir(), ".openclaw", "workspace");
1163
- }
1164
-
1165
- function extractResponsesOutputText(data: {
1166
- output_text?: string;
1167
- output?: Array<{
1168
- type?: string;
1169
- text?: string;
1170
- content?: Array<{
1171
- type?: string;
1172
- text?: string;
1173
- }>;
1174
- }>;
1175
- }): string | null {
1176
- if (typeof data.output_text === "string" && data.output_text.trim().length > 0) {
1177
- return data.output_text;
1178
- }
1179
-
1180
- const chunks: string[] = [];
1181
- for (const item of data.output ?? []) {
1182
- if (typeof item.text === "string" && item.text.trim().length > 0) {
1183
- chunks.push(item.text);
1184
- }
1185
- for (const part of item.content ?? []) {
1186
- if (
1187
- (part.type === "output_text" || part.type === "text") &&
1188
- typeof part.text === "string" &&
1189
- part.text.trim().length > 0
1190
- ) {
1191
- chunks.push(part.text);
1192
- }
1193
- }
1194
- }
1195
-
1196
- const joined = chunks.join("\n").trim();
1197
- return joined.length > 0 ? joined : null;
1198
- }