diff --git a/src/app/(dashboard)/dashboard/providers/page.js b/src/app/(dashboard)/dashboard/providers/page.js index 61461726..2fa34f66 100644 --- a/src/app/(dashboard)/dashboard/providers/page.js +++ b/src/app/(dashboard)/dashboard/providers/page.js @@ -277,6 +277,16 @@ export default function ProvidersPage() { })) .filter((p) => matchSearch(p.name)); + // Dual-auth providers (oauth + apikey) store API keys as authType "apikey" + // (and sometimes "api_key"). Card stats must count both so totals match detail. + // kiro has no authModes in registry but accepts both (headless uses "api_key"). + const dualAuthTypes = (info, key) => { + if (key === "kiro") return ["oauth", "apikey", "api_key"]; + const modes = info?.authModes; + if (!Array.isArray(modes) || !modes.includes("apikey")) return "oauth"; + return ["oauth", "apikey", "api_key"]; + }; + const oauthEntries = sortByPriority( Object.entries(OAUTH_PROVIDERS).filter(([, info]) => !info.hidden && matchSearch(info.name)), "oauth", @@ -424,16 +434,19 @@ export default function ProvidersPage() {