import React from 'react'; import { useAppTranslation } from '@features/localization/renderer'; import { api } from '@renderer/api'; import { CodexLoginLinkCopyButton, CodexLoginUserCodeBadge, } from '@renderer/components/runtime/CodexLoginLinkCopyButton'; import { LogIn } from 'lucide-react'; import type { ProvisioningProviderCheck } from './ProvisioningProviderStatusList'; import type { CliInstallationStatus, TeamProviderId } from '@shared/types'; function containsReconnectCue(text: string | null | undefined): boolean { if (!text) { return false; } const lower = text.toLowerCase(); return lower.includes('session needs reconnect') || lower.includes('reconnect chatgpt'); } export function shouldShowCodexReconnectPrompt({ effectiveCliStatus, selectedProviderIds, prepareMessage, prepareChecks, }: { effectiveCliStatus: CliInstallationStatus | null; selectedProviderIds: readonly TeamProviderId[]; prepareMessage: string | null; prepareChecks: readonly ProvisioningProviderCheck[]; }): boolean { if (!selectedProviderIds.includes('codex')) { return false; } const codexProvider = effectiveCliStatus?.providers.find( (provider) => provider.providerId === 'codex' ); const codexConnection = codexProvider?.connection?.codex; const loginStatus = codexConnection?.login?.status; const loginPending = loginStatus === 'starting' || loginStatus === 'pending'; if (loginPending && codexConnection?.login?.authUrl) { return true; } const codexNeedsReconnect = Boolean(codexConnection?.localActiveChatgptAccountPresent) && codexConnection?.launchAllowed !== true && !loginPending; if (!codexNeedsReconnect) { return false; } if (containsReconnectCue(prepareMessage)) { return true; } return prepareChecks.some( (check) => check.providerId === 'codex' && check.details.some((detail) => containsReconnectCue(detail)) ); } export const CodexReconnectPrompt = ({ authUrl, userCode, reconnectBusy, onReconnect, onDeviceCodeReconnect, }: { authUrl: string | null; userCode: string | null; reconnectBusy: boolean; onReconnect: () => void; onDeviceCodeReconnect: () => void; }): React.JSX.Element => { const { t } = useAppTranslation('team'); return (
{t('codexReconnect.description')}