"use client"; import { useState } from "react"; type ToolCall = { command: string; output?: string }; type Message = | { role: "user"; text: string } | { role: "assistant"; text: string } | { role: "skill"; name: string } | { role: "tools"; calls: ToolCall[] } | { role: "output"; text: string }; export type ChatSpec = { title?: string; messages: Message[] }; function CopyButton({ text }: { text: string }) { const [copied, setCopied] = useState(false); return ( ); } function ChevronIcon({ open }: { open: boolean }) { return ( ); } function ToolCalls({ calls }: { calls: ToolCall[] }) { const [open, setOpen] = useState([]); const toggle = (i: number) => setOpen((prev) => (prev.includes(i) ? prev.filter((n) => n !== i) : [...prev, i])); return (
{calls.map((call, i) => { const isOpen = open.includes(i); const hasOutput = typeof call.output === "string" && call.output.length > 0; return (
{isOpen && hasOutput && (
                {call.output}
              
)}
); })}
); } function ChatMessage({ message }: { message: Message }) { if (message.role === "user") { return (
{message.text}
); } if (message.role === "assistant") { return (
{message.text}
); } if (message.role === "skill") { return (
Loaded {message.name} skill
); } if (message.role === "tools") { return ; } return (
      {message.text}
    
); } export function AgentChat({ spec }: { spec: ChatSpec }) { return (
{spec.messages.map((message, i) => ( ))}
); }