"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}
);
}