@skaile/workspaces 0.26.0 → 0.28.1
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 +65 -0
- package/dist/{asset-feeds-WMVTI7KW.js → asset-feeds-2V7LZIG7.js} +17 -10
- package/dist/asset-feeds-2V7LZIG7.js.map +1 -0
- package/dist/asset-manager/index.js +7 -7
- package/dist/asset-manager/installer.js +6 -6
- package/dist/bridge/drivers/claude-sdk.js +2 -2
- package/dist/bridge/drivers/codex.js +1 -1
- package/dist/bridge/drivers/continue.d.ts +2 -0
- package/dist/bridge/drivers/continue.js +103 -0
- package/dist/bridge/drivers/continue.js.map +1 -0
- package/dist/bridge/drivers/echo.js +1 -1
- package/dist/bridge/drivers/gemini.d.ts +2 -0
- package/dist/bridge/drivers/gemini.js +10 -0
- package/dist/bridge/drivers/gemini.js.map +1 -0
- package/dist/bridge/drivers/goose.d.ts +2 -0
- package/dist/bridge/drivers/goose.js +88 -0
- package/dist/bridge/drivers/goose.js.map +1 -0
- package/dist/bridge/drivers/omp.js +1 -1
- package/dist/bridge/drivers/opencode.d.ts +2 -0
- package/dist/bridge/drivers/opencode.js +99 -0
- package/dist/bridge/drivers/opencode.js.map +1 -0
- package/dist/bridge/drivers/qwen.d.ts +2 -0
- package/dist/bridge/drivers/qwen.js +57 -0
- package/dist/bridge/drivers/qwen.js.map +1 -0
- package/dist/bridge/index.js +3 -3
- package/dist/bridge/src/drivers/_subprocess-cli.d.ts +136 -0
- package/dist/bridge/src/drivers/_subprocess-cli.d.ts.map +1 -0
- package/dist/bridge/src/drivers/continue.d.ts +43 -0
- package/dist/bridge/src/drivers/continue.d.ts.map +1 -0
- package/dist/bridge/src/drivers/gemini.d.ts +55 -0
- package/dist/bridge/src/drivers/gemini.d.ts.map +1 -0
- package/dist/bridge/src/drivers/goose.d.ts +42 -0
- package/dist/bridge/src/drivers/goose.d.ts.map +1 -0
- package/dist/bridge/src/drivers/opencode.d.ts +43 -0
- package/dist/bridge/src/drivers/opencode.d.ts.map +1 -0
- package/dist/bridge/src/drivers/qwen.d.ts +39 -0
- package/dist/bridge/src/drivers/qwen.d.ts.map +1 -0
- package/dist/bridge/src/registry.d.ts.map +1 -1
- package/dist/{chunk-XGLGS5B4.js → chunk-2NOE4AGD.js} +3 -3
- package/dist/{chunk-XGLGS5B4.js.map → chunk-2NOE4AGD.js.map} +1 -1
- package/dist/{chunk-Z5DI7PDG.js → chunk-3QQSSRYN.js} +29 -5
- package/dist/chunk-3QQSSRYN.js.map +1 -0
- package/dist/chunk-5RBPPBEK.js +110 -0
- package/dist/chunk-5RBPPBEK.js.map +1 -0
- package/dist/chunk-5V5KZQIC.js +445 -0
- package/dist/chunk-5V5KZQIC.js.map +1 -0
- package/dist/{chunk-23M4XZQW.js → chunk-AKSR434V.js} +3 -3
- package/dist/{chunk-23M4XZQW.js.map → chunk-AKSR434V.js.map} +1 -1
- package/dist/{chunk-WD4LP66U.js → chunk-BSVLAHHH.js} +34 -17
- package/dist/chunk-BSVLAHHH.js.map +1 -0
- package/dist/{chunk-7OBGSR7O.js → chunk-BZ2JU7IP.js} +4 -4
- package/dist/{chunk-7OBGSR7O.js.map → chunk-BZ2JU7IP.js.map} +1 -1
- package/dist/{chunk-ZYDE52WE.js → chunk-DGM74UP4.js} +3 -3
- package/dist/{chunk-ZYDE52WE.js.map → chunk-DGM74UP4.js.map} +1 -1
- package/dist/{chunk-QHXS3YDV.js → chunk-FBVUGRTU.js} +5 -5
- package/dist/{chunk-QHXS3YDV.js.map → chunk-FBVUGRTU.js.map} +1 -1
- package/dist/{chunk-C32BRO2W.js → chunk-FWHOU3CX.js} +3 -3
- package/dist/{chunk-C32BRO2W.js.map → chunk-FWHOU3CX.js.map} +1 -1
- package/dist/{chunk-WSZAFRQL.js → chunk-GYPA2Q7F.js} +6 -5
- package/dist/chunk-GYPA2Q7F.js.map +1 -0
- package/dist/{chunk-KL2MQ6WI.js → chunk-M4KLIEIJ.js} +3 -3
- package/dist/{chunk-KL2MQ6WI.js.map → chunk-M4KLIEIJ.js.map} +1 -1
- package/dist/{chunk-RTAIGPTF.js → chunk-MIH45XPY.js} +100 -147
- package/dist/chunk-MIH45XPY.js.map +1 -0
- package/dist/{chunk-BKF3UFF4.js → chunk-SF4GWVR5.js} +4 -4
- package/dist/{chunk-BKF3UFF4.js.map → chunk-SF4GWVR5.js.map} +1 -1
- package/dist/{chunk-PY7AQRGH.js → chunk-U5L6F5NZ.js} +6 -6
- package/dist/{chunk-PY7AQRGH.js.map → chunk-U5L6F5NZ.js.map} +1 -1
- package/dist/{chunk-BQRRBGDE.js → chunk-UAW7VRAL.js} +2 -2
- package/dist/{chunk-BQRRBGDE.js.map → chunk-UAW7VRAL.js.map} +1 -1
- package/dist/{chunk-4SQ6Y6U7.js → chunk-UBCZVONU.js} +3 -3
- package/dist/{chunk-4SQ6Y6U7.js.map → chunk-UBCZVONU.js.map} +1 -1
- package/dist/{chunk-YRU4WB6Y.js → chunk-UIZKIUC6.js} +3 -3
- package/dist/{chunk-YRU4WB6Y.js.map → chunk-UIZKIUC6.js.map} +1 -1
- package/dist/{chunk-YDTW4GT6.js → chunk-XHBPQ7QP.js} +5 -5
- package/dist/{chunk-YDTW4GT6.js.map → chunk-XHBPQ7QP.js.map} +1 -1
- package/dist/chunk-Z3XXKR5E.js +88 -0
- package/dist/chunk-Z3XXKR5E.js.map +1 -0
- package/dist/{chunk-45H3UO2R.js → chunk-ZEKWHJBB.js} +52 -2
- package/dist/chunk-ZEKWHJBB.js.map +1 -0
- package/dist/cli/index.js +220 -117
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/src/asset-feeds.d.ts +14 -1
- package/dist/cli/src/asset-feeds.d.ts.map +1 -1
- package/dist/cli/src/commands/library-cmd.d.ts.map +1 -1
- package/dist/cli/src/commands/manage.d.ts +46 -23
- package/dist/cli/src/commands/manage.d.ts.map +1 -1
- package/dist/cli/src/helpers.d.ts +10 -1
- package/dist/cli/src/helpers.d.ts.map +1 -1
- package/dist/connectors/config.js +6 -6
- package/dist/connectors/index.js +8 -8
- package/dist/core/index.js +5 -5
- package/dist/core/runtime-assets.js +2 -2
- package/dist/core/src/workspace-config.d.ts +10 -1
- package/dist/core/src/workspace-config.d.ts.map +1 -1
- package/dist/core/workspace-config.js +1 -1
- package/dist/deploy/index.js +5 -5
- package/dist/{ensure-sources-CVULUVH4.js → ensure-sources-BNSRO5G7.js} +11 -10
- package/dist/ensure-sources-BNSRO5G7.js.map +1 -0
- package/dist/factory-assets/connectors/deploy.js +8 -8
- package/dist/factory-assets/connectors/devserver.js +8 -8
- package/dist/factory-assets/connectors/flow/adapter.js +8 -8
- package/dist/factory-assets/connectors/flow/engine.js +5 -5
- package/dist/factory-assets/connectors/flow/run-flow.js +9 -9
- package/dist/factory-assets/connectors/flow.js +8 -8
- package/dist/factory-assets/connectors/git.js +8 -8
- package/dist/factory-assets/connectors/gmail.js +8 -8
- package/dist/factory-assets/connectors/googledrive.js +8 -8
- package/dist/factory-assets/connectors/local.js +8 -8
- package/dist/factory-assets/connectors/mattermost.js +8 -8
- package/dist/factory-assets/connectors/memory.js +8 -8
- package/dist/factory-assets/connectors/minio.js +8 -8
- package/dist/factory-assets/connectors/postgres.js +8 -8
- package/dist/factory-assets/connectors/s3.js +8 -8
- package/dist/factory-assets/connectors/sharepoint.js +8 -8
- package/dist/factory-assets/connectors/sqlite.js +8 -8
- package/dist/factory-assets/connectors/static-server.js +8 -8
- package/dist/factory-assets/connectors/tunnel.js +8 -8
- package/dist/factory-assets/connectors/webdav.js +8 -8
- package/dist/factory-assets/connectors/xstate-store.js +8 -8
- package/dist/factory-assets/connectors/xstate.js +8 -8
- package/dist/{flows-JZFJD5IN.js → flows-L3GHQD7F.js} +4 -4
- package/dist/{flows-JZFJD5IN.js.map → flows-L3GHQD7F.js.map} +1 -1
- package/dist/helpers-F4NZ66VD.js +4 -0
- package/dist/{helpers-LTN3HMD3.js.map → helpers-F4NZ66VD.js.map} +1 -1
- package/dist/library/index.js +8 -7
- package/dist/library/install.d.ts +2 -0
- package/dist/library/install.js +16 -0
- package/dist/library/install.js.map +1 -0
- package/dist/library/src/index.d.ts +2 -2
- package/dist/library/src/index.d.ts.map +1 -1
- package/dist/library/src/install/index.d.ts +3 -0
- package/dist/library/src/install/index.d.ts.map +1 -0
- package/dist/library/src/library.d.ts +20 -20
- package/dist/library/src/library.d.ts.map +1 -1
- package/dist/library/src/local/db.d.ts.map +1 -1
- package/dist/library/src/local/library.d.ts +6 -6
- package/dist/library/src/local/library.d.ts.map +1 -1
- package/dist/library/src/local/local-catalog-source.d.ts +1 -1
- package/dist/library/src/local/schema.d.ts +9 -9
- package/dist/library/src/local/schema.d.ts.map +1 -1
- package/dist/library/src/preset/apply.d.ts +9 -9
- package/dist/library/src/preset/apply.d.ts.map +1 -1
- package/dist/library/src/preset/resolve-item.d.ts +1 -1
- package/dist/library/src/workspace-config.d.ts +11 -8
- package/dist/library/src/workspace-config.d.ts.map +1 -1
- package/dist/{open-library-WYASW4BH.js → open-library-3VJY74LQ.js} +12 -11
- package/dist/{open-library-WYASW4BH.js.map → open-library-3VJY74LQ.js.map} +1 -1
- package/dist/{paths-BMW6JYW6.js → paths-CE66L3AL.js} +8 -8
- package/dist/{paths-BMW6JYW6.js.map → paths-CE66L3AL.js.map} +1 -1
- package/dist/{plugin-store-O5VR45CA.js → plugin-store-GL5VKYUA.js} +7 -7
- package/dist/{plugin-store-O5VR45CA.js.map → plugin-store-GL5VKYUA.js.map} +1 -1
- package/dist/runner/index.js +14 -14
- package/dist/runner/src/serve.d.ts.map +1 -1
- package/dist/sdk/asset-manager.js +7 -7
- package/dist/sdk/bridge.js +3 -3
- package/dist/sdk/core.js +5 -5
- package/dist/sdk/flow.js +5 -5
- package/dist/sdk/index.js +14 -14
- package/dist/sdk/runner.js +14 -14
- package/dist/{setup-YNLFR5GB.js → setup-4YMN2BDU.js} +10 -10
- package/dist/{setup-YNLFR5GB.js.map → setup-4YMN2BDU.js.map} +1 -1
- package/dist/{store-client-CENBEASX.js → store-client-BCP5LCAZ.js} +8 -8
- package/dist/{store-client-CENBEASX.js.map → store-client-BCP5LCAZ.js.map} +1 -1
- package/dist/tui/index.js +14 -14
- package/dist/workspace-plugin/adapters/mcp.js +3 -3
- package/dist/workspace-plugin/adapters/omp.js +3 -3
- package/dist/workspace-plugin/index.js +1 -1
- package/package.json +37 -1
- package/dist/asset-feeds-WMVTI7KW.js.map +0 -1
- package/dist/chunk-45H3UO2R.js.map +0 -1
- package/dist/chunk-RTAIGPTF.js.map +0 -1
- package/dist/chunk-WD4LP66U.js.map +0 -1
- package/dist/chunk-WSZAFRQL.js.map +0 -1
- package/dist/chunk-Z5DI7PDG.js.map +0 -1
- package/dist/ensure-sources-CVULUVH4.js.map +0 -1
- package/dist/helpers-LTN3HMD3.js +0 -4
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { GeminiFamilyDriver } from '../../chunk-5RBPPBEK.js';
|
|
2
|
+
import '../../chunk-5V5KZQIC.js';
|
|
3
|
+
import { fetchProviderModels } from '../../chunk-BMQKMOQY.js';
|
|
4
|
+
import '../../chunk-PAYAFNXG.js';
|
|
5
|
+
import { BUILTIN_DRIVER_CATALOG, getBridgeLogger } from '../../chunk-ZEKWHJBB.js';
|
|
6
|
+
import '../../chunk-6E6PKKAD.js';
|
|
7
|
+
import '../../chunk-24UIWON4.js';
|
|
8
|
+
import '../../chunk-NSBPE2FW.js';
|
|
9
|
+
import * as z from 'zod';
|
|
10
|
+
|
|
11
|
+
var QwenDriver = class extends GeminiFamilyDriver {
|
|
12
|
+
driverInfo = {
|
|
13
|
+
id: "qwen",
|
|
14
|
+
name: "Qwen Code",
|
|
15
|
+
modelAgnostic: true,
|
|
16
|
+
supportsInBandAbort: false
|
|
17
|
+
};
|
|
18
|
+
log = getBridgeLogger("qwen");
|
|
19
|
+
defaultBin = "qwen";
|
|
20
|
+
productName = "Qwen Code";
|
|
21
|
+
envPrefix = "QWEN";
|
|
22
|
+
buildArgs(message, resumeId) {
|
|
23
|
+
const args = ["-p", message, "-o", "stream-json", "--include-partial-messages"];
|
|
24
|
+
if (this.config.model) args.push("-m", this.config.model);
|
|
25
|
+
if (resumeId) args.push("--resume", resumeId);
|
|
26
|
+
return args;
|
|
27
|
+
}
|
|
28
|
+
buildEnv() {
|
|
29
|
+
const env = this.baseEnv(["OPENAI_API_KEY", "OPENAI_BASE_URL", "OPENAI_MODEL"]);
|
|
30
|
+
const key = this.config.apiKeys?.openai ?? this.config.apiKeys?.qwen ?? this.config.env?.OPENAI_API_KEY ?? process.env.OPENAI_API_KEY;
|
|
31
|
+
if (key) env.OPENAI_API_KEY = key;
|
|
32
|
+
if (this.config.model) env.OPENAI_MODEL = this.config.model;
|
|
33
|
+
env.QWEN_CODE_UNATTENDED_RETRY = "1";
|
|
34
|
+
return env;
|
|
35
|
+
}
|
|
36
|
+
installHint() {
|
|
37
|
+
return "Qwen Code is not installed or not on your PATH. Install it with `npm i -g @qwen-code/qwen-code`.";
|
|
38
|
+
}
|
|
39
|
+
async listModels() {
|
|
40
|
+
const key = this.config.apiKeys?.openai ?? process.env.OPENAI_API_KEY;
|
|
41
|
+
if (!key) return [];
|
|
42
|
+
const result = await fetchProviderModels("openai", key);
|
|
43
|
+
return result.ok ? result.models : [];
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
var qwenDriverTarget = {
|
|
47
|
+
id: "qwen",
|
|
48
|
+
displayName: BUILTIN_DRIVER_CATALOG.qwen?.name ?? "Qwen Code",
|
|
49
|
+
apiVersion: 1,
|
|
50
|
+
configSchema: z.custom(() => true),
|
|
51
|
+
create: async (config, _ctx) => new QwenDriver(config),
|
|
52
|
+
listModels: async (apiKeys) => new QwenDriver({ cwd: process.cwd(), sessionId: "model-list", apiKeys }).listModels()
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
export { QwenDriver, qwenDriverTarget };
|
|
56
|
+
//# sourceMappingURL=qwen.js.map
|
|
57
|
+
//# sourceMappingURL=qwen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../bridge/src/drivers/qwen.ts"],"names":[],"mappings":";;;;;;;;;;AA0BO,IAAM,UAAA,GAAN,cAAyB,kBAAA,CAAmB;AAAA,EACxC,UAAA,GAAyB;AAAA,IAChC,EAAA,EAAI,MAAA;AAAA,IACJ,IAAA,EAAM,WAAA;AAAA,IACN,aAAA,EAAe,IAAA;AAAA,IACf,mBAAA,EAAqB;AAAA,GACvB;AAAA,EAEmB,GAAA,GAAc,gBAAgB,MAAM,CAAA;AAAA,EACpC,UAAA,GAAa,MAAA;AAAA,EACb,WAAA,GAAc,WAAA;AAAA,EACd,SAAA,GAAY,MAAA;AAAA,EAErB,SAAA,CAAU,SAAiB,QAAA,EAAwC;AAC3E,IAAA,MAAM,OAAO,CAAC,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,eAAe,4BAA4B,CAAA;AAC9E,IAAA,IAAI,IAAA,CAAK,OAAO,KAAA,EAAO,IAAA,CAAK,KAAK,IAAA,EAAM,IAAA,CAAK,OAAO,KAAK,CAAA;AACxD,IAAA,IAAI,QAAA,EAAU,IAAA,CAAK,IAAA,CAAK,UAAA,EAAY,QAAQ,CAAA;AAC5C,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEU,QAAA,GAAmC;AAC3C,IAAA,MAAM,MAAM,IAAA,CAAK,OAAA,CAAQ,CAAC,gBAAA,EAAkB,iBAAA,EAAmB,cAAc,CAAC,CAAA;AAC9E,IAAA,MAAM,GAAA,GACJ,IAAA,CAAK,MAAA,CAAO,OAAA,EAAS,UACrB,IAAA,CAAK,MAAA,CAAO,OAAA,EAAS,IAAA,IACrB,IAAA,CAAK,MAAA,CAAO,GAAA,EAAK,cAAA,IACjB,QAAQ,GAAA,CAAI,cAAA;AACd,IAAA,IAAI,GAAA,MAAS,cAAA,GAAiB,GAAA;AAC9B,IAAA,IAAI,KAAK,MAAA,CAAO,KAAA,EAAO,GAAA,CAAI,YAAA,GAAe,KAAK,MAAA,CAAO,KAAA;AACtD,IAAA,GAAA,CAAI,0BAAA,GAA6B,GAAA;AACjC,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEU,WAAA,GAAsB;AAC9B,IAAA,OAAO,kGAAA;AAAA,EACT;AAAA,EAEA,MAAe,UAAA,GAAoC;AACjD,IAAA,MAAM,MAAM,IAAA,CAAK,MAAA,CAAO,OAAA,EAAS,MAAA,IAAU,QAAQ,GAAA,CAAI,cAAA;AACvD,IAAA,IAAI,CAAC,GAAA,EAAK,OAAO,EAAC;AAClB,IAAA,MAAM,MAAA,GAAS,MAAM,mBAAA,CAAoB,QAAA,EAAU,GAAG,CAAA;AACtD,IAAA,OAAO,MAAA,CAAO,EAAA,GAAK,MAAA,CAAO,MAAA,GAAS,EAAC;AAAA,EACtC;AACF;AAMO,IAAM,gBAAA,GAA8C;AAAA,EACzD,EAAA,EAAI,MAAA;AAAA,EACJ,WAAA,EAAa,sBAAA,CAAuB,IAAA,EAAM,IAAA,IAAQ,WAAA;AAAA,EAClD,UAAA,EAAY,CAAA;AAAA,EACZ,YAAA,EAAgB,CAAA,CAAA,MAAA,CAAoB,MAAM,IAAI,CAAA;AAAA,EAC9C,QAAQ,OAAO,MAAA,EAAQ,IAAA,KAAS,IAAI,WAAW,MAAM,CAAA;AAAA,EACrD,UAAA,EAAY,OAAO,OAAA,KACjB,IAAI,WAAW,EAAE,GAAA,EAAK,OAAA,CAAQ,GAAA,IAAO,SAAA,EAAW,YAAA,EAAc,OAAA,EAAS,EAAE,UAAA;AAC7E","file":"qwen.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, type ModelEntry } from \"../models.js\";\nimport { BUILTIN_DRIVER_CATALOG } from \"../registry.js\";\nimport type { AgentConfig, DriverInfo } from \"../types.js\";\nimport { GeminiFamilyDriver } from \"./gemini.js\";\n\n/**\n * Agent driver for **Qwen Code** (`qwen`) — a fork of Gemini CLI.\n *\n * Reuses {@link GeminiFamilyDriver}'s stream-json event mapping. Unlike Gemini,\n * Qwen is **model-agnostic / OpenAI-compatible**: it reads `OPENAI_API_KEY`,\n * `OPENAI_BASE_URL`, and `OPENAI_MODEL`, so it works against any\n * OpenAI-completions endpoint (Alibaba DashScope by default).\n *\n * @remarks\n * - Spawns `qwen -p \"<prompt>\" -o stream-json --include-partial-messages`.\n * - Sets `QWEN_CODE_UNATTENDED_RETRY=1` so the CLI backs off on 429/529 in\n * unattended driver contexts.\n * - Supports headless session resume via `--resume <id>`.\n *\n * @see https://github.com/QwenLM/qwen-code\n * @docLink packages/bridge/drivers#qwen-driver\n */\nexport class QwenDriver extends GeminiFamilyDriver {\n readonly driverInfo: DriverInfo = {\n id: \"qwen\",\n name: \"Qwen Code\",\n modelAgnostic: true,\n supportsInBandAbort: false,\n };\n\n protected readonly log: Logger = getBridgeLogger(\"qwen\");\n protected readonly defaultBin = \"qwen\";\n protected readonly productName = \"Qwen Code\";\n protected readonly envPrefix = \"QWEN\";\n\n protected buildArgs(message: string, resumeId: string | undefined): string[] {\n const args = [\"-p\", message, \"-o\", \"stream-json\", \"--include-partial-messages\"];\n if (this.config.model) args.push(\"-m\", this.config.model);\n if (resumeId) args.push(\"--resume\", resumeId);\n return args;\n }\n\n protected buildEnv(): Record<string, string> {\n const env = this.baseEnv([\"OPENAI_API_KEY\", \"OPENAI_BASE_URL\", \"OPENAI_MODEL\"]);\n const key =\n this.config.apiKeys?.openai ??\n this.config.apiKeys?.qwen ??\n this.config.env?.OPENAI_API_KEY ??\n process.env.OPENAI_API_KEY;\n if (key) env.OPENAI_API_KEY = key;\n if (this.config.model) env.OPENAI_MODEL = this.config.model;\n env.QWEN_CODE_UNATTENDED_RETRY = \"1\";\n return env;\n }\n\n protected installHint(): string {\n return \"Qwen Code is not installed or not on your PATH. Install it with `npm i -g @qwen-code/qwen-code`.\";\n }\n\n override async listModels(): Promise<ModelEntry[]> {\n const key = this.config.apiKeys?.openai ?? process.env.OPENAI_API_KEY;\n if (!key) return [];\n const result = await fetchProviderModels(\"openai\", key);\n return result.ok ? result.models : [];\n }\n}\n\n/**\n * `DriverTarget` wrapper for the qwen driver. Registered into the plugin\n * registry by `registerBuiltinDrivers()`.\n */\nexport const qwenDriverTarget: DriverTarget<AgentConfig> = {\n id: \"qwen\",\n displayName: BUILTIN_DRIVER_CATALOG.qwen?.name ?? \"Qwen Code\",\n apiVersion: 1,\n configSchema: z.custom<AgentConfig>(() => true),\n create: async (config, _ctx) => new QwenDriver(config),\n listModels: async (apiKeys) =>\n new QwenDriver({ cwd: process.cwd(), sessionId: \"model-list\", apiKeys }).listModels(),\n};\n"]}
|
package/dist/bridge/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export { BridgeRuntime, EventNormalizer, createRuntime, detectFileChange, detectFileChanges, summarizeToolCall, summarizeToolResult, validateApiKey } from '../chunk-
|
|
1
|
+
export { BridgeRuntime, EventNormalizer, createRuntime, detectFileChange, detectFileChanges, summarizeToolCall, summarizeToolResult, validateApiKey } from '../chunk-AKSR434V.js';
|
|
2
|
+
export { dispatchCapability, filterRenderCapabilities, renderFallback } from '../chunk-RRVQAE5D.js';
|
|
2
3
|
export { STATIC_MODELS, fetchProviderModels, getModels, getStaticModels } from '../chunk-BMQKMOQY.js';
|
|
3
4
|
export { AuthError, classifyClaudeSdkError } from '../chunk-PAYAFNXG.js';
|
|
4
|
-
export {
|
|
5
|
-
export { AgentDriver, BUILTIN_DRIVER_CATALOG, DRIVER_CATALOG, createDriver, getBridgeLogger, listDrivers, listModelsForDriver, registerBuiltinDrivers } from '../chunk-45H3UO2R.js';
|
|
5
|
+
export { AgentDriver, BUILTIN_DRIVER_CATALOG, DRIVER_CATALOG, createDriver, getBridgeLogger, listDrivers, listModelsForDriver, registerBuiltinDrivers } from '../chunk-ZEKWHJBB.js';
|
|
6
6
|
import '../chunk-6E6PKKAD.js';
|
|
7
7
|
import '../chunk-24UIWON4.js';
|
|
8
8
|
import '../chunk-NSBPE2FW.js';
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import type { Logger, TokenUsage } from "@skaile/workspaces/types";
|
|
2
|
+
import { type AgentConfig, AgentDriver, type AgentError } from "../types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Shared base for one-shot **subprocess CLI** agent backends (Gemini, Qwen,
|
|
5
|
+
* OpenCode, Goose, Continue).
|
|
6
|
+
*
|
|
7
|
+
* These backends are neither persistent JSON-RPC subprocesses (`omp`) nor
|
|
8
|
+
* in-process SDKs (`claude-sdk`, `codex`). In headless mode each is invoked
|
|
9
|
+
* **once per turn** — `prompt()` spawns the CLI fresh, a `readline` loop maps
|
|
10
|
+
* newline-delimited JSON on stdout to the unified {@link AgentEvent} stream, and
|
|
11
|
+
* **process exit marks the end of the turn**. Multi-turn continuity comes from
|
|
12
|
+
* capturing a backend session id (emitted as `session_info`) and replaying it
|
|
13
|
+
* via a resume flag on the next spawn.
|
|
14
|
+
*
|
|
15
|
+
* Subclasses implement {@link buildArgs}, {@link buildEnv}, and either
|
|
16
|
+
* {@link handleJson} (streaming JSONL, the default) or {@link handleBuffered}
|
|
17
|
+
* (`mode = "buffered"`, for CLIs that print a single JSON blob at the end).
|
|
18
|
+
*
|
|
19
|
+
* **Terminal-sequence invariant.** Subclasses MUST NOT emit `agent_end`. The
|
|
20
|
+
* base emits exactly one `result` (synthesizing a success result when the
|
|
21
|
+
* stream produced none) followed by a single `agent_end` on clean exit, or an
|
|
22
|
+
* `error` + `agent_end` on crash. This keeps the turn-completion contract
|
|
23
|
+
* (`prompt()` resolves after `agent_end`) identical across every CLI driver.
|
|
24
|
+
*
|
|
25
|
+
* @docLink packages/bridge/drivers#subprocess-cli
|
|
26
|
+
*/
|
|
27
|
+
export declare abstract class SubprocessCliDriver extends AgentDriver {
|
|
28
|
+
/** Per-driver logger, constructed once by the subclass. */
|
|
29
|
+
protected abstract readonly log: Logger;
|
|
30
|
+
/** Default binary name spawned in production (e.g. `"gemini"`). */
|
|
31
|
+
protected abstract readonly defaultBin: string;
|
|
32
|
+
/** Human product name used in error messages / hints (e.g. `"Gemini CLI"`). */
|
|
33
|
+
protected abstract readonly productName: string;
|
|
34
|
+
/**
|
|
35
|
+
* Test-seam env prefix. `<PREFIX>_BRIDGE_BIN` overrides the spawn binary and
|
|
36
|
+
* `<PREFIX>_BRIDGE_PREARGS` (space-delimited) supplies leading argv — used by
|
|
37
|
+
* the fake-CLI harness to redirect spawn without monkey-patching
|
|
38
|
+
* `child_process`. Both are ignored in production.
|
|
39
|
+
*/
|
|
40
|
+
protected abstract readonly envPrefix: string;
|
|
41
|
+
/** `"jsonl"` streams events line-by-line; `"buffered"` parses all stdout once on exit. */
|
|
42
|
+
protected readonly mode: "jsonl" | "buffered";
|
|
43
|
+
protected config: AgentConfig;
|
|
44
|
+
private proc;
|
|
45
|
+
private rl;
|
|
46
|
+
private stderrBuffer;
|
|
47
|
+
private stdoutBuffer;
|
|
48
|
+
private started;
|
|
49
|
+
private prevText;
|
|
50
|
+
private activeAssistant;
|
|
51
|
+
private pendingToolResults;
|
|
52
|
+
private sawResult;
|
|
53
|
+
private aborting;
|
|
54
|
+
private turnResolve;
|
|
55
|
+
private turnReject;
|
|
56
|
+
protected _sessionId?: string;
|
|
57
|
+
protected _lastTokens: TokenUsage | null;
|
|
58
|
+
constructor(config: AgentConfig);
|
|
59
|
+
get runtimeSessionId(): string | undefined;
|
|
60
|
+
getModel(): string | undefined;
|
|
61
|
+
getTokenUsage(): TokenUsage | null;
|
|
62
|
+
reconfigure(patch: Partial<Pick<AgentConfig, "model" | "thinking" | "effort">>): void;
|
|
63
|
+
/**
|
|
64
|
+
* No-op for one-shot CLIs — there is no long-lived process to spawn until the
|
|
65
|
+
* first prompt. Kept so the runner's `start()` → `prompt()` ordering works
|
|
66
|
+
* uniformly; binary-presence failures surface as a `config` error on the
|
|
67
|
+
* first spawn (see {@link classifyProcessError}).
|
|
68
|
+
*/
|
|
69
|
+
start(): Promise<void>;
|
|
70
|
+
get isRunning(): boolean;
|
|
71
|
+
/**
|
|
72
|
+
* Sends a user message to the CLI and resolves after the turn completes
|
|
73
|
+
* (`agent_end`). Spawns a fresh child per call; rejects if the child exits
|
|
74
|
+
* non-zero before emitting a result, so the caller never hangs.
|
|
75
|
+
*/
|
|
76
|
+
prompt(message: string): Promise<void>;
|
|
77
|
+
/** Out-of-band abort: terminates the current child. Driver stays usable for the next prompt. */
|
|
78
|
+
abort(): Promise<void>;
|
|
79
|
+
kill(): void;
|
|
80
|
+
resetSession(): Promise<void>;
|
|
81
|
+
/** Build the CLI argv (binary excluded) for one turn. `resumeId` is the captured session id, if any. */
|
|
82
|
+
protected abstract buildArgs(message: string, resumeId: string | undefined): string[];
|
|
83
|
+
/** Build the child-process env (explicit allowlist — see {@link baseEnv}). */
|
|
84
|
+
protected abstract buildEnv(): Record<string, string>;
|
|
85
|
+
/** Map one parsed stdout JSON object to events via the `push*` helpers. Streaming (`jsonl`) mode only. */
|
|
86
|
+
protected handleJson(_json: unknown): void;
|
|
87
|
+
/** Parse the full stdout blob once on clean exit. `buffered` mode only. */
|
|
88
|
+
protected handleBuffered(_raw: string): void;
|
|
89
|
+
/** Install-failure hint surfaced when the binary is missing. */
|
|
90
|
+
protected abstract installHint(): string;
|
|
91
|
+
/**
|
|
92
|
+
* Classify a non-zero exit into an {@link AgentError}, or `null` to treat the
|
|
93
|
+
* exit as success (e.g. a turn-limit code where a result was already
|
|
94
|
+
* emitted). Default: code `0` / clean signal → success; otherwise `process`.
|
|
95
|
+
*/
|
|
96
|
+
protected classifyExit(code: number | null, signal: NodeJS.Signals | null): AgentError | null;
|
|
97
|
+
/** Prepend `systemPrompt` to the user message — uniform across CLIs lacking a reliable system flag. */
|
|
98
|
+
protected composePrompt(message: string): string;
|
|
99
|
+
protected pushAssistantDelta(fullText: string): void;
|
|
100
|
+
protected pushAssistantEnd(fullText?: string): void;
|
|
101
|
+
protected pushToolCall(name: string, input: unknown): void;
|
|
102
|
+
protected pushToolResult(name: string, data: unknown, isError?: boolean): void;
|
|
103
|
+
private flushToolResults;
|
|
104
|
+
protected pushResult(opts: {
|
|
105
|
+
tokens?: TokenUsage | null;
|
|
106
|
+
costUsd?: number;
|
|
107
|
+
summary?: string;
|
|
108
|
+
subtype?: string;
|
|
109
|
+
}): void;
|
|
110
|
+
protected pushError(detail: AgentError, fatal?: boolean): void;
|
|
111
|
+
protected captureSession(id?: string, file?: string): void;
|
|
112
|
+
/** Shared keyword classification + per-driver hint copy (mirrors omp/codex). */
|
|
113
|
+
protected classifyMessage(message: string): AgentError;
|
|
114
|
+
/**
|
|
115
|
+
* Explicit env whitelist forwarded to the child. Omits anything provisioned
|
|
116
|
+
* by `provision_secrets` so user credentials stay out of the subprocess
|
|
117
|
+
* environment. `config.env`, when supplied, fully overrides the whitelist.
|
|
118
|
+
* Always passes through the driver's test-seam vars and `FAKE_CLI_*`.
|
|
119
|
+
*/
|
|
120
|
+
protected baseEnv(extraKeys?: string[]): Record<string, string>;
|
|
121
|
+
private onStdoutLine;
|
|
122
|
+
private onExit;
|
|
123
|
+
private settleResolve;
|
|
124
|
+
private settleReject;
|
|
125
|
+
private cleanup;
|
|
126
|
+
private classifyProcessError;
|
|
127
|
+
}
|
|
128
|
+
/** Pull assistant text out of a CLI event, trying the common field names. */
|
|
129
|
+
export declare function extractText(json: any): string;
|
|
130
|
+
/** Map a CLI usage/stats object onto {@link TokenUsage}, trying common field names. */
|
|
131
|
+
export declare function extractTokens(json: any): TokenUsage | null;
|
|
132
|
+
/** Pull a per-turn USD cost from a CLI result object, or `undefined`. */
|
|
133
|
+
export declare function extractCost(json: any): number | undefined;
|
|
134
|
+
/** Map known `apiKeys` provider names onto the env var names provider CLIs expect. */
|
|
135
|
+
export declare function mapApiKeysToEnv(apiKeys: Record<string, string> | undefined): Record<string, string>;
|
|
136
|
+
//# sourceMappingURL=_subprocess-cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_subprocess-cli.d.ts","sourceRoot":"","sources":["../../../../bridge/src/drivers/_subprocess-cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { DriverTarget } from "@skaile/workspaces/plugin-registry";
|
|
2
|
+
import type { Logger } from "@skaile/workspaces/types";
|
|
3
|
+
import type { ModelEntry } from "../models.js";
|
|
4
|
+
import type { AgentConfig, DriverInfo } from "../types.js";
|
|
5
|
+
import { SubprocessCliDriver } from "./_subprocess-cli.js";
|
|
6
|
+
/**
|
|
7
|
+
* Agent driver for the **Continue CLI** (`cn`), the model-agnostic agent backed
|
|
8
|
+
* by Continue Hub / `config.yaml` assistants.
|
|
9
|
+
*
|
|
10
|
+
* Unlike the other CLI drivers, `cn -p "<prompt>" --format json` emits a single
|
|
11
|
+
* **final-result JSON wrapper**, not a streaming event log. This driver runs in
|
|
12
|
+
* `mode: "buffered"`: the base accumulates all stdout and {@link handleBuffered}
|
|
13
|
+
* parses it once on exit — so there are no incremental deltas or per-tool
|
|
14
|
+
* events, only a final assistant message plus a result.
|
|
15
|
+
*
|
|
16
|
+
* @remarks
|
|
17
|
+
* - Auth via `CONTINUE_API_KEY` / `cn login`; provider keys flow through the
|
|
18
|
+
* environment and the selected `config.yaml`.
|
|
19
|
+
* - `--config <slug>` selects the assistant; session resume via `--resume`
|
|
20
|
+
* (last session only — Continue has no resume-by-id in headless mode).
|
|
21
|
+
*
|
|
22
|
+
* @see https://docs.continue.dev/guides/cli
|
|
23
|
+
* @docLink packages/bridge/drivers#continue-driver
|
|
24
|
+
*/
|
|
25
|
+
export declare class ContinueDriver extends SubprocessCliDriver {
|
|
26
|
+
readonly driverInfo: DriverInfo;
|
|
27
|
+
protected readonly log: Logger;
|
|
28
|
+
protected readonly defaultBin = "cn";
|
|
29
|
+
protected readonly productName = "Continue CLI";
|
|
30
|
+
protected readonly envPrefix = "CONTINUE";
|
|
31
|
+
protected readonly mode: "buffered";
|
|
32
|
+
protected buildArgs(message: string, resumeId: string | undefined): string[];
|
|
33
|
+
protected buildEnv(): Record<string, string>;
|
|
34
|
+
protected installHint(): string;
|
|
35
|
+
protected handleBuffered(raw: string): void;
|
|
36
|
+
listModels(): Promise<ModelEntry[]>;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* `DriverTarget` wrapper for the continue driver. Registered into the plugin
|
|
40
|
+
* registry by `registerBuiltinDrivers()`.
|
|
41
|
+
*/
|
|
42
|
+
export declare const continueDriverTarget: DriverTarget<AgentConfig>;
|
|
43
|
+
//# sourceMappingURL=continue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"continue.d.ts","sourceRoot":"","sources":["../../../../bridge/src/drivers/continue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAGvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAKL,mBAAmB,EACpB,MAAM,sBAAsB,CAAC;AAE9B;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,cAAe,SAAQ,mBAAmB;IACrD,QAAQ,CAAC,UAAU,EAAE,UAAU,CAK7B;IAEF,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAA+B;IAC7D,SAAS,CAAC,QAAQ,CAAC,UAAU,QAAQ;IACrC,SAAS,CAAC,QAAQ,CAAC,WAAW,kBAAkB;IAChD,SAAS,CAAC,QAAQ,CAAC,SAAS,cAAc;IAC1C,mBAA4B,IAAI,EAAG,UAAU,CAAU;IAEvD,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE;IAQ5E,SAAS,CAAC,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAU5C,SAAS,CAAC,WAAW,IAAI,MAAM;IAI/B,SAAS,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAyB5B,UAAU,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;CAGnD;AAqCD;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,YAAY,CAAC,WAAW,CAM1D,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { DriverTarget } from "@skaile/workspaces/plugin-registry";
|
|
2
|
+
import type { Logger } from "@skaile/workspaces/types";
|
|
3
|
+
import { type ModelEntry } from "../models.js";
|
|
4
|
+
import type { AgentConfig, DriverInfo } from "../types.js";
|
|
5
|
+
import { SubprocessCliDriver } from "./_subprocess-cli.js";
|
|
6
|
+
/**
|
|
7
|
+
* Shared base for the Gemini-CLI event family. Gemini CLI and Qwen Code (a fork
|
|
8
|
+
* of Gemini CLI) emit the same `stream-json` event shape, so both dispatch the
|
|
9
|
+
* same {@link handleJson}: `init`/`system` → session capture, `message`/
|
|
10
|
+
* `assistant` → streamed assistant text, `tool_use` / `tool_result` → tool
|
|
11
|
+
* events, `result` → tokens + cost.
|
|
12
|
+
*
|
|
13
|
+
* @docLink packages/bridge/drivers#gemini-driver
|
|
14
|
+
*/
|
|
15
|
+
export declare abstract class GeminiFamilyDriver extends SubprocessCliDriver {
|
|
16
|
+
protected handleJson(json: any): void;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Agent driver for the Google **Gemini CLI** (`gemini`).
|
|
20
|
+
*
|
|
21
|
+
* Spawns `gemini -p "<prompt>" --output-format stream-json` per turn and maps
|
|
22
|
+
* the stream-json events to the unified {@link AgentEvent} stream. Google /
|
|
23
|
+
* Vertex models only — uses `GEMINI_API_KEY` from `apiKeys.google` /
|
|
24
|
+
* `apiKeys.gemini` / env.
|
|
25
|
+
*
|
|
26
|
+
* @remarks
|
|
27
|
+
* - **Requires Gemini CLI ≥ v0.6.1** — earlier versions reject
|
|
28
|
+
* `--output-format`. A too-old CLI surfaces as a `process`-category exit error.
|
|
29
|
+
* - **Session resume is not available in headless (`-p`) mode** — the CLI errors
|
|
30
|
+
* if asked to resume non-interactively, so this driver runs single-turn per
|
|
31
|
+
* process and logs a warning when a resume id is present.
|
|
32
|
+
* - Exit codes: `42` → input/validation error, `53` → turn-limit (treated as a
|
|
33
|
+
* completed turn).
|
|
34
|
+
*
|
|
35
|
+
* @see https://github.com/google-gemini/gemini-cli
|
|
36
|
+
* @docLink packages/bridge/drivers#gemini-driver
|
|
37
|
+
*/
|
|
38
|
+
export declare class GeminiDriver extends GeminiFamilyDriver {
|
|
39
|
+
readonly driverInfo: DriverInfo;
|
|
40
|
+
protected readonly log: Logger;
|
|
41
|
+
protected readonly defaultBin = "gemini";
|
|
42
|
+
protected readonly productName = "Gemini CLI";
|
|
43
|
+
protected readonly envPrefix = "GEMINI";
|
|
44
|
+
protected buildArgs(message: string, resumeId: string | undefined): string[];
|
|
45
|
+
protected buildEnv(): Record<string, string>;
|
|
46
|
+
protected installHint(): string;
|
|
47
|
+
protected classifyExit(code: number | null, signal: NodeJS.Signals | null): import("../types.js").AgentError | null;
|
|
48
|
+
listModels(): Promise<ModelEntry[]>;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* `DriverTarget` wrapper for the gemini driver. Registered into the plugin
|
|
52
|
+
* registry by `registerBuiltinDrivers()`.
|
|
53
|
+
*/
|
|
54
|
+
export declare const geminiDriverTarget: DriverTarget<AgentConfig>;
|
|
55
|
+
//# sourceMappingURL=gemini.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../../../bridge/src/drivers/gemini.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAGvD,OAAO,EAAwC,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAErF,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAA2C,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEpG;;;;;;;;GAQG;AACH,8BAAsB,kBAAmB,SAAQ,mBAAmB;IAClE,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;CA+CtC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,YAAa,SAAQ,kBAAkB;IAClD,QAAQ,CAAC,UAAU,EAAE,UAAU,CAK7B;IAEF,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAA6B;IAC3D,SAAS,CAAC,QAAQ,CAAC,UAAU,YAAY;IACzC,SAAS,CAAC,QAAQ,CAAC,WAAW,gBAAgB;IAC9C,SAAS,CAAC,QAAQ,CAAC,SAAS,YAAY;IAExC,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE;IAW5E,SAAS,CAAC,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAW5C,SAAS,CAAC,WAAW,IAAI,MAAM;cAIZ,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI;IAanE,UAAU,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;CAOnD;AAED;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,YAAY,CAAC,WAAW,CAQxD,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { DriverTarget } from "@skaile/workspaces/plugin-registry";
|
|
2
|
+
import type { Logger } from "@skaile/workspaces/types";
|
|
3
|
+
import type { ModelEntry } from "../models.js";
|
|
4
|
+
import type { AgentConfig, DriverInfo } from "../types.js";
|
|
5
|
+
import { SubprocessCliDriver } from "./_subprocess-cli.js";
|
|
6
|
+
/**
|
|
7
|
+
* Agent driver for **Goose** (Block) (`goose`), the model-agnostic open-source
|
|
8
|
+
* agent.
|
|
9
|
+
*
|
|
10
|
+
* Spawns `goose run -t "<prompt>" --output-format stream-json --quiet` per turn
|
|
11
|
+
* and maps Goose's stream-json events to the unified {@link AgentEvent} stream.
|
|
12
|
+
* Model-agnostic across 15+ providers; provider/model are forwarded via
|
|
13
|
+
* `GOOSE_PROVIDER` / `GOOSE_MODEL` and provider keys through the environment.
|
|
14
|
+
*
|
|
15
|
+
* @remarks
|
|
16
|
+
* - Goose is a Rust binary (not npm) — install via Block's `download_cli.sh` or
|
|
17
|
+
* Homebrew.
|
|
18
|
+
* - `--output-format` support is version-dependent; a too-old CLI surfaces as a
|
|
19
|
+
* `process`-category exit error.
|
|
20
|
+
* - Session resume via `--resume --id <id>`.
|
|
21
|
+
*
|
|
22
|
+
* @see https://github.com/block/goose
|
|
23
|
+
* @docLink packages/bridge/drivers#goose-driver
|
|
24
|
+
*/
|
|
25
|
+
export declare class GooseDriver extends SubprocessCliDriver {
|
|
26
|
+
readonly driverInfo: DriverInfo;
|
|
27
|
+
protected readonly log: Logger;
|
|
28
|
+
protected readonly defaultBin = "goose";
|
|
29
|
+
protected readonly productName = "Goose";
|
|
30
|
+
protected readonly envPrefix = "GOOSE";
|
|
31
|
+
protected buildArgs(message: string, resumeId: string | undefined): string[];
|
|
32
|
+
protected buildEnv(): Record<string, string>;
|
|
33
|
+
protected installHint(): string;
|
|
34
|
+
protected handleJson(json: any): void;
|
|
35
|
+
listModels(): Promise<ModelEntry[]>;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* `DriverTarget` wrapper for the goose driver. Registered into the plugin
|
|
39
|
+
* registry by `registerBuiltinDrivers()`.
|
|
40
|
+
*/
|
|
41
|
+
export declare const gooseDriverTarget: DriverTarget<AgentConfig>;
|
|
42
|
+
//# sourceMappingURL=goose.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"goose.d.ts","sourceRoot":"","sources":["../../../../bridge/src/drivers/goose.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAGvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAKL,mBAAmB,EACpB,MAAM,sBAAsB,CAAC;AAE9B;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,WAAY,SAAQ,mBAAmB;IAClD,QAAQ,CAAC,UAAU,EAAE,UAAU,CAK7B;IAEF,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAA4B;IAC1D,SAAS,CAAC,QAAQ,CAAC,UAAU,WAAW;IACxC,SAAS,CAAC,QAAQ,CAAC,WAAW,WAAW;IACzC,SAAS,CAAC,QAAQ,CAAC,SAAS,WAAW;IAEvC,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE;IAM5E,SAAS,CAAC,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAO5C,SAAS,CAAC,WAAW,IAAI,MAAM;IAI/B,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;IA8CtB,UAAU,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;CAGnD;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,YAAY,CAAC,WAAW,CAMvD,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { DriverTarget } from "@skaile/workspaces/plugin-registry";
|
|
2
|
+
import type { Logger } from "@skaile/workspaces/types";
|
|
3
|
+
import type { ModelEntry } from "../models.js";
|
|
4
|
+
import type { AgentConfig, DriverInfo } from "../types.js";
|
|
5
|
+
import { SubprocessCliDriver } from "./_subprocess-cli.js";
|
|
6
|
+
/**
|
|
7
|
+
* Agent driver for **OpenCode** (`opencode`), the model-agnostic open-source
|
|
8
|
+
* coding agent.
|
|
9
|
+
*
|
|
10
|
+
* Spawns `opencode run "<prompt>" --format json` per turn and maps OpenCode's
|
|
11
|
+
* JSON event stream to the unified {@link AgentEvent} stream. Model-agnostic:
|
|
12
|
+
* the model is passed as `provider/model` via `-m`, and provider API keys are
|
|
13
|
+
* forwarded through the environment.
|
|
14
|
+
*
|
|
15
|
+
* @remarks
|
|
16
|
+
* - The prompt is a **positional argument** — OpenCode's `-p` flag is a
|
|
17
|
+
* basic-auth password, not the prompt.
|
|
18
|
+
* - Session resume via `-s <id>`; the session id is captured from the run's
|
|
19
|
+
* session event and emitted as `session_info`.
|
|
20
|
+
* - OpenCode's `run --format json` event field names are not fully pinned
|
|
21
|
+
* upstream; {@link handleJson} reads them defensively.
|
|
22
|
+
*
|
|
23
|
+
* @see https://github.com/sst/opencode
|
|
24
|
+
* @docLink packages/bridge/drivers#opencode-driver
|
|
25
|
+
*/
|
|
26
|
+
export declare class OpenCodeDriver extends SubprocessCliDriver {
|
|
27
|
+
readonly driverInfo: DriverInfo;
|
|
28
|
+
protected readonly log: Logger;
|
|
29
|
+
protected readonly defaultBin = "opencode";
|
|
30
|
+
protected readonly productName = "OpenCode";
|
|
31
|
+
protected readonly envPrefix = "OPENCODE";
|
|
32
|
+
protected buildArgs(message: string, resumeId: string | undefined): string[];
|
|
33
|
+
protected buildEnv(): Record<string, string>;
|
|
34
|
+
protected installHint(): string;
|
|
35
|
+
protected handleJson(json: any): void;
|
|
36
|
+
listModels(): Promise<ModelEntry[]>;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* `DriverTarget` wrapper for the opencode driver. Registered into the plugin
|
|
40
|
+
* registry by `registerBuiltinDrivers()`.
|
|
41
|
+
*/
|
|
42
|
+
export declare const opencodeDriverTarget: DriverTarget<AgentConfig>;
|
|
43
|
+
//# sourceMappingURL=opencode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../../../../bridge/src/drivers/opencode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAGvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAKL,mBAAmB,EACpB,MAAM,sBAAsB,CAAC;AAE9B;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,cAAe,SAAQ,mBAAmB;IACrD,QAAQ,CAAC,UAAU,EAAE,UAAU,CAK7B;IAEF,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAA+B;IAC7D,SAAS,CAAC,QAAQ,CAAC,UAAU,cAAc;IAC3C,SAAS,CAAC,QAAQ,CAAC,WAAW,cAAc;IAC5C,SAAS,CAAC,QAAQ,CAAC,SAAS,cAAc;IAE1C,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE;IAW5E,SAAS,CAAC,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAW5C,SAAS,CAAC,WAAW,IAAI,MAAM;IAI/B,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;IAmDtB,UAAU,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;CAGnD;AAED;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,YAAY,CAAC,WAAW,CAM1D,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { DriverTarget } from "@skaile/workspaces/plugin-registry";
|
|
2
|
+
import type { Logger } from "@skaile/workspaces/types";
|
|
3
|
+
import { type ModelEntry } from "../models.js";
|
|
4
|
+
import type { AgentConfig, DriverInfo } from "../types.js";
|
|
5
|
+
import { GeminiFamilyDriver } from "./gemini.js";
|
|
6
|
+
/**
|
|
7
|
+
* Agent driver for **Qwen Code** (`qwen`) — a fork of Gemini CLI.
|
|
8
|
+
*
|
|
9
|
+
* Reuses {@link GeminiFamilyDriver}'s stream-json event mapping. Unlike Gemini,
|
|
10
|
+
* Qwen is **model-agnostic / OpenAI-compatible**: it reads `OPENAI_API_KEY`,
|
|
11
|
+
* `OPENAI_BASE_URL`, and `OPENAI_MODEL`, so it works against any
|
|
12
|
+
* OpenAI-completions endpoint (Alibaba DashScope by default).
|
|
13
|
+
*
|
|
14
|
+
* @remarks
|
|
15
|
+
* - Spawns `qwen -p "<prompt>" -o stream-json --include-partial-messages`.
|
|
16
|
+
* - Sets `QWEN_CODE_UNATTENDED_RETRY=1` so the CLI backs off on 429/529 in
|
|
17
|
+
* unattended driver contexts.
|
|
18
|
+
* - Supports headless session resume via `--resume <id>`.
|
|
19
|
+
*
|
|
20
|
+
* @see https://github.com/QwenLM/qwen-code
|
|
21
|
+
* @docLink packages/bridge/drivers#qwen-driver
|
|
22
|
+
*/
|
|
23
|
+
export declare class QwenDriver extends GeminiFamilyDriver {
|
|
24
|
+
readonly driverInfo: DriverInfo;
|
|
25
|
+
protected readonly log: Logger;
|
|
26
|
+
protected readonly defaultBin = "qwen";
|
|
27
|
+
protected readonly productName = "Qwen Code";
|
|
28
|
+
protected readonly envPrefix = "QWEN";
|
|
29
|
+
protected buildArgs(message: string, resumeId: string | undefined): string[];
|
|
30
|
+
protected buildEnv(): Record<string, string>;
|
|
31
|
+
protected installHint(): string;
|
|
32
|
+
listModels(): Promise<ModelEntry[]>;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* `DriverTarget` wrapper for the qwen driver. Registered into the plugin
|
|
36
|
+
* registry by `registerBuiltinDrivers()`.
|
|
37
|
+
*/
|
|
38
|
+
export declare const qwenDriverTarget: DriverTarget<AgentConfig>;
|
|
39
|
+
//# sourceMappingURL=qwen.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qwen.d.ts","sourceRoot":"","sources":["../../../../bridge/src/drivers/qwen.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAGvD,OAAO,EAAuB,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAEpE,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,UAAW,SAAQ,kBAAkB;IAChD,QAAQ,CAAC,UAAU,EAAE,UAAU,CAK7B;IAEF,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAA2B;IACzD,SAAS,CAAC,QAAQ,CAAC,UAAU,UAAU;IACvC,SAAS,CAAC,QAAQ,CAAC,WAAW,eAAe;IAC7C,SAAS,CAAC,QAAQ,CAAC,SAAS,UAAU;IAEtC,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE;IAO5E,SAAS,CAAC,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAa5C,SAAS,CAAC,WAAW,IAAI,MAAM;IAIhB,UAAU,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;CAMnD;AAED;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,YAAY,CAAC,WAAW,CAQtD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../bridge/src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,KAAK,cAAc,EAAkB,MAAM,oCAAoC,CAAC;AACzF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAavE;;;;;;;;;;GAUG;AACH,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../bridge/src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,KAAK,cAAc,EAAkB,MAAM,oCAAoC,CAAC;AACzF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAavE;;;;;;;;;;GAUG;AACH,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAuD7D,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,cAAc,4BAAyB,CAAC;AAIrD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,sBAAsB,CAC1C,QAAQ,GAAE,cAA+B,GACxC,OAAO,CAAC,IAAI,CAAC,CA4Cf;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,YAAY,CAChC,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,WAAW,EACnB,GAAG,CAAC,EAAE,aAAa,GAClB,OAAO,CAAC,WAAW,CAAC,CAGtB;AA2BD;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,IAAI,UAAU,EAAE,CAoB1C;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,OAAO,CAAC,UAAU,EAAE,CAAC,CAGvB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { globalSettingsPath, mapLegacyFields } from './chunk-
|
|
1
|
+
import { globalSettingsPath, mapLegacyFields } from './chunk-M4KLIEIJ.js';
|
|
2
2
|
import { existsSync, readFileSync, mkdirSync, writeFileSync } from 'fs';
|
|
3
3
|
import { homedir } from 'os';
|
|
4
4
|
import { join } from 'path';
|
|
@@ -89,5 +89,5 @@ function isStoreAuthenticated(config) {
|
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
export { clearStoreTokens, getStoreConfig, isStoreAuthenticated, saveStoreTokens, storeFetch };
|
|
92
|
-
//# sourceMappingURL=chunk-
|
|
93
|
-
//# sourceMappingURL=chunk-
|
|
92
|
+
//# sourceMappingURL=chunk-2NOE4AGD.js.map
|
|
93
|
+
//# sourceMappingURL=chunk-2NOE4AGD.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../cli/src/store-client.ts"],"names":[],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../cli/src/store-client.ts"],"names":[],"mappings":"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","file":"chunk-2NOE4AGD.js","sourcesContent":["import { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { globalSettingsPath, mapLegacyFields } from \"@skaile/workspaces/core\";\n\n/**\n * Connection configuration for the AI Asset Store API.\n *\n * @docLink cli/dev-guide#store-client\n */\nexport interface StoreConfig {\n url: string;\n jwt: string | null;\n refreshToken: string | null;\n}\n\n/**\n * Read store connection config from global user settings, falling back to\n * `SKAILE_STORE_URL` env var and the default store URL.\n *\n * @returns Populated {@link StoreConfig} with `url`, `jwt`, and `refreshToken`.\n * @docLink cli/dev-guide#store-client\n */\nexport function getStoreConfig(): StoreConfig {\n const settingsPath = globalSettingsPath();\n let settings: Record<string, any> = {};\n if (existsSync(settingsPath)) {\n try {\n settings = mapLegacyFields(JSON.parse(readFileSync(settingsPath, \"utf-8\")));\n } catch {\n settings = {};\n }\n }\n return {\n url: settings.storeUrl ?? process.env.SKAILE_STORE_URL ?? \"https://store.skaile.ai\",\n jwt: settings.storeJwt ?? null,\n refreshToken: settings.storeRefreshToken ?? null,\n };\n}\n\n/** Path to user-level settings */\nfunction userSettingsPath(): string {\n return join(homedir(), \".skaile\", \"settings.json\");\n}\n\n/**\n * Persist store authentication tokens to `~/.skaile/settings.json`.\n *\n * @param jwt - The JWT access token returned by the store login endpoint.\n * @param refreshToken - The refresh token for obtaining new JWTs.\n * @docLink cli/dev-guide#store-client\n */\nexport function saveStoreTokens(jwt: string, refreshToken: string): void {\n const settingsPath = userSettingsPath();\n const dir = join(settingsPath, \"..\");\n mkdirSync(dir, { recursive: true });\n\n let current: Record<string, any> = {};\n if (existsSync(settingsPath)) {\n try {\n current = JSON.parse(readFileSync(settingsPath, \"utf-8\"));\n } catch {\n current = {};\n }\n }\n\n current.storeJwt = jwt;\n current.storeRefreshToken = refreshToken;\n writeFileSync(settingsPath, JSON.stringify(current, null, 2), \"utf-8\");\n}\n\n/**\n * Remove store authentication tokens from `~/.skaile/settings.json`.\n *\n * @docLink cli/dev-guide#store-client\n */\nexport function clearStoreTokens(): void {\n const settingsPath = userSettingsPath();\n if (!existsSync(settingsPath)) return;\n\n try {\n const current = JSON.parse(readFileSync(settingsPath, \"utf-8\"));\n delete current.storeJwt;\n delete current.storeRefreshToken;\n writeFileSync(settingsPath, JSON.stringify(current, null, 2), \"utf-8\");\n } catch {\n // ignore\n }\n}\n\n/**\n * Make an authenticated HTTP request to the store REST API with a 1.5s timeout.\n *\n * @param config - Store connection config (URL + auth token).\n * @param path - API path (e.g. `/api/assets`).\n * @param opts - Optional method, body, query params, and extra headers.\n * @returns Parsed JSON response body.\n * @docLink cli/dev-guide#store-client\n */\nexport async function storeFetch<T = any>(\n config: StoreConfig,\n path: string,\n opts?: {\n method?: string;\n body?: unknown;\n params?: Record<string, string>;\n headers?: Record<string, string>;\n },\n): Promise<T> {\n let url = `${config.url}${path}`;\n if (opts?.params) {\n const sp = new URLSearchParams(opts.params);\n url += `?${sp}`;\n }\n\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n ...(opts?.headers ?? {}),\n };\n if (config.jwt) {\n headers.Authorization = `Bearer ${config.jwt}`;\n }\n\n const fetchOpts: RequestInit = {\n method: opts?.method ?? \"GET\",\n headers,\n };\n if (opts?.body) {\n fetchOpts.body = JSON.stringify(opts.body);\n }\n\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 1_500);\n try {\n const res = await fetch(url, { ...fetchOpts, signal: controller.signal });\n if (!res.ok) {\n const body = await res.json().catch(() => ({ error: `HTTP ${res.status}` }));\n throw new Error((body as any).error ?? `Store API error: ${res.status}`);\n }\n return res.json() as Promise<T>;\n } finally {\n clearTimeout(timeout);\n }\n}\n\n/**\n * Return `true` if a JWT token is present in the provided (or default) store config.\n *\n * @param config - Optional pre-loaded config; if omitted, calls {@link getStoreConfig}.\n * @docLink cli/dev-guide#store-client\n */\nexport function isStoreAuthenticated(config?: StoreConfig): boolean {\n const c = config ?? getStoreConfig();\n return !!c.jwt;\n}\n"]}
|
|
@@ -1331,6 +1331,7 @@ function mergeMcpDeclarations(base, overlay) {
|
|
|
1331
1331
|
recipe: overlay.recipe ?? base.recipe
|
|
1332
1332
|
};
|
|
1333
1333
|
}
|
|
1334
|
+
var unscopedTail = (x) => x.includes("/") ? x.split("/").pop() : x;
|
|
1334
1335
|
function loadMaterializedMcpDeclarations(projectDir) {
|
|
1335
1336
|
const dir = join(projectDir, ".skaile/assets/mcp-server");
|
|
1336
1337
|
if (!existsSync(dir)) return [];
|
|
@@ -1381,7 +1382,7 @@ function loadMaterializedMcpDeclarations(projectDir) {
|
|
|
1381
1382
|
}
|
|
1382
1383
|
return result;
|
|
1383
1384
|
}
|
|
1384
|
-
function stageMaterializedSkills(projectDir, skillsDir) {
|
|
1385
|
+
function stageMaterializedSkills(projectDir, skillsDir, opts) {
|
|
1385
1386
|
const dir = join(projectDir, ".skaile/assets/skill");
|
|
1386
1387
|
if (!existsSync(dir)) return [];
|
|
1387
1388
|
const staged = [];
|
|
@@ -1391,9 +1392,14 @@ function stageMaterializedSkills(projectDir, skillsDir) {
|
|
|
1391
1392
|
} catch {
|
|
1392
1393
|
return [];
|
|
1393
1394
|
}
|
|
1395
|
+
let declaredSet;
|
|
1396
|
+
if (opts?.strict) {
|
|
1397
|
+
declaredSet = new Set((opts.declared ?? []).flatMap((d) => [d, unscopedTail(d)]));
|
|
1398
|
+
}
|
|
1394
1399
|
for (const name of subdirs) {
|
|
1395
1400
|
const src = join(dir, name);
|
|
1396
1401
|
if (!existsSync(join(src, "SKILL.md"))) continue;
|
|
1402
|
+
if (declaredSet && !declaredSet.has(name) && !declaredSet.has(unscopedTail(name))) continue;
|
|
1397
1403
|
const dest = join(projectDir, skillsDir, name);
|
|
1398
1404
|
try {
|
|
1399
1405
|
cpSync(src, dest, {
|
|
@@ -1497,8 +1503,26 @@ function loadMcpServerDeclarations(projectDir) {
|
|
|
1497
1503
|
if (!catalogDecl) continue;
|
|
1498
1504
|
upsert(catalogDecl);
|
|
1499
1505
|
}
|
|
1500
|
-
|
|
1501
|
-
|
|
1506
|
+
const strictYaml = process.env.SKAILE_STRICT_YAML === "true";
|
|
1507
|
+
if (strictYaml) {
|
|
1508
|
+
const declaredNames = /* @__PURE__ */ new Set([
|
|
1509
|
+
...explicit.flatMap((e) => [e.id, unscopedTail(e.id)]),
|
|
1510
|
+
...mcpRefStrings.flatMap((refStr) => {
|
|
1511
|
+
try {
|
|
1512
|
+
const r = parseAssetRef(refStr);
|
|
1513
|
+
return [r.name, unscopedTail(r.name)];
|
|
1514
|
+
} catch {
|
|
1515
|
+
return [];
|
|
1516
|
+
}
|
|
1517
|
+
})
|
|
1518
|
+
]);
|
|
1519
|
+
for (const decl of materialized) {
|
|
1520
|
+
if (declaredNames.has(decl.id) || declaredNames.has(unscopedTail(decl.id))) upsert(decl);
|
|
1521
|
+
}
|
|
1522
|
+
} else {
|
|
1523
|
+
for (const decl of materialized) {
|
|
1524
|
+
upsert(decl);
|
|
1525
|
+
}
|
|
1502
1526
|
}
|
|
1503
1527
|
for (const decl of explicit) {
|
|
1504
1528
|
upsert(decl);
|
|
@@ -1533,5 +1557,5 @@ function resolveAgentDir(projectDir) {
|
|
|
1533
1557
|
}
|
|
1534
1558
|
|
|
1535
1559
|
export { COMPACTION_DEFAULTS, CanonicalRefConflictError, DEFAULT_RECIPE_ATTR, SKAILE_YAML_DEFAULT, SKAILE_YAML_SUFFIX, SK_WORKSPACE_DEFAULT_NAME, SK_WORKSPACE_SUFFIX, buildProvenanceIndex, checkRepoStatus, checkoutPin, cloneRepo, decodeSkaileYaml, encodeSkaileYaml, ensureRepo, findWorkspaceRoot, getGlobalCacheDir, getRepoCommit, isWorkspaceConfigFilename, linkRepo, listSkWorkspaceConfigs, loadMcpServerDeclarations, loadSkWorkspaceConfig, mergeSkWorkspaceConfigs, normalizeConfig, pullRepo, readLinks, resolveAgentDir, resolveAll, resolveAsset, resolveSkWorkspaceConfig, saveSkWorkspaceConfig, scanRepo, stageMaterializedSkills, unlinkRepo, validateAssetRecipeAttr, validateAssetRecipeFlake, workspaceConfigFilename, workspaceNameFromFilename, writeLinks };
|
|
1536
|
-
//# sourceMappingURL=chunk-
|
|
1537
|
-
//# sourceMappingURL=chunk-
|
|
1560
|
+
//# sourceMappingURL=chunk-3QQSSRYN.js.map
|
|
1561
|
+
//# sourceMappingURL=chunk-3QQSSRYN.js.map
|