import { Button } from '@/components/ui/button'; import { SkeletonPulse } from '@/components/ui/skeleton'; import { Spinner } from '@/components/ui/spinner'; import { CheckCircle2, AlertCircle, RefreshCw } from 'lucide-react'; import { cn } from '@/lib/utils'; import type { CliStatus } from '../shared/types'; import { CopilotIcon } from '@/components/ui/provider-icon'; import type { CopilotAuthStatus } from '@automaker/types'; // Re-export for backwards compatibility export type { CopilotAuthStatus }; function getAuthMethodLabel(method: CopilotAuthStatus['method']): string { switch (method) { case 'oauth': return 'GitHub OAuth'; case 'cli': return 'Copilot CLI'; default: return method || 'Unknown'; } } interface CopilotCliStatusProps { status: CliStatus | null; authStatus?: CopilotAuthStatus | null; isChecking: boolean; onRefresh: () => void; } export function CopilotCliStatusSkeleton() { return (
{/* Installation status skeleton */}
{/* Auth status skeleton */}
); } export function CopilotCliStatus({ status, authStatus, isChecking, onRefresh, }: CopilotCliStatusProps) { if (!status) return ; return (

GitHub Copilot CLI

GitHub Copilot CLI provides access to GPT and Claude models via your Copilot subscription.

{status.success && status.status === 'installed' ? (

Copilot CLI Installed

{status.method && (

Method: {status.method}

)} {status.version && (

Version: {status.version}

)} {status.path && (

Path: {status.path}

)}
{/* Authentication Status */} {authStatus?.authenticated ? (

Authenticated

{authStatus.method !== 'none' && (

Method:{' '} {getAuthMethodLabel(authStatus.method)}

)} {authStatus.login && (

User: {authStatus.login}

)}
) : (

Authentication Required

{authStatus?.error && (

{authStatus.error}

)}

Run gh auth login{' '} in your terminal to authenticate with GitHub.

)} {status.recommendation && (

{status.recommendation}

)}
) : (

Copilot CLI Not Detected

{status.recommendation || 'Install GitHub Copilot CLI to use models via your Copilot subscription.'}

{status.installCommands && (

Installation Commands:

{status.installCommands.npm && (

npm

{status.installCommands.npm}
)}
)}
)}
); }