From 5798b308419d3798a706b2756e39d59dda9d8a29 Mon Sep 17 00:00:00 2001 From: BFLabsAI Date: Tue, 22 Sep 2026 15:04:03 +0700 Subject: [PATCH] fix(antigravity): drop requestType "agent" to avoid false 429 RESOURCE_EXHAUSTED --- open-sse/executors/antigravity.js | 9 ++++++++- open-sse/translator/request/openai-to-gemini.js | 12 +++++++----- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/open-sse/executors/antigravity.js b/open-sse/executors/antigravity.js index da4a7981..b8a25eed 100644 --- a/open-sse/executors/antigravity.js +++ b/open-sse/executors/antigravity.js @@ -293,12 +293,19 @@ export class AntigravityExecutor extends BaseExecutor { this._lastSessionId = transformedRequest.sessionId; // cached for buildHeaders (base.execute order) + // Official Antigravity client omits `requestType` entirely on the agent + // (chat) path. Sending `requestType: "agent"` here (or leaking it through + // from an upstream envelope via the ...body spread below) makes Google + // bucket the request and return a detail-free 429 RESOURCE_EXHAUSTED even + // with quota available. `image_gen` and + // `search` buckets are unaffected and keep their own requestType. + delete body.requestType; + return { ...body, project: projectId, model: body.model || model, userAgent: "antigravity", - requestType: "agent", requestId: buildIdeRequestId({ body, request: transformedRequest, credentials, model, requestType: "agent" }), request: transformedRequest }; diff --git a/open-sse/translator/request/openai-to-gemini.js b/open-sse/translator/request/openai-to-gemini.js index 305eaca0..918ba9c4 100644 --- a/open-sse/translator/request/openai-to-gemini.js +++ b/open-sse/translator/request/openai-to-gemini.js @@ -279,10 +279,11 @@ function wrapInCloudCodeEnvelope(model, geminiCLI, credentials = null, isAntigra } }; - // Antigravity specific fields - if (isAntigravity) { - envelope.requestType = "agent"; - } else { + // Antigravity specific fields. + // NOTE: the official Antigravity client omits `requestType` entirely on the + // agent (chat) path. Sending `requestType: "agent"` triggers a detail-free + // 429 RESOURCE_EXHAUSTED even with quota available. + if (!isAntigravity) { // Keep safetySettings for Gemini CLI envelope.request.safetySettings = geminiCLI.safetySettings; } @@ -305,7 +306,8 @@ function wrapInCloudCodeEnvelopeForClaude(model, claudeRequest, credentials = nu model: model, userAgent: "antigravity", requestId: `agent-${generateUUID()}`, - requestType: "agent", + // NOTE: official Antigravity client omits `requestType` on the agent (chat) + // path — see the note in wrapInCloudCodeEnvelope() above. request: { sessionId: toNumericSessionId(credentials?._clientSessionId) || deriveSessionId(credentials?.email || credentials?.connectionId), contents: [],