From 05cf0a516311e5135d97b660c9ebbd41391ba9d9 Mon Sep 17 00:00:00 2001 From: StillKnotKnown <192589389+StillKnotKnown@users.noreply.github.com> Date: Mon, 26 Jan 2026 13:41:26 +0200 Subject: [PATCH] fix(api-profiles): correct z.AI China preset URL and rename provider presets (#1500) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(api-profiles): correct z.AI China preset URL and rename provider presets - Fix glm-cn preset to use Anthropic-compatible endpoint - Change URL from /api/paas/v4 to /api/anthropic - Rename preset IDs from glm-* to zai-* (z.AI is provider, GLM is model) - Update translations in EN and FR - Update tests and documentation - Fix test fixtures in AuthStatusIndicator.test.tsx - Fix test mock data in usage-monitor.test.ts - Fix JSDoc examples in usage-monitor.ts and provider-detection.ts Fixes ACS-397 * fix: address PR review feedback (CodeRabbit + Gemini) - Rename glmGlobalOption to zaiGlobalOption for clarity - Translate French values: Global→Mondial, China→Chine Addresses feedback from: - CodeRabbit: Variable naming should match z.AI label - Gemini Code Assist: French translations incomplete --------- Co-authored-by: StillKnotKnown --- .../src/main/claude-profile/usage-monitor.test.ts | 2 +- apps/frontend/src/main/claude-profile/usage-monitor.ts | 2 +- .../renderer/components/AuthStatusIndicator.test.tsx | 2 +- .../components/settings/ProfileEditDialog.test.tsx | 6 +++--- apps/frontend/src/shared/constants/api-profiles.ts | 10 +++++----- apps/frontend/src/shared/i18n/locales/en/settings.json | 4 ++-- apps/frontend/src/shared/i18n/locales/fr/settings.json | 4 ++-- .../src/shared/utils/provider-detection.test.ts | 2 +- apps/frontend/src/shared/utils/provider-detection.ts | 2 +- 9 files changed, 17 insertions(+), 17 deletions(-) diff --git a/apps/frontend/src/main/claude-profile/usage-monitor.test.ts b/apps/frontend/src/main/claude-profile/usage-monitor.test.ts index 450476e5..67683284 100644 --- a/apps/frontend/src/main/claude-profile/usage-monitor.test.ts +++ b/apps/frontend/src/main/claude-profile/usage-monitor.test.ts @@ -982,7 +982,7 @@ describe('usage-monitor', () => { profiles: [{ id: 'zhipu-profile-1', name: 'ZHIPU Profile', - baseUrl: 'https://open.bigmodel.cn/api/paas/v4', + baseUrl: 'https://open.bigmodel.cn/api/anthropic', apiKey: 'zhipu-api-key' }], activeProfileId: 'zhipu-profile-1', diff --git a/apps/frontend/src/main/claude-profile/usage-monitor.ts b/apps/frontend/src/main/claude-profile/usage-monitor.ts index 095a6d48..1a20bf5e 100644 --- a/apps/frontend/src/main/claude-profile/usage-monitor.ts +++ b/apps/frontend/src/main/claude-profile/usage-monitor.ts @@ -158,7 +158,7 @@ export function getUsageEndpoint(provider: ApiProvider, baseUrl: string): string * @example * detectProvider('https://api.anthropic.com') // returns 'anthropic' * detectProvider('https://api.z.ai/api/anthropic') // returns 'zai' - * detectProvider('https://open.bigmodel.cn/api/paas/v4') // returns 'zhipu' + * detectProvider('https://open.bigmodel.cn/api/anthropic') // returns 'zhipu' * detectProvider('https://unknown.com/api') // returns 'unknown' */ export function detectProvider(baseUrl: string): ApiProvider { diff --git a/apps/frontend/src/renderer/components/AuthStatusIndicator.test.tsx b/apps/frontend/src/renderer/components/AuthStatusIndicator.test.tsx index c208e234..35a88d04 100644 --- a/apps/frontend/src/renderer/components/AuthStatusIndicator.test.tsx +++ b/apps/frontend/src/renderer/components/AuthStatusIndicator.test.tsx @@ -111,7 +111,7 @@ const testProfiles: APIProfile[] = [ { id: 'profile-4', name: 'ZHIPU China', - baseUrl: 'https://open.bigmodel.cn/api/paas/v4', + baseUrl: 'https://open.bigmodel.cn/api/anthropic', apiKey: 'zhipu-key-5678', models: undefined, createdAt: Date.now(), diff --git a/apps/frontend/src/renderer/components/settings/ProfileEditDialog.test.tsx b/apps/frontend/src/renderer/components/settings/ProfileEditDialog.test.tsx index dbb19ff5..bec6f4b6 100644 --- a/apps/frontend/src/renderer/components/settings/ProfileEditDialog.test.tsx +++ b/apps/frontend/src/renderer/components/settings/ProfileEditDialog.test.tsx @@ -282,11 +282,11 @@ describe('ProfileEditDialog - Create Mode', () => { const presetTrigger = screen.getByLabelText(/preset/i); fireEvent.keyDown(presetTrigger, { key: 'ArrowDown', code: 'ArrowDown' }); - const glmGlobalOption = await screen.findByRole('option', { name: 'GLM (Global)' }); - fireEvent.click(glmGlobalOption); + const zaiGlobalOption = await screen.findByRole('option', { name: 'z.AI (Global)' }); + fireEvent.click(zaiGlobalOption); expect(screen.getByLabelText(/base url/i)).toHaveValue('https://api.z.ai/api/anthropic'); - expect(screen.getByLabelText(/name/i)).toHaveValue('GLM (Global)'); + expect(screen.getByLabelText(/name/i)).toHaveValue('z.AI (Global)'); }); it('should not overwrite name when applying a preset', async () => { diff --git a/apps/frontend/src/shared/constants/api-profiles.ts b/apps/frontend/src/shared/constants/api-profiles.ts index 99c72138..3f5bb67f 100644 --- a/apps/frontend/src/shared/constants/api-profiles.ts +++ b/apps/frontend/src/shared/constants/api-profiles.ts @@ -21,13 +21,13 @@ export const API_PROVIDER_PRESETS: readonly ApiProviderPreset[] = [ labelKey: 'settings:apiProfiles.presets.groq' }, { - id: 'glm-global', + id: 'zai-global', baseUrl: 'https://api.z.ai/api/anthropic', - labelKey: 'settings:apiProfiles.presets.glmGlobal' + labelKey: 'settings:apiProfiles.presets.zaiGlobal' }, { - id: 'glm-cn', - baseUrl: 'https://open.bigmodel.cn/api/paas/v4', - labelKey: 'settings:apiProfiles.presets.glmChina' + id: 'zai-cn', + baseUrl: 'https://open.bigmodel.cn/api/anthropic', + labelKey: 'settings:apiProfiles.presets.zaiChina' } ]; diff --git a/apps/frontend/src/shared/i18n/locales/en/settings.json b/apps/frontend/src/shared/i18n/locales/en/settings.json index faf1b329..2b8dd676 100644 --- a/apps/frontend/src/shared/i18n/locales/en/settings.json +++ b/apps/frontend/src/shared/i18n/locales/en/settings.json @@ -54,8 +54,8 @@ "anthropic": "Anthropic", "openrouter": "OpenRouter", "groq": "Groq", - "glmGlobal": "GLM (Global)", - "glmChina": "GLM (China)" + "zaiGlobal": "z.AI (Global)", + "zaiChina": "z.AI (China)" }, "fields": { "name": "Name", diff --git a/apps/frontend/src/shared/i18n/locales/fr/settings.json b/apps/frontend/src/shared/i18n/locales/fr/settings.json index d19ea596..afc8e691 100644 --- a/apps/frontend/src/shared/i18n/locales/fr/settings.json +++ b/apps/frontend/src/shared/i18n/locales/fr/settings.json @@ -54,8 +54,8 @@ "anthropic": "Anthropic", "openrouter": "OpenRouter", "groq": "Groq", - "glmGlobal": "GLM (Global)", - "glmChina": "GLM (China)" + "zaiGlobal": "z.AI (Mondial)", + "zaiChina": "z.AI (Chine)" }, "fields": { "name": "Nom", diff --git a/apps/frontend/src/shared/utils/provider-detection.test.ts b/apps/frontend/src/shared/utils/provider-detection.test.ts index b7e443b8..04894262 100644 --- a/apps/frontend/src/shared/utils/provider-detection.test.ts +++ b/apps/frontend/src/shared/utils/provider-detection.test.ts @@ -38,7 +38,7 @@ describe('provider-detection', () => { describe('ZHIPU provider', () => { it('should detect ZHIPU from open.bigmodel.cn', () => { - const result = detectProvider('https://open.bigmodel.cn/api/paas/v4'); + const result = detectProvider('https://open.bigmodel.cn/api/anthropic'); expect(result).toBe('zhipu'); }); diff --git a/apps/frontend/src/shared/utils/provider-detection.ts b/apps/frontend/src/shared/utils/provider-detection.ts index 36737ef7..eccddc20 100644 --- a/apps/frontend/src/shared/utils/provider-detection.ts +++ b/apps/frontend/src/shared/utils/provider-detection.ts @@ -47,7 +47,7 @@ const PROVIDER_PATTERNS: readonly ProviderPattern[] = [ * @example * detectProvider('https://api.anthropic.com') // returns 'anthropic' * detectProvider('https://api.z.ai/api/anthropic') // returns 'zai' - * detectProvider('https://open.bigmodel.cn/api/paas/v4') // returns 'zhipu' + * detectProvider('https://open.bigmodel.cn/api/anthropic') // returns 'zhipu' * detectProvider('https://unknown.com/api') // returns 'unknown' */ export function detectProvider(baseUrl: string): ApiProvider {