@netlify/axis 1.5.0 → 1.6.2
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/README.md +1 -1
- package/dist/adapters/auggie.d.ts +8 -0
- package/dist/adapters/auggie.d.ts.map +1 -0
- package/dist/adapters/auggie.js +15 -0
- package/dist/adapters/auggie.js.map +1 -0
- package/dist/adapters/base/acp-adapter.d.ts.map +1 -1
- package/dist/adapters/base/acp-adapter.js +31 -11
- package/dist/adapters/base/acp-adapter.js.map +1 -1
- package/dist/adapters/base/agent-adapter.d.ts.map +1 -1
- package/dist/adapters/base/agent-adapter.js +6 -2
- package/dist/adapters/base/agent-adapter.js.map +1 -1
- package/dist/adapters/blackbox.d.ts +7 -0
- package/dist/adapters/blackbox.d.ts.map +1 -0
- package/dist/adapters/blackbox.js +14 -0
- package/dist/adapters/blackbox.js.map +1 -0
- package/dist/adapters/cline.d.ts +8 -0
- package/dist/adapters/cline.d.ts.map +1 -0
- package/dist/adapters/cline.js +14 -0
- package/dist/adapters/cline.js.map +1 -0
- package/dist/adapters/codex-sdk.d.ts +12 -0
- package/dist/adapters/codex-sdk.d.ts.map +1 -0
- package/dist/adapters/codex-sdk.js +18 -0
- package/dist/adapters/codex-sdk.js.map +1 -0
- package/dist/adapters/copilot.d.ts +11 -0
- package/dist/adapters/copilot.d.ts.map +1 -0
- package/dist/adapters/copilot.js +17 -0
- package/dist/adapters/copilot.js.map +1 -0
- package/dist/adapters/cursor-agent.d.ts +11 -0
- package/dist/adapters/cursor-agent.d.ts.map +1 -0
- package/dist/adapters/cursor-agent.js +18 -0
- package/dist/adapters/cursor-agent.js.map +1 -0
- package/dist/adapters/factory-droid.d.ts +11 -0
- package/dist/adapters/factory-droid.d.ts.map +1 -0
- package/dist/adapters/factory-droid.js +17 -0
- package/dist/adapters/factory-droid.js.map +1 -0
- package/dist/adapters/fast-agent.d.ts +9 -0
- package/dist/adapters/fast-agent.d.ts.map +1 -0
- package/dist/adapters/fast-agent.js +14 -0
- package/dist/adapters/fast-agent.js.map +1 -0
- package/dist/adapters/gemini.d.ts +8 -0
- package/dist/adapters/gemini.d.ts.map +1 -1
- package/dist/adapters/gemini.js +30 -192
- package/dist/adapters/gemini.js.map +1 -1
- package/dist/adapters/kilo.d.ts +7 -0
- package/dist/adapters/kilo.d.ts.map +1 -0
- package/dist/adapters/kilo.js +13 -0
- package/dist/adapters/kilo.js.map +1 -0
- package/dist/adapters/kimi.d.ts +9 -0
- package/dist/adapters/kimi.d.ts.map +1 -0
- package/dist/adapters/kimi.js +15 -0
- package/dist/adapters/kimi.js.map +1 -0
- package/dist/adapters/kiro-cli.d.ts +8 -0
- package/dist/adapters/kiro-cli.d.ts.map +1 -0
- package/dist/adapters/kiro-cli.js +14 -0
- package/dist/adapters/kiro-cli.js.map +1 -0
- package/dist/adapters/mistral-vibe.d.ts +8 -0
- package/dist/adapters/mistral-vibe.d.ts.map +1 -0
- package/dist/adapters/mistral-vibe.js +14 -0
- package/dist/adapters/mistral-vibe.js.map +1 -0
- package/dist/adapters/opencode.d.ts +13 -0
- package/dist/adapters/opencode.d.ts.map +1 -0
- package/dist/adapters/opencode.js +19 -0
- package/dist/adapters/opencode.js.map +1 -0
- package/dist/adapters/openhands.d.ts +8 -0
- package/dist/adapters/openhands.d.ts.map +1 -0
- package/dist/adapters/openhands.js +14 -0
- package/dist/adapters/openhands.js.map +1 -0
- package/dist/adapters/poolside.d.ts +7 -0
- package/dist/adapters/poolside.d.ts.map +1 -0
- package/dist/adapters/poolside.js +14 -0
- package/dist/adapters/poolside.js.map +1 -0
- package/dist/adapters/qoder.d.ts +7 -0
- package/dist/adapters/qoder.d.ts.map +1 -0
- package/dist/adapters/qoder.js +14 -0
- package/dist/adapters/qoder.js.map +1 -0
- package/dist/adapters/qwen-code.d.ts +15 -0
- package/dist/adapters/qwen-code.d.ts.map +1 -0
- package/dist/adapters/qwen-code.js +53 -0
- package/dist/adapters/qwen-code.js.map +1 -0
- package/dist/adapters/registry.d.ts.map +1 -1
- package/dist/adapters/registry.js +38 -2
- package/dist/adapters/registry.js.map +1 -1
- package/dist/adapters/stakpak.d.ts +8 -0
- package/dist/adapters/stakpak.d.ts.map +1 -0
- package/dist/adapters/stakpak.js +14 -0
- package/dist/adapters/stakpak.js.map +1 -0
- package/dist/adapters/utils/mcp.d.ts +0 -11
- package/dist/adapters/utils/mcp.d.ts.map +1 -1
- package/dist/adapters/utils/mcp.js +0 -41
- package/dist/adapters/utils/mcp.js.map +1 -1
- package/dist/adapters/utils/resolve.d.ts.map +1 -1
- package/dist/adapters/utils/resolve.js +7 -1
- package/dist/adapters/utils/resolve.js.map +1 -1
- package/dist/adapters/vtcode.d.ts +11 -0
- package/dist/adapters/vtcode.d.ts.map +1 -0
- package/dist/adapters/vtcode.js +21 -0
- package/dist/adapters/vtcode.js.map +1 -0
- package/dist/cli.js +1 -1
- package/dist/runner/runner.js +32 -2
- package/dist/runner/runner.js.map +1 -1
- package/dist/scoring/index.d.ts.map +1 -1
- package/dist/scoring/index.js +69 -0
- package/dist/scoring/index.js.map +1 -1
- package/dist/types/agent.d.ts +12 -0
- package/dist/types/agent.d.ts.map +1 -1
- package/package.json +2 -2
- package/dist/adapters/gemini-acp.d.ts +0 -11
- package/dist/adapters/gemini-acp.d.ts.map +0 -1
- package/dist/adapters/gemini-acp.js +0 -60
- package/dist/adapters/gemini-acp.js.map +0 -1
package/dist/adapters/gemini.js
CHANGED
|
@@ -1,42 +1,32 @@
|
|
|
1
1
|
import * as fs from "node:fs";
|
|
2
2
|
import * as path from "node:path";
|
|
3
|
-
import {
|
|
4
|
-
import { writeGeminiSettings } from "./utils/mcp.js";
|
|
3
|
+
import { createAcpBasedAdapter } from "./base/acp-adapter.js";
|
|
5
4
|
import { writeGeminiSkills } from "./utils/skills.js";
|
|
5
|
+
/**
|
|
6
|
+
* Gemini adapter. Uses `gemini --acp` to launch Gemini CLI in Agent Client
|
|
7
|
+
* Protocol mode over stdio, giving us structured tool calls, plans, and
|
|
8
|
+
* permissions instead of ad-hoc NDJSON.
|
|
9
|
+
*
|
|
10
|
+
* MCP servers are passed through the ACP `session/new` call rather than
|
|
11
|
+
* written to settings.json.
|
|
12
|
+
*/
|
|
6
13
|
export function createGeminiAdapter() {
|
|
7
|
-
return
|
|
14
|
+
return createAcpBasedAdapter({
|
|
8
15
|
name: "gemini",
|
|
9
16
|
cliCommand: "gemini",
|
|
10
17
|
requiredEnv: () => ["GEMINI_API_KEY"],
|
|
11
18
|
isolationEnv: (workspace) => ({
|
|
12
19
|
GEMINI_CLI_HOME: path.join(workspace, ".gemini"),
|
|
13
20
|
GEMINI_TELEMETRY_ENABLED: "false",
|
|
21
|
+
// Unset GOOGLE_CLOUD_PROJECT to prevent interactive auth prompts in ACP mode
|
|
22
|
+
GOOGLE_CLOUD_PROJECT: "",
|
|
14
23
|
}),
|
|
15
|
-
prepare: (ctx) => {
|
|
16
|
-
const geminiHome = ctx.env?.GEMINI_CLI_HOME;
|
|
17
|
-
if (!geminiHome)
|
|
18
|
-
return;
|
|
19
|
-
fs.mkdirSync(geminiHome, { recursive: true });
|
|
20
|
-
// Always write settings.json — disables context discovery so Gemini
|
|
21
|
-
// doesn't scan the ephemeral workspace on startup. MCP servers are
|
|
22
|
-
// merged in when configured.
|
|
23
|
-
const mcpServers = ctx.input.mcpServers && Object.keys(ctx.input.mcpServers).length > 0 ? ctx.input.mcpServers : undefined;
|
|
24
|
-
writeGeminiSettings(geminiHome, mcpServers);
|
|
25
|
-
if (ctx.input.resolvedSkills?.length) {
|
|
26
|
-
writeGeminiSkills(geminiHome, ctx.input.resolvedSkills);
|
|
27
|
-
}
|
|
28
|
-
},
|
|
29
24
|
buildArgs: (input) => {
|
|
30
|
-
const
|
|
31
|
-
const yolo = flags["yolo"] ?? true;
|
|
32
|
-
const args = ["-p", input.prompt, "--output-format", "stream-json"];
|
|
33
|
-
if (yolo)
|
|
34
|
-
args.push("--yolo");
|
|
25
|
+
const args = ["--acp", "--skip-trust"];
|
|
35
26
|
if (input.config.model)
|
|
36
27
|
args.push("--model", input.config.model);
|
|
28
|
+
const flags = input.config.flags ?? {};
|
|
37
29
|
for (const [key, value] of Object.entries(flags)) {
|
|
38
|
-
if (key === "yolo")
|
|
39
|
-
continue;
|
|
40
30
|
if (value === true) {
|
|
41
31
|
args.push(`--${key}`);
|
|
42
32
|
}
|
|
@@ -46,177 +36,25 @@ export function createGeminiAdapter() {
|
|
|
46
36
|
}
|
|
47
37
|
return args;
|
|
48
38
|
},
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
}
|
|
62
|
-
catch {
|
|
63
|
-
return;
|
|
64
|
-
}
|
|
65
|
-
// Accumulate assistant deltas instead of creating individual entries.
|
|
66
|
-
// Gemini streams assistant messages as chunks with { delta: true }.
|
|
67
|
-
if (event.type === "message" && event.role === "assistant" && event.delta === true) {
|
|
68
|
-
if (!ctx.state.pendingDeltaTimestamp) {
|
|
69
|
-
ctx.state.pendingDeltaTimestamp = event.timestamp ?? new Date().toISOString();
|
|
70
|
-
}
|
|
71
|
-
const chunk = event.content ?? "";
|
|
72
|
-
ctx.state.pendingDelta += chunk;
|
|
73
|
-
ctx.feedAssistantText(chunk);
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
// Non-delta event — flush any accumulated assistant text first
|
|
77
|
-
flushPendingDelta(ctx);
|
|
78
|
-
processEvent(event, ctx);
|
|
79
|
-
},
|
|
80
|
-
onEnd: (ctx) => {
|
|
81
|
-
// Flush any remaining delta content at end of stream (including timeout)
|
|
82
|
-
flushPendingDelta(ctx);
|
|
83
|
-
},
|
|
84
|
-
},
|
|
85
|
-
getResult: (ctx) => {
|
|
86
|
-
const { lastAssistantMessage, tokenUsage, sessionId, resultError } = ctx.state;
|
|
87
|
-
return {
|
|
88
|
-
result: resultError ? null : lastAssistantMessage,
|
|
89
|
-
metadata: {
|
|
90
|
-
tokenUsage,
|
|
91
|
-
sessionId,
|
|
92
|
-
...(resultError ? { error: resultError } : {}),
|
|
39
|
+
prepare: (ctx) => {
|
|
40
|
+
const geminiHome = ctx.env?.GEMINI_CLI_HOME;
|
|
41
|
+
if (!geminiHome)
|
|
42
|
+
return;
|
|
43
|
+
fs.mkdirSync(geminiHome, { recursive: true });
|
|
44
|
+
// Write settings.json to disable context discovery — AXIS workspaces are
|
|
45
|
+
// ephemeral temp dirs with no meaningful project structure. MCP servers
|
|
46
|
+
// are NOT written here; they go through ACP's session/new instead.
|
|
47
|
+
const settings = {
|
|
48
|
+
context: {
|
|
49
|
+
discoveryMaxDirs: 0,
|
|
50
|
+
memoryBoundaryMarkers: [],
|
|
93
51
|
},
|
|
94
52
|
};
|
|
53
|
+
fs.writeFileSync(path.join(geminiHome, "settings.json"), JSON.stringify(settings, null, 2) + "\n");
|
|
54
|
+
if (ctx.input.resolvedSkills?.length) {
|
|
55
|
+
writeGeminiSkills(geminiHome, ctx.input.resolvedSkills);
|
|
56
|
+
}
|
|
95
57
|
},
|
|
96
58
|
});
|
|
97
59
|
}
|
|
98
|
-
function flushPendingDelta(ctx) {
|
|
99
|
-
const { pendingDelta, pendingDeltaTimestamp } = ctx.state;
|
|
100
|
-
if (!pendingDelta)
|
|
101
|
-
return;
|
|
102
|
-
ctx.state.lastAssistantMessage = pendingDelta;
|
|
103
|
-
ctx.transcript.push({
|
|
104
|
-
type: "assistant",
|
|
105
|
-
timestamp: pendingDeltaTimestamp ?? new Date().toISOString(),
|
|
106
|
-
content: {
|
|
107
|
-
type: "message",
|
|
108
|
-
role: "assistant",
|
|
109
|
-
content: pendingDelta,
|
|
110
|
-
},
|
|
111
|
-
});
|
|
112
|
-
ctx.state.pendingDelta = "";
|
|
113
|
-
ctx.state.pendingDeltaTimestamp = null;
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Feed any textual content from an event to the token estimator so the live
|
|
117
|
-
* counter keeps moving during tool execution (not just assistant messages).
|
|
118
|
-
*/
|
|
119
|
-
function feedEventText(event, ctx) {
|
|
120
|
-
const content = event.content;
|
|
121
|
-
if (content) {
|
|
122
|
-
ctx.feedAssistantText(content);
|
|
123
|
-
return;
|
|
124
|
-
}
|
|
125
|
-
const output = event.output;
|
|
126
|
-
if (output) {
|
|
127
|
-
ctx.feedAssistantText(output);
|
|
128
|
-
return;
|
|
129
|
-
}
|
|
130
|
-
const params = event.parameters;
|
|
131
|
-
if (params) {
|
|
132
|
-
ctx.feedAssistantText(JSON.stringify(params));
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* Process a single NDJSON event from the Gemini CLI stream-json output.
|
|
137
|
-
*
|
|
138
|
-
* Event types:
|
|
139
|
-
* - init — session metadata (session_id, model)
|
|
140
|
-
* - message — user/assistant messages (role, content, delta?)
|
|
141
|
-
* - tool_use — tool invocation (tool_name, tool_id, parameters)
|
|
142
|
-
* - tool_result — tool output (tool_id, status, output?, error?)
|
|
143
|
-
* - error — non-fatal errors (severity, message)
|
|
144
|
-
* - result — final outcome with stats
|
|
145
|
-
*/
|
|
146
|
-
function processEvent(event, ctx) {
|
|
147
|
-
const eventType = event.type;
|
|
148
|
-
if (eventType === "init") {
|
|
149
|
-
const id = event.session_id;
|
|
150
|
-
if (id)
|
|
151
|
-
ctx.state.sessionId = id;
|
|
152
|
-
return;
|
|
153
|
-
}
|
|
154
|
-
if (eventType === "result") {
|
|
155
|
-
const stats = event.stats;
|
|
156
|
-
if (stats) {
|
|
157
|
-
ctx.state.tokenUsage = {
|
|
158
|
-
input: stats.input_tokens ?? 0,
|
|
159
|
-
output: stats.output_tokens ?? 0,
|
|
160
|
-
};
|
|
161
|
-
}
|
|
162
|
-
if (event.status === "error") {
|
|
163
|
-
const errObj = event.error;
|
|
164
|
-
const errMsg = errObj?.message ?? "Unknown error";
|
|
165
|
-
ctx.state.resultError = errMsg;
|
|
166
|
-
ctx.transcript.push({
|
|
167
|
-
type: "error",
|
|
168
|
-
timestamp: event.timestamp ?? new Date().toISOString(),
|
|
169
|
-
content: event,
|
|
170
|
-
});
|
|
171
|
-
}
|
|
172
|
-
return;
|
|
173
|
-
}
|
|
174
|
-
if (eventType === "error") {
|
|
175
|
-
ctx.transcript.push({
|
|
176
|
-
type: "error",
|
|
177
|
-
timestamp: event.timestamp ?? new Date().toISOString(),
|
|
178
|
-
content: event,
|
|
179
|
-
});
|
|
180
|
-
return;
|
|
181
|
-
}
|
|
182
|
-
if (eventType === "message") {
|
|
183
|
-
const role = event.role;
|
|
184
|
-
const content = event.content;
|
|
185
|
-
if (role === "assistant" && content) {
|
|
186
|
-
ctx.state.lastAssistantMessage = content;
|
|
187
|
-
ctx.feedAssistantText(content);
|
|
188
|
-
ctx.transcript.push({
|
|
189
|
-
type: "assistant",
|
|
190
|
-
timestamp: event.timestamp ?? new Date().toISOString(),
|
|
191
|
-
content: event,
|
|
192
|
-
});
|
|
193
|
-
}
|
|
194
|
-
else if (role === "user") {
|
|
195
|
-
feedEventText(event, ctx);
|
|
196
|
-
ctx.transcript.push({
|
|
197
|
-
type: "tool_result",
|
|
198
|
-
timestamp: event.timestamp ?? new Date().toISOString(),
|
|
199
|
-
content: event,
|
|
200
|
-
});
|
|
201
|
-
}
|
|
202
|
-
return;
|
|
203
|
-
}
|
|
204
|
-
if (eventType === "tool_use") {
|
|
205
|
-
feedEventText(event, ctx);
|
|
206
|
-
ctx.transcript.push({
|
|
207
|
-
type: "tool_use",
|
|
208
|
-
timestamp: event.timestamp ?? new Date().toISOString(),
|
|
209
|
-
content: event,
|
|
210
|
-
});
|
|
211
|
-
return;
|
|
212
|
-
}
|
|
213
|
-
if (eventType === "tool_result") {
|
|
214
|
-
feedEventText(event, ctx);
|
|
215
|
-
ctx.transcript.push({
|
|
216
|
-
type: "tool_result",
|
|
217
|
-
timestamp: event.timestamp ?? new Date().toISOString(),
|
|
218
|
-
content: event,
|
|
219
|
-
});
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
60
|
//# sourceMappingURL=gemini.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../src/adapters/gemini.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../src/adapters/gemini.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,qBAAqB,CAAC;QAC3B,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,QAAQ;QAEpB,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,gBAAgB,CAAC;QAErC,YAAY,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YAC5B,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC;YAChD,wBAAwB,EAAE,OAAO;YACjC,6EAA6E;YAC7E,oBAAoB,EAAE,EAAE;SACzB,CAAC;QAEF,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;YACnB,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;YACvC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK;gBAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAEjE,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;YACvC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;oBACnB,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;gBACxB,CAAC;qBAAM,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;oBAC3B,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBACvC,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACf,MAAM,UAAU,GAAG,GAAG,CAAC,GAAG,EAAE,eAAe,CAAC;YAC5C,IAAI,CAAC,UAAU;gBAAE,OAAO;YACxB,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAE9C,yEAAyE;YACzE,wEAAwE;YACxE,mEAAmE;YACnE,MAAM,QAAQ,GAAG;gBACf,OAAO,EAAE;oBACP,gBAAgB,EAAE,CAAC;oBACnB,qBAAqB,EAAE,EAAE;iBAC1B;aACF,CAAC;YACF,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YAEnG,IAAI,GAAG,CAAC,KAAK,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;gBACrC,iBAAiB,CAAC,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { AgentAdapter } from "../types/agent.js";
|
|
2
|
+
/**
|
|
3
|
+
* Kilo Code via ACP — `kilo acp`. Auth is interactive (`kilo /connect`);
|
|
4
|
+
* pre-authenticate once before headless use. No env var is enforced.
|
|
5
|
+
*/
|
|
6
|
+
export declare function createKiloAdapter(): AgentAdapter;
|
|
7
|
+
//# sourceMappingURL=kilo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kilo.d.ts","sourceRoot":"","sources":["../../src/adapters/kilo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGtD;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,YAAY,CAMhD"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { createAcpBasedAdapter } from "./base/acp-adapter.js";
|
|
2
|
+
/**
|
|
3
|
+
* Kilo Code via ACP — `kilo acp`. Auth is interactive (`kilo /connect`);
|
|
4
|
+
* pre-authenticate once before headless use. No env var is enforced.
|
|
5
|
+
*/
|
|
6
|
+
export function createKiloAdapter() {
|
|
7
|
+
return createAcpBasedAdapter({
|
|
8
|
+
name: "kilo",
|
|
9
|
+
cliCommand: "kilo",
|
|
10
|
+
buildArgs: () => ["acp"],
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=kilo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kilo.js","sourceRoot":"","sources":["../../src/adapters/kilo.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,qBAAqB,CAAC;QAC3B,IAAI,EAAE,MAAM;QACZ,UAAU,EAAE,MAAM;QAClB,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC;KACzB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { AgentAdapter } from "../types/agent.js";
|
|
2
|
+
/**
|
|
3
|
+
* Moonshot Kimi CLI via ACP — `kimi acp`. Kimi's primary auth flow is OAuth
|
|
4
|
+
* (`kimi /login` writes ~/.kimi/config.toml). When the openai_legacy /
|
|
5
|
+
* openai_responses providers are configured, Kimi also reads OPENAI_API_KEY
|
|
6
|
+
* (which overrides the config file — see kimi-cli issue #1165).
|
|
7
|
+
*/
|
|
8
|
+
export declare function createKimiAdapter(): AgentAdapter;
|
|
9
|
+
//# sourceMappingURL=kimi.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kimi.d.ts","sourceRoot":"","sources":["../../src/adapters/kimi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGtD;;;;;GAKG;AACH,wBAAgB,iBAAiB,IAAI,YAAY,CAMhD"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { createAcpBasedAdapter } from "./base/acp-adapter.js";
|
|
2
|
+
/**
|
|
3
|
+
* Moonshot Kimi CLI via ACP — `kimi acp`. Kimi's primary auth flow is OAuth
|
|
4
|
+
* (`kimi /login` writes ~/.kimi/config.toml). When the openai_legacy /
|
|
5
|
+
* openai_responses providers are configured, Kimi also reads OPENAI_API_KEY
|
|
6
|
+
* (which overrides the config file — see kimi-cli issue #1165).
|
|
7
|
+
*/
|
|
8
|
+
export function createKimiAdapter() {
|
|
9
|
+
return createAcpBasedAdapter({
|
|
10
|
+
name: "kimi",
|
|
11
|
+
cliCommand: "kimi",
|
|
12
|
+
buildArgs: () => ["acp"],
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=kimi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kimi.js","sourceRoot":"","sources":["../../src/adapters/kimi.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,qBAAqB,CAAC;QAC3B,IAAI,EAAE,MAAM;QACZ,UAAU,EAAE,MAAM;QAClB,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC;KACzB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { AgentAdapter } from "../types/agent.js";
|
|
2
|
+
/**
|
|
3
|
+
* AWS Kiro CLI via ACP — `kiro-cli acp`. Auth is AWS-managed (kiro.dev
|
|
4
|
+
* sign-in writes ~/.kiro/); pre-authenticate once before headless use.
|
|
5
|
+
* No env var is enforced.
|
|
6
|
+
*/
|
|
7
|
+
export declare function createKiroCliAdapter(): AgentAdapter;
|
|
8
|
+
//# sourceMappingURL=kiro-cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kiro-cli.d.ts","sourceRoot":"","sources":["../../src/adapters/kiro-cli.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGtD;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,YAAY,CAMnD"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { createAcpBasedAdapter } from "./base/acp-adapter.js";
|
|
2
|
+
/**
|
|
3
|
+
* AWS Kiro CLI via ACP — `kiro-cli acp`. Auth is AWS-managed (kiro.dev
|
|
4
|
+
* sign-in writes ~/.kiro/); pre-authenticate once before headless use.
|
|
5
|
+
* No env var is enforced.
|
|
6
|
+
*/
|
|
7
|
+
export function createKiroCliAdapter() {
|
|
8
|
+
return createAcpBasedAdapter({
|
|
9
|
+
name: "kiro-cli",
|
|
10
|
+
cliCommand: "kiro-cli",
|
|
11
|
+
buildArgs: () => ["acp"],
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=kiro-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kiro-cli.js","sourceRoot":"","sources":["../../src/adapters/kiro-cli.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;;;GAIG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,qBAAqB,CAAC;QAC3B,IAAI,EAAE,UAAU;QAChB,UAAU,EAAE,UAAU;QACtB,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC;KACzB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { AgentAdapter } from "../types/agent.js";
|
|
2
|
+
/**
|
|
3
|
+
* Mistral Vibe via ACP — installs a separate `vibe-acp` binary that
|
|
4
|
+
* speaks ACP directly (the interactive TUI lives in `vibe`).
|
|
5
|
+
* Requires MISTRAL_API_KEY.
|
|
6
|
+
*/
|
|
7
|
+
export declare function createMistralVibeAdapter(): AgentAdapter;
|
|
8
|
+
//# sourceMappingURL=mistral-vibe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mistral-vibe.d.ts","sourceRoot":"","sources":["../../src/adapters/mistral-vibe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGtD;;;;GAIG;AACH,wBAAgB,wBAAwB,IAAI,YAAY,CAMvD"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { createAcpBasedAdapter } from "./base/acp-adapter.js";
|
|
2
|
+
/**
|
|
3
|
+
* Mistral Vibe via ACP — installs a separate `vibe-acp` binary that
|
|
4
|
+
* speaks ACP directly (the interactive TUI lives in `vibe`).
|
|
5
|
+
* Requires MISTRAL_API_KEY.
|
|
6
|
+
*/
|
|
7
|
+
export function createMistralVibeAdapter() {
|
|
8
|
+
return createAcpBasedAdapter({
|
|
9
|
+
name: "mistral-vibe",
|
|
10
|
+
cliCommand: "vibe-acp",
|
|
11
|
+
requiredEnv: () => ["MISTRAL_API_KEY"],
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=mistral-vibe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mistral-vibe.js","sourceRoot":"","sources":["../../src/adapters/mistral-vibe.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;;;GAIG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO,qBAAqB,CAAC;QAC3B,IAAI,EAAE,cAAc;QACpB,UAAU,EAAE,UAAU;QACtB,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,iBAAiB,CAAC;KACvC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { AgentAdapter } from "../types/agent.js";
|
|
2
|
+
/**
|
|
3
|
+
* OpenCode (sst/opencode) via ACP — `opencode acp` starts an ACP server
|
|
4
|
+
* over stdio. OpenCode is BYOK; it reads provider credentials from
|
|
5
|
+
* `opencode auth login` (stored in ~/.local/share/opencode/auth.json) or
|
|
6
|
+
* from common provider env vars (ANTHROPIC_API_KEY, OPENAI_API_KEY, etc.).
|
|
7
|
+
*
|
|
8
|
+
* No `requiredEnv` is enforced because OpenCode supports many providers
|
|
9
|
+
* and login-based auth — pre-configure via `opencode auth login` or set
|
|
10
|
+
* the provider key matching your configured model.
|
|
11
|
+
*/
|
|
12
|
+
export declare function createOpenCodeAdapter(): AgentAdapter;
|
|
13
|
+
//# sourceMappingURL=opencode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../../src/adapters/opencode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGtD;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,IAAI,YAAY,CAMpD"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { createAcpBasedAdapter } from "./base/acp-adapter.js";
|
|
2
|
+
/**
|
|
3
|
+
* OpenCode (sst/opencode) via ACP — `opencode acp` starts an ACP server
|
|
4
|
+
* over stdio. OpenCode is BYOK; it reads provider credentials from
|
|
5
|
+
* `opencode auth login` (stored in ~/.local/share/opencode/auth.json) or
|
|
6
|
+
* from common provider env vars (ANTHROPIC_API_KEY, OPENAI_API_KEY, etc.).
|
|
7
|
+
*
|
|
8
|
+
* No `requiredEnv` is enforced because OpenCode supports many providers
|
|
9
|
+
* and login-based auth — pre-configure via `opencode auth login` or set
|
|
10
|
+
* the provider key matching your configured model.
|
|
11
|
+
*/
|
|
12
|
+
export function createOpenCodeAdapter() {
|
|
13
|
+
return createAcpBasedAdapter({
|
|
14
|
+
name: "opencode",
|
|
15
|
+
cliCommand: "opencode",
|
|
16
|
+
buildArgs: () => ["acp"],
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=opencode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../src/adapters/opencode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;;;;;;;;GASG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO,qBAAqB,CAAC;QAC3B,IAAI,EAAE,UAAU;QAChB,UAAU,EAAE,UAAU;QACtB,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC;KACzB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { AgentAdapter } from "../types/agent.js";
|
|
2
|
+
/**
|
|
3
|
+
* OpenHands via ACP — `openhands acp`. OpenHands is BYOK and reads LLM
|
|
4
|
+
* credentials from ~/.openhands/settings.json; pre-configure once with
|
|
5
|
+
* `openhands /settings` before headless use. No env var is enforced.
|
|
6
|
+
*/
|
|
7
|
+
export declare function createOpenHandsAdapter(): AgentAdapter;
|
|
8
|
+
//# sourceMappingURL=openhands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openhands.d.ts","sourceRoot":"","sources":["../../src/adapters/openhands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGtD;;;;GAIG;AACH,wBAAgB,sBAAsB,IAAI,YAAY,CAMrD"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { createAcpBasedAdapter } from "./base/acp-adapter.js";
|
|
2
|
+
/**
|
|
3
|
+
* OpenHands via ACP — `openhands acp`. OpenHands is BYOK and reads LLM
|
|
4
|
+
* credentials from ~/.openhands/settings.json; pre-configure once with
|
|
5
|
+
* `openhands /settings` before headless use. No env var is enforced.
|
|
6
|
+
*/
|
|
7
|
+
export function createOpenHandsAdapter() {
|
|
8
|
+
return createAcpBasedAdapter({
|
|
9
|
+
name: "openhands",
|
|
10
|
+
cliCommand: "openhands",
|
|
11
|
+
buildArgs: () => ["acp"],
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=openhands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openhands.js","sourceRoot":"","sources":["../../src/adapters/openhands.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;;;GAIG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO,qBAAqB,CAAC;QAC3B,IAAI,EAAE,WAAW;QACjB,UAAU,EAAE,WAAW;QACvB,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC;KACzB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { AgentAdapter } from "../types/agent.js";
|
|
2
|
+
/**
|
|
3
|
+
* Poolside via ACP — `pool acp`. Requires POOLSIDE_API_KEY (issued from
|
|
4
|
+
* the Poolside console).
|
|
5
|
+
*/
|
|
6
|
+
export declare function createPoolsideAdapter(): AgentAdapter;
|
|
7
|
+
//# sourceMappingURL=poolside.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"poolside.d.ts","sourceRoot":"","sources":["../../src/adapters/poolside.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGtD;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,YAAY,CAOpD"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { createAcpBasedAdapter } from "./base/acp-adapter.js";
|
|
2
|
+
/**
|
|
3
|
+
* Poolside via ACP — `pool acp`. Requires POOLSIDE_API_KEY (issued from
|
|
4
|
+
* the Poolside console).
|
|
5
|
+
*/
|
|
6
|
+
export function createPoolsideAdapter() {
|
|
7
|
+
return createAcpBasedAdapter({
|
|
8
|
+
name: "poolside",
|
|
9
|
+
cliCommand: "pool",
|
|
10
|
+
requiredEnv: () => ["POOLSIDE_API_KEY"],
|
|
11
|
+
buildArgs: () => ["acp"],
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=poolside.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"poolside.js","sourceRoot":"","sources":["../../src/adapters/poolside.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;;GAGG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO,qBAAqB,CAAC;QAC3B,IAAI,EAAE,UAAU;QAChB,UAAU,EAAE,MAAM;QAClB,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,kBAAkB,CAAC;QACvC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC;KACzB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { AgentAdapter } from "../types/agent.js";
|
|
2
|
+
/**
|
|
3
|
+
* Qoder CLI via ACP — `qodercli --acp`. Requires QODER_PERSONAL_ACCESS_TOKEN
|
|
4
|
+
* (alternatively, run `qodercli /login` once interactively).
|
|
5
|
+
*/
|
|
6
|
+
export declare function createQoderAdapter(): AgentAdapter;
|
|
7
|
+
//# sourceMappingURL=qoder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qoder.d.ts","sourceRoot":"","sources":["../../src/adapters/qoder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGtD;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,YAAY,CAOjD"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { createAcpBasedAdapter } from "./base/acp-adapter.js";
|
|
2
|
+
/**
|
|
3
|
+
* Qoder CLI via ACP — `qodercli --acp`. Requires QODER_PERSONAL_ACCESS_TOKEN
|
|
4
|
+
* (alternatively, run `qodercli /login` once interactively).
|
|
5
|
+
*/
|
|
6
|
+
export function createQoderAdapter() {
|
|
7
|
+
return createAcpBasedAdapter({
|
|
8
|
+
name: "qoder",
|
|
9
|
+
cliCommand: "qodercli",
|
|
10
|
+
requiredEnv: () => ["QODER_PERSONAL_ACCESS_TOKEN"],
|
|
11
|
+
buildArgs: () => ["--acp"],
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=qoder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qoder.js","sourceRoot":"","sources":["../../src/adapters/qoder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;;GAGG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,qBAAqB,CAAC;QAC3B,IAAI,EAAE,OAAO;QACb,UAAU,EAAE,UAAU;QACtB,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,6BAA6B,CAAC;QAClD,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC;KAC3B,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { AgentAdapter } from "../types/agent.js";
|
|
2
|
+
/**
|
|
3
|
+
* Qwen Code (QwenLM/qwen-code) via ACP — `qwen --experimental-acp`. Qwen Code
|
|
4
|
+
* is BYOK and reads OPENAI_API_KEY, DASHSCOPE_API_KEY, ANTHROPIC_API_KEY, or
|
|
5
|
+
* GEMINI_API_KEY depending on the configured provider, plus optional
|
|
6
|
+
* OPENAI_BASE_URL / OPENAI_MODEL overrides for OpenAI-compatible endpoints.
|
|
7
|
+
*
|
|
8
|
+
* No env var is enforced — Qwen Code picks whichever provider matches the
|
|
9
|
+
* configured model.
|
|
10
|
+
*
|
|
11
|
+
* Note: the flag is `--experimental-acp` today. Qwen issue #1350 proposes
|
|
12
|
+
* graduating it to `--acp`; revisit when that lands.
|
|
13
|
+
*/
|
|
14
|
+
export declare function createQwenCodeAdapter(): AgentAdapter;
|
|
15
|
+
//# sourceMappingURL=qwen-code.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qwen-code.d.ts","sourceRoot":"","sources":["../../src/adapters/qwen-code.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGtD;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,IAAI,YAAY,CAmCpD"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import { createAcpBasedAdapter } from "./base/acp-adapter.js";
|
|
4
|
+
/**
|
|
5
|
+
* Qwen Code (QwenLM/qwen-code) via ACP — `qwen --experimental-acp`. Qwen Code
|
|
6
|
+
* is BYOK and reads OPENAI_API_KEY, DASHSCOPE_API_KEY, ANTHROPIC_API_KEY, or
|
|
7
|
+
* GEMINI_API_KEY depending on the configured provider, plus optional
|
|
8
|
+
* OPENAI_BASE_URL / OPENAI_MODEL overrides for OpenAI-compatible endpoints.
|
|
9
|
+
*
|
|
10
|
+
* No env var is enforced — Qwen Code picks whichever provider matches the
|
|
11
|
+
* configured model.
|
|
12
|
+
*
|
|
13
|
+
* Note: the flag is `--experimental-acp` today. Qwen issue #1350 proposes
|
|
14
|
+
* graduating it to `--acp`; revisit when that lands.
|
|
15
|
+
*/
|
|
16
|
+
export function createQwenCodeAdapter() {
|
|
17
|
+
return createAcpBasedAdapter({
|
|
18
|
+
name: "qwen-code",
|
|
19
|
+
cliCommand: "qwen",
|
|
20
|
+
isolationEnv: (workspace) => ({
|
|
21
|
+
QWEN_CODE_HOME: path.join(workspace, ".qwen"),
|
|
22
|
+
QWEN_TELEMETRY_ENABLED: "false",
|
|
23
|
+
}),
|
|
24
|
+
buildArgs: (input) => {
|
|
25
|
+
const args = ["--experimental-acp"];
|
|
26
|
+
if (input.config.model)
|
|
27
|
+
args.push("--model", input.config.model);
|
|
28
|
+
const flags = input.config.flags ?? {};
|
|
29
|
+
for (const [key, value] of Object.entries(flags)) {
|
|
30
|
+
if (value === true)
|
|
31
|
+
args.push(`--${key}`);
|
|
32
|
+
else if (value !== false)
|
|
33
|
+
args.push(`--${key}`, String(value));
|
|
34
|
+
}
|
|
35
|
+
return args;
|
|
36
|
+
},
|
|
37
|
+
prepare: (ctx) => {
|
|
38
|
+
const qwenHome = ctx.env?.QWEN_CODE_HOME;
|
|
39
|
+
if (!qwenHome)
|
|
40
|
+
return;
|
|
41
|
+
fs.mkdirSync(qwenHome, { recursive: true });
|
|
42
|
+
// Disable context discovery — AXIS workspaces are ephemeral temp dirs
|
|
43
|
+
const settings = {
|
|
44
|
+
context: {
|
|
45
|
+
discoveryMaxDirs: 0,
|
|
46
|
+
memoryBoundaryMarkers: [],
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
fs.writeFileSync(path.join(qwenHome, "settings.json"), JSON.stringify(settings, null, 2) + "\n");
|
|
50
|
+
},
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=qwen-code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qwen-code.js","sourceRoot":"","sources":["../../src/adapters/qwen-code.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO,qBAAqB,CAAC;QAC3B,IAAI,EAAE,WAAW;QACjB,UAAU,EAAE,MAAM;QAElB,YAAY,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YAC5B,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC;YAC7C,sBAAsB,EAAE,OAAO;SAChC,CAAC;QAEF,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;YACnB,MAAM,IAAI,GAAG,CAAC,oBAAoB,CAAC,CAAC;YACpC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK;gBAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACjE,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;YACvC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjD,IAAI,KAAK,KAAK,IAAI;oBAAE,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;qBACrC,IAAI,KAAK,KAAK,KAAK;oBAAE,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACjE,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACf,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC;YACzC,IAAI,CAAC,QAAQ;gBAAE,OAAO;YACtB,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5C,sEAAsE;YACtE,MAAM,QAAQ,GAAG;gBACf,OAAO,EAAE;oBACP,gBAAgB,EAAE,CAAC;oBACnB,qBAAqB,EAAE,EAAE;iBAC1B;aACF,CAAC;YACF,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACnG,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/adapters/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/adapters/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAuDtD,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,YAAY,CAe5D;AAED,4CAA4C;AAC5C,wBAAgB,sBAAsB,IAAI,MAAM,EAAE,CAEjD;AAED,yCAAyC;AACzC,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI,CAEzE;AAED,kDAAkD;AAClD,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC"}
|