## Fixes - Codex: auto-retry when upstream drops mid-stream (no more hangs) - Codex: fix random 400/404 errors, tool-calling failures, and unstable prompt cache - MITM: support Antigravity 2.x - Sanitize Read tool args to prevent retry loops from non-Anthropic models (#1144) - Implement json_schema fallback for OpenAI-compatible providers without native Structured Output (#1343) - Strip empty Read pages argument in OpenAI-to-Claude translator (#1354) - Forward Gemini output dimensions for embeddings (#1366) - Resolve setState-in-effect errors in dashboard components (#1362) - Gemini CLI: reuse stored OAuth project IDs for quota checks and show clearer setup guidance when the project is missing (#1271, #1428)
51 lines
2.1 KiB
JavaScript
51 lines
2.1 KiB
JavaScript
"use strict";
|
|
|
|
// Rewrite Antigravity IDE markers so upstream AG 2.x backend accepts the request.
|
|
// User-Agent header (antigravity/<old>) and body.metadata.ideVersion are forced
|
|
// to a known-good IDE version. Hardcoded MVP — toggle/version configurable later.
|
|
|
|
const ANTIGRAVITY_IDE_VERSION = "1.23.2";
|
|
const ANTIGRAVITY_IDE_VERSION_OVERRIDE_ENABLED = true;
|
|
|
|
function shouldRewriteMetadata(metadata) {
|
|
if (!metadata || typeof metadata !== "object" || Array.isArray(metadata)) return false;
|
|
if (String(metadata.ideName || "").toLowerCase() === "antigravity") return true;
|
|
if (String(metadata.ideType || "").toUpperCase() === "ANTIGRAVITY") return true;
|
|
return Object.prototype.hasOwnProperty.call(metadata, "ideVersion");
|
|
}
|
|
|
|
function rewriteAntigravityUserAgent(userAgent, version) {
|
|
if (typeof userAgent !== "string" || !userAgent.includes("antigravity/")) return userAgent;
|
|
return userAgent.replace(/antigravity\/[^\s]+/, `antigravity/${version}`);
|
|
}
|
|
|
|
function applyAntigravityIdeVersionOverride(bodyBuffer, headers) {
|
|
if (!ANTIGRAVITY_IDE_VERSION_OVERRIDE_ENABLED) {
|
|
return { bodyBuffer, headers, applied: false, version: ANTIGRAVITY_IDE_VERSION };
|
|
}
|
|
|
|
const nextHeaders = { ...headers };
|
|
const nextUserAgent = rewriteAntigravityUserAgent(nextHeaders["user-agent"], ANTIGRAVITY_IDE_VERSION);
|
|
const userAgentChanged = nextUserAgent !== nextHeaders["user-agent"];
|
|
if (userAgentChanged) nextHeaders["user-agent"] = nextUserAgent;
|
|
|
|
try {
|
|
const parsed = JSON.parse(bodyBuffer.toString());
|
|
if (!shouldRewriteMetadata(parsed?.metadata)) {
|
|
return { bodyBuffer, headers: nextHeaders, applied: userAgentChanged, version: ANTIGRAVITY_IDE_VERSION };
|
|
}
|
|
|
|
parsed.metadata.ideVersion = ANTIGRAVITY_IDE_VERSION;
|
|
const nextBodyBuffer = Buffer.from(JSON.stringify(parsed));
|
|
return { bodyBuffer: nextBodyBuffer, headers: nextHeaders, applied: true, version: ANTIGRAVITY_IDE_VERSION };
|
|
} catch {
|
|
return { bodyBuffer, headers: nextHeaders, applied: userAgentChanged, version: ANTIGRAVITY_IDE_VERSION };
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
ANTIGRAVITY_IDE_VERSION,
|
|
applyAntigravityIdeVersionOverride,
|
|
rewriteAntigravityUserAgent,
|
|
};
|