"use client"; import { useState } from "react"; import { motion, AnimatePresence } from "framer-motion"; import { ChevronDown, Globe, Loader2, CheckCircle2, XCircle, Search } from "lucide-react"; import { cn } from "@/lib/utils"; interface ToolInvocationProps { toolName: string; args: Record; result?: string; status: "pending" | "running" | "complete" | "error"; } export function ToolInvocation({ toolName, args, result, status, }: ToolInvocationProps) { const [isExpanded, setIsExpanded] = useState(status === "running"); const getStatusIndicator = () => { switch (status) { case "pending": case "running": return (
); case "complete": return (
); case "error": return (
); } }; const getDisplayInfo = () => { if (toolName === "web_search") { const query = args.query as string; return { icon: , title: "Web Search", subtitle: query, }; } return { icon: , title: toolName, subtitle: JSON.stringify(args), }; }; const info = getDisplayInfo(); return (
{isExpanded && (
{result && (
{result}
)} {!result && status === "running" && (
Fetching results...
)}
)}
); }