"use client"; import { createFileRoute } from "@tanstack/react-router"; import { Bot, Cpu, BarChart3 } from "lucide-react"; import { useProfile } from "@/hooks/use-profile"; import { useAgentInstance } from "@/hooks/use-agent-instance"; import { useUserSkillLimits } from "@/hooks/use-user-skill-limits"; import { useQuery } from "@tanstack/react-query"; import { supabase } from "@/integrations/supabase/client"; import { useAuth } from "@/hooks/use-auth"; import { Badge } from "@/components/ui/badge"; import { Skeleton } from "@/components/ui/skeleton"; import { TelegramStatusCard } from "@/components/mika/telegram/TelegramStatusCard"; import { formatDistanceToNow } from "date-fns"; import { ptBR } from "date-fns/locale"; import { cn } from "@/lib/utils"; export const Route = createFileRoute("/painel/agente")({ component: AgentePage, }); const STATUS_MAP: Record< string, { label: string; variant: "warning" | "success" | "destructive"; pulse?: boolean } > = { provisioning: { label: "Provisionando", variant: "warning", pulse: true }, active: { label: "Online", variant: "success" }, suspended: { label: "Suspenso", variant: "destructive" }, error: { label: "Erro", variant: "destructive" }, }; function AgentePage() { const { data: profile } = useProfile(); const agent = useAgentInstance(); const limits = useUserSkillLimits(); const { user } = useAuth(); const lastTestRun = useQuery({ queryKey: ["last-test-run", user?.id], enabled: !!user, queryFn: async () => { const { data, error } = await supabase .from("skill_test_runs") .select("created_at") .eq("user_id", user!.id) .order("created_at", { ascending: false }) .limit(1) .maybeSingle(); if (error) throw error; return data?.created_at ?? null; }, }); const loading = agent.isLoading; if (loading) { return (
Gerencie seu agente pessoal de IA
{status === "provisioning" ? "Estamos preparando sua instância. Geralmente leva até 10 minutos." : status === "active" ? "Seu agente está online e pronto para receber skills." : "Houve um problema com sua instância. Entre em contato com o suporte."}
Opencode Zen
{value}
{label}