diff --git a/src/api/providers/roo.ts b/src/api/providers/roo.ts index 361590c4c2e0..5d7490496d72 100644 --- a/src/api/providers/roo.ts +++ b/src/api/providers/roo.ts @@ -58,34 +58,14 @@ export class RooHandler extends BaseOpenAiCompatibleProvider { const cloudService = CloudService.instance this.authStateListener = (state: { state: AuthState }) => { - if (state.state === "active-session") { - const newToken = cloudService.authService?.getSessionToken() - this.client = new OpenAI({ - baseURL: this.baseURL, - apiKey: newToken ?? "unauthenticated", - defaultHeaders: DEFAULT_HEADERS, - }) - - // Flush cache and reload models with the new auth token - flushModels("roo") - .then(() => { - return this.loadDynamicModels(this.fetcherBaseURL, newToken) - }) - .catch((error) => { - console.error("[RooHandler] Failed to reload models after auth:", error) - }) - } else if (state.state === "logged-out") { - this.client = new OpenAI({ - baseURL: this.baseURL, - apiKey: "unauthenticated", - defaultHeaders: DEFAULT_HEADERS, - }) - - // Flush cache when logged out - flushModels("roo").catch((error) => { - console.error("[RooHandler] Failed to flush models on logout:", error) - }) - } + // Update OpenAI client with current auth token + // Note: Model cache flush/reload is handled by extension.ts authStateChangedHandler + const newToken = cloudService.authService?.getSessionToken() + this.client = new OpenAI({ + baseURL: this.baseURL, + apiKey: newToken ?? "unauthenticated", + defaultHeaders: DEFAULT_HEADERS, + }) } cloudService.on("auth-state-changed", this.authStateListener) diff --git a/src/extension.ts b/src/extension.ts index 5db0996ad657..6281f5d447ea 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -40,6 +40,7 @@ import { CodeActionProvider, } from "./activate" import { initializeI18n } from "./i18n" +import { flushModels, getModels } from "./api/providers/fetchers/modelCache" /** * Built using https://github.com/microsoft/vscode-webview-ui-toolkit @@ -140,6 +141,34 @@ export async function activate(context: vscode.ExtensionContext) { ) } } + + // Handle Roo models cache based on auth state + const handleRooModelsCache = async () => { + try { + await flushModels("roo") + + if (data.state === "active-session") { + // Reload models with the new auth token + const sessionToken = cloudService?.authService?.getSessionToken() + await getModels({ + provider: "roo", + baseUrl: process.env.ROO_CODE_PROVIDER_URL ?? "https://api.roocode.com/proxy", + apiKey: sessionToken, + }) + cloudLogger(`[authStateChangedHandler] Reloaded Roo models cache for active session`) + } else { + cloudLogger(`[authStateChangedHandler] Flushed Roo models cache on logout`) + } + } catch (error) { + cloudLogger( + `[authStateChangedHandler] Failed to handle Roo models cache: ${error instanceof Error ? error.message : String(error)}`, + ) + } + } + + if (data.state === "active-session" || data.state === "logged-out") { + await handleRooModelsCache() + } } settingsUpdatedHandler = async () => {