@agentex/agent 0.0.38 → 0.0.40
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 +44 -0
- package/README.md +47 -13
- package/dist/history/fs.d.ts.map +1 -1
- package/dist/history/fs.js +6 -12
- package/dist/history/fs.js.map +1 -1
- package/dist/providers/antigravity/codec.d.ts +4 -0
- package/dist/providers/antigravity/codec.d.ts.map +1 -0
- package/dist/providers/antigravity/codec.js +27 -0
- package/dist/providers/antigravity/codec.js.map +1 -0
- package/dist/providers/antigravity/connection.d.ts +100 -0
- package/dist/providers/antigravity/connection.d.ts.map +1 -0
- package/dist/providers/antigravity/connection.js +267 -0
- package/dist/providers/antigravity/connection.js.map +1 -0
- package/dist/providers/antigravity/discovery.d.ts +11 -0
- package/dist/providers/antigravity/discovery.d.ts.map +1 -0
- package/dist/providers/antigravity/discovery.js +92 -0
- package/dist/providers/antigravity/discovery.js.map +1 -0
- package/dist/providers/antigravity/execute.d.ts +9 -0
- package/dist/providers/antigravity/execute.d.ts.map +1 -0
- package/dist/providers/antigravity/execute.js +206 -0
- package/dist/providers/antigravity/execute.js.map +1 -0
- package/dist/providers/antigravity/index.d.ts +12 -0
- package/dist/providers/antigravity/index.d.ts.map +1 -0
- package/dist/providers/antigravity/index.js +46 -0
- package/dist/providers/antigravity/index.js.map +1 -0
- package/dist/providers/antigravity/parse.d.ts +114 -0
- package/dist/providers/antigravity/parse.d.ts.map +1 -0
- package/dist/providers/antigravity/parse.js +369 -0
- package/dist/providers/antigravity/parse.js.map +1 -0
- package/dist/providers/antigravity/probe.d.ts +3 -0
- package/dist/providers/antigravity/probe.d.ts.map +1 -0
- package/dist/providers/antigravity/probe.js +84 -0
- package/dist/providers/antigravity/probe.js.map +1 -0
- package/dist/providers/antigravity/runtime.d.ts +30 -0
- package/dist/providers/antigravity/runtime.d.ts.map +1 -0
- package/dist/providers/antigravity/runtime.js +69 -0
- package/dist/providers/antigravity/runtime.js.map +1 -0
- package/dist/providers/antigravity/session.d.ts +7 -0
- package/dist/providers/antigravity/session.d.ts.map +1 -0
- package/dist/providers/antigravity/session.js +317 -0
- package/dist/providers/antigravity/session.js.map +1 -0
- package/dist/providers/claude/attach.d.ts.map +1 -1
- package/dist/providers/claude/attach.js +4 -6
- package/dist/providers/claude/attach.js.map +1 -1
- package/dist/providers/claude/transcript.d.ts.map +1 -1
- package/dist/providers/claude/transcript.js +9 -20
- package/dist/providers/claude/transcript.js.map +1 -1
- package/dist/providers/codex/attach.d.ts.map +1 -1
- package/dist/providers/codex/attach.js +4 -0
- package/dist/providers/codex/attach.js.map +1 -1
- package/dist/providers/codex/history.d.ts.map +1 -1
- package/dist/providers/codex/history.js +11 -0
- package/dist/providers/codex/history.js.map +1 -1
- package/dist/providers/codex/transcript-normalize.d.ts +12 -3
- package/dist/providers/codex/transcript-normalize.d.ts.map +1 -1
- package/dist/providers/codex/transcript-normalize.js +87 -10
- package/dist/providers/codex/transcript-normalize.js.map +1 -1
- package/dist/providers/codex/transcript.d.ts.map +1 -1
- package/dist/providers/codex/transcript.js +5 -10
- package/dist/providers/codex/transcript.js.map +1 -1
- package/dist/providers/codex/usage-scanner.d.ts.map +1 -1
- package/dist/providers/codex/usage-scanner.js +4 -6
- package/dist/providers/codex/usage-scanner.js.map +1 -1
- package/dist/providers/gemini/index.d.ts.map +1 -1
- package/dist/providers/gemini/index.js +6 -0
- package/dist/providers/gemini/index.js.map +1 -1
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +2 -0
- package/dist/registry.js.map +1 -1
- package/dist/types.d.ts +6 -5
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/auth.d.ts +1 -1
- package/dist/utils/auth.d.ts.map +1 -1
- package/dist/utils/auth.js +79 -1
- package/dist/utils/auth.js.map +1 -1
- package/dist/utils/binary.d.ts.map +1 -1
- package/dist/utils/binary.js +10 -0
- package/dist/utils/binary.js.map +1 -1
- package/dist/utils/instructions.d.ts.map +1 -1
- package/dist/utils/instructions.js +12 -9
- package/dist/utils/instructions.js.map +1 -1
- package/dist/utils/jsonl-lines.d.ts +35 -0
- package/dist/utils/jsonl-lines.d.ts.map +1 -0
- package/dist/utils/jsonl-lines.js +61 -0
- package/dist/utils/jsonl-lines.js.map +1 -0
- package/dist/utils/runtime-homes.d.ts.map +1 -1
- package/dist/utils/runtime-homes.js +4 -0
- package/dist/utils/runtime-homes.js.map +1 -1
- package/dist/utils/skills.d.ts +3 -3
- package/dist/utils/skills.d.ts.map +1 -1
- package/dist/utils/skills.js +16 -2
- package/dist/utils/skills.js.map +1 -1
- package/package.json +3 -2
- package/src/history/fs.ts +6 -12
- package/src/providers/antigravity/codec.ts +29 -0
- package/src/providers/antigravity/connection.ts +304 -0
- package/src/providers/antigravity/discovery.ts +90 -0
- package/src/providers/antigravity/execute.ts +214 -0
- package/src/providers/antigravity/index.ts +48 -0
- package/src/providers/antigravity/parse.ts +439 -0
- package/src/providers/antigravity/probe.ts +89 -0
- package/src/providers/antigravity/runtime.ts +64 -0
- package/src/providers/antigravity/session.ts +359 -0
- package/src/providers/claude/attach.ts +4 -6
- package/src/providers/claude/transcript.ts +9 -22
- package/src/providers/codex/attach.ts +4 -0
- package/src/providers/codex/history.ts +11 -0
- package/src/providers/codex/transcript-normalize.ts +85 -10
- package/src/providers/codex/transcript.ts +5 -11
- package/src/providers/codex/usage-scanner.ts +4 -7
- package/src/providers/gemini/index.ts +6 -0
- package/src/registry.ts +2 -0
- package/src/types.ts +6 -5
- package/src/utils/auth.ts +82 -1
- package/src/utils/binary.ts +10 -0
- package/src/utils/instructions.ts +10 -9
- package/src/utils/jsonl-lines.ts +80 -0
- package/src/utils/runtime-homes.ts +4 -0
- package/src/utils/skills.ts +17 -4
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { killProcessTree } from "../../utils/process.js";
|
|
3
|
+
import { ANTIGRAVITY_PROVIDER_TYPE, isAgyAuthRequired, parseAgyErrorLine, } from "./parse.js";
|
|
4
|
+
import { AGY_LOGIN_COMMAND } from "./runtime.js";
|
|
5
|
+
const STDERR_TAIL_BYTES = 16 * 1024;
|
|
6
|
+
/**
|
|
7
|
+
* One headless `agy` process speaking `stream-json` in both directions.
|
|
8
|
+
*
|
|
9
|
+
* Every stdout line is parsed and dispatched through a single promise chain,
|
|
10
|
+
* so `onEvent` handlers run strictly in wire order and a turn's waiter
|
|
11
|
+
* resolves only after the handler for its `result` event has settled.
|
|
12
|
+
*/
|
|
13
|
+
export class AgyConnection {
|
|
14
|
+
options;
|
|
15
|
+
pid;
|
|
16
|
+
authRequired = false;
|
|
17
|
+
agyError = null;
|
|
18
|
+
child;
|
|
19
|
+
chain = Promise.resolve();
|
|
20
|
+
stdoutBuffer = "";
|
|
21
|
+
stderrLineBuffer = "";
|
|
22
|
+
stderrTail = "";
|
|
23
|
+
exitInfo = null;
|
|
24
|
+
finalized = false;
|
|
25
|
+
waiters = [];
|
|
26
|
+
exitWaiters = [];
|
|
27
|
+
constructor(options) {
|
|
28
|
+
this.options = options;
|
|
29
|
+
this.child = spawn(options.command, options.args, {
|
|
30
|
+
cwd: options.cwd,
|
|
31
|
+
env: options.env,
|
|
32
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
33
|
+
shell: false,
|
|
34
|
+
// A process group lets interrupt/terminate reach the commands agy runs.
|
|
35
|
+
detached: process.platform !== "win32",
|
|
36
|
+
});
|
|
37
|
+
this.pid = this.child.pid ?? null;
|
|
38
|
+
this.child.stdin?.on("error", () => { });
|
|
39
|
+
this.child.stdout?.setEncoding("utf-8");
|
|
40
|
+
this.child.stderr?.setEncoding("utf-8");
|
|
41
|
+
this.child.stdout?.on("data", (chunk) => this.onStdout(chunk));
|
|
42
|
+
this.child.stderr?.on("data", (chunk) => this.onStderr(chunk));
|
|
43
|
+
this.child.on("error", (err) => {
|
|
44
|
+
this.appendStderrTail(`${err.message}\n`);
|
|
45
|
+
this.finalize(null, null);
|
|
46
|
+
});
|
|
47
|
+
this.child.on("close", (code, signal) => this.finalize(code, signal ?? null));
|
|
48
|
+
}
|
|
49
|
+
get alive() {
|
|
50
|
+
return this.exitInfo === null;
|
|
51
|
+
}
|
|
52
|
+
/** Exit status, or null while the process runs. */
|
|
53
|
+
get exit() {
|
|
54
|
+
return this.exitInfo;
|
|
55
|
+
}
|
|
56
|
+
/** Last ~16KB of stderr. */
|
|
57
|
+
get stderr() {
|
|
58
|
+
return this.stderrTail;
|
|
59
|
+
}
|
|
60
|
+
/** Resolves once the process has exited and every queued event was dispatched. */
|
|
61
|
+
exited() {
|
|
62
|
+
if (this.finalized)
|
|
63
|
+
return this.chain;
|
|
64
|
+
return new Promise((resolve) => this.exitWaiters.push(resolve));
|
|
65
|
+
}
|
|
66
|
+
/** Send one user message. Resolve it with `nextTurn()`. */
|
|
67
|
+
write(text) {
|
|
68
|
+
if (!this.alive || !this.child.stdin || this.child.stdin.destroyed)
|
|
69
|
+
return;
|
|
70
|
+
this.child.stdin.write(`${JSON.stringify({ event: "user", message: { content: text } })}\n`);
|
|
71
|
+
}
|
|
72
|
+
/** Close stdin. `agy` finishes the current turn and exits. */
|
|
73
|
+
endInput() {
|
|
74
|
+
try {
|
|
75
|
+
this.child.stdin?.end();
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
/* already closed */
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/** Resolves with the next `result` event, or with the exit when no result comes. */
|
|
82
|
+
nextTurn() {
|
|
83
|
+
if (this.finalized)
|
|
84
|
+
return Promise.resolve(this.outcome(null));
|
|
85
|
+
return new Promise((resolve) => this.waiters.push(resolve));
|
|
86
|
+
}
|
|
87
|
+
/** Signal the whole process group. */
|
|
88
|
+
signal(signal) {
|
|
89
|
+
if (this.pid != null && this.alive)
|
|
90
|
+
killProcessTree(this.pid, signal);
|
|
91
|
+
}
|
|
92
|
+
/** True when the process exited within `ms`. */
|
|
93
|
+
async waitForExit(ms) {
|
|
94
|
+
return (await within(this.exited().then(() => true), ms)) === true;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Stop the process: close stdin and give it a moment to exit on its own
|
|
98
|
+
* (an idle `agy` flushes its conversation history and exits), then
|
|
99
|
+
* SIGTERM, then SIGKILL after `graceSec`.
|
|
100
|
+
*/
|
|
101
|
+
async terminate(graceSec = 5, idleWaitMs = 1000) {
|
|
102
|
+
if (this.finalized)
|
|
103
|
+
return;
|
|
104
|
+
this.endInput();
|
|
105
|
+
if (idleWaitMs > 0 && await this.waitForExit(idleWaitMs))
|
|
106
|
+
return;
|
|
107
|
+
this.signal("SIGTERM");
|
|
108
|
+
if (await this.waitForExit(graceSec * 1000))
|
|
109
|
+
return;
|
|
110
|
+
this.signal("SIGKILL");
|
|
111
|
+
await this.waitForExit(1000);
|
|
112
|
+
}
|
|
113
|
+
onStdout(chunk) {
|
|
114
|
+
this.stdoutBuffer += chunk;
|
|
115
|
+
const lines = this.stdoutBuffer.split("\n");
|
|
116
|
+
this.stdoutBuffer = lines.pop() ?? "";
|
|
117
|
+
for (const line of lines)
|
|
118
|
+
this.enqueueLine(line);
|
|
119
|
+
}
|
|
120
|
+
enqueueLine(rawLine) {
|
|
121
|
+
const line = rawLine.replace(/\r$/, "");
|
|
122
|
+
if (!line.trim())
|
|
123
|
+
return;
|
|
124
|
+
this.chain = this.chain.then(async () => {
|
|
125
|
+
await this.emitOutput("stdout", `${line}\n`);
|
|
126
|
+
const parsed = this.options.parser.parseLine(line);
|
|
127
|
+
for (const event of parsed.events)
|
|
128
|
+
await this.emitEvent(event);
|
|
129
|
+
if (parsed.result)
|
|
130
|
+
this.waiters.shift()?.(this.outcome(parsed.result));
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
onStderr(chunk) {
|
|
134
|
+
this.appendStderrTail(chunk);
|
|
135
|
+
this.chain = this.chain.then(() => this.emitOutput("stderr", chunk));
|
|
136
|
+
this.stderrLineBuffer += chunk;
|
|
137
|
+
const lines = this.stderrLineBuffer.split("\n");
|
|
138
|
+
this.stderrLineBuffer = lines.pop() ?? "";
|
|
139
|
+
for (const line of lines)
|
|
140
|
+
this.inspectStderrLine(line);
|
|
141
|
+
// The sign-in prompt can sit on an unterminated line while agy waits.
|
|
142
|
+
if (!this.authRequired && isAgyAuthRequired(this.stderrLineBuffer))
|
|
143
|
+
this.onAuthRequired(this.stderrLineBuffer);
|
|
144
|
+
}
|
|
145
|
+
inspectStderrLine(line) {
|
|
146
|
+
const report = parseAgyErrorLine(line);
|
|
147
|
+
if (report)
|
|
148
|
+
this.agyError = report;
|
|
149
|
+
if (!this.authRequired && isAgyAuthRequired(line))
|
|
150
|
+
this.onAuthRequired(line);
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* A headless run without a cached sign-in prints a login URL and waits a
|
|
154
|
+
* full minute for a code nobody can paste. Fail fast instead: report it
|
|
155
|
+
* and stop the process.
|
|
156
|
+
*/
|
|
157
|
+
onAuthRequired(message) {
|
|
158
|
+
this.authRequired = true;
|
|
159
|
+
const event = {
|
|
160
|
+
type: "auth_required",
|
|
161
|
+
httpStatus: null,
|
|
162
|
+
reason: "missing",
|
|
163
|
+
loginCommand: AGY_LOGIN_COMMAND,
|
|
164
|
+
message: message.trim() || "Antigravity CLI requires sign-in.",
|
|
165
|
+
timestamp: new Date().toISOString(),
|
|
166
|
+
providerType: ANTIGRAVITY_PROVIDER_TYPE,
|
|
167
|
+
sessionId: this.options.parser.conversationId,
|
|
168
|
+
messageId: null,
|
|
169
|
+
eventId: null,
|
|
170
|
+
turnId: null,
|
|
171
|
+
parentToolCallId: null,
|
|
172
|
+
raw: { stderr: message },
|
|
173
|
+
};
|
|
174
|
+
this.chain = this.chain.then(() => this.emitEvent(event));
|
|
175
|
+
this.signal("SIGTERM");
|
|
176
|
+
}
|
|
177
|
+
appendStderrTail(chunk) {
|
|
178
|
+
this.stderrTail = (this.stderrTail + chunk).slice(-STDERR_TAIL_BYTES);
|
|
179
|
+
}
|
|
180
|
+
finalize(code, signal) {
|
|
181
|
+
if (this.exitInfo === null)
|
|
182
|
+
this.exitInfo = { code, signal };
|
|
183
|
+
if (this.finalized)
|
|
184
|
+
return;
|
|
185
|
+
this.finalized = true;
|
|
186
|
+
if (this.stdoutBuffer.trim())
|
|
187
|
+
this.enqueueLine(this.stdoutBuffer);
|
|
188
|
+
this.stdoutBuffer = "";
|
|
189
|
+
if (this.stderrLineBuffer.trim())
|
|
190
|
+
this.inspectStderrLine(this.stderrLineBuffer);
|
|
191
|
+
this.stderrLineBuffer = "";
|
|
192
|
+
this.chain = this.chain.then(() => {
|
|
193
|
+
for (const waiter of this.waiters.splice(0))
|
|
194
|
+
waiter(this.outcome(null));
|
|
195
|
+
for (const waiter of this.exitWaiters.splice(0))
|
|
196
|
+
waiter();
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
outcome(result) {
|
|
200
|
+
return {
|
|
201
|
+
result,
|
|
202
|
+
exited: this.exitInfo !== null,
|
|
203
|
+
exitCode: this.exitInfo?.code ?? null,
|
|
204
|
+
signal: this.exitInfo?.signal ?? null,
|
|
205
|
+
authRequired: this.authRequired,
|
|
206
|
+
agyError: this.agyError,
|
|
207
|
+
stderr: this.stderrTail,
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
async emitEvent(event) {
|
|
211
|
+
if (!this.options.onEvent)
|
|
212
|
+
return;
|
|
213
|
+
try {
|
|
214
|
+
await this.options.onEvent(event);
|
|
215
|
+
}
|
|
216
|
+
catch {
|
|
217
|
+
/* a throwing handler must not break the stream */
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
async emitOutput(stream, chunk) {
|
|
221
|
+
if (!this.options.onOutput)
|
|
222
|
+
return;
|
|
223
|
+
try {
|
|
224
|
+
await this.options.onOutput(stream, chunk);
|
|
225
|
+
}
|
|
226
|
+
catch {
|
|
227
|
+
/* swallow */
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
/** First meaningful stderr line, skipping the sign-in URL noise. */
|
|
232
|
+
export function firstAgyErrorLine(stderr) {
|
|
233
|
+
for (const raw of stderr.split(/\r?\n/)) {
|
|
234
|
+
const line = raw.trim();
|
|
235
|
+
if (!line || /^https?:\/\//.test(line) || line.startsWith("AGY_ERROR:"))
|
|
236
|
+
continue;
|
|
237
|
+
return line.replace(/^error:\s*/i, "");
|
|
238
|
+
}
|
|
239
|
+
return null;
|
|
240
|
+
}
|
|
241
|
+
/** Waits for `promise` up to `ms`; resolves null on timeout. */
|
|
242
|
+
export function within(promise, ms) {
|
|
243
|
+
return new Promise((resolve) => {
|
|
244
|
+
const timer = setTimeout(() => resolve(null), ms);
|
|
245
|
+
promise.then((value) => {
|
|
246
|
+
clearTimeout(timer);
|
|
247
|
+
resolve(value);
|
|
248
|
+
}, () => {
|
|
249
|
+
clearTimeout(timer);
|
|
250
|
+
resolve(null);
|
|
251
|
+
});
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Interrupt the running turn like Ctrl+C would: SIGINT the process group,
|
|
256
|
+
* give agy a moment to report the turn as INTERRUPTED, and stop the process
|
|
257
|
+
* if it does not. Resolves with whatever outcome arrived.
|
|
258
|
+
*/
|
|
259
|
+
export async function interruptAgyTurn(connection, pending, graceSec = 5) {
|
|
260
|
+
connection.signal("SIGINT");
|
|
261
|
+
const settled = await within(pending, 3000);
|
|
262
|
+
if (settled)
|
|
263
|
+
return settled;
|
|
264
|
+
await connection.terminate(graceSec, 0);
|
|
265
|
+
return within(pending, 2000);
|
|
266
|
+
}
|
|
267
|
+
//# sourceMappingURL=connection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../../src/providers/antigravity/connection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { AgentMode, ListModelsOptions, ListModesOptions, ProviderModel } from "../../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Parse `agy models`. The JSON form is preferred when a build supports it;
|
|
4
|
+
* the text form is one model per line: a slug, two or more spaces, then the
|
|
5
|
+
* display name, for example `gemini-3.1-pro-high Gemini 3.1 Pro (High)`.
|
|
6
|
+
*/
|
|
7
|
+
export declare function parseAntigravityModels(output: string): ProviderModel[];
|
|
8
|
+
export declare function listAntigravityModels(options?: ListModelsOptions): Promise<ProviderModel[]>;
|
|
9
|
+
/** Antigravity's modes are a fixed set (`--mode`); listing them spawns nothing. */
|
|
10
|
+
export declare function listAntigravityModes(_options?: ListModesOptions): Promise<AgentMode[]>;
|
|
11
|
+
//# sourceMappingURL=discovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../../src/providers/antigravity/discovery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AA6BpG;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,EAAE,CAmBtE;AAED,wBAAsB,qBAAqB,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAErG;AA6BD,mFAAmF;AACnF,wBAAsB,oBAAoB,CAAC,QAAQ,GAAE,gBAAqB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAEhG"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { buildEnv, ensurePathInEnv } from "../../utils/env.js";
|
|
2
|
+
import { withModelCache } from "../../utils/model-cache.js";
|
|
3
|
+
import { runChildProcess } from "../../utils/process.js";
|
|
4
|
+
import { isAgyAuthRequired } from "./parse.js";
|
|
5
|
+
import { ANTIGRAVITY_MODES, AGY_SIGN_IN_MESSAGE, findAgyBinary } from "./runtime.js";
|
|
6
|
+
function rec(value) {
|
|
7
|
+
return value && typeof value === "object" && !Array.isArray(value) ? value : {};
|
|
8
|
+
}
|
|
9
|
+
function fromJson(output) {
|
|
10
|
+
try {
|
|
11
|
+
const parsed = JSON.parse(output);
|
|
12
|
+
const list = Array.isArray(parsed) ? parsed : rec(parsed)["models"];
|
|
13
|
+
if (!Array.isArray(list))
|
|
14
|
+
return null;
|
|
15
|
+
return list.map((value) => {
|
|
16
|
+
if (typeof value === "string")
|
|
17
|
+
return { id: value, name: value };
|
|
18
|
+
const model = rec(value);
|
|
19
|
+
const id = [model["slug"], model["id"], model["model"]].find((v) => typeof v === "string" && v.length > 0) ?? "";
|
|
20
|
+
const name = [model["display_name"], model["displayName"], model["name"], model["label"]]
|
|
21
|
+
.find((v) => typeof v === "string" && v.length > 0);
|
|
22
|
+
return { id, name: name ?? id };
|
|
23
|
+
}).filter((model) => model.id);
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Parse `agy models`. The JSON form is preferred when a build supports it;
|
|
31
|
+
* the text form is one model per line: a slug, two or more spaces, then the
|
|
32
|
+
* display name, for example `gemini-3.1-pro-high Gemini 3.1 Pro (High)`.
|
|
33
|
+
*/
|
|
34
|
+
export function parseAntigravityModels(output) {
|
|
35
|
+
const trimmed = output.trim();
|
|
36
|
+
if (!trimmed)
|
|
37
|
+
return [];
|
|
38
|
+
const json = trimmed.startsWith("{") || trimmed.startsWith("[") ? fromJson(trimmed) : null;
|
|
39
|
+
if (json?.length)
|
|
40
|
+
return json;
|
|
41
|
+
const seen = new Set();
|
|
42
|
+
const models = [];
|
|
43
|
+
for (const raw of trimmed.split(/\r?\n/)) {
|
|
44
|
+
const line = raw.replace(/^\s*(?:[*•>-]|→)\s*/, "").trim();
|
|
45
|
+
if (!line || /^(?:available\s+)?models?:?$/i.test(line) || /^fetching\b/i.test(line) || line === "...")
|
|
46
|
+
continue;
|
|
47
|
+
const match = line.match(/^([A-Za-z0-9][\w./:-]*)(?:\s{2,}|\t+)(.+)$/) ?? line.match(/^([A-Za-z0-9][\w./:-]*)$/);
|
|
48
|
+
const id = match?.[1];
|
|
49
|
+
if (!id || seen.has(id) || /^(?:error|warning|usage)$/i.test(id))
|
|
50
|
+
continue;
|
|
51
|
+
seen.add(id);
|
|
52
|
+
const name = match?.[2]?.replace(/\s*\((?:current|default|selected)\)\s*$/i, "").trim();
|
|
53
|
+
models.push({ id, name: name || id });
|
|
54
|
+
}
|
|
55
|
+
return models;
|
|
56
|
+
}
|
|
57
|
+
export async function listAntigravityModels(options = {}) {
|
|
58
|
+
return withModelCache("antigravity", options, options.cacheTtlMs, () => discoverAntigravityModels(options));
|
|
59
|
+
}
|
|
60
|
+
async function discoverAntigravityModels(options) {
|
|
61
|
+
const resolved = await findAgyBinary(options);
|
|
62
|
+
const env = buildEnv(options.env);
|
|
63
|
+
ensurePathInEnv(env);
|
|
64
|
+
const cwd = options.cwd ?? process.cwd();
|
|
65
|
+
let lastOutput = "";
|
|
66
|
+
for (const args of [["models", "--output-format", "json"], ["models"]]) {
|
|
67
|
+
const result = await runChildProcess({
|
|
68
|
+
runId: "antigravity-model-discovery",
|
|
69
|
+
command: resolved.bin,
|
|
70
|
+
args: [...resolved.prefixArgs, ...args],
|
|
71
|
+
cwd,
|
|
72
|
+
env,
|
|
73
|
+
timeoutSec: 20,
|
|
74
|
+
});
|
|
75
|
+
lastOutput = `${result.stdout}\n${result.stderr}`;
|
|
76
|
+
if (isAgyAuthRequired(lastOutput)) {
|
|
77
|
+
throw new Error(AGY_SIGN_IN_MESSAGE);
|
|
78
|
+
}
|
|
79
|
+
if (result.exitCode !== 0)
|
|
80
|
+
continue;
|
|
81
|
+
const models = parseAntigravityModels(result.stdout);
|
|
82
|
+
if (models.length)
|
|
83
|
+
return models;
|
|
84
|
+
}
|
|
85
|
+
const detail = lastOutput.split(/\r?\n/).map((line) => line.trim()).find((line) => /error/i.test(line));
|
|
86
|
+
throw new Error(detail ?? "The installed Antigravity CLI did not list any models");
|
|
87
|
+
}
|
|
88
|
+
/** Antigravity's modes are a fixed set (`--mode`); listing them spawns nothing. */
|
|
89
|
+
export async function listAntigravityModes(_options = {}) {
|
|
90
|
+
return ANTIGRAVITY_MODES.map((mode) => ({ ...mode }));
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=discovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../../src/providers/antigravity/discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ExecutionContext, ExecutionResult } from "../../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* One-shot Antigravity run: start `agy` in stream-json mode, write the prompt
|
|
4
|
+
* as a single NDJSON message, close stdin, and wait for the process to exit.
|
|
5
|
+
* The prompt travels over stdin, so it is never size-limited by argv or
|
|
6
|
+
* visible in `ps`.
|
|
7
|
+
*/
|
|
8
|
+
export declare function executeAntigravityProvider(ctx: ExecutionContext): Promise<ExecutionResult>;
|
|
9
|
+
//# sourceMappingURL=execute.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../src/providers/antigravity/execute.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAgC,MAAM,gBAAgB,CAAC;AAgBtG;;;;;GAKG;AACH,wBAAsB,0BAA0B,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CA+LhG"}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
import { detectAuth } from "../../utils/auth.js";
|
|
2
|
+
import { buildEnv, ensurePathInEnv } from "../../utils/env.js";
|
|
3
|
+
import { resolveInstructions } from "../../utils/instructions.js";
|
|
4
|
+
import { injectHomeSkills } from "../../utils/skills.js";
|
|
5
|
+
import { uuidv7 } from "../../utils/uuid.js";
|
|
6
|
+
import { prepareWorkspace } from "../../utils/workspace.js";
|
|
7
|
+
import { AgyConnection, firstAgyErrorLine, interruptAgyTurn } from "./connection.js";
|
|
8
|
+
import { AgyStreamParser, agyUsageRecord, classifyAgyFailure, mapAgyExecutionStatus, } from "./parse.js";
|
|
9
|
+
import { AGY_SIGN_IN_MESSAGE, buildAgyArgs, findAgyBinary, readAgyResumeId } from "./runtime.js";
|
|
10
|
+
/**
|
|
11
|
+
* One-shot Antigravity run: start `agy` in stream-json mode, write the prompt
|
|
12
|
+
* as a single NDJSON message, close stdin, and wait for the process to exit.
|
|
13
|
+
* The prompt travels over stdin, so it is never size-limited by argv or
|
|
14
|
+
* visible in `ps`.
|
|
15
|
+
*/
|
|
16
|
+
export async function executeAntigravityProvider(ctx) {
|
|
17
|
+
const runId = ctx.runId ?? uuidv7();
|
|
18
|
+
const startedAt = new Date().toISOString();
|
|
19
|
+
const startMs = Date.now();
|
|
20
|
+
const config = ctx.config ?? {};
|
|
21
|
+
const requestedModel = ctx.model ?? config.model ?? null;
|
|
22
|
+
let cwd = ctx.cwd ?? process.cwd();
|
|
23
|
+
const finish = (fields) => ({
|
|
24
|
+
runId,
|
|
25
|
+
exitCode: null,
|
|
26
|
+
signal: null,
|
|
27
|
+
startedAt,
|
|
28
|
+
completedAt: new Date().toISOString(),
|
|
29
|
+
durationMs: Date.now() - startMs,
|
|
30
|
+
errorMessage: null,
|
|
31
|
+
errorCode: null,
|
|
32
|
+
costUsd: null,
|
|
33
|
+
model: requestedModel,
|
|
34
|
+
summary: null,
|
|
35
|
+
sessionParams: null,
|
|
36
|
+
sessionDisplayId: null,
|
|
37
|
+
clearSession: false,
|
|
38
|
+
billingType: null,
|
|
39
|
+
...fields,
|
|
40
|
+
});
|
|
41
|
+
ctx.onLifecycle?.({ phase: "preparing", step: "binary" });
|
|
42
|
+
let binary;
|
|
43
|
+
try {
|
|
44
|
+
binary = await findAgyBinary({ cwd, ...(ctx.env ? { env: ctx.env } : {}), config });
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
const errorMessage = err instanceof Error ? err.message : "Antigravity CLI (agy) not found";
|
|
48
|
+
ctx.onLifecycle?.({ phase: "error", message: errorMessage });
|
|
49
|
+
return finish({ status: "failed", errorMessage, errorCode: "binary_not_found", model: null });
|
|
50
|
+
}
|
|
51
|
+
let workspace;
|
|
52
|
+
if (config.workspace) {
|
|
53
|
+
ctx.onLifecycle?.({ phase: "preparing", step: "workspace" });
|
|
54
|
+
workspace = await prepareWorkspace(cwd, config.workspace);
|
|
55
|
+
cwd = workspace.cwd;
|
|
56
|
+
}
|
|
57
|
+
ctx.onLifecycle?.({ phase: "preparing", step: "auth" });
|
|
58
|
+
const env = buildEnv(ctx.env);
|
|
59
|
+
ensurePathInEnv(env);
|
|
60
|
+
const billingType = detectAuth("antigravity", env).billingType;
|
|
61
|
+
const resumeId = readAgyResumeId(ctx.sessionParams, cwd);
|
|
62
|
+
ctx.onLifecycle?.({ phase: "preparing", step: "instructions" });
|
|
63
|
+
// A resumed conversation already carries its instructions.
|
|
64
|
+
const instructions = resumeId ? null : await resolveInstructions(config.instructionsFile);
|
|
65
|
+
const prompt = instructions ? `${instructions}\n\n${ctx.prompt}` : ctx.prompt;
|
|
66
|
+
if (config.skillDirs && config.skillDirs.length > 0) {
|
|
67
|
+
ctx.onLifecycle?.({ phase: "preparing", step: "skills" });
|
|
68
|
+
try {
|
|
69
|
+
await injectHomeSkills(config.skillDirs, "antigravity");
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
// Non-fatal
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
const parser = new AgyStreamParser({
|
|
76
|
+
includePartialMessages: config.includePartialMessages,
|
|
77
|
+
conversationId: resumeId,
|
|
78
|
+
});
|
|
79
|
+
const assistantText = [];
|
|
80
|
+
const onEvent = async (event) => {
|
|
81
|
+
if (event.type === "assistant")
|
|
82
|
+
assistantText.push(event.text);
|
|
83
|
+
await ctx.onEvent?.(event);
|
|
84
|
+
};
|
|
85
|
+
ctx.onLifecycle?.({ phase: "spawning" });
|
|
86
|
+
const connection = new AgyConnection({
|
|
87
|
+
command: binary.bin,
|
|
88
|
+
args: [...binary.prefixArgs, ...buildAgyArgs(config, { resumeId, model: requestedModel })],
|
|
89
|
+
cwd,
|
|
90
|
+
env,
|
|
91
|
+
parser,
|
|
92
|
+
onEvent,
|
|
93
|
+
...(ctx.onOutput ? { onOutput: ctx.onOutput } : {}),
|
|
94
|
+
});
|
|
95
|
+
if (connection.pid != null) {
|
|
96
|
+
ctx.onLifecycle?.({ phase: "running", pid: connection.pid });
|
|
97
|
+
ctx.onStart?.(connection.pid);
|
|
98
|
+
}
|
|
99
|
+
const pending = connection.nextTurn();
|
|
100
|
+
connection.write(prompt);
|
|
101
|
+
connection.endInput();
|
|
102
|
+
// Guards cover the whole run, including agy finishing background work
|
|
103
|
+
// after it delivers the answer.
|
|
104
|
+
let timer = null;
|
|
105
|
+
const guards = [];
|
|
106
|
+
if (config.timeoutSec && config.timeoutSec > 0) {
|
|
107
|
+
guards.push(new Promise((resolve) => { timer = setTimeout(() => resolve("timeout"), config.timeoutSec * 1000); }));
|
|
108
|
+
}
|
|
109
|
+
let onAbort = null;
|
|
110
|
+
if (ctx.signal) {
|
|
111
|
+
const signal = ctx.signal;
|
|
112
|
+
guards.push(new Promise((resolve) => {
|
|
113
|
+
if (signal.aborted)
|
|
114
|
+
resolve("aborted");
|
|
115
|
+
onAbort = () => resolve("aborted");
|
|
116
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
117
|
+
}));
|
|
118
|
+
}
|
|
119
|
+
let stopped = null;
|
|
120
|
+
let outcome;
|
|
121
|
+
const first = await Promise.race([pending, ...guards]);
|
|
122
|
+
if (first === "timeout" || first === "aborted") {
|
|
123
|
+
stopped = first;
|
|
124
|
+
outcome = await interruptAgyTurn(connection, pending, config.graceSec);
|
|
125
|
+
// The run is over either way; never leave the process behind.
|
|
126
|
+
await connection.terminate(config.graceSec);
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
outcome = first;
|
|
130
|
+
if (!outcome.exited) {
|
|
131
|
+
const ended = await Promise.race([connection.exited().then(() => "exited"), ...guards]);
|
|
132
|
+
if (ended !== "exited")
|
|
133
|
+
await connection.terminate(config.graceSec, 0);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
if (timer)
|
|
137
|
+
clearTimeout(timer);
|
|
138
|
+
if (onAbort && ctx.signal)
|
|
139
|
+
ctx.signal.removeEventListener("abort", onAbort);
|
|
140
|
+
// Exit status is final only once the process has gone.
|
|
141
|
+
await connection.waitForExit(1000);
|
|
142
|
+
const result = outcome?.result ?? null;
|
|
143
|
+
const authRequired = connection.authRequired;
|
|
144
|
+
const agyError = connection.agyError;
|
|
145
|
+
const stderr = connection.stderr;
|
|
146
|
+
const exitCode = connection.exit?.code ?? null;
|
|
147
|
+
const exitSignal = connection.exit?.signal ?? null;
|
|
148
|
+
let status;
|
|
149
|
+
let errorCode = null;
|
|
150
|
+
let errorMessage = null;
|
|
151
|
+
if (stopped) {
|
|
152
|
+
status = stopped;
|
|
153
|
+
errorCode = stopped;
|
|
154
|
+
errorMessage = stopped === "timeout" ? `Timed out after ${config.timeoutSec ?? 0}s` : "Run aborted";
|
|
155
|
+
}
|
|
156
|
+
else if (result) {
|
|
157
|
+
status = mapAgyExecutionStatus(result.status);
|
|
158
|
+
if (status !== "completed") {
|
|
159
|
+
errorCode = status === "aborted" ? "aborted" : authRequired ? "auth_required" : classifyAgyFailure(result, agyError);
|
|
160
|
+
errorMessage = errorCode === "auth_required"
|
|
161
|
+
? AGY_SIGN_IN_MESSAGE
|
|
162
|
+
: result.error ?? agyError?.message ?? `Antigravity run ended with ${result.status}`;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
else if (authRequired) {
|
|
166
|
+
status = "failed";
|
|
167
|
+
errorCode = "auth_required";
|
|
168
|
+
errorMessage = AGY_SIGN_IN_MESSAGE;
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
status = "failed";
|
|
172
|
+
errorCode = exitCode === 0 ? "incomplete_turn" : "agent_error";
|
|
173
|
+
errorMessage = agyError?.message
|
|
174
|
+
?? firstAgyErrorLine(stderr)
|
|
175
|
+
?? `Antigravity CLI exited with code ${exitCode ?? "null"} without a result`;
|
|
176
|
+
}
|
|
177
|
+
if (status === "completed")
|
|
178
|
+
ctx.onLifecycle?.({ phase: "completed" });
|
|
179
|
+
else if (status === "aborted")
|
|
180
|
+
ctx.onLifecycle?.({ phase: "cancelled" });
|
|
181
|
+
else
|
|
182
|
+
ctx.onLifecycle?.({ phase: "error", message: errorMessage ?? "Unknown error" });
|
|
183
|
+
const conversationId = parser.conversationId;
|
|
184
|
+
const model = parser.model ?? requestedModel;
|
|
185
|
+
const usage = agyUsageRecord(result?.turnUsage ?? null, model);
|
|
186
|
+
return finish({
|
|
187
|
+
exitCode,
|
|
188
|
+
signal: exitSignal,
|
|
189
|
+
status,
|
|
190
|
+
errorMessage,
|
|
191
|
+
errorCode,
|
|
192
|
+
...(usage ? { usage } : {}),
|
|
193
|
+
model,
|
|
194
|
+
summary: result?.response.trim() || assistantText.join("\n\n").trim() || null,
|
|
195
|
+
sessionParams: conversationId ? { sessionId: conversationId, cwd } : null,
|
|
196
|
+
sessionDisplayId: conversationId,
|
|
197
|
+
// A --conversation id agy could not find starts a new conversation.
|
|
198
|
+
clearSession: Boolean(resumeId && conversationId && conversationId !== resumeId),
|
|
199
|
+
billingType,
|
|
200
|
+
numTurns: result?.numTurns ?? null,
|
|
201
|
+
...(result?.deniedActions?.length ? { permissionDenials: result.deniedActions } : {}),
|
|
202
|
+
raw: result?.raw ?? null,
|
|
203
|
+
...(workspace ? { workspace } : {}),
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
//# sourceMappingURL=execute.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/providers/antigravity/execute.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ProviderModule } from "../../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Google Antigravity CLI (`agy`), the successor to Gemini CLI for Google
|
|
4
|
+
* accounts (Free, AI Pro, AI Ultra) since Gemini CLI stopped serving them on
|
|
5
|
+
* 2026-06-18. Driven through its headless `stream-json` mode, which keeps one
|
|
6
|
+
* process per session and resumes conversations with `--conversation`.
|
|
7
|
+
*
|
|
8
|
+
* Install: `curl -fsSL https://antigravity.google/cli/install.sh | bash`,
|
|
9
|
+
* then run `agy` once to sign in. Headless runs reuse the cached sign-in.
|
|
10
|
+
*/
|
|
11
|
+
export declare const antigravityProvider: ProviderModule;
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/antigravity/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,cAAc,EAAkB,MAAM,gBAAgB,CAAC;AAInF;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,EAAE,cAkCjC,CAAC"}
|