import { BrowserFrame } from "@/components/Browser/BrowserFrame"; import { useState } from "react"; import { useQuery, useQueryClient } from "@tanstack/react-query"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { ScrollArea } from "@/components/ui/scroll-area"; import { Badge } from "@/components/ui/badge"; import { Server, Activity, Cpu, Database, RefreshCw, Play, Square, CheckCircle, XCircle, AlertCircle, Loader2, Bot, Gauge, BarChart3, Zap, FileText, Calculator, ShoppingCart, Clock, Signal, HardDrive, Workflow, Users, Brain, Sparkles, Search, Code, Terminal, Globe, Shield, ArrowRight, Layers, Network, X, } from "lucide-react"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, } from "@/components/ui/dialog"; interface EngineStatus { name: string; displayName: string; type: string; port: number; category: string; description: string; status: "online" | "offline" | "error"; responseTime?: number; details?: any; error?: string; } interface AgentStatus { name: string; running: boolean; processedTasks?: number; errorCount?: number; } interface EngineRoomData { engines: EngineStatus[]; agents: AgentStatus[]; summary: { total_engines: number; online_engines: number; offline_engines: number; health_pct: number; total_agents: number; running_agents: number; }; timestamp: string; } const ENGINE_ICONS: Record = { "manus-ia": Brain, "plus": ShoppingCart, "contabil": Calculator, "fisco": FileText, "bi-engine": BarChart3, "automation-engine": Zap, }; const CATEGORY_COLORS: Record = { erp: "bg-blue-500/10 text-blue-400 border-blue-500/20", fiscal: "bg-amber-500/10 text-amber-400 border-amber-500/20", data: "bg-emerald-500/10 text-emerald-400 border-emerald-500/20", automation: "bg-purple-500/10 text-purple-400 border-purple-500/20", intelligence: "bg-cyan-500/10 text-cyan-400 border-cyan-500/20", }; const STATUS_CONFIG = { online: { icon: CheckCircle, color: "text-green-400", bg: "bg-green-500/10", label: "Online" }, offline: { icon: XCircle, color: "text-red-400", bg: "bg-red-500/10", label: "Offline" }, error: { icon: AlertCircle, color: "text-amber-400", bg: "bg-amber-500/10", label: "Erro" }, }; function EngineCard({ engine, onClick }: { engine: EngineStatus; onClick?: () => void }) { const statusConf = STATUS_CONFIG[engine.status]; const StatusIcon = statusConf.icon; const EngineIcon = ENGINE_ICONS[engine.name] || Server; const isClickable = !!onClick; return (

{engine.displayName}

{engine.description}

{isClickable && ( Clique para detalhes )}
{statusConf.label}

Tipo

{engine.type.toUpperCase()}

Porta

{engine.port}

Resposta

{engine.responseTime ? `${engine.responseTime}ms` : "---"}

{engine.details && engine.status === "online" && (

Detalhes

{engine.details.version && (

Versao: {engine.details.version}

)} {engine.details.database && (

DB: {engine.details.database}

)} {engine.details.cache && (

Cache: {engine.details.cache.entries} entradas, {engine.details.cache.hit_rate}% hit

)} {engine.details.scheduler && (

Scheduler: {engine.details.scheduler.is_running ? "Ativo" : "Parado"} ({engine.details.scheduler.active_entries} entradas)

)} {engine.details.workflows && engine.details.workflows.total_workflows !== undefined && (

Workflows: {engine.details.workflows.total_workflows} registrados, {engine.details.workflows.total_executions} execucoes

)}
)} {engine.error && (

{engine.error}

)}
); } function ManusStructurePanel({ open, onOpenChange, metrics }: { open: boolean; onOpenChange: (open: boolean) => void; metrics: any }) { const AGENTS = [ { name: "Architect", role: "Design & Arquitetura", icon: Layers, color: "text-blue-400", bg: "bg-blue-500/10" }, { name: "Generator", role: "Geração de Código", icon: Code, color: "text-green-400", bg: "bg-green-500/10" }, { name: "Validator", role: "Validação TypeScript", icon: Shield, color: "text-amber-400", bg: "bg-amber-500/10" }, { name: "Executor", role: "Execução & Staging", icon: Terminal, color: "text-red-400", bg: "bg-red-500/10" }, { name: "Researcher", role: "Pesquisa & Contexto", icon: Search, color: "text-cyan-400", bg: "bg-cyan-500/10" }, { name: "Evolution", role: "Aprendizado Evolutivo", icon: Sparkles, color: "text-purple-400", bg: "bg-purple-500/10" }, ]; const TOOL_CATEGORIES = [ { name: "Busca Semântica", count: 8, icon: Search, color: "text-violet-400" }, { name: "Leitura/Escrita de Arquivos", count: 12, icon: FileText, color: "text-blue-400" }, { name: "Comandos Shell", count: 6, icon: Terminal, color: "text-green-400" }, { name: "Web Research", count: 5, icon: Globe, color: "text-cyan-400" }, { name: "Knowledge Graph", count: 8, icon: Network, color: "text-amber-400" }, { name: "ERP & Database", count: 10, icon: Database, color: "text-emerald-400" }, { name: "Análise de Código", count: 7, icon: Code, color: "text-pink-400" }, ]; const uptime = metrics?.metrics?.uptime ? `${Math.floor(metrics.metrics.uptime / 3600)}h ${Math.floor((metrics.metrics.uptime % 3600) / 60)}m` : "---"; return (
Manus IA - Cérebro Central Arquitetura do motor de inteligência que alimenta todos os agentes

{metrics?.model || "GPT-4o"}

Modelo

{metrics?.metrics?.totalCalls || 0}

Chamadas IA

{((metrics?.metrics?.totalTokens || 0) / 1000).toFixed(1)}k

Tokens

{uptime}

Uptime

Arquitetura: Fluxo de Inteligência

ManusIntelligence (Singleton)

GPT-4o + ToolManager + Context Enrichment

generate() / think()
enrichWithContext()

ToolManager.search_code → Contexto Semântico Automático

{AGENTS.map((agent) => (

{agent.name}

{agent.role}

))}

Ferramentas Disponíveis ({metrics?.capabilities?.tools || 56})

{TOOL_CATEGORIES.map((cat) => (
{cat.count}

{cat.name}

))}

Capacidades Ativas

{[ { name: "Cérebro Central (GPT-4o)", active: true }, { name: "Enriquecimento de Contexto", active: true }, { name: "Busca Semântica de Código", active: true }, { name: "Knowledge Graph", active: true }, { name: "Pipeline Autônomo de Dev", active: true }, { name: "Orquestração de 6 Agentes", active: true }, { name: "Leitura/Escrita de Arquivos", active: true }, { name: "Execução de Comandos Shell", active: true }, { name: "Web Research", active: true }, { name: "Análise de Código", active: true }, { name: "Validação TypeScript", active: true }, { name: "Memória Evolutiva", active: true }, ].map((cap) => (
{cap.name}
))}
{metrics?.metrics?.errorCount > 0 && (
Erros Registrados

Total: {metrics.metrics.errorCount} {metrics.metrics.lastCallAt && ( <> | Última chamada: {new Date(metrics.metrics.lastCallAt).toLocaleString("pt-BR")} )}

)}

Diagrama de Fluxo

{"┌──────────────────────────────────────────────────────────┐"}

{"│ MANUS INTELLIGENCE (Singleton GPT-4o) │"}

{"├──────────────────────────────────────────────────────────┤"}

{"│ .generate(prompt) → enrichWithContext() → OpenAI │"}

{"│ .think(prompt) → enrichWithContext() → OpenAI │"}

{"│ .getMetrics() → calls, tokens, errors, uptime │"}

{"├──────────────────────────────────────────────────────────┤"}

{"│ ToolManager.executeTool('search_code', query) │"}

{"│ → Contexto semântico injetado automaticamente │"}

{"├──────────────────────────────────────────────────────────┤"}

{"│ Architect ──────┐ │"}

{"│ Generator ──────┤ │"}

{"│ Validator ──────┤── Todos via manusIntelligence ──► │"}

{"│ Executor ──────┤ │"}

{"│ Researcher ──────┤ │"}

{"│ Evolution ──────┘ │"}

{"├──────────────────────────────────────────────────────────┤"}

{"│ /api/manus/health → Status, métricas, capacidades │"}

{"└──────────────────────────────────────────────────────────┘"}

); } function AgentCard({ agent }: { agent: AgentStatus }) { return (

{agent.name}

Agente XOS

{agent.running ? "Ativo" : "Parado"}
); } function SummaryCards({ summary }: { summary: EngineRoomData["summary"] }) { const cards = [ { label: "Motores Online", value: `${summary.online_engines}/${summary.total_engines}`, icon: Server, color: "text-green-400", bg: "bg-green-500/10" }, { label: "Saude Geral", value: `${summary.health_pct}%`, icon: Activity, color: "text-cyan-400", bg: "bg-cyan-500/10" }, { label: "Agentes Ativos", value: `${summary.running_agents}/${summary.total_agents}`, icon: Bot, color: "text-purple-400", bg: "bg-purple-500/10" }, { label: "Motores Offline", value: `${summary.offline_engines}`, icon: XCircle, color: summary.offline_engines > 0 ? "text-red-400" : "text-gray-500", bg: summary.offline_engines > 0 ? "bg-red-500/10" : "bg-gray-500/10" }, ]; return (
{cards.map((card, i) => (

{card.value}

{card.label}

))}
); } export default function EngineRoom() { const queryClient = useQueryClient(); const [activeTab, setActiveTab] = useState("overview"); const [manusOpen, setManusOpen] = useState(false); const { data, isLoading, isRefetching } = useQuery({ queryKey: ["/api/engine-room/status"], refetchInterval: 15000, }); const { data: biMetrics } = useQuery({ queryKey: ["/api/bi-engine/metrics"], enabled: activeTab === "bi", refetchInterval: 10000, }); const { data: autoMetrics } = useQuery({ queryKey: ["/api/automation-engine/metrics"], enabled: activeTab === "automation", refetchInterval: 10000, }); const { data: manusMetrics } = useQuery({ queryKey: ["/api/manus/health"], enabled: activeTab === "manus" || manusOpen, refetchInterval: 10000, }); const handleRefresh = () => { queryClient.invalidateQueries({ queryKey: ["/api/engine-room/status"] }); }; const handleStartAgents = async () => { try { await fetch("/api/engine-room/agents/start", { method: "POST", credentials: "include" }); queryClient.invalidateQueries({ queryKey: ["/api/engine-room/status"] }); } catch {} }; const handleStopAgents = async () => { try { await fetch("/api/engine-room/agents/stop", { method: "POST", credentials: "include" }); queryClient.invalidateQueries({ queryKey: ["/api/engine-room/status"] }); } catch {} }; const content = (

Casa de Maquinas

Painel de controle de todos os motores e agentes

{data && ( Atualizado: {new Date(data.timestamp).toLocaleTimeString("pt-BR")} )}
{isLoading ? (
) : data ? ( <> Visao Geral Motor BI Motor Automacao Manus IA Agentes XOS
{data.engines.map((engine) => ( setManusOpen(true) : undefined} /> ))}
{data.engines.filter(e => e.name === "bi-engine").map(e => ( ))} {biMetrics && ( Metricas do Motor BI {biMetrics.cache && (

Cache

{biMetrics.cache.entries}

Entradas

{biMetrics.cache.hit_rate}%

Hit Rate

{biMetrics.cache.hits + biMetrics.cache.misses}

Requisicoes

)} {biMetrics.limits && (

Limites

Max linhas: {biMetrics.limits.max_rows?.toLocaleString()}

Timeout: {biMetrics.limits.query_timeout_ms?.toLocaleString()}ms

Cache TTL: {biMetrics.limits.cache_ttl_seconds}s

)}
)}

Capacidades do Motor BI

{["SQL Query (read-only)", "Chart Data Generation", "Micro-BI API", "Data Analysis (Pandas)", "Aggregation Engine", "Query Cache"].map(cap => (
{cap}
))}
{data.engines.filter(e => e.name === "automation-engine").map(e => ( ))} {autoMetrics && ( Metricas do Motor Automacao {autoMetrics.scheduler && (

Scheduler

{autoMetrics.scheduler.total_entries}

Entradas

{autoMetrics.scheduler.active_entries}

Ativas

{autoMetrics.scheduler.is_running ? "ON" : "OFF"}

Status

)} {autoMetrics.event_bus && (

Event Bus

Tipos de evento: {autoMetrics.event_bus.total_event_types}

Subscribers: {autoMetrics.event_bus.total_subscribers}

Historico: {autoMetrics.event_bus.history_size} eventos

)} {autoMetrics.workflows && (

Workflows

Registrados: {autoMetrics.workflows.total_workflows}

Execucoes: {autoMetrics.workflows.total_executions}

Taxa sucesso: {autoMetrics.workflows.success_rate}%

)}
)}

Capacidades do Motor Automacao

{["Cron Scheduler", "Event Bus", "Workflow Executor", "HTTP Actions", "SQL Queries (read-only)", "Transform & Filter"].map(cap => (
{cap}
))}
{data.engines.filter(e => e.name === "manus-ia").map(e => ( setManusOpen(true)} /> ))} Metricas do Manus IA {manusMetrics ? ( <>

Modelo & Performance

{manusMetrics.model || "GPT-4o"}

Modelo

{manusMetrics.metrics?.totalCalls || 0}

Chamadas IA

{((manusMetrics.metrics?.totalTokens || 0) / 1000).toFixed(1)}k

Tokens

Capacidades Ativas

{manusMetrics.capabilities?.tools || 56} Ferramentas
{manusMetrics.capabilities?.agents || 0} Agentes Ativos

Uptime

{manusMetrics.metrics?.uptime ? `${Math.floor(manusMetrics.metrics.uptime / 3600)}h ${Math.floor((manusMetrics.metrics.uptime % 3600) / 60)}m` : "---"}

) : (

Carregando metricas...

)}

Capacidades do Manus IA

{["GPT-4o (Cerebro Central)", "56 Ferramentas Integradas", "Knowledge Graph", "Busca Semantica", "Pipeline de Dev Autonomo", "Orquestrador de Agentes", "Leitura/Escrita de Arquivos", "Execucao de Comandos", "Web Research", "Analise de Codigo", "Validacao TypeScript", "Memoria Evolutiva"].map(cap => (
{cap}
))}

Agentes Autonomos XOS

{data.agents.length > 0 ? ( data.agents.map((agent) => ( )) ) : (

Nenhum agente registrado

)}

Arquitetura dos Motores

{"┌─────────────────────────────────────────────────────┐"}

{"│ ARCADIA SUITE - CASA DE MAQUINAS │"}

{"├─────────────────────────────────────────────────────┤"}

{"│ Express.js (5000) ─── Orquestracao + API Gateway │"}

{"├─────────────────────────────────────────────────────┤"}

{"│ Manus IA (5000) ─── GPT-4o + 56 Tools (Cerebro)│"}

{"├─────────────────────────────────────────────────────┤"}

{"│ Plus ERP (8080) ─── Laravel/PHP - ERP Completo │"}

{"│ Contabil (8003) ─── FastAPI - DRE/Balancete │"}

{"│ Fiscal (8002) ─── FastAPI - NF-e/SEFAZ │"}

{"│ BI Engine (8004) ─── FastAPI - SQL/Charts/Cache │"}

{"│ Automacao (8005) ─── FastAPI - Scheduler/Events │"}

{"├─────────────────────────────────────────────────────┤"}

{"│ XOS Agents ─── 6 Agentes via ManusIntel. │"}

{"└─────────────────────────────────────────────────────┘"}

) : (

Nao foi possivel carregar o status dos motores

)}
); return ( {content} ); }