mirror of
https://github.com/tiennm99/ccs.git
synced 2026-09-02 18:18:43 +00:00
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:
@@ -125,24 +125,50 @@ export async function configureProviderModel(
|
|||||||
defaultIndex: safeDefaultIdx,
|
defaultIndex: safeDefaultIdx,
|
||||||
});
|
});
|
||||||
|
|
||||||
// Get base env vars to preserve haiku model and base URL
|
// Get base env vars for defaults
|
||||||
const baseEnv = getClaudeEnvVars(provider);
|
const baseEnv = getClaudeEnvVars(provider);
|
||||||
|
|
||||||
// Build settings with selected model
|
// Read existing settings to preserve user customizations
|
||||||
// For Claude models via Antigravity: disable thinking toggle (protocol limitation)
|
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);
|
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> = {
|
const settings: Record<string, unknown> = {
|
||||||
env: {
|
...existingSettings,
|
||||||
...baseEnv,
|
env: mergedEnv,
|
||||||
ANTHROPIC_MODEL: selectedModel,
|
|
||||||
ANTHROPIC_DEFAULT_OPUS_MODEL: selectedModel,
|
|
||||||
ANTHROPIC_DEFAULT_SONNET_MODEL: selectedModel,
|
|
||||||
// Keep haiku as-is from base config (usually flash model)
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Claude models via Antigravity don't support thinking toggle
|
// 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) {
|
if (isClaude) {
|
||||||
settings.alwaysThinkingEnabled = false;
|
settings.alwaysThinkingEnabled = false;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user