@skaile/workspaces 6.9.1 → 6.11.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 +34 -0
- package/dist/ai-sdk.js +8 -8
- package/dist/app-sdk/index.js +1 -1
- package/dist/{asset-feeds-PANNQPEE.js → asset-feeds-PO2WC75V.js} +23 -23
- package/dist/{asset-feeds-PANNQPEE.js.map → asset-feeds-PO2WC75V.js.map} +1 -1
- package/dist/asset-manager/catalog-deployer.js +8 -8
- package/dist/asset-manager/history.js +8 -8
- package/dist/asset-manager/index.js +15 -15
- package/dist/asset-manager/installer.js +10 -10
- package/dist/asset-manager/renderers.js +9 -9
- package/dist/asset-manager/src/harness-switch-state.d.ts +30 -0
- package/dist/asset-manager/src/harness-switch-state.d.ts.map +1 -0
- package/dist/asset-manager/src/index.d.ts +49 -12
- package/dist/asset-manager/src/index.d.ts.map +1 -1
- package/dist/asset-manager/src/mcp-config.d.ts +6 -0
- package/dist/asset-manager/src/mcp-config.d.ts.map +1 -1
- package/dist/bridge/codex-app-server.js +1 -2
- package/dist/bridge/harnesses/claude-sdk.js +15 -15
- package/dist/bridge/harnesses/codex.js +16 -1927
- package/dist/bridge/harnesses/codex.js.map +1 -1
- package/dist/bridge/harnesses/continue.js +11 -11
- package/dist/bridge/harnesses/echo.js +5 -5
- package/dist/bridge/harnesses/gemini.js +8 -8
- package/dist/bridge/harnesses/goose.js +11 -11
- package/dist/bridge/harnesses/omp.js +62 -14
- package/dist/bridge/harnesses/omp.js.map +1 -1
- package/dist/bridge/harnesses/opencode.js +11 -11
- package/dist/bridge/harnesses/qwen.js +8 -8
- package/dist/bridge/index.js +21 -20
- package/dist/bridge/src/harness-model-check.d.ts +5 -4
- package/dist/bridge/src/harness-model-check.d.ts.map +1 -1
- package/dist/bridge/src/harnesses/codex.d.ts +13 -0
- package/dist/bridge/src/harnesses/codex.d.ts.map +1 -1
- package/dist/bridge/src/harnesses/omp.d.ts +24 -1
- package/dist/bridge/src/harnesses/omp.d.ts.map +1 -1
- package/dist/bridge/src/index.d.ts +1 -0
- package/dist/bridge/src/index.d.ts.map +1 -1
- package/dist/bridge/src/types.d.ts +7 -0
- package/dist/bridge/src/types.d.ts.map +1 -1
- package/dist/{chunk-TMQFOJ6F.js → chunk-2PVYDAFN.js} +3 -3
- package/dist/{chunk-TMQFOJ6F.js.map → chunk-2PVYDAFN.js.map} +1 -1
- package/dist/{chunk-7NN3P6VF.js → chunk-342UX2MG.js} +10 -5
- package/dist/chunk-342UX2MG.js.map +1 -0
- package/dist/{chunk-7UCPGQCW.js → chunk-45XL75RO.js} +11 -11
- package/dist/chunk-45XL75RO.js.map +1 -0
- package/dist/{chunk-CPMLMNI5.js → chunk-4NJVF3DV.js} +4 -4
- package/dist/{chunk-CPMLMNI5.js.map → chunk-4NJVF3DV.js.map} +1 -1
- package/dist/{chunk-KNY356I3.js → chunk-5KSGZP3E.js} +11 -4
- package/dist/chunk-5KSGZP3E.js.map +1 -0
- package/dist/{chunk-J45JCYS4.js → chunk-5M3S6DLV.js} +4 -4
- package/dist/{chunk-J45JCYS4.js.map → chunk-5M3S6DLV.js.map} +1 -1
- package/dist/{chunk-RZRJTCP2.js → chunk-5XYZNMMC.js} +4 -4
- package/dist/{chunk-RZRJTCP2.js.map → chunk-5XYZNMMC.js.map} +1 -1
- package/dist/{chunk-S47KU4YB.js → chunk-6NNXBXYI.js} +3 -3
- package/dist/{chunk-S47KU4YB.js.map → chunk-6NNXBXYI.js.map} +1 -1
- package/dist/{chunk-GZL6RN4Z.js → chunk-7FXOOUOC.js} +170 -50
- package/dist/chunk-7FXOOUOC.js.map +1 -0
- package/dist/{chunk-V5KG6CCV.js → chunk-7HRZACI4.js} +7 -2
- package/dist/chunk-7HRZACI4.js.map +1 -0
- package/dist/{chunk-U3FI4DVT.js → chunk-7K73MCI6.js} +7 -5
- package/dist/chunk-7K73MCI6.js.map +1 -0
- package/dist/{chunk-NDBHEOIA.js → chunk-7LJUK5JK.js} +9 -9
- package/dist/{chunk-NDBHEOIA.js.map → chunk-7LJUK5JK.js.map} +1 -1
- package/dist/{chunk-Q5SSRVD5.js → chunk-7O6SCI7B.js} +16 -14
- package/dist/chunk-7O6SCI7B.js.map +1 -0
- package/dist/{chunk-QBUJTVMY.js → chunk-7VBD5XUM.js} +4 -4
- package/dist/{chunk-QBUJTVMY.js.map → chunk-7VBD5XUM.js.map} +1 -1
- package/dist/{chunk-YEOG7CWQ.js → chunk-7ZL23M3X.js} +3 -3
- package/dist/{chunk-YEOG7CWQ.js.map → chunk-7ZL23M3X.js.map} +1 -1
- package/dist/{chunk-FZO64PLQ.js → chunk-BNLXZXZN.js} +81 -8
- package/dist/chunk-BNLXZXZN.js.map +1 -0
- package/dist/{chunk-LYVLDGML.js → chunk-CG63XGVV.js} +3 -3
- package/dist/{chunk-LYVLDGML.js.map → chunk-CG63XGVV.js.map} +1 -1
- package/dist/{chunk-PLVM6OIV.js → chunk-CH6UVEM5.js} +19 -15
- package/dist/chunk-CH6UVEM5.js.map +1 -0
- package/dist/{chunk-WEPTGUR4.js → chunk-CI4I34F4.js} +27 -56
- package/dist/chunk-CI4I34F4.js.map +1 -0
- package/dist/{chunk-4ROXSQEG.js → chunk-CJO3XKO7.js} +4 -4
- package/dist/{chunk-4ROXSQEG.js.map → chunk-CJO3XKO7.js.map} +1 -1
- package/dist/{chunk-RP3ML3QD.js → chunk-CLMIZ4N6.js} +3 -3
- package/dist/{chunk-RP3ML3QD.js.map → chunk-CLMIZ4N6.js.map} +1 -1
- package/dist/{chunk-OSABUEWA.js → chunk-CVUMZTNO.js} +4 -4
- package/dist/{chunk-OSABUEWA.js.map → chunk-CVUMZTNO.js.map} +1 -1
- package/dist/{chunk-X5SGUBUV.js → chunk-DKRD6CZL.js} +3 -3
- package/dist/{chunk-X5SGUBUV.js.map → chunk-DKRD6CZL.js.map} +1 -1
- package/dist/{chunk-5KWQMCH7.js → chunk-DRUAQ7IY.js} +6 -6
- package/dist/{chunk-5KWQMCH7.js.map → chunk-DRUAQ7IY.js.map} +1 -1
- package/dist/{chunk-GTAHU4N4.js → chunk-EB2LKPI6.js} +4 -4
- package/dist/{chunk-GTAHU4N4.js.map → chunk-EB2LKPI6.js.map} +1 -1
- package/dist/{chunk-3AIEJSQR.js → chunk-ESUF2ZYT.js} +3 -3
- package/dist/{chunk-3AIEJSQR.js.map → chunk-ESUF2ZYT.js.map} +1 -1
- package/dist/{chunk-ZUROGXJM.js → chunk-FECB7RI7.js} +14 -24
- package/dist/chunk-FECB7RI7.js.map +1 -0
- package/dist/{chunk-PBEDRYHP.js → chunk-FO2GU5L7.js} +230 -49
- package/dist/chunk-FO2GU5L7.js.map +1 -0
- package/dist/{chunk-SME3PK4L.js → chunk-FVOQPTK2.js} +8 -8
- package/dist/{chunk-SME3PK4L.js.map → chunk-FVOQPTK2.js.map} +1 -1
- package/dist/{chunk-MPO5CQUZ.js → chunk-GODUKPGD.js} +3 -3
- package/dist/{chunk-MPO5CQUZ.js.map → chunk-GODUKPGD.js.map} +1 -1
- package/dist/{chunk-FZTHL6SK.js → chunk-GQQIMKEP.js} +27 -33
- package/dist/chunk-GQQIMKEP.js.map +1 -0
- package/dist/{chunk-BRPEW3UL.js → chunk-GYRIO6RA.js} +3 -3
- package/dist/{chunk-BRPEW3UL.js.map → chunk-GYRIO6RA.js.map} +1 -1
- package/dist/{chunk-E675QKFG.js → chunk-HPQ2WDYC.js} +5 -5
- package/dist/{chunk-E675QKFG.js.map → chunk-HPQ2WDYC.js.map} +1 -1
- package/dist/{chunk-VEIWFS7Z.js → chunk-IIELRGIZ.js} +346 -89
- package/dist/chunk-IIELRGIZ.js.map +1 -0
- package/dist/{chunk-TUOHA6BM.js → chunk-IOXFT5D7.js} +3 -3
- package/dist/{chunk-TUOHA6BM.js.map → chunk-IOXFT5D7.js.map} +1 -1
- package/dist/{chunk-6PVRP3LW.js → chunk-IPCRQWNC.js} +17 -6
- package/dist/chunk-IPCRQWNC.js.map +1 -0
- package/dist/{chunk-PTJTOPE5.js → chunk-KOI7QFDH.js} +3 -3
- package/dist/{chunk-PTJTOPE5.js.map → chunk-KOI7QFDH.js.map} +1 -1
- package/dist/{chunk-EMSU6L7K.js → chunk-L74W5TVC.js} +7 -7
- package/dist/{chunk-EMSU6L7K.js.map → chunk-L74W5TVC.js.map} +1 -1
- package/dist/{chunk-WS3BOCAT.js → chunk-LCXQ4LVP.js} +16 -3
- package/dist/chunk-LCXQ4LVP.js.map +1 -0
- package/dist/{chunk-7QYBKUAS.js → chunk-LKBRBVVS.js} +3 -3
- package/dist/{chunk-7QYBKUAS.js.map → chunk-LKBRBVVS.js.map} +1 -1
- package/dist/{chunk-USSP43U3.js → chunk-LQWOU7S2.js} +3 -3
- package/dist/{chunk-USSP43U3.js.map → chunk-LQWOU7S2.js.map} +1 -1
- package/dist/chunk-LXD37LHF.js +688 -0
- package/dist/chunk-LXD37LHF.js.map +1 -0
- package/dist/{chunk-4KPQ6ILH.js → chunk-MEU2HHGV.js} +18 -9
- package/dist/chunk-MEU2HHGV.js.map +1 -0
- package/dist/{chunk-KVTV4LT2.js → chunk-MRTOKIEJ.js} +4 -4
- package/dist/{chunk-KVTV4LT2.js.map → chunk-MRTOKIEJ.js.map} +1 -1
- package/dist/{chunk-QC5BYUED.js → chunk-MS2IXLTC.js} +4 -4
- package/dist/{chunk-QC5BYUED.js.map → chunk-MS2IXLTC.js.map} +1 -1
- package/dist/{chunk-5J6N6LHL.js → chunk-PZS55HOX.js} +3 -3
- package/dist/{chunk-5J6N6LHL.js.map → chunk-PZS55HOX.js.map} +1 -1
- package/dist/{chunk-XDVR7QIT.js → chunk-QC4Q7PMQ.js} +6 -3
- package/dist/chunk-QC4Q7PMQ.js.map +1 -0
- package/dist/{chunk-IISEBVMA.js → chunk-RRKJHADP.js} +5 -5
- package/dist/{chunk-IISEBVMA.js.map → chunk-RRKJHADP.js.map} +1 -1
- package/dist/{chunk-MDCI4RSG.js → chunk-RZL4TOK3.js} +20 -6
- package/dist/chunk-RZL4TOK3.js.map +1 -0
- package/dist/{chunk-2UKNI2HJ.js → chunk-RZQCBFIU.js} +2 -2
- package/dist/{chunk-2UKNI2HJ.js.map → chunk-RZQCBFIU.js.map} +1 -1
- package/dist/{chunk-7TF5MNFK.js → chunk-S6NS3I3P.js} +2 -2
- package/dist/{chunk-7TF5MNFK.js.map → chunk-S6NS3I3P.js.map} +1 -1
- package/dist/{chunk-LMADWO4Q.js → chunk-SBAUZ7XH.js} +4 -4
- package/dist/{chunk-LMADWO4Q.js.map → chunk-SBAUZ7XH.js.map} +1 -1
- package/dist/{chunk-XB4XHGIE.js → chunk-SZ3XCZHC.js} +4 -4
- package/dist/{chunk-XB4XHGIE.js.map → chunk-SZ3XCZHC.js.map} +1 -1
- package/dist/{chunk-AQTAULXT.js → chunk-UHTCOYFJ.js} +111 -47
- package/dist/chunk-UHTCOYFJ.js.map +1 -0
- package/dist/{chunk-HQAPUPBE.js → chunk-V2VDTQ7A.js} +3 -3
- package/dist/{chunk-HQAPUPBE.js.map → chunk-V2VDTQ7A.js.map} +1 -1
- package/dist/{chunk-GNUA7XT2.js → chunk-VS6XC5JE.js} +3 -3
- package/dist/{chunk-GNUA7XT2.js.map → chunk-VS6XC5JE.js.map} +1 -1
- package/dist/chunk-WCHGUS7X.js +2443 -0
- package/dist/chunk-WCHGUS7X.js.map +1 -0
- package/dist/{chunk-5J6JWGY4.js → chunk-WDG5IVEA.js} +3 -3
- package/dist/{chunk-5J6JWGY4.js.map → chunk-WDG5IVEA.js.map} +1 -1
- package/dist/{chunk-QIV7H3GJ.js → chunk-WPTNYDDS.js} +5 -5
- package/dist/{chunk-QIV7H3GJ.js.map → chunk-WPTNYDDS.js.map} +1 -1
- package/dist/{chunk-BDAXHJC5.js → chunk-YPX7LQSW.js} +7 -7
- package/dist/{chunk-BDAXHJC5.js.map → chunk-YPX7LQSW.js.map} +1 -1
- package/dist/{chunk-UWD7YBDR.js → chunk-ZLDAPZIX.js} +4 -4
- package/dist/{chunk-UWD7YBDR.js.map → chunk-ZLDAPZIX.js.map} +1 -1
- package/dist/{chunk-YPTDPN2B.js → chunk-ZRKU7BRI.js} +3 -3
- package/dist/{chunk-YPTDPN2B.js.map → chunk-ZRKU7BRI.js.map} +1 -1
- package/dist/{claude-code-ILZ46SLO.js → claude-code-TDMSETH6.js} +5 -5
- package/dist/{claude-code-ILZ46SLO.js.map → claude-code-TDMSETH6.js.map} +1 -1
- package/dist/cli/index.js +327 -201
- 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/connector.d.ts.map +1 -1
- package/dist/cli/src/commands/harness-preflight.d.ts +3 -1
- package/dist/cli/src/commands/harness-preflight.d.ts.map +1 -1
- package/dist/cli/src/commands/harness.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 +3 -3
- package/dist/cli/src/commands/library-index.d.ts.map +1 -1
- package/dist/cli/src/commands/migrate-files.d.ts +8 -0
- package/dist/cli/src/commands/migrate-files.d.ts.map +1 -1
- package/dist/cli/src/commands/migrate-harness.d.ts.map +1 -1
- package/dist/cli/src/commands/migrate-providers.d.ts.map +1 -1
- package/dist/cli/src/commands/migrate.d.ts.map +1 -1
- package/dist/cli/src/commands/outdated.d.ts.map +1 -1
- package/dist/cli/src/commands/project.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 +7 -5
- package/dist/cli/src/commands/serve-preflight.d.ts.map +1 -1
- package/dist/cli/src/commands/serve.d.ts.map +1 -1
- package/dist/cli/src/commands/source.d.ts.map +1 -1
- package/dist/cli/src/commands/validate.d.ts.map +1 -1
- package/dist/cli/src/config-checks.d.ts +50 -12
- package/dist/cli/src/config-checks.d.ts.map +1 -1
- package/dist/cli/src/ensure-sources.d.ts.map +1 -1
- package/dist/cli/src/harness-error.d.ts +7 -0
- package/dist/cli/src/harness-error.d.ts.map +1 -1
- package/dist/cli/src/helpers.d.ts.map +1 -1
- package/dist/client/index.js +1 -1
- package/dist/client/src/client.d.ts +3 -0
- package/dist/client/src/client.d.ts.map +1 -1
- package/dist/connectors/config.js +5 -5
- package/dist/connectors/index.js +25 -24
- package/dist/connectors/src/index.d.ts +1 -1
- package/dist/connectors/src/index.d.ts.map +1 -1
- package/dist/connectors/src/managed-gitconfig.d.ts +12 -0
- package/dist/connectors/src/managed-gitconfig.d.ts.map +1 -1
- package/dist/connectors-IUJRBTCW.js +52 -0
- package/dist/{connectors-KTRUUKWG.js.map → connectors-IUJRBTCW.js.map} +1 -1
- package/dist/connectors-shared/index.js +2 -2
- package/dist/core/index.js +7 -7
- package/dist/core/logging.js +1 -1
- package/dist/core/manifest.js +2 -2
- package/dist/core/models.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/index.d.ts +2 -2
- package/dist/core/src/index.d.ts.map +1 -1
- package/dist/core/src/lock.d.ts +7 -1
- package/dist/core/src/lock.d.ts.map +1 -1
- package/dist/core/src/models.d.ts.map +1 -1
- package/dist/core/src/repo-manager.d.ts +28 -0
- package/dist/core/src/repo-manager.d.ts.map +1 -1
- package/dist/core/src/run-state-ignore.d.ts +5 -3
- package/dist/core/src/run-state-ignore.d.ts.map +1 -1
- package/dist/core/src/workspace-config.d.ts.map +1 -1
- package/dist/core/workspace-config.js +4 -4
- package/dist/deploy/index.js +7 -7
- package/dist/discovery/index.js +5 -5
- package/dist/{ensure-sources-5QWKUIUD.js → ensure-sources-Q2TTZVLX.js} +35 -33
- package/dist/ensure-sources-Q2TTZVLX.js.map +1 -0
- package/dist/factory-assets/connectors/box.js +25 -24
- package/dist/factory-assets/connectors/deploy.js +25 -24
- package/dist/factory-assets/connectors/devserver.js +25 -24
- package/dist/factory-assets/connectors/flow/adapter.js +25 -24
- package/dist/factory-assets/connectors/flow/engine.js +8 -8
- package/dist/factory-assets/connectors/flow/run-flow.js +27 -26
- package/dist/factory-assets/connectors/flow.js +25 -24
- package/dist/factory-assets/connectors/git/exec.d.ts +7 -0
- package/dist/factory-assets/connectors/git/exec.d.ts.map +1 -1
- package/dist/factory-assets/connectors/git/repo.d.ts.map +1 -1
- package/dist/factory-assets/connectors/git.js +25 -24
- package/dist/factory-assets/connectors/gmail/adapter.d.ts.map +1 -1
- package/dist/factory-assets/connectors/gmail.js +25 -24
- package/dist/factory-assets/connectors/googledrive.js +25 -24
- package/dist/factory-assets/connectors/local.js +25 -24
- package/dist/factory-assets/connectors/mattermost.js +25 -24
- package/dist/factory-assets/connectors/memory.js +25 -24
- package/dist/factory-assets/connectors/minio/adapter.d.ts.map +1 -1
- package/dist/factory-assets/connectors/minio.js +25 -24
- package/dist/factory-assets/connectors/postgres/adapter.d.ts.map +1 -1
- package/dist/factory-assets/connectors/postgres.js +25 -24
- package/dist/factory-assets/connectors/s3/driver.d.ts.map +1 -1
- package/dist/factory-assets/connectors/s3.js +25 -24
- package/dist/factory-assets/connectors/sharepoint.js +25 -24
- package/dist/factory-assets/connectors/sqlite/adapter.d.ts.map +1 -1
- package/dist/factory-assets/connectors/sqlite.js +25 -24
- package/dist/factory-assets/connectors/static-server.js +25 -24
- package/dist/factory-assets/connectors/tunnel.js +25 -24
- package/dist/factory-assets/connectors/webdav.js +25 -24
- package/dist/factory-assets/connectors/xstate-store.js +25 -24
- package/dist/factory-assets/connectors/xstate.js +25 -24
- package/dist/{flows-UCP6ZUYS.js → flows-J64L5MGJ.js} +12 -12
- package/dist/{flows-UCP6ZUYS.js.map → flows-J64L5MGJ.js.map} +1 -1
- package/dist/{helpers-INS4B7OQ.js → helpers-S6AQGXRH.js} +32 -30
- package/dist/{helpers-INS4B7OQ.js.map → helpers-S6AQGXRH.js.map} +1 -1
- package/dist/library/index.js +11 -11
- package/dist/library/install.js +4 -4
- package/dist/library/src/index.d.ts +2 -2
- package/dist/library/src/index.d.ts.map +1 -1
- package/dist/library/src/library.d.ts +6 -2
- package/dist/library/src/library.d.ts.map +1 -1
- package/dist/library/src/local/db.d.ts.map +1 -1
- package/dist/library/src/local/library.d.ts +10 -3
- package/dist/library/src/local/library.d.ts.map +1 -1
- package/dist/library/src/local/local-catalog-source.d.ts +0 -9
- package/dist/library/src/local/local-catalog-source.d.ts.map +1 -1
- package/dist/library/src/local/schema.d.ts +27 -20
- package/dist/library/src/local/schema.d.ts.map +1 -1
- package/dist/library/src/manifest-writer.d.ts +13 -0
- package/dist/library/src/manifest-writer.d.ts.map +1 -1
- package/dist/library/src/remote/index.d.ts +1 -1
- package/dist/library/src/remote/index.d.ts.map +1 -1
- package/dist/library/src/remote/remote-catalog-source.d.ts +6 -0
- package/dist/library/src/remote/remote-catalog-source.d.ts.map +1 -1
- package/dist/library/src/sync/git-driver.d.ts.map +1 -1
- package/dist/{library-publish-AZTYRASL.js → library-publish-7U4TJNQX.js} +54 -55
- package/dist/library-publish-7U4TJNQX.js.map +1 -0
- package/dist/model-endpoint/index.js +10 -10
- package/dist/open-library-K6O6OVW5.js +61 -0
- package/dist/{open-library-3HMXYGUF.js.map → open-library-K6O6OVW5.js.map} +1 -1
- package/dist/open-registry-4HNCWOCN.js +32 -0
- package/dist/{open-registry-BHBHQMBA.js.map → open-registry-4HNCWOCN.js.map} +1 -1
- package/dist/paths-PXBWY532.js +22 -0
- package/dist/{paths-77PXOXZY.js.map → paths-PXBWY532.js.map} +1 -1
- package/dist/{plugin-store-XQP2CRYH.js → plugin-store-ZC3EGZ3D.js} +10 -10
- package/dist/{plugin-store-XQP2CRYH.js.map → plugin-store-ZC3EGZ3D.js.map} +1 -1
- package/dist/project-ZWIZZIUT.js +88 -0
- package/dist/{project-HVNPK2ZF.js.map → project-ZWIZZIUT.js.map} +1 -1
- package/dist/resolver/index.js +8 -8
- package/dist/runner/index.js +40 -40
- package/dist/runner/src/serve.d.ts.map +1 -1
- package/dist/runner/src/turn-ids.d.ts +70 -0
- package/dist/runner/src/turn-ids.d.ts.map +1 -0
- package/dist/runner/src/turn-scheduler.d.ts +7 -0
- package/dist/runner/src/turn-scheduler.d.ts.map +1 -1
- package/dist/sdk/asset-manager.js +15 -15
- package/dist/sdk/bridge.js +21 -20
- package/dist/sdk/client.js +1 -1
- package/dist/sdk/core.js +7 -7
- package/dist/sdk/flow.js +8 -8
- package/dist/sdk/index.js +41 -41
- package/dist/sdk/resolver.js +8 -8
- package/dist/sdk/runner.js +40 -40
- package/dist/sdk/session.js +2 -2
- package/dist/sdk/transport/ws/server.js +8 -8
- package/dist/sdk/transport/ws.js +8 -8
- package/dist/sdk/transport.js +8 -8
- package/dist/sdk/types.js +1 -1
- package/dist/serve-preflight-E3IEZTTF.js +59 -0
- package/dist/{serve-preflight-NHZOKHIC.js.map → serve-preflight-E3IEZTTF.js.map} +1 -1
- package/dist/session/index.js +2 -2
- package/dist/session/src/dispatcher.d.ts +4 -1
- package/dist/session/src/dispatcher.d.ts.map +1 -1
- package/dist/{setup-EX7Z7XRN.js → setup-V4EXOMVQ.js} +33 -31
- package/dist/setup-V4EXOMVQ.js.map +1 -0
- package/dist/{skills-DE2BDQ6G.js → skills-5D4KDVPJ.js} +13 -13
- package/dist/{skills-DE2BDQ6G.js.map → skills-5D4KDVPJ.js.map} +1 -1
- package/dist/source-O7XXDX55.js +89 -0
- package/dist/{source-URRPRGMZ.js.map → source-O7XXDX55.js.map} +1 -1
- package/dist/{source-manifest-publish-ZWRYRJ2U.js → source-manifest-publish-GUU4LX2S.js} +54 -53
- package/dist/source-manifest-publish-GUU4LX2S.js.map +1 -0
- package/dist/transport/index.js +8 -8
- package/dist/transport/src/ws/server.d.ts.map +1 -1
- package/dist/transport/ws/server.js +8 -8
- package/dist/transport/ws.js +8 -8
- package/dist/tui/index.js +40 -40
- package/dist/types/index.js +1 -1
- package/dist/types/manifests.js +1 -1
- package/dist/types/src/capabilities.d.ts +2 -1
- package/dist/types/src/capabilities.d.ts.map +1 -1
- package/dist/types/src/events.d.ts +2 -1
- package/dist/types/src/events.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +2 -0
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/manifests/agent.d.ts +2 -0
- package/dist/types/src/manifests/agent.d.ts.map +1 -1
- package/dist/types/src/protocol.d.ts +2 -0
- package/dist/types/src/protocol.d.ts.map +1 -1
- package/dist/types/src/turn-ids.d.ts +62 -0
- package/dist/types/src/turn-ids.d.ts.map +1 -0
- package/dist/types/src/version.d.ts +12 -1
- package/dist/types/src/version.d.ts.map +1 -1
- package/dist/workspace-plugin/adapters/mcp.js +32 -31
- package/dist/workspace-plugin/adapters/omp.js +14 -14
- package/dist/workspace-plugin/index.js +2 -2
- package/package.json +1 -1
- package/dist/chunk-4KPQ6ILH.js.map +0 -1
- package/dist/chunk-6PVRP3LW.js.map +0 -1
- package/dist/chunk-7NN3P6VF.js.map +0 -1
- package/dist/chunk-7UCPGQCW.js.map +0 -1
- package/dist/chunk-AQTAULXT.js.map +0 -1
- package/dist/chunk-BLBXOG5Q.js +0 -299
- package/dist/chunk-BLBXOG5Q.js.map +0 -1
- package/dist/chunk-C324IAXI.js +0 -160
- package/dist/chunk-C324IAXI.js.map +0 -1
- package/dist/chunk-DJSGQW2Q.js +0 -334
- package/dist/chunk-DJSGQW2Q.js.map +0 -1
- package/dist/chunk-FZO64PLQ.js.map +0 -1
- package/dist/chunk-FZTHL6SK.js.map +0 -1
- package/dist/chunk-GYPPVANR.js +0 -357
- package/dist/chunk-GYPPVANR.js.map +0 -1
- package/dist/chunk-GZL6RN4Z.js.map +0 -1
- package/dist/chunk-KNY356I3.js.map +0 -1
- package/dist/chunk-LOO5CB5M.js +0 -12
- package/dist/chunk-LOO5CB5M.js.map +0 -1
- package/dist/chunk-MDCI4RSG.js.map +0 -1
- package/dist/chunk-PBEDRYHP.js.map +0 -1
- package/dist/chunk-PLVM6OIV.js.map +0 -1
- package/dist/chunk-Q5SSRVD5.js.map +0 -1
- package/dist/chunk-U3FI4DVT.js.map +0 -1
- package/dist/chunk-V5KG6CCV.js.map +0 -1
- package/dist/chunk-VEIWFS7Z.js.map +0 -1
- package/dist/chunk-WEPTGUR4.js.map +0 -1
- package/dist/chunk-WS3BOCAT.js.map +0 -1
- package/dist/chunk-XDVR7QIT.js.map +0 -1
- package/dist/chunk-ZUROGXJM.js.map +0 -1
- package/dist/connectors-KTRUUKWG.js +0 -51
- package/dist/ensure-sources-5QWKUIUD.js.map +0 -1
- package/dist/library-publish-AZTYRASL.js.map +0 -1
- package/dist/open-library-3HMXYGUF.js +0 -59
- package/dist/open-registry-BHBHQMBA.js +0 -32
- package/dist/paths-77PXOXZY.js +0 -22
- package/dist/project-HVNPK2ZF.js +0 -89
- package/dist/serve-preflight-NHZOKHIC.js +0 -59
- package/dist/setup-EX7Z7XRN.js.map +0 -1
- package/dist/source-URRPRGMZ.js +0 -88
- package/dist/source-manifest-publish-ZWRYRJ2U.js.map +0 -1
package/dist/chunk-BLBXOG5Q.js
DELETED
|
@@ -1,299 +0,0 @@
|
|
|
1
|
-
import { listHarnesses } from './chunk-7TF5MNFK.js';
|
|
2
|
-
import { softDepName } from './chunk-VEIWFS7Z.js';
|
|
3
|
-
import { readLock, LockParseError } from './chunk-4KPQ6ILH.js';
|
|
4
|
-
import { SKAILE_YAML_DEFAULT, resolveSkWorkspaceConfig } from './chunk-FZO64PLQ.js';
|
|
5
|
-
import { SUPPORTED_HARNESSES } from './chunk-VTETQCR6.js';
|
|
6
|
-
import { existsSync, readdirSync, readFileSync } from 'fs';
|
|
7
|
-
import { homedir } from 'os';
|
|
8
|
-
import path from 'path';
|
|
9
|
-
import pc from 'picocolors';
|
|
10
|
-
import { Option } from 'commander';
|
|
11
|
-
|
|
12
|
-
function unknownHarnessMessage(harness) {
|
|
13
|
-
const known = listHarnesses().map((d) => d.id);
|
|
14
|
-
if (known.includes(harness)) return void 0;
|
|
15
|
-
return `Unknown agent harness: "${harness}". Available: ${known.join(", ")}. ${DEPLOY_COMMANDS} take: ${SUPPORTED_HARNESSES.join(", ")}.`;
|
|
16
|
-
}
|
|
17
|
-
var DEPLOY_COMMANDS = "harness set, init --harness and add --harness";
|
|
18
|
-
function unknownHarnessTargetMessage(harness, extra = []) {
|
|
19
|
-
const targets = [...SUPPORTED_HARNESSES, ...extra];
|
|
20
|
-
const registered = listHarnesses().map((d) => d.id);
|
|
21
|
-
return `Unknown agent harness: "${harness}". Available: ${targets.join(", ")}. run, repl and config set harness take: ${registered.join(", ")}.`;
|
|
22
|
-
}
|
|
23
|
-
var warnedDriverFlag = false;
|
|
24
|
-
function warnDriverFlagDeprecated() {
|
|
25
|
-
if (warnedDriverFlag) return;
|
|
26
|
-
warnedDriverFlag = true;
|
|
27
|
-
console.error("--driver is deprecated; use --harness");
|
|
28
|
-
}
|
|
29
|
-
function driverAliasOption() {
|
|
30
|
-
return new Option("--driver <name>", "Deprecated alias of --harness").hideHelp();
|
|
31
|
-
}
|
|
32
|
-
function foldDriverFlag(opts, fallback) {
|
|
33
|
-
const { driver, ...rest } = opts;
|
|
34
|
-
if (driver !== void 0) warnDriverFlagDeprecated();
|
|
35
|
-
return { ...rest, harness: rest.harness ?? driver ?? fallback };
|
|
36
|
-
}
|
|
37
|
-
function friendlyHarnessError(err) {
|
|
38
|
-
const e = err;
|
|
39
|
-
if (!e) return null;
|
|
40
|
-
const isSpawnEnoent = e.code === "ENOENT" && (e.syscall?.startsWith("spawn") === true || /^spawn .*ENOENT/.test(e.message ?? ""));
|
|
41
|
-
const isConfig = e.category === "config" || e.detail?.category === "config";
|
|
42
|
-
if (!isSpawnEnoent && !isConfig) return null;
|
|
43
|
-
const hint = e.hint ?? e.detail?.hint;
|
|
44
|
-
const base = hint ?? "The configured agent binary is not installed or not on your PATH.";
|
|
45
|
-
return `${base}
|
|
46
|
-
Try a different harness with \`--harness claude-sdk\`.`;
|
|
47
|
-
}
|
|
48
|
-
function harnessErrorNotes(err) {
|
|
49
|
-
const e = err;
|
|
50
|
-
const notes = [];
|
|
51
|
-
const category = e?.category ?? e?.detail?.category;
|
|
52
|
-
const hint = e?.hint ?? e?.detail?.hint;
|
|
53
|
-
if (hint && category !== "config") notes.push(hint);
|
|
54
|
-
else if (category === "auth") notes.push("Check your API key or login.");
|
|
55
|
-
if (e?.logSessionId) {
|
|
56
|
-
notes.push(`Full records: .skaile/logs.db (skaile session logs ${e.logSessionId}).`);
|
|
57
|
-
}
|
|
58
|
-
return notes;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
// cli/src/helpers.ts
|
|
62
|
-
var S = {
|
|
63
|
-
brand: (s) => pc.cyan(pc.bold(s)),
|
|
64
|
-
cmd: (s) => pc.cyan(s),
|
|
65
|
-
heading: (s) => pc.bold(s),
|
|
66
|
-
bold: (s) => pc.bold(s),
|
|
67
|
-
dim: (s) => pc.dim(s),
|
|
68
|
-
ok: (s) => pc.green(s),
|
|
69
|
-
warn: (s) => pc.yellow(s),
|
|
70
|
-
err: (s) => pc.red(s),
|
|
71
|
-
label: (s) => pc.dim(s),
|
|
72
|
-
rule: (w = 40) => pc.dim("\u2500".repeat(w))
|
|
73
|
-
};
|
|
74
|
-
var KIND_COLORS = {
|
|
75
|
-
skill: pc.blue,
|
|
76
|
-
agent: pc.magenta,
|
|
77
|
-
prompt: pc.yellow,
|
|
78
|
-
flow: pc.green,
|
|
79
|
-
preset: pc.cyan,
|
|
80
|
-
contract: pc.red,
|
|
81
|
-
connector: pc.green,
|
|
82
|
-
knowledge: pc.cyan,
|
|
83
|
-
persona: pc.cyan,
|
|
84
|
-
ruleset: pc.cyan,
|
|
85
|
-
"mcp-server": pc.magenta
|
|
86
|
-
};
|
|
87
|
-
function fitWidth(s, width) {
|
|
88
|
-
if (width <= 0) return "";
|
|
89
|
-
if (s.length > width) return width === 1 ? "\u2026" : `${s.slice(0, width - 1)}\u2026`;
|
|
90
|
-
return s.padEnd(width);
|
|
91
|
-
}
|
|
92
|
-
function kindColor(kind) {
|
|
93
|
-
const colorFn = KIND_COLORS[kind] ?? pc.dim;
|
|
94
|
-
return colorFn(kind);
|
|
95
|
-
}
|
|
96
|
-
var KIND_COL_WIDTH = 10;
|
|
97
|
-
var TARGET_DEFAULT_HINT = "default: the project's configured harness, else claude-code";
|
|
98
|
-
function kindColorPad(kind, width = KIND_COL_WIDTH) {
|
|
99
|
-
const colorFn = KIND_COLORS[kind] ?? pc.dim;
|
|
100
|
-
return colorFn(fitWidth(kind, width));
|
|
101
|
-
}
|
|
102
|
-
function colorRef(ref) {
|
|
103
|
-
const colonIdx = ref.indexOf(":");
|
|
104
|
-
if (colonIdx === -1) return ref;
|
|
105
|
-
const kind = ref.slice(0, colonIdx);
|
|
106
|
-
const rest = ref.slice(colonIdx);
|
|
107
|
-
return `${kindColor(kind)}${rest}`;
|
|
108
|
-
}
|
|
109
|
-
function logOk(msg) {
|
|
110
|
-
console.log(` ${pc.green("\u2713")} ${msg}`);
|
|
111
|
-
}
|
|
112
|
-
function logErr(msg) {
|
|
113
|
-
console.error(` ${pc.red("\u2717")} ${msg}`);
|
|
114
|
-
}
|
|
115
|
-
function logWarn(msg) {
|
|
116
|
-
console.log(` ${pc.yellow("!")} ${msg}`);
|
|
117
|
-
}
|
|
118
|
-
function logWarnErr(msg) {
|
|
119
|
-
console.error(` ${pc.yellow("!")} ${msg}`);
|
|
120
|
-
}
|
|
121
|
-
function warnPlaceholderBodies(bodies, descriptions) {
|
|
122
|
-
const refs = [.../* @__PURE__ */ new Set([...bodies ?? [], ...descriptions ?? []])];
|
|
123
|
-
for (const ref of refs) {
|
|
124
|
-
const parts = [
|
|
125
|
-
...descriptions?.includes(ref) ? ["description"] : [],
|
|
126
|
-
...bodies?.includes(ref) ? ["body"] : []
|
|
127
|
-
];
|
|
128
|
-
const both = parts.length > 1;
|
|
129
|
-
logWarn(
|
|
130
|
-
`${ref} ${parts.join(" and ")} ${both ? "are" : "is"} still the scaffold placeholder; write ${both ? "them" : "it"} (\`skaile validate\` fails ${both ? "them" : "it"})`
|
|
131
|
-
);
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
function logInfo(msg) {
|
|
135
|
-
console.log(` ${pc.dim("\xB7")} ${msg}`);
|
|
136
|
-
}
|
|
137
|
-
var activeCommandPath;
|
|
138
|
-
function setActiveCommand(cmd) {
|
|
139
|
-
const names = [];
|
|
140
|
-
for (let c = cmd; c && c.parent; c = c.parent) {
|
|
141
|
-
names.unshift(c.name());
|
|
142
|
-
}
|
|
143
|
-
activeCommandPath = names.length > 0 ? names.join(" ") : void 0;
|
|
144
|
-
}
|
|
145
|
-
function nearestParentProject(dir) {
|
|
146
|
-
for (let up = path.dirname(dir); up !== dir; dir = up, up = path.dirname(dir)) {
|
|
147
|
-
if (existsSync(path.join(up, SKAILE_YAML_DEFAULT))) return up;
|
|
148
|
-
}
|
|
149
|
-
return void 0;
|
|
150
|
-
}
|
|
151
|
-
function logNoProject(projectDir) {
|
|
152
|
-
const dir = path.resolve(projectDir);
|
|
153
|
-
logErr(`No ${S.cmd("skaile.yaml")} found. Run ${S.cmd("skaile init")} to create one.`);
|
|
154
|
-
const parent = nearestParentProject(dir);
|
|
155
|
-
if (parent) {
|
|
156
|
-
const command = activeCommandPath ?? process.argv.slice(2).find((a) => !a.startsWith("-")) ?? "<command>";
|
|
157
|
-
logErr(
|
|
158
|
-
`${S.cmd(parent)} holds a ${S.cmd("skaile.yaml")}: run from there or put the option after the command name: ${S.cmd(`skaile ${command} --project-dir ${parent}`)}.`
|
|
159
|
-
);
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
function requireProjectConfig(projectDir, opts = {}) {
|
|
163
|
-
const dir = path.resolve(projectDir);
|
|
164
|
-
if (!existsSync(path.join(dir, SKAILE_YAML_DEFAULT))) {
|
|
165
|
-
if (opts.allowMissing) return;
|
|
166
|
-
logNoProject(dir);
|
|
167
|
-
process.exit(1);
|
|
168
|
-
}
|
|
169
|
-
try {
|
|
170
|
-
resolveSkWorkspaceConfig(dir);
|
|
171
|
-
} catch (err) {
|
|
172
|
-
logErr(err instanceof Error ? err.message : String(err));
|
|
173
|
-
process.exit(1);
|
|
174
|
-
}
|
|
175
|
-
try {
|
|
176
|
-
readLock(path.join(dir, "skaile.lock.yaml"));
|
|
177
|
-
} catch (err) {
|
|
178
|
-
if (err instanceof LockParseError) {
|
|
179
|
-
logErr(err.message);
|
|
180
|
-
process.exit(1);
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
function deferredWarnings() {
|
|
185
|
-
const held = [];
|
|
186
|
-
let live = false;
|
|
187
|
-
return {
|
|
188
|
-
push: (msg) => {
|
|
189
|
-
if (live) logWarn(msg);
|
|
190
|
-
else held.push(msg);
|
|
191
|
-
},
|
|
192
|
-
flush: () => {
|
|
193
|
-
for (const msg of held.splice(0)) logWarn(msg);
|
|
194
|
-
live = true;
|
|
195
|
-
}
|
|
196
|
-
};
|
|
197
|
-
}
|
|
198
|
-
var STALE_COPY_LIST_MAX = 5;
|
|
199
|
-
function warnStaleHarnessCopies(am) {
|
|
200
|
-
let stale;
|
|
201
|
-
try {
|
|
202
|
-
stale = am.listStaleHarnessCopies();
|
|
203
|
-
} catch {
|
|
204
|
-
return;
|
|
205
|
-
}
|
|
206
|
-
for (const harness of SUPPORTED_HARNESSES) {
|
|
207
|
-
const rel = stale.filter((s) => s.harness === harness).map((s) => path.relative(am.projectDir, s.path));
|
|
208
|
-
if (rel.length === 0) continue;
|
|
209
|
-
const dir = `${rel[0]?.split(path.sep)[0] ?? harness}/`;
|
|
210
|
-
const shown = rel.slice(0, STALE_COPY_LIST_MAX).join(", ");
|
|
211
|
-
const more = rel.length > STALE_COPY_LIST_MAX ? `, +${rel.length - STALE_COPY_LIST_MAX} more` : "";
|
|
212
|
-
logWarn(
|
|
213
|
-
`Stale ${S.cmd(dir)} copies no longer managed (deploying to ${am.harness}): ${shown}${more}. Delete them with ${S.cmd(`skaile harness set ${am.harness} --clean`)}, or pass ${S.cmd(`--target ${harness}`)} to keep using ${dir}.`
|
|
214
|
-
);
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
function bareSoftDepName(ref) {
|
|
218
|
-
return softDepName(ref);
|
|
219
|
-
}
|
|
220
|
-
function formatSoftDepHint(edge) {
|
|
221
|
-
const suffix = edge.toRef ? ` \u2014 run \`skaile add ${edge.toRef}\` to include it.` : "";
|
|
222
|
-
return `${bareSoftDepName(edge.from)} references ${bareSoftDepName(edge.to)} (soft dependency)${suffix}`;
|
|
223
|
-
}
|
|
224
|
-
function formatSoftDepSection(targets) {
|
|
225
|
-
if (targets.length === 0) return [];
|
|
226
|
-
const out = [` ${S.label("Soft dependencies (inferred)")}:`];
|
|
227
|
-
for (const t of targets) out.push(` ${S.dim("\xB7")} ${t} ${S.dim("(soft)")}`);
|
|
228
|
-
return out;
|
|
229
|
-
}
|
|
230
|
-
function formatSoftDepAddPreview(name, targets) {
|
|
231
|
-
if (targets.length === 0) return "";
|
|
232
|
-
return S.dim(`${name} references ${targets.join(", ")} (soft dep, not auto-added)`);
|
|
233
|
-
}
|
|
234
|
-
function formatSoftDepRemovePreview(name, targets) {
|
|
235
|
-
if (targets.length === 0) return "";
|
|
236
|
-
return S.dim(`removing ${name} would orphan ${targets.join(", ")} (soft dep)`);
|
|
237
|
-
}
|
|
238
|
-
function formatRelativeTime(date) {
|
|
239
|
-
const diff = Date.now() - date.getTime();
|
|
240
|
-
const seconds = Math.floor(diff / 1e3);
|
|
241
|
-
if (seconds < 60) return "just now";
|
|
242
|
-
const minutes = Math.floor(seconds / 60);
|
|
243
|
-
if (minutes < 60) return `${minutes}m ago`;
|
|
244
|
-
const hours = Math.floor(minutes / 60);
|
|
245
|
-
if (hours < 24) return `${hours}h ago`;
|
|
246
|
-
const days = Math.floor(hours / 24);
|
|
247
|
-
return `${days}d ago`;
|
|
248
|
-
}
|
|
249
|
-
function reportLegacyOmpCopies(removed, kept = []) {
|
|
250
|
-
for (const p of removed) {
|
|
251
|
-
logInfo(
|
|
252
|
-
S.dim(`removed the old omp copy ${p.replace(homedir(), "~")} (omp reads ~/.omp/agent)`)
|
|
253
|
-
);
|
|
254
|
-
}
|
|
255
|
-
for (const p of kept) {
|
|
256
|
-
logWarn(
|
|
257
|
-
`${p.replace(homedir(), "~")} is an old omp location and skaile did not write this copy, so it was kept: delete it if you do not need it`
|
|
258
|
-
);
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
function parseHarnessFilter(raw) {
|
|
262
|
-
if (!raw) return void 0;
|
|
263
|
-
const ids = raw.split(",").map((s) => s.trim()).filter(Boolean);
|
|
264
|
-
const out = [];
|
|
265
|
-
for (const id of ids) {
|
|
266
|
-
if (!SUPPORTED_HARNESSES.includes(id)) {
|
|
267
|
-
logErr(unknownHarnessTargetMessage(id));
|
|
268
|
-
process.exit(1);
|
|
269
|
-
}
|
|
270
|
-
out.push(id);
|
|
271
|
-
}
|
|
272
|
-
return out.length > 0 ? out : void 0;
|
|
273
|
-
}
|
|
274
|
-
var SUB_AGENT_MARKER = "You are a sub-agent:";
|
|
275
|
-
function warnFilesOnlyDelegates(projectDir, target) {
|
|
276
|
-
if (target !== "codex") return;
|
|
277
|
-
const dir = path.join(projectDir, ".codex", "skaile-agents");
|
|
278
|
-
let names;
|
|
279
|
-
try {
|
|
280
|
-
names = readdirSync(dir).filter((f) => f.endsWith(".md"));
|
|
281
|
-
} catch {
|
|
282
|
-
return;
|
|
283
|
-
}
|
|
284
|
-
const delegates = names.filter((f) => {
|
|
285
|
-
try {
|
|
286
|
-
return readFileSync(path.join(dir, f), "utf8").includes(SUB_AGENT_MARKER);
|
|
287
|
-
} catch {
|
|
288
|
-
return false;
|
|
289
|
-
}
|
|
290
|
-
}).map((f) => f.replace(/\.md$/, "")).sort();
|
|
291
|
-
if (delegates.length === 0) return;
|
|
292
|
-
logWarn(
|
|
293
|
-
`codex: delegate agents are files only (${delegates.join(", ")}): Codex does not load .codex/agents as sub-agents, so the orchestrator cannot call them`
|
|
294
|
-
);
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
export { KIND_COL_WIDTH, S, TARGET_DEFAULT_HINT, bareSoftDepName, colorRef, deferredWarnings, driverAliasOption, fitWidth, foldDriverFlag, formatRelativeTime, formatSoftDepAddPreview, formatSoftDepHint, formatSoftDepRemovePreview, formatSoftDepSection, friendlyHarnessError, harnessErrorNotes, kindColor, kindColorPad, logErr, logInfo, logNoProject, logOk, logWarn, logWarnErr, parseHarnessFilter, reportLegacyOmpCopies, requireProjectConfig, setActiveCommand, unknownHarnessMessage, unknownHarnessTargetMessage, warnFilesOnlyDelegates, warnPlaceholderBodies, warnStaleHarnessCopies };
|
|
298
|
-
//# sourceMappingURL=chunk-BLBXOG5Q.js.map
|
|
299
|
-
//# sourceMappingURL=chunk-BLBXOG5Q.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../cli/src/harness-error.ts","../cli/src/helpers.ts"],"names":[],"mappings":";;;;;;;;;;;AAWO,SAAS,sBAAsB,OAAA,EAAqC;AACzE,EAAA,MAAM,QAAQ,aAAA,EAAc,CAAE,IAAI,CAAC,CAAA,KAAM,EAAE,EAAE,CAAA;AAC7C,EAAA,IAAI,KAAA,CAAM,QAAA,CAAS,OAAO,CAAA,EAAG,OAAO,MAAA;AACpC,EAAA,OACE,CAAA,wBAAA,EAA2B,OAAO,CAAA,cAAA,EAAiB,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,EAAA,EAChE,eAAe,CAAA,OAAA,EAAU,mBAAA,CAAoB,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAE9D;AAGA,IAAM,eAAA,GAAkB,+CAAA;AAWjB,SAAS,2BAAA,CACd,OAAA,EACA,KAAA,GAA2B,EAAC,EACpB;AACR,EAAA,MAAM,OAAA,GAAU,CAAC,GAAG,mBAAA,EAAqB,GAAG,KAAK,CAAA;AACjD,EAAA,MAAM,aAAa,aAAA,EAAc,CAAE,IAAI,CAAC,CAAA,KAAM,EAAE,EAAE,CAAA;AAClD,EAAA,OACE,CAAA,wBAAA,EAA2B,OAAO,CAAA,cAAA,EAAiB,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,yCAAA,EAC3B,UAAA,CAAW,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAEnE;AAEA,IAAI,gBAAA,GAAmB,KAAA;AAGhB,SAAS,wBAAA,GAAiC;AAC/C,EAAA,IAAI,gBAAA,EAAkB;AACtB,EAAA,gBAAA,GAAmB,IAAA;AACnB,EAAA,OAAA,CAAQ,MAAM,uCAAuC,CAAA;AACvD;AAMO,SAAS,iBAAA,GAA4B;AAC1C,EAAA,OAAO,IAAI,MAAA,CAAO,iBAAA,EAAmB,+BAA+B,EAAE,QAAA,EAAS;AACjF;AAOO,SAAS,cAAA,CACd,MACA,QAAA,EAC0C;AAC1C,EAAA,MAAM,EAAE,MAAA,EAAQ,GAAG,IAAA,EAAK,GAAI,IAAA;AAC5B,EAAA,IAAI,MAAA,KAAW,QAAW,wBAAA,EAAyB;AACnD,EAAA,OAAO,EAAE,GAAG,IAAA,EAAM,SAAS,IAAA,CAAK,OAAA,IAAW,UAAU,QAAA,EAAS;AAChE;AAYO,SAAS,qBAAqB,GAAA,EAA6B;AAChE,EAAA,MAAM,CAAA,GAAI,GAAA;AAWV,EAAA,IAAI,CAAC,GAAG,OAAO,IAAA;AAIf,EAAA,MAAM,aAAA,GACJ,CAAA,CAAE,IAAA,KAAS,QAAA,KACV,EAAE,OAAA,EAAS,UAAA,CAAW,OAAO,CAAA,KAAM,IAAA,IAAQ,iBAAA,CAAkB,IAAA,CAAK,CAAA,CAAE,WAAW,EAAE,CAAA,CAAA;AACpF,EAAA,MAAM,WAAW,CAAA,CAAE,QAAA,KAAa,QAAA,IAAY,CAAA,CAAE,QAAQ,QAAA,KAAa,QAAA;AACnE,EAAA,IAAI,CAAC,aAAA,IAAiB,CAAC,QAAA,EAAU,OAAO,IAAA;AAExC,EAAA,MAAM,IAAA,GAAO,CAAA,CAAE,IAAA,IAAQ,CAAA,CAAE,MAAA,EAAQ,IAAA;AACjC,EAAA,MAAM,OAAO,IAAA,IAAQ,mEAAA;AACrB,EAAA,OAAO,GAAG,IAAI;AAAA,sDAAA,CAAA;AAChB;AAUO,SAAS,kBAAkB,GAAA,EAAwB;AACxD,EAAA,MAAM,CAAA,GAAI,GAAA;AASV,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,MAAM,QAAA,GAAW,CAAA,EAAG,QAAA,IAAY,CAAA,EAAG,MAAA,EAAQ,QAAA;AAC3C,EAAA,MAAM,IAAA,GAAO,CAAA,EAAG,IAAA,IAAQ,CAAA,EAAG,MAAA,EAAQ,IAAA;AACnC,EAAA,IAAI,IAAA,IAAQ,QAAA,KAAa,QAAA,EAAU,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,OAAA,IACzC,QAAA,KAAa,MAAA,EAAQ,KAAA,CAAM,IAAA,CAAK,8BAA8B,CAAA;AACvE,EAAA,IAAI,GAAG,YAAA,EAAc;AACnB,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,mDAAA,EAAsD,CAAA,CAAE,YAAY,CAAA,EAAA,CAAI,CAAA;AAAA,EACrF;AACA,EAAA,OAAO,KAAA;AACT;;;ACvHO,IAAM,CAAA,GAAI;AAAA,EACf,KAAA,EAAO,CAAC,CAAA,KAAc,EAAA,CAAG,KAAK,EAAA,CAAG,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,EACxC,GAAA,EAAK,CAAC,CAAA,KAAc,EAAA,CAAG,KAAK,CAAC,CAAA;AAAA,EAC7B,OAAA,EAAS,CAAC,CAAA,KAAc,EAAA,CAAG,KAAK,CAAC,CAAA;AAAA,EACjC,IAAA,EAAM,CAAC,CAAA,KAAc,EAAA,CAAG,KAAK,CAAC,CAAA;AAAA,EAC9B,GAAA,EAAK,CAAC,CAAA,KAAc,EAAA,CAAG,IAAI,CAAC,CAAA;AAAA,EAC5B,EAAA,EAAI,CAAC,CAAA,KAAc,EAAA,CAAG,MAAM,CAAC,CAAA;AAAA,EAC7B,IAAA,EAAM,CAAC,CAAA,KAAc,EAAA,CAAG,OAAO,CAAC,CAAA;AAAA,EAChC,GAAA,EAAK,CAAC,CAAA,KAAc,EAAA,CAAG,IAAI,CAAC,CAAA;AAAA,EAC5B,KAAA,EAAO,CAAC,CAAA,KAAc,EAAA,CAAG,IAAI,CAAC,CAAA;AAAA,EAC9B,IAAA,EAAM,CAAC,CAAA,GAAI,EAAA,KAAO,GAAG,GAAA,CAAI,QAAA,CAAI,MAAA,CAAO,CAAC,CAAC;AACxC;AAEA,IAAM,WAAA,GAAqD;AAAA,EACzD,OAAO,EAAA,CAAG,IAAA;AAAA,EACV,OAAO,EAAA,CAAG,OAAA;AAAA,EACV,QAAQ,EAAA,CAAG,MAAA;AAAA,EACX,MAAM,EAAA,CAAG,KAAA;AAAA,EACT,QAAQ,EAAA,CAAG,IAAA;AAAA,EACX,UAAU,EAAA,CAAG,GAAA;AAAA,EACb,WAAW,EAAA,CAAG,KAAA;AAAA,EACd,WAAW,EAAA,CAAG,IAAA;AAAA,EACd,SAAS,EAAA,CAAG,IAAA;AAAA,EACZ,SAAS,EAAA,CAAG,IAAA;AAAA,EACZ,cAAc,EAAA,CAAG;AACnB,CAAA;AAQO,SAAS,QAAA,CAAS,GAAW,KAAA,EAAuB;AACzD,EAAA,IAAI,KAAA,IAAS,GAAG,OAAO,EAAA;AACvB,EAAA,IAAI,CAAA,CAAE,MAAA,GAAS,KAAA,EAAO,OAAO,KAAA,KAAU,CAAA,GAAI,QAAA,GAAM,CAAA,EAAG,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,KAAA,GAAQ,CAAC,CAAC,CAAA,MAAA,CAAA;AACzE,EAAA,OAAO,CAAA,CAAE,OAAO,KAAK,CAAA;AACvB;AAGO,SAAS,UAAU,IAAA,EAAsB;AAC9C,EAAA,MAAM,OAAA,GAAU,WAAA,CAAY,IAAI,CAAA,IAAK,EAAA,CAAG,GAAA;AACxC,EAAA,OAAO,QAAQ,IAAI,CAAA;AACrB;AAMO,IAAM,cAAA,GAAiB;AAOvB,IAAM,mBAAA,GAAsB;AAO5B,SAAS,YAAA,CAAa,IAAA,EAAc,KAAA,GAAQ,cAAA,EAAwB;AACzE,EAAA,MAAM,OAAA,GAAU,WAAA,CAAY,IAAI,CAAA,IAAK,EAAA,CAAG,GAAA;AACxC,EAAA,OAAO,OAAA,CAAQ,QAAA,CAAS,IAAA,EAAM,KAAK,CAAC,CAAA;AACtC;AAGO,SAAS,SAAS,GAAA,EAAqB;AAC5C,EAAA,MAAM,QAAA,GAAW,GAAA,CAAI,OAAA,CAAQ,GAAG,CAAA;AAChC,EAAA,IAAI,QAAA,KAAa,IAAI,OAAO,GAAA;AAC5B,EAAA,MAAM,IAAA,GAAO,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,QAAQ,CAAA;AAClC,EAAA,MAAM,IAAA,GAAO,GAAA,CAAI,KAAA,CAAM,QAAQ,CAAA;AAC/B,EAAA,OAAO,CAAA,EAAG,SAAA,CAAU,IAAI,CAAC,GAAG,IAAI,CAAA,CAAA;AAClC;AAQO,SAAS,MAAM,GAAA,EAAa;AACjC,EAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,EAAA,CAAG,KAAA,CAAM,QAAG,CAAC,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE,CAAA;AACzC;AAOO,SAAS,OAAO,GAAA,EAAa;AAClC,EAAA,OAAA,CAAQ,KAAA,CAAM,KAAK,EAAA,CAAG,GAAA,CAAI,QAAG,CAAC,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE,CAAA;AACzC;AAOO,SAAS,QAAQ,GAAA,EAAa;AACnC,EAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,EAAA,CAAG,MAAA,CAAO,GAAG,CAAC,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE,CAAA;AAC1C;AAOO,SAAS,WAAW,GAAA,EAAa;AACtC,EAAA,OAAA,CAAQ,KAAA,CAAM,KAAK,EAAA,CAAG,MAAA,CAAO,GAAG,CAAC,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE,CAAA;AAC5C;AASO,SAAS,qBAAA,CACd,QACA,YAAA,EACA;AACA,EAAA,MAAM,IAAA,GAAO,CAAC,mBAAG,IAAI,IAAI,CAAC,GAAI,MAAA,IAAU,IAAK,GAAI,YAAA,IAAgB,EAAG,CAAC,CAAC,CAAA;AACtE,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,MAAM,KAAA,GAAQ;AAAA,MACZ,GAAI,cAAc,QAAA,CAAS,GAAG,IAAI,CAAC,aAAa,IAAI,EAAC;AAAA,MACrD,GAAI,QAAQ,QAAA,CAAS,GAAG,IAAI,CAAC,MAAM,IAAI;AAAC,KAC1C;AACA,IAAA,MAAM,IAAA,GAAO,MAAM,MAAA,GAAS,CAAA;AAC5B,IAAA,OAAA;AAAA,MACE,GAAG,GAAG,CAAA,CAAA,EAAI,MAAM,IAAA,CAAK,OAAO,CAAC,CAAA,CAAA,EAAI,IAAA,GAAO,KAAA,GAAQ,IAAI,0CAA0C,IAAA,GAAO,MAAA,GAAS,IAAI,CAAA,4BAAA,EAA+B,IAAA,GAAO,SAAS,IAAI,CAAA,CAAA;AAAA,KACvK;AAAA,EACF;AACF;AAOO,SAAS,QAAQ,GAAA,EAAa;AACnC,EAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,EAAA,CAAG,GAAA,CAAI,MAAG,CAAC,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE,CAAA;AACvC;AAGA,IAAI,iBAAA;AAMG,SAAS,iBAAiB,GAAA,EAAgD;AAC/E,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,IACM,IAAgD,GAAA,EACpD,CAAA,IAAK,EAAE,MAAA,EACP,CAAA,GAAI,EAAE,MAAA,EACN;AACA,IAAA,KAAA,CAAM,OAAA,CAAQ,CAAA,CAAE,IAAA,EAAM,CAAA;AAAA,EACxB;AACA,EAAA,iBAAA,GAAoB,MAAM,MAAA,GAAS,CAAA,GAAI,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA,GAAI,MAAA;AAC3D;AAGA,SAAS,qBAAqB,GAAA,EAAiC;AAC7D,EAAA,KAAA,IAAS,EAAA,GAAK,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA,EAAG,EAAA,KAAO,GAAA,EAAK,GAAA,GAAM,EAAA,EAAI,EAAA,GAAK,IAAA,CAAK,OAAA,CAAQ,GAAG,CAAA,EAAG;AAC7E,IAAA,IAAI,WAAW,IAAA,CAAK,IAAA,CAAK,IAAI,mBAAmB,CAAC,GAAG,OAAO,EAAA;AAAA,EAC7D;AACA,EAAA,OAAO,MAAA;AACT;AAQO,SAAS,aAAa,UAAA,EAA0B;AACrD,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,UAAU,CAAA;AACnC,EAAA,MAAA,CAAO,CAAA,GAAA,EAAM,CAAA,CAAE,GAAA,CAAI,aAAa,CAAC,eAAe,CAAA,CAAE,GAAA,CAAI,aAAa,CAAC,CAAA,eAAA,CAAiB,CAAA;AACrF,EAAA,MAAM,MAAA,GAAS,qBAAqB,GAAG,CAAA;AACvC,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,MAAM,OAAA,GACJ,iBAAA,IAAqB,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA,CAAE,IAAA,CAAK,CAAC,MAAM,CAAC,CAAA,CAAE,UAAA,CAAW,GAAG,CAAC,CAAA,IAAK,WAAA;AAChF,IAAA,MAAA;AAAA,MACE,GAAG,CAAA,CAAE,GAAA,CAAI,MAAM,CAAC,CAAA,SAAA,EAAY,EAAE,GAAA,CAAI,aAAa,CAAC,CAAA,2DAAA,EAA8D,EAAE,GAAA,CAAI,CAAA,OAAA,EAAU,OAAO,CAAA,eAAA,EAAkB,MAAM,EAAE,CAAC,CAAA,CAAA;AAAA,KAClK;AAAA,EACF;AACF;AAWO,SAAS,oBAAA,CACd,UAAA,EACA,IAAA,GAAmC,EAAC,EAC9B;AACN,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,UAAU,CAAA;AACnC,EAAA,IAAI,CAAC,UAAA,CAAW,IAAA,CAAK,KAAK,GAAA,EAAK,mBAAmB,CAAC,CAAA,EAAG;AACpD,IAAA,IAAI,KAAK,YAAA,EAAc;AACvB,IAAA,YAAA,CAAa,GAAG,CAAA;AAChB,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACA,EAAA,IAAI;AACF,IAAA,wBAAA,CAAyB,GAAG,CAAA;AAAA,EAC9B,SAAS,GAAA,EAAK;AACZ,IAAA,MAAA,CAAO,eAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC,CAAA;AACvD,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAGA,EAAA,IAAI;AACF,IAAA,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,GAAA,EAAK,kBAAkB,CAAC,CAAA;AAAA,EAC7C,SAAS,GAAA,EAAK;AACZ,IAAA,IAAI,eAAe,cAAA,EAAgB;AACjC,MAAA,MAAA,CAAO,IAAI,OAAO,CAAA;AAClB,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EAEF;AACF;AAQO,SAAS,gBAAA,GAAuE;AACrF,EAAA,MAAM,OAAiB,EAAC;AACxB,EAAA,IAAI,IAAA,GAAO,KAAA;AACX,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,CAAC,GAAA,KAAQ;AACb,MAAA,IAAI,IAAA,UAAc,GAAG,CAAA;AAAA,WAChB,IAAA,CAAK,KAAK,GAAG,CAAA;AAAA,IACpB,CAAA;AAAA,IACA,OAAO,MAAM;AACX,MAAA,KAAA,MAAW,OAAO,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,UAAW,GAAG,CAAA;AAC7C,MAAA,IAAA,GAAO,IAAA;AAAA,IACT;AAAA,GACF;AACF;AAGA,IAAM,mBAAA,GAAsB,CAAA;AAUrB,SAAS,uBAAuB,EAAA,EAI9B;AACP,EAAA,IAAI,KAAA;AACJ,EAAA,IAAI;AACF,IAAA,KAAA,GAAQ,GAAG,sBAAA,EAAuB;AAAA,EACpC,CAAA,CAAA,MAAQ;AACN,IAAA;AAAA,EACF;AACA,EAAA,KAAA,MAAW,WAAW,mBAAA,EAAqB;AACzC,IAAA,MAAM,MAAM,KAAA,CACT,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,YAAY,OAAO,CAAA,CACnC,GAAA,CAAI,CAAC,MAAM,IAAA,CAAK,QAAA,CAAS,GAAG,UAAA,EAAY,CAAA,CAAE,IAAI,CAAC,CAAA;AAClD,IAAA,IAAI,GAAA,CAAI,WAAW,CAAA,EAAG;AACtB,IAAA,MAAM,GAAA,GAAM,CAAA,EAAG,GAAA,CAAI,CAAC,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA,CAAE,CAAC,CAAA,IAAK,OAAO,CAAA,CAAA,CAAA;AACpD,IAAA,MAAM,QAAQ,GAAA,CAAI,KAAA,CAAM,GAAG,mBAAmB,CAAA,CAAE,KAAK,IAAI,CAAA;AACzD,IAAA,MAAM,IAAA,GACJ,IAAI,MAAA,GAAS,mBAAA,GAAsB,MAAM,GAAA,CAAI,MAAA,GAAS,mBAAmB,CAAA,KAAA,CAAA,GAAU,EAAA;AACrF,IAAA,OAAA;AAAA,MACE,CAAA,MAAA,EAAS,CAAA,CAAE,GAAA,CAAI,GAAG,CAAC,CAAA,wCAAA,EAA2C,EAAA,CAAG,OAAO,CAAA,GAAA,EAAM,KAAK,CAAA,EAAG,IAAI,CAAA,mBAAA,EACpE,CAAA,CAAE,GAAA,CAAI,CAAA,mBAAA,EAAsB,EAAA,CAAG,OAAO,CAAA,QAAA,CAAU,CAAC,CAAA,UAAA,EAAa,CAAA,CAAE,GAAA,CAAI,CAAA,SAAA,EAAY,OAAO,CAAA,CAAE,CAAC,CAAA,eAAA,EAAkB,GAAG,CAAA,CAAA;AAAA,KACvI;AAAA,EACF;AACF;AAOO,SAAS,gBAAgB,GAAA,EAAqB;AACnD,EAAA,OAAO,YAAY,GAAG,CAAA;AACxB;AAOO,SAAS,kBAAkB,IAAA,EAA4D;AAC5F,EAAA,MAAM,SAAS,IAAA,CAAK,KAAA,GAAQ,CAAA,yBAAA,EAAuB,IAAA,CAAK,KAAK,CAAA,iBAAA,CAAA,GAAsB,EAAA;AACnF,EAAA,OAAO,CAAA,EAAG,eAAA,CAAgB,IAAA,CAAK,IAAI,CAAC,CAAA,YAAA,EAAe,eAAA,CAAgB,IAAA,CAAK,EAAE,CAAC,CAAA,kBAAA,EAAqB,MAAM,CAAA,CAAA;AACxG;AAQO,SAAS,qBAAqB,OAAA,EAA6B;AAChE,EAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AAClC,EAAA,MAAM,MAAM,CAAC,CAAA,EAAA,EAAK,EAAE,KAAA,CAAM,8BAA8B,CAAC,CAAA,CAAA,CAAG,CAAA;AAC5D,EAAA,KAAA,MAAW,KAAK,OAAA,EAAS,GAAA,CAAI,IAAA,CAAK,CAAA,IAAA,EAAO,EAAE,GAAA,CAAI,MAAG,CAAC,CAAA,EAAA,EAAK,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,GAAA,CAAI,QAAQ,CAAC,CAAA,CAAE,CAAA;AAC9E,EAAA,OAAO,GAAA;AACT;AAOO,SAAS,uBAAA,CAAwB,MAAc,OAAA,EAA2B;AAC/E,EAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,EAAA;AACjC,EAAA,OAAO,CAAA,CAAE,IAAI,CAAA,EAAG,IAAI,eAAe,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,2BAAA,CAA6B,CAAA;AACpF;AAOO,SAAS,0BAAA,CAA2B,MAAc,OAAA,EAA2B;AAClF,EAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,OAAO,EAAA;AACjC,EAAA,OAAO,CAAA,CAAE,IAAI,CAAA,SAAA,EAAY,IAAI,iBAAiB,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,WAAA,CAAa,CAAA;AAC/E;AAGO,SAAS,mBAAmB,IAAA,EAAoB;AACrD,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,EAAI,GAAI,KAAK,OAAA,EAAQ;AACvC,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,IAAA,GAAO,GAAI,CAAA;AACtC,EAAA,IAAI,OAAA,GAAU,IAAI,OAAO,UAAA;AACzB,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,OAAA,GAAU,EAAE,CAAA;AACvC,EAAA,IAAI,OAAA,GAAU,EAAA,EAAI,OAAO,CAAA,EAAG,OAAO,CAAA,KAAA,CAAA;AACnC,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,OAAA,GAAU,EAAE,CAAA;AACrC,EAAA,IAAI,KAAA,GAAQ,EAAA,EAAI,OAAO,CAAA,EAAG,KAAK,CAAA,KAAA,CAAA;AAC/B,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,KAAA,GAAQ,EAAE,CAAA;AAClC,EAAA,OAAO,GAAG,IAAI,CAAA,KAAA,CAAA;AAChB;AAGO,SAAS,qBAAA,CAAsB,OAAA,EAAmB,IAAA,GAAiB,EAAC,EAAS;AAClF,EAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,IAAA,OAAA;AAAA,MACE,CAAA,CAAE,IAAI,CAAA,yBAAA,EAA4B,CAAA,CAAE,QAAQ,OAAA,EAAQ,EAAG,GAAG,CAAC,CAAA,yBAAA,CAA2B;AAAA,KACxF;AAAA,EACF;AACA,EAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,IAAA,OAAA;AAAA,MACE,GAAG,CAAA,CAAE,OAAA,CAAQ,OAAA,EAAQ,EAAG,GAAG,CAAC,CAAA,2GAAA;AAAA,KAC9B;AAAA,EACF;AACF;AAOO,SAAS,mBAAmB,GAAA,EAAoD;AACrF,EAAA,IAAI,CAAC,KAAK,OAAO,MAAA;AACjB,EAAA,MAAM,GAAA,GAAM,GAAA,CACT,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,CAAA,CACnB,OAAO,OAAO,CAAA;AACjB,EAAA,MAAM,MAAqB,EAAC;AAC5B,EAAA,KAAA,MAAW,MAAM,GAAA,EAAK;AACpB,IAAA,IAAI,CAAE,mBAAA,CAAiC,QAAA,CAAS,EAAE,CAAA,EAAG;AACnD,MAAA,MAAA,CAAO,2BAAA,CAA4B,EAAE,CAAC,CAAA;AACtC,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AACA,IAAA,GAAA,CAAI,KAAK,EAAiB,CAAA;AAAA,EAC5B;AACA,EAAA,OAAO,GAAA,CAAI,MAAA,GAAS,CAAA,GAAI,GAAA,GAAM,MAAA;AAChC;AAGA,IAAM,gBAAA,GAAmB,sBAAA;AAQlB,SAAS,sBAAA,CAAuB,YAAoB,MAAA,EAAsB;AAC/E,EAAA,IAAI,WAAW,OAAA,EAAS;AACxB,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,IAAA,CAAK,UAAA,EAAY,UAAU,eAAe,CAAA;AAC3D,EAAA,IAAI,KAAA;AACJ,EAAA,IAAI;AACF,IAAA,KAAA,GAAQ,WAAA,CAAY,GAAG,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,KAAK,CAAC,CAAA;AAAA,EAC1D,CAAA,CAAA,MAAQ;AACN,IAAA;AAAA,EACF;AACA,EAAA,MAAM,SAAA,GAAY,KAAA,CACf,MAAA,CAAO,CAAC,CAAA,KAAM;AACb,IAAA,IAAI;AACF,MAAA,OAAO,YAAA,CAAa,KAAK,IAAA,CAAK,GAAA,EAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,QAAA,CAAS,gBAAgB,CAAA;AAAA,IAC1E,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF,CAAC,CAAA,CACA,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,OAAA,CAAQ,OAAA,EAAS,EAAE,CAAC,CAAA,CACjC,IAAA,EAAK;AACR,EAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC5B,EAAA,OAAA;AAAA,IACE,CAAA,uCAAA,EAA0C,SAAA,CAAU,IAAA,CAAK,IAAI,CAAC,CAAA,wFAAA;AAAA,GAChE;AACF","file":"chunk-BLBXOG5Q.js","sourcesContent":["import { listHarnesses } from \"@skaile/workspaces/bridge\";\nimport { SUPPORTED_HARNESSES } from \"@skaile/workspaces/core\";\nimport { Option } from \"commander\";\n\n/**\n * The refusal for a harness name nothing registers, or `undefined` when it is known. One check\n * for `run` (also with `--dry-run`, so the plan never names a harness the real run refuses),\n * `repl` and `config set harness` (p1022). Load the project's plugins first: a plugin's harness\n * counts. The line names the other command group's names too (p1753), see\n * {@link unknownHarnessTargetMessage}.\n */\nexport function unknownHarnessMessage(harness: string): string | undefined {\n const known = listHarnesses().map((d) => d.id);\n if (known.includes(harness)) return undefined;\n return (\n `Unknown agent harness: \"${harness}\". Available: ${known.join(\", \")}. ` +\n `${DEPLOY_COMMANDS} take: ${SUPPORTED_HARNESSES.join(\", \")}.`\n );\n}\n\n/** The commands that write harness files, so they take the harness targets only. */\nconst DEPLOY_COMMANDS = \"harness set, init --harness and add --harness\";\n\n/**\n * The refusal for a name that is no harness target, for the commands that deploy files\n * (`harness set`, `init --harness`, `add --harness`, `integration --harness`). Same wording as\n * {@link unknownHarnessMessage}: the list is the targets, and the line names the commands that\n * run a session and take every registered harness (p1753).\n *\n * @param harness - The name the user typed.\n * @param extra - Further names the command takes, such as `all`.\n */\nexport function unknownHarnessTargetMessage(\n harness: string,\n extra: readonly string[] = [],\n): string {\n const targets = [...SUPPORTED_HARNESSES, ...extra];\n const registered = listHarnesses().map((d) => d.id);\n return (\n `Unknown agent harness: \"${harness}\". Available: ${targets.join(\", \")}. ` +\n `run, repl and config set harness take: ${registered.join(\", \")}.`\n );\n}\n\nlet warnedDriverFlag = false;\n\n/** Print the `--driver` deprecation line to stderr, once per process. */\nexport function warnDriverFlagDeprecated(): void {\n if (warnedDriverFlag) return;\n warnedDriverFlag = true;\n console.error(\"--driver is deprecated; use --harness\");\n}\n\n/**\n * The hidden `--driver <name>` option every command with `--harness <name>` keeps for one\n * major release: an alias that sets the same value (`--harness` wins when both are given).\n */\nexport function driverAliasOption(): Option {\n return new Option(\"--driver <name>\", \"Deprecated alias of --harness\").hideHelp();\n}\n\n/**\n * Fold a parsed `--driver` alias into `harness`: when `--driver` was given, print the\n * deprecation line once and use its value unless `--harness` (or `fallback`, when neither\n * flag was given) already decided. Returns `opts` with `harness` set and `driver` removed.\n */\nexport function foldDriverFlag<T extends { harness?: string; driver?: string }>(\n opts: T,\n fallback?: string,\n): Omit<T, \"driver\"> & { harness?: string } {\n const { driver, ...rest } = opts;\n if (driver !== undefined) warnDriverFlagDeprecated();\n return { ...rest, harness: rest.harness ?? driver ?? fallback };\n}\n\n/**\n * Turn a harness-start/prompt failure into a friendly, actionable message when the\n * cause is a missing/unusable agent binary; otherwise return `null` so the caller\n * surfaces the raw error unchanged.\n *\n * The bridge classifies these as `category: \"config\"` and carries a `hint`, but the\n * shape reaching the CLI varies: omp's `start()` rejects with the raw spawn error\n * (`code === \"ENOENT\"`), while the subprocess CLI harnesses reject with the classified\n * `AgentError` attached under `.detail`. Duck-type across all of them.\n */\nexport function friendlyHarnessError(err: unknown): string | null {\n const e = err as\n | {\n code?: string;\n syscall?: string;\n message?: string;\n category?: string;\n hint?: string;\n detail?: { category?: string; hint?: string };\n }\n | null\n | undefined;\n if (!e) return null;\n\n // A missing binary is a *spawn* ENOENT (`syscall: \"spawn <bin>\"` / \"spawn … ENOENT\");\n // a bare ENOENT from connector/mount setup is a different failure, not the harness.\n const isSpawnEnoent =\n e.code === \"ENOENT\" &&\n (e.syscall?.startsWith(\"spawn\") === true || /^spawn .*ENOENT/.test(e.message ?? \"\"));\n const isConfig = e.category === \"config\" || e.detail?.category === \"config\";\n if (!isSpawnEnoent && !isConfig) return null;\n\n const hint = e.hint ?? e.detail?.hint;\n const base = hint ?? \"The configured agent binary is not installed or not on your PATH.\";\n return `${base}\\nTry a different harness with \\`--harness claude-sdk\\`.`;\n}\n\n/**\n * Lines that follow the single `✗` line of a failed turn: the classifier's hint\n * (or, for a rejected credential, a pointer at the key), and where the full\n * records are. The JSON records themselves are not printed on the terminal:\n * they live in the project's log database. The pointer names the session whose records\n * the failure left (`logSessionId`); a failure before any session started has none and\n * gets no pointer.\n */\nexport function harnessErrorNotes(err: unknown): string[] {\n const e = err as\n | {\n category?: string;\n hint?: string;\n logSessionId?: string;\n detail?: { category?: string; hint?: string };\n }\n | null\n | undefined;\n const notes: string[] = [];\n const category = e?.category ?? e?.detail?.category;\n const hint = e?.hint ?? e?.detail?.hint;\n if (hint && category !== \"config\") notes.push(hint);\n else if (category === \"auth\") notes.push(\"Check your API key or login.\");\n if (e?.logSessionId) {\n notes.push(`Full records: .skaile/logs.db (skaile session logs ${e.logSessionId}).`);\n }\n return notes;\n}\n","import { existsSync, readdirSync, readFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport path from \"node:path\";\nimport { softDepName } from \"@skaile/workspaces/asset-manager\";\nimport {\n type HarnessName,\n LockParseError,\n readLock,\n resolveSkWorkspaceConfig,\n SKAILE_YAML_DEFAULT,\n SUPPORTED_HARNESSES,\n} from \"@skaile/workspaces/core\";\nimport pc from \"picocolors\";\nimport { unknownHarnessTargetMessage } from \"./harness-error.ts\";\n\n/**\n * Terminal styling helpers used across all CLI commands.\n *\n * @docLink cli/dev-guide#helpers\n */\nexport const S = {\n brand: (s: string) => pc.cyan(pc.bold(s)),\n cmd: (s: string) => pc.cyan(s),\n heading: (s: string) => pc.bold(s),\n bold: (s: string) => pc.bold(s),\n dim: (s: string) => pc.dim(s),\n ok: (s: string) => pc.green(s),\n warn: (s: string) => pc.yellow(s),\n err: (s: string) => pc.red(s),\n label: (s: string) => pc.dim(s),\n rule: (w = 40) => pc.dim(\"─\".repeat(w)),\n};\n\nconst KIND_COLORS: Record<string, (s: string) => string> = {\n skill: pc.blue,\n agent: pc.magenta,\n prompt: pc.yellow,\n flow: pc.green,\n preset: pc.cyan,\n contract: pc.red,\n connector: pc.green,\n knowledge: pc.cyan,\n persona: pc.cyan,\n ruleset: pc.cyan,\n \"mcp-server\": pc.magenta,\n};\n\n/**\n * Fit a plain (ANSI-free) string into exactly `width` columns: truncate with a\n * trailing `…` when too long, pad with spaces when too short. Keeps fixed-width\n * columns from overflowing the row when a value (e.g. an asset name) is wider\n * than its budget.\n */\nexport function fitWidth(s: string, width: number): string {\n if (width <= 0) return \"\";\n if (s.length > width) return width === 1 ? \"…\" : `${s.slice(0, width - 1)}…`;\n return s.padEnd(width);\n}\n\n/** Color-code an asset kind string. */\nexport function kindColor(kind: string): string {\n const colorFn = KIND_COLORS[kind] ?? pc.dim;\n return colorFn(kind);\n}\n\n/**\n * Widest kind label (`mcp-server`); the default kind-column width fits it so\n * long kinds don't shove the rest of the row out of alignment.\n */\nexport const KIND_COL_WIDTH = 10;\n\n/**\n * Shared `--target` help suffix: with no flag, the manager deploys into the\n * harness the project is configured for (the harness `skaile config show`\n * resolves), and only then falls back to `claude-code`.\n */\nexport const TARGET_DEFAULT_HINT = \"default: the project's configured harness, else claude-code\";\n\n/**\n * Color-code an asset kind string fit to exactly `width` columns — pads short\n * kinds, truncates over-long ones (via {@link fitWidth}) so the column can never\n * overflow and break row alignment.\n */\nexport function kindColorPad(kind: string, width = KIND_COL_WIDTH): string {\n const colorFn = KIND_COLORS[kind] ?? pc.dim;\n return colorFn(fitWidth(kind, width));\n}\n\n/** Color-code a \"kind:name\" reference string. */\nexport function colorRef(ref: string): string {\n const colonIdx = ref.indexOf(\":\");\n if (colonIdx === -1) return ref;\n const kind = ref.slice(0, colonIdx);\n const rest = ref.slice(colonIdx);\n return `${kindColor(kind)}${rest}`;\n}\n\n/**\n * Print a success line prefixed with a green check mark.\n *\n * @param msg - Message to display.\n * @docLink cli/dev-guide#helpers\n */\nexport function logOk(msg: string) {\n console.log(` ${pc.green(\"✓\")} ${msg}`);\n}\n/**\n * Print an error line prefixed with a red cross to stderr.\n *\n * @param msg - Message to display.\n * @docLink cli/dev-guide#helpers\n */\nexport function logErr(msg: string) {\n console.error(` ${pc.red(\"✗\")} ${msg}`);\n}\n/**\n * Print a warning line prefixed with a yellow exclamation mark.\n *\n * @param msg - Message to display.\n * @docLink cli/dev-guide#helpers\n */\nexport function logWarn(msg: string) {\n console.log(` ${pc.yellow(\"!\")} ${msg}`);\n}\n/**\n * Like {@link logWarn}, on stderr: a warning about the run itself (an asset scan that stopped\n * early) that must not land in the output a script reads from stdout.\n *\n * @param msg - Message to display.\n */\nexport function logWarnErr(msg: string) {\n console.error(` ${pc.yellow(\"!\")} ${msg}`);\n}\n/**\n * One `!` line per deployed library asset whose body or description is still the untouched\n * `library create` scaffold: `validate` and the publish plan fail both, so `add`, `install` and\n * `update` name every placeholder they fail (p926).\n *\n * @param bodies - Canonical refs the asset manager reported as placeholder bodies.\n * @param descriptions - Canonical refs the asset manager reported as placeholder descriptions.\n */\nexport function warnPlaceholderBodies(\n bodies: readonly string[] | undefined,\n descriptions?: readonly string[],\n) {\n const refs = [...new Set([...(bodies ?? []), ...(descriptions ?? [])])];\n for (const ref of refs) {\n const parts = [\n ...(descriptions?.includes(ref) ? [\"description\"] : []),\n ...(bodies?.includes(ref) ? [\"body\"] : []),\n ];\n const both = parts.length > 1;\n logWarn(\n `${ref} ${parts.join(\" and \")} ${both ? \"are\" : \"is\"} still the scaffold placeholder; write ${both ? \"them\" : \"it\"} (\\`skaile validate\\` fails ${both ? \"them\" : \"it\"})`,\n );\n }\n}\n/**\n * Print an info line prefixed with a dim dot.\n *\n * @param msg - Message to display.\n * @docLink cli/dev-guide#helpers\n */\nexport function logInfo(msg: string) {\n console.log(` ${pc.dim(\"·\")} ${msg}`);\n}\n\n/** Full command path of the command being run (`harness set`), set before its action runs. */\nlet activeCommandPath: string | undefined;\n\n/**\n * Record the command that is about to run, as the path of subcommand names from the root\n * (`harness set`), so advice that repeats the command shows the whole path (p1656).\n */\nexport function setActiveCommand(cmd: { name(): string; parent: unknown }): void {\n const names: string[] = [];\n for (\n let c: { name(): string; parent: unknown } | null = cmd;\n c && c.parent;\n c = c.parent as { name(): string; parent: unknown } | null\n ) {\n names.unshift(c.name());\n }\n activeCommandPath = names.length > 0 ? names.join(\" \") : undefined;\n}\n\n/** The nearest parent directory of `dir` that holds a `skaile.yaml`, or `undefined`. */\nfunction nearestParentProject(dir: string): string | undefined {\n for (let up = path.dirname(dir); up !== dir; dir = up, up = path.dirname(dir)) {\n if (existsSync(path.join(up, SKAILE_YAML_DEFAULT))) return up;\n }\n return undefined;\n}\n\n/**\n * Print the `No skaile.yaml found` line for `projectDir`, plus a second line naming the nearest\n * parent directory that holds a `skaile.yaml`, when there is one: skaile does not search parent\n * directories. The line shows `--project-dir` after the full command path (`skaile harness set\n * --project-dir /x`), the only place the option is accepted (p1656).\n */\nexport function logNoProject(projectDir: string): void {\n const dir = path.resolve(projectDir);\n logErr(`No ${S.cmd(\"skaile.yaml\")} found. Run ${S.cmd(\"skaile init\")} to create one.`);\n const parent = nearestParentProject(dir);\n if (parent) {\n const command =\n activeCommandPath ?? process.argv.slice(2).find((a) => !a.startsWith(\"-\")) ?? \"<command>\";\n logErr(\n `${S.cmd(parent)} holds a ${S.cmd(\"skaile.yaml\")}: run from there or put the option after the command name: ${S.cmd(`skaile ${command} --project-dir ${parent}`)}.`,\n );\n }\n}\n\n/**\n * Stop a project command that has no usable project: print one `✗` line and exit 1, before\n * the command deploys, undeploys, locks or clones anything. Two causes: no `skaile.yaml` in\n * `projectDir` (`No skaile.yaml found`), or a `skaile.yaml` — project, app or user scope —\n * that does not parse (`<file> — parse error: …`, a duplicate key included). Without this a\n * broken file would read as \"nothing declared\" and `install` would undeploy every asset.\n *\n * Library-level commands (`library …`, `search`, `init`) have no project and do not call it.\n */\nexport function requireProjectConfig(\n projectDir: string,\n opts: { allowMissing?: boolean } = {},\n): void {\n const dir = path.resolve(projectDir);\n if (!existsSync(path.join(dir, SKAILE_YAML_DEFAULT))) {\n if (opts.allowMissing) return;\n logNoProject(dir);\n process.exit(1);\n }\n try {\n resolveSkWorkspaceConfig(dir);\n } catch (err) {\n logErr(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n // A lock that is not valid YAML is not \"nothing locked\": `update` would overwrite it and\n // `outdated`/`why`/`check` would call every asset unlocked. One line, exit 1 (p1892).\n try {\n readLock(path.join(dir, \"skaile.lock.yaml\"));\n } catch (err) {\n if (err instanceof LockParseError) {\n logErr(err.message);\n process.exit(1);\n }\n // Another lock problem (an old schema) has its own message where the lock is used.\n }\n}\n\n/**\n * Hold warnings raised while a spinner animates and print them once it stops:\n * on a TTY a line written mid-spin is overwritten by the next frame. Pass\n * `push` as `AssetManager`'s `onLibraryCollision`, call `flush()` after\n * `spinner.stop(...)`. Warnings pushed after `flush()` print immediately.\n */\nexport function deferredWarnings(): { push: (msg: string) => void; flush: () => void } {\n const held: string[] = [];\n let live = false;\n return {\n push: (msg) => {\n if (live) logWarn(msg);\n else held.push(msg);\n },\n flush: () => {\n for (const msg of held.splice(0)) logWarn(msg);\n live = true;\n },\n };\n}\n\n/** Max stale copies of one harness named inline by {@link warnStaleHarnessCopies}. */\nconst STALE_COPY_LIST_MAX = 5;\n\n/**\n * Print one warning per harness whose project dir (`.claude/`, `.omp/`, `.codex/`) still holds\n * copies of tracked assets although the project deploys to another harness: after `skaile\n * harness set`, or when a project moved off the old default. Those copies are orphans: `remove`\n * / `clean` / `list` only look in the active harness dir. Every file a deploy created is named\n * (p1671). Nothing is deleted here; `skaile harness set <name> --clean` deletes them. Silent when\n * there are none.\n */\nexport function warnStaleHarnessCopies(am: {\n projectDir: string;\n harness: string;\n listStaleHarnessCopies(): Array<{ harness: HarnessName; path: string }>;\n}): void {\n let stale: Array<{ harness: HarnessName; path: string }>;\n try {\n stale = am.listStaleHarnessCopies();\n } catch {\n return; // advisory only — never fail the command\n }\n for (const harness of SUPPORTED_HARNESSES) {\n const rel = stale\n .filter((s) => s.harness === harness)\n .map((s) => path.relative(am.projectDir, s.path));\n if (rel.length === 0) continue;\n const dir = `${rel[0]?.split(path.sep)[0] ?? harness}/`;\n const shown = rel.slice(0, STALE_COPY_LIST_MAX).join(\", \");\n const more =\n rel.length > STALE_COPY_LIST_MAX ? `, +${rel.length - STALE_COPY_LIST_MAX} more` : \"\";\n logWarn(\n `Stale ${S.cmd(dir)} copies no longer managed (deploying to ${am.harness}): ${shown}${more}. ` +\n `Delete them with ${S.cmd(`skaile harness set ${am.harness} --clean`)}, or pass ${S.cmd(`--target ${harness}`)} to keep using ${dir}.`,\n );\n }\n}\n\n/**\n * Bare asset name of a canonical soft-dep target ref (`@pub/name@ver` → `name`),\n * for compact rendering in `info` / `tree` / `why`. Delegates to the asset-manager\n * parser (the soft-dep read surface) so the two never diverge.\n */\nexport function bareSoftDepName(ref: string): string {\n return softDepName(ref);\n}\n\n/**\n * The report-only soft-dep hint line shared by the `add` no-TTY branch and the\n * `install` surface, so the two user-facing wordings can't drift. Appends a\n * runnable `skaile add` suffix only when the target has a parseable ref.\n */\nexport function formatSoftDepHint(edge: { from: string; to: string; toRef?: string }): string {\n const suffix = edge.toRef ? ` — run \\`skaile add ${edge.toRef}\\` to include it.` : \"\";\n return `${bareSoftDepName(edge.from)} references ${bareSoftDepName(edge.to)} (soft dependency)${suffix}`;\n}\n\n/**\n * Build the \"Soft dependencies (inferred)\" section for `skaile info`. Returns one\n * header line plus one line per soft-dep target, each marked `(soft)` to read\n * differently from a typed `requires`. Empty array when there are no soft deps,\n * so the caller prints nothing.\n */\nexport function formatSoftDepSection(targets: string[]): string[] {\n if (targets.length === 0) return [];\n const out = [` ${S.label(\"Soft dependencies (inferred)\")}:`];\n for (const t of targets) out.push(` ${S.dim(\"·\")} ${t} ${S.dim(\"(soft)\")}`);\n return out;\n}\n\n/**\n * Footer line previewing the soft deps that *adding* the highlighted asset would\n * reference (manage TUI). \"references\" + \"not auto-added\" makes clear the pull is\n * report-only. Empty string when there are no targets, so the caller clears.\n */\nexport function formatSoftDepAddPreview(name: string, targets: string[]): string {\n if (targets.length === 0) return \"\";\n return S.dim(`${name} references ${targets.join(\", \")} (soft dep, not auto-added)`);\n}\n\n/**\n * Footer line previewing the soft deps that *removing* the highlighted asset\n * would orphan (manage TUI) — symmetric with {@link formatSoftDepAddPreview}.\n * Empty string when nothing would be orphaned, so the caller clears.\n */\nexport function formatSoftDepRemovePreview(name: string, targets: string[]): string {\n if (targets.length === 0) return \"\";\n return S.dim(`removing ${name} would orphan ${targets.join(\", \")} (soft dep)`);\n}\n\n/** Format a Date as a human-readable relative time string (e.g. \"5m ago\"). */\nexport function formatRelativeTime(date: Date): string {\n const diff = Date.now() - date.getTime();\n const seconds = Math.floor(diff / 1000);\n if (seconds < 60) return \"just now\";\n const minutes = Math.floor(seconds / 60);\n if (minutes < 60) return `${minutes}m ago`;\n const hours = Math.floor(minutes / 60);\n if (hours < 24) return `${hours}h ago`;\n const days = Math.floor(hours / 24);\n return `${days}d ago`;\n}\n\n/** Name the old `~/.omp/<dir>` copies a global deploy replaced (omp reads `~/.omp/agent/<dir>`). */\nexport function reportLegacyOmpCopies(removed: string[], kept: string[] = []): void {\n for (const p of removed) {\n logInfo(\n S.dim(`removed the old omp copy ${p.replace(homedir(), \"~\")} (omp reads ~/.omp/agent)`),\n );\n }\n for (const p of kept) {\n logWarn(\n `${p.replace(homedir(), \"~\")} is an old omp location and skaile did not write this copy, so it was kept: delete it if you do not need it`,\n );\n }\n}\n\n/**\n * Parse a `--harness a,b` value into validated {@link HarnessName}s, exiting on\n * an unknown id. Returns `undefined` when the flag is absent (the caller then\n * resolves the full global harness set).\n */\nexport function parseHarnessFilter(raw: string | undefined): HarnessName[] | undefined {\n if (!raw) return undefined;\n const ids = raw\n .split(\",\")\n .map((s) => s.trim())\n .filter(Boolean);\n const out: HarnessName[] = [];\n for (const id of ids) {\n if (!(SUPPORTED_HARNESSES as string[]).includes(id)) {\n logErr(unknownHarnessTargetMessage(id));\n process.exit(1);\n }\n out.push(id as HarnessName);\n }\n return out.length > 0 ? out : undefined;\n}\n\n/** The sentence the agent renderer puts into a delegate sub-agent's file (`asset-manager` fragments). */\nconst SUB_AGENT_MARKER = \"You are a sub-agent:\";\n\n/**\n * One line when a Codex project holds delegate sub-agents. Codex does not load\n * `.codex/agents/*.toml` as spawnable agents (its `spawn_agent` has no `agent_type`), so the\n * delegate exists only as a file there and the orchestrator cannot call it (p428). A delegate is\n * found by the sentence the renderer writes into its file. Silent for every other harness.\n */\nexport function warnFilesOnlyDelegates(projectDir: string, target: string): void {\n if (target !== \"codex\") return;\n const dir = path.join(projectDir, \".codex\", \"skaile-agents\");\n let names: string[];\n try {\n names = readdirSync(dir).filter((f) => f.endsWith(\".md\"));\n } catch {\n return;\n }\n const delegates = names\n .filter((f) => {\n try {\n return readFileSync(path.join(dir, f), \"utf8\").includes(SUB_AGENT_MARKER);\n } catch {\n return false;\n }\n })\n .map((f) => f.replace(/\\.md$/, \"\"))\n .sort();\n if (delegates.length === 0) return;\n logWarn(\n `codex: delegate agents are files only (${delegates.join(\", \")}): Codex does not load .codex/agents as sub-agents, so the orchestrator cannot call them`,\n );\n}\n"]}
|
package/dist/chunk-C324IAXI.js
DELETED
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
import { unresolvedProviderCredentials, providerCredentialEnvName } from './chunk-7TF5MNFK.js';
|
|
2
|
-
import { getProviderPreset } from './chunk-6UP2EDFN.js';
|
|
3
|
-
import { globalSkaileDir } from './chunk-L5VSIPQD.js';
|
|
4
|
-
import { registryEntries, parseModelRef, isEntryEnabled, resolveEntryBaseUrl } from './chunk-RXGPFAMN.js';
|
|
5
|
-
import { createHash } from 'crypto';
|
|
6
|
-
import { mkdirSync, rmSync, writeFileSync, renameSync, readFileSync, existsSync } from 'fs';
|
|
7
|
-
import { join, resolve } from 'path';
|
|
8
|
-
import { stringify } from 'smol-toml';
|
|
9
|
-
import { homedir } from 'os';
|
|
10
|
-
|
|
11
|
-
var CODEX_WIRE_API = {
|
|
12
|
-
"openai-codex-responses": "responses",
|
|
13
|
-
"openai-responses": "responses",
|
|
14
|
-
"azure-openai-responses": "responses"
|
|
15
|
-
};
|
|
16
|
-
var CODEX_RESERVED_PROVIDER_IDS = /* @__PURE__ */ new Set(["openai", "ollama", "lmstudio"]);
|
|
17
|
-
function codexProviderTableId(id) {
|
|
18
|
-
return CODEX_RESERVED_PROVIDER_IDS.has(id) ? `skaile-${id}` : id;
|
|
19
|
-
}
|
|
20
|
-
var ENV_DELIVERED_CREDENTIALS = {
|
|
21
|
-
api_key_header: true,
|
|
22
|
-
bearer: true,
|
|
23
|
-
command: true
|
|
24
|
-
};
|
|
25
|
-
function selectionNamesEntry(input, selected, registry) {
|
|
26
|
-
if (selected.role && selected.modelId !== void 0) return true;
|
|
27
|
-
const selector = input.modelRef?.trim() || input.model?.trim() || "";
|
|
28
|
-
if (selector.startsWith(`${selected.providerId}/`)) return true;
|
|
29
|
-
const entry = registryEntries(registry).find(([id]) => id === selected.providerId)?.[1];
|
|
30
|
-
const modelId = selected.modelId;
|
|
31
|
-
return modelId !== void 0 && (entry?.model_map?.[modelId] !== void 0 || entry?.capabilities?.[modelId] !== void 0);
|
|
32
|
-
}
|
|
33
|
-
function renderCodexProviderTable(id, entry) {
|
|
34
|
-
if (!isEntryEnabled(entry)) return { skipped: "entry is disabled" };
|
|
35
|
-
if (entry.kind !== "llm" && entry.kind !== "embed")
|
|
36
|
-
return { skipped: `kind '${entry.kind}' is not a model endpoint` };
|
|
37
|
-
const llm = entry;
|
|
38
|
-
const preset = entry.preset ? getProviderPreset(entry.preset) : void 0;
|
|
39
|
-
const surface = llm.surface ?? preset?.surface;
|
|
40
|
-
const wireApi = surface ? CODEX_WIRE_API[surface] : void 0;
|
|
41
|
-
if (!wireApi)
|
|
42
|
-
return {
|
|
43
|
-
skipped: surface ? `codex has no wire_api for surface '${surface}'` : "entry declares no surface"
|
|
44
|
-
};
|
|
45
|
-
const credentialKind = entry.credential?.kind;
|
|
46
|
-
const table = { name: entry.label ?? id };
|
|
47
|
-
const baseUrl = resolveEntryBaseUrl(entry) ?? preset?.base_url;
|
|
48
|
-
if (baseUrl) table.base_url = baseUrl;
|
|
49
|
-
if (credentialKind && ENV_DELIVERED_CREDENTIALS[credentialKind])
|
|
50
|
-
table.env_key = providerCredentialEnvName(id);
|
|
51
|
-
table.wire_api = wireApi;
|
|
52
|
-
if (credentialKind === "oauth") table.requires_openai_auth = true;
|
|
53
|
-
if (llm.query_params && Object.keys(llm.query_params).length > 0)
|
|
54
|
-
table.query_params = { ...llm.query_params };
|
|
55
|
-
if (entry.headers && Object.keys(entry.headers).length > 0)
|
|
56
|
-
table.http_headers = { ...entry.headers };
|
|
57
|
-
return { table };
|
|
58
|
-
}
|
|
59
|
-
function buildCodexConfigDocument(input) {
|
|
60
|
-
const document = { model_providers: {} };
|
|
61
|
-
const skipped = [];
|
|
62
|
-
const entries = input.registry ? registryEntries(input.registry) : [];
|
|
63
|
-
for (const [id, entry] of entries) {
|
|
64
|
-
const rendered = renderCodexProviderTable(id, entry);
|
|
65
|
-
if ("skipped" in rendered) skipped.push({ id, reason: rendered.skipped });
|
|
66
|
-
else document.model_providers[codexProviderTableId(id)] = rendered.table;
|
|
67
|
-
}
|
|
68
|
-
if (!input.registry) return { document, skipped, warnings: [] };
|
|
69
|
-
const selected = parseModelRef(
|
|
70
|
-
input.modelRef?.trim() || input.model?.trim() || "",
|
|
71
|
-
input.registry,
|
|
72
|
-
input.roles
|
|
73
|
-
);
|
|
74
|
-
if (!selected) return { document, skipped, warnings: [] };
|
|
75
|
-
const warnings = selected.warnings;
|
|
76
|
-
const tableId = codexProviderTableId(selected.providerId);
|
|
77
|
-
if (!document.model_providers[tableId]) {
|
|
78
|
-
const reason = skipped.find((s) => s.id === selected.providerId)?.reason;
|
|
79
|
-
if (reason && selectionNamesEntry(input, selected, input.registry)) {
|
|
80
|
-
return {
|
|
81
|
-
document,
|
|
82
|
-
skipped,
|
|
83
|
-
warnings,
|
|
84
|
-
unaddressable: { id: selected.providerId, reason }
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
return { document, skipped, warnings };
|
|
88
|
-
}
|
|
89
|
-
document.model_provider = tableId;
|
|
90
|
-
if (selected.providerModelId) document.model = selected.providerModelId;
|
|
91
|
-
return {
|
|
92
|
-
document,
|
|
93
|
-
providerId: selected.providerId,
|
|
94
|
-
...selected.providerModelId ? { model: selected.providerModelId } : {},
|
|
95
|
-
skipped,
|
|
96
|
-
warnings
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
function renderCodexConfigToml(document) {
|
|
100
|
-
const ordered = {};
|
|
101
|
-
if (document.model_provider) ordered.model_provider = document.model_provider;
|
|
102
|
-
if (document.model) ordered.model = document.model;
|
|
103
|
-
ordered.model_providers = document.model_providers;
|
|
104
|
-
return `${stringify(ordered)}
|
|
105
|
-
`;
|
|
106
|
-
}
|
|
107
|
-
function codexSessionHome(config) {
|
|
108
|
-
const key = config.sessionId && /^[A-Za-z0-9._-]{1,128}$/.test(config.sessionId) ? config.sessionId : createHash("sha256").update(config.sessionId ?? config.cwd).digest("hex").slice(0, 32);
|
|
109
|
-
return join(globalSkaileDir(), "codex", key);
|
|
110
|
-
}
|
|
111
|
-
function writeCodexConfigToml(home, document) {
|
|
112
|
-
const path = join(home, "config.toml");
|
|
113
|
-
mkdirSync(home, { recursive: true, mode: 448 });
|
|
114
|
-
if (Object.keys(document.model_providers).length === 0) {
|
|
115
|
-
rmSync(path, { force: true });
|
|
116
|
-
return void 0;
|
|
117
|
-
}
|
|
118
|
-
const temporary = join(home, "config.toml.new");
|
|
119
|
-
rmSync(temporary, { force: true });
|
|
120
|
-
writeFileSync(temporary, renderCodexConfigToml(document), { mode: 384, flag: "wx" });
|
|
121
|
-
renameSync(temporary, path);
|
|
122
|
-
return path;
|
|
123
|
-
}
|
|
124
|
-
function isChatgptLogin(file) {
|
|
125
|
-
if (!file) return false;
|
|
126
|
-
try {
|
|
127
|
-
const doc = JSON.parse(readFileSync(file, "utf8"));
|
|
128
|
-
return doc.auth_mode === "chatgpt";
|
|
129
|
-
} catch {
|
|
130
|
-
return false;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
function codexLoginFile(env) {
|
|
134
|
-
const home = env.CODEX_HOME?.trim() || join(env.HOME || homedir(), ".codex");
|
|
135
|
-
const file = join(home, "auth.json");
|
|
136
|
-
return existsSync(file) ? resolve(file) : void 0;
|
|
137
|
-
}
|
|
138
|
-
function usesCodexOwnAuth(build, env, loginFile) {
|
|
139
|
-
if (build.providerId !== "openai") return false;
|
|
140
|
-
const table = build.document.model_providers[codexProviderTableId("openai")];
|
|
141
|
-
if (!table?.env_key || table.requires_openai_auth || env[table.env_key]) return false;
|
|
142
|
-
return Boolean(env.OPENAI_API_KEY || env.CODEX_API_KEY || loginFile);
|
|
143
|
-
}
|
|
144
|
-
function codexLoginFallbackNotice(session, env) {
|
|
145
|
-
if (!session.registry) return void 0;
|
|
146
|
-
const build = buildCodexConfigDocument({
|
|
147
|
-
registry: session.registry,
|
|
148
|
-
...session.modelRef ? { modelRef: session.modelRef } : {}
|
|
149
|
-
});
|
|
150
|
-
if (!usesCodexOwnAuth(build, env, codexLoginFile(env))) return void 0;
|
|
151
|
-
const unresolved = unresolvedProviderCredentials(session.registry, {
|
|
152
|
-
env,
|
|
153
|
-
providerId: "openai"
|
|
154
|
-
})[0];
|
|
155
|
-
return `provider 'openai' is not used: ${unresolved?.reason ?? "its credential is not set"}; codex uses its own login or OPENAI_API_KEY instead (check with \`skaile providers test openai\`)`;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
export { buildCodexConfigDocument, codexLoginFallbackNotice, codexLoginFile, codexProviderTableId, codexSessionHome, isChatgptLogin, usesCodexOwnAuth, writeCodexConfigToml };
|
|
159
|
-
//# sourceMappingURL=chunk-C324IAXI.js.map
|
|
160
|
-
//# sourceMappingURL=chunk-C324IAXI.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../bridge/src/codex/config-toml.ts","../bridge/src/codex/login-fallback.ts"],"names":["stringifyToml","join"],"mappings":"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","file":"chunk-C324IAXI.js","sourcesContent":["/**\n * Codex's `config.toml` adapter — the AI provider registry materialized into\n * the only provider surface the Codex CLI reads (plan §2.3, codex rows).\n *\n * Codex is a **file-shaped** harness: it takes its endpoints from\n * `$CODEX_HOME/config.toml`, never from per-request options. Both codex modes\n * therefore get a session-private `CODEX_HOME` holding a rendered document:\n *\n * - every addressable registry entry becomes `[model_providers.<id>]` with\n * `base_url`, `env_key`, `wire_api`, `query_params` and `http_headers`\n * mapping 1:1 onto the entry's `base_url`, `credential`, `surface`,\n * `query_params` and `headers`;\n * - `model_provider` and `model` at the top level name the selected entry.\n *\n * The rendered file never contains a credential **value** — `env_key` holds\n * the *name* of the per-entry variable (`SKAILE_AIP_<ID>_KEY`, minted by\n * {@link providerCredentialEnvName}), and the value rides in the child\n * environment. An `oauth` entry has no env carrier at all: it gets\n * `requires_openai_auth`, which routes codex to its own auth manager.\n *\n * **Surface coverage.** Codex names the wire protocol `wire_api` and, as of\n * codex-cli 0.154, accepts exactly one value: `responses`. `chat` was removed\n * (\"`wire_api = \\\"chat\\\"` is no longer supported\", openai/codex#7782), and an\n * unknown value fails the *whole* document at load time — one unaddressable\n * entry would take the rest of the registry down with it. Entries whose\n * surface codex cannot speak (`openai-completions`, `anthropic-messages`,\n * `bedrock-converse-stream`, `google-*`) are therefore left out and reported\n * in {@link CodexConfigBuild.skipped} for the harness to log.\n *\n * @docLink packages/bridge/harnesses#codex-harness\n */\n\nimport { createHash } from \"node:crypto\";\nimport { mkdirSync, renameSync, rmSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { globalSkaileDir } from \"@skaile/workspaces/core\";\nimport {\n type AIProviderEntry,\n type AIProviderLlmEntry,\n type AIProviderRegistry,\n type AIProviderSurface,\n isEntryEnabled,\n type MergedAIProviderRegistry,\n parseModelRef,\n registryEntries,\n type ResolvedModelRef,\n resolveEntryBaseUrl,\n} from \"@skaile/workspaces/core/provider-registry\";\nimport { stringify as stringifyToml } from \"smol-toml\";\nimport { getProviderPreset } from \"../provider-catalog.js\";\nimport { providerCredentialEnvName } from \"../provider-materialize/credential-env.js\";\n\n/**\n * `surface` → codex `wire_api`. Only the responses-flavoured surfaces have a\n * codex spelling; see the module docstring for why `openai-completions` is\n * absent rather than mapped to the removed `chat` value.\n */\nconst CODEX_WIRE_API: Partial<Record<AIProviderSurface, string>> = {\n \"openai-codex-responses\": \"responses\",\n \"openai-responses\": \"responses\",\n \"azure-openai-responses\": \"responses\",\n};\n\n/**\n * Provider ids codex reserves for its own built-ins. A `[model_providers.<id>]`\n * table under one of them fails the whole document (\"model_providers contains\n * reserved built-in provider IDs\"), so such an entry is rendered under\n * {@link codexProviderTableId}.\n */\nconst CODEX_RESERVED_PROVIDER_IDS: ReadonlySet<string> = new Set([\"openai\", \"ollama\", \"lmstudio\"]);\n\n/**\n * The `[model_providers.<id>]` table name for a registry entry: the entry id,\n * or `skaile-<id>` when codex reserves that id (the `openai` preset).\n */\nexport function codexProviderTableId(id: string): string {\n return CODEX_RESERVED_PROVIDER_IDS.has(id) ? `skaile-${id}` : id;\n}\n\n/** Credential kinds whose value the adapter hands over in an env var. */\nconst ENV_DELIVERED_CREDENTIALS: Record<string, true> = {\n api_key_header: true,\n bearer: true,\n command: true,\n};\n\n/** One `[model_providers.<id>]` table, in codex's own vocabulary. */\nexport interface CodexModelProviderTable {\n /** Display name. Codex rejects a provider table without one. */\n name: string;\n base_url?: string;\n /** Name of the variable carrying the credential — never the credential. */\n env_key?: string;\n wire_api?: string;\n /** Routes codex to its own auth manager (ChatGPT subscription / stored key). */\n requires_openai_auth?: boolean;\n query_params?: Record<string, string>;\n http_headers?: Record<string, string>;\n}\n\n/** The subset of codex's `config.toml` this adapter owns. */\nexport interface CodexConfigDocument {\n /** Table id the session addresses (see {@link codexProviderTableId}); absent when nothing rendered. */\n model_provider?: string;\n /** Provider-side model id. */\n model?: string;\n model_providers: Record<string, CodexModelProviderTable>;\n}\n\n/** An entry codex cannot address, and why. */\nexport interface CodexSkippedEntry {\n id: string;\n reason: string;\n}\n\n/** Result of {@link buildCodexConfigDocument}. */\nexport interface CodexConfigBuild {\n document: CodexConfigDocument;\n /** Selected registry entry id (not the table id), when it rendered. */\n providerId?: string;\n /** Provider-side model id of the selection, when the selector named one. */\n model?: string;\n /**\n * Entries left out of the document. Non-fatal: codex keeps its built-in\n * providers, so a session whose selection was skipped behaves exactly as it\n * did before the registry existed.\n */\n skipped: CodexSkippedEntry[];\n /** Notes from `modelRef` resolution (dangling role, disabled provider, …). */\n warnings: string[];\n /**\n * Set when the selector named an entry codex cannot address: the session\n * must stop with `reason`, not fall back to codex's built-in providers.\n */\n unaddressable?: { id: string; reason: string };\n}\n\n/**\n * Whether the session's selector named the entry `selected` resolved to, rather\n * than reaching it by registry order alone.\n */\nfunction selectionNamesEntry(\n input: CodexConfigInput,\n selected: ResolvedModelRef,\n registry: AIProviderRegistry | MergedAIProviderRegistry,\n): boolean {\n if (selected.role && selected.modelId !== undefined) return true;\n const selector = input.modelRef?.trim() || input.model?.trim() || \"\";\n if (selector.startsWith(`${selected.providerId}/`)) return true;\n const entry = registryEntries(registry).find(([id]) => id === selected.providerId)?.[1] as\n | AIProviderLlmEntry\n | undefined;\n const modelId = selected.modelId;\n return (\n modelId !== undefined &&\n (entry?.model_map?.[modelId] !== undefined || entry?.capabilities?.[modelId] !== undefined)\n );\n}\n\n/** Inputs {@link buildCodexConfigDocument} reads off an `AgentConfig`. */\nexport interface CodexConfigInput {\n registry?: AIProviderRegistry | MergedAIProviderRegistry;\n /** `\"<providerId>/<modelId>\"`, a bare model id, or `\"@role\"`. */\n modelRef?: string;\n /** Legacy model field, used as the selector when `modelRef` is absent. */\n model?: string;\n /** Roles table (`skaile.yaml`), consulted for an `@role` selector. */\n roles?: Record<string, string>;\n}\n\n/**\n * Render one entry as a codex provider table, or explain why codex cannot\n * address it.\n */\nexport function renderCodexProviderTable(\n id: string,\n entry: AIProviderEntry,\n): { table: CodexModelProviderTable } | { skipped: string } {\n if (!isEntryEnabled(entry)) return { skipped: \"entry is disabled\" };\n if (entry.kind !== \"llm\" && entry.kind !== \"embed\")\n return { skipped: `kind '${entry.kind}' is not a model endpoint` };\n const llm = entry as AIProviderLlmEntry;\n // `surface` and `base_url` may live on the catalog preset the entry names —\n // the catalog layer fills them during a merge, but an entry handed straight\n // to a harness has not necessarily been through one.\n const preset = entry.preset ? getProviderPreset(entry.preset) : undefined;\n const surface = llm.surface ?? preset?.surface;\n const wireApi = surface ? CODEX_WIRE_API[surface] : undefined;\n if (!wireApi)\n return {\n skipped: surface\n ? `codex has no wire_api for surface '${surface}'`\n : \"entry declares no surface\",\n };\n const credentialKind = entry.credential?.kind;\n const table: CodexModelProviderTable = { name: entry.label ?? id };\n const baseUrl = resolveEntryBaseUrl(entry) ?? preset?.base_url;\n if (baseUrl) table.base_url = baseUrl;\n if (credentialKind && ENV_DELIVERED_CREDENTIALS[credentialKind])\n table.env_key = providerCredentialEnvName(id);\n table.wire_api = wireApi;\n if (credentialKind === \"oauth\") table.requires_openai_auth = true;\n if (llm.query_params && Object.keys(llm.query_params).length > 0)\n table.query_params = { ...llm.query_params };\n if (entry.headers && Object.keys(entry.headers).length > 0)\n table.http_headers = { ...entry.headers };\n return { table };\n}\n\n/**\n * Build the document for a session: every addressable entry, plus the\n * selection when it resolved to one of them.\n */\nexport function buildCodexConfigDocument(input: CodexConfigInput): CodexConfigBuild {\n const document: CodexConfigDocument = { model_providers: {} };\n const skipped: CodexSkippedEntry[] = [];\n const entries = input.registry ? registryEntries(input.registry) : [];\n for (const [id, entry] of entries) {\n const rendered = renderCodexProviderTable(id, entry);\n if (\"skipped\" in rendered) skipped.push({ id, reason: rendered.skipped });\n else document.model_providers[codexProviderTableId(id)] = rendered.table;\n }\n\n if (!input.registry) return { document, skipped, warnings: [] };\n // An empty selector resolves the same way a bare one does — first entry in\n // registry order. A session that configured an endpoint and named no model\n // still means that endpoint, not codex's built-in default.\n const selected = parseModelRef(\n input.modelRef?.trim() || input.model?.trim() || \"\",\n input.registry,\n input.roles,\n );\n if (!selected) return { document, skipped, warnings: [] };\n const warnings = selected.warnings;\n const tableId = codexProviderTableId(selected.providerId);\n if (!document.model_providers[tableId]) {\n // A selector that names the entry (`ollama/llama3`, a role or a model its\n // `model_map` lists) and cannot be rendered must not fall through to\n // codex's built-in OpenAI: the prompt would go to a provider the user did\n // not pick. A bare model id that matched no entry only landed on the first\n // entry by registry order, so codex's own providers stay the right answer.\n const reason = skipped.find((s) => s.id === selected.providerId)?.reason;\n if (reason && selectionNamesEntry(input, selected, input.registry)) {\n return {\n document,\n skipped,\n warnings,\n unaddressable: { id: selected.providerId, reason },\n };\n }\n return { document, skipped, warnings };\n }\n document.model_provider = tableId;\n if (selected.providerModelId) document.model = selected.providerModelId;\n return {\n document,\n providerId: selected.providerId,\n ...(selected.providerModelId ? { model: selected.providerModelId } : {}),\n skipped,\n warnings,\n };\n}\n\n/** Serialize a document to TOML. Deterministic: registry order throughout. */\nexport function renderCodexConfigToml(document: CodexConfigDocument): string {\n const ordered: Record<string, unknown> = {};\n if (document.model_provider) ordered.model_provider = document.model_provider;\n if (document.model) ordered.model = document.model;\n ordered.model_providers = document.model_providers;\n return `${stringifyToml(ordered)}\\n`;\n}\n\n/**\n * The session-private codex home.\n *\n * Deliberately outside `cwd`: codex's `workspace-write` sandbox makes the\n * working tree writable by the model, and a config home inside it would let a\n * turn rewrite its own `base_url`. `$SKAILE_HOME` (honoured by\n * {@link globalSkaileDir}) relocates the whole tree, which is also the test\n * seam.\n */\nexport function codexSessionHome(config: { cwd: string; sessionId?: string }): string {\n const key =\n config.sessionId && /^[A-Za-z0-9._-]{1,128}$/.test(config.sessionId)\n ? config.sessionId\n : createHash(\"sha256\")\n .update(config.sessionId ?? config.cwd)\n .digest(\"hex\")\n .slice(0, 32);\n return join(globalSkaileDir(), \"codex\", key);\n}\n\n/**\n * Write `<home>/config.toml`, creating the home always. Atomic: a\n * partially written document would fail codex's config load for the whole\n * session.\n *\n * A document with no provider tables says nothing codex does not already\n * know, so nothing is written and a file left by an earlier render is\n * removed — a session that no longer carries a registry must not keep\n * answering to the one it used to have.\n *\n * @returns the absolute path written, or `undefined` when there was nothing\n * to render.\n */\nexport function writeCodexConfigToml(\n home: string,\n document: CodexConfigDocument,\n): string | undefined {\n const path = join(home, \"config.toml\");\n // codex exits when CODEX_HOME names a directory that does not exist, so the\n // home exists before the early return too.\n mkdirSync(home, { recursive: true, mode: 0o700 });\n if (Object.keys(document.model_providers).length === 0) {\n rmSync(path, { force: true });\n return undefined;\n }\n const temporary = join(home, \"config.toml.new\");\n rmSync(temporary, { force: true });\n writeFileSync(temporary, renderCodexConfigToml(document), { mode: 0o600, flag: \"wx\" });\n renameSync(temporary, path);\n return path;\n}\n","/**\n * The codex CLI's own credentials, and when they stand in for the registry's `openai` entry.\n *\n * An `openai` registry entry whose key variable is not exported cannot be rendered as a working\n * `[model_providers.*]` table. The omp harness then answers with its own login; codex does the\n * same (p1871): it drops the entry and runs on codex's built-in `openai` provider, which uses\n * the ChatGPT login (`~/.codex/auth.json`) or an exported `OPENAI_API_KEY`. Every other entry\n * whose key is missing still refuses, naming the variable to export.\n */\n\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join, resolve } from \"node:path\";\nimport type {\n AIProviderRegistry,\n MergedAIProviderRegistry,\n} from \"@skaile/workspaces/core/provider-registry\";\nimport { unresolvedProviderCredentials } from \"../provider-materialize/credential-env.js\";\nimport {\n buildCodexConfigDocument,\n type CodexConfigBuild,\n codexProviderTableId,\n} from \"./config-toml.js\";\n\n/**\n * Whether the codex login file at `file` is a ChatGPT sign-in (`auth_mode: chatgpt`) and not a\n * stored API key. `false` for no file or one that does not parse.\n */\nexport function isChatgptLogin(file: string | undefined): boolean {\n if (!file) return false;\n try {\n const doc = JSON.parse(readFileSync(file, \"utf8\")) as { auth_mode?: unknown };\n return doc.auth_mode === \"chatgpt\";\n } catch {\n return false;\n }\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 * Whether the session runs on codex's own auth instead of the selected `openai` registry entry:\n * the entry is selected, its key variable (`env_key` of the rendered table) is not set in `env`,\n * and codex has a login file or an exported key to use instead.\n *\n * @param build - The rendered codex config of the session.\n * @param env - The environment the child gets, credential variables included.\n * @param loginFile - The codex login file, when there is one.\n */\nexport function usesCodexOwnAuth(\n build: CodexConfigBuild,\n env: Record<string, string | undefined>,\n loginFile: string | undefined,\n): boolean {\n if (build.providerId !== \"openai\") return false;\n const table = build.document.model_providers[codexProviderTableId(\"openai\")];\n if (!table?.env_key || table.requires_openai_auth || env[table.env_key]) return false;\n return Boolean(env.OPENAI_API_KEY || env.CODEX_API_KEY || loginFile);\n}\n\n/**\n * The line `run` and `repl` print when a codex session falls back to codex's own auth because\n * the `openai` entry has no key (the `omp` line of the same kind, p1871), or `undefined`.\n *\n * @param session - The session's registry and model selector.\n * @param env - Process environment plus the session's credential variables.\n */\nexport function codexLoginFallbackNotice(\n session: { registry?: AIProviderRegistry | MergedAIProviderRegistry; modelRef?: string },\n env: Record<string, string | undefined>,\n): string | undefined {\n if (!session.registry) return undefined;\n const build = buildCodexConfigDocument({\n registry: session.registry,\n ...(session.modelRef ? { modelRef: session.modelRef } : {}),\n });\n if (!usesCodexOwnAuth(build, env, codexLoginFile(env))) return undefined;\n const unresolved = unresolvedProviderCredentials(session.registry, {\n env,\n providerId: \"openai\",\n })[0];\n return `provider 'openai' is not used: ${unresolved?.reason ?? \"its credential is not set\"}; codex uses its own login or OPENAI_API_KEY instead (check with \\`skaile providers test openai\\`)`;\n}\n"]}
|