"use client"; import { useState } from "react"; import { useAgentActivity, useResetCaseAgents } from "@/lib/api/agents"; import type { PaperclipAgentStatus } from "@/lib/api/agents"; import { Bot, RotateCcw, Loader2 } from "lucide-react"; import { toast } from "sonner"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; /* ── Status dot colors ───────────────────────────────────────── */ const STATUS_DOT: Record = { active: "bg-emerald-500 shadow-[0_0_6px_rgba(16,185,129,0.6)]", running: "bg-emerald-500 shadow-[0_0_6px_rgba(16,185,129,0.6)]", idle: "bg-gray-300", error: "bg-red-500", }; const STATUS_LABEL: Record = { active: "פעיל", running: "פעיל", idle: "ממתין", error: "שגיאה", }; function statusDot(status: string) { return STATUS_DOT[status] ?? STATUS_DOT.idle; } /* ── Agent row ───────────────────────────────────────────────── */ function AgentRow({ agent }: { agent: PaperclipAgentStatus }) { return (
{agent.name} {STATUS_LABEL[agent.status] ?? agent.status}
); } /* ── Reset button ─────────────────────────────────────────────── */ function ResetAgentsButton({ caseNumber }: { caseNumber: string }) { const [open, setOpen] = useState(false); const reset = useResetCaseAgents(caseNumber); function handleConfirm() { reset.mutate(undefined, { onSuccess: (result) => { setOpen(false); const agentNames = result.reset_agents .filter((a) => a.ok) .map((a) => a.name) .join(", "); const msg = agentNames ? `סוכנים אופסו: ${agentNames}` : "אופסו בהצלחה"; toast.success(msg); }, onError: () => { setOpen(false); toast.error("שגיאה בביצוע האיפוס"); }, }); } return ( איפוס סוכנים פעולה זו תאפס את כל הסוכנים במצב שגיאה ותחזיר issues פתוחים לניהול ידני. פעולה הפיכה — ניתן להפעיל את הסוכנים מחדש אחרי האיפוס. ); } /* ── Widget ───────────────────────────────────────────────────── */ export function AgentStatusWidget({ caseNumber, }: { caseNumber: string; }) { const { data } = useAgentActivity(caseNumber); // Don't render if no Paperclip project yet if (!data?.issues?.length) return null; const agents = data.agents ?? []; const activeCount = agents.filter((a) => a.status === "active" || a.status === "running").length; const hasErrors = agents.some((a) => a.status === "error"); return (
סוכנים
{hasErrors && } {agents.length > 0 && ( {activeCount} פעילים מתוך {agents.length} )}
{agents.map((agent) => ( ))}
); }