"use client"; import { useState } from "react"; import { motion, AnimatePresence } from "motion/react"; import { ChevronDownIcon, ChevronUpIcon, Loader2, CheckCircle2, TerminalSquare, Code, ArrowRight, Circle, } from "lucide-react"; 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 variants = { collapsed: { height: 0, opacity: 0, }, expanded: { height: "auto", opacity: 1, }, }; const getStatusIcon = () => { if (state === "call") { if (isLatestMessage && status !== "ready") { return ; } return ; } return ; }; 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" ? "Running" : "Completed"}
{getStatusIcon()} {isExpanded ? ( ) : ( )}
{isExpanded && ( {!!args && (
Arguments
                  {formatContent(args)}
                
)} {!!result && (
Result
                  {formatContent(result)}
                
)}
)}
); }