From 43c830469ad836d56db32a603b8536b26ec3a4fe Mon Sep 17 00:00:00 2001 From: Simon Shi Date: Thu, 21 May 2026 01:35:08 +0900 Subject: [PATCH 01/11] feat(cliproxy): add Qoder as a CLIProxy provider channel Add Qoder AI coding assistant as a supported CLIProxy provider: - Device code OAuth flow with --qoder-login flag - Plus-only backend (CLIProxyAPIPlus required) - No built-in token refresh (unsupported, like Kilo) - Auth URL: https://qoder.com/device/selectAccounts - Auth file prefix: qoder- - Token type: qoder --- src/cliproxy/auth/auth-types.ts | 7 +++++++ src/cliproxy/provider-capabilities.ts | 12 ++++++++++++ src/cliproxy/types/provider-types.ts | 4 +++- src/commands/command-catalog.ts | 1 + src/config/reserved-names.ts | 1 + tests/unit/auth/profile-detector.test.ts | 1 + tests/unit/commands/completion-backend.test.ts | 1 + tests/unit/commands/help-command-parity.test.ts | 1 + tests/unit/web-server/cliproxy-auth-routes.test.ts | 1 + 9 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/cliproxy/auth/auth-types.ts b/src/cliproxy/auth/auth-types.ts index 231ab850..f4dc8adf 100644 --- a/src/cliproxy/auth/auth-types.ts +++ b/src/cliproxy/auth/auth-types.ts @@ -306,6 +306,13 @@ export const OAUTH_CONFIGS: Record = { scopes: [], authFlag: '--kilo-login', }, + qoder: { + provider: 'qoder', + displayName: 'Qoder', + authUrl: 'https://qoder.com/device/selectAccounts', + scopes: [], + authFlag: '--qoder-login', + }, }; /** diff --git a/src/cliproxy/provider-capabilities.ts b/src/cliproxy/provider-capabilities.ts index 1d020d77..eb942cd7 100644 --- a/src/cliproxy/provider-capabilities.ts +++ b/src/cliproxy/provider-capabilities.ts @@ -182,6 +182,18 @@ export const PROVIDER_CAPABILITIES: Record { expect(detector.detectProfileType('gitlab').provider).toBe('gitlab'); expect(detector.detectProfileType('codebuddy').provider).toBe('codebuddy'); expect(detector.detectProfileType('kilo').provider).toBe('kilo'); + expect(detector.detectProfileType('qoder').provider).toBe('qoder'); }); it('should detect settings-based profile from unified config', () => { diff --git a/tests/unit/commands/completion-backend.test.ts b/tests/unit/commands/completion-backend.test.ts index 4667dc76..1c598d4c 100644 --- a/tests/unit/commands/completion-backend.test.ts +++ b/tests/unit/commands/completion-backend.test.ts @@ -85,6 +85,7 @@ describe('completion backend', () => { expect(values).toContain('gitlab'); expect(values).toContain('codebuddy'); expect(values).toContain('kilo'); + expect(values).toContain('qoder'); expect(values).toContain('localglm'); expect(values).toContain('work'); expect(values).toContain('my-codex'); diff --git a/tests/unit/commands/help-command-parity.test.ts b/tests/unit/commands/help-command-parity.test.ts index bd7f6692..739f4488 100644 --- a/tests/unit/commands/help-command-parity.test.ts +++ b/tests/unit/commands/help-command-parity.test.ts @@ -61,6 +61,7 @@ describe('help command parity', () => { expect(rendered.includes('gitlab')).toBe(true); expect(rendered.includes('codebuddy')).toBe(true); expect(rendered.includes('kilo')).toBe(true); + expect(rendered.includes('qoder')).toBe(true); expect(rendered.includes('--gitlab-token-login')).toBe(true); expect(rendered.includes('--token-login')).toBe(true); expect(rendered.includes('--gitlab-url ')).toBe(true); diff --git a/tests/unit/web-server/cliproxy-auth-routes.test.ts b/tests/unit/web-server/cliproxy-auth-routes.test.ts index b6cf9d82..ba02942b 100644 --- a/tests/unit/web-server/cliproxy-auth-routes.test.ts +++ b/tests/unit/web-server/cliproxy-auth-routes.test.ts @@ -17,6 +17,7 @@ describe('cliproxy-auth-routes start-url guard', () => { "Provider 'codebuddy' uses Device Code flow" ); expect(getStartUrlUnsupportedReason('kilo')).toContain("Provider 'kilo' uses Device Code flow"); + expect(getStartUrlUnsupportedReason('qoder')).toContain("Provider 'qoder' uses Device Code flow"); }); it('allows Cursor browser URL auth on start-url', () => { From 1e60fe186e700ab00bd739b29085635053cba822 Mon Sep 17 00:00:00 2001 From: Simon Shi Date: Thu, 21 May 2026 03:06:18 +0900 Subject: [PATCH 02/11] feat(cliproxy): add Qoder to channel catalog, model routing, and UI Add Qoder provider to integration layers and dashboard UI: - Channel-to-provider mapping in catalog-cache - Model routing owner hints - Provider editor owner map - Setup wizard provider list - Fallback visuals and brand color --- src/cliproxy/services/catalog-cache.ts | 1 + src/shared/cliproxy-model-routing.ts | 1 + ui/src/components/cliproxy/provider-editor/index.tsx | 1 + ui/src/components/setup/wizard/constants.ts | 1 + ui/src/lib/provider-config.ts | 2 ++ 5 files changed, 6 insertions(+) diff --git a/src/cliproxy/services/catalog-cache.ts b/src/cliproxy/services/catalog-cache.ts index 925d7370..6216d641 100644 --- a/src/cliproxy/services/catalog-cache.ts +++ b/src/cliproxy/services/catalog-cache.ts @@ -38,6 +38,7 @@ const CHANNEL_TO_PROVIDER: Record = { kimi: 'kimi', kiro: 'kiro', 'github-copilot': 'ghcp', + qoder: 'qoder', }; /** CCS provider → channel name mapping (reverse) */ diff --git a/src/shared/cliproxy-model-routing.ts b/src/shared/cliproxy-model-routing.ts index b6194ac4..9c12f52d 100644 --- a/src/shared/cliproxy-model-routing.ts +++ b/src/shared/cliproxy-model-routing.ts @@ -57,6 +57,7 @@ const PROVIDER_OWNER_HINTS: Record = { kimi: ['kimi', 'moonshot'], kiro: ['kiro', 'aws'], ghcp: ['github', 'copilot'], + qoder: ['qoder'], }; function normalize(value: string | null | undefined): string { diff --git a/ui/src/components/cliproxy/provider-editor/index.tsx b/ui/src/components/cliproxy/provider-editor/index.tsx index 65be5b3b..86f91126 100644 --- a/ui/src/components/cliproxy/provider-editor/index.tsx +++ b/ui/src/components/cliproxy/provider-editor/index.tsx @@ -92,6 +92,7 @@ export function ProviderEditor({ qwen: ['alibaba', 'qwen'], iflow: ['iflow'], kilo: ['kilo'], + qoder: ['qoder'], kiro: ['kiro', 'aws'], ghcp: ['github', 'copilot'], kimi: ['kimi', 'moonshot'], diff --git a/ui/src/components/setup/wizard/constants.ts b/ui/src/components/setup/wizard/constants.ts index f40b591e..1fca25f4 100644 --- a/ui/src/components/setup/wizard/constants.ts +++ b/ui/src/components/setup/wizard/constants.ts @@ -25,6 +25,7 @@ const WIZARD_PROVIDER_ORDER: CLIProxyProvider[] = [ 'iflow', 'kilo', 'kiro', + 'qoder', ]; export const PROVIDERS: ProviderOption[] = WIZARD_PROVIDER_ORDER.map((id) => ({ diff --git a/ui/src/lib/provider-config.ts b/ui/src/lib/provider-config.ts index b99bf270..d1552186 100644 --- a/ui/src/lib/provider-config.ts +++ b/ui/src/lib/provider-config.ts @@ -135,6 +135,7 @@ export const PROVIDER_FALLBACK_VISUALS: Record = { gitlab: '#FC6D26', codebuddy: '#2563EB', kilo: '#E11D48', + qoder: '#D97706', ghcp: '#43aa8b', claude: '#D97757', kimi: '#FF6B35', From dea4de45fd4d06f3f2c79d2fedcef18caa8fb045 Mon Sep 17 00:00:00 2001 From: Simon Shi Date: Thu, 21 May 2026 15:18:41 +0800 Subject: [PATCH 03/11] fix(test): add qoder to PLUS_EXTRA_CLIPROXY_PROVIDERS test expectation Co-Authored-By: Claude Opus 4.7 --- ui/tests/unit/ui/lib/provider-config.test.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/ui/tests/unit/ui/lib/provider-config.test.ts b/ui/tests/unit/ui/lib/provider-config.test.ts index f4552276..7551c169 100644 --- a/ui/tests/unit/ui/lib/provider-config.test.ts +++ b/ui/tests/unit/ui/lib/provider-config.test.ts @@ -68,6 +68,7 @@ describe('provider presentation metadata', () => { 'gitlab', 'codebuddy', 'kilo', + 'qoder', ]); expect(getProviderSection('gitlab')?.id).toBe('plus-extra'); expect(getProviderSection('gemini')?.id).toBe('core'); From 85e76742fe322ec5205c66a42c500dd768c90d28 Mon Sep 17 00:00:00 2001 From: shiminhao964 Date: Thu, 21 May 2026 18:26:55 +0800 Subject: [PATCH 04/11] feat(cliproxy): add qoder base config template Co-Authored-By: Claude Opus 4.7 --- config/base-qoder.settings.json | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 config/base-qoder.settings.json diff --git a/config/base-qoder.settings.json b/config/base-qoder.settings.json new file mode 100644 index 00000000..39cf7554 --- /dev/null +++ b/config/base-qoder.settings.json @@ -0,0 +1,10 @@ +{ + "env": { + "ANTHROPIC_BASE_URL": "http://127.0.0.1:8317/api/provider/qoder", + "ANTHROPIC_AUTH_TOKEN": "ccs-internal-managed", + "ANTHROPIC_MODEL": "qoder/auto", + "ANTHROPIC_DEFAULT_OPUS_MODEL": "qoder/auto", + "ANTHROPIC_DEFAULT_SONNET_MODEL": "qoder/auto", + "ANTHROPIC_DEFAULT_HAIKU_MODEL": "qoder/auto" + } +} From 9a8430f68beef326bf43aa3686952875a0e818fa Mon Sep 17 00:00:00 2001 From: shiminhao964 Date: Thu, 21 May 2026 18:29:41 +0800 Subject: [PATCH 05/11] fix(cliproxy): use unprefixed auto model for qoder base config Qoder executor passes model IDs as-is without stripping a provider prefix, unlike kilo which strips the prefix internally. Co-Authored-By: Claude Opus 4.7 --- config/base-qoder.settings.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/config/base-qoder.settings.json b/config/base-qoder.settings.json index 39cf7554..d736c8a2 100644 --- a/config/base-qoder.settings.json +++ b/config/base-qoder.settings.json @@ -2,9 +2,9 @@ "env": { "ANTHROPIC_BASE_URL": "http://127.0.0.1:8317/api/provider/qoder", "ANTHROPIC_AUTH_TOKEN": "ccs-internal-managed", - "ANTHROPIC_MODEL": "qoder/auto", - "ANTHROPIC_DEFAULT_OPUS_MODEL": "qoder/auto", - "ANTHROPIC_DEFAULT_SONNET_MODEL": "qoder/auto", - "ANTHROPIC_DEFAULT_HAIKU_MODEL": "qoder/auto" + "ANTHROPIC_MODEL": "auto", + "ANTHROPIC_DEFAULT_OPUS_MODEL": "auto", + "ANTHROPIC_DEFAULT_SONNET_MODEL": "auto", + "ANTHROPIC_DEFAULT_HAIKU_MODEL": "auto" } } From c5308ded3b08493036cfc279b04432576f76094e Mon Sep 17 00:00:00 2001 From: shiminhao964 Date: Thu, 21 May 2026 18:32:20 +0800 Subject: [PATCH 06/11] fix(cliproxy): revert to qoder/auto prefixed model in base config Qoder executor now strips the qoder/ provider prefix before model lookup, matching the convention used by kilo and other providers. Co-Authored-By: Claude Opus 4.7 --- config/base-qoder.settings.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/config/base-qoder.settings.json b/config/base-qoder.settings.json index d736c8a2..39cf7554 100644 --- a/config/base-qoder.settings.json +++ b/config/base-qoder.settings.json @@ -2,9 +2,9 @@ "env": { "ANTHROPIC_BASE_URL": "http://127.0.0.1:8317/api/provider/qoder", "ANTHROPIC_AUTH_TOKEN": "ccs-internal-managed", - "ANTHROPIC_MODEL": "auto", - "ANTHROPIC_DEFAULT_OPUS_MODEL": "auto", - "ANTHROPIC_DEFAULT_SONNET_MODEL": "auto", - "ANTHROPIC_DEFAULT_HAIKU_MODEL": "auto" + "ANTHROPIC_MODEL": "qoder/auto", + "ANTHROPIC_DEFAULT_OPUS_MODEL": "qoder/auto", + "ANTHROPIC_DEFAULT_SONNET_MODEL": "qoder/auto", + "ANTHROPIC_DEFAULT_HAIKU_MODEL": "qoder/auto" } } From d82cc13afc68603befee85f8c886d06722fc44d3 Mon Sep 17 00:00:00 2001 From: shiminhao964 Date: Thu, 21 May 2026 19:37:15 +0800 Subject: [PATCH 07/11] feat(qoder): add provider logo asset and dashboard mapping Co-Authored-By: Claude Opus 4.7 --- ui/public/assets/providers/qoder.svg | 1 + ui/src/lib/provider-config.ts | 1 + ui/tests/unit/ui/lib/provider-config.test.ts | 1 + 3 files changed, 3 insertions(+) create mode 100644 ui/public/assets/providers/qoder.svg diff --git a/ui/public/assets/providers/qoder.svg b/ui/public/assets/providers/qoder.svg new file mode 100644 index 00000000..829ec79a --- /dev/null +++ b/ui/public/assets/providers/qoder.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ui/src/lib/provider-config.ts b/ui/src/lib/provider-config.ts index d1552186..cda84a9b 100644 --- a/ui/src/lib/provider-config.ts +++ b/ui/src/lib/provider-config.ts @@ -105,6 +105,7 @@ export const PROVIDER_ASSETS: Partial> = { gitlab: '/assets/providers/gitlab.svg', codebuddy: '/assets/providers/codebuddy.png', kilo: '/assets/providers/kilo.png', + qoder: '/assets/providers/qoder.svg', ghcp: '/assets/providers/copilot.svg', claude: '/assets/providers/claude.svg', kimi: '/assets/providers/kimi.svg', diff --git a/ui/tests/unit/ui/lib/provider-config.test.ts b/ui/tests/unit/ui/lib/provider-config.test.ts index 7551c169..8d11c520 100644 --- a/ui/tests/unit/ui/lib/provider-config.test.ts +++ b/ui/tests/unit/ui/lib/provider-config.test.ts @@ -129,6 +129,7 @@ describe('provider presentation metadata', () => { '/assets/providers/codebuddy.png', ], ['kilo', 'Kilo AI', 'Kilo AI coding assistant', '/assets/providers/kilo.png'], + ['qoder', 'Qoder', 'Qoder AI coding assistant', '/assets/providers/qoder.svg'], ])('recognizes %s across dashboard display helpers', (provider, name, description, asset) => { expect(getProviderDisplayName(provider)).toBe(name); expect(getProviderDescription(provider)).toBe(description); From 4973f7a00f8d3d6e30efb0b59e3ed961216c26c7 Mon Sep 17 00:00:00 2001 From: shiminhao964 Date: Thu, 21 May 2026 19:40:18 +0800 Subject: [PATCH 08/11] test(qoder): add qoder to provider-capabilities test expectations Co-Authored-By: Claude Opus 4.7 --- src/cliproxy/__tests__/provider-capabilities.test.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/cliproxy/__tests__/provider-capabilities.test.ts b/src/cliproxy/__tests__/provider-capabilities.test.ts index 02fea0b0..16f15b21 100644 --- a/src/cliproxy/__tests__/provider-capabilities.test.ts +++ b/src/cliproxy/__tests__/provider-capabilities.test.ts @@ -46,6 +46,7 @@ describe('provider-capabilities', () => { 'gitlab', 'codebuddy', 'kilo', + 'qoder', ]); }); @@ -66,6 +67,7 @@ describe('provider-capabilities', () => { 'cursor', 'codebuddy', 'kilo', + 'qoder', ]); expect(getProvidersByOAuthFlow('authorization_code')).toEqual([ 'gemini', @@ -85,6 +87,7 @@ describe('provider-capabilities', () => { 'kimi', 'codebuddy', 'kilo', + 'qoder', ]); }); From b52c0627ca7fa72365161b655cfaa12ba4f2fbc6 Mon Sep 17 00:00:00 2001 From: Simon Shi Date: Thu, 21 May 2026 20:33:34 +0800 Subject: [PATCH 09/11] feat(qoder): add model catalog entries for backend and UI Add Qoder provider models to both backend MODEL_CATALOG and UI MODEL_CATALOGS with 11 models (5 auto-routing tiers + 6 frontier models). Frontier models use unified preset mappings except DeepSeek which routes haiku to Flash. Co-Authored-By: Claude Opus 4.7 --- src/cliproxy/model-catalog.ts | 62 +++++++++++++++++ ui/src/lib/model-catalogs.ts | 122 ++++++++++++++++++++++++++++++++++ 2 files changed, 184 insertions(+) diff --git a/src/cliproxy/model-catalog.ts b/src/cliproxy/model-catalog.ts index 29f6052e..e4144394 100644 --- a/src/cliproxy/model-catalog.ts +++ b/src/cliproxy/model-catalog.ts @@ -265,6 +265,68 @@ export const MODEL_CATALOG: Partial> = }, ], }, + qoder: { + provider: 'qoder', + displayName: 'Qoder', + defaultModel: 'qoder/auto', + models: [ + { + id: 'qoder/auto', + name: 'Qoder Auto', + description: 'Auto selects the best Qoder model for your prompt', + }, + { + id: 'qoder/ultimate', + name: 'Qoder Ultimate', + description: 'Highest quality Qoder tier', + }, + { + id: 'qoder/performance', + name: 'Qoder Performance', + description: 'Balanced quality and speed', + }, + { + id: 'qoder/efficient', + name: 'Qoder Efficient', + description: 'Cost-efficient Qoder tier', + }, + { + id: 'qoder/lite', + name: 'Qoder Lite', + description: 'Fastest and most affordable Qoder tier', + }, + { + id: 'qoder/qmodel', + name: 'Qwen 3.6 Plus (via Qoder)', + description: 'Qwen 3.6 Plus frontier model', + }, + { + id: 'qoder/dmodel', + name: 'DeepSeek V4 Pro (via Qoder)', + description: 'DeepSeek V4 Pro frontier model', + }, + { + id: 'qoder/dfmodel', + name: 'DeepSeek V4 Flash (via Qoder)', + description: 'DeepSeek V4 Flash frontier model', + }, + { + id: 'qoder/gm51model', + name: 'GLM 5.1 (via Qoder)', + description: 'GLM 5.1 frontier model', + }, + { + id: 'qoder/kmodel', + name: 'Kimi K2.6 (via Qoder)', + description: 'Kimi K2.6 frontier model', + }, + { + id: 'qoder/mmodel', + name: 'MiniMax M2.7 (via Qoder)', + description: 'MiniMax M2.7 frontier model', + }, + ], + }, kimi: { provider: 'kimi', displayName: 'Kimi (Moonshot)', diff --git a/ui/src/lib/model-catalogs.ts b/ui/src/lib/model-catalogs.ts index df7d35dd..805120af 100644 --- a/ui/src/lib/model-catalogs.ts +++ b/ui/src/lib/model-catalogs.ts @@ -454,6 +454,128 @@ export const MODEL_CATALOGS: Record = { }, ], }, + qoder: { + provider: 'qoder', + displayName: 'Qoder', + defaultModel: 'qoder/auto', + models: [ + { + id: 'qoder/auto', + name: 'Qoder Auto', + description: 'Auto selects the best Qoder model for your prompt', + presetMapping: { + default: 'qoder/auto', + opus: 'qoder/auto', + sonnet: 'qoder/auto', + haiku: 'qoder/auto', + }, + }, + { + id: 'qoder/ultimate', + name: 'Qoder Ultimate', + description: 'Highest quality Qoder tier', + presetMapping: { + default: 'qoder/ultimate', + opus: 'qoder/ultimate', + sonnet: 'qoder/ultimate', + haiku: 'qoder/ultimate', + }, + }, + { + id: 'qoder/performance', + name: 'Qoder Performance', + description: 'Balanced quality and speed', + presetMapping: { + default: 'qoder/performance', + opus: 'qoder/performance', + sonnet: 'qoder/performance', + haiku: 'qoder/performance', + }, + }, + { + id: 'qoder/efficient', + name: 'Qoder Efficient', + description: 'Cost-efficient Qoder tier', + presetMapping: { + default: 'qoder/efficient', + opus: 'qoder/efficient', + sonnet: 'qoder/efficient', + haiku: 'qoder/efficient', + }, + }, + { + id: 'qoder/lite', + name: 'Qoder Lite', + description: 'Fastest and most affordable Qoder tier', + presetMapping: { + default: 'qoder/lite', + opus: 'qoder/lite', + sonnet: 'qoder/lite', + haiku: 'qoder/lite', + }, + }, + { + id: 'qoder/qmodel', + name: 'Qwen 3.6 Plus (via Qoder)', + description: 'Qwen 3.6 Plus frontier model', + presetMapping: { + default: 'qoder/qmodel', + opus: 'qoder/qmodel', + sonnet: 'qoder/qmodel', + haiku: 'qoder/qmodel', + }, + }, + { + id: 'qoder/dmodel', + name: 'DeepSeek V4 Pro (via Qoder)', + description: 'DeepSeek V4 Pro frontier model', + presetMapping: { + default: 'qoder/dmodel', + opus: 'qoder/dmodel', + sonnet: 'qoder/dmodel', + haiku: 'qoder/dfmodel', + }, + }, + { + id: 'qoder/dfmodel', + name: 'DeepSeek V4 Flash (via Qoder)', + description: 'DeepSeek V4 Flash frontier model', + }, + { + id: 'qoder/gm51model', + name: 'GLM 5.1 (via Qoder)', + description: 'GLM 5.1 frontier model', + presetMapping: { + default: 'qoder/gm51model', + opus: 'qoder/gm51model', + sonnet: 'qoder/gm51model', + haiku: 'qoder/gm51model', + }, + }, + { + id: 'qoder/kmodel', + name: 'Kimi K2.6 (via Qoder)', + description: 'Kimi K2.6 frontier model', + presetMapping: { + default: 'qoder/kmodel', + opus: 'qoder/kmodel', + sonnet: 'qoder/kmodel', + haiku: 'qoder/kmodel', + }, + }, + { + id: 'qoder/mmodel', + name: 'MiniMax M2.7 (via Qoder)', + description: 'MiniMax M2.7 frontier model', + presetMapping: { + default: 'qoder/mmodel', + opus: 'qoder/mmodel', + sonnet: 'qoder/mmodel', + haiku: 'qoder/mmodel', + }, + }, + ], + }, kimi: { provider: 'kimi', displayName: 'Kimi (Moonshot)', From de5b545ac35389c8e8878107dd70ff6e89ba6c5f Mon Sep 17 00:00:00 2001 From: Simon Shi <9512067+simonsmh@users.noreply.github.com> Date: Thu, 21 May 2026 23:45:14 +0800 Subject: [PATCH 10/11] feat(qoder): Change default models in base-qoder settings --- config/base-qoder.settings.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/config/base-qoder.settings.json b/config/base-qoder.settings.json index 39cf7554..d4ade6d3 100644 --- a/config/base-qoder.settings.json +++ b/config/base-qoder.settings.json @@ -3,8 +3,8 @@ "ANTHROPIC_BASE_URL": "http://127.0.0.1:8317/api/provider/qoder", "ANTHROPIC_AUTH_TOKEN": "ccs-internal-managed", "ANTHROPIC_MODEL": "qoder/auto", - "ANTHROPIC_DEFAULT_OPUS_MODEL": "qoder/auto", - "ANTHROPIC_DEFAULT_SONNET_MODEL": "qoder/auto", - "ANTHROPIC_DEFAULT_HAIKU_MODEL": "qoder/auto" + "ANTHROPIC_DEFAULT_OPUS_MODEL": "qoder/ultimate", + "ANTHROPIC_DEFAULT_SONNET_MODEL": "qoder/performance", + "ANTHROPIC_DEFAULT_HAIKU_MODEL": "qoder/efficient" } } From ba853b159b231bd97d3479701938846a83d45baa Mon Sep 17 00:00:00 2001 From: Tam Nhu Tran Date: Fri, 22 May 2026 11:15:24 -0400 Subject: [PATCH 11/11] test: cover qoder base settings --- src/cliproxy/config/__tests__/base-config-loader.test.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/cliproxy/config/__tests__/base-config-loader.test.ts b/src/cliproxy/config/__tests__/base-config-loader.test.ts index 88a74338..4a5bd42a 100644 --- a/src/cliproxy/config/__tests__/base-config-loader.test.ts +++ b/src/cliproxy/config/__tests__/base-config-loader.test.ts @@ -8,6 +8,7 @@ describe('base-config-loader new providers', () => { ['gitlab', '/api/provider/gitlab', 'gitlab-duo'], ['codebuddy', '/api/provider/codebuddy', 'auto'], ['kilo', '/api/provider/kilo', 'kilo/auto'], + ['qoder', '/api/provider/qoder', 'qoder/auto'], ] as const)('loads base settings for %s', (provider, baseUrlPath, defaultModel) => { const config = loadBaseConfig(provider);