fix(agy): preserve user settings during model switch

Model configuration now uses selective merge instead of full replacement:
- Preserves all user customizations (includeCoAuthoredBy, MAX_TOKENS, etc.)
- Only updates CCS-controlled fields (model selection, base URL, auth token)
- Still enforces alwaysThinkingEnabled: false for Claude models
This commit is contained in:
kaitranntt
2025-12-05 17:02:19 -05:00
parent c71b1b9889
commit f5c31dab55
+37 -11
View File
@@ -125,24 +125,50 @@ export async function configureProviderModel(
defaultIndex: safeDefaultIdx,
});
// Get base env vars to preserve haiku model and base URL
// Get base env vars for defaults
const baseEnv = getClaudeEnvVars(provider);
// Build settings with selected model
// For Claude models via Antigravity: disable thinking toggle (protocol limitation)
// Read existing settings to preserve user customizations
let existingSettings: Record<string, unknown> = {};
let existingEnv: Record<string, string> = {};
if (fs.existsSync(settingsPath)) {
try {
existingSettings = JSON.parse(fs.readFileSync(settingsPath, 'utf8'));
existingEnv = (existingSettings.env as Record<string, string>) || {};
} catch {
// Invalid JSON - start fresh
}
}
// Build settings with selective merge:
// - Preserve ALL user settings (top-level and env vars)
// - Only update CCS-controlled fields (model selection + thinking toggle for Claude)
const isClaude = isClaudeModel(selectedModel);
// CCS-controlled env vars (always override with our values)
const ccsControlledEnv = {
ANTHROPIC_BASE_URL: baseEnv.ANTHROPIC_BASE_URL,
ANTHROPIC_AUTH_TOKEN: baseEnv.ANTHROPIC_AUTH_TOKEN,
ANTHROPIC_MODEL: selectedModel,
ANTHROPIC_DEFAULT_OPUS_MODEL: selectedModel,
ANTHROPIC_DEFAULT_SONNET_MODEL: selectedModel,
ANTHROPIC_DEFAULT_HAIKU_MODEL: baseEnv.ANTHROPIC_DEFAULT_HAIKU_MODEL,
};
// Merge: user env vars (preserved) + CCS controlled (override)
const mergedEnv = {
...existingEnv,
...ccsControlledEnv,
};
// Build final settings: preserve user top-level settings + update env
const settings: Record<string, unknown> = {
env: {
...baseEnv,
ANTHROPIC_MODEL: selectedModel,
ANTHROPIC_DEFAULT_OPUS_MODEL: selectedModel,
ANTHROPIC_DEFAULT_SONNET_MODEL: selectedModel,
// Keep haiku as-is from base config (usually flash model)
},
...existingSettings,
env: mergedEnv,
};
// Claude models via Antigravity don't support thinking toggle
// Google's protocol conversion layer doesn't properly handle tool schemas
// Always set to false for Claude models (CCS-controlled)
if (isClaude) {
settings.alwaysThinkingEnabled = false;
}