Fix GitHub Copilot agent mode with Antigravity

Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
lukmanfauzie
2026-04-26 17:47:13 +08:00
parent a331c34eab
commit 222e22fa53
5 changed files with 47 additions and 19 deletions

View File

@@ -8,9 +8,9 @@ export const UNSUPPORTED_SCHEMA_CONSTRAINTS = [
// Claude rejects these in VALIDATED mode
"default", "examples",
// JSON Schema meta keywords
"$schema", "$defs", "definitions", "const", "$ref",
"$schema", "$defs", "definitions", "const", "$ref", "$comment",
// Object validation keywords (not supported)
"additionalProperties", "propertyNames", "patternProperties",
"additionalProperties", "propertyNames", "patternProperties", "enumDescriptions",
// Complex schema keywords (handled by flattenAnyOfOneOf/mergeAllOf)
"anyOf", "oneOf", "allOf", "not",
// Dependency keywords (not supported)
@@ -111,16 +111,18 @@ function removeUnsupportedKeywords(obj, keywords) {
for (const item of obj) {
removeUnsupportedKeywords(item, keywords);
}
} else {
for (const key of Object.keys(obj)) {
if (keywords.includes(key) || key.startsWith("x-")) {
delete obj[key];
}
return;
}
for (const key of Object.keys(obj)) {
if (keywords.includes(key) || key.startsWith("x-")) {
delete obj[key];
continue;
}
for (const value of Object.values(obj)) {
if (value && typeof value === "object") {
removeUnsupportedKeywords(value, keywords);
}
const value = obj[key];
if (value && typeof value === "object") {
removeUnsupportedKeywords(value, keywords);
}
}
}

View File

@@ -71,7 +71,7 @@ function stripContentTypes(body, stripList = []) {
}
// Translate request: source -> openai -> target
export function translateRequest(sourceFormat, targetFormat, model, body, stream = true, credentials = null, provider = null, reqLogger = null, stripList = [], connectionId = null, rtkEnabled = false) {
export function translateRequest(sourceFormat, targetFormat, model, body, stream = true, credentials = null, provider = null, reqLogger = null, stripList = [], connectionId = null, rtkEnabled = false, clientTool = null) {
ensureInitialized();
let result = body;
@@ -141,9 +141,9 @@ export function translateRequest(sourceFormat, targetFormat, model, body, stream
}
// Antigravity cloaking: rename client tools + inject decoys (anti-ban)
// Skip if client is native AG (userAgent = antigravity)
if (provider === FORMATS.ANTIGRAVITY && body.userAgent !== FORMATS.ANTIGRAVITY) {
const { cloakedBody, toolNameMap } = AntigravityExecutor.cloakTools(result);
// Only apply for GitHub Copilot requests so other clients are unaffected.
if (provider === FORMATS.ANTIGRAVITY && clientTool === "github-copilot") {
const { cloakedBody, toolNameMap } = AntigravityExecutor.cloakTools(result, clientTool);
result = cloakedBody;
if (toolNameMap?.size > 0) {
result._toolNameMap = toolNameMap;