"use client"; import { useState } from "react"; import { ChevronDownIcon, ChevronUpIcon, Loader2, CheckCircle2, TerminalSquare, Code, ArrowRight, Circle, } from "lucide-react"; import { cn } from "@/lib/utils"; interface ToolInvocationProps { toolName: string; state: string; args: any; result: any; isLatestMessage: boolean; status: string; } export function ToolInvocation({ toolName, state, args, result, isLatestMessage, status, }: ToolInvocationProps) { const [isExpanded, setIsExpanded] = useState(false); const getStatusIcon = () => { if (state === "call") { if (isLatestMessage && status !== "ready") { return ; } return ; } return ; }; const getStatusClass = () => { if (state === "call") { if (isLatestMessage && status !== "ready") { return "text-primary"; } return "text-muted-foreground"; } return "text-primary"; }; const formatContent = (content: any): string => { try { if (typeof content === "string") { try { const parsed = JSON.parse(content); return JSON.stringify(parsed, null, 2); } catch { return content; } } return JSON.stringify(content, null, 2); } catch { return String(content); } }; return (
setIsExpanded(!isExpanded)} >
{toolName} {state === "call" ? (isLatestMessage && status !== "ready" ? "Running" : "Waiting") : "Completed"}
{getStatusIcon()}
{isExpanded ? ( ) : ( )}
{isExpanded && (
{!!args && (
Arguments
                {formatContent(args)}
              
)} {!!result && (
Result
                {formatContent(result)}
              
)}
)}
); }