import React, { useEffect, useState } from 'react'; import { History as HistoryIcon, RefreshCw } from 'lucide-react'; const History: React.FC = () => { const [runs, setRuns] = useState([]); const [loading, setLoading] = useState(false); const fetchHistory = async () => { setLoading(true); try { const res = await fetch('/api/sessions'); const data = await res.json(); if (data.ok) { // Sort by descending update time (assuming default or simple sort needed) const sortedRuns = (data.runs || []).sort((a: any, b: any) => { return new Date(b.updatedAt || 0).getTime() - new Date(a.updatedAt || 0).getTime(); }); setRuns(sortedRuns); } } catch (e) { console.error('Failed to fetch history', e); } finally { setLoading(false); } }; useEffect(() => { fetchHistory(); }, []); return (

Run History

{runs.length === 0 ? ( ) : ( runs.map((run: any) => { const dateStr = run.updatedAt ? new Date(run.updatedAt).toLocaleString() : 'N/A'; let statusColor = 'text-subtle'; if (run.status === 'success') statusColor = 'text-success'; if (run.status === 'failure' || run.status === 'cancelled') statusColor = 'text-danger'; if (run.status === 'validation_fail') statusColor = 'text-warning'; return ( ); }) )}
Session ID Status Attempts Updated
{loading ? 'Loading...' : 'No run history available.'}
{run.sessionId || 'N/A'} {run.status || 'unknown'} {run.attempts ?? 0} {dateStr}
); }; export default History;