/** * @license * Copyright 2025 Google LLC * SPDX-License-Identifier: Apache-2.0 */ import { Box, Text } from 'ink'; import { IdeIntegrationNudge } from '../IdeIntegrationNudge.js'; import { LoopDetectionConfirmation } from './LoopDetectionConfirmation.js'; import { FolderTrustDialog } from './FolderTrustDialog.js'; import { ShellConfirmationDialog } from './ShellConfirmationDialog.js'; import { ConsentPrompt } from './ConsentPrompt.js'; import { ThemeDialog } from './ThemeDialog.js'; import { SettingsDialog } from './SettingsDialog.js'; import { QwenOAuthProgress } from './QwenOAuthProgress.js'; import { AuthDialog } from '../auth/AuthDialog.js'; import { OpenAIKeyPrompt } from './OpenAIKeyPrompt.js'; import { EditorSettingsDialog } from './EditorSettingsDialog.js'; import { WorkspaceMigrationDialog } from './WorkspaceMigrationDialog.js'; import { ProQuotaDialog } from './ProQuotaDialog.js'; import { PermissionsModifyTrustDialog } from './PermissionsModifyTrustDialog.js'; import { ModelDialog } from './ModelDialog.js'; import { ApprovalModeDialog } from './ApprovalModeDialog.js'; import { theme } from '../semantic-colors.js'; import { useUIState } from '../contexts/UIStateContext.js'; import { useUIActions } from '../contexts/UIActionsContext.js'; import { useConfig } from '../contexts/ConfigContext.js'; import { useSettings } from '../contexts/SettingsContext.js'; import { SettingScope } from '../../config/settings.js'; import { AuthState } from '../types.js'; import { AuthType } from '@qwen-code/qwen-code-core'; import process from 'node:process'; import { type UseHistoryManagerReturn } from '../hooks/useHistoryManager.js'; import { IdeTrustChangeDialog } from './IdeTrustChangeDialog.js'; import { WelcomeBackDialog } from './WelcomeBackDialog.js'; import { ModelSwitchDialog } from './ModelSwitchDialog.js'; import { AgentCreationWizard } from './subagents/create/AgentCreationWizard.js'; import { AgentsManagerDialog } from './subagents/manage/AgentsManagerDialog.js'; import { QuitConfirmationDialog, QuitChoice, } from './QuitConfirmationDialog.js'; interface DialogManagerProps { addItem: UseHistoryManagerReturn['addItem']; terminalWidth: number; } // Props for DialogManager export const DialogManager = ({ addItem, terminalWidth, }: DialogManagerProps) => { const config = useConfig(); const settings = useSettings(); const uiState = useUIState(); const uiActions = useUIActions(); const { constrainHeight, terminalHeight, staticExtraHeight, mainAreaWidth } = uiState; const getDefaultOpenAIConfig = () => { const fromSettings = settings.merged.security?.auth; const modelSettings = settings.merged.model; return { apiKey: fromSettings?.apiKey || process.env['OPENAI_API_KEY'] || '', baseUrl: fromSettings?.baseUrl || process.env['OPENAI_BASE_URL'] || '', model: modelSettings?.name || process.env['OPENAI_MODEL'] || '', }; }; if (uiState.showWelcomeBackDialog && uiState.welcomeBackInfo?.hasHistory) { return ( ); } if (uiState.showIdeRestartPrompt) { return ; } if (uiState.showWorkspaceMigrationDialog) { return ( ); } if (uiState.proQuotaRequest) { return ( ); } if (uiState.shouldShowIdePrompt) { return ( ); } if (uiState.isFolderTrustDialogOpen) { return ( ); } if (uiState.shellConfirmationRequest) { return ( ); } if (uiState.loopDetectionConfirmationRequest) { return ( ); } if (uiState.quitConfirmationRequest) { return ( { if (choice === QuitChoice.CANCEL) { uiState.quitConfirmationRequest?.onConfirm(false, 'cancel'); } else if (choice === QuitChoice.QUIT) { uiState.quitConfirmationRequest?.onConfirm(true, 'quit'); } else if (choice === QuitChoice.SUMMARY_AND_QUIT) { uiState.quitConfirmationRequest?.onConfirm( true, 'summary_and_quit', ); } }} /> ); } if (uiState.confirmationRequest) { return ( ); } if (uiState.confirmUpdateExtensionRequests.length > 0) { const request = uiState.confirmUpdateExtensionRequests[0]; return ( ); } if (uiState.isThemeDialogOpen) { return ( {uiState.themeError && ( {uiState.themeError} )} ); } if (uiState.isSettingsDialogOpen) { return ( uiActions.closeSettingsDialog()} onRestartRequest={() => process.exit(0)} availableTerminalHeight={terminalHeight - staticExtraHeight} config={config} /> ); } if (uiState.isApprovalModeDialogOpen) { const currentMode = config.getApprovalMode(); return ( ); } if (uiState.isModelDialogOpen) { return ; } if (uiState.isVisionSwitchDialogOpen) { return ; } if (uiState.isAuthDialogOpen || uiState.authError) { return ( ); } if (uiState.isAuthenticating) { if (uiState.pendingAuthType === AuthType.USE_OPENAI) { const defaults = getDefaultOpenAIConfig(); return ( { uiActions.handleAuthSelect(AuthType.USE_OPENAI, SettingScope.User, { apiKey, baseUrl, model, }); }} onCancel={() => { uiActions.cancelAuthentication(); uiActions.setAuthState(AuthState.Updating); }} defaultApiKey={defaults.apiKey} defaultBaseUrl={defaults.baseUrl} defaultModel={defaults.model} /> ); } if (uiState.pendingAuthType === AuthType.QWEN_OAUTH) { return ( { uiActions.onAuthError('Qwen OAuth authentication timed out.'); uiActions.cancelAuthentication(); uiActions.setAuthState(AuthState.Updating); }} onCancel={() => { uiActions.cancelAuthentication(); uiActions.setAuthState(AuthState.Updating); }} /> ); } } if (uiState.isEditorDialogOpen) { return ( {uiState.editorError && ( {uiState.editorError} )} ); } if (uiState.isPermissionsDialogOpen) { return ( ); } if (uiState.isSubagentCreateDialogOpen) { return ( ); } if (uiState.isAgentsManagerDialogOpen) { return ( ); } return null; };