diff --git a/src/shared/model-error-classifier.test.ts b/src/shared/model-error-classifier.test.ts index cd373b274..17470199c 100644 --- a/src/shared/model-error-classifier.test.ts +++ b/src/shared/model-error-classifier.test.ts @@ -88,17 +88,17 @@ describe("model-error-classifier", () => { expect(provider).toBe("anthropic") }) - test("selectFallbackProvider maps opencode fallback to quotio when quotio is connected", () => { + test("selectFallbackProvider uses connected preferred provider when fallback providers are unavailable", () => { //#given writeFileSync( join(TEST_CACHE_DIR, "connected-providers.json"), - JSON.stringify({ connected: ["quotio"], updatedAt: new Date().toISOString() }, null, 2), + JSON.stringify({ connected: ["provider-x"], updatedAt: new Date().toISOString() }, null, 2), ) //#when - const provider = selectFallbackProvider(["opencode"], "quotio") + const provider = selectFallbackProvider(["provider-y"], "provider-x") //#then - expect(provider).toBe("quotio") + expect(provider).toBe("provider-x") }) }) diff --git a/src/shared/model-error-classifier.ts b/src/shared/model-error-classifier.ts index 71de2a32a..22d5606c7 100644 --- a/src/shared/model-error-classifier.ts +++ b/src/shared/model-error-classifier.ts @@ -140,7 +140,8 @@ export function hasMoreFallbacks( * Selects the best provider for a fallback entry. * Priority: * 1) First connected provider in the entry's provider preference order - * 2) First provider listed in the fallback entry (when cache is missing) + * 2) Preferred provider when connected (and entry providers are unavailable) + * 3) First provider listed in the fallback entry */ export function selectFallbackProvider( providers: string[], @@ -149,19 +150,19 @@ export function selectFallbackProvider( const connectedProviders = readConnectedProvidersCache() if (connectedProviders) { const connectedSet = new Set(connectedProviders.map(p => p.toLowerCase())) - if (connectedSet.has("quotio")) { - const hasQuotio = providers.some((p) => p.toLowerCase() === "quotio") - const hasOpencode = providers.some((p) => p.toLowerCase() === "opencode") - if (hasQuotio || hasOpencode) { - return "quotio" - } - } for (const provider of providers) { if (connectedSet.has(provider.toLowerCase())) { return provider } } + + if ( + preferredProviderID && + connectedSet.has(preferredProviderID.toLowerCase()) + ) { + return preferredProviderID + } } return providers[0] || preferredProviderID || "opencode"