Daemon: a changed default model overrides the saved state (0.6.3)
ci / build (push) Canceled after 0s

In managed mode the extension switches models by rewriting the daemon config's
defaultModel and restarting it, but loadState() preferred the persisted model, so the
daemon came back on the old one every time. State now records the default it was saved
under; a different default wins.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J39imRDT8L7xYbWzsVWd8A
This commit is contained in:
2026-10-04 01:06:31 +00:00
co-authored by Claude Opus 5.5
parent 01e778daf6
commit 3dc916834f
3 changed files with 13 additions and 4 deletions
+6 -3
View File
@@ -76,6 +76,8 @@ export interface RuntimeState {
enabled: boolean
model: string
mode: ContextMode
/** config.defaultModel when this state was saved: a changed default (editor model setting, new release) wins. */
defaultModel?: string
}
export function loadConfig(configPath: string): DaemonConfig {
@@ -97,12 +99,13 @@ export function loadConfig(configPath: string): DaemonConfig {
}
export function loadState(config: DaemonConfig): RuntimeState {
const fallback: RuntimeState = { enabled: true, model: config.defaultModel, mode: config.models[config.defaultModel].defaultMode }
const fallback: RuntimeState = { enabled: true, model: config.defaultModel, mode: config.models[config.defaultModel].defaultMode, defaultModel: config.defaultModel }
try {
const s = JSON.parse(fs.readFileSync(config.stateFile, 'utf8')) as Partial<RuntimeState>
const model = s.model && config.models[s.model] ? s.model : fallback.model
const keepModel = s.defaultModel === config.defaultModel && s.model && config.models[s.model]
const model = keepModel ? s.model! : fallback.model
const mode = s.mode && config.models[model].modes.includes(s.mode) ? s.mode : config.models[model].defaultMode
return { enabled: s.enabled ?? true, model, mode }
return { enabled: s.enabled ?? true, model, mode, defaultModel: config.defaultModel }
} catch {
return fallback
}