@skaile/workspaces 6.3.0 → 6.4.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 +22 -0
- package/dist/ai-sdk.js +28 -16
- package/dist/ai-sdk.js.map +1 -1
- package/dist/app-sdk/index.js +1 -1
- package/dist/{asset-feeds-3YO2352Y.js → asset-feeds-UJSYGKCX.js} +19 -19
- package/dist/{asset-feeds-3YO2352Y.js.map → asset-feeds-UJSYGKCX.js.map} +1 -1
- package/dist/asset-manager/catalog-deployer.js +6 -6
- package/dist/asset-manager/index.js +11 -11
- package/dist/asset-manager/installer.js +7 -7
- package/dist/asset-manager/renderers.js +6 -6
- package/dist/asset-manager/src/index.d.ts +42 -15
- package/dist/asset-manager/src/index.d.ts.map +1 -1
- package/dist/asset-manager/src/install-instances.d.ts +2 -0
- package/dist/asset-manager/src/install-instances.d.ts.map +1 -1
- package/dist/asset-manager/src/installer.d.ts.map +1 -1
- package/dist/bridge/harnesses/claude-sdk.js +10 -10
- package/dist/bridge/harnesses/codex.js +8 -8
- package/dist/bridge/harnesses/continue.js +9 -9
- package/dist/bridge/harnesses/echo.js +4 -4
- package/dist/bridge/harnesses/gemini.js +5 -5
- package/dist/bridge/harnesses/goose.js +9 -9
- package/dist/bridge/harnesses/omp.js +6 -6
- package/dist/bridge/harnesses/opencode.js +9 -9
- package/dist/bridge/harnesses/qwen.js +5 -5
- package/dist/bridge/index.js +15 -15
- package/dist/bridge/src/ai-sdk.d.ts +5 -0
- package/dist/bridge/src/ai-sdk.d.ts.map +1 -1
- package/dist/bridge/src/harness-model-check.d.ts +11 -7
- package/dist/bridge/src/harness-model-check.d.ts.map +1 -1
- package/dist/{chunk-72NT2TJU.js → chunk-24D7IW5O.js} +6 -6
- package/dist/{chunk-72NT2TJU.js.map → chunk-24D7IW5O.js.map} +1 -1
- package/dist/{chunk-HH2H2ZV7.js → chunk-2WOA3TKK.js} +12 -12
- package/dist/chunk-2WOA3TKK.js.map +1 -0
- package/dist/{chunk-6WH2WE4B.js → chunk-3ENE6ZOF.js} +4 -4
- package/dist/{chunk-6WH2WE4B.js.map → chunk-3ENE6ZOF.js.map} +1 -1
- package/dist/{chunk-32FYVSSW.js → chunk-45KLCFQB.js} +5 -5
- package/dist/{chunk-32FYVSSW.js.map → chunk-45KLCFQB.js.map} +1 -1
- package/dist/{chunk-BPTWWKGF.js → chunk-5NHBLKKU.js} +3 -3
- package/dist/{chunk-BPTWWKGF.js.map → chunk-5NHBLKKU.js.map} +1 -1
- package/dist/{chunk-7MV3NHPT.js → chunk-5T3DTK7A.js} +41 -23
- package/dist/chunk-5T3DTK7A.js.map +1 -0
- package/dist/{chunk-XBQTXGY4.js → chunk-6WQGJF65.js} +18 -6
- package/dist/chunk-6WQGJF65.js.map +1 -0
- package/dist/{chunk-H622YULS.js → chunk-6X3GDPCB.js} +3 -3
- package/dist/{chunk-H622YULS.js.map → chunk-6X3GDPCB.js.map} +1 -1
- package/dist/{chunk-7QG2WRSN.js → chunk-76WSWPOB.js} +15 -7
- package/dist/{chunk-7QG2WRSN.js.map → chunk-76WSWPOB.js.map} +1 -1
- package/dist/{chunk-J5JRGBKK.js → chunk-ABVWUM2E.js} +27 -17
- package/dist/chunk-ABVWUM2E.js.map +1 -0
- package/dist/{chunk-V5BPDB4J.js → chunk-ACBL7X62.js} +3 -3
- package/dist/{chunk-V5BPDB4J.js.map → chunk-ACBL7X62.js.map} +1 -1
- package/dist/{chunk-VUJXZDCY.js → chunk-BOS7P2Y4.js} +3 -3
- package/dist/{chunk-VUJXZDCY.js.map → chunk-BOS7P2Y4.js.map} +1 -1
- package/dist/{chunk-PNUM7GUY.js → chunk-BUU2DLPC.js} +3 -3
- package/dist/{chunk-PNUM7GUY.js.map → chunk-BUU2DLPC.js.map} +1 -1
- package/dist/{chunk-PL52CI4U.js → chunk-BX7PSWJA.js} +4 -4
- package/dist/{chunk-PL52CI4U.js.map → chunk-BX7PSWJA.js.map} +1 -1
- package/dist/{chunk-URCJIV7T.js → chunk-C7TQARGC.js} +3 -3
- package/dist/{chunk-URCJIV7T.js.map → chunk-C7TQARGC.js.map} +1 -1
- package/dist/{chunk-E5NQRHEB.js → chunk-CK3CJSRY.js} +3 -3
- package/dist/{chunk-E5NQRHEB.js.map → chunk-CK3CJSRY.js.map} +1 -1
- package/dist/{chunk-4QRJBY2P.js → chunk-DCJ4BION.js} +2 -2
- package/dist/{chunk-4QRJBY2P.js.map → chunk-DCJ4BION.js.map} +1 -1
- package/dist/{chunk-HGOJEVHY.js → chunk-DF5WJC3Q.js} +4 -4
- package/dist/{chunk-HGOJEVHY.js.map → chunk-DF5WJC3Q.js.map} +1 -1
- package/dist/{chunk-QK7AG5AV.js → chunk-E237FGGX.js} +4 -4
- package/dist/{chunk-QK7AG5AV.js.map → chunk-E237FGGX.js.map} +1 -1
- package/dist/{chunk-ZEH4WFEG.js → chunk-EXRQKOY6.js} +11 -11
- package/dist/{chunk-ZEH4WFEG.js.map → chunk-EXRQKOY6.js.map} +1 -1
- package/dist/{chunk-QFFMFZIR.js → chunk-G63KOHFS.js} +3 -3
- package/dist/{chunk-QFFMFZIR.js.map → chunk-G63KOHFS.js.map} +1 -1
- package/dist/{chunk-Y3I4KGLX.js → chunk-GBXQFJ4G.js} +8 -8
- package/dist/{chunk-Y3I4KGLX.js.map → chunk-GBXQFJ4G.js.map} +1 -1
- package/dist/{chunk-6GWSDPBP.js → chunk-GTMANMBZ.js} +3 -3
- package/dist/{chunk-6GWSDPBP.js.map → chunk-GTMANMBZ.js.map} +1 -1
- package/dist/{chunk-YW4ASEUP.js → chunk-HSF665NV.js} +5 -5
- package/dist/{chunk-YW4ASEUP.js.map → chunk-HSF665NV.js.map} +1 -1
- package/dist/{chunk-LEJQAX7G.js → chunk-HXZ3FQQN.js} +14 -14
- package/dist/{chunk-LEJQAX7G.js.map → chunk-HXZ3FQQN.js.map} +1 -1
- package/dist/{chunk-ROVZCGTN.js → chunk-IYZAJ2J2.js} +16 -13
- package/dist/chunk-IYZAJ2J2.js.map +1 -0
- package/dist/{chunk-PHAMYCZH.js → chunk-IZV3HDVG.js} +5 -5
- package/dist/{chunk-PHAMYCZH.js.map → chunk-IZV3HDVG.js.map} +1 -1
- package/dist/{chunk-ELSGFI3I.js → chunk-JSWMRYLM.js} +3 -3
- package/dist/{chunk-ELSGFI3I.js.map → chunk-JSWMRYLM.js.map} +1 -1
- package/dist/{chunk-TSTRH4SM.js → chunk-L45IHRDH.js} +3 -3
- package/dist/{chunk-TSTRH4SM.js.map → chunk-L45IHRDH.js.map} +1 -1
- package/dist/{chunk-Q7CU5GQO.js → chunk-L4OYPFLB.js} +3 -3
- package/dist/{chunk-Q7CU5GQO.js.map → chunk-L4OYPFLB.js.map} +1 -1
- package/dist/{chunk-7TSNR5H5.js → chunk-O7KAQQAI.js} +4 -4
- package/dist/{chunk-7TSNR5H5.js.map → chunk-O7KAQQAI.js.map} +1 -1
- package/dist/{chunk-EQNIBBB6.js → chunk-P7EL7QRD.js} +14 -14
- package/dist/{chunk-EQNIBBB6.js.map → chunk-P7EL7QRD.js.map} +1 -1
- package/dist/{chunk-2TFKXSB5.js → chunk-PTBX55QF.js} +4 -4
- package/dist/{chunk-2TFKXSB5.js.map → chunk-PTBX55QF.js.map} +1 -1
- package/dist/{chunk-DU26AVK2.js → chunk-Q4XWCVFA.js} +7 -7
- package/dist/{chunk-DU26AVK2.js.map → chunk-Q4XWCVFA.js.map} +1 -1
- package/dist/{chunk-S6KZHPR4.js → chunk-QJQQNBVT.js} +2 -2
- package/dist/{chunk-S6KZHPR4.js.map → chunk-QJQQNBVT.js.map} +1 -1
- package/dist/{chunk-HDVLBEEX.js → chunk-QSIFEHSN.js} +3 -3
- package/dist/{chunk-HDVLBEEX.js.map → chunk-QSIFEHSN.js.map} +1 -1
- package/dist/{chunk-VUWRGMT6.js → chunk-RKI35EAN.js} +3 -3
- package/dist/{chunk-VUWRGMT6.js.map → chunk-RKI35EAN.js.map} +1 -1
- package/dist/{chunk-7RH6E332.js → chunk-SISUT7VR.js} +7 -7
- package/dist/{chunk-7RH6E332.js.map → chunk-SISUT7VR.js.map} +1 -1
- package/dist/{chunk-TGV2EWGL.js → chunk-TDKZL5ZC.js} +3 -3
- package/dist/{chunk-TGV2EWGL.js.map → chunk-TDKZL5ZC.js.map} +1 -1
- package/dist/{chunk-KIPCBIFJ.js → chunk-TF5CWJQZ.js} +5 -5
- package/dist/{chunk-KIPCBIFJ.js.map → chunk-TF5CWJQZ.js.map} +1 -1
- package/dist/{chunk-KGHYXXXV.js → chunk-TGB4E5Z6.js} +188 -52
- package/dist/chunk-TGB4E5Z6.js.map +1 -0
- package/dist/{chunk-AMJ6KEV7.js → chunk-TPQKFX6X.js} +4 -4
- package/dist/{chunk-AMJ6KEV7.js.map → chunk-TPQKFX6X.js.map} +1 -1
- package/dist/{chunk-KPKGWXUJ.js → chunk-U6S5CXKB.js} +3 -3
- package/dist/{chunk-KPKGWXUJ.js.map → chunk-U6S5CXKB.js.map} +1 -1
- package/dist/{chunk-JGH7NB47.js → chunk-UAOHR6AL.js} +4 -4
- package/dist/{chunk-JGH7NB47.js.map → chunk-UAOHR6AL.js.map} +1 -1
- package/dist/{chunk-COUJOTAJ.js → chunk-UBLZALKP.js} +3 -3
- package/dist/{chunk-COUJOTAJ.js.map → chunk-UBLZALKP.js.map} +1 -1
- package/dist/{chunk-BIRW3HOG.js → chunk-UUKCPPTQ.js} +3 -3
- package/dist/{chunk-BIRW3HOG.js.map → chunk-UUKCPPTQ.js.map} +1 -1
- package/dist/{chunk-TO5SSMRI.js → chunk-UVTN4O7N.js} +42 -17
- package/dist/chunk-UVTN4O7N.js.map +1 -0
- package/dist/{chunk-LD6O6QKU.js → chunk-V4OXHEWY.js} +3 -3
- package/dist/{chunk-LD6O6QKU.js.map → chunk-V4OXHEWY.js.map} +1 -1
- package/dist/{chunk-QTLUZUF2.js → chunk-VSCLUPGZ.js} +28 -26
- package/dist/chunk-VSCLUPGZ.js.map +1 -0
- package/dist/{chunk-JMIKGAUA.js → chunk-VV2DJT4I.js} +15 -5
- package/dist/chunk-VV2DJT4I.js.map +1 -0
- package/dist/{chunk-JCPD4QRM.js → chunk-VZU67OKK.js} +2 -2
- package/dist/{chunk-JCPD4QRM.js.map → chunk-VZU67OKK.js.map} +1 -1
- package/dist/{chunk-XEVFSDIF.js → chunk-WENTJ5KP.js} +4 -4
- package/dist/{chunk-XEVFSDIF.js.map → chunk-WENTJ5KP.js.map} +1 -1
- package/dist/{chunk-MD3FUZS3.js → chunk-YFGXYQW4.js} +3 -3
- package/dist/{chunk-MD3FUZS3.js.map → chunk-YFGXYQW4.js.map} +1 -1
- package/dist/{chunk-MYXFR27L.js → chunk-YJNE4V2M.js} +16 -9
- package/dist/chunk-YJNE4V2M.js.map +1 -0
- package/dist/{chunk-RFQONXET.js → chunk-ZWCGJYR7.js} +3 -3
- package/dist/{chunk-RFQONXET.js.map → chunk-ZWCGJYR7.js.map} +1 -1
- package/dist/{claude-code-EUKDGOOO.js → claude-code-UBT4ZME7.js} +4 -4
- package/dist/{claude-code-EUKDGOOO.js.map → claude-code-UBT4ZME7.js.map} +1 -1
- package/dist/cli/index.js +103 -89
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/src/commands/library-cmd.d.ts.map +1 -1
- package/dist/cli/src/commands/library-index.d.ts.map +1 -1
- package/dist/cli/src/commands/plugin-registry-cmd.d.ts.map +1 -1
- package/dist/cli/src/commands/preset-cmd.d.ts.map +1 -1
- package/dist/cli/src/helpers.d.ts +10 -2
- package/dist/cli/src/helpers.d.ts.map +1 -1
- package/dist/cli/src/plugin-store/index.d.ts +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 +19 -14
- package/dist/cli/src/plugin-store/spec.d.ts.map +1 -1
- package/dist/cli/src/setup.d.ts.map +1 -1
- package/dist/connectors/config.js +4 -4
- package/dist/connectors/index.js +19 -19
- package/dist/{connectors-XYPE2DCQ.js → connectors-4WH32NK2.js} +22 -22
- package/dist/{connectors-XYPE2DCQ.js.map → connectors-4WH32NK2.js.map} +1 -1
- package/dist/connectors-shared/index.js +2 -2
- package/dist/core/index.js +5 -5
- package/dist/core/manifest.js +1 -1
- package/dist/core/publish-manifest.js +2 -2
- package/dist/core/runtime-assets.js +4 -4
- package/dist/core/src/index.d.ts +1 -1
- package/dist/core/src/index.d.ts.map +1 -1
- package/dist/core/src/lock.d.ts.map +1 -1
- package/dist/core/src/manifest.d.ts +9 -3
- package/dist/core/src/manifest.d.ts.map +1 -1
- package/dist/core/src/workspace-config.d.ts +15 -0
- package/dist/core/src/workspace-config.d.ts.map +1 -1
- package/dist/core/src/workspace-yaml-editor.d.ts.map +1 -1
- package/dist/core/workspace-config.js +3 -3
- package/dist/deploy/index.js +5 -5
- package/dist/discovery/index.js +3 -3
- package/dist/{ensure-sources-IN3VKHUA.js → ensure-sources-UC2RBYMP.js} +24 -24
- package/dist/{ensure-sources-IN3VKHUA.js.map → ensure-sources-UC2RBYMP.js.map} +1 -1
- package/dist/factory-assets/connectors/box.js +19 -19
- package/dist/factory-assets/connectors/deploy.js +19 -19
- package/dist/factory-assets/connectors/devserver.js +19 -19
- package/dist/factory-assets/connectors/flow/adapter.js +19 -19
- package/dist/factory-assets/connectors/flow/engine.js +6 -6
- package/dist/factory-assets/connectors/flow/run-flow.js +21 -21
- package/dist/factory-assets/connectors/flow.js +19 -19
- package/dist/factory-assets/connectors/git.js +19 -19
- package/dist/factory-assets/connectors/gmail.js +19 -19
- package/dist/factory-assets/connectors/googledrive.js +19 -19
- package/dist/factory-assets/connectors/local.js +19 -19
- package/dist/factory-assets/connectors/mattermost.js +19 -19
- package/dist/factory-assets/connectors/memory.js +19 -19
- package/dist/factory-assets/connectors/minio.js +19 -19
- package/dist/factory-assets/connectors/postgres.js +19 -19
- package/dist/factory-assets/connectors/s3.js +19 -19
- package/dist/factory-assets/connectors/sharepoint.js +19 -19
- package/dist/factory-assets/connectors/sqlite.js +19 -19
- package/dist/factory-assets/connectors/static-server.js +19 -19
- package/dist/factory-assets/connectors/tunnel.js +19 -19
- package/dist/factory-assets/connectors/webdav.js +19 -19
- package/dist/factory-assets/connectors/xstate-store.js +19 -19
- package/dist/factory-assets/connectors/xstate.js +19 -19
- package/dist/{flows-QAO63TDV.js → flows-LYTKNGKE.js} +10 -10
- package/dist/{flows-QAO63TDV.js.map → flows-LYTKNGKE.js.map} +1 -1
- package/dist/{helpers-HDVGCF3M.js → helpers-SSSKT5XK.js} +24 -24
- package/dist/{helpers-HDVGCF3M.js.map → helpers-SSSKT5XK.js.map} +1 -1
- package/dist/library/index.js +8 -8
- package/dist/library/install.js +3 -3
- package/dist/{library-publish-62OWCNB5.js → library-publish-GQMNTAKK.js} +48 -48
- package/dist/{library-publish-62OWCNB5.js.map → library-publish-GQMNTAKK.js.map} +1 -1
- package/dist/model-endpoint/index.js +8 -8
- package/dist/{open-library-TZ7OSDEJ.js → open-library-XGUCUJYE.js} +27 -27
- package/dist/{open-library-TZ7OSDEJ.js.map → open-library-XGUCUJYE.js.map} +1 -1
- package/dist/{open-registry-RLZKTJG3.js → open-registry-DIFEPDF6.js} +12 -12
- package/dist/{open-registry-RLZKTJG3.js.map → open-registry-DIFEPDF6.js.map} +1 -1
- package/dist/{paths-D6LBQETQ.js → paths-G4GFJLE2.js} +8 -8
- package/dist/{paths-D6LBQETQ.js.map → paths-G4GFJLE2.js.map} +1 -1
- package/dist/{plugin-store-A5J4TLCH.js → plugin-store-BBLDFD3L.js} +8 -8
- package/dist/{plugin-store-A5J4TLCH.js.map → plugin-store-BBLDFD3L.js.map} +1 -1
- package/dist/{project-4AVRES3M.js → project-LB745WVZ.js} +44 -44
- package/dist/{project-4AVRES3M.js.map → project-LB745WVZ.js.map} +1 -1
- package/dist/resolver/index.js +6 -6
- package/dist/runner/index.js +34 -34
- package/dist/runner/src/capability-roundtrip.d.ts +4 -1
- package/dist/runner/src/capability-roundtrip.d.ts.map +1 -1
- package/dist/sdk/asset-manager.js +11 -11
- package/dist/sdk/bridge.js +15 -15
- package/dist/sdk/core.js +5 -5
- package/dist/sdk/flow.js +6 -6
- package/dist/sdk/index.js +34 -34
- package/dist/sdk/resolver.js +6 -6
- package/dist/sdk/runner.js +34 -34
- package/dist/sdk/session.js +2 -2
- package/dist/sdk/transport/ws/server.js +6 -6
- package/dist/sdk/transport/ws.js +6 -6
- package/dist/sdk/transport.js +6 -6
- package/dist/sdk/types.js +1 -1
- package/dist/{serve-preflight-H2AYMGJ6.js → serve-preflight-NPWI4MV6.js} +25 -25
- package/dist/{serve-preflight-H2AYMGJ6.js.map → serve-preflight-NPWI4MV6.js.map} +1 -1
- package/dist/session/index.js +2 -2
- package/dist/{setup-NSPQD4V4.js → setup-X6ZYH2MW.js} +30 -27
- package/dist/setup-X6ZYH2MW.js.map +1 -0
- package/dist/{skills-B533SRVZ.js → skills-62PXDBPJ.js} +11 -11
- package/dist/{skills-B533SRVZ.js.map → skills-62PXDBPJ.js.map} +1 -1
- package/dist/{source-VTECABUO.js → source-LAYCTRHP.js} +44 -44
- package/dist/{source-VTECABUO.js.map → source-LAYCTRHP.js.map} +1 -1
- package/dist/{source-manifest-publish-YORI42MN.js → source-manifest-publish-3S6PJ25W.js} +46 -46
- package/dist/{source-manifest-publish-YORI42MN.js.map → source-manifest-publish-3S6PJ25W.js.map} +1 -1
- package/dist/transport/index.js +6 -6
- package/dist/transport/ws/server.js +6 -6
- package/dist/transport/ws.js +6 -6
- package/dist/tui/index.js +34 -34
- package/dist/types/index.js +1 -1
- package/dist/types/src/capabilities.d.ts +9 -1
- package/dist/types/src/capabilities.d.ts.map +1 -1
- package/dist/workspace-plugin/adapters/mcp.js +26 -26
- 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-7MV3NHPT.js.map +0 -1
- package/dist/chunk-HH2H2ZV7.js.map +0 -1
- package/dist/chunk-J5JRGBKK.js.map +0 -1
- package/dist/chunk-JMIKGAUA.js.map +0 -1
- package/dist/chunk-KGHYXXXV.js.map +0 -1
- package/dist/chunk-MYXFR27L.js.map +0 -1
- package/dist/chunk-QTLUZUF2.js.map +0 -1
- package/dist/chunk-ROVZCGTN.js.map +0 -1
- package/dist/chunk-TO5SSMRI.js.map +0 -1
- package/dist/chunk-XBQTXGY4.js.map +0 -1
- package/dist/setup-NSPQD4V4.js.map +0 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { pluginRegistry } from './chunk-G5SUWZEU.js';
|
|
2
|
-
import { readPluginsLockSlice } from './chunk-
|
|
2
|
+
import { readPluginsLockSlice } from './chunk-ABVWUM2E.js';
|
|
3
3
|
import pc from 'picocolors';
|
|
4
4
|
import { pathToFileURL } from 'url';
|
|
5
5
|
import { existsSync, readFileSync, rmSync, writeFileSync, mkdirSync } from 'fs';
|
|
6
|
-
import { join, resolve } from 'path';
|
|
6
|
+
import path, { join, resolve } from 'path';
|
|
7
7
|
import { createHash } from 'crypto';
|
|
8
8
|
|
|
9
9
|
function pluginsDir(projectDir) {
|
|
@@ -57,12 +57,10 @@ function resolvePluginEntry(projectDir, pkgName) {
|
|
|
57
57
|
}
|
|
58
58
|
return entry;
|
|
59
59
|
}
|
|
60
|
-
|
|
61
|
-
// cli/src/plugin-store/spec.ts
|
|
62
60
|
function parseSpec(spec) {
|
|
63
61
|
const trimmed = spec.trim();
|
|
64
62
|
if (!trimmed) throw new Error("parseSpec: empty specifier");
|
|
65
|
-
const at = trimmed.
|
|
63
|
+
const at = trimmed.indexOf("@", 1);
|
|
66
64
|
if (at <= 0) {
|
|
67
65
|
return { name: trimmed, range: "*" };
|
|
68
66
|
}
|
|
@@ -73,16 +71,38 @@ function parseSpec(spec) {
|
|
|
73
71
|
function specName(spec) {
|
|
74
72
|
return parseSpec(spec).name;
|
|
75
73
|
}
|
|
76
|
-
var
|
|
74
|
+
var PACKAGE_NAME = /^(?:@[A-Za-z0-9][A-Za-z0-9._~-]*\/)?[A-Za-z0-9][A-Za-z0-9._~-]*$/;
|
|
77
75
|
function npmSpecError(spec) {
|
|
78
76
|
const trimmed = spec.trim();
|
|
79
|
-
if (trimmed !== "") {
|
|
80
|
-
|
|
81
|
-
if (NPM_NAME.test(name) && (range.startsWith("file:") || !/[\s/\\]/.test(range))) {
|
|
82
|
-
return void 0;
|
|
83
|
-
}
|
|
77
|
+
if (trimmed !== "" && !/\s/.test(trimmed) && !/@file:$/i.test(trimmed)) {
|
|
78
|
+
if (PACKAGE_NAME.test(parseSpec(trimmed).name)) return void 0;
|
|
84
79
|
}
|
|
85
|
-
return `plugin spec '${spec}' is not an npm package name. Give an npm name with an optional version range, for example @scope/name@1.2.0
|
|
80
|
+
return `plugin spec '${spec}' is not an npm package name. Give an npm name with an optional version range, for example @scope/name@1.2.0, or write <name>@<spec> for a git, URL or local source, for example name@github:user/repo or name@file:/path/to/dir.`;
|
|
81
|
+
}
|
|
82
|
+
function relativeFileTarget(spec) {
|
|
83
|
+
const trimmed = spec.trim();
|
|
84
|
+
const at = trimmed.indexOf("@", 1);
|
|
85
|
+
if (at <= 0) return void 0;
|
|
86
|
+
const range = trimmed.slice(at + 1);
|
|
87
|
+
if (!/^file:/i.test(range)) return void 0;
|
|
88
|
+
const target = range.slice("file:".length);
|
|
89
|
+
if (target === "" || target.startsWith("//") || path.isAbsolute(target) || /^[A-Za-z]:[\\/]/.test(target)) {
|
|
90
|
+
return void 0;
|
|
91
|
+
}
|
|
92
|
+
return { head: trimmed.slice(0, at), target };
|
|
93
|
+
}
|
|
94
|
+
function projectRelativeFileSpec(spec, cwd, projectDir) {
|
|
95
|
+
const parts = relativeFileTarget(spec);
|
|
96
|
+
if (!parts) return spec;
|
|
97
|
+
const rel = path.relative(path.resolve(projectDir), path.resolve(cwd, parts.target));
|
|
98
|
+
if (path.isAbsolute(rel)) return `${parts.head}@file:${rel}`;
|
|
99
|
+
const posix = rel.split(path.sep).join("/") || ".";
|
|
100
|
+
return `${parts.head}@file:${posix.startsWith("..") || posix === "." ? posix : `./${posix}`}`;
|
|
101
|
+
}
|
|
102
|
+
function resolveFileSpec(spec, projectDir) {
|
|
103
|
+
const parts = relativeFileTarget(spec);
|
|
104
|
+
if (!parts) return spec;
|
|
105
|
+
return `${parts.head}@file:${path.resolve(projectDir, parts.target)}`;
|
|
86
106
|
}
|
|
87
107
|
|
|
88
108
|
// cli/src/plugin-store/load.ts
|
|
@@ -142,7 +162,7 @@ var defaultInstall = async (dir, opts = {}) => {
|
|
|
142
162
|
function writePackageJson(projectDir, plugins) {
|
|
143
163
|
const dependencies = {};
|
|
144
164
|
for (const spec of plugins) {
|
|
145
|
-
const { name, range } = parseSpec(spec);
|
|
165
|
+
const { name, range } = parseSpec(resolveFileSpec(spec, projectDir));
|
|
146
166
|
dependencies[name] = range;
|
|
147
167
|
}
|
|
148
168
|
const pkg = {
|
|
@@ -170,7 +190,12 @@ async function reconcilePlugins(projectDir, plugins, opts = {}) {
|
|
|
170
190
|
return { changed: false, reason: "no-plugins" };
|
|
171
191
|
}
|
|
172
192
|
const lockSlice = opts.lockSlice ?? readPluginsLockSlice(projectDir);
|
|
173
|
-
const wantHash = createHash("sha256").update(
|
|
193
|
+
const wantHash = createHash("sha256").update(
|
|
194
|
+
JSON.stringify({
|
|
195
|
+
plugins: plugins.map((spec) => resolveFileSpec(spec, projectDir)).sort(),
|
|
196
|
+
lock: lockSlice
|
|
197
|
+
})
|
|
198
|
+
).digest("hex");
|
|
174
199
|
const hashFile = reconcileHashFile(projectDir);
|
|
175
200
|
if (existsSync(hashFile)) {
|
|
176
201
|
const have = readFileSync(hashFile, "utf8").trim();
|
|
@@ -307,6 +332,6 @@ async function loadDeclaredPlugins(projectDir) {
|
|
|
307
332
|
}
|
|
308
333
|
}
|
|
309
334
|
|
|
310
|
-
export { condensePluginFailure, ensurePluginsLoaded, loadDeclaredPlugins, loadPlugins, npmSpecError, pluginFailureReasons, reconcilePlugins, rollbackPluginStore, specName };
|
|
311
|
-
//# sourceMappingURL=chunk-
|
|
312
|
-
//# sourceMappingURL=chunk-
|
|
335
|
+
export { condensePluginFailure, ensurePluginsLoaded, loadDeclaredPlugins, loadPlugins, npmSpecError, pluginFailureReasons, projectRelativeFileSpec, reconcilePlugins, resolveFileSpec, rollbackPluginStore, specName };
|
|
336
|
+
//# sourceMappingURL=chunk-UVTN4O7N.js.map
|
|
337
|
+
//# sourceMappingURL=chunk-UVTN4O7N.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../cli/src/plugin-store/paths.ts","../cli/src/plugin-store/spec.ts","../cli/src/plugin-store/load.ts","../cli/src/plugin-store/reconcile.ts","../cli/src/plugin-store/index.ts"],"names":["existsSync","readFileSync","join"],"mappings":"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","file":"chunk-UVTN4O7N.js","sourcesContent":["/**\n * Pure path helpers for the project-local plugin store.\n *\n * The store is a self-contained npm workspace owned by the CLI under\n * `<projectDir>/.skaile/plugins/`. Only `resolvePluginEntry` reads the filesystem.\n */\n\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { join, resolve } from \"node:path\";\n\n/** `<projectDir>/.skaile/plugins` — the store root. */\nexport function pluginsDir(projectDir: string): string {\n return join(projectDir, \".skaile\", \"plugins\");\n}\n\n/** `<store>/package.json` — generated, never user-edited. */\nexport function pluginsPkgJson(projectDir: string): string {\n return join(pluginsDir(projectDir), \"package.json\");\n}\n\n/** `<store>/node_modules` — where reconciled plugin packages land. */\nexport function nodeModulesDir(projectDir: string): string {\n return join(pluginsDir(projectDir), \"node_modules\");\n}\n\n/** `<store>/.reconcile-hash` — SHA of plugins-list + lock slice; skip reinstall when unchanged. */\nexport function reconcileHashFile(projectDir: string): string {\n return join(pluginsDir(projectDir), \".reconcile-hash\");\n}\n\n/** Pick the file an `exports` target points at, preferring the ESM-friendly conditions. */\nfunction exportsTarget(target: unknown): string | undefined {\n if (typeof target === \"string\") return target;\n if (Array.isArray(target)) {\n for (const t of target) {\n const hit = exportsTarget(t);\n if (hit) return hit;\n }\n return undefined;\n }\n if (target && typeof target === \"object\") {\n const map = target as Record<string, unknown>;\n for (const cond of [\"import\", \"node\", \"default\", \"require\"]) {\n if (cond in map) {\n const hit = exportsTarget(map[cond]);\n if (hit) return hit;\n }\n }\n }\n return undefined;\n}\n\n/**\n * Absolute path to a plugin package's entry file under the store's\n * `node_modules`, resolved from its `package.json` (`exports[\".\"]`, then\n * `module`, then `main`, then `index.js`). Node's ESM loader rejects directory\n * imports, so the entry must be a file; `import()` of the result works inside\n * compiled binaries via `pathToFileURL`.\n *\n * @throws When the package is not installed or declares no resolvable entry.\n */\nexport function resolvePluginEntry(projectDir: string, pkgName: string): string {\n const pkgDir = join(nodeModulesDir(projectDir), pkgName);\n const pkgJsonPath = join(pkgDir, \"package.json\");\n if (!existsSync(pkgJsonPath)) {\n throw new Error(`package \"${pkgName}\" is not installed in ${nodeModulesDir(projectDir)}`);\n }\n const pkg = JSON.parse(readFileSync(pkgJsonPath, \"utf8\")) as {\n exports?: unknown;\n module?: string;\n main?: string;\n };\n let rel: string | undefined;\n if (pkg.exports !== undefined) {\n const root =\n typeof pkg.exports === \"object\" && pkg.exports !== null && !Array.isArray(pkg.exports)\n ? ((pkg.exports as Record<string, unknown>)[\".\"] ?? pkg.exports)\n : pkg.exports;\n rel = exportsTarget(root);\n }\n rel ??= pkg.module ?? pkg.main ?? \"index.js\";\n const entry = resolve(pkgDir, rel);\n if (!existsSync(entry)) {\n throw new Error(`package \"${pkgName}\" entry ${rel} does not exist`);\n }\n return entry;\n}\n","/**\n * Parse npm package specifiers from the `plugins:` list into name + range.\n *\n * The leading `@` of a scope is NOT a separator: the first `@` at a non-zero\n * index splits the package name (which never holds an `@`) from its range, so a\n * range may hold one itself (`foo@npm:bar@1.0.0`, `foo@file:/a@b/dir`).\n * \"@skaile/provider-fly@^0.1.0\" → { name: \"@skaile/provider-fly\", range: \"^0.1.0\" }\n * \"@skaile/connector-redis\" → { name: \"@skaile/connector-redis\", range: \"*\" }\n * \"lodash@^4\" → { name: \"lodash\", range: \"^4\" }\n */\nimport path from \"node:path\";\n\n/** A parsed plugin specifier: package name plus a semver range (`\"*\"` when omitted). */\nexport interface PluginSpec {\n name: string;\n range: string;\n}\n\n/**\n * Parse a single plugin specifier into `{ name, range }`.\n *\n * @param spec - An npm specifier, e.g. `\"@skaile/provider-fly@^0.1.0\"` or `\"lodash\"`.\n * @returns The package name and semver range (range defaults to `\"*\"`).\n * @throws Error when the specifier is empty.\n */\nexport function parseSpec(spec: string): PluginSpec {\n const trimmed = spec.trim();\n if (!trimmed) throw new Error(\"parseSpec: empty specifier\");\n\n // Find the version-separating `@` — the first one that is not the scope `@`\n // at index 0. A bare `@scope/name` has its only `@` at index 0 (no range).\n const at = trimmed.indexOf(\"@\", 1);\n if (at <= 0) {\n return { name: trimmed, range: \"*\" };\n }\n const name = trimmed.slice(0, at);\n const range = trimmed.slice(at + 1);\n return { name, range: range.length > 0 ? range : \"*\" };\n}\n\n/** Convenience: just the package name of a specifier. */\nexport function specName(spec: string): string {\n return parseSpec(spec).name;\n}\n\n/** A package name as the registry and `package.json` keys hold it (legacy uppercase included). */\nconst PACKAGE_NAME = /^(?:@[A-Za-z0-9][A-Za-z0-9._~-]*\\/)?[A-Za-z0-9][A-Za-z0-9._~-]*$/;\n\n/**\n * The refusal for a specifier that does not start with a package name, or `undefined` when it\n * does: `name`, `@scope/name`, or `name@<any range>` (`name@^1`, `name@npm:other@1`,\n * `name@github:user/repo`, `name@git+https://...`, `name@https://...tgz`, `name@file:/abs/dir`).\n * A bare path, a `file:` URL, a `github:` / `git+` / `https:` source or `user/repo` has no name:\n * the package manager would send it to the registry or key `package.json` by the URL, and fail\n * late (p1737). Such a source is installed under its package name, `<name>@<spec>`.\n */\nexport function npmSpecError(spec: string): string | undefined {\n const trimmed = spec.trim();\n if (trimmed !== \"\" && !/\\s/.test(trimmed) && !/@file:$/i.test(trimmed)) {\n if (PACKAGE_NAME.test(parseSpec(trimmed).name)) return undefined;\n }\n return (\n `plugin spec '${spec}' is not an npm package name. Give an npm name with an optional version ` +\n \"range, for example @scope/name@1.2.0, or write <name>@<spec> for a git, URL or local source, \" +\n \"for example name@github:user/repo or name@file:/path/to/dir.\"\n );\n}\n\n/** The folder a `file:` range names, or `undefined` for any other spec or an absolute / URL target. */\nfunction relativeFileTarget(spec: string): { head: string; target: string } | undefined {\n const trimmed = spec.trim();\n const at = trimmed.indexOf(\"@\", 1);\n if (at <= 0) return undefined;\n const range = trimmed.slice(at + 1);\n if (!/^file:/i.test(range)) return undefined;\n const target = range.slice(\"file:\".length);\n if (\n target === \"\" ||\n target.startsWith(\"//\") ||\n path.isAbsolute(target) ||\n /^[A-Za-z]:[\\\\/]/.test(target)\n ) {\n return undefined;\n }\n return { head: trimmed.slice(0, at), target };\n}\n\n/**\n * The form of a spec to write into `skaile.yaml`. A relative `file:` range is typed relative to\n * `cwd`; `skaile.yaml` is committed and read on other machines, so it holds the folder relative\n * to the project instead (`name@file:./plugins/x`, `name@file:../x`), never a machine path\n * (p1737). Any other spec is returned as written.\n */\nexport function projectRelativeFileSpec(spec: string, cwd: string, projectDir: string): string {\n const parts = relativeFileTarget(spec);\n if (!parts) return spec;\n const rel = path.relative(path.resolve(projectDir), path.resolve(cwd, parts.target));\n if (path.isAbsolute(rel)) return `${parts.head}@file:${rel}`;\n const posix = rel.split(path.sep).join(\"/\") || \".\";\n return `${parts.head}@file:${posix.startsWith(\"..\") || posix === \".\" ? posix : `./${posix}`}`;\n}\n\n/**\n * The form of a spec to hand to the package manager. It runs in `.skaile/plugins/`, so a\n * project-relative `file:` range is resolved to an absolute path against `projectDir` here, and\n * only here (p1737). Any other spec is returned as written.\n */\nexport function resolveFileSpec(spec: string, projectDir: string): string {\n const parts = relativeFileTarget(spec);\n if (!parts) return spec;\n return `${parts.head}@file:${path.resolve(projectDir, parts.target)}`;\n}\n","/**\n * Runtime plugin loader: dynamic-import each reconciled plugin and let it\n * self-register into the `pluginRegistry`.\n *\n * Each plugin specifier resolves to an absolute path under the store's\n * `node_modules`; we import it via a `file://` URL so the import works inside\n * `bun --compile` binaries (which bundle only the literal-string switches, but\n * can still execute a `file://` import against the unpacked store on disk).\n * Failures are caught per-plugin so one broken plugin never aborts the rest.\n */\n\nimport { pathToFileURL } from \"node:url\";\nimport { type PluginRegistry, pluginRegistry } from \"@skaile/workspaces/plugin-registry\";\nimport type { Logger } from \"@skaile/workspaces/types\";\nimport { resolvePluginEntry } from \"./paths.js\";\nimport { parseSpec } from \"./spec.js\";\n\n/** Options for {@link loadPlugins}. */\nexport interface LoadOptions {\n log?: Logger;\n}\n\n/** Result of a load pass: which specs registered and which failed. */\nexport interface LoadResult {\n loaded: string[];\n failed: { spec: string; error: string; reason: string }[];\n}\n\n/** The self-registration entrypoint a plugin module is expected to export. */\ntype PluginModule = { register?: (registry: PluginRegistry) => void };\n\n/**\n * Load and register each plugin in `plugins` into `registry`.\n *\n * @param projectDir - Project root holding `.skaile/plugins/node_modules`.\n * @param plugins - The `skaile.yaml` `plugins:` list (npm specifiers).\n * @param registry - Registry to register into. Defaults to the process-wide `pluginRegistry`.\n * @param opts - Optional logger.\n * @returns Loaded specs + per-plugin failures (never throws).\n */\nexport async function loadPlugins(\n projectDir: string,\n plugins: string[],\n registry: PluginRegistry = pluginRegistry,\n opts: LoadOptions = {},\n): Promise<LoadResult> {\n const loaded: string[] = [];\n const failed: { spec: string; error: string; reason: string }[] = [];\n\n for (const spec of plugins) {\n try {\n const { name } = parseSpec(spec);\n const entry = resolvePluginEntry(projectDir, name);\n const mod = (await import(pathToFileURL(entry).href)) as PluginModule;\n if (typeof mod.register !== \"function\") {\n throw new Error(`plugin \"${name}\" does not export a register() function`);\n }\n mod.register(registry);\n loaded.push(spec);\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n failed.push({ spec, error: `failed to load plugin \"${spec}\": ${message}`, reason: message });\n opts.log?.warn(`plugin load failed: ${spec}`, { error: message });\n }\n }\n\n return { loaded, failed };\n}\n","/**\n * Reconcile the project-local plugin store (`<projectDir>/.skaile/plugins/`).\n *\n * The reconciler is hash-skipped: it computes a SHA-256 over the sorted plugin\n * list plus the lock file's `plugins` slice and compares it to the stored\n * `.reconcile-hash`. On a match it returns with zero further I/O; otherwise it\n * regenerates the store's `package.json` and runs `bun install` against it.\n *\n * The install step is injectable (`InstallFn`) so tests stay hermetic — they\n * pass a fake installer that records calls and writes a stub `node_modules`.\n */\n\nimport { createHash } from \"node:crypto\";\nimport { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { readPluginsLockSlice } from \"@skaile/workspaces/core\";\nimport { nodeModulesDir, pluginsDir, pluginsPkgJson, reconcileHashFile } from \"./paths.js\";\nimport { parseSpec, resolveFileSpec } from \"./spec.js\";\n\n/** How `InstallFn` may treat the store's lock: `frozen` forbids lock changes. */\nexport interface InstallOptions {\n /**\n * `false` when the spec list changed since the last `package.json`, so the\n * lock has to change too. Defaults to `true` (frozen when a lock exists).\n */\n frozen?: boolean;\n}\n\n/**\n * Installs the store's dependencies. Returns `ok: false` (never throws) on a\n * failed install so the reconciler can surface the captured `output`.\n */\nexport type InstallFn = (\n pluginsDir: string,\n opts?: InstallOptions,\n) => Promise<{ ok: boolean; output: string }>;\n\n/** Options for {@link reconcilePlugins}. */\nexport interface ReconcileOptions {\n /** Injectable installer. Defaults to a real `bun install` of the store. */\n runInstall?: InstallFn;\n /**\n * Lock slice to fold into the reconcile-hash. Defaults to\n * `readPluginsLockSlice(projectDir)` so a lock edit invalidates the hash.\n */\n lockSlice?: unknown;\n}\n\n/** Result of a reconcile pass. */\nexport interface ReconcileResult {\n changed: boolean;\n reason: \"no-plugins\" | \"up-to-date\" | \"reconciled\";\n}\n\n/** Run a command to completion, capturing stdout+stderr. `started: false` when it cannot spawn. */\nasync function runCapture(\n args: string[],\n cwd: string,\n): Promise<{ started: boolean; code: number; output: string }> {\n const { portableSpawn } = await import(\"@skaile/workspaces/core\");\n const proc = portableSpawn(args, { cwd });\n const chunks: string[] = [];\n const decoder = new TextDecoder();\n const pump = async (stream: ReadableStream<Uint8Array>) => {\n const reader = stream.getReader();\n for (;;) {\n const { done, value } = await reader.read();\n if (done) break;\n if (value) chunks.push(decoder.decode(value, { stream: true }));\n }\n };\n await Promise.all([pump(proc.stdout), pump(proc.stderr)]);\n const code = await proc.exited;\n // `portableSpawn` reports a spawn error (ENOENT) as exit -1 with no pid.\n return { started: proc.pid !== -1, code, output: chunks.join(\"\") };\n}\n\n/**\n * The default real installer: `bun install` inside the store directory, or\n * `npm install` when `bun` is not on PATH. Frozen only when a lock exists and\n * the spec list did not change (`opts.frozen !== false`): a changed list has to\n * rewrite the lock, which a frozen install refuses.\n */\nexport const defaultInstall: InstallFn = async (dir, opts = {}) => {\n const hasBunLock = existsSync(`${dir}/bun.lock`) || existsSync(`${dir}/bun.lockb`);\n const hasNpmLock = existsSync(`${dir}/package-lock.json`);\n const frozen = opts.frozen !== false;\n\n const bunArgs =\n frozen && (hasBunLock || hasNpmLock)\n ? [\"bun\", \"install\", \"--frozen-lockfile\"]\n : [\"bun\", \"install\"];\n const withBun = await runCapture(bunArgs, dir);\n if (withBun.started) return { ok: withBun.code === 0, output: withBun.output };\n\n const npmArgs =\n frozen && hasNpmLock\n ? [\"npm\", \"ci\", \"--ignore-scripts\", \"--no-audit\", \"--no-fund\"]\n : [\"npm\", \"install\", \"--ignore-scripts\", \"--no-audit\", \"--no-fund\"];\n const withNpm = await runCapture(npmArgs, dir);\n if (withNpm.started) return { ok: withNpm.code === 0, output: withNpm.output };\n return {\n ok: false,\n output:\n \"neither bun nor npm found on PATH; plugin install needs one of them (https://bun.sh or https://nodejs.org)\",\n };\n};\n\n/**\n * Generate the store's `package.json` from the plugin specs. Returns the\n * previous file content (`undefined` when there was none) and whether the\n * dependency set changed.\n */\nfunction writePackageJson(\n projectDir: string,\n plugins: string[],\n): { previous: string | undefined; depsChanged: boolean } {\n const dependencies: Record<string, string> = {};\n for (const spec of plugins) {\n const { name, range } = parseSpec(resolveFileSpec(spec, projectDir));\n dependencies[name] = range;\n }\n const pkg = {\n name: \"skaile-project-plugins\",\n private: true,\n dependencies,\n };\n const file = pluginsPkgJson(projectDir);\n const previous = existsSync(file) ? readFileSync(file, \"utf8\") : undefined;\n let before: Record<string, string> | undefined;\n try {\n before = previous === undefined ? undefined : JSON.parse(previous).dependencies;\n } catch {\n before = undefined;\n }\n const sortedJson = (d: Record<string, string> | undefined) =>\n JSON.stringify(Object.entries(d ?? {}).sort(([a], [b]) => a.localeCompare(b)));\n const depsChanged = before === undefined || sortedJson(before) !== sortedJson(dependencies);\n mkdirSync(pluginsDir(projectDir), { recursive: true });\n writeFileSync(file, `${JSON.stringify(pkg, null, 2)}\\n`);\n return { previous, depsChanged };\n}\n\n/**\n * Reconcile the plugin store for a project.\n *\n * @param projectDir - Project root containing `skaile.yaml` / `skaile.lock.yaml`.\n * @param plugins - The `skaile.yaml` `plugins:` list (npm specifiers).\n * @param opts - Optional injectable installer + lock slice override.\n * @returns Whether the store changed and why.\n */\nexport async function reconcilePlugins(\n projectDir: string,\n plugins: string[],\n opts: ReconcileOptions = {},\n): Promise<ReconcileResult> {\n if (plugins.length === 0) {\n return { changed: false, reason: \"no-plugins\" };\n }\n\n const lockSlice = opts.lockSlice ?? readPluginsLockSlice(projectDir);\n const wantHash = createHash(\"sha256\")\n .update(\n JSON.stringify({\n plugins: plugins.map((spec) => resolveFileSpec(spec, projectDir)).sort(),\n lock: lockSlice,\n }),\n )\n .digest(\"hex\");\n\n const hashFile = reconcileHashFile(projectDir);\n if (existsSync(hashFile)) {\n const have = readFileSync(hashFile, \"utf8\").trim();\n if (have === wantHash) {\n return { changed: false, reason: \"up-to-date\" };\n }\n }\n\n const { previous, depsChanged } = writePackageJson(projectDir, plugins);\n\n const install = opts.runInstall ?? defaultInstall;\n const result = await install(pluginsDir(projectDir), { frozen: !depsChanged });\n if (!result.ok) {\n // A failed install must not leave the spec behind: the next reconcile\n // would compare against it and treat the store as already changed.\n if (previous === undefined) rmSync(pluginsPkgJson(projectDir), { force: true });\n else writeFileSync(pluginsPkgJson(projectDir), previous);\n throw new Error(`plugin install failed:\\n${result.output}`);\n }\n\n writeFileSync(hashFile, wantHash);\n return { changed: true, reason: \"reconciled\" };\n}\n\n/**\n * Put the store back to `previousPlugins` after `plugin install` failed past\n * the reconcile (the plugin installed but does not load). Best effort: a\n * failing reinstall is swallowed, the store is then rebuilt by the next\n * reconcile because the hash no longer matches the declared list.\n *\n * With no previous plugins every generated file of the store goes away\n * (`package.json`, hash, lock file and `node_modules`), so the store keeps\n * neither the rejected spec nor its installed package.\n */\nexport async function rollbackPluginStore(\n projectDir: string,\n previousPlugins: string[],\n opts: ReconcileOptions = {},\n): Promise<void> {\n if (previousPlugins.length === 0) {\n const dir = pluginsDir(projectDir);\n rmSync(pluginsPkgJson(projectDir), { force: true });\n rmSync(reconcileHashFile(projectDir), { force: true });\n rmSync(nodeModulesDir(projectDir), { recursive: true, force: true });\n for (const lock of [\"bun.lock\", \"bun.lockb\", \"package-lock.json\"]) {\n rmSync(join(dir, lock), { force: true });\n }\n return;\n }\n try {\n await reconcilePlugins(projectDir, previousPlugins, opts);\n } catch {\n // the next reconcile retries\n }\n}\n","/**\n * The project-local plugin store: reconcile (`<projectDir>/.skaile/plugins/`)\n * then load the reconciled plugins into the `pluginRegistry`.\n *\n * `ensurePluginsLoaded` is the single entrypoint commands wire in. It is a\n * guarded no-op when `plugins` is empty/undefined — zero overhead for the\n * common case where no project declares `plugins:` in `skaile.yaml`.\n */\n\nimport { type PluginRegistry, pluginRegistry } from \"@skaile/workspaces/plugin-registry\";\nimport type { Logger } from \"@skaile/workspaces/types\";\nimport pc from \"picocolors\";\nimport { type LoadResult, loadPlugins } from \"./load.js\";\nimport { type ReconcileOptions, reconcilePlugins } from \"./reconcile.js\";\nimport { specName } from \"./spec.js\";\n\nexport type { LoadResult } from \"./load.js\";\nexport { loadPlugins } from \"./load.js\";\nexport type { ReconcileOptions } from \"./reconcile.js\";\nexport { reconcilePlugins, rollbackPluginStore } from \"./reconcile.js\";\nexport { npmSpecError, projectRelativeFileSpec, resolveFileSpec, specName } from \"./spec.js\";\n\n/** Options for {@link ensurePluginsLoaded}. */\nexport interface EnsurePluginsOptions extends ReconcileOptions {\n log?: Logger;\n}\n\n/**\n * Reconcile the plugin store then load each plugin into `registry`.\n *\n * No-op (returns immediately) when `plugins` is empty/undefined, so the common\n * no-plugins path costs nothing.\n *\n * @param projectDir - Project root.\n * @param plugins - The `skaile.yaml` `plugins:` list (may be undefined).\n * @param registry - Registry to register into. Defaults to `pluginRegistry`.\n * @param opts - Injectable installer / lock slice + optional logger.\n * @returns The load result, or an empty result when there are no plugins.\n */\nexport async function ensurePluginsLoaded(\n projectDir: string,\n plugins: string[] | undefined,\n registry: PluginRegistry = pluginRegistry,\n opts: EnsurePluginsOptions = {},\n): Promise<LoadResult> {\n if (!plugins || plugins.length === 0) {\n return { loaded: [], failed: [] };\n }\n await reconcilePlugins(projectDir, plugins, opts);\n return loadPlugins(projectDir, plugins, registry, { log: opts.log });\n}\n\n/**\n * The installer's output of a failed `plugin install` is a dump (bun's banner, resolver\n * progress, then the `error:` lines). A load warning keeps the first line and the cause of it\n * (p1113); `skaile plugin install <spec>` prints the whole output.\n *\n * bun: the last `error:` line. npm: its `code` line and the first detail line after it\n * (`E404: 404 Not Found - GET …`), never the trailing `A complete log of this run can be found\n * in: …` pointer (p1272).\n */\nexport function condensePluginFailure(reason: string): string {\n const lines = reason\n .split(\"\\n\")\n .map((l) => l.trim())\n .filter((l) => l !== \"\");\n const [first, ...rest] = lines;\n if (!reason.startsWith(\"plugin install failed\") || first === undefined || rest.length === 0) {\n return reason;\n }\n const head = first.replace(/:$/, \"\");\n const npmPrefix = /^npm (ERR!|error)\\s*/i;\n const npmLines = rest\n .filter((l) => npmPrefix.test(l) && !/^npm \\S+\\s+A complete log of this run\\b/i.test(l))\n .map((l) => l.replace(npmPrefix, \"\"))\n .filter((l) => l !== \"\");\n const codeLine = npmLines.find((l) => /^code\\s+\\S+/i.test(l));\n if (codeLine) {\n const code = codeLine.replace(/^code\\s+/i, \"\");\n const detail = npmLines.find((l) => l !== codeLine && !/^code\\s/i.test(l));\n return `${head}: npm ${code}${detail ? `: ${detail}` : \"\"}`;\n }\n const causes = rest.filter(\n (l) => /^error\\b/i.test(l) || (npmPrefix.test(l) && !/A complete log of this run\\b/i.test(l)),\n );\n const cause =\n causes.at(-1) ?? rest.filter((l) => !/A complete log of this run\\b/i.test(l)).at(-1);\n return `${head}: ${cause ?? rest.at(-1)}`;\n}\n\nfunction escapeRegExp(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\/]/g, \"\\\\$&\");\n}\n\n/**\n * Split the output of one failed install of the whole plugin store into one reason per plugin\n * (p1272): the package manager runs once for every spec, so its output names the plugins that\n * failed. A plugin gets the line that names it (also its URL-encoded form `@scope%2fname`); a\n * plugin the output never names says it was not installed and which plugin the install stopped\n * at. With one plugin, or when the output names none (no `bun` and no `npm`), every plugin keeps\n * the whole condensed reason.\n */\nexport function pluginFailureReasons(\n reason: string,\n specs: readonly string[],\n): Map<string, string> {\n const out = new Map<string, string>();\n const condensed = condensePluginFailure(reason);\n if (specs.length < 2 || !reason.startsWith(\"plugin install failed\")) return out;\n const lines = reason\n .split(\"\\n\")\n .map((l) => l.trim())\n .filter((l) => l !== \"\" && !/A complete log of this run\\b/i.test(l));\n const names = specs.map((spec) => {\n try {\n return specName(spec);\n } catch {\n return spec;\n }\n });\n const mentions = (text: string, name: string): boolean => {\n const forms = [name, name.replace(\"/\", \"%2f\"), name.replace(\"/\", \"%2F\")];\n return forms.some((f) =>\n new RegExp(`(?<![\\\\w@.-])(?<!@[\\\\w.~-]+/)${escapeRegExp(f)}(?![\\\\w-]|\\\\.\\\\w)`).test(text),\n );\n };\n const cause = /\\berror\\b|\\bE[A-Z0-9]{3,}\\b|\\b404\\b|notarget|failed to resolve/i;\n const named: string[] = [];\n specs.forEach((spec, i) => {\n const name = names[i] as string;\n const line = mentions(condensed, name)\n ? condensed.replace(/^plugin install failed:\\s*/, \"\")\n : lines.filter((l) => mentions(l, name) && cause.test(l)).at(-1);\n if (line === undefined) return;\n named.push(name);\n out.set(spec, `plugin install failed: ${line.replace(/^(npm\\s+)?(ERR!|error:?)\\s*/i, \"\")}`);\n });\n if (named.length === 0) return new Map();\n specs.forEach((spec, i) => {\n if (!out.has(spec)) {\n out.set(\n spec,\n `plugin install failed: ${names[i]} was not installed, the install stopped at ${named.join(\", \")}`,\n );\n }\n });\n return out;\n}\n\n/** One `! plugin <name> failed to load: <reason>` line on stderr (stdout carries a run's answer). */\nfunction warnPluginFailed(spec: string, reason: string): void {\n let name = spec;\n try {\n name = specName(spec);\n } catch {\n /* a spec that does not parse is named as written */\n }\n process.stderr.write(\n ` ${pc.yellow(\"!\")} plugin ${name} failed to load: ${condensePluginFailure(reason)}\\n`,\n );\n}\n\n/**\n * Reconcile + load the `plugins:` of the project's `skaile.yaml` into the process registry, so a\n * plugin's harness is known to `run`, `repl` and `config set harness`. A plugin that fails to\n * reconcile or load is skipped (its harness stays unknown, the command goes on) and named in one\n * `! plugin <name> failed to load: <reason>` line on stderr. An unreadable config is not this\n * function's to report: the command reads it again and says so.\n */\nexport async function loadDeclaredPlugins(projectDir: string): Promise<void> {\n let plugins: string[] | undefined;\n try {\n const { resolveSkWorkspaceConfig } = await import(\"@skaile/workspaces/core\");\n plugins = resolveSkWorkspaceConfig(projectDir).plugins;\n } catch {\n return;\n }\n if (!plugins || plugins.length === 0) return;\n try {\n const result = await ensurePluginsLoaded(projectDir, plugins, pluginRegistry);\n for (const f of result.failed) warnPluginFailed(f.spec, f.reason);\n } catch (err) {\n // The store could not be reconciled: no plugin was loaded.\n const reason = err instanceof Error ? err.message : String(err);\n const reasons = pluginFailureReasons(reason, plugins);\n for (const spec of plugins) warnPluginFailed(spec, reasons.get(spec) ?? reason);\n }\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { normalizeAnthropicModel, ANTHROPIC_MODEL_ALIASES } from './chunk-76FLBODK.js';
|
|
2
|
-
import { buildAgentPromptSections } from './chunk-
|
|
2
|
+
import { buildAgentPromptSections } from './chunk-ABVWUM2E.js';
|
|
3
3
|
import { existsSync, readFileSync, mkdirSync, writeFileSync, lstatSync, unlinkSync, readdirSync, chmodSync } from 'fs';
|
|
4
4
|
import { join, dirname, relative, resolve, normalize, basename } from 'path';
|
|
5
5
|
import { stringify } from 'yaml';
|
|
@@ -340,5 +340,5 @@ function agentRenderFiles(harnessTarget, agentDeployDir, agentName) {
|
|
|
340
340
|
}
|
|
341
341
|
|
|
342
342
|
export { AGENT_RENDERERS, CODEX_IDENTITY_DIR, agentRenderFiles, claudeCodeRenderer, codexRenderer, harnessTargetSupportsAgents, ompRenderer, renderAgentToFramework };
|
|
343
|
-
//# sourceMappingURL=chunk-
|
|
344
|
-
//# sourceMappingURL=chunk-
|
|
343
|
+
//# sourceMappingURL=chunk-V4OXHEWY.js.map
|
|
344
|
+
//# sourceMappingURL=chunk-V4OXHEWY.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../asset-manager/src/renderers.ts"],"names":["stringifyYaml"],"mappings":"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","file":"chunk-LD6O6QKU.js","sourcesContent":["/**\n * Framework-specific renderers for GitAgent packages.\n *\n * Each renderer transforms a parsed GitAgent package (agent.yaml + SOUL.md + RULES.md)\n * into the native file format that the target agent framework natively reads.\n *\n * Only harnesses with a full bridge harness (runtime execution) are included:\n * claude-code → .claude/agents/<name>.md (YAML frontmatter + markdown body)\n * omp → .omp/agents/<name>/ (directory with agent.yaml + SOUL.md)\n * codex → .codex/agents/<name>.toml (TOML)\n *\n * Removed (no bridge harness): cursor, roo, github-copilot, gemini, amp.\n * Add them back when a bridge harness is implemented.\n */\n\nimport {\n chmodSync,\n existsSync,\n lstatSync,\n mkdirSync,\n readdirSync,\n readFileSync,\n unlinkSync,\n writeFileSync,\n} from \"node:fs\";\nimport { basename, dirname, join, normalize, relative, resolve } from \"node:path\";\nimport { buildAgentPromptSections } from \"@skaile/workspaces/core\";\nimport {\n ANTHROPIC_MODEL_ALIASES,\n type AgentLifecycle,\n type AgentManifest,\n normalizeAnthropicModel,\n} from \"@skaile/workspaces/types/manifests\";\nimport { stringify as stringifyYaml } from \"yaml\";\nimport type { AbilityRef, ContractRef } from \"./fragments.js\";\n\n// ── Types ─────────────────────────────────��───────────────────────────────────\n\nexport type { AgentManifest };\n\n/**\n * All data an {@link AgentRenderer} needs to produce a native agent definition file.\n *\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport interface AgentRenderInput {\n /** Parsed `agent.yaml` manifest for the GitAgent being rendered. */\n manifest: AgentManifest;\n /** Raw content of `SOUL.md`, or `null` if absent. */\n soul: string | null;\n /** Raw content of `RULES.md`, or `null` if absent. */\n rules: string | null;\n /** Raw content of `DUTIES.md`, or `null` if absent. */\n duties: string | null;\n /** Agent name used as the output filename and frontmatter `name` field. */\n agentName: string;\n /** Resolved absolute path to the framework's agent deploy directory (e.g. `.claude/agents/`). */\n agentDeployDir: string;\n /** Absolute path to the workspace root. */\n workspaceRoot: string;\n /** Resolved ability refs — installed skills referenced in the `## Installed Abilities` section. */\n abilityRefs: AbilityRef[];\n /** Resolved contract refs — installed in the skills dir, listed in the `## Contracts` section. */\n contractRefs: ContractRef[];\n /** Resolved framework fragment markdown blocks (agent-mode, handoff, skill-discovery, etc.). */\n frameworkFragments: string[];\n /** Per-project prompt extension markdown blocks loaded from `skaile.yaml` `agent.prompt-extensions`. */\n promptExtensions: string[];\n /** `standing` (long-running identity) or `role` (short-lived, callable). */\n lifecycle: AgentLifecycle;\n /** Names of the skills the agent composes (`composes[{kind: skill}]`), as installed. */\n skills: string[];\n /** Names of the MCP servers the agent's `mcp-server` slots are bound to. */\n mcpServers: string[];\n /**\n * Absolute path of the agent's source directory (where `agent.yaml` lives). The omp renderer\n * copies the local `composes` directories out of it.\n */\n srcDir?: string;\n}\n\n/**\n * Result returned by every {@link AgentRenderer}.\n *\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport interface AgentRenderResult {\n /** Paths to files/dirs rendered, relative to `workspaceRoot`. */\n created: string[];\n /** The subset of `created` whose bytes differ from what was on disk before (new or edited); an identical rewrite is skipped. */\n changed: string[];\n /** Non-fatal warnings (e.g. experimental feature notices). */\n warnings: string[];\n}\n\n/**\n * A function that transforms an {@link AgentRenderInput} into framework-native agent definition files.\n *\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport type AgentRenderer = (input: AgentRenderInput) => AgentRenderResult;\n\n// ── Helpers ───────────────────────────────────────────────────────────────────\n\n/**\n * Unlink a symlink (dangling or not) at a path skaile is about to write. `writeFileSync` follows\n * a link, so the write would land in the file the link points at: the user's own file, outside\n * the project (p1060). The link is replaced by the rendered file instead.\n */\nfunction dropSymlink(path: string): void {\n try {\n if (lstatSync(path).isSymbolicLink()) unlinkSync(path);\n } catch {\n // nothing at the path: the write creates it\n }\n}\n\n/**\n * Write an agent definition file. Agents are compiled artifacts — they must\n * reflect the current canonical source — but a file that already holds exactly\n * these bytes is left untouched (mtime included), so a repeat install is a no-op.\n * `created` lists every rendered path; `changed` only those that were (re)written.\n */\nfunction writeAgent(\n filePath: string,\n content: string,\n workspaceRoot: string,\n created: string[],\n changed: string[],\n): void {\n const rel = relative(workspaceRoot, filePath);\n created.push(rel);\n dropSymlink(filePath);\n if (existsSync(filePath)) {\n try {\n if (readFileSync(filePath, \"utf-8\") === content) return;\n } catch {\n // unreadable (e.g. a directory in the way): fall through to the write\n }\n }\n mkdirSync(dirname(filePath), { recursive: true });\n writeFileSync(filePath, content, \"utf-8\");\n changed.push(rel);\n}\n\n/**\n * Build the full agent system prompt body baked into the framework-native agent file.\n *\n * This is the sole source of the agent's system prompt body. Agent identity is rendered at install time; the harness reads it natively at runtime.\n * The rendered output ends up in .claude/agents/<name>.md, .omp/agents/<name>/SOUL.md,\n * .codex/agents/<name>.toml and is read natively by the framework on every agent invocation.\n *\n * Section order is owned by the shared builder (`buildAgentPromptSections` in\n * core, the same one the runner assembles its system prompt with):\n * soul → `<MEMORY>` → framework fragments → `## Constraints` (RULES) →\n * `## Duties` → `## Installed Abilities` → `## Contracts` → composed inline\n * blocks → prompt extensions.\n */\nfunction buildMarkdownBody(\n soul: string | null,\n rules: string | null,\n duties: string | null,\n abilityRefs: AbilityRef[],\n contractRefs: ContractRef[],\n frameworkFragments: string[],\n promptExtensions: string[],\n): string {\n const sections = buildAgentPromptSections({\n soul,\n constraints: rules,\n duties,\n abilities: abilityRefs,\n contracts: contractRefs,\n frameworkFragments,\n promptExtensions,\n });\n return `${sections.map((s) => s.text).join(\"\\n\\n\")}\\n`;\n}\n\n/** Escape a string for use as a TOML multi-line basic string (triple-quote). */\nfunction toTomlMultilineString(s: string): string {\n // Replace \"\"\" with \\\\\"\"\" to avoid breaking the TOML literal\n return s.replace(/\"\"\"/g, '\\\\\"\\\\\"\\\\\"');\n}\n\n/**\n * The manifest's `model` as a harness other than Claude Code can take it: the Claude Code\n * aliases (`inherit`, `opus`, `sonnet`, `haiku`) name no model of another harness' provider, so a\n * `preferred` that is one of them is dropped (the harness starts the agent on its own default) and\n * so is a `fallback` entry that is. Any other selector (`provider/model`, a full id, `@role`) is\n * the author's choice and is passed through. `undefined` when nothing is left.\n */\nfunction harnessModel(model: AgentManifest[\"model\"]): AgentManifest[\"model\"] | undefined {\n if (!model) return undefined;\n const claudeOnly = (m: string): boolean =>\n (ANTHROPIC_MODEL_ALIASES as readonly string[]).includes(m);\n const { preferred, fallback, ...rest } = model;\n const kept: NonNullable<AgentManifest[\"model\"]> = { ...rest };\n if (preferred && !claudeOnly(preferred)) kept.preferred = preferred;\n const fallbacks = (fallback ?? []).filter((m) => !claudeOnly(m));\n if (fallbacks.length > 0) kept.fallback = fallbacks;\n return Object.keys(kept).length > 0 ? kept : undefined;\n}\n\n/** Directory entries that are never part of an asset (build and OS leftovers). */\nconst COPY_SKIP = new Set([\".git\", \".DS_Store\", \"node_modules\", \"__pycache__\"]);\n\n/** Copy a file or directory tree byte for byte; a file that already holds these bytes is left alone. */\nfunction copyTree(from: string, to: string, workspaceRoot: string, changed: string[]): void {\n const stat = lstatSync(from);\n if (stat.isSymbolicLink()) return;\n if (stat.isDirectory()) {\n for (const name of readdirSync(from)) {\n if (COPY_SKIP.has(name) || name.endsWith(\".pyc\")) continue;\n copyTree(join(from, name), join(to, name), workspaceRoot, changed);\n }\n return;\n }\n if (!stat.isFile()) return;\n const bytes = readFileSync(from);\n dropSymlink(to);\n // A script keeps its exec bit: a copy that loses it shows as a mode change in `git status` (p1657).\n const executable = (stat.mode & 0o111) !== 0;\n if (existsSync(to)) {\n try {\n if (bytes.equals(readFileSync(to))) {\n if (executable && (lstatSync(to).mode & 0o100) === 0) chmodSync(to, stat.mode & 0o777);\n return;\n }\n } catch {\n // unreadable (e.g. a directory in the way): fall through to the write\n }\n }\n mkdirSync(dirname(to), { recursive: true });\n writeFileSync(to, bytes);\n if (executable) chmodSync(to, stat.mode & 0o777);\n changed.push(relative(workspaceRoot, to));\n}\n\n/**\n * Make the `composes` of an omp `agent.yaml` resolvable from where it is written: every local ref\n * (`./rules-local/house-rules`) is copied next to the `agent.yaml`, at the path the ref names, and a\n * local ref that climbs out of the agent directory (`../shared/rules`) is copied to\n * `composes/<name>` and rewritten to that path. Catalog refs (`skill:@pub/name`) are kept as written.\n */\nfunction bundleLocalComposes(\n composes: NonNullable<AgentManifest[\"composes\"]>,\n srcDir: string | undefined,\n destDir: string,\n workspaceRoot: string,\n changed: string[],\n warnings: string[],\n): NonNullable<AgentManifest[\"composes\"]> {\n if (!srcDir) return composes;\n return composes.map((item) => {\n if (!item.ref.startsWith(\"./\") && !item.ref.startsWith(\"../\")) return item;\n const from = resolve(srcDir, item.ref);\n if (!existsSync(from)) {\n warnings.push(`compose ref ${item.ref} not found at ${from}: not copied into ${destDir}`);\n return item;\n }\n const rel = normalize(item.ref);\n const inside = !rel.startsWith(\"..\");\n const target = inside ? rel : join(\"composes\", basename(from));\n copyTree(from, join(destDir, target), workspaceRoot, changed);\n return inside ? item : { ...item, ref: `./${target}` };\n });\n}\n\n// ── Claude Code ────────────��──────────────────────────────────────────────────\n// Format: .claude/agents/<name>.md\n// Sub-agent support: automatic (description-based) + @-mention\n// Required frontmatter: name, description\n//\n// Installation → runtime handoff:\n// skaile install (claudeCodeRenderer) creates the .md file from GitAgent source\n// ClaudeSdkHarness.startQuery() passes options.agent = agentName to the SDK query\n// The SDK reads .claude/agents/<agentName>.md to get model, tools, and system prompt\n// This is equivalent to running: claude --agent <agentName>\n\n/**\n * Render a GitAgent to Claude Code's `.claude/agents/<name>.md` format.\n *\n * Writes YAML frontmatter (name, description, model, tools, skills, mcpServers,\n * maxTurns, background) followed by the enriched system prompt body. `skills`\n * lists the composed skills, `mcpServers` the MCP servers the agent's\n * `mcp-server` slots are bound to, and `background: true` marks a `role`\n * instance whose `runtime.background` is set. Always overwrites to reflect\n * current source.\n *\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport const claudeCodeRenderer: AgentRenderer = ({\n manifest,\n soul,\n rules,\n duties,\n agentName,\n agentDeployDir,\n workspaceRoot,\n abilityRefs,\n contractRefs,\n frameworkFragments,\n promptExtensions,\n lifecycle,\n skills,\n mcpServers,\n}) => {\n const created: string[] = [];\n const changed: string[] = [];\n const warnings: string[] = [];\n\n const frontmatter: Record<string, unknown> = {\n name: agentName,\n description: manifest.description ?? `${agentName} agent`,\n };\n\n // Model: map to Claude Code's model field. Accepts aliases (sonnet/opus/haiku/inherit)\n // or a full Anthropic ID. Unrecognized values (e.g. legacy `claude-opus-4`) are\n // coerced to the matching family alias so the agent still loads.\n if (manifest.model?.preferred) {\n const raw = manifest.model.preferred;\n const normalized = normalizeAnthropicModel(raw);\n if (normalized !== raw) {\n warnings.push(\n `agent ${agentName}: model \"${raw}\" is not a valid Claude model ID; normalized to alias \"${normalized}\". Update agent.yaml.`,\n );\n }\n frontmatter.model = normalized;\n }\n\n // Tool restrictions\n if (manifest.tools?.allowed?.length) {\n frontmatter.tools = manifest.tools.allowed.join(\", \");\n }\n if (manifest.tools?.denied?.length) {\n frontmatter.disallowedTools = manifest.tools.denied.join(\", \");\n }\n\n if (skills.length > 0) frontmatter.skills = skills;\n if (mcpServers.length > 0) frontmatter.mcpServers = mcpServers;\n\n // Runtime\n if (manifest.runtime?.max_turns) {\n frontmatter.maxTurns = manifest.runtime.max_turns;\n }\n if (lifecycle === \"role\" && manifest.runtime?.background === true) {\n frontmatter.background = true;\n }\n\n // Metadata pass-through for Claude Code-specific fields\n if (manifest.metadata?.color) frontmatter.color = manifest.metadata.color;\n if (manifest.metadata?.effort) frontmatter.effort = manifest.metadata.effort;\n if (manifest.metadata?.isolation) frontmatter.isolation = manifest.metadata.isolation;\n\n const body = buildMarkdownBody(\n soul,\n rules,\n duties,\n abilityRefs,\n contractRefs,\n frameworkFragments,\n promptExtensions,\n );\n const content = `---\\n${stringifyYaml(frontmatter).trim()}\\n---\\n\\n${body}`;\n const filePath = join(agentDeployDir, `${agentName}.md`);\n writeAgent(filePath, content, workspaceRoot, created, changed);\n\n return { created, changed, warnings };\n};\n\n// ── OpenAI Codex ──────────────────────────────────────────────────────────────\n// Format: .codex/agents/<name>.toml\n// Sub-agent support: explicit user request only (not automatic)\n// Required fields: name, description, developer_instructions\n\n/**\n * Tools that change the workspace or run commands. Codex has no per-agent tool\n * allowlist; the closest per-agent control is `sandbox_mode`, so an agent whose\n * declared tool surface contains none of these is rendered `read-only`.\n */\nconst MUTATING_TOOLS = [\"Write\", \"Edit\", \"MultiEdit\", \"NotebookEdit\", \"Bash\"] as const;\n\n/** `read-only` when the manifest's tool surface cannot mutate anything, else `undefined` (inherit). */\nfunction codexSandboxMode(tools: AgentManifest[\"tools\"]): \"read-only\" | undefined {\n const allowed = tools?.allowed ?? [];\n const denied = new Set(tools?.denied ?? []);\n if (allowed.length > 0) {\n return allowed.some((t) => !denied.has(t) && (MUTATING_TOOLS as readonly string[]).includes(t))\n ? undefined\n : \"read-only\";\n }\n // No allowlist: everything not denied is available.\n return MUTATING_TOOLS.every((t) => denied.has(t)) ? \"read-only\" : undefined;\n}\n\n/** Directory (next to `agents/`) holding each Codex agent's markdown identity, one file per agent. */\nexport const CODEX_IDENTITY_DIR = \"skaile-agents\";\n\n/**\n * Render a GitAgent to OpenAI Codex's `.codex/agents/<name>.toml` format.\n *\n * Produces a TOML file with `name`, `description`, `model`, `sandbox_mode` and\n * `developer_instructions`. `sandbox_mode = \"read-only\"` is the per-agent tool\n * restriction: it is emitted when the manifest's `tools` leave the agent no way\n * to write or run commands (Codex has no per-tool allowlist). Triple-quoted\n * TOML multi-line strings are escaped to avoid syntax errors.\n *\n * Also writes the agent's identity as `.codex/skaile-agents/<name>.md`, which\n * the Codex harness combines with the session's runtime prompt (one file per\n * agent, so several instances never overwrite each other).\n *\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport const codexRenderer: AgentRenderer = ({\n manifest,\n soul,\n rules,\n duties,\n agentName,\n agentDeployDir,\n workspaceRoot,\n abilityRefs,\n contractRefs,\n frameworkFragments,\n promptExtensions,\n}) => {\n const created: string[] = [];\n const changed: string[] = [];\n const warnings: string[] = [];\n\n const instructions = buildMarkdownBody(\n soul,\n rules,\n duties,\n abilityRefs,\n contractRefs,\n frameworkFragments,\n promptExtensions,\n );\n const escaped = toTomlMultilineString(instructions);\n\n const lines: string[] = [\n `name = ${JSON.stringify(agentName)}`,\n `description = ${JSON.stringify(manifest.description ?? `${agentName} agent`)}`,\n ];\n // A Claude Code alias (`sonnet`) names no Codex model: leave `model` out and Codex uses its own.\n const model = harnessModel(manifest.model)?.preferred;\n if (model) lines.push(`model = ${JSON.stringify(model)}`);\n const sandboxMode = codexSandboxMode(manifest.tools);\n if (sandboxMode) lines.push(`sandbox_mode = ${JSON.stringify(sandboxMode)}`);\n lines.push(`developer_instructions = \"\"\"`, escaped.trim(), `\"\"\"`);\n\n const content = `${lines.join(\"\\n\")}\\n`;\n const filePath = join(agentDeployDir, `${agentName}.toml`);\n writeAgent(filePath, content, workspaceRoot, created, changed);\n\n // Write the full agent identity as markdown for the Codex harness to read at runtime.\n // The harness combines this with the session's dynamic content (resources, context)\n // and passes the result via model_instructions_file.\n const agentMdPath = join(dirname(agentDeployDir), CODEX_IDENTITY_DIR, `${agentName}.md`);\n writeAgent(agentMdPath, instructions, workspaceRoot, created, changed);\n\n return { created, changed, warnings };\n};\n\n// ── oh-my-pi ─��────────────��────────────────────────────────��─────────────────\n// Format: .omp/agents/<name>/ (directory with agent.yaml + SOUL.md + RULES.md)\n// oh-my-pi reads GitAgent directories natively via PI_CODING_AGENT_DIR.\n// The renderer copies/enriches the source directory rather than flattening to .md.\n//\n// Installation → runtime handoff:\n// skaile install (ompRenderer) creates .omp/agents/<name>/ from GitAgent source\n// OmpHarness._start() sets env.PI_CODING_AGENT_DIR = agentDir in the child process\n// omp reads SOUL.md/RULES.md/knowledge/ from that directory natively on startup\n//\n// Note: REPL mode can bypass the install step — agentDir can point directly to the\n// GitAgent source directory, and omp will read it natively via PI_CODING_AGENT_DIR.\n// The rendered .omp/agents/ copy is only needed when the source is not accessible\n// from the project cwd (e.g. different repo, remote workspace).\n\n/**\n * Render a GitAgent to oh-my-pi's `.omp/agents/<name>/` directory format.\n *\n * Writes `agent.yaml` (resolved model/tools/delegation plus the 0.2\n * declaration — `composes` verbatim, `lifecycle`, `io`, `memory`, `triggers`,\n * `capabilities`) and an enriched `SOUL.md` that includes fragments and\n * extensions. omp reads this directory natively via the `PI_CODING_AGENT_DIR`\n * environment variable.\n *\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport const ompRenderer: AgentRenderer = ({\n manifest,\n soul,\n rules,\n duties,\n agentName,\n agentDeployDir,\n workspaceRoot,\n abilityRefs,\n contractRefs,\n frameworkFragments,\n promptExtensions,\n lifecycle,\n srcDir,\n}) => {\n const created: string[] = [];\n const changed: string[] = [];\n const warnings: string[] = [];\n\n const destDir = join(agentDeployDir, agentName);\n\n // Write agent.yaml with tools resolved\n const agentYaml: Record<string, unknown> = {\n spec_version: manifest.spec_version ?? \"0.2\",\n name: agentName,\n version: manifest.version ?? \"1.0.0\",\n description: manifest.description ?? `${agentName} agent`,\n lifecycle,\n };\n // The model: omp takes provider-prefixed full IDs and `@role` selectors, and resolves the\n // family aliases it knows (verified live 2026-09-20 against omp v18.1.10 through\n // teamclaude.postxl.com: `--model anthropic/opus` produced\n // `model_change {\"model\":\"anthropic/claude-opus-5\",\"resolvedModelIsFallback\":false}`).\n // The Claude Code aliases the manifest writes (`sonnet`, `haiku`, `opus`, `inherit`) name no\n // model of an omp deployment on another provider, so they are left out and omp starts the agent\n // on its own default. Any other selector is passed through verbatim: it is not checked here, and\n // not coerced by `normalizeAnthropicModel`, which would substitute a different model on any\n // provider but Anthropic (see `resolveManifestModel` in `@skaile/workspaces/bridge`).\n const model = harnessModel(manifest.model);\n if (model) agentYaml.model = model;\n if (manifest.tools) agentYaml.tools = manifest.tools;\n if (manifest.delegation) agentYaml.delegation = manifest.delegation;\n if (manifest.runtime) agentYaml.runtime = manifest.runtime;\n if (manifest.io) agentYaml.io = manifest.io;\n if (manifest.memory) agentYaml.memory = manifest.memory;\n if (manifest.triggers?.length) agentYaml.triggers = manifest.triggers;\n if (manifest.capabilities?.length) agentYaml.capabilities = manifest.capabilities;\n if (manifest.composes?.length) {\n agentYaml.composes = bundleLocalComposes(\n manifest.composes,\n srcDir,\n destDir,\n workspaceRoot,\n changed,\n warnings,\n );\n }\n if (manifest.tags?.length) agentYaml.tags = manifest.tags;\n if (manifest.metadata) agentYaml.metadata = manifest.metadata;\n\n writeAgent(join(destDir, \"agent.yaml\"), stringifyYaml(agentYaml), workspaceRoot, [], changed);\n\n // Write SOUL.md (enriched with fragments and extensions, like other renderers)\n const enrichedSoul = buildMarkdownBody(\n soul,\n rules,\n duties,\n abilityRefs,\n contractRefs,\n frameworkFragments,\n promptExtensions,\n );\n writeAgent(join(destDir, \"SOUL.md\"), enrichedSoul, workspaceRoot, [], changed);\n\n // omp lists the agents it can spawn from flat `.omp/agents/<name>.md` files only (verified live\n // against omp 18.12.5: a `<name>/agent.yaml` directory is not listed, a flat file is), so the\n // directory above carries the full GitAgent package and this file is what omp loads.\n const frontmatter: Record<string, unknown> = {\n name: agentName,\n description: manifest.description ?? `${agentName} agent`,\n };\n if (manifest.tools?.allowed?.length) frontmatter.tools = manifest.tools.allowed.join(\", \");\n const selector = model?.preferred;\n if (selector) frontmatter.model = selector;\n writeAgent(\n join(agentDeployDir, `${agentName}.md`),\n `---\\n${stringifyYaml(frontmatter).trim()}\\n---\\n\\n${enrichedSoul}`,\n workspaceRoot,\n created,\n changed,\n );\n\n created.push(relative(workspaceRoot, destDir));\n return { created, changed, warnings };\n};\n\n// ── Renderer registry ──────────────────────────────���──────────────────────────\n\nexport type Log = (msg: string) => void;\nconst noop: Log = () => {};\n\n/**\n * Render an agent to framework-native format via the renderer registry.\n *\n * Shared by both the simple deploy path (`deployAsset`) and the enriched scaffold path (agents layer).\n *\n * @param input - Full render input including manifest, SOUL/RULES text, and resolved refs.\n * @param harnessTarget - Agent framework ID to look up in {@link AGENT_RENDERERS}.\n * @param log - Optional logger callback for progress messages.\n * @returns Object with `created` file paths and `warnings` list.\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport function renderAgentToFramework(\n input: AgentRenderInput,\n harnessTarget: string,\n log: Log = noop,\n): AgentRenderResult {\n const renderer = AGENT_RENDERERS[harnessTarget];\n if (!renderer) {\n return {\n created: [],\n changed: [],\n warnings: [`No renderer for framework \"${harnessTarget}\"`],\n };\n }\n const result = renderer(input);\n for (const c of result.created) log(` rendered agent: ${c}`);\n for (const w of result.warnings) log(` warn: ${w}`);\n return result;\n}\n\n/**\n * Registry mapping framework IDs to their {@link AgentRenderer} functions.\n *\n * Only harnesses with a full bridge harness are registered. Add new entries\n * when a bridge harness is implemented in `workspaces/bridge/src/harnesses/`.\n *\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport const AGENT_RENDERERS: Record<string, AgentRenderer> = {\n \"claude-code\": claudeCodeRenderer,\n omp: ompRenderer,\n codex: codexRenderer,\n};\n\n/**\n * Returns `true` if the given harness target supports file-based sub-agent installation.\n *\n * @param harnessTarget - Agent framework ID to check.\n * @returns `true` when `harnessTarget` has a registered entry in {@link AGENT_RENDERERS}.\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport function harnessTargetSupportsAgents(harnessTarget: string): boolean {\n return harnessTarget in AGENT_RENDERERS;\n}\n\n/**\n * The files the renderer of `harnessTarget` writes for the agent `agentName` into the agent deploy\n * directory `agentDeployDir` (`.claude/agents`, `.codex/agents`, `.omp/agents`): what `add\n * --dry-run` lists (p1621). Files a `composes:` of local refs adds to omp are not listed. Empty\n * for a harness target without an agent renderer.\n */\nexport function agentRenderFiles(\n harnessTarget: string,\n agentDeployDir: string,\n agentName: string,\n): string[] {\n switch (harnessTarget) {\n case \"claude-code\":\n return [join(agentDeployDir, `${agentName}.md`)];\n case \"codex\":\n return [\n join(agentDeployDir, `${agentName}.toml`),\n join(dirname(agentDeployDir), CODEX_IDENTITY_DIR, `${agentName}.md`),\n ];\n case \"omp\":\n return [\n join(agentDeployDir, agentName, \"agent.yaml\"),\n join(agentDeployDir, agentName, \"SOUL.md\"),\n join(agentDeployDir, `${agentName}.md`),\n ];\n default:\n return [];\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../asset-manager/src/renderers.ts"],"names":["stringifyYaml"],"mappings":"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","file":"chunk-V4OXHEWY.js","sourcesContent":["/**\n * Framework-specific renderers for GitAgent packages.\n *\n * Each renderer transforms a parsed GitAgent package (agent.yaml + SOUL.md + RULES.md)\n * into the native file format that the target agent framework natively reads.\n *\n * Only harnesses with a full bridge harness (runtime execution) are included:\n * claude-code → .claude/agents/<name>.md (YAML frontmatter + markdown body)\n * omp → .omp/agents/<name>/ (directory with agent.yaml + SOUL.md)\n * codex → .codex/agents/<name>.toml (TOML)\n *\n * Removed (no bridge harness): cursor, roo, github-copilot, gemini, amp.\n * Add them back when a bridge harness is implemented.\n */\n\nimport {\n chmodSync,\n existsSync,\n lstatSync,\n mkdirSync,\n readdirSync,\n readFileSync,\n unlinkSync,\n writeFileSync,\n} from \"node:fs\";\nimport { basename, dirname, join, normalize, relative, resolve } from \"node:path\";\nimport { buildAgentPromptSections } from \"@skaile/workspaces/core\";\nimport {\n ANTHROPIC_MODEL_ALIASES,\n type AgentLifecycle,\n type AgentManifest,\n normalizeAnthropicModel,\n} from \"@skaile/workspaces/types/manifests\";\nimport { stringify as stringifyYaml } from \"yaml\";\nimport type { AbilityRef, ContractRef } from \"./fragments.js\";\n\n// ── Types ─────────────────────────────────��───────────────────────────────────\n\nexport type { AgentManifest };\n\n/**\n * All data an {@link AgentRenderer} needs to produce a native agent definition file.\n *\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport interface AgentRenderInput {\n /** Parsed `agent.yaml` manifest for the GitAgent being rendered. */\n manifest: AgentManifest;\n /** Raw content of `SOUL.md`, or `null` if absent. */\n soul: string | null;\n /** Raw content of `RULES.md`, or `null` if absent. */\n rules: string | null;\n /** Raw content of `DUTIES.md`, or `null` if absent. */\n duties: string | null;\n /** Agent name used as the output filename and frontmatter `name` field. */\n agentName: string;\n /** Resolved absolute path to the framework's agent deploy directory (e.g. `.claude/agents/`). */\n agentDeployDir: string;\n /** Absolute path to the workspace root. */\n workspaceRoot: string;\n /** Resolved ability refs — installed skills referenced in the `## Installed Abilities` section. */\n abilityRefs: AbilityRef[];\n /** Resolved contract refs — installed in the skills dir, listed in the `## Contracts` section. */\n contractRefs: ContractRef[];\n /** Resolved framework fragment markdown blocks (agent-mode, handoff, skill-discovery, etc.). */\n frameworkFragments: string[];\n /** Per-project prompt extension markdown blocks loaded from `skaile.yaml` `agent.prompt-extensions`. */\n promptExtensions: string[];\n /** `standing` (long-running identity) or `role` (short-lived, callable). */\n lifecycle: AgentLifecycle;\n /** Names of the skills the agent composes (`composes[{kind: skill}]`), as installed. */\n skills: string[];\n /** Names of the MCP servers the agent's `mcp-server` slots are bound to. */\n mcpServers: string[];\n /**\n * Absolute path of the agent's source directory (where `agent.yaml` lives). The omp renderer\n * copies the local `composes` directories out of it.\n */\n srcDir?: string;\n}\n\n/**\n * Result returned by every {@link AgentRenderer}.\n *\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport interface AgentRenderResult {\n /** Paths to files/dirs rendered, relative to `workspaceRoot`. */\n created: string[];\n /** The subset of `created` whose bytes differ from what was on disk before (new or edited); an identical rewrite is skipped. */\n changed: string[];\n /** Non-fatal warnings (e.g. experimental feature notices). */\n warnings: string[];\n}\n\n/**\n * A function that transforms an {@link AgentRenderInput} into framework-native agent definition files.\n *\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport type AgentRenderer = (input: AgentRenderInput) => AgentRenderResult;\n\n// ── Helpers ───────────────────────────────────────────────────────────────────\n\n/**\n * Unlink a symlink (dangling or not) at a path skaile is about to write. `writeFileSync` follows\n * a link, so the write would land in the file the link points at: the user's own file, outside\n * the project (p1060). The link is replaced by the rendered file instead.\n */\nfunction dropSymlink(path: string): void {\n try {\n if (lstatSync(path).isSymbolicLink()) unlinkSync(path);\n } catch {\n // nothing at the path: the write creates it\n }\n}\n\n/**\n * Write an agent definition file. Agents are compiled artifacts — they must\n * reflect the current canonical source — but a file that already holds exactly\n * these bytes is left untouched (mtime included), so a repeat install is a no-op.\n * `created` lists every rendered path; `changed` only those that were (re)written.\n */\nfunction writeAgent(\n filePath: string,\n content: string,\n workspaceRoot: string,\n created: string[],\n changed: string[],\n): void {\n const rel = relative(workspaceRoot, filePath);\n created.push(rel);\n dropSymlink(filePath);\n if (existsSync(filePath)) {\n try {\n if (readFileSync(filePath, \"utf-8\") === content) return;\n } catch {\n // unreadable (e.g. a directory in the way): fall through to the write\n }\n }\n mkdirSync(dirname(filePath), { recursive: true });\n writeFileSync(filePath, content, \"utf-8\");\n changed.push(rel);\n}\n\n/**\n * Build the full agent system prompt body baked into the framework-native agent file.\n *\n * This is the sole source of the agent's system prompt body. Agent identity is rendered at install time; the harness reads it natively at runtime.\n * The rendered output ends up in .claude/agents/<name>.md, .omp/agents/<name>/SOUL.md,\n * .codex/agents/<name>.toml and is read natively by the framework on every agent invocation.\n *\n * Section order is owned by the shared builder (`buildAgentPromptSections` in\n * core, the same one the runner assembles its system prompt with):\n * soul → `<MEMORY>` → framework fragments → `## Constraints` (RULES) →\n * `## Duties` → `## Installed Abilities` → `## Contracts` → composed inline\n * blocks → prompt extensions.\n */\nfunction buildMarkdownBody(\n soul: string | null,\n rules: string | null,\n duties: string | null,\n abilityRefs: AbilityRef[],\n contractRefs: ContractRef[],\n frameworkFragments: string[],\n promptExtensions: string[],\n): string {\n const sections = buildAgentPromptSections({\n soul,\n constraints: rules,\n duties,\n abilities: abilityRefs,\n contracts: contractRefs,\n frameworkFragments,\n promptExtensions,\n });\n return `${sections.map((s) => s.text).join(\"\\n\\n\")}\\n`;\n}\n\n/** Escape a string for use as a TOML multi-line basic string (triple-quote). */\nfunction toTomlMultilineString(s: string): string {\n // Replace \"\"\" with \\\\\"\"\" to avoid breaking the TOML literal\n return s.replace(/\"\"\"/g, '\\\\\"\\\\\"\\\\\"');\n}\n\n/**\n * The manifest's `model` as a harness other than Claude Code can take it: the Claude Code\n * aliases (`inherit`, `opus`, `sonnet`, `haiku`) name no model of another harness' provider, so a\n * `preferred` that is one of them is dropped (the harness starts the agent on its own default) and\n * so is a `fallback` entry that is. Any other selector (`provider/model`, a full id, `@role`) is\n * the author's choice and is passed through. `undefined` when nothing is left.\n */\nfunction harnessModel(model: AgentManifest[\"model\"]): AgentManifest[\"model\"] | undefined {\n if (!model) return undefined;\n const claudeOnly = (m: string): boolean =>\n (ANTHROPIC_MODEL_ALIASES as readonly string[]).includes(m);\n const { preferred, fallback, ...rest } = model;\n const kept: NonNullable<AgentManifest[\"model\"]> = { ...rest };\n if (preferred && !claudeOnly(preferred)) kept.preferred = preferred;\n const fallbacks = (fallback ?? []).filter((m) => !claudeOnly(m));\n if (fallbacks.length > 0) kept.fallback = fallbacks;\n return Object.keys(kept).length > 0 ? kept : undefined;\n}\n\n/** Directory entries that are never part of an asset (build and OS leftovers). */\nconst COPY_SKIP = new Set([\".git\", \".DS_Store\", \"node_modules\", \"__pycache__\"]);\n\n/** Copy a file or directory tree byte for byte; a file that already holds these bytes is left alone. */\nfunction copyTree(from: string, to: string, workspaceRoot: string, changed: string[]): void {\n const stat = lstatSync(from);\n if (stat.isSymbolicLink()) return;\n if (stat.isDirectory()) {\n for (const name of readdirSync(from)) {\n if (COPY_SKIP.has(name) || name.endsWith(\".pyc\")) continue;\n copyTree(join(from, name), join(to, name), workspaceRoot, changed);\n }\n return;\n }\n if (!stat.isFile()) return;\n const bytes = readFileSync(from);\n dropSymlink(to);\n // A script keeps its exec bit: a copy that loses it shows as a mode change in `git status` (p1657).\n const executable = (stat.mode & 0o111) !== 0;\n if (existsSync(to)) {\n try {\n if (bytes.equals(readFileSync(to))) {\n if (executable && (lstatSync(to).mode & 0o100) === 0) chmodSync(to, stat.mode & 0o777);\n return;\n }\n } catch {\n // unreadable (e.g. a directory in the way): fall through to the write\n }\n }\n mkdirSync(dirname(to), { recursive: true });\n writeFileSync(to, bytes);\n if (executable) chmodSync(to, stat.mode & 0o777);\n changed.push(relative(workspaceRoot, to));\n}\n\n/**\n * Make the `composes` of an omp `agent.yaml` resolvable from where it is written: every local ref\n * (`./rules-local/house-rules`) is copied next to the `agent.yaml`, at the path the ref names, and a\n * local ref that climbs out of the agent directory (`../shared/rules`) is copied to\n * `composes/<name>` and rewritten to that path. Catalog refs (`skill:@pub/name`) are kept as written.\n */\nfunction bundleLocalComposes(\n composes: NonNullable<AgentManifest[\"composes\"]>,\n srcDir: string | undefined,\n destDir: string,\n workspaceRoot: string,\n changed: string[],\n warnings: string[],\n): NonNullable<AgentManifest[\"composes\"]> {\n if (!srcDir) return composes;\n return composes.map((item) => {\n if (!item.ref.startsWith(\"./\") && !item.ref.startsWith(\"../\")) return item;\n const from = resolve(srcDir, item.ref);\n if (!existsSync(from)) {\n warnings.push(`compose ref ${item.ref} not found at ${from}: not copied into ${destDir}`);\n return item;\n }\n const rel = normalize(item.ref);\n const inside = !rel.startsWith(\"..\");\n const target = inside ? rel : join(\"composes\", basename(from));\n copyTree(from, join(destDir, target), workspaceRoot, changed);\n return inside ? item : { ...item, ref: `./${target}` };\n });\n}\n\n// ── Claude Code ────────────��──────────────────────────────────────────────────\n// Format: .claude/agents/<name>.md\n// Sub-agent support: automatic (description-based) + @-mention\n// Required frontmatter: name, description\n//\n// Installation → runtime handoff:\n// skaile install (claudeCodeRenderer) creates the .md file from GitAgent source\n// ClaudeSdkHarness.startQuery() passes options.agent = agentName to the SDK query\n// The SDK reads .claude/agents/<agentName>.md to get model, tools, and system prompt\n// This is equivalent to running: claude --agent <agentName>\n\n/**\n * Render a GitAgent to Claude Code's `.claude/agents/<name>.md` format.\n *\n * Writes YAML frontmatter (name, description, model, tools, skills, mcpServers,\n * maxTurns, background) followed by the enriched system prompt body. `skills`\n * lists the composed skills, `mcpServers` the MCP servers the agent's\n * `mcp-server` slots are bound to, and `background: true` marks a `role`\n * instance whose `runtime.background` is set. Always overwrites to reflect\n * current source.\n *\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport const claudeCodeRenderer: AgentRenderer = ({\n manifest,\n soul,\n rules,\n duties,\n agentName,\n agentDeployDir,\n workspaceRoot,\n abilityRefs,\n contractRefs,\n frameworkFragments,\n promptExtensions,\n lifecycle,\n skills,\n mcpServers,\n}) => {\n const created: string[] = [];\n const changed: string[] = [];\n const warnings: string[] = [];\n\n const frontmatter: Record<string, unknown> = {\n name: agentName,\n description: manifest.description ?? `${agentName} agent`,\n };\n\n // Model: map to Claude Code's model field. Accepts aliases (sonnet/opus/haiku/inherit)\n // or a full Anthropic ID. Unrecognized values (e.g. legacy `claude-opus-4`) are\n // coerced to the matching family alias so the agent still loads.\n if (manifest.model?.preferred) {\n const raw = manifest.model.preferred;\n const normalized = normalizeAnthropicModel(raw);\n if (normalized !== raw) {\n warnings.push(\n `agent ${agentName}: model \"${raw}\" is not a valid Claude model ID; normalized to alias \"${normalized}\". Update agent.yaml.`,\n );\n }\n frontmatter.model = normalized;\n }\n\n // Tool restrictions\n if (manifest.tools?.allowed?.length) {\n frontmatter.tools = manifest.tools.allowed.join(\", \");\n }\n if (manifest.tools?.denied?.length) {\n frontmatter.disallowedTools = manifest.tools.denied.join(\", \");\n }\n\n if (skills.length > 0) frontmatter.skills = skills;\n if (mcpServers.length > 0) frontmatter.mcpServers = mcpServers;\n\n // Runtime\n if (manifest.runtime?.max_turns) {\n frontmatter.maxTurns = manifest.runtime.max_turns;\n }\n if (lifecycle === \"role\" && manifest.runtime?.background === true) {\n frontmatter.background = true;\n }\n\n // Metadata pass-through for Claude Code-specific fields\n if (manifest.metadata?.color) frontmatter.color = manifest.metadata.color;\n if (manifest.metadata?.effort) frontmatter.effort = manifest.metadata.effort;\n if (manifest.metadata?.isolation) frontmatter.isolation = manifest.metadata.isolation;\n\n const body = buildMarkdownBody(\n soul,\n rules,\n duties,\n abilityRefs,\n contractRefs,\n frameworkFragments,\n promptExtensions,\n );\n const content = `---\\n${stringifyYaml(frontmatter).trim()}\\n---\\n\\n${body}`;\n const filePath = join(agentDeployDir, `${agentName}.md`);\n writeAgent(filePath, content, workspaceRoot, created, changed);\n\n return { created, changed, warnings };\n};\n\n// ── OpenAI Codex ──────────────────────────────────────────────────────────────\n// Format: .codex/agents/<name>.toml\n// Sub-agent support: explicit user request only (not automatic)\n// Required fields: name, description, developer_instructions\n\n/**\n * Tools that change the workspace or run commands. Codex has no per-agent tool\n * allowlist; the closest per-agent control is `sandbox_mode`, so an agent whose\n * declared tool surface contains none of these is rendered `read-only`.\n */\nconst MUTATING_TOOLS = [\"Write\", \"Edit\", \"MultiEdit\", \"NotebookEdit\", \"Bash\"] as const;\n\n/** `read-only` when the manifest's tool surface cannot mutate anything, else `undefined` (inherit). */\nfunction codexSandboxMode(tools: AgentManifest[\"tools\"]): \"read-only\" | undefined {\n const allowed = tools?.allowed ?? [];\n const denied = new Set(tools?.denied ?? []);\n if (allowed.length > 0) {\n return allowed.some((t) => !denied.has(t) && (MUTATING_TOOLS as readonly string[]).includes(t))\n ? undefined\n : \"read-only\";\n }\n // No allowlist: everything not denied is available.\n return MUTATING_TOOLS.every((t) => denied.has(t)) ? \"read-only\" : undefined;\n}\n\n/** Directory (next to `agents/`) holding each Codex agent's markdown identity, one file per agent. */\nexport const CODEX_IDENTITY_DIR = \"skaile-agents\";\n\n/**\n * Render a GitAgent to OpenAI Codex's `.codex/agents/<name>.toml` format.\n *\n * Produces a TOML file with `name`, `description`, `model`, `sandbox_mode` and\n * `developer_instructions`. `sandbox_mode = \"read-only\"` is the per-agent tool\n * restriction: it is emitted when the manifest's `tools` leave the agent no way\n * to write or run commands (Codex has no per-tool allowlist). Triple-quoted\n * TOML multi-line strings are escaped to avoid syntax errors.\n *\n * Also writes the agent's identity as `.codex/skaile-agents/<name>.md`, which\n * the Codex harness combines with the session's runtime prompt (one file per\n * agent, so several instances never overwrite each other).\n *\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport const codexRenderer: AgentRenderer = ({\n manifest,\n soul,\n rules,\n duties,\n agentName,\n agentDeployDir,\n workspaceRoot,\n abilityRefs,\n contractRefs,\n frameworkFragments,\n promptExtensions,\n}) => {\n const created: string[] = [];\n const changed: string[] = [];\n const warnings: string[] = [];\n\n const instructions = buildMarkdownBody(\n soul,\n rules,\n duties,\n abilityRefs,\n contractRefs,\n frameworkFragments,\n promptExtensions,\n );\n const escaped = toTomlMultilineString(instructions);\n\n const lines: string[] = [\n `name = ${JSON.stringify(agentName)}`,\n `description = ${JSON.stringify(manifest.description ?? `${agentName} agent`)}`,\n ];\n // A Claude Code alias (`sonnet`) names no Codex model: leave `model` out and Codex uses its own.\n const model = harnessModel(manifest.model)?.preferred;\n if (model) lines.push(`model = ${JSON.stringify(model)}`);\n const sandboxMode = codexSandboxMode(manifest.tools);\n if (sandboxMode) lines.push(`sandbox_mode = ${JSON.stringify(sandboxMode)}`);\n lines.push(`developer_instructions = \"\"\"`, escaped.trim(), `\"\"\"`);\n\n const content = `${lines.join(\"\\n\")}\\n`;\n const filePath = join(agentDeployDir, `${agentName}.toml`);\n writeAgent(filePath, content, workspaceRoot, created, changed);\n\n // Write the full agent identity as markdown for the Codex harness to read at runtime.\n // The harness combines this with the session's dynamic content (resources, context)\n // and passes the result via model_instructions_file.\n const agentMdPath = join(dirname(agentDeployDir), CODEX_IDENTITY_DIR, `${agentName}.md`);\n writeAgent(agentMdPath, instructions, workspaceRoot, created, changed);\n\n return { created, changed, warnings };\n};\n\n// ── oh-my-pi ─��────────────��────────────────────────────────��─────────────────\n// Format: .omp/agents/<name>/ (directory with agent.yaml + SOUL.md + RULES.md)\n// oh-my-pi reads GitAgent directories natively via PI_CODING_AGENT_DIR.\n// The renderer copies/enriches the source directory rather than flattening to .md.\n//\n// Installation → runtime handoff:\n// skaile install (ompRenderer) creates .omp/agents/<name>/ from GitAgent source\n// OmpHarness._start() sets env.PI_CODING_AGENT_DIR = agentDir in the child process\n// omp reads SOUL.md/RULES.md/knowledge/ from that directory natively on startup\n//\n// Note: REPL mode can bypass the install step — agentDir can point directly to the\n// GitAgent source directory, and omp will read it natively via PI_CODING_AGENT_DIR.\n// The rendered .omp/agents/ copy is only needed when the source is not accessible\n// from the project cwd (e.g. different repo, remote workspace).\n\n/**\n * Render a GitAgent to oh-my-pi's `.omp/agents/<name>/` directory format.\n *\n * Writes `agent.yaml` (resolved model/tools/delegation plus the 0.2\n * declaration — `composes` verbatim, `lifecycle`, `io`, `memory`, `triggers`,\n * `capabilities`) and an enriched `SOUL.md` that includes fragments and\n * extensions. omp reads this directory natively via the `PI_CODING_AGENT_DIR`\n * environment variable.\n *\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport const ompRenderer: AgentRenderer = ({\n manifest,\n soul,\n rules,\n duties,\n agentName,\n agentDeployDir,\n workspaceRoot,\n abilityRefs,\n contractRefs,\n frameworkFragments,\n promptExtensions,\n lifecycle,\n srcDir,\n}) => {\n const created: string[] = [];\n const changed: string[] = [];\n const warnings: string[] = [];\n\n const destDir = join(agentDeployDir, agentName);\n\n // Write agent.yaml with tools resolved\n const agentYaml: Record<string, unknown> = {\n spec_version: manifest.spec_version ?? \"0.2\",\n name: agentName,\n version: manifest.version ?? \"1.0.0\",\n description: manifest.description ?? `${agentName} agent`,\n lifecycle,\n };\n // The model: omp takes provider-prefixed full IDs and `@role` selectors, and resolves the\n // family aliases it knows (verified live 2026-09-20 against omp v18.1.10 through\n // teamclaude.postxl.com: `--model anthropic/opus` produced\n // `model_change {\"model\":\"anthropic/claude-opus-5\",\"resolvedModelIsFallback\":false}`).\n // The Claude Code aliases the manifest writes (`sonnet`, `haiku`, `opus`, `inherit`) name no\n // model of an omp deployment on another provider, so they are left out and omp starts the agent\n // on its own default. Any other selector is passed through verbatim: it is not checked here, and\n // not coerced by `normalizeAnthropicModel`, which would substitute a different model on any\n // provider but Anthropic (see `resolveManifestModel` in `@skaile/workspaces/bridge`).\n const model = harnessModel(manifest.model);\n if (model) agentYaml.model = model;\n if (manifest.tools) agentYaml.tools = manifest.tools;\n if (manifest.delegation) agentYaml.delegation = manifest.delegation;\n if (manifest.runtime) agentYaml.runtime = manifest.runtime;\n if (manifest.io) agentYaml.io = manifest.io;\n if (manifest.memory) agentYaml.memory = manifest.memory;\n if (manifest.triggers?.length) agentYaml.triggers = manifest.triggers;\n if (manifest.capabilities?.length) agentYaml.capabilities = manifest.capabilities;\n if (manifest.composes?.length) {\n agentYaml.composes = bundleLocalComposes(\n manifest.composes,\n srcDir,\n destDir,\n workspaceRoot,\n changed,\n warnings,\n );\n }\n if (manifest.tags?.length) agentYaml.tags = manifest.tags;\n if (manifest.metadata) agentYaml.metadata = manifest.metadata;\n\n writeAgent(join(destDir, \"agent.yaml\"), stringifyYaml(agentYaml), workspaceRoot, [], changed);\n\n // Write SOUL.md (enriched with fragments and extensions, like other renderers)\n const enrichedSoul = buildMarkdownBody(\n soul,\n rules,\n duties,\n abilityRefs,\n contractRefs,\n frameworkFragments,\n promptExtensions,\n );\n writeAgent(join(destDir, \"SOUL.md\"), enrichedSoul, workspaceRoot, [], changed);\n\n // omp lists the agents it can spawn from flat `.omp/agents/<name>.md` files only (verified live\n // against omp 18.12.5: a `<name>/agent.yaml` directory is not listed, a flat file is), so the\n // directory above carries the full GitAgent package and this file is what omp loads.\n const frontmatter: Record<string, unknown> = {\n name: agentName,\n description: manifest.description ?? `${agentName} agent`,\n };\n if (manifest.tools?.allowed?.length) frontmatter.tools = manifest.tools.allowed.join(\", \");\n const selector = model?.preferred;\n if (selector) frontmatter.model = selector;\n writeAgent(\n join(agentDeployDir, `${agentName}.md`),\n `---\\n${stringifyYaml(frontmatter).trim()}\\n---\\n\\n${enrichedSoul}`,\n workspaceRoot,\n created,\n changed,\n );\n\n created.push(relative(workspaceRoot, destDir));\n return { created, changed, warnings };\n};\n\n// ── Renderer registry ──────────────────────────────���──────────────────────────\n\nexport type Log = (msg: string) => void;\nconst noop: Log = () => {};\n\n/**\n * Render an agent to framework-native format via the renderer registry.\n *\n * Shared by both the simple deploy path (`deployAsset`) and the enriched scaffold path (agents layer).\n *\n * @param input - Full render input including manifest, SOUL/RULES text, and resolved refs.\n * @param harnessTarget - Agent framework ID to look up in {@link AGENT_RENDERERS}.\n * @param log - Optional logger callback for progress messages.\n * @returns Object with `created` file paths and `warnings` list.\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport function renderAgentToFramework(\n input: AgentRenderInput,\n harnessTarget: string,\n log: Log = noop,\n): AgentRenderResult {\n const renderer = AGENT_RENDERERS[harnessTarget];\n if (!renderer) {\n return {\n created: [],\n changed: [],\n warnings: [`No renderer for framework \"${harnessTarget}\"`],\n };\n }\n const result = renderer(input);\n for (const c of result.created) log(` rendered agent: ${c}`);\n for (const w of result.warnings) log(` warn: ${w}`);\n return result;\n}\n\n/**\n * Registry mapping framework IDs to their {@link AgentRenderer} functions.\n *\n * Only harnesses with a full bridge harness are registered. Add new entries\n * when a bridge harness is implemented in `workspaces/bridge/src/harnesses/`.\n *\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport const AGENT_RENDERERS: Record<string, AgentRenderer> = {\n \"claude-code\": claudeCodeRenderer,\n omp: ompRenderer,\n codex: codexRenderer,\n};\n\n/**\n * Returns `true` if the given harness target supports file-based sub-agent installation.\n *\n * @param harnessTarget - Agent framework ID to check.\n * @returns `true` when `harnessTarget` has a registered entry in {@link AGENT_RENDERERS}.\n * @docLink packages/asset-manager/api-reference#renderers\n */\nexport function harnessTargetSupportsAgents(harnessTarget: string): boolean {\n return harnessTarget in AGENT_RENDERERS;\n}\n\n/**\n * The files the renderer of `harnessTarget` writes for the agent `agentName` into the agent deploy\n * directory `agentDeployDir` (`.claude/agents`, `.codex/agents`, `.omp/agents`): what `add\n * --dry-run` lists (p1621). Files a `composes:` of local refs adds to omp are not listed. Empty\n * for a harness target without an agent renderer.\n */\nexport function agentRenderFiles(\n harnessTarget: string,\n agentDeployDir: string,\n agentName: string,\n): string[] {\n switch (harnessTarget) {\n case \"claude-code\":\n return [join(agentDeployDir, `${agentName}.md`)];\n case \"codex\":\n return [\n join(agentDeployDir, `${agentName}.toml`),\n join(dirname(agentDeployDir), CODEX_IDENTITY_DIR, `${agentName}.md`),\n ];\n case \"omp\":\n return [\n join(agentDeployDir, agentName, \"agent.yaml\"),\n join(agentDeployDir, agentName, \"SOUL.md\"),\n join(agentDeployDir, `${agentName}.md`),\n ];\n default:\n return [];\n }\n}\n"]}
|
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
import { WorkspacePlugin } from './chunk-
|
|
2
|
-
import { buildWorkspaceToolDefs } from './chunk-
|
|
3
|
-
import { findAiAssetsRoot } from './chunk-
|
|
4
|
-
import { startModelEndpoint } from './chunk-
|
|
5
|
-
import { WebSocketServerTransport } from './chunk-
|
|
1
|
+
import { WorkspacePlugin } from './chunk-DCJ4BION.js';
|
|
2
|
+
import { buildWorkspaceToolDefs } from './chunk-SISUT7VR.js';
|
|
3
|
+
import { findAiAssetsRoot } from './chunk-L45IHRDH.js';
|
|
4
|
+
import { startModelEndpoint } from './chunk-IZV3HDVG.js';
|
|
5
|
+
import { WebSocketServerTransport } from './chunk-UBLZALKP.js';
|
|
6
6
|
import { assembleSystemPrompt, buildCapabilitiesPromptSection } from './chunk-W3UDISS2.js';
|
|
7
7
|
import { prepareNativePolicy, codexInstanceEnvironment, parseCodexCredential, parseCodexRefreshInput, parseCodexRefreshResult } from './chunk-HTGTNN2B.js';
|
|
8
|
-
import { resolveFlowPath } from './chunk-
|
|
9
|
-
import { findAiAssetsRoot as findAiAssetsRoot$1, deployCatalogEntry, undeployCatalogEntry } from './chunk-
|
|
10
|
-
import { ConnectFailureCarryOver, registerBuiltinConnectors, buildConnectorPromptSection, findMissingPackages, installNpmPackages, ConnectorManager, buildSdkConnectorTools, buildLazySdkFlowTools, describeFlowOperations, buildConnectorToolDefs, buildFlowToolDefs, SessionNodeExecutor, SessionSubpromptRunner, ClassifierSubpromptRunner, SessionInlineSubFlowRunner, driveOrchestratorTurn, buildSdkFlowTools } from './chunk-
|
|
11
|
-
import { loadYamlConnectorDeclarations, withMaterializedConnectorDeclarations, SecretProviderChain, ConnectorStartupError, isKnownSecretRef, EnvSecretProvider, PreMintedSecretProvider, InMemorySecretProvider, resolvedConfigToDeclarations, deriveSingleMaterializedConnectorDeclaration } from './chunk-
|
|
12
|
-
import { EventNormalizer } from './chunk-
|
|
13
|
-
import { sessionSurfaceNotice, approvalCardOf, APPROVE_ONCE, DENY, probeResumeTranscript, transcriptStoreForRuntime } from './chunk-
|
|
8
|
+
import { resolveFlowPath } from './chunk-Q4XWCVFA.js';
|
|
9
|
+
import { findAiAssetsRoot as findAiAssetsRoot$1, deployCatalogEntry, undeployCatalogEntry } from './chunk-BUU2DLPC.js';
|
|
10
|
+
import { ConnectFailureCarryOver, registerBuiltinConnectors, buildConnectorPromptSection, findMissingPackages, installNpmPackages, ConnectorManager, buildSdkConnectorTools, buildLazySdkFlowTools, describeFlowOperations, buildConnectorToolDefs, buildFlowToolDefs, SessionNodeExecutor, SessionSubpromptRunner, ClassifierSubpromptRunner, SessionInlineSubFlowRunner, driveOrchestratorTurn, buildSdkFlowTools } from './chunk-EXRQKOY6.js';
|
|
11
|
+
import { loadYamlConnectorDeclarations, withMaterializedConnectorDeclarations, SecretProviderChain, ConnectorStartupError, isKnownSecretRef, EnvSecretProvider, PreMintedSecretProvider, InMemorySecretProvider, resolvedConfigToDeclarations, deriveSingleMaterializedConnectorDeclaration } from './chunk-O7KAQQAI.js';
|
|
12
|
+
import { EventNormalizer } from './chunk-5T3DTK7A.js';
|
|
13
|
+
import { sessionSurfaceNotice, approvalCardOf, APPROVE_ONCE, DENY, probeResumeTranscript, transcriptStoreForRuntime } from './chunk-PTBX55QF.js';
|
|
14
14
|
import { CodexNativeStateUnavailable } from './chunk-LOO5CB5M.js';
|
|
15
|
-
import { dispatchCapability } from './chunk-
|
|
15
|
+
import { dispatchCapability } from './chunk-UUKCPPTQ.js';
|
|
16
16
|
import { classifyClaudeSdkError } from './chunk-6OHZUUR7.js';
|
|
17
17
|
import { agentExecRequested } from './chunk-7DN6JKP2.js';
|
|
18
|
-
import { toAgentEffort, toMergedRegistry } from './chunk-
|
|
19
|
-
import { unresolvedProviderCredentials, harnessCapabilities, createHarness, providerCredentialEnvName, registryCredentialEnv, supportsLiveToolUpdates } from './chunk-
|
|
18
|
+
import { toAgentEffort, toMergedRegistry } from './chunk-QSIFEHSN.js';
|
|
19
|
+
import { unresolvedProviderCredentials, harnessCapabilities, createHarness, providerCredentialEnvName, registryCredentialEnv, supportsLiveToolUpdates } from './chunk-QJQQNBVT.js';
|
|
20
20
|
import { catalogLayer, AI_PROVIDER_PRESETS } from './chunk-6UP2EDFN.js';
|
|
21
|
-
import { loadFlow } from './chunk-
|
|
21
|
+
import { loadFlow } from './chunk-ZWCGJYR7.js';
|
|
22
22
|
import { renderStimulusPrompt } from './chunk-WD3L5QSU.js';
|
|
23
|
-
import { TERMINAL_AGENT_RUN_STATUSES, withActivityLabelJsonSchema, TOOL_ACTIVITY_PROMPT_SECTION, SESSION_ROOT_CONNECTOR_ID, PLATFORM_BLOCKS_RUNTIME_FEATURE, PROTOCOL_VERSION, deliveryClassOf } from './chunk-
|
|
24
|
-
import { knowledgeKindProvider, scanLibraryRoot, LocalIndex } from './chunk-
|
|
25
|
-
import { createDefaultKindRegistry } from './chunk-
|
|
23
|
+
import { TERMINAL_AGENT_RUN_STATUSES, withActivityLabelJsonSchema, TOOL_ACTIVITY_PROMPT_SECTION, SESSION_ROOT_CONNECTOR_ID, PLATFORM_BLOCKS_RUNTIME_FEATURE, PROTOCOL_VERSION, deliveryClassOf } from './chunk-VZU67OKK.js';
|
|
24
|
+
import { knowledgeKindProvider, scanLibraryRoot, LocalIndex } from './chunk-GBXQFJ4G.js';
|
|
25
|
+
import { createDefaultKindRegistry } from './chunk-WENTJ5KP.js';
|
|
26
26
|
import { parseFlowDefinition } from './chunk-JRN5QF4C.js';
|
|
27
27
|
import { BindingSchema, effectiveComposes, AgentManifestSchema, AgentTriggerSchema, ANTHROPIC_MODEL_ALIASES } from './chunk-76FLBODK.js';
|
|
28
|
-
import { readLock, buildAgentPromptSections, resolveSettings, loadProviderRegistry, resolveLibraryDir } from './chunk-
|
|
29
|
-
import { resolveRuntimeAssets } from './chunk-
|
|
28
|
+
import { readLock, buildAgentPromptSections, resolveSettings, loadProviderRegistry, resolveLibraryDir } from './chunk-ABVWUM2E.js';
|
|
29
|
+
import { resolveRuntimeAssets } from './chunk-3ENE6ZOF.js';
|
|
30
30
|
import { DEFAULT_HARNESS_ID, resolveHarnessPaths } from './chunk-C5HFK34M.js';
|
|
31
|
-
import { matchPin, DEFAULT_AGENT_INSTANCE_ID, effectiveAgentInstances, resolveAgentDefinitionDir, AgentRefResolutionError, resolveSkWorkspaceConfig, resolveAgentDir, loadMcpServerDeclarations, COMPACTION_DEFAULTS, resolveCompactionThresholdPercent, getGlobalCacheDir, sourceCacheKey, validateAssetRecipeAttr, deriveSingleMaterializedMcpDeclaration, stageMaterializedSkills, readSkillAllowList, isStagedSkillMarkerFor, unstageSkill, STAGED_SKILL_MARKER } from './chunk-
|
|
31
|
+
import { matchPin, DEFAULT_AGENT_INSTANCE_ID, effectiveAgentInstances, resolveAgentDefinitionDir, AgentRefResolutionError, resolveSkWorkspaceConfig, resolveAgentDir, loadMcpServerDeclarations, COMPACTION_DEFAULTS, resolveCompactionThresholdPercent, getGlobalCacheDir, sourceCacheKey, validateAssetRecipeAttr, deriveSingleMaterializedMcpDeclaration, stageMaterializedSkills, readSkillAllowList, isStagedSkillMarkerFor, unstageSkill, STAGED_SKILL_MARKER } from './chunk-6WQGJF65.js';
|
|
32
32
|
import { globalSkaileDir } from './chunk-L5VSIPQD.js';
|
|
33
33
|
import { harnessNameForHarnessId, SUPPORTED_HARNESSES, HARNESS_TARGETS } from './chunk-VTETQCR6.js';
|
|
34
|
-
import { withFsDeadline, FsDeadlineError, fsDeadlineMs, parseFrontmatter, tryWithFsDeadline } from './chunk-
|
|
34
|
+
import { withFsDeadline, FsDeadlineError, fsDeadlineMs, parseFrontmatter, tryWithFsDeadline } from './chunk-VV2DJT4I.js';
|
|
35
35
|
import { parseAssetRef } from './chunk-IZQOO6MN.js';
|
|
36
36
|
import { pickRegistryEntries, registryEntries, resolveEntryBaseUrl, parseModelRef, isEntryEnabled, parseCredentialRef } from './chunk-RXGPFAMN.js';
|
|
37
37
|
import { resolveLogStoreConfig, createLogStoreFromConfig, OnLogBridgeSink, WsLogSink, resolveLogsRetention, enforceLogsRetention } from './chunk-DKXNKFKP.js';
|
|
@@ -6969,14 +6969,16 @@ function capabilityFailure(name, err) {
|
|
|
6969
6969
|
return {
|
|
6970
6970
|
ok: false,
|
|
6971
6971
|
code: "invalid_input",
|
|
6972
|
-
message: `invalid input for ${name}: ${parts.join("; ")}
|
|
6972
|
+
message: `invalid input for ${name}: ${parts.join("; ")}`,
|
|
6973
|
+
error: `invalid input for ${name}: ${parts.join("; ")}`
|
|
6973
6974
|
};
|
|
6974
6975
|
}
|
|
6975
6976
|
const message = err instanceof Error ? err.message : String(err);
|
|
6976
6977
|
return {
|
|
6977
6978
|
ok: false,
|
|
6978
6979
|
code: message.startsWith("Unknown capability:") ? "unknown_capability" : "capability_failed",
|
|
6979
|
-
message
|
|
6980
|
+
message,
|
|
6981
|
+
error: message
|
|
6980
6982
|
};
|
|
6981
6983
|
}
|
|
6982
6984
|
function resolveCapabilityResult(pending, cmd) {
|
|
@@ -16170,5 +16172,5 @@ function touchSession(state) {
|
|
|
16170
16172
|
}
|
|
16171
16173
|
|
|
16172
16174
|
export { AgentRunError, CLAUDE_CODE_CREDENTIALS_KEY, COMPILE_MANIFEST_FILENAME, CONNECTOR_MUTATE_NOT_READY, CapabilityRegistry, CompileManifestEntrySchema, CompositionError, DEFAULT_CAPABILITY_CALL_TIMEOUT_MS, DEFAULT_COALESCE_MS, DEFAULT_FLOW_MUTATE_CONNECTOR_WAIT_MS, DEFAULT_MAX_FINISHED_TREES, DEFAULT_RUN_LIMITS, MOUNT_LIST_MAX_DEPTH, MOUNT_LIST_MAX_ENTRIES, MOUNT_READ_DEADLINE_FACTOR, MOUNT_READ_MAX_CHUNK_BYTES, MOUNT_STAT_BUDGET_MS, MOUNT_STAT_MAX_ENTRIES, MOUNT_TREE_OP_DEADLINE_FACTOR, MOUNT_WRITE_MAX_CHUNK_BYTES, MarkdownStreamer, PreInitRingSink, ResourceOperationError, SESSION_ROOT_WRITABLE_DIRS, SESSION_ROOT_WRITABLE_FILES, UnknownCompositionKindError, WRITE_RANGE_PARTIAL_TTL_MS, WS_AUTH_TOKEN_ENV, WS_AUTH_TOKEN_FILE_ENV, agentDefinitionExists, bootstrapCapabilityRegistry, bootstrapRunnerLogStore, buildAgentResources, buildClientCapabilityHandler, buildCompositionRunSnapshot, buildConnectorTokenMediator, buildContextSection, buildEnvironmentSection, buildResourcesAvailablePayload, buildRunnerAgentSections, buildStoreSnapshotReplay, builtinCapabilities, canonicalJson, capabilityLogInstance, capabilitySignatureInputs, clearPreInitRingSink, clearSession, compileComposition, compositionRunSnapshotPath, computeCapabilitySignature, computeDirectoryTotals, computeRevisionHash, connectorRefreshKind, createAgentSession, createCompositionContentSource, createFinalTextFallback, createFlowConnectorReadiness, createInMemoryRunStore, createManagedCodexSubpromptHarness, createRunController, createSessionStimulusBus, defineCapability, deleteSession, describeComposition, dispatchResourceRequest, dispatchRunnerCapabilityInvocation, emitSystemPromptComposed, ensureClaudeSettingsDisablesConnectors, ensureGitConfigInclude, executeConnectorMutate, extractClaudeAiOauthExpiresAt, flowStartNeedsHarnessRestart, getPreInitRingSink, handleMountResourceRequest, handleResourceRequest, handleSessionRootResourceRequest, harnessActiveAfterTurnEnd, hasNonTerminalFlow, hashAgentFiles, hashContent, hostOpResumeStimulus, installPreInitRingSink, instanceForSession, instanceSessionOverrides, isCompilePinCurrent, isCompositionError, isEmptyKnowledgeIndex, isSessionRootPathAllowed, listSessions, loadAgentManifest, loadCompileManifest, loadCompileManifestFromDir, loadCompositionRunSnapshot, loadKnowledgeDir, loadManagedCodexHostConfig, loadSession, loadSessionById, manifestModelForHarness, mcpAuthSecretKey, newSession, nulTailPaddingLength, pickChatFlowTarget, pickFlowToolTarget, pickRepointedManager, planFlowMutate, prepareCodexTools, reconcilePendingDecisions, reconnectedRunNeedsAgentTurn, recreateKeepingLiveFlows, registerActiveFlow, registerCompositionCapabilities, rejectCapabilityOnApprovalDeny, rejectPendingCapabilityCallsOnDisconnect, resetRunnerLogStore, resolveAgentInstance, resolveBinding, resolveCapabilityCallTimeoutMs, resolveCapabilityResult, resolveComposition, resolveFlowMutateConnectorWaitMs, resolveInstanceAgentDir, resolveMixin, resolveSessionId, restoredRunHasWorkToResume, runAgentChat, saveCompositionRunSnapshot, saveSession, setCurrentSession, setUpFlowConnector, startAgentServer, stimulusFromMetas, stripFrontmatter, takeRunnerWsAuthToken, toActiveFlowTarget, touchSession, unresolvedCredentialNotices, validateInputResponse, verifyConventionItems, writeClaudeCodeCredentialsFile, writeRangeChunk, writeRangePartialPath };
|
|
16173
|
-
//# sourceMappingURL=chunk-
|
|
16174
|
-
//# sourceMappingURL=chunk-
|
|
16175
|
+
//# sourceMappingURL=chunk-VSCLUPGZ.js.map
|
|
16176
|
+
//# sourceMappingURL=chunk-VSCLUPGZ.js.map
|