fix: invalidate model metadata cache after OpenCode restart (#1065)

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.
This commit is contained in:
Shyamalan Kannan
2026-04-30 12:25:42 +03:00
committed by GitHub
parent 897c435d14
commit fa71954ef1
2 changed files with 10 additions and 0 deletions
+4
View File
@@ -612,6 +612,10 @@ async function performConfigRefresh(options: {
useConfigStore.setState({ directoryScoped: {} });
}
if (refreshProviders) {
useConfigStore.getState().invalidateModelMetadataCache();
}
const sdkRefreshTasks: Promise<void>[] = [];
for (const directory of directoriesToRefresh) {
if (refreshProviders) {
+6
View File
@@ -550,6 +550,7 @@ interface ConfigStore {
loadProviders: (options?: { directory?: string | null }) => Promise<void>;
loadAgents: (options?: { directory?: string | null }) => Promise<boolean>;
invalidateModelMetadataCache: () => void;
setProvider: (providerId: string) => void;
setModel: (modelId: string) => void;
setCurrentVariant: (variant: string | undefined) => void;
@@ -1550,6 +1551,11 @@ export const useConfigStore = create<ConfigStore>()(
return promise;
},
invalidateModelMetadataCache: () => {
modelsMetadataInFlight = null;
set({ modelsMetadata: new Map<string, ModelMetadata>() });
},
setAgent: (agentName: string | undefined) => {
const {
agents,