"use client"; import { useState } from 'react'; interface ReasoningTraceProps { trace?: { purpose?: string; thoughts?: string; next_action?: string; step?: number; done?: boolean; timestamp?: string; } | null; collapsible?: boolean; } export default function ReasoningTrace({ trace, collapsible = true }: ReasoningTraceProps) { const [expanded, setExpanded] = useState(false); if (!trace) return null; const short = (s?: string, n = 180) => (s || '').slice(0, n) + ((s || '').length > n ? '…' : ''); return (
Reasoning trace {trace.timestamp ? ( {new Date(trace.timestamp).toLocaleTimeString()} ) : null} {trace.done ? 'final' : 'in-progress'}
{/* Collapsed: show only the purpose as the title */} {trace.purpose ? (
Goal: {expanded ? trace.purpose : short(trace.purpose, 80)}
) : null} {/* Expanded: show details */} {expanded && trace.thoughts ?
{trace.thoughts}
: null} {expanded && trace.next_action ? (
Next: {trace.next_action}
) : null} {collapsible ? (
) : null}
); }