From d6a1c089520f59239032bb1bd81eb1323f91ab44 Mon Sep 17 00:00:00 2001 From: Kacper Date: Tue, 30 Dec 2025 14:40:20 +0100 Subject: [PATCH] fix(ui): Sync phaseModels to server when changed MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previously, phaseModels only persisted to localStorage but the server reads from settings.json file. Now setPhaseModel/setPhaseModels/resetPhaseModels call syncSettingsToServer() to keep server-side settings in sync. Also added phaseModels to the syncSettingsToServer() updates object. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- apps/ui/src/hooks/use-settings-migration.ts | 1 + apps/ui/src/store/app-store.ts | 29 +++++++++++++++------ 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/apps/ui/src/hooks/use-settings-migration.ts b/apps/ui/src/hooks/use-settings-migration.ts index 2bca750b..d8c2867a 100644 --- a/apps/ui/src/hooks/use-settings-migration.ts +++ b/apps/ui/src/hooks/use-settings-migration.ts @@ -223,6 +223,7 @@ export async function syncSettingsToServer(): Promise { muteDoneSound: state.muteDoneSound, enhancementModel: state.enhancementModel, validationModel: state.validationModel, + phaseModels: state.phaseModels, autoLoadClaudeMd: state.autoLoadClaudeMd, keyboardShortcuts: state.keyboardShortcuts, aiProfiles: state.aiProfiles, diff --git a/apps/ui/src/store/app-store.ts b/apps/ui/src/store/app-store.ts index 0492d252..9c8321ad 100644 --- a/apps/ui/src/store/app-store.ts +++ b/apps/ui/src/store/app-store.ts @@ -766,9 +766,9 @@ export interface AppActions { setValidationModel: (model: ModelAlias) => void; // Phase Model actions - setPhaseModel: (phase: PhaseModelKey, model: ModelAlias | CursorModelId) => void; - setPhaseModels: (models: Partial) => void; - resetPhaseModels: () => void; + setPhaseModel: (phase: PhaseModelKey, model: ModelAlias | CursorModelId) => Promise; + setPhaseModels: (models: Partial) => Promise; + resetPhaseModels: () => Promise; // Cursor CLI Settings actions setEnabledCursorModels: (models: CursorModelId[]) => void; @@ -1590,21 +1590,34 @@ export const useAppStore = create()( setValidationModel: (model) => set({ validationModel: model }), // Phase Model actions - setPhaseModel: (phase, model) => + setPhaseModel: async (phase, model) => { set((state) => ({ phaseModels: { ...state.phaseModels, [phase]: model, }, - })), - setPhaseModels: (models) => + })); + // Sync to server settings file + const { syncSettingsToServer } = await import('@/hooks/use-settings-migration'); + await syncSettingsToServer(); + }, + setPhaseModels: async (models) => { set((state) => ({ phaseModels: { ...state.phaseModels, ...models, }, - })), - resetPhaseModels: () => set({ phaseModels: DEFAULT_PHASE_MODELS }), + })); + // Sync to server settings file + const { syncSettingsToServer } = await import('@/hooks/use-settings-migration'); + await syncSettingsToServer(); + }, + resetPhaseModels: async () => { + set({ phaseModels: DEFAULT_PHASE_MODELS }); + // Sync to server settings file + const { syncSettingsToServer } = await import('@/hooks/use-settings-migration'); + await syncSettingsToServer(); + }, // Cursor CLI Settings actions setEnabledCursorModels: (models) => set({ enabledCursorModels: models }),