fix(cliproxy): migrate deprecated gemini-claude-* model names to upstream claude-* names (#515)

* fix(cliproxy): migrate deprecated gemini-claude-* model names to upstream claude-* names

CLIProxyAPI registry no longer recognizes the gemini-claude-* prefix convention.
Model names in catalog, base config, and user settings are migrated to upstream
claude-* names. Auto-migration in env-builder rewrites existing user settings on
load and persists the change.

Closes #513

* fix: address code review feedback — sync UI layer and add migration tests

- Sync UI isNativeGeminiModel() with backend (remove gemini-claude- exclusion)
- Update UI model catalog agy entries from gemini-claude-* to claude-*
- Update CI/CD workflow and code-reviewer default model names
- Add unit tests for migrateDeprecatedModelNames() logic
This commit is contained in:
Kai (Tam Nhu) Tran authored and GitHub committed 2026-02-11 17:47:37 +07:00
1 parent 59e3e0286e
commit 6afbb72b47
15 files changed
+375 -76

No files matched your search

+2 -2
View File
@@ -8,14 +8,14 @@ export const EXTENDED_CONTEXT_SUFFIX = '[1m]';
/**
* Check if model is a native Gemini model (auto-enabled behavior).
* Native Gemini models: gemini-* but NOT gemini-claude-*
* Native Gemini models have the gemini-* prefix.
*
* NOTE: This function is intentionally duplicated from src/cliproxy/model-catalog.ts
* to avoid bundling backend code in the UI. Keep both in sync.
*/
export function isNativeGeminiModel(modelId: string): boolean {
const lower = modelId.toLowerCase();
return lower.startsWith('gemini-') && !lower.startsWith('gemini-claude-');
return lower.startsWith('gemini-');
}
/**
+21 -21
View File
@@ -10,53 +10,53 @@ export const MODEL_CATALOGS: Record<string, ProviderCatalog> = {
agy: {
provider: 'agy',
displayName: 'Antigravity',
defaultModel: 'gemini-claude-opus-4-6-thinking',
defaultModel: 'claude-opus-4-6-thinking',
models: [
{
id: 'gemini-claude-opus-4-6-thinking',
id: 'claude-opus-4-6-thinking',
name: 'Claude Opus 4.6 Thinking',
description: 'Latest flagship, extended thinking',
// TODO: Re-enable when Antigravity backend supports 1M context (currently 256k)
// extendedContext: true,
extendedContext: false,
presetMapping: {
default: 'gemini-claude-opus-4-6-thinking',
opus: 'gemini-claude-opus-4-6-thinking',
sonnet: 'gemini-claude-sonnet-4-5-thinking',
haiku: 'gemini-claude-sonnet-4-5',
default: 'claude-opus-4-6-thinking',
opus: 'claude-opus-4-6-thinking',
sonnet: 'claude-sonnet-4-5-thinking',
haiku: 'claude-sonnet-4-5',
},
},
{
id: 'gemini-claude-opus-4-5-thinking',
id: 'claude-opus-4-5-thinking',
name: 'Claude Opus 4.5 Thinking',
description: 'Previous flagship, extended thinking',
presetMapping: {
default: 'gemini-claude-opus-4-5-thinking',
opus: 'gemini-claude-opus-4-5-thinking',
sonnet: 'gemini-claude-sonnet-4-5-thinking',
haiku: 'gemini-claude-sonnet-4-5',
default: 'claude-opus-4-5-thinking',
opus: 'claude-opus-4-5-thinking',
sonnet: 'claude-sonnet-4-5-thinking',
haiku: 'claude-sonnet-4-5',
},
},
{
id: 'gemini-claude-sonnet-4-5-thinking',
id: 'claude-sonnet-4-5-thinking',
name: 'Claude Sonnet 4.5 Thinking',
description: 'Balanced with extended thinking',
presetMapping: {
default: 'gemini-claude-sonnet-4-5-thinking',
opus: 'gemini-claude-opus-4-6-thinking',
sonnet: 'gemini-claude-sonnet-4-5-thinking',
haiku: 'gemini-claude-sonnet-4-5',
default: 'claude-sonnet-4-5-thinking',
opus: 'claude-opus-4-6-thinking',
sonnet: 'claude-sonnet-4-5-thinking',
haiku: 'claude-sonnet-4-5',
},
},
{
id: 'gemini-claude-sonnet-4-5',
id: 'claude-sonnet-4-5',
name: 'Claude Sonnet 4.5',
description: 'Fast and capable',
presetMapping: {
default: 'gemini-claude-sonnet-4-5',
opus: 'gemini-claude-opus-4-6-thinking',
sonnet: 'gemini-claude-sonnet-4-5',
haiku: 'gemini-claude-sonnet-4-5',
default: 'claude-sonnet-4-5',
opus: 'claude-opus-4-6-thinking',
sonnet: 'claude-sonnet-4-5',
haiku: 'claude-sonnet-4-5',
},
},
{