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 @@
|
|
|
1
|
+
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../../src/plugin/request.ts"],"names":[],"mappings":"AAKA,OAAO,EAA+B,KAAK,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAoBpF;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,WAAW,GAAG,KAAK,IAAI,MAAM,CAE/E;AA2BD;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,WAAW,GAAG,SAAS,EAC7B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,gBAAgB,CAAC,EAAE,MAAM,GACxB;IAAE,OAAO,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAE,CAsW3O;AAED;;;GAGG;AACH,wBAAsB,4BAA4B,CAChD,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,OAAO,EAClB,YAAY,CAAC,EAAE,uBAAuB,GAAG,IAAI,EAC7C,cAAc,CAAC,EAAE,MAAM,EACvB,SAAS,CAAC,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,MAAM,EACjB,cAAc,CAAC,EAAE,MAAM,EACvB,gBAAgB,CAAC,EAAE,MAAM,EACzB,gBAAgB,CAAC,EAAE,MAAM,EACzB,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,QAAQ,CAAC,CA+GnB"}
|
|
@@ -0,0 +1,458 @@
|
|
|
1
|
+
import crypto from "node:crypto";
|
|
2
|
+
import { ANTIGRAVITY_HEADERS, ANTIGRAVITY_ENDPOINT, } from "../constants";
|
|
3
|
+
import { logAntigravityDebugResponse } from "./debug";
|
|
4
|
+
import { extractUsageFromSsePayload, extractUsageMetadata, normalizeThinkingConfig, parseAntigravityApiBody, rewriteAntigravityPreviewAccessError, } from "./request-helpers";
|
|
5
|
+
function generateSyntheticProjectId() {
|
|
6
|
+
const adjectives = ["useful", "bright", "swift", "calm", "bold"];
|
|
7
|
+
const nouns = ["fuze", "wave", "spark", "flow", "core"];
|
|
8
|
+
const adj = adjectives[Math.floor(Math.random() * adjectives.length)];
|
|
9
|
+
const noun = nouns[Math.floor(Math.random() * nouns.length)];
|
|
10
|
+
const randomPart = crypto.randomUUID().slice(0, 5).toLowerCase();
|
|
11
|
+
return `${adj}-${noun}-${randomPart}`;
|
|
12
|
+
}
|
|
13
|
+
const STREAM_ACTION = "streamGenerateContent";
|
|
14
|
+
/**
|
|
15
|
+
* Detects requests headed to the Google Generative Language API so we can intercept them.
|
|
16
|
+
*/
|
|
17
|
+
export function isGenerativeLanguageRequest(input) {
|
|
18
|
+
return typeof input === "string" && input.includes("generativelanguage.googleapis.com");
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Rewrites SSE payloads so downstream consumers see only the inner `response` objects.
|
|
22
|
+
*/
|
|
23
|
+
function transformStreamingPayload(payload) {
|
|
24
|
+
return payload
|
|
25
|
+
.split("\n")
|
|
26
|
+
.map((line) => {
|
|
27
|
+
if (!line.startsWith("data:")) {
|
|
28
|
+
return line;
|
|
29
|
+
}
|
|
30
|
+
const json = line.slice(5).trim();
|
|
31
|
+
if (!json) {
|
|
32
|
+
return line;
|
|
33
|
+
}
|
|
34
|
+
try {
|
|
35
|
+
const parsed = JSON.parse(json);
|
|
36
|
+
if (parsed.response !== undefined) {
|
|
37
|
+
return `data: ${JSON.stringify(parsed.response)}`;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
catch (_) { }
|
|
41
|
+
return line;
|
|
42
|
+
})
|
|
43
|
+
.join("\n");
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Rewrites OpenAI-style requests into Antigravity shape, normalizing model, headers,
|
|
47
|
+
* optional cached_content, and thinking config. Also toggles streaming mode for SSE actions.
|
|
48
|
+
*/
|
|
49
|
+
export function prepareAntigravityRequest(input, init, accessToken, projectId, endpointOverride) {
|
|
50
|
+
const baseInit = { ...init };
|
|
51
|
+
const headers = new Headers(init?.headers ?? {});
|
|
52
|
+
let resolvedProjectId = projectId?.trim() || "";
|
|
53
|
+
let toolDebugMissing = 0;
|
|
54
|
+
const toolDebugSummaries = [];
|
|
55
|
+
let toolDebugPayload;
|
|
56
|
+
if (!isGenerativeLanguageRequest(input)) {
|
|
57
|
+
return {
|
|
58
|
+
request: input,
|
|
59
|
+
init: { ...baseInit, headers },
|
|
60
|
+
streaming: false,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
headers.set("Authorization", `Bearer ${accessToken}`);
|
|
64
|
+
headers.delete("x-api-key");
|
|
65
|
+
const match = input.match(/\/models\/([^:]+):(\w+)/);
|
|
66
|
+
if (!match) {
|
|
67
|
+
return {
|
|
68
|
+
request: input,
|
|
69
|
+
init: { ...baseInit, headers },
|
|
70
|
+
streaming: false,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
const [, rawModel = "", rawAction = ""] = match;
|
|
74
|
+
const effectiveModel = rawModel;
|
|
75
|
+
const upstreamModel = rawModel;
|
|
76
|
+
const streaming = rawAction === STREAM_ACTION;
|
|
77
|
+
const baseEndpoint = endpointOverride ?? ANTIGRAVITY_ENDPOINT;
|
|
78
|
+
const transformedUrl = `${baseEndpoint}/v1internal:${rawAction}${streaming ? "?alt=sse" : ""}`;
|
|
79
|
+
const isClaudeModel = upstreamModel.toLowerCase().includes("claude");
|
|
80
|
+
let body = baseInit.body;
|
|
81
|
+
if (typeof baseInit.body === "string" && baseInit.body) {
|
|
82
|
+
try {
|
|
83
|
+
const parsedBody = JSON.parse(baseInit.body);
|
|
84
|
+
const isWrapped = typeof parsedBody.project === "string" && "request" in parsedBody;
|
|
85
|
+
if (isWrapped) {
|
|
86
|
+
const wrappedBody = {
|
|
87
|
+
...parsedBody,
|
|
88
|
+
model: effectiveModel,
|
|
89
|
+
};
|
|
90
|
+
body = JSON.stringify(wrappedBody);
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
const requestPayload = { ...parsedBody };
|
|
94
|
+
const rawGenerationConfig = requestPayload.generationConfig;
|
|
95
|
+
const normalizedThinking = normalizeThinkingConfig(rawGenerationConfig?.thinkingConfig);
|
|
96
|
+
if (normalizedThinking) {
|
|
97
|
+
if (rawGenerationConfig) {
|
|
98
|
+
rawGenerationConfig.thinkingConfig = normalizedThinking;
|
|
99
|
+
requestPayload.generationConfig = rawGenerationConfig;
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
requestPayload.generationConfig = { thinkingConfig: normalizedThinking };
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
else if (rawGenerationConfig?.thinkingConfig) {
|
|
106
|
+
delete rawGenerationConfig.thinkingConfig;
|
|
107
|
+
requestPayload.generationConfig = rawGenerationConfig;
|
|
108
|
+
}
|
|
109
|
+
if ("system_instruction" in requestPayload) {
|
|
110
|
+
requestPayload.systemInstruction = requestPayload.system_instruction;
|
|
111
|
+
delete requestPayload.system_instruction;
|
|
112
|
+
}
|
|
113
|
+
const cachedContentFromExtra = typeof requestPayload.extra_body === "object" && requestPayload.extra_body
|
|
114
|
+
? requestPayload.extra_body.cached_content ??
|
|
115
|
+
requestPayload.extra_body.cachedContent
|
|
116
|
+
: undefined;
|
|
117
|
+
const cachedContent = requestPayload.cached_content ??
|
|
118
|
+
requestPayload.cachedContent ??
|
|
119
|
+
cachedContentFromExtra;
|
|
120
|
+
if (cachedContent) {
|
|
121
|
+
requestPayload.cachedContent = cachedContent;
|
|
122
|
+
}
|
|
123
|
+
delete requestPayload.cached_content;
|
|
124
|
+
delete requestPayload.cachedContent;
|
|
125
|
+
if (requestPayload.extra_body && typeof requestPayload.extra_body === "object") {
|
|
126
|
+
delete requestPayload.extra_body.cached_content;
|
|
127
|
+
delete requestPayload.extra_body.cachedContent;
|
|
128
|
+
if (Object.keys(requestPayload.extra_body).length === 0) {
|
|
129
|
+
delete requestPayload.extra_body;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
// Normalize tools. For Claude models, keep full function declarations (names + schemas).
|
|
133
|
+
if (Array.isArray(requestPayload.tools)) {
|
|
134
|
+
if (isClaudeModel) {
|
|
135
|
+
const functionDeclarations = [];
|
|
136
|
+
const passthroughTools = [];
|
|
137
|
+
const normalizeSchema = (schema) => {
|
|
138
|
+
if (schema && typeof schema === "object") {
|
|
139
|
+
return schema;
|
|
140
|
+
}
|
|
141
|
+
toolDebugMissing += 1;
|
|
142
|
+
return { type: "object", properties: {} };
|
|
143
|
+
};
|
|
144
|
+
requestPayload.tools.forEach((tool, idx) => {
|
|
145
|
+
const pushDeclaration = (decl, source) => {
|
|
146
|
+
const schema = decl?.parameters ||
|
|
147
|
+
decl?.input_schema ||
|
|
148
|
+
decl?.inputSchema ||
|
|
149
|
+
tool.parameters ||
|
|
150
|
+
tool.input_schema ||
|
|
151
|
+
tool.inputSchema ||
|
|
152
|
+
tool.function?.parameters ||
|
|
153
|
+
tool.function?.input_schema ||
|
|
154
|
+
tool.function?.inputSchema ||
|
|
155
|
+
tool.custom?.parameters ||
|
|
156
|
+
tool.custom?.input_schema;
|
|
157
|
+
const name = decl?.name ||
|
|
158
|
+
tool.name ||
|
|
159
|
+
tool.function?.name ||
|
|
160
|
+
tool.custom?.name ||
|
|
161
|
+
`tool-${functionDeclarations.length}`;
|
|
162
|
+
const description = decl?.description ||
|
|
163
|
+
tool.description ||
|
|
164
|
+
tool.function?.description ||
|
|
165
|
+
tool.custom?.description ||
|
|
166
|
+
"";
|
|
167
|
+
functionDeclarations.push({
|
|
168
|
+
name,
|
|
169
|
+
description,
|
|
170
|
+
parameters: normalizeSchema(schema),
|
|
171
|
+
});
|
|
172
|
+
toolDebugSummaries.push(`decl=${name},src=${source},hasSchema=${schema ? "y" : "n"}`);
|
|
173
|
+
};
|
|
174
|
+
if (Array.isArray(tool.functionDeclarations) && tool.functionDeclarations.length > 0) {
|
|
175
|
+
tool.functionDeclarations.forEach((decl) => pushDeclaration(decl, "functionDeclarations"));
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
// Fall back to function/custom style definitions.
|
|
179
|
+
if (tool.function ||
|
|
180
|
+
tool.custom ||
|
|
181
|
+
tool.parameters ||
|
|
182
|
+
tool.input_schema ||
|
|
183
|
+
tool.inputSchema) {
|
|
184
|
+
pushDeclaration(tool.function ?? tool.custom ?? tool, "function/custom");
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
// Preserve any non-function tool entries (e.g., codeExecution) untouched.
|
|
188
|
+
passthroughTools.push(tool);
|
|
189
|
+
});
|
|
190
|
+
const finalTools = [];
|
|
191
|
+
if (functionDeclarations.length > 0) {
|
|
192
|
+
finalTools.push({ functionDeclarations });
|
|
193
|
+
}
|
|
194
|
+
requestPayload.tools = finalTools.concat(passthroughTools);
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
// Default normalization for non-Claude models
|
|
198
|
+
requestPayload.tools = requestPayload.tools.map((tool, toolIndex) => {
|
|
199
|
+
const newTool = { ...tool };
|
|
200
|
+
const schemaCandidates = [
|
|
201
|
+
newTool.function?.input_schema,
|
|
202
|
+
newTool.function?.parameters,
|
|
203
|
+
newTool.function?.inputSchema,
|
|
204
|
+
newTool.custom?.input_schema,
|
|
205
|
+
newTool.custom?.parameters,
|
|
206
|
+
newTool.parameters,
|
|
207
|
+
newTool.input_schema,
|
|
208
|
+
newTool.inputSchema,
|
|
209
|
+
].filter(Boolean);
|
|
210
|
+
const schema = schemaCandidates[0];
|
|
211
|
+
const nameCandidate = newTool.name ||
|
|
212
|
+
newTool.function?.name ||
|
|
213
|
+
newTool.custom?.name ||
|
|
214
|
+
`tool-${toolIndex}`;
|
|
215
|
+
if (newTool.function && !newTool.function.input_schema && schema) {
|
|
216
|
+
newTool.function.input_schema = schema;
|
|
217
|
+
}
|
|
218
|
+
if (newTool.custom && !newTool.custom.input_schema && schema) {
|
|
219
|
+
newTool.custom.input_schema = schema;
|
|
220
|
+
}
|
|
221
|
+
if (!newTool.custom && newTool.function) {
|
|
222
|
+
newTool.custom = {
|
|
223
|
+
name: newTool.function.name || nameCandidate,
|
|
224
|
+
description: newTool.function.description,
|
|
225
|
+
input_schema: schema ?? { type: "object", properties: {} },
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
if (!newTool.custom && !newTool.function) {
|
|
229
|
+
newTool.custom = {
|
|
230
|
+
name: nameCandidate,
|
|
231
|
+
description: newTool.description,
|
|
232
|
+
input_schema: schema ?? { type: "object", properties: {} },
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
if (newTool.custom && !newTool.custom.input_schema) {
|
|
236
|
+
newTool.custom.input_schema = { type: "object", properties: {} };
|
|
237
|
+
toolDebugMissing += 1;
|
|
238
|
+
}
|
|
239
|
+
toolDebugSummaries.push(`idx=${toolIndex}, hasCustom=${!!newTool.custom}, customSchema=${!!newTool.custom?.input_schema}, hasFunction=${!!newTool.function}, functionSchema=${!!newTool.function?.input_schema}`);
|
|
240
|
+
// Strip custom wrappers for Gemini; only function-style is accepted.
|
|
241
|
+
if (newTool.custom) {
|
|
242
|
+
delete newTool.custom;
|
|
243
|
+
}
|
|
244
|
+
return newTool;
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
try {
|
|
248
|
+
toolDebugPayload = JSON.stringify(requestPayload.tools);
|
|
249
|
+
}
|
|
250
|
+
catch {
|
|
251
|
+
toolDebugPayload = undefined;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
// For Claude models, ensure functionCall/tool use parts carry IDs (required by Anthropic).
|
|
255
|
+
// We use a two-pass approach: first collect all functionCalls and assign IDs,
|
|
256
|
+
// then match functionResponses to their corresponding calls using a FIFO queue per function name.
|
|
257
|
+
if (isClaudeModel && Array.isArray(requestPayload.contents)) {
|
|
258
|
+
let toolCallCounter = 0;
|
|
259
|
+
// Track pending call IDs per function name as a FIFO queue
|
|
260
|
+
const pendingCallIdsByName = new Map();
|
|
261
|
+
// First pass: assign IDs to all functionCalls and collect them
|
|
262
|
+
requestPayload.contents = requestPayload.contents.map((content) => {
|
|
263
|
+
if (!content || !Array.isArray(content.parts)) {
|
|
264
|
+
return content;
|
|
265
|
+
}
|
|
266
|
+
const newParts = content.parts.map((part) => {
|
|
267
|
+
if (part && typeof part === "object" && part.functionCall) {
|
|
268
|
+
const call = { ...part.functionCall };
|
|
269
|
+
if (!call.id) {
|
|
270
|
+
call.id = `tool-call-${++toolCallCounter}`;
|
|
271
|
+
}
|
|
272
|
+
const nameKey = typeof call.name === "string" ? call.name : `tool-${toolCallCounter}`;
|
|
273
|
+
// Push to the queue for this function name
|
|
274
|
+
const queue = pendingCallIdsByName.get(nameKey) || [];
|
|
275
|
+
queue.push(call.id);
|
|
276
|
+
pendingCallIdsByName.set(nameKey, queue);
|
|
277
|
+
return { ...part, functionCall: call };
|
|
278
|
+
}
|
|
279
|
+
return part;
|
|
280
|
+
});
|
|
281
|
+
return { ...content, parts: newParts };
|
|
282
|
+
});
|
|
283
|
+
// Second pass: match functionResponses to their corresponding calls (FIFO order)
|
|
284
|
+
requestPayload.contents = requestPayload.contents.map((content) => {
|
|
285
|
+
if (!content || !Array.isArray(content.parts)) {
|
|
286
|
+
return content;
|
|
287
|
+
}
|
|
288
|
+
const newParts = content.parts.map((part) => {
|
|
289
|
+
if (part && typeof part === "object" && part.functionResponse) {
|
|
290
|
+
const resp = { ...part.functionResponse };
|
|
291
|
+
if (!resp.id && typeof resp.name === "string") {
|
|
292
|
+
const queue = pendingCallIdsByName.get(resp.name);
|
|
293
|
+
if (queue && queue.length > 0) {
|
|
294
|
+
// Consume the first pending ID (FIFO order)
|
|
295
|
+
resp.id = queue.shift();
|
|
296
|
+
pendingCallIdsByName.set(resp.name, queue);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
return { ...part, functionResponse: resp };
|
|
300
|
+
}
|
|
301
|
+
return part;
|
|
302
|
+
});
|
|
303
|
+
return { ...content, parts: newParts };
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
if ("model" in requestPayload) {
|
|
307
|
+
delete requestPayload.model;
|
|
308
|
+
}
|
|
309
|
+
const effectiveProjectId = projectId?.trim() || generateSyntheticProjectId();
|
|
310
|
+
resolvedProjectId = effectiveProjectId;
|
|
311
|
+
const wrappedBody = {
|
|
312
|
+
project: effectiveProjectId,
|
|
313
|
+
model: upstreamModel,
|
|
314
|
+
request: requestPayload,
|
|
315
|
+
};
|
|
316
|
+
// Add additional Antigravity fields
|
|
317
|
+
Object.assign(wrappedBody, {
|
|
318
|
+
userAgent: "antigravity",
|
|
319
|
+
requestId: "agent-" + crypto.randomUUID(),
|
|
320
|
+
});
|
|
321
|
+
if (wrappedBody.request && typeof wrappedBody.request === 'object') {
|
|
322
|
+
wrappedBody.request.sessionId = "-" + Math.floor(Math.random() * 9000000000000000000).toString();
|
|
323
|
+
}
|
|
324
|
+
body = JSON.stringify(wrappedBody);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
catch (error) {
|
|
328
|
+
throw error;
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
if (streaming) {
|
|
332
|
+
headers.set("Accept", "text/event-stream");
|
|
333
|
+
}
|
|
334
|
+
headers.set("User-Agent", ANTIGRAVITY_HEADERS["User-Agent"]);
|
|
335
|
+
headers.set("X-Goog-Api-Client", ANTIGRAVITY_HEADERS["X-Goog-Api-Client"]);
|
|
336
|
+
headers.set("Client-Metadata", ANTIGRAVITY_HEADERS["Client-Metadata"]);
|
|
337
|
+
// Optional debug header to observe tool normalization on the backend if surfaced
|
|
338
|
+
if (toolDebugMissing > 0) {
|
|
339
|
+
headers.set("X-Opencode-Tools-Debug", String(toolDebugMissing));
|
|
340
|
+
}
|
|
341
|
+
return {
|
|
342
|
+
request: transformedUrl,
|
|
343
|
+
init: {
|
|
344
|
+
...baseInit,
|
|
345
|
+
headers,
|
|
346
|
+
body,
|
|
347
|
+
},
|
|
348
|
+
streaming,
|
|
349
|
+
requestedModel: rawModel,
|
|
350
|
+
effectiveModel: upstreamModel,
|
|
351
|
+
projectId: resolvedProjectId,
|
|
352
|
+
endpoint: transformedUrl,
|
|
353
|
+
toolDebugMissing,
|
|
354
|
+
toolDebugSummary: toolDebugSummaries.slice(0, 20).join(" | "),
|
|
355
|
+
toolDebugPayload,
|
|
356
|
+
};
|
|
357
|
+
}
|
|
358
|
+
/**
|
|
359
|
+
* Normalizes Antigravity responses: applies retry headers, extracts cache usage into headers,
|
|
360
|
+
* rewrites preview errors, flattens streaming payloads, and logs debug metadata.
|
|
361
|
+
*/
|
|
362
|
+
export async function transformAntigravityResponse(response, streaming, debugContext, requestedModel, projectId, endpoint, effectiveModel, toolDebugMissing, toolDebugSummary, toolDebugPayload) {
|
|
363
|
+
const contentType = response.headers.get("content-type") ?? "";
|
|
364
|
+
const isJsonResponse = contentType.includes("application/json");
|
|
365
|
+
const isEventStreamResponse = contentType.includes("text/event-stream");
|
|
366
|
+
if (!isJsonResponse && !isEventStreamResponse) {
|
|
367
|
+
logAntigravityDebugResponse(debugContext, response, {
|
|
368
|
+
note: "Non-JSON response (body omitted)",
|
|
369
|
+
});
|
|
370
|
+
return response;
|
|
371
|
+
}
|
|
372
|
+
try {
|
|
373
|
+
const text = await response.text();
|
|
374
|
+
const headers = new Headers(response.headers);
|
|
375
|
+
if (!response.ok) {
|
|
376
|
+
let errorBody;
|
|
377
|
+
try {
|
|
378
|
+
errorBody = JSON.parse(text);
|
|
379
|
+
}
|
|
380
|
+
catch {
|
|
381
|
+
errorBody = { error: { message: text } };
|
|
382
|
+
}
|
|
383
|
+
// Inject Debug Info
|
|
384
|
+
if (errorBody?.error) {
|
|
385
|
+
const debugInfo = `\n\n[Debug Info]\nRequested Model: ${requestedModel || "Unknown"}\nEffective Model: ${effectiveModel || "Unknown"}\nProject: ${projectId || "Unknown"}\nEndpoint: ${endpoint || "Unknown"}\nStatus: ${response.status}\nRequest ID: ${headers.get('x-request-id') || "N/A"}${toolDebugMissing !== undefined ? `\nTool Debug Missing: ${toolDebugMissing}` : ""}${toolDebugSummary ? `\nTool Debug Summary: ${toolDebugSummary}` : ""}${toolDebugPayload ? `\nTool Debug Payload: ${toolDebugPayload}` : ""}`;
|
|
386
|
+
errorBody.error.message = (errorBody.error.message || "Unknown error") + debugInfo;
|
|
387
|
+
return new Response(JSON.stringify(errorBody), {
|
|
388
|
+
status: response.status,
|
|
389
|
+
statusText: response.statusText,
|
|
390
|
+
headers
|
|
391
|
+
});
|
|
392
|
+
}
|
|
393
|
+
if (errorBody?.error?.details && Array.isArray(errorBody.error.details)) {
|
|
394
|
+
const retryInfo = errorBody.error.details.find((detail) => detail['@type'] === 'type.googleapis.com/google.rpc.RetryInfo');
|
|
395
|
+
if (retryInfo?.retryDelay) {
|
|
396
|
+
const match = retryInfo.retryDelay.match(/^([\d.]+)s$/);
|
|
397
|
+
if (match && match[1]) {
|
|
398
|
+
const retrySeconds = parseFloat(match[1]);
|
|
399
|
+
if (!isNaN(retrySeconds) && retrySeconds > 0) {
|
|
400
|
+
const retryAfterSec = Math.ceil(retrySeconds).toString();
|
|
401
|
+
const retryAfterMs = Math.ceil(retrySeconds * 1000).toString();
|
|
402
|
+
headers.set('Retry-After', retryAfterSec);
|
|
403
|
+
headers.set('retry-after-ms', retryAfterMs);
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
const init = {
|
|
410
|
+
status: response.status,
|
|
411
|
+
statusText: response.statusText,
|
|
412
|
+
headers,
|
|
413
|
+
};
|
|
414
|
+
const usageFromSse = streaming && isEventStreamResponse ? extractUsageFromSsePayload(text) : null;
|
|
415
|
+
const parsed = !streaming || !isEventStreamResponse ? parseAntigravityApiBody(text) : null;
|
|
416
|
+
const patched = parsed ? rewriteAntigravityPreviewAccessError(parsed, response.status, requestedModel) : null;
|
|
417
|
+
const effectiveBody = patched ?? parsed ?? undefined;
|
|
418
|
+
const usage = usageFromSse ?? (effectiveBody ? extractUsageMetadata(effectiveBody) : null);
|
|
419
|
+
if (usage?.cachedContentTokenCount !== undefined) {
|
|
420
|
+
headers.set("x-antigravity-cached-content-token-count", String(usage.cachedContentTokenCount));
|
|
421
|
+
if (usage.totalTokenCount !== undefined) {
|
|
422
|
+
headers.set("x-antigravity-total-token-count", String(usage.totalTokenCount));
|
|
423
|
+
}
|
|
424
|
+
if (usage.promptTokenCount !== undefined) {
|
|
425
|
+
headers.set("x-antigravity-prompt-token-count", String(usage.promptTokenCount));
|
|
426
|
+
}
|
|
427
|
+
if (usage.candidatesTokenCount !== undefined) {
|
|
428
|
+
headers.set("x-antigravity-candidates-token-count", String(usage.candidatesTokenCount));
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
logAntigravityDebugResponse(debugContext, response, {
|
|
432
|
+
body: text,
|
|
433
|
+
note: streaming ? "Streaming SSE payload" : undefined,
|
|
434
|
+
headersOverride: headers,
|
|
435
|
+
});
|
|
436
|
+
if (streaming && response.ok && isEventStreamResponse) {
|
|
437
|
+
return new Response(transformStreamingPayload(text), init);
|
|
438
|
+
}
|
|
439
|
+
if (!parsed) {
|
|
440
|
+
return new Response(text, init);
|
|
441
|
+
}
|
|
442
|
+
if (effectiveBody?.response !== undefined) {
|
|
443
|
+
return new Response(JSON.stringify(effectiveBody.response), init);
|
|
444
|
+
}
|
|
445
|
+
if (patched) {
|
|
446
|
+
return new Response(JSON.stringify(patched), init);
|
|
447
|
+
}
|
|
448
|
+
return new Response(text, init);
|
|
449
|
+
}
|
|
450
|
+
catch (error) {
|
|
451
|
+
logAntigravityDebugResponse(debugContext, response, {
|
|
452
|
+
error,
|
|
453
|
+
note: "Failed to transform Antigravity response",
|
|
454
|
+
});
|
|
455
|
+
return response;
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
//# sourceMappingURL=request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request.js","sourceRoot":"","sources":["../../../src/plugin/request.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
interface OAuthListenerOptions {
|
|
2
|
+
/**
|
|
3
|
+
* How long to wait for the OAuth redirect before timing out (in milliseconds).
|
|
4
|
+
*/
|
|
5
|
+
timeoutMs?: number;
|
|
6
|
+
}
|
|
7
|
+
export interface OAuthListener {
|
|
8
|
+
/**
|
|
9
|
+
* Resolves with the callback URL once Google redirects back to the local server.
|
|
10
|
+
*/
|
|
11
|
+
waitForCallback(): Promise<URL>;
|
|
12
|
+
/**
|
|
13
|
+
* Cleanly stop listening for callbacks.
|
|
14
|
+
*/
|
|
15
|
+
close(): Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Starts a lightweight HTTP server that listens for the Antigravity OAuth redirect
|
|
19
|
+
* and resolves with the captured callback URL.
|
|
20
|
+
*/
|
|
21
|
+
export declare function startOAuthListener({ timeoutMs }?: OAuthListenerOptions): Promise<OAuthListener>;
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/plugin/server.ts"],"names":[],"mappings":"AAIA,UAAU,oBAAoB;IAC5B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IAChC;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAKD;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,EAAE,SAAyB,EAAE,GAAE,oBAAyB,GACvD,OAAO,CAAC,aAAa,CAAC,CAsNxB"}
|