import { X } from 'lucide-react'; import StandaloneShell from './StandaloneShell'; /** * Reusable login modal component for Claude, Cursor, and Codex CLI authentication * * @param {Object} props * @param {boolean} props.isOpen - Whether the modal is visible * @param {Function} props.onClose - Callback when modal is closed * @param {'claude'|'cursor'|'codex'} props.provider - Which CLI provider to authenticate with * @param {Object} props.project - Project object containing name and path information * @param {Function} props.onComplete - Callback when login process completes (receives exitCode) * @param {string} props.customCommand - Optional custom command to override defaults * @param {boolean} props.isAuthenticated - Whether user is already authenticated (for re-auth flow) */ function LoginModal({ isOpen, onClose, provider = 'claude', project, onComplete, customCommand, isAuthenticated = false }) { if (!isOpen) return null; const getCommand = () => { if (customCommand) return customCommand; const isPlatform = import.meta.env.VITE_IS_PLATFORM === 'true'; switch (provider) { case 'claude': return isAuthenticated ? 'claude /login --dangerously-skip-permissions' : 'claude setup-token --dangerously-skip-permissions'; case 'cursor': return 'cursor-agent login'; case 'codex': return isPlatform ? 'codex login --device-auth' : 'codex login'; default: return isAuthenticated ? 'claude /login --dangerously-skip-permissions' : 'claude setup-token --dangerously-skip-permissions'; } }; const getTitle = () => { switch (provider) { case 'claude': return 'Claude CLI Login'; case 'cursor': return 'Cursor CLI Login'; case 'codex': return 'Codex CLI Login'; default: return 'CLI Login'; } }; const handleComplete = (exitCode) => { if (onComplete) { onComplete(exitCode); } if (exitCode === 0) { onClose(); } }; return (

{getTitle()}

); } export default LoginModal;