opencode-antigravity-auth 1.0.3 → 1.0.5
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/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/src/antigravity/oauth.d.ts +31 -0
- package/dist/src/antigravity/oauth.d.ts.map +1 -0
- package/dist/src/antigravity/oauth.js +154 -0
- package/dist/src/antigravity/oauth.js.map +1 -0
- package/dist/src/constants.d.ts +52 -0
- package/dist/src/constants.d.ts.map +1 -0
- package/dist/src/constants.js +66 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/plugin/auth.d.ts +15 -0
- package/dist/src/plugin/auth.d.ts.map +1 -0
- package/dist/src/plugin/auth.js +33 -0
- package/dist/src/plugin/auth.js.map +1 -0
- package/dist/src/plugin/cache.d.ts +14 -0
- package/dist/src/plugin/cache.d.ts.map +1 -0
- package/dist/src/plugin/cache.js +56 -0
- package/dist/src/plugin/cache.js.map +1 -0
- package/dist/src/plugin/cli.d.ts +5 -0
- package/dist/src/plugin/cli.d.ts.map +1 -0
- package/dist/src/plugin/cli.js +16 -0
- package/dist/src/plugin/cli.js.map +1 -0
- package/dist/src/plugin/debug.d.ts +30 -0
- package/dist/src/plugin/debug.d.ts.map +1 -0
- package/dist/src/plugin/debug.js +142 -0
- package/dist/src/plugin/debug.js.map +1 -0
- package/dist/src/plugin/project.d.ts +33 -0
- package/dist/src/plugin/project.d.ts.map +1 -0
- package/dist/src/plugin/project.js +241 -0
- package/dist/src/plugin/project.js.map +1 -0
- package/dist/src/plugin/request-helpers.d.ts +51 -0
- package/dist/src/plugin/request-helpers.d.ts.map +1 -0
- package/dist/src/plugin/request-helpers.js +135 -0
- package/dist/src/plugin/request-helpers.js.map +1 -0
- package/dist/src/plugin/request.d.ts +27 -0
- package/dist/src/plugin/request.d.ts.map +1 -0
- package/dist/src/plugin/request.js +458 -0
- package/dist/src/plugin/request.js.map +1 -0
- package/dist/src/plugin/server.d.ts +23 -0
- package/dist/src/plugin/server.d.ts.map +1 -0
- package/dist/src/plugin/server.js +216 -0
- package/dist/src/plugin/server.js.map +1 -0
- package/dist/src/plugin/token.d.ts +6 -0
- package/dist/src/plugin/token.d.ts.map +1 -0
- package/dist/src/plugin/token.js +126 -0
- package/dist/src/plugin/token.js.map +1 -0
- package/dist/src/plugin/token.test.d.ts +2 -0
- package/dist/src/plugin/token.test.d.ts.map +1 -0
- package/dist/src/plugin/token.test.js +56 -0
- package/dist/src/plugin/token.test.js.map +1 -0
- package/dist/src/plugin/types.d.ts +68 -0
- package/dist/src/plugin/types.d.ts.map +1 -0
- package/dist/src/plugin/types.js +1 -0
- package/dist/src/plugin/types.js.map +1 -0
- package/dist/src/plugin.d.ts +8 -0
- package/dist/src/plugin.d.ts.map +1 -0
- package/dist/src/plugin.js +249 -0
- package/dist/src/plugin.js.map +1 -0
- package/package.json +4 -3
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { createWriteStream } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { cwd, env } from "node:process";
|
|
4
|
+
const DEBUG_FLAG = env.OPENCODE_ANTIGRAVITY_DEBUG ?? "";
|
|
5
|
+
const MAX_BODY_PREVIEW_CHARS = 12000;
|
|
6
|
+
const debugEnabled = DEBUG_FLAG.trim() === "1";
|
|
7
|
+
const logFilePath = debugEnabled ? defaultLogFilePath() : undefined;
|
|
8
|
+
const logWriter = createLogWriter(logFilePath);
|
|
9
|
+
let requestCounter = 0;
|
|
10
|
+
/**
|
|
11
|
+
* Begins a debug trace for an Antigravity request, logging request metadata when debugging is enabled.
|
|
12
|
+
*/
|
|
13
|
+
export function startAntigravityDebugRequest(meta) {
|
|
14
|
+
if (!debugEnabled) {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
const id = `ANTIGRAVITY-${++requestCounter}`;
|
|
18
|
+
const method = meta.method ?? "GET";
|
|
19
|
+
logDebug(`[Antigravity Debug ${id}] ${method} ${meta.resolvedUrl}`);
|
|
20
|
+
if (meta.originalUrl && meta.originalUrl !== meta.resolvedUrl) {
|
|
21
|
+
logDebug(`[Antigravity Debug ${id}] Original URL: ${meta.originalUrl}`);
|
|
22
|
+
}
|
|
23
|
+
if (meta.projectId) {
|
|
24
|
+
logDebug(`[Antigravity Debug ${id}] Project: ${meta.projectId}`);
|
|
25
|
+
}
|
|
26
|
+
logDebug(`[Antigravity Debug ${id}] Streaming: ${meta.streaming ? "yes" : "no"}`);
|
|
27
|
+
logDebug(`[Antigravity Debug ${id}] Headers: ${JSON.stringify(maskHeaders(meta.headers))}`);
|
|
28
|
+
const bodyPreview = formatBodyPreview(meta.body);
|
|
29
|
+
if (bodyPreview) {
|
|
30
|
+
logDebug(`[Antigravity Debug ${id}] Body Preview: ${bodyPreview}`);
|
|
31
|
+
}
|
|
32
|
+
return { id, streaming: meta.streaming, startedAt: Date.now() };
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Logs response details for a previously started debug trace when debugging is enabled.
|
|
36
|
+
*/
|
|
37
|
+
export function logAntigravityDebugResponse(context, response, meta = {}) {
|
|
38
|
+
if (!debugEnabled || !context) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const durationMs = Date.now() - context.startedAt;
|
|
42
|
+
logDebug(`[Antigravity Debug ${context.id}] Response ${response.status} ${response.statusText} (${durationMs}ms)`);
|
|
43
|
+
logDebug(`[Antigravity Debug ${context.id}] Response Headers: ${JSON.stringify(maskHeaders(meta.headersOverride ?? response.headers))}`);
|
|
44
|
+
if (meta.note) {
|
|
45
|
+
logDebug(`[Antigravity Debug ${context.id}] Note: ${meta.note}`);
|
|
46
|
+
}
|
|
47
|
+
if (meta.error) {
|
|
48
|
+
logDebug(`[Antigravity Debug ${context.id}] Error: ${formatError(meta.error)}`);
|
|
49
|
+
}
|
|
50
|
+
if (meta.body) {
|
|
51
|
+
logDebug(`[Antigravity Debug ${context.id}] Response Body Preview: ${truncateForLog(meta.body)}`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Obscures sensitive headers and returns a plain object for logging.
|
|
56
|
+
*/
|
|
57
|
+
function maskHeaders(headers) {
|
|
58
|
+
if (!headers) {
|
|
59
|
+
return {};
|
|
60
|
+
}
|
|
61
|
+
const result = {};
|
|
62
|
+
const parsed = headers instanceof Headers ? headers : new Headers(headers);
|
|
63
|
+
parsed.forEach((value, key) => {
|
|
64
|
+
if (key.toLowerCase() === "authorization") {
|
|
65
|
+
result[key] = "[redacted]";
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
result[key] = value;
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
return result;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Produces a short, type-aware preview of a request/response body for logs.
|
|
75
|
+
*/
|
|
76
|
+
function formatBodyPreview(body) {
|
|
77
|
+
if (body == null) {
|
|
78
|
+
return undefined;
|
|
79
|
+
}
|
|
80
|
+
if (typeof body === "string") {
|
|
81
|
+
return truncateForLog(body);
|
|
82
|
+
}
|
|
83
|
+
if (body instanceof URLSearchParams) {
|
|
84
|
+
return truncateForLog(body.toString());
|
|
85
|
+
}
|
|
86
|
+
if (typeof Blob !== "undefined" && body instanceof Blob) {
|
|
87
|
+
return `[Blob size=${body.size}]`;
|
|
88
|
+
}
|
|
89
|
+
if (typeof FormData !== "undefined" && body instanceof FormData) {
|
|
90
|
+
return "[FormData payload omitted]";
|
|
91
|
+
}
|
|
92
|
+
return `[${body.constructor?.name ?? typeof body} payload omitted]`;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Truncates long strings to a fixed preview length for logging.
|
|
96
|
+
*/
|
|
97
|
+
function truncateForLog(text) {
|
|
98
|
+
if (text.length <= MAX_BODY_PREVIEW_CHARS) {
|
|
99
|
+
return text;
|
|
100
|
+
}
|
|
101
|
+
return `${text.slice(0, MAX_BODY_PREVIEW_CHARS)}... (truncated ${text.length - MAX_BODY_PREVIEW_CHARS} chars)`;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Writes a single debug line using the configured writer.
|
|
105
|
+
*/
|
|
106
|
+
function logDebug(line) {
|
|
107
|
+
logWriter(line);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Converts unknown error-like values into printable strings.
|
|
111
|
+
*/
|
|
112
|
+
function formatError(error) {
|
|
113
|
+
if (error instanceof Error) {
|
|
114
|
+
return error.stack ?? error.message;
|
|
115
|
+
}
|
|
116
|
+
try {
|
|
117
|
+
return JSON.stringify(error);
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
return String(error);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Builds a timestamped log file path in the current working directory.
|
|
125
|
+
*/
|
|
126
|
+
function defaultLogFilePath() {
|
|
127
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, "-");
|
|
128
|
+
return join(cwd(), `antigravity-debug-${timestamp}.log`);
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Creates a line writer that appends to a file when provided.
|
|
132
|
+
*/
|
|
133
|
+
function createLogWriter(filePath) {
|
|
134
|
+
if (!filePath) {
|
|
135
|
+
return () => { };
|
|
136
|
+
}
|
|
137
|
+
const stream = createWriteStream(filePath, { flags: "a" });
|
|
138
|
+
return (line) => {
|
|
139
|
+
stream.write(`${line}\n`);
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=debug.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug.js","sourceRoot":"","sources":["../../../src/plugin/debug.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { OAuthAuthDetails, PluginClient, ProjectContextResult } from "./types";
|
|
2
|
+
interface AntigravityUserTier {
|
|
3
|
+
id?: string;
|
|
4
|
+
isDefault?: boolean;
|
|
5
|
+
userDefinedCloudaicompanionProject?: boolean;
|
|
6
|
+
}
|
|
7
|
+
interface LoadCodeAssistPayload {
|
|
8
|
+
cloudaicompanionProject?: string | {
|
|
9
|
+
id?: string;
|
|
10
|
+
};
|
|
11
|
+
currentTier?: {
|
|
12
|
+
id?: string;
|
|
13
|
+
};
|
|
14
|
+
allowedTiers?: AntigravityUserTier[];
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Clears cached project context results and pending promises, globally or for a refresh key.
|
|
18
|
+
*/
|
|
19
|
+
export declare function invalidateProjectContextCache(refresh?: string): void;
|
|
20
|
+
/**
|
|
21
|
+
* Loads managed project information for the given access token and optional project.
|
|
22
|
+
*/
|
|
23
|
+
export declare function loadManagedProject(accessToken: string, projectId?: string): Promise<LoadCodeAssistPayload | null>;
|
|
24
|
+
/**
|
|
25
|
+
* Onboards a managed project for the user, optionally retrying until completion.
|
|
26
|
+
*/
|
|
27
|
+
export declare function onboardManagedProject(accessToken: string, tierId: string, projectId?: string, attempts?: number, delayMs?: number): Promise<string | undefined>;
|
|
28
|
+
/**
|
|
29
|
+
* Resolves an effective project ID for the current auth state, caching results per refresh token.
|
|
30
|
+
*/
|
|
31
|
+
export declare function ensureProjectContext(auth: OAuthAuthDetails, client: PluginClient, providerId: string): Promise<ProjectContextResult>;
|
|
32
|
+
export {};
|
|
33
|
+
//# sourceMappingURL=project.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../../src/plugin/project.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,oBAAoB,EACrB,MAAM,SAAS,CAAC;AAWjB,UAAU,mBAAmB;IAC3B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,kCAAkC,CAAC,EAAE,OAAO,CAAC;CAC9C;AAED,UAAU,qBAAqB;IAC7B,uBAAuB,CAAC,EAAE,MAAM,GAAG;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,WAAW,CAAC,EAAE;QACZ,EAAE,CAAC,EAAE,MAAM,CAAC;KACb,CAAC;IACF,YAAY,CAAC,EAAE,mBAAmB,EAAE,CAAC;CACtC;AAqFD;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAQpE;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAuCvC;AAGD;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,EAClB,QAAQ,SAAK,EACb,OAAO,SAAO,GACb,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAuD7B;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,gBAAgB,EACtB,MAAM,EAAE,YAAY,EACpB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,oBAAoB,CAAC,CAgF/B"}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
import { ANTIGRAVITY_HEADERS, ANTIGRAVITY_ENDPOINT_FALLBACKS, ANTIGRAVITY_LOAD_ENDPOINTS, ANTIGRAVITY_DEFAULT_PROJECT_ID, } from "../constants";
|
|
2
|
+
import { formatRefreshParts, parseRefreshParts } from "./auth";
|
|
3
|
+
const projectContextResultCache = new Map();
|
|
4
|
+
const projectContextPendingCache = new Map();
|
|
5
|
+
const CODE_ASSIST_METADATA = {
|
|
6
|
+
ideType: "IDE_UNSPECIFIED",
|
|
7
|
+
platform: "PLATFORM_UNSPECIFIED",
|
|
8
|
+
pluginType: "GEMINI",
|
|
9
|
+
};
|
|
10
|
+
class ProjectIdRequiredError extends Error {
|
|
11
|
+
/**
|
|
12
|
+
* Error raised when a required Google Cloud project is missing during Antigravity onboarding.
|
|
13
|
+
*/
|
|
14
|
+
constructor() {
|
|
15
|
+
super("Google Antigravity requires a Google Cloud project. Enable the Antigravity API on a project you control, rerun `opencode auth login`, and supply that project ID when prompted.");
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Builds metadata headers required by the Code Assist API.
|
|
20
|
+
*/
|
|
21
|
+
function buildMetadata(projectId) {
|
|
22
|
+
const metadata = {
|
|
23
|
+
ideType: CODE_ASSIST_METADATA.ideType,
|
|
24
|
+
platform: CODE_ASSIST_METADATA.platform,
|
|
25
|
+
pluginType: CODE_ASSIST_METADATA.pluginType,
|
|
26
|
+
};
|
|
27
|
+
if (projectId) {
|
|
28
|
+
metadata.duetProject = projectId;
|
|
29
|
+
}
|
|
30
|
+
return metadata;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Selects the default tier ID from the allowed tiers list.
|
|
34
|
+
*/
|
|
35
|
+
function getDefaultTierId(allowedTiers) {
|
|
36
|
+
if (!allowedTiers || allowedTiers.length === 0) {
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
for (const tier of allowedTiers) {
|
|
40
|
+
if (tier?.isDefault) {
|
|
41
|
+
return tier.id;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return allowedTiers[0]?.id;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Promise-based delay utility.
|
|
48
|
+
*/
|
|
49
|
+
function wait(ms) {
|
|
50
|
+
return new Promise(function (resolve) {
|
|
51
|
+
setTimeout(resolve, ms);
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Extracts the cloudaicompanion project id from loadCodeAssist responses.
|
|
56
|
+
*/
|
|
57
|
+
function extractManagedProjectId(payload) {
|
|
58
|
+
if (!payload) {
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
if (typeof payload.cloudaicompanionProject === "string") {
|
|
62
|
+
return payload.cloudaicompanionProject;
|
|
63
|
+
}
|
|
64
|
+
if (payload.cloudaicompanionProject && typeof payload.cloudaicompanionProject.id === "string") {
|
|
65
|
+
return payload.cloudaicompanionProject.id;
|
|
66
|
+
}
|
|
67
|
+
return undefined;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Generates a cache key for project context based on refresh token.
|
|
71
|
+
*/
|
|
72
|
+
function getCacheKey(auth) {
|
|
73
|
+
const refresh = auth.refresh?.trim();
|
|
74
|
+
return refresh ? refresh : undefined;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Clears cached project context results and pending promises, globally or for a refresh key.
|
|
78
|
+
*/
|
|
79
|
+
export function invalidateProjectContextCache(refresh) {
|
|
80
|
+
if (!refresh) {
|
|
81
|
+
projectContextPendingCache.clear();
|
|
82
|
+
projectContextResultCache.clear();
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
projectContextPendingCache.delete(refresh);
|
|
86
|
+
projectContextResultCache.delete(refresh);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Loads managed project information for the given access token and optional project.
|
|
90
|
+
*/
|
|
91
|
+
export async function loadManagedProject(accessToken, projectId) {
|
|
92
|
+
const metadata = buildMetadata(projectId);
|
|
93
|
+
const requestBody = { metadata };
|
|
94
|
+
const loadHeaders = {
|
|
95
|
+
"Content-Type": "application/json",
|
|
96
|
+
Authorization: `Bearer ${accessToken}`,
|
|
97
|
+
"User-Agent": "google-api-nodejs-client/9.15.1",
|
|
98
|
+
"X-Goog-Api-Client": "google-cloud-sdk vscode_cloudshelleditor/0.1",
|
|
99
|
+
"Client-Metadata": ANTIGRAVITY_HEADERS["Client-Metadata"],
|
|
100
|
+
};
|
|
101
|
+
const loadEndpoints = Array.from(new Set([...ANTIGRAVITY_LOAD_ENDPOINTS, ...ANTIGRAVITY_ENDPOINT_FALLBACKS]));
|
|
102
|
+
for (const baseEndpoint of loadEndpoints) {
|
|
103
|
+
try {
|
|
104
|
+
const response = await fetch(`${baseEndpoint}/v1internal:loadCodeAssist`, {
|
|
105
|
+
method: "POST",
|
|
106
|
+
headers: loadHeaders,
|
|
107
|
+
body: JSON.stringify(requestBody),
|
|
108
|
+
});
|
|
109
|
+
if (!response.ok) {
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
return (await response.json());
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
console.error(`Failed to load Antigravity managed project via ${baseEndpoint}:`, error);
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Onboards a managed project for the user, optionally retrying until completion.
|
|
123
|
+
*/
|
|
124
|
+
export async function onboardManagedProject(accessToken, tierId, projectId, attempts = 10, delayMs = 5000) {
|
|
125
|
+
const metadata = buildMetadata(projectId);
|
|
126
|
+
const requestBody = {
|
|
127
|
+
tierId,
|
|
128
|
+
metadata,
|
|
129
|
+
};
|
|
130
|
+
if (tierId !== "FREE") {
|
|
131
|
+
if (!projectId) {
|
|
132
|
+
throw new ProjectIdRequiredError();
|
|
133
|
+
}
|
|
134
|
+
requestBody.cloudaicompanionProject = projectId;
|
|
135
|
+
}
|
|
136
|
+
for (const baseEndpoint of ANTIGRAVITY_ENDPOINT_FALLBACKS) {
|
|
137
|
+
for (let attempt = 0; attempt < attempts; attempt += 1) {
|
|
138
|
+
try {
|
|
139
|
+
const response = await fetch(`${baseEndpoint}/v1internal:onboardUser`, {
|
|
140
|
+
method: "POST",
|
|
141
|
+
headers: {
|
|
142
|
+
"Content-Type": "application/json",
|
|
143
|
+
Authorization: `Bearer ${accessToken}`,
|
|
144
|
+
...ANTIGRAVITY_HEADERS,
|
|
145
|
+
},
|
|
146
|
+
body: JSON.stringify(requestBody),
|
|
147
|
+
});
|
|
148
|
+
if (!response.ok) {
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
151
|
+
const payload = (await response.json());
|
|
152
|
+
const managedProjectId = payload.response?.cloudaicompanionProject?.id;
|
|
153
|
+
if (payload.done && managedProjectId) {
|
|
154
|
+
return managedProjectId;
|
|
155
|
+
}
|
|
156
|
+
if (payload.done && projectId) {
|
|
157
|
+
return projectId;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
console.error(`Failed to onboard Antigravity managed project via ${baseEndpoint}:`, error);
|
|
162
|
+
break;
|
|
163
|
+
}
|
|
164
|
+
await wait(delayMs);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return undefined;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Resolves an effective project ID for the current auth state, caching results per refresh token.
|
|
171
|
+
*/
|
|
172
|
+
export async function ensureProjectContext(auth, client, providerId) {
|
|
173
|
+
const accessToken = auth.access;
|
|
174
|
+
if (!accessToken) {
|
|
175
|
+
return { auth, effectiveProjectId: "" };
|
|
176
|
+
}
|
|
177
|
+
const cacheKey = getCacheKey(auth);
|
|
178
|
+
if (cacheKey) {
|
|
179
|
+
const cached = projectContextResultCache.get(cacheKey);
|
|
180
|
+
if (cached) {
|
|
181
|
+
return cached;
|
|
182
|
+
}
|
|
183
|
+
const pending = projectContextPendingCache.get(cacheKey);
|
|
184
|
+
if (pending) {
|
|
185
|
+
return pending;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
const resolveContext = async () => {
|
|
189
|
+
const parts = parseRefreshParts(auth.refresh);
|
|
190
|
+
if (parts.managedProjectId) {
|
|
191
|
+
return { auth, effectiveProjectId: parts.managedProjectId };
|
|
192
|
+
}
|
|
193
|
+
const fallbackProjectId = ANTIGRAVITY_DEFAULT_PROJECT_ID;
|
|
194
|
+
const persistManagedProject = async (managedProjectId) => {
|
|
195
|
+
const updatedAuth = {
|
|
196
|
+
...auth,
|
|
197
|
+
refresh: formatRefreshParts({
|
|
198
|
+
refreshToken: parts.refreshToken,
|
|
199
|
+
projectId: parts.projectId,
|
|
200
|
+
managedProjectId,
|
|
201
|
+
}),
|
|
202
|
+
};
|
|
203
|
+
await client.auth.set({
|
|
204
|
+
path: { id: providerId },
|
|
205
|
+
body: updatedAuth,
|
|
206
|
+
});
|
|
207
|
+
return { auth: updatedAuth, effectiveProjectId: managedProjectId };
|
|
208
|
+
};
|
|
209
|
+
// Try to resolve a managed project from Antigravity if possible.
|
|
210
|
+
const loadPayload = await loadManagedProject(accessToken, parts.projectId ?? fallbackProjectId);
|
|
211
|
+
const resolvedManagedProjectId = extractManagedProjectId(loadPayload);
|
|
212
|
+
if (resolvedManagedProjectId) {
|
|
213
|
+
return persistManagedProject(resolvedManagedProjectId);
|
|
214
|
+
}
|
|
215
|
+
if (parts.projectId) {
|
|
216
|
+
return { auth, effectiveProjectId: parts.projectId };
|
|
217
|
+
}
|
|
218
|
+
// No project id present in auth; fall back to the hardcoded id for requests.
|
|
219
|
+
return { auth, effectiveProjectId: fallbackProjectId };
|
|
220
|
+
};
|
|
221
|
+
if (!cacheKey) {
|
|
222
|
+
return resolveContext();
|
|
223
|
+
}
|
|
224
|
+
const promise = resolveContext()
|
|
225
|
+
.then((result) => {
|
|
226
|
+
const nextKey = getCacheKey(result.auth) ?? cacheKey;
|
|
227
|
+
projectContextPendingCache.delete(cacheKey);
|
|
228
|
+
projectContextResultCache.set(nextKey, result);
|
|
229
|
+
if (nextKey !== cacheKey) {
|
|
230
|
+
projectContextResultCache.delete(cacheKey);
|
|
231
|
+
}
|
|
232
|
+
return result;
|
|
233
|
+
})
|
|
234
|
+
.catch((error) => {
|
|
235
|
+
projectContextPendingCache.delete(cacheKey);
|
|
236
|
+
throw error;
|
|
237
|
+
});
|
|
238
|
+
projectContextPendingCache.set(cacheKey, promise);
|
|
239
|
+
return promise;
|
|
240
|
+
}
|
|
241
|
+
//# sourceMappingURL=project.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../../src/plugin/project.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export interface AntigravityApiError {
|
|
2
|
+
code?: number;
|
|
3
|
+
message?: string;
|
|
4
|
+
status?: string;
|
|
5
|
+
[key: string]: unknown;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Minimal representation of Antigravity API responses we touch.
|
|
9
|
+
*/
|
|
10
|
+
export interface AntigravityApiBody {
|
|
11
|
+
response?: unknown;
|
|
12
|
+
error?: AntigravityApiError;
|
|
13
|
+
[key: string]: unknown;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Usage metadata exposed by Antigravity responses. Fields are optional to reflect partial payloads.
|
|
17
|
+
*/
|
|
18
|
+
export interface AntigravityUsageMetadata {
|
|
19
|
+
totalTokenCount?: number;
|
|
20
|
+
promptTokenCount?: number;
|
|
21
|
+
candidatesTokenCount?: number;
|
|
22
|
+
cachedContentTokenCount?: number;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Normalized thinking configuration accepted by Antigravity.
|
|
26
|
+
*/
|
|
27
|
+
export interface ThinkingConfig {
|
|
28
|
+
thinkingBudget?: number;
|
|
29
|
+
includeThoughts?: boolean;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Ensures thinkingConfig is valid: includeThoughts only allowed when budget > 0.
|
|
33
|
+
*/
|
|
34
|
+
export declare function normalizeThinkingConfig(config: unknown): ThinkingConfig | undefined;
|
|
35
|
+
/**
|
|
36
|
+
* Parses an Antigravity API body; handles array-wrapped responses the API sometimes returns.
|
|
37
|
+
*/
|
|
38
|
+
export declare function parseAntigravityApiBody(rawText: string): AntigravityApiBody | null;
|
|
39
|
+
/**
|
|
40
|
+
* Extracts usageMetadata from a response object, guarding types.
|
|
41
|
+
*/
|
|
42
|
+
export declare function extractUsageMetadata(body: AntigravityApiBody): AntigravityUsageMetadata | null;
|
|
43
|
+
/**
|
|
44
|
+
* Walks SSE lines to find a usage-bearing response chunk.
|
|
45
|
+
*/
|
|
46
|
+
export declare function extractUsageFromSsePayload(payload: string): AntigravityUsageMetadata | null;
|
|
47
|
+
/**
|
|
48
|
+
* Enhances 404 errors for Antigravity models with a direct preview-access message.
|
|
49
|
+
*/
|
|
50
|
+
export declare function rewriteAntigravityPreviewAccessError(body: AntigravityApiBody, status: number, requestedModel?: string): AntigravityApiBody | null;
|
|
51
|
+
//# sourceMappingURL=request-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-helpers.d.ts","sourceRoot":"","sources":["../../../src/plugin/request-helpers.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,mBAAmB,CAAC;IAC5B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,OAAO,GAAG,cAAc,GAAG,SAAS,CA2BnF;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI,CAmBlF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,kBAAkB,GAAG,wBAAwB,GAAG,IAAI,CAmB9F;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,wBAAwB,GAAG,IAAI,CAuB3F;AAED;;GAEG;AACH,wBAAgB,oCAAoC,CAClD,IAAI,EAAE,kBAAkB,EACxB,MAAM,EAAE,MAAM,EACd,cAAc,CAAC,EAAE,MAAM,GACtB,kBAAkB,GAAG,IAAI,CAmB3B"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
const ANTIGRAVITY_PREVIEW_LINK = "https://goo.gle/enable-preview-features"; // TODO: Update to Antigravity link if available
|
|
2
|
+
/**
|
|
3
|
+
* Ensures thinkingConfig is valid: includeThoughts only allowed when budget > 0.
|
|
4
|
+
*/
|
|
5
|
+
export function normalizeThinkingConfig(config) {
|
|
6
|
+
if (!config || typeof config !== "object") {
|
|
7
|
+
return undefined;
|
|
8
|
+
}
|
|
9
|
+
const record = config;
|
|
10
|
+
const budgetRaw = record.thinkingBudget ?? record.thinking_budget;
|
|
11
|
+
const includeRaw = record.includeThoughts ?? record.include_thoughts;
|
|
12
|
+
const thinkingBudget = typeof budgetRaw === "number" && Number.isFinite(budgetRaw) ? budgetRaw : undefined;
|
|
13
|
+
const includeThoughts = typeof includeRaw === "boolean" ? includeRaw : undefined;
|
|
14
|
+
const enableThinking = thinkingBudget !== undefined && thinkingBudget > 0;
|
|
15
|
+
const finalInclude = enableThinking ? includeThoughts ?? false : false;
|
|
16
|
+
if (!enableThinking && finalInclude === false && thinkingBudget === undefined && includeThoughts === undefined) {
|
|
17
|
+
return undefined;
|
|
18
|
+
}
|
|
19
|
+
const normalized = {};
|
|
20
|
+
if (thinkingBudget !== undefined) {
|
|
21
|
+
normalized.thinkingBudget = thinkingBudget;
|
|
22
|
+
}
|
|
23
|
+
if (finalInclude !== undefined) {
|
|
24
|
+
normalized.includeThoughts = finalInclude;
|
|
25
|
+
}
|
|
26
|
+
return normalized;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Parses an Antigravity API body; handles array-wrapped responses the API sometimes returns.
|
|
30
|
+
*/
|
|
31
|
+
export function parseAntigravityApiBody(rawText) {
|
|
32
|
+
try {
|
|
33
|
+
const parsed = JSON.parse(rawText);
|
|
34
|
+
if (Array.isArray(parsed)) {
|
|
35
|
+
const firstObject = parsed.find((item) => typeof item === "object" && item !== null);
|
|
36
|
+
if (firstObject && typeof firstObject === "object") {
|
|
37
|
+
return firstObject;
|
|
38
|
+
}
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
if (parsed && typeof parsed === "object") {
|
|
42
|
+
return parsed;
|
|
43
|
+
}
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Extracts usageMetadata from a response object, guarding types.
|
|
52
|
+
*/
|
|
53
|
+
export function extractUsageMetadata(body) {
|
|
54
|
+
const usage = (body.response && typeof body.response === "object"
|
|
55
|
+
? body.response.usageMetadata
|
|
56
|
+
: undefined);
|
|
57
|
+
if (!usage || typeof usage !== "object") {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
const asRecord = usage;
|
|
61
|
+
const toNumber = (value) => typeof value === "number" && Number.isFinite(value) ? value : undefined;
|
|
62
|
+
return {
|
|
63
|
+
totalTokenCount: toNumber(asRecord.totalTokenCount),
|
|
64
|
+
promptTokenCount: toNumber(asRecord.promptTokenCount),
|
|
65
|
+
candidatesTokenCount: toNumber(asRecord.candidatesTokenCount),
|
|
66
|
+
cachedContentTokenCount: toNumber(asRecord.cachedContentTokenCount),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Walks SSE lines to find a usage-bearing response chunk.
|
|
71
|
+
*/
|
|
72
|
+
export function extractUsageFromSsePayload(payload) {
|
|
73
|
+
const lines = payload.split("\n");
|
|
74
|
+
for (const line of lines) {
|
|
75
|
+
if (!line.startsWith("data:")) {
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
const jsonText = line.slice(5).trim();
|
|
79
|
+
if (!jsonText) {
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
try {
|
|
83
|
+
const parsed = JSON.parse(jsonText);
|
|
84
|
+
if (parsed && typeof parsed === "object") {
|
|
85
|
+
const usage = extractUsageMetadata({ response: parsed.response });
|
|
86
|
+
if (usage) {
|
|
87
|
+
return usage;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Enhances 404 errors for Antigravity models with a direct preview-access message.
|
|
99
|
+
*/
|
|
100
|
+
export function rewriteAntigravityPreviewAccessError(body, status, requestedModel) {
|
|
101
|
+
if (!needsPreviewAccessOverride(status, body, requestedModel)) {
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
const error = body.error ?? {};
|
|
105
|
+
const trimmedMessage = typeof error.message === "string" ? error.message.trim() : "";
|
|
106
|
+
const messagePrefix = trimmedMessage.length > 0
|
|
107
|
+
? trimmedMessage
|
|
108
|
+
: "Antigravity preview features are not enabled for this account.";
|
|
109
|
+
const enhancedMessage = `${messagePrefix} Request preview access at ${ANTIGRAVITY_PREVIEW_LINK} before using this model.`;
|
|
110
|
+
return {
|
|
111
|
+
...body,
|
|
112
|
+
error: {
|
|
113
|
+
...error,
|
|
114
|
+
message: enhancedMessage,
|
|
115
|
+
},
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
function needsPreviewAccessOverride(status, body, requestedModel) {
|
|
119
|
+
if (status !== 404) {
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
if (isAntigravityModel(requestedModel)) {
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
125
|
+
const errorMessage = typeof body.error?.message === "string" ? body.error.message : "";
|
|
126
|
+
return isAntigravityModel(errorMessage);
|
|
127
|
+
}
|
|
128
|
+
function isAntigravityModel(target) {
|
|
129
|
+
if (!target) {
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
// Check for Antigravity models instead of Gemini 3
|
|
133
|
+
return /antigravity/i.test(target) || /opus/i.test(target) || /claude/i.test(target);
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=request-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-helpers.js","sourceRoot":"","sources":["../../../src/plugin/request-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type AntigravityDebugContext } from "./debug";
|
|
2
|
+
/**
|
|
3
|
+
* Detects requests headed to the Google Generative Language API so we can intercept them.
|
|
4
|
+
*/
|
|
5
|
+
export declare function isGenerativeLanguageRequest(input: RequestInfo): input is string;
|
|
6
|
+
/**
|
|
7
|
+
* Rewrites OpenAI-style requests into Antigravity shape, normalizing model, headers,
|
|
8
|
+
* optional cached_content, and thinking config. Also toggles streaming mode for SSE actions.
|
|
9
|
+
*/
|
|
10
|
+
export declare function prepareAntigravityRequest(input: RequestInfo, init: RequestInit | undefined, accessToken: string, projectId: string, endpointOverride?: string): {
|
|
11
|
+
request: RequestInfo;
|
|
12
|
+
init: RequestInit;
|
|
13
|
+
streaming: boolean;
|
|
14
|
+
requestedModel?: string;
|
|
15
|
+
effectiveModel?: string;
|
|
16
|
+
projectId?: string;
|
|
17
|
+
endpoint?: string;
|
|
18
|
+
toolDebugMissing?: number;
|
|
19
|
+
toolDebugSummary?: string;
|
|
20
|
+
toolDebugPayload?: string;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Normalizes Antigravity responses: applies retry headers, extracts cache usage into headers,
|
|
24
|
+
* rewrites preview errors, flattens streaming payloads, and logs debug metadata.
|
|
25
|
+
*/
|
|
26
|
+
export declare function transformAntigravityResponse(response: Response, streaming: boolean, debugContext?: AntigravityDebugContext | null, requestedModel?: string, projectId?: string, endpoint?: string, effectiveModel?: string, toolDebugMissing?: number, toolDebugSummary?: string, toolDebugPayload?: string): Promise<Response>;
|
|
27
|
+
//# sourceMappingURL=request.d.ts.map
|