fix(antigravity): sanitize Claude Cloud Code payloads (#2090)

Integrated into release/v3.8.0
This commit is contained in:
Raxxoor
2026-05-10 01:36:00 +01:00
committed by GitHub
parent 043d345647
commit 4f202f3fa5

View File

@@ -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<string, unknown>): v
request.generationConfig = generationConfig;
}
function asRecord(value: unknown): Record<string, unknown> | null {
return value && typeof value === "object" && !Array.isArray(value)
? (value as Record<string, unknown>)
: null;
}
function sanitizeAntigravityGeminiRequest(
request: Record<string, unknown>
): Record<string, unknown> {
const clean: Record<string, unknown> = {};
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<string, unknown>) }
: {};
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;