@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
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
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 {
|
|
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,
|
|
50
|
-
*
|
|
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
|
-
|
|
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
|
|
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 -
|
|
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("
|
|
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
|
+
});
|
package/src/fallback-llm.test.ts
CHANGED
|
@@ -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
|
+
});
|