@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,11 +1,10 @@
1
1
  /**
2
- * Codex-subscription helpers for FallbackLlmClient (issue #2833).
3
- *
4
- * Terminal error classification, the `api: "codex-cli"` provider attempt,
5
- * and Codex runner/lifecycle helpers live here so fallback-llm.ts stays
6
- * generic chain orchestration.
2
+ * Helpers extracted from FallbackLlmClient so fallback-llm.ts stays under
3
+ * the 1200-line cap: Codex-subscription lifecycle (issue #2833) plus
4
+ * generic chain helpers used by the same client.
7
5
  */
8
6
 
7
+ import path from "node:path";
9
8
  import { raceAbort } from "./abort-error.js";
10
9
  import { callCodexCliFallback, isCodexCliFallbackRunnerRegistered } from "./cli-fallback.js";
11
10
  import type { CodexCliFallbackRunner } from "./cli-fallback.js";
@@ -16,10 +15,14 @@ import {
16
15
  CodexSubscriptionTimeoutError,
17
16
  assertNoApiKeyConfig,
18
17
  ensureCodexSubscriptionRunnerRegistered,
18
+ getCodexSubscriptionRunnerForOwner,
19
19
  getCodexSubscriptionShutdownSignal,
20
20
  isDefaultRegisteredCodexSubscriptionRunner,
21
21
  } from "./providers/codex-subscription.js";
22
- import type { ModelProviderConfig } from "./types.js";
22
+ import type { GetRuntimeAuthForModelFn, ResolveApiKeyFn } from "./resolve-provider-secret.js";
23
+ import { resolveHomeDir } from "./runtime/env.js";
24
+ import type { GatewayConfig, ModelProviderConfig } from "./types.js";
25
+ import { expandTildePath } from "./utils/path.js";
23
26
 
24
27
  type CodexSubscriptionAttemptResult = {
25
28
  content: string;
@@ -44,15 +47,29 @@ export function isTerminalCodexSubscriptionError(error: unknown): boolean {
44
47
  );
45
48
  }
46
49
 
50
+ /**
51
+ * Single bounded headroom shared by both sides of the Codex deadline
52
+ * (issue #2890): the provider gets it as SIGTERM lead time
53
+ * (`timeoutMs - headroom`) and the outer race as settle grace, so the hard
54
+ * outer bound stays `timeoutMs + headroom` (<= 25 ms past the deadline).
55
+ */
56
+ export function codexDeadlineHeadroomMs(timeoutMs: number): number {
57
+ return Math.min(25, Math.max(1, Math.floor(timeoutMs / 10)));
58
+ }
59
+
47
60
  /**
48
61
  * Settle a fallback-LLM chain at the caller deadline. Abort the in-flight
49
- * work, return immediately, and observe the abandoned promise so a late
50
- * rejection cannot become unhandled.
62
+ * work, then wait a bounded settle grace for the chain to surface a typed
63
+ * provider timeout (default: one event-loop turn). A chain that settles
64
+ * within the grace wins with its own result or error; one that never
65
+ * settles still cannot exceed `timeoutMs + settleGraceMs`. The abandoned
66
+ * promise is observed so a late rejection cannot become unhandled.
51
67
  */
52
68
  export async function raceFallbackLlmDeadline<T>(
53
69
  work: Promise<T>,
54
70
  timeoutMs: number,
55
71
  abortOnTimeout: () => void,
72
+ settleGraceMs = 0,
56
73
  ): Promise<{ timedOut: true } | { timedOut: false; value: T }> {
57
74
  const deadline = new AbortController();
58
75
  const timer = setTimeout(() => deadline.abort(), timeoutMs);
@@ -66,15 +83,21 @@ export async function raceFallbackLlmDeadline<T>(
66
83
  return { timedOut: false, value };
67
84
  } catch (error) {
68
85
  if (!deadline.signal.aborted) throw error;
86
+ let graceTimer: NodeJS.Timeout | undefined;
69
87
  const afterAbort = await Promise.race([
70
88
  work.then(
71
89
  (value) => ({ state: "value" as const, value }),
72
90
  (lateError) => ({ state: "error" as const, error: lateError }),
73
91
  ),
74
92
  new Promise<{ state: "pending" }>((resolve) => {
75
- setImmediate(() => resolve({ state: "pending" }));
93
+ if (settleGraceMs > 0) {
94
+ graceTimer = setTimeout(() => resolve({ state: "pending" }), settleGraceMs);
95
+ } else {
96
+ setImmediate(() => resolve({ state: "pending" }));
97
+ }
76
98
  }),
77
99
  ]);
100
+ clearTimeout(graceTimer);
78
101
  if (afterAbort.state === "value") return { timedOut: false, value: afterAbort.value };
79
102
  if (afterAbort.state === "error") throw afterAbort.error;
80
103
  void work.then(
@@ -129,11 +152,13 @@ export async function tryCodexSubscriptionProvider(
129
152
  ...(resolvedApiKey ? { apiKey: resolvedApiKey } : {}),
130
153
  };
131
154
 
132
- // Let the provider surface its typed timeout before the generic outer deadline.
155
+ // Let the provider surface its typed timeout before the generic outer
156
+ // deadline: the shared bounded headroom is SIGTERM lead time here and
157
+ // settle grace in raceFallbackLlmDeadline (issue #2890).
133
158
  const callOptions = {
134
159
  timeoutMs: options.timeoutMs === undefined
135
160
  ? undefined
136
- : Math.max(1, options.timeoutMs - Math.min(100, Math.max(5, Math.floor(options.timeoutMs / 5)))),
161
+ : Math.max(1, options.timeoutMs - codexDeadlineHeadroomMs(options.timeoutMs)),
137
162
  signal: options.signal,
138
163
  };
139
164
  // A host/benchmark runner on the process seam still wins. The core
@@ -151,7 +176,7 @@ export async function tryCodexSubscriptionProvider(
151
176
 
152
177
  export function abortReason(signal: AbortSignal | undefined): Error {
153
178
  const reason = signal?.reason;
154
- return reason instanceof Error ? reason : new Error("fallback LLM request aborted");
179
+ return reason instanceof Error ? reason : new Error("task LLM request aborted");
155
180
  }
156
181
 
157
182
  export function withCodexRuntimeShutdown<T extends { signal?: AbortSignal }>(
@@ -166,3 +191,186 @@ export function withCodexRuntimeShutdown<T extends { signal?: AbortSignal }>(
166
191
  signal: options.signal ? AbortSignal.any([options.signal, shutdown]) : shutdown,
167
192
  };
168
193
  }
194
+
195
+ export function isUnsupportedJsonSchemaError(error: unknown): boolean {
196
+ const message = error instanceof Error ? error.message : String(error);
197
+ // Require an HTTP status plus explicit schema/format context. A bare
198
+ // "unsupported" (e.g. "'temperature' is unsupported with this model") must
199
+ // NOT trigger the schema-stripping retry, or we pay a duplicate request
200
+ // for unrelated provider errors.
201
+ if (!/\b(?:400|404|422)\b/.test(message)) {
202
+ return false;
203
+ }
204
+ if (/(?:response[_ ]?format|json[_ ]?schema|structured[_ ]?output)/i.test(message)) {
205
+ return true;
206
+ }
207
+ // "unsupported" only counts when adjacent to schema/format terminology.
208
+ return /\bunsupported\b[\s\S]{0,40}\b(?:schema|format)\b/i.test(message);
209
+ }
210
+
211
+ export function extractResponsesOutputText(data: {
212
+ output_text?: string;
213
+ output?: Array<{
214
+ type?: string;
215
+ text?: string;
216
+ content?: Array<{
217
+ type?: string;
218
+ text?: string;
219
+ }>;
220
+ }>;
221
+ }): string | null {
222
+ if (typeof data.output_text === "string" && data.output_text.trim().length > 0) {
223
+ return data.output_text;
224
+ }
225
+
226
+ const chunks: string[] = [];
227
+ for (const item of data.output ?? []) {
228
+ if (typeof item.text === "string" && item.text.trim().length > 0) {
229
+ chunks.push(item.text);
230
+ }
231
+ for (const part of item.content ?? []) {
232
+ if (
233
+ (part.type === "output_text" || part.type === "text") &&
234
+ typeof part.text === "string" &&
235
+ part.text.trim().length > 0
236
+ ) {
237
+ chunks.push(part.text);
238
+ }
239
+ }
240
+ }
241
+
242
+ const joined = chunks.join("\n").trim();
243
+ return joined.length > 0 ? joined : null;
244
+ }
245
+
246
+ export type StructuredParseFailureReason =
247
+ | "no_models"
248
+ | "empty"
249
+ | "http_error"
250
+ | "schema_rejection"
251
+ | "timeout";
252
+
253
+ export interface StructuredParseFailure {
254
+ result: null;
255
+ failureReason: StructuredParseFailureReason;
256
+ /** Model string of the last attempt, when one was selected. Not `modelUsed`. */
257
+ attemptedModel?: string;
258
+ /** HTTP status when known. Never a response body. */
259
+ httpStatus?: number;
260
+ /** Coarse class: http_4xx / http_5xx / timeout / network / empty / schema_rejection / no_models. */
261
+ errorClass?: string;
262
+ }
263
+
264
+ export type StructuredParseResult<T> =
265
+ | { result: T; modelUsed: string }
266
+ | StructuredParseFailure;
267
+
268
+ export interface FallbackLlmRuntimeContext {
269
+ agentDir?: string;
270
+ getRuntimeAuthForModel?: GetRuntimeAuthForModelFn | null;
271
+ resolveApiKeyForProvider?: ResolveApiKeyFn | null;
272
+ workspaceDir?: string;
273
+ /** Per-runtime Codex child owner. Shutdown must terminate only this runner. */
274
+ codexSubscriptionRunner?: CodexCliFallbackRunner;
275
+ }
276
+
277
+ type GatewayBackedRuntimeConfig = {
278
+ providerApiKeyResolver?: ResolveApiKeyFn | null;
279
+ runtimeAuthForModelResolver?: GetRuntimeAuthForModelFn | null;
280
+ workspaceDir?: string;
281
+ };
282
+
283
+ export function fallbackLlmRuntimeContextFromConfig(
284
+ config: Pick<
285
+ GatewayBackedRuntimeConfig,
286
+ "providerApiKeyResolver" | "runtimeAuthForModelResolver" | "workspaceDir"
287
+ >,
288
+ overrides: FallbackLlmRuntimeContext = {},
289
+ ): FallbackLlmRuntimeContext {
290
+ return {
291
+ workspaceDir: config.workspaceDir,
292
+ resolveApiKeyForProvider: config.providerApiKeyResolver,
293
+ getRuntimeAuthForModel: config.runtimeAuthForModelResolver,
294
+ codexSubscriptionRunner: getCodexSubscriptionRunnerForOwner(config),
295
+ ...overrides,
296
+ };
297
+ }
298
+
299
+ const HTTP_STATUS_IN_MESSAGE = /\b([1-5]\d{2})\b/;
300
+
301
+ export function isTimeoutError(err: unknown): boolean {
302
+ const msg = err instanceof Error ? err.message : String(err);
303
+ return /timed out after \d+ms/i.test(msg) || /timed out before request started/i.test(msg);
304
+ }
305
+
306
+ function isEmptyProviderResponse(err: unknown): boolean {
307
+ const msg = err instanceof Error ? err.message : String(err);
308
+ return /^Empty response from /i.test(msg);
309
+ }
310
+
311
+ function finiteHttpStatus(value: unknown): number | undefined {
312
+ if (typeof value !== "number" || !Number.isFinite(value) || !Number.isInteger(value)) return undefined;
313
+ if (value < 100 || value > 599) return undefined;
314
+ return value;
315
+ }
316
+
317
+ function httpStatusFromProviderError(err: unknown): number | undefined {
318
+ if (err && typeof err === "object") {
319
+ if ("status" in err) {
320
+ const status = finiteHttpStatus(err.status);
321
+ if (status !== undefined) return status;
322
+ }
323
+ if ("statusCode" in err) {
324
+ const status = finiteHttpStatus(err.statusCode);
325
+ if (status !== undefined) return status;
326
+ }
327
+ }
328
+ const msg = err instanceof Error ? err.message : String(err);
329
+ const match = HTTP_STATUS_IN_MESSAGE.exec(msg);
330
+ if (!match) return undefined;
331
+ return finiteHttpStatus(Number(match[1]));
332
+ }
333
+
334
+ function errorClassForHttpStatus(status: number): string {
335
+ if (status >= 500) return "http_5xx";
336
+ if (status >= 400) return "http_4xx";
337
+ return `http_${status}`;
338
+ }
339
+
340
+ export function classifyThrownProviderError(err: unknown): Omit<StructuredParseFailure, "result"> {
341
+ if (isTimeoutError(err)) {
342
+ return { failureReason: "timeout", errorClass: "timeout" };
343
+ }
344
+ if (isEmptyProviderResponse(err)) {
345
+ return { failureReason: "empty", errorClass: "empty" };
346
+ }
347
+ const httpStatus = httpStatusFromProviderError(err);
348
+ if (httpStatus !== undefined) {
349
+ return {
350
+ failureReason: "http_error",
351
+ httpStatus,
352
+ errorClass: errorClassForHttpStatus(httpStatus),
353
+ };
354
+ }
355
+ return { failureReason: "http_error", errorClass: "network" };
356
+ }
357
+
358
+ export function normalizeRuntimePath(value: unknown): string | undefined {
359
+ if (typeof value !== "string") return undefined;
360
+ const trimmed = value.trim();
361
+ return trimmed.length > 0 ? expandTildePath(trimmed) : undefined;
362
+ }
363
+
364
+ export function readGatewayWorkspaceDir(gatewayConfig: GatewayConfig | undefined): string | undefined {
365
+ if (!gatewayConfig || typeof gatewayConfig !== "object") return undefined;
366
+ const raw = gatewayConfig as Record<string, unknown>;
367
+ return (
368
+ normalizeRuntimePath(raw.workspaceDir) ??
369
+ normalizeRuntimePath(raw.workspacePath) ??
370
+ normalizeRuntimePath(raw.workspace)
371
+ );
372
+ }
373
+
374
+ export function defaultOpenClawWorkspaceDir(): string {
375
+ return path.join(resolveHomeDir(), ".openclaw", "workspace");
376
+ }
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Distinct structured-parse failure classes (issue #2968).
3
+ *
4
+ * HTTP 200 empty, invalid JSON, schema-invalid JSON, HTTP errors, and the
5
+ * abort/timeout race must not collapse into one reason. Fingerprints stay
6
+ * retryable because these map to provider_retryable / parse_empty, which the
7
+ * extraction-run coordinator never marks processed.
8
+ */
9
+ import assert from "node:assert/strict";
10
+ import test from "node:test";
11
+ import { z } from "zod";
12
+
13
+ import { classifyFallbackParseFailure } from "./extraction-error-classification.js";
14
+ import { FallbackLlmClient } from "./fallback-llm.js";
15
+ import { clearModelsJsonCache } from "./models-json.js";
16
+ import { clearSecretCache } from "./resolve-provider-secret.js";
17
+
18
+ const Schema = z.object({ ok: z.literal(true) });
19
+
20
+ function makeClient(): FallbackLlmClient {
21
+ return new FallbackLlmClient({
22
+ agents: { defaults: { model: { primary: "openai/test-model" } } },
23
+ models: {
24
+ providers: {
25
+ openai: {
26
+ baseUrl: "https://openai.example/v1",
27
+ api: "openai-completions",
28
+ apiKey: "key",
29
+ models: [],
30
+ },
31
+ },
32
+ },
33
+ });
34
+ }
35
+
36
+ async function parse(
37
+ fetchImpl: typeof fetch,
38
+ options: { timeoutMs?: number; signal?: AbortSignal } = {},
39
+ ) {
40
+ const originalFetch = globalThis.fetch;
41
+ globalThis.fetch = fetchImpl;
42
+ const client = makeClient();
43
+ try {
44
+ return await client.parseWithSchemaDetailed(
45
+ [
46
+ { role: "system", content: "Return JSON." },
47
+ { role: "user", content: "Do the thing." },
48
+ ],
49
+ { parse: (data: unknown) => Schema.parse(data) },
50
+ { temperature: 0, maxTokens: 16, ...options },
51
+ );
52
+ } finally {
53
+ globalThis.fetch = originalFetch;
54
+ clearModelsJsonCache();
55
+ clearSecretCache();
56
+ }
57
+ }
58
+
59
+ function jsonResponse(body: unknown, status = 200): Response {
60
+ return new Response(JSON.stringify(body), {
61
+ status,
62
+ headers: { "Content-Type": "application/json" },
63
+ });
64
+ }
65
+
66
+ test("parseWithSchemaDetailed: HTTP 200 empty content is empty, not http_error", { concurrency: false }, async () => {
67
+ const detailed = await parse(async () =>
68
+ jsonResponse({ choices: [{ message: { content: "" } }] }),
69
+ );
70
+ assert.equal(detailed.result, null);
71
+ if (detailed.result !== null) throw new Error("expected failure");
72
+ assert.equal(detailed.failureReason, "empty");
73
+ assert.equal(detailed.errorClass, "empty");
74
+ assert.equal(classifyFallbackParseFailure(detailed.failureReason), "parse_empty");
75
+ });
76
+
77
+ test("parseWithSchemaDetailed: invalid JSON is empty, not schema_rejection", { concurrency: false }, async () => {
78
+ const detailed = await parse(async () =>
79
+ jsonResponse({ choices: [{ message: { content: "not-json {{{" } }] }),
80
+ );
81
+ assert.equal(detailed.result, null);
82
+ if (detailed.result !== null) throw new Error("expected failure");
83
+ assert.equal(detailed.failureReason, "empty");
84
+ assert.equal(detailed.errorClass, "empty");
85
+ assert.notEqual(detailed.failureReason, "schema_rejection");
86
+ assert.notEqual(detailed.failureReason, "http_error");
87
+ assert.equal(classifyFallbackParseFailure(detailed.failureReason), "parse_empty");
88
+ });
89
+
90
+ test("parseWithSchemaDetailed: schema-invalid JSON is schema_rejection", { concurrency: false }, async () => {
91
+ const detailed = await parse(async () =>
92
+ jsonResponse({ choices: [{ message: { content: '{"ok":false}' } }] }),
93
+ );
94
+ assert.equal(detailed.result, null);
95
+ if (detailed.result !== null) throw new Error("expected failure");
96
+ assert.equal(detailed.failureReason, "schema_rejection");
97
+ assert.equal(detailed.errorClass, "schema_rejection");
98
+ assert.equal(detailed.attemptedModel, "openai/test-model");
99
+ assert.equal(classifyFallbackParseFailure(detailed.failureReason), "parse_empty");
100
+ });
101
+
102
+ test("parseWithSchemaDetailed: HTTP error is http_error with redacted status class", { concurrency: false }, async () => {
103
+ const detailed = await parse(
104
+ async () =>
105
+ new Response("upstream error: auth rejected by upstream (401 Unauthorized)", {
106
+ status: 502,
107
+ headers: { "Content-Type": "text/plain" },
108
+ }),
109
+ );
110
+ assert.equal(detailed.result, null);
111
+ if (detailed.result !== null) throw new Error("expected failure");
112
+ assert.equal(detailed.failureReason, "http_error");
113
+ assert.equal(detailed.httpStatus, 502);
114
+ assert.equal(detailed.errorClass, "http_5xx");
115
+ assert.equal(detailed.attemptedModel, "openai/test-model");
116
+ assert.equal(classifyFallbackParseFailure(detailed.failureReason), "provider_retryable");
117
+ const serialized = JSON.stringify(detailed);
118
+ assert.equal(serialized.includes("auth rejected"), false);
119
+ assert.equal(serialized.includes("Unauthorized"), false);
120
+ });
121
+
122
+ test("parseWithSchemaDetailed: abort/timeout race is timeout, not http_error", { concurrency: false }, async () => {
123
+ const detailed = await parse(
124
+ async (_url, init) => {
125
+ const signal = init?.signal;
126
+ return await new Promise<Response>((_resolve, reject) => {
127
+ const onAbort = (): void => {
128
+ reject(signal?.reason ?? new Error("aborted"));
129
+ };
130
+ if (signal?.aborted) {
131
+ onAbort();
132
+ return;
133
+ }
134
+ signal?.addEventListener("abort", onAbort, { once: true });
135
+ });
136
+ },
137
+ { timeoutMs: 25 },
138
+ );
139
+ assert.equal(detailed.result, null);
140
+ if (detailed.result !== null) throw new Error("expected failure");
141
+ assert.equal(detailed.failureReason, "timeout");
142
+ assert.equal(detailed.errorClass, "timeout");
143
+ assert.notEqual(detailed.failureReason, "http_error");
144
+ assert.equal(classifyFallbackParseFailure(detailed.failureReason), "provider_retryable");
145
+ });
146
+
147
+ test("parseWithSchemaDetailed: success shape still uses modelUsed as discriminant", { concurrency: false }, async () => {
148
+ const detailed = await parse(async () =>
149
+ jsonResponse({ choices: [{ message: { content: '{"ok":true}' } }] }),
150
+ );
151
+ assert.equal("modelUsed" in detailed, true);
152
+ assert.notEqual(detailed.result, null);
153
+ if (detailed.result === null) throw new Error("expected success");
154
+ assert.deepEqual(detailed.result, { ok: true });
155
+ assert.equal(detailed.modelUsed, "openai/test-model");
156
+ });
@@ -3,6 +3,7 @@ import path from "node:path";
3
3
  import test from "node:test";
4
4
 
5
5
  import { FallbackLlmClient, gatewayTaskChainOptions } from "./fallback-llm.js";
6
+ import { classifyAnalysisProviderError } from "./activity/timeline/analysis-provider.js";
6
7
  import { __codexCliFallbackTestHooks } from "./cli-fallback.js";
7
8
  import { initLogger, resetLogger } from "./logger.js";
8
9
  import { clearModelsJsonCache, __setModelsJsonForTest } from "./models-json.js";
@@ -11,6 +12,7 @@ import {
11
12
  __setGatewayResolverForTest,
12
13
  clearSecretCache,
13
14
  } from "./resolve-provider-secret.js";
15
+ import { CodexSubscriptionTimeoutError } from "./providers/codex-subscription.js";
14
16
 
15
17
  test("fallback llm sends native JSON schema to chat completions", { concurrency: false }, async () => {
16
18
  clearModelsJsonCache();
@@ -985,6 +987,125 @@ test("fallback llm timeout is a hard deadline when the provider never settles",
985
987
  }
986
988
  });
987
989
 
990
+ test("codex typed timeout wins past the outer deadline within the settle grace", { concurrency: false }, async () => {
991
+ clearModelsJsonCache();
992
+ clearSecretCache();
993
+
994
+ const restoreRunner = __codexCliFallbackTestHooks.setRunCodexCliForTest(
995
+ (request) => {
996
+ const { promise, reject } = Promise.withResolvers<never>();
997
+ const onAbort = (): void => {
998
+ // Real timer by design: the settle grace itself is wall-clock
999
+ // behavior under test. Lands inside the grace (T=250 -> 25ms).
1000
+ setTimeout(() => reject(new CodexSubscriptionTimeoutError(250)), 5);
1001
+ };
1002
+ if (request.options.signal?.aborted) {
1003
+ onAbort();
1004
+ } else {
1005
+ request.options.signal?.addEventListener("abort", onAbort, { once: true });
1006
+ }
1007
+ return promise;
1008
+ },
1009
+ );
1010
+
1011
+ const llm = new FallbackLlmClient({
1012
+ agents: {
1013
+ defaults: {
1014
+ model: {
1015
+ primary: "codex-cli/gpt-custom",
1016
+ },
1017
+ },
1018
+ },
1019
+ models: {
1020
+ providers: {
1021
+ "codex-cli": {
1022
+ baseUrl: "",
1023
+ api: "codex-cli",
1024
+ apiKey: "codex-test-key",
1025
+ models: [],
1026
+ },
1027
+ },
1028
+ },
1029
+ });
1030
+
1031
+ try {
1032
+ await assert.rejects(
1033
+ llm.chatCompletion(
1034
+ [{ role: "user", content: "Say OK" }],
1035
+ { temperature: 0, maxTokens: 16, timeoutMs: 250 },
1036
+ ),
1037
+ (error: unknown) => {
1038
+ assert.ok(error instanceof CodexSubscriptionTimeoutError, `expected typed timeout, got: ${error}`);
1039
+ assert.equal(error.name, "TimeoutError");
1040
+ return true;
1041
+ },
1042
+ );
1043
+ } finally {
1044
+ restoreRunner();
1045
+ clearModelsJsonCache();
1046
+ clearSecretCache();
1047
+ }
1048
+ });
1049
+
1050
+ test("outer deadline stays the hard bound when the runner settles after the grace", { concurrency: false }, async () => {
1051
+ clearModelsJsonCache();
1052
+ clearSecretCache();
1053
+
1054
+ const lateSettled = Promise.withResolvers<void>();
1055
+ const restoreRunner = __codexCliFallbackTestHooks.setRunCodexCliForTest(
1056
+ (request) => {
1057
+ const { promise, reject } = Promise.withResolvers<never>();
1058
+ const onAbort = (): void => {
1059
+ // Real timer by design: the hard bound must hold against a provider
1060
+ // that outlives the grace. Lands past it (T=250 -> 25ms grace).
1061
+ setTimeout(() => {
1062
+ reject(new CodexSubscriptionTimeoutError(250));
1063
+ lateSettled.resolve();
1064
+ }, 80);
1065
+ };
1066
+ if (request.options.signal?.aborted) {
1067
+ onAbort();
1068
+ } else {
1069
+ request.options.signal?.addEventListener("abort", onAbort, { once: true });
1070
+ }
1071
+ return promise;
1072
+ },
1073
+ );
1074
+
1075
+ const llm = new FallbackLlmClient({
1076
+ agents: {
1077
+ defaults: {
1078
+ model: {
1079
+ primary: "codex-cli/gpt-custom",
1080
+ },
1081
+ },
1082
+ },
1083
+ models: {
1084
+ providers: {
1085
+ "codex-cli": {
1086
+ baseUrl: "",
1087
+ api: "codex-cli",
1088
+ apiKey: "codex-test-key",
1089
+ models: [],
1090
+ },
1091
+ },
1092
+ },
1093
+ });
1094
+
1095
+ try {
1096
+ const started = Date.now();
1097
+ const response = await llm.chatCompletion(
1098
+ [{ role: "user", content: "Say OK" }],
1099
+ { temperature: 0, maxTokens: 16, timeoutMs: 250 },
1100
+ );
1101
+ // Await the runner's actual late rejection — observed, never unhandled.
1102
+ await lateSettled.promise;
1103
+ } finally {
1104
+ restoreRunner();
1105
+ clearModelsJsonCache();
1106
+ clearSecretCache();
1107
+ }
1108
+ });
988
1109
  test("fallback llm can call Ollama native chat and suppress thinking", { concurrency: false }, async () => {
989
1110
  clearModelsJsonCache();
990
1111
  clearSecretCache();
@@ -1944,3 +2065,60 @@ test("fallback llm retries without responsesJsonSchema when the Responses API re
1944
2065
  clearSecretCache();
1945
2066
  }
1946
2067
  });
2068
+
2069
+ test("chatCompletionDetailed preserves a 429 rate-limit failure cause (issue #2891)", { concurrency: false }, async () => {
2070
+ clearModelsJsonCache();
2071
+ clearSecretCache();
2072
+ const llm = new FallbackLlmClient({
2073
+ agents: { defaults: { model: { primary: "openai/test-model" } } },
2074
+ models: { providers: { openai: { baseUrl: "https://openai.example/v1", api: "openai-completions", apiKey: "key", models: [] } } },
2075
+ });
2076
+ const originalFetch = globalThis.fetch;
2077
+ globalThis.fetch = (async () =>
2078
+ new Response(JSON.stringify({ error: { message: "rate limit exceeded" } }), { status: 429 })) as typeof fetch;
2079
+ try {
2080
+ const failureDiag: { lastError?: unknown } = {};
2081
+ assert.equal(
2082
+ await llm.chatCompletion([{ role: "user", content: "test" }], { failureDiag }),
2083
+ null,
2084
+ );
2085
+ const lastError = failureDiag.lastError;
2086
+ assert.ok(lastError instanceof Error, "expected the terminal provider error to survive the chain");
2087
+ assert.equal("status" in lastError ? lastError.status : undefined, 429);
2088
+ assert.equal(classifyAnalysisProviderError(lastError), "rate_limited");
2089
+ } finally {
2090
+ globalThis.fetch = originalFetch;
2091
+ clearModelsJsonCache();
2092
+ clearSecretCache();
2093
+ }
2094
+ });
2095
+
2096
+ test("timeout records TimeoutError on failureDiag (issue #2891)", { concurrency: false }, async () => {
2097
+ clearModelsJsonCache();
2098
+ clearSecretCache();
2099
+ const restoreRunner = __codexCliFallbackTestHooks.setRunCodexCliForTest(
2100
+ async (request) =>
2101
+ await new Promise<never>(() => {
2102
+ request.options.signal?.addEventListener("abort", () => undefined, { once: true });
2103
+ }),
2104
+ );
2105
+ const llm = new FallbackLlmClient({
2106
+ agents: { defaults: { model: { primary: "codex-cli/gpt-custom" } } },
2107
+ models: { providers: { "codex-cli": { baseUrl: "", api: "codex-cli", apiKey: "codex-test-key", models: [] } } },
2108
+ });
2109
+ try {
2110
+ const failureDiag: { lastError?: unknown } = {};
2111
+ assert.equal(
2112
+ await llm.chatCompletion([{ role: "user", content: "test" }], { timeoutMs: 30, failureDiag }),
2113
+ null,
2114
+ );
2115
+ const lastError = failureDiag.lastError;
2116
+ assert.ok(lastError instanceof Error, "expected the outer timeout to survive as lastError");
2117
+ assert.equal(lastError.name, "TimeoutError");
2118
+ assert.equal(classifyAnalysisProviderError(lastError), "timeout");
2119
+ } finally {
2120
+ restoreRunner();
2121
+ clearModelsJsonCache();
2122
+ clearSecretCache();
2123
+ }
2124
+ });