"use client"; import { createFileRoute, Link } from "@tanstack/react-router"; import { Bot, Cpu, MessageSquare, Sparkles, BarChart3, Loader2 } 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 { Button } from "@/components/ui/button"; import { Skeleton } from "@/components/ui/skeleton"; import { Tooltip, TooltipContent, TooltipTrigger, } from "@/components/ui/tooltip"; 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 = { 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 (
); } const firstName = (profile?.full_name || "").split(" ")[0] || "Você"; const agentName = `Mika de ${firstName}`; const status = agent.data?.status ?? "provisioning"; const statusInfo = STATUS_MAP[status] ?? STATUS_MAP.provisioning; return (

Meu Agente

Gerencie seu agente pessoal de IA

{/* Card 1: Seu agente — full width */}

{agentName}

{statusInfo.label}

{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."}

{/* Card 2: Modelo de IA */}

Modelo de IA

Opencode Zen

Padrão do plano
{/* Card 3: Canais conectados */}

Canais conectados

Telegram
Disponível em breve
{/* Card 4: Estatísticas */}

Estatísticas

); } function StatItem({ label, value }: { label: string; value: string }) { return (

{value}

{label}

); }