"use client"; import { useState } from "react"; import { motion, AnimatePresence } from "motion/react"; import { ChevronDownIcon, ChevronUpIcon, Loader2, PocketKnife, CheckCircle, StopCircle, Code2, Terminal, } 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 (
{state === "call" ? "Calling" : "Called"} {toolName}
{getStatusIcon()}
{isExpanded && ( {!!args && (
Arguments
                  {formatContent(args)}
                
)} {!!result && (
Result
                  {formatContent(result)}
                
)}
)}
); }