"use client"; import { createFileRoute, Link } from "@tanstack/react-router"; import { useState } from "react"; import { Plus, Sparkles } from "lucide-react"; import { useSkills } from "@/hooks/use-skills"; import { useUserSkillLimits } from "@/hooks/use-user-skill-limits"; import { useAgentInstance } from "@/hooks/use-agent-instance"; import { NoSubscriptionState } from "@/components/mika/skills/NoSubscriptionState"; import { AgentProvisioningState } from "@/components/mika/skills/AgentProvisioningState"; import { EmptySkillsState } from "@/components/mika/skills/EmptySkillsState"; import { SkillCard } from "@/components/mika/skills/SkillCard"; import { Button } from "@/components/ui/button"; import { Skeleton } from "@/components/ui/skeleton"; import { Switch } from "@/components/ui/switch"; import { Label } from "@/components/ui/label"; import { Tooltip, TooltipContent, TooltipTrigger, } from "@/components/ui/tooltip"; export const Route = createFileRoute("/painel/skills/")({ component: SkillsPage, }); function SkillsPage() { const [showArchived, setShowArchived] = useState(false); const limits = useUserSkillLimits(); const agent = useAgentInstance(); const skills = useSkills(showArchived); const loading = limits.isLoading || agent.isLoading || skills.isLoading; const noSub = !limits.isLoading && (limits.data?.max_skills == null); const agentNotReady = !agent.isLoading && (!agent.data || agent.data.status === "provisioning"); const atLimit = limits.data != null && limits.data.max_skills != null && limits.data.current_skills_count >= limits.data.max_skills; if (loading) { return (
{[1, 2, 3].map((i) => ( ))}
); } return (

Skills

Crie automações personalizadas para seu agente Mika

{!noSub && (
{limits.data && limits.data.max_skills != null && ( {limits.data.current_skills_count} de {limits.data.max_skills} skills )}
{(atLimit || agentNotReady) && ( {agentNotReady ? "Aguarde o provisionamento do agente terminar" : `Limite de ${limits.data?.max_skills} skills do plano ${limits.data?.plan_slug ?? ""}. Faça upgrade ou arquive uma skill.`} )}
)}
{noSub ? ( ) : agentNotReady ? ( ) : skills.data && skills.data.length === 0 ? ( ) : (
{skills.data?.map((skill) => ( ))}
)}
); }