fix: remove duplicate cloud agent provider constants (#2141)

Integrated into release/v3.8.0 — Kiro model alias normalization (dash→dot), trimmed duplicate catalog entries, and new tests.
This commit is contained in:
backryun
2026-05-11 11:47:20 +09:00
committed by GitHub
parent c5967381d6
commit 602f897c50
6 changed files with 26 additions and 55 deletions

View File

@@ -593,20 +593,10 @@ export const REGISTRY: Record<string, RegistryEntry> = {
{ id: "auto-kiro", name: "Auto (Kiro picks best model)" },
{ id: "claude-opus-4.7", name: "Claude Opus 4.7" },
{ id: "claude-opus-4.6", name: "Claude Opus 4.6" },
{ id: "claude-opus-4.5", name: "Claude Opus 4.5" },
{ id: "claude-sonnet-4.6", name: "Claude Sonnet 4.6" },
// models for kiro free tier
{ id: "claude-sonnet-4.5", name: "Claude Sonnet 4.5" },
{ id: "claude-sonnet-4", name: "Claude Sonnet 4" },
{ id: "claude-haiku-4.5", name: "Claude Haiku 4.5" },
{ id: "claude-3.7-sonnet", name: "Claude 3.7 Sonnet" },
// Dash aliases — Claude Code sends dashes, Kiro API uses dots
{ id: "claude-opus-4-7", name: "Claude Opus 4.7" },
{ id: "claude-opus-4-6", name: "Claude Opus 4.6" },
{ id: "claude-opus-4-5", name: "Claude Opus 4.5" },
{ id: "claude-sonnet-4-6", name: "Claude Sonnet 4.6" },
{ id: "claude-sonnet-4-5", name: "Claude Sonnet 4.5" },
{ id: "claude-haiku-4-5", name: "Claude Haiku 4.5" },
// Non-Claude models on Kiro subscription
{ id: "deepseek-3.2", name: "DeepSeek V3.2" },
{ id: "minimax-m2.5", name: "MiniMax M2.5" },
{ id: "minimax-m2.1", name: "MiniMax M2.1" },

View File

@@ -55,6 +55,13 @@ const PROVIDER_MODEL_ALIASES: ProviderModelAliasMap = {
"nvidia/gpt-oss-20b": "openai/gpt-oss-20b",
},
antigravity: { ...ANTIGRAVITY_MODEL_ALIASES },
kiro: {
"claude-opus-4-7": "claude-opus-4.7",
"claude-opus-4-6": "claude-opus-4.6",
"claude-sonnet-4-6": "claude-sonnet-4.6",
"claude-sonnet-4-5": "claude-sonnet-4.5",
"claude-haiku-4-5": "claude-haiku-4.5",
},
};
const CROSS_PROXY_MODEL_ALIASES: Record<string, string> = {

View File

@@ -2984,6 +2984,7 @@
"apikey": "Apikey",
"audio": "Audio",
"audioProvidersHeading": "Audio Providers Heading",
"cloudAgentProviders": "Cloud Agent Providers",
"audioShortLabel": "Audio Short Label",
"azureOpenAiBaseUrlHint": "Azure Open Ai Base Url Hint",
"bailianBaseUrlHint": "Bailian Base Url Hint",

View File

@@ -1913,37 +1913,6 @@ export function isSelfHostedChatProvider(providerId: unknown): boolean {
return typeof providerId === "string" && SELF_HOSTED_CHAT_PROVIDER_IDS.has(providerId);
}
// ── Cloud Agent Providers ───────────────────────────────────────────────────
export const CLOUD_AGENT_PROVIDERS = {
jules: {
id: "jules",
alias: "jules",
name: "Jules",
icon: "engineering",
color: "#EAB308",
textIcon: "JU",
website: "https://jules.google.com",
},
devin: {
id: "devin",
alias: "devin",
name: "Devin",
icon: "smart_toy",
color: "#2563EB",
textIcon: "DV",
website: "https://devin.ai",
},
"codex-cloud": {
id: "codex-cloud",
alias: "codex-cloud",
name: "Codex Cloud",
icon: "code",
color: "#10B981",
textIcon: "CX",
website: "https://chatgpt.com/codex",
},
};
// ── System Providers (virtual, not user-connectable) ──────────────────────────
export const SYSTEM_PROVIDERS = {
auto: {
@@ -1958,19 +1927,6 @@ export const SYSTEM_PROVIDERS = {
},
};
// Cloud Agent Providers
export const CLOUD_AGENT_PROVIDERS = {
jules: { id: "jules", alias: "jules", name: "Jules AI", icon: "smart_toy", color: "#6366F1" },
devin: { id: "devin", alias: "devin", name: "Devin AI", icon: "auto_fix_high", color: "#10B981" },
"codex-cloud": {
id: "codex-cloud",
alias: "codex-cloud",
name: "Codex Cloud",
icon: "cloud",
color: "#3B82F6",
},
};
// All providers (combined)
export const AI_PROVIDERS = {
...FREE_PROVIDERS,

View File

@@ -50,3 +50,17 @@ test("explicit provider routes can still normalize cross-proxy model dialects",
extendedContext: false,
});
});
test("Kiro Claude Code-style model aliases resolve without polluting the visible catalog", async () => {
assert.deepEqual(await getModelInfoCore("kr/claude-opus-4-7", {}), {
provider: "kiro",
model: "claude-opus-4.7",
extendedContext: false,
});
assert.deepEqual(await getModelInfoCore("kiro/claude-sonnet-4-6", {}), {
provider: "kiro",
model: "claude-sonnet-4.6",
extendedContext: false,
});
});

View File

@@ -84,4 +84,7 @@ test("Kiro registry exposes the current CLI model lineup with context windows",
assert.equal(byId.get("claude-opus-4.7")?.contextLength, undefined); // Uses default
assert.ok(byId.has("claude-sonnet-4.6"));
assert.ok(byId.has("claude-haiku-4.5"));
assert.equal(byId.has("claude-opus-4-7"), false);
assert.equal(byId.has("claude-sonnet-4-6"), false);
assert.equal(byId.has("claude-haiku-4-5"), false);
});