- Corrige MetaSet: usa type, displayName, category, description do preset
- Corrige Plus: usa valores do preset em vez de hardcoded
- Remove 'java' hardcoded que sobrescrevia o preset correto
Isso garante que as correções feitas no preset ENGINES
(type: python, porta: 8100) sejam refletidas na API.
Refs: metaset, casa-de-maquinas, engine-room
- Atualiza porta: 8088 → 8100 (porta correta do container metaset)
- Atualiza tipo: java → python (Superset é Python)
- Atualiza host: SUPERSET_HOST → METASET_HOST
- Adiciona METASET_HOST e METASET_PORT no serviço app
- Atualiza descrição para refletir o MetaSet (fork Arcadia)
O preset estava apontando para o Apache Superset legado (porta 8088)
que só roda com perfil [bi]. Agora aponta corretamente para o
MetaSet novo (porta 8100) que é o serviço padrão.
Refs: metaset, casa-de-maquinas
- Implementa CoolifyDiscovery.discover() buscando serviços e aplicações
- Adiciona endpoints /api/v1/services e /api/v1/applications
- Suporte a filtro por label arcadia.discovery.enabled=true
- Parse de labels customizadas do Coolify
- Mapeamento de health status do Coolify para Registry
- Adiciona 'coolify' ao tipo DiscoverySource
Refs: kernel-semana-4, service-discovery
- Cria CoolifyDiscovery.ts para integrar com API Coolify
- Adiciona token COOLIFY_API_TOKEN no docker-compose
- Integra com StaticDiscovery e DockerDiscovery
- Permite descoberta automática de novos containers
- Cria StaticDiscovery.ts com lista dos 7 serviços Arcádia
- Descoberta via nome DNS interno (ex: arcadia-prod-contabil-1)
- Health check em cada serviço antes de registrar
- Funciona sem acesso ao Docker (mais seguro)
- Mantém DockerDiscovery como fallback
- Instala http-proxy-middleware
- Configura proxy /kernel -> localhost:5001
- Permite acessar Kernel pelo mesmo domínio da aplicação
- WebSocket support habilitado
Adiciona módulos de Service Discovery ao Kernel Arcádia:
- ServiceRegistry: catálogo central de serviços com health check
- DockerDiscovery: descoberta automática via labels Docker
- API REST /api/registry/* para consulta de serviços
- Labels arcadia.* no docker-compose.yml para auto-registro
- Integração não-destrutiva (módulos novos, código antigo preservado)
Labels suportadas:
- arcadia.discovery.enabled=true
- arcadia.name, arcadia.type, arcadia.category
- arcadia.port, arcadia.capabilities
- arcadia.requires_ia, arcadia.ia_policies
Arquitetura: MODIFICAR (adicionar) ao invés de REFATORAR
- Adiciona getEngineHealthUrl() para resolver URLs dinamicamente
- MetaSet (Superset) usa SUPERSET_HOST ou 'superset' por padrão
- Plus usa PLUS_HOST ou 'localhost' por padrão
- Resolve problema de localhost:8088 falhar para Superset
- Transforma SERVICE_URLS (objeto estático) em getServiceUrl() (função)
- Garante que process.env.CONTABIL_PYTHON_URL seja lida em runtime
- Resolve problema de URL 'bakeada' no build retornar valor errado
- Modifica kernel-adapter.ts para detectar DOCKER_MODE
- Em modo Docker, consulta serviços via HTTP health check direto
- Em modo normal, continua usando Kernel local (porta 5001)
- Resolve problema de apenas 2 motores aparecendo em producao
- Adiciona fallback para import.meta.url em builds do Docker
- Protege entry point do Kernel para não crashar em CommonJS
- DashboardServer.ts agora funciona em ESM e CommonJS
- index.ts com try-catch em torno de import.meta.url
Isso corrige o erro: ERR_INVALID_ARG_TYPE no build do Coolify
Refs: Deploy produção com Kernel
MIGRAÇÃO COMPLETA: Sistema antigo → Kernel Nativo (porta 5001)
📁 Arquivos alterados:
- server/engine-room/kernel-adapter.ts (NOVO)
- server/engine-room/routes.ts
- server/kernel/config/services.json
🔧 O que mudou no Kernel (services.json):
+ Adicionado: python-fisco (porta 8002)
+ Corrigido: node-communication (8006, era 9001)
+ Adicionado: node-core-api (9002)
+ Adicionado: node-worker (9003)
- Removido: java-metaset (gerenciado externamente)
Total: 6 → 7 serviços gerenciados pelo Kernel
🔄 Engine Room - Novo comportamento:
- Todas as rotas /api/engine-room/* agora usam Kernel Adapter
- Sistema antigo (managedServices) mantido em comentário para fallback
- Verificação automática se Kernel está disponível
- Retorna erro 503 se Kernel não responde na porta 5001
📊 Mapeamento de serviços:
Engine Room → Kernel ID
────────────────────────────────────────
contabil → python-contabil
bi-engine → python-bi
automation-engine → python-automation
fisco → python-fisco
communication → node-communication
🚫 Serviços externos (não gerenciados pelo Kernel):
- plus (PHP/Laravel, porta 8080)
- metaset (Java, porta 8088)
✨ Benefícios:
- Auto-restart configurável por serviço
- Health checks automáticos
- Logs centralizados com timestamps
- WebSocket para atualizações em tempo real
- Dashboard na porta 5001
⚠️ Pré-requisito:
KERNEL_ENABLED=true npm run dev
Refs: Semana 4 - Integração Kernel com Engine Room
Breaking Change: Engine Room requer Kernel rodando
- Adiciona interface web dark theme com cards de estatísticas
- Lista de serviços com status, health e ações (start/stop/restart)
- Console de logs em tempo real com filtro por serviço
- WebSocket para atualizações em tempo real
- Auto-refresh a cada 5 segundos
Refs: Dashboard Arcadia Kernel
Kernel Arcadia - Sistema nativo de gerenciamento de serviços:
Core:
- ProcessManager: spawn, monitor, restart automático de serviços
- HealthMonitor: HTTP health checks com circuit breaker
- LogAggregator: coleta e streaming de logs
API & Dashboard:
- API REST /api/kernel/* para controle dos serviços
- Dashboard Web na porta 5001
- WebSocket /ws/kernel para updates em tempo real
Serviços configurados (6):
- Python: Contabil (8003), BI Engine (8004), Automation (8005)
- Node.js: Communication (9001), Core API (9002), Worker (9003)
Integração:
- server/index.ts integrado com flag KERNEL_ENABLED
- Build passando, pronto para testes
Uso:
KERNEL_ENABLED=true npm run dev
Acesse http://localhost:5001 para o dashboard
- Session secret com randomBytes(32), obrigatorio em producao
- CORS whitelist configurado (origens permitidas)
- getUserByUsername com validacao opcional de tenantId
- /api/tenants restrito: admin ve todos, user ve so seu tenant
- Metodo getTenant(id) adicionado a interface IStorage
- Replace LiteLLM with direct Ollama API (ollama-ia1upsekrad96at5hq97e4qa)
- Use deepseek-r1:14b for all agents, fallback to llama3.2:3b
- OLLAMA_BASE_URL env var overrides default hostname
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add POST /analyze handler in engine-proxy.ts (Node host, direct Ollama access)
- Routes agent requests (statistician/fiscal_auditor/researcher) to deepseek-r1:14b
- Fallback to llama3.2:3b if primary model unavailable
- Fixes BiWorkspace "Científico" tab end-to-end flow
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Remove unused crypto import and broken createNode dependency
- Delete registerExecutionInKG function (was fully commented)
- Clean up excessive console.logs
- Streamline POST /api/miroflow/analyze route
- Routes should now register cleanly without initialization errors
This fixes the TypeError that was preventing route registration.
- Adiciona tabela miroflow_generated_dashboards para rastrear dashboards criados
- Endpoint POST /api/superset/miroflow/create-dashboard cria dashboard no Superset
- MiroFlowControl.tsx com botão 'Criar Dashboard' após análise
- Dashboard criado com dados da análise e SQL query
- Suporta todos os agentes (statistician, fiscal_auditor, researcher)
- New RunExecutor processes 'run-executor' subtasks
- Executes agent specs via Ollama (deepseek-r1:14b)
- Saves results as artifacts in Blackboard
- Integrated into Blackboard agents registry
- Updated /api/agent-defs/:id/run endpoint to use run-executor
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
- PatternDetector e SkillEmergence: corrigir alias @/db → caminho relativo correto (../../../db)
- PatternDetector e SkillEmergence: corrigir @/shared/schema → ../../../shared/schema
- server/openclaw: substituir arcadiaSkills (inexistente) por skills do schema
- SkillEmergence: substituir axios (não instalado) por fetch nativo (Node 20)
- server/skills/routes.ts: adicionar export registerSkillRoutes() esperado por routes.ts
O build estava quebrado desde a Fase 4 (OpenClaw). Esses erros impediam
o Coolify de gerar o container com o Design Studio na sidebar.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Mantém Fase 4 Sprint 1+2 do local (OpenClaw backend + frontend)
- Incorpora do remoto: Fase 3 MiroFlow, Fase 4 melhorias, Fase 5 Automation Fabric
- Resolve conflito openclaw~origin_Servidor (mantido local)
- Histórias unidas com --allow-unrelated-histories -X ours
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Backend:
- server/automation-fabric/runtimes/: WorkflowEngine, RuleEngine, AgentExecutor,
ScheduleEngine, EventEngine — cada um delega para serviços existentes
- server/automation-fabric/service.ts: AutomationFabricService agrega Central + XOS
virtualmente (zero migração de dados)
- server/automation-fabric/routes.ts: GET /api/automation-fabric/list,
POST /:id/run, PATCH /:id/toggle
Frontend:
- AutomationCenter.tsx em /automations-center: lista unificada Central+XOS,
badge de fonte (Central=azul, XOS=roxo), filtros por fonte/status/busca,
toggle enable/disable e execução manual inline
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- miroflow_service.py: extrai resposta de summary, final_boxed_answer,
exceed_max_turn_summary ou último message_history do assistente
- Troca deepseek-r1:14b por llama3.2:3b nos agentes Statistician e Fiscal Auditor
- shared/schema.ts: adiciona tabelas OpenClaw (detectedPatterns, skillSuggestions)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- PatternDetector (cron horário): analisa skill_executions, detecta padrões
(≥3x, 30 dias, ≥80% confiança), grava em detected_patterns
- Geração de DRAFT skills via llama3.1:8b ao atingir threshold
- API routes: GET /api/openclaw/suggestions, POST accept/reject, GET /api/openclaw/patterns
- OpenClawPanel.tsx: painel de visualização com tabs Sugestões/Padrões
- Aba "Skills Emergentes" (ícone Sparkles) na sidebar do /development
- Migration SQL para detected_patterns + skill_suggestions
- fix: corrige import @/lib/db → ../../db/index em versioning.ts
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Dockerfile.miroflow: imagem Python 3.11 com miroflow instalado via submodule
- docker-compose.prod.yml: novo serviço `miroflow` (porta 8006, rede interna)
- MIROFLOW_HOST atualizado de host fixo (10.0.7.1) para container `miroflow`
- miroflow_service.py: passa system_prompt e initial_user_message no AgentContext
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- FastAPI microservico porta 8006 com agentes statistician, fiscal_auditor, researcher
- Configuracao de modelos: deepseek-r1:14b (stat/fiscal), llama3.1:8b com fallback 3b (researcher)
- OLLAMA_BASE_URL/v1 via UnifiedOpenAIClient
- test_miroflow_service.py: 6 testes cobrindo REQ-3.1 a REQ-3.4 (todos passam)
- sys.path.insert para submodule MiroFlow sem modificar o submodulo
- Adiciona import de registerMiroFlowRoutes
- Chama registerMiroFlowRoutes(app) após registerBiEngineRoutes(app)
- POST /api/miroflow/analyze e GET /api/miroflow/health agora disponíveis
REQ-3.5, REQ-3.7 — Task 2/2 do plano 03-02
- server/miroflow/engine-proxy.ts: proxy para :8006 com MIROFLOW_TIMEOUT=300_000ms
- server/miroflow/routes.ts: re-export de registerMiroFlowRoutes
- POST /api/miroflow/analyze requer autenticação (req.isAuthenticated())
- GET /api/miroflow/health sem autenticação
- registerExecutionInKG com auditHash SHA-256 via createNode
- KG failure não bloqueia resposta ao cliente
REQ-3.5, REQ-3.7 — Task 1/2 do plano 03-02
Servidor:
- GET /api/skills/marketplace: lista skills namespace=system/active,
marca quais já foram importadas pelo tenant (campo imported)
- POST /api/skills/marketplace/:id/import: clona skill system→tenant
com extends appontando para a origem
UI (Skills.tsx):
- Toggle "Minhas Skills" / "Biblioteca" no header
- Grid de cards 2 colunas com nome, slug, descrição, tags clicáveis,
trigger type e versão
- Botão "Importar" → feedback imediato (badge "Importada" + highlight verde)
- Filtro por busca e tag na Biblioteca
- Estado vazio com instrução para admins publicarem skills system
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>