From 4f202f3fa5d0db738306917e0ccb65a9212b791b Mon Sep 17 00:00:00 2001 From: Raxxoor Date: Sun, 10 May 2026 01:36:00 +0100 Subject: [PATCH] fix(antigravity): sanitize Claude Cloud Code payloads (#2090) Integrated into release/v3.8.0 --- open-sse/executors/antigravity.ts | 51 ++++++++++++++++++++++++++----- 1 file changed, 43 insertions(+), 8 deletions(-) diff --git a/open-sse/executors/antigravity.ts b/open-sse/executors/antigravity.ts index cad44be0f2..3e929cfc8e 100644 --- a/open-sse/executors/antigravity.ts +++ b/open-sse/executors/antigravity.ts @@ -27,6 +27,7 @@ import { shouldStripCloudCodeThinking, stripCloudCodeThinkingConfig, } from "../services/cloudCodeThinking.ts"; +import { buildGeminiTools } from "../translator/helpers/geminiToolsSanitizer.ts"; import { deriveAntigravityMachineId, generateAntigravityRequestId, @@ -322,6 +323,44 @@ function applyAntigravityGenerationDefaults(request: Record): v request.generationConfig = generationConfig; } +function asRecord(value: unknown): Record | null { + return value && typeof value === "object" && !Array.isArray(value) + ? (value as Record) + : null; +} + +function sanitizeAntigravityGeminiRequest( + request: Record +): Record { + const clean: Record = {}; + + if (Array.isArray(request.contents)) { + clean.contents = request.contents; + } + + if (asRecord(request.systemInstruction)) { + clean.systemInstruction = request.systemInstruction; + } + + clean.generationConfig = asRecord(request.generationConfig) + ? { ...(request.generationConfig as Record) } + : {}; + + const geminiTools = buildGeminiTools(request.tools); + if (geminiTools) { + clean.tools = geminiTools; + clean.toolConfig = { functionCallingConfig: { mode: "VALIDATED" } }; + } else if (asRecord(request.toolConfig)) { + clean.toolConfig = request.toolConfig; + } + + if (typeof request.sessionId === "string") { + clean.sessionId = request.sessionId; + } + + return clean; +} + export class AntigravityExecutor extends BaseExecutor { constructor() { super("antigravity", PROVIDERS.antigravity); @@ -424,7 +463,7 @@ export class AntigravityExecutor extends BaseExecutor { } } - const transformedRequest = { + const rawTransformedRequest = { ...normalizedBody.request, ...(contents.length > 0 && { contents }), sessionId: getAntigravitySessionId(credentials, normalizedBody.request?.sessionId), @@ -435,13 +474,9 @@ export class AntigravityExecutor extends BaseExecutor { : normalizedBody.request?.toolConfig, }; - if (isClaude) { - delete transformedRequest.messages; - delete transformedRequest.system; - delete transformedRequest.max_tokens; - delete transformedRequest.stream; - delete transformedRequest.temperature; - } + const transformedRequest = isClaude + ? sanitizeAntigravityGeminiRequest(rawTransformedRequest) + : rawTransformedRequest; // Obfuscate sensitive client names in user content (e.g. "OpenCode", "Cursor") const requestContents = transformedRequest.contents;