Files
9router/src/mitm/antigravityIdeVersion.js
decolua ac2fee7305 # v0.4.62 (2026-05-26)
## 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)
2026-05-26 13:15:59 +07:00

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,
};