From 238ab65cf3556241e95396172a40b80fa6b385da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A8=8B=E5=BA=8F=E5=91=98=E9=98=BF=E6=B1=9F=28Relakkes?= =?UTF-8?q?=29?= Date: Mon, 18 May 2026 22:49:26 +0800 Subject: [PATCH] Clear stale provider env for ChatGPT Official activation Switching from a saved provider to the built-in ChatGPT provider must remove previously managed Anthropic env without writing any OpenAI runtime env yet. This keeps Task 1 metadata-only while preventing stale provider settings from surviving the switch. Constraint: Task 1 still must not write ChatGPT OAuth runtime env Rejected: Return without touching settings.json | stale ANTHROPIC_* env survives from the previous provider Confidence: high Scope-risk: narrow Tested: bun test src/server/__tests__/providers.test.ts --test-name-pattern "ChatGPT Official" Tested: bun test src/server/__tests__/providers.test.ts Tested: git diff --check --- src/server/__tests__/providers.test.ts | 26 +++++++++++++++++++++++--- src/server/services/providerService.ts | 1 + 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/server/__tests__/providers.test.ts b/src/server/__tests__/providers.test.ts index 8d01edf7..134c4475 100644 --- a/src/server/__tests__/providers.test.ts +++ b/src/server/__tests__/providers.test.ts @@ -320,10 +320,30 @@ describe('ProviderService', () => { await svc.activateProvider('openai-official') const config = await readProvidersConfig() + const settings = await readSettings() expect(config.activeId).toBe('openai-official') - await expect( - fs.readFile(path.join(tmpDir, 'cc-haha', 'settings.json'), 'utf-8'), - ).rejects.toThrow() + expect(settings.env).toBeUndefined() + }) + + test('activating ChatGPT Official clears stale managed provider env', async () => { + const svc = new ProviderService() + const provider = await svc.addProvider(sampleInput({ + apiFormat: 'openai_responses', + baseUrl: 'https://api.example.com/openai', + models: { + main: 'provider-main', + haiku: 'provider-haiku', + sonnet: 'provider-sonnet', + opus: 'provider-opus', + }, + })) + await svc.activateProvider(provider.id) + expect(((await readSettings()).env as Record).ANTHROPIC_BASE_URL).toContain('/proxy') + + await svc.activateProvider('openai-official') + + const settings = await readSettings() + expect(settings.env).toBeUndefined() }) }) diff --git a/src/server/services/providerService.ts b/src/server/services/providerService.ts index cc0fba8e..4197baef 100644 --- a/src/server/services/providerService.ts +++ b/src/server/services/providerService.ts @@ -359,6 +359,7 @@ export class ProviderService { await this.writeIndex(index) if (isOpenAIOfficialProviderId(id)) { + await this.clearProviderFromSettings() return }