@agentex/agent 0.0.38 → 0.0.39
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 +28 -0
- package/README.md +45 -13
- 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/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/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/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/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/runtime-homes.ts +4 -0
- package/src/utils/skills.ts +17 -4
|
@@ -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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { resolveAuthForProvider } from "../../utils/auth.js";
|
|
2
|
+
import { antigravitySessionCodec } from "./codec.js";
|
|
3
|
+
/**
|
|
4
|
+
* Google Antigravity CLI (`agy`), the successor to Gemini CLI for Google
|
|
5
|
+
* accounts (Free, AI Pro, AI Ultra) since Gemini CLI stopped serving them on
|
|
6
|
+
* 2026-06-18. Driven through its headless `stream-json` mode, which keeps one
|
|
7
|
+
* process per session and resumes conversations with `--conversation`.
|
|
8
|
+
*
|
|
9
|
+
* Install: `curl -fsSL https://antigravity.google/cli/install.sh | bash`,
|
|
10
|
+
* then run `agy` once to sign in. Headless runs reuse the cached sign-in.
|
|
11
|
+
*/
|
|
12
|
+
export const antigravityProvider = {
|
|
13
|
+
type: "antigravity",
|
|
14
|
+
capabilities: {
|
|
15
|
+
sessions: true,
|
|
16
|
+
modelDiscovery: true,
|
|
17
|
+
quotaProbing: false,
|
|
18
|
+
mcp: false,
|
|
19
|
+
skills: true,
|
|
20
|
+
instructions: true,
|
|
21
|
+
workspace: true,
|
|
22
|
+
planMode: true,
|
|
23
|
+
concurrentSend: false,
|
|
24
|
+
cancelQueuedMessage: false,
|
|
25
|
+
stopTask: false,
|
|
26
|
+
modes: true,
|
|
27
|
+
resume: true,
|
|
28
|
+
modelVariants: false,
|
|
29
|
+
permissionRequests: false,
|
|
30
|
+
questionRequests: false,
|
|
31
|
+
upstreamProviderDisconnect: false,
|
|
32
|
+
sessionModelChange: false,
|
|
33
|
+
sessionVariantChange: false,
|
|
34
|
+
sessionEffortChange: false,
|
|
35
|
+
sessionModeChange: false,
|
|
36
|
+
},
|
|
37
|
+
// Everything below loads lazily on first use.
|
|
38
|
+
execute: async (ctx) => (await import("./execute.js")).executeAntigravityProvider(ctx),
|
|
39
|
+
createSession: async (ctx) => (await import("./session.js")).createAntigravitySession(ctx),
|
|
40
|
+
resolveAuth: (ctx) => resolveAuthForProvider("antigravity", ctx),
|
|
41
|
+
sessionCodec: antigravitySessionCodec,
|
|
42
|
+
listModels: (options) => import("./discovery.js").then((m) => m.listAntigravityModels(options)),
|
|
43
|
+
listModes: (options) => import("./discovery.js").then((m) => m.listAntigravityModes(options)),
|
|
44
|
+
probeCapabilities: (ctx) => import("./probe.js").then((m) => m.probeAntigravityCapabilities(ctx)),
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/antigravity/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAErD;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAmB;IACjD,IAAI,EAAE,aAAa;IACnB,YAAY,EAAE;QACZ,QAAQ,EAAE,IAAI;QACd,cAAc,EAAE,IAAI;QACpB,YAAY,EAAE,KAAK;QACnB,GAAG,EAAE,KAAK;QACV,MAAM,EAAE,IAAI;QACZ,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,IAAI;QACf,QAAQ,EAAE,IAAI;QACd,cAAc,EAAE,KAAK;QACrB,mBAAmB,EAAE,KAAK;QAC1B,QAAQ,EAAE,KAAK;QACf,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,IAAI;QACZ,aAAa,EAAE,KAAK;QACpB,kBAAkB,EAAE,KAAK;QACzB,gBAAgB,EAAE,KAAK;QACvB,0BAA0B,EAAE,KAAK;QACjC,kBAAkB,EAAE,KAAK;QACzB,oBAAoB,EAAE,KAAK;QAC3B,mBAAmB,EAAE,KAAK;QAC1B,iBAAiB,EAAE,KAAK;KACzB;IACD,8CAA8C;IAC9C,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,0BAA0B,CAAC,GAAG,CAAC;IACtF,aAAa,EAAE,KAAK,EAAE,GAAmB,EAAyB,EAAE,CAClE,CAAC,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,wBAAwB,CAAC,GAAG,CAAC;IAC9D,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,sBAAsB,CAAC,aAAa,EAAE,GAAG,CAAC;IAChE,YAAY,EAAE,uBAAuB;IACrC,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/F,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC7F,iBAAiB,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,4BAA4B,CAAC,GAAG,CAAC,CAAC;CAClG,CAAC"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import type { ExecutionStatus, StreamEvent, TokenUsage, TurnResult } from "../../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Parser for Antigravity CLI (`agy`) headless `stream-json` output.
|
|
4
|
+
*
|
|
5
|
+
* Wire contract (https://antigravity.google/docs/cli/headless): one `init`
|
|
6
|
+
* event per process, `step_update` events while a turn runs, and one `result`
|
|
7
|
+
* event per turn. Every line is `{ "event": <name>, <name>: { ... } }`.
|
|
8
|
+
*
|
|
9
|
+
* - `step_update.step_type` is a closed vocabulary; observed values are
|
|
10
|
+
* `user_input`, `agent_response`, `tool`, and `checkpoint`. A step is
|
|
11
|
+
* `ACTIVE` while it runs and `DONE` when it finishes. `agent_response`
|
|
12
|
+
* streams its text as `text_delta` fragments across ACTIVE updates and a
|
|
13
|
+
* final DONE (short replies arrive as a single DONE).
|
|
14
|
+
* - `result.usage`, `num_turns`, and `duration_seconds` are cumulative over
|
|
15
|
+
* the process's session; `response` covers only the turn that emitted it.
|
|
16
|
+
* The parser turns the cumulative counters back into per-turn deltas.
|
|
17
|
+
*
|
|
18
|
+
* The parser is stateful (text accumulates per step, usage is differenced
|
|
19
|
+
* per turn), so use one instance per `agy` process.
|
|
20
|
+
*/
|
|
21
|
+
export declare const ANTIGRAVITY_PROVIDER_TYPE = "antigravity";
|
|
22
|
+
/** Token counters as `agy` reports them. `output` includes `thinking`. */
|
|
23
|
+
export interface AgyUsage {
|
|
24
|
+
inputTokens: number;
|
|
25
|
+
outputTokens: number;
|
|
26
|
+
thinkingTokens: number;
|
|
27
|
+
cacheReadTokens: number;
|
|
28
|
+
totalTokens: number;
|
|
29
|
+
}
|
|
30
|
+
/** A parsed `result` event, with per-turn deltas alongside the raw totals. */
|
|
31
|
+
export interface AgyResult {
|
|
32
|
+
/** `SUCCESS`, `ERROR`, `CANCELED`, `INTERRUPTED`, `INVALID`, `WAITING`, or `RUNNING`. */
|
|
33
|
+
status: string;
|
|
34
|
+
/** Response text for the turn that emitted this result. */
|
|
35
|
+
response: string;
|
|
36
|
+
error: string | null;
|
|
37
|
+
conversationId: string | null;
|
|
38
|
+
/** Cumulative over the process's session. */
|
|
39
|
+
numTurns: number | null;
|
|
40
|
+
/** This turn's share of the cumulative `duration_seconds`, in ms. */
|
|
41
|
+
turnDurationMs: number | null;
|
|
42
|
+
/** Cumulative over the process's session. */
|
|
43
|
+
usage: AgyUsage | null;
|
|
44
|
+
/** This turn's share of the cumulative usage. */
|
|
45
|
+
turnUsage: AgyUsage | null;
|
|
46
|
+
/** Tools the CLI soft-denied because no permission rule allowed them. */
|
|
47
|
+
deniedActions: unknown[] | null;
|
|
48
|
+
structuredOutput: unknown;
|
|
49
|
+
raw: Record<string, unknown>;
|
|
50
|
+
}
|
|
51
|
+
/** `AGY_ERROR: {...}` stderr line printed when a turn fails on an agent or model API error. */
|
|
52
|
+
export interface AgyErrorReport {
|
|
53
|
+
message: string | null;
|
|
54
|
+
status: string | null;
|
|
55
|
+
code: number | string | null;
|
|
56
|
+
retryable: boolean | null;
|
|
57
|
+
raw: Record<string, unknown>;
|
|
58
|
+
}
|
|
59
|
+
export interface AgyStreamParserOptions {
|
|
60
|
+
/** Emit `assistant_delta` / `thinking_delta` events for streamed fragments. */
|
|
61
|
+
includePartialMessages?: boolean;
|
|
62
|
+
/** Conversation id already known (resume), used until the stream reports one. */
|
|
63
|
+
conversationId?: string | null;
|
|
64
|
+
}
|
|
65
|
+
export interface AgyParsedLine {
|
|
66
|
+
events: StreamEvent[];
|
|
67
|
+
result: AgyResult | null;
|
|
68
|
+
}
|
|
69
|
+
export declare function parseAgyUsage(value: unknown): AgyUsage | null;
|
|
70
|
+
/**
|
|
71
|
+
* Map `agy` token counters onto agentex `TokenUsage`. `input_tokens` already
|
|
72
|
+
* includes cache reads (like Codex), and `output_tokens` already includes
|
|
73
|
+
* thinking, so the counters pass through without re-adding anything.
|
|
74
|
+
*/
|
|
75
|
+
export declare function agyUsageToTokenUsage(usage: AgyUsage): TokenUsage;
|
|
76
|
+
/** Key a usage record by model. `agy` reports the model only when one was pinned. */
|
|
77
|
+
export declare function agyUsageRecord(usage: AgyUsage | null, model: string | null): Record<string, TokenUsage> | undefined;
|
|
78
|
+
export declare class AgyStreamParser {
|
|
79
|
+
conversationId: string | null;
|
|
80
|
+
model: string | null;
|
|
81
|
+
permissionMode: string | null;
|
|
82
|
+
private readonly includePartial;
|
|
83
|
+
private readonly responseText;
|
|
84
|
+
private readonly thinkingText;
|
|
85
|
+
private readonly toolCallsOpened;
|
|
86
|
+
private previousUsage;
|
|
87
|
+
private previousDurationSec;
|
|
88
|
+
constructor(options?: AgyStreamParserOptions);
|
|
89
|
+
parseLine(line: string): AgyParsedLine;
|
|
90
|
+
private noteConversation;
|
|
91
|
+
private base;
|
|
92
|
+
private onInit;
|
|
93
|
+
private onStep;
|
|
94
|
+
private onThinking;
|
|
95
|
+
private onResult;
|
|
96
|
+
}
|
|
97
|
+
/** Parse a complete `stream-json` transcript. Returns every turn's result in order. */
|
|
98
|
+
export declare function parseAgyStreamJson(stdout: string, options?: AgyStreamParserOptions): {
|
|
99
|
+
events: StreamEvent[];
|
|
100
|
+
results: AgyResult[];
|
|
101
|
+
conversationId: string | null;
|
|
102
|
+
model: string | null;
|
|
103
|
+
};
|
|
104
|
+
/** Parse an `AGY_ERROR: {...}` stderr line, or return null for any other line. */
|
|
105
|
+
export declare function parseAgyErrorLine(line: string): AgyErrorReport | null;
|
|
106
|
+
/** True when `agy` output says the CLI has no usable sign-in. */
|
|
107
|
+
export declare function isAgyAuthRequired(text: string): boolean;
|
|
108
|
+
/** Error code for a failed turn, from the most specific signal available. */
|
|
109
|
+
export declare function classifyAgyFailure(result: AgyResult | null, agyError: AgyErrorReport | null): string;
|
|
110
|
+
/** Map an `agy` result status onto a one-shot `ExecutionStatus`. */
|
|
111
|
+
export declare function mapAgyExecutionStatus(status: string): ExecutionStatus;
|
|
112
|
+
/** Map an `agy` result status onto a session `TurnResult` status. */
|
|
113
|
+
export declare function mapAgyTurnStatus(status: string): TurnResult["status"];
|
|
114
|
+
//# sourceMappingURL=parse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../src/providers/antigravity/parse.ts"],"names":[],"mappings":"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"}
|