import { Link } from 'react-router-dom' import { Clock, CheckCircle2, ArrowUpRight, AlertCircle, Pause, Route, MessageCircle } from 'lucide-react' import { cn } from '@/lib/utils' import type { AISessionSummary } from '@/types/ai-session' interface AISessionListItemProps { session: AISessionSummary } const STATUS_CONFIG = { active: { icon: Clock, color: 'text-primary', label: 'Active' }, paused: { icon: Pause, color: 'text-warning', label: 'Paused' }, resolved: { icon: CheckCircle2, color: 'text-success', label: 'Resolved' }, escalated: { icon: ArrowUpRight, color: 'text-warning', label: 'Escalated' }, abandoned: { icon: AlertCircle, color: 'text-text-muted', label: 'Abandoned' }, } as const export function AISessionListItem({ session }: AISessionListItemProps) { const config = STATUS_CONFIG[session.status as keyof typeof STATUS_CONFIG] ?? STATUS_CONFIG.active const StatusIcon = config.icon // Both chat and guided sessions now land on the unified /pilot surface. // session_type is preserved on the DB row for data compatibility but is // no longer used for frontend route selection (Phase 1 FlowPilot migration). const isChat = session.session_type === 'chat' const TypeIcon = isChat ? MessageCircle : Route const linkTo = `/pilot/${session.id}` const displayTitle = isChat ? (session.title || session.problem_summary || 'Untitled chat') : (session.problem_summary || 'Untitled session') return (

{displayTitle}

{session.problem_domain && ( {session.problem_domain} )} {config.label} {session.step_count} {isChat ? 'messages' : 'steps'} {new Date(session.created_at).toLocaleDateString(undefined, { month: 'short', day: 'numeric', hour: '2-digit', minute: '2-digit', })}
{session.session_rating && ( {'★'.repeat(session.session_rating)} )}
) }