fix(ui): keep the selected model when switching agent modes
Switching between Build and Plan modes reset the model selector to the settings default because setAgent fell through to the settings-default fallback whenever the target agent had no saved override, and the explicit-switch path in ModelControls force-applied the agent's default model, overwriting any per-agent override. setAgent now keeps the current model selection when the user has a live manual selection and the target agent configures no model of its own, and the explicit-switch handler no longer clobbers saved per-agent overrides with the agent default. Startup and pin behavior are unchanged: the settings-default and agent-pin cascade still applies when no manual selection exists yet. Fixes #2531
This commit is contained in:
@@ -589,6 +589,30 @@ describe('useConfigStore provider persistence', () => {
|
||||
expect(state.currentModelId).toBe('model-a');
|
||||
});
|
||||
|
||||
test('[issue-2531] setAgent keeps the manual model when switching to an agent without an override', () => {
|
||||
const sessionId = 'ses_2531_mode_switch';
|
||||
useSessionUIStore.setState({ currentSessionId: sessionId });
|
||||
useConfigStore.setState({
|
||||
activeDirectoryKey: DIRECTORY,
|
||||
providers: [provider('deepseek', 'deepseek-v4-pro'), provider('kimi', 'kimi-k3')],
|
||||
agents: [testAgent('build'), testAgent('plan')],
|
||||
settingsDefaultModel: 'deepseek/deepseek-v4-pro',
|
||||
currentProviderId: 'kimi',
|
||||
currentModelId: 'kimi-k3',
|
||||
currentAgentName: 'build',
|
||||
selectionSource: 'manual',
|
||||
currentVariant: undefined,
|
||||
directoryScoped: {},
|
||||
});
|
||||
|
||||
useConfigStore.getState().setAgent('plan');
|
||||
|
||||
const state = useConfigStore.getState();
|
||||
expect(state.currentAgentName).toBe('plan');
|
||||
expect(state.currentProviderId).toBe('kimi');
|
||||
expect(state.currentModelId).toBe('kimi-k3');
|
||||
});
|
||||
|
||||
test('loadAgents does not fetch OpenCode config directly', async () => {
|
||||
useConfigStore.setState({
|
||||
activeDirectoryKey: DIRECTORY,
|
||||
|
||||
Reference in New Issue
Block a user