@spinabot/brigade 1.22.0 → 1.22.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,528 +0,0 @@
1
- // Google Antigravity provider — OAuth login + a native transport for Google's
2
- // Cloud Code Assist "/v1internal" API (the endpoint Antigravity/Gemini-CLI use).
3
- //
4
- // WHY a custom transport (not Pi's `google` provider): an Antigravity login does
5
- // NOT grant the public Gemini API (generativelanguage.googleapis.com). Models are
6
- // served only through the private Cloud Code Assist endpoint at
7
- // `cloudcode-pa.googleapis.com/v1internal:streamGenerateContent`, which wraps
8
- // Gemini `contents`/`parts` in a `{ project, model, request }` envelope and
9
- // requires Antigravity's client headers. So we register a custom Pi OAuth provider
10
- // (id "antigravity") + a custom Pi API provider (api "antigravity"), exactly like
11
- // the Ollama-native pattern.
12
- //
13
- // ⚠ LIVE-VALIDATE: the `/v1internal` shape, headers, and the project-discovery
14
- // handshake are reverse-engineered (Antigravity ships no public API). Everything
15
- // tagged `LIVE-VALIDATE` below needs confirming against a real Antigravity account;
16
- // the OAuth CLIENT_SECRET for the browser flow is the gemini-cli public value and
17
- // must be filled in. The CLI-reuse path (~/.gemini/oauth_creds.json) needs neither.
18
- import { createHash, randomBytes, randomUUID } from "node:crypto";
19
- import { createServer } from "node:http";
20
- import { createAssistantMessageEventStream, getApiProvider, registerApiProvider, } from "@earendil-works/pi-ai";
21
- import { getOAuthProvider, registerOAuthProvider } from "@earendil-works/pi-ai/oauth";
22
- /* ─────────────────────────── constants ─────────────────────────── */
23
- export const ANTIGRAVITY_API = "antigravity";
24
- export const ANTIGRAVITY_PROVIDER = "antigravity";
25
- export const ANTIGRAVITY_OAUTH_ID = "antigravity";
26
- /** Cloud Code Assist base — models are served here, NOT the public Gemini API. */
27
- export const CLOUD_CODE_ASSIST_BASE = "https://cloudcode-pa.googleapis.com";
28
- const STREAM_URL = `${CLOUD_CODE_ASSIST_BASE}/v1internal:streamGenerateContent?alt=sse`;
29
- const LOAD_CODE_ASSIST_URL = `${CLOUD_CODE_ASSIST_BASE}/v1internal:loadCodeAssist`;
30
- // The OAuth client is NOT stored in Brigade's repo. It's the Cloud Code Assist
31
- // installed-app client that GOOGLE ITSELF ships in the open-source gemini-cli —
32
- // whose own source comments that this secret is safe in source control because
33
- // it's a desktop app (Google's words). Brigade pulls it LIVE from that public
34
- // source at login and caches it in memory, so nothing credential-shaped lives in
35
- // this repo and there's zero setup. Operator env vars override the live pull.
36
- const OAUTH_CLIENT_SOURCES = [
37
- "https://raw.githubusercontent.com/google-gemini/gemini-cli/main/packages/core/src/code_assist/oauth2.ts",
38
- ];
39
- let cachedOAuthClient = null;
40
- /** Resolve the OAuth client: operator env → in-memory cache → a live pull from
41
- * Google's public gemini-cli source. Returns null only when there's genuinely no
42
- * client to be found (offline + nothing cached + no env). Never throws. */
43
- async function resolveOAuthClient() {
44
- const envId = process.env.BRIGADE_ANTIGRAVITY_CLIENT_ID?.trim();
45
- const envSecret = process.env.BRIGADE_ANTIGRAVITY_CLIENT_SECRET?.trim();
46
- if (envId && envSecret)
47
- return { clientId: envId, clientSecret: envSecret };
48
- if (cachedOAuthClient)
49
- return cachedOAuthClient;
50
- for (const url of OAUTH_CLIENT_SOURCES) {
51
- try {
52
- const res = await fetch(url, { signal: AbortSignal.timeout(8000) });
53
- if (!res.ok)
54
- continue;
55
- const text = await res.text();
56
- const clientId = text.match(/(\d[\w-]+\.apps\.googleusercontent\.com)/)?.[1];
57
- const clientSecret = text.match(/(GOCSPX-[A-Za-z0-9_-]+)/)?.[1];
58
- if (clientId && clientSecret) {
59
- cachedOAuthClient = { clientId, clientSecret };
60
- return cachedOAuthClient;
61
- }
62
- }
63
- catch {
64
- /* try the next source */
65
- }
66
- }
67
- return null;
68
- }
69
- const GOOGLE_TOKEN_URL = "https://oauth2.googleapis.com/token";
70
- const GOOGLE_AUTH_URL = "https://accounts.google.com/o/oauth2/auth";
71
- // Scopes the Antigravity client requests — including the cclog +
72
- // experimentsandconfigs scopes its backend expects (per the reverse-engineered spec).
73
- const OAUTH_SCOPES = [
74
- "https://www.googleapis.com/auth/cloud-platform",
75
- "https://www.googleapis.com/auth/userinfo.email",
76
- "https://www.googleapis.com/auth/userinfo.profile",
77
- "https://www.googleapis.com/auth/cclog",
78
- "https://www.googleapis.com/auth/experimentsandconfigs",
79
- ];
80
- /** Client platform tag the backend expects, from the host OS. */
81
- function clientPlatform() {
82
- return process.platform === "darwin" ? "MACOS" : process.platform === "win32" ? "WINDOWS" : "LINUX";
83
- }
84
- /** Headers every Cloud Code Assist call needs — the backend gates on ideType +
85
- * client metadata. Mirrors the Antigravity client (per the reverse-engineered spec). */
86
- function antigravityHeaders(accessToken) {
87
- const arch = process.arch === "x64" ? "amd64" : process.arch;
88
- const os = process.platform === "win32" ? "windows" : process.platform === "darwin" ? "darwin" : "linux";
89
- return {
90
- Authorization: `Bearer ${accessToken}`,
91
- "Content-Type": "application/json",
92
- "User-Agent": `antigravity/1.15.8 ${os}/${arch}`,
93
- "X-Goog-Api-Client": "google-cloud-sdk vscode_cloudshelleditor/0.1",
94
- "Client-Metadata": JSON.stringify({ ideType: "ANTIGRAVITY", platform: clientPlatform(), pluginType: "GEMINI" }),
95
- };
96
- }
97
- /** Best-effort project discovery — the `/v1internal` envelope needs a project id.
98
- * LIVE-VALIDATE: exact request/response shape of loadCodeAssist/onboardUser. */
99
- async function discoverProject(accessToken) {
100
- try {
101
- const res = await fetch(LOAD_CODE_ASSIST_URL, {
102
- method: "POST",
103
- headers: antigravityHeaders(accessToken),
104
- body: JSON.stringify({ metadata: { ideType: "ANTIGRAVITY" } }),
105
- });
106
- if (!res.ok)
107
- return undefined;
108
- const body = (await res.json());
109
- return body.cloudaicompanionProject ?? body.project ?? undefined;
110
- }
111
- catch {
112
- return undefined;
113
- }
114
- }
115
- async function refreshGoogleToken(refresh) {
116
- const client = await resolveOAuthClient();
117
- const res = await fetch(GOOGLE_TOKEN_URL, {
118
- method: "POST",
119
- headers: { "Content-Type": "application/x-www-form-urlencoded" },
120
- body: new URLSearchParams({
121
- grant_type: "refresh_token",
122
- refresh_token: refresh,
123
- ...(client ? { client_id: client.clientId, client_secret: client.clientSecret } : {}),
124
- }).toString(),
125
- });
126
- if (!res.ok)
127
- throw new Error(`Antigravity token refresh failed (${res.status})`);
128
- const body = (await res.json());
129
- return {
130
- access: body.access_token,
131
- refresh: body.refresh_token ?? refresh,
132
- expires: Date.now() + (body.expires_in ?? 3600) * 1000,
133
- };
134
- }
135
- /* ─────────── browser OAuth: PKCE + localhost loopback (like Pi's codex) ─────────── */
136
- function base64url(buf) {
137
- return buf.toString("base64").replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
138
- }
139
- export function generatePkce() {
140
- const verifier = base64url(randomBytes(32));
141
- const challenge = base64url(createHash("sha256").update(verifier).digest());
142
- return { verifier, challenge };
143
- }
144
- function browserResultPage(message) {
145
- return `<!doctype html><html><head><meta charset="utf-8"><title>Brigade · Antigravity</title></head><body style="font-family:system-ui,-apple-system,sans-serif;padding:3rem;text-align:center;color:#222"><h2>${message}</h2></body></html>`;
146
- }
147
- /** Localhost callback server on an ephemeral port; resolves with the code Google
148
- * redirects back after the user approves. Mirrors Pi's codex loopback provider. */
149
- async function startLoopbackServer(state) {
150
- let settle;
151
- let settled = false;
152
- const waitForCodePromise = new Promise((resolve) => {
153
- settle = (v) => {
154
- if (settled)
155
- return;
156
- settled = true;
157
- resolve(v);
158
- };
159
- });
160
- const server = createServer((req, res) => {
161
- try {
162
- const url = new URL(req.url ?? "", "http://127.0.0.1");
163
- if (url.pathname !== "/oauth2callback") {
164
- res.statusCode = 404;
165
- res.end("Not found");
166
- return;
167
- }
168
- res.setHeader("Content-Type", "text/html; charset=utf-8");
169
- if (url.searchParams.get("state") !== state) {
170
- res.statusCode = 400;
171
- res.end(browserResultPage("Sign-in couldn't be verified (state mismatch). Close this window and try again."));
172
- return;
173
- }
174
- const code = url.searchParams.get("code");
175
- if (!code) {
176
- const err = url.searchParams.get("error");
177
- res.statusCode = 400;
178
- res.end(browserResultPage(`Sign-in ${err ? `failed (${err})` : "was cancelled"}. You can close this window.`));
179
- settle?.(null);
180
- return;
181
- }
182
- res.statusCode = 200;
183
- res.end(browserResultPage("Antigravity sign-in complete — close this window and return to Brigade."));
184
- settle?.({ code });
185
- }
186
- catch {
187
- res.statusCode = 500;
188
- res.end("Internal error");
189
- }
190
- });
191
- return new Promise((resolve, reject) => {
192
- server.on("error", reject);
193
- server.listen(0, "127.0.0.1", () => {
194
- const addr = server.address();
195
- const port = addr && typeof addr === "object" ? addr.port : 0;
196
- resolve({
197
- redirectUri: `http://127.0.0.1:${port}/oauth2callback`,
198
- waitForCode: () => waitForCodePromise,
199
- cancelWait: () => settle?.(null),
200
- close: () => {
201
- try {
202
- server.close();
203
- }
204
- catch {
205
- /* ignore */
206
- }
207
- },
208
- });
209
- });
210
- });
211
- }
212
- /** Parse a pasted authorization code or full redirect URL. Throws on state mismatch. */
213
- export function parseAuthCode(input, expectedState) {
214
- const v = input.trim();
215
- if (!v)
216
- return undefined;
217
- try {
218
- const url = new URL(v);
219
- const s = url.searchParams.get("state");
220
- if (s && s !== expectedState)
221
- throw new Error("__state_mismatch__");
222
- return url.searchParams.get("code") ?? undefined;
223
- }
224
- catch (e) {
225
- if (e instanceof Error && e.message === "__state_mismatch__") {
226
- throw new Error("That code was from a different sign-in attempt — please retry.");
227
- }
228
- return v; // not a URL — treat the whole string as the raw code
229
- }
230
- }
231
- /** Exchange an authorization code for Google tokens (installed-app PKCE). */
232
- async function exchangeAntigravityCode(code, verifier, redirectUri, client) {
233
- const res = await fetch(GOOGLE_TOKEN_URL, {
234
- method: "POST",
235
- headers: { "Content-Type": "application/x-www-form-urlencoded" },
236
- body: new URLSearchParams({
237
- grant_type: "authorization_code",
238
- code,
239
- client_id: client.clientId,
240
- client_secret: client.clientSecret,
241
- code_verifier: verifier,
242
- redirect_uri: redirectUri,
243
- }).toString(),
244
- });
245
- if (!res.ok) {
246
- const detail = await res.text().catch(() => "");
247
- throw new Error(`Google sign-in couldn't be completed (${res.status})${detail ? `: ${detail.slice(0, 150)}` : ""}`);
248
- }
249
- const body = (await res.json());
250
- if (!body.access_token)
251
- throw new Error("Google returned no access token.");
252
- return {
253
- access: body.access_token,
254
- refresh: body.refresh_token ?? "",
255
- expires: Date.now() + (body.expires_in ?? 3600) * 1000,
256
- };
257
- }
258
- export const antigravityOAuthProvider = {
259
- id: ANTIGRAVITY_OAUTH_ID,
260
- name: "Google Antigravity",
261
- usesCallbackServer: true,
262
- async login(callbacks) {
263
- // Antigravity runs its OWN Google OAuth (it does NOT reuse the Gemini CLI's
264
- // token — that's a separate, now-deprecated product). The OAuth client is
265
- // pulled LIVE from Google's public gemini-cli source (or an env override).
266
- const client = await resolveOAuthClient();
267
- if (!client) {
268
- throw new Error("Couldn't get the Antigravity sign-in client — no network to fetch it and no " +
269
- "BRIGADE_ANTIGRAVITY_CLIENT_ID/_SECRET set. Check your connection and retry. Note: Google's " +
270
- "Antigravity Terms prohibit third-party use and accounts have been banned — use at your own risk.");
271
- }
272
- // Browser path — Google installed-app OAuth (PKCE + localhost loopback), the
273
- // same shape as Pi's codex/anthropic providers: the user approves in the
274
- // browser and Google redirects the code back to the loopback (or they paste
275
- // it). LIVE-VALIDATE: the exact scopes/consent Antigravity expects.
276
- const { verifier, challenge } = generatePkce();
277
- const state = base64url(randomBytes(16));
278
- const server = await startLoopbackServer(state);
279
- try {
280
- const authUrl = `${GOOGLE_AUTH_URL}?${new URLSearchParams({
281
- client_id: client.clientId,
282
- redirect_uri: server.redirectUri,
283
- response_type: "code",
284
- scope: OAUTH_SCOPES.join(" "),
285
- code_challenge: challenge,
286
- code_challenge_method: "S256",
287
- state,
288
- access_type: "offline",
289
- prompt: "consent",
290
- }).toString()}`;
291
- callbacks.onAuth({
292
- url: authUrl,
293
- instructions: "Approve the Google sign-in for the account tied to your Antigravity access.",
294
- });
295
- // Race the loopback callback against a manual code / redirect-URL paste, so
296
- // login still completes if the browser can't reach the local server.
297
- let code;
298
- if (callbacks.onManualCodeInput) {
299
- let manualVal = null;
300
- let manualErr = null;
301
- const manualPromise = callbacks
302
- .onManualCodeInput()
303
- .then((v) => {
304
- manualVal = v;
305
- server.cancelWait();
306
- })
307
- .catch((e) => {
308
- manualErr = e instanceof Error ? e : new Error(String(e));
309
- server.cancelWait();
310
- });
311
- const result = await server.waitForCode();
312
- if (manualErr)
313
- throw manualErr;
314
- if (result?.code)
315
- code = result.code;
316
- else if (manualVal)
317
- code = parseAuthCode(manualVal, state);
318
- if (!code) {
319
- await manualPromise;
320
- if (manualErr)
321
- throw manualErr;
322
- if (manualVal)
323
- code = parseAuthCode(manualVal, state);
324
- }
325
- }
326
- else {
327
- const result = await server.waitForCode();
328
- if (result?.code)
329
- code = result.code;
330
- }
331
- if (!code)
332
- throw new Error("Sign-in didn't complete — no authorization code was received.");
333
- const tokens = await exchangeAntigravityCode(code, verifier, server.redirectUri, client);
334
- const project = await discoverProject(tokens.access);
335
- return { ...tokens, project };
336
- }
337
- finally {
338
- server.close();
339
- }
340
- },
341
- async refreshToken(credentials) {
342
- const refreshed = await refreshGoogleToken(credentials.refresh);
343
- // Preserve the discovered project across refreshes.
344
- const project = credentials.project ?? (await discoverProject(refreshed.access));
345
- return { ...refreshed, project };
346
- },
347
- getApiKey(credentials) {
348
- return credentials.access;
349
- },
350
- modifyModels(models, credentials) {
351
- // Stamp the transport AND the discovered GCP project onto Antigravity models.
352
- // Pi's streamFn `options` don't carry the project, so the model object is the
353
- // only channel to get it to the transport for the /v1internal envelope.
354
- const project = credentials.project;
355
- return models.map((m) => m.provider === ANTIGRAVITY_PROVIDER
356
- ? { ...m, api: ANTIGRAVITY_API, baseUrl: CLOUD_CODE_ASSIST_BASE, ...(project ? { project } : {}) }
357
- : m);
358
- },
359
- };
360
- /* ─────────────────────────── transport (StreamFn) ─────────────────────────── */
361
- function buildUsage(input = 0, output = 0) {
362
- return {
363
- input,
364
- output,
365
- cacheRead: 0,
366
- cacheWrite: 0,
367
- totalTokens: input + output,
368
- cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
369
- };
370
- }
371
- /** Convert Pi's message array → Gemini `contents` (roles: user/model). */
372
- export function toGeminiContents(messages) {
373
- const out = [];
374
- for (const m of messages) {
375
- const role = m.role === "assistant" ? "model" : "user";
376
- const text = typeof m.content === "string"
377
- ? m.content
378
- : Array.isArray(m.content)
379
- ? m.content
380
- .filter((p) => p?.type === "text" && typeof p.text === "string")
381
- .map((p) => p.text)
382
- .join("")
383
- : "";
384
- out.push({ role, parts: [{ text }] });
385
- }
386
- return out;
387
- }
388
- /** The Cloud Code Assist StreamFn. LIVE-VALIDATE: envelope + SSE field names. */
389
- export function createAntigravityStreamFn() {
390
- return ((model, context, options) => {
391
- const stream = createAssistantMessageEventStream();
392
- const modelInfo = { api: model.api, provider: model.provider, id: model.id };
393
- const ts = Date.now();
394
- const shell = (content, stopReason, errorMessage) => ({
395
- role: "assistant",
396
- content,
397
- api: modelInfo.api,
398
- provider: modelInfo.provider,
399
- model: modelInfo.id,
400
- usage: buildUsage(),
401
- stopReason,
402
- ...(errorMessage ? { errorMessage } : {}),
403
- timestamp: ts,
404
- });
405
- const run = async () => {
406
- let acc = "";
407
- let started = false;
408
- try {
409
- const ctx = (context ?? {});
410
- const token = typeof options?.apiKey === "string" ? options.apiKey : "";
411
- // Project is stamped onto the model by the OAuth provider's modifyModels
412
- // (Pi's streamFn options don't carry it); fall back to options/env.
413
- const project = model.project ??
414
- options?.project ??
415
- process.env.BRIGADE_ANTIGRAVITY_PROJECT ??
416
- "";
417
- const body = {
418
- project,
419
- model: model.id.replace(/^antigravity\//, ""),
420
- request: {
421
- contents: toGeminiContents(ctx.messages ?? []),
422
- ...(ctx.systemPrompt ? { systemInstruction: { parts: [{ text: ctx.systemPrompt }] } } : {}),
423
- },
424
- userAgent: "antigravity",
425
- requestId: randomUUID(),
426
- };
427
- const res = await fetch(STREAM_URL, {
428
- method: "POST",
429
- headers: { ...antigravityHeaders(token), Accept: "text/event-stream" },
430
- body: JSON.stringify(body),
431
- signal: options?.signal,
432
- });
433
- if (!res.ok || !res.body) {
434
- const detail = await res.text().catch(() => "");
435
- throw new Error(`Antigravity /v1internal returned ${res.status}${detail ? `: ${detail.slice(0, 200)}` : ""}`);
436
- }
437
- stream.push({ type: "start", partial: shell([], "stop") });
438
- started = true;
439
- stream.push({ type: "text_start", contentIndex: 0, partial: shell([], "stop") });
440
- const reader = res.body.getReader();
441
- const decoder = new TextDecoder();
442
- let buffer = "";
443
- const handleSseLine = (line) => {
444
- const t = line.trim();
445
- if (!t.startsWith("data:"))
446
- return;
447
- const payload = t.slice(5).trim();
448
- if (!payload || payload === "[DONE]")
449
- return;
450
- try {
451
- // LIVE-VALIDATE: text lives under response.candidates[].content.parts[].text
452
- const obj = JSON.parse(payload);
453
- const parts = obj.response?.candidates?.[0]?.content?.parts ?? [];
454
- for (const p of parts) {
455
- if (typeof p.text === "string" && p.text) {
456
- acc += p.text;
457
- stream.push({ type: "text_delta", contentIndex: 0, delta: p.text, partial: shell([{ type: "text", text: acc }], "stop") });
458
- }
459
- }
460
- }
461
- catch {
462
- /* skip malformed SSE line */
463
- }
464
- };
465
- try {
466
- while (true) {
467
- const { done, value } = await reader.read();
468
- if (done)
469
- break;
470
- buffer += decoder.decode(value, { stream: true });
471
- const lines = buffer.split("\n");
472
- buffer = lines.pop() ?? "";
473
- for (const line of lines)
474
- handleSseLine(line);
475
- }
476
- // Flush a trailing line if the stream closed without a final newline —
477
- // otherwise the last delta / finish chunk is silently dropped.
478
- if (buffer.trim())
479
- handleSseLine(buffer);
480
- }
481
- finally {
482
- await reader.cancel().catch(() => { });
483
- }
484
- stream.push({ type: "text_end", contentIndex: 0, content: acc, partial: shell([{ type: "text", text: acc }], "stop") });
485
- const content = acc ? [{ type: "text", text: acc }] : [];
486
- stream.push({ type: "done", reason: "stop", message: shell(content, "stop") });
487
- }
488
- catch (err) {
489
- const msg = err instanceof Error ? err.message : String(err);
490
- const aborted = err instanceof Error && (err.name === "AbortError" || /abort/i.test(msg));
491
- // Guarantee a `start` precedes the terminal `error`, even when the failure
492
- // happened before the stream started (e.g. the fetch or !res.ok threw).
493
- if (!started) {
494
- stream.push({ type: "start", partial: shell([], aborted ? "aborted" : "error") });
495
- started = true;
496
- }
497
- stream.push({
498
- type: "error",
499
- reason: aborted ? "aborted" : "error",
500
- error: shell(acc ? [{ type: "text", text: acc }] : [], aborted ? "aborted" : "error", msg),
501
- });
502
- }
503
- finally {
504
- stream.end();
505
- }
506
- };
507
- queueMicrotask(() => void run());
508
- return stream;
509
- });
510
- }
511
- /* ─────────────────────────── registration ─────────────────────────── */
512
- const REGISTRY_SOURCE_ID = "brigade-antigravity";
513
- /**
514
- * Idempotently register Antigravity's OAuth provider + `api:"antigravity"`
515
- * transport. Guards on the LIVE registries (self-heals after Pi's
516
- * resetApiProviders/resetOAuthProviders on refresh), same rationale as the
517
- * Ollama-native registration. Safe to call at boot, per turn, and pre-login.
518
- */
519
- export function ensureAntigravityRegistered() {
520
- if (!getOAuthProvider(ANTIGRAVITY_OAUTH_ID)) {
521
- registerOAuthProvider(antigravityOAuthProvider);
522
- }
523
- if (!getApiProvider(ANTIGRAVITY_API)) {
524
- const streamFn = createAntigravityStreamFn();
525
- registerApiProvider({ api: ANTIGRAVITY_API, stream: streamFn, streamSimple: streamFn }, REGISTRY_SOURCE_ID);
526
- }
527
- }
528
- //# sourceMappingURL=transport.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../src/integrations/antigravity/transport.ts"],"names":[],"mappings":"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"}