import React, { useState } from "react"; import { LLMContent } from "../types"; interface GenericToolProps { toolName: string; // For tool_use (pending state) toolInput?: unknown; isRunning?: boolean; // For tool_result (completed state) toolResult?: LLMContent[]; hasError?: boolean; executionTime?: string; } function GenericTool({ toolName, toolInput, isRunning, toolResult, hasError, executionTime, }: GenericToolProps) { const [isExpanded, setIsExpanded] = useState(false); // Format data for display const formatData = (data: unknown): string => { if (data === undefined || data === null) return ""; if (typeof data === "string") return data; try { return JSON.stringify(data, null, 2); } catch { return String(data); } }; // Extract output from toolResult const output = toolResult && toolResult.length > 0 ? toolResult.map((result) => result.Text || formatData(result)).join("\n") : ""; const isComplete = !isRunning && toolResult !== undefined; return (
setIsExpanded(!isExpanded)}>
⚙️ {toolName} {isComplete && hasError && } {isComplete && !hasError && }
{isExpanded && (
{toolInput !== undefined && (
Input:
{formatData(toolInput)}
)} {isRunning && (
Status:
running...
)} {isComplete && (
Output{hasError ? " (Error)" : ""}: {executionTime && {executionTime}}
                {output || "(no output)"}
              
)}
)}
); } export default GenericTool;