diff --git a/src/cli/config-manager.test.ts b/src/cli/config-manager.test.ts index b6d0fc1db1..525de2e56f 100644 --- a/src/cli/config-manager.test.ts +++ b/src/cli/config-manager.test.ts @@ -170,24 +170,32 @@ describe("fetchNpmDistTags", () => { }) describe("config-manager ANTIGRAVITY_PROVIDER_CONFIG", () => { - test("Gemini models include full spec (limit + modalities)", () => { + test("All models include full spec (limit + modalities)", () => { const google = (ANTIGRAVITY_PROVIDER_CONFIG as any).google expect(google).toBeTruthy() const models = google.models as Record expect(models).toBeTruthy() + // #given all models in the config const required = [ - "antigravity-gemini-3-pro-high", - "antigravity-gemini-3-pro-low", + "antigravity-gemini-3-pro", "antigravity-gemini-3-flash", + "antigravity-claude-sonnet-4-5", + "antigravity-claude-sonnet-4-5-thinking", + "antigravity-claude-opus-4-5-thinking", + "gemini-2.5-flash", + "gemini-2.5-pro", + "gemini-3-flash-preview", + "gemini-3-pro-preview", ] + // #when checking each model for (const key of required) { const model = models[key] + // #then each model should have required properties expect(model).toBeTruthy() expect(typeof model.name).toBe("string") - expect(model.name.includes("(Antigravity)")).toBe(true) expect(model.limit).toBeTruthy() expect(typeof model.limit.context).toBe("number") @@ -198,6 +206,57 @@ describe("config-manager ANTIGRAVITY_PROVIDER_CONFIG", () => { expect(Array.isArray(model.modalities.output)).toBe(true) } }) + + test("Antigravity models have (Antigravity) in name", () => { + const models = (ANTIGRAVITY_PROVIDER_CONFIG as any).google.models as Record + + const antigravityModels = [ + "antigravity-gemini-3-pro", + "antigravity-gemini-3-flash", + "antigravity-claude-sonnet-4-5", + "antigravity-claude-sonnet-4-5-thinking", + "antigravity-claude-opus-4-5-thinking", + ] + + for (const key of antigravityModels) { + expect(models[key].name.includes("(Antigravity)")).toBe(true) + } + }) + + test("Gemini CLI models have (Gemini CLI) in name", () => { + const models = (ANTIGRAVITY_PROVIDER_CONFIG as any).google.models as Record + + const geminiCliModels = [ + "gemini-2.5-flash", + "gemini-2.5-pro", + "gemini-3-flash-preview", + "gemini-3-pro-preview", + ] + + for (const key of geminiCliModels) { + expect(models[key].name.includes("(Gemini CLI)")).toBe(true) + } + }) + + test("Thinking models have variants with thinkingConfig or thinkingLevel", () => { + const models = (ANTIGRAVITY_PROVIDER_CONFIG as any).google.models as Record + + // #given models with variants + const modelsWithVariants = [ + "antigravity-gemini-3-pro", + "antigravity-gemini-3-flash", + "antigravity-claude-sonnet-4-5-thinking", + "antigravity-claude-opus-4-5-thinking", + ] + + // #when checking variants + for (const key of modelsWithVariants) { + const model = models[key] + // #then variants should exist + expect(model.variants).toBeTruthy() + expect(Object.keys(model.variants).length).toBeGreaterThan(0) + } + }) }) describe("generateOmoConfig - GitHub Copilot fallback", () => { diff --git a/src/cli/config-manager.ts b/src/cli/config-manager.ts index 37a96dc712..122584e963 100644 --- a/src/cli/config-manager.ts +++ b/src/cli/config-manager.ts @@ -578,31 +578,73 @@ export async function runBunInstallWithDetails(): Promise { * @see https://github.com/NoeFabris/opencode-antigravity-auth#migration-guide-v127 */ export const ANTIGRAVITY_PROVIDER_CONFIG = { - google: { - name: "Google", - models: { - "antigravity-gemini-3-pro-high": { - name: "Gemini 3 Pro High (Antigravity)", - thinking: true, - attachment: true, - limit: { context: 1048576, output: 65535 }, - modalities: { input: ["text", "image", "pdf"], output: ["text"] }, - }, - "antigravity-gemini-3-pro-low": { - name: "Gemini 3 Pro Low (Antigravity)", - thinking: true, - attachment: true, - limit: { context: 1048576, output: 65535 }, - modalities: { input: ["text", "image", "pdf"], output: ["text"] }, - }, - "antigravity-gemini-3-flash": { - name: "Gemini 3 Flash (Antigravity)", - attachment: true, - limit: { context: 1048576, output: 65536 }, - modalities: { input: ["text", "image", "pdf"], output: ["text"] }, - }, + google: { + models: { + "antigravity-gemini-3-pro": { + name: "Gemini 3 Pro (Antigravity)", + limit: { context: 1048576, output: 65535 }, + modalities: { input: ["text", "image", "pdf"], output: ["text"] }, + variants: { + low: { thinkingLevel: "low" }, + high: { thinkingLevel: "high" } + } + }, + "antigravity-gemini-3-flash": { + name: "Gemini 3 Flash (Antigravity)", + limit: { context: 1048576, output: 65536 }, + modalities: { input: ["text", "image", "pdf"], output: ["text"] }, + variants: { + minimal: { thinkingLevel: "minimal" }, + low: { thinkingLevel: "low" }, + medium: { thinkingLevel: "medium" }, + high: { thinkingLevel: "high" } + } + }, + "antigravity-claude-sonnet-4-5": { + name: "Claude Sonnet 4.5 (Antigravity)", + limit: { context: 200000, output: 64000 }, + modalities: { input: ["text", "image", "pdf"], output: ["text"] } + }, + "antigravity-claude-sonnet-4-5-thinking": { + name: "Claude Sonnet 4.5 Thinking (Antigravity)", + limit: { context: 200000, output: 64000 }, + modalities: { input: ["text", "image", "pdf"], output: ["text"] }, + variants: { + low: { thinkingConfig: { thinkingBudget: 8192 } }, + max: { thinkingConfig: { thinkingBudget: 32768 } } + } + }, + "antigravity-claude-opus-4-5-thinking": { + name: "Claude Opus 4.5 Thinking (Antigravity)", + limit: { context: 200000, output: 64000 }, + modalities: { input: ["text", "image", "pdf"], output: ["text"] }, + variants: { + low: { thinkingConfig: { thinkingBudget: 8192 } }, + max: { thinkingConfig: { thinkingBudget: 32768 } } + } + }, + "gemini-2.5-flash": { + name: "Gemini 2.5 Flash (Gemini CLI)", + limit: { context: 1048576, output: 65536 }, + modalities: { input: ["text", "image", "pdf"], output: ["text"] } + }, + "gemini-2.5-pro": { + name: "Gemini 2.5 Pro (Gemini CLI)", + limit: { context: 1048576, output: 65536 }, + modalities: { input: ["text", "image", "pdf"], output: ["text"] } + }, + "gemini-3-flash-preview": { + name: "Gemini 3 Flash Preview (Gemini CLI)", + limit: { context: 1048576, output: 65536 }, + modalities: { input: ["text", "image", "pdf"], output: ["text"] } + }, + "gemini-3-pro-preview": { + name: "Gemini 3 Pro Preview (Gemini CLI)", + limit: { context: 1048576, output: 65535 }, + modalities: { input: ["text", "image", "pdf"], output: ["text"] } + } + } }, - }, }