import { useState, useEffect } from "react"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Textarea } from "@/components/ui/textarea"; import { Label } from "@/components/ui/label"; import { Switch } from "@/components/ui/switch"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter, DialogDescription, } from "@/components/ui/dialog"; import type { AgentProfile, AgentCreateRequest, AgentLLMConfig } from "@/types/agent"; interface AgentFormProps { open: boolean; onOpenChange: (open: boolean) => void; agent?: AgentProfile | null; onSubmit: (data: AgentCreateRequest) => Promise; } export function AgentForm({ open, onOpenChange, agent, onSubmit }: AgentFormProps) { const isEdit = !!agent; const [agentId, setAgentId] = useState(""); const [displayName, setDisplayName] = useState(""); const [persona, setPersona] = useState(""); const [description, setDescription] = useState(""); const [llmBackbone, setLlmBackbone] = useState(""); const [tools, setTools] = useState(""); const [showLlmConfig, setShowLlmConfig] = useState(false); const [llmConfig, setLlmConfig] = useState({}); const [submitting, setSubmitting] = useState(false); const [error, setError] = useState(""); useEffect(() => { if (agent) { setAgentId(agent.agent_id); setDisplayName(agent.display_name); setPersona(agent.persona || ""); setDescription(agent.description || ""); setLlmBackbone(agent.llm_backbone || ""); setTools(agent.tools.join(", ")); if (agent.llm_config) { setShowLlmConfig(true); setLlmConfig(agent.llm_config); } } else { setAgentId(""); setDisplayName(""); setPersona(""); setDescription(""); setLlmBackbone(""); setTools(""); setShowLlmConfig(false); setLlmConfig({}); } setError(""); }, [agent, open]); const handleSubmit = async () => { if (!agentId.trim() || !displayName.trim()) { setError("Agent ID and Display Name are required."); return; } setSubmitting(true); setError(""); try { await onSubmit({ agent_id: agentId.trim(), display_name: displayName.trim(), persona: persona.trim(), description: description.trim(), llm_backbone: llmBackbone.trim() || null, llm_config: showLlmConfig ? llmConfig : null, tools: tools .split(",") .map((t) => t.trim()) .filter(Boolean), }); onOpenChange(false); } catch (e) { setError(String(e)); } finally { setSubmitting(false); } }; return ( {isEdit ? "Edit Agent" : "Create Agent"} {isEdit ? "Update the agent configuration." : "Define a new agent for your workflows."}
setAgentId(e.target.value)} disabled={isEdit} />
setDisplayName(e.target.value)} />