@skaile/workspaces 6.1.0 → 6.2.0
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/CHANGELOG.md +48 -0
- package/dist/{asset-feeds-HJFV7UPW.js → asset-feeds-KPKCE64E.js} +26 -26
- package/dist/{asset-feeds-HJFV7UPW.js.map → asset-feeds-KPKCE64E.js.map} +1 -1
- package/dist/asset-manager/catalog-deployer.js +10 -10
- package/dist/asset-manager/fragments.js +1 -1
- package/dist/asset-manager/index.js +18 -18
- package/dist/asset-manager/installer.js +13 -13
- package/dist/asset-manager/renderers.js +11 -11
- package/dist/asset-manager/src/index.d.ts +149 -16
- package/dist/asset-manager/src/index.d.ts.map +1 -1
- package/dist/asset-manager/src/installer.d.ts +9 -0
- package/dist/asset-manager/src/installer.d.ts.map +1 -1
- package/dist/asset-manager/src/renderers.d.ts +7 -0
- package/dist/asset-manager/src/renderers.d.ts.map +1 -1
- package/dist/bridge/harnesses/claude-sdk.js +15 -15
- package/dist/bridge/harnesses/codex.js +24 -17
- package/dist/bridge/harnesses/codex.js.map +1 -1
- package/dist/bridge/harnesses/continue.js +14 -14
- package/dist/bridge/harnesses/echo.js +4 -4
- package/dist/bridge/harnesses/gemini.js +10 -10
- package/dist/bridge/harnesses/goose.js +14 -14
- package/dist/bridge/harnesses/omp.js +15 -8
- package/dist/bridge/harnesses/omp.js.map +1 -1
- package/dist/bridge/harnesses/opencode.js +14 -14
- package/dist/bridge/harnesses/qwen.js +10 -10
- package/dist/bridge/index.js +19 -19
- package/dist/bridge/src/harness-model-check.d.ts +15 -0
- package/dist/bridge/src/harness-model-check.d.ts.map +1 -1
- package/dist/bridge/src/harnesses/_subprocess-cli.d.ts.map +1 -1
- package/dist/bridge/src/harnesses/codex.d.ts.map +1 -1
- package/dist/bridge/src/harnesses/omp.d.ts.map +1 -1
- package/dist/bridge/src/index.d.ts +1 -1
- package/dist/bridge/src/index.d.ts.map +1 -1
- package/dist/bridge/src/runner-private-env.d.ts +7 -0
- package/dist/bridge/src/runner-private-env.d.ts.map +1 -1
- package/dist/{chunk-DIGFA7Z5.js → chunk-27SXN33H.js} +13 -5
- package/dist/chunk-27SXN33H.js.map +1 -0
- package/dist/{chunk-AITJ7ELM.js → chunk-2XM3ZH36.js} +59 -23
- package/dist/chunk-2XM3ZH36.js.map +1 -0
- package/dist/{chunk-KUQAJVYT.js → chunk-3HACK2Z7.js} +142 -28
- package/dist/chunk-3HACK2Z7.js.map +1 -0
- package/dist/{chunk-J72MO2WA.js → chunk-5JPW27BI.js} +10 -9
- package/dist/chunk-5JPW27BI.js.map +1 -0
- package/dist/{chunk-AATHJRKL.js → chunk-5LQ62LNT.js} +4 -4
- package/dist/{chunk-AATHJRKL.js.map → chunk-5LQ62LNT.js.map} +1 -1
- package/dist/{chunk-S2XHGWQC.js → chunk-6CYKTHNT.js} +44 -15
- package/dist/chunk-6CYKTHNT.js.map +1 -0
- package/dist/{chunk-XFIEVEU7.js → chunk-6OHZUUR7.js} +5 -4
- package/dist/chunk-6OHZUUR7.js.map +1 -0
- package/dist/{chunk-E572OHGY.js → chunk-76FLBODK.js} +4 -3
- package/dist/chunk-76FLBODK.js.map +1 -0
- package/dist/{chunk-HPMQRAIF.js → chunk-7DRFKAJZ.js} +7 -7
- package/dist/{chunk-HPMQRAIF.js.map → chunk-7DRFKAJZ.js.map} +1 -1
- package/dist/{chunk-EX3GLAL6.js → chunk-7H6XRCPG.js} +5 -5
- package/dist/{chunk-EX3GLAL6.js.map → chunk-7H6XRCPG.js.map} +1 -1
- package/dist/{chunk-4FVIT5DI.js → chunk-7Y6S4XLL.js} +3 -3
- package/dist/{chunk-4FVIT5DI.js.map → chunk-7Y6S4XLL.js.map} +1 -1
- package/dist/{chunk-RDTLPOPD.js → chunk-BEYNH2LS.js} +4 -4
- package/dist/{chunk-RDTLPOPD.js.map → chunk-BEYNH2LS.js.map} +1 -1
- package/dist/{chunk-GNZBFSRB.js → chunk-BOT64P3U.js} +4 -4
- package/dist/{chunk-GNZBFSRB.js.map → chunk-BOT64P3U.js.map} +1 -1
- package/dist/{chunk-VMVDAZLA.js → chunk-BRK5QZKI.js} +108 -19
- package/dist/chunk-BRK5QZKI.js.map +1 -0
- package/dist/{chunk-QSYQOTWN.js → chunk-BY5WIRCU.js} +58 -5
- package/dist/chunk-BY5WIRCU.js.map +1 -0
- package/dist/{chunk-Z7ZEZZB6.js → chunk-C5HFK34M.js} +3 -3
- package/dist/chunk-C5HFK34M.js.map +1 -0
- package/dist/{chunk-ABFPSVIS.js → chunk-COAFAYBS.js} +31 -7
- package/dist/chunk-COAFAYBS.js.map +1 -0
- package/dist/{chunk-YLLVSR2U.js → chunk-E5NQRHEB.js} +30 -7
- package/dist/chunk-E5NQRHEB.js.map +1 -0
- package/dist/{chunk-BFMYYNDT.js → chunk-F3D25RGM.js} +11 -3
- package/dist/chunk-F3D25RGM.js.map +1 -0
- package/dist/{chunk-QAKUD6QN.js → chunk-GF5JXQIZ.js} +3 -3
- package/dist/{chunk-QAKUD6QN.js.map → chunk-GF5JXQIZ.js.map} +1 -1
- package/dist/{chunk-ZFUZ5AKM.js → chunk-I7LC5TDY.js} +3 -3
- package/dist/{chunk-ZFUZ5AKM.js.map → chunk-I7LC5TDY.js.map} +1 -1
- package/dist/{chunk-NB7SYQYP.js → chunk-ICSGNT5P.js} +7 -7
- package/dist/{chunk-NB7SYQYP.js.map → chunk-ICSGNT5P.js.map} +1 -1
- package/dist/{chunk-CEKW3KXP.js → chunk-ITFCWMOY.js} +18 -15
- package/dist/chunk-ITFCWMOY.js.map +1 -0
- package/dist/{chunk-LSSYC5IC.js → chunk-IZQOO6MN.js} +2 -2
- package/dist/{chunk-LSSYC5IC.js.map → chunk-IZQOO6MN.js.map} +1 -1
- package/dist/{chunk-7LP7RCZI.js → chunk-JFLQICIU.js} +5 -5
- package/dist/{chunk-7LP7RCZI.js.map → chunk-JFLQICIU.js.map} +1 -1
- package/dist/{chunk-COYF6IG2.js → chunk-JJJ2G4K2.js} +5 -5
- package/dist/{chunk-COYF6IG2.js.map → chunk-JJJ2G4K2.js.map} +1 -1
- package/dist/{chunk-RHN5MRQO.js → chunk-JMIKGAUA.js} +27 -5
- package/dist/chunk-JMIKGAUA.js.map +1 -0
- package/dist/{chunk-DGTI65OC.js → chunk-K3R2UKG7.js} +17 -11
- package/dist/chunk-K3R2UKG7.js.map +1 -0
- package/dist/{chunk-3GMOPFWH.js → chunk-KB56WBQ3.js} +4 -4
- package/dist/{chunk-3GMOPFWH.js.map → chunk-KB56WBQ3.js.map} +1 -1
- package/dist/{chunk-ZHGKAZJ7.js → chunk-KJSC2ZD6.js} +56 -8
- package/dist/chunk-KJSC2ZD6.js.map +1 -0
- package/dist/{chunk-ZBHZLWV3.js → chunk-KPKGWXUJ.js} +4 -4
- package/dist/{chunk-ZBHZLWV3.js.map → chunk-KPKGWXUJ.js.map} +1 -1
- package/dist/{chunk-EJPMNDTP.js → chunk-KXJMQTOU.js} +3 -3
- package/dist/{chunk-EJPMNDTP.js.map → chunk-KXJMQTOU.js.map} +1 -1
- package/dist/{chunk-7HX6FNKL.js → chunk-LRBP3234.js} +41 -56
- package/dist/chunk-LRBP3234.js.map +1 -0
- package/dist/{chunk-FKQNBCDW.js → chunk-M4OG2YN4.js} +4 -4
- package/dist/{chunk-FKQNBCDW.js.map → chunk-M4OG2YN4.js.map} +1 -1
- package/dist/{chunk-UI745XC3.js → chunk-MAZ3UXJK.js} +13 -7
- package/dist/chunk-MAZ3UXJK.js.map +1 -0
- package/dist/{chunk-ASWTQQ7E.js → chunk-MM4YO3EL.js} +3 -3
- package/dist/{chunk-ASWTQQ7E.js.map → chunk-MM4YO3EL.js.map} +1 -1
- package/dist/{chunk-6YR4ALVX.js → chunk-OCQNUV4T.js} +7 -7
- package/dist/{chunk-6YR4ALVX.js.map → chunk-OCQNUV4T.js.map} +1 -1
- package/dist/{chunk-4MUDQCBP.js → chunk-PJJSBZZP.js} +3 -3
- package/dist/{chunk-4MUDQCBP.js.map → chunk-PJJSBZZP.js.map} +1 -1
- package/dist/{chunk-HWNK3F3X.js → chunk-PKBLJI23.js} +588 -76
- package/dist/chunk-PKBLJI23.js.map +1 -0
- package/dist/{chunk-NOA6EJXE.js → chunk-PKE3PXOK.js} +3 -3
- package/dist/{chunk-NOA6EJXE.js.map → chunk-PKE3PXOK.js.map} +1 -1
- package/dist/{chunk-AZ2H6R5I.js → chunk-PMWRM4EJ.js} +74 -39
- package/dist/chunk-PMWRM4EJ.js.map +1 -0
- package/dist/{chunk-VYVTEMAW.js → chunk-PNUM7GUY.js} +3 -3
- package/dist/{chunk-VYVTEMAW.js.map → chunk-PNUM7GUY.js.map} +1 -1
- package/dist/{chunk-X3YGUKCG.js → chunk-Q5RN4PWV.js} +3 -3
- package/dist/{chunk-X3YGUKCG.js.map → chunk-Q5RN4PWV.js.map} +1 -1
- package/dist/{chunk-BBBCJSSU.js → chunk-QIHL3YPL.js} +4 -4
- package/dist/{chunk-BBBCJSSU.js.map → chunk-QIHL3YPL.js.map} +1 -1
- package/dist/{chunk-HMISULVD.js → chunk-QK7AG5AV.js} +4 -4
- package/dist/{chunk-HMISULVD.js.map → chunk-QK7AG5AV.js.map} +1 -1
- package/dist/{chunk-ZDLUQLI6.js → chunk-QPWR3YMY.js} +15 -5
- package/dist/chunk-QPWR3YMY.js.map +1 -0
- package/dist/{chunk-SVTMNSPI.js → chunk-QXKUFROW.js} +5 -5
- package/dist/{chunk-SVTMNSPI.js.map → chunk-QXKUFROW.js.map} +1 -1
- package/dist/{chunk-5Y2KGB4H.js → chunk-RQMIZONH.js} +34 -9
- package/dist/chunk-RQMIZONH.js.map +1 -0
- package/dist/{chunk-LSI2IVFT.js → chunk-RXGPFAMN.js} +4 -3
- package/dist/chunk-RXGPFAMN.js.map +1 -0
- package/dist/{chunk-NUA33BYO.js → chunk-S2H3RBK7.js} +42 -15
- package/dist/chunk-S2H3RBK7.js.map +1 -0
- package/dist/{chunk-2LAPHLDH.js → chunk-SJNZ4WPA.js} +44 -35
- package/dist/chunk-SJNZ4WPA.js.map +1 -0
- package/dist/{chunk-QEULL4Q3.js → chunk-T2VBPVWZ.js} +77 -18
- package/dist/chunk-T2VBPVWZ.js.map +1 -0
- package/dist/{chunk-Z3VKUWAX.js → chunk-TSTRH4SM.js} +3 -3
- package/dist/{chunk-Z3VKUWAX.js.map → chunk-TSTRH4SM.js.map} +1 -1
- package/dist/{chunk-5J4NPGFM.js → chunk-TZERN27L.js} +5 -5
- package/dist/{chunk-5J4NPGFM.js.map → chunk-TZERN27L.js.map} +1 -1
- package/dist/{chunk-XGULGQA3.js → chunk-U673DB5U.js} +4 -4
- package/dist/{chunk-XGULGQA3.js.map → chunk-U673DB5U.js.map} +1 -1
- package/dist/{chunk-IRYKRKVQ.js → chunk-URCJIV7T.js} +3 -3
- package/dist/{chunk-IRYKRKVQ.js.map → chunk-URCJIV7T.js.map} +1 -1
- package/dist/{chunk-ADPM6AYF.js → chunk-VSX2G7LA.js} +3 -3
- package/dist/{chunk-ADPM6AYF.js.map → chunk-VSX2G7LA.js.map} +1 -1
- package/dist/{chunk-ILLTBKDJ.js → chunk-X37JUNEW.js} +4 -4
- package/dist/{chunk-ILLTBKDJ.js.map → chunk-X37JUNEW.js.map} +1 -1
- package/dist/{chunk-IHFGPHCT.js → chunk-Z3IRZBXB.js} +49 -25
- package/dist/chunk-Z3IRZBXB.js.map +1 -0
- package/dist/{chunk-ZAELRYKS.js → chunk-ZWJCRHP3.js} +3 -3
- package/dist/{chunk-ZAELRYKS.js.map → chunk-ZWJCRHP3.js.map} +1 -1
- package/dist/{claude-code-RE46FJXI.js → claude-code-BBMNVH2J.js} +5 -5
- package/dist/{claude-code-RE46FJXI.js.map → claude-code-BBMNVH2J.js.map} +1 -1
- package/dist/cli/index.js +348 -141
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/src/commands/asset-cmd.d.ts.map +1 -1
- package/dist/cli/src/commands/catalog.d.ts.map +1 -1
- package/dist/cli/src/commands/config.d.ts.map +1 -1
- package/dist/cli/src/commands/diff.d.ts.map +1 -1
- package/dist/cli/src/commands/harness.d.ts.map +1 -1
- package/dist/cli/src/commands/integration.d.ts.map +1 -1
- package/dist/cli/src/commands/library-cmd.d.ts.map +1 -1
- package/dist/cli/src/commands/library-index.d.ts +8 -1
- package/dist/cli/src/commands/library-index.d.ts.map +1 -1
- package/dist/cli/src/commands/migrate-assets.d.ts.map +1 -1
- package/dist/cli/src/commands/outdated.d.ts.map +1 -1
- package/dist/cli/src/commands/plugin-registry-cmd.d.ts.map +1 -1
- package/dist/cli/src/commands/project.d.ts.map +1 -1
- package/dist/cli/src/commands/rebuild.d.ts.map +1 -1
- package/dist/cli/src/commands/run.d.ts.map +1 -1
- package/dist/cli/src/commands/serve-preflight.d.ts +31 -1
- package/dist/cli/src/commands/serve-preflight.d.ts.map +1 -1
- package/dist/cli/src/commands/serve.d.ts +10 -0
- package/dist/cli/src/commands/serve.d.ts.map +1 -1
- package/dist/cli/src/commands/source-manifest-publish.d.ts.map +1 -1
- package/dist/cli/src/commands/source-manifest.d.ts +19 -7
- package/dist/cli/src/commands/source-manifest.d.ts.map +1 -1
- package/dist/cli/src/commands/validate-instances.d.ts.map +1 -1
- package/dist/cli/src/commands/validate.d.ts.map +1 -1
- package/dist/cli/src/commands/why.d.ts.map +1 -1
- package/dist/cli/src/config-checks.d.ts +23 -5
- package/dist/cli/src/config-checks.d.ts.map +1 -1
- package/dist/cli/src/harness-error.d.ts +12 -1
- package/dist/cli/src/harness-error.d.ts.map +1 -1
- package/dist/cli/src/helpers.d.ts +18 -8
- package/dist/cli/src/helpers.d.ts.map +1 -1
- package/dist/cli/src/plugin-store/index.d.ts +10 -1
- package/dist/cli/src/plugin-store/index.d.ts.map +1 -1
- package/dist/cli/src/plugin-store/spec.d.ts +8 -0
- package/dist/cli/src/plugin-store/spec.d.ts.map +1 -1
- package/dist/cli/src/skill-checks.d.ts +2 -2
- package/dist/cli/src/skill-checks.d.ts.map +1 -1
- package/dist/connectors/config.js +5 -5
- package/dist/connectors/index.js +22 -22
- package/dist/connectors/src/connector-manager.d.ts.map +1 -1
- package/dist/connectors-47EM6C2P.js +48 -0
- package/dist/{connectors-7THEF7YA.js.map → connectors-47EM6C2P.js.map} +1 -1
- package/dist/core/framework.js +1 -1
- package/dist/core/index.js +9 -9
- package/dist/core/manifest.js +2 -2
- package/dist/core/models.js +1 -1
- package/dist/core/provider-registry-credentials.js +2 -2
- package/dist/core/provider-registry.js +1 -1
- package/dist/core/publish-manifest.js +3 -3
- package/dist/core/ref.js +1 -1
- package/dist/core/runtime-assets.js +5 -5
- package/dist/core/src/framework.d.ts +5 -3
- package/dist/core/src/framework.d.ts.map +1 -1
- package/dist/core/src/index.d.ts +2 -1
- package/dist/core/src/index.d.ts.map +1 -1
- package/dist/core/src/lock.d.ts +12 -0
- package/dist/core/src/lock.d.ts.map +1 -1
- package/dist/core/src/manifest.d.ts +15 -0
- package/dist/core/src/manifest.d.ts.map +1 -1
- package/dist/core/src/models.d.ts +7 -0
- package/dist/core/src/models.d.ts.map +1 -1
- package/dist/core/src/provider-registry.d.ts +6 -0
- package/dist/core/src/provider-registry.d.ts.map +1 -1
- package/dist/core/src/workspace-config.d.ts +10 -1
- package/dist/core/src/workspace-config.d.ts.map +1 -1
- package/dist/core/src/workspace-yaml-editor.d.ts.map +1 -1
- package/dist/core/workspace-config.js +4 -4
- package/dist/deploy/index.js +9 -9
- package/dist/discovery/index.js +5 -5
- package/dist/discovery/src/parse-manifest.d.ts.map +1 -1
- package/dist/{ensure-sources-IH7CHSJF.js → ensure-sources-K5EFNC3L.js} +35 -21
- package/dist/ensure-sources-K5EFNC3L.js.map +1 -0
- package/dist/factory-assets/connectors/box.js +22 -22
- package/dist/factory-assets/connectors/deploy.js +22 -22
- package/dist/factory-assets/connectors/devserver.js +22 -22
- package/dist/factory-assets/connectors/flow/adapter.js +22 -22
- package/dist/factory-assets/connectors/flow/engine.js +10 -10
- package/dist/factory-assets/connectors/flow/run-flow.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/run-flow.js +24 -24
- package/dist/factory-assets/connectors/flow.js +22 -22
- package/dist/factory-assets/connectors/git.js +22 -22
- package/dist/factory-assets/connectors/gmail.js +22 -22
- package/dist/factory-assets/connectors/googledrive.js +22 -22
- package/dist/factory-assets/connectors/local.js +22 -22
- package/dist/factory-assets/connectors/mattermost.js +22 -22
- package/dist/factory-assets/connectors/memory.js +22 -22
- package/dist/factory-assets/connectors/minio.js +22 -22
- package/dist/factory-assets/connectors/postgres.js +22 -22
- package/dist/factory-assets/connectors/s3.js +22 -22
- package/dist/factory-assets/connectors/sharepoint.js +22 -22
- package/dist/factory-assets/connectors/sqlite.js +22 -22
- package/dist/factory-assets/connectors/static-server.js +22 -22
- package/dist/factory-assets/connectors/tunnel.js +22 -22
- package/dist/factory-assets/connectors/webdav.js +22 -22
- package/dist/factory-assets/connectors/xstate-store.js +22 -22
- package/dist/factory-assets/connectors/xstate.js +22 -22
- package/dist/flows-KLBNSKLO.js +26 -0
- package/dist/{flows-4JZQ3XFK.js.map → flows-KLBNSKLO.js.map} +1 -1
- package/dist/helpers-LUSV2ICC.js +52 -0
- package/dist/{helpers-JNMK3FC2.js.map → helpers-LUSV2ICC.js.map} +1 -1
- package/dist/library/index.js +14 -14
- package/dist/library/install.js +5 -5
- package/dist/library/src/index.d.ts +1 -1
- package/dist/library/src/index.d.ts.map +1 -1
- package/dist/library/src/install/index.d.ts +1 -1
- package/dist/library/src/install/index.d.ts.map +1 -1
- package/dist/library/src/install/install-from-manifest.d.ts +13 -0
- package/dist/library/src/install/install-from-manifest.d.ts.map +1 -1
- package/dist/library/src/install/source-fetch-github.d.ts.map +1 -1
- package/dist/library/src/manifest-writer.d.ts.map +1 -1
- package/dist/library/src/remote/remote-catalog-source.d.ts +3 -1
- package/dist/library/src/remote/remote-catalog-source.d.ts.map +1 -1
- package/dist/library/src/remote/rest-catalog-source.d.ts +3 -2
- package/dist/library/src/remote/rest-catalog-source.d.ts.map +1 -1
- package/dist/{library-publish-I3UWXAHI.js → library-publish-XMRCKRNR.js} +54 -55
- package/dist/library-publish-XMRCKRNR.js.map +1 -0
- package/dist/model-endpoint/index.js +12 -12
- package/dist/model-endpoint/src/openai-chat.d.ts +7 -2
- package/dist/model-endpoint/src/openai-chat.d.ts.map +1 -1
- package/dist/model-endpoint/src/openai-shared.d.ts +8 -0
- package/dist/model-endpoint/src/openai-shared.d.ts.map +1 -1
- package/dist/model-endpoint/src/server.d.ts.map +1 -1
- package/dist/model-endpoint/src/types.d.ts +1 -1
- package/dist/model-endpoint/src/types.d.ts.map +1 -1
- package/dist/model-endpoint/src/usage-cost.d.ts +23 -0
- package/dist/model-endpoint/src/usage-cost.d.ts.map +1 -0
- package/dist/open-library-XBR46DJL.js +56 -0
- package/dist/{open-library-NKKUJLWA.js.map → open-library-XBR46DJL.js.map} +1 -1
- package/dist/open-registry-W562DCDL.js +32 -0
- package/dist/{open-registry-BYAXSHUI.js.map → open-registry-W562DCDL.js.map} +1 -1
- package/dist/paths-2AZXB3QL.js +22 -0
- package/dist/{paths-UKWE35XS.js.map → paths-2AZXB3QL.js.map} +1 -1
- package/dist/plugin-store-36SIL4TV.js +23 -0
- package/dist/{plugin-store-ABE35NRX.js.map → plugin-store-36SIL4TV.js.map} +1 -1
- package/dist/project-D7GN7WLS.js +86 -0
- package/dist/{project-BIPK47JK.js.map → project-D7GN7WLS.js.map} +1 -1
- package/dist/resolver/index.js +10 -10
- package/dist/runner/index.js +39 -39
- package/dist/runner/src/capability-roundtrip.d.ts +7 -6
- package/dist/runner/src/capability-roundtrip.d.ts.map +1 -1
- package/dist/runner/src/serve.d.ts +6 -5
- package/dist/runner/src/serve.d.ts.map +1 -1
- package/dist/sdk/asset-manager.js +18 -18
- package/dist/sdk/bridge.js +19 -19
- package/dist/sdk/core.js +9 -9
- package/dist/sdk/flow.js +10 -10
- package/dist/sdk/index.js +39 -39
- package/dist/sdk/resolver.js +10 -10
- package/dist/sdk/runner.js +39 -39
- package/dist/sdk/transport/ws/server.js +10 -10
- package/dist/sdk/transport/ws.js +10 -10
- package/dist/sdk/transport.js +10 -10
- package/dist/{serve-preflight-FLTIBTEX.js → serve-preflight-CGA5G3AE.js} +63 -35
- package/dist/serve-preflight-CGA5G3AE.js.map +1 -0
- package/dist/{setup-AG6NFHSN.js → setup-IBDNJAOU.js} +31 -31
- package/dist/{setup-AG6NFHSN.js.map → setup-IBDNJAOU.js.map} +1 -1
- package/dist/skills-CTTO7SZK.js +26 -0
- package/dist/{skills-UQYUHVKO.js.map → skills-CTTO7SZK.js.map} +1 -1
- package/dist/source-2DJ5KNOI.js +85 -0
- package/dist/{source-ASEHI2XS.js.map → source-2DJ5KNOI.js.map} +1 -1
- package/dist/source-fetch-github-RWHV4I5Z.js +4 -0
- package/dist/{source-fetch-github-ST4MFL3D.js.map → source-fetch-github-RWHV4I5Z.js.map} +1 -1
- package/dist/{source-manifest-publish-IEVV3W6J.js → source-manifest-publish-IYWUMUCY.js} +54 -56
- package/dist/source-manifest-publish-IYWUMUCY.js.map +1 -0
- package/dist/transport/index.js +10 -10
- package/dist/transport/ws/server.js +10 -10
- package/dist/transport/ws.js +10 -10
- package/dist/tui/index.js +47 -40
- package/dist/tui/index.js.map +1 -1
- package/dist/tui/src/repl.d.ts.map +1 -1
- package/dist/types/manifests.js +1 -1
- package/dist/types/src/manifests/index.d.ts +1 -1
- package/dist/types/src/manifests/index.d.ts.map +1 -1
- package/dist/types/src/manifests/scaffold-body.d.ts +2 -0
- package/dist/types/src/manifests/scaffold-body.d.ts.map +1 -1
- package/dist/workspace-plugin/adapters/mcp.js +29 -29
- package/dist/workspace-plugin/adapters/omp.js +15 -15
- package/dist/workspace-plugin/index.js +2 -2
- package/package.json +1 -1
- package/dist/chunk-2LAPHLDH.js.map +0 -1
- package/dist/chunk-5Y2KGB4H.js.map +0 -1
- package/dist/chunk-7HX6FNKL.js.map +0 -1
- package/dist/chunk-ABFPSVIS.js.map +0 -1
- package/dist/chunk-AITJ7ELM.js.map +0 -1
- package/dist/chunk-AZ2H6R5I.js.map +0 -1
- package/dist/chunk-BFMYYNDT.js.map +0 -1
- package/dist/chunk-CEKW3KXP.js.map +0 -1
- package/dist/chunk-DGTI65OC.js.map +0 -1
- package/dist/chunk-DIGFA7Z5.js.map +0 -1
- package/dist/chunk-E572OHGY.js.map +0 -1
- package/dist/chunk-HWNK3F3X.js.map +0 -1
- package/dist/chunk-IHFGPHCT.js.map +0 -1
- package/dist/chunk-J72MO2WA.js.map +0 -1
- package/dist/chunk-KUQAJVYT.js.map +0 -1
- package/dist/chunk-LSI2IVFT.js.map +0 -1
- package/dist/chunk-NUA33BYO.js.map +0 -1
- package/dist/chunk-QEULL4Q3.js.map +0 -1
- package/dist/chunk-QSYQOTWN.js.map +0 -1
- package/dist/chunk-RHN5MRQO.js.map +0 -1
- package/dist/chunk-S2XHGWQC.js.map +0 -1
- package/dist/chunk-UI745XC3.js.map +0 -1
- package/dist/chunk-VMVDAZLA.js.map +0 -1
- package/dist/chunk-XFIEVEU7.js.map +0 -1
- package/dist/chunk-YLLVSR2U.js.map +0 -1
- package/dist/chunk-Z7ZEZZB6.js.map +0 -1
- package/dist/chunk-ZDLUQLI6.js.map +0 -1
- package/dist/chunk-ZHGKAZJ7.js.map +0 -1
- package/dist/connectors-7THEF7YA.js +0 -48
- package/dist/ensure-sources-IH7CHSJF.js.map +0 -1
- package/dist/flows-4JZQ3XFK.js +0 -26
- package/dist/helpers-JNMK3FC2.js +0 -38
- package/dist/library-publish-I3UWXAHI.js.map +0 -1
- package/dist/open-library-NKKUJLWA.js +0 -42
- package/dist/open-registry-BYAXSHUI.js +0 -32
- package/dist/paths-UKWE35XS.js +0 -22
- package/dist/plugin-store-ABE35NRX.js +0 -23
- package/dist/project-BIPK47JK.js +0 -86
- package/dist/serve-preflight-FLTIBTEX.js.map +0 -1
- package/dist/skills-UQYUHVKO.js +0 -26
- package/dist/source-ASEHI2XS.js +0 -85
- package/dist/source-fetch-github-ST4MFL3D.js +0 -4
- package/dist/source-manifest-publish-IEVV3W6J.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../bridge/src/codex/inputs.ts","../../../bridge/src/codex/native-approvals.ts","../../../bridge/src/codex/native-mcp-approval.ts","../../../bridge/src/codex/questions.ts","../../../bridge/src/codex/managed-harness.ts","../../../bridge/src/codex/friendly-error.ts","../../../bridge/src/harnesses/codex.ts"],"names":["text","resolve","record","isAbsolute","join"],"mappings":"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","file":"codex.js","sourcesContent":["import { realpathSync, statSync } from \"node:fs\";\nimport { isAbsolute, join, relative } from \"node:path\";\nimport type { AgentPromptInput } from \"../types.js\";\nimport type { NativeRequests } from \"./native-protocol.generated.js\";\n\nconst invalid = () => new Error(\"CODEX_INPUT_INVALID\");\nconst inside = (root: string, path: string) => {\n const rel = relative(root, path);\n return rel !== \"\" && !rel.startsWith(\"..\") && !isAbsolute(rel);\n};\n\n/** Resolve attachments against trusted workspace/skill roots, never private credential state. */\nexport function codexPromptInput(\n input: AgentPromptInput,\n cwd: string,\n skills?: { source: string; target: string },\n): NativeRequests[\"turn/start\"][\"params\"][\"input\"] {\n if (\n !input ||\n typeof input.text !== \"string\" ||\n input.text.length > 1024 * 1024 ||\n (input.attachments !== undefined && !Array.isArray(input.attachments)) ||\n (input.attachments?.length ?? 0) > 32\n )\n throw invalid();\n const result: NativeRequests[\"turn/start\"][\"params\"][\"input\"] = [\n { type: \"text\", text: input.text },\n ];\n for (const attachment of input.attachments ?? []) {\n try {\n if (!attachment || typeof attachment.path !== \"string\") throw invalid();\n const root =\n attachment.type === \"skill\" && skills ? realpathSync(skills.source) : realpathSync(cwd);\n const path = realpathSync(\n isAbsolute(attachment.path) ? attachment.path : join(root, attachment.path),\n );\n if (!inside(root, path) || !statSync(path).isFile()) throw invalid();\n if (attachment.type === \"image\") result.push({ type: \"localImage\", path });\n else if (attachment.type === \"file\" || attachment.type === \"skill\") {\n if (!attachment.name || [...attachment.name].some((char) => char.charCodeAt(0) < 32))\n throw invalid();\n if (attachment.type === \"skill\") {\n if (!skills) throw invalid();\n const copied = realpathSync(join(skills.target, relative(root, path)));\n if (!inside(realpathSync(skills.target), copied) || !statSync(copied).isFile())\n throw invalid();\n result.push({ type: \"skill\", name: attachment.name, path: copied });\n } else result.push({ type: \"mention\", name: attachment.name, path });\n } else throw invalid();\n } catch {\n throw invalid();\n }\n }\n return result;\n}\n","import type { NativeApprovalDescription } from \"@skaile/workspaces/types\";\nimport type { CodexServerRequestHandlers } from \"../codex-app-server.js\";\nimport type { NativeNotifications, NativeServerRequests } from \"./native-protocol.generated.js\";\nimport {\n allowsNativeApprovalPath,\n isNativeApprovalPolicyActive,\n type NativeApprovalPolicy,\n} from \"./native-policy.js\";\nimport type { CodexQuestions } from \"./questions.js\";\n\ntype ApprovalMethod =\n | \"item/commandExecution/requestApproval\"\n | \"item/fileChange/requestApproval\"\n | \"item/permissions/requestApproval\";\ntype Identity = { itemId: string; threadId: string; turnId: string };\ntype Permissions =\n NativeServerRequests[\"item/permissions/requestApproval\"][\"params\"][\"permissions\"];\n\n/** Changes from a retained native file-change item in the same thread and turn. */\nexport type NativeApprovalFileChanges = Extract<\n NativeNotifications[\"item/started\"][\"item\"],\n { type: \"fileChange\" }\n>[\"changes\"];\n\n/** Harness-owned consent hooks; the existing native callback wrapper owns turn/generation binding. */\nexport function createCodexNativeApprovalHandlers(options: {\n questions: CodexQuestions;\n getPolicy: () => NativeApprovalPolicy | undefined;\n getFileChanges: (identity: Identity) => NativeApprovalFileChanges | undefined;\n}): Pick<CodexServerRequestHandlers, ApprovalMethod> {\n const active = (signal: AbortSignal, threadId: string) =>\n !signal.aborted && isNativeApprovalPolicyActive(options.getPolicy(), threadId);\n const text = (value: unknown): value is string =>\n typeof value === \"string\" && value.length > 0 && value.length <= 8192;\n const scoped = async (\n path: unknown,\n access: \"read\" | \"write\",\n signal: AbortSignal,\n threadId: string,\n ) =>\n active(signal, threadId) &&\n text(path) &&\n allowsNativeApprovalPath(options.getPolicy(), path, access) &&\n active(signal, threadId);\n const permissions = async (value: Permissions, signal: AbortSignal, threadId: string) => {\n if (\n value.network?.enabled ||\n (value.network != null && Object.keys(value.network).some((key) => key !== \"enabled\")) ||\n Object.keys(value).some((key) => ![\"network\", \"fileSystem\"].includes(key))\n )\n return false;\n const fs = value.fileSystem;\n if (!fs) return true;\n if (\n fs.entries != null ||\n fs.globScanMaxDepth != null ||\n Object.keys(fs).some((key) => ![\"read\", \"write\", \"entries\", \"globScanMaxDepth\"].includes(key))\n )\n return false;\n for (const access of [\"read\", \"write\"] as const) {\n const paths = fs[access];\n if (paths != null && (!Array.isArray(paths) || paths.length > 32)) return false;\n for (const path of paths ?? [])\n if (!(await scoped(path, access, signal, threadId))) return false;\n }\n return active(signal, threadId);\n };\n const consent = async (\n identity: Identity,\n approval: NativeApprovalDescription,\n signal: AbortSignal,\n ) => {\n if (\n !active(signal, identity.threadId) ||\n approval.details.length > 64 ||\n approval.details.some((detail) => detail.length > 8192) ||\n approval.details.reduce((sum, detail) => sum + detail.length, 0) > 65536\n )\n return false;\n try {\n return (\n (await options.questions.requestApproval(identity, approval, signal)) &&\n active(signal, identity.threadId)\n );\n } catch {\n return false;\n }\n };\n return {\n \"item/commandExecution/requestApproval\": async (input, signal) => {\n const params = structuredClone(input);\n const allowed = async () =>\n active(signal, params.threadId) &&\n text(params.command) &&\n (params.kind == null || params.kind === \"command\") &&\n !params.environmentId &&\n !params.networkApprovalContext &&\n (params.availableDecisions == null || params.availableDecisions.includes(\"accept\")) &&\n (await scoped(params.cwd, \"read\", signal, params.threadId)) &&\n (!params.additionalPermissions ||\n (await permissions(params.additionalPermissions, signal, params.threadId)));\n if (!(await allowed())) return { decision: \"decline\" };\n const details = [`Command: ${params.command}`, `Directory: ${params.cwd}`];\n for (const access of [\"read\", \"write\"] as const)\n for (const path of params.additionalPermissions?.fileSystem?.[access] ?? [])\n details.push(`${access}: ${path}`);\n const accepted = await consent(params, { kind: \"command\", details }, signal);\n return { decision: accepted && (await allowed()) ? \"accept\" : \"decline\" };\n },\n \"item/fileChange/requestApproval\": async (input, signal) => {\n const params = structuredClone(input);\n if (!active(signal, params.threadId)) return { decision: \"decline\" };\n const original = options.getFileChanges(params);\n if (!original?.length || original.length > 16) return { decision: \"decline\" };\n const changes = structuredClone(original);\n const snapshot = JSON.stringify(changes);\n const allowed = async () => {\n if (\n !active(signal, params.threadId) ||\n snapshot !== JSON.stringify(options.getFileChanges(params))\n )\n return false;\n if (\n params.grantRoot != null &&\n !(await scoped(params.grantRoot, \"write\", signal, params.threadId))\n )\n return false;\n for (const change of changes) {\n if (!text(change.diff) || !(await scoped(change.path, \"write\", signal, params.threadId)))\n return false;\n if (![\"add\", \"delete\", \"update\"].includes(change.kind.type)) return false;\n if (\n change.kind.type === \"update\" &&\n change.kind.move_path != null &&\n !(await scoped(change.kind.move_path, \"write\", signal, params.threadId))\n )\n return false;\n }\n return active(signal, params.threadId);\n };\n if (!(await allowed())) return { decision: \"decline\" };\n const details = changes.flatMap((change) => [\n `${change.kind.type}: ${change.path}${change.kind.type === \"update\" && change.kind.move_path ? ` → ${change.kind.move_path}` : \"\"}`,\n change.diff,\n ]);\n const accepted = await consent(params, { kind: \"file\", details }, signal);\n return { decision: accepted && (await allowed()) ? \"accept\" : \"decline\" };\n },\n \"item/permissions/requestApproval\": async (input, signal) => {\n const params = structuredClone(input);\n const allowed = async () =>\n active(signal, params.threadId) &&\n !params.environmentId &&\n (await scoped(params.cwd, \"read\", signal, params.threadId)) &&\n (await permissions(params.permissions, signal, params.threadId));\n if (!(await allowed())) return { permissions: {}, scope: \"turn\" };\n const details = [`Directory: ${params.cwd}`];\n for (const access of [\"read\", \"write\"] as const)\n for (const path of params.permissions.fileSystem?.[access] ?? [])\n details.push(`${access}: ${path}`);\n if (details.length === 1) return { permissions: {}, scope: \"turn\" };\n const accepted = await consent(params, { kind: \"permissions\", details }, signal);\n return {\n permissions: accepted && (await allowed()) ? params.permissions : {},\n scope: \"turn\",\n };\n },\n };\n}\n","import type { CodexServerRequestHandlers } from \"../codex-app-server.js\";\nimport { isNativeApprovalPolicyActive, type NativeApprovalPolicy } from \"./native-policy.js\";\nimport type { CodexQuestions } from \"./questions.js\";\n\ntype Handler = NonNullable<CodexServerRequestHandlers[\"mcpServer/elicitation/request\"]>;\nconst record = (value: unknown): value is Record<string, unknown> =>\n value !== null && typeof value === \"object\" && !Array.isArray(value);\nconst text = (value: unknown): value is string =>\n typeof value === \"string\" && value.length > 0 && Buffer.byteLength(value) <= 8192;\n\n/** Human consent for the configured runner callback, independent of downstream tool authorization. */\nexport function createCodexMcpApprovalHandler(options: {\n serverName: string | undefined;\n questions: CodexQuestions;\n getPolicy: () => NativeApprovalPolicy | undefined;\n bindingActive: () => boolean;\n}): Handler {\n return async (input, signal) => {\n const decline = { action: \"decline\" as const, content: null, _meta: null };\n try {\n const params = structuredClone(input);\n const active = () =>\n !signal.aborted &&\n options.bindingActive() &&\n isNativeApprovalPolicyActive(options.getPolicy(), params.threadId);\n if (\n !active() ||\n !text(options.serverName) ||\n params.serverName !== options.serverName ||\n !text(params.threadId) ||\n !text(params.turnId) ||\n params.mode !== \"form\" ||\n !text(params.message) ||\n Object.keys(params).some(\n (key) =>\n ![\n \"threadId\",\n \"turnId\",\n \"serverName\",\n \"mode\",\n \"message\",\n \"requestedSchema\",\n \"_meta\",\n ].includes(key),\n ) ||\n !record(params._meta) ||\n params._meta.codex_approval_kind !== \"mcp_tool_call\" ||\n !record(params.requestedSchema) ||\n params.requestedSchema.type !== \"object\" ||\n !record(params.requestedSchema.properties) ||\n Object.keys(params.requestedSchema.properties).length !== 0 ||\n Object.keys(params.requestedSchema).some(\n (key) => ![\"type\", \"properties\", \"required\"].includes(key),\n ) ||\n (params.requestedSchema.required !== undefined &&\n (!Array.isArray(params.requestedSchema.required) ||\n params.requestedSchema.required.length !== 0)) ||\n Buffer.byteLength(JSON.stringify(params._meta)) > 65536\n )\n return decline;\n const accepted = await options.questions.requestApproval(\n undefined,\n {\n kind: \"mcp\",\n details: [\n `Configured MCP server: ${options.serverName}`,\n params.message,\n \"This is native request presentation, not an independently verified tool identity. Tool permissions are checked again when dispatched.\",\n ],\n },\n signal,\n );\n return accepted && active() ? { action: \"accept\", content: null, _meta: null } : decline;\n } catch {\n return decline;\n }\n };\n}\n","import { randomUUID } from \"node:crypto\";\nimport type { NativeApprovalDescription } from \"@skaile/workspaces/types\";\nimport type { CodexServerRequestHandlers } from \"../codex-app-server.js\";\nimport type { AgentEvent } from \"../types.js\";\nimport type { NativeServerRequests } from \"./native-protocol.generated.js\";\n\ntype InputRequest = NativeServerRequests[\"item/tool/requestUserInput\"];\n\n/** One correlated native question batch, settled only by matching replies or cancellation. */\nexport class CodexQuestions {\n private pending?: {\n id: string;\n questions: InputRequest[\"params\"][\"questions\"];\n answers: InputRequest[\"result\"][\"answers\"];\n approval?: NativeApprovalDescription;\n finish: (result?: InputRequest[\"result\"]) => void;\n };\n constructor(private readonly emit: (event: AgentEvent) => void) {}\n\n readonly request: NonNullable<CodexServerRequestHandlers[\"item/tool/requestUserInput\"]> = async (\n params,\n signal,\n ) => this.park(params, signal);\n\n /** Park native consent; MCP uses only local correlation because it supplies no native item ID. */\n async requestApproval(\n identity: Pick<InputRequest[\"params\"], \"itemId\" | \"threadId\" | \"turnId\"> | undefined,\n approval: NativeApprovalDescription,\n signal: AbortSignal,\n ): Promise<boolean> {\n const result = await this.park(\n {\n ...identity,\n isBlocking: true,\n questions: [\n {\n id: \"native-approval\",\n header: \"Approval\",\n question:\n approval.kind === \"permissions\"\n ? \"Allow these permissions for the current turn?\"\n : approval.kind === \"mcp\"\n ? \"Allow this native MCP request once?\"\n : \"Allow this native action once?\",\n options: [\n {\n label: \"Approve once\",\n description:\n approval.kind === \"permissions\"\n ? \"Allow for the current turn.\"\n : \"Allow only this request.\",\n },\n { label: \"Deny\", description: \"Do not allow this request.\" },\n ],\n },\n ],\n },\n signal,\n approval,\n );\n return result.answers[\"native-approval\"]?.answers[0] === \"Approve once\";\n }\n\n private async park(\n params: Omit<InputRequest[\"params\"], \"itemId\" | \"threadId\" | \"turnId\"> & { itemId?: string },\n signal: AbortSignal,\n approval?: NativeApprovalDescription,\n ): Promise<InputRequest[\"result\"]> {\n signal.throwIfAborted();\n if (\n this.pending ||\n !params.isBlocking ||\n !Array.isArray(params.questions) ||\n params.questions.length === 0 ||\n params.questions.length > 16 ||\n params.questions.some((q) => !q.id || !q.question || q.isSecret) ||\n new Set(params.questions.map((q) => q.id)).size !== params.questions.length ||\n new Set(params.questions.map((q) => q.question)).size !== params.questions.length\n )\n throw new Error(\"CODEX_INPUT_UNSUPPORTED\");\n params = structuredClone(params);\n approval = approval ? structuredClone(approval) : undefined;\n const id = randomUUID();\n const eventId = params.itemId ?? `local-consent:${id}`;\n return new Promise((resolve, reject) => {\n const abort = () => finish();\n const finish = (result?: InputRequest[\"result\"]) => {\n if (this.pending?.id !== id) return;\n this.pending = undefined;\n signal.removeEventListener(\"abort\", abort);\n if (result && !signal.aborted) resolve(result);\n else reject(new Error(\"CODEX_INPUT_CANCELLED\"));\n };\n this.pending = {\n id,\n questions: params.questions,\n answers: Object.create(null),\n finish,\n approval,\n };\n const input = {\n requestId: id,\n questions: structuredClone(params.questions),\n ...(approval ? { approval: structuredClone(approval) } : {}),\n };\n signal.addEventListener(\"abort\", abort, { once: true });\n if (signal.aborted) {\n abort();\n return;\n }\n this.emit({\n type: \"message_start\",\n message: {\n role: \"assistant\",\n content: [\n {\n type: \"tool_use\",\n name: \"AskUserQuestion\",\n id: eventId,\n input,\n },\n ],\n },\n });\n if (this.pending?.id !== id || signal.aborted) return;\n this.emit({\n type: \"tool_call\",\n name: \"AskUserQuestion\",\n tool: { name: \"AskUserQuestion\" },\n toolCallId: eventId,\n input,\n });\n });\n }\n\n get active(): boolean {\n return Boolean(this.pending);\n }\n\n answer(answer: string, question?: string, requestId?: string): boolean {\n const pending = this.pending;\n if (!pending || pending.id !== requestId || typeof answer !== \"string\") return false;\n if (\n pending.approval &&\n (question !== pending.questions[0]?.question || ![\"Approve once\", \"Deny\"].includes(answer))\n )\n return false;\n const q =\n question === undefined\n ? pending.questions.find((entry) => !Object.hasOwn(pending.answers, entry.id))\n : pending.questions.find((entry) => entry.question === question);\n if (!q || Object.hasOwn(pending.answers, q.id)) return false;\n pending.answers[q.id] = { answers: [answer] };\n if (pending.questions.every((entry) => Object.hasOwn(pending.answers, entry.id)))\n pending.finish({ answers: pending.answers });\n return true;\n }\n}\n","import { isAbsolute, join } from \"node:path\";\nimport { isDeepStrictEqual } from \"node:util\";\nimport type { CodexCredentialDelivery, TokenUsage } from \"@skaile/workspaces/types\";\nimport { CodexAppServerClient, type CodexServerRequestHandlers } from \"../codex-app-server.js\";\nimport * as recovery from \"../harnesses/recovery-policy.js\";\nimport { type ReconfigureConfig, ReconfigureLedger } from \"../reconfigure-ledger.js\";\nimport { BUILTIN_HARNESS_CATALOG } from \"../registry.js\";\nimport {\n AgentHarness,\n type AgentConfig,\n type AgentEvent,\n type AgentMessage,\n type AgentPromptInput,\n type CodexManagedRuntimeOptions,\n type CodexNativeMcpDiagnostics,\n type CodexToolTransport,\n type HarnessInfo,\n type ReconfigureOutcome,\n type ReconfigurePatch,\n TOOL_ALLOWLIST_UNSUPPORTED,\n} from \"../types.js\";\nimport {\n managedCodexRegistryViolation,\n parseCodexCredential,\n parseCodexRefreshResult,\n} from \"./credentials.js\";\nimport { codexInstanceEnvironment, prepareCodexInstance } from \"./instance-state.js\";\nimport { codexPromptInput } from \"./inputs.js\";\nimport {\n prepareNativePolicy,\n activateNativeApprovalPolicy,\n isNativeApprovalPolicyActive,\n type NativeApprovalPolicy,\n} from \"./native-policy.js\";\nimport {\n createCodexNativeApprovalHandlers,\n type NativeApprovalFileChanges,\n} from \"./native-approvals.js\";\nimport { createCodexMcpApprovalHandler } from \"./native-mcp-approval.js\";\nimport { CodexNativeStateUnavailable } from \"./native-state.js\";\nimport { CodexQuestions } from \"./questions.js\";\nimport type { NativeNotifications } from \"./native-protocol.generated.js\";\n\nconst record = (value: unknown): value is Record<string, unknown> =>\n value !== null && typeof value === \"object\" && !Array.isArray(value);\nconst failure = (code = \"CODEX_RUNTIME_UNSUPPORTED\") => new Error(code);\nconst nativeUsage = (value: Record<string, unknown>): TokenUsage => ({\n ...(typeof value.inputTokens === \"number\" ? { inputTokens: value.inputTokens } : {}),\n ...(typeof value.outputTokens === \"number\" ? { outputTokens: value.outputTokens } : {}),\n ...(typeof value.cachedInputTokens === \"number\"\n ? { cacheReadTokens: value.cachedInputTokens }\n : {}),\n ...(typeof value.reasoningOutputTokens === \"number\"\n ? { reasoningTokens: value.reasoningOutputTokens }\n : {}),\n ...(typeof value.totalTokens === \"number\" ? { totalTokens: value.totalTokens } : {}),\n});\nconst subtractUsage = (total: TokenUsage, baseline?: TokenUsage): TokenUsage => {\n const delta = (value?: number, before?: number) =>\n value === undefined ? undefined : Math.max(0, value - (before ?? 0));\n return {\n ...(delta(total.inputTokens, baseline?.inputTokens) !== undefined\n ? { inputTokens: delta(total.inputTokens, baseline?.inputTokens) }\n : {}),\n ...(delta(total.outputTokens, baseline?.outputTokens) !== undefined\n ? { outputTokens: delta(total.outputTokens, baseline?.outputTokens) }\n : {}),\n ...(delta(total.cacheReadTokens, baseline?.cacheReadTokens) !== undefined\n ? {\n cacheReadTokens: delta(total.cacheReadTokens, baseline?.cacheReadTokens),\n }\n : {}),\n ...(delta(total.reasoningTokens, baseline?.reasoningTokens) !== undefined\n ? {\n reasoningTokens: delta(total.reasoningTokens, baseline?.reasoningTokens),\n }\n : {}),\n ...(delta(total.totalTokens, baseline?.totalTokens) !== undefined\n ? { totalTokens: delta(total.totalTokens, baseline?.totalTokens) }\n : {}),\n };\n};\nconst addUsage = (left: TokenUsage | undefined, right: TokenUsage): TokenUsage => {\n const result: TokenUsage = {};\n for (const key of [\n \"inputTokens\",\n \"outputTokens\",\n \"cacheReadTokens\",\n \"reasoningTokens\",\n \"totalTokens\",\n ] as const) {\n if (left?.[key] !== undefined || right[key] !== undefined)\n result[key] = (left?.[key] ?? 0) + (right[key] ?? 0);\n }\n return result;\n};\nconst limit = (value: number | undefined, fallback: number) => {\n const result = value ?? fallback;\n if (!Number.isSafeInteger(result) || result <= 0 || result > 1_800_000)\n throw failure(\"AI_PROFILE_INVALID\");\n return result;\n};\nasync function bounded<T>(work: Promise<T>, signal: AbortSignal, ms: number): Promise<T> {\n let timer: ReturnType<typeof setTimeout> | undefined;\n let cancel = () => {};\n try {\n return await Promise.race([\n work,\n new Promise<never>((_, reject) => {\n cancel = () => reject(failure());\n if (signal.aborted) cancel();\n else signal.addEventListener(\"abort\", cancel, { once: true });\n timer = setTimeout(() => reject(failure()), ms);\n }),\n ]);\n } finally {\n clearTimeout(timer);\n signal.removeEventListener(\"abort\", cancel);\n }\n}\ntype ActiveTurn = {\n id?: string;\n controller: AbortController;\n done: Promise<void>;\n ready: Promise<void>;\n readyNow: () => void;\n finish: () => void;\n timer: ReturnType<typeof setTimeout>;\n events: Array<{ method: string; params: Record<string, unknown> }>;\n messages: Map<string, string>;\n fileChanges: Map<string, string>;\n toolResults: AgentMessage[];\n toolItems: Set<string>;\n completedToolItems: Set<string>;\n failureCode?: string;\n /** Recovery budget for this turn; the 401 refresh spends `auth_refresh` from it. */\n recovery: recovery.RecoveryBudget;\n usage?: TokenUsage;\n usageBaseline?: TokenUsage;\n usageCursor?: TokenUsage;\n contextTokens?: number;\n contextWindow?: number;\n actualModel: string;\n};\n\n/** Managed (App Server) adapter. `codexHarnessTarget` picks it over the standalone `CodexHarness` via `isManagedCodexConfig`. */\nexport class ManagedCodexHarness extends AgentHarness {\n readonly harnessInfo: HarnessInfo = {\n id: \"codex\",\n name: \"OpenAI Codex\",\n modelAgnostic: false,\n supportsInBandAbort: true,\n capabilities: BUILTIN_HARNESS_CATALOG.codex?.capabilities,\n };\n private client?: CodexAppServerClient;\n private connecting?: Promise<CodexAppServerClient>;\n private options?: CodexManagedRuntimeOptions;\n private credential?: CodexCredentialDelivery;\n private nativeApprovalPolicy?: NativeApprovalPolicy;\n private instance?: ReturnType<typeof prepareCodexInstance>;\n private tools?: CodexToolTransport;\n private mcpStartup: CodexNativeMcpDiagnostics[\"startupAtEnd\"] = \"unknown\";\n private pendingMcpStartup?: {\n threadId: string;\n status: CodexNativeMcpDiagnostics[\"startupAtEnd\"];\n };\n private mcpDiagnostics: CodexNativeMcpDiagnostics = {\n startupBeforeTurn: \"unknown\",\n startupAtEnd: \"unknown\",\n toolsListBeforeTurn: 0,\n toolsListTotal: 0,\n toolsCallTotal: 0,\n nativeMcpToolItemCount: 0,\n };\n private controller = new AbortController();\n private generation = 0;\n private killed = false;\n private broken = false;\n private cleanupUncertain = false;\n private unexpectedClose = false;\n private starting?: Promise<void>;\n private closing: Promise<void> = Promise.resolve();\n private threadId?: string;\n private lastThreadId?: string;\n private resetting?: Promise<void>;\n private pendingPatch?: Partial<Pick<AgentConfig, \"model\" | \"thinking\" | \"effort\">>;\n private active?: ActiveTurn;\n private threadUsageTotal?: TokenUsage;\n private resumeUsageTurnIds = new Set<string>();\n private queue: Promise<void> = Promise.resolve();\n private queued = 0;\n private admittedTurns = 0;\n private loginCompleted?: {\n resolve: () => void;\n reject: (error: Error) => void;\n };\n /** Recovery budget for the connection's startup (no active turn); reset on each start. */\n private startupRecovery: recovery.RecoveryBudget = recovery.freshBudget();\n private startupAuthAttempted = false;\n private readonly questions = new CodexQuestions((event) => this.event(event));\n\n override get acceptsReplyAsPrompt(): boolean {\n return false;\n }\n override hasPendingQuestion(): boolean {\n return this.questions.active;\n }\n override answerQuestion(answer: string, question?: string, requestId?: string): boolean {\n return this.questions.answer(answer, question, requestId);\n }\n\n /** The settings a later prompt will run on; `config` only takes them at the next turn. */\n private readonly desired: ReconfigureConfig;\n private readonly reconfig: ReconfigureLedger;\n\n constructor(private config: AgentConfig) {\n super();\n this.desired = {\n model: config.model,\n modelRef: config.modelRef,\n thinking: config.thinking,\n effort: config.effort,\n registry: config.registry,\n roles: config.roles,\n };\n this.reconfig = new ReconfigureLedger({\n config: () => this.desired,\n onDesired: ({ model, thinking, effort }) => {\n const fields: ReconfigurePatch = {};\n if (model !== undefined) fields.model = model;\n if (thinking !== undefined) fields.thinking = thinking;\n if (effort !== undefined) fields.effort = effort;\n this.pendingPatch = { ...this.pendingPatch, ...fields };\n },\n });\n }\n override get runtimeSessionId(): string | undefined {\n return this.threadId ?? this.lastThreadId;\n }\n get isRunning(): boolean {\n return Boolean(this.client && this.threadId && !this.killed && !this.broken);\n }\n override getModel(): string | undefined {\n return this.config.model;\n }\n\n async start(): Promise<void> {\n if (this.killed || this.broken) throw failure();\n if (this.threadId && this.client) return;\n if (this.starting) return this.starting;\n this.starting = this.initialize()\n .catch(async (error) => {\n this.broken = true;\n await this.closeGeneration();\n if (\n error instanceof CodexNativeStateUnavailable &&\n (this.cleanupUncertain ||\n this.unexpectedClose ||\n this.killed ||\n this.startupAuthAttempted)\n )\n throw failure();\n const safe =\n error instanceof Error && /^(AI_PROFILE_INVALID|CODEX_[A-Z_]+)$/.test(error.message)\n ? error\n : failure();\n throw safe;\n })\n .finally(() => {\n this.starting = undefined;\n });\n return this.starting;\n }\n\n private async initialize(): Promise<void> {\n await this.closing;\n if (this.killed) throw failure();\n const options = this.config.harnessOptions?.codex?.managedRuntime;\n const tuning = this.config.harnessOptions?.codex;\n if (\n tuning?.authSource !== \"managed\" ||\n !options ||\n typeof options.prepareTools !== \"function\" ||\n !isAbsolute(options.executable) ||\n !this.config.model ||\n !tuning.reasoningEffort ||\n !tuning.approvalPolicy ||\n tuning.approvalPolicy === \"on-failure\" ||\n !tuning.sandboxMode ||\n tuning.sandboxMode === \"danger-full-access\" ||\n // A managed session runs on the platform-minted credential alone: an\n // OpenAI key handed in through the child environment would be a second,\n // unaudited authority.\n this.config.env?.OPENAI_API_KEY ||\n // Credential isolation, stated on the AI provider registry: one entry,\n // codex's own OpenAI surface, a platform-injected oauth reference. See\n // `managedCodexRegistryViolation`.\n managedCodexRegistryViolation(this.config.registry) !== undefined ||\n (options.nativeTurnBudget !== undefined && options.nativeTurnBudget !== 1)\n )\n throw failure(\"AI_PROFILE_INVALID\");\n this.options = options;\n const timeout = limit(options.requestTimeoutMs, 15_000);\n limit(options.turnTimeoutMs, 300_000);\n try {\n this.credential = parseCodexCredential(this.credential ?? options.credential);\n } catch {\n throw failure(\"CODEX_AUTH_UNAVAILABLE\");\n }\n if (this.credential.configId !== this.config.aiProviderConfigId)\n throw failure(\"AI_PROFILE_INVALID\");\n const privatePolicy = prepareNativePolicy({\n cwd: this.config.cwd,\n privateRoot: options.privateRoot,\n privateDirectory: options.privateDirectory,\n sandboxMode: tuning.sandboxMode,\n });\n this.instance = prepareCodexInstance(this.config, options, this.credential);\n const generation = ++this.generation;\n const mcpReplies = new WeakMap<object, () => boolean>();\n this.controller = new AbortController();\n this.startupRecovery = recovery.freshBudget();\n this.startupAuthAttempted = false;\n const handlers: CodexServerRequestHandlers = {\n \"account/chatgptAuthTokens/refresh\": async (params, signal) => {\n const active = this.active;\n // The client runs this handler a microtask after the frame arrives, so a\n // `turn/completed` parsed in the same chunk has already ended the turn this\n // request belonged to. With no turn and no startup in flight it is stale:\n // refusing it keeps the finished turn's spent budget from being bypassed.\n if (!active && !this.starting) throw failure(\"CODEX_AUTH_UNAVAILABLE\");\n if (!active) this.startupAuthAttempted = true;\n const cancellation = AbortSignal.any([\n signal,\n this.controller.signal,\n ...(active ? [active.controller.signal] : []),\n ]);\n try {\n return await this.refresh(params, cancellation);\n } catch {\n if (active && this.active === active) active.failureCode = \"CODEX_AUTH_UNAVAILABLE\";\n throw failure(\"CODEX_AUTH_UNAVAILABLE\");\n }\n },\n };\n const authMode = this.credential.kind === \"codex-subscription\" ? \"chatgpt\" : \"api\";\n const nativePolicy = {\n cli_auth_credentials_store: \"ephemeral\",\n forced_login_method: authMode,\n model_provider: \"openai\",\n model: this.config.model,\n model_instructions_file: this.instance.instructionFile,\n shell_environment_policy: {\n inherit: \"none\",\n set: { PATH: options.environment.PATH ?? \"/usr/bin:/bin\" },\n },\n mcp_servers: {},\n };\n const overrides = Object.entries({\n cli_auth_credentials_store: \"ephemeral\",\n forced_login_method: authMode,\n model_provider: \"openai\",\n model: this.config.model,\n model_instructions_file: this.instance.instructionFile,\n \"shell_environment_policy.inherit\": \"none\",\n \"shell_environment_policy.set.PATH\": options.environment.PATH ?? \"/usr/bin:/bin\",\n }).flatMap(([key, value]) => [\"-c\", `${key}=${JSON.stringify(value)}`]);\n overrides.push(\"-c\", \"mcp_servers={}\");\n const connecting = CodexAppServerClient.connect(\n {\n command: options.executable,\n args: [\n ...(options.executableArgs ?? []),\n ...overrides,\n ...privatePolicy.cliArgs,\n \"app-server\",\n \"--stdio\",\n ],\n cwd: this.instance.root,\n env: codexInstanceEnvironment(options.environment, this.instance.home),\n clientInfo: { name: \"skaile-managed-codex\", version: \"1\" },\n processGroup: true,\n requestTimeoutMs: timeout,\n serverRequestTimeoutMs: Math.min(limit(options.interactionTimeoutMs, 300_000), 300_000),\n onServerRequest: handlers,\n canReplyToServerRequest: (method, params) => {\n if (method !== \"mcpServer/elicitation/request\") return true;\n return record(params) && (mcpReplies.get(params)?.() ?? false);\n },\n onNotification: (method, params) => {\n if (generation === this.generation) this.notification(method, params);\n },\n onClose: () => {\n if (generation !== this.generation) return;\n this.unexpectedClose = true;\n this.broken = true;\n this.loginCompleted?.reject(failure());\n this.finishTurn(\"CODEX_RUNTIME_UNSUPPORTED\");\n void this.closeGeneration();\n },\n },\n this.controller.signal,\n );\n this.connecting = connecting;\n try {\n this.client = await connecting;\n } finally {\n if (this.connecting === connecting) this.connecting = undefined;\n }\n if (generation !== this.generation || this.killed) throw failure();\n await this.authenticate(timeout);\n const toolsPromise = options.prepareTools(this.controller.signal).then(async (tools) => {\n if (generation !== this.generation || this.controller.signal.aborted) {\n await tools.dispose().catch(() => {});\n throw failure();\n }\n return tools;\n });\n try {\n this.tools = await bounded(toolsPromise, this.controller.signal, timeout);\n } catch {\n throw failure(\"CODEX_REQUIRED_TOOL_UNAVAILABLE\");\n }\n if (\n !this.tools ||\n !record(this.tools.mcpServers) ||\n typeof this.tools.dispose !== \"function\" ||\n (Object.keys(this.tools.mcpServers).length === 0 &&\n Object.keys(this.tools.onServerRequest ?? {}).length === 0)\n )\n throw failure(\"CODEX_REQUIRED_TOOL_UNAVAILABLE\");\n if (this.tools.onServerRequest?.[\"item/tool/requestUserInput\"])\n throw failure(\"AI_PROFILE_INVALID\");\n const nativeApprovals = createCodexNativeApprovalHandlers({\n questions: this.questions,\n getPolicy: () => (tuning.approvalPolicy === \"never\" ? undefined : this.nativeApprovalPolicy),\n getFileChanges: ({ itemId, threadId, turnId }) => {\n const active = this.active;\n if (\n !active ||\n active.controller.signal.aborted ||\n threadId !== this.threadId ||\n turnId !== active.id\n )\n return undefined;\n const snapshot = active.fileChanges.get(itemId);\n return snapshot ? (JSON.parse(snapshot) as NativeApprovalFileChanges) : undefined;\n },\n });\n const approvalTools = this.tools;\n const approvalServerName = approvalTools.approvalServerName;\n const approvalServer = approvalServerName\n ? approvalTools.mcpServers[approvalServerName]\n : undefined;\n const approvalServerSnapshot = structuredClone(approvalServer);\n const mcpBindingActive = () =>\n this.tools === approvalTools &&\n approvalTools.approvalServerName === approvalServerName &&\n Boolean(approvalServerName) &&\n Object.hasOwn(approvalTools.mcpServers, approvalServerName!) &&\n record(approvalServer) &&\n approvalTools.mcpServers[approvalServerName!] === approvalServer &&\n isDeepStrictEqual(approvalServer, approvalServerSnapshot);\n const mcpPolicy = () =>\n tuning.approvalPolicy === \"never\" ? undefined : this.nativeApprovalPolicy;\n const mcpApproval = createCodexMcpApprovalHandler({\n serverName: approvalServerName,\n questions: this.questions,\n getPolicy: mcpPolicy,\n bindingActive: mcpBindingActive,\n });\n for (const [method, handler] of Object.entries({\n ...this.tools.onServerRequest,\n ...nativeApprovals,\n \"item/tool/requestUserInput\": this.questions.request,\n \"mcpServer/elicitation/request\": mcpApproval,\n })) {\n if (method === \"account/chatgptAuthTokens/refresh\" || !handler)\n throw failure(\"AI_PROFILE_INVALID\");\n (handlers as Record<string, (params: unknown, signal: AbortSignal) => Promise<unknown>>)[\n method\n ] = async (params, signal) => {\n const active = this.active;\n if (generation !== this.generation || !active || !record(params)) throw failure();\n await active.ready;\n if (\n generation !== this.generation ||\n this.active !== active ||\n params.threadId !== this.threadId ||\n params.turnId !== active.id\n )\n throw failure();\n const cancellation = AbortSignal.any([signal, active.controller.signal]);\n if (cancellation.aborted) throw failure();\n if (method === \"mcpServer/elicitation/request\") {\n mcpReplies.set(\n params,\n () =>\n generation === this.generation &&\n this.active === active &&\n !cancellation.aborted &&\n params.threadId === this.threadId &&\n params.turnId === active.id &&\n mcpBindingActive() &&\n isNativeApprovalPolicyActive(mcpPolicy(), this.threadId ?? \"\"),\n );\n }\n const result = await (\n handler as (params: unknown, signal: AbortSignal) => Promise<unknown>\n )(params, cancellation);\n if (generation !== this.generation || cancellation.aborted || this.active !== active)\n throw failure();\n return result;\n };\n }\n if (this.tools.instructions) this.instance.setToolInstructions(this.tools.instructions);\n const threadParams = {\n model: this.config.model,\n modelProvider: \"openai\",\n cwd: this.instance.cwd,\n approvalPolicy: tuning.approvalPolicy,\n permissions: \"managed\",\n config: {\n ...nativePolicy,\n ...privatePolicy.config,\n mcp_servers: this.tools.mcpServers,\n model_reasoning_effort: this.config.effort ?? tuning.reasoningEffort,\n },\n };\n const resuming = Boolean(this.config.resumeSessionId);\n this.threadUsageTotal = resuming ? (this.threadUsageTotal ?? {}) : {};\n this.resumeUsageTurnIds.clear();\n const response = resuming\n ? await this.client.request(\"thread/resume\", {\n ...threadParams,\n threadId: this.config.resumeSessionId!,\n excludeTurns: false,\n })\n : await this.client.request(\"thread/start\", {\n ...threadParams,\n allowProviderModelFallback: false,\n });\n if (!record(response) || response.model !== this.config.model)\n throw failure(\"CODEX_MODEL_UNAVAILABLE\");\n if (\n !record(response.thread) ||\n typeof response.thread.id !== \"string\" ||\n (resuming && response.thread.id !== this.config.resumeSessionId) ||\n (resuming && !Array.isArray(response.thread.turns)) ||\n response.reasoningEffort !== (this.config.effort ?? tuning.reasoningEffort) ||\n response.modelProvider !== \"openai\" ||\n response.approvalPolicy !== tuning.approvalPolicy\n )\n throw failure(\"AI_PROFILE_INVALID\");\n if (generation !== this.generation || this.killed) throw failure();\n this.resumeUsageTurnIds = new Set(\n resuming && Array.isArray(response.thread.turns)\n ? response.thread.turns.flatMap((turn) =>\n record(turn) && typeof turn.id === \"string\" ? [turn.id] : [],\n )\n : [],\n );\n this.nativeApprovalPolicy = activateNativeApprovalPolicy(\n privatePolicy,\n response,\n this.controller.signal,\n );\n this.threadId = response.thread.id;\n this.mcpStartup =\n this.pendingMcpStartup?.threadId === this.threadId\n ? this.pendingMcpStartup.status\n : \"unknown\";\n this.pendingMcpStartup = undefined;\n this.lastThreadId = this.threadId;\n this.instance.bindThread(this.threadId);\n }\n\n private async authenticate(timeout: number): Promise<void> {\n const credential = this.credential!;\n if (credential.kind === \"openai-api-key\") {\n const result = await this.client!.request(\"account/login/start\", {\n type: \"apiKey\",\n apiKey: credential.apiKey,\n });\n if (result.type !== \"apiKey\") throw failure(\"CODEX_AUTH_UNAVAILABLE\");\n return;\n }\n const completion = new Promise<void>((resolve, reject) => {\n this.loginCompleted = { resolve, reject };\n });\n // A native completion can precede its RPC reply; install the waiter first.\n const wait = bounded(completion, this.controller.signal, timeout);\n void wait.catch(() => {});\n try {\n const result = await this.client!.request(\"account/login/start\", {\n type: \"chatgptAuthTokens\",\n accessToken: credential.accessToken,\n chatgptAccountId: credential.chatgptAccountId,\n chatgptPlanType: credential.chatgptPlanType ?? null,\n });\n if (result.type !== \"chatgptAuthTokens\") throw failure(\"CODEX_AUTH_UNAVAILABLE\");\n await wait;\n } finally {\n this.loginCompleted = undefined;\n }\n }\n\n private async refresh(params: unknown, signal: AbortSignal) {\n const credential = this.credential;\n if (\n !record(params) ||\n params.reason !== \"unauthorized\" ||\n !credential ||\n credential.kind !== \"codex-subscription\" ||\n (params.previousAccountId != null &&\n params.previousAccountId !== credential.chatgptAccountId) ||\n !this.options?.refreshCredential\n )\n throw failure(\"CODEX_AUTH_UNAVAILABLE\");\n // The codex server replays the turn itself after a refresh; the policy only\n // grants the attempt. One refresh per active turn, one at startup.\n const active = this.active;\n const budget = active ? active.recovery : this.startupRecovery;\n const decision = recovery.decide(\n { message: \"unauthorized\", authError: true, limitRejected: false, queryEnded: false },\n budget,\n { onAuthError: true, onLimitBlocked: false, resumableSessionId: false },\n );\n if (!(\"attempt\" in decision) || decision.attempt !== \"auth_refresh\")\n throw failure(\"CODEX_AUTH_UNAVAILABLE\");\n const spent = recovery.spend(budget, \"auth_refresh\");\n if (active) active.recovery = spent;\n else this.startupRecovery = spent;\n const result = await this.options.refreshCredential(\n {\n kind: \"codex-subscription\",\n configId: credential.configId,\n credentialVersion: credential.credentialVersion,\n reason: \"retry-401\",\n },\n signal,\n );\n if (signal.aborted) throw failure(\"CODEX_AUTH_UNAVAILABLE\");\n let parsed: ReturnType<typeof parseCodexRefreshResult>;\n try {\n parsed = parseCodexRefreshResult(result, credential);\n } catch {\n throw failure(\"CODEX_AUTH_UNAVAILABLE\");\n }\n if (!parsed.ok) throw failure(\"CODEX_AUTH_UNAVAILABLE\");\n this.credential = parsed.credential;\n return {\n accessToken: parsed.credential.accessToken,\n chatgptAccountId: parsed.credential.chatgptAccountId,\n chatgptPlanType: parsed.credential.chatgptPlanType ?? null,\n };\n }\n\n prompt(message: string): Promise<void> {\n return this.promptInput({ text: message });\n }\n\n override promptInput(input: AgentPromptInput): Promise<void> {\n if (input.toolAllowlist !== undefined)\n return Promise.reject(new Error(TOOL_ALLOWLIST_UNSUPPORTED));\n const message = structuredClone(input);\n const turnBudget = this.config.harnessOptions?.codex?.managedRuntime?.nativeTurnBudget;\n if (\n this.killed ||\n this.broken ||\n this.resetting ||\n this.queued >= 32 ||\n (turnBudget !== undefined && this.admittedTurns >= turnBudget)\n )\n return Promise.reject(failure());\n if (turnBudget !== undefined) this.admittedTurns++;\n this.queued++;\n const task = this.queue.then(() => this.runTurn(message));\n this.queue = task\n .catch(() => {})\n .finally(() => {\n this.queued--;\n });\n return task;\n }\n\n private async runTurn(message: AgentPromptInput): Promise<void> {\n if (this.resetting) throw failure();\n await this.start();\n if (this.killed || this.broken || this.resetting) throw failure();\n if (this.pendingPatch) {\n this.config = { ...this.config, ...this.pendingPatch };\n this.pendingPatch = undefined;\n }\n if (!this.config.model) throw failure(\"AI_PROFILE_INVALID\");\n await this.tools?.validate?.();\n if (this.tools?.needsReload?.()) {\n this.config = { ...this.config, resumeSessionId: this.threadId };\n await this.closeGeneration();\n await this.start();\n }\n const input = codexPromptInput(\n message,\n this.instance!.cwd,\n this.options?.skillsDirectory\n ? {\n source: this.options.skillsDirectory,\n target: join(this.instance!.home, \"skills\"),\n }\n : undefined,\n );\n try {\n parseCodexCredential(this.credential);\n } catch {\n throw failure(\"CODEX_AUTH_UNAVAILABLE\");\n }\n let finish!: () => void;\n let readyNow!: () => void;\n const ready = new Promise<void>((resolve) => {\n readyNow = resolve;\n });\n const done = new Promise<void>((resolve) => {\n finish = resolve;\n });\n const active: ActiveTurn = {\n controller: new AbortController(),\n done,\n finish,\n ready,\n readyNow,\n timer: setTimeout(\n () => {\n this.finishTurn(\"CODEX_RUNTIME_UNSUPPORTED\");\n this.broken = true;\n void this.closeGeneration();\n },\n limit(this.options?.turnTimeoutMs, 300_000),\n ),\n events: [],\n messages: new Map(),\n fileChanges: new Map(),\n toolResults: [],\n toolItems: new Set(),\n completedToolItems: new Set(),\n recovery: recovery.freshBudget(),\n usageBaseline: this.threadUsageTotal,\n actualModel: this.config.model!,\n };\n this.active = active;\n this.mcpDiagnostics.nativeMcpToolItemCount = 0;\n this.observeMcp(true);\n this.tools?.beginTurn?.(active.controller.signal);\n try {\n const response = await this.client!.request(\"turn/start\", {\n threadId: this.threadId!,\n permissions: \"managed\",\n input,\n model: this.config.model,\n effort: this.config.effort ?? this.config.harnessOptions!.codex!.reasoningEffort,\n });\n if (this.active !== active) return;\n if (!record(response.turn) || typeof response.turn.id !== \"string\") throw failure();\n active.id = response.turn.id;\n active.readyNow();\n for (const event of active.events.splice(0)) this.notification(event.method, event.params);\n if (this.active === active && response.turn.status !== \"inProgress\")\n this.complete(response.turn);\n await done;\n } catch {\n this.finishTurn(\"CODEX_RUNTIME_UNSUPPORTED\");\n }\n }\n\n async abort(): Promise<void> {\n const active = this.active;\n if (!active) return;\n active.controller.abort();\n try {\n if (!active.id)\n await bounded(\n active.ready,\n this.controller.signal,\n limit(this.options?.requestTimeoutMs, 15_000),\n );\n if (this.active !== active) return;\n await this.client!.request(\"turn/interrupt\", {\n threadId: this.threadId!,\n turnId: active.id!,\n });\n await bounded(\n active.done,\n this.controller.signal,\n limit(this.options?.requestTimeoutMs, 15_000),\n );\n } catch {\n this.finishTurn(\"CODEX_RUNTIME_UNSUPPORTED\");\n this.broken = true;\n await this.closeGeneration();\n }\n }\n\n kill(): void {\n if (this.killed) return;\n this.killed = true;\n this.finishTurn(\"CODEX_RUNTIME_UNSUPPORTED\");\n void this.closeGeneration();\n }\n override async dispose(): Promise<void> {\n this.kill();\n await this.starting?.catch(() => {});\n await this.closing;\n }\n async resetSession(): Promise<void> {\n if (this.killed || this.broken) throw failure();\n if (this.resetting) return this.resetting;\n this.resetting = Promise.resolve()\n .then(async () => {\n if (this.active) await this.abort();\n await this.queue;\n await this.starting;\n await this.closeGeneration();\n if (this.killed || this.broken) throw failure();\n this.config = { ...this.config, resumeSessionId: undefined };\n this.lastThreadId = undefined;\n this.threadUsageTotal = undefined;\n })\n .finally(() => {\n this.resetting = undefined;\n });\n return this.resetting;\n }\n /**\n * Store a model / thinking / effort change; the next prompt merges it into the\n * config before the turn starts, and a turn in flight keeps what it began with.\n */\n override reconfigure(patch: ReconfigurePatch): Promise<ReconfigureOutcome> {\n return this.reconfig.reconfigure(patch);\n }\n\n private closeGeneration(): Promise<void> {\n const generation = ++this.generation;\n const finalMcp = { ...this.mcpDiagnostics };\n this.mcpStartup = \"unknown\";\n this.pendingMcpStartup = undefined;\n this.controller.abort();\n this.nativeApprovalPolicy = undefined;\n this.loginCompleted?.reject(failure());\n this.loginCompleted = undefined;\n const client = this.client;\n this.client = undefined;\n const connecting = this.connecting;\n this.connecting = undefined;\n const tools = this.tools;\n this.tools = undefined;\n const instance = this.instance;\n this.instance = undefined;\n this.threadId = undefined;\n this.closing = this.closing\n .then(async () => {\n try {\n // The handshake owns a spawned child before it returns the client. Join its\n // cancellation/disposal before releasing the instance lease.\n const pendingClient = await connecting?.catch(() => undefined);\n await client?.dispose();\n if (pendingClient && pendingClient !== client) await pendingClient.dispose();\n if (\n (client && !client.terminationConfirmed) ||\n (pendingClient && !pendingClient.terminationConfirmed)\n )\n this.cleanupUncertain = true;\n if (tools) {\n try {\n await bounded(\n Promise.resolve().then(() => tools.dispose()),\n new AbortController().signal,\n 1000,\n );\n if (generation === this.generation && !this.cleanupUncertain)\n this.observeClosedMcp(tools, finalMcp);\n } catch {\n this.cleanupUncertain = true;\n }\n }\n } finally {\n instance?.release();\n }\n })\n .catch(() => {\n this.cleanupUncertain = true;\n });\n return this.closing;\n }\n\n private notification(method: string, params: unknown): void {\n if (!record(params)) return;\n if (method === \"mcpServer/startupStatus/updated\") {\n const serverName = this.tools?.diagnostics?.serverName;\n if (\n !serverName ||\n params.name !== serverName ||\n typeof params.threadId !== \"string\" ||\n params.threadId.length > 512 ||\n typeof params.status !== \"string\" ||\n ![\"starting\", \"ready\", \"failed\", \"cancelled\"].includes(params.status)\n )\n return;\n const status =\n params.status as NativeNotifications[\"mcpServer/startupStatus/updated\"][\"status\"];\n if (this.threadId) {\n if (params.threadId === this.threadId) this.mcpStartup = status;\n } else this.pendingMcpStartup = { threadId: params.threadId, status };\n return;\n }\n if (method === \"account/login/completed\") {\n if (params.success === true && params.loginId == null) this.loginCompleted?.resolve();\n else this.loginCompleted?.reject(failure(\"CODEX_AUTH_UNAVAILABLE\"));\n return;\n }\n const active = this.active;\n if (\n (!active || (!active.usageCursor && this.resumeUsageTurnIds.has(String(params.turnId)))) &&\n method === \"thread/tokenUsage/updated\" &&\n params.threadId === (this.threadId ?? this.config.resumeSessionId) &&\n record(params.tokenUsage) &&\n record(params.tokenUsage.total)\n ) {\n // Resume replay follows its response but precedes new turn events; the\n // caller may already be awaiting turn/start when historical usage arrives.\n this.threadUsageTotal = nativeUsage(params.tokenUsage.total);\n if (active) active.usageBaseline = this.threadUsageTotal;\n return;\n }\n if (!active || params.threadId !== this.threadId) return;\n if (!active.id) {\n if (active.events.length >= 256) {\n this.broken = true;\n this.finishTurn(\"CODEX_RUNTIME_UNSUPPORTED\");\n void this.closeGeneration();\n } else active.events.push({ method, params });\n return;\n }\n const turnId = record(params.turn) ? params.turn.id : params.turnId;\n if (turnId !== active.id) return;\n if (method === \"thread/tokenUsage/updated\" && record(params.tokenUsage)) {\n const last = params.tokenUsage.last;\n const total = params.tokenUsage.total;\n const cumulativeUsage = record(total) ? nativeUsage(total) : undefined;\n if (cumulativeUsage) {\n // Attach replay precedes live usage; no replay means no historical\n // TokenCount. The first live response therefore counts from zero.\n active.usageBaseline ??= {};\n this.resumeUsageTurnIds.clear();\n const cursor = active.usageCursor ?? active.usageBaseline;\n const reset =\n cursor?.totalTokens !== undefined &&\n cumulativeUsage.totalTokens !== undefined &&\n cumulativeUsage.totalTokens < cursor.totalTokens;\n const increment = reset ? cumulativeUsage : subtractUsage(cumulativeUsage, cursor);\n if (Object.values(increment).some((value) => typeof value === \"number\" && value > 0))\n active.usage = addUsage(active.usage, increment);\n active.usageCursor = cumulativeUsage;\n this.threadUsageTotal = cumulativeUsage;\n }\n if (record(last)) {\n if (typeof last.totalTokens === \"number\") active.contextTokens = last.totalTokens;\n }\n if (typeof params.tokenUsage.modelContextWindow === \"number\")\n active.contextWindow = params.tokenUsage.modelContextWindow;\n } else if (method === \"model/rerouted\") {\n active.actualModel = typeof params.toModel === \"string\" ? params.toModel : active.actualModel;\n active.failureCode = \"CODEX_MODEL_UNAVAILABLE\";\n } else if (method === \"turn/completed\" && record(params.turn)) this.complete(params.turn);\n else if (method === \"error\" && params.willRetry !== true)\n active.failureCode = this.nativeErrorCode(params.error);\n else if (\n method === \"item/agentMessage/delta\" &&\n typeof params.itemId === \"string\" &&\n typeof params.delta === \"string\"\n ) {\n const previous = active.messages.get(params.itemId);\n if (previous === undefined)\n this.event({\n type: \"message_start\",\n message: { role: \"assistant\", content: [{ type: \"text\", text: \"\" }] },\n });\n const text = (previous ?? \"\") + params.delta;\n active.messages.set(params.itemId, text);\n this.event({\n type: \"message_update\",\n message: { role: \"assistant\", content: [{ type: \"text\", text }] },\n _textDelta: params.delta,\n });\n } else if (\n (method === \"item/started\" || method === \"item/completed\") &&\n record(params.item) &&\n typeof params.item.id === \"string\"\n ) {\n this.item(\n params.item as NativeNotifications[\"item/started\"][\"item\"],\n method === \"item/completed\",\n );\n }\n }\n\n private item(item: NativeNotifications[\"item/started\"][\"item\"], completed: boolean): void {\n const active = this.active!;\n if (item.type === \"fileChange\") {\n active.fileChanges.delete(item.id);\n if (\n !completed &&\n Array.isArray(item.changes) &&\n item.changes.length <= 16 &&\n active.fileChanges.size < 16\n ) {\n const snapshot = JSON.stringify(item.changes);\n if (snapshot.length <= 65536) active.fileChanges.set(item.id, snapshot);\n }\n }\n if (item.type === \"agentMessage\") {\n if (completed && typeof item.text === \"string\") {\n const previous = active.messages.get(item.id) ?? \"\";\n if (!active.messages.has(item.id))\n this.event({\n type: \"message_start\",\n message: {\n role: \"assistant\",\n content: [{ type: \"text\", text: \"\" }],\n },\n });\n if (item.text.startsWith(previous) && item.text.length > previous.length)\n this.event({\n type: \"message_update\",\n message: {\n role: \"assistant\",\n content: [{ type: \"text\", text: item.text }],\n },\n _textDelta: item.text.slice(previous.length),\n });\n active.messages.set(item.id, item.text);\n }\n return;\n }\n const name =\n item.type === \"commandExecution\"\n ? \"Bash\"\n : item.type === \"fileChange\"\n ? \"ApplyPatch\"\n : item.type === \"mcpToolCall\"\n ? `mcp__${item.server}__${item.tool}`\n : undefined;\n if (!name) return;\n if (!active.toolItems.has(item.id)) {\n if (item.type === \"mcpToolCall\" && item.server === this.tools?.diagnostics?.serverName)\n this.mcpDiagnostics.nativeMcpToolItemCount = Math.min(\n 512,\n this.mcpDiagnostics.nativeMcpToolItemCount + 1,\n );\n active.toolItems.add(item.id);\n this.event({\n type: \"tool_call\",\n name,\n tool: { name },\n toolCallId: item.id,\n input:\n item.type === \"mcpToolCall\"\n ? item.arguments\n : item.type === \"commandExecution\"\n ? { command: item.command }\n : item.type === \"fileChange\"\n ? { changes: item.changes }\n : {},\n });\n }\n if (completed && !active.completedToolItems.has(item.id)) {\n active.completedToolItems.add(item.id);\n active.toolResults.push({\n role: \"tool\",\n toolName: name,\n content: \"\",\n data:\n item.type === \"mcpToolCall\"\n ? {\n content: item.result?.content,\n structuredContent: item.result?.structuredContent,\n status: item.status,\n }\n : item.type === \"commandExecution\"\n ? {\n output: item.aggregatedOutput,\n exitCode: item.exitCode,\n status: item.status,\n }\n : item.type === \"fileChange\"\n ? { changes: item.changes, status: item.status }\n : {},\n isError: \"status\" in item && item.status === \"failed\",\n });\n this.event({ type: \"tool_execution_end\", toolName: name });\n }\n }\n private complete(turn: Record<string, unknown>): void {\n if (turn.status === \"completed\") this.finishTurn(this.active?.failureCode);\n else if (turn.status === \"interrupted\") this.finishTurn(\"CODEX_TURN_INTERRUPTED\");\n else if (turn.status === \"failed\")\n this.finishTurn(this.active?.failureCode ?? this.nativeErrorCode(turn.error));\n }\n private nativeErrorCode(error: unknown): string {\n const info = record(error) ? error.codexErrorInfo : undefined;\n if (info === \"unauthorized\") return \"CODEX_RECONNECT_REQUIRED\";\n if (\n info === \"usageLimitExceeded\" ||\n info === \"rateLimitExceeded\" ||\n info === \"serverOverloaded\"\n )\n return \"CODEX_RATE_LIMITED\";\n if (\n record(info) &&\n [\n \"httpConnectionFailed\",\n \"responseStreamConnectionFailed\",\n \"responseStreamDisconnected\",\n \"responseTooManyFailedAttempts\",\n ].some((key) => key in info)\n )\n return \"CODEX_NETWORK_UNAVAILABLE\";\n return \"CODEX_RUNTIME_UNSUPPORTED\";\n }\n\n private observeMcp(beforeTurn: boolean): void {\n const count = (value: unknown) =>\n typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0\n ? Math.min(512, value)\n : 0;\n let listed = 0;\n let called = 0;\n try {\n const counts = this.tools?.diagnostics?.requestCounts();\n listed = count(counts?.toolsListTotal);\n called = count(counts?.toolsCallTotal);\n } catch {\n /* Observation must not affect execution or cleanup. */\n }\n if (beforeTurn) {\n this.mcpDiagnostics.startupBeforeTurn = this.mcpStartup;\n this.mcpDiagnostics.toolsListBeforeTurn = listed;\n }\n this.mcpDiagnostics.startupAtEnd = this.mcpStartup;\n this.mcpDiagnostics.toolsListTotal = Math.max(this.mcpDiagnostics.toolsListBeforeTurn, listed);\n this.mcpDiagnostics.toolsCallTotal = beforeTurn\n ? called\n : Math.max(this.mcpDiagnostics.toolsCallTotal, called);\n this.publishMcp(this.mcpDiagnostics);\n }\n\n private observeClosedMcp(tools: CodexToolTransport, snapshot: CodexNativeMcpDiagnostics): void {\n try {\n // No RPC: the owned transport has closed, so its local counters are final.\n const counts = tools.diagnostics?.requestCounts();\n if (\n !counts ||\n ![counts.toolsListTotal, counts.toolsCallTotal].every(\n (value) => Number.isSafeInteger(value) && value >= 0,\n )\n )\n return;\n snapshot.toolsListTotal = Math.max(\n snapshot.toolsListTotal,\n Math.min(512, counts.toolsListTotal),\n );\n snapshot.toolsCallTotal = Math.max(\n snapshot.toolsCallTotal,\n Math.min(512, counts.toolsCallTotal),\n );\n this.publishMcp(snapshot);\n } catch {\n // No final observation on getter failure; retain the earlier snapshot unchanged.\n }\n }\n\n private publishMcp(snapshot: CodexNativeMcpDiagnostics): void {\n try {\n void Promise.resolve(\n this.options?.onNativeMcpDiagnostics?.(Object.freeze({ ...snapshot })),\n ).catch(() => {});\n } catch {\n /* A caller-owned observer is never an execution gate. */\n }\n }\n\n private finishTurn(code?: string): void {\n const active = this.active;\n if (!active) return;\n this.active = undefined;\n this.observeMcp(false);\n clearTimeout(active.timer);\n active.controller.abort();\n active.fileChanges.clear();\n active.readyNow();\n for (const text of active.messages.values())\n this.event({\n type: \"message_end\",\n message: { role: \"assistant\", content: [{ type: \"text\", text }] },\n });\n this.event({ type: \"turn_end\", toolResults: active.toolResults });\n const modelUsage = active.usage\n ? {\n inputTokens: active.usage.inputTokens,\n outputTokens: active.usage.outputTokens,\n cacheReadTokens: active.usage.cacheReadTokens,\n ...(typeof active.contextWindow === \"number\"\n ? { contextWindow: active.contextWindow }\n : {}),\n }\n : undefined;\n const usage = {\n ...(active.usage ? { tokens: active.usage } : {}),\n ...(modelUsage ? { modelUsage: { [active.actualModel]: modelUsage } } : {}),\n ...(typeof active.contextTokens === \"number\" ? { contextTokens: active.contextTokens } : {}),\n ...(typeof active.contextWindow === \"number\" ? { contextWindow: active.contextWindow } : {}),\n };\n if (code)\n this.event({\n type: \"error\",\n error: code,\n fatal: code !== \"CODEX_TURN_INTERRUPTED\",\n detail: {\n message: code,\n category:\n code === \"CODEX_TURN_INTERRUPTED\"\n ? \"process\"\n : code === \"CODEX_RATE_LIMITED\"\n ? \"rate_limit\"\n : code === \"CODEX_NETWORK_UNAVAILABLE\"\n ? \"network\"\n : code === \"CODEX_AUTH_UNAVAILABLE\" || code === \"CODEX_RECONNECT_REQUIRED\"\n ? \"auth\"\n : \"config\",\n retryable: false,\n },\n ...usage,\n });\n else\n this.event({\n type: \"result\",\n subtype: \"success\",\n summary: [...active.messages.values()].join(\"\\n\"),\n ...usage,\n });\n this.event({ type: \"agent_end\" });\n active.finish();\n }\n private event(event: AgentEvent): void {\n // Observers cannot prevent native cleanup or leave a terminal prompt unsettled.\n try {\n this.emit(\"agent-event\", event);\n } catch {}\n }\n}\n","/**\n * Turn the raw failure text the Codex SDK reports into one sentence a user can act on.\n *\n * The codex child reports a stream failure as a `Reconnecting... n/5 (<reason>)` line (the\n * reason is cut off mid-JSON) and an API refusal as the raw JSON body. Neither names what to do.\n */\n\n/** A failure the harness can phrase better than codex did. */\nexport interface FriendlyCodexError {\n message: string;\n category: \"auth\" | \"model\" | \"network\";\n hint: string;\n}\n\n/** The `error.message` of a JSON error body, or the text itself when it is not one. */\nfunction unwrapErrorBody(raw: string): string {\n const start = raw.indexOf(\"{\");\n if (start < 0) return raw;\n try {\n const body = JSON.parse(raw.slice(start)) as {\n message?: unknown;\n error?: { message?: unknown } | string;\n };\n const inner = typeof body.error === \"object\" ? body.error?.message : body.error;\n const text = inner ?? body.message;\n if (typeof text === \"string\" && text.length > 0) return text;\n } catch {\n // Cut-off JSON: keep the raw text.\n }\n return raw;\n}\n\n/**\n * Map `raw` to a friendly error, or `null` when it is not one of the known shapes.\n *\n * @param raw - The error text of a `turn.failed`/`error` event or a rejected stream.\n */\nexport function friendlyCodexError(raw: string): FriendlyCodexError | null {\n const text = unwrapErrorBody(raw);\n\n // p771: a model the ChatGPT account cannot use (a codex that is too old for the account default).\n const chatgpt = /'([^']+)' model is not supported when using Codex with a ChatGPT account/i.exec(\n text,\n );\n if (chatgpt) {\n return {\n message: `codex harness: the model '${chatgpt[1]}' is not available with a ChatGPT login.`,\n category: \"model\",\n hint: \"Update @openai/codex-sdk to the 0.16x line, pass --model with a model your login allows, or set OPENAI_API_KEY.\",\n };\n }\n if (/newer version of codex|requires a newer version|update codex/i.test(text)) {\n return {\n message: `codex harness: the selected model needs a newer Codex than the installed @openai/codex-sdk.`,\n category: \"model\",\n hint: \"Update @openai/codex-sdk to the 0.16x line (npm i @openai/codex-sdk@latest).\",\n };\n }\n\n // p598: a rejected key, however many times codex retried before giving up.\n if (\n /invalid_api_key|incorrect api key|\\b401\\b[^.]*unauthorized|unauthorized[^.]*\\b401\\b/i.test(raw)\n ) {\n return {\n message: \"codex harness: the API key was rejected (401).\",\n category: \"auth\",\n hint: \"Check OPENAI_API_KEY (or sign in again with `codex login`).\",\n };\n }\n\n const reconnecting = /^Reconnecting\\.\\.\\.\\s*\\d+\\/\\d+\\s*\\(([\\s\\S]*)\\)\\s*$/.exec(raw.trim());\n if (reconnecting) {\n const reason = (reconnecting[1] ?? \"\").split(/[{\\n]/, 1)[0]?.replace(/[\\s:,]+$/, \"\") ?? \"\";\n return {\n message: `codex harness: could not reach the model endpoint${reason ? ` (${reason})` : \"\"}.`,\n category: \"network\",\n hint: \"Check the network and the provider's status, then run again.\",\n };\n }\n return null;\n}\n","import { ManagedCodexHarness } from \"../codex/managed-harness.js\";\nimport {\n copyFileSync,\n existsSync,\n mkdirSync,\n readFileSync,\n rmSync,\n symlinkSync,\n writeFileSync,\n} from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { dirname, join, resolve } from \"node:path\";\nimport type {\n AgentMessageItem,\n Codex as CodexClient,\n CommandExecutionItem,\n FileChangeItem,\n McpToolCallItem,\n Thread,\n ThreadEvent,\n ThreadItem,\n WebSearchItem,\n} from \"@openai/codex-sdk\";\nimport { loadHarnessSdk } from \"@skaile/workspaces/core\";\nimport type { HarnessTarget } from \"@skaile/workspaces/plugin-registry\";\nimport type { Logger, TokenUsage } from \"@skaile/workspaces/types\";\nimport {\n type AIProviderEntry,\n registryEntries,\n resolveEntryBaseUrl,\n} from \"@skaile/workspaces/core/provider-registry\";\nimport * as z from \"zod\";\nimport {\n buildCodexConfigDocument,\n type CodexConfigBuild,\n codexProviderTableId,\n codexSessionHome,\n writeCodexConfigToml,\n} from \"../codex/config-toml.js\";\nimport { friendlyCodexError } from \"../codex/friendly-error.js\";\nimport { classifyGenericErrorMessage } from \"../error-classifier.js\";\nimport { getBridgeLogger } from \"../logger.js\";\nimport { fetchProviderModels, type ModelEntry } from \"../models.js\";\nimport {\n entryCredentialValue,\n registryCredentialEnv,\n} from \"../provider-materialize/credential-env.js\";\nimport { registryHarnessConfig } from \"../provider-registry-derive.js\";\nimport { ReconfigureLedger } from \"../reconfigure-ledger.js\";\nimport { BUILTIN_HARNESS_CATALOG } from \"../registry.js\";\nimport { stripRunnerPrivateEnv } from \"../runner-private-env.js\";\nimport {\n type AgentConfig,\n AgentHarness,\n type AgentError,\n type AgentEvent,\n type AgentMessage,\n type HarnessInfo,\n type ReconfigureOutcome,\n type ReconfigurePatch,\n} from \"../types.js\";\n\ntype CodexSdkModule = typeof import(\"@openai/codex-sdk\");\n\n/**\n * Build the explicit env whitelist forwarded to the Codex SDK child.\n *\n * Omits anything provisioned by `provision_secrets` so user credentials\n * stay out of the subprocess environment. `CODEX_HOME` is *set*, never\n * inherited: it roots the codex CLI at the session-private config home this\n * harness renders, so a session never picks up the ambient `~/.codex`.\n *\n * @docLink packages/bridge/concepts#codex-env-whitelist\n */\nfunction buildCodexChildEnv(parent: NodeJS.ProcessEnv, codexHome: string): Record<string, string> {\n const out: Record<string, string> = {};\n const explicit = [\"PATH\", \"HOME\", \"USER\", \"HOSTNAME\", \"SKAILE_SESSION_ID\"];\n for (const key of explicit) {\n const v = parent[key];\n if (v !== undefined) out[key] = v;\n }\n for (const [key, value] of Object.entries(parent)) {\n if (key.startsWith(\"PI_\") && typeof value === \"string\") out[key] = value;\n }\n // codex's own credential: the session-private CODEX_HOME hides `~/.codex`, so\n // an exported key is the one way an entry-less session can authenticate.\n for (const key of [\"OPENAI_API_KEY\", \"CODEX_API_KEY\"]) {\n const v = parent[key];\n if (v) out[key] = v;\n }\n out.CODEX_HOME = codexHome;\n return out;\n}\n\n/**\n * The codex CLI's ChatGPT login file (`$CODEX_HOME/auth.json`, default `~/.codex/auth.json`) of\n * the user's environment, or `undefined` when there is none. `env` is the parent environment,\n * not the session's: the session's `CODEX_HOME` is the private one, which has no login.\n */\nexport function codexLoginFile(env: Record<string, string | undefined>): string | undefined {\n const home = env.CODEX_HOME?.trim() || join(env.HOME || homedir(), \".codex\");\n const file = join(home, \"auth.json\");\n return existsSync(file) ? resolve(file) : undefined;\n}\n\n/**\n * Make the login file reachable from the session-private `CODEX_HOME`, where codex reads it. A\n * symlink, so a token refresh codex writes lands in the user's own file; a copy when the\n * platform refuses symlinks.\n */\nfunction linkCodexLogin(codexHome: string, loginFile: string): void {\n const target = join(codexHome, \"auth.json\");\n mkdirSync(codexHome, { recursive: true, mode: 0o700 });\n rmSync(target, { force: true });\n try {\n symlinkSync(loginFile, target);\n } catch {\n copyFileSync(loginFile, target);\n }\n}\n\n/**\n * The reason a codex session has no credential to authenticate with, or\n * `undefined` when it has one. Codex runs in a session-private `CODEX_HOME`\n * that never sees `~/.codex/auth.json` on its own; the harness links the codex\n * CLI's ChatGPT login into it (`loginFile`), so that login counts as a\n * credential like an API key. Without any, the turn would end in `401\n * Unauthorized` after five silent reconnects.\n */\nfunction missingCodexCredential(\n build: CodexConfigBuild,\n env: Record<string, string | undefined>,\n loginFile?: string,\n): string | undefined {\n const table = build.providerId\n ? build.document.model_providers[codexProviderTableId(build.providerId)]\n : undefined;\n if (table) {\n if (table.requires_openai_auth) return undefined;\n if (!table.env_key || env[table.env_key]) return undefined;\n return `codex harness: the AI provider entry '${build.providerId}' has no credential; export the variable its credential names (see \\`skaile providers test ${build.providerId}\\`)`;\n }\n if (env.OPENAI_API_KEY || env.CODEX_API_KEY || loginFile) return undefined;\n return \"codex harness needs OPENAI_API_KEY, or the codex CLI's ChatGPT login (run `codex login`; ~/.codex/auth.json), or an AI provider entry with a credential\";\n}\n\n/**\n * Agent harness for the OpenAI Codex SDK.\n *\n * Creates or resumes a Codex thread via `@openai/codex-sdk` (lazy-imported in `start()`)\n * and maps Codex SDK thread events to the unified {@link AgentEvent} stream.\n * OpenAI wire surfaces only — endpoints come from the session's AI provider\n * registry, rendered into a session-private `config.toml`.\n *\n * @remarks\n * **Event mapping** — Codex SDK items are translated: `agent_message` → `message_start/update/end`,\n * `command_execution` → Bash-shaped tool events, `mcp_tool_call` → MCP tool events,\n * `file_change` → `ApplyPatch`-shaped events, `web_search` → `WebSearch` events.\n *\n * **Sandbox** — The Codex sandbox mode, approval policy, and reasoning effort are\n * controlled via `AgentConfig.harnessOptions.codex`. See {@link CodexHarnessOptions}.\n *\n * **Instructions file** — System prompt and pre-rendered agent identity are combined\n * into a single instructions file written to `<cwd>/.codex/skaile-session-instructions.md`\n * and passed to the Codex SDK as `model_instructions_file`.\n *\n * **Provider configuration** — Codex reads its endpoints from\n * `$CODEX_HOME/config.toml` and nowhere else, so `start()` renders the\n * session's registry into a session-private config home (see\n * {@link codexSessionHome}) and points `CODEX_HOME` at it. That is also what\n * stops the child from reading the ambient `~/.codex`. Credentials are\n * delivered by name (`SKAILE_AIP_<ID>_KEY`) in the child env, never in the\n * file. A session with no addressable registry entry renders nothing and\n * falls back to codex's built-in providers with `OPENAI_API_KEY`.\n *\n * **Standalone only** — the constructor throws `CODEX_MANAGED_REQUIRES_FACTORY` for\n * a managed config (see {@link isManagedCodexConfig}); build through\n * `createHarness(\"codex\", config)` / `codexHarnessTarget.create(config)`, which pick\n * the managed App Server adapter, so managed auth never falls back to local auth.\n *\n * @docLink packages/bridge/harnesses#codex-harness\n */\nexport class CodexHarness extends AgentHarness {\n readonly harnessInfo: HarnessInfo = {\n id: \"codex\",\n name: \"OpenAI Codex\",\n modelAgnostic: false,\n supportsInBandAbort: true,\n capabilities: BUILTIN_HARNESS_CATALOG.codex?.capabilities,\n };\n\n private readonly log: Logger = getBridgeLogger(\"codex\");\n private config: AgentConfig;\n private readonly reconfig = new ReconfigureLedger({ config: () => this.config });\n private thread: Thread | null = null;\n private running = false;\n private abortController: AbortController | null = null;\n private pendingToolResults: AgentMessage[] = [];\n private activeAssistantItemId: string | null = null;\n private activeAssistantText = \"\";\n private _runtimeSessionId: string | undefined;\n /** Token usage from the most recent completed turn. */\n private _lastTokens: TokenUsage | null = null;\n\n constructor(config: AgentConfig) {\n super();\n if (isManagedCodexConfig(config)) throw new Error(\"CODEX_MANAGED_REQUIRES_FACTORY\");\n this.config = config;\n }\n\n override get runtimeSessionId(): string | undefined {\n return this._runtimeSessionId;\n }\n\n override async dispose(): Promise<void> {\n this.kill();\n }\n\n /**\n * Store a model / thinking / effort change. The SDK thread is built from\n * `config` in {@link start}, so the next thread start (first prompt, or after\n * `resetSession()`) uses it; a thread already running keeps its options.\n */\n override reconfigure(patch: ReconfigurePatch): Promise<ReconfigureOutcome> {\n return this.reconfig.reconfigure(patch);\n }\n\n override getModel(): string | undefined {\n return this.config.model;\n }\n\n public async start(): Promise<void> {\n if (this.thread) return;\n\n let sdk: CodexSdkModule;\n try {\n sdk = await loadHarnessSdk(\n \"@openai/codex-sdk\",\n this.config.cwd,\n () => import(\"@openai/codex-sdk\"),\n \"Codex SDK\",\n );\n } catch (err) {\n this.log.error(\"codex SDK load failed\", err);\n throw err;\n }\n\n // Session-private config home. Holds the rendered provider registry and\n // every byte of codex's own state, so the child never reads `~/.codex`.\n const codexHome = codexSessionHome(this.config);\n const build = buildCodexConfigDocument({\n registry: this.config.registry,\n modelRef: this.config.modelRef,\n model: this.config.model,\n roles: this.config.roles,\n });\n if (build.unaddressable) {\n const { id, reason } = build.unaddressable;\n const message = `AI provider '${id}' cannot be used with the codex harness: ${reason}. Pick a model of another provider.`;\n this.log.error(\"codex cannot address the selected AI provider\", { provider: id, reason });\n throw Object.assign(new Error(message), { category: \"config\", hint: message });\n }\n writeCodexConfigToml(codexHome, build.document);\n for (const warning of build.warnings) this.log.warn(\"codex model selection\", { warning });\n // An entry codex cannot address matters only when it is the selected one (refused above);\n // listing every other registry entry as a warning on each run is noise (p773).\n for (const entry of build.skipped)\n this.log.debug(\"codex cannot address an AI provider entry\", {\n provider: entry.id,\n reason: entry.reason,\n });\n\n // Explicit env whitelist for the Codex SDK child. Avoids leaking the\n // runner's full environment (which may carry user secrets provisioned by\n // the platform) into the spawned process. `this.config.env`, when\n // supplied, fully overrides the whitelist — `CODEX_HOME` excepted, since\n // it is what binds the child to the rendered config.\n const env: Record<string, string | undefined> = this.config.env\n ? { ...this.config.env, CODEX_HOME: codexHome }\n : buildCodexChildEnv(process.env, codexHome);\n // `env_key` in the rendered file names a variable; this is where its value\n // is delivered. The file itself never carries a secret.\n Object.assign(\n env,\n registryCredentialEnv(this.config.registry ?? {}, { env: { ...process.env, ...env } }),\n );\n stripRunnerPrivateEnv(env);\n\n // The codex CLI's ChatGPT login stands in for an API key, so link it into the private home\n // unless a key is exported (codex would otherwise prefer the file over the key).\n const hasKey = Boolean(env.OPENAI_API_KEY || env.CODEX_API_KEY);\n const loginFile = hasKey ? undefined : codexLoginFile({ ...process.env, ...this.config.env });\n const missing = missingCodexCredential(build, env, loginFile);\n if (missing) {\n this.log.error(\"codex credential missing\", { reason: missing });\n throw Object.assign(new Error(missing), { category: \"config\", hint: missing });\n }\n // The private home is reused across resumes: a link from an earlier login-only run would\n // make codex prefer the file over an exported key, so drop it whenever the login is not used.\n if (loginFile) linkCodexLogin(codexHome, loginFile);\n else rmSync(join(codexHome, \"auth.json\"), { force: true });\n\n const instructionsFile = this.writeInstructionsFile();\n\n const client = new sdk.Codex({\n apiKey: env.OPENAI_API_KEY,\n env: Object.fromEntries(Object.entries(env).filter(([, value]) => value != null)) as Record<\n string,\n string\n >,\n ...(instructionsFile ? { config: { model_instructions_file: instructionsFile } } : {}),\n });\n\n const codexOptions = this.config.harnessOptions?.codex;\n const threadOptions = {\n model: build.model ?? this.config.model,\n sandboxMode: codexOptions?.sandboxMode ?? \"workspace-write\",\n workingDirectory: this.config.cwd,\n skipGitRepoCheck: true,\n modelReasoningEffort: codexOptions?.reasoningEffort ?? \"medium\",\n networkAccessEnabled: codexOptions?.networkAccessEnabled,\n approvalPolicy: codexOptions?.approvalPolicy ?? \"never\",\n additionalDirectories: codexOptions?.additionalDirectories,\n } satisfies Parameters<CodexClient[\"startThread\"]>[0];\n\n this.thread = this.config.resumeSessionId\n ? client.resumeThread(this.config.resumeSessionId, threadOptions)\n : client.startThread(threadOptions);\n this._runtimeSessionId = this.thread.id ?? this.config.resumeSessionId;\n this.log.info(\"codex harness started\", {\n model: this.config.model,\n resumed: Boolean(this.config.resumeSessionId),\n sessionId: this._runtimeSessionId,\n });\n }\n\n public async prompt(message: string): Promise<void> {\n await this.start();\n if (!this.thread) throw new Error(\"Codex thread not initialized\");\n if (this.running) throw new Error(\"Codex turn already in progress\");\n\n this.running = true;\n this.pendingToolResults = [];\n this.activeAssistantItemId = null;\n this.activeAssistantText = \"\";\n this._lastTokens = null;\n this.abortController = new AbortController();\n let turnFinished = false;\n this.log.debug(\"prompt issued\", { length: message.length });\n\n try {\n const input = message;\n const { events } = await this.thread.runStreamed(input, {\n signal: this.abortController.signal,\n });\n\n for await (const event of events) {\n turnFinished = this.handleThreadEvent(event) || turnFinished;\n }\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n if (error.name !== \"AbortError\") {\n this.log.error(\"prompt failed\", error);\n const detail = this.classifyErrorMessage(error.message);\n this.emit(\"agent-event\", {\n type: \"error\",\n error: detail.message,\n detail,\n } satisfies AgentEvent);\n this.emit(\"agent-event\", { type: \"agent_end\" } satisfies AgentEvent);\n }\n } finally {\n if (!turnFinished && this.activeAssistantItemId) {\n this.emit(\"agent-event\", {\n type: \"message_end\",\n message: this.buildAssistantMessage(this.activeAssistantText),\n } satisfies AgentEvent);\n }\n this.activeAssistantItemId = null;\n this.activeAssistantText = \"\";\n this.abortController = null;\n this.running = false;\n }\n }\n\n public async abort(): Promise<void> {\n this.abortController?.abort();\n }\n\n public get isRunning(): boolean {\n return this.running;\n }\n\n public kill(): void {\n this.abortController?.abort();\n this.running = false;\n this.abortController = null;\n this.log.info(\"codex harness killed\");\n }\n\n /**\n * Discover models from the endpoint this session actually addresses.\n *\n * The registry entry codex would talk to supplies both the base URL and the\n * credential, so a session pointed at a gateway lists that gateway's models\n * instead of api.openai.com's. A `platform:` reference the session boundary\n * already resolved is picked up from `SKAILE_AIP_<ID>_KEY` in the session\n * env. Without a registry entry codex can address, an ambient\n * `OPENAI_API_KEY` is the last resort.\n */\n override async listModels(): Promise<ModelEntry[]> {\n const selected = this.selectedProviderEntry();\n const sessionEnv = { ...process.env, ...this.config.env };\n const apiKey = selected\n ? entryCredentialValue(selected.id, selected.entry, { env: sessionEnv })\n : sessionEnv.OPENAI_API_KEY;\n if (!apiKey) return [];\n const baseUrl = selected ? resolveEntryBaseUrl(selected.entry) : undefined;\n const result = await fetchProviderModels(\"openai\", apiKey, baseUrl ? { baseUrl } : {});\n return result.ok ? (result.models as ModelEntry[]) : [];\n }\n\n /**\n * The registry entry codex addresses this session — the same selection the\n * rendered `config.toml` names in `model_provider`.\n */\n private selectedProviderEntry(): { id: string; entry: AIProviderEntry } | undefined {\n const registry = this.config.registry;\n if (!registry) return undefined;\n const { providerId } = buildCodexConfigDocument({\n registry,\n modelRef: this.config.modelRef,\n model: this.config.model,\n roles: this.config.roles,\n });\n if (!providerId) return undefined;\n const match = registryEntries(registry).find(([id]) => id === providerId);\n return match ? { id: match[0], entry: match[1] } : undefined;\n }\n\n async resetSession(): Promise<void> {\n this.kill();\n // Otherwise the next start resumes the pre-reset thread (see claude-sdk).\n this.config = { ...this.config, resumeSessionId: undefined };\n this.thread = null;\n this._runtimeSessionId = undefined;\n this._lastTokens = null;\n }\n\n override getTokenUsage(): TokenUsage | null {\n return this._lastTokens;\n }\n\n /**\n * Write a combined instructions file for Codex CLI's `model_instructions_file` config.\n * Combines the agent's pre-rendered identity (`.codex/skaile-agents/<agentName>.md`, written\n * by `skaile install`, one file per agent instance) with runtime context\n * (resources, environment, prompt-extensions).\n */\n private writeInstructionsFile(): string | undefined {\n const parts: string[] = [];\n\n // 1. Read pre-rendered agent identity if available\n if (this.config.agentDir && this.config.agentName) {\n const agentFile = join(\n this.config.cwd,\n \".codex\",\n \"skaile-agents\",\n `${this.config.agentName}.md`,\n );\n if (existsSync(agentFile)) {\n parts.push(readFileSync(agentFile, \"utf-8\"));\n }\n }\n\n // 2. Append runtime system prompt (resources, context, environment)\n if (this.config.systemPrompt) {\n parts.push(this.config.systemPrompt);\n }\n\n if (parts.length === 0) return undefined;\n\n // Write combined instructions to a session file\n const instrFile = join(this.config.cwd, \".codex\", \"skaile-session-instructions.md\");\n mkdirSync(dirname(instrFile), { recursive: true });\n writeFileSync(instrFile, parts.join(\"\\n\\n---\\n\\n\"));\n return instrFile;\n }\n\n private handleThreadEvent(event: ThreadEvent): boolean {\n switch (event.type) {\n case \"thread.started\":\n this._runtimeSessionId = event.thread_id;\n return false;\n\n case \"turn.started\":\n return false;\n\n case \"item.started\":\n case \"item.updated\":\n case \"item.completed\":\n this.handleThreadItem(event.item, event.type === \"item.completed\", event.type);\n return false;\n\n case \"turn.completed\": {\n this.flushToolResults();\n // Map Codex SDK `Usage` shape into the unified `TokenUsage`. Note\n // OpenAI's `input_tokens` is the TOTAL including cached reads, not\n // the fresh-prompt count Anthropic reports — consumers that want\n // a strict \"fresh input\" figure must subtract `cacheReadTokens`.\n const usage = event.usage;\n const tokens: TokenUsage | null = usage\n ? {\n inputTokens: usage.input_tokens,\n outputTokens: usage.output_tokens,\n cacheReadTokens: usage.cached_input_tokens,\n }\n : null;\n this._lastTokens = tokens;\n this.emit(\"agent-event\", {\n type: \"result\",\n subtype: \"success\",\n summary: this.activeAssistantText || \"Task completed\",\n // Codex SDK does not report per-turn cost. `0` signals \"not\n // reported\" — pair with `tokens` to disambiguate from \"free\".\n costUsd: 0,\n ...(tokens ? { tokens } : {}),\n } satisfies AgentEvent);\n this.emit(\"agent-event\", { type: \"agent_end\" } satisfies AgentEvent);\n return true;\n }\n\n case \"turn.failed\": {\n this.flushToolResults();\n const detail = this.classifyErrorMessage(event.error.message);\n this.emit(\"agent-event\", {\n type: \"error\",\n error: detail.message,\n detail,\n } satisfies AgentEvent);\n this.emit(\"agent-event\", { type: \"agent_end\" } satisfies AgentEvent);\n return true;\n }\n\n case \"error\": {\n const detail = this.classifyErrorMessage(event.message);\n this.emit(\"agent-event\", {\n type: \"error\",\n error: detail.message,\n detail,\n } satisfies AgentEvent);\n this.emit(\"agent-event\", { type: \"agent_end\" } satisfies AgentEvent);\n return true;\n }\n }\n }\n\n private handleThreadItem(item: ThreadItem, completed: boolean, phase: ThreadEvent[\"type\"]): void {\n switch (item.type) {\n case \"agent_message\":\n this.handleAgentMessage(item, completed);\n break;\n\n case \"command_execution\":\n this.handleCommandExecution(item, completed, phase);\n break;\n\n case \"mcp_tool_call\":\n this.handleMcpToolCall(item, completed, phase);\n break;\n\n case \"file_change\":\n this.handleFileChange(item, completed, phase);\n break;\n\n case \"web_search\":\n this.handleWebSearch(item, completed, phase);\n break;\n\n case \"error\":\n if (completed) {\n this.pendingToolResults.push({\n role: \"tool\",\n toolName: \"CodexError\",\n content: \"\",\n data: { message: item.message },\n isError: true,\n });\n }\n break;\n\n default:\n break;\n }\n }\n\n private handleAgentMessage(item: AgentMessageItem, completed: boolean): void {\n if (this.activeAssistantItemId !== item.id) {\n if (this.activeAssistantItemId) {\n this.emit(\"agent-event\", {\n type: \"message_end\",\n message: this.buildAssistantMessage(this.activeAssistantText),\n } satisfies AgentEvent);\n }\n this.activeAssistantItemId = item.id;\n this.activeAssistantText = \"\";\n this.emit(\"agent-event\", {\n type: \"message_start\",\n message: this.buildAssistantMessage(\"\"),\n } satisfies AgentEvent);\n }\n\n const nextText = item.text ?? \"\";\n const delta = nextText.startsWith(this.activeAssistantText)\n ? nextText.slice(this.activeAssistantText.length)\n : nextText;\n this.activeAssistantText = nextText;\n\n if (delta) {\n this.emit(\"agent-event\", {\n type: \"message_update\",\n message: this.buildAssistantMessage(nextText),\n _textDelta: delta,\n } satisfies AgentEvent);\n }\n\n if (completed) {\n this.emit(\"agent-event\", {\n type: \"message_end\",\n message: this.buildAssistantMessage(nextText),\n } satisfies AgentEvent);\n this.activeAssistantItemId = null;\n }\n }\n\n private handleCommandExecution(\n item: CommandExecutionItem,\n completed: boolean,\n phase: ThreadEvent[\"type\"],\n ): void {\n if (phase === \"item.started\") {\n this.emit(\"agent-event\", {\n type: \"tool_call\",\n name: \"Bash\",\n tool: { name: \"Bash\" },\n input: { command: item.command },\n } satisfies AgentEvent);\n }\n\n if (completed) {\n this.pendingToolResults.push({\n role: \"tool\",\n toolName: \"Bash\",\n content: \"\",\n data: {\n stdout: item.aggregated_output,\n stderr: \"\",\n exitCode: item.exit_code,\n status: item.status,\n command: item.command,\n },\n isError: item.status === \"failed\",\n });\n this.emit(\"agent-event\", {\n type: \"tool_execution_end\",\n toolName: \"Bash\",\n } satisfies AgentEvent);\n }\n }\n\n private handleMcpToolCall(\n item: McpToolCallItem,\n completed: boolean,\n phase: ThreadEvent[\"type\"],\n ): void {\n const toolName = `mcp__${item.server}__${item.tool}`;\n if (phase === \"item.started\") {\n this.emit(\"agent-event\", {\n type: \"tool_call\",\n name: toolName,\n tool: { name: toolName },\n input: this.toObject(item.arguments),\n } satisfies AgentEvent);\n }\n\n if (completed) {\n this.pendingToolResults.push({\n role: \"tool\",\n toolName,\n content: \"\",\n data: {\n status: item.status,\n content: item.result?.content,\n structuredContent: item.result?.structured_content,\n error: item.error?.message,\n },\n isError: item.status === \"failed\",\n });\n this.emit(\"agent-event\", {\n type: \"tool_execution_end\",\n toolName,\n } satisfies AgentEvent);\n }\n }\n\n private handleFileChange(\n item: FileChangeItem,\n completed: boolean,\n phase: ThreadEvent[\"type\"],\n ): void {\n if (phase === \"item.started\") {\n this.emit(\"agent-event\", {\n type: \"tool_call\",\n name: \"ApplyPatch\",\n tool: { name: \"ApplyPatch\" },\n input: { changes: item.changes },\n } satisfies AgentEvent);\n }\n\n if (completed) {\n this.pendingToolResults.push({\n role: \"tool\",\n toolName: \"ApplyPatch\",\n content: \"\",\n data: { status: item.status, changes: item.changes },\n isError: item.status === \"failed\",\n });\n this.emit(\"agent-event\", {\n type: \"tool_execution_end\",\n toolName: \"ApplyPatch\",\n } satisfies AgentEvent);\n }\n }\n\n private handleWebSearch(\n item: WebSearchItem,\n completed: boolean,\n phase: ThreadEvent[\"type\"],\n ): void {\n if (phase === \"item.started\") {\n this.emit(\"agent-event\", {\n type: \"tool_call\",\n name: \"WebSearch\",\n tool: { name: \"WebSearch\" },\n input: { query: item.query },\n } satisfies AgentEvent);\n }\n\n if (completed) {\n this.pendingToolResults.push({\n role: \"tool\",\n toolName: \"WebSearch\",\n content: \"\",\n data: { query: item.query, status: \"completed\" },\n });\n this.emit(\"agent-event\", {\n type: \"tool_execution_end\",\n toolName: \"WebSearch\",\n } satisfies AgentEvent);\n }\n }\n\n private flushToolResults(): void {\n if (this.pendingToolResults.length === 0) return;\n this.emit(\"agent-event\", {\n type: \"turn_end\",\n toolResults: [...this.pendingToolResults],\n } satisfies AgentEvent);\n this.pendingToolResults = [];\n }\n\n private buildAssistantMessage(text: string): AgentMessage {\n return {\n role: \"assistant\",\n content: [{ type: \"text\", text }],\n };\n }\n\n private toObject(value: unknown): Record<string, unknown> {\n if (typeof value === \"object\" && value !== null && !Array.isArray(value)) {\n return value as Record<string, unknown>;\n }\n return { arguments: value };\n }\n\n private classifyErrorMessage(rawMessage: string): AgentError {\n const friendly = friendlyCodexError(rawMessage);\n if (friendly) {\n return {\n message: friendly.message,\n category: friendly.category,\n retryable: false,\n hint: friendly.hint,\n };\n }\n const message = rawMessage;\n // Shared keyword buckets live in error-classifier.ts; codex layers its own\n // hint copy plus a provider-specific `config` (sandbox/approval) bucket.\n const generic = classifyGenericErrorMessage(message);\n if (generic) {\n const hint =\n generic.category === \"auth\"\n ? \"Check your OpenAI API key configuration in settings or environment.\"\n : generic.category === \"rate_limit\"\n ? \"Codex hit an OpenAI rate limit. Wait briefly and try again.\"\n : generic.category === \"model\"\n ? \"The selected Codex model is unavailable. Choose a different model.\"\n : \"A network error occurred while talking to Codex.\";\n return { message, category: generic.category, retryable: generic.retryable, hint };\n }\n const lower = message.toLowerCase();\n if (\n lower.includes(\"sandbox\") ||\n lower.includes(\"approval\") ||\n lower.includes(\"permission\") ||\n lower.includes(\"git repo\")\n ) {\n return {\n message,\n category: \"config\",\n retryable: false,\n hint: \"Check Codex sandbox, approval, and workspace configuration.\",\n };\n }\n return {\n message,\n category: \"unknown\",\n retryable: true,\n hint: \"An unexpected Codex error occurred. Try the prompt again.\",\n };\n }\n}\n\n/**\n * Whether `config` selects the managed (App Server) adapter: a `managedRuntime`\n * is set, or `authSource` is set and not `\"local\"`. Single source for the\n * standalone-vs-managed decision; `codexHarnessTarget` is the only place that\n * acts on it, and the standalone `CodexHarness` constructor refuses such a\n * config so managed auth never falls back to local credentials.\n */\nexport function isManagedCodexConfig(config: AgentConfig): boolean {\n const codex = config.harnessOptions?.codex;\n return Boolean(\n codex?.managedRuntime || (codex?.authSource !== undefined && codex.authSource !== \"local\"),\n );\n}\n\n/**\n * `HarnessTarget` wrapper for the codex harness. Registered into the plugin\n * registry by `registerBuiltinHarnesses()`. Picks the standalone SDK adapter\n * (`CodexHarness`) or the managed App Server adapter (`ManagedCodexHarness`) once\n * per config. The Codex SDK is lazy-imported inside `start()` — this target\n * export never pulls it at module top.\n */\nexport const codexHarnessTarget: HarnessTarget<AgentConfig> = {\n id: \"codex\",\n displayName: BUILTIN_HARNESS_CATALOG.codex?.name ?? \"OpenAI Codex\",\n apiVersion: 1,\n // Harnesses take AgentConfig; passthrough — full schema validation is out of scope.\n configSchema: z.custom<AgentConfig>(() => true),\n create: async (config, _ctx) =>\n isManagedCodexConfig(config) ? new ManagedCodexHarness(config) : new CodexHarness(config),\n listModels: async (registry, options) => {\n const config: AgentConfig = {\n cwd: process.cwd(),\n sessionId: \"model-list\",\n ...registryHarnessConfig(registry, options),\n };\n return (\n isManagedCodexConfig(config) ? new ManagedCodexHarness(config) : new CodexHarness(config)\n ).listModels();\n },\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../bridge/src/codex/inputs.ts","../../../bridge/src/codex/native-approvals.ts","../../../bridge/src/codex/native-mcp-approval.ts","../../../bridge/src/codex/questions.ts","../../../bridge/src/codex/managed-harness.ts","../../../bridge/src/codex/friendly-error.ts","../../../bridge/src/harnesses/codex.ts"],"names":["text","resolve","record","isAbsolute","join"],"mappings":"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","file":"codex.js","sourcesContent":["import { realpathSync, statSync } from \"node:fs\";\nimport { isAbsolute, join, relative } from \"node:path\";\nimport type { AgentPromptInput } from \"../types.js\";\nimport type { NativeRequests } from \"./native-protocol.generated.js\";\n\nconst invalid = () => new Error(\"CODEX_INPUT_INVALID\");\nconst inside = (root: string, path: string) => {\n const rel = relative(root, path);\n return rel !== \"\" && !rel.startsWith(\"..\") && !isAbsolute(rel);\n};\n\n/** Resolve attachments against trusted workspace/skill roots, never private credential state. */\nexport function codexPromptInput(\n input: AgentPromptInput,\n cwd: string,\n skills?: { source: string; target: string },\n): NativeRequests[\"turn/start\"][\"params\"][\"input\"] {\n if (\n !input ||\n typeof input.text !== \"string\" ||\n input.text.length > 1024 * 1024 ||\n (input.attachments !== undefined && !Array.isArray(input.attachments)) ||\n (input.attachments?.length ?? 0) > 32\n )\n throw invalid();\n const result: NativeRequests[\"turn/start\"][\"params\"][\"input\"] = [\n { type: \"text\", text: input.text },\n ];\n for (const attachment of input.attachments ?? []) {\n try {\n if (!attachment || typeof attachment.path !== \"string\") throw invalid();\n const root =\n attachment.type === \"skill\" && skills ? realpathSync(skills.source) : realpathSync(cwd);\n const path = realpathSync(\n isAbsolute(attachment.path) ? attachment.path : join(root, attachment.path),\n );\n if (!inside(root, path) || !statSync(path).isFile()) throw invalid();\n if (attachment.type === \"image\") result.push({ type: \"localImage\", path });\n else if (attachment.type === \"file\" || attachment.type === \"skill\") {\n if (!attachment.name || [...attachment.name].some((char) => char.charCodeAt(0) < 32))\n throw invalid();\n if (attachment.type === \"skill\") {\n if (!skills) throw invalid();\n const copied = realpathSync(join(skills.target, relative(root, path)));\n if (!inside(realpathSync(skills.target), copied) || !statSync(copied).isFile())\n throw invalid();\n result.push({ type: \"skill\", name: attachment.name, path: copied });\n } else result.push({ type: \"mention\", name: attachment.name, path });\n } else throw invalid();\n } catch {\n throw invalid();\n }\n }\n return result;\n}\n","import type { NativeApprovalDescription } from \"@skaile/workspaces/types\";\nimport type { CodexServerRequestHandlers } from \"../codex-app-server.js\";\nimport type { NativeNotifications, NativeServerRequests } from \"./native-protocol.generated.js\";\nimport {\n allowsNativeApprovalPath,\n isNativeApprovalPolicyActive,\n type NativeApprovalPolicy,\n} from \"./native-policy.js\";\nimport type { CodexQuestions } from \"./questions.js\";\n\ntype ApprovalMethod =\n | \"item/commandExecution/requestApproval\"\n | \"item/fileChange/requestApproval\"\n | \"item/permissions/requestApproval\";\ntype Identity = { itemId: string; threadId: string; turnId: string };\ntype Permissions =\n NativeServerRequests[\"item/permissions/requestApproval\"][\"params\"][\"permissions\"];\n\n/** Changes from a retained native file-change item in the same thread and turn. */\nexport type NativeApprovalFileChanges = Extract<\n NativeNotifications[\"item/started\"][\"item\"],\n { type: \"fileChange\" }\n>[\"changes\"];\n\n/** Harness-owned consent hooks; the existing native callback wrapper owns turn/generation binding. */\nexport function createCodexNativeApprovalHandlers(options: {\n questions: CodexQuestions;\n getPolicy: () => NativeApprovalPolicy | undefined;\n getFileChanges: (identity: Identity) => NativeApprovalFileChanges | undefined;\n}): Pick<CodexServerRequestHandlers, ApprovalMethod> {\n const active = (signal: AbortSignal, threadId: string) =>\n !signal.aborted && isNativeApprovalPolicyActive(options.getPolicy(), threadId);\n const text = (value: unknown): value is string =>\n typeof value === \"string\" && value.length > 0 && value.length <= 8192;\n const scoped = async (\n path: unknown,\n access: \"read\" | \"write\",\n signal: AbortSignal,\n threadId: string,\n ) =>\n active(signal, threadId) &&\n text(path) &&\n allowsNativeApprovalPath(options.getPolicy(), path, access) &&\n active(signal, threadId);\n const permissions = async (value: Permissions, signal: AbortSignal, threadId: string) => {\n if (\n value.network?.enabled ||\n (value.network != null && Object.keys(value.network).some((key) => key !== \"enabled\")) ||\n Object.keys(value).some((key) => ![\"network\", \"fileSystem\"].includes(key))\n )\n return false;\n const fs = value.fileSystem;\n if (!fs) return true;\n if (\n fs.entries != null ||\n fs.globScanMaxDepth != null ||\n Object.keys(fs).some((key) => ![\"read\", \"write\", \"entries\", \"globScanMaxDepth\"].includes(key))\n )\n return false;\n for (const access of [\"read\", \"write\"] as const) {\n const paths = fs[access];\n if (paths != null && (!Array.isArray(paths) || paths.length > 32)) return false;\n for (const path of paths ?? [])\n if (!(await scoped(path, access, signal, threadId))) return false;\n }\n return active(signal, threadId);\n };\n const consent = async (\n identity: Identity,\n approval: NativeApprovalDescription,\n signal: AbortSignal,\n ) => {\n if (\n !active(signal, identity.threadId) ||\n approval.details.length > 64 ||\n approval.details.some((detail) => detail.length > 8192) ||\n approval.details.reduce((sum, detail) => sum + detail.length, 0) > 65536\n )\n return false;\n try {\n return (\n (await options.questions.requestApproval(identity, approval, signal)) &&\n active(signal, identity.threadId)\n );\n } catch {\n return false;\n }\n };\n return {\n \"item/commandExecution/requestApproval\": async (input, signal) => {\n const params = structuredClone(input);\n const allowed = async () =>\n active(signal, params.threadId) &&\n text(params.command) &&\n (params.kind == null || params.kind === \"command\") &&\n !params.environmentId &&\n !params.networkApprovalContext &&\n (params.availableDecisions == null || params.availableDecisions.includes(\"accept\")) &&\n (await scoped(params.cwd, \"read\", signal, params.threadId)) &&\n (!params.additionalPermissions ||\n (await permissions(params.additionalPermissions, signal, params.threadId)));\n if (!(await allowed())) return { decision: \"decline\" };\n const details = [`Command: ${params.command}`, `Directory: ${params.cwd}`];\n for (const access of [\"read\", \"write\"] as const)\n for (const path of params.additionalPermissions?.fileSystem?.[access] ?? [])\n details.push(`${access}: ${path}`);\n const accepted = await consent(params, { kind: \"command\", details }, signal);\n return { decision: accepted && (await allowed()) ? \"accept\" : \"decline\" };\n },\n \"item/fileChange/requestApproval\": async (input, signal) => {\n const params = structuredClone(input);\n if (!active(signal, params.threadId)) return { decision: \"decline\" };\n const original = options.getFileChanges(params);\n if (!original?.length || original.length > 16) return { decision: \"decline\" };\n const changes = structuredClone(original);\n const snapshot = JSON.stringify(changes);\n const allowed = async () => {\n if (\n !active(signal, params.threadId) ||\n snapshot !== JSON.stringify(options.getFileChanges(params))\n )\n return false;\n if (\n params.grantRoot != null &&\n !(await scoped(params.grantRoot, \"write\", signal, params.threadId))\n )\n return false;\n for (const change of changes) {\n if (!text(change.diff) || !(await scoped(change.path, \"write\", signal, params.threadId)))\n return false;\n if (![\"add\", \"delete\", \"update\"].includes(change.kind.type)) return false;\n if (\n change.kind.type === \"update\" &&\n change.kind.move_path != null &&\n !(await scoped(change.kind.move_path, \"write\", signal, params.threadId))\n )\n return false;\n }\n return active(signal, params.threadId);\n };\n if (!(await allowed())) return { decision: \"decline\" };\n const details = changes.flatMap((change) => [\n `${change.kind.type}: ${change.path}${change.kind.type === \"update\" && change.kind.move_path ? ` → ${change.kind.move_path}` : \"\"}`,\n change.diff,\n ]);\n const accepted = await consent(params, { kind: \"file\", details }, signal);\n return { decision: accepted && (await allowed()) ? \"accept\" : \"decline\" };\n },\n \"item/permissions/requestApproval\": async (input, signal) => {\n const params = structuredClone(input);\n const allowed = async () =>\n active(signal, params.threadId) &&\n !params.environmentId &&\n (await scoped(params.cwd, \"read\", signal, params.threadId)) &&\n (await permissions(params.permissions, signal, params.threadId));\n if (!(await allowed())) return { permissions: {}, scope: \"turn\" };\n const details = [`Directory: ${params.cwd}`];\n for (const access of [\"read\", \"write\"] as const)\n for (const path of params.permissions.fileSystem?.[access] ?? [])\n details.push(`${access}: ${path}`);\n if (details.length === 1) return { permissions: {}, scope: \"turn\" };\n const accepted = await consent(params, { kind: \"permissions\", details }, signal);\n return {\n permissions: accepted && (await allowed()) ? params.permissions : {},\n scope: \"turn\",\n };\n },\n };\n}\n","import type { CodexServerRequestHandlers } from \"../codex-app-server.js\";\nimport { isNativeApprovalPolicyActive, type NativeApprovalPolicy } from \"./native-policy.js\";\nimport type { CodexQuestions } from \"./questions.js\";\n\ntype Handler = NonNullable<CodexServerRequestHandlers[\"mcpServer/elicitation/request\"]>;\nconst record = (value: unknown): value is Record<string, unknown> =>\n value !== null && typeof value === \"object\" && !Array.isArray(value);\nconst text = (value: unknown): value is string =>\n typeof value === \"string\" && value.length > 0 && Buffer.byteLength(value) <= 8192;\n\n/** Human consent for the configured runner callback, independent of downstream tool authorization. */\nexport function createCodexMcpApprovalHandler(options: {\n serverName: string | undefined;\n questions: CodexQuestions;\n getPolicy: () => NativeApprovalPolicy | undefined;\n bindingActive: () => boolean;\n}): Handler {\n return async (input, signal) => {\n const decline = { action: \"decline\" as const, content: null, _meta: null };\n try {\n const params = structuredClone(input);\n const active = () =>\n !signal.aborted &&\n options.bindingActive() &&\n isNativeApprovalPolicyActive(options.getPolicy(), params.threadId);\n if (\n !active() ||\n !text(options.serverName) ||\n params.serverName !== options.serverName ||\n !text(params.threadId) ||\n !text(params.turnId) ||\n params.mode !== \"form\" ||\n !text(params.message) ||\n Object.keys(params).some(\n (key) =>\n ![\n \"threadId\",\n \"turnId\",\n \"serverName\",\n \"mode\",\n \"message\",\n \"requestedSchema\",\n \"_meta\",\n ].includes(key),\n ) ||\n !record(params._meta) ||\n params._meta.codex_approval_kind !== \"mcp_tool_call\" ||\n !record(params.requestedSchema) ||\n params.requestedSchema.type !== \"object\" ||\n !record(params.requestedSchema.properties) ||\n Object.keys(params.requestedSchema.properties).length !== 0 ||\n Object.keys(params.requestedSchema).some(\n (key) => ![\"type\", \"properties\", \"required\"].includes(key),\n ) ||\n (params.requestedSchema.required !== undefined &&\n (!Array.isArray(params.requestedSchema.required) ||\n params.requestedSchema.required.length !== 0)) ||\n Buffer.byteLength(JSON.stringify(params._meta)) > 65536\n )\n return decline;\n const accepted = await options.questions.requestApproval(\n undefined,\n {\n kind: \"mcp\",\n details: [\n `Configured MCP server: ${options.serverName}`,\n params.message,\n \"This is native request presentation, not an independently verified tool identity. Tool permissions are checked again when dispatched.\",\n ],\n },\n signal,\n );\n return accepted && active() ? { action: \"accept\", content: null, _meta: null } : decline;\n } catch {\n return decline;\n }\n };\n}\n","import { randomUUID } from \"node:crypto\";\nimport type { NativeApprovalDescription } from \"@skaile/workspaces/types\";\nimport type { CodexServerRequestHandlers } from \"../codex-app-server.js\";\nimport type { AgentEvent } from \"../types.js\";\nimport type { NativeServerRequests } from \"./native-protocol.generated.js\";\n\ntype InputRequest = NativeServerRequests[\"item/tool/requestUserInput\"];\n\n/** One correlated native question batch, settled only by matching replies or cancellation. */\nexport class CodexQuestions {\n private pending?: {\n id: string;\n questions: InputRequest[\"params\"][\"questions\"];\n answers: InputRequest[\"result\"][\"answers\"];\n approval?: NativeApprovalDescription;\n finish: (result?: InputRequest[\"result\"]) => void;\n };\n constructor(private readonly emit: (event: AgentEvent) => void) {}\n\n readonly request: NonNullable<CodexServerRequestHandlers[\"item/tool/requestUserInput\"]> = async (\n params,\n signal,\n ) => this.park(params, signal);\n\n /** Park native consent; MCP uses only local correlation because it supplies no native item ID. */\n async requestApproval(\n identity: Pick<InputRequest[\"params\"], \"itemId\" | \"threadId\" | \"turnId\"> | undefined,\n approval: NativeApprovalDescription,\n signal: AbortSignal,\n ): Promise<boolean> {\n const result = await this.park(\n {\n ...identity,\n isBlocking: true,\n questions: [\n {\n id: \"native-approval\",\n header: \"Approval\",\n question:\n approval.kind === \"permissions\"\n ? \"Allow these permissions for the current turn?\"\n : approval.kind === \"mcp\"\n ? \"Allow this native MCP request once?\"\n : \"Allow this native action once?\",\n options: [\n {\n label: \"Approve once\",\n description:\n approval.kind === \"permissions\"\n ? \"Allow for the current turn.\"\n : \"Allow only this request.\",\n },\n { label: \"Deny\", description: \"Do not allow this request.\" },\n ],\n },\n ],\n },\n signal,\n approval,\n );\n return result.answers[\"native-approval\"]?.answers[0] === \"Approve once\";\n }\n\n private async park(\n params: Omit<InputRequest[\"params\"], \"itemId\" | \"threadId\" | \"turnId\"> & { itemId?: string },\n signal: AbortSignal,\n approval?: NativeApprovalDescription,\n ): Promise<InputRequest[\"result\"]> {\n signal.throwIfAborted();\n if (\n this.pending ||\n !params.isBlocking ||\n !Array.isArray(params.questions) ||\n params.questions.length === 0 ||\n params.questions.length > 16 ||\n params.questions.some((q) => !q.id || !q.question || q.isSecret) ||\n new Set(params.questions.map((q) => q.id)).size !== params.questions.length ||\n new Set(params.questions.map((q) => q.question)).size !== params.questions.length\n )\n throw new Error(\"CODEX_INPUT_UNSUPPORTED\");\n params = structuredClone(params);\n approval = approval ? structuredClone(approval) : undefined;\n const id = randomUUID();\n const eventId = params.itemId ?? `local-consent:${id}`;\n return new Promise((resolve, reject) => {\n const abort = () => finish();\n const finish = (result?: InputRequest[\"result\"]) => {\n if (this.pending?.id !== id) return;\n this.pending = undefined;\n signal.removeEventListener(\"abort\", abort);\n if (result && !signal.aborted) resolve(result);\n else reject(new Error(\"CODEX_INPUT_CANCELLED\"));\n };\n this.pending = {\n id,\n questions: params.questions,\n answers: Object.create(null),\n finish,\n approval,\n };\n const input = {\n requestId: id,\n questions: structuredClone(params.questions),\n ...(approval ? { approval: structuredClone(approval) } : {}),\n };\n signal.addEventListener(\"abort\", abort, { once: true });\n if (signal.aborted) {\n abort();\n return;\n }\n this.emit({\n type: \"message_start\",\n message: {\n role: \"assistant\",\n content: [\n {\n type: \"tool_use\",\n name: \"AskUserQuestion\",\n id: eventId,\n input,\n },\n ],\n },\n });\n if (this.pending?.id !== id || signal.aborted) return;\n this.emit({\n type: \"tool_call\",\n name: \"AskUserQuestion\",\n tool: { name: \"AskUserQuestion\" },\n toolCallId: eventId,\n input,\n });\n });\n }\n\n get active(): boolean {\n return Boolean(this.pending);\n }\n\n answer(answer: string, question?: string, requestId?: string): boolean {\n const pending = this.pending;\n if (!pending || pending.id !== requestId || typeof answer !== \"string\") return false;\n if (\n pending.approval &&\n (question !== pending.questions[0]?.question || ![\"Approve once\", \"Deny\"].includes(answer))\n )\n return false;\n const q =\n question === undefined\n ? pending.questions.find((entry) => !Object.hasOwn(pending.answers, entry.id))\n : pending.questions.find((entry) => entry.question === question);\n if (!q || Object.hasOwn(pending.answers, q.id)) return false;\n pending.answers[q.id] = { answers: [answer] };\n if (pending.questions.every((entry) => Object.hasOwn(pending.answers, entry.id)))\n pending.finish({ answers: pending.answers });\n return true;\n }\n}\n","import { isAbsolute, join } from \"node:path\";\nimport { isDeepStrictEqual } from \"node:util\";\nimport type { CodexCredentialDelivery, TokenUsage } from \"@skaile/workspaces/types\";\nimport { CodexAppServerClient, type CodexServerRequestHandlers } from \"../codex-app-server.js\";\nimport * as recovery from \"../harnesses/recovery-policy.js\";\nimport { type ReconfigureConfig, ReconfigureLedger } from \"../reconfigure-ledger.js\";\nimport { BUILTIN_HARNESS_CATALOG } from \"../registry.js\";\nimport {\n AgentHarness,\n type AgentConfig,\n type AgentEvent,\n type AgentMessage,\n type AgentPromptInput,\n type CodexManagedRuntimeOptions,\n type CodexNativeMcpDiagnostics,\n type CodexToolTransport,\n type HarnessInfo,\n type ReconfigureOutcome,\n type ReconfigurePatch,\n TOOL_ALLOWLIST_UNSUPPORTED,\n} from \"../types.js\";\nimport {\n managedCodexRegistryViolation,\n parseCodexCredential,\n parseCodexRefreshResult,\n} from \"./credentials.js\";\nimport { codexInstanceEnvironment, prepareCodexInstance } from \"./instance-state.js\";\nimport { codexPromptInput } from \"./inputs.js\";\nimport {\n prepareNativePolicy,\n activateNativeApprovalPolicy,\n isNativeApprovalPolicyActive,\n type NativeApprovalPolicy,\n} from \"./native-policy.js\";\nimport {\n createCodexNativeApprovalHandlers,\n type NativeApprovalFileChanges,\n} from \"./native-approvals.js\";\nimport { createCodexMcpApprovalHandler } from \"./native-mcp-approval.js\";\nimport { CodexNativeStateUnavailable } from \"./native-state.js\";\nimport { CodexQuestions } from \"./questions.js\";\nimport type { NativeNotifications } from \"./native-protocol.generated.js\";\n\nconst record = (value: unknown): value is Record<string, unknown> =>\n value !== null && typeof value === \"object\" && !Array.isArray(value);\nconst failure = (code = \"CODEX_RUNTIME_UNSUPPORTED\") => new Error(code);\nconst nativeUsage = (value: Record<string, unknown>): TokenUsage => ({\n ...(typeof value.inputTokens === \"number\" ? { inputTokens: value.inputTokens } : {}),\n ...(typeof value.outputTokens === \"number\" ? { outputTokens: value.outputTokens } : {}),\n ...(typeof value.cachedInputTokens === \"number\"\n ? { cacheReadTokens: value.cachedInputTokens }\n : {}),\n ...(typeof value.reasoningOutputTokens === \"number\"\n ? { reasoningTokens: value.reasoningOutputTokens }\n : {}),\n ...(typeof value.totalTokens === \"number\" ? { totalTokens: value.totalTokens } : {}),\n});\nconst subtractUsage = (total: TokenUsage, baseline?: TokenUsage): TokenUsage => {\n const delta = (value?: number, before?: number) =>\n value === undefined ? undefined : Math.max(0, value - (before ?? 0));\n return {\n ...(delta(total.inputTokens, baseline?.inputTokens) !== undefined\n ? { inputTokens: delta(total.inputTokens, baseline?.inputTokens) }\n : {}),\n ...(delta(total.outputTokens, baseline?.outputTokens) !== undefined\n ? { outputTokens: delta(total.outputTokens, baseline?.outputTokens) }\n : {}),\n ...(delta(total.cacheReadTokens, baseline?.cacheReadTokens) !== undefined\n ? {\n cacheReadTokens: delta(total.cacheReadTokens, baseline?.cacheReadTokens),\n }\n : {}),\n ...(delta(total.reasoningTokens, baseline?.reasoningTokens) !== undefined\n ? {\n reasoningTokens: delta(total.reasoningTokens, baseline?.reasoningTokens),\n }\n : {}),\n ...(delta(total.totalTokens, baseline?.totalTokens) !== undefined\n ? { totalTokens: delta(total.totalTokens, baseline?.totalTokens) }\n : {}),\n };\n};\nconst addUsage = (left: TokenUsage | undefined, right: TokenUsage): TokenUsage => {\n const result: TokenUsage = {};\n for (const key of [\n \"inputTokens\",\n \"outputTokens\",\n \"cacheReadTokens\",\n \"reasoningTokens\",\n \"totalTokens\",\n ] as const) {\n if (left?.[key] !== undefined || right[key] !== undefined)\n result[key] = (left?.[key] ?? 0) + (right[key] ?? 0);\n }\n return result;\n};\nconst limit = (value: number | undefined, fallback: number) => {\n const result = value ?? fallback;\n if (!Number.isSafeInteger(result) || result <= 0 || result > 1_800_000)\n throw failure(\"AI_PROFILE_INVALID\");\n return result;\n};\nasync function bounded<T>(work: Promise<T>, signal: AbortSignal, ms: number): Promise<T> {\n let timer: ReturnType<typeof setTimeout> | undefined;\n let cancel = () => {};\n try {\n return await Promise.race([\n work,\n new Promise<never>((_, reject) => {\n cancel = () => reject(failure());\n if (signal.aborted) cancel();\n else signal.addEventListener(\"abort\", cancel, { once: true });\n timer = setTimeout(() => reject(failure()), ms);\n }),\n ]);\n } finally {\n clearTimeout(timer);\n signal.removeEventListener(\"abort\", cancel);\n }\n}\ntype ActiveTurn = {\n id?: string;\n controller: AbortController;\n done: Promise<void>;\n ready: Promise<void>;\n readyNow: () => void;\n finish: () => void;\n timer: ReturnType<typeof setTimeout>;\n events: Array<{ method: string; params: Record<string, unknown> }>;\n messages: Map<string, string>;\n fileChanges: Map<string, string>;\n toolResults: AgentMessage[];\n toolItems: Set<string>;\n completedToolItems: Set<string>;\n failureCode?: string;\n /** Recovery budget for this turn; the 401 refresh spends `auth_refresh` from it. */\n recovery: recovery.RecoveryBudget;\n usage?: TokenUsage;\n usageBaseline?: TokenUsage;\n usageCursor?: TokenUsage;\n contextTokens?: number;\n contextWindow?: number;\n actualModel: string;\n};\n\n/** Managed (App Server) adapter. `codexHarnessTarget` picks it over the standalone `CodexHarness` via `isManagedCodexConfig`. */\nexport class ManagedCodexHarness extends AgentHarness {\n readonly harnessInfo: HarnessInfo = {\n id: \"codex\",\n name: \"OpenAI Codex\",\n modelAgnostic: false,\n supportsInBandAbort: true,\n capabilities: BUILTIN_HARNESS_CATALOG.codex?.capabilities,\n };\n private client?: CodexAppServerClient;\n private connecting?: Promise<CodexAppServerClient>;\n private options?: CodexManagedRuntimeOptions;\n private credential?: CodexCredentialDelivery;\n private nativeApprovalPolicy?: NativeApprovalPolicy;\n private instance?: ReturnType<typeof prepareCodexInstance>;\n private tools?: CodexToolTransport;\n private mcpStartup: CodexNativeMcpDiagnostics[\"startupAtEnd\"] = \"unknown\";\n private pendingMcpStartup?: {\n threadId: string;\n status: CodexNativeMcpDiagnostics[\"startupAtEnd\"];\n };\n private mcpDiagnostics: CodexNativeMcpDiagnostics = {\n startupBeforeTurn: \"unknown\",\n startupAtEnd: \"unknown\",\n toolsListBeforeTurn: 0,\n toolsListTotal: 0,\n toolsCallTotal: 0,\n nativeMcpToolItemCount: 0,\n };\n private controller = new AbortController();\n private generation = 0;\n private killed = false;\n private broken = false;\n private cleanupUncertain = false;\n private unexpectedClose = false;\n private starting?: Promise<void>;\n private closing: Promise<void> = Promise.resolve();\n private threadId?: string;\n private lastThreadId?: string;\n private resetting?: Promise<void>;\n private pendingPatch?: Partial<Pick<AgentConfig, \"model\" | \"thinking\" | \"effort\">>;\n private active?: ActiveTurn;\n private threadUsageTotal?: TokenUsage;\n private resumeUsageTurnIds = new Set<string>();\n private queue: Promise<void> = Promise.resolve();\n private queued = 0;\n private admittedTurns = 0;\n private loginCompleted?: {\n resolve: () => void;\n reject: (error: Error) => void;\n };\n /** Recovery budget for the connection's startup (no active turn); reset on each start. */\n private startupRecovery: recovery.RecoveryBudget = recovery.freshBudget();\n private startupAuthAttempted = false;\n private readonly questions = new CodexQuestions((event) => this.event(event));\n\n override get acceptsReplyAsPrompt(): boolean {\n return false;\n }\n override hasPendingQuestion(): boolean {\n return this.questions.active;\n }\n override answerQuestion(answer: string, question?: string, requestId?: string): boolean {\n return this.questions.answer(answer, question, requestId);\n }\n\n /** The settings a later prompt will run on; `config` only takes them at the next turn. */\n private readonly desired: ReconfigureConfig;\n private readonly reconfig: ReconfigureLedger;\n\n constructor(private config: AgentConfig) {\n super();\n this.desired = {\n model: config.model,\n modelRef: config.modelRef,\n thinking: config.thinking,\n effort: config.effort,\n registry: config.registry,\n roles: config.roles,\n };\n this.reconfig = new ReconfigureLedger({\n config: () => this.desired,\n onDesired: ({ model, thinking, effort }) => {\n const fields: ReconfigurePatch = {};\n if (model !== undefined) fields.model = model;\n if (thinking !== undefined) fields.thinking = thinking;\n if (effort !== undefined) fields.effort = effort;\n this.pendingPatch = { ...this.pendingPatch, ...fields };\n },\n });\n }\n override get runtimeSessionId(): string | undefined {\n return this.threadId ?? this.lastThreadId;\n }\n get isRunning(): boolean {\n return Boolean(this.client && this.threadId && !this.killed && !this.broken);\n }\n override getModel(): string | undefined {\n return this.config.model;\n }\n\n async start(): Promise<void> {\n if (this.killed || this.broken) throw failure();\n if (this.threadId && this.client) return;\n if (this.starting) return this.starting;\n this.starting = this.initialize()\n .catch(async (error) => {\n this.broken = true;\n await this.closeGeneration();\n if (\n error instanceof CodexNativeStateUnavailable &&\n (this.cleanupUncertain ||\n this.unexpectedClose ||\n this.killed ||\n this.startupAuthAttempted)\n )\n throw failure();\n const safe =\n error instanceof Error && /^(AI_PROFILE_INVALID|CODEX_[A-Z_]+)$/.test(error.message)\n ? error\n : failure();\n throw safe;\n })\n .finally(() => {\n this.starting = undefined;\n });\n return this.starting;\n }\n\n private async initialize(): Promise<void> {\n await this.closing;\n if (this.killed) throw failure();\n const options = this.config.harnessOptions?.codex?.managedRuntime;\n const tuning = this.config.harnessOptions?.codex;\n if (\n tuning?.authSource !== \"managed\" ||\n !options ||\n typeof options.prepareTools !== \"function\" ||\n !isAbsolute(options.executable) ||\n !this.config.model ||\n !tuning.reasoningEffort ||\n !tuning.approvalPolicy ||\n tuning.approvalPolicy === \"on-failure\" ||\n !tuning.sandboxMode ||\n tuning.sandboxMode === \"danger-full-access\" ||\n // A managed session runs on the platform-minted credential alone: an\n // OpenAI key handed in through the child environment would be a second,\n // unaudited authority.\n this.config.env?.OPENAI_API_KEY ||\n // Credential isolation, stated on the AI provider registry: one entry,\n // codex's own OpenAI surface, a platform-injected oauth reference. See\n // `managedCodexRegistryViolation`.\n managedCodexRegistryViolation(this.config.registry) !== undefined ||\n (options.nativeTurnBudget !== undefined && options.nativeTurnBudget !== 1)\n )\n throw failure(\"AI_PROFILE_INVALID\");\n this.options = options;\n const timeout = limit(options.requestTimeoutMs, 15_000);\n limit(options.turnTimeoutMs, 300_000);\n try {\n this.credential = parseCodexCredential(this.credential ?? options.credential);\n } catch {\n throw failure(\"CODEX_AUTH_UNAVAILABLE\");\n }\n if (this.credential.configId !== this.config.aiProviderConfigId)\n throw failure(\"AI_PROFILE_INVALID\");\n const privatePolicy = prepareNativePolicy({\n cwd: this.config.cwd,\n privateRoot: options.privateRoot,\n privateDirectory: options.privateDirectory,\n sandboxMode: tuning.sandboxMode,\n });\n this.instance = prepareCodexInstance(this.config, options, this.credential);\n const generation = ++this.generation;\n const mcpReplies = new WeakMap<object, () => boolean>();\n this.controller = new AbortController();\n this.startupRecovery = recovery.freshBudget();\n this.startupAuthAttempted = false;\n const handlers: CodexServerRequestHandlers = {\n \"account/chatgptAuthTokens/refresh\": async (params, signal) => {\n const active = this.active;\n // The client runs this handler a microtask after the frame arrives, so a\n // `turn/completed` parsed in the same chunk has already ended the turn this\n // request belonged to. With no turn and no startup in flight it is stale:\n // refusing it keeps the finished turn's spent budget from being bypassed.\n if (!active && !this.starting) throw failure(\"CODEX_AUTH_UNAVAILABLE\");\n if (!active) this.startupAuthAttempted = true;\n const cancellation = AbortSignal.any([\n signal,\n this.controller.signal,\n ...(active ? [active.controller.signal] : []),\n ]);\n try {\n return await this.refresh(params, cancellation);\n } catch {\n if (active && this.active === active) active.failureCode = \"CODEX_AUTH_UNAVAILABLE\";\n throw failure(\"CODEX_AUTH_UNAVAILABLE\");\n }\n },\n };\n const authMode = this.credential.kind === \"codex-subscription\" ? \"chatgpt\" : \"api\";\n const nativePolicy = {\n cli_auth_credentials_store: \"ephemeral\",\n forced_login_method: authMode,\n model_provider: \"openai\",\n model: this.config.model,\n model_instructions_file: this.instance.instructionFile,\n shell_environment_policy: {\n inherit: \"none\",\n set: { PATH: options.environment.PATH ?? \"/usr/bin:/bin\" },\n },\n mcp_servers: {},\n };\n const overrides = Object.entries({\n cli_auth_credentials_store: \"ephemeral\",\n forced_login_method: authMode,\n model_provider: \"openai\",\n model: this.config.model,\n model_instructions_file: this.instance.instructionFile,\n \"shell_environment_policy.inherit\": \"none\",\n \"shell_environment_policy.set.PATH\": options.environment.PATH ?? \"/usr/bin:/bin\",\n }).flatMap(([key, value]) => [\"-c\", `${key}=${JSON.stringify(value)}`]);\n overrides.push(\"-c\", \"mcp_servers={}\");\n const connecting = CodexAppServerClient.connect(\n {\n command: options.executable,\n args: [\n ...(options.executableArgs ?? []),\n ...overrides,\n ...privatePolicy.cliArgs,\n \"app-server\",\n \"--stdio\",\n ],\n cwd: this.instance.root,\n env: codexInstanceEnvironment(options.environment, this.instance.home),\n clientInfo: { name: \"skaile-managed-codex\", version: \"1\" },\n processGroup: true,\n requestTimeoutMs: timeout,\n serverRequestTimeoutMs: Math.min(limit(options.interactionTimeoutMs, 300_000), 300_000),\n onServerRequest: handlers,\n canReplyToServerRequest: (method, params) => {\n if (method !== \"mcpServer/elicitation/request\") return true;\n return record(params) && (mcpReplies.get(params)?.() ?? false);\n },\n onNotification: (method, params) => {\n if (generation === this.generation) this.notification(method, params);\n },\n onClose: () => {\n if (generation !== this.generation) return;\n this.unexpectedClose = true;\n this.broken = true;\n this.loginCompleted?.reject(failure());\n this.finishTurn(\"CODEX_RUNTIME_UNSUPPORTED\");\n void this.closeGeneration();\n },\n },\n this.controller.signal,\n );\n this.connecting = connecting;\n try {\n this.client = await connecting;\n } finally {\n if (this.connecting === connecting) this.connecting = undefined;\n }\n if (generation !== this.generation || this.killed) throw failure();\n await this.authenticate(timeout);\n const toolsPromise = options.prepareTools(this.controller.signal).then(async (tools) => {\n if (generation !== this.generation || this.controller.signal.aborted) {\n await tools.dispose().catch(() => {});\n throw failure();\n }\n return tools;\n });\n try {\n this.tools = await bounded(toolsPromise, this.controller.signal, timeout);\n } catch {\n throw failure(\"CODEX_REQUIRED_TOOL_UNAVAILABLE\");\n }\n if (\n !this.tools ||\n !record(this.tools.mcpServers) ||\n typeof this.tools.dispose !== \"function\" ||\n (Object.keys(this.tools.mcpServers).length === 0 &&\n Object.keys(this.tools.onServerRequest ?? {}).length === 0)\n )\n throw failure(\"CODEX_REQUIRED_TOOL_UNAVAILABLE\");\n if (this.tools.onServerRequest?.[\"item/tool/requestUserInput\"])\n throw failure(\"AI_PROFILE_INVALID\");\n const nativeApprovals = createCodexNativeApprovalHandlers({\n questions: this.questions,\n getPolicy: () => (tuning.approvalPolicy === \"never\" ? undefined : this.nativeApprovalPolicy),\n getFileChanges: ({ itemId, threadId, turnId }) => {\n const active = this.active;\n if (\n !active ||\n active.controller.signal.aborted ||\n threadId !== this.threadId ||\n turnId !== active.id\n )\n return undefined;\n const snapshot = active.fileChanges.get(itemId);\n return snapshot ? (JSON.parse(snapshot) as NativeApprovalFileChanges) : undefined;\n },\n });\n const approvalTools = this.tools;\n const approvalServerName = approvalTools.approvalServerName;\n const approvalServer = approvalServerName\n ? approvalTools.mcpServers[approvalServerName]\n : undefined;\n const approvalServerSnapshot = structuredClone(approvalServer);\n const mcpBindingActive = () =>\n this.tools === approvalTools &&\n approvalTools.approvalServerName === approvalServerName &&\n Boolean(approvalServerName) &&\n Object.hasOwn(approvalTools.mcpServers, approvalServerName!) &&\n record(approvalServer) &&\n approvalTools.mcpServers[approvalServerName!] === approvalServer &&\n isDeepStrictEqual(approvalServer, approvalServerSnapshot);\n const mcpPolicy = () =>\n tuning.approvalPolicy === \"never\" ? undefined : this.nativeApprovalPolicy;\n const mcpApproval = createCodexMcpApprovalHandler({\n serverName: approvalServerName,\n questions: this.questions,\n getPolicy: mcpPolicy,\n bindingActive: mcpBindingActive,\n });\n for (const [method, handler] of Object.entries({\n ...this.tools.onServerRequest,\n ...nativeApprovals,\n \"item/tool/requestUserInput\": this.questions.request,\n \"mcpServer/elicitation/request\": mcpApproval,\n })) {\n if (method === \"account/chatgptAuthTokens/refresh\" || !handler)\n throw failure(\"AI_PROFILE_INVALID\");\n (handlers as Record<string, (params: unknown, signal: AbortSignal) => Promise<unknown>>)[\n method\n ] = async (params, signal) => {\n const active = this.active;\n if (generation !== this.generation || !active || !record(params)) throw failure();\n await active.ready;\n if (\n generation !== this.generation ||\n this.active !== active ||\n params.threadId !== this.threadId ||\n params.turnId !== active.id\n )\n throw failure();\n const cancellation = AbortSignal.any([signal, active.controller.signal]);\n if (cancellation.aborted) throw failure();\n if (method === \"mcpServer/elicitation/request\") {\n mcpReplies.set(\n params,\n () =>\n generation === this.generation &&\n this.active === active &&\n !cancellation.aborted &&\n params.threadId === this.threadId &&\n params.turnId === active.id &&\n mcpBindingActive() &&\n isNativeApprovalPolicyActive(mcpPolicy(), this.threadId ?? \"\"),\n );\n }\n const result = await (\n handler as (params: unknown, signal: AbortSignal) => Promise<unknown>\n )(params, cancellation);\n if (generation !== this.generation || cancellation.aborted || this.active !== active)\n throw failure();\n return result;\n };\n }\n if (this.tools.instructions) this.instance.setToolInstructions(this.tools.instructions);\n const threadParams = {\n model: this.config.model,\n modelProvider: \"openai\",\n cwd: this.instance.cwd,\n approvalPolicy: tuning.approvalPolicy,\n permissions: \"managed\",\n config: {\n ...nativePolicy,\n ...privatePolicy.config,\n mcp_servers: this.tools.mcpServers,\n model_reasoning_effort: this.config.effort ?? tuning.reasoningEffort,\n },\n };\n const resuming = Boolean(this.config.resumeSessionId);\n this.threadUsageTotal = resuming ? (this.threadUsageTotal ?? {}) : {};\n this.resumeUsageTurnIds.clear();\n const response = resuming\n ? await this.client.request(\"thread/resume\", {\n ...threadParams,\n threadId: this.config.resumeSessionId!,\n excludeTurns: false,\n })\n : await this.client.request(\"thread/start\", {\n ...threadParams,\n allowProviderModelFallback: false,\n });\n if (!record(response) || response.model !== this.config.model)\n throw failure(\"CODEX_MODEL_UNAVAILABLE\");\n if (\n !record(response.thread) ||\n typeof response.thread.id !== \"string\" ||\n (resuming && response.thread.id !== this.config.resumeSessionId) ||\n (resuming && !Array.isArray(response.thread.turns)) ||\n response.reasoningEffort !== (this.config.effort ?? tuning.reasoningEffort) ||\n response.modelProvider !== \"openai\" ||\n response.approvalPolicy !== tuning.approvalPolicy\n )\n throw failure(\"AI_PROFILE_INVALID\");\n if (generation !== this.generation || this.killed) throw failure();\n this.resumeUsageTurnIds = new Set(\n resuming && Array.isArray(response.thread.turns)\n ? response.thread.turns.flatMap((turn) =>\n record(turn) && typeof turn.id === \"string\" ? [turn.id] : [],\n )\n : [],\n );\n this.nativeApprovalPolicy = activateNativeApprovalPolicy(\n privatePolicy,\n response,\n this.controller.signal,\n );\n this.threadId = response.thread.id;\n this.mcpStartup =\n this.pendingMcpStartup?.threadId === this.threadId\n ? this.pendingMcpStartup.status\n : \"unknown\";\n this.pendingMcpStartup = undefined;\n this.lastThreadId = this.threadId;\n this.instance.bindThread(this.threadId);\n }\n\n private async authenticate(timeout: number): Promise<void> {\n const credential = this.credential!;\n if (credential.kind === \"openai-api-key\") {\n const result = await this.client!.request(\"account/login/start\", {\n type: \"apiKey\",\n apiKey: credential.apiKey,\n });\n if (result.type !== \"apiKey\") throw failure(\"CODEX_AUTH_UNAVAILABLE\");\n return;\n }\n const completion = new Promise<void>((resolve, reject) => {\n this.loginCompleted = { resolve, reject };\n });\n // A native completion can precede its RPC reply; install the waiter first.\n const wait = bounded(completion, this.controller.signal, timeout);\n void wait.catch(() => {});\n try {\n const result = await this.client!.request(\"account/login/start\", {\n type: \"chatgptAuthTokens\",\n accessToken: credential.accessToken,\n chatgptAccountId: credential.chatgptAccountId,\n chatgptPlanType: credential.chatgptPlanType ?? null,\n });\n if (result.type !== \"chatgptAuthTokens\") throw failure(\"CODEX_AUTH_UNAVAILABLE\");\n await wait;\n } finally {\n this.loginCompleted = undefined;\n }\n }\n\n private async refresh(params: unknown, signal: AbortSignal) {\n const credential = this.credential;\n if (\n !record(params) ||\n params.reason !== \"unauthorized\" ||\n !credential ||\n credential.kind !== \"codex-subscription\" ||\n (params.previousAccountId != null &&\n params.previousAccountId !== credential.chatgptAccountId) ||\n !this.options?.refreshCredential\n )\n throw failure(\"CODEX_AUTH_UNAVAILABLE\");\n // The codex server replays the turn itself after a refresh; the policy only\n // grants the attempt. One refresh per active turn, one at startup.\n const active = this.active;\n const budget = active ? active.recovery : this.startupRecovery;\n const decision = recovery.decide(\n { message: \"unauthorized\", authError: true, limitRejected: false, queryEnded: false },\n budget,\n { onAuthError: true, onLimitBlocked: false, resumableSessionId: false },\n );\n if (!(\"attempt\" in decision) || decision.attempt !== \"auth_refresh\")\n throw failure(\"CODEX_AUTH_UNAVAILABLE\");\n const spent = recovery.spend(budget, \"auth_refresh\");\n if (active) active.recovery = spent;\n else this.startupRecovery = spent;\n const result = await this.options.refreshCredential(\n {\n kind: \"codex-subscription\",\n configId: credential.configId,\n credentialVersion: credential.credentialVersion,\n reason: \"retry-401\",\n },\n signal,\n );\n if (signal.aborted) throw failure(\"CODEX_AUTH_UNAVAILABLE\");\n let parsed: ReturnType<typeof parseCodexRefreshResult>;\n try {\n parsed = parseCodexRefreshResult(result, credential);\n } catch {\n throw failure(\"CODEX_AUTH_UNAVAILABLE\");\n }\n if (!parsed.ok) throw failure(\"CODEX_AUTH_UNAVAILABLE\");\n this.credential = parsed.credential;\n return {\n accessToken: parsed.credential.accessToken,\n chatgptAccountId: parsed.credential.chatgptAccountId,\n chatgptPlanType: parsed.credential.chatgptPlanType ?? null,\n };\n }\n\n prompt(message: string): Promise<void> {\n return this.promptInput({ text: message });\n }\n\n override promptInput(input: AgentPromptInput): Promise<void> {\n if (input.toolAllowlist !== undefined)\n return Promise.reject(new Error(TOOL_ALLOWLIST_UNSUPPORTED));\n const message = structuredClone(input);\n const turnBudget = this.config.harnessOptions?.codex?.managedRuntime?.nativeTurnBudget;\n if (\n this.killed ||\n this.broken ||\n this.resetting ||\n this.queued >= 32 ||\n (turnBudget !== undefined && this.admittedTurns >= turnBudget)\n )\n return Promise.reject(failure());\n if (turnBudget !== undefined) this.admittedTurns++;\n this.queued++;\n const task = this.queue.then(() => this.runTurn(message));\n this.queue = task\n .catch(() => {})\n .finally(() => {\n this.queued--;\n });\n return task;\n }\n\n private async runTurn(message: AgentPromptInput): Promise<void> {\n if (this.resetting) throw failure();\n await this.start();\n if (this.killed || this.broken || this.resetting) throw failure();\n if (this.pendingPatch) {\n this.config = { ...this.config, ...this.pendingPatch };\n this.pendingPatch = undefined;\n }\n if (!this.config.model) throw failure(\"AI_PROFILE_INVALID\");\n await this.tools?.validate?.();\n if (this.tools?.needsReload?.()) {\n this.config = { ...this.config, resumeSessionId: this.threadId };\n await this.closeGeneration();\n await this.start();\n }\n const input = codexPromptInput(\n message,\n this.instance!.cwd,\n this.options?.skillsDirectory\n ? {\n source: this.options.skillsDirectory,\n target: join(this.instance!.home, \"skills\"),\n }\n : undefined,\n );\n try {\n parseCodexCredential(this.credential);\n } catch {\n throw failure(\"CODEX_AUTH_UNAVAILABLE\");\n }\n let finish!: () => void;\n let readyNow!: () => void;\n const ready = new Promise<void>((resolve) => {\n readyNow = resolve;\n });\n const done = new Promise<void>((resolve) => {\n finish = resolve;\n });\n const active: ActiveTurn = {\n controller: new AbortController(),\n done,\n finish,\n ready,\n readyNow,\n timer: setTimeout(\n () => {\n this.finishTurn(\"CODEX_RUNTIME_UNSUPPORTED\");\n this.broken = true;\n void this.closeGeneration();\n },\n limit(this.options?.turnTimeoutMs, 300_000),\n ),\n events: [],\n messages: new Map(),\n fileChanges: new Map(),\n toolResults: [],\n toolItems: new Set(),\n completedToolItems: new Set(),\n recovery: recovery.freshBudget(),\n usageBaseline: this.threadUsageTotal,\n actualModel: this.config.model!,\n };\n this.active = active;\n this.mcpDiagnostics.nativeMcpToolItemCount = 0;\n this.observeMcp(true);\n this.tools?.beginTurn?.(active.controller.signal);\n try {\n const response = await this.client!.request(\"turn/start\", {\n threadId: this.threadId!,\n permissions: \"managed\",\n input,\n model: this.config.model,\n effort: this.config.effort ?? this.config.harnessOptions!.codex!.reasoningEffort,\n });\n if (this.active !== active) return;\n if (!record(response.turn) || typeof response.turn.id !== \"string\") throw failure();\n active.id = response.turn.id;\n active.readyNow();\n for (const event of active.events.splice(0)) this.notification(event.method, event.params);\n if (this.active === active && response.turn.status !== \"inProgress\")\n this.complete(response.turn);\n await done;\n } catch {\n this.finishTurn(\"CODEX_RUNTIME_UNSUPPORTED\");\n }\n }\n\n async abort(): Promise<void> {\n const active = this.active;\n if (!active) return;\n active.controller.abort();\n try {\n if (!active.id)\n await bounded(\n active.ready,\n this.controller.signal,\n limit(this.options?.requestTimeoutMs, 15_000),\n );\n if (this.active !== active) return;\n await this.client!.request(\"turn/interrupt\", {\n threadId: this.threadId!,\n turnId: active.id!,\n });\n await bounded(\n active.done,\n this.controller.signal,\n limit(this.options?.requestTimeoutMs, 15_000),\n );\n } catch {\n this.finishTurn(\"CODEX_RUNTIME_UNSUPPORTED\");\n this.broken = true;\n await this.closeGeneration();\n }\n }\n\n kill(): void {\n if (this.killed) return;\n this.killed = true;\n this.finishTurn(\"CODEX_RUNTIME_UNSUPPORTED\");\n void this.closeGeneration();\n }\n override async dispose(): Promise<void> {\n this.kill();\n await this.starting?.catch(() => {});\n await this.closing;\n }\n async resetSession(): Promise<void> {\n if (this.killed || this.broken) throw failure();\n if (this.resetting) return this.resetting;\n this.resetting = Promise.resolve()\n .then(async () => {\n if (this.active) await this.abort();\n await this.queue;\n await this.starting;\n await this.closeGeneration();\n if (this.killed || this.broken) throw failure();\n this.config = { ...this.config, resumeSessionId: undefined };\n this.lastThreadId = undefined;\n this.threadUsageTotal = undefined;\n })\n .finally(() => {\n this.resetting = undefined;\n });\n return this.resetting;\n }\n /**\n * Store a model / thinking / effort change; the next prompt merges it into the\n * config before the turn starts, and a turn in flight keeps what it began with.\n */\n override reconfigure(patch: ReconfigurePatch): Promise<ReconfigureOutcome> {\n return this.reconfig.reconfigure(patch);\n }\n\n private closeGeneration(): Promise<void> {\n const generation = ++this.generation;\n const finalMcp = { ...this.mcpDiagnostics };\n this.mcpStartup = \"unknown\";\n this.pendingMcpStartup = undefined;\n this.controller.abort();\n this.nativeApprovalPolicy = undefined;\n this.loginCompleted?.reject(failure());\n this.loginCompleted = undefined;\n const client = this.client;\n this.client = undefined;\n const connecting = this.connecting;\n this.connecting = undefined;\n const tools = this.tools;\n this.tools = undefined;\n const instance = this.instance;\n this.instance = undefined;\n this.threadId = undefined;\n this.closing = this.closing\n .then(async () => {\n try {\n // The handshake owns a spawned child before it returns the client. Join its\n // cancellation/disposal before releasing the instance lease.\n const pendingClient = await connecting?.catch(() => undefined);\n await client?.dispose();\n if (pendingClient && pendingClient !== client) await pendingClient.dispose();\n if (\n (client && !client.terminationConfirmed) ||\n (pendingClient && !pendingClient.terminationConfirmed)\n )\n this.cleanupUncertain = true;\n if (tools) {\n try {\n await bounded(\n Promise.resolve().then(() => tools.dispose()),\n new AbortController().signal,\n 1000,\n );\n if (generation === this.generation && !this.cleanupUncertain)\n this.observeClosedMcp(tools, finalMcp);\n } catch {\n this.cleanupUncertain = true;\n }\n }\n } finally {\n instance?.release();\n }\n })\n .catch(() => {\n this.cleanupUncertain = true;\n });\n return this.closing;\n }\n\n private notification(method: string, params: unknown): void {\n if (!record(params)) return;\n if (method === \"mcpServer/startupStatus/updated\") {\n const serverName = this.tools?.diagnostics?.serverName;\n if (\n !serverName ||\n params.name !== serverName ||\n typeof params.threadId !== \"string\" ||\n params.threadId.length > 512 ||\n typeof params.status !== \"string\" ||\n ![\"starting\", \"ready\", \"failed\", \"cancelled\"].includes(params.status)\n )\n return;\n const status =\n params.status as NativeNotifications[\"mcpServer/startupStatus/updated\"][\"status\"];\n if (this.threadId) {\n if (params.threadId === this.threadId) this.mcpStartup = status;\n } else this.pendingMcpStartup = { threadId: params.threadId, status };\n return;\n }\n if (method === \"account/login/completed\") {\n if (params.success === true && params.loginId == null) this.loginCompleted?.resolve();\n else this.loginCompleted?.reject(failure(\"CODEX_AUTH_UNAVAILABLE\"));\n return;\n }\n const active = this.active;\n if (\n (!active || (!active.usageCursor && this.resumeUsageTurnIds.has(String(params.turnId)))) &&\n method === \"thread/tokenUsage/updated\" &&\n params.threadId === (this.threadId ?? this.config.resumeSessionId) &&\n record(params.tokenUsage) &&\n record(params.tokenUsage.total)\n ) {\n // Resume replay follows its response but precedes new turn events; the\n // caller may already be awaiting turn/start when historical usage arrives.\n this.threadUsageTotal = nativeUsage(params.tokenUsage.total);\n if (active) active.usageBaseline = this.threadUsageTotal;\n return;\n }\n if (!active || params.threadId !== this.threadId) return;\n if (!active.id) {\n if (active.events.length >= 256) {\n this.broken = true;\n this.finishTurn(\"CODEX_RUNTIME_UNSUPPORTED\");\n void this.closeGeneration();\n } else active.events.push({ method, params });\n return;\n }\n const turnId = record(params.turn) ? params.turn.id : params.turnId;\n if (turnId !== active.id) return;\n if (method === \"thread/tokenUsage/updated\" && record(params.tokenUsage)) {\n const last = params.tokenUsage.last;\n const total = params.tokenUsage.total;\n const cumulativeUsage = record(total) ? nativeUsage(total) : undefined;\n if (cumulativeUsage) {\n // Attach replay precedes live usage; no replay means no historical\n // TokenCount. The first live response therefore counts from zero.\n active.usageBaseline ??= {};\n this.resumeUsageTurnIds.clear();\n const cursor = active.usageCursor ?? active.usageBaseline;\n const reset =\n cursor?.totalTokens !== undefined &&\n cumulativeUsage.totalTokens !== undefined &&\n cumulativeUsage.totalTokens < cursor.totalTokens;\n const increment = reset ? cumulativeUsage : subtractUsage(cumulativeUsage, cursor);\n if (Object.values(increment).some((value) => typeof value === \"number\" && value > 0))\n active.usage = addUsage(active.usage, increment);\n active.usageCursor = cumulativeUsage;\n this.threadUsageTotal = cumulativeUsage;\n }\n if (record(last)) {\n if (typeof last.totalTokens === \"number\") active.contextTokens = last.totalTokens;\n }\n if (typeof params.tokenUsage.modelContextWindow === \"number\")\n active.contextWindow = params.tokenUsage.modelContextWindow;\n } else if (method === \"model/rerouted\") {\n active.actualModel = typeof params.toModel === \"string\" ? params.toModel : active.actualModel;\n active.failureCode = \"CODEX_MODEL_UNAVAILABLE\";\n } else if (method === \"turn/completed\" && record(params.turn)) this.complete(params.turn);\n else if (method === \"error\" && params.willRetry !== true)\n active.failureCode = this.nativeErrorCode(params.error);\n else if (\n method === \"item/agentMessage/delta\" &&\n typeof params.itemId === \"string\" &&\n typeof params.delta === \"string\"\n ) {\n const previous = active.messages.get(params.itemId);\n if (previous === undefined)\n this.event({\n type: \"message_start\",\n message: { role: \"assistant\", content: [{ type: \"text\", text: \"\" }] },\n });\n const text = (previous ?? \"\") + params.delta;\n active.messages.set(params.itemId, text);\n this.event({\n type: \"message_update\",\n message: { role: \"assistant\", content: [{ type: \"text\", text }] },\n _textDelta: params.delta,\n });\n } else if (\n (method === \"item/started\" || method === \"item/completed\") &&\n record(params.item) &&\n typeof params.item.id === \"string\"\n ) {\n this.item(\n params.item as NativeNotifications[\"item/started\"][\"item\"],\n method === \"item/completed\",\n );\n }\n }\n\n private item(item: NativeNotifications[\"item/started\"][\"item\"], completed: boolean): void {\n const active = this.active!;\n if (item.type === \"fileChange\") {\n active.fileChanges.delete(item.id);\n if (\n !completed &&\n Array.isArray(item.changes) &&\n item.changes.length <= 16 &&\n active.fileChanges.size < 16\n ) {\n const snapshot = JSON.stringify(item.changes);\n if (snapshot.length <= 65536) active.fileChanges.set(item.id, snapshot);\n }\n }\n if (item.type === \"agentMessage\") {\n if (completed && typeof item.text === \"string\") {\n const previous = active.messages.get(item.id) ?? \"\";\n if (!active.messages.has(item.id))\n this.event({\n type: \"message_start\",\n message: {\n role: \"assistant\",\n content: [{ type: \"text\", text: \"\" }],\n },\n });\n if (item.text.startsWith(previous) && item.text.length > previous.length)\n this.event({\n type: \"message_update\",\n message: {\n role: \"assistant\",\n content: [{ type: \"text\", text: item.text }],\n },\n _textDelta: item.text.slice(previous.length),\n });\n active.messages.set(item.id, item.text);\n }\n return;\n }\n const name =\n item.type === \"commandExecution\"\n ? \"Bash\"\n : item.type === \"fileChange\"\n ? \"ApplyPatch\"\n : item.type === \"mcpToolCall\"\n ? `mcp__${item.server}__${item.tool}`\n : undefined;\n if (!name) return;\n if (!active.toolItems.has(item.id)) {\n if (item.type === \"mcpToolCall\" && item.server === this.tools?.diagnostics?.serverName)\n this.mcpDiagnostics.nativeMcpToolItemCount = Math.min(\n 512,\n this.mcpDiagnostics.nativeMcpToolItemCount + 1,\n );\n active.toolItems.add(item.id);\n this.event({\n type: \"tool_call\",\n name,\n tool: { name },\n toolCallId: item.id,\n input:\n item.type === \"mcpToolCall\"\n ? item.arguments\n : item.type === \"commandExecution\"\n ? { command: item.command }\n : item.type === \"fileChange\"\n ? { changes: item.changes }\n : {},\n });\n }\n if (completed && !active.completedToolItems.has(item.id)) {\n active.completedToolItems.add(item.id);\n active.toolResults.push({\n role: \"tool\",\n toolName: name,\n content: \"\",\n data:\n item.type === \"mcpToolCall\"\n ? {\n content: item.result?.content,\n structuredContent: item.result?.structuredContent,\n status: item.status,\n }\n : item.type === \"commandExecution\"\n ? {\n output: item.aggregatedOutput,\n exitCode: item.exitCode,\n status: item.status,\n }\n : item.type === \"fileChange\"\n ? { changes: item.changes, status: item.status }\n : {},\n isError: \"status\" in item && item.status === \"failed\",\n });\n this.event({ type: \"tool_execution_end\", toolName: name });\n }\n }\n private complete(turn: Record<string, unknown>): void {\n if (turn.status === \"completed\") this.finishTurn(this.active?.failureCode);\n else if (turn.status === \"interrupted\") this.finishTurn(\"CODEX_TURN_INTERRUPTED\");\n else if (turn.status === \"failed\")\n this.finishTurn(this.active?.failureCode ?? this.nativeErrorCode(turn.error));\n }\n private nativeErrorCode(error: unknown): string {\n const info = record(error) ? error.codexErrorInfo : undefined;\n if (info === \"unauthorized\") return \"CODEX_RECONNECT_REQUIRED\";\n if (\n info === \"usageLimitExceeded\" ||\n info === \"rateLimitExceeded\" ||\n info === \"serverOverloaded\"\n )\n return \"CODEX_RATE_LIMITED\";\n if (\n record(info) &&\n [\n \"httpConnectionFailed\",\n \"responseStreamConnectionFailed\",\n \"responseStreamDisconnected\",\n \"responseTooManyFailedAttempts\",\n ].some((key) => key in info)\n )\n return \"CODEX_NETWORK_UNAVAILABLE\";\n return \"CODEX_RUNTIME_UNSUPPORTED\";\n }\n\n private observeMcp(beforeTurn: boolean): void {\n const count = (value: unknown) =>\n typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0\n ? Math.min(512, value)\n : 0;\n let listed = 0;\n let called = 0;\n try {\n const counts = this.tools?.diagnostics?.requestCounts();\n listed = count(counts?.toolsListTotal);\n called = count(counts?.toolsCallTotal);\n } catch {\n /* Observation must not affect execution or cleanup. */\n }\n if (beforeTurn) {\n this.mcpDiagnostics.startupBeforeTurn = this.mcpStartup;\n this.mcpDiagnostics.toolsListBeforeTurn = listed;\n }\n this.mcpDiagnostics.startupAtEnd = this.mcpStartup;\n this.mcpDiagnostics.toolsListTotal = Math.max(this.mcpDiagnostics.toolsListBeforeTurn, listed);\n this.mcpDiagnostics.toolsCallTotal = beforeTurn\n ? called\n : Math.max(this.mcpDiagnostics.toolsCallTotal, called);\n this.publishMcp(this.mcpDiagnostics);\n }\n\n private observeClosedMcp(tools: CodexToolTransport, snapshot: CodexNativeMcpDiagnostics): void {\n try {\n // No RPC: the owned transport has closed, so its local counters are final.\n const counts = tools.diagnostics?.requestCounts();\n if (\n !counts ||\n ![counts.toolsListTotal, counts.toolsCallTotal].every(\n (value) => Number.isSafeInteger(value) && value >= 0,\n )\n )\n return;\n snapshot.toolsListTotal = Math.max(\n snapshot.toolsListTotal,\n Math.min(512, counts.toolsListTotal),\n );\n snapshot.toolsCallTotal = Math.max(\n snapshot.toolsCallTotal,\n Math.min(512, counts.toolsCallTotal),\n );\n this.publishMcp(snapshot);\n } catch {\n // No final observation on getter failure; retain the earlier snapshot unchanged.\n }\n }\n\n private publishMcp(snapshot: CodexNativeMcpDiagnostics): void {\n try {\n void Promise.resolve(\n this.options?.onNativeMcpDiagnostics?.(Object.freeze({ ...snapshot })),\n ).catch(() => {});\n } catch {\n /* A caller-owned observer is never an execution gate. */\n }\n }\n\n private finishTurn(code?: string): void {\n const active = this.active;\n if (!active) return;\n this.active = undefined;\n this.observeMcp(false);\n clearTimeout(active.timer);\n active.controller.abort();\n active.fileChanges.clear();\n active.readyNow();\n for (const text of active.messages.values())\n this.event({\n type: \"message_end\",\n message: { role: \"assistant\", content: [{ type: \"text\", text }] },\n });\n this.event({ type: \"turn_end\", toolResults: active.toolResults });\n const modelUsage = active.usage\n ? {\n inputTokens: active.usage.inputTokens,\n outputTokens: active.usage.outputTokens,\n cacheReadTokens: active.usage.cacheReadTokens,\n ...(typeof active.contextWindow === \"number\"\n ? { contextWindow: active.contextWindow }\n : {}),\n }\n : undefined;\n const usage = {\n ...(active.usage ? { tokens: active.usage } : {}),\n ...(modelUsage ? { modelUsage: { [active.actualModel]: modelUsage } } : {}),\n ...(typeof active.contextTokens === \"number\" ? { contextTokens: active.contextTokens } : {}),\n ...(typeof active.contextWindow === \"number\" ? { contextWindow: active.contextWindow } : {}),\n };\n if (code)\n this.event({\n type: \"error\",\n error: code,\n fatal: code !== \"CODEX_TURN_INTERRUPTED\",\n detail: {\n message: code,\n category:\n code === \"CODEX_TURN_INTERRUPTED\"\n ? \"process\"\n : code === \"CODEX_RATE_LIMITED\"\n ? \"rate_limit\"\n : code === \"CODEX_NETWORK_UNAVAILABLE\"\n ? \"network\"\n : code === \"CODEX_AUTH_UNAVAILABLE\" || code === \"CODEX_RECONNECT_REQUIRED\"\n ? \"auth\"\n : \"config\",\n retryable: false,\n },\n ...usage,\n });\n else\n this.event({\n type: \"result\",\n subtype: \"success\",\n summary: [...active.messages.values()].join(\"\\n\"),\n ...usage,\n });\n this.event({ type: \"agent_end\" });\n active.finish();\n }\n private event(event: AgentEvent): void {\n // Observers cannot prevent native cleanup or leave a terminal prompt unsettled.\n try {\n this.emit(\"agent-event\", event);\n } catch {}\n }\n}\n","/**\n * Turn the raw failure text the Codex SDK reports into one sentence a user can act on.\n *\n * The codex child reports a stream failure as a `Reconnecting... n/5 (<reason>)` line (the\n * reason is cut off mid-JSON) and an API refusal as the raw JSON body. Neither names what to do.\n */\n\n/** A failure the harness can phrase better than codex did. */\nexport interface FriendlyCodexError {\n message: string;\n category: \"auth\" | \"model\" | \"network\";\n hint: string;\n}\n\n/** The `error.message` of a JSON error body, or the text itself when it is not one. */\nfunction unwrapErrorBody(raw: string): string {\n const start = raw.indexOf(\"{\");\n if (start < 0) return raw;\n try {\n const body = JSON.parse(raw.slice(start)) as {\n message?: unknown;\n error?: { message?: unknown } | string;\n };\n const inner = typeof body.error === \"object\" ? body.error?.message : body.error;\n const text = inner ?? body.message;\n if (typeof text === \"string\" && text.length > 0) return text;\n } catch {\n // Cut-off JSON: keep the raw text.\n }\n return raw;\n}\n\n/**\n * Map `raw` to a friendly error, or `null` when it is not one of the known shapes.\n *\n * @param raw - The error text of a `turn.failed`/`error` event or a rejected stream.\n */\nexport function friendlyCodexError(raw: string): FriendlyCodexError | null {\n const text = unwrapErrorBody(raw);\n\n // p771: a model the ChatGPT account cannot use (a codex that is too old for the account default).\n const chatgpt = /'([^']+)' model is not supported when using Codex with a ChatGPT account/i.exec(\n text,\n );\n if (chatgpt) {\n return {\n message: `codex harness: the model '${chatgpt[1]}' is not available with a ChatGPT login.`,\n category: \"model\",\n hint: \"Update @openai/codex-sdk to the 0.16x line, pass --model with a model your login allows, or set OPENAI_API_KEY.\",\n };\n }\n if (/newer version of codex|requires a newer version|update codex/i.test(text)) {\n return {\n message: `codex harness: the selected model needs a newer Codex than the installed @openai/codex-sdk.`,\n category: \"model\",\n hint: \"Update @openai/codex-sdk to the 0.16x line (npm i @openai/codex-sdk@latest).\",\n };\n }\n\n // p598: a rejected key, however many times codex retried before giving up.\n if (\n /invalid_api_key|incorrect api key|\\b401\\b[^.]*unauthorized|unauthorized[^.]*\\b401\\b/i.test(raw)\n ) {\n return {\n message: \"codex harness: the API key was rejected (401).\",\n category: \"auth\",\n hint: \"Check OPENAI_API_KEY (or sign in again with `codex login`).\",\n };\n }\n\n const reconnecting = /^Reconnecting\\.\\.\\.\\s*\\d+\\/\\d+\\s*\\(([\\s\\S]*)\\)\\s*$/.exec(raw.trim());\n if (reconnecting) {\n const reason = (reconnecting[1] ?? \"\").split(/[{\\n]/, 1)[0]?.replace(/[\\s:,]+$/, \"\") ?? \"\";\n return {\n message: `codex harness: could not reach the model endpoint${reason ? ` (${reason})` : \"\"}.`,\n category: \"network\",\n hint: \"Check the network and the provider's status, then run again.\",\n };\n }\n return null;\n}\n","import { ManagedCodexHarness } from \"../codex/managed-harness.js\";\nimport {\n copyFileSync,\n existsSync,\n mkdirSync,\n readFileSync,\n rmSync,\n symlinkSync,\n writeFileSync,\n} from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { dirname, join, resolve } from \"node:path\";\nimport type {\n AgentMessageItem,\n Codex as CodexClient,\n CommandExecutionItem,\n FileChangeItem,\n McpToolCallItem,\n Thread,\n ThreadEvent,\n ThreadItem,\n WebSearchItem,\n} from \"@openai/codex-sdk\";\nimport { loadHarnessSdk } from \"@skaile/workspaces/core\";\nimport type { HarnessTarget } from \"@skaile/workspaces/plugin-registry\";\nimport type { Logger, TokenUsage } from \"@skaile/workspaces/types\";\nimport {\n type AIProviderEntry,\n registryEntries,\n resolveEntryBaseUrl,\n} from \"@skaile/workspaces/core/provider-registry\";\nimport * as z from \"zod\";\nimport {\n buildCodexConfigDocument,\n type CodexConfigBuild,\n codexProviderTableId,\n codexSessionHome,\n writeCodexConfigToml,\n} from \"../codex/config-toml.js\";\nimport { friendlyCodexError } from \"../codex/friendly-error.js\";\nimport { classifyGenericErrorMessage } from \"../error-classifier.js\";\nimport { getBridgeLogger } from \"../logger.js\";\nimport { fetchProviderModels, type ModelEntry } from \"../models.js\";\nimport {\n entryCredentialValue,\n registryCredentialEnv,\n} from \"../provider-materialize/credential-env.js\";\nimport { registryHarnessConfig } from \"../provider-registry-derive.js\";\nimport { ReconfigureLedger } from \"../reconfigure-ledger.js\";\nimport { BUILTIN_HARNESS_CATALOG } from \"../registry.js\";\nimport { RUNNER_AGENT_ENV_KEYS, stripRunnerPrivateEnv } from \"../runner-private-env.js\";\nimport {\n type AgentConfig,\n AgentHarness,\n type AgentError,\n type AgentEvent,\n type AgentMessage,\n type HarnessInfo,\n type ReconfigureOutcome,\n type ReconfigurePatch,\n} from \"../types.js\";\n\ntype CodexSdkModule = typeof import(\"@openai/codex-sdk\");\n\n/**\n * Build the explicit env whitelist forwarded to the Codex SDK child.\n *\n * Omits anything provisioned by `provision_secrets` so user credentials\n * stay out of the subprocess environment. `CODEX_HOME` is *set*, never\n * inherited: it roots the codex CLI at the session-private config home this\n * harness renders, so a session never picks up the ambient `~/.codex`.\n *\n * @docLink packages/bridge/concepts#codex-env-whitelist\n */\nfunction buildCodexChildEnv(parent: NodeJS.ProcessEnv, codexHome: string): Record<string, string> {\n const out: Record<string, string> = {};\n const explicit = [\n \"PATH\",\n \"HOME\",\n \"USER\",\n \"HOSTNAME\",\n \"SKAILE_SESSION_ID\",\n ...RUNNER_AGENT_ENV_KEYS,\n ];\n for (const key of explicit) {\n const v = parent[key];\n if (v !== undefined) out[key] = v;\n }\n for (const [key, value] of Object.entries(parent)) {\n if (key.startsWith(\"PI_\") && typeof value === \"string\") out[key] = value;\n }\n // codex's own credential: the session-private CODEX_HOME hides `~/.codex`, so\n // an exported key is the one way an entry-less session can authenticate.\n for (const key of [\"OPENAI_API_KEY\", \"CODEX_API_KEY\"]) {\n const v = parent[key];\n if (v) out[key] = v;\n }\n out.CODEX_HOME = codexHome;\n return out;\n}\n\n/**\n * The codex CLI's ChatGPT login file (`$CODEX_HOME/auth.json`, default `~/.codex/auth.json`) of\n * the user's environment, or `undefined` when there is none. `env` is the parent environment,\n * not the session's: the session's `CODEX_HOME` is the private one, which has no login.\n */\nexport function codexLoginFile(env: Record<string, string | undefined>): string | undefined {\n const home = env.CODEX_HOME?.trim() || join(env.HOME || homedir(), \".codex\");\n const file = join(home, \"auth.json\");\n return existsSync(file) ? resolve(file) : undefined;\n}\n\n/**\n * Make the login file reachable from the session-private `CODEX_HOME`, where codex reads it. A\n * symlink, so a token refresh codex writes lands in the user's own file; a copy when the\n * platform refuses symlinks.\n */\nfunction linkCodexLogin(codexHome: string, loginFile: string): void {\n const target = join(codexHome, \"auth.json\");\n mkdirSync(codexHome, { recursive: true, mode: 0o700 });\n rmSync(target, { force: true });\n try {\n symlinkSync(loginFile, target);\n } catch {\n copyFileSync(loginFile, target);\n }\n}\n\n/**\n * The reason a codex session has no credential to authenticate with, or\n * `undefined` when it has one. Codex runs in a session-private `CODEX_HOME`\n * that never sees `~/.codex/auth.json` on its own; the harness links the codex\n * CLI's ChatGPT login into it (`loginFile`), so that login counts as a\n * credential like an API key. Without any, the turn would end in `401\n * Unauthorized` after five silent reconnects.\n */\nfunction missingCodexCredential(\n build: CodexConfigBuild,\n env: Record<string, string | undefined>,\n loginFile?: string,\n): string | undefined {\n const table = build.providerId\n ? build.document.model_providers[codexProviderTableId(build.providerId)]\n : undefined;\n if (table) {\n if (table.requires_openai_auth) return undefined;\n if (!table.env_key || env[table.env_key]) return undefined;\n return `codex harness: the AI provider entry '${build.providerId}' has no credential; export the variable its credential names (see \\`skaile providers test ${build.providerId}\\`)`;\n }\n if (env.OPENAI_API_KEY || env.CODEX_API_KEY || loginFile) return undefined;\n return \"codex harness needs OPENAI_API_KEY, or the codex CLI's ChatGPT login (run `codex login`; ~/.codex/auth.json), or an AI provider entry with a credential\";\n}\n\n/**\n * Agent harness for the OpenAI Codex SDK.\n *\n * Creates or resumes a Codex thread via `@openai/codex-sdk` (lazy-imported in `start()`)\n * and maps Codex SDK thread events to the unified {@link AgentEvent} stream.\n * OpenAI wire surfaces only — endpoints come from the session's AI provider\n * registry, rendered into a session-private `config.toml`.\n *\n * @remarks\n * **Event mapping** — Codex SDK items are translated: `agent_message` → `message_start/update/end`,\n * `command_execution` → Bash-shaped tool events, `mcp_tool_call` → MCP tool events,\n * `file_change` → `ApplyPatch`-shaped events, `web_search` → `WebSearch` events.\n *\n * **Sandbox** — The Codex sandbox mode, approval policy, and reasoning effort are\n * controlled via `AgentConfig.harnessOptions.codex`. See {@link CodexHarnessOptions}.\n *\n * **Instructions file** — System prompt and pre-rendered agent identity are combined\n * into a single instructions file written to `<cwd>/.codex/skaile-session-instructions.md`\n * and passed to the Codex SDK as `model_instructions_file`.\n *\n * **Provider configuration** — Codex reads its endpoints from\n * `$CODEX_HOME/config.toml` and nowhere else, so `start()` renders the\n * session's registry into a session-private config home (see\n * {@link codexSessionHome}) and points `CODEX_HOME` at it. That is also what\n * stops the child from reading the ambient `~/.codex`. Credentials are\n * delivered by name (`SKAILE_AIP_<ID>_KEY`) in the child env, never in the\n * file. A session with no addressable registry entry renders nothing and\n * falls back to codex's built-in providers with `OPENAI_API_KEY`.\n *\n * **Standalone only** — the constructor throws `CODEX_MANAGED_REQUIRES_FACTORY` for\n * a managed config (see {@link isManagedCodexConfig}); build through\n * `createHarness(\"codex\", config)` / `codexHarnessTarget.create(config)`, which pick\n * the managed App Server adapter, so managed auth never falls back to local auth.\n *\n * @docLink packages/bridge/harnesses#codex-harness\n */\nexport class CodexHarness extends AgentHarness {\n readonly harnessInfo: HarnessInfo = {\n id: \"codex\",\n name: \"OpenAI Codex\",\n modelAgnostic: false,\n supportsInBandAbort: true,\n capabilities: BUILTIN_HARNESS_CATALOG.codex?.capabilities,\n };\n\n private readonly log: Logger = getBridgeLogger(\"codex\");\n private config: AgentConfig;\n private readonly reconfig = new ReconfigureLedger({ config: () => this.config });\n private thread: Thread | null = null;\n private running = false;\n private abortController: AbortController | null = null;\n private pendingToolResults: AgentMessage[] = [];\n private activeAssistantItemId: string | null = null;\n private activeAssistantText = \"\";\n private _runtimeSessionId: string | undefined;\n /** Token usage from the most recent completed turn. */\n private _lastTokens: TokenUsage | null = null;\n\n constructor(config: AgentConfig) {\n super();\n if (isManagedCodexConfig(config)) throw new Error(\"CODEX_MANAGED_REQUIRES_FACTORY\");\n this.config = config;\n }\n\n override get runtimeSessionId(): string | undefined {\n return this._runtimeSessionId;\n }\n\n override async dispose(): Promise<void> {\n this.kill();\n }\n\n /**\n * Store a model / thinking / effort change. The SDK thread is built from\n * `config` in {@link start}, so the next thread start (first prompt, or after\n * `resetSession()`) uses it; a thread already running keeps its options.\n */\n override reconfigure(patch: ReconfigurePatch): Promise<ReconfigureOutcome> {\n return this.reconfig.reconfigure(patch);\n }\n\n override getModel(): string | undefined {\n return this.config.model;\n }\n\n public async start(): Promise<void> {\n if (this.thread) return;\n\n let sdk: CodexSdkModule;\n try {\n sdk = await loadHarnessSdk(\n \"@openai/codex-sdk\",\n this.config.cwd,\n () => import(\"@openai/codex-sdk\"),\n \"Codex SDK\",\n );\n } catch (err) {\n this.log.error(\"codex SDK load failed\", err);\n throw err;\n }\n\n // Session-private config home. Holds the rendered provider registry and\n // every byte of codex's own state, so the child never reads `~/.codex`.\n const codexHome = codexSessionHome(this.config);\n const build = buildCodexConfigDocument({\n registry: this.config.registry,\n modelRef: this.config.modelRef,\n model: this.config.model,\n roles: this.config.roles,\n });\n if (build.unaddressable) {\n const { id, reason } = build.unaddressable;\n const message = `AI provider '${id}' cannot be used with the codex harness: ${reason}. Pick a model of another provider.`;\n this.log.error(\"codex cannot address the selected AI provider\", { provider: id, reason });\n throw Object.assign(new Error(message), { category: \"config\", hint: message });\n }\n writeCodexConfigToml(codexHome, build.document);\n for (const warning of build.warnings) this.log.warn(\"codex model selection\", { warning });\n // An entry codex cannot address matters only when it is the selected one (refused above);\n // listing every other registry entry as a warning on each run is noise (p773).\n for (const entry of build.skipped)\n this.log.debug(\"codex cannot address an AI provider entry\", {\n provider: entry.id,\n reason: entry.reason,\n });\n\n // Explicit env whitelist for the Codex SDK child. Avoids leaking the\n // runner's full environment (which may carry user secrets provisioned by\n // the platform) into the spawned process. `this.config.env`, when\n // supplied, fully overrides the whitelist — `CODEX_HOME` excepted, since\n // it is what binds the child to the rendered config.\n const env: Record<string, string | undefined> = this.config.env\n ? { ...this.config.env, CODEX_HOME: codexHome }\n : buildCodexChildEnv(process.env, codexHome);\n // `env_key` in the rendered file names a variable; this is where its value\n // is delivered. The file itself never carries a secret.\n Object.assign(\n env,\n registryCredentialEnv(this.config.registry ?? {}, { env: { ...process.env, ...env } }),\n );\n stripRunnerPrivateEnv(env);\n\n // The codex CLI's ChatGPT login stands in for an API key, so link it into the private home\n // unless a key is exported (codex would otherwise prefer the file over the key).\n const hasKey = Boolean(env.OPENAI_API_KEY || env.CODEX_API_KEY);\n const loginFile = hasKey ? undefined : codexLoginFile({ ...process.env, ...this.config.env });\n const missing = missingCodexCredential(build, env, loginFile);\n if (missing) {\n this.log.error(\"codex credential missing\", { reason: missing });\n throw Object.assign(new Error(missing), { category: \"config\", hint: missing });\n }\n // The private home is reused across resumes: a link from an earlier login-only run would\n // make codex prefer the file over an exported key, so drop it whenever the login is not used.\n if (loginFile) linkCodexLogin(codexHome, loginFile);\n else rmSync(join(codexHome, \"auth.json\"), { force: true });\n\n const instructionsFile = this.writeInstructionsFile();\n\n const client = new sdk.Codex({\n apiKey: env.OPENAI_API_KEY,\n env: Object.fromEntries(Object.entries(env).filter(([, value]) => value != null)) as Record<\n string,\n string\n >,\n ...(instructionsFile ? { config: { model_instructions_file: instructionsFile } } : {}),\n });\n\n const codexOptions = this.config.harnessOptions?.codex;\n const threadOptions = {\n model: build.model ?? this.config.model,\n sandboxMode: codexOptions?.sandboxMode ?? \"workspace-write\",\n workingDirectory: this.config.cwd,\n skipGitRepoCheck: true,\n modelReasoningEffort: codexOptions?.reasoningEffort ?? \"medium\",\n networkAccessEnabled: codexOptions?.networkAccessEnabled,\n approvalPolicy: codexOptions?.approvalPolicy ?? \"never\",\n additionalDirectories: codexOptions?.additionalDirectories,\n } satisfies Parameters<CodexClient[\"startThread\"]>[0];\n\n this.thread = this.config.resumeSessionId\n ? client.resumeThread(this.config.resumeSessionId, threadOptions)\n : client.startThread(threadOptions);\n this._runtimeSessionId = this.thread.id ?? this.config.resumeSessionId;\n this.log.info(\"codex harness started\", {\n model: this.config.model,\n resumed: Boolean(this.config.resumeSessionId),\n sessionId: this._runtimeSessionId,\n });\n }\n\n public async prompt(message: string): Promise<void> {\n await this.start();\n if (!this.thread) throw new Error(\"Codex thread not initialized\");\n if (this.running) throw new Error(\"Codex turn already in progress\");\n\n this.running = true;\n this.pendingToolResults = [];\n this.activeAssistantItemId = null;\n this.activeAssistantText = \"\";\n this._lastTokens = null;\n this.abortController = new AbortController();\n let turnFinished = false;\n this.log.debug(\"prompt issued\", { length: message.length });\n\n try {\n const input = message;\n const { events } = await this.thread.runStreamed(input, {\n signal: this.abortController.signal,\n });\n\n for await (const event of events) {\n turnFinished = this.handleThreadEvent(event) || turnFinished;\n }\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n if (error.name !== \"AbortError\") {\n this.log.error(\"prompt failed\", error);\n const detail = this.classifyErrorMessage(error.message);\n this.emit(\"agent-event\", {\n type: \"error\",\n error: detail.message,\n detail,\n } satisfies AgentEvent);\n this.emit(\"agent-event\", { type: \"agent_end\" } satisfies AgentEvent);\n }\n } finally {\n if (!turnFinished && this.activeAssistantItemId) {\n this.emit(\"agent-event\", {\n type: \"message_end\",\n message: this.buildAssistantMessage(this.activeAssistantText),\n } satisfies AgentEvent);\n }\n this.activeAssistantItemId = null;\n this.activeAssistantText = \"\";\n this.abortController = null;\n this.running = false;\n }\n }\n\n public async abort(): Promise<void> {\n this.abortController?.abort();\n }\n\n public get isRunning(): boolean {\n return this.running;\n }\n\n public kill(): void {\n this.abortController?.abort();\n this.running = false;\n this.abortController = null;\n this.log.info(\"codex harness killed\");\n }\n\n /**\n * Discover models from the endpoint this session actually addresses.\n *\n * The registry entry codex would talk to supplies both the base URL and the\n * credential, so a session pointed at a gateway lists that gateway's models\n * instead of api.openai.com's. A `platform:` reference the session boundary\n * already resolved is picked up from `SKAILE_AIP_<ID>_KEY` in the session\n * env. Without a registry entry codex can address, an ambient\n * `OPENAI_API_KEY` is the last resort.\n */\n override async listModels(): Promise<ModelEntry[]> {\n const selected = this.selectedProviderEntry();\n const sessionEnv = { ...process.env, ...this.config.env };\n const apiKey = selected\n ? entryCredentialValue(selected.id, selected.entry, { env: sessionEnv })\n : sessionEnv.OPENAI_API_KEY;\n if (!apiKey) return [];\n const baseUrl = selected ? resolveEntryBaseUrl(selected.entry) : undefined;\n const result = await fetchProviderModels(\"openai\", apiKey, baseUrl ? { baseUrl } : {});\n return result.ok ? (result.models as ModelEntry[]) : [];\n }\n\n /**\n * The registry entry codex addresses this session — the same selection the\n * rendered `config.toml` names in `model_provider`.\n */\n private selectedProviderEntry(): { id: string; entry: AIProviderEntry } | undefined {\n const registry = this.config.registry;\n if (!registry) return undefined;\n const { providerId } = buildCodexConfigDocument({\n registry,\n modelRef: this.config.modelRef,\n model: this.config.model,\n roles: this.config.roles,\n });\n if (!providerId) return undefined;\n const match = registryEntries(registry).find(([id]) => id === providerId);\n return match ? { id: match[0], entry: match[1] } : undefined;\n }\n\n async resetSession(): Promise<void> {\n this.kill();\n // Otherwise the next start resumes the pre-reset thread (see claude-sdk).\n this.config = { ...this.config, resumeSessionId: undefined };\n this.thread = null;\n this._runtimeSessionId = undefined;\n this._lastTokens = null;\n }\n\n override getTokenUsage(): TokenUsage | null {\n return this._lastTokens;\n }\n\n /**\n * Write a combined instructions file for Codex CLI's `model_instructions_file` config.\n * Combines the agent's pre-rendered identity (`.codex/skaile-agents/<agentName>.md`, written\n * by `skaile install`, one file per agent instance) with runtime context\n * (resources, environment, prompt-extensions).\n */\n private writeInstructionsFile(): string | undefined {\n const parts: string[] = [];\n\n // 1. Read pre-rendered agent identity if available\n if (this.config.agentDir && this.config.agentName) {\n const agentFile = join(\n this.config.cwd,\n \".codex\",\n \"skaile-agents\",\n `${this.config.agentName}.md`,\n );\n if (existsSync(agentFile)) {\n parts.push(readFileSync(agentFile, \"utf-8\"));\n }\n }\n\n // 2. Append runtime system prompt (resources, context, environment)\n if (this.config.systemPrompt) {\n parts.push(this.config.systemPrompt);\n }\n\n if (parts.length === 0) return undefined;\n\n // Write combined instructions to a session file\n const instrFile = join(this.config.cwd, \".codex\", \"skaile-session-instructions.md\");\n mkdirSync(dirname(instrFile), { recursive: true });\n writeFileSync(instrFile, parts.join(\"\\n\\n---\\n\\n\"));\n return instrFile;\n }\n\n private handleThreadEvent(event: ThreadEvent): boolean {\n switch (event.type) {\n case \"thread.started\":\n this._runtimeSessionId = event.thread_id;\n return false;\n\n case \"turn.started\":\n return false;\n\n case \"item.started\":\n case \"item.updated\":\n case \"item.completed\":\n this.handleThreadItem(event.item, event.type === \"item.completed\", event.type);\n return false;\n\n case \"turn.completed\": {\n this.flushToolResults();\n // Map Codex SDK `Usage` shape into the unified `TokenUsage`. Note\n // OpenAI's `input_tokens` is the TOTAL including cached reads, not\n // the fresh-prompt count Anthropic reports — consumers that want\n // a strict \"fresh input\" figure must subtract `cacheReadTokens`.\n const usage = event.usage;\n const tokens: TokenUsage | null = usage\n ? {\n inputTokens: usage.input_tokens,\n outputTokens: usage.output_tokens,\n cacheReadTokens: usage.cached_input_tokens,\n }\n : null;\n this._lastTokens = tokens;\n this.emit(\"agent-event\", {\n type: \"result\",\n subtype: \"success\",\n summary: this.activeAssistantText || \"Task completed\",\n // Codex SDK does not report per-turn cost. `0` signals \"not\n // reported\" — pair with `tokens` to disambiguate from \"free\".\n costUsd: 0,\n ...(tokens ? { tokens } : {}),\n } satisfies AgentEvent);\n this.emit(\"agent-event\", { type: \"agent_end\" } satisfies AgentEvent);\n return true;\n }\n\n case \"turn.failed\": {\n this.flushToolResults();\n const detail = this.classifyErrorMessage(event.error.message);\n this.emit(\"agent-event\", {\n type: \"error\",\n error: detail.message,\n detail,\n } satisfies AgentEvent);\n this.emit(\"agent-event\", { type: \"agent_end\" } satisfies AgentEvent);\n return true;\n }\n\n case \"error\": {\n const detail = this.classifyErrorMessage(event.message);\n this.emit(\"agent-event\", {\n type: \"error\",\n error: detail.message,\n detail,\n } satisfies AgentEvent);\n this.emit(\"agent-event\", { type: \"agent_end\" } satisfies AgentEvent);\n return true;\n }\n }\n }\n\n private handleThreadItem(item: ThreadItem, completed: boolean, phase: ThreadEvent[\"type\"]): void {\n switch (item.type) {\n case \"agent_message\":\n this.handleAgentMessage(item, completed);\n break;\n\n case \"command_execution\":\n this.handleCommandExecution(item, completed, phase);\n break;\n\n case \"mcp_tool_call\":\n this.handleMcpToolCall(item, completed, phase);\n break;\n\n case \"file_change\":\n this.handleFileChange(item, completed, phase);\n break;\n\n case \"web_search\":\n this.handleWebSearch(item, completed, phase);\n break;\n\n case \"error\":\n if (completed) {\n this.pendingToolResults.push({\n role: \"tool\",\n toolName: \"CodexError\",\n content: \"\",\n data: { message: item.message },\n isError: true,\n });\n }\n break;\n\n default:\n break;\n }\n }\n\n private handleAgentMessage(item: AgentMessageItem, completed: boolean): void {\n if (this.activeAssistantItemId !== item.id) {\n if (this.activeAssistantItemId) {\n this.emit(\"agent-event\", {\n type: \"message_end\",\n message: this.buildAssistantMessage(this.activeAssistantText),\n } satisfies AgentEvent);\n }\n this.activeAssistantItemId = item.id;\n this.activeAssistantText = \"\";\n this.emit(\"agent-event\", {\n type: \"message_start\",\n message: this.buildAssistantMessage(\"\"),\n } satisfies AgentEvent);\n }\n\n const nextText = item.text ?? \"\";\n const delta = nextText.startsWith(this.activeAssistantText)\n ? nextText.slice(this.activeAssistantText.length)\n : nextText;\n this.activeAssistantText = nextText;\n\n if (delta) {\n this.emit(\"agent-event\", {\n type: \"message_update\",\n message: this.buildAssistantMessage(nextText),\n _textDelta: delta,\n } satisfies AgentEvent);\n }\n\n if (completed) {\n this.emit(\"agent-event\", {\n type: \"message_end\",\n message: this.buildAssistantMessage(nextText),\n } satisfies AgentEvent);\n this.activeAssistantItemId = null;\n }\n }\n\n private handleCommandExecution(\n item: CommandExecutionItem,\n completed: boolean,\n phase: ThreadEvent[\"type\"],\n ): void {\n if (phase === \"item.started\") {\n this.emit(\"agent-event\", {\n type: \"tool_call\",\n name: \"Bash\",\n tool: { name: \"Bash\" },\n input: { command: item.command },\n } satisfies AgentEvent);\n }\n\n if (completed) {\n this.pendingToolResults.push({\n role: \"tool\",\n toolName: \"Bash\",\n content: \"\",\n data: {\n stdout: item.aggregated_output,\n stderr: \"\",\n exitCode: item.exit_code,\n status: item.status,\n command: item.command,\n },\n isError: item.status === \"failed\",\n });\n this.emit(\"agent-event\", {\n type: \"tool_execution_end\",\n toolName: \"Bash\",\n } satisfies AgentEvent);\n }\n }\n\n private handleMcpToolCall(\n item: McpToolCallItem,\n completed: boolean,\n phase: ThreadEvent[\"type\"],\n ): void {\n const toolName = `mcp__${item.server}__${item.tool}`;\n if (phase === \"item.started\") {\n this.emit(\"agent-event\", {\n type: \"tool_call\",\n name: toolName,\n tool: { name: toolName },\n input: this.toObject(item.arguments),\n } satisfies AgentEvent);\n }\n\n if (completed) {\n this.pendingToolResults.push({\n role: \"tool\",\n toolName,\n content: \"\",\n data: {\n status: item.status,\n content: item.result?.content,\n structuredContent: item.result?.structured_content,\n error: item.error?.message,\n },\n isError: item.status === \"failed\",\n });\n this.emit(\"agent-event\", {\n type: \"tool_execution_end\",\n toolName,\n } satisfies AgentEvent);\n }\n }\n\n private handleFileChange(\n item: FileChangeItem,\n completed: boolean,\n phase: ThreadEvent[\"type\"],\n ): void {\n if (phase === \"item.started\") {\n this.emit(\"agent-event\", {\n type: \"tool_call\",\n name: \"ApplyPatch\",\n tool: { name: \"ApplyPatch\" },\n input: { changes: item.changes },\n } satisfies AgentEvent);\n }\n\n if (completed) {\n this.pendingToolResults.push({\n role: \"tool\",\n toolName: \"ApplyPatch\",\n content: \"\",\n data: { status: item.status, changes: item.changes },\n isError: item.status === \"failed\",\n });\n this.emit(\"agent-event\", {\n type: \"tool_execution_end\",\n toolName: \"ApplyPatch\",\n } satisfies AgentEvent);\n }\n }\n\n private handleWebSearch(\n item: WebSearchItem,\n completed: boolean,\n phase: ThreadEvent[\"type\"],\n ): void {\n if (phase === \"item.started\") {\n this.emit(\"agent-event\", {\n type: \"tool_call\",\n name: \"WebSearch\",\n tool: { name: \"WebSearch\" },\n input: { query: item.query },\n } satisfies AgentEvent);\n }\n\n if (completed) {\n this.pendingToolResults.push({\n role: \"tool\",\n toolName: \"WebSearch\",\n content: \"\",\n data: { query: item.query, status: \"completed\" },\n });\n this.emit(\"agent-event\", {\n type: \"tool_execution_end\",\n toolName: \"WebSearch\",\n } satisfies AgentEvent);\n }\n }\n\n private flushToolResults(): void {\n if (this.pendingToolResults.length === 0) return;\n this.emit(\"agent-event\", {\n type: \"turn_end\",\n toolResults: [...this.pendingToolResults],\n } satisfies AgentEvent);\n this.pendingToolResults = [];\n }\n\n private buildAssistantMessage(text: string): AgentMessage {\n return {\n role: \"assistant\",\n content: [{ type: \"text\", text }],\n };\n }\n\n private toObject(value: unknown): Record<string, unknown> {\n if (typeof value === \"object\" && value !== null && !Array.isArray(value)) {\n return value as Record<string, unknown>;\n }\n return { arguments: value };\n }\n\n private classifyErrorMessage(rawMessage: string): AgentError {\n const friendly = friendlyCodexError(rawMessage);\n if (friendly) {\n return {\n message: friendly.message,\n category: friendly.category,\n retryable: false,\n hint: friendly.hint,\n };\n }\n const message = rawMessage;\n // Shared keyword buckets live in error-classifier.ts; codex layers its own\n // hint copy plus a provider-specific `config` (sandbox/approval) bucket.\n const generic = classifyGenericErrorMessage(message);\n if (generic) {\n const hint =\n generic.category === \"auth\"\n ? \"Check your OpenAI API key configuration in settings or environment.\"\n : generic.category === \"rate_limit\"\n ? \"Codex hit an OpenAI rate limit. Wait briefly and try again.\"\n : generic.category === \"model\"\n ? \"The selected Codex model is unavailable. Choose a different model.\"\n : \"A network error occurred while talking to Codex.\";\n return { message, category: generic.category, retryable: generic.retryable, hint };\n }\n const lower = message.toLowerCase();\n if (\n lower.includes(\"sandbox\") ||\n lower.includes(\"approval\") ||\n lower.includes(\"permission\") ||\n lower.includes(\"git repo\")\n ) {\n return {\n message,\n category: \"config\",\n retryable: false,\n hint: \"Check Codex sandbox, approval, and workspace configuration.\",\n };\n }\n return {\n message,\n category: \"unknown\",\n retryable: true,\n hint: \"An unexpected Codex error occurred. Try the prompt again.\",\n };\n }\n}\n\n/**\n * Whether `config` selects the managed (App Server) adapter: a `managedRuntime`\n * is set, or `authSource` is set and not `\"local\"`. Single source for the\n * standalone-vs-managed decision; `codexHarnessTarget` is the only place that\n * acts on it, and the standalone `CodexHarness` constructor refuses such a\n * config so managed auth never falls back to local credentials.\n */\nexport function isManagedCodexConfig(config: AgentConfig): boolean {\n const codex = config.harnessOptions?.codex;\n return Boolean(\n codex?.managedRuntime || (codex?.authSource !== undefined && codex.authSource !== \"local\"),\n );\n}\n\n/**\n * `HarnessTarget` wrapper for the codex harness. Registered into the plugin\n * registry by `registerBuiltinHarnesses()`. Picks the standalone SDK adapter\n * (`CodexHarness`) or the managed App Server adapter (`ManagedCodexHarness`) once\n * per config. The Codex SDK is lazy-imported inside `start()` — this target\n * export never pulls it at module top.\n */\nexport const codexHarnessTarget: HarnessTarget<AgentConfig> = {\n id: \"codex\",\n displayName: BUILTIN_HARNESS_CATALOG.codex?.name ?? \"OpenAI Codex\",\n apiVersion: 1,\n // Harnesses take AgentConfig; passthrough — full schema validation is out of scope.\n configSchema: z.custom<AgentConfig>(() => true),\n create: async (config, _ctx) =>\n isManagedCodexConfig(config) ? new ManagedCodexHarness(config) : new CodexHarness(config),\n listModels: async (registry, options) => {\n const config: AgentConfig = {\n cwd: process.cwd(),\n sessionId: \"model-list\",\n ...registryHarnessConfig(registry, options),\n };\n return (\n isManagedCodexConfig(config) ? new ManagedCodexHarness(config) : new CodexHarness(config)\n ).listModels();\n },\n};\n"]}
|