"use client"; import {useState} from "react"; import Link from "next/link"; import {Card} from "@/components/ui/card"; import {ConnectionIndicator} from "@/components/common/connection-indicator"; import {formatDateLastContact} from "@/utils/date-formatting"; import {AgentWith} from "@/db/schema/08_agent"; import {Activity, ChevronRight, Copy, Check, Fingerprint, Server, Database, AlertCircle} from "lucide-react"; import {Badge} from "@/components/ui/badge"; import {truncateWords} from "@/utils/text"; import {useIsMobile} from "@/hooks/use-mobile"; import {Tooltip, TooltipContent, TooltipTrigger} from "@/components/ui/tooltip"; import {useAgentUpdateCheck} from "@/features/agents/use-agent-update-check"; export type agentCardProps = { data: AgentWith; organizationView?: boolean; }; export const AgentCard = (props: agentCardProps) => { const {data: agent} = props; const isMobile = useIsMobile(); const [isCopied, setIsCopied] = useState(false); const {newRelease, isUpdateAvailable} = useAgentUpdateCheck(agent.version); const handleCopy = (e: React.MouseEvent) => { e.preventDefault(); e.stopPropagation(); navigator.clipboard.writeText(agent.id); setIsCopied(true); setTimeout(() => setIsCopied(false), 2000); }; return ( {isMobile ? truncateWords(agent.name, 2) : agent.name} {agent.version && ( v{agent.version} {agent.healthErrorCount && ( down )} {isUpdateAvailable && ( Update available: {newRelease?.tag_name} )} )} {agent.id} {isCopied ? : } {agent.databases?.length ?? 0} DBs Last Contact {formatDateLastContact(agent.lastContact)} ); };
Update available: {newRelease?.tag_name}