diff --git a/apps/ui/src/hooks/use-settings-migration.ts b/apps/ui/src/hooks/use-settings-migration.ts index 07119b85..20824a30 100644 --- a/apps/ui/src/hooks/use-settings-migration.ts +++ b/apps/ui/src/hooks/use-settings-migration.ts @@ -114,6 +114,20 @@ export function resetMigrationState(): void { */ export function parseLocalStorageSettings(): Partial | null { try { + // First, check for fresh server settings cache (updated whenever server settings are fetched) + // This prevents stale data when switching between modes + const settingsCache = getItem('automaker-settings-cache'); + if (settingsCache) { + try { + const cached = JSON.parse(settingsCache) as GlobalSettings; + logger.debug('Using fresh settings cache from localStorage'); + return cached; + } catch (e) { + logger.warn('Failed to parse settings cache, falling back to old storage'); + } + } + + // Fall back to old Zustand persisted storage const automakerStorage = getItem('automaker-storage'); if (!automakerStorage) { return null; @@ -412,6 +426,15 @@ export function useSettingsMigration(): MigrationState { if (global.success && global.settings) { serverSettings = global.settings as unknown as GlobalSettings; logger.info(`Server has ${serverSettings.projects?.length ?? 0} projects`); + + // Update localStorage with fresh server data to keep cache in sync + // This prevents stale localStorage data from being used when switching between modes + try { + localStorage.setItem('automaker-settings-cache', JSON.stringify(serverSettings)); + logger.debug('Updated localStorage with fresh server settings'); + } catch (storageError) { + logger.warn('Failed to update localStorage cache:', storageError); + } } } catch (error) { logger.error('Failed to fetch server settings:', error); diff --git a/apps/ui/src/hooks/use-settings-sync.ts b/apps/ui/src/hooks/use-settings-sync.ts index 80fd00a8..e1346a91 100644 --- a/apps/ui/src/hooks/use-settings-sync.ts +++ b/apps/ui/src/hooks/use-settings-sync.ts @@ -215,6 +215,15 @@ export function useSettingsSync(): SettingsSyncState { if (result.success) { lastSyncedRef.current = updateHash; logger.debug('Settings synced to server'); + + // Update localStorage cache with synced settings to keep it fresh + // This prevents stale data when switching between Electron and web modes + try { + setItem('automaker-settings-cache', JSON.stringify(updates)); + logger.debug('Updated localStorage cache after sync'); + } catch (storageError) { + logger.warn('Failed to update localStorage cache after sync:', storageError); + } } else { logger.error('Failed to sync settings:', result.error); }