@skaile/workspaces 6.4.0 → 6.5.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 +50 -1
- package/README.md +4 -0
- package/dist/ai-sdk.js +54 -24
- package/dist/ai-sdk.js.map +1 -1
- package/dist/app-sdk/index.js +1 -1
- package/dist/{asset-feeds-UJSYGKCX.js → asset-feeds-4I6Z4OI3.js} +21 -21
- package/dist/{asset-feeds-UJSYGKCX.js.map → asset-feeds-4I6Z4OI3.js.map} +1 -1
- package/dist/asset-manager/catalog-deployer.js +7 -7
- package/dist/asset-manager/index.js +13 -13
- package/dist/asset-manager/installer.js +9 -9
- package/dist/asset-manager/renderers.js +8 -8
- package/dist/asset-manager/src/index.d.ts +114 -12
- package/dist/asset-manager/src/index.d.ts.map +1 -1
- package/dist/asset-manager/src/installer.d.ts +6 -0
- package/dist/asset-manager/src/installer.d.ts.map +1 -1
- package/dist/bridge/harnesses/claude-sdk.js +23 -18
- package/dist/bridge/harnesses/claude-sdk.js.map +1 -1
- package/dist/bridge/harnesses/codex.js +36 -34
- package/dist/bridge/harnesses/codex.js.map +1 -1
- package/dist/bridge/harnesses/continue.js +11 -12
- package/dist/bridge/harnesses/continue.js.map +1 -1
- package/dist/bridge/harnesses/echo.js +4 -5
- package/dist/bridge/harnesses/echo.js.map +1 -1
- package/dist/bridge/harnesses/gemini.js +8 -9
- package/dist/bridge/harnesses/goose.js +11 -12
- package/dist/bridge/harnesses/goose.js.map +1 -1
- package/dist/bridge/harnesses/omp.js +16 -11
- package/dist/bridge/harnesses/omp.js.map +1 -1
- package/dist/bridge/harnesses/opencode.js +11 -12
- package/dist/bridge/harnesses/opencode.js.map +1 -1
- package/dist/bridge/harnesses/qwen.js +8 -9
- package/dist/bridge/harnesses/qwen.js.map +1 -1
- package/dist/bridge/index.js +19 -20
- package/dist/bridge/src/ai-sdk.d.ts +0 -2
- package/dist/bridge/src/ai-sdk.d.ts.map +1 -1
- package/dist/bridge/src/codex/login-fallback.d.ts +39 -0
- package/dist/bridge/src/codex/login-fallback.d.ts.map +1 -0
- package/dist/bridge/src/error-classifier.d.ts +6 -0
- package/dist/bridge/src/error-classifier.d.ts.map +1 -1
- package/dist/bridge/src/harnesses/claude-sdk.d.ts.map +1 -1
- package/dist/bridge/src/harnesses/codex.d.ts +0 -6
- package/dist/bridge/src/harnesses/codex.d.ts.map +1 -1
- package/dist/bridge/src/harnesses/omp.d.ts.map +1 -1
- package/dist/bridge/src/index.d.ts +1 -0
- package/dist/bridge/src/index.d.ts.map +1 -1
- package/dist/{chunk-WENTJ5KP.js → chunk-22ZX33H6.js} +6 -6
- package/dist/{chunk-WENTJ5KP.js.map → chunk-22ZX33H6.js.map} +1 -1
- package/dist/{chunk-U6S5CXKB.js → chunk-23SG4JRV.js} +4 -4
- package/dist/{chunk-U6S5CXKB.js.map → chunk-23SG4JRV.js.map} +1 -1
- package/dist/{chunk-YJNE4V2M.js → chunk-2HS357RA.js} +70 -37
- package/dist/chunk-2HS357RA.js.map +1 -0
- package/dist/{chunk-O7KAQQAI.js → chunk-2IAWVUW3.js} +4 -4
- package/dist/{chunk-O7KAQQAI.js.map → chunk-2IAWVUW3.js.map} +1 -1
- package/dist/{chunk-GTMANMBZ.js → chunk-2M3VLKT2.js} +3 -3
- package/dist/{chunk-GTMANMBZ.js.map → chunk-2M3VLKT2.js.map} +1 -1
- package/dist/{chunk-BUU2DLPC.js → chunk-3DA74PLW.js} +3 -3
- package/dist/{chunk-BUU2DLPC.js.map → chunk-3DA74PLW.js.map} +1 -1
- package/dist/{chunk-SISUT7VR.js → chunk-3KSLUVKB.js} +7 -7
- package/dist/{chunk-SISUT7VR.js.map → chunk-3KSLUVKB.js.map} +1 -1
- package/dist/{chunk-6OHZUUR7.js → chunk-5DE3DGVR.js} +11 -5
- package/dist/chunk-5DE3DGVR.js.map +1 -0
- package/dist/{chunk-45KLCFQB.js → chunk-6EKQENAP.js} +6 -6
- package/dist/{chunk-45KLCFQB.js.map → chunk-6EKQENAP.js.map} +1 -1
- package/dist/{chunk-E237FGGX.js → chunk-6Y3SC7O4.js} +4 -4
- package/dist/{chunk-E237FGGX.js.map → chunk-6Y3SC7O4.js.map} +1 -1
- package/dist/{chunk-IYZAJ2J2.js → chunk-7EMS2GZO.js} +36 -36
- package/dist/chunk-7EMS2GZO.js.map +1 -0
- package/dist/{chunk-UBLZALKP.js → chunk-7H4GTP7V.js} +3 -3
- package/dist/{chunk-UBLZALKP.js.map → chunk-7H4GTP7V.js.map} +1 -1
- package/dist/{chunk-RKI35EAN.js → chunk-AFTZNR2W.js} +3 -3
- package/dist/{chunk-RKI35EAN.js.map → chunk-AFTZNR2W.js.map} +1 -1
- package/dist/{chunk-VV2DJT4I.js → chunk-AVFRFGM2.js} +3 -3
- package/dist/{chunk-VV2DJT4I.js.map → chunk-AVFRFGM2.js.map} +1 -1
- package/dist/{chunk-5T3DTK7A.js → chunk-B436SG5P.js} +8 -9
- package/dist/chunk-B436SG5P.js.map +1 -0
- package/dist/{chunk-EXRQKOY6.js → chunk-B4BLJUYN.js} +69 -26
- package/dist/chunk-B4BLJUYN.js.map +1 -0
- package/dist/{chunk-HXZ3FQQN.js → chunk-DNXPXJ3X.js} +82 -50
- package/dist/chunk-DNXPXJ3X.js.map +1 -0
- package/dist/{chunk-QSIFEHSN.js → chunk-E6UWI3TP.js} +3 -3
- package/dist/{chunk-QSIFEHSN.js.map → chunk-E6UWI3TP.js.map} +1 -1
- package/dist/{chunk-PTBX55QF.js → chunk-EN5REMWV.js} +4 -4
- package/dist/{chunk-PTBX55QF.js.map → chunk-EN5REMWV.js.map} +1 -1
- package/dist/{chunk-G63KOHFS.js → chunk-EO7KGX6P.js} +4 -4
- package/dist/{chunk-G63KOHFS.js.map → chunk-EO7KGX6P.js.map} +1 -1
- package/dist/{chunk-TF5CWJQZ.js → chunk-ETF6Q3R3.js} +23 -80
- package/dist/chunk-ETF6Q3R3.js.map +1 -0
- package/dist/{chunk-3ENE6ZOF.js → chunk-G4NCSYWR.js} +9 -8
- package/dist/chunk-G4NCSYWR.js.map +1 -0
- package/dist/{chunk-VZU67OKK.js → chunk-G5SYFFMD.js} +2 -2
- package/dist/{chunk-VZU67OKK.js.map → chunk-G5SYFFMD.js.map} +1 -1
- package/dist/{chunk-L4OYPFLB.js → chunk-HPA3RP5E.js} +4 -4
- package/dist/{chunk-L4OYPFLB.js.map → chunk-HPA3RP5E.js.map} +1 -1
- package/dist/{chunk-TGB4E5Z6.js → chunk-IS3NIZBX.js} +414 -95
- package/dist/chunk-IS3NIZBX.js.map +1 -0
- package/dist/{chunk-6WQGJF65.js → chunk-IWKKTCXY.js} +85 -16
- package/dist/chunk-IWKKTCXY.js.map +1 -0
- package/dist/{chunk-2WOA3TKK.js → chunk-J5JWLKLB.js} +34 -19
- package/dist/chunk-J5JWLKLB.js.map +1 -0
- package/dist/chunk-J6YPKMMY.js +83 -0
- package/dist/chunk-J6YPKMMY.js.map +1 -0
- package/dist/{chunk-TDKZL5ZC.js → chunk-K4DHYTUM.js} +4 -4
- package/dist/{chunk-TDKZL5ZC.js.map → chunk-K4DHYTUM.js.map} +1 -1
- package/dist/{chunk-24D7IW5O.js → chunk-KA2GLAPS.js} +7 -8
- package/dist/chunk-KA2GLAPS.js.map +1 -0
- package/dist/{chunk-BOS7P2Y4.js → chunk-KSH5CFQS.js} +3 -3
- package/dist/{chunk-BOS7P2Y4.js.map → chunk-KSH5CFQS.js.map} +1 -1
- package/dist/{chunk-UUKCPPTQ.js → chunk-KSUT5KAE.js} +3 -3
- package/dist/{chunk-UUKCPPTQ.js.map → chunk-KSUT5KAE.js.map} +1 -1
- package/dist/{chunk-TPQKFX6X.js → chunk-KUADKMNX.js} +4 -4
- package/dist/{chunk-TPQKFX6X.js.map → chunk-KUADKMNX.js.map} +1 -1
- package/dist/{chunk-L45IHRDH.js → chunk-KYNCY3F3.js} +3 -3
- package/dist/{chunk-L45IHRDH.js.map → chunk-KYNCY3F3.js.map} +1 -1
- package/dist/{chunk-ACBL7X62.js → chunk-LE6QS4PG.js} +3 -3
- package/dist/{chunk-ACBL7X62.js.map → chunk-LE6QS4PG.js.map} +1 -1
- package/dist/{chunk-6UP2EDFN.js → chunk-NSIOBKDX.js} +313 -4
- package/dist/chunk-NSIOBKDX.js.map +1 -0
- package/dist/{chunk-YFGXYQW4.js → chunk-OBZ5WQ32.js} +3 -3
- package/dist/{chunk-YFGXYQW4.js.map → chunk-OBZ5WQ32.js.map} +1 -1
- package/dist/{chunk-JSWMRYLM.js → chunk-OLHHN3NO.js} +31 -7
- package/dist/chunk-OLHHN3NO.js.map +1 -0
- package/dist/{chunk-UAOHR6AL.js → chunk-S7DVT2BV.js} +4 -4
- package/dist/{chunk-UAOHR6AL.js.map → chunk-S7DVT2BV.js.map} +1 -1
- package/dist/{chunk-IZV3HDVG.js → chunk-SN663FCA.js} +5 -5
- package/dist/{chunk-IZV3HDVG.js.map → chunk-SN663FCA.js.map} +1 -1
- package/dist/{serve-preflight-NPWI4MV6.js → chunk-SRTWKZP2.js} +30 -61
- package/dist/chunk-SRTWKZP2.js.map +1 -0
- package/dist/{chunk-6X3GDPCB.js → chunk-SZTHSPRC.js} +3 -4
- package/dist/chunk-SZTHSPRC.js.map +1 -0
- package/dist/{chunk-V4OXHEWY.js → chunk-T7HGEMNB.js} +4 -4
- package/dist/{chunk-V4OXHEWY.js.map → chunk-T7HGEMNB.js.map} +1 -1
- package/dist/{chunk-DCJ4BION.js → chunk-TDPQOR3C.js} +2 -2
- package/dist/{chunk-DCJ4BION.js.map → chunk-TDPQOR3C.js.map} +1 -1
- package/dist/{chunk-GBXQFJ4G.js → chunk-TGUMN5G7.js} +310 -175
- package/dist/chunk-TGUMN5G7.js.map +1 -0
- package/dist/{chunk-UVTN4O7N.js → chunk-THX5EE3K.js} +33 -10
- package/dist/chunk-THX5EE3K.js.map +1 -0
- package/dist/{chunk-VSCLUPGZ.js → chunk-TNQLDEM6.js} +82 -32
- package/dist/chunk-TNQLDEM6.js.map +1 -0
- package/dist/{chunk-P7EL7QRD.js → chunk-TROEC2Z2.js} +34 -20
- package/dist/chunk-TROEC2Z2.js.map +1 -0
- package/dist/{chunk-CK3CJSRY.js → chunk-U6KRTCNA.js} +4 -4
- package/dist/{chunk-CK3CJSRY.js.map → chunk-U6KRTCNA.js.map} +1 -1
- package/dist/{chunk-ABVWUM2E.js → chunk-UMLCKKIA.js} +47 -25
- package/dist/chunk-UMLCKKIA.js.map +1 -0
- package/dist/{chunk-Q4XWCVFA.js → chunk-USVUS4DJ.js} +8 -8
- package/dist/{chunk-Q4XWCVFA.js.map → chunk-USVUS4DJ.js.map} +1 -1
- package/dist/{chunk-DF5WJC3Q.js → chunk-UZET67SO.js} +4 -4
- package/dist/{chunk-DF5WJC3Q.js.map → chunk-UZET67SO.js.map} +1 -1
- package/dist/{chunk-IZQOO6MN.js → chunk-V5KG6CCV.js} +2 -2
- package/dist/{chunk-IZQOO6MN.js.map → chunk-V5KG6CCV.js.map} +1 -1
- package/dist/{chunk-76FLBODK.js → chunk-VT6G5AJV.js} +10 -7
- package/dist/chunk-VT6G5AJV.js.map +1 -0
- package/dist/{chunk-C7TQARGC.js → chunk-W5KCAWGN.js} +3 -3
- package/dist/{chunk-C7TQARGC.js.map → chunk-W5KCAWGN.js.map} +1 -1
- package/dist/{chunk-HSF665NV.js → chunk-WFLQMAR5.js} +5 -5
- package/dist/{chunk-HSF665NV.js.map → chunk-WFLQMAR5.js.map} +1 -1
- package/dist/{chunk-ZWCGJYR7.js → chunk-X44XKBZX.js} +3 -3
- package/dist/{chunk-ZWCGJYR7.js.map → chunk-X44XKBZX.js.map} +1 -1
- package/dist/{chunk-5NHBLKKU.js → chunk-YBEJCQE5.js} +3 -3
- package/dist/{chunk-5NHBLKKU.js.map → chunk-YBEJCQE5.js.map} +1 -1
- package/dist/{chunk-BX7PSWJA.js → chunk-YRC2EFOU.js} +4 -4
- package/dist/{chunk-BX7PSWJA.js.map → chunk-YRC2EFOU.js.map} +1 -1
- package/dist/{chunk-76WSWPOB.js → chunk-Z2X7UZEZ.js} +15 -6
- package/dist/chunk-Z2X7UZEZ.js.map +1 -0
- package/dist/{chunk-U3SXCVR7.js → chunk-ZUU2PLA3.js} +4 -4
- package/dist/{chunk-U3SXCVR7.js.map → chunk-ZUU2PLA3.js.map} +1 -1
- package/dist/{claude-code-UBT4ZME7.js → claude-code-JY6CYEG7.js} +4 -4
- package/dist/{claude-code-UBT4ZME7.js.map → claude-code-JY6CYEG7.js.map} +1 -1
- package/dist/cli/index.js +306 -160
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/src/commands/cache.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/deploy.d.ts.map +1 -1
- package/dist/cli/src/commands/harness.d.ts +5 -4
- package/dist/cli/src/commands/harness.d.ts.map +1 -1
- package/dist/cli/src/commands/integration.d.ts.map +1 -1
- package/dist/cli/src/commands/library-cmd.d.ts.map +1 -1
- package/dist/cli/src/commands/library-index.d.ts +6 -0
- package/dist/cli/src/commands/library-index.d.ts.map +1 -1
- package/dist/cli/src/commands/migrate-files.d.ts +3 -6
- package/dist/cli/src/commands/migrate-files.d.ts.map +1 -1
- package/dist/cli/src/commands/migrate-harness.d.ts +4 -3
- package/dist/cli/src/commands/migrate-harness.d.ts.map +1 -1
- package/dist/cli/src/commands/migrate.d.ts +2 -2
- package/dist/cli/src/commands/outdated.d.ts.map +1 -1
- package/dist/cli/src/commands/plugin-registry-cmd.d.ts.map +1 -1
- package/dist/cli/src/commands/project.d.ts +7 -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 +21 -0
- 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-manifest.d.ts.map +1 -1
- package/dist/cli/src/commands/source.d.ts +8 -0
- package/dist/cli/src/commands/source.d.ts.map +1 -1
- package/dist/cli/src/commands/update.d.ts.map +1 -1
- package/dist/cli/src/commands/validate-instances.d.ts +6 -0
- package/dist/cli/src/commands/validate-instances.d.ts.map +1 -1
- package/dist/cli/src/commands/validate.d.ts.map +1 -1
- package/dist/cli/src/commands/verify.d.ts.map +1 -1
- package/dist/cli/src/config-checks.d.ts +8 -0
- 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/helpers.d.ts +3 -2
- package/dist/cli/src/helpers.d.ts.map +1 -1
- package/dist/cli/src/plugin-store/index.d.ts.map +1 -1
- package/dist/cli/src/plugin-store/reconcile.d.ts.map +1 -1
- package/dist/cli/src/plugin-store/spec.d.ts +1 -0
- package/dist/cli/src/plugin-store/spec.d.ts.map +1 -1
- package/dist/cli/src/skill-checks.d.ts +2 -0
- package/dist/cli/src/skill-checks.d.ts.map +1 -1
- package/dist/connectors/config.js +5 -5
- package/dist/connectors/index.js +23 -24
- package/dist/connectors/src/index.d.ts +2 -2
- package/dist/connectors/src/index.d.ts.map +1 -1
- package/dist/connectors/src/managed-gitconfig.d.ts +22 -0
- package/dist/connectors/src/managed-gitconfig.d.ts.map +1 -1
- package/dist/connectors/src/npm-installer.d.ts +11 -3
- package/dist/connectors/src/npm-installer.d.ts.map +1 -1
- package/dist/connectors-VLFOQNS6.js +49 -0
- package/dist/{connectors-4WH32NK2.js.map → connectors-VLFOQNS6.js.map} +1 -1
- package/dist/connectors-shared/index.js +2 -2
- package/dist/core/index.js +6 -6
- 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/agent-instances.d.ts +6 -0
- package/dist/core/src/agent-instances.d.ts.map +1 -1
- package/dist/core/src/config-key-diagnostics.d.ts +2 -1
- package/dist/core/src/config-key-diagnostics.d.ts.map +1 -1
- package/dist/core/src/index.d.ts +4 -4
- package/dist/core/src/index.d.ts.map +1 -1
- package/dist/core/src/lock.d.ts +20 -1
- package/dist/core/src/lock.d.ts.map +1 -1
- package/dist/core/src/manifest-yaml-editor.d.ts +4 -1
- package/dist/core/src/manifest-yaml-editor.d.ts.map +1 -1
- package/dist/core/src/models.d.ts +10 -0
- package/dist/core/src/models.d.ts.map +1 -1
- package/dist/core/src/repo-manager.d.ts +11 -0
- package/dist/core/src/repo-manager.d.ts.map +1 -1
- package/dist/core/src/runtime-assets.d.ts +12 -1
- package/dist/core/src/runtime-assets.d.ts.map +1 -1
- package/dist/core/src/walker.d.ts +3 -0
- package/dist/core/src/walker.d.ts.map +1 -1
- package/dist/core/src/workspace-config.d.ts +4 -2
- package/dist/core/src/workspace-config.d.ts.map +1 -1
- package/dist/core/workspace-config.js +4 -4
- package/dist/deploy/index.js +6 -6
- package/dist/discovery/index.js +5 -5
- package/dist/{ensure-sources-UC2RBYMP.js → ensure-sources-6O54DUQB.js} +31 -31
- package/dist/ensure-sources-6O54DUQB.js.map +1 -0
- package/dist/factory-assets/connectors/box.js +23 -24
- package/dist/factory-assets/connectors/deploy.js +23 -24
- package/dist/factory-assets/connectors/devserver.js +23 -24
- package/dist/factory-assets/connectors/flow/adapter.js +23 -24
- package/dist/factory-assets/connectors/flow/engine.js +7 -7
- package/dist/factory-assets/connectors/flow/run-flow.js +25 -26
- package/dist/factory-assets/connectors/flow.js +23 -24
- package/dist/factory-assets/connectors/git.js +23 -24
- package/dist/factory-assets/connectors/gmail.js +23 -24
- package/dist/factory-assets/connectors/googledrive.js +23 -24
- package/dist/factory-assets/connectors/local.js +23 -24
- package/dist/factory-assets/connectors/mattermost.js +23 -24
- package/dist/factory-assets/connectors/memory.js +23 -24
- package/dist/factory-assets/connectors/minio.js +23 -24
- package/dist/factory-assets/connectors/postgres.js +23 -24
- package/dist/factory-assets/connectors/s3.js +23 -24
- package/dist/factory-assets/connectors/sharepoint.js +23 -24
- package/dist/factory-assets/connectors/sqlite.js +23 -24
- package/dist/factory-assets/connectors/static-server.js +23 -24
- package/dist/factory-assets/connectors/tunnel.js +23 -24
- package/dist/factory-assets/connectors/webdav.js +23 -24
- package/dist/factory-assets/connectors/xstate-store.js +23 -24
- package/dist/factory-assets/connectors/xstate.js +23 -24
- package/dist/factory-assets/skills/authoring-skaile-assets/SKILL.md +2 -1
- package/dist/{flows-LYTKNGKE.js → flows-CIUPK7SB.js} +11 -11
- package/dist/{flows-LYTKNGKE.js.map → flows-CIUPK7SB.js.map} +1 -1
- package/dist/{helpers-SSSKT5XK.js → helpers-YHDQHQEQ.js} +28 -29
- package/dist/{helpers-SSSKT5XK.js.map → helpers-YHDQHQEQ.js.map} +1 -1
- package/dist/library/index.js +10 -10
- package/dist/library/install.js +4 -4
- package/dist/library/src/manifest-writer.d.ts +9 -0
- package/dist/library/src/manifest-writer.d.ts.map +1 -1
- package/dist/library/src/remote/remote-catalog-source.d.ts +9 -0
- package/dist/library/src/remote/remote-catalog-source.d.ts.map +1 -1
- package/dist/library/src/remote/rest-catalog-source.d.ts +1 -0
- package/dist/library/src/remote/rest-catalog-source.d.ts.map +1 -1
- package/dist/{library-publish-GQMNTAKK.js → library-publish-MUGUST43.js} +53 -53
- package/dist/{library-publish-GQMNTAKK.js.map → library-publish-MUGUST43.js.map} +1 -1
- package/dist/model-endpoint/index.js +9 -10
- package/dist/open-library-BVQCB37E.js +57 -0
- package/dist/{open-library-XGUCUJYE.js.map → open-library-BVQCB37E.js.map} +1 -1
- package/dist/{open-registry-DIFEPDF6.js → open-registry-JCSIAKEC.js} +14 -14
- package/dist/{open-registry-DIFEPDF6.js.map → open-registry-JCSIAKEC.js.map} +1 -1
- package/dist/{paths-G4GFJLE2.js → paths-XLKCAFRZ.js} +9 -9
- package/dist/{paths-G4GFJLE2.js.map → paths-XLKCAFRZ.js.map} +1 -1
- package/dist/{plugin-store-BBLDFD3L.js → plugin-store-NGRUTCJI.js} +9 -9
- package/dist/{plugin-store-BBLDFD3L.js.map → plugin-store-NGRUTCJI.js.map} +1 -1
- package/dist/project-BGYMLAS6.js +88 -0
- package/dist/{project-LB745WVZ.js.map → project-BGYMLAS6.js.map} +1 -1
- package/dist/resolver/index.js +7 -7
- package/dist/runner/index.js +38 -39
- package/dist/runner/src/composition/resolve-instance.d.ts.map +1 -1
- package/dist/runner/src/composition/resolve.d.ts +6 -0
- package/dist/runner/src/composition/resolve.d.ts.map +1 -1
- package/dist/runner/src/credential-notice.d.ts +3 -2
- package/dist/runner/src/credential-notice.d.ts.map +1 -1
- package/dist/runner/src/resources.d.ts.map +1 -1
- package/dist/runner/src/serve.d.ts.map +1 -1
- package/dist/sdk/asset-manager.js +13 -13
- package/dist/sdk/bridge.js +19 -20
- package/dist/sdk/core.js +6 -6
- package/dist/sdk/flow.js +7 -7
- package/dist/sdk/index.js +38 -39
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/resolver.js +7 -7
- package/dist/sdk/runner.js +38 -39
- package/dist/sdk/session.js +2 -2
- package/dist/sdk/transport/ws/server.js +7 -7
- package/dist/sdk/transport/ws.js +7 -7
- package/dist/sdk/transport.js +7 -7
- package/dist/sdk/types.js +1 -1
- package/dist/serve-preflight-GQY5DZX6.js +56 -0
- package/dist/serve-preflight-GQY5DZX6.js.map +1 -0
- package/dist/session/index.js +2 -2
- package/dist/{setup-X6ZYH2MW.js → setup-2NWSKSCO.js} +29 -30
- package/dist/setup-2NWSKSCO.js.map +1 -0
- package/dist/{skills-62PXDBPJ.js → skills-PXZOL2FZ.js} +12 -12
- package/dist/{skills-62PXDBPJ.js.map → skills-PXZOL2FZ.js.map} +1 -1
- package/dist/source-XA3L4H6I.js +86 -0
- package/dist/{source-LAYCTRHP.js.map → source-XA3L4H6I.js.map} +1 -1
- package/dist/{source-manifest-publish-3S6PJ25W.js → source-manifest-publish-QEGMTS33.js} +50 -51
- package/dist/source-manifest-publish-QEGMTS33.js.map +1 -0
- package/dist/transport/index.js +7 -7
- package/dist/transport/ws/server.js +7 -7
- package/dist/transport/ws.js +7 -7
- package/dist/tui/index.js +38 -39
- package/dist/tui/index.js.map +1 -1
- package/dist/types/index.js +1 -1
- package/dist/types/manifests.js +1 -1
- package/dist/types/src/manifests/agent.d.ts +2 -2
- package/dist/types/src/manifests/agent.d.ts.map +1 -1
- package/dist/types/src/version.d.ts +8 -8
- package/dist/workspace-plugin/adapters/mcp.js +30 -31
- package/dist/workspace-plugin/adapters/omp.js +14 -14
- package/dist/workspace-plugin/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-24D7IW5O.js.map +0 -1
- package/dist/chunk-2WOA3TKK.js.map +0 -1
- package/dist/chunk-3ENE6ZOF.js.map +0 -1
- package/dist/chunk-5T3DTK7A.js.map +0 -1
- package/dist/chunk-6OHZUUR7.js.map +0 -1
- package/dist/chunk-6UP2EDFN.js.map +0 -1
- package/dist/chunk-6WQGJF65.js.map +0 -1
- package/dist/chunk-6X3GDPCB.js.map +0 -1
- package/dist/chunk-76FLBODK.js.map +0 -1
- package/dist/chunk-76WSWPOB.js.map +0 -1
- package/dist/chunk-ABVWUM2E.js.map +0 -1
- package/dist/chunk-EXRQKOY6.js.map +0 -1
- package/dist/chunk-GBXQFJ4G.js.map +0 -1
- package/dist/chunk-HXZ3FQQN.js.map +0 -1
- package/dist/chunk-IYZAJ2J2.js.map +0 -1
- package/dist/chunk-JSWMRYLM.js.map +0 -1
- package/dist/chunk-P7EL7QRD.js.map +0 -1
- package/dist/chunk-QJQQNBVT.js +0 -315
- package/dist/chunk-QJQQNBVT.js.map +0 -1
- package/dist/chunk-TF5CWJQZ.js.map +0 -1
- package/dist/chunk-TGB4E5Z6.js.map +0 -1
- package/dist/chunk-UVTN4O7N.js.map +0 -1
- package/dist/chunk-VSCLUPGZ.js.map +0 -1
- package/dist/chunk-YJNE4V2M.js.map +0 -1
- package/dist/connectors-4WH32NK2.js +0 -50
- package/dist/ensure-sources-UC2RBYMP.js.map +0 -1
- package/dist/open-library-XGUCUJYE.js +0 -58
- package/dist/project-LB745WVZ.js +0 -88
- package/dist/serve-preflight-NPWI4MV6.js.map +0 -1
- package/dist/setup-X6ZYH2MW.js.map +0 -1
- package/dist/source-LAYCTRHP.js +0 -87
- package/dist/source-manifest-publish-3S6PJ25W.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../cli/src/commands/plugin/claude-code.ts"],"names":["disabled","next","updated","list"],"mappings":"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","file":"chunk-ACBL7X62.js","sourcesContent":["import { createHash } from \"node:crypto\";\nimport { existsSync } from \"node:fs\";\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { buildClaudePluginFiles } from \"@skaile/workspaces/workspace-plugin\";\nimport type { HarnessStatus, InstallResult, ToggleResult, UninstallResult } from \"./types.ts\";\n\nconst SKAILE_MCP_NAME = \"skaile-workspace\";\n\nconst MCP_SERVER_ENTRY = {\n command: \"skaile\",\n args: [\"mcp-server\"],\n env: {} as Record<string, string>,\n};\n\ninterface ClaudeSettings {\n plugins?: string[];\n enabledPlugins?: string[];\n disabledPlugins?: string[];\n disabledMcpjsonServers?: string[];\n [k: string]: unknown;\n}\n\ninterface ClaudeMcpFile {\n mcpServers?: Record<string, unknown>;\n [k: string]: unknown;\n}\n\n/**\n * Project-scope MCP file. Claude Code reads `<project>/.mcp.json`; the\n * `.claude/mcp.json` that earlier versions wrote is never read (`claude mcp\n * list` reported \"No MCP servers configured\").\n */\nfunction mcpFilePath(projectDir: string): string {\n return path.join(projectDir, \".mcp.json\");\n}\n\n/** The dead `.claude/mcp.json` of earlier versions; entries in it are removed. */\nfunction legacyMcpFilePath(projectDir: string): string {\n return path.join(projectDir, \".claude\", \"mcp.json\");\n}\n\n/**\n * Drop the skaile entry from an MCP file, deleting the file when nothing is\n * left. Returns whether the file changed.\n */\nasync function removeSkaileMcpEntry(mcpPath: string): Promise<boolean> {\n const mcp = await readJsonStrict<ClaudeMcpFile>(mcpPath);\n if (!mcp?.mcpServers || !(SKAILE_MCP_NAME in mcp.mcpServers)) return false;\n const { [SKAILE_MCP_NAME]: _removed, ...rest } = mcp.mcpServers;\n const updated: ClaudeMcpFile = { ...mcp, mcpServers: rest };\n if (Object.keys(rest).length === 0) delete updated.mcpServers;\n if (Object.keys(updated).length === 0) await fs.unlink(mcpPath);\n else await writeJson(mcpPath, updated);\n return true;\n}\n\n/** Absolute path to the generated Claude Code plugin directory. */\nfunction pluginDir(projectDir: string): string {\n return path.join(projectDir, \".claude\", \"plugins\", \"skaile\");\n}\n\nasync function readJsonStrict<T>(p: string): Promise<T | null> {\n let raw: string;\n try {\n raw = await fs.readFile(p, \"utf-8\");\n } catch {\n return null;\n }\n try {\n return JSON.parse(raw) as T;\n } catch (e: unknown) {\n throw new Error(\n `cannot parse ${p}: ${e instanceof Error ? e.message : String(e)}; please fix or remove`,\n );\n }\n}\n\nasync function writeJson(p: string, value: unknown): Promise<void> {\n await fs.mkdir(path.dirname(p), { recursive: true });\n await fs.writeFile(p, `${JSON.stringify(value, null, 2)}\\n`);\n}\n\n/** Skill folders that are never copied into the plugin: bytecode and dependency trees. */\nconst SKIPPED_IN_SKILL = new Set([\"__pycache__\", \"node_modules\", \".DS_Store\"]);\n\n/**\n * The project's installed skills, name to source folder: the folders with a `SKILL.md` that\n * `skaile add` deployed to `.claude/skills/`, and any under `.skaile/skills/` (the folder an\n * earlier release read; it wins over a deployed copy of the same name).\n */\nasync function installedSkillSources(projectDir: string): Promise<Map<string, string>> {\n const sources = new Map<string, string>();\n for (const root of [\n path.join(projectDir, \".claude\", \"skills\"),\n path.join(projectDir, \".skaile\", \"skills\"),\n ]) {\n for (const name of await fs.readdir(root).catch(() => [] as string[])) {\n const from = path.join(root, name);\n if (existsSync(path.join(from, \"SKILL.md\"))) sources.set(name, from);\n }\n }\n return sources;\n}\n\n/**\n * Fill the plugin's `skills/` with the project's installed skills (p1190). A skill the project\n * no longer has is removed from the plugin, so a repeated install matches the project. A linked\n * skill is copied as files.\n */\nasync function copyInstalledSkills(projectDir: string, skillsDir: string): Promise<void> {\n for (const entry of await fs.readdir(skillsDir).catch(() => [] as string[])) {\n if (entry !== \".gitkeep\")\n await fs.rm(path.join(skillsDir, entry), { recursive: true, force: true });\n }\n for (const [name, from] of await installedSkillSources(projectDir)) {\n await fs.cp(from, path.join(skillsDir, name), {\n recursive: true,\n dereference: true,\n filter: (src) => !SKIPPED_IN_SKILL.has(path.basename(src)),\n });\n }\n}\n\n/** Relative file path to content hash of everything the plugin copy would hold for `dir`. */\nasync function skillDigest(dir: string, rel = \"\"): Promise<string[]> {\n const out: string[] = [];\n for (const entry of (await fs.readdir(path.join(dir, rel)).catch(() => [] as string[])).sort()) {\n if (SKIPPED_IN_SKILL.has(entry)) continue;\n const relPath = path.join(rel, entry);\n const stat = await fs.stat(path.join(dir, relPath)).catch(() => undefined);\n if (!stat) continue;\n if (stat.isDirectory()) out.push(...(await skillDigest(dir, relPath)));\n else {\n const hash = createHash(\"sha256\")\n .update(await fs.readFile(path.join(dir, relPath)))\n .digest(\"hex\");\n out.push(`${relPath}:${hash}`);\n }\n }\n return out;\n}\n\n/**\n * True when the `--full` plugin's `skills/` copy differs from what `copyInstalledSkills` would\n * write now: a skill added, removed or changed since the copy was made (p1350).\n */\nasync function pluginSkillsStale(projectDir: string): Promise<boolean> {\n const skillsDir = path.join(pluginDir(projectDir), \"skills\");\n const expected = await installedSkillSources(projectDir);\n const actual = (await fs.readdir(skillsDir).catch(() => [] as string[])).filter(\n (n) => n !== \".gitkeep\",\n );\n if (actual.length !== expected.size || actual.some((n) => !expected.has(n))) return true;\n for (const [name, from] of expected) {\n const [want, have] = await Promise.all([\n skillDigest(from),\n skillDigest(path.join(skillsDir, name)),\n ]);\n if (want.join(\"\\n\") !== have.join(\"\\n\")) return true;\n }\n return false;\n}\n\n/**\n * Bring the `--full` plugin's skills copy up to date after `add`, `remove`, `install` or\n * `update` changed the project's skills (p1350). Does nothing when the plugin is not installed\n * (the MCP method has no copy) or the copy is current. Returns whether it rewrote the copy.\n */\nexport async function refreshPluginSkills(projectDir: string): Promise<boolean> {\n if ((await detectInstall(projectDir))?.method !== \"plugin\") return false;\n if (!(await pluginSkillsStale(projectDir))) return false;\n await copyInstalledSkills(projectDir, path.join(pluginDir(projectDir), \"skills\"));\n return true;\n}\n\n// ── install ────────────────────────────────────────────────────────────────\n\n/**\n * Install the skaile integration for Claude Code.\n *\n * Two modes:\n * - **mcp** (default) — write project-root `.mcp.json` pointing at `skaile mcp-server`.\n * - **full** (`opts.full`) — generate the `.claude/plugins/skaile/` directory\n * (MCP + lifecycle hooks) and register it in `.claude/settings.json`.\n */\nexport async function install(\n projectDir: string,\n opts?: { full?: boolean },\n): Promise<InstallResult> {\n return opts?.full ? installFullPlugin(projectDir) : installMcp(projectDir);\n}\n\nasync function installMcp(projectDir: string): Promise<InstallResult> {\n const mcpPath = mcpFilePath(projectDir);\n const existing = (await readJsonStrict<ClaudeMcpFile>(mcpPath)) ?? {};\n const mcpServers = { ...(existing.mcpServers ?? {}) };\n const previous = mcpServers[SKAILE_MCP_NAME];\n const matches = previous && JSON.stringify(previous) === JSON.stringify(MCP_SERVER_ENTRY);\n let warning: string | undefined;\n if (previous && !matches) {\n warning = `overwrote existing ${SKAILE_MCP_NAME} entry in ${path.relative(projectDir, mcpPath)}`;\n }\n mcpServers[SKAILE_MCP_NAME] = MCP_SERVER_ENTRY;\n await writeJson(mcpPath, { ...existing, mcpServers });\n const migrated = await removeSkaileMcpEntry(legacyMcpFilePath(projectDir));\n return { changed: !matches || migrated, method: \"mcp\", warning };\n}\n\n/**\n * Unlink `p` when it is a symlink (never what it points at), so the install below writes into\n * a real folder of its own instead of through the link into the user's files (`skills/ ->\n * ../../skills` would otherwise have its target cleared).\n */\nasync function dropSymlink(p: string): Promise<void> {\n const stat = await fs.lstat(p).catch(() => undefined);\n if (stat?.isSymbolicLink()) await fs.unlink(p);\n}\n\nasync function installFullPlugin(projectDir: string): Promise<InstallResult> {\n const dir = pluginDir(projectDir);\n await dropSymlink(dir);\n await dropSymlink(path.join(dir, \"skills\"));\n\n // Generate the plugin directory from the in-memory file map.\n for (const [rel, content] of Object.entries(buildClaudePluginFiles())) {\n const dest = path.join(dir, rel);\n await fs.mkdir(path.dirname(dest), { recursive: true });\n await fs.writeFile(dest, content);\n }\n\n await copyInstalledSkills(projectDir, path.join(dir, \"skills\"));\n\n // Register the generated dir in .claude/settings.json#plugins[].\n const settingsPath = path.join(projectDir, \".claude\", \"settings.json\");\n const settings = (await readJsonStrict<ClaudeSettings>(settingsPath)) ?? {};\n const plugins = settings.plugins ?? [];\n if (!plugins.includes(dir)) plugins.push(dir);\n await writeJson(settingsPath, { ...settings, plugins });\n\n return { changed: true, method: \"plugin\" };\n}\n\n// ── uninstall ──────────────────────────────────────────────────────────────\n\nexport async function uninstall(projectDir: string): Promise<UninstallResult> {\n const settingsPath = path.join(projectDir, \".claude\", \"settings.json\");\n const mcpPath = mcpFilePath(projectDir);\n const dir = pluginDir(projectDir);\n const rel = (p: string): string => path.relative(projectDir, p);\n\n /** Project-relative paths the uninstall changed or deleted, in the order it touched them. */\n const files: string[] = [];\n\n // Remove the generated plugin dir from plugins[] if registered.\n const settings = await readJsonStrict<ClaudeSettings>(settingsPath);\n if (settings && Array.isArray(settings.plugins)) {\n const next = settings.plugins.filter((p) => p !== dir);\n if (next.length !== settings.plugins.length) {\n files.push(rel(settingsPath));\n const updated: ClaudeSettings = { ...settings, plugins: next };\n if (next.length === 0) delete updated.plugins;\n // A settings file that held only the skaile plugin is left empty: delete it.\n if (Object.keys(updated).length === 0) await fs.unlink(settingsPath);\n else await writeJson(settingsPath, updated);\n }\n }\n\n // Delete the generated plugin directory.\n if (existsSync(dir)) {\n await fs.rm(dir, { recursive: true, force: true });\n files.push(rel(dir));\n }\n\n // Remove from .mcp.json — and from the legacy .claude/mcp.json — if present.\n if (await removeSkaileMcpEntry(mcpPath)) files.push(rel(mcpPath));\n const legacyPath = legacyMcpFilePath(projectDir);\n if (await removeSkaileMcpEntry(legacyPath)) files.push(rel(legacyPath));\n\n // Leave no empty `.claude/` or `.claude/plugins/` behind.\n for (const emptyDir of [path.dirname(dir), path.join(projectDir, \".claude\")]) {\n await fs.rmdir(emptyDir).catch(() => undefined);\n }\n\n return { changed: files.length > 0, files };\n}\n\n// ── enable / disable ───────────────────────────────────────────────────────\n\nasync function detectInstall(\n projectDir: string,\n): Promise<{ method: \"plugin\" | \"mcp\"; pluginPath?: string } | null> {\n const dir = pluginDir(projectDir);\n const settings = await readJsonStrict<ClaudeSettings>(\n path.join(projectDir, \".claude\", \"settings.json\"),\n );\n if (\n existsSync(path.join(dir, \".claude-plugin\", \"plugin.json\")) &&\n settings?.plugins?.includes(dir)\n ) {\n return { method: \"plugin\", pluginPath: dir };\n }\n\n const mcp = await readJsonStrict<ClaudeMcpFile>(mcpFilePath(projectDir));\n if (mcp?.mcpServers && SKAILE_MCP_NAME in mcp.mcpServers) {\n return { method: \"mcp\" };\n }\n return null;\n}\n\nexport async function enable(projectDir: string): Promise<ToggleResult> {\n const detected = await detectInstall(projectDir);\n if (!detected) throw new Error(\"plugin not installed for claude-code\");\n\n const settingsPath = path.join(projectDir, \".claude\", \"settings.json\");\n const settings = (await readJsonStrict<ClaudeSettings>(settingsPath)) ?? {};\n\n if (detected.method === \"plugin\") {\n const disabled = settings.disabledPlugins ?? [];\n const next = disabled.filter((p) => p !== detected.pluginPath);\n if (next.length === disabled.length) return { changed: false };\n const updated: ClaudeSettings = { ...settings, disabledPlugins: next };\n if (next.length === 0) delete updated.disabledPlugins;\n await writeJson(settingsPath, updated);\n return { changed: true };\n }\n\n const disabled = settings.disabledMcpjsonServers ?? [];\n const next = disabled.filter((n) => n !== SKAILE_MCP_NAME);\n if (next.length === disabled.length) return { changed: false };\n const updated: ClaudeSettings = { ...settings, disabledMcpjsonServers: next };\n if (next.length === 0) delete updated.disabledMcpjsonServers;\n await writeJson(settingsPath, updated);\n return { changed: true };\n}\n\nexport async function disable(projectDir: string): Promise<ToggleResult> {\n const detected = await detectInstall(projectDir);\n if (!detected) throw new Error(\"plugin not installed for claude-code\");\n\n const settingsPath = path.join(projectDir, \".claude\", \"settings.json\");\n const settings = (await readJsonStrict<ClaudeSettings>(settingsPath)) ?? {};\n\n if (detected.method === \"plugin\") {\n const list = settings.disabledPlugins ?? [];\n if (list.includes(detected.pluginPath as string)) return { changed: false };\n await writeJson(settingsPath, {\n ...settings,\n disabledPlugins: [...list, detected.pluginPath as string],\n });\n return { changed: true };\n }\n\n const list = settings.disabledMcpjsonServers ?? [];\n if (list.includes(SKAILE_MCP_NAME)) return { changed: false };\n await writeJson(settingsPath, {\n ...settings,\n disabledMcpjsonServers: [...list, SKAILE_MCP_NAME],\n });\n return { changed: true };\n}\n\n// ── status ─────────────────────────────────────────────────────────────────\n\nexport async function status(projectDir: string): Promise<HarnessStatus> {\n const settingsPath = path.join(projectDir, \".claude\", \"settings.json\");\n const mcpPath = mcpFilePath(projectDir);\n const dir = pluginDir(projectDir);\n const settings = await readJsonStrict<ClaudeSettings>(settingsPath);\n const mcp = await readJsonStrict<ClaudeMcpFile>(mcpPath);\n\n const pluginInstalled = !!(\n existsSync(path.join(dir, \".claude-plugin\", \"plugin.json\")) && settings?.plugins?.includes(dir)\n );\n const mcpInstalled = !!(mcp?.mcpServers && SKAILE_MCP_NAME in mcp.mcpServers);\n\n if (!pluginInstalled && !mcpInstalled) {\n return {\n harness: \"claude-code\",\n installed: \"no\",\n enabled: \"n/a\",\n method: \"—\",\n location: \"—\",\n };\n }\n\n if (pluginInstalled) {\n const disabled = settings?.disabledPlugins?.includes(dir) ?? false;\n // The plugin's skills are a copy; `add`, `remove`, `install` and `update` refresh it, but a\n // skill changed by hand since is not in it (p1350).\n const stale = await pluginSkillsStale(projectDir);\n return {\n harness: \"claude-code\",\n installed: \"yes\",\n enabled: disabled ? \"no\" : \"yes\",\n method: \"plugin\",\n location: path.relative(projectDir, dir),\n ...(stale\n ? {\n detail:\n \"the skills copy is stale: run skaile integration install --harness claude-code --full\",\n }\n : {}),\n };\n }\n\n const disabled = settings?.disabledMcpjsonServers?.includes(SKAILE_MCP_NAME) ?? false;\n return {\n harness: \"claude-code\",\n installed: \"yes\",\n enabled: disabled ? \"no\" : \"yes\",\n method: \"mcp\",\n location: path.relative(projectDir, mcpPath),\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../cli/src/commands/plugin/claude-code.ts"],"names":["disabled","next","updated","list"],"mappings":"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","file":"chunk-LE6QS4PG.js","sourcesContent":["import { createHash } from \"node:crypto\";\nimport { existsSync } from \"node:fs\";\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { buildClaudePluginFiles } from \"@skaile/workspaces/workspace-plugin\";\nimport type { HarnessStatus, InstallResult, ToggleResult, UninstallResult } from \"./types.ts\";\n\nconst SKAILE_MCP_NAME = \"skaile-workspace\";\n\nconst MCP_SERVER_ENTRY = {\n command: \"skaile\",\n args: [\"mcp-server\"],\n env: {} as Record<string, string>,\n};\n\ninterface ClaudeSettings {\n plugins?: string[];\n enabledPlugins?: string[];\n disabledPlugins?: string[];\n disabledMcpjsonServers?: string[];\n [k: string]: unknown;\n}\n\ninterface ClaudeMcpFile {\n mcpServers?: Record<string, unknown>;\n [k: string]: unknown;\n}\n\n/**\n * Project-scope MCP file. Claude Code reads `<project>/.mcp.json`; the\n * `.claude/mcp.json` that earlier versions wrote is never read (`claude mcp\n * list` reported \"No MCP servers configured\").\n */\nfunction mcpFilePath(projectDir: string): string {\n return path.join(projectDir, \".mcp.json\");\n}\n\n/** The dead `.claude/mcp.json` of earlier versions; entries in it are removed. */\nfunction legacyMcpFilePath(projectDir: string): string {\n return path.join(projectDir, \".claude\", \"mcp.json\");\n}\n\n/**\n * Drop the skaile entry from an MCP file, deleting the file when nothing is\n * left. Returns whether the file changed.\n */\nasync function removeSkaileMcpEntry(mcpPath: string): Promise<boolean> {\n const mcp = await readJsonStrict<ClaudeMcpFile>(mcpPath);\n if (!mcp?.mcpServers || !(SKAILE_MCP_NAME in mcp.mcpServers)) return false;\n const { [SKAILE_MCP_NAME]: _removed, ...rest } = mcp.mcpServers;\n const updated: ClaudeMcpFile = { ...mcp, mcpServers: rest };\n if (Object.keys(rest).length === 0) delete updated.mcpServers;\n if (Object.keys(updated).length === 0) await fs.unlink(mcpPath);\n else await writeJson(mcpPath, updated);\n return true;\n}\n\n/** Absolute path to the generated Claude Code plugin directory. */\nfunction pluginDir(projectDir: string): string {\n return path.join(projectDir, \".claude\", \"plugins\", \"skaile\");\n}\n\nasync function readJsonStrict<T>(p: string): Promise<T | null> {\n let raw: string;\n try {\n raw = await fs.readFile(p, \"utf-8\");\n } catch {\n return null;\n }\n try {\n return JSON.parse(raw) as T;\n } catch (e: unknown) {\n throw new Error(\n `cannot parse ${p}: ${e instanceof Error ? e.message : String(e)}; please fix or remove`,\n );\n }\n}\n\nasync function writeJson(p: string, value: unknown): Promise<void> {\n await fs.mkdir(path.dirname(p), { recursive: true });\n await fs.writeFile(p, `${JSON.stringify(value, null, 2)}\\n`);\n}\n\n/** Skill folders that are never copied into the plugin: bytecode and dependency trees. */\nconst SKIPPED_IN_SKILL = new Set([\"__pycache__\", \"node_modules\", \".DS_Store\"]);\n\n/**\n * The project's installed skills, name to source folder: the folders with a `SKILL.md` that\n * `skaile add` deployed to `.claude/skills/`, and any under `.skaile/skills/` (the folder an\n * earlier release read; it wins over a deployed copy of the same name).\n */\nasync function installedSkillSources(projectDir: string): Promise<Map<string, string>> {\n const sources = new Map<string, string>();\n for (const root of [\n path.join(projectDir, \".claude\", \"skills\"),\n path.join(projectDir, \".skaile\", \"skills\"),\n ]) {\n for (const name of await fs.readdir(root).catch(() => [] as string[])) {\n const from = path.join(root, name);\n if (existsSync(path.join(from, \"SKILL.md\"))) sources.set(name, from);\n }\n }\n return sources;\n}\n\n/**\n * Fill the plugin's `skills/` with the project's installed skills (p1190). A skill the project\n * no longer has is removed from the plugin, so a repeated install matches the project. A linked\n * skill is copied as files.\n */\nasync function copyInstalledSkills(projectDir: string, skillsDir: string): Promise<void> {\n for (const entry of await fs.readdir(skillsDir).catch(() => [] as string[])) {\n if (entry !== \".gitkeep\")\n await fs.rm(path.join(skillsDir, entry), { recursive: true, force: true });\n }\n for (const [name, from] of await installedSkillSources(projectDir)) {\n await fs.cp(from, path.join(skillsDir, name), {\n recursive: true,\n dereference: true,\n filter: (src) => !SKIPPED_IN_SKILL.has(path.basename(src)),\n });\n }\n}\n\n/** Relative file path to content hash of everything the plugin copy would hold for `dir`. */\nasync function skillDigest(dir: string, rel = \"\"): Promise<string[]> {\n const out: string[] = [];\n for (const entry of (await fs.readdir(path.join(dir, rel)).catch(() => [] as string[])).sort()) {\n if (SKIPPED_IN_SKILL.has(entry)) continue;\n const relPath = path.join(rel, entry);\n const stat = await fs.stat(path.join(dir, relPath)).catch(() => undefined);\n if (!stat) continue;\n if (stat.isDirectory()) out.push(...(await skillDigest(dir, relPath)));\n else {\n const hash = createHash(\"sha256\")\n .update(await fs.readFile(path.join(dir, relPath)))\n .digest(\"hex\");\n out.push(`${relPath}:${hash}`);\n }\n }\n return out;\n}\n\n/**\n * True when the `--full` plugin's `skills/` copy differs from what `copyInstalledSkills` would\n * write now: a skill added, removed or changed since the copy was made (p1350).\n */\nasync function pluginSkillsStale(projectDir: string): Promise<boolean> {\n const skillsDir = path.join(pluginDir(projectDir), \"skills\");\n const expected = await installedSkillSources(projectDir);\n const actual = (await fs.readdir(skillsDir).catch(() => [] as string[])).filter(\n (n) => n !== \".gitkeep\",\n );\n if (actual.length !== expected.size || actual.some((n) => !expected.has(n))) return true;\n for (const [name, from] of expected) {\n const [want, have] = await Promise.all([\n skillDigest(from),\n skillDigest(path.join(skillsDir, name)),\n ]);\n if (want.join(\"\\n\") !== have.join(\"\\n\")) return true;\n }\n return false;\n}\n\n/**\n * Bring the `--full` plugin's skills copy up to date after `add`, `remove`, `install` or\n * `update` changed the project's skills (p1350). Does nothing when the plugin is not installed\n * (the MCP method has no copy) or the copy is current. Returns whether it rewrote the copy.\n */\nexport async function refreshPluginSkills(projectDir: string): Promise<boolean> {\n if ((await detectInstall(projectDir))?.method !== \"plugin\") return false;\n if (!(await pluginSkillsStale(projectDir))) return false;\n await copyInstalledSkills(projectDir, path.join(pluginDir(projectDir), \"skills\"));\n return true;\n}\n\n// ── install ────────────────────────────────────────────────────────────────\n\n/**\n * Install the skaile integration for Claude Code.\n *\n * Two modes:\n * - **mcp** (default) — write project-root `.mcp.json` pointing at `skaile mcp-server`.\n * - **full** (`opts.full`) — generate the `.claude/plugins/skaile/` directory\n * (MCP + lifecycle hooks) and register it in `.claude/settings.json`.\n */\nexport async function install(\n projectDir: string,\n opts?: { full?: boolean },\n): Promise<InstallResult> {\n return opts?.full ? installFullPlugin(projectDir) : installMcp(projectDir);\n}\n\nasync function installMcp(projectDir: string): Promise<InstallResult> {\n const mcpPath = mcpFilePath(projectDir);\n const existing = (await readJsonStrict<ClaudeMcpFile>(mcpPath)) ?? {};\n const mcpServers = { ...(existing.mcpServers ?? {}) };\n const previous = mcpServers[SKAILE_MCP_NAME];\n const matches = previous && JSON.stringify(previous) === JSON.stringify(MCP_SERVER_ENTRY);\n let warning: string | undefined;\n if (previous && !matches) {\n warning = `overwrote existing ${SKAILE_MCP_NAME} entry in ${path.relative(projectDir, mcpPath)}`;\n }\n mcpServers[SKAILE_MCP_NAME] = MCP_SERVER_ENTRY;\n await writeJson(mcpPath, { ...existing, mcpServers });\n const migrated = await removeSkaileMcpEntry(legacyMcpFilePath(projectDir));\n return { changed: !matches || migrated, method: \"mcp\", warning };\n}\n\n/**\n * Unlink `p` when it is a symlink (never what it points at), so the install below writes into\n * a real folder of its own instead of through the link into the user's files (`skills/ ->\n * ../../skills` would otherwise have its target cleared).\n */\nasync function dropSymlink(p: string): Promise<void> {\n const stat = await fs.lstat(p).catch(() => undefined);\n if (stat?.isSymbolicLink()) await fs.unlink(p);\n}\n\nasync function installFullPlugin(projectDir: string): Promise<InstallResult> {\n const dir = pluginDir(projectDir);\n await dropSymlink(dir);\n await dropSymlink(path.join(dir, \"skills\"));\n\n // Generate the plugin directory from the in-memory file map.\n for (const [rel, content] of Object.entries(buildClaudePluginFiles())) {\n const dest = path.join(dir, rel);\n await fs.mkdir(path.dirname(dest), { recursive: true });\n await fs.writeFile(dest, content);\n }\n\n await copyInstalledSkills(projectDir, path.join(dir, \"skills\"));\n\n // Register the generated dir in .claude/settings.json#plugins[].\n const settingsPath = path.join(projectDir, \".claude\", \"settings.json\");\n const settings = (await readJsonStrict<ClaudeSettings>(settingsPath)) ?? {};\n const plugins = settings.plugins ?? [];\n if (!plugins.includes(dir)) plugins.push(dir);\n await writeJson(settingsPath, { ...settings, plugins });\n\n return { changed: true, method: \"plugin\" };\n}\n\n// ── uninstall ──────────────────────────────────────────────────────────────\n\nexport async function uninstall(projectDir: string): Promise<UninstallResult> {\n const settingsPath = path.join(projectDir, \".claude\", \"settings.json\");\n const mcpPath = mcpFilePath(projectDir);\n const dir = pluginDir(projectDir);\n const rel = (p: string): string => path.relative(projectDir, p);\n\n /** Project-relative paths the uninstall changed or deleted, in the order it touched them. */\n const files: string[] = [];\n\n // Remove the generated plugin dir from plugins[] if registered.\n const settings = await readJsonStrict<ClaudeSettings>(settingsPath);\n if (settings && Array.isArray(settings.plugins)) {\n const next = settings.plugins.filter((p) => p !== dir);\n if (next.length !== settings.plugins.length) {\n files.push(rel(settingsPath));\n const updated: ClaudeSettings = { ...settings, plugins: next };\n if (next.length === 0) delete updated.plugins;\n // A settings file that held only the skaile plugin is left empty: delete it.\n if (Object.keys(updated).length === 0) await fs.unlink(settingsPath);\n else await writeJson(settingsPath, updated);\n }\n }\n\n // Delete the generated plugin directory.\n if (existsSync(dir)) {\n await fs.rm(dir, { recursive: true, force: true });\n files.push(rel(dir));\n }\n\n // Remove from .mcp.json — and from the legacy .claude/mcp.json — if present.\n if (await removeSkaileMcpEntry(mcpPath)) files.push(rel(mcpPath));\n const legacyPath = legacyMcpFilePath(projectDir);\n if (await removeSkaileMcpEntry(legacyPath)) files.push(rel(legacyPath));\n\n // Leave no empty `.claude/` or `.claude/plugins/` behind.\n for (const emptyDir of [path.dirname(dir), path.join(projectDir, \".claude\")]) {\n await fs.rmdir(emptyDir).catch(() => undefined);\n }\n\n return { changed: files.length > 0, files };\n}\n\n// ── enable / disable ───────────────────────────────────────────────────────\n\nasync function detectInstall(\n projectDir: string,\n): Promise<{ method: \"plugin\" | \"mcp\"; pluginPath?: string } | null> {\n const dir = pluginDir(projectDir);\n const settings = await readJsonStrict<ClaudeSettings>(\n path.join(projectDir, \".claude\", \"settings.json\"),\n );\n if (\n existsSync(path.join(dir, \".claude-plugin\", \"plugin.json\")) &&\n settings?.plugins?.includes(dir)\n ) {\n return { method: \"plugin\", pluginPath: dir };\n }\n\n const mcp = await readJsonStrict<ClaudeMcpFile>(mcpFilePath(projectDir));\n if (mcp?.mcpServers && SKAILE_MCP_NAME in mcp.mcpServers) {\n return { method: \"mcp\" };\n }\n return null;\n}\n\nexport async function enable(projectDir: string): Promise<ToggleResult> {\n const detected = await detectInstall(projectDir);\n if (!detected) throw new Error(\"plugin not installed for claude-code\");\n\n const settingsPath = path.join(projectDir, \".claude\", \"settings.json\");\n const settings = (await readJsonStrict<ClaudeSettings>(settingsPath)) ?? {};\n\n if (detected.method === \"plugin\") {\n const disabled = settings.disabledPlugins ?? [];\n const next = disabled.filter((p) => p !== detected.pluginPath);\n if (next.length === disabled.length) return { changed: false };\n const updated: ClaudeSettings = { ...settings, disabledPlugins: next };\n if (next.length === 0) delete updated.disabledPlugins;\n await writeJson(settingsPath, updated);\n return { changed: true };\n }\n\n const disabled = settings.disabledMcpjsonServers ?? [];\n const next = disabled.filter((n) => n !== SKAILE_MCP_NAME);\n if (next.length === disabled.length) return { changed: false };\n const updated: ClaudeSettings = { ...settings, disabledMcpjsonServers: next };\n if (next.length === 0) delete updated.disabledMcpjsonServers;\n await writeJson(settingsPath, updated);\n return { changed: true };\n}\n\nexport async function disable(projectDir: string): Promise<ToggleResult> {\n const detected = await detectInstall(projectDir);\n if (!detected) throw new Error(\"plugin not installed for claude-code\");\n\n const settingsPath = path.join(projectDir, \".claude\", \"settings.json\");\n const settings = (await readJsonStrict<ClaudeSettings>(settingsPath)) ?? {};\n\n if (detected.method === \"plugin\") {\n const list = settings.disabledPlugins ?? [];\n if (list.includes(detected.pluginPath as string)) return { changed: false };\n await writeJson(settingsPath, {\n ...settings,\n disabledPlugins: [...list, detected.pluginPath as string],\n });\n return { changed: true };\n }\n\n const list = settings.disabledMcpjsonServers ?? [];\n if (list.includes(SKAILE_MCP_NAME)) return { changed: false };\n await writeJson(settingsPath, {\n ...settings,\n disabledMcpjsonServers: [...list, SKAILE_MCP_NAME],\n });\n return { changed: true };\n}\n\n// ── status ─────────────────────────────────────────────────────────────────\n\nexport async function status(projectDir: string): Promise<HarnessStatus> {\n const settingsPath = path.join(projectDir, \".claude\", \"settings.json\");\n const mcpPath = mcpFilePath(projectDir);\n const dir = pluginDir(projectDir);\n const settings = await readJsonStrict<ClaudeSettings>(settingsPath);\n const mcp = await readJsonStrict<ClaudeMcpFile>(mcpPath);\n\n const pluginInstalled = !!(\n existsSync(path.join(dir, \".claude-plugin\", \"plugin.json\")) && settings?.plugins?.includes(dir)\n );\n const mcpInstalled = !!(mcp?.mcpServers && SKAILE_MCP_NAME in mcp.mcpServers);\n\n if (!pluginInstalled && !mcpInstalled) {\n return {\n harness: \"claude-code\",\n installed: \"no\",\n enabled: \"n/a\",\n method: \"—\",\n location: \"—\",\n };\n }\n\n if (pluginInstalled) {\n const disabled = settings?.disabledPlugins?.includes(dir) ?? false;\n // The plugin's skills are a copy; `add`, `remove`, `install` and `update` refresh it, but a\n // skill changed by hand since is not in it (p1350).\n const stale = await pluginSkillsStale(projectDir);\n return {\n harness: \"claude-code\",\n installed: \"yes\",\n enabled: disabled ? \"no\" : \"yes\",\n method: \"plugin\",\n location: path.relative(projectDir, dir),\n ...(stale\n ? {\n detail:\n \"the skills copy is stale: run skaile integration install --harness claude-code --full\",\n }\n : {}),\n };\n }\n\n const disabled = settings?.disabledMcpjsonServers?.includes(SKAILE_MCP_NAME) ?? false;\n return {\n harness: \"claude-code\",\n installed: \"yes\",\n enabled: disabled ? \"no\" : \"yes\",\n method: \"mcp\",\n location: path.relative(projectDir, mcpPath),\n };\n}\n"]}
|
|
@@ -1,4 +1,51 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { pluginRegistry } from './chunk-G5SUWZEU.js';
|
|
2
|
+
import { resolveCredential } from './chunk-VSX2G7LA.js';
|
|
3
|
+
import { AI_PROVIDER_BASE_URL_TEMPLATES, resolveEntryBaseUrl, parseCredentialRef, registryEntries, isEntryEnabled } from './chunk-RXGPFAMN.js';
|
|
4
|
+
|
|
5
|
+
// bridge/src/harness-capabilities.ts
|
|
6
|
+
var GENERIC_HARNESS_CAPABILITIES = {
|
|
7
|
+
inProcessMcpServers: false,
|
|
8
|
+
liveToolUpdates: true,
|
|
9
|
+
managedSession: false,
|
|
10
|
+
claudeCodeCredentials: false,
|
|
11
|
+
resumeNeedsTranscript: false
|
|
12
|
+
};
|
|
13
|
+
var BUILTIN_HARNESS_CAPABILITIES = {
|
|
14
|
+
// Recomposes its tools per turn, so a hot-plugged MCP server is live.
|
|
15
|
+
omp: {
|
|
16
|
+
inProcessMcpServers: false,
|
|
17
|
+
liveToolUpdates: true,
|
|
18
|
+
managedSession: false,
|
|
19
|
+
claudeCodeCredentials: false,
|
|
20
|
+
resumeNeedsTranscript: false
|
|
21
|
+
},
|
|
22
|
+
// The SDK takes in-process server instances and bakes its tool set at
|
|
23
|
+
// creation; it reads Claude's `~/.claude` credentials and JSONL transcripts.
|
|
24
|
+
"claude-sdk": {
|
|
25
|
+
inProcessMcpServers: true,
|
|
26
|
+
liveToolUpdates: false,
|
|
27
|
+
managedSession: false,
|
|
28
|
+
claudeCodeCredentials: true,
|
|
29
|
+
resumeNeedsTranscript: true
|
|
30
|
+
},
|
|
31
|
+
// Standalone SDK recomposes its tools per turn. A host-managed session
|
|
32
|
+
// (native app-server) refreshes its own native tool snapshot instead.
|
|
33
|
+
codex: {
|
|
34
|
+
inProcessMcpServers: false,
|
|
35
|
+
liveToolUpdates: true,
|
|
36
|
+
managedSession: true,
|
|
37
|
+
claudeCodeCredentials: false,
|
|
38
|
+
resumeNeedsTranscript: false
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
function harnessCapabilities(id) {
|
|
42
|
+
const declared = id ? Object.hasOwn(BUILTIN_HARNESS_CAPABILITIES, id) ? BUILTIN_HARNESS_CAPABILITIES[id] : pluginRegistry.get("harness", id)?.capabilities : void 0;
|
|
43
|
+
return { ...GENERIC_HARNESS_CAPABILITIES, ...declared };
|
|
44
|
+
}
|
|
45
|
+
function supportsLiveToolUpdates(id, managed = false) {
|
|
46
|
+
const caps = harnessCapabilities(id);
|
|
47
|
+
return caps.liveToolUpdates && !(managed && caps.managedSession);
|
|
48
|
+
}
|
|
2
49
|
|
|
3
50
|
// bridge/src/provider-catalog.ts
|
|
4
51
|
var ANTHROPIC_VERSION_HEADER = { "anthropic-version": "2023-06-01" };
|
|
@@ -352,6 +399,268 @@ async function probeProviderEntry(entry, options = {}) {
|
|
|
352
399
|
}
|
|
353
400
|
}
|
|
354
401
|
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
402
|
+
// bridge/src/provider-materialize/credential-env.ts
|
|
403
|
+
var PROVIDER_CREDENTIAL_ENV_PREFIX = "SKAILE_AIP_";
|
|
404
|
+
var PROVIDER_CREDENTIAL_ENV_SUFFIX = "_KEY";
|
|
405
|
+
function providerCredentialEnvName(providerId) {
|
|
406
|
+
const slug = providerId.replace(/[^A-Za-z0-9]/g, "_").toUpperCase();
|
|
407
|
+
return `${PROVIDER_CREDENTIAL_ENV_PREFIX}${slug}${PROVIDER_CREDENTIAL_ENV_SUFFIX}`;
|
|
408
|
+
}
|
|
409
|
+
function conventionalCredentialEnvName(entry) {
|
|
410
|
+
const preset = entry.preset ? AI_PROVIDER_PRESETS[entry.preset] : void 0;
|
|
411
|
+
if (preset?.credential.env) return preset.credential.env;
|
|
412
|
+
const ref = entry.credential?.ref ? parseCredentialRef(entry.credential.ref) : void 0;
|
|
413
|
+
return ref?.form === "env" ? ref.name : void 0;
|
|
414
|
+
}
|
|
415
|
+
function resolveEntryCredential(entry, options = {}) {
|
|
416
|
+
return resolveCredential(entry, {
|
|
417
|
+
...options.env ? { env: options.env } : {},
|
|
418
|
+
...options.secrets ? { secrets: options.secrets } : {},
|
|
419
|
+
...options.allowCommand === void 0 ? {} : { allowCommand: options.allowCommand }
|
|
420
|
+
}).value;
|
|
421
|
+
}
|
|
422
|
+
function entryCredentialValue(providerId, entry, options = {}) {
|
|
423
|
+
return resolveEntryCredential(entry, options) ?? options.env?.[providerCredentialEnvName(providerId)];
|
|
424
|
+
}
|
|
425
|
+
function unresolvedProviderCredentials(registry, options = {}) {
|
|
426
|
+
const out = [];
|
|
427
|
+
for (const [id, entry] of registryEntries(registry)) {
|
|
428
|
+
if (entry.kind !== "llm" && entry.kind !== "embed") continue;
|
|
429
|
+
if (!isEntryEnabled(entry)) continue;
|
|
430
|
+
if (options.providerId && id !== options.providerId) continue;
|
|
431
|
+
const resolved = resolveCredential(entry, {
|
|
432
|
+
...options.env ? { env: options.env } : {},
|
|
433
|
+
...options.secrets ? { secrets: options.secrets } : {},
|
|
434
|
+
...options.allowCommand === void 0 ? {} : { allowCommand: options.allowCommand }
|
|
435
|
+
});
|
|
436
|
+
if (!resolved.error) continue;
|
|
437
|
+
if (options.env?.[providerCredentialEnvName(id)]) continue;
|
|
438
|
+
out.push({ providerId: id, reason: resolved.error });
|
|
439
|
+
}
|
|
440
|
+
return out;
|
|
441
|
+
}
|
|
442
|
+
function entryCredentialEnv(providerId, entry, options = {}) {
|
|
443
|
+
const value = resolveEntryCredential(entry, options);
|
|
444
|
+
if (!value) return {};
|
|
445
|
+
const out = { [providerCredentialEnvName(providerId)]: value };
|
|
446
|
+
if (options.aliases !== false) {
|
|
447
|
+
const alias = conventionalCredentialEnvName(entry);
|
|
448
|
+
if (alias) out[alias] = value;
|
|
449
|
+
}
|
|
450
|
+
return out;
|
|
451
|
+
}
|
|
452
|
+
function registryCredentialEnv(registry, options = {}) {
|
|
453
|
+
const canonical = {};
|
|
454
|
+
const aliases = {};
|
|
455
|
+
for (const [id, entry] of registryEntries(registry)) {
|
|
456
|
+
if (options.providerId && id !== options.providerId) continue;
|
|
457
|
+
if (!isEntryEnabled(entry)) continue;
|
|
458
|
+
const value = resolveEntryCredential(entry, options);
|
|
459
|
+
if (!value) continue;
|
|
460
|
+
canonical[providerCredentialEnvName(id)] = value;
|
|
461
|
+
if (options.aliases === false) continue;
|
|
462
|
+
const alias = conventionalCredentialEnvName(entry);
|
|
463
|
+
if (alias && aliases[alias] === void 0) aliases[alias] = value;
|
|
464
|
+
}
|
|
465
|
+
return { ...aliases, ...canonical };
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
// bridge/src/registry.ts
|
|
469
|
+
var INCLUDE_CLAUDE_SDK = typeof __INCLUDE_CLAUDE_SDK__ === "undefined" ? true : __INCLUDE_CLAUDE_SDK__;
|
|
470
|
+
var INCLUDE_CODEX = typeof __INCLUDE_CODEX__ === "undefined" ? true : __INCLUDE_CODEX__;
|
|
471
|
+
var OMP_SURFACES = [
|
|
472
|
+
"anthropic-messages",
|
|
473
|
+
"openai-completions",
|
|
474
|
+
"openai-responses",
|
|
475
|
+
"openai-codex-responses",
|
|
476
|
+
"azure-openai-responses",
|
|
477
|
+
"bedrock-converse-stream",
|
|
478
|
+
"google-generative-ai",
|
|
479
|
+
"google-vertex"
|
|
480
|
+
];
|
|
481
|
+
var BUILTIN_HARNESS_CATALOG = {
|
|
482
|
+
omp: {
|
|
483
|
+
id: "omp",
|
|
484
|
+
name: "omp (oh-my-pi)",
|
|
485
|
+
modelAgnostic: true,
|
|
486
|
+
supportsInBandAbort: true,
|
|
487
|
+
surfaces: OMP_SURFACES,
|
|
488
|
+
// omp renders the whole registry as its own `models.yml`, so every entry
|
|
489
|
+
// stays selectable and roles / per-subagent models resolve across them.
|
|
490
|
+
providerPlurality: "registry",
|
|
491
|
+
capabilities: BUILTIN_HARNESS_CAPABILITIES.omp
|
|
492
|
+
},
|
|
493
|
+
"claude-sdk": {
|
|
494
|
+
id: "claude-sdk",
|
|
495
|
+
name: "Claude Agent SDK",
|
|
496
|
+
modelAgnostic: false,
|
|
497
|
+
supportsInBandAbort: true,
|
|
498
|
+
// Anthropic's own API, plus the two clouds the SDK addresses natively.
|
|
499
|
+
// Foundry is `anthropic-messages` at a different host, not a surface.
|
|
500
|
+
surfaces: ["anthropic-messages", "bedrock-converse-stream", "google-vertex"],
|
|
501
|
+
providerPlurality: "single",
|
|
502
|
+
capabilities: BUILTIN_HARNESS_CAPABILITIES["claude-sdk"]
|
|
503
|
+
},
|
|
504
|
+
codex: {
|
|
505
|
+
id: "codex",
|
|
506
|
+
name: "OpenAI Codex",
|
|
507
|
+
modelAgnostic: false,
|
|
508
|
+
supportsInBandAbort: true,
|
|
509
|
+
// Codex's `wire_api` is `responses` or `chat`; its subscription transport
|
|
510
|
+
// is the codex-specific responses flavour.
|
|
511
|
+
surfaces: ["openai-codex-responses", "openai-responses", "openai-completions"],
|
|
512
|
+
providerPlurality: "single",
|
|
513
|
+
capabilities: BUILTIN_HARNESS_CAPABILITIES.codex
|
|
514
|
+
},
|
|
515
|
+
echo: {
|
|
516
|
+
id: "echo",
|
|
517
|
+
name: "Echo (E2E mock)",
|
|
518
|
+
modelAgnostic: true,
|
|
519
|
+
supportsInBandAbort: false,
|
|
520
|
+
// Deterministic mock: it never opens a connection, so it speaks no wire
|
|
521
|
+
// surface and no registry entry can be dispatched to it.
|
|
522
|
+
surfaces: [],
|
|
523
|
+
providerPlurality: "single"
|
|
524
|
+
},
|
|
525
|
+
gemini: {
|
|
526
|
+
id: "gemini",
|
|
527
|
+
name: "Gemini CLI",
|
|
528
|
+
modelAgnostic: false,
|
|
529
|
+
supportsInBandAbort: false,
|
|
530
|
+
surfaces: ["google-generative-ai"],
|
|
531
|
+
providerPlurality: "single"
|
|
532
|
+
},
|
|
533
|
+
qwen: {
|
|
534
|
+
id: "qwen",
|
|
535
|
+
name: "Qwen Code",
|
|
536
|
+
modelAgnostic: true,
|
|
537
|
+
supportsInBandAbort: false,
|
|
538
|
+
// Driven entirely through OPENAI_BASE_URL / OPENAI_API_KEY.
|
|
539
|
+
surfaces: ["openai-completions"],
|
|
540
|
+
providerPlurality: "single"
|
|
541
|
+
},
|
|
542
|
+
opencode: {
|
|
543
|
+
id: "opencode",
|
|
544
|
+
name: "OpenCode",
|
|
545
|
+
modelAgnostic: true,
|
|
546
|
+
supportsInBandAbort: false,
|
|
547
|
+
surfaces: [
|
|
548
|
+
"anthropic-messages",
|
|
549
|
+
"openai-completions",
|
|
550
|
+
"openai-responses",
|
|
551
|
+
"google-generative-ai"
|
|
552
|
+
],
|
|
553
|
+
providerPlurality: "credentials-n"
|
|
554
|
+
},
|
|
555
|
+
goose: {
|
|
556
|
+
id: "goose",
|
|
557
|
+
name: "Goose",
|
|
558
|
+
modelAgnostic: true,
|
|
559
|
+
supportsInBandAbort: false,
|
|
560
|
+
surfaces: [
|
|
561
|
+
"anthropic-messages",
|
|
562
|
+
"openai-completions",
|
|
563
|
+
"google-generative-ai",
|
|
564
|
+
"bedrock-converse-stream"
|
|
565
|
+
],
|
|
566
|
+
providerPlurality: "credentials-n"
|
|
567
|
+
},
|
|
568
|
+
continue: {
|
|
569
|
+
id: "continue",
|
|
570
|
+
name: "Continue CLI",
|
|
571
|
+
modelAgnostic: true,
|
|
572
|
+
supportsInBandAbort: false,
|
|
573
|
+
surfaces: ["anthropic-messages", "openai-completions", "google-generative-ai"],
|
|
574
|
+
providerPlurality: "credentials-n"
|
|
575
|
+
}
|
|
576
|
+
};
|
|
577
|
+
var _harnessesRegistered = false;
|
|
578
|
+
async function registerBuiltinHarnesses(registry = pluginRegistry) {
|
|
579
|
+
if (registry === pluginRegistry && _harnessesRegistered) return;
|
|
580
|
+
if (!registry.get("harness", "omp")) {
|
|
581
|
+
const m = await import('./bridge/harnesses/omp.js');
|
|
582
|
+
registry.register("harness", m.ompHarnessTarget);
|
|
583
|
+
}
|
|
584
|
+
if (!registry.get("harness", "echo")) {
|
|
585
|
+
const m = await import('./bridge/harnesses/echo.js');
|
|
586
|
+
registry.register("harness", m.echoHarnessTarget);
|
|
587
|
+
}
|
|
588
|
+
if (INCLUDE_CLAUDE_SDK && !registry.get("harness", "claude-sdk")) {
|
|
589
|
+
const m = await import('./bridge/harnesses/claude-sdk.js');
|
|
590
|
+
registry.register("harness", m.claudeSdkHarnessTarget);
|
|
591
|
+
}
|
|
592
|
+
if (INCLUDE_CODEX && !registry.get("harness", "codex")) {
|
|
593
|
+
const m = await import('./bridge/harnesses/codex.js');
|
|
594
|
+
registry.register("harness", m.codexHarnessTarget);
|
|
595
|
+
}
|
|
596
|
+
if (!registry.get("harness", "gemini")) {
|
|
597
|
+
const m = await import('./bridge/harnesses/gemini.js');
|
|
598
|
+
registry.register("harness", m.geminiHarnessTarget);
|
|
599
|
+
}
|
|
600
|
+
if (!registry.get("harness", "qwen")) {
|
|
601
|
+
const m = await import('./bridge/harnesses/qwen.js');
|
|
602
|
+
registry.register("harness", m.qwenHarnessTarget);
|
|
603
|
+
}
|
|
604
|
+
if (!registry.get("harness", "opencode")) {
|
|
605
|
+
const m = await import('./bridge/harnesses/opencode.js');
|
|
606
|
+
registry.register("harness", m.opencodeHarnessTarget);
|
|
607
|
+
}
|
|
608
|
+
if (!registry.get("harness", "goose")) {
|
|
609
|
+
const m = await import('./bridge/harnesses/goose.js');
|
|
610
|
+
registry.register("harness", m.gooseHarnessTarget);
|
|
611
|
+
}
|
|
612
|
+
if (!registry.get("harness", "continue")) {
|
|
613
|
+
const m = await import('./bridge/harnesses/continue.js');
|
|
614
|
+
registry.register("harness", m.continueHarnessTarget);
|
|
615
|
+
}
|
|
616
|
+
if (registry === pluginRegistry) _harnessesRegistered = true;
|
|
617
|
+
}
|
|
618
|
+
async function createHarness(id, config, ctx) {
|
|
619
|
+
const target = await resolveHarnessTarget(id);
|
|
620
|
+
return target.create(config, ctx ?? {});
|
|
621
|
+
}
|
|
622
|
+
async function resolveHarnessTarget(id) {
|
|
623
|
+
await registerBuiltinHarnesses();
|
|
624
|
+
const target = pluginRegistry.get("harness", id);
|
|
625
|
+
if (!target) {
|
|
626
|
+
if (id in BUILTIN_HARNESS_CATALOG) {
|
|
627
|
+
throw new Error(`Agent harness "${id}" is not bundled in this build.`);
|
|
628
|
+
}
|
|
629
|
+
throw new Error(
|
|
630
|
+
`Unknown agent harness: "${id}". Available: ${listHarnesses().map((d) => d.id).join(", ")}`
|
|
631
|
+
);
|
|
632
|
+
}
|
|
633
|
+
return target;
|
|
634
|
+
}
|
|
635
|
+
function listHarnesses() {
|
|
636
|
+
const merged = /* @__PURE__ */ new Map();
|
|
637
|
+
for (const info of Object.values(BUILTIN_HARNESS_CATALOG)) {
|
|
638
|
+
merged.set(info.id, info);
|
|
639
|
+
}
|
|
640
|
+
for (const meta of pluginRegistry.list("harness")) {
|
|
641
|
+
if (!merged.has(meta.id)) {
|
|
642
|
+
const target = pluginRegistry.get("harness", meta.id);
|
|
643
|
+
merged.set(meta.id, {
|
|
644
|
+
id: meta.id,
|
|
645
|
+
name: meta.displayName,
|
|
646
|
+
modelAgnostic: target?.modelAgnostic ?? false,
|
|
647
|
+
supportsInBandAbort: target?.supportsInBandAbort ?? false,
|
|
648
|
+
// Left absent when the target declares nothing: "speaks no surface" and
|
|
649
|
+
// "did not say" are different claims, and the platform resolver must be
|
|
650
|
+
// able to tell them apart before it filters a harness out.
|
|
651
|
+
...target?.surfaces ? { surfaces: target.surfaces } : {},
|
|
652
|
+
...target?.providerPlurality ? { providerPlurality: target.providerPlurality } : {},
|
|
653
|
+
...target?.capabilities ? { capabilities: target.capabilities } : {}
|
|
654
|
+
});
|
|
655
|
+
}
|
|
656
|
+
}
|
|
657
|
+
return [...merged.values()];
|
|
658
|
+
}
|
|
659
|
+
async function listModelsForHarness(harnessId, registry, options) {
|
|
660
|
+
const target = await resolveHarnessTarget(harnessId);
|
|
661
|
+
return await target.listModels?.(registry, options) ?? [];
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
export { AI_PROVIDER_PRESETS, BUILTIN_HARNESS_CATALOG, PROVIDER_CREDENTIAL_ENV_PREFIX, PROVIDER_CREDENTIAL_ENV_SUFFIX, buildCredentialHeaders, catalogLayer, conventionalCredentialEnvName, createHarness, entryCredentialEnv, entryCredentialValue, expandPreset, getProviderPreset, harnessCapabilities, listHarnesses, listModelsForHarness, listProviderPresets, presetBaseUrl, probeProviderEntry, providerCredentialEnvName, registerBuiltinHarnesses, registryCredentialEnv, resolveEntryCredential, resolvePresetBaseUrl, resolveProbeUrl, supportsLiveToolUpdates, unresolvedProviderCredentials };
|
|
665
|
+
//# sourceMappingURL=chunk-NSIOBKDX.js.map
|
|
666
|
+
//# sourceMappingURL=chunk-NSIOBKDX.js.map
|