import { Settings as SettingsIcon, X } from 'lucide-react'; import { useTranslation } from 'react-i18next'; import LoginModal from '../../LoginModal'; import { Button } from '../../ui/button'; import ClaudeMcpFormModal from '../view/modals/ClaudeMcpFormModal'; import CodexMcpFormModal from '../view/modals/CodexMcpFormModal'; import SettingsMainTabs from '../view/SettingsMainTabs'; import AgentsSettingsTab from '../view/tabs/agents-settings/AgentsSettingsTab'; import AppearanceSettingsTab from '../view/tabs/AppearanceSettingsTab'; import CredentialsSettingsTab from '../view/tabs/api-settings/CredentialsSettingsTab'; import GitSettingsTab from '../view/tabs/git-settings/GitSettingsTab'; import TasksSettingsTab from '../view/tabs/tasks-settings/TasksSettingsTab'; import { useSettingsController } from '../hooks/useSettingsController'; import type { AgentProvider, SettingsProject, SettingsProps } from '../types/types'; type LoginModalProps = { isOpen: boolean; onClose: () => void; provider: AgentProvider | ''; project: SettingsProject | null; onComplete: (exitCode: number) => void; isAuthenticated: boolean; }; const LoginModalComponent = LoginModal as unknown as (props: LoginModalProps) => JSX.Element; function Settings({ isOpen, onClose, projects = [], initialTab = 'agents' }: SettingsProps) { const { t } = useTranslation('settings'); const { activeTab, setActiveTab, isSaving, saveStatus, deleteError, projectSortOrder, setProjectSortOrder, codeEditorSettings, updateCodeEditorSetting, claudePermissions, setClaudePermissions, cursorPermissions, setCursorPermissions, codexPermissionMode, setCodexPermissionMode, mcpServers, cursorMcpServers, codexMcpServers, mcpTestResults, mcpServerTools, mcpToolsLoading, showMcpForm, editingMcpServer, openMcpForm, closeMcpForm, submitMcpForm, handleMcpDelete, handleMcpTest, handleMcpToolsDiscovery, showCodexMcpForm, editingCodexMcpServer, openCodexMcpForm, closeCodexMcpForm, submitCodexMcpForm, handleCodexMcpDelete, claudeAuthStatus, cursorAuthStatus, codexAuthStatus, geminiAuthStatus, geminiPermissionMode, setGeminiPermissionMode, openLoginForProvider, showLoginModal, setShowLoginModal, loginProvider, selectedProject, handleLoginComplete, saveSettings, } = useSettingsController({ isOpen, initialTab, projects, onClose, }); if (!isOpen) { return null; } const isAuthenticated = loginProvider === 'claude' ? claudeAuthStatus.authenticated : loginProvider === 'cursor' ? cursorAuthStatus.authenticated : loginProvider === 'codex' ? codexAuthStatus.authenticated : false; return (