/** * @license * Copyright 2025 Google LLC * SPDX-License-Identifier: Apache-2.0 */ import { Box, Text } from 'ink'; import { IdeIntegrationNudge } from '../IdeIntegrationNudge.js'; import { CommandFormatMigrationNudge } from '../CommandFormatMigrationNudge.js'; import { LoopDetectionConfirmation } from './LoopDetectionConfirmation.js'; import { FolderTrustDialog } from './FolderTrustDialog.js'; import { ShellConfirmationDialog } from './ShellConfirmationDialog.js'; import { ConsentPrompt } from './ConsentPrompt.js'; import { SettingInputPrompt } from './SettingInputPrompt.js'; import { PluginChoicePrompt } from './PluginChoicePrompt.js'; import { ThemeDialog } from './ThemeDialog.js'; import { SettingsDialog } from './SettingsDialog.js'; import { QwenOAuthProgress } from './QwenOAuthProgress.js'; import { AuthDialog } from '../auth/AuthDialog.js'; import { EditorSettingsDialog } from './EditorSettingsDialog.js'; import { TrustDialog } from './TrustDialog.js'; import { PermissionsDialog } from './PermissionsDialog.js'; import { ModelDialog } from './ModelDialog.js'; import { ArenaStartDialog } from './arena/ArenaStartDialog.js'; import { ArenaSelectDialog } from './arena/ArenaSelectDialog.js'; import { ArenaStopDialog } from './arena/ArenaStopDialog.js'; import { ArenaStatusDialog } from './arena/ArenaStatusDialog.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 { 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 { AgentCreationWizard } from './subagents/create/AgentCreationWizard.js'; import { AgentsManagerDialog } from './subagents/manage/AgentsManagerDialog.js'; import { ExtensionsManagerDialog } from './extensions/ExtensionsManagerDialog.js'; import { MCPManagementDialog } from './mcp/MCPManagementDialog.js'; import { SessionPicker } from './SessionPicker.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; if (uiState.showWelcomeBackDialog && uiState.welcomeBackInfo?.hasHistory) { return ( ); } if (uiState.showIdeRestartPrompt) { return ; } if (uiState.shouldShowIdePrompt) { return ( ); } if (uiState.shouldShowCommandMigrationNudge) { return ( ); } if (uiState.isFolderTrustDialogOpen) { return ( ); } if (uiState.shellConfirmationRequest) { return ( ); } if (uiState.loopDetectionConfirmationRequest) { return ( ); } if (uiState.confirmationRequest) { return ( ); } if (uiState.confirmUpdateExtensionRequests.length > 0) { const request = uiState.confirmUpdateExtensionRequests[0]; return ( ); } if (uiState.codingPlanUpdateRequest) { return ( ); } if (uiState.settingInputRequests.length > 0) { const request = uiState.settingInputRequests[0]; // Use settingName as key to force re-mount when switching between different settings return ( ); } if (uiState.pluginChoiceRequests.length > 0) { const request = uiState.pluginChoiceRequests[0]; return ( ); } if (uiState.isThemeDialogOpen) { return ( {uiState.themeError && ( {uiState.themeError} )} ); } if (uiState.isEditorDialogOpen) { return ( {uiState.editorError && ( {uiState.editorError} )} ); } if (uiState.isSettingsDialogOpen) { return ( { if (settingName === 'ui.theme') { uiActions.openThemeDialog(); return; } if (settingName === 'general.preferredEditor') { uiActions.openEditorDialog(); 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.activeArenaDialog === 'start') { return ( uiActions.closeArenaDialog()} onConfirm={(models) => uiActions.handleArenaModelsSelected?.(models)} /> ); } if (uiState.activeArenaDialog === 'status') { const arenaManager = config.getArenaManager(); if (arenaManager) { return ( ); } } if (uiState.activeArenaDialog === 'stop') { return ( ); } if (uiState.activeArenaDialog === 'select') { const arenaManager = config.getArenaManager(); if (arenaManager) { return ( ); } } if (uiState.isAuthDialogOpen || uiState.authError) { return ( ); } if (uiState.isAuthenticating) { // OpenAI authentication now handled through AuthDialog with coding-plan/custom sub-modes // Qwen OAuth remains as a separate flow 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.isTrustDialogOpen) { return ( ); } if (uiState.isPermissionsDialogOpen) { return ; } if (uiState.isSubagentCreateDialogOpen) { return ( ); } if (uiState.isAgentsManagerDialogOpen) { return ( ); } if (uiState.isExtensionsManagerDialogOpen) { return ( ); } if (uiState.isMcpDialogOpen) { return ; } if (uiState.isResumeDialogOpen) { return ( ); } return null; };