From fa71954ef11085cdeaaaea7becd80fcf0cf0f495 Mon Sep 17 00:00:00 2001 From: Shyamalan Kannan <78594762+Yabuku-xD@users.noreply.github.com> Date: Thu, 30 Apr 2026 02:25:42 -0700 Subject: [PATCH] fix: invalidate model metadata cache after OpenCode restart (#1065) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit After OpenCode restarts (via 'Reload Opencode' or server reconnection), the UI's cached model metadata (context windows, pricing, etc.) was never refreshed — the cache was fetched once at boot and reused forever. This meant new/updated models from providers were invisible until a full page reload. Add invalidateModelMetadataCache action to useConfigStore that clears the metadata cache and resets the in-flight tracker. Call it from performConfigRefresh before re-loading providers. --- packages/ui/src/stores/useAgentsStore.ts | 4 ++++ packages/ui/src/stores/useConfigStore.ts | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/packages/ui/src/stores/useAgentsStore.ts b/packages/ui/src/stores/useAgentsStore.ts index 2ce7a312..1c87829b 100644 --- a/packages/ui/src/stores/useAgentsStore.ts +++ b/packages/ui/src/stores/useAgentsStore.ts @@ -612,6 +612,10 @@ async function performConfigRefresh(options: { useConfigStore.setState({ directoryScoped: {} }); } + if (refreshProviders) { + useConfigStore.getState().invalidateModelMetadataCache(); + } + const sdkRefreshTasks: Promise[] = []; for (const directory of directoriesToRefresh) { if (refreshProviders) { diff --git a/packages/ui/src/stores/useConfigStore.ts b/packages/ui/src/stores/useConfigStore.ts index b98f7bd7..a02eb676 100644 --- a/packages/ui/src/stores/useConfigStore.ts +++ b/packages/ui/src/stores/useConfigStore.ts @@ -550,6 +550,7 @@ interface ConfigStore { loadProviders: (options?: { directory?: string | null }) => Promise; loadAgents: (options?: { directory?: string | null }) => Promise; + invalidateModelMetadataCache: () => void; setProvider: (providerId: string) => void; setModel: (modelId: string) => void; setCurrentVariant: (variant: string | undefined) => void; @@ -1550,6 +1551,11 @@ export const useConfigStore = create()( return promise; }, + invalidateModelMetadataCache: () => { + modelsMetadataInFlight = null; + set({ modelsMetadata: new Map() }); + }, + setAgent: (agentName: string | undefined) => { const { agents,