diff --git a/desktop/src/__tests__/generalSettings.test.tsx b/desktop/src/__tests__/generalSettings.test.tsx
index f59e7447..44096ec1 100644
--- a/desktop/src/__tests__/generalSettings.test.tsx
+++ b/desktop/src/__tests__/generalSettings.test.tsx
@@ -69,6 +69,10 @@ vi.mock('../components/settings/ClaudeOfficialLogin', () => ({
ClaudeOfficialLogin: () =>
,
}))
+vi.mock('../components/settings/ChatGPTOfficialLogin', () => ({
+ ChatGPTOfficialLogin: () => ,
+}))
+
vi.mock('../pages/AdapterSettings', () => ({
AdapterSettings: () => Adapter Settings Mock
,
}))
@@ -700,6 +704,16 @@ describe('Settings > Providers tab', () => {
expect(screen.queryByTestId('claude-official-login')).not.toBeInTheDocument()
})
+ it('does not query ChatGPT OAuth status before providers finish loading', () => {
+ providerStoreState.providers = []
+ providerStoreState.activeId = 'openai-official'
+ providerStoreState.hasLoadedProviders = false
+
+ render()
+
+ expect(screen.queryByTestId('chatgpt-official-login')).not.toBeInTheDocument()
+ })
+
it('shows official OAuth status only after official provider is confirmed active', () => {
providerStoreState.providers = []
providerStoreState.activeId = null
@@ -720,6 +734,7 @@ describe('Settings > Providers tab', () => {
const openAIProvider = screen.getByTestId('openai-official-provider')
expect(within(openAIProvider).getByText('ChatGPT Official')).toBeInTheDocument()
expect(within(openAIProvider).getByText('Default')).toBeInTheDocument()
+ expect(screen.getByTestId('chatgpt-official-login')).toBeInTheDocument()
expect(screen.queryByTestId('claude-official-login')).not.toBeInTheDocument()
})
diff --git a/desktop/src/pages/Settings.tsx b/desktop/src/pages/Settings.tsx
index 68675b38..27293317 100644
--- a/desktop/src/pages/Settings.tsx
+++ b/desktop/src/pages/Settings.tsx
@@ -32,6 +32,7 @@ import { ActivitySettings } from './ActivitySettings'
import { MemorySettings } from './MemorySettings'
import { useUIStore, type SettingsTab } from '../stores/uiStore'
import { ClaudeOfficialLogin } from '../components/settings/ClaudeOfficialLogin'
+import { ChatGPTOfficialLogin } from '../components/settings/ChatGPTOfficialLogin'
import { OPENAI_OFFICIAL_PROVIDER_ID } from '../constants/openaiOfficialProvider'
import { useUpdateStore } from '../stores/updateStore'
import { formatBytes } from '../lib/formatBytes'
@@ -288,6 +289,12 @@ function ProviderSettings() {
{t('settings.providers.openaiOfficialDesc')}
+
+ {isOpenAIOfficialActive && (
+
+
+
+ )}
{/* Saved providers */}