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:
@@ -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) {
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user