@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.
- package/dist/access-admin-ops-surface.d.ts +16 -14
- package/dist/access-admin-ops-surface.js +75 -74
- package/dist/access-audit.js +2 -2
- package/dist/access-authorization-probe.d.ts +16 -14
- package/dist/access-authorization-probe.js +76 -75
- package/dist/access-boundary.d.ts +16 -14
- package/dist/access-boundary.js +75 -74
- package/dist/access-cli.js +173 -170
- package/dist/access-cli.js.map +1 -1
- package/dist/access-coding-context-resolution.d.ts +1 -1
- package/dist/access-extraction-force-flush.d.ts +16 -14
- package/dist/access-extraction-force-flush.js +75 -74
- package/dist/access-health-types.d.ts +1 -1
- package/dist/access-http-briefing.d.ts +16 -14
- package/dist/access-http-briefing.js +76 -75
- package/dist/access-http-lcm-compaction.d.ts +16 -14
- package/dist/access-http-lifecycle-flush.d.ts +16 -14
- package/dist/access-http-offline-stream.d.ts +16 -14
- package/dist/access-http-query.d.ts +2 -2
- package/dist/access-http-query.js +77 -76
- package/dist/access-http.d.ts +17 -15
- package/dist/access-http.js +95 -92
- package/dist/access-identity-continuity-surface.d.ts +13 -12
- package/dist/access-identity-continuity-surface.js +75 -74
- package/dist/access-lcm-surface.d.ts +16 -14
- package/dist/access-lcm-surface.js +75 -74
- package/dist/access-mcp-shared-context-tools.d.ts +156 -0
- package/dist/access-mcp-shared-context-tools.js +8 -0
- package/dist/access-mcp.d.ts +16 -14
- package/dist/access-mcp.js +86 -83
- package/dist/access-memory-search-fanout.d.ts +2 -2
- package/dist/{access-namespace-preflight-DY4z6L5X.d.ts → access-namespace-preflight-DWsMc9Dh.d.ts} +1 -1
- package/dist/access-namespace-preflight.d.ts +3 -3
- package/dist/access-namespace-preflight.js +75 -74
- package/dist/access-observe-transcript.d.ts +13 -12
- package/dist/access-observe-write-category.d.ts +1 -1
- package/dist/access-observe-write-category.js +4 -4
- package/dist/access-observe-write-surface.d.ts +16 -14
- package/dist/access-observe-write-surface.js +75 -74
- package/dist/access-offline-manifest.d.ts +37 -13
- package/dist/access-offline-manifest.js +15 -11
- package/dist/access-operations-batch.js +79 -77
- package/dist/access-operations.d.ts +16 -14
- package/dist/access-operations.js +84 -82
- package/dist/access-recall-concurrency.d.ts +16 -14
- package/dist/access-recall-concurrency.js +75 -74
- package/dist/access-recall-response.d.ts +16 -14
- package/dist/access-recall-response.js +75 -74
- package/dist/access-recall-surface.d.ts +16 -14
- package/dist/access-recall-surface.js +75 -74
- package/dist/access-schema.d.ts +5 -3
- package/dist/access-schema.js +3 -3
- package/dist/{access-service-MY4bsr_Q.d.ts → access-service-Cisy5YDq.d.ts} +14 -9
- package/dist/access-service-helpers.d.ts +16 -14
- package/dist/access-service.d.ts +16 -14
- package/dist/access-service.js +75 -74
- package/dist/access-surface-catalog.d.ts +16 -14
- package/dist/access-surface-catalog.js +77 -76
- package/dist/access-surface-catalog.js.map +1 -1
- package/dist/access-wearables-meetings-surface.d.ts +6 -5
- package/dist/action-confidence.d.ts +1 -1
- package/dist/active-memory-bridge.d.ts +1 -1
- package/dist/active-memory-bridge.js +3 -3
- package/dist/active-recall.d.ts +1 -1
- package/dist/active-recall.js +10 -9
- package/dist/active-recall.js.map +1 -1
- package/dist/activity/digest.d.ts +1 -1
- package/dist/ambient-provenance.d.ts +1 -1
- package/dist/artifact-search.d.ts +1 -1
- package/dist/{auto-sync-RP4C6ZPF.js → auto-sync-7PGUFY7U.js} +7 -7
- package/dist/background-generation-config.d.ts +1 -1
- package/dist/background-generation-config.js +3 -1
- package/dist/background-generation.d.ts +1 -1
- package/dist/behavior-learner.d.ts +1 -1
- package/dist/behavior-signals.d.ts +1 -1
- package/dist/bootstrap.d.ts +13 -12
- package/dist/briefing-window.d.ts +2 -2
- package/dist/briefing.d.ts +2 -2
- package/dist/briefing.js +23 -23
- package/dist/buffer-surprise-report.d.ts +1 -1
- package/dist/buffer-turn-helpers.d.ts +1 -1
- package/dist/buffer.d.ts +2 -2
- package/dist/buffer.js +7 -7
- package/dist/bulk-import/index.d.ts +3 -3
- package/dist/calibration.d.ts +3 -2
- package/dist/calibration.js +2 -2
- package/dist/capabilities.d.ts +1 -1
- package/dist/{capsule-crypto-7FJQINUR.js → capsule-crypto-YO5QJ6L3.js} +2 -2
- package/dist/{capsule-merge-IPG4IOFP.js → capsule-merge-3MNURAQ3.js} +2 -2
- package/dist/{catalog-CW87xGx8.d.ts → catalog-wcX1QhtQ.d.ts} +1 -1
- package/dist/causal-behavior.d.ts +1 -1
- package/dist/causal-consolidation.d.ts +1 -1
- package/dist/causal-consolidation.js +29 -28
- package/dist/causal-consolidation.js.map +1 -1
- package/dist/causal-trajectory-graph.d.ts +1 -1
- package/dist/{chunk-YFTNZMGR.js → chunk-27NO2KVB.js} +31 -8
- package/dist/chunk-27NO2KVB.js.map +1 -0
- package/dist/{chunk-M6RORUO5.js → chunk-2EYZ32LH.js} +24 -2
- package/dist/{chunk-M6RORUO5.js.map → chunk-2EYZ32LH.js.map} +1 -1
- package/dist/{chunk-XH3HGI2N.js → chunk-2HQPE2NM.js} +2 -2
- package/dist/{chunk-3EKVN2OP.js → chunk-2ZG2LLZT.js} +2 -2
- package/dist/{chunk-6EHM2AV7.js → chunk-3BLHPQHT.js} +5 -5
- package/dist/{chunk-YKREX63Z.js → chunk-3D75XIYO.js} +5 -3
- package/dist/chunk-3D75XIYO.js.map +1 -0
- package/dist/{chunk-J272ODKJ.js → chunk-42DJ235G.js} +2 -2
- package/dist/{chunk-F4EHXVP7.js → chunk-46RII65S.js} +2 -2
- package/dist/{chunk-YUW66UAH.js → chunk-4AX5OYKC.js} +2 -2
- package/dist/{chunk-AECJY3GJ.js → chunk-4IGOLIWM.js} +2 -2
- package/dist/{chunk-2ZTDRNCS.js → chunk-54QPOE45.js} +2 -2
- package/dist/{chunk-O4M4BDIJ.js → chunk-563X6JJX.js} +2 -2
- package/dist/{chunk-IL6ODG6M.js → chunk-5EQT62HH.js} +2 -2
- package/dist/{chunk-JKKII6GX.js → chunk-6MQMYXSQ.js} +2 -2
- package/dist/{chunk-TVVEYCNW.js → chunk-7K5Q6COX.js} +4 -4
- package/dist/{chunk-BV4ZKIZH.js → chunk-7ZLC4DTZ.js} +5 -4
- package/dist/{chunk-WBM2MVBK.js → chunk-A4OIJYCV.js} +2 -2
- package/dist/{chunk-RLJHJQUY.js → chunk-AFJHNHAM.js} +8 -8
- package/dist/{chunk-6YAIN5XJ.js → chunk-AIVRD66I.js} +44 -6
- package/dist/chunk-AIVRD66I.js.map +1 -0
- package/dist/{chunk-OEDW4ER7.js → chunk-AJBWVDRV.js} +2 -1
- package/dist/chunk-AJBWVDRV.js.map +1 -0
- package/dist/{chunk-4RZLTZVM.js → chunk-AKABVXFS.js} +2 -2
- package/dist/{chunk-M6HBPLBA.js → chunk-AUSRUOMQ.js} +2 -2
- package/dist/{chunk-QHT7MOUF.js → chunk-BTPCP535.js} +25 -14
- package/dist/chunk-BTPCP535.js.map +1 -0
- package/dist/{chunk-2NLLXCJG.js → chunk-BXLOS5AJ.js} +2 -2
- package/dist/{chunk-Q7CLGFA7.js → chunk-C3G6MW4W.js} +3 -3
- package/dist/{chunk-O76F5QPP.js → chunk-D6PY63OM.js} +2 -2
- package/dist/{chunk-BD7JTBYP.js → chunk-D7MAYFQP.js} +2 -2
- package/dist/{chunk-LMLGBG6H.js → chunk-DBB5JPSL.js} +2 -2
- package/dist/{chunk-TSP5WH72.js → chunk-DIXZQTGY.js} +2 -2
- package/dist/{chunk-P4ZAEYKG.js → chunk-DM5CU5J7.js} +7 -4
- package/dist/chunk-DM5CU5J7.js.map +1 -0
- package/dist/{chunk-X7Y7WX73.js → chunk-DQEMWVMT.js} +1 -1
- package/dist/{chunk-UHRZ324M.js → chunk-E3I3NDUP.js} +4 -4
- package/dist/{chunk-AENM6GKU.js → chunk-E4LMQTST.js} +2 -2
- package/dist/{chunk-YDVAM7S4.js → chunk-EH3HNCAM.js} +13 -8
- package/dist/chunk-EH3HNCAM.js.map +1 -0
- package/dist/{chunk-MUTVRKKY.js → chunk-EMSYMYXO.js} +14 -14
- package/dist/{chunk-YNDLCWXS.js → chunk-EZ25VE3G.js} +4 -4
- package/dist/{chunk-FXHOZGSE.js → chunk-F5H6YG5P.js} +2 -2
- package/dist/{chunk-TRLOFIQC.js → chunk-FGFC2EFR.js} +14 -13
- package/dist/chunk-FGFC2EFR.js.map +1 -0
- package/dist/{chunk-TNSCIPBQ.js → chunk-G6NQ3L4T.js} +2 -2
- package/dist/{chunk-ZMWSYUUL.js → chunk-GCBIXUPT.js} +2 -2
- package/dist/{chunk-EYKIDK33.js → chunk-GMH5QPUU.js} +22 -22
- package/dist/chunk-GMH5QPUU.js.map +1 -0
- package/dist/{chunk-4BCHFSC7.js → chunk-GWNSKQDA.js} +3 -3
- package/dist/{chunk-JDX2OA4R.js → chunk-HNHIHXSD.js} +2 -2
- package/dist/{chunk-GG5FHZJJ.js → chunk-I33QYUAF.js} +6 -6
- package/dist/{chunk-LPYYY4AP.js → chunk-I46BYY7U.js} +653 -328
- package/dist/chunk-I46BYY7U.js.map +1 -0
- package/dist/{chunk-CZTPU65V.js → chunk-ICN37XHG.js} +74 -27
- package/dist/chunk-ICN37XHG.js.map +1 -0
- package/dist/chunk-IFBSZGW3.js +42 -0
- package/dist/chunk-IFBSZGW3.js.map +1 -0
- package/dist/{chunk-AAZEKXUP.js → chunk-IYIPXAIJ.js} +2 -2
- package/dist/{chunk-ACY4ZPF7.js → chunk-J2MGTGKC.js} +10 -5
- package/dist/chunk-J2MGTGKC.js.map +1 -0
- package/dist/chunk-JATHBCAV.js +94 -0
- package/dist/chunk-JATHBCAV.js.map +1 -0
- package/dist/{chunk-5U7K4W6K.js → chunk-JDOBQPJY.js} +3 -3
- package/dist/{chunk-TG3FAM2S.js → chunk-JL4TQYM5.js} +48 -1
- package/dist/{chunk-TG3FAM2S.js.map → chunk-JL4TQYM5.js.map} +1 -1
- package/dist/{chunk-UZZ7SQT3.js → chunk-JMWUPUE6.js} +2 -2
- package/dist/{chunk-ENBPQEVU.js → chunk-JSD7Q7LD.js} +2 -2
- package/dist/{chunk-QTQ6XKGT.js → chunk-K5D2XVNN.js} +4 -4
- package/dist/chunk-K5D2XVNN.js.map +1 -0
- package/dist/{chunk-3CBI2ZSA.js → chunk-KG2OOAFF.js} +20 -12
- package/dist/chunk-KG2OOAFF.js.map +1 -0
- package/dist/{chunk-Q432REND.js → chunk-KJLLPG26.js} +2 -2
- package/dist/{chunk-JTQR6L2N.js → chunk-KLUC2GSG.js} +6 -6
- package/dist/{chunk-OB3XMWX5.js → chunk-KVO2BTA4.js} +2 -2
- package/dist/{chunk-PCOVEDPK.js → chunk-KZJM7R4F.js} +3 -3
- package/dist/{chunk-X4TD4O2F.js → chunk-LE2KZ72G.js} +3 -3
- package/dist/{chunk-HIP6DKJJ.js → chunk-LQVXSRAJ.js} +2 -2
- package/dist/{chunk-A7GQBJP5.js → chunk-LVFI5LG7.js} +7 -7
- package/dist/{chunk-FWWWUPOE.js → chunk-MCMS4VUK.js} +25 -15
- package/dist/chunk-MCMS4VUK.js.map +1 -0
- package/dist/{chunk-5SPCMAUC.js → chunk-N6XTC56E.js} +13 -81
- package/dist/chunk-N6XTC56E.js.map +1 -0
- package/dist/{chunk-VBSNUH4J.js → chunk-ND7MAIJC.js} +2 -2
- package/dist/{chunk-TNZNSMVJ.js → chunk-NYWCFC3K.js} +301 -348
- package/dist/chunk-NYWCFC3K.js.map +1 -0
- package/dist/{chunk-54NX5EG4.js → chunk-P66QH6R6.js} +2 -2
- package/dist/{chunk-62D2PAAM.js → chunk-PAAJWQH5.js} +4 -4
- package/dist/{chunk-TA4C3XB7.js → chunk-PFKIOYJH.js} +2 -2
- package/dist/{chunk-WIWLX65T.js → chunk-PGGPRF6J.js} +2 -2
- package/dist/{chunk-V6EGNVUT.js → chunk-PIWFNPQT.js} +4 -4
- package/dist/{chunk-BLDBT6HZ.js → chunk-PJRKLB4Z.js} +18 -2
- package/dist/chunk-PJRKLB4Z.js.map +1 -0
- package/dist/{chunk-4JVQRFZD.js → chunk-PLJ2MQFT.js} +11 -11
- package/dist/{chunk-4RX5O34R.js → chunk-PQ42DJNG.js} +2 -2
- package/dist/{chunk-37CAEC7E.js → chunk-PWPIERBM.js} +4 -4
- package/dist/{chunk-ZEGL7YCC.js → chunk-Q62GA5U2.js} +2 -2
- package/dist/{chunk-CC37E3QM.js → chunk-QKCXRS5A.js} +16 -1
- package/dist/chunk-QKCXRS5A.js.map +1 -0
- package/dist/{chunk-WKDFJXW5.js → chunk-QM2SPLKQ.js} +1 -1
- package/dist/chunk-QM2SPLKQ.js.map +1 -0
- package/dist/{chunk-GAS7KYC7.js → chunk-RQQO3ORQ.js} +2 -2
- package/dist/{chunk-UZEHHXYC.js → chunk-S4MJTIPG.js} +85 -81
- package/dist/chunk-S4MJTIPG.js.map +1 -0
- package/dist/chunk-SK7D34OL.js +68 -0
- package/dist/chunk-SK7D34OL.js.map +1 -0
- package/dist/{chunk-LQNRVPTV.js → chunk-TRTLWUDD.js} +164 -130
- package/dist/chunk-TRTLWUDD.js.map +1 -0
- package/dist/{chunk-JXN77SGO.js → chunk-U2VDCFXW.js} +1 -1
- package/dist/chunk-U2VDCFXW.js.map +1 -0
- package/dist/{chunk-CWTCMZGE.js → chunk-UHSOPTNB.js} +132 -6
- package/dist/chunk-UHSOPTNB.js.map +1 -0
- package/dist/{chunk-3NPNBVFR.js → chunk-UZGHKD3T.js} +2 -2
- package/dist/{chunk-IQEJIOEU.js → chunk-V2EXYQEQ.js} +20 -12
- package/dist/chunk-V2EXYQEQ.js.map +1 -0
- package/dist/{chunk-OPBFP4TF.js → chunk-V2TOGJPM.js} +46 -13
- package/dist/chunk-V2TOGJPM.js.map +1 -0
- package/dist/{chunk-VJIE4D2I.js → chunk-V62YYBBY.js} +4 -4
- package/dist/{chunk-KQAFEZQX.js → chunk-VDX2J7OX.js} +2 -2
- package/dist/{chunk-6H2G7RFT.js → chunk-VNQRRUNS.js} +11 -10
- package/dist/chunk-VNQRRUNS.js.map +1 -0
- package/dist/{chunk-6AGWBKQU.js → chunk-VSN2DMQK.js} +2 -2
- package/dist/{chunk-ZHXSOMYH.js → chunk-VVX5PZFS.js} +2 -2
- package/dist/{chunk-GI4ZBWPQ.js → chunk-W7UV2ZCA.js} +3 -3
- package/dist/{chunk-GMIQV6DD.js → chunk-WBQ4ONQJ.js} +2 -2
- package/dist/{chunk-FNHLI2RE.js → chunk-WFMQN7JE.js} +3 -3
- package/dist/{chunk-MVAQ2WM3.js → chunk-WGZHSQDV.js} +9 -5
- package/dist/chunk-WGZHSQDV.js.map +1 -0
- package/dist/{chunk-IYKZJVL5.js → chunk-WN2OXGGH.js} +1 -1
- package/dist/chunk-WN2OXGGH.js.map +1 -0
- package/dist/{chunk-ZBW7A667.js → chunk-WPGA4RYI.js} +2 -2
- package/dist/{chunk-YQNNHLCG.js → chunk-WPGR3RW4.js} +2 -2
- package/dist/{chunk-SV4Z2S67.js → chunk-WUUGE7QC.js} +54 -21
- package/dist/chunk-WUUGE7QC.js.map +1 -0
- package/dist/{chunk-NXGSONWM.js → chunk-WZIO3TW6.js} +2 -2
- package/dist/{chunk-ZZUVBZL2.js → chunk-X2QPKLPL.js} +2 -2
- package/dist/{chunk-5HYUUFMQ.js → chunk-XCPNH2MG.js} +259 -10
- package/dist/chunk-XCPNH2MG.js.map +1 -0
- package/dist/{chunk-VSL63CFJ.js → chunk-XRS65T4O.js} +9 -9
- package/dist/{chunk-5N4MZLEH.js → chunk-YFXAWGMR.js} +2 -2
- package/dist/{chunk-KQW3YGEN.js → chunk-YR5QT4SR.js} +32 -9
- package/dist/chunk-YR5QT4SR.js.map +1 -0
- package/dist/{chunk-CARRTDKC.js → chunk-Z22M4JCY.js} +4 -3
- package/dist/chunk-Z22M4JCY.js.map +1 -0
- package/dist/{chunk-D545Z7UH.js → chunk-Z535ADTC.js} +3 -3
- package/dist/{chunk-B36GUU6T.js → chunk-Z7NBT6AK.js} +38 -5
- package/dist/chunk-Z7NBT6AK.js.map +1 -0
- package/dist/{chunk-5YCNDC3C.js → chunk-ZX6NNFSY.js} +3 -3
- package/dist/{chunk-3N3PBBEH.js → chunk-ZYSOT6HD.js} +2 -2
- package/dist/{chunk-MCRVQ5YQ.js → chunk-ZZEIL3MI.js} +2 -2
- package/dist/{cli-DGq0MNpO.d.ts → cli-CUlMlS2N.d.ts} +5 -5
- package/dist/cli.d.ts +18 -16
- package/dist/cli.js +129 -126
- package/dist/coding/export-okf-codegraph.d.ts +1 -1
- package/dist/coding/export-okf-codegraph.js +22 -22
- package/dist/coding/pre-action-gate.d.ts +1 -1
- package/dist/compounding/engine.d.ts +2 -2
- package/dist/compounding/engine.js +25 -25
- package/dist/compounding/preference-consolidator.d.ts +1 -1
- package/dist/compression-optimizer.d.ts +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.js +10 -9
- package/dist/connectors/codex-materialize-runner.d.ts +1 -1
- package/dist/connectors/codex-materialize-runner.js +25 -25
- package/dist/connectors/codex-materialize.d.ts +1 -1
- package/dist/connectors/codex-materialize.js +2 -2
- package/dist/connectors/index.d.ts +1 -1
- package/dist/connectors/index.js +25 -25
- package/dist/consolidation-provenance-check.d.ts +2 -2
- package/dist/consolidation-undo.d.ts +2 -2
- package/dist/contradiction/index.d.ts +6 -5
- package/dist/contradiction/index.js +4 -4
- package/dist/{contradiction-scan-BSGKZHYJ.js → contradiction-scan-GVD4JJ7B.js} +4 -4
- package/dist/converge-config.d.ts +1 -1
- package/dist/convergence-refresh.d.ts +2 -2
- package/dist/convergence-refresh.js +26 -26
- package/dist/conversation-index/backend.d.ts +1 -1
- package/dist/conversation-index/chunker.d.ts +1 -1
- package/dist/conversation-index/faiss-adapter.d.ts +1 -1
- package/dist/conversation-index/indexer.d.ts +1 -1
- package/dist/conversation-index/search.d.ts +1 -1
- package/dist/corpus-watermark.d.ts +1 -1
- package/dist/corpus-watermark.js +25 -25
- package/dist/cross-lingual-recall.d.ts +1 -1
- package/dist/dashboard-runtime.js +2 -2
- package/dist/day-summary.d.ts +1 -1
- package/dist/deep-recall-config.d.ts +12 -1
- package/dist/deep-recall-config.js +5 -3
- package/dist/deep-recall-http-glue.d.ts +19 -15
- package/dist/deep-recall-http-glue.js +7 -4
- package/dist/deep-recall-mcp-tools.d.ts +16 -14
- package/dist/deep-recall-policy-llm.d.ts +14 -3
- package/dist/deep-recall-policy-llm.js +3 -3
- package/dist/deep-recall-seeds.d.ts +4 -1
- package/dist/deep-recall-seeds.js +1 -1
- package/dist/deep-recall.d.ts +12 -1
- package/dist/deep-recall.js +3 -2
- package/dist/delinearize.d.ts +1 -1
- package/dist/dependency-propagation-config.d.ts +1 -1
- package/dist/{dependency-propagation-delivery-Cq1ekOwV.d.ts → dependency-propagation-delivery-BDDjImQn.d.ts} +1 -1
- package/dist/direct-answer-wiring.d.ts +1 -1
- package/dist/direct-answer.d.ts +1 -1
- package/dist/embedding-fallback.d.ts +1 -1
- package/dist/enrichment/index.d.ts +1 -1
- package/dist/entity-origin-fields.d.ts +1 -1
- package/dist/entity-retrieval.d.ts +2 -2
- package/dist/entity-retrieval.js +24 -24
- package/dist/entity-schema.d.ts +1 -1
- package/dist/episodic-context.d.ts +1 -1
- package/dist/eval-trajectory-contracts.d.ts +1 -1
- package/dist/eval-trajectory-store.d.ts +1 -1
- package/dist/eval-trajectory.d.ts +1 -1
- package/dist/explicit-capture.d.ts +13 -12
- package/dist/explicit-capture.js +3 -3
- package/dist/external-wiki-access.d.ts +16 -14
- package/dist/external-wiki-access.js +76 -75
- package/dist/external-wiki-collection-registration.d.ts +1 -1
- package/dist/external-wiki-collection.d.ts +1 -1
- package/dist/external-wiki-mcp-tools.d.ts +16 -14
- package/dist/extraction-error-classification.d.ts +14 -3
- package/dist/extraction-error-classification.js +5 -3
- package/dist/extraction-faithfulness.d.ts +4 -3
- package/dist/extraction-faithfulness.js +3 -3
- package/dist/extraction-judge-telemetry.d.ts +4 -3
- package/dist/extraction-judge-training.d.ts +4 -3
- package/dist/extraction-judge.d.ts +4 -3
- package/dist/extraction-judge.js +3 -3
- package/dist/extraction-liveness.d.ts +1 -1
- package/dist/extraction-normalization.d.ts +1 -1
- package/dist/extraction-prompt.d.ts +1 -1
- package/dist/extraction-source-grounding-rules.d.ts +1 -1
- package/dist/extraction-source-grounding.d.ts +1 -1
- package/dist/extraction-span-config.d.ts +1 -1
- package/dist/extraction-span-materialize.d.ts +1 -1
- package/dist/extraction.d.ts +4 -4
- package/dist/extraction.js +40 -38
- package/dist/fallback-llm-codex-subscription.d.ts +65 -10
- package/dist/fallback-llm-codex-subscription.js +19 -1
- package/dist/fallback-llm.d.ts +25 -28
- package/dist/fallback-llm.js +4 -3
- package/dist/{first-start-migration-ZWMV5CX4.js → first-start-migration-L3UFX5CU.js} +4 -4
- package/dist/{generic-recall-paths-BcySh_f9.d.ts → generic-recall-paths-CpDzNO_I.d.ts} +1 -1
- package/dist/graph-append-error.d.ts +1 -1
- package/dist/graph-dashboard-diff.d.ts +1 -1
- package/dist/graph-dashboard-key.d.ts +1 -1
- package/dist/graph-dashboard-parser.d.ts +1 -1
- package/dist/graph-edge-reinforcement.d.ts +1 -1
- package/dist/graph-jsonl.d.ts +1 -1
- package/dist/graph-path-reconstruction.d.ts +1 -1
- package/dist/graph-path-scoring.d.ts +1 -1
- package/dist/graph-snapshot.d.ts +1 -1
- package/dist/graph.d.ts +1 -1
- package/dist/harmonic-retrieval.js +3 -3
- package/dist/importance.d.ts +1 -1
- package/dist/importers/index.d.ts +1 -1
- package/dist/importers/test-utils.d.ts +1 -1
- package/dist/in-flight-reads.d.ts +1 -1
- package/dist/{index-DWOb4wz9.d.ts → index-CtmmCJoo.d.ts} +3 -3
- package/dist/index.d.ts +80 -40
- package/dist/index.js +316 -296
- package/dist/intent.d.ts +1 -1
- package/dist/lcm/engine.d.ts +1 -1
- package/dist/lcm/engine.js +3 -3
- package/dist/lcm/index.d.ts +1 -1
- package/dist/lcm/index.js +11 -11
- package/dist/lcm/tools.d.ts +1 -1
- package/dist/lifecycle.d.ts +1 -1
- package/dist/live-connectors-runner.d.ts +1 -1
- package/dist/local-llm-DpXIvm6F.d.ts +247 -0
- package/dist/local-llm-config.d.ts +4 -1
- package/dist/local-llm-config.js +4 -2
- package/dist/local-llm-helpers.d.ts +18 -69
- package/dist/local-llm-helpers.js +1 -1
- package/dist/local-llm.d.ts +3 -170
- package/dist/local-llm.js +2 -2
- package/dist/local-model-endpoint.d.ts +1 -1
- package/dist/location/index.d.ts +3 -3
- package/dist/location/index.js +25 -25
- package/dist/maintenance/memory-governance.d.ts +1 -1
- package/dist/maintenance/memory-governance.js +24 -24
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +2 -2
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +23 -23
- package/dist/maintenance/rebuild-memory-projection.d.ts +2 -2
- package/dist/maintenance/rebuild-memory-projection.js +25 -25
- package/dist/{maintenance-CW9wCzMP.d.ts → maintenance-CNgoLsoM.d.ts} +13 -6
- package/dist/mcp-memory-inspector-app.d.ts +16 -14
- package/dist/memory-action-policy.d.ts +1 -1
- package/dist/memory-cache.d.ts +1 -1
- package/dist/memory-controller.d.ts +1 -1
- package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
- package/dist/memory-projection-store.d.ts +1 -1
- package/dist/memory-provenance.d.ts +1 -1
- package/dist/memory-snapshot.d.ts +1 -1
- package/dist/memory-subject-cli.d.ts +16 -14
- package/dist/memory-subject.d.ts +16 -14
- package/dist/memory-worth-outcomes.d.ts +2 -2
- package/dist/models-json.d.ts +1 -1
- package/dist/namespaces/migrate.d.ts +3 -3
- package/dist/namespaces/migrate.js +24 -24
- package/dist/namespaces/principal.d.ts +1 -1
- package/dist/namespaces/search.d.ts +12 -1
- package/dist/namespaces/search.js +9 -9
- package/dist/namespaces/storage.d.ts +3 -3
- package/dist/namespaces/storage.js +23 -23
- package/dist/native-knowledge.d.ts +1 -1
- package/dist/offline-sync-impression-drain.d.ts +1 -1
- package/dist/operator-doctor-corpus.d.ts +1 -1
- package/dist/operator-doctor-corpus.js +26 -26
- package/dist/operator-doctor-replica.d.ts +1 -1
- package/dist/operator-toolkit.d.ts +3 -3
- package/dist/operator-toolkit.js +45 -44
- package/dist/orchestration/compression-guideline-coordinator.d.ts +2 -2
- package/dist/orchestration/maintenance.d.ts +4 -4
- package/dist/orchestration/maintenance.js +36 -36
- package/dist/{orchestrator-ComHLm49.d.ts → orchestrator-DT7ybIFz.d.ts} +32 -11
- package/dist/orchestrator.d.ts +13 -12
- package/dist/orchestrator.js +176 -171
- package/dist/patterns-cli.d.ts +1 -1
- package/dist/{pipeline-CiYcqqhl.d.ts → pipeline-CgBEmHcz.d.ts} +1 -1
- package/dist/policy-runtime.d.ts +1 -1
- package/dist/proactive-contention.d.ts +2 -2
- package/dist/provenance.d.ts +1 -1
- package/dist/{public-http-CuK4_Cb1.d.ts → public-http-C8P8fyiO.d.ts} +1 -1
- package/dist/{qmd-qXD4vatU.d.ts → qmd-BkY8KpCh.d.ts} +2 -2
- package/dist/qmd-preflight.d.ts +2 -2
- package/dist/qmd-recall-cache.d.ts +1 -1
- package/dist/qmd.d.ts +2 -2
- package/dist/qmd.js +2 -2
- package/dist/recall-concurrency-config.d.ts +1 -1
- package/dist/recall-disclosure-escalation.d.ts +1 -1
- package/dist/recall-explain-renderer.d.ts +1 -1
- package/dist/recall-explain-renderer.js +3 -3
- package/dist/recall-memory-map.d.ts +1 -1
- package/dist/recall-navigate-access.d.ts +1 -1
- package/dist/recall-navigate-access.js +2 -2
- package/dist/recall-navigate-disclosure.d.ts +1 -1
- package/dist/recall-navigate-disclosure.js +1 -1
- package/dist/recall-navigate.d.ts +1 -1
- package/dist/recall-navigate.js +2 -2
- package/dist/recall-planner-llm.d.ts +3 -2
- package/dist/recall-planner-llm.js +4 -3
- package/dist/recall-planner-llm.js.map +1 -1
- package/dist/recall-state-view-admission.d.ts +13 -3
- package/dist/recall-state-view-admission.js +9 -9
- package/dist/recall-state-view-anchors.d.ts +1 -1
- package/dist/recall-state-view-anchors.js +2 -2
- package/dist/recall-state-view-inject.js +2 -2
- package/dist/recall-state-view-render.js +2 -2
- package/dist/recall-state-view-widen.js +2 -2
- package/dist/recall-state-view-wire.js +3 -3
- package/dist/recall-state-view.d.ts +10 -1
- package/dist/recall-state-view.js +5 -3
- package/dist/recall-state.d.ts +1 -1
- package/dist/recall-tag-filter.d.ts +1 -1
- package/dist/recall-timings.d.ts +1 -1
- package/dist/recall-xray-cli.d.ts +1 -1
- package/dist/recall-xray-cli.js +4 -4
- package/dist/recall-xray-renderer.d.ts +1 -1
- package/dist/recall-xray-renderer.js +3 -3
- package/dist/recall-xray.d.ts +1 -1
- package/dist/recall-xray.js +2 -2
- package/dist/reconcile/cursor.d.ts +1 -1
- package/dist/reconcile/cursor.js +2 -2
- package/dist/reconcile/manifest.d.ts +1 -1
- package/dist/reconcile/manifest.js +4 -4
- package/dist/reconcile/plan.d.ts +1 -1
- package/dist/reconcile/plan.js +2 -2
- package/dist/replay/normalizers/chatgpt.d.ts +1 -1
- package/dist/replay/normalizers/claude.d.ts +1 -1
- package/dist/replay/normalizers/openclaw.d.ts +1 -1
- package/dist/replay/normalizers/shared.d.ts +1 -1
- package/dist/replay/runner.d.ts +1 -1
- package/dist/replay/types.d.ts +1 -1
- package/dist/replica-divergence.d.ts +1 -1
- package/dist/replica-peers-config.d.ts +1 -1
- package/dist/{resolution-4GG3QZRJ.js → resolution-LXFQQ4AE.js} +5 -5
- package/dist/resolution-LXFQQ4AE.js.map +1 -0
- package/dist/resolve-auth-token.d.ts +1 -1
- package/dist/resume-bundles.js +12 -11
- package/dist/retrieval-agents.d.ts +2 -2
- package/dist/retrieval-tiers.d.ts +1 -1
- package/dist/routing/engine.d.ts +1 -1
- package/dist/routing/store.d.ts +1 -1
- package/dist/salvage-envelope.d.ts +1 -1
- package/dist/{scope-profiles-BT9rqC3w.d.ts → scope-profiles-BBPjZ9jb.d.ts} +1 -1
- package/dist/search/embed-helper.d.ts +1 -1
- package/dist/search/factory.d.ts +1 -1
- package/dist/search/factory.js +8 -8
- package/dist/search/index.d.ts +1 -1
- package/dist/search/index.js +12 -12
- package/dist/search/lancedb-backend.d.ts +1 -1
- package/dist/search/lancedb-backend.js +2 -2
- package/dist/search/meilisearch-backend.d.ts +1 -1
- package/dist/search/meilisearch-backend.js +2 -2
- package/dist/search/noop-backend.d.ts +1 -1
- package/dist/search/orama-backend.d.ts +1 -1
- package/dist/search/orama-backend.js +2 -2
- package/dist/search/port.d.ts +2 -2
- package/dist/search/port.js +1 -1
- package/dist/search/remote-backend.d.ts +1 -1
- package/dist/search/remote-backend.js +2 -2
- package/dist/{semantic-consolidation-CmZi7thY.d.ts → semantic-consolidation-BPFFVO84.d.ts} +1 -1
- package/dist/semantic-consolidation.d.ts +2 -2
- package/dist/semantic-consolidation.js +26 -26
- package/dist/semantic-rule-promotion.js +23 -23
- package/dist/semantic-rule-verifier.d.ts +1 -1
- package/dist/semantic-rule-verifier.js +23 -23
- package/dist/{service-CLkA7AQB.d.ts → service-jKcr6Jvr.d.ts} +2 -2
- package/dist/session-observer-bands.d.ts +1 -1
- package/dist/session-observer-state.d.ts +1 -1
- package/dist/shared-context/manager.d.ts +1 -1
- package/dist/shared-context/manager.js +2 -2
- package/dist/shared-context/write-output-controls.d.ts +34 -0
- package/dist/shared-context/write-output-controls.js +10 -0
- package/dist/shared-context/write-output-controls.js.map +1 -0
- package/dist/signal.d.ts +1 -1
- package/dist/source-agent-qualifier.d.ts +1 -1
- package/dist/source-agent-qualifier.js +31 -31
- package/dist/source-attribution.d.ts +23 -1
- package/dist/source-attribution.js +13 -3
- package/dist/standup/build.js +23 -23
- package/dist/{storage-wvX01lht.d.ts → storage-C-0Ah5OY.d.ts} +2 -1
- package/dist/storage.d.ts +2 -2
- package/dist/storage.js +22 -22
- package/dist/subject-config.d.ts +1 -1
- package/dist/summarizer.d.ts +1 -1
- package/dist/summarizer.js +6 -6
- package/dist/summary-snapshot.d.ts +1 -1
- package/dist/support-passport/index.d.ts +18 -17
- package/dist/support-passport/index.js +78 -77
- package/dist/task-llm-config.d.ts +16 -0
- package/dist/task-llm-config.js +12 -0
- package/dist/task-llm-config.js.map +1 -0
- package/dist/temporal-supersession.d.ts +2 -2
- package/dist/temporal-timeline-recall.d.ts +1 -1
- package/dist/temporal-validity.d.ts +1 -1
- package/dist/threading.d.ts +1 -1
- package/dist/tier-migration.d.ts +2 -2
- package/dist/tier-routing.d.ts +1 -1
- package/dist/tier-routing.js +3 -3
- package/dist/{tier-stats-LUSUUNU6.js → tier-stats-VK5PCO2L.js} +4 -4
- package/dist/topics.d.ts +1 -1
- package/dist/transcript.d.ts +1 -1
- package/dist/transfer/backup.js +2 -2
- package/dist/transfer/capsule-export.js +2 -2
- package/dist/transfer/capsule-import.js +3 -3
- package/dist/transfer/export-okf.d.ts +1 -1
- package/dist/transfer/export-okf.js +23 -23
- package/dist/trust-score-stage.d.ts +1 -1
- package/dist/trust-score.d.ts +1 -1
- package/dist/{types-Cyr32ABj.d.ts → types-cK5LydjL.d.ts} +6 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.js +1 -1
- package/dist/utility-runtime.d.ts +1 -1
- package/dist/verified-recall.js +23 -23
- package/dist/who-knows-cli.d.ts +16 -14
- package/dist/who-knows-cli.js +24 -24
- package/dist/who-knows.d.ts +16 -14
- package/dist/who-knows.js +23 -23
- package/dist/write-envelope.d.ts +1 -1
- package/package.json +12 -2
- package/src/access-category-alias.test.ts +93 -0
- package/src/access-http.ts +1 -1
- package/src/access-mcp-shared-context-tools.ts +103 -0
- package/src/access-mcp.ts +4 -74
- package/src/access-offline-manifest.ts +52 -2
- package/src/access-operations-batch.ts +45 -2
- package/src/access-schema.ts +9 -4
- package/src/access-service.ts +14 -7
- package/src/activity/config.test.ts +61 -0
- package/src/activity/config.ts +40 -1
- package/src/activity/timeline/analysis-provider.ts +8 -2
- package/src/activity/timeline/analysis-run.test.ts +82 -0
- package/src/activity/timeline/publish-cli.test.ts +30 -0
- package/src/activity/timeline/publish-cli.ts +7 -0
- package/src/activity/timeline/query.ts +8 -1
- package/src/activity/timeline/regenerate.test.ts +130 -2
- package/src/activity/timeline/regenerate.ts +14 -6
- package/src/activity/vault-frontmatter.test.ts +99 -1
- package/src/activity/vault-frontmatter.ts +131 -0
- package/src/activity/vault-publish.ts +6 -0
- package/src/activity/vault-publisher.test.ts +172 -0
- package/src/activity/vault-publisher.ts +69 -15
- package/src/activity/vault-region.test.ts +7 -2
- package/src/activity/vault-region.ts +7 -3
- package/src/background-generation-config.ts +32 -6
- package/src/background-generation.test.ts +10 -1
- package/src/cli/deep-recall-commands.ts +22 -10
- package/src/cli/timeline-publish-commands.ts +9 -0
- package/src/config.test.ts +170 -43
- package/src/config.ts +22 -5
- package/src/dedup/merge.test.ts +283 -0
- package/src/deep-recall-boundary.test.ts +66 -0
- package/src/deep-recall-cli.test.ts +82 -0
- package/src/deep-recall-config.test.ts +56 -0
- package/src/deep-recall-config.ts +32 -0
- package/src/deep-recall-http-glue.ts +10 -10
- package/src/deep-recall-policy-llm.test.ts +242 -0
- package/src/deep-recall-policy-llm.ts +37 -7
- package/src/deep-recall-seeds.test.ts +53 -0
- package/src/deep-recall-seeds.ts +7 -1
- package/src/deep-recall-surface.test.ts +93 -0
- package/src/deep-recall.test.ts +121 -0
- package/src/deep-recall.ts +88 -28
- package/src/extraction-error-classification.ts +36 -1
- package/src/extraction-timeout.test.ts +110 -1
- package/src/extraction.test.ts +19 -1
- package/src/extraction.ts +23 -21
- package/src/fallback-llm-codex-subscription.ts +220 -12
- package/src/fallback-llm-parse-failure.test.ts +156 -0
- package/src/fallback-llm.test.ts +178 -0
- package/src/fallback-llm.ts +200 -198
- package/src/index.ts +1 -0
- package/src/local-llm-config.ts +11 -10
- package/src/local-llm-headers-timeout.test.ts +30 -0
- package/src/local-llm-helpers.ts +28 -0
- package/src/local-llm.ts +8 -19
- package/src/meetings/config.test.ts +58 -0
- package/src/namespaces/search.test.ts +51 -1
- package/src/namespaces/search.ts +48 -3
- package/src/orchestration/extraction-persist-promotion.test.ts +228 -2
- package/src/orchestration/extraction-persist-promotion.ts +17 -14
- package/src/orchestration/extraction-persist.ts +1 -1
- package/src/orchestration/orchestrator-helpers.test.ts +104 -0
- package/src/orchestration/orchestrator-init.ts +366 -106
- package/src/orchestration/recall-entry.ts +15 -1
- package/src/orchestration/recall-internal.ts +6 -11
- package/src/orchestration/recall-section-coordinator.ts +65 -28
- package/src/orchestration/recall-state-view-pipeline.test.ts +8 -2
- package/src/orchestration/semantic-merge-commit-effects.ts +45 -16
- package/src/orchestration/semantic-merge-persist.ts +23 -36
- package/src/orchestration/semantic-merge-promotion-payload.ts +62 -6
- package/src/orchestration/startup-collection-checks.ts +85 -0
- package/src/orchestrator-flush.test.ts +7 -0
- package/src/orchestrator-init.test.ts +1539 -0
- package/src/orchestrator.ts +7 -0
- package/src/providers/codex-subscription.test.ts +127 -0
- package/src/providers/codex-subscription.ts +1 -1
- package/src/qmd.ts +21 -10
- package/src/recall-state-view-admission.ts +11 -1
- package/src/recall-state-view-budget.test.ts +424 -0
- package/src/recall-state-view-cron-intent.test.ts +268 -0
- package/src/recall-state-view-widen.test.ts +14 -5
- package/src/recall-state-view-widen.ts +8 -1
- package/src/recall-state-view.ts +35 -18
- package/src/reconcile-identity-cache.test.ts +82 -1
- package/src/search/port.ts +1 -1
- package/src/shared-context/envelope-io.ts +25 -0
- package/src/shared-context/envelope-wiring.test.ts +4 -2
- package/src/shared-context/manager.ts +1 -0
- package/src/shared-context/write-output-controls.test.ts +192 -0
- package/src/shared-context/write-output-controls.ts +72 -0
- package/src/source-attribution.test.ts +39 -0
- package/src/source-attribution.ts +72 -0
- package/src/storage/cas-revision-store.test.ts +4 -0
- package/src/storage/cas-revision-store.ts +104 -12
- package/src/storage-frontmatter-cas.test.ts +19 -17
- package/src/summarizer.ts +5 -1
- package/src/task-llm-config.test.ts +124 -0
- package/src/task-llm-config.ts +88 -0
- package/src/testing/subjects/startup-discovery-lifecycle.test.ts +273 -0
- package/src/types.ts +6 -0
- package/dist/chunk-3CBI2ZSA.js.map +0 -1
- package/dist/chunk-5HYUUFMQ.js.map +0 -1
- package/dist/chunk-5SPCMAUC.js.map +0 -1
- package/dist/chunk-6H2G7RFT.js.map +0 -1
- package/dist/chunk-6YAIN5XJ.js.map +0 -1
- package/dist/chunk-ACY4ZPF7.js.map +0 -1
- package/dist/chunk-B36GUU6T.js.map +0 -1
- package/dist/chunk-BLDBT6HZ.js.map +0 -1
- package/dist/chunk-CARRTDKC.js.map +0 -1
- package/dist/chunk-CC37E3QM.js.map +0 -1
- package/dist/chunk-CWTCMZGE.js.map +0 -1
- package/dist/chunk-CZTPU65V.js.map +0 -1
- package/dist/chunk-EYKIDK33.js.map +0 -1
- package/dist/chunk-FWWWUPOE.js.map +0 -1
- package/dist/chunk-IQEJIOEU.js.map +0 -1
- package/dist/chunk-IYKZJVL5.js.map +0 -1
- package/dist/chunk-JXN77SGO.js.map +0 -1
- package/dist/chunk-KQW3YGEN.js.map +0 -1
- package/dist/chunk-LPYYY4AP.js.map +0 -1
- package/dist/chunk-LQNRVPTV.js.map +0 -1
- package/dist/chunk-MVAQ2WM3.js.map +0 -1
- package/dist/chunk-OEDW4ER7.js.map +0 -1
- package/dist/chunk-OPBFP4TF.js.map +0 -1
- package/dist/chunk-P4ZAEYKG.js.map +0 -1
- package/dist/chunk-QHT7MOUF.js.map +0 -1
- package/dist/chunk-QTQ6XKGT.js.map +0 -1
- package/dist/chunk-SV4Z2S67.js.map +0 -1
- package/dist/chunk-TNZNSMVJ.js.map +0 -1
- package/dist/chunk-TRLOFIQC.js.map +0 -1
- package/dist/chunk-UZEHHXYC.js.map +0 -1
- package/dist/chunk-WKDFJXW5.js.map +0 -1
- package/dist/chunk-YDVAM7S4.js.map +0 -1
- package/dist/chunk-YFTNZMGR.js.map +0 -1
- package/dist/chunk-YKREX63Z.js.map +0 -1
- /package/dist/{capsule-crypto-7FJQINUR.js.map → access-mcp-shared-context-tools.js.map} +0 -0
- /package/dist/{auto-sync-RP4C6ZPF.js.map → auto-sync-7PGUFY7U.js.map} +0 -0
- /package/dist/{contradiction-scan-BSGKZHYJ.js.map → capsule-crypto-YO5QJ6L3.js.map} +0 -0
- /package/dist/{capsule-merge-IPG4IOFP.js.map → capsule-merge-3MNURAQ3.js.map} +0 -0
- /package/dist/{chunk-XH3HGI2N.js.map → chunk-2HQPE2NM.js.map} +0 -0
- /package/dist/{chunk-3EKVN2OP.js.map → chunk-2ZG2LLZT.js.map} +0 -0
- /package/dist/{chunk-6EHM2AV7.js.map → chunk-3BLHPQHT.js.map} +0 -0
- /package/dist/{chunk-J272ODKJ.js.map → chunk-42DJ235G.js.map} +0 -0
- /package/dist/{chunk-F4EHXVP7.js.map → chunk-46RII65S.js.map} +0 -0
- /package/dist/{chunk-YUW66UAH.js.map → chunk-4AX5OYKC.js.map} +0 -0
- /package/dist/{chunk-AECJY3GJ.js.map → chunk-4IGOLIWM.js.map} +0 -0
- /package/dist/{chunk-2ZTDRNCS.js.map → chunk-54QPOE45.js.map} +0 -0
- /package/dist/{chunk-O4M4BDIJ.js.map → chunk-563X6JJX.js.map} +0 -0
- /package/dist/{chunk-IL6ODG6M.js.map → chunk-5EQT62HH.js.map} +0 -0
- /package/dist/{chunk-JKKII6GX.js.map → chunk-6MQMYXSQ.js.map} +0 -0
- /package/dist/{chunk-TVVEYCNW.js.map → chunk-7K5Q6COX.js.map} +0 -0
- /package/dist/{chunk-BV4ZKIZH.js.map → chunk-7ZLC4DTZ.js.map} +0 -0
- /package/dist/{chunk-WBM2MVBK.js.map → chunk-A4OIJYCV.js.map} +0 -0
- /package/dist/{chunk-RLJHJQUY.js.map → chunk-AFJHNHAM.js.map} +0 -0
- /package/dist/{chunk-4RZLTZVM.js.map → chunk-AKABVXFS.js.map} +0 -0
- /package/dist/{chunk-M6HBPLBA.js.map → chunk-AUSRUOMQ.js.map} +0 -0
- /package/dist/{chunk-2NLLXCJG.js.map → chunk-BXLOS5AJ.js.map} +0 -0
- /package/dist/{chunk-Q7CLGFA7.js.map → chunk-C3G6MW4W.js.map} +0 -0
- /package/dist/{chunk-O76F5QPP.js.map → chunk-D6PY63OM.js.map} +0 -0
- /package/dist/{chunk-BD7JTBYP.js.map → chunk-D7MAYFQP.js.map} +0 -0
- /package/dist/{chunk-LMLGBG6H.js.map → chunk-DBB5JPSL.js.map} +0 -0
- /package/dist/{chunk-TSP5WH72.js.map → chunk-DIXZQTGY.js.map} +0 -0
- /package/dist/{chunk-X7Y7WX73.js.map → chunk-DQEMWVMT.js.map} +0 -0
- /package/dist/{chunk-UHRZ324M.js.map → chunk-E3I3NDUP.js.map} +0 -0
- /package/dist/{chunk-AENM6GKU.js.map → chunk-E4LMQTST.js.map} +0 -0
- /package/dist/{chunk-MUTVRKKY.js.map → chunk-EMSYMYXO.js.map} +0 -0
- /package/dist/{chunk-YNDLCWXS.js.map → chunk-EZ25VE3G.js.map} +0 -0
- /package/dist/{chunk-FXHOZGSE.js.map → chunk-F5H6YG5P.js.map} +0 -0
- /package/dist/{chunk-TNSCIPBQ.js.map → chunk-G6NQ3L4T.js.map} +0 -0
- /package/dist/{chunk-ZMWSYUUL.js.map → chunk-GCBIXUPT.js.map} +0 -0
- /package/dist/{chunk-4BCHFSC7.js.map → chunk-GWNSKQDA.js.map} +0 -0
- /package/dist/{chunk-JDX2OA4R.js.map → chunk-HNHIHXSD.js.map} +0 -0
- /package/dist/{chunk-GG5FHZJJ.js.map → chunk-I33QYUAF.js.map} +0 -0
- /package/dist/{chunk-AAZEKXUP.js.map → chunk-IYIPXAIJ.js.map} +0 -0
- /package/dist/{chunk-5U7K4W6K.js.map → chunk-JDOBQPJY.js.map} +0 -0
- /package/dist/{chunk-UZZ7SQT3.js.map → chunk-JMWUPUE6.js.map} +0 -0
- /package/dist/{chunk-ENBPQEVU.js.map → chunk-JSD7Q7LD.js.map} +0 -0
- /package/dist/{chunk-Q432REND.js.map → chunk-KJLLPG26.js.map} +0 -0
- /package/dist/{chunk-JTQR6L2N.js.map → chunk-KLUC2GSG.js.map} +0 -0
- /package/dist/{chunk-OB3XMWX5.js.map → chunk-KVO2BTA4.js.map} +0 -0
- /package/dist/{chunk-PCOVEDPK.js.map → chunk-KZJM7R4F.js.map} +0 -0
- /package/dist/{chunk-X4TD4O2F.js.map → chunk-LE2KZ72G.js.map} +0 -0
- /package/dist/{chunk-HIP6DKJJ.js.map → chunk-LQVXSRAJ.js.map} +0 -0
- /package/dist/{chunk-A7GQBJP5.js.map → chunk-LVFI5LG7.js.map} +0 -0
- /package/dist/{chunk-VBSNUH4J.js.map → chunk-ND7MAIJC.js.map} +0 -0
- /package/dist/{chunk-54NX5EG4.js.map → chunk-P66QH6R6.js.map} +0 -0
- /package/dist/{chunk-62D2PAAM.js.map → chunk-PAAJWQH5.js.map} +0 -0
- /package/dist/{chunk-TA4C3XB7.js.map → chunk-PFKIOYJH.js.map} +0 -0
- /package/dist/{chunk-WIWLX65T.js.map → chunk-PGGPRF6J.js.map} +0 -0
- /package/dist/{chunk-V6EGNVUT.js.map → chunk-PIWFNPQT.js.map} +0 -0
- /package/dist/{chunk-4JVQRFZD.js.map → chunk-PLJ2MQFT.js.map} +0 -0
- /package/dist/{chunk-4RX5O34R.js.map → chunk-PQ42DJNG.js.map} +0 -0
- /package/dist/{chunk-37CAEC7E.js.map → chunk-PWPIERBM.js.map} +0 -0
- /package/dist/{chunk-ZEGL7YCC.js.map → chunk-Q62GA5U2.js.map} +0 -0
- /package/dist/{chunk-GAS7KYC7.js.map → chunk-RQQO3ORQ.js.map} +0 -0
- /package/dist/{chunk-3NPNBVFR.js.map → chunk-UZGHKD3T.js.map} +0 -0
- /package/dist/{chunk-VJIE4D2I.js.map → chunk-V62YYBBY.js.map} +0 -0
- /package/dist/{chunk-KQAFEZQX.js.map → chunk-VDX2J7OX.js.map} +0 -0
- /package/dist/{chunk-6AGWBKQU.js.map → chunk-VSN2DMQK.js.map} +0 -0
- /package/dist/{chunk-ZHXSOMYH.js.map → chunk-VVX5PZFS.js.map} +0 -0
- /package/dist/{chunk-GI4ZBWPQ.js.map → chunk-W7UV2ZCA.js.map} +0 -0
- /package/dist/{chunk-GMIQV6DD.js.map → chunk-WBQ4ONQJ.js.map} +0 -0
- /package/dist/{chunk-FNHLI2RE.js.map → chunk-WFMQN7JE.js.map} +0 -0
- /package/dist/{chunk-ZBW7A667.js.map → chunk-WPGA4RYI.js.map} +0 -0
- /package/dist/{chunk-YQNNHLCG.js.map → chunk-WPGR3RW4.js.map} +0 -0
- /package/dist/{chunk-NXGSONWM.js.map → chunk-WZIO3TW6.js.map} +0 -0
- /package/dist/{chunk-ZZUVBZL2.js.map → chunk-X2QPKLPL.js.map} +0 -0
- /package/dist/{chunk-VSL63CFJ.js.map → chunk-XRS65T4O.js.map} +0 -0
- /package/dist/{chunk-5N4MZLEH.js.map → chunk-YFXAWGMR.js.map} +0 -0
- /package/dist/{chunk-D545Z7UH.js.map → chunk-Z535ADTC.js.map} +0 -0
- /package/dist/{chunk-5YCNDC3C.js.map → chunk-ZX6NNFSY.js.map} +0 -0
- /package/dist/{chunk-3N3PBBEH.js.map → chunk-ZYSOT6HD.js.map} +0 -0
- /package/dist/{chunk-MCRVQ5YQ.js.map → chunk-ZZEIL3MI.js.map} +0 -0
- /package/dist/{resolution-4GG3QZRJ.js.map → contradiction-scan-GVD4JJ7B.js.map} +0 -0
- /package/dist/{first-start-migration-ZWMV5CX4.js.map → first-start-migration-L3UFX5CU.js.map} +0 -0
- /package/dist/{tier-stats-LUSUUNU6.js.map → tier-stats-VK5PCO2L.js.map} +0 -0
package/src/fallback-llm.ts
CHANGED
|
@@ -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
|
-
|
|
91
|
-
|
|
92
|
-
|
|
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
|
-
*
|
|
186
|
-
*
|
|
187
|
-
*
|
|
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("
|
|
235
|
-
return
|
|
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
|
-
|
|
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(`
|
|
268
|
+
log.debug(`task LLM: ${model.modelString} returned rejected output, trying next...`);
|
|
264
269
|
continue;
|
|
265
270
|
}
|
|
266
271
|
if (isFallback) {
|
|
267
|
-
log.debug(`
|
|
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
|
-
|
|
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(`
|
|
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(`
|
|
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)
|
|
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
|
-
`
|
|
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(`
|
|
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(`
|
|
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("
|
|
351
|
-
return
|
|
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.
|
|
364
|
-
(
|
|
365
|
-
|
|
366
|
-
|
|
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
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
422
|
-
|
|
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 (!
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
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
|
-
|
|
484
|
+
sawSchemaReject = true;
|
|
447
485
|
}
|
|
448
486
|
}
|
|
449
|
-
|
|
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("
|
|
452
|
-
return {
|
|
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("
|
|
535
|
+
log.debug("task LLM: using explicit model chain override");
|
|
480
536
|
} else if (modelChainOverride) {
|
|
481
|
-
log.warn("
|
|
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(`
|
|
546
|
+
log.debug(`task LLM: using agent persona "${agentId}" model chain`);
|
|
491
547
|
} else {
|
|
492
548
|
log.warn(
|
|
493
|
-
`
|
|
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
|
-
`
|
|
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(`
|
|
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
|
-
`
|
|
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(`
|
|
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(`
|
|
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(`
|
|
688
|
+
log.debug(`task LLM: provider "${providerId}" resolved from built-in defaults`);
|
|
633
689
|
return { providerId, config: builtInConfig };
|
|
634
690
|
}
|
|
635
|
-
log.debug(`
|
|
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(`
|
|
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
|
-
`
|
|
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
|
-
`
|
|
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
|
-
}
|