feat(coding-agent): add provider display names

closes #3956
This commit is contained in:
Mario Zechner
2026-04-30 00:10:38 +02:00
parent b79e7f8058
commit cf5ec23240
10 changed files with 110 additions and 40 deletions

View File

@@ -72,6 +72,7 @@ import { type AppKeybinding, KeybindingsManager } from "../../core/keybindings.j
import { createCompactionSummaryMessage } from "../../core/messages.js";
import { defaultModelPerProvider, findExactModelReferenceMatch, resolveModelScope } from "../../core/model-resolver.js";
import { DefaultPackageManager } from "../../core/package-manager.js";
import { BUILT_IN_PROVIDER_DISPLAY_NAMES } from "../../core/provider-display-names.js";
import type { ResourceDiagnostic } from "../../core/resource-loader.js";
import { formatMissingSessionCwdPrompt, MissingSessionCwdError } from "../../core/session-cwd.js";
import { type SessionContext, SessionManager } from "../../core/session-manager.js";
@@ -179,32 +180,6 @@ function hasDefaultModelProvider(providerId: string): providerId is keyof typeof
const BEDROCK_PROVIDER_ID = "amazon-bedrock";
const API_KEY_LOGIN_PROVIDERS: Record<string, string> = {
anthropic: "Anthropic",
[BEDROCK_PROVIDER_ID]: "Amazon Bedrock",
"azure-openai-responses": "Azure OpenAI Responses",
cerebras: "Cerebras",
"cloudflare-workers-ai": "Cloudflare Workers AI",
deepseek: "DeepSeek",
fireworks: "Fireworks",
google: "Google Gemini",
"google-vertex": "Google Vertex AI",
groq: "Groq",
huggingface: "Hugging Face",
"kimi-coding": "Kimi For Coding",
mistral: "Mistral",
minimax: "MiniMax",
"minimax-cn": "MiniMax (China)",
opencode: "OpenCode Zen",
"opencode-go": "OpenCode Go",
openai: "OpenAI",
openrouter: "OpenRouter",
"vercel-ai-gateway": "Vercel AI Gateway",
xai: "xAI",
zai: "ZAI",
};
const BUILT_IN_API_KEY_LOGIN_PROVIDERS = new Set(Object.keys(API_KEY_LOGIN_PROVIDERS));
const BUILT_IN_MODEL_PROVIDERS = new Set<string>(getProviders());
export function isApiKeyLoginProvider(
@@ -212,7 +187,7 @@ export function isApiKeyLoginProvider(
oauthProviderIds: ReadonlySet<string>,
builtInProviderIds: ReadonlySet<string> = BUILT_IN_MODEL_PROVIDERS,
): boolean {
if (BUILT_IN_API_KEY_LOGIN_PROVIDERS.has(providerId)) {
if (BUILT_IN_PROVIDER_DISPLAY_NAMES[providerId]) {
return true;
}
if (builtInProviderIds.has(providerId)) {
@@ -221,10 +196,6 @@ export function isApiKeyLoginProvider(
return !oauthProviderIds.has(providerId);
}
export function getApiKeyProviderDisplayName(providerId: string): string {
return API_KEY_LOGIN_PROVIDERS[providerId] ?? providerId;
}
/**
* Options for InteractiveMode initialization.
*/
@@ -4374,7 +4345,7 @@ export class InteractiveMode {
}
options.push({
id: providerId,
name: getApiKeyProviderDisplayName(providerId),
name: this.session.modelRegistry.getProviderDisplayName(providerId),
authType: "api_key",
});
}
@@ -4385,7 +4356,6 @@ export class InteractiveMode {
private getLogoutProviderOptions(): AuthSelectorProvider[] {
const authStorage = this.session.modelRegistry.authStorage;
const oauthNameById = new Map(authStorage.getOAuthProviders().map((provider) => [provider.id, provider.name]));
const options: AuthSelectorProvider[] = [];
for (const providerId of authStorage.list()) {
@@ -4395,10 +4365,7 @@ export class InteractiveMode {
}
options.push({
id: providerId,
name:
credential.type === "oauth"
? (oauthNameById.get(providerId) ?? providerId)
: getApiKeyProviderDisplayName(providerId),
name: this.session.modelRegistry.getProviderDisplayName(providerId),
authType: credential.type,
});
}