diff --git a/desktop/src/lib/saas-session.ts b/desktop/src/lib/saas-session.ts index a7ddaeb..113b4ca 100644 --- a/desktop/src/lib/saas-session.ts +++ b/desktop/src/lib/saas-session.ts @@ -157,16 +157,41 @@ export async function clearSaaSSession(): Promise { } /** - * Persist the connection mode to localStorage. + * Persist the connection mode to localStorage with timestamp. */ export function saveConnectionMode(mode: string): void { - localStorage.setItem(SAASMODE_KEY, mode); + const data = JSON.stringify({ mode, timestamp: Date.now() }); + localStorage.setItem(SAASMODE_KEY, data); } /** * Load the connection mode from localStorage. + * Handles both new JSON format and legacy plain string format. * Returns null if not set. */ export function loadConnectionMode(): string | null { - return localStorage.getItem(SAASMODE_KEY); + const raw = localStorage.getItem(SAASMODE_KEY); + if (!raw) return null; + try { + const parsed = JSON.parse(raw); + if (typeof parsed === 'string') return parsed; // legacy format + return parsed.mode ?? null; + } catch { + return raw; // legacy format (plain string) + } +} + +/** + * Load the timestamp of the persisted connection mode. + * Returns null if not set or format is legacy. + */ +export function loadConnectionModeTimestamp(): number | null { + const raw = localStorage.getItem(SAASMODE_KEY); + if (!raw) return null; + try { + const parsed = JSON.parse(raw); + return parsed.timestamp ?? null; + } catch { + return null; + } } diff --git a/desktop/src/store/saasStore.ts b/desktop/src/store/saasStore.ts index 052fc5f..31040ea 100644 --- a/desktop/src/store/saasStore.ts +++ b/desktop/src/store/saasStore.ts @@ -818,8 +818,11 @@ export const useSaaSStore = create((set, get) => { account, saasUrl: restored.saasUrl, authToken: newToken, - connectionMode: loadConnectionMode() === 'saas' ? 'saas' : 'tauri', + // If token refresh succeeded, always restore to 'saas' mode + // regardless of what was persisted (heartbeat may have degraded to 'tauri') + connectionMode: 'saas', }); + saveConnectionMode('saas'); get().fetchAvailableModels().catch(() => {}); get().fetchAvailableTemplates().catch(() => {}); get().fetchAssignedTemplate().catch(() => {});