fix: persist config-store state and apply settingsDefaultModel to new sessions (#126)
This commit is contained in:
@@ -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__';
|
||||||
|
|||||||
@@ -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,
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user