@skaile/workspaces 4.32.1 → 4.34.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 +20 -0
- package/README.md +3 -3
- package/dist/app-sdk/index.js +1 -1
- package/dist/{asset-feeds-TOJQTJYS.js → asset-feeds-EIHLRBUG.js} +11 -11
- package/dist/{asset-feeds-TOJQTJYS.js.map → asset-feeds-EIHLRBUG.js.map} +1 -1
- package/dist/asset-manager/catalog-deployer.js +5 -5
- package/dist/asset-manager/index.js +11 -11
- package/dist/asset-manager/installer.js +8 -8
- package/dist/asset-manager/renderers.js +2 -2
- package/dist/asset-manager/src/index.d.ts +30 -24
- package/dist/asset-manager/src/index.d.ts.map +1 -1
- package/dist/asset-manager/src/renderers.d.ts +2 -2
- package/dist/bridge/drivers/claude-sdk.js +10 -10
- package/dist/bridge/drivers/codex.js +8 -8
- package/dist/bridge/drivers/continue.js +10 -10
- package/dist/bridge/drivers/continue.js.map +1 -1
- package/dist/bridge/drivers/echo.js +3 -3
- package/dist/bridge/drivers/gemini.js +6 -6
- package/dist/bridge/drivers/goose.js +10 -10
- package/dist/bridge/drivers/goose.js.map +1 -1
- package/dist/bridge/drivers/omp.js +4 -4
- package/dist/bridge/drivers/omp.js.map +1 -1
- package/dist/bridge/drivers/opencode.js +11 -11
- package/dist/bridge/drivers/opencode.js.map +1 -1
- package/dist/bridge/drivers/qwen.js +6 -6
- package/dist/bridge/index.js +11 -11
- package/dist/bridge/src/capability-dispatch.d.ts +1 -1
- package/dist/bridge/src/drivers/_subprocess-cli.d.ts +3 -3
- package/dist/bridge/src/drivers/continue.d.ts +1 -1
- package/dist/bridge/src/drivers/gemini.d.ts +3 -3
- package/dist/bridge/src/drivers/goose.d.ts +1 -1
- package/dist/bridge/src/drivers/opencode.d.ts +1 -1
- package/dist/bridge/src/provider-materialize/continue-config-yaml.d.ts +2 -2
- package/dist/bridge/src/provider-materialize/credential-env.d.ts +4 -4
- package/dist/bridge/src/provider-materialize/env-drivers.d.ts +18 -18
- package/dist/bridge/src/provider-materialize/goose-custom-providers.d.ts +1 -1
- package/dist/bridge/src/provider-materialize/opencode-config.d.ts +1 -1
- package/dist/bridge/src/provider-materialize/session-config-home.d.ts +5 -5
- package/dist/bridge/src/registry.d.ts +10 -10
- package/dist/bridge/src/types.d.ts +9 -9
- package/dist/{chunk-JYWEWJ46.js → chunk-2EUW6NZD.js} +2 -2
- package/dist/{chunk-JYWEWJ46.js.map → chunk-2EUW6NZD.js.map} +1 -1
- package/dist/{chunk-WPISSDEI.js → chunk-3ELIPWCH.js} +6 -6
- package/dist/{chunk-WPISSDEI.js.map → chunk-3ELIPWCH.js.map} +1 -1
- package/dist/{chunk-HL6SZ7Z3.js → chunk-5YXKEM7Q.js} +7 -7
- package/dist/{chunk-HL6SZ7Z3.js.map → chunk-5YXKEM7Q.js.map} +1 -1
- package/dist/{chunk-ZRE4N6ZA.js → chunk-75LXFKQR.js} +4 -4
- package/dist/{chunk-ZRE4N6ZA.js.map → chunk-75LXFKQR.js.map} +1 -1
- package/dist/{chunk-GMXG2JGN.js → chunk-7ERHZQ7O.js} +3 -3
- package/dist/{chunk-GMXG2JGN.js.map → chunk-7ERHZQ7O.js.map} +1 -1
- package/dist/{chunk-JULFGNQN.js → chunk-7HJ6SFFF.js} +3 -3
- package/dist/{chunk-JULFGNQN.js.map → chunk-7HJ6SFFF.js.map} +1 -1
- package/dist/{chunk-DKCFWSVW.js → chunk-7LBPHRRP.js} +3 -3
- package/dist/chunk-7LBPHRRP.js.map +1 -0
- package/dist/{chunk-3GMRVUDA.js → chunk-AKBPLLFB.js} +5 -5
- package/dist/{chunk-3GMRVUDA.js.map → chunk-AKBPLLFB.js.map} +1 -1
- package/dist/{chunk-54A5QAIV.js → chunk-C3256F2F.js} +2 -2
- package/dist/{chunk-54A5QAIV.js.map → chunk-C3256F2F.js.map} +1 -1
- package/dist/{chunk-2JANXYTJ.js → chunk-DHLE66FV.js} +3 -3
- package/dist/{chunk-2JANXYTJ.js.map → chunk-DHLE66FV.js.map} +1 -1
- package/dist/{chunk-BR2IXOWX.js → chunk-DOF77WEV.js} +6 -6
- package/dist/{chunk-BR2IXOWX.js.map → chunk-DOF77WEV.js.map} +1 -1
- package/dist/{chunk-MENCWIHW.js → chunk-EB4ZTESQ.js} +4 -4
- package/dist/chunk-EB4ZTESQ.js.map +1 -0
- package/dist/{chunk-E2IZD74W.js → chunk-ENV5DDQ7.js} +6 -6
- package/dist/{chunk-E2IZD74W.js.map → chunk-ENV5DDQ7.js.map} +1 -1
- package/dist/{chunk-IXGNQP7Z.js → chunk-FDZL5QVZ.js} +3 -3
- package/dist/{chunk-IXGNQP7Z.js.map → chunk-FDZL5QVZ.js.map} +1 -1
- package/dist/{chunk-NJVXDRQY.js → chunk-GKTFGCQZ.js} +3 -3
- package/dist/chunk-GKTFGCQZ.js.map +1 -0
- package/dist/{chunk-CYESHAXV.js → chunk-JR2QQLAQ.js} +21 -21
- package/dist/{chunk-CYESHAXV.js.map → chunk-JR2QQLAQ.js.map} +1 -1
- package/dist/{chunk-5RHPNNWP.js → chunk-JRIU5GA7.js} +3 -3
- package/dist/{chunk-5RHPNNWP.js.map → chunk-JRIU5GA7.js.map} +1 -1
- package/dist/{chunk-OS4SXZTQ.js → chunk-JRSCSYRF.js} +6 -6
- package/dist/chunk-JRSCSYRF.js.map +1 -0
- package/dist/{chunk-34ZVTPDV.js → chunk-JS7DCCDA.js} +4 -4
- package/dist/{chunk-34ZVTPDV.js.map → chunk-JS7DCCDA.js.map} +1 -1
- package/dist/{chunk-F3HNW354.js → chunk-KIFJWSNC.js} +3 -3
- package/dist/{chunk-F3HNW354.js.map → chunk-KIFJWSNC.js.map} +1 -1
- package/dist/{chunk-TGLCW25T.js → chunk-LA7DCX2U.js} +4 -4
- package/dist/{chunk-TGLCW25T.js.map → chunk-LA7DCX2U.js.map} +1 -1
- package/dist/{chunk-DF7C3KZK.js → chunk-LRCSWOZO.js} +14 -14
- package/dist/chunk-LRCSWOZO.js.map +1 -0
- package/dist/{chunk-MVSF6AB4.js → chunk-MTWZ7KHZ.js} +3 -3
- package/dist/{chunk-MVSF6AB4.js.map → chunk-MTWZ7KHZ.js.map} +1 -1
- package/dist/{chunk-BU53MUL5.js → chunk-N2UGG6WV.js} +4 -4
- package/dist/{chunk-BU53MUL5.js.map → chunk-N2UGG6WV.js.map} +1 -1
- package/dist/{chunk-MNA22VPT.js → chunk-NVQLE4MK.js} +4 -4
- package/dist/{chunk-MNA22VPT.js.map → chunk-NVQLE4MK.js.map} +1 -1
- package/dist/{chunk-EOX3QH74.js → chunk-OS6256B2.js} +291 -27
- package/dist/chunk-OS6256B2.js.map +1 -0
- package/dist/{chunk-223FKFTC.js → chunk-OWN2W2IW.js} +109 -37
- package/dist/chunk-OWN2W2IW.js.map +1 -0
- package/dist/{chunk-U2I2BRCP.js → chunk-RHESVS7V.js} +9 -9
- package/dist/{chunk-U2I2BRCP.js.map → chunk-RHESVS7V.js.map} +1 -1
- package/dist/{chunk-G3N2ZCOJ.js → chunk-RR4PJZLK.js} +36 -35
- package/dist/chunk-RR4PJZLK.js.map +1 -0
- package/dist/{chunk-6GSZLKA5.js → chunk-T762W5CI.js} +3 -3
- package/dist/chunk-T762W5CI.js.map +1 -0
- package/dist/{chunk-3ZE7X5Y6.js → chunk-TB3LJ6NA.js} +3 -3
- package/dist/{chunk-3ZE7X5Y6.js.map → chunk-TB3LJ6NA.js.map} +1 -1
- package/dist/{chunk-N7B3LZ7V.js → chunk-TGE33MKN.js} +2 -2
- package/dist/{chunk-N7B3LZ7V.js.map → chunk-TGE33MKN.js.map} +1 -1
- package/dist/{chunk-3DZGPJU5.js → chunk-TGJIX77V.js} +11 -11
- package/dist/chunk-TGJIX77V.js.map +1 -0
- package/dist/{chunk-XVGB3K4B.js → chunk-TTITGVXV.js} +3 -3
- package/dist/{chunk-XVGB3K4B.js.map → chunk-TTITGVXV.js.map} +1 -1
- package/dist/{chunk-HGPSZXZP.js → chunk-VOXFI3XS.js} +3 -3
- package/dist/{chunk-HGPSZXZP.js.map → chunk-VOXFI3XS.js.map} +1 -1
- package/dist/{chunk-IT7ZHRCK.js → chunk-WFRVQ2RY.js} +10 -10
- package/dist/{chunk-IT7ZHRCK.js.map → chunk-WFRVQ2RY.js.map} +1 -1
- package/dist/{chunk-UNUQGYCW.js → chunk-Z2QI42YH.js} +3 -3
- package/dist/{chunk-UNUQGYCW.js.map → chunk-Z2QI42YH.js.map} +1 -1
- package/dist/{chunk-DMNYWLED.js → chunk-ZWTCXL3H.js} +3 -3
- package/dist/{chunk-DMNYWLED.js.map → chunk-ZWTCXL3H.js.map} +1 -1
- package/dist/cli/index.js +121 -121
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/src/commands/catalog.d.ts +1 -1
- package/dist/cli/src/commands/integration.d.ts +2 -2
- package/dist/cli/src/commands/plugin/claude-code.d.ts +2 -2
- package/dist/cli/src/commands/plugin/codex.d.ts +2 -2
- package/dist/cli/src/commands/plugin/omp.d.ts +2 -2
- package/dist/cli/src/commands/plugin/types.d.ts +13 -13
- package/dist/cli/src/commands/plugin/types.d.ts.map +1 -1
- package/dist/cli/src/commands/run.d.ts +1 -1
- package/dist/connectors/config.js +3 -3
- package/dist/connectors/index.js +15 -15
- package/dist/connectors/src/watcher.d.ts +27 -0
- package/dist/connectors/src/watcher.d.ts.map +1 -1
- package/dist/connectors-shared/index.js +2 -2
- package/dist/core/driver-targets.js +1 -1
- package/dist/core/index.js +5 -5
- package/dist/core/runtime-assets.js +3 -3
- package/dist/core/src/driver-targets.d.ts +8 -8
- package/dist/core/src/index.d.ts +8 -2
- package/dist/core/src/index.d.ts.map +1 -1
- package/dist/core/src/settings.d.ts +1 -1
- package/dist/core/src/workspace-config.d.ts +16 -15
- package/dist/core/src/workspace-config.d.ts.map +1 -1
- package/dist/core/store.js +2 -2
- package/dist/core/workspace-config.js +2 -2
- package/dist/deploy/index.js +5 -5
- package/dist/discovery/index.js +2 -2
- package/dist/{ensure-sources-UJBLBTXI.js → ensure-sources-JR4QI2MY.js} +14 -14
- package/dist/{ensure-sources-UJBLBTXI.js.map → ensure-sources-JR4QI2MY.js.map} +1 -1
- package/dist/factory-assets/connectors/box.js +15 -15
- package/dist/factory-assets/connectors/deploy.js +15 -15
- package/dist/factory-assets/connectors/devserver.js +15 -15
- package/dist/factory-assets/connectors/flow/CONNECTOR.md +2 -2
- package/dist/factory-assets/connectors/flow/adapter.js +15 -15
- package/dist/factory-assets/connectors/flow/engine.js +6 -6
- package/dist/factory-assets/connectors/flow/run-flow.d.ts +1 -1
- package/dist/factory-assets/connectors/flow/run-flow.js +16 -16
- package/dist/factory-assets/connectors/flow/subprompt-runner.d.ts +3 -3
- package/dist/factory-assets/connectors/flow/subprompt-runner.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow.js +15 -15
- package/dist/factory-assets/connectors/git.js +15 -15
- package/dist/factory-assets/connectors/gmail.js +15 -15
- package/dist/factory-assets/connectors/googledrive.js +15 -15
- package/dist/factory-assets/connectors/local.js +15 -15
- package/dist/factory-assets/connectors/mattermost.js +15 -15
- package/dist/factory-assets/connectors/memory.js +15 -15
- package/dist/factory-assets/connectors/minio.js +15 -15
- package/dist/factory-assets/connectors/postgres.js +15 -15
- package/dist/factory-assets/connectors/s3.js +15 -15
- package/dist/factory-assets/connectors/sharepoint.js +15 -15
- package/dist/factory-assets/connectors/sqlite.js +15 -15
- package/dist/factory-assets/connectors/static-server.js +15 -15
- package/dist/factory-assets/connectors/tunnel.js +15 -15
- package/dist/factory-assets/connectors/webdav.js +15 -15
- package/dist/factory-assets/connectors/xstate-store.js +15 -15
- package/dist/factory-assets/connectors/xstate.js +15 -15
- package/dist/{flows-QTUSWYKY.js → flows-X7JFAVRR.js} +8 -8
- package/dist/{flows-QTUSWYKY.js.map → flows-X7JFAVRR.js.map} +1 -1
- package/dist/{helpers-QSRBM6LP.js → helpers-HTET53KB.js} +14 -14
- package/dist/{helpers-QSRBM6LP.js.map → helpers-HTET53KB.js.map} +1 -1
- package/dist/library/index.js +8 -8
- package/dist/{library-publish-JTS2PA2P.js → library-publish-T6KHQ3TE.js} +18 -18
- package/dist/{library-publish-JTS2PA2P.js.map → library-publish-T6KHQ3TE.js.map} +1 -1
- package/dist/{open-library-PIUYBOZI.js → open-library-O5I2DAEK.js} +16 -16
- package/dist/{open-library-PIUYBOZI.js.map → open-library-O5I2DAEK.js.map} +1 -1
- package/dist/{paths-IOOMNHTC.js → paths-OI5IIS22.js} +8 -8
- package/dist/{paths-IOOMNHTC.js.map → paths-OI5IIS22.js.map} +1 -1
- package/dist/plugin-registry/src/targets.d.ts +5 -5
- package/dist/plugin-registry/src/targets.d.ts.map +1 -1
- package/dist/{plugin-store-OIIPB2MQ.js → plugin-store-C67RLSPD.js} +7 -7
- package/dist/{plugin-store-OIIPB2MQ.js.map → plugin-store-C67RLSPD.js.map} +1 -1
- package/dist/{project-Y2BU3TSB.js → project-QIOXU2NS.js} +15 -15
- package/dist/{project-Y2BU3TSB.js.map → project-QIOXU2NS.js.map} +1 -1
- package/dist/resolver/index.js +5 -5
- package/dist/runner/index.js +20 -20
- package/dist/runner/src/external-mcp.d.ts +10 -0
- package/dist/runner/src/external-mcp.d.ts.map +1 -1
- package/dist/runner/src/lifecycle-handler.d.ts.map +1 -1
- package/dist/runner/src/logging-bootstrap.d.ts +5 -0
- package/dist/runner/src/logging-bootstrap.d.ts.map +1 -1
- package/dist/runner/src/manifest.d.ts +1 -1
- package/dist/runner/src/resources.d.ts.map +1 -1
- package/dist/runner/src/runner-capabilities.d.ts +2 -0
- package/dist/runner/src/runner-capabilities.d.ts.map +1 -1
- package/dist/runner/src/serve.d.ts +1 -1
- package/dist/runner/src/serve.d.ts.map +1 -1
- package/dist/runner/src/session-builder.d.ts +2 -2
- package/dist/runner/src/session.d.ts +1 -1
- package/dist/runner/src/session.d.ts.map +1 -1
- package/dist/runner/src/stall-watchdog.d.ts +53 -0
- package/dist/runner/src/stall-watchdog.d.ts.map +1 -0
- package/dist/sdk/asset-manager.js +11 -11
- package/dist/sdk/bridge.js +11 -11
- package/dist/sdk/core.js +5 -5
- package/dist/sdk/flow.js +6 -6
- package/dist/sdk/index.js +20 -20
- package/dist/sdk/resolver.js +5 -5
- package/dist/sdk/runner.js +20 -20
- package/dist/sdk/session.js +2 -2
- package/dist/sdk/types.js +1 -1
- package/dist/session/index.js +2 -2
- package/dist/{setup-VY5L44XZ.js → setup-SSGPDDWL.js} +20 -20
- package/dist/{setup-VY5L44XZ.js.map → setup-SSGPDDWL.js.map} +1 -1
- package/dist/{skills-DH75K326.js → skills-4YTVHMOH.js} +7 -7
- package/dist/{skills-DH75K326.js.map → skills-4YTVHMOH.js.map} +1 -1
- package/dist/{source-CKD4YPK4.js → source-NPU7ZWID.js} +17 -17
- package/dist/{source-CKD4YPK4.js.map → source-NPU7ZWID.js.map} +1 -1
- package/dist/{source-manifest-publish-KTSEBNHY.js → source-manifest-publish-4EYDVPR3.js} +19 -19
- package/dist/{source-manifest-publish-KTSEBNHY.js.map → source-manifest-publish-4EYDVPR3.js.map} +1 -1
- package/dist/tui/index.js +20 -20
- package/dist/types/index.js +1 -1
- package/dist/types/manifests.js +1 -1
- package/dist/types/src/manifests/agent.d.ts +4 -4
- package/dist/types/src/runtime.d.ts +4 -4
- package/dist/types/src/version.d.ts +10 -1
- package/dist/types/src/version.d.ts.map +1 -1
- package/dist/workspace-plugin/adapters/mcp.js +8 -8
- package/dist/workspace-plugin/adapters/omp.js +7 -7
- package/dist/workspace-plugin/index.js +1 -1
- package/dist/workspace-plugin/src/plugin.d.ts +1 -1
- package/package.json +1 -1
- package/dist/chunk-223FKFTC.js.map +0 -1
- package/dist/chunk-3DZGPJU5.js.map +0 -1
- package/dist/chunk-6GSZLKA5.js.map +0 -1
- package/dist/chunk-DF7C3KZK.js.map +0 -1
- package/dist/chunk-DKCFWSVW.js.map +0 -1
- package/dist/chunk-EOX3QH74.js.map +0 -1
- package/dist/chunk-G3N2ZCOJ.js.map +0 -1
- package/dist/chunk-MENCWIHW.js.map +0 -1
- package/dist/chunk-NJVXDRQY.js.map +0 -1
- package/dist/chunk-OS4SXZTQ.js.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { SubprocessCliDriver, extractText, extractCost, extractTokens } from './chunk-
|
|
2
|
-
import { resolveEnvDriverSession, bindSingleProviderEntry, resolveRegistryBinding } from './chunk-
|
|
3
|
-
import { getStaticModels, fetchProviderModels } from './chunk-
|
|
4
|
-
import { getProviderPreset, BUILTIN_DRIVER_CATALOG, getBridgeLogger, entryCredentialValue, registryDriverConfig } from './chunk-
|
|
1
|
+
import { SubprocessCliDriver, extractText, extractCost, extractTokens } from './chunk-GKTFGCQZ.js';
|
|
2
|
+
import { resolveEnvDriverSession, bindSingleProviderEntry, resolveRegistryBinding } from './chunk-TGJIX77V.js';
|
|
3
|
+
import { getStaticModels, fetchProviderModels } from './chunk-75LXFKQR.js';
|
|
4
|
+
import { getProviderPreset, BUILTIN_DRIVER_CATALOG, getBridgeLogger, entryCredentialValue, registryDriverConfig } from './chunk-MTWZ7KHZ.js';
|
|
5
5
|
import * as z from 'zod';
|
|
6
6
|
|
|
7
7
|
var GOOGLE_DEFAULT_BASE_URL = getProviderPreset("google")?.base_url;
|
|
@@ -61,7 +61,7 @@ var GeminiFamilyDriver = class extends SubprocessCliDriver {
|
|
|
61
61
|
* The AI provider entry this session's model selector names, memoized until
|
|
62
62
|
* the model changes.
|
|
63
63
|
*
|
|
64
|
-
* Gemini CLI and Qwen Code are `single`-plurality
|
|
64
|
+
* Gemini CLI and Qwen Code are `single`-plurality harnesses (§2.3): they
|
|
65
65
|
* address one endpoint, so the bound entry supplies both the credential and
|
|
66
66
|
* the base URL. Resolving through {@link bindSingleProviderEntry} is what
|
|
67
67
|
* puts the surface check — which throws — on the start path.
|
|
@@ -80,7 +80,7 @@ var GeminiFamilyDriver = class extends SubprocessCliDriver {
|
|
|
80
80
|
}
|
|
81
81
|
/**
|
|
82
82
|
* Fail before the first spawn when the bound entry speaks a surface this
|
|
83
|
-
*
|
|
83
|
+
* harness cannot — the error names the surface.
|
|
84
84
|
*/
|
|
85
85
|
async start() {
|
|
86
86
|
this.registryBinding();
|
|
@@ -93,7 +93,7 @@ var GeminiFamilyDriver = class extends SubprocessCliDriver {
|
|
|
93
93
|
this.bindingResolved = false;
|
|
94
94
|
}
|
|
95
95
|
}
|
|
96
|
-
/** The provider-side model id the
|
|
96
|
+
/** The provider-side model id the harness is actually run with. */
|
|
97
97
|
getModel() {
|
|
98
98
|
return resolveRegistryBinding(this.providerSession())?.providerModelId ?? this.config.model;
|
|
99
99
|
}
|
|
@@ -184,5 +184,5 @@ var geminiDriverTarget = {
|
|
|
184
184
|
};
|
|
185
185
|
|
|
186
186
|
export { GeminiDriver, GeminiFamilyDriver, geminiDriverTarget };
|
|
187
|
-
//# sourceMappingURL=chunk-
|
|
188
|
-
//# sourceMappingURL=chunk-
|
|
187
|
+
//# sourceMappingURL=chunk-RHESVS7V.js.map
|
|
188
|
+
//# sourceMappingURL=chunk-RHESVS7V.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../bridge/src/drivers/gemini.ts"],"names":[],"mappings":"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","file":"chunk-U2I2BRCP.js","sourcesContent":["import type { DriverTarget } from \"@skaile/workspaces/plugin-registry\";\nimport type { Logger } from \"@skaile/workspaces/types\";\nimport * as z from \"zod\";\nimport { getBridgeLogger } from \"../logger.js\";\nimport { fetchProviderModels, getStaticModels, type ModelEntry } from \"../models.js\";\nimport { getProviderPreset } from \"../provider-catalog.js\";\nimport { entryCredentialValue } from \"../provider-materialize/credential-env.js\";\nimport {\n bindSingleProviderEntry,\n type EnvDriverSession,\n type RegistryModelBinding,\n resolveEnvDriverSession,\n resolveRegistryBinding,\n} from \"../provider-materialize/env-drivers.js\";\nimport { registryDriverConfig } from \"../provider-registry-derive.js\";\nimport { BUILTIN_DRIVER_CATALOG } from \"../registry.js\";\nimport type { AgentConfig, DriverInfo } from \"../types.js\";\nimport { extractCost, extractText, extractTokens, SubprocessCliDriver } from \"./_subprocess-cli.js\";\n\n/**\n * The Gemini API host the CLI talks to unless told otherwise — the catalog's\n * `google` preset, so the two can never drift apart.\n */\nconst GOOGLE_DEFAULT_BASE_URL = getProviderPreset(\"google\")?.base_url;\n\n/**\n * Shared base for the Gemini-CLI event family. Gemini CLI and Qwen Code (a fork\n * of Gemini CLI) emit the same `stream-json` event shape, so both dispatch the\n * same {@link handleJson}: `init`/`system` → session capture, `message`/\n * `assistant` → streamed assistant text, `tool_use` / `tool_result` → tool\n * events, `result` → tokens + cost.\n *\n * @docLink packages/bridge/drivers#gemini-driver\n */\nexport abstract class GeminiFamilyDriver extends SubprocessCliDriver {\n protected handleJson(json: any): void {\n switch (json?.type) {\n case \"init\":\n case \"system\":\n this.captureSession(json.sessionId ?? json.session_id ?? json.id);\n break;\n\n case \"message\":\n case \"assistant\": {\n const role = json.role ?? json.message?.role ?? \"assistant\";\n if (role !== \"assistant\") break;\n const text = extractText(json);\n if (json.done === true || json.final === true || json.finished === true) {\n this.pushAssistantEnd(text);\n } else {\n this.pushAssistantDelta(text);\n }\n break;\n }\n\n case \"tool_use\":\n case \"tool_call\":\n this.pushToolCall(json.name ?? json.tool ?? \"tool\", json.input ?? json.args ?? {});\n break;\n\n case \"tool_result\":\n this.pushToolResult(\n json.name ?? json.tool ?? \"tool\",\n json.result ?? json.output ?? json.content,\n Boolean(json.is_error ?? json.isError ?? json.error),\n );\n break;\n\n case \"error\":\n this.pushError(this.classifyMessage(String(json.message ?? json.error ?? \"error\")));\n break;\n\n case \"result\":\n this.captureSession(json.sessionId ?? json.session_id);\n this.pushResult({\n tokens: extractTokens(json),\n costUsd: extractCost(json),\n summary: extractText(json) || \"Task completed\",\n });\n break;\n }\n }\n\n // ── Registry binding ──────────────────────────────────────────────────────\n\n private providers?: EnvDriverSession;\n private boundEntry?: RegistryModelBinding;\n private bindingResolved = false;\n\n /** This session's AI providers, resolved once from the config. */\n protected providerSession(): EnvDriverSession {\n this.providers ??= resolveEnvDriverSession(this.config);\n return this.providers;\n }\n\n /**\n * The AI provider entry this session's model selector names, memoized until\n * the model changes.\n *\n * Gemini CLI and Qwen Code are `single`-plurality backends (§2.3): they\n * address one endpoint, so the bound entry supplies both the credential and\n * the base URL. Resolving through {@link bindSingleProviderEntry} is what\n * puts the surface check — which throws — on the start path.\n */\n protected registryBinding(): RegistryModelBinding | undefined {\n if (this.bindingResolved) return this.boundEntry;\n const binding = bindSingleProviderEntry(\n this.driverInfo.id,\n this.productName,\n this.providerSession(),\n );\n for (const warning of binding?.warnings ?? []) this.log.warn(warning);\n this.boundEntry = binding;\n this.bindingResolved = true;\n return binding;\n }\n\n /**\n * Fail before the first spawn when the bound entry speaks a surface this\n * backend cannot — the error names the surface.\n */\n override async start(): Promise<void> {\n this.registryBinding();\n await super.start();\n }\n\n override reconfigure(patch: Partial<Pick<AgentConfig, \"model\" | \"thinking\" | \"effort\">>): void {\n super.reconfigure(patch);\n if (patch.model !== undefined) {\n this.providers = undefined;\n this.bindingResolved = false;\n }\n }\n\n /** The provider-side model id the backend is actually run with. */\n override getModel(): string | undefined {\n return resolveRegistryBinding(this.providerSession())?.providerModelId ?? this.config.model;\n }\n}\n\n/**\n * Agent driver for the Google **Gemini CLI** (`gemini`).\n *\n * Spawns `gemini -p \"<prompt>\" --output-format stream-json` per turn and maps\n * the stream-json events to the unified {@link AgentEvent} stream. Google\n * models only (`surface: google-generative-ai`): the AI provider entry the\n * session's model selector names supplies `GEMINI_API_KEY`, the `-m` model id\n * and — for a non-default endpoint — `GOOGLE_GEMINI_BASE_URL`.\n *\n * @remarks\n * - **Requires Gemini CLI ≥ v0.6.1** — earlier versions reject\n * `--output-format`. A too-old CLI surfaces as a `process`-category exit error.\n * - **Session resume is not available in headless (`-p`) mode** — the CLI errors\n * if asked to resume non-interactively, so this driver runs single-turn per\n * process and logs a warning when a resume id is present.\n * - Exit codes: `42` → input/validation error, `53` → turn-limit (treated as a\n * completed turn).\n *\n * @see https://github.com/google-gemini/gemini-cli\n * @docLink packages/bridge/drivers#gemini-driver\n */\nexport class GeminiDriver extends GeminiFamilyDriver {\n readonly driverInfo: DriverInfo = {\n id: \"gemini\",\n name: \"Gemini CLI\",\n modelAgnostic: false,\n supportsInBandAbort: false,\n };\n\n protected readonly log: Logger = getBridgeLogger(\"gemini\");\n protected readonly defaultBin = \"gemini\";\n protected readonly productName = \"Gemini CLI\";\n protected readonly envPrefix = \"GEMINI\";\n\n protected buildArgs(message: string, resumeId: string | undefined): string[] {\n if (resumeId) {\n this.log.warn(\"Gemini CLI cannot resume in headless mode; starting a fresh turn\", {\n resumeId,\n });\n }\n const args = [\"-p\", message, \"--output-format\", \"stream-json\"];\n const model = this.registryBinding()?.providerModelId ?? this.config.model;\n if (model) args.push(\"-m\", model);\n return args;\n }\n\n protected buildEnv(): Record<string, string> {\n const env = this.baseEnv([\"GEMINI_API_KEY\", \"GOOGLE_API_KEY\", \"GOOGLE_GEMINI_BASE_URL\"]);\n const binding = this.registryBinding();\n if (!binding) return env;\n\n // The entry is the authority: inherited Google carriers are dropped so an\n // ambient key cannot authenticate a session pointed somewhere else.\n delete env.GEMINI_API_KEY;\n delete env.GOOGLE_API_KEY;\n delete env.GOOGLE_GEMINI_BASE_URL;\n const key = entryCredentialValue(binding.providerId, binding.entry, {\n env: this.providerSession().lookupEnv,\n });\n if (key) env.GEMINI_API_KEY = key;\n // Only a non-default endpoint is worth naming: Gemini CLI reads\n // GOOGLE_GEMINI_BASE_URL as an override of its own default host.\n if (binding.baseUrl && binding.baseUrl !== GOOGLE_DEFAULT_BASE_URL) {\n env.GOOGLE_GEMINI_BASE_URL = binding.baseUrl;\n }\n return env;\n }\n\n protected installHint(): string {\n return \"Gemini CLI is not installed or not on your PATH. Install it with `npm i -g @google/gemini-cli` (≥ v0.6.1).\";\n }\n\n protected override classifyExit(code: number | null, signal: NodeJS.Signals | null) {\n if (code === 42) {\n return {\n message: \"Gemini CLI reported an input error (exit 42)\",\n category: \"validation\" as const,\n retryable: false,\n hint: \"The prompt or flags were rejected by Gemini CLI. Check the model name and arguments.\",\n };\n }\n if (code === 53) return null; // turn-limit — the result was already emitted.\n return super.classifyExit(code, signal);\n }\n\n /**\n * Discovery runs against the bound entry: its credential and, for a\n * non-default endpoint, its base URL. Without an entry the ambient\n * `GEMINI_API_KEY` is the last resort, and an unreachable API falls back to\n * the static Google catalog.\n */\n override async listModels(): Promise<ModelEntry[]> {\n const session = this.providerSession();\n const binding = resolveRegistryBinding(session);\n const key = binding\n ? entryCredentialValue(binding.providerId, binding.entry, { env: session.lookupEnv })\n : session.lookupEnv.GEMINI_API_KEY;\n if (!key) return getStaticModels(\"google\");\n const result = await fetchProviderModels(\n \"google\",\n key,\n binding?.baseUrl && binding.baseUrl !== GOOGLE_DEFAULT_BASE_URL\n ? { baseUrl: binding.baseUrl }\n : {},\n );\n return result.ok && result.models.length > 0 ? result.models : getStaticModels(\"google\");\n }\n}\n\n/**\n * `DriverTarget` wrapper for the gemini driver. Registered into the plugin\n * registry by `registerBuiltinDrivers()`.\n */\nexport const geminiDriverTarget: DriverTarget<AgentConfig> = {\n id: \"gemini\",\n displayName: BUILTIN_DRIVER_CATALOG.gemini?.name ?? \"Gemini CLI\",\n apiVersion: 1,\n configSchema: z.custom<AgentConfig>(() => true),\n create: async (config, _ctx) => new GeminiDriver(config),\n listModels: async (registry, options) =>\n new GeminiDriver({\n cwd: process.cwd(),\n sessionId: \"model-list\",\n ...registryDriverConfig(registry, options),\n }).listModels(),\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../bridge/src/drivers/gemini.ts"],"names":[],"mappings":"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","file":"chunk-RHESVS7V.js","sourcesContent":["import type { DriverTarget } from \"@skaile/workspaces/plugin-registry\";\nimport type { Logger } from \"@skaile/workspaces/types\";\nimport * as z from \"zod\";\nimport { getBridgeLogger } from \"../logger.js\";\nimport { fetchProviderModels, getStaticModels, type ModelEntry } from \"../models.js\";\nimport { getProviderPreset } from \"../provider-catalog.js\";\nimport { entryCredentialValue } from \"../provider-materialize/credential-env.js\";\nimport {\n bindSingleProviderEntry,\n type EnvDriverSession,\n type RegistryModelBinding,\n resolveEnvDriverSession,\n resolveRegistryBinding,\n} from \"../provider-materialize/env-drivers.js\";\nimport { registryDriverConfig } from \"../provider-registry-derive.js\";\nimport { BUILTIN_DRIVER_CATALOG } from \"../registry.js\";\nimport type { AgentConfig, DriverInfo } from \"../types.js\";\nimport { extractCost, extractText, extractTokens, SubprocessCliDriver } from \"./_subprocess-cli.js\";\n\n/**\n * The Gemini API host the CLI talks to unless told otherwise — the catalog's\n * `google` preset, so the two can never drift apart.\n */\nconst GOOGLE_DEFAULT_BASE_URL = getProviderPreset(\"google\")?.base_url;\n\n/**\n * Shared base for the Gemini-CLI event family. Gemini CLI and Qwen Code (a fork\n * of Gemini CLI) emit the same `stream-json` event shape, so both dispatch the\n * same {@link handleJson}: `init`/`system` → session capture, `message`/\n * `assistant` → streamed assistant text, `tool_use` / `tool_result` → tool\n * events, `result` → tokens + cost.\n *\n * @docLink packages/bridge/drivers#gemini-driver\n */\nexport abstract class GeminiFamilyDriver extends SubprocessCliDriver {\n protected handleJson(json: any): void {\n switch (json?.type) {\n case \"init\":\n case \"system\":\n this.captureSession(json.sessionId ?? json.session_id ?? json.id);\n break;\n\n case \"message\":\n case \"assistant\": {\n const role = json.role ?? json.message?.role ?? \"assistant\";\n if (role !== \"assistant\") break;\n const text = extractText(json);\n if (json.done === true || json.final === true || json.finished === true) {\n this.pushAssistantEnd(text);\n } else {\n this.pushAssistantDelta(text);\n }\n break;\n }\n\n case \"tool_use\":\n case \"tool_call\":\n this.pushToolCall(json.name ?? json.tool ?? \"tool\", json.input ?? json.args ?? {});\n break;\n\n case \"tool_result\":\n this.pushToolResult(\n json.name ?? json.tool ?? \"tool\",\n json.result ?? json.output ?? json.content,\n Boolean(json.is_error ?? json.isError ?? json.error),\n );\n break;\n\n case \"error\":\n this.pushError(this.classifyMessage(String(json.message ?? json.error ?? \"error\")));\n break;\n\n case \"result\":\n this.captureSession(json.sessionId ?? json.session_id);\n this.pushResult({\n tokens: extractTokens(json),\n costUsd: extractCost(json),\n summary: extractText(json) || \"Task completed\",\n });\n break;\n }\n }\n\n // ── Registry binding ──────────────────────────────────────────────────────\n\n private providers?: EnvDriverSession;\n private boundEntry?: RegistryModelBinding;\n private bindingResolved = false;\n\n /** This session's AI providers, resolved once from the config. */\n protected providerSession(): EnvDriverSession {\n this.providers ??= resolveEnvDriverSession(this.config);\n return this.providers;\n }\n\n /**\n * The AI provider entry this session's model selector names, memoized until\n * the model changes.\n *\n * Gemini CLI and Qwen Code are `single`-plurality harnesses (§2.3): they\n * address one endpoint, so the bound entry supplies both the credential and\n * the base URL. Resolving through {@link bindSingleProviderEntry} is what\n * puts the surface check — which throws — on the start path.\n */\n protected registryBinding(): RegistryModelBinding | undefined {\n if (this.bindingResolved) return this.boundEntry;\n const binding = bindSingleProviderEntry(\n this.driverInfo.id,\n this.productName,\n this.providerSession(),\n );\n for (const warning of binding?.warnings ?? []) this.log.warn(warning);\n this.boundEntry = binding;\n this.bindingResolved = true;\n return binding;\n }\n\n /**\n * Fail before the first spawn when the bound entry speaks a surface this\n * harness cannot — the error names the surface.\n */\n override async start(): Promise<void> {\n this.registryBinding();\n await super.start();\n }\n\n override reconfigure(patch: Partial<Pick<AgentConfig, \"model\" | \"thinking\" | \"effort\">>): void {\n super.reconfigure(patch);\n if (patch.model !== undefined) {\n this.providers = undefined;\n this.bindingResolved = false;\n }\n }\n\n /** The provider-side model id the harness is actually run with. */\n override getModel(): string | undefined {\n return resolveRegistryBinding(this.providerSession())?.providerModelId ?? this.config.model;\n }\n}\n\n/**\n * Agent driver for the Google **Gemini CLI** (`gemini`).\n *\n * Spawns `gemini -p \"<prompt>\" --output-format stream-json` per turn and maps\n * the stream-json events to the unified {@link AgentEvent} stream. Google\n * models only (`surface: google-generative-ai`): the AI provider entry the\n * session's model selector names supplies `GEMINI_API_KEY`, the `-m` model id\n * and — for a non-default endpoint — `GOOGLE_GEMINI_BASE_URL`.\n *\n * @remarks\n * - **Requires Gemini CLI ≥ v0.6.1** — earlier versions reject\n * `--output-format`. A too-old CLI surfaces as a `process`-category exit error.\n * - **Session resume is not available in headless (`-p`) mode** — the CLI errors\n * if asked to resume non-interactively, so this driver runs single-turn per\n * process and logs a warning when a resume id is present.\n * - Exit codes: `42` → input/validation error, `53` → turn-limit (treated as a\n * completed turn).\n *\n * @see https://github.com/google-gemini/gemini-cli\n * @docLink packages/bridge/drivers#gemini-driver\n */\nexport class GeminiDriver extends GeminiFamilyDriver {\n readonly driverInfo: DriverInfo = {\n id: \"gemini\",\n name: \"Gemini CLI\",\n modelAgnostic: false,\n supportsInBandAbort: false,\n };\n\n protected readonly log: Logger = getBridgeLogger(\"gemini\");\n protected readonly defaultBin = \"gemini\";\n protected readonly productName = \"Gemini CLI\";\n protected readonly envPrefix = \"GEMINI\";\n\n protected buildArgs(message: string, resumeId: string | undefined): string[] {\n if (resumeId) {\n this.log.warn(\"Gemini CLI cannot resume in headless mode; starting a fresh turn\", {\n resumeId,\n });\n }\n const args = [\"-p\", message, \"--output-format\", \"stream-json\"];\n const model = this.registryBinding()?.providerModelId ?? this.config.model;\n if (model) args.push(\"-m\", model);\n return args;\n }\n\n protected buildEnv(): Record<string, string> {\n const env = this.baseEnv([\"GEMINI_API_KEY\", \"GOOGLE_API_KEY\", \"GOOGLE_GEMINI_BASE_URL\"]);\n const binding = this.registryBinding();\n if (!binding) return env;\n\n // The entry is the authority: inherited Google carriers are dropped so an\n // ambient key cannot authenticate a session pointed somewhere else.\n delete env.GEMINI_API_KEY;\n delete env.GOOGLE_API_KEY;\n delete env.GOOGLE_GEMINI_BASE_URL;\n const key = entryCredentialValue(binding.providerId, binding.entry, {\n env: this.providerSession().lookupEnv,\n });\n if (key) env.GEMINI_API_KEY = key;\n // Only a non-default endpoint is worth naming: Gemini CLI reads\n // GOOGLE_GEMINI_BASE_URL as an override of its own default host.\n if (binding.baseUrl && binding.baseUrl !== GOOGLE_DEFAULT_BASE_URL) {\n env.GOOGLE_GEMINI_BASE_URL = binding.baseUrl;\n }\n return env;\n }\n\n protected installHint(): string {\n return \"Gemini CLI is not installed or not on your PATH. Install it with `npm i -g @google/gemini-cli` (≥ v0.6.1).\";\n }\n\n protected override classifyExit(code: number | null, signal: NodeJS.Signals | null) {\n if (code === 42) {\n return {\n message: \"Gemini CLI reported an input error (exit 42)\",\n category: \"validation\" as const,\n retryable: false,\n hint: \"The prompt or flags were rejected by Gemini CLI. Check the model name and arguments.\",\n };\n }\n if (code === 53) return null; // turn-limit — the result was already emitted.\n return super.classifyExit(code, signal);\n }\n\n /**\n * Discovery runs against the bound entry: its credential and, for a\n * non-default endpoint, its base URL. Without an entry the ambient\n * `GEMINI_API_KEY` is the last resort, and an unreachable API falls back to\n * the static Google catalog.\n */\n override async listModels(): Promise<ModelEntry[]> {\n const session = this.providerSession();\n const binding = resolveRegistryBinding(session);\n const key = binding\n ? entryCredentialValue(binding.providerId, binding.entry, { env: session.lookupEnv })\n : session.lookupEnv.GEMINI_API_KEY;\n if (!key) return getStaticModels(\"google\");\n const result = await fetchProviderModels(\n \"google\",\n key,\n binding?.baseUrl && binding.baseUrl !== GOOGLE_DEFAULT_BASE_URL\n ? { baseUrl: binding.baseUrl }\n : {},\n );\n return result.ok && result.models.length > 0 ? result.models : getStaticModels(\"google\");\n }\n}\n\n/**\n * `DriverTarget` wrapper for the gemini driver. Registered into the plugin\n * registry by `registerBuiltinDrivers()`.\n */\nexport const geminiDriverTarget: DriverTarget<AgentConfig> = {\n id: \"gemini\",\n displayName: BUILTIN_DRIVER_CATALOG.gemini?.name ?? \"Gemini CLI\",\n apiVersion: 1,\n configSchema: z.custom<AgentConfig>(() => true),\n create: async (config, _ctx) => new GeminiDriver(config),\n listModels: async (registry, options) =>\n new GeminiDriver({\n cwd: process.cwd(),\n sessionId: \"model-list\",\n ...registryDriverConfig(registry, options),\n }).listModels(),\n};\n"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { getStoreManifestsDir } from './chunk-
|
|
2
|
-
import { deployAll, removeAsset, createScaffold } from './chunk-
|
|
3
|
-
import { resolveLibraryDir, writeLock, buildLockFile, readLock, verifyLock, extractForPatch, generatePatch, savePatch, applyPatch } from './chunk-
|
|
4
|
-
import { resolveRuntimeAssets, factoryAssetRoots } from './chunk-
|
|
5
|
-
import { deployedBase, isDeployed, deployedDir } from './chunk-
|
|
6
|
-
import { loadMcpServerDeclarations, globalSkaileDir,
|
|
1
|
+
import { getStoreManifestsDir } from './chunk-DOF77WEV.js';
|
|
2
|
+
import { deployAll, removeAsset, createScaffold } from './chunk-5YXKEM7Q.js';
|
|
3
|
+
import { resolveLibraryDir, writeLock, buildLockFile, readLock, verifyLock, extractForPatch, generatePatch, savePatch, applyPatch } from './chunk-3ELIPWCH.js';
|
|
4
|
+
import { resolveRuntimeAssets, factoryAssetRoots } from './chunk-JRIU5GA7.js';
|
|
5
|
+
import { deployedBase, isDeployed, deployedDir } from './chunk-KIFJWSNC.js';
|
|
6
|
+
import { loadMcpServerDeclarations, globalSkaileDir, resolveGlobalHarnesses, globalCacheRoot, migrateLegacyDir, resolveGlobalSkWorkspaceConfig, resolveSkWorkspaceConfig, getGlobalCacheDir, sourceCacheKey, getRepoCommit, coerceVersion, matchPin, resolveAll, buildProvenanceIndex, ensureRepo, sourceShortName, scanRepo, SKAILE_YAML_DEFAULT, checkRepoStatus, resolveAsset, readLinks, storeManifestSlug } from './chunk-LRCSWOZO.js';
|
|
7
7
|
import { scanDirectory, parseRequires } from './chunk-2FBPAR2V.js';
|
|
8
8
|
import { parseAssetRef, slugifyAssetName, assetRefToStr } from './chunk-GEEW6SY2.js';
|
|
9
9
|
import { appendHistory, getRecentHistory, clearHistory } from './chunk-KTBKW2FI.js';
|
|
@@ -381,8 +381,8 @@ var AssetManager = class {
|
|
|
381
381
|
driverTarget;
|
|
382
382
|
/** Whether this instance operates in global-install mode. */
|
|
383
383
|
global;
|
|
384
|
-
/** Explicit global-
|
|
385
|
-
|
|
384
|
+
/** Explicit global-harness override (global mode only); else auto-resolved. */
|
|
385
|
+
harnessesOverride;
|
|
386
386
|
/** Injected catalog fetcher (tests / custom); falls back to a built one. */
|
|
387
387
|
injectedStoreFetcher;
|
|
388
388
|
/** Injected byte fetcher for store staging; falls back to GitHub. */
|
|
@@ -395,7 +395,7 @@ var AssetManager = class {
|
|
|
395
395
|
this.projectDir = resolve(opts.projectDir);
|
|
396
396
|
this.driverTarget = opts.driverTarget ?? "claude-code";
|
|
397
397
|
this.global = opts.global ?? false;
|
|
398
|
-
this.
|
|
398
|
+
this.harnessesOverride = opts.harnesses ?? opts.backends;
|
|
399
399
|
this.injectedStoreFetcher = opts.storeFetcher;
|
|
400
400
|
this.injectedAssetFetcher = opts.assetFetcher;
|
|
401
401
|
this.catalogUrlOverride = opts.catalogUrl;
|
|
@@ -403,22 +403,22 @@ var AssetManager = class {
|
|
|
403
403
|
}
|
|
404
404
|
/**
|
|
405
405
|
* Root for this manager's **state** — config SSOT, lock, cache, history.
|
|
406
|
-
* `~/.skaile` in global mode (the cross-
|
|
406
|
+
* `~/.skaile` in global mode (the cross-harness SSOT), else the project dir.
|
|
407
407
|
* Deploy dirs are unaffected; they come from `DRIVER_TARGETS[target]`.
|
|
408
408
|
*/
|
|
409
409
|
get stateRoot() {
|
|
410
410
|
return this.global ? globalSkaileDir() : this.projectDir;
|
|
411
411
|
}
|
|
412
412
|
/**
|
|
413
|
-
* The
|
|
414
|
-
* (a `--
|
|
413
|
+
* The harnesses a global deploy fans out to: the explicit `harnesses` override
|
|
414
|
+
* (a `--harness` filter), else `resolveGlobalHarnesses()`. In project mode this
|
|
415
415
|
* is exactly `[driverTarget]`, so the shared fan-out loop degenerates to the
|
|
416
416
|
* single-target path.
|
|
417
417
|
*/
|
|
418
|
-
|
|
418
|
+
targetHarnesses() {
|
|
419
419
|
if (!this.global) return [this.driverTarget];
|
|
420
|
-
if (this.
|
|
421
|
-
return
|
|
420
|
+
if (this.harnessesOverride && this.harnessesOverride.length > 0) return this.harnessesOverride;
|
|
421
|
+
return resolveGlobalHarnesses();
|
|
422
422
|
}
|
|
423
423
|
get storeCacheDir() {
|
|
424
424
|
if (this.global) return join(globalCacheRoot(), "store");
|
|
@@ -448,7 +448,7 @@ var AssetManager = class {
|
|
|
448
448
|
get patchDir() {
|
|
449
449
|
return join(this.projectDir, ".skaile", "patches");
|
|
450
450
|
}
|
|
451
|
-
/** Deploy options for one
|
|
451
|
+
/** Deploy options for one harness. In global mode, `driverTarget` is the
|
|
452
452
|
* fan-out target (not the constructor's `driverTarget`, which is project-only). */
|
|
453
453
|
deployOptsFor(target, link) {
|
|
454
454
|
return { driverTarget: target, global: this.global, cwd: this.projectDir, link: link === true };
|
|
@@ -841,7 +841,7 @@ var AssetManager = class {
|
|
|
841
841
|
const entries = [...await this.buildCatalogEntries(resolved, repositories), ...lib.entries];
|
|
842
842
|
const deployed = [
|
|
843
843
|
...new Set(
|
|
844
|
-
this.
|
|
844
|
+
this.targetHarnesses().flatMap(
|
|
845
845
|
(t) => deployAll(entries, repositories, patches, this.deployOptsFor(t, opts?.link))
|
|
846
846
|
)
|
|
847
847
|
)
|
|
@@ -913,7 +913,7 @@ var AssetManager = class {
|
|
|
913
913
|
if (!resolvedRefs.has(ref)) {
|
|
914
914
|
const { kind, name } = parseCanonicalLockKey(ref);
|
|
915
915
|
if (kind && name) {
|
|
916
|
-
for (const t of this.
|
|
916
|
+
for (const t of this.targetHarnesses()) removeAsset(kind, name, this.deployOptsFor(t));
|
|
917
917
|
removed.push(ref);
|
|
918
918
|
} else {
|
|
919
919
|
console.warn(`skaile: cannot reconcile unparseable lock key "${ref}" \u2014 left in place.`);
|
|
@@ -1069,7 +1069,7 @@ var AssetManager = class {
|
|
|
1069
1069
|
}
|
|
1070
1070
|
const deployed = [
|
|
1071
1071
|
...new Set(
|
|
1072
|
-
this.
|
|
1072
|
+
this.targetHarnesses().flatMap(
|
|
1073
1073
|
(t) => deployAll(resolved, repositories, patches, this.deployOptsFor(t))
|
|
1074
1074
|
)
|
|
1075
1075
|
)
|
|
@@ -1112,7 +1112,7 @@ var AssetManager = class {
|
|
|
1112
1112
|
const entries = [...await this.buildCatalogEntries(resolved, repositories), ...lib.entries];
|
|
1113
1113
|
const deployed = [
|
|
1114
1114
|
...new Set(
|
|
1115
|
-
this.
|
|
1115
|
+
this.targetHarnesses().flatMap(
|
|
1116
1116
|
(t) => deployAll(entries, repositories, patches, this.deployOptsFor(t, opts?.link))
|
|
1117
1117
|
)
|
|
1118
1118
|
)
|
|
@@ -1353,7 +1353,7 @@ var AssetManager = class {
|
|
|
1353
1353
|
remove(ref) {
|
|
1354
1354
|
const parsed = parseAssetRef(ref);
|
|
1355
1355
|
let ok = false;
|
|
1356
|
-
for (const t of this.
|
|
1356
|
+
for (const t of this.targetHarnesses()) {
|
|
1357
1357
|
if (removeAsset(parsed.kind, parsed.name, this.deployOptsFor(t))) ok = true;
|
|
1358
1358
|
}
|
|
1359
1359
|
if (ok) {
|
|
@@ -1576,10 +1576,10 @@ var AssetManager = class {
|
|
|
1576
1576
|
return out;
|
|
1577
1577
|
}
|
|
1578
1578
|
/**
|
|
1579
|
-
* Per-
|
|
1580
|
-
* (`~/.skaile/skaile.yaml`) against each global
|
|
1579
|
+
* Per-harness reconciliation of the **global** declared deps
|
|
1580
|
+
* (`~/.skaile/skaile.yaml`) against each global harness's deploy dir. The
|
|
1581
1581
|
* global twin of {@link listDeclared}: the same `declared` / `installed` /
|
|
1582
|
-
* `drift` / `invalid` vocabulary, but one row **per (ref,
|
|
1582
|
+
* `drift` / `invalid` vocabulary, but one row **per (ref, harness)** so an
|
|
1583
1583
|
* asset can be `installed` for `claude-code` and `drift`/`declared` for
|
|
1584
1584
|
* `codex` at once.
|
|
1585
1585
|
*
|
|
@@ -1587,17 +1587,18 @@ var AssetManager = class {
|
|
|
1587
1587
|
* the manager with `global: true`. Unlike `listDeclared`, a missing SSOT is
|
|
1588
1588
|
* **not** an error: it yields an empty list (a fresh machine has no globals).
|
|
1589
1589
|
*
|
|
1590
|
-
* @param opts.
|
|
1591
|
-
* `--
|
|
1590
|
+
* @param opts.harness - Reconcile against this one harness only (the
|
|
1591
|
+
* `--harness` filter); omit for every harness in {@link targetHarnesses}.
|
|
1592
1592
|
* @param opts.kind - Filter by asset kind.
|
|
1593
|
-
* @returns One {@link
|
|
1593
|
+
* @returns One {@link HarnessDeclaredAsset} per declared dep × harness.
|
|
1594
1594
|
* @throws {Error} on legacy keys in `~/.skaile/skaile.yaml` (migration hint).
|
|
1595
1595
|
*/
|
|
1596
1596
|
globalState(opts) {
|
|
1597
1597
|
const dependencies = resolveGlobalSkWorkspaceConfig().dependencies ?? [];
|
|
1598
1598
|
const lock = this.tryReadLock();
|
|
1599
1599
|
const lockKeys = lock ? Object.keys(lock.assets).map(parseCanonicalLockKey) : [];
|
|
1600
|
-
const
|
|
1600
|
+
const harnessFilter = opts?.harness ?? opts?.backend;
|
|
1601
|
+
const harnesses = harnessFilter ? [harnessFilter] : this.targetHarnesses();
|
|
1601
1602
|
const out = [];
|
|
1602
1603
|
for (const ref of dependencies) {
|
|
1603
1604
|
let parsed;
|
|
@@ -1605,8 +1606,8 @@ var AssetManager = class {
|
|
|
1605
1606
|
parsed = parseAssetRef(ref);
|
|
1606
1607
|
} catch {
|
|
1607
1608
|
if (!opts?.kind) {
|
|
1608
|
-
for (const
|
|
1609
|
-
out.push({ ref, kind: "", name: ref, state: "invalid",
|
|
1609
|
+
for (const harness of harnesses)
|
|
1610
|
+
out.push({ ref, kind: "", name: ref, state: "invalid", harness });
|
|
1610
1611
|
}
|
|
1611
1612
|
continue;
|
|
1612
1613
|
}
|
|
@@ -1614,17 +1615,17 @@ var AssetManager = class {
|
|
|
1614
1615
|
const locked = lockKeys.some(
|
|
1615
1616
|
(k) => k.kind === parsed.kind && k.name === parsed.name && (!parsed.publisher || k.publisher === parsed.publisher)
|
|
1616
1617
|
);
|
|
1617
|
-
for (const
|
|
1618
|
+
for (const harness of harnesses) {
|
|
1618
1619
|
let state;
|
|
1619
1620
|
if (!locked) {
|
|
1620
1621
|
state = "declared";
|
|
1621
1622
|
} else if (NON_DEPLOYABLE_KINDS.has(parsed.kind)) {
|
|
1622
1623
|
state = "installed";
|
|
1623
1624
|
} else {
|
|
1624
|
-
const onDisk = isDeployed(parsed.kind, parsed.name,
|
|
1625
|
+
const onDisk = isDeployed(parsed.kind, parsed.name, harness, true);
|
|
1625
1626
|
state = onDisk ? "installed" : "drift";
|
|
1626
1627
|
}
|
|
1627
|
-
out.push({ ref, kind: parsed.kind, name: parsed.name, state,
|
|
1628
|
+
out.push({ ref, kind: parsed.kind, name: parsed.name, state, harness });
|
|
1628
1629
|
}
|
|
1629
1630
|
}
|
|
1630
1631
|
return out;
|
|
@@ -2096,5 +2097,5 @@ var AssetManager = class {
|
|
|
2096
2097
|
};
|
|
2097
2098
|
|
|
2098
2099
|
export { AssetManager, FACTORY_SOURCE_URL, MissingManifestError, NON_DEPLOYABLE_KINDS, normalizeRepoUrl, parseCanonicalLockKey, parseRefTolerant, renderMcpServerConfig, softDepName };
|
|
2099
|
-
//# sourceMappingURL=chunk-
|
|
2100
|
-
//# sourceMappingURL=chunk-
|
|
2100
|
+
//# sourceMappingURL=chunk-RR4PJZLK.js.map
|
|
2101
|
+
//# sourceMappingURL=chunk-RR4PJZLK.js.map
|