@remnic/core 9.69.37 → 9.69.39
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 +14 -12
- package/dist/access-admin-ops-surface.js +86 -83
- package/dist/access-authorization-probe.d.ts +14 -12
- package/dist/access-authorization-probe.js +87 -84
- package/dist/access-boundary.d.ts +14 -12
- package/dist/access-boundary.js +86 -83
- package/dist/access-cli.js +197 -191
- package/dist/access-cli.js.map +1 -1
- package/dist/access-coding-context-resolution.d.ts +2 -1
- package/dist/access-extraction-force-flush.d.ts +14 -12
- package/dist/access-extraction-force-flush.js +86 -83
- package/dist/access-health-types.d.ts +2 -1
- package/dist/access-http-briefing.d.ts +14 -12
- package/dist/access-http-briefing.js +87 -84
- package/dist/access-http-lcm-compaction.d.ts +14 -12
- package/dist/access-http-lifecycle-flush.d.ts +14 -12
- package/dist/access-http-offline-stream.d.ts +14 -12
- package/dist/access-http-query.d.ts +3 -2
- package/dist/access-http-query.js +88 -85
- package/dist/access-http.d.ts +15 -13
- package/dist/access-http.js +108 -105
- package/dist/access-identity-continuity-surface.d.ts +12 -10
- package/dist/access-identity-continuity-surface.js +86 -83
- package/dist/access-lcm-surface.d.ts +14 -12
- package/dist/access-lcm-surface.js +86 -83
- package/dist/access-mcp.d.ts +14 -12
- package/dist/access-mcp.js +97 -94
- package/dist/access-memory-search-fanout.d.ts +3 -2
- package/dist/{access-namespace-preflight-CV5cHujx.d.ts → access-namespace-preflight-DY4z6L5X.d.ts} +1 -1
- package/dist/access-namespace-preflight.d.ts +4 -3
- package/dist/access-namespace-preflight.js +86 -83
- package/dist/access-observe-transcript.d.ts +12 -10
- package/dist/access-observe-write-category.d.ts +37 -0
- package/dist/access-observe-write-category.js +34 -0
- package/dist/access-observe-write-surface.d.ts +17 -15
- package/dist/access-observe-write-surface.js +86 -83
- package/dist/access-offline-manifest.d.ts +12 -10
- package/dist/access-offline-manifest.js +15 -15
- package/dist/access-operations-batch.js +91 -88
- package/dist/access-operations.d.ts +17 -30
- package/dist/access-operations.js +96 -93
- package/dist/access-recall-concurrency.d.ts +14 -12
- package/dist/access-recall-concurrency.js +86 -83
- package/dist/access-recall-response.d.ts +14 -12
- package/dist/access-recall-response.js +86 -83
- package/dist/access-recall-surface.d.ts +14 -12
- package/dist/access-recall-surface.js +86 -83
- package/dist/access-schema.d.ts +210 -107
- package/dist/access-schema.js +9 -15
- package/dist/{access-service-DwHC7lcV.d.ts → access-service-MY4bsr_Q.d.ts} +101 -77
- package/dist/access-service-helpers.d.ts +14 -12
- package/dist/access-service.d.ts +14 -12
- package/dist/access-service.js +86 -83
- package/dist/access-surface-catalog.d.ts +14 -12
- package/dist/access-surface-catalog.js +88 -85
- package/dist/access-surface-catalog.js.map +1 -1
- package/dist/access-wearables-meetings-surface.d.ts +5 -3
- package/dist/action-confidence.d.ts +2 -1
- package/dist/active-memory-bridge.d.ts +2 -1
- package/dist/active-memory-bridge.js +3 -3
- package/dist/active-recall.d.ts +2 -1
- package/dist/active-recall.js +20 -17
- package/dist/active-recall.js.map +1 -1
- package/dist/activity/digest.d.ts +2 -1
- package/dist/adapters/index.js +4 -4
- package/dist/adapters/registry.js +2 -2
- package/dist/ambient-provenance.d.ts +2 -1
- package/dist/artifact-search.d.ts +2 -1
- package/dist/{auto-sync-FSRJDU63.js → auto-sync-RP4C6ZPF.js} +11 -9
- package/dist/{auto-sync-FSRJDU63.js.map → auto-sync-RP4C6ZPF.js.map} +1 -1
- package/dist/background-generation-config.d.ts +10 -0
- package/dist/background-generation-config.js +9 -0
- package/dist/background-generation.d.ts +25 -0
- package/dist/background-generation.js +11 -0
- package/dist/behavior-learner.d.ts +2 -1
- package/dist/behavior-signals.d.ts +2 -1
- package/dist/bootstrap.d.ts +12 -10
- package/dist/briefing-window.d.ts +3 -2
- package/dist/briefing.d.ts +3 -2
- package/dist/briefing.js +27 -26
- package/dist/buffer-surprise-report.d.ts +2 -1
- package/dist/buffer-turn-helpers.d.ts +2 -1
- package/dist/buffer.d.ts +3 -2
- package/dist/buffer.js +8 -8
- package/dist/bulk-import/index.d.ts +4 -3
- package/dist/calibration.d.ts +3 -1
- package/dist/calibration.js +4 -2
- package/dist/calibration.js.map +1 -1
- package/dist/capabilities.d.ts +2 -1
- package/dist/{capsule-crypto-YO5QJ6L3.js → capsule-crypto-7FJQINUR.js} +2 -2
- package/dist/{capsule-merge-ZCXUPLNJ.js → capsule-merge-IPG4IOFP.js} +2 -2
- package/dist/{catalog-Cl4H8N89.d.ts → catalog-CW87xGx8.d.ts} +1 -1
- package/dist/causal-behavior.d.ts +2 -1
- package/dist/causal-behavior.js +2 -2
- package/dist/causal-chain.js +2 -2
- package/dist/causal-consolidation.d.ts +2 -1
- package/dist/causal-consolidation.js +29 -28
- package/dist/causal-consolidation.js.map +1 -1
- package/dist/causal-retrieval.js +2 -2
- package/dist/causal-trajectory-graph.d.ts +2 -1
- package/dist/causal-trajectory-graph.js +2 -2
- package/dist/causal-trajectory.js +1 -1
- package/dist/{chunk-YHU5XUF4.js → chunk-27MKMTBY.js} +2 -2
- package/dist/{chunk-TK4FHQRN.js → chunk-2J3V5QEO.js} +4 -4
- package/dist/{chunk-BXLOS5AJ.js → chunk-2NLLXCJG.js} +2 -2
- package/dist/chunk-2QG4SLZI.js +44 -0
- package/dist/chunk-2QG4SLZI.js.map +1 -0
- package/dist/{chunk-TFRDUD3M.js → chunk-2ZTDRNCS.js} +2 -2
- package/dist/{chunk-PWPIERBM.js → chunk-37CAEC7E.js} +4 -4
- package/dist/{chunk-X7BCM2NA.js → chunk-3EKVN2OP.js} +2 -2
- package/dist/{chunk-S2ULTQZR.js → chunk-3N3PBBEH.js} +2 -2
- package/dist/{chunk-XCF3SFHD.js → chunk-3NPNBVFR.js} +2 -2
- package/dist/{chunk-JO5TQAKW.js → chunk-4BCHFSC7.js} +3 -3
- package/dist/{chunk-Q6D7EUSQ.js → chunk-4JVQRFZD.js} +10 -10
- package/dist/{chunk-YEDVOYL2.js → chunk-4RX5O34R.js} +2 -2
- package/dist/{chunk-JMPYZJQN.js → chunk-4RZLTZVM.js} +4 -4
- package/dist/{chunk-Q7JK6YEB.js → chunk-54NX5EG4.js} +2 -2
- package/dist/{chunk-GWK7FEUL.js → chunk-5FAGCOZD.js} +4 -4
- package/dist/{chunk-2PUE5P7C.js → chunk-5N4MZLEH.js} +5 -5
- package/dist/{chunk-B2YKTE7P.js → chunk-5SPCMAUC.js} +10 -10
- package/dist/{chunk-3OHISDDW.js → chunk-5U7K4W6K.js} +2 -2
- package/dist/{chunk-CYEMS2PG.js → chunk-5YCNDC3C.js} +3 -3
- package/dist/{chunk-PAAJWQH5.js → chunk-62D2PAAM.js} +4 -4
- package/dist/{chunk-52II7PB6.js → chunk-645WOU5I.js} +4 -4
- package/dist/chunk-6AGWBKQU.js +94 -0
- package/dist/chunk-6AGWBKQU.js.map +1 -0
- package/dist/{chunk-326KUXIR.js → chunk-6EHM2AV7.js} +6 -6
- package/dist/{chunk-YM7YN37H.js → chunk-6ET2VII7.js} +2 -2
- package/dist/chunk-6H2G7RFT.js +58 -0
- package/dist/chunk-6H2G7RFT.js.map +1 -0
- package/dist/{chunk-A2YQL2FF.js → chunk-6P4REYKL.js} +5 -5
- package/dist/{chunk-7RKBPXY6.js → chunk-6YAIN5XJ.js} +2 -2
- package/dist/{chunk-2L5FSNPC.js → chunk-A7GQBJP5.js} +10 -10
- package/dist/{chunk-UYVXIY6C.js → chunk-AAZEKXUP.js} +2 -2
- package/dist/{chunk-JR6PP7UM.js → chunk-ACY4ZPF7.js} +28 -2
- package/dist/chunk-ACY4ZPF7.js.map +1 -0
- package/dist/{chunk-IQZ6ISFX.js → chunk-AECJY3GJ.js} +2 -2
- package/dist/{chunk-76DRU7C4.js → chunk-AENM6GKU.js} +2 -2
- package/dist/{chunk-KTRXQQFN.js → chunk-B36GUU6T.js} +4 -4
- package/dist/{chunk-TLHNF6GA.js → chunk-BV4ZKIZH.js} +1 -1
- package/dist/{chunk-ZWEZXVYH.js → chunk-CEO4DONG.js} +2 -2
- package/dist/chunk-CWTCMZGE.js +858 -0
- package/dist/chunk-CWTCMZGE.js.map +1 -0
- package/dist/{chunk-ZEPVWLCN.js → chunk-CZTPU65V.js} +25 -25
- package/dist/{chunk-TRU6JBOI.js → chunk-D545Z7UH.js} +3 -3
- package/dist/{chunk-6E5GYDIE.js → chunk-DGS34QSY.js} +2 -2
- package/dist/{chunk-65RENJGB.js → chunk-E2AWJ7KQ.js} +8 -4
- package/dist/chunk-E2AWJ7KQ.js.map +1 -0
- package/dist/{chunk-6Z3WW2MW.js → chunk-ENBPQEVU.js} +3 -3
- package/dist/{chunk-DOKKRZPH.js → chunk-EYKIDK33.js} +21 -19
- package/dist/chunk-EYKIDK33.js.map +1 -0
- package/dist/{chunk-PNEDMJ53.js → chunk-F4EHXVP7.js} +2 -2
- package/dist/{chunk-JPKZTCWZ.js → chunk-FNHLI2RE.js} +3 -3
- package/dist/{chunk-D2DIYEFW.js → chunk-FWWWUPOE.js} +12 -36
- package/dist/chunk-FWWWUPOE.js.map +1 -0
- package/dist/{chunk-M3MYMWXG.js → chunk-FXHOZGSE.js} +2 -2
- package/dist/{chunk-SAKA6PPL.js → chunk-GAS7KYC7.js} +5 -5
- package/dist/{chunk-LSLCFCCQ.js → chunk-GDYU6VF4.js} +1 -1
- package/dist/chunk-GDYU6VF4.js.map +1 -0
- package/dist/{chunk-2AR5JFD7.js → chunk-GG5FHZJJ.js} +6 -6
- package/dist/{chunk-WS3WNLST.js → chunk-GI4ZBWPQ.js} +3 -3
- package/dist/{chunk-JYR4LH76.js → chunk-GMIQV6DD.js} +2 -2
- package/dist/{chunk-WIKO4SCR.js → chunk-H3TKENU4.js} +5 -5
- package/dist/{chunk-ZLN7AROH.js → chunk-HIP6DKJJ.js} +5 -5
- package/dist/{chunk-SF6RFI5Z.js → chunk-HWLIMQE2.js} +2 -2
- package/dist/{chunk-JZYECQWN.js → chunk-IL6ODG6M.js} +2 -2
- package/dist/{chunk-GNR6YEWZ.js → chunk-IQEJIOEU.js} +6 -6
- package/dist/{chunk-BICNRVEC.js → chunk-IWO6QXWJ.js} +2 -2
- package/dist/{chunk-RN3MVLW3.js → chunk-IYKZJVL5.js} +1 -1
- package/dist/chunk-IYKZJVL5.js.map +1 -0
- package/dist/{chunk-42DJ235G.js → chunk-J272ODKJ.js} +2 -2
- package/dist/{chunk-R3TLVTWW.js → chunk-JDX2OA4R.js} +3 -3
- package/dist/{chunk-G5MO3VQA.js → chunk-JKKII6GX.js} +2 -2
- package/dist/{chunk-L5OXE4PX.js → chunk-JTQR6L2N.js} +3 -3
- package/dist/{chunk-VDX2J7OX.js → chunk-KQAFEZQX.js} +2 -2
- package/dist/{chunk-AKE4GGQ3.js → chunk-KQW3YGEN.js} +2 -2
- package/dist/{chunk-LMMQKZK3.js → chunk-L63GFNKL.js} +1 -1
- package/dist/{chunk-BRZWWUCJ.js → chunk-LMLGBG6H.js} +2 -2
- package/dist/{chunk-3IXB77DA.js → chunk-LPYYY4AP.js} +318 -278
- package/dist/chunk-LPYYY4AP.js.map +1 -0
- package/dist/{chunk-YEN4TREG.js → chunk-LQNRVPTV.js} +54 -567
- package/dist/chunk-LQNRVPTV.js.map +1 -0
- package/dist/{chunk-CQ7SSBO4.js → chunk-M6HBPLBA.js} +2 -2
- package/dist/chunk-MCRVQ5YQ.js +14 -0
- package/dist/chunk-MCRVQ5YQ.js.map +1 -0
- package/dist/{chunk-3YMDY3ZF.js → chunk-MUTVRKKY.js} +16 -16
- package/dist/{chunk-FCFAYMTU.js → chunk-NXGSONWM.js} +2 -2
- package/dist/{chunk-4WGAMREC.js → chunk-O4M4BDIJ.js} +2 -2
- package/dist/{chunk-5SYI2F47.js → chunk-O76F5QPP.js} +2 -2
- package/dist/{chunk-SROIT6QY.js → chunk-OPBFP4TF.js} +28 -11
- package/dist/chunk-OPBFP4TF.js.map +1 -0
- package/dist/{chunk-7MJBKZPU.js → chunk-P4ZAEYKG.js} +68 -34
- package/dist/chunk-P4ZAEYKG.js.map +1 -0
- package/dist/{chunk-57GDHV2D.js → chunk-PCOVEDPK.js} +6 -6
- package/dist/{chunk-PPTOAHTZ.js → chunk-PGAB2V53.js} +2 -2
- package/dist/{chunk-HHDTBYDJ.js → chunk-Q432REND.js} +2 -2
- package/dist/{chunk-XAITGGX5.js → chunk-Q4AUIFUA.js} +4 -4
- package/dist/{chunk-5LLQAUMI.js → chunk-Q7CLGFA7.js} +3 -3
- package/dist/{chunk-KUK56OPR.js → chunk-QHT7MOUF.js} +12 -12
- package/dist/{chunk-W6IJMWTZ.js → chunk-QTQ6XKGT.js} +4 -4
- package/dist/{chunk-FLLORID2.js → chunk-RLJHJQUY.js} +9 -9
- package/dist/{chunk-353KGBKY.js → chunk-RW4QNB4J.js} +4 -4
- package/dist/{chunk-GWQVMKUJ.js → chunk-SCXURCVT.js} +3 -3
- package/dist/{chunk-FQXJAC3T.js → chunk-SGUDMW2K.js} +4 -4
- package/dist/{chunk-LSDEIZ76.js → chunk-TA4C3XB7.js} +6 -6
- package/dist/{chunk-YIZ2EUUL.js → chunk-TNZNSMVJ.js} +94 -94
- package/dist/{chunk-CIYUWSMZ.js → chunk-TRLOFIQC.js} +2 -2
- package/dist/{chunk-TL7NLM2L.js → chunk-TSP5WH72.js} +2 -2
- package/dist/{chunk-3K6UFW5B.js → chunk-UHRZ324M.js} +8 -8
- package/dist/{chunk-JLXWRQNR.js → chunk-UZEHHXYC.js} +170 -167
- package/dist/chunk-UZEHHXYC.js.map +1 -0
- package/dist/{chunk-A5UQ52YQ.js → chunk-UZZ7SQT3.js} +5 -5
- package/dist/{chunk-GHX5PNXW.js → chunk-VBSNUH4J.js} +2 -2
- package/dist/{chunk-MR6LQVZ5.js → chunk-VJIE4D2I.js} +3 -3
- package/dist/{chunk-OTPXEE6W.js → chunk-VSL63CFJ.js} +15 -12
- package/dist/chunk-VSL63CFJ.js.map +1 -0
- package/dist/{chunk-2JGGZICG.js → chunk-WBM2MVBK.js} +2 -2
- package/dist/{chunk-CD3C4BJN.js → chunk-WIWLX65T.js} +2 -2
- package/dist/{chunk-GDDSXVWR.js → chunk-X4TD4O2F.js} +3 -3
- package/dist/{chunk-DQEMWVMT.js → chunk-X7Y7WX73.js} +1 -1
- package/dist/{chunk-FPQDZCUX.js → chunk-XH3HGI2N.js} +2 -2
- package/dist/{chunk-C6KRO3SU.js → chunk-XVDZFTN5.js} +4 -4
- package/dist/{chunk-3SL52JKD.js → chunk-XVZA6VXC.js} +4 -4
- package/dist/chunk-YDVAM7S4.js +221 -0
- package/dist/chunk-YDVAM7S4.js.map +1 -0
- package/dist/chunk-YFTNZMGR.js +71 -0
- package/dist/chunk-YFTNZMGR.js.map +1 -0
- package/dist/{chunk-VELCIWJZ.js → chunk-YKREX63Z.js} +19 -10
- package/dist/chunk-YKREX63Z.js.map +1 -0
- package/dist/{chunk-BLHX5FQW.js → chunk-YUW66UAH.js} +2 -2
- package/dist/{chunk-DOQLHCSS.js → chunk-ZBW7A667.js} +2 -2
- package/dist/{chunk-4DPDIOVA.js → chunk-ZEGL7YCC.js} +2 -2
- package/dist/{chunk-VVX5PZFS.js → chunk-ZHXSOMYH.js} +2 -2
- package/dist/{chunk-GCBIXUPT.js → chunk-ZMWSYUUL.js} +2 -2
- package/dist/{chunk-X2QPKLPL.js → chunk-ZZUVBZL2.js} +2 -2
- package/dist/{cli-1mzd5TM4.d.ts → cli-DGq0MNpO.d.ts} +5 -5
- package/dist/cli-fallback.d.ts +4 -2
- package/dist/cli-fallback.js +3 -1
- package/dist/cli.d.ts +16 -14
- package/dist/cli.js +139 -134
- package/dist/coding/export-okf-codegraph.d.ts +2 -1
- package/dist/coding/export-okf-codegraph.js +26 -25
- package/dist/coding/export-okf-codegraph.js.map +1 -1
- package/dist/coding/pre-action-gate.d.ts +2 -1
- package/dist/coding/pre-action-gate.js +2 -2
- package/dist/compat/codex-cli-fallback.d.ts +1 -1
- package/dist/compat/codex-cli-fallback.js +3 -1
- package/dist/compat/codex-cli-fallback.js.map +1 -1
- package/dist/compounding/engine.d.ts +3 -2
- package/dist/compounding/engine.js +27 -26
- package/dist/compounding/preference-consolidator.d.ts +2 -1
- package/dist/compression-optimizer.d.ts +2 -1
- package/dist/config.d.ts +2 -1
- package/dist/config.js +18 -15
- package/dist/connectors/codex-materialize-runner.d.ts +2 -1
- package/dist/connectors/codex-materialize-runner.js +26 -25
- package/dist/connectors/codex-materialize.d.ts +2 -1
- package/dist/connectors/index.d.ts +2 -1
- package/dist/connectors/index.js +29 -28
- package/dist/consolidation-provenance-check.d.ts +3 -2
- package/dist/consolidation-undo.d.ts +3 -2
- package/dist/contradiction/index.d.ts +5 -3
- package/dist/contradiction/index.js +7 -7
- package/dist/{contradiction-scan-GVD4JJ7B.js → contradiction-scan-BSGKZHYJ.js} +4 -4
- package/dist/contradiction-scan-BSGKZHYJ.js.map +1 -0
- package/dist/converge-config.d.ts +2 -1
- package/dist/convergence-refresh.d.ts +3 -2
- package/dist/convergence-refresh.js +29 -28
- package/dist/conversation-index/backend.d.ts +2 -1
- package/dist/conversation-index/chunker.d.ts +2 -1
- package/dist/conversation-index/faiss-adapter.d.ts +2 -1
- package/dist/conversation-index/indexer.d.ts +2 -1
- package/dist/conversation-index/search.d.ts +2 -1
- package/dist/corpus-watermark.d.ts +2 -1
- package/dist/corpus-watermark.js +29 -28
- package/dist/cross-lingual-recall.d.ts +2 -1
- package/dist/day-summary.d.ts +2 -1
- package/dist/deep-recall-http-glue.d.ts +14 -12
- package/dist/deep-recall-http-glue.js +4 -14
- package/dist/deep-recall-mcp-tools.d.ts +14 -12
- package/dist/deep-recall-policy-llm.d.ts +3 -1
- package/dist/deep-recall-policy-llm.js +5 -3
- package/dist/deep-recall-seeds.d.ts +2 -1
- package/dist/delinearize.d.ts +2 -1
- package/dist/dependency-propagation-config.d.ts +2 -1
- package/dist/{dependency-propagation-delivery-Bua2ApHV.d.ts → dependency-propagation-delivery-Cq1ekOwV.d.ts} +1 -1
- package/dist/direct-answer-wiring.d.ts +2 -1
- package/dist/direct-answer.d.ts +2 -1
- package/dist/embedding-fallback.d.ts +2 -1
- package/dist/enrichment/index.d.ts +2 -1
- package/dist/entity-origin-fields.d.ts +2 -1
- package/dist/entity-retrieval.d.ts +3 -2
- package/dist/entity-retrieval.js +28 -27
- package/dist/entity-schema.d.ts +2 -1
- package/dist/episodic-context.d.ts +2 -1
- package/dist/eval-trajectory-contracts.d.ts +2 -1
- package/dist/eval-trajectory-store.d.ts +2 -1
- package/dist/eval-trajectory.d.ts +2 -1
- package/dist/event-order-recall.js +3 -3
- package/dist/explicit-capture.d.ts +12 -10
- package/dist/explicit-capture.js +6 -6
- package/dist/external-wiki-access.d.ts +14 -12
- package/dist/external-wiki-access.js +87 -84
- package/dist/external-wiki-collection-registration.d.ts +2 -1
- package/dist/external-wiki-collection.d.ts +2 -1
- package/dist/external-wiki-mcp-tools.d.ts +14 -12
- package/dist/extraction-error-classification.d.ts +2 -1
- package/dist/extraction-faithfulness.d.ts +3 -1
- package/dist/extraction-faithfulness.js +5 -3
- package/dist/extraction-judge-telemetry.d.ts +3 -1
- package/dist/extraction-judge-training.d.ts +3 -1
- package/dist/extraction-judge.d.ts +3 -1
- package/dist/extraction-judge.js +5 -3
- package/dist/extraction-liveness.d.ts +2 -1
- package/dist/extraction-normalization.d.ts +2 -1
- package/dist/extraction-prompt.d.ts +2 -1
- package/dist/extraction-source-grounding-rules.d.ts +2 -1
- package/dist/extraction-source-grounding.d.ts +2 -1
- package/dist/extraction-source-grounding.js +3 -3
- package/dist/extraction-span-config.d.ts +2 -1
- package/dist/extraction-span-materialize.d.ts +2 -1
- package/dist/extraction-span-materialize.js +2 -2
- package/dist/extraction.d.ts +2 -1
- package/dist/extraction.js +46 -45
- package/dist/fallback-llm-codex-subscription.d.ts +79 -0
- package/dist/fallback-llm-codex-subscription.js +22 -0
- package/dist/fallback-llm-codex-subscription.js.map +1 -0
- package/dist/fallback-llm.d.ts +5 -1
- package/dist/fallback-llm.js +4 -2
- package/dist/{first-start-migration-GZ45G5FS.js → first-start-migration-ZWMV5CX4.js} +6 -6
- package/dist/{generic-recall-paths-DJBADojG.d.ts → generic-recall-paths-BcySh_f9.d.ts} +1 -1
- package/dist/graph-append-error.d.ts +2 -1
- package/dist/graph-dashboard-diff.d.ts +2 -1
- package/dist/graph-dashboard-key.d.ts +2 -1
- package/dist/graph-dashboard-parser.d.ts +2 -1
- package/dist/{graph-edge-decay-ROSUPDX3.js → graph-edge-decay-MKIRZ762.js} +5 -5
- package/dist/graph-edge-decay-MKIRZ762.js.map +1 -0
- package/dist/graph-edge-reinforcement.d.ts +2 -1
- package/dist/graph-jsonl.d.ts +2 -1
- package/dist/graph-jsonl.js +3 -3
- package/dist/graph-path-reconstruction.d.ts +2 -1
- package/dist/graph-path-scoring.d.ts +2 -1
- package/dist/graph-snapshot.d.ts +2 -1
- package/dist/graph-snapshot.js +3 -3
- package/dist/graph.d.ts +2 -1
- package/dist/graph.js +2 -2
- package/dist/harmonic-retrieval.js +3 -3
- package/dist/importance.d.ts +2 -1
- package/dist/importers/index.d.ts +2 -1
- package/dist/importers/test-utils.d.ts +2 -1
- package/dist/in-flight-reads.d.ts +2 -1
- package/dist/{index-Bsy8ygLL.d.ts → index-DWOb4wz9.d.ts} +2 -2
- package/dist/index.d.ts +713 -705
- package/dist/index.js +419 -346
- package/dist/intent.d.ts +2 -1
- package/dist/lcm/engine.d.ts +2 -1
- package/dist/lcm/engine.js +4 -4
- package/dist/lcm/index.d.ts +2 -1
- package/dist/lcm/index.js +12 -12
- package/dist/lcm/tools.d.ts +2 -1
- package/dist/lifecycle.d.ts +2 -1
- package/dist/live-connectors-runner.d.ts +2 -1
- package/dist/local-llm-config.d.ts +7 -1
- package/dist/local-llm-config.js +12 -0
- package/dist/local-llm.d.ts +2 -1
- package/dist/local-model-endpoint.d.ts +2 -1
- package/dist/location/index.d.ts +4 -3
- package/dist/location/index.js +60 -59
- package/dist/maintenance/memory-governance.d.ts +2 -1
- package/dist/maintenance/memory-governance.js +26 -25
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +3 -2
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +27 -26
- package/dist/maintenance/rebuild-memory-projection.d.ts +3 -2
- package/dist/maintenance/rebuild-memory-projection.js +28 -27
- package/dist/{maintenance-DItyBwTC.d.ts → maintenance-CW9wCzMP.d.ts} +3 -3
- package/dist/mcp-memory-inspector-app.d.ts +14 -12
- package/dist/memory-action-policy.d.ts +2 -1
- package/dist/memory-cache.d.ts +2 -1
- package/dist/memory-controller.d.ts +2 -1
- package/dist/memory-lifecycle-ledger-utils.d.ts +2 -1
- package/dist/memory-projection-store.d.ts +2 -1
- package/dist/memory-provenance.d.ts +2 -1
- package/dist/memory-snapshot.d.ts +2 -1
- package/dist/memory-subject-cli.d.ts +14 -12
- package/dist/memory-subject.d.ts +14 -12
- package/dist/memory-worth-outcomes.d.ts +3 -2
- package/dist/models-json.d.ts +2 -1
- package/dist/namespaces/migrate.d.ts +4 -3
- package/dist/namespaces/migrate.js +27 -26
- package/dist/namespaces/principal.d.ts +2 -1
- package/dist/namespaces/search.d.ts +2 -1
- package/dist/namespaces/search.js +6 -6
- package/dist/namespaces/storage.d.ts +4 -3
- package/dist/namespaces/storage.js +26 -25
- package/dist/native-knowledge.d.ts +2 -1
- package/dist/offline-sync-impression-drain.d.ts +2 -1
- package/dist/offline-sync-impression-drain.js +4 -4
- package/dist/operator-doctor-corpus.d.ts +2 -1
- package/dist/operator-doctor-corpus.js +30 -29
- package/dist/operator-doctor-replica.d.ts +2 -1
- package/dist/operator-toolkit.d.ts +4 -3
- package/dist/operator-toolkit.js +53 -49
- package/dist/orchestration/compression-guideline-coordinator.d.ts +3 -2
- package/dist/orchestration/maintenance.d.ts +5 -4
- package/dist/orchestration/maintenance.js +39 -38
- package/dist/{orchestrator-DBUX-aAM.d.ts → orchestrator-ComHLm49.d.ts} +22 -11
- package/dist/orchestrator.d.ts +12 -10
- package/dist/orchestrator.js +224 -218
- package/dist/patterns-cli.d.ts +2 -1
- package/dist/{pipeline-BqgcOk1Z.d.ts → pipeline-CiYcqqhl.d.ts} +1 -1
- package/dist/policy-runtime.d.ts +2 -1
- package/dist/proactive-contention.d.ts +2 -1
- package/dist/provenance.d.ts +2 -1
- package/dist/provenance.js +2 -2
- package/dist/{public-http-CqtZ5kv3.d.ts → public-http-CuK4_Cb1.d.ts} +1 -1
- package/dist/qmd-preflight.d.ts +3 -2
- package/dist/{qmd-BD0ikV_Y.d.ts → qmd-qXD4vatU.d.ts} +1 -1
- package/dist/qmd-recall-cache.d.ts +2 -1
- package/dist/qmd.d.ts +3 -2
- package/dist/recall-concurrency-config.d.ts +2 -1
- package/dist/recall-disclosure-escalation.d.ts +2 -1
- package/dist/recall-explain-renderer.d.ts +2 -1
- package/dist/recall-explain-renderer.js +3 -3
- package/dist/recall-memory-map.d.ts +2 -1
- package/dist/recall-navigate-access.d.ts +2 -1
- package/dist/recall-navigate-access.js +2 -2
- package/dist/recall-navigate-disclosure.d.ts +2 -1
- package/dist/recall-navigate-disclosure.js +1 -1
- package/dist/recall-navigate.d.ts +2 -1
- package/dist/recall-navigate.js +2 -2
- package/dist/recall-planner-llm.d.ts +3 -1
- package/dist/recall-planner-llm.js +4 -2
- package/dist/recall-planner-llm.js.map +1 -1
- package/dist/recall-state-view-admission.d.ts +3 -2
- package/dist/recall-state-view-admission.js +9 -9
- package/dist/recall-state-view-anchors.d.ts +85 -0
- package/dist/recall-state-view-anchors.js +21 -0
- package/dist/recall-state-view-anchors.js.map +1 -0
- 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 +37 -1
- package/dist/recall-state-view.js +11 -3
- package/dist/recall-state.d.ts +2 -1
- package/dist/recall-tag-filter.d.ts +2 -1
- package/dist/recall-timings.d.ts +2 -1
- package/dist/recall-xray-cli.d.ts +2 -1
- package/dist/recall-xray-cli.js +4 -4
- package/dist/recall-xray-renderer.d.ts +2 -1
- package/dist/recall-xray-renderer.js +3 -3
- package/dist/recall-xray.d.ts +2 -1
- package/dist/recall-xray.js +2 -2
- package/dist/reconcile/cursor.d.ts +2 -1
- package/dist/reconcile/cursor.js +2 -2
- package/dist/reconcile/manifest.d.ts +2 -1
- package/dist/reconcile/manifest.js +4 -4
- package/dist/reconcile/plan.d.ts +2 -1
- package/dist/reconcile/plan.js +2 -2
- package/dist/replay/normalizers/chatgpt.d.ts +2 -1
- package/dist/replay/normalizers/claude.d.ts +2 -1
- package/dist/replay/normalizers/openclaw.d.ts +2 -1
- package/dist/replay/normalizers/shared.d.ts +2 -1
- package/dist/replay/runner.d.ts +2 -1
- package/dist/replay/types.d.ts +2 -1
- package/dist/replica-divergence.d.ts +2 -1
- package/dist/replica-peers-config.d.ts +2 -1
- package/dist/{resolution-OHJZG45O.js → resolution-4GG3QZRJ.js} +8 -8
- package/dist/resolution-4GG3QZRJ.js.map +1 -0
- package/dist/resolve-auth-token.d.ts +2 -1
- package/dist/resume-bundles.js +19 -16
- package/dist/retrieval-agents.d.ts +3 -2
- package/dist/retrieval-tiers.d.ts +2 -1
- package/dist/routing/engine.d.ts +2 -1
- package/dist/routing/store.d.ts +2 -1
- package/dist/salvage-envelope.d.ts +2 -1
- package/dist/salvage-envelope.js +2 -2
- package/dist/schemas.d.ts +160 -160
- package/dist/{scope-profiles-BIJMsd0B.d.ts → scope-profiles-BT9rqC3w.d.ts} +1 -1
- package/dist/search/embed-helper.d.ts +2 -1
- package/dist/search/factory.d.ts +2 -1
- package/dist/search/factory.js +5 -5
- package/dist/search/index.d.ts +2 -1
- package/dist/search/index.js +13 -13
- package/dist/search/lancedb-backend.d.ts +2 -1
- package/dist/search/meilisearch-backend.d.ts +2 -1
- package/dist/search/noop-backend.d.ts +2 -1
- package/dist/search/orama-backend.d.ts +2 -1
- package/dist/search/port.d.ts +2 -1
- package/dist/search/remote-backend.d.ts +2 -1
- package/dist/{semantic-consolidation-D7sJocll.d.ts → semantic-consolidation-CmZi7thY.d.ts} +1 -1
- package/dist/semantic-consolidation.d.ts +3 -2
- package/dist/semantic-consolidation.js +27 -26
- package/dist/semantic-rule-promotion.js +26 -25
- package/dist/semantic-rule-verifier.d.ts +2 -1
- package/dist/semantic-rule-verifier.js +26 -25
- package/dist/{service-fwgEngUj.d.ts → service-CLkA7AQB.d.ts} +2 -2
- package/dist/session-observer-bands.d.ts +2 -1
- package/dist/session-observer-state.d.ts +2 -1
- package/dist/shared-context/manager.d.ts +8 -7
- package/dist/signal.d.ts +2 -1
- package/dist/source-agent-qualifier.d.ts +2 -1
- package/dist/source-agent-qualifier.js +41 -40
- package/dist/standup/build.js +27 -26
- package/dist/{storage-Cbll3-Tk.d.ts → storage-wvX01lht.d.ts} +1 -1
- package/dist/storage.d.ts +3 -2
- package/dist/storage.js +25 -24
- package/dist/subject-config.d.ts +2 -1
- package/dist/subject-config.js +2 -2
- package/dist/summarizer.d.ts +2 -1
- package/dist/summarizer.js +6 -3
- package/dist/summary-snapshot.d.ts +2 -1
- package/dist/support-passport/index.d.ts +17 -15
- package/dist/support-passport/index.js +92 -89
- package/dist/temporal-supersession.d.ts +3 -2
- package/dist/temporal-timeline-recall.d.ts +2 -1
- package/dist/temporal-validity.d.ts +2 -1
- package/dist/threading.d.ts +2 -1
- package/dist/tier-migration.d.ts +3 -2
- package/dist/tier-routing.d.ts +2 -1
- package/dist/tier-routing.js +3 -3
- package/dist/{tier-stats-VK5PCO2L.js → tier-stats-LUSUUNU6.js} +4 -4
- package/dist/topics.d.ts +2 -1
- package/dist/transcript.d.ts +2 -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 +2 -1
- package/dist/transfer/export-okf.js +26 -25
- package/dist/transfer/types.d.ts +78 -78
- package/dist/trust-score-stage.d.ts +2 -1
- package/dist/trust-score.d.ts +2 -1
- package/dist/{types-48sPkWB0.d.ts → types-Cyr32ABj.d.ts} +3 -1
- package/dist/types.d.ts +2 -1
- package/dist/types.js +1 -1
- package/dist/utility-runtime.d.ts +2 -1
- package/dist/verified-recall.js +26 -25
- package/dist/who-knows-cli.d.ts +14 -12
- package/dist/who-knows-cli.js +27 -26
- package/dist/who-knows.d.ts +14 -12
- package/dist/who-knows.js +26 -25
- package/dist/write-envelope.d.ts +7 -1
- package/dist/write-envelope.js +1 -1
- package/package.json +2 -2
- package/src/access-boundary.ts +21 -6
- package/src/access-category-alias.test.ts +488 -51
- package/src/access-http.test.ts +249 -0
- package/src/access-http.ts +2 -0
- package/src/access-mcp.test.ts +2 -2
- package/src/access-observe-write-category.ts +25 -0
- package/src/access-observe-write-surface.ts +58 -57
- package/src/access-operations-batch.ts +28 -2
- package/src/access-operations.ts +6 -4
- package/src/access-schema.ts +106 -50
- package/src/access-service.ts +23 -9
- package/src/background-generation-config.ts +79 -0
- package/src/background-generation.test.ts +123 -0
- package/src/background-generation.ts +52 -0
- package/src/cli-fallback.ts +8 -2
- package/src/config.test.ts +172 -0
- package/src/config.ts +2 -43
- package/src/fallback-llm-codex-subscription.ts +168 -0
- package/src/fallback-llm.test.ts +46 -0
- package/src/fallback-llm.ts +60 -48
- package/src/index.ts +2 -16
- package/src/local-llm-config.ts +84 -0
- package/src/orchestration/recall-internal.ts +91 -74
- package/src/orchestration/recall-rerank-coordinator.ts +41 -4
- package/src/orchestration/recall-search-pipeline.ts +25 -18
- package/src/orchestration/recall-state-view-pipeline.test.ts +89 -0
- package/src/providers/codex-subscription.test.ts +804 -1
- package/src/providers/codex-subscription.ts +407 -65
- package/src/recall-rerank-coordinator.test.ts +153 -0
- package/src/recall-state-view-anchors.ts +163 -0
- package/src/recall-state-view-widen.ts +21 -7
- package/src/recall-state-view-zero-diff.test.ts +30 -0
- package/src/recall-state-view.test.ts +161 -0
- package/src/recall-state-view.ts +206 -35
- package/src/summarizer.ts +25 -0
- package/src/trust-score-recall-paths.test.ts +1 -1
- package/src/types.ts +3 -2
- package/src/write-envelope.ts +5 -0
- package/dist/chunk-255PC37A.js +0 -120
- package/dist/chunk-255PC37A.js.map +0 -1
- package/dist/chunk-3IXB77DA.js.map +0 -1
- package/dist/chunk-65RENJGB.js.map +0 -1
- package/dist/chunk-7MJBKZPU.js.map +0 -1
- package/dist/chunk-D2DIYEFW.js.map +0 -1
- package/dist/chunk-DOKKRZPH.js.map +0 -1
- package/dist/chunk-JLXWRQNR.js.map +0 -1
- package/dist/chunk-JR6PP7UM.js.map +0 -1
- package/dist/chunk-LSLCFCCQ.js.map +0 -1
- package/dist/chunk-OTPXEE6W.js.map +0 -1
- package/dist/chunk-RN3MVLW3.js.map +0 -1
- package/dist/chunk-SROIT6QY.js.map +0 -1
- package/dist/chunk-VELCIWJZ.js.map +0 -1
- package/dist/chunk-YEN4TREG.js.map +0 -1
- /package/dist/{capsule-crypto-YO5QJ6L3.js.map → access-observe-write-category.js.map} +0 -0
- /package/dist/{contradiction-scan-GVD4JJ7B.js.map → background-generation-config.js.map} +0 -0
- /package/dist/{graph-edge-decay-ROSUPDX3.js.map → background-generation.js.map} +0 -0
- /package/dist/{resolution-OHJZG45O.js.map → capsule-crypto-7FJQINUR.js.map} +0 -0
- /package/dist/{capsule-merge-ZCXUPLNJ.js.map → capsule-merge-IPG4IOFP.js.map} +0 -0
- /package/dist/{chunk-YHU5XUF4.js.map → chunk-27MKMTBY.js.map} +0 -0
- /package/dist/{chunk-TK4FHQRN.js.map → chunk-2J3V5QEO.js.map} +0 -0
- /package/dist/{chunk-BXLOS5AJ.js.map → chunk-2NLLXCJG.js.map} +0 -0
- /package/dist/{chunk-TFRDUD3M.js.map → chunk-2ZTDRNCS.js.map} +0 -0
- /package/dist/{chunk-PWPIERBM.js.map → chunk-37CAEC7E.js.map} +0 -0
- /package/dist/{chunk-X7BCM2NA.js.map → chunk-3EKVN2OP.js.map} +0 -0
- /package/dist/{chunk-S2ULTQZR.js.map → chunk-3N3PBBEH.js.map} +0 -0
- /package/dist/{chunk-XCF3SFHD.js.map → chunk-3NPNBVFR.js.map} +0 -0
- /package/dist/{chunk-JO5TQAKW.js.map → chunk-4BCHFSC7.js.map} +0 -0
- /package/dist/{chunk-Q6D7EUSQ.js.map → chunk-4JVQRFZD.js.map} +0 -0
- /package/dist/{chunk-YEDVOYL2.js.map → chunk-4RX5O34R.js.map} +0 -0
- /package/dist/{chunk-JMPYZJQN.js.map → chunk-4RZLTZVM.js.map} +0 -0
- /package/dist/{chunk-Q7JK6YEB.js.map → chunk-54NX5EG4.js.map} +0 -0
- /package/dist/{chunk-GWK7FEUL.js.map → chunk-5FAGCOZD.js.map} +0 -0
- /package/dist/{chunk-2PUE5P7C.js.map → chunk-5N4MZLEH.js.map} +0 -0
- /package/dist/{chunk-B2YKTE7P.js.map → chunk-5SPCMAUC.js.map} +0 -0
- /package/dist/{chunk-3OHISDDW.js.map → chunk-5U7K4W6K.js.map} +0 -0
- /package/dist/{chunk-CYEMS2PG.js.map → chunk-5YCNDC3C.js.map} +0 -0
- /package/dist/{chunk-PAAJWQH5.js.map → chunk-62D2PAAM.js.map} +0 -0
- /package/dist/{chunk-52II7PB6.js.map → chunk-645WOU5I.js.map} +0 -0
- /package/dist/{chunk-326KUXIR.js.map → chunk-6EHM2AV7.js.map} +0 -0
- /package/dist/{chunk-YM7YN37H.js.map → chunk-6ET2VII7.js.map} +0 -0
- /package/dist/{chunk-A2YQL2FF.js.map → chunk-6P4REYKL.js.map} +0 -0
- /package/dist/{chunk-7RKBPXY6.js.map → chunk-6YAIN5XJ.js.map} +0 -0
- /package/dist/{chunk-2L5FSNPC.js.map → chunk-A7GQBJP5.js.map} +0 -0
- /package/dist/{chunk-UYVXIY6C.js.map → chunk-AAZEKXUP.js.map} +0 -0
- /package/dist/{chunk-IQZ6ISFX.js.map → chunk-AECJY3GJ.js.map} +0 -0
- /package/dist/{chunk-76DRU7C4.js.map → chunk-AENM6GKU.js.map} +0 -0
- /package/dist/{chunk-KTRXQQFN.js.map → chunk-B36GUU6T.js.map} +0 -0
- /package/dist/{chunk-TLHNF6GA.js.map → chunk-BV4ZKIZH.js.map} +0 -0
- /package/dist/{chunk-ZWEZXVYH.js.map → chunk-CEO4DONG.js.map} +0 -0
- /package/dist/{chunk-ZEPVWLCN.js.map → chunk-CZTPU65V.js.map} +0 -0
- /package/dist/{chunk-TRU6JBOI.js.map → chunk-D545Z7UH.js.map} +0 -0
- /package/dist/{chunk-6E5GYDIE.js.map → chunk-DGS34QSY.js.map} +0 -0
- /package/dist/{chunk-6Z3WW2MW.js.map → chunk-ENBPQEVU.js.map} +0 -0
- /package/dist/{chunk-PNEDMJ53.js.map → chunk-F4EHXVP7.js.map} +0 -0
- /package/dist/{chunk-JPKZTCWZ.js.map → chunk-FNHLI2RE.js.map} +0 -0
- /package/dist/{chunk-M3MYMWXG.js.map → chunk-FXHOZGSE.js.map} +0 -0
- /package/dist/{chunk-SAKA6PPL.js.map → chunk-GAS7KYC7.js.map} +0 -0
- /package/dist/{chunk-2AR5JFD7.js.map → chunk-GG5FHZJJ.js.map} +0 -0
- /package/dist/{chunk-WS3WNLST.js.map → chunk-GI4ZBWPQ.js.map} +0 -0
- /package/dist/{chunk-JYR4LH76.js.map → chunk-GMIQV6DD.js.map} +0 -0
- /package/dist/{chunk-WIKO4SCR.js.map → chunk-H3TKENU4.js.map} +0 -0
- /package/dist/{chunk-ZLN7AROH.js.map → chunk-HIP6DKJJ.js.map} +0 -0
- /package/dist/{chunk-SF6RFI5Z.js.map → chunk-HWLIMQE2.js.map} +0 -0
- /package/dist/{chunk-JZYECQWN.js.map → chunk-IL6ODG6M.js.map} +0 -0
- /package/dist/{chunk-GNR6YEWZ.js.map → chunk-IQEJIOEU.js.map} +0 -0
- /package/dist/{chunk-BICNRVEC.js.map → chunk-IWO6QXWJ.js.map} +0 -0
- /package/dist/{chunk-42DJ235G.js.map → chunk-J272ODKJ.js.map} +0 -0
- /package/dist/{chunk-R3TLVTWW.js.map → chunk-JDX2OA4R.js.map} +0 -0
- /package/dist/{chunk-G5MO3VQA.js.map → chunk-JKKII6GX.js.map} +0 -0
- /package/dist/{chunk-L5OXE4PX.js.map → chunk-JTQR6L2N.js.map} +0 -0
- /package/dist/{chunk-VDX2J7OX.js.map → chunk-KQAFEZQX.js.map} +0 -0
- /package/dist/{chunk-AKE4GGQ3.js.map → chunk-KQW3YGEN.js.map} +0 -0
- /package/dist/{chunk-LMMQKZK3.js.map → chunk-L63GFNKL.js.map} +0 -0
- /package/dist/{chunk-BRZWWUCJ.js.map → chunk-LMLGBG6H.js.map} +0 -0
- /package/dist/{chunk-CQ7SSBO4.js.map → chunk-M6HBPLBA.js.map} +0 -0
- /package/dist/{chunk-3YMDY3ZF.js.map → chunk-MUTVRKKY.js.map} +0 -0
- /package/dist/{chunk-FCFAYMTU.js.map → chunk-NXGSONWM.js.map} +0 -0
- /package/dist/{chunk-4WGAMREC.js.map → chunk-O4M4BDIJ.js.map} +0 -0
- /package/dist/{chunk-5SYI2F47.js.map → chunk-O76F5QPP.js.map} +0 -0
- /package/dist/{chunk-57GDHV2D.js.map → chunk-PCOVEDPK.js.map} +0 -0
- /package/dist/{chunk-PPTOAHTZ.js.map → chunk-PGAB2V53.js.map} +0 -0
- /package/dist/{chunk-HHDTBYDJ.js.map → chunk-Q432REND.js.map} +0 -0
- /package/dist/{chunk-XAITGGX5.js.map → chunk-Q4AUIFUA.js.map} +0 -0
- /package/dist/{chunk-5LLQAUMI.js.map → chunk-Q7CLGFA7.js.map} +0 -0
- /package/dist/{chunk-KUK56OPR.js.map → chunk-QHT7MOUF.js.map} +0 -0
- /package/dist/{chunk-W6IJMWTZ.js.map → chunk-QTQ6XKGT.js.map} +0 -0
- /package/dist/{chunk-FLLORID2.js.map → chunk-RLJHJQUY.js.map} +0 -0
- /package/dist/{chunk-353KGBKY.js.map → chunk-RW4QNB4J.js.map} +0 -0
- /package/dist/{chunk-GWQVMKUJ.js.map → chunk-SCXURCVT.js.map} +0 -0
- /package/dist/{chunk-FQXJAC3T.js.map → chunk-SGUDMW2K.js.map} +0 -0
- /package/dist/{chunk-LSDEIZ76.js.map → chunk-TA4C3XB7.js.map} +0 -0
- /package/dist/{chunk-YIZ2EUUL.js.map → chunk-TNZNSMVJ.js.map} +0 -0
- /package/dist/{chunk-CIYUWSMZ.js.map → chunk-TRLOFIQC.js.map} +0 -0
- /package/dist/{chunk-TL7NLM2L.js.map → chunk-TSP5WH72.js.map} +0 -0
- /package/dist/{chunk-3K6UFW5B.js.map → chunk-UHRZ324M.js.map} +0 -0
- /package/dist/{chunk-A5UQ52YQ.js.map → chunk-UZZ7SQT3.js.map} +0 -0
- /package/dist/{chunk-GHX5PNXW.js.map → chunk-VBSNUH4J.js.map} +0 -0
- /package/dist/{chunk-MR6LQVZ5.js.map → chunk-VJIE4D2I.js.map} +0 -0
- /package/dist/{chunk-2JGGZICG.js.map → chunk-WBM2MVBK.js.map} +0 -0
- /package/dist/{chunk-CD3C4BJN.js.map → chunk-WIWLX65T.js.map} +0 -0
- /package/dist/{chunk-GDDSXVWR.js.map → chunk-X4TD4O2F.js.map} +0 -0
- /package/dist/{chunk-DQEMWVMT.js.map → chunk-X7Y7WX73.js.map} +0 -0
- /package/dist/{chunk-FPQDZCUX.js.map → chunk-XH3HGI2N.js.map} +0 -0
- /package/dist/{chunk-C6KRO3SU.js.map → chunk-XVDZFTN5.js.map} +0 -0
- /package/dist/{chunk-3SL52JKD.js.map → chunk-XVZA6VXC.js.map} +0 -0
- /package/dist/{chunk-BLHX5FQW.js.map → chunk-YUW66UAH.js.map} +0 -0
- /package/dist/{chunk-DOQLHCSS.js.map → chunk-ZBW7A667.js.map} +0 -0
- /package/dist/{chunk-4DPDIOVA.js.map → chunk-ZEGL7YCC.js.map} +0 -0
- /package/dist/{chunk-VVX5PZFS.js.map → chunk-ZHXSOMYH.js.map} +0 -0
- /package/dist/{chunk-GCBIXUPT.js.map → chunk-ZMWSYUUL.js.map} +0 -0
- /package/dist/{chunk-X2QPKLPL.js.map → chunk-ZZUVBZL2.js.map} +0 -0
- /package/dist/{first-start-migration-GZ45G5FS.js.map → first-start-migration-ZWMV5CX4.js.map} +0 -0
- /package/dist/{tier-stats-VK5PCO2L.js.map → tier-stats-LUSUUNU6.js.map} +0 -0
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* benchmark runner has claimed it first.
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
-
import { mkdir, mkdtemp, readFile, rm } from "node:fs/promises";
|
|
18
|
+
import { mkdir, mkdtemp, readFile, rm, stat } from "node:fs/promises";
|
|
19
19
|
import os from "node:os";
|
|
20
20
|
import path from "node:path";
|
|
21
21
|
|
|
@@ -26,7 +26,7 @@ import type {
|
|
|
26
26
|
CodexCliFallbackResult,
|
|
27
27
|
CodexCliFallbackRunner,
|
|
28
28
|
} from "../cli-fallback.js";
|
|
29
|
-
import { isCodexCliFallbackRunnerRegistered, normalizeCodexCliTimeoutMs, setCodexCliFallbackRunnerForProcess } from "../cli-fallback.js";
|
|
29
|
+
import { getCodexCliFallbackRunnerForProcess, isCodexCliFallbackRunnerRegistered, normalizeCodexCliTimeoutMs, setCodexCliFallbackRunnerForProcess } from "../cli-fallback.js";
|
|
30
30
|
import { log } from "../logger.js";
|
|
31
31
|
import { launchProcess } from "../runtime/child-process.js";
|
|
32
32
|
import type { CodexCliReasoningEffort, ModelProviderConfig } from "../types.js";
|
|
@@ -43,6 +43,12 @@ const LOGIN_STATUS_TIMEOUT_MS = 10_000;
|
|
|
43
43
|
const LOGIN_STATUS_CACHE_TTL_MS = 10 * 60_000;
|
|
44
44
|
const STDIO_LIMIT = 64_000;
|
|
45
45
|
const OUTPUT_SUMMARY_LIMIT = 500;
|
|
46
|
+
/**
|
|
47
|
+
* Env keys whose value is a filesystem path. Relative values resolve against
|
|
48
|
+
* the original process cwd before either child launches, because the exec
|
|
49
|
+
* child runs with cwd = the ephemeral workspace (same rule as executables).
|
|
50
|
+
*/
|
|
51
|
+
const PATH_BEARING_ENV_KEYS: Readonly<Record<string, true>> = Object.freeze({ CODEX_HOME: true, HOME: true, USERPROFILE: true });
|
|
46
52
|
|
|
47
53
|
/**
|
|
48
54
|
* Environment keys forwarded to the codex child. Everything else — including
|
|
@@ -171,11 +177,13 @@ export interface CodexSubscriptionRunnerDeps {
|
|
|
171
177
|
/** Runs `codex exec`. Default: isolated subprocess via launchProcess. */
|
|
172
178
|
runCodexExec?: (request: CodexSubscriptionExecRequest) => Promise<CodexSubscriptionExecResult>;
|
|
173
179
|
/** Runs `codex login status`. Default: isolated subprocess. Receives the
|
|
174
|
-
* login-status timeout budget (capped by the request deadline)
|
|
180
|
+
* login-status timeout budget (capped by the request deadline) and the
|
|
181
|
+
* shared-check abort signal (fires when the last waiter leaves). */
|
|
175
182
|
runLoginStatus?: (
|
|
176
183
|
executable: string,
|
|
177
184
|
env: NodeJS.ProcessEnv,
|
|
178
|
-
timeoutMs: number
|
|
185
|
+
timeoutMs: number,
|
|
186
|
+
signal?: AbortSignal
|
|
179
187
|
) => Promise<{ status: number | null; stdout: string; stderr: string }>;
|
|
180
188
|
/** Environment the isolated child env is filtered from. Tests inject fakes. */
|
|
181
189
|
env?: NodeJS.ProcessEnv;
|
|
@@ -190,12 +198,70 @@ interface CommandOutput {
|
|
|
190
198
|
stderr: string;
|
|
191
199
|
}
|
|
192
200
|
|
|
193
|
-
|
|
201
|
+
interface LoginStatusCacheEntry {
|
|
202
|
+
at: number;
|
|
203
|
+
promise: Promise<void>;
|
|
204
|
+
/** Auth-store fingerprint at check time; a mismatch invalidates the entry. */
|
|
205
|
+
fingerprint: string | null;
|
|
206
|
+
/** Live waiters. The in-flight check aborts when the last waiter leaves. */
|
|
207
|
+
waiters: number;
|
|
208
|
+
settled: boolean;
|
|
209
|
+
controller: AbortController;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
const loginStatusCache = new Map<string, LoginStatusCacheEntry>();
|
|
213
|
+
const childrenByRunner = new WeakMap<CodexCliFallbackRunner, Set<number>>();
|
|
214
|
+
const runnerByOwner = new WeakMap<object, CodexCliFallbackRunner>();
|
|
215
|
+
const shutdownByRunner = new WeakMap<CodexCliFallbackRunner, AbortController>();
|
|
216
|
+
let defaultRegisteredRunner: CodexCliFallbackRunner | undefined;
|
|
194
217
|
let coreRunnerRegistered = false;
|
|
195
218
|
|
|
196
219
|
export function createCodexSubscriptionRunner(deps: CodexSubscriptionRunnerDeps = {}): CodexCliFallbackRunner {
|
|
197
220
|
const envSource = deps.env ?? process.env;
|
|
198
|
-
|
|
221
|
+
const children = new Set<number>();
|
|
222
|
+
const shutdown = new AbortController();
|
|
223
|
+
const runnerDeps: CodexSubscriptionRunnerDeps = {
|
|
224
|
+
...deps,
|
|
225
|
+
runCodexExec: deps.runCodexExec ?? ((request) => runCodexExecSubprocess(request, children)),
|
|
226
|
+
runLoginStatus:
|
|
227
|
+
deps.runLoginStatus ??
|
|
228
|
+
((executable, env, timeoutMs, signal) =>
|
|
229
|
+
runLoginStatusSubprocess(executable, env, timeoutMs, signal, children)),
|
|
230
|
+
};
|
|
231
|
+
const runner: CodexCliFallbackRunner = (request) => {
|
|
232
|
+
const signal = request.options.signal
|
|
233
|
+
? AbortSignal.any([request.options.signal, shutdown.signal])
|
|
234
|
+
: shutdown.signal;
|
|
235
|
+
if (signal.aborted) {
|
|
236
|
+
return Promise.reject(abortErrorOf(signal));
|
|
237
|
+
}
|
|
238
|
+
return runCodexSubscriptionRequest(
|
|
239
|
+
{ ...request, options: { ...request.options, signal } },
|
|
240
|
+
runnerDeps,
|
|
241
|
+
envSource,
|
|
242
|
+
);
|
|
243
|
+
};
|
|
244
|
+
childrenByRunner.set(runner, children);
|
|
245
|
+
shutdownByRunner.set(runner, shutdown);
|
|
246
|
+
return runner;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/** One runner per owning runtime/config object so teardown cannot cross instances. */
|
|
250
|
+
export function getCodexSubscriptionRunnerForOwner(owner: object): CodexCliFallbackRunner {
|
|
251
|
+
let runner = runnerByOwner.get(owner);
|
|
252
|
+
const shutdown = runner ? shutdownByRunner.get(runner) : undefined;
|
|
253
|
+
if (!runner || shutdown?.signal.aborted) {
|
|
254
|
+
runner = createCodexSubscriptionRunner();
|
|
255
|
+
runnerByOwner.set(owner, runner);
|
|
256
|
+
}
|
|
257
|
+
return runner;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/** Shutdown signal for the owning runner, if this function is a core runner. */
|
|
261
|
+
export function getCodexSubscriptionShutdownSignal(
|
|
262
|
+
runner: CodexCliFallbackRunner,
|
|
263
|
+
): AbortSignal | undefined {
|
|
264
|
+
return shutdownByRunner.get(runner)?.signal;
|
|
199
265
|
}
|
|
200
266
|
|
|
201
267
|
/**
|
|
@@ -207,11 +273,51 @@ export function createCodexSubscriptionRunner(deps: CodexSubscriptionRunnerDeps
|
|
|
207
273
|
*/
|
|
208
274
|
export function ensureCodexSubscriptionRunnerRegistered(deps: CodexSubscriptionRunnerDeps = {}): boolean {
|
|
209
275
|
if (isCodexCliFallbackRunnerRegistered()) return false;
|
|
210
|
-
|
|
276
|
+
defaultRegisteredRunner = createCodexSubscriptionRunner(deps);
|
|
277
|
+
setCodexCliFallbackRunnerForProcess(defaultRegisteredRunner);
|
|
211
278
|
coreRunnerRegistered = true;
|
|
212
279
|
return true;
|
|
213
280
|
}
|
|
214
281
|
|
|
282
|
+
/** True when the process seam still holds the core default runner. */
|
|
283
|
+
export function isDefaultRegisteredCodexSubscriptionRunner(): boolean {
|
|
284
|
+
return defaultRegisteredRunner !== undefined
|
|
285
|
+
&& getCodexCliFallbackRunnerForProcess() === defaultRegisteredRunner;
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
/** Host shutdown hook: terminate this runtime's detached Codex children. Does not exit. */
|
|
289
|
+
export function terminateActiveCodexSubscriptionChildren(
|
|
290
|
+
signal: NodeJS.Signals = "SIGTERM",
|
|
291
|
+
runner?: CodexCliFallbackRunner,
|
|
292
|
+
): void {
|
|
293
|
+
const target = runner ?? defaultRegisteredRunner;
|
|
294
|
+
if (!target) return;
|
|
295
|
+
const shutdown = shutdownByRunner.get(target);
|
|
296
|
+
if (shutdown && !shutdown.signal.aborted) {
|
|
297
|
+
shutdown.abort(new DOMException("The operation was aborted.", "AbortError"));
|
|
298
|
+
}
|
|
299
|
+
const pids = childrenByRunner.get(target);
|
|
300
|
+
if (!pids) return;
|
|
301
|
+
for (const pid of pids) {
|
|
302
|
+
terminateCodexChildPid(pid, signal);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
/** SIGTERM now, SIGKILL after a bound, even if the caller later awaits drain. */
|
|
307
|
+
export function beginCodexSubscriptionShutdown(
|
|
308
|
+
runner?: CodexCliFallbackRunner,
|
|
309
|
+
forceKillAfterMs = 1_000,
|
|
310
|
+
): () => void {
|
|
311
|
+
terminateActiveCodexSubscriptionChildren("SIGTERM", runner);
|
|
312
|
+
const timer = setTimeout(() => {
|
|
313
|
+
terminateActiveCodexSubscriptionChildren("SIGKILL", runner);
|
|
314
|
+
}, forceKillAfterMs);
|
|
315
|
+
timer.unref();
|
|
316
|
+
return () => {
|
|
317
|
+
clearTimeout(timer);
|
|
318
|
+
terminateActiveCodexSubscriptionChildren("SIGKILL", runner);
|
|
319
|
+
};
|
|
320
|
+
}
|
|
215
321
|
async function runCodexSubscriptionRequest(
|
|
216
322
|
request: CodexCliFallbackRequest,
|
|
217
323
|
deps: CodexSubscriptionRunnerDeps,
|
|
@@ -230,7 +336,15 @@ async function runCodexSubscriptionRequest(
|
|
|
230
336
|
// consumes the same call/provider timeout budget, it is not additive.
|
|
231
337
|
const now = deps.now ?? Date.now;
|
|
232
338
|
const deadlineStartedAt = now();
|
|
233
|
-
|
|
339
|
+
if (request.options.signal?.aborted) {
|
|
340
|
+
throw abortErrorOf(request.options.signal);
|
|
341
|
+
}
|
|
342
|
+
await assertSubscriptionLogin(executable, env, deps, {
|
|
343
|
+
loginStatusTimeoutMs: Math.min(LOGIN_STATUS_TIMEOUT_MS, timeoutMs),
|
|
344
|
+
callerTimeoutMs: timeoutMs,
|
|
345
|
+
deadlineStartedAt,
|
|
346
|
+
signal: request.options.signal,
|
|
347
|
+
});
|
|
234
348
|
|
|
235
349
|
if (request.options.signal?.aborted) {
|
|
236
350
|
throw abortErrorOf(request.options.signal);
|
|
@@ -247,7 +361,7 @@ async function runCodexSubscriptionRequest(
|
|
|
247
361
|
const outputPath = path.join(tempDir, "last-message.txt");
|
|
248
362
|
await mkdir(workspacePath, { recursive: true });
|
|
249
363
|
|
|
250
|
-
const runCodexExec = deps.runCodexExec
|
|
364
|
+
const runCodexExec = deps.runCodexExec!;
|
|
251
365
|
const result = await runCodexExec({
|
|
252
366
|
executable,
|
|
253
367
|
args: buildExecArgs(request.modelId, config, workspacePath, outputPath),
|
|
@@ -259,12 +373,19 @@ async function runCodexSubscriptionRequest(
|
|
|
259
373
|
signal: request.options.signal,
|
|
260
374
|
});
|
|
261
375
|
|
|
376
|
+
if (result.status !== 0) {
|
|
377
|
+
const failure = execFailureError(result, remainingTimeoutMs, executable, env);
|
|
378
|
+
if (failure instanceof CodexSubscriptionTimeoutError) {
|
|
379
|
+
throw failure;
|
|
380
|
+
}
|
|
381
|
+
if (request.options.signal?.aborted) {
|
|
382
|
+
throw abortErrorOf(request.options.signal);
|
|
383
|
+
}
|
|
384
|
+
throw failure;
|
|
385
|
+
}
|
|
262
386
|
if (request.options.signal?.aborted) {
|
|
263
387
|
throw abortErrorOf(request.options.signal);
|
|
264
388
|
}
|
|
265
|
-
if (result.status !== 0) {
|
|
266
|
-
throw execFailureError(result, remainingTimeoutMs, executable, env);
|
|
267
|
-
}
|
|
268
389
|
|
|
269
390
|
const content = result.outputText.trim();
|
|
270
391
|
if (content.length === 0) {
|
|
@@ -285,7 +406,7 @@ async function runCodexSubscriptionRequest(
|
|
|
285
406
|
* configured apiKey is a configuration mistake — reject it without echoing
|
|
286
407
|
* the value.
|
|
287
408
|
*/
|
|
288
|
-
function assertNoApiKeyConfig(config: CodexCliFallbackConfig): void {
|
|
409
|
+
export function assertNoApiKeyConfig(config: CodexCliFallbackConfig): void {
|
|
289
410
|
if (config.apiKey !== undefined && config.apiKey !== "") {
|
|
290
411
|
throw new CodexSubscriptionConfigError(
|
|
291
412
|
`${CODEX_SUBSCRIPTION_PROVIDER_ID} does not accept apiKey configuration: it authenticates through the Codex CLI login. Remove the apiKey field and run \`codex login\` with a ChatGPT account instead.`
|
|
@@ -313,64 +434,205 @@ function buildIsolatedEnv(source: NodeJS.ProcessEnv): NodeJS.ProcessEnv {
|
|
|
313
434
|
const env: NodeJS.ProcessEnv = {};
|
|
314
435
|
for (const [key, value] of Object.entries(source)) {
|
|
315
436
|
if (value !== undefined && isAllowedEnvKey(key)) {
|
|
316
|
-
env[key] =
|
|
437
|
+
env[key] = PATH_BEARING_ENV_KEYS[key.toUpperCase()] === true
|
|
438
|
+
? normalizePathEnvValue(value)
|
|
439
|
+
: value;
|
|
317
440
|
}
|
|
318
441
|
}
|
|
319
442
|
return env;
|
|
320
443
|
}
|
|
321
444
|
|
|
445
|
+
/**
|
|
446
|
+
* The exec child runs with cwd = the ephemeral workspace while the login
|
|
447
|
+
* child runs with cwd = this process, so a relative HOME/CODEX_HOME would
|
|
448
|
+
* resolve differently per child. Anchor both to the original process cwd.
|
|
449
|
+
*/
|
|
450
|
+
function normalizePathEnvValue(value: string): string {
|
|
451
|
+
const trimmed = value.trim();
|
|
452
|
+
if (trimmed.length === 0) {
|
|
453
|
+
return value;
|
|
454
|
+
}
|
|
455
|
+
const expanded = expandTildePath(trimmed);
|
|
456
|
+
return path.isAbsolute(expanded) ? expanded : path.resolve(expanded);
|
|
457
|
+
}
|
|
322
458
|
function isAllowedEnvKey(key: string): boolean {
|
|
323
459
|
const normalized = key.toUpperCase();
|
|
324
460
|
return CODEX_RUNTIME_ENV_ALLOWLIST[normalized] === true || normalized.startsWith("LC_");
|
|
325
461
|
}
|
|
326
462
|
|
|
463
|
+
interface LoginCheckContext {
|
|
464
|
+
/** Budget for the login-status subprocess itself. */
|
|
465
|
+
loginStatusTimeoutMs: number;
|
|
466
|
+
/** The caller's overall effective deadline (login + exec). */
|
|
467
|
+
callerTimeoutMs: number;
|
|
468
|
+
deadlineStartedAt: number;
|
|
469
|
+
signal?: AbortSignal;
|
|
470
|
+
}
|
|
471
|
+
|
|
327
472
|
/**
|
|
328
473
|
* Verifies the operator's Codex subscription login via `codex login status`.
|
|
329
474
|
* Success is cached briefly; failures are never cached so a re-login takes
|
|
330
|
-
* effect on the next request.
|
|
475
|
+
* effect on the next request. A cached success is also invalidated when the
|
|
476
|
+
* auth store changes on disk (e.g. another process switches the same Codex
|
|
477
|
+
* home from a ChatGPT login to an API key), so the cache can never mask a
|
|
478
|
+
* later non-subscription login mode.
|
|
331
479
|
*/
|
|
332
480
|
async function assertSubscriptionLogin(
|
|
333
481
|
executable: string,
|
|
334
482
|
env: NodeJS.ProcessEnv,
|
|
335
483
|
deps: CodexSubscriptionRunnerDeps,
|
|
336
|
-
|
|
484
|
+
ctx: LoginCheckContext
|
|
337
485
|
): Promise<void> {
|
|
338
486
|
const now = deps.now ?? Date.now;
|
|
339
|
-
const cacheKey = `${executable}\0${env
|
|
487
|
+
const cacheKey = `${executable}\0${resolveCodexAuthHome(env) ?? ""}`;
|
|
340
488
|
const cached = loginStatusCache.get(cacheKey);
|
|
341
489
|
if (cached && now() - cached.at < LOGIN_STATUS_CACHE_TTL_MS) {
|
|
342
|
-
await cached.
|
|
343
|
-
|
|
344
|
-
}
|
|
345
|
-
const promise = (async () => {
|
|
346
|
-
const runLoginStatus = deps.runLoginStatus ?? runLoginStatusSubprocess;
|
|
347
|
-
const result = await runLoginStatus(executable, env, loginStatusTimeoutMs);
|
|
348
|
-
const output = `${result.stdout}\n${result.stderr}`.trim();
|
|
349
|
-
if (TIMEOUT_PATTERN.test(output)) {
|
|
350
|
-
// A login-status subprocess timeout is a deadline expiry, not an auth
|
|
351
|
-
// failure — never report it as "unauthenticated".
|
|
352
|
-
throw new CodexSubscriptionTimeoutError(loginStatusTimeoutMs);
|
|
353
|
-
}
|
|
354
|
-
if (result.status === 0 && LOGIN_OK_PATTERN.test(output)) {
|
|
490
|
+
if (!cached.settled || (await authStoreFingerprint(env)) === cached.fingerprint) {
|
|
491
|
+
await waitForLoginEntry(cached, cacheKey, ctx, now);
|
|
355
492
|
return;
|
|
356
493
|
}
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
throw
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
)
|
|
364
|
-
|
|
365
|
-
|
|
494
|
+
}
|
|
495
|
+
loginStatusCache.delete(cacheKey);
|
|
496
|
+
if (ctx.signal?.aborted) {
|
|
497
|
+
throw abortErrorOf(ctx.signal);
|
|
498
|
+
}
|
|
499
|
+
const entry: LoginStatusCacheEntry = {
|
|
500
|
+
at: now(),
|
|
501
|
+
fingerprint: null,
|
|
502
|
+
waiters: 0,
|
|
503
|
+
settled: false,
|
|
504
|
+
controller: new AbortController(),
|
|
505
|
+
promise: Promise.resolve(undefined),
|
|
506
|
+
};
|
|
507
|
+
entry.promise = runLoginStatusCheck(executable, env, deps, ctx, entry);
|
|
508
|
+
entry.promise.then(
|
|
509
|
+
() => {
|
|
510
|
+
entry.settled = true;
|
|
511
|
+
},
|
|
512
|
+
() => {
|
|
513
|
+
entry.settled = true;
|
|
514
|
+
if (loginStatusCache.get(cacheKey) === entry) {
|
|
515
|
+
loginStatusCache.delete(cacheKey);
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
);
|
|
519
|
+
loginStatusCache.set(cacheKey, entry);
|
|
520
|
+
await waitForLoginEntry(entry, cacheKey, ctx, now);
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
async function runLoginStatusCheck(
|
|
524
|
+
executable: string,
|
|
525
|
+
env: NodeJS.ProcessEnv,
|
|
526
|
+
deps: CodexSubscriptionRunnerDeps,
|
|
527
|
+
ctx: LoginCheckContext,
|
|
528
|
+
entry: LoginStatusCacheEntry
|
|
529
|
+
): Promise<void> {
|
|
530
|
+
const runLoginStatus = deps.runLoginStatus!;
|
|
531
|
+
const result = await runLoginStatus(executable, env, ctx.loginStatusTimeoutMs, entry.controller.signal);
|
|
532
|
+
const output = `${result.stdout}\n${result.stderr}`.trim();
|
|
533
|
+
if (TIMEOUT_PATTERN.test(output)) {
|
|
534
|
+
// A login-status subprocess timeout is a deadline expiry, not an auth
|
|
535
|
+
// failure — never report it as "unauthenticated".
|
|
536
|
+
throw new CodexSubscriptionTimeoutError(ctx.loginStatusTimeoutMs);
|
|
537
|
+
}
|
|
538
|
+
if (result.status === 0 && LOGIN_OK_PATTERN.test(output)) {
|
|
539
|
+
entry.fingerprint = await authStoreFingerprint(env);
|
|
540
|
+
return;
|
|
541
|
+
}
|
|
542
|
+
const apiKeyNote = LOGIN_API_KEY_PATTERN.test(output)
|
|
543
|
+
? " The CLI currently reports an API-key login; subscription extraction needs a ChatGPT login."
|
|
544
|
+
: "";
|
|
545
|
+
throw new CodexSubscriptionAuthError(
|
|
546
|
+
"unauthenticated",
|
|
547
|
+
`codex-subscription: no ChatGPT-backed Codex login found. Run \`codex login\` and choose the ChatGPT account option, then retry.${apiKeyNote}`
|
|
548
|
+
);
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
/**
|
|
552
|
+
* Waits on a shared login check with this caller's own budget. A deadline or
|
|
553
|
+
* caller abort rejects immediately — without cancelling the shared check
|
|
554
|
+
* while other callers still wait on it. When the LAST waiter leaves an
|
|
555
|
+
* in-flight check, the subprocess is aborted and the entry dropped so a later
|
|
556
|
+
* caller starts a fresh check.
|
|
557
|
+
*/
|
|
558
|
+
async function waitForLoginEntry(
|
|
559
|
+
entry: LoginStatusCacheEntry,
|
|
560
|
+
cacheKey: string,
|
|
561
|
+
ctx: LoginCheckContext,
|
|
562
|
+
now: () => number
|
|
563
|
+
): Promise<void> {
|
|
564
|
+
const remainingMs = ctx.callerTimeoutMs - (now() - ctx.deadlineStartedAt);
|
|
565
|
+
if (remainingMs <= 0) {
|
|
566
|
+
throw new CodexSubscriptionTimeoutError(ctx.callerTimeoutMs);
|
|
567
|
+
}
|
|
568
|
+
const signal = ctx.signal;
|
|
569
|
+
let rejectOnAbort!: (reason?: unknown) => void;
|
|
570
|
+
const abortWait = new Promise<never>((_resolve, reject) => {
|
|
571
|
+
rejectOnAbort = reject;
|
|
572
|
+
});
|
|
573
|
+
// Identity matters: the same reference is removed in the finally below.
|
|
574
|
+
const onAbort = (): void => {
|
|
575
|
+
if (signal === undefined) return;
|
|
576
|
+
rejectOnAbort(abortErrorOf(signal));
|
|
577
|
+
};
|
|
578
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
579
|
+
entry.waiters++;
|
|
580
|
+
// The deadline timer intentionally holds the event loop: this caller's
|
|
581
|
+
// await is backed by nothing else while the shared check is in flight.
|
|
582
|
+
let deadlineTimer: ReturnType<typeof setTimeout> | undefined;
|
|
366
583
|
try {
|
|
367
|
-
await
|
|
584
|
+
await Promise.race([
|
|
585
|
+
entry.promise,
|
|
586
|
+
abortWait,
|
|
587
|
+
new Promise<never>((_resolve, reject) => {
|
|
588
|
+
deadlineTimer = setTimeout(
|
|
589
|
+
() => reject(new CodexSubscriptionTimeoutError(ctx.callerTimeoutMs)),
|
|
590
|
+
remainingMs
|
|
591
|
+
);
|
|
592
|
+
}),
|
|
593
|
+
]);
|
|
368
594
|
} catch (err) {
|
|
369
|
-
|
|
595
|
+
if (signal?.aborted) {
|
|
596
|
+
throw abortErrorOf(signal);
|
|
597
|
+
}
|
|
370
598
|
throw err;
|
|
599
|
+
} finally {
|
|
600
|
+
clearTimeout(deadlineTimer);
|
|
601
|
+
signal?.removeEventListener("abort", onAbort);
|
|
602
|
+
entry.waiters--;
|
|
603
|
+
if (entry.waiters <= 0 && !entry.settled) {
|
|
604
|
+
entry.controller.abort();
|
|
605
|
+
if (loginStatusCache.get(cacheKey) === entry) {
|
|
606
|
+
loginStatusCache.delete(cacheKey);
|
|
607
|
+
}
|
|
608
|
+
}
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
/**
|
|
613
|
+
* `mtimeMs:size` of the Codex auth store, read as metadata only — the
|
|
614
|
+
* provider never reads the store's contents. A change between the cached
|
|
615
|
+
* check and now invalidates the cached login mode.
|
|
616
|
+
*/
|
|
617
|
+
async function authStoreFingerprint(env: NodeJS.ProcessEnv): Promise<string | null> {
|
|
618
|
+
const home = resolveCodexAuthHome(env);
|
|
619
|
+
if (!home) {
|
|
620
|
+
return null;
|
|
621
|
+
}
|
|
622
|
+
try {
|
|
623
|
+
const stats = await stat(path.join(home, "auth.json"));
|
|
624
|
+
return `${stats.mtimeMs}:${stats.size}`;
|
|
625
|
+
} catch {
|
|
626
|
+
return null;
|
|
371
627
|
}
|
|
372
628
|
}
|
|
373
629
|
|
|
630
|
+
function resolveCodexAuthHome(env: NodeJS.ProcessEnv): string | undefined {
|
|
631
|
+
if (env.CODEX_HOME) return env.CODEX_HOME;
|
|
632
|
+
const profile = env.HOME ?? env.USERPROFILE;
|
|
633
|
+
return profile ? path.join(profile, ".codex") : undefined;
|
|
634
|
+
}
|
|
635
|
+
|
|
374
636
|
/**
|
|
375
637
|
* Args mirror the bench provider: fully sandboxed, ephemeral, no tools/hooks/
|
|
376
638
|
* plugins/memories — extraction must behave as a plain completion endpoint.
|
|
@@ -485,6 +747,12 @@ function execFailureError(
|
|
|
485
747
|
env: NodeJS.ProcessEnv
|
|
486
748
|
): Error {
|
|
487
749
|
const combined = `${result.stderr}\n${result.stdout}`;
|
|
750
|
+
// The authoritative timeout marker wins over auth-pattern text: a timed-out
|
|
751
|
+
// exec may have already printed model/diagnostic output containing 401/403
|
|
752
|
+
// before the deadline fired (issue #2833).
|
|
753
|
+
if (TIMEOUT_PATTERN.test(combined)) {
|
|
754
|
+
return new CodexSubscriptionTimeoutError(timeoutMs);
|
|
755
|
+
}
|
|
488
756
|
if (AUTH_FAILURE_PATTERN.test(combined)) {
|
|
489
757
|
// Re-check login on the next request; the cached status is now stale.
|
|
490
758
|
loginStatusCache.delete(`${executable}\0${env.CODEX_HOME ?? env.HOME ?? ""}`);
|
|
@@ -494,9 +762,7 @@ function execFailureError(
|
|
|
494
762
|
"(session expired or revoked). Run `codex login` again to re-authenticate, then retry."
|
|
495
763
|
);
|
|
496
764
|
}
|
|
497
|
-
|
|
498
|
-
return new CodexSubscriptionTimeoutError(timeoutMs);
|
|
499
|
-
}
|
|
765
|
+
|
|
500
766
|
const exitLabel = result.signal ? `signal ${result.signal}` : `exit ${result.status ?? "unknown"}`;
|
|
501
767
|
return new Error(
|
|
502
768
|
`codex-subscription: codex exec failed (${exitLabel}): ${summarizeOutput(result.stderr, result.stdout)}`
|
|
@@ -536,8 +802,7 @@ function usageFrom(result: CodexSubscriptionExecResult): CodexSubscriptionUsage
|
|
|
536
802
|
},
|
|
537
803
|
};
|
|
538
804
|
}
|
|
539
|
-
|
|
540
|
-
* Mirrors the bench parser (core cannot import the optional bench package). */
|
|
805
|
+
|
|
541
806
|
export function parseCodexJsonlUsage(output: string): { inputTokens: number; outputTokens: number } | undefined {
|
|
542
807
|
let usage: { inputTokens: number; outputTokens: number } | undefined;
|
|
543
808
|
for (const line of output.split(/\r?\n/)) {
|
|
@@ -569,9 +834,18 @@ function readCounter(value: unknown): number | undefined {
|
|
|
569
834
|
}
|
|
570
835
|
|
|
571
836
|
function abortErrorOf(signal: AbortSignal): Error {
|
|
572
|
-
if (signal.reason instanceof
|
|
573
|
-
|
|
574
|
-
|
|
837
|
+
if (signal.reason instanceof CodexSubscriptionTimeoutError) return signal.reason;
|
|
838
|
+
const reason =
|
|
839
|
+
signal.reason instanceof Error
|
|
840
|
+
? signal.reason
|
|
841
|
+
: signal.reason !== undefined
|
|
842
|
+
? new Error(String(signal.reason))
|
|
843
|
+
: new DOMException("The operation was aborted.", "AbortError");
|
|
844
|
+
const match = /fallback LLM timed out after (\d+)ms/i.exec(reason.message);
|
|
845
|
+
if (match) {
|
|
846
|
+
return new CodexSubscriptionTimeoutError(Number(match[1]));
|
|
847
|
+
}
|
|
848
|
+
return reason;
|
|
575
849
|
}
|
|
576
850
|
|
|
577
851
|
/** Bounds streamed child output to STDIO_LIMIT, keeping the TAIL — codex
|
|
@@ -585,17 +859,24 @@ function appendBounded(existing: string, next: string): string {
|
|
|
585
859
|
async function runLoginStatusSubprocess(
|
|
586
860
|
executable: string,
|
|
587
861
|
env: NodeJS.ProcessEnv,
|
|
588
|
-
timeoutMs: number
|
|
862
|
+
timeoutMs: number,
|
|
863
|
+
signal: AbortSignal | undefined,
|
|
864
|
+
children: Set<number>,
|
|
589
865
|
): Promise<{ status: number | null; stdout: string; stderr: string }> {
|
|
590
866
|
return await runSubprocess(executable, ["login", "status"], {
|
|
591
867
|
env,
|
|
592
868
|
stdin: undefined,
|
|
593
869
|
timeoutMs,
|
|
594
870
|
timeoutLabel: "login status",
|
|
871
|
+
signal,
|
|
872
|
+
children,
|
|
595
873
|
});
|
|
596
874
|
}
|
|
597
875
|
|
|
598
|
-
async function runCodexExecSubprocess(
|
|
876
|
+
async function runCodexExecSubprocess(
|
|
877
|
+
request: CodexSubscriptionExecRequest,
|
|
878
|
+
children: Set<number>,
|
|
879
|
+
): Promise<CodexSubscriptionExecResult> {
|
|
599
880
|
const result = await runSubprocess(request.executable, request.args, {
|
|
600
881
|
env: request.env,
|
|
601
882
|
stdin: request.input,
|
|
@@ -603,7 +884,9 @@ async function runCodexExecSubprocess(request: CodexSubscriptionExecRequest): Pr
|
|
|
603
884
|
timeoutLabel: "exec",
|
|
604
885
|
signal: request.signal,
|
|
605
886
|
cwd: request.workspacePath,
|
|
887
|
+
children,
|
|
606
888
|
});
|
|
889
|
+
if (result.status === 124) return { ...result, outputText: "" };
|
|
607
890
|
let outputText = "";
|
|
608
891
|
try {
|
|
609
892
|
outputText = (await readFile(request.outputPath, "utf8")).trim();
|
|
@@ -620,6 +903,7 @@ interface SubprocessOptions {
|
|
|
620
903
|
timeoutLabel: string;
|
|
621
904
|
signal?: AbortSignal;
|
|
622
905
|
cwd?: string;
|
|
906
|
+
children: Set<number>;
|
|
623
907
|
}
|
|
624
908
|
|
|
625
909
|
async function runSubprocess(executable: string, args: string[], options: SubprocessOptions): Promise<CommandOutput> {
|
|
@@ -635,9 +919,11 @@ async function runSubprocess(executable: string, args: string[], options: Subpro
|
|
|
635
919
|
detached: process.platform !== "win32",
|
|
636
920
|
windowsHide: true,
|
|
637
921
|
});
|
|
922
|
+
registerActiveCodexChild(child.pid, options.children);
|
|
638
923
|
let stdout = "";
|
|
639
924
|
let stderr = "";
|
|
640
925
|
let timedOut = false;
|
|
926
|
+
let settled = false;
|
|
641
927
|
let killTimeout: ReturnType<typeof setTimeout> | undefined;
|
|
642
928
|
const clearKillTimeout = (): void => {
|
|
643
929
|
if (killTimeout) {
|
|
@@ -661,20 +947,47 @@ async function runSubprocess(executable: string, args: string[], options: Subpro
|
|
|
661
947
|
killTimeout = setTimeout(() => terminate("SIGKILL"), 1_000);
|
|
662
948
|
killTimeout.unref();
|
|
663
949
|
};
|
|
950
|
+
const finish = (fn: () => void): void => {
|
|
951
|
+
if (settled) return;
|
|
952
|
+
settled = true;
|
|
953
|
+
clearTimeout(timeout);
|
|
954
|
+
options.signal?.removeEventListener("abort", onAbort);
|
|
955
|
+
fn();
|
|
956
|
+
};
|
|
957
|
+
const settleTimeout = (): void => {
|
|
958
|
+
timedOut = true;
|
|
959
|
+
stderr = appendBounded(
|
|
960
|
+
stderr,
|
|
961
|
+
`\ncodex-subscription: ${options.timeoutLabel} timed out after ${options.timeoutMs}ms.`
|
|
962
|
+
);
|
|
963
|
+
finish(() => {
|
|
964
|
+
resolve({
|
|
965
|
+
status: 124,
|
|
966
|
+
signal: "SIGTERM",
|
|
967
|
+
stdout,
|
|
968
|
+
stderr,
|
|
969
|
+
});
|
|
970
|
+
});
|
|
971
|
+
};
|
|
664
972
|
const onAbort = (): void => {
|
|
973
|
+
const reasonText =
|
|
974
|
+
options.signal?.reason instanceof Error
|
|
975
|
+
? options.signal.reason.message
|
|
976
|
+
: String(options.signal?.reason ?? "");
|
|
665
977
|
terminate("SIGTERM");
|
|
666
978
|
scheduleForcedKill();
|
|
979
|
+
if (/fallback LLM timed out after \d+ms/i.test(reasonText)) {
|
|
980
|
+
settleTimeout();
|
|
981
|
+
return;
|
|
982
|
+
}
|
|
983
|
+
finish(() => reject(abortErrorOf(options.signal!)));
|
|
667
984
|
};
|
|
668
985
|
options.signal?.addEventListener("abort", onAbort, { once: true });
|
|
669
986
|
const timeout = options.timeoutMs
|
|
670
987
|
? setTimeout(() => {
|
|
671
|
-
timedOut = true;
|
|
672
|
-
stderr = appendBounded(
|
|
673
|
-
stderr,
|
|
674
|
-
`\ncodex-subscription: ${options.timeoutLabel} timed out after ${options.timeoutMs}ms.`
|
|
675
|
-
);
|
|
676
988
|
terminate("SIGTERM");
|
|
677
989
|
scheduleForcedKill();
|
|
990
|
+
settleTimeout();
|
|
678
991
|
}, options.timeoutMs)
|
|
679
992
|
: undefined;
|
|
680
993
|
timeout?.unref();
|
|
@@ -689,14 +1002,9 @@ async function runSubprocess(executable: string, args: string[], options: Subpro
|
|
|
689
1002
|
child.stdin?.on("error", (error: NodeJS.ErrnoException) => {
|
|
690
1003
|
stderr = appendBounded(stderr, `\ncodex-subscription: stdin error: ${error.code ?? error.message}`);
|
|
691
1004
|
});
|
|
692
|
-
const settle = (fn: () => void): void => {
|
|
693
|
-
clearTimeout(timeout);
|
|
694
|
-
clearKillTimeout();
|
|
695
|
-
options.signal?.removeEventListener("abort", onAbort);
|
|
696
|
-
fn();
|
|
697
|
-
};
|
|
698
1005
|
child.on("error", (error) => {
|
|
699
|
-
|
|
1006
|
+
unregisterActiveCodexChild(child.pid, options.children);
|
|
1007
|
+
finish(() => {
|
|
700
1008
|
reject(
|
|
701
1009
|
child.pid
|
|
702
1010
|
? new Error(`codex-subscription: codex CLI failed after start: ${safeMessage(error)}`, { cause: error })
|
|
@@ -708,9 +1016,11 @@ async function runSubprocess(executable: string, args: string[], options: Subpro
|
|
|
708
1016
|
});
|
|
709
1017
|
});
|
|
710
1018
|
child.on("close", (status, signal) => {
|
|
711
|
-
|
|
1019
|
+
clearKillTimeout();
|
|
1020
|
+
unregisterActiveCodexChild(child.pid, options.children);
|
|
1021
|
+
finish(() => {
|
|
712
1022
|
resolve({
|
|
713
|
-
status: timedOut ? (status
|
|
1023
|
+
status: timedOut ? (status === null || status === 0 ? 124 : status) : status,
|
|
714
1024
|
signal: timedOut ? (signal ?? "SIGTERM") : signal,
|
|
715
1025
|
stdout,
|
|
716
1026
|
stderr,
|
|
@@ -732,6 +1042,10 @@ function safeMessage(error: unknown): string {
|
|
|
732
1042
|
}
|
|
733
1043
|
|
|
734
1044
|
export const __codexSubscriptionTestHooks = {
|
|
1045
|
+
activeCodexChildCount: (runner?: CodexCliFallbackRunner): number => {
|
|
1046
|
+
const target = runner ?? defaultRegisteredRunner;
|
|
1047
|
+
return target ? (childrenByRunner.get(target)?.size ?? 0) : 0;
|
|
1048
|
+
},
|
|
735
1049
|
appendBounded,
|
|
736
1050
|
resetLoginStatusCache: (): void => {
|
|
737
1051
|
loginStatusCache.clear();
|
|
@@ -739,5 +1053,33 @@ export const __codexSubscriptionTestHooks = {
|
|
|
739
1053
|
isCoreRunnerRegistered: (): boolean => coreRunnerRegistered,
|
|
740
1054
|
resetCoreRunnerRegistered: (): void => {
|
|
741
1055
|
coreRunnerRegistered = false;
|
|
1056
|
+
defaultRegisteredRunner = undefined;
|
|
742
1057
|
},
|
|
743
1058
|
};
|
|
1059
|
+
|
|
1060
|
+
function registerActiveCodexChild(pid: number | undefined, children: Set<number>): void {
|
|
1061
|
+
if (pid === undefined) return;
|
|
1062
|
+
children.add(pid);
|
|
1063
|
+
}
|
|
1064
|
+
|
|
1065
|
+
function unregisterActiveCodexChild(pid: number | undefined, children: Set<number>): void {
|
|
1066
|
+
if (pid === undefined) return;
|
|
1067
|
+
children.delete(pid);
|
|
1068
|
+
}
|
|
1069
|
+
|
|
1070
|
+
function terminateCodexChildPid(pid: number, signal: NodeJS.Signals): void {
|
|
1071
|
+
if (process.platform !== "win32") {
|
|
1072
|
+
try {
|
|
1073
|
+
process.kill(-pid, signal);
|
|
1074
|
+
return;
|
|
1075
|
+
} catch {
|
|
1076
|
+
// Fall back to killing the direct child below.
|
|
1077
|
+
}
|
|
1078
|
+
}
|
|
1079
|
+
|
|
1080
|
+
try {
|
|
1081
|
+
process.kill(pid, signal);
|
|
1082
|
+
} catch {
|
|
1083
|
+
// The child may already have exited.
|
|
1084
|
+
}
|
|
1085
|
+
}
|