fix: persist config-store state and apply settingsDefaultModel to new sessions (#126)

This commit is contained in:
vio1ator
2026-01-12 15:39:42 +02:00
committed by GitHub
parent 4fa6c2fbf1
commit 31c773aeb6
2 changed files with 96 additions and 24 deletions
@@ -75,15 +75,21 @@ export const DefaultsSettings: React.FC = () => {
} }
} }
if (data) { if (data) {
const model = typeof data.defaultModel === 'string' && data.defaultModel.trim().length > 0 ? data.defaultModel.trim() : undefined; const model = typeof data.defaultModel === 'string' && data.defaultModel.trim().length > 0 ? data.defaultModel.trim() : undefined;
const variant = typeof data.defaultVariant === 'string' && data.defaultVariant.trim().length > 0 ? data.defaultVariant.trim() : undefined; const variant = typeof data.defaultVariant === 'string' && data.defaultVariant.trim().length > 0 ? data.defaultVariant.trim() : undefined;
const agent = typeof data.defaultAgent === 'string' && data.defaultAgent.trim().length > 0 ? data.defaultAgent.trim() : undefined; const agent = typeof data.defaultAgent === 'string' && data.defaultAgent.trim().length > 0 ? data.defaultAgent.trim() : undefined;
setDefaultModel(model); if (model !== undefined) {
setDefaultVariant(variant); setDefaultModel(model);
setDefaultAgent(agent); }
} if (variant !== undefined) {
setDefaultVariant(variant);
}
if (agent !== undefined) {
setDefaultAgent(agent);
}
}
} catch (error) { } catch (error) {
console.warn('Failed to load defaults settings:', error); console.warn('Failed to load defaults settings:', error);
} finally { } finally {
@@ -114,14 +120,25 @@ export const DefaultsSettings: React.FC = () => {
} }
} }
try { try {
await updateDesktopSettings({ await updateDesktopSettings({
defaultModel: newValue ?? '', defaultModel: newValue ?? '',
defaultVariant: '', defaultVariant: '',
}); });
} catch (error) {
console.warn('Failed to save default model:', error); if (!isDesktopRuntime()) {
} const response = await fetch('/api/config/settings', {
method: 'PUT',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ defaultModel: newValue }),
});
if (!response.ok) {
console.warn('Failed to save default model to server:', response.status, response.statusText);
}
}
} catch (error) {
console.warn('Failed to save default model:', error);
}
}, [providers, setCurrentVariant, setProvider, setModel, setSettingsDefaultModel, setSettingsDefaultVariant]); }, [providers, setCurrentVariant, setProvider, setModel, setSettingsDefaultModel, setSettingsDefaultVariant]);
const DEFAULT_VARIANT_VALUE = '__default__'; const DEFAULT_VARIANT_VALUE = '__default__';
+63 -8
View File
@@ -530,6 +530,29 @@ export const useConfigStore = create<ConfigStore>()(
if (state.activeDirectoryKey === directoryKey) { if (state.activeDirectoryKey === directoryKey) {
nextState.providers = processedProviders; nextState.providers = processedProviders;
nextState.defaultProviders = defaults; nextState.defaultProviders = defaults;
if (!state.currentProviderId && !state.currentModelId && state.settingsDefaultModel) {
const parsed = parseModelString(state.settingsDefaultModel);
if (parsed) {
const settingsProvider = processedProviders.find((p) => p.id === parsed.providerId);
if (settingsProvider?.models.some((m) => m.id === parsed.modelId)) {
const model = settingsProvider.models.find((m) => m.id === parsed.modelId);
const currentVariant = state.settingsDefaultVariant && (model as { variants?: Record<string, unknown> } | undefined)?.variants?.[state.settingsDefaultVariant]
? state.settingsDefaultVariant
: undefined;
nextState.currentProviderId = parsed.providerId;
nextState.currentModelId = parsed.modelId;
nextState.currentVariant = currentVariant;
nextState.selectedProviderId = parsed.providerId;
nextSnapshot.currentProviderId = parsed.providerId;
nextSnapshot.currentModelId = parsed.modelId;
nextSnapshot.currentVariant = currentVariant;
nextSnapshot.selectedProviderId = parsed.providerId;
}
}
}
} }
return nextState; return nextState;
@@ -573,6 +596,29 @@ export const useConfigStore = create<ConfigStore>()(
if (state.activeDirectoryKey === directoryKey) { if (state.activeDirectoryKey === directoryKey) {
nextState.providers = previousProviders; nextState.providers = previousProviders;
nextState.defaultProviders = previousDefaults; nextState.defaultProviders = previousDefaults;
if (!state.currentProviderId && !state.currentModelId && state.settingsDefaultModel) {
const parsed = parseModelString(state.settingsDefaultModel);
if (parsed) {
const settingsProvider = previousProviders.find((p) => p.id === parsed.providerId);
if (settingsProvider?.models.some((m) => m.id === parsed.modelId)) {
const model = settingsProvider.models.find((m) => m.id === parsed.modelId);
const currentVariant = state.settingsDefaultVariant && (model as { variants?: Record<string, unknown> } | undefined)?.variants?.[state.settingsDefaultVariant]
? state.settingsDefaultVariant
: undefined;
nextState.currentProviderId = parsed.providerId;
nextState.currentModelId = parsed.modelId;
nextState.currentVariant = currentVariant;
nextState.selectedProviderId = parsed.providerId;
nextSnapshot.currentProviderId = parsed.providerId;
nextSnapshot.currentModelId = parsed.modelId;
nextSnapshot.currentVariant = currentVariant;
nextSnapshot.selectedProviderId = parsed.providerId;
}
}
}
} }
return nextState; return nextState;
@@ -1337,14 +1383,23 @@ export const useConfigStore = create<ConfigStore>()(
{ {
name: "config-store", name: "config-store",
storage: createJSONStorage(() => getSafeStorage()), storage: createJSONStorage(() => getSafeStorage()),
partialize: () => ({ partialize: (state) => ({
activeDirectoryKey: state.activeDirectoryKey,
}), directoryScoped: state.directoryScoped,
}, currentProviderId: state.currentProviderId,
), currentModelId: state.currentModelId,
{ currentVariant: state.currentVariant,
name: "config-store", currentAgentName: state.currentAgentName,
}, selectedProviderId: state.selectedProviderId,
agentModelSelections: state.agentModelSelections,
defaultProviders: state.defaultProviders,
settingsDefaultModel: state.settingsDefaultModel,
settingsDefaultVariant: state.settingsDefaultVariant,
settingsDefaultAgent: state.settingsDefaultAgent,
settingsAutoCreateWorktree: state.settingsAutoCreateWorktree,
}),
},
),
), ),
); );