Compare commits

..

2 Commits

Author SHA1 Message Date
Jonas Pacheco c2c6a4a2b5 docs: adiciona PLANO_SKILL_FABRIC.md
Plano técnico de implementação do Skill Fabric - sistema de
geração e gestão de skills da Arcádia Suite.
2026-04-09 10:42:18 -03:00
Jonas Pacheco a96c161f14 docs: adiciona documentações de agentes da home do usuário
Traz documentações importantes que estavam em /home/ubuntu/:
- AGENTE_MONITOR_SKILLS.md - Especificação do agente de monitoramento
- INDICE_PLANEJAMENTO.md - Índice do planejamento estratégico
- PLANO_IMPLEMENTACAO_AGENTIC.md - Plano de implementação detalhado
- PLANO_METASET.md - Plano específico do MetaSet/Superset

Evita perda de documentação e mantém tudo centralizado em docs/.
2026-04-09 10:41:47 -03:00
5 changed files with 2260 additions and 0 deletions

View File

@ -0,0 +1,41 @@
# Agente: Monitor de Skills
## Objetivo
Verificar as skills mais executadas nos últimos 7 dias e gerar um resumo com recomendações.
## Passos
1. **Consultar execuções recentes**
- Buscar em `/api/skills` todas as skills ativas do tenant
- Para cada skill, buscar `/api/skills/:id/executions?limit=50`
- Filtrar execuções dos últimos 7 dias
2. **Analisar padrões**
- Contar total de execuções por skill
- Identificar taxa de sucesso (status = "success" / total)
- Destacar skills com taxa de falha > 20%
3. **Gerar relatório**
- Listar top 5 skills mais executadas
- Alertar skills com problemas
- Sugerir skills candidatas a automação (executadas 3+ vezes por dia)
## Saída esperada
```
## Relatório de Skills — últimos 7 dias
### Top 5 mais usadas
1. [nome] — X execuções (Y% sucesso)
...
### Atenção
- [skill] com taxa de falha de Z%
### Candidatas ao OpenClaw
- [skill] — média de N exec/dia
```
## Parâmetros
- `tenant_id` — filtro de tenant (opcional)
- `dias` — janela de análise (padrão: 7)

240
docs/INDICE_PLANEJAMENTO.md Normal file
View File

@ -0,0 +1,240 @@
# Índice: PLANEJAMENTO ESTRATÉGICO ARCÁDIA AGENTIC SUITE
**Documento:** `/home/ubuntu/# PLANEJAMENTO ESTRATÉGICO ARCÁDIA.txt`
**Versão:** 1.0 — Março 2026
**Estado:** Pronto para Implementação
---
## 📑 ESTRUTURA DO DOCUMENTO
### 1. **Executive Summary** (Seção 1)
- Visão: ERP tradicional → **Sistema Agêntico Orientado a Objetos**
- 5 decisões arquiteturais críticas (MiroFlow, OpenClaw, Superset, Skills POO, Automações)
### 2. **Arquitetura de Alto Nível** (Seção 2)
```
Interface Unificada (Chat + Dev Center + OpenClaw + BI)
Orquestradores (Manus + Blackboard + Automation Fabric)
Motores Especializados Embutidos (MiroFlow + OpenClaw + Skill Engine)
Infraestrutura (Knowledge Graph + PostgreSQL + Ollama/DeepSeek)
```
### 3. **Componentes Embutidos** (Seção 3+)
| Componente | Status | Local | Propósito |
|-----------|--------|-------|----------|
| **MiroFlow** | ✅ | `server/modules/miroflow/` | Motor científico, benchmarks, análise estatística |
| **OpenClaw** | 🔄 | `server/modules/openclaw/` + `client/src/components/openclaw/` | Detecção padrões, sugestão proativa, skills emergentes |
| **Skills Engine** | ✅ | `server/skills/` | POO: herança, composição, polimorfismo, versionamento |
| **Automation Fabric** | ⏳ | `server/modules/automation/` | Runtime unificado: Workflow, Rule, Agent, Schedule, Event |
| **Dev Center** | ⏳ | `client/src/pages/DevCenter.tsx` | Design → Assemble → Deploy de agentes |
| **Superset Integration** | ⏳ | `server/modules/superset/` | BI visual + MiroFlow bridge |
### 4. **Skills Engine POO** (Seção 4)
- ✅ Herança: `extends`, `isA`
- ✅ Composição: `dependencies`, `requires`
- ✅ Polimorfismo: `useMiroFlow`, `autoApprove`
- ✅ Versionamento Git-like (createVersion, listVersions, rollback, fork, diff)
- ✅ Marketplace / Biblioteca (import de skills públicas)
### 5. **Automation Fabric Unificada** (Seção 6)
- Runtime com suporte: Workflow, Rule, Agent, Schedule, Event
- Trigger-based (webhook, database, schedule, event)
- Integração com Blackboard para codegen
### 6. **Dev Center Completo** (Seção 8)
- **Design Studio**: UML, Visual, Markdown
- **Assemble Line**: Integração com Blackboard
- **Orchestrate Center**: Deploy, monitoramento
- **Galeria de Agentes**: Marketplace interno
### 7. **Infraestrutura** (Seção 9)
- PostgreSQL 16 + pgvector
- Neo4j (Knowledge Graph)
- Ollama (LLMs locais: deepseek-r1:32b/70b, llama3.1:8b/70b)
- Apache Superset (BI visual)
---
## 🗺️ ROADMAP E STATUS
### ✅ Fase 1: Fundação (Semanas 1-2)
**Status: CONCLUÍDA (2026-03-25)**
- Submodules MiroFlow + OpenClaw
- Tabelas skills, skill_executions
- Neo4j no Docker
- ReferenceParser/Resolver
- Superset + Ollama
**Entregável:** Infraestrutura base ✅
---
### ✅ Fase 2: Skills Engine (Semanas 3-4)
**Status: CONCLUÍDA (25/03/2026 - 15:04)**
- SkillEngine com herança/composição
- API REST CRUD + execução + histórico
- Editor Monaco (tabs Geral/Body/Params)
- Versionamento Git-like (VersionManager)
- Skill Marketplace / Biblioteca
**Entregável:** Skills criáveis, versionáveis, executáveis ✅
---
### ✅ Fase 3: MiroFlow Embutido (Semanas 5-6)
**Status: CONCLUÍDA PARCIAL (25/03/2026 - 15:04)**
**Implementado:**
- Adapt MiroFlow para Ollama local (llama3.2:3b / deepseek-r1:14b)
- Containerização em docker-compose.prod.yml
- Agentes especializados (Statistician, Auditor, Researcher)
- Proxy Node.js: `/api/miroflow/analyze`
- UI MiroFlowControl (tab Científico em /insights)
**Pendente:**
- [ ] MiroFlowBridge para Superset
- [ ] Integração com Arcádia Audit (imutabilidade)
- [ ] Dashboard de benchmarks no Dev Center
- [ ] **Tool SQL via Skills** (skill `db_query` como MCP tool)
**Entregável:** Análises científicas (ETA completo: 08/04/2026)
---
### 🔄 Fase 4: OpenClaw Embutido (Semanas 7-8)
**Status: SPRINT 1 COMPLETO (26/03/2026) | Sprints 2-3 Em Progresso**
#### ✅ Sprint 1: Backend (COMPLETO - 26/03)
- [x] PatternDetector.ts — detecção (3+ em 30d), confiança, Neo4j
- [x] OpenClawEngine.ts — orquestração, sugestões, scheduler, Socket.IO
- [x] SkillEmergence.ts — Blackboard codegen, validação, DRAFT storage
- [x] routes.ts — 10 endpoints REST
- [x] arcadia.config.yaml — pattern detection, suggestions, emergence
#### ⏳ Sprint 2: Frontend (PRÓXIMO - 28-29/03)
- [ ] OpenClawWidget.tsx — widget flutuante de sugestão
- [ ] SkillSuggestion.tsx — modal de sugestão
- [ ] useAgentEmergence.ts — hook de lógica
- [ ] Integração em App.tsx (layout principal)
#### ⏳ Sprint 3: Config + Testes (30-31/03)
- [ ] Schema database (detectedPatterns, skillSuggestions)
- [ ] Migration SQL (migrations/0004_openclaw_tables.sql)
- [ ] Testes unitários
- [ ] Documentação
**Fluxo:** Padrão → Detector → Engine → Sugestão → Widget → User → Blackboard → SkillEmergence → DRAFT → Dev Center → Publicada
**Entregável:** Skills emergentes (ETA: 08/04/2026)
---
### ⏳ Fase 5: Automation Fabric (Semanas 9-10)
**Status: PENDENTE**
- [ ] Unificar XOS/Automations + Central /automations
- [ ] 4 runtimes: Workflow, Rule, Agent, Schedule, Event
- [ ] UI única no Dev Center
- [ ] Migração dados existentes
- [ ] Testes carga/segurança
**Entregável:** Automações unificadas
---
### ⏳ Fase 6: Dev Center Completo (Semanas 11-12)
**Status: PENDENTE**
- [ ] Design Studio (UML, Visual, Markdown)
- [ ] Assemble Line (Blackboard integration)
- [ ] Orchestrate Center (deploy, monitoramento)
- [ ] Galeria de Agentes (marketplace interno)
- [ ] Documentação e treinamento
**Entregável:** Sistema completo operacional
---
## 🎯 DECISÕES CRÍTICAS (RESUMO)
| Decisão | Escolha | Justificativa |
|---------|---------|---------------|
| **MiroFlow** | **EMBUTIR** | Motor científico nativo, benchmarks, verificação multi-camada |
| **OpenClaw** | **EMBUTIR** | Widget interno, detecção contextual no Arcádia |
| **Superset** | **INTEGRAR** | BI visual mantido, bridge para MiroFlow |
| **Skills** | **POO** | Herança, composição, polimorfismo para reuso |
| **Automações** | **UNIFICAR** | Runtime único, múltiplos orquestradores |
| **Dev Center** | **FÁBRICA** | Design → Assemble → Deploy de agentes |
| **Multi-tenant** | **HIERARQUIA** | System → Tenant → Company → User skills |
---
## 📋 PRÓXIMO PASSO
### **Fase 4 Sprint 2: OpenClaw Frontend**
**ETA: 28-29/03/2026**
A Fase 4 Sprint 1 (backend) foi concluída em 26/03. Agora entrar na **Sprint 2 do frontend**, que consiste em:
#### Tarefas Sprint 2:
1. **OpenClawWidget.tsx** — Widget flutuante que:
- Escuta eventos de sugestões via Socket.IO
- Mostra notificação "Detectei padrão!"
- Abre SkillSuggestion modal ao ser clicado
2. **SkillSuggestion.tsx** — Modal que:
- Exibe padrão detectado (frequência, confiança)
- Preview do código da skill sugerida (gerado por Blackboard)
- Botões: Aprovar (→ DRAFT em Dev Center) ou Rejeitar
3. **useAgentEmergence.ts** — Hook que:
- Conecta a Socket.IO `/api/openclaw` events
- Gerencia estado de sugestões
- Sincroniza com OpenClawEngine backend
4. **Integração em App.tsx**:
- Importar OpenClawWidget
- Renderizar no layout principal (canto inferior direito)
- Garantir que não bloqueia interação com página
#### Localização dos arquivos:
```
client/src/
├── components/
│ └── openclaw/
│ ├── OpenClawWidget.tsx ← NOVO
│ ├── SkillSuggestion.tsx ← NOVO
│ └── ...
├── hooks/
│ └── useAgentEmergence.ts ← NOVO
└── App.tsx ← MODIFICAR (integração)
```
#### Integração com backend já pronto:
- PatternDetector.ts emite eventos via Socket.IO
- OpenClawEngine.ts orquestra sugestões
- SkillEmergence.ts gera código via Blackboard
- Todas as rotas REST já existem
**Próximo passo após Sprint 2:** Sprint 3 (Config + Testes), depois Fase 5 (Automation Fabric).
---
## 🔗 LINKS ESSENCIAIS
| Recurso | URL |
|---------|-----|
| **MiroFlow Docs** | https://github.com/MiroMindAI/MiroFlow/tree/main/docs |
| **MiroFlow Paper** | https://arxiv.org/abs/2602.22808 |
| **OpenClaw README** | https://github.com/miaoxworld/OpenClawInstaller/blob/main/README.md |
| **Superset Docs** | https://superset.apache.org/docs/intro |
| **Neo4j Docs** | https://neo4j.com/docs/ |
| **Ollama Docs** | https://github.com/ollama/ollama/blob/main/README.md |
---
**Pronto para começar Fase 4 Sprint 2?**

View File

@ -0,0 +1,313 @@
# PLANO DE IMPLEMENTAÇÃO: ARCÁDIA AGENTIC SUITE
**Versão:** 1.0 | **Baseado em:** Planejamento Estratégico Arcádia v1.0 (Março 2026)
**Rastreamento:** Ações marcadas com `[DATA | HORA | AUTOR | DETALHE]`
---
## LEGENDA DE STATUS
```
[ ] Pendente
[~] Em andamento
[x] Concluído
[!] Bloqueado / Atenção
[?] Requer decisão antes de executar
```
---
## ALERTAS DE CONFLITO COM SISTEMA EXISTENTE
> Itens marcados com **(CONFLITO POTENCIAL)** podem sobrescrever ou interferir
> com configurações já existentes no Arcádia. CONFIRMAR antes de executar.
| Item | Conflito | Observação |
|------|----------|------------|
| `docker-compose.yml` | **(CONFLITO POTENCIAL)** | Pode já existir com serviços configurados |
| Apache Superset | **(CONFLITO POTENCIAL)** | RLS e dashboards já configurados — nova instância pode perder dados |
| Tabelas `skills`, `automations` | **(CONFLITO POTENCIAL)** | Verificar se já existem no schema atual |
| XOS/Automations | **(CONFLITO POTENCIAL)** | Unificação na Fase 5 altera o runtime existente |
| `/automations` (Central) | **(CONFLITO POTENCIAL)** | Será migrado/substituído na Fase 5 |
---
## FASE 1 — FUNDAÇÃO (Semanas 1-2)
**Entregável:** Infraestrutura base funcionando
### 1.1 Submodules / Clone
- [ ] Clonar MiroFlow como submodule em `server/modules/miroflow/`
```bash
git submodule add https://github.com/MiroMindAI/MiroFlow.git server/modules/miroflow
```
- [ ] Clonar OpenClaw como submodule em `server/modules/openclaw/`
```bash
git submodule add https://github.com/miaoxworld/OpenClawInstaller.git server/modules/openclaw
```
- [ ] Inicializar submodules
```bash
git submodule update --init --recursive
```
### 1.2 Banco de Dados — Novas Tabelas
> **(CONFLITO POTENCIAL)** — Verificar se tabelas já existem antes de criar
- [ ] Criar tabela `skills` no PostgreSQL
- [ ] Criar tabela `automations` no PostgreSQL
- [ ] Criar tabela `skill_executions` no PostgreSQL
- [ ] Criar migration e executar `npm run db:migrate`
### 1.3 Knowledge Graph (Neo4j) — Novos Nós
- [ ] Estender KG com nó: `Skill`
- [ ] Estender KG com nó: `Automation`
- [ ] Estender KG com nó: `Execution`
### 1.4 Reference System
- [ ] Implementar `ReferenceParser``server/modules/skills/ReferenceParser.ts`
- [ ] Implementar `ReferenceResolver``server/modules/skills/ReferenceResolver.ts`
### 1.5 Docker Compose / Infraestrutura
> **(CONFLITO POTENCIAL)** — `docker-compose.yml` pode já existir.
> Confirmar com João antes de sobrescrever.
- [?] Verificar se `docker-compose.yml` já existe no projeto
- [?] Se existir: mesclar serviços (Neo4j, Ollama, Superset) sem sobrescrever configs atuais
- [ ] Garantir serviços no compose: PostgreSQL, Neo4j, Ollama, Superset, Arcádia Suite
---
## FASE 2 — SKILLS ENGINE (Semanas 3-4)
**Entregável:** Skills criáveis e executáveis
### 2.1 Backend — Skill Engine
- [ ] Implementar `SkillEngine.ts``server/modules/skills/SkillEngine.ts`
- Suporte a herança (`extends`)
- Suporte a composição (`dependencies`)
- Suporte a polimorfismo (`execute()`)
- [ ] Implementar `SkillRepository.ts` — CRUD de skills no banco
### 2.2 Sistema de Namespaces
- [ ] Hierarquia: `system``tenant``company``user`
- [ ] Resolver prioridade e herança entre namespaces
### 2.3 Frontend — Editor de Skills
- [ ] Criar componente `SkillEditor.tsx``client/src/components/skills/`
- Modo Visual
- Modo Code (TypeScript)
- Modo Markdown
- [ ] Criar `ReferenceParser.ts` no frontend com autocomplete de `/`
- [ ] Criar `SkillMarketplace.tsx` — descoberta de skills disponíveis
### 2.4 Versionamento de Skills
- [ ] Implementar versionamento Git-like para skills (histórico de versões)
---
## FASE 3 — MIROFLOW EMBUTIDO (Semanas 5-6)
**Entregável:** Análises científicas disponíveis
### 3.1 Configuração MiroFlow para Ollama Local
- [ ] Criar `config/arcadia_agents.yaml` em `server/modules/miroflow/config/`
- `provider: ollama`
- `base_url: http://localhost:11434`
- Modelos: `deepseek-r1:32b` (default), `deepseek-r1:70b` (reasoning), `llama3.1:8b` (fast)
- [ ] Instalar dependências Python: `pip install -r requirements.txt`
### 3.2 Agentes Especializados
- [ ] Configurar agente `Arcádia Statistician` (deepseek-r1:32b)
- Tools: arcadia_sql_query, pandas_analysis, scipy_stats, visualization_generator
- [ ] Configurar agente `Arcádia Fiscal Auditor` (deepseek-r1:70b)
- Tools: nfe_validator, sped_generator, tax_calculator, risk_scorer
- [ ] Configurar agente `Arcádia Researcher` (llama3.1:70b)
- Tools: knowledge_graph_query, document_search, trend_analyzer
### 3.3 Bridge Superset → MiroFlow
> **(CONFLITO POTENCIAL)** — Superset já está em produção com RLS configurado.
> A bridge adiciona funcionalidade nova (Modo Científico), não deve quebrar configs existentes.
> Confirmar antes de modificar qualquer arquivo do Superset atual.
- [?] Verificar se a instância atual do Superset suporta custom viz (`BaseViz`)
- [ ] Criar `MiroFlowBridge.ts``server/modules/superset/MiroFlowBridge.ts`
- [ ] Criar `miroflow_scientific.py` — viz customizada no Superset
- Endpoint: `POST /api/miroflow/analyze`
- [ ] Criar `MiroFlowControl.tsx` — toggle "Modo Científico" no frontend
- `client/src/modules/superset-bridge/MiroFlowControl.tsx`
### 3.4 Integração com Arcádia Audit
- [ ] Garantir que execuções MiroFlow sejam registradas com `immutable_logging: true`
- [ ] Registrar proveniência no Knowledge Graph (dataset versions, analysis lineage, model registry)
### 3.5 Modelos Ollama
- [ ] Baixar modelo: `deepseek-r1:32b`
- [ ] Baixar modelo: `deepseek-r1:70b`
- [ ] Baixar modelo: `llama3.1:8b`
- [ ] Baixar modelo: `llama3.1:70b`
### 3.6 Dev Center — Dashboard de Benchmarks
- [ ] Criar dashboard de benchmarks MiroFlow no Dev Center (GAIA, HLE, FutureX)
---
## FASE 4 — OPENCLAW EMBUTIDO (Semanas 7-8)
**Entregável:** Skills emergentes funcionando
### 4.1 Backend — Pattern Detection
- [ ] Implementar `PatternDetector.ts``server/modules/openclaw/PatternDetector.ts`
- `min_occurrences: 3` | `time_window_days: 30` | `confidence_threshold: 0.8`
- [ ] Implementar `SkillEmergence.ts` — criação de skills emergentes como DRAFT
- [ ] Implementar `OpenClawEngine.ts` — motor de sugestões
### 4.2 Frontend — Widget
- [ ] Criar `OpenClawWidget.tsx` — widget flutuante
- `client/src/modules/openclaw/OpenClawWidget.tsx`
- [ ] Criar `PatternDetector.ts` frontend — hook de detecção
- [ ] Criar `SkillSuggestion.tsx` — modal de sugestão ao usuário
- [ ] Criar `useAgentEmergence.ts` — lógica de emergência
### 4.3 Configuração OpenClaw Arcádia
- [ ] Criar `config/arcadia.yaml` em `server/modules/openclaw/config/`
- `tenant_aware: true`
- `auto_suggest: false` (sempre pedir confirmação)
- `create_as_draft: true` (requer aprovação)
- `auto_publish: false`
- `notify_admins: true`
- [ ] Instalar dependências Node: `cd server/modules/openclaw && npm install`
### 4.4 Fluxo Completo de Emergência
- [ ] Implementar fluxo: Padrão detectado → Skill DRAFT criado → Dev Center para aprovação
- [ ] Integrar com Blackboard para codegen automático da skill emergente
- [ ] Painel de configuração de sugestões por tenant
---
## FASE 5 — AUTOMATION FABRIC (Semanas 9-10)
**Entregável:** Automações unificadas
> **(CONFLITO POTENCIAL)** — Esta fase unifica XOS/Automations e `/automations` Central.
> São sistemas ATIVOS no Arcádia. Migração de dados necessária.
> Confirmar estratégia de migração com João antes de iniciar.
### 5.1 Backend — Runtimes Unificados
- [ ] Implementar `AutomationEngine.ts``server/modules/automations/AutomationEngine.ts`
- [ ] Implementar runtime `WorkflowEngine.ts` (BPMN, processos longos, aprovações)
- [ ] Implementar runtime `RuleEngine.ts` (IFTTT simples, rápido)
- [ ] Implementar runtime `AgentExecutor.ts` (Manus/OpenClaw, IA adaptativa)
- [ ] Implementar runtime `ScheduleEngine.ts` (Cron, recorrente)
- [ ] (Opcional) Implementar runtime `EventEngine.ts` (Webhook, real-time)
### 5.2 Modelo Unificado de Automação
- [ ] Definir schema `Automation` com campo `runtime` polimórfico
- tipos: `workflow | rule | agent | scheduled | event`
- [ ] Implementar `auditHash` para imutabilidade
### 5.3 Migração de Dados
- [ ] Mapear automações existentes em XOS para novo modelo
- [ ] Mapear automações existentes em `/automations` Central para novo modelo
- [ ] Executar migração sem downtime
### 5.4 Frontend — UI Única
- [ ] Criar `AutomationCenter.tsx``client/src/modules/automations/AutomationCenter.tsx`
- [ ] Criar `RuleDesigner.tsx` — designer visual de regras
- [ ] Criar `WorkflowDesigner.tsx` — designer BPMN
- [ ] Criar `AgentDesigner.tsx` — designer de agentes IA
- [ ] Criar `AutomationList.tsx` — listagem unificada
### 5.5 Testes
- [ ] Testes de carga nas automações unificadas
- [ ] Testes de segurança (permissões por tenant/company/user)
---
## FASE 6 — DEV CENTER COMPLETO (Semanas 11-12)
**Entregável:** Sistema completo operacional
### 6.1 Design Studio
- [ ] Criar `DesignStudio.tsx``client/src/modules/devcenter/DesignStudio.tsx`
- Modo UML Diagram (classes, herança, relações)
- Modo Visual Flow (drag-drop nodes)
- Modo Markdown Spec (linguagem natural)
- Modo Code Editor (TypeScript + IntelliSense)
### 6.2 Assemble Line
- [ ] Criar `AssembleLine.tsx``client/src/modules/devcenter/AssembleLine.tsx`
- Composition Panel (available skills → selected skills)
- Flow Diagram automático
- Botões: Generate Code | Preview | Test | Deploy
- [ ] Integrar com Blackboard (GeneratorAgent, ValidatorAgent, ExecutorAgent)
### 6.3 Orchestrate Center
- [ ] Criar `OrchestrateCenter.tsx``client/src/modules/devcenter/OrchestrateCenter.tsx`
- Deploy de agentes
- Versionamento
- Monitoramento de execuções
### 6.4 Galeria de Agentes
- [ ] Criar marketplace interno de agentes (descoberta, instalação por tenant)
### 6.5 Finalização
- [ ] Documentação técnica dos componentes criados
- [ ] Treinamento / onboarding interno
- [ ] `npm run test:miroflow`
- [ ] `npm run test:openclaw`
- [ ] `npm run test:integration`
---
## REGISTRO DE AÇÕES EXECUTADAS
> Formato: `[AAAA-MM-DD | HH:MM | AUTOR | O que foi feito e em qual arquivo/componente]`
| # | Data | Hora | Autor | Ação | Fase |
|---|------|------|-------|------|------|
| 1 | 2026-03-24 | — | João | Adicionado serviço `neo4j` (profile: `kg`) ao `docker-compose.yml` + volumes `neo4j_data` e `neo4j_logs` | Fase 1 |
| 2 | 2026-03-24 | — | João | Adicionado serviço `neo4j` (profile: `kg`) ao `docker-compose.prod.yml` + volumes `neo4j_data` e `neo4j_logs` | Fase 1 |
| 3 | 2026-03-24 | — | João | Adicionadas tabelas `arcadia_skills` (modelo POO) e `skill_executions` ao `shared/schema.ts``xosSkillRegistry` preservado | Fase 1 + 2 |
| 4 | 2026-03-24 | — | João | Criada migration `0003_arcadia_skills.sql` — cria tabelas `arcadia_skills` e `skill_executions` com índices | Fase 1 |
---
## DECISÕES ARQUITETURAIS REGISTRADAS
| Componente | Decisão | Status |
|------------|---------|--------|
| MiroFlow | EMBUTIR como submodule em `server/modules/miroflow/` | Pendente |
| OpenClaw | EMBUTIR como submodule em `server/modules/openclaw/` | Pendente |
| Apache Superset | INTEGRAR externamente com bridge MiroFlow | Pendente |
| Skills | Modelo POO (herança, composição, polimorfismo) | Pendente |
| Automações | Unificar XOS + Central em runtime único | Pendente |
| Dev Center | Fábrica: Design → Assemble → Deploy | Pendente |
| Multi-tenant | Hierarquia: System → Tenant → Company → User | Pendente |
---
*Documento gerado em: 2026-03-24 | Baseado no Planejamento Estratégico Arcádia v1.0*

617
docs/PLANO_METASET.md Normal file
View File

@ -0,0 +1,617 @@
Plano de Implementação: MetaSet no ArcadiaSuite (Atualizado - 07/04/2026)
📊 Visão Geral da Arquitetura Atual
┌─────────────────────────────────────────────────────────────────────────┐
│ ARCADIA KERNEL (5001) │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────────┐ │
│ │ Dashboard │ │ Process │ │ Health │ │ LogAggregator │ │
│ │ (Web UI) │ │ Manager │ │ Monitor │ │ │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ └─────────────────┘ │
│ │ │ │ │
│ └────────────────┴────────────────┘ │
│ │ │
│ ┌───────────┴───────────┐ │
│ │ Service Registry │ │
│ │ (services.json) │ │
│ └───────────┬───────────┘ │
│ │ │
│ ┌─────────────────────┼─────────────────────┐ │
│ │ │ │ │
│ ┌──┴──┐ ┌──┴──┐ ┌──┴──┐ │
│ │9001 │ │9002 │ │9003 │ + NOVO: 8004 │
│ │Comm │ │Core │ │Worker│ + NOVO: 8100 │
│ │Whats│ │ API │ │Queue │ (MetaSet) │
│ └─────┘ └─────┘ └─────┘ │
│ │
│ 🆕 SERVIÇOS BI: │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 8004 │ │ 8100 │ │ 8200 │ │
│ │ BI-API │──│ MetaSet │ │ FDB-Bridge │ │
│ │ (Node.js) │ │ (Python) │ │ (Python) │ │
│ │ Gateway │ │ Superset │ │ Firebird │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
┌──────────┴──────────┐
│ PostgreSQL 16 │
│ ┌───────────────┐ │
│ │ arcadia_db │ │
│ │ metaset_db │ │ ✅ Schema criado e migrado
│ └───────────────┘ │
└─────────────────────┘
🔧 Configuração dos Serviços (services.json)
{
"services": [
{
"id": "communication",
"name": "Communication Service",
"type": "node",
"command": "node",
"args": ["server/communication/index.js"],
"cwd": ".",
"port": 9001,
"autoStart": true,
"healthCheck": {
"path": "/health",
"interval": 30000,
"timeout": 5000,
"retries": 3
},
"maxRestarts": 5
},
{
"id": "core-api",
"name": "Core API",
"type": "node",
"command": "node",
"args": ["server/core/index.js"],
"cwd": ".",
"port": 9002,
"autoStart": true,
"healthCheck": {
"path": "/health",
"interval": 30000,
"timeout": 5000,
"retries": 3
},
"maxRestarts": 5
},
{
"id": "bi-api",
"name": "BI API Gateway",
"type": "node",
"command": "node",
"args": ["server/bi/index.js"],
"cwd": ".",
"port": 8004,
"autoStart": true,
"env": {
"METASET_PORT": "8100",
"METASET_HOST": "127.0.0.1",
"FDB_BRIDGE_PORT": "8200"
},
"healthCheck": {
"path": "/bi/health",
"interval": 30000,
"timeout": 5000,
"retries": 3
},
"maxRestarts": 5,
"description": "Gateway de BI com proxy para MetaSet e FDB-Bridge"
},
{
"id": "metaset",
"name": "MetaSet BI",
"type": "python",
"command": "python",
"args": ["server/bi/metaset/run.py", "--port=8100", "--host=127.0.0.1"],
"cwd": ".",
"port": 8100,
"autoStart": false,
"env": {
"PYTHONPATH": "server/bi/metaset",
"FLASK_ENV": "production",
"SUPERSET_CONFIG_PATH": "server/bi/metaset/superset_config.py",
"SUPERSET_SECRET_KEY": "${SUPERSET_SECRET_KEY}"
},
"healthCheck": {
"path": "/health",
"interval": 30000,
"timeout": 10000,
"retries": 3
},
"maxRestarts": 3,
"description": "Apache Superset rebrandado como MetaSet (Docker-managed)"
},
{
"id": "fdb-bridge",
"name": "FDB Bridge",
"type": "python",
"command": "python",
"args": ["server/bi/fdb-bridge/main.py", "--port=8200"],
"cwd": ".",
"port": 8200,
"autoStart": false,
"env": {
"PYTHONPATH": "server/bi/fdb-bridge",
"FDB_HOST": "${FDB_HOST}",
"FDB_PORT": "${FDB_PORT:-3050}"
},
"healthCheck": {
"path": "/health",
"interval": 60000,
"timeout": 5000,
"retries": 3
},
"maxRestarts": 3,
"description": "Conector Firebird para sincronização de dados (Docker-managed)"
}
]
}
🏗️ Estrutura de Diretórios Final
arcadiasuite/
├── server/
│ ├── kernel/ # ✅ Kernel finalizado
│ │ ├── core/
│ │ │ ├── ProcessManager.ts # ✅ Suporta 'python' e 'node'
│ │ │ ├── HealthMonitor.ts
│ │ │ └── LogAggregator.ts
│ │ ├── dashboard/ # Dashboard Web UI (porta 5001)
│ │ ├── config/
│ │ │ └── services.json # ✅ Configuração dos serviços
│ │ └── index.ts
│ │
│ ├── bi/ # 🆕 MÓDULO BI COMPLETO
│ │ ├── index.ts # BI-API Gateway (porta 8004)
│ │ ├── routes/
│ │ │ ├── query.ts # Queries nativas Drizzle
│ │ │ ├── export.ts # Exportação PDF/Word
│ │ │ └── sync.ts # Sincronização FDB
│ │ │
│ │ ├── metaset/ # 🆕 METASET (Superset)
│ │ │ ├── run.py # Entry point Python
│ │ │ ├── superset_config.py # Configuração Arcadia
│ │ │ ├── security_manager.py # ArcadiaSecurityManager
│ │ │ ├── requirements.txt # Dependências Python
│ │ │ ├── Dockerfile # Multi-stage build
│ │ │ ├── init.sh # Container init script
│ │ │ ├── branding/ # 🎨 Assets MetaSet
│ │ │ │ ├── metaset-logo-horiz.png
│ │ │ │ ├── metaset-icon.png
│ │ │ │ ├── favicon-16x16.png
│ │ │ │ └── favicon-32x32.png
│ │ │ │
│ │ │ └── superset-src/ # Fork Apache Superset 4.1.0
│ │ │ ├── superset-frontend/ # ✅ Rebuild com branding MetaSet
│ │ │ │ └── src/
│ │ │ │ ├── features/home/RightMenu.tsx # ✅ Textos atualizados
│ │ │ │ ├── components/ErrorMessage/OAuth2RedirectMessage.tsx
│ │ │ │ └── pages/... # ✅ Traduções atualizadas
│ │ │ │
│ │ │ ├── superset/
│ │ │ │ ├── config.py # ✅ APP_NAME = "MetaSet"
│ │ │ │ ├── constants.py # ✅ USER_AGENT = "MetaSet"
│ │ │ │ ├── cli/
│ │ │ │ ├── templates/ # ✅ HTML templates atualizados
│ │ │ │ └── translations/ # ✅ Traduções en/pt_BR
│ │ │ └── ...
│ │ │
│ │ └── fdb-bridge/ # 🆕 FIREBIRD CONNECTOR (skeleton)
│ │ ├── main.py # Serviço Python porta 8200
│ │ ├── sync.py # Lógica de sincronização
│ │ ├── models.py # Modelos SQLAlchemy
│ │ └── requirements.txt
│ │
│ └── ... (outros serviços)
├── client/
│ └── src/
│ └── pages/
│ └── bi/ # 🆕 FRONTEND BI
│ ├── index.tsx # Dashboard BI Arcadia
│ ├── metaset/ # Embed MetaSet
│ │ ├── Dashboard.tsx
│ │ ├── SQLLab.tsx
│ │ └── Explore.tsx
│ └── components/
│ ├── QueryBuilder.tsx
│ ├── ExportButton.tsx
│ └── FDBSyncStatus.tsx
└── branding/ # 🆕 ASSETS COMPARTILHADOS
├── logos/
│ ├── arcadia-suite-logo.svg
│ ├── arcadia-suite-logo-horiz.svg
│ ├── metaset-logo.svg
│ └── metaset-icon.svg
├── colors/
│ └── arcadia-palette.json
└── fonts/
└── Inter-Variable.ttf
🔐 Arquitetura de Segurança & Multi-tenancy
Fluxo de Autenticação
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Cliente │────▶│ Arcadia │────▶│ BI-API │────▶│ MetaSet │
│ (React) │ │ Login │ │ (8004) │ │ (8100) │
└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
│ │
│ Headers: │ SET LOCAL
│ X-Tenant-ID: 123 │ app.current_tenant
│ X-User-Role: admin │ = 123;
│ Authorization: JWT │
▼ ▼
┌─────────────┐ ┌─────────────┐
│ RLS Check │ │ PostgreSQL │
│ Middleware │ │ (RLS) │
└─────────────┘ └─────────────┘
ArcadiaSecurityManager (server/bi/metaset/security_manager.py) ✅ CORRIGIDO
"""
Security Manager integrado ao Arcadia Kernel
- Extrai tenant e usuário do token JWT
- Aplica RLS automaticamente
- Sincroniza roles com ArcadiaSuite
- Preserva comportamento padrão do Superset (chama super().before_request())
"""
from superset.security import SupersetSecurityManager
from flask import g, request, current_app
from sqlalchemy import text
import jwt
import logging
logger = logging.getLogger(__name__)
class ArcadiaSecurityManager(SupersetSecurityManager):
ROLE_MAPPING = {
'superadmin': 'Admin',
'admin': 'Alpha',
'analyst': 'Gamma',
'viewer': 'Public',
}
def before_request(self):
"""Executado antes de cada requisição - preserva comportamento padrão"""
super().before_request() # ← CRÍTICO: preserva autenticação padrão
auth_header = request.headers.get('Authorization', '')
if not auth_header.startswith('Bearer '):
return
token = auth_header.replace('Bearer ', '')
try:
payload = jwt.decode(
token,
current_app.config.get('SECRET_KEY', 'default-key'),
algorithms=['HS256']
)
g.tenant_id = payload.get('tenant_id')
g.user_id = payload.get('sub')
g.user_role = payload.get('role', 'viewer')
g.user_email = payload.get('email')
if g.tenant_id:
try:
from superset import db
db.session.execute(
text(f"SET LOCAL app.current_tenant = {g.tenant_id}")
)
except Exception as e:
logger.warning(f"Erro ao aplicar RLS: {e}")
except jwt.ExpiredSignatureError:
logger.warning("JWT token expirado")
except jwt.InvalidTokenError:
logger.warning("JWT token inválido")
except Exception as e:
logger.warning(f"Erro ao processar JWT: {e}")
🐍 Código dos Serviços Python
1. MetaSet Entry Point (server/bi/metaset/run.py)
"""
MetaSet - Serviço Apache Superset integrado ao Arcadia Kernel
Porta: 8100 (Docker container)
Gunicorn: 2 workers, gthread, 120s timeout
"""
import os
import sys
import logging
from pathlib import Path
logging.basicConfig(
level=logging.INFO,
format='[MetaSet] %(levelname)s: %(message)s',
handlers=[logging.StreamHandler(sys.stdout)]
)
logger = logging.getLogger(__name__)
def create_app():
"""Criar aplicação Flask do Superset com endpoints customizados"""
from superset import create_app as create_superset_app
from datetime import datetime
app = create_superset_app()
@app.route('/health')
def health_check():
return {'status': 'healthy', 'service': 'metaset'}, 200
@app.route('/info')
def service_info():
return {
'name': 'MetaSet',
'description': 'Business Intelligence by ArcadiaSuite',
'version': app.config.get('VERSION_STRING', '4.1.0'),
'features': ['sql_lab', 'dashboards', 'charts', 'rls', 'embedding']
}
return app
# MetaSetApplication: custom Gunicorn app
# Config: 2 workers, gthread, 120s timeout, stdout/stderr logging
2. BI-API Gateway (server/bi/index.ts)
"""
* BI-API Gateway
* Porta: 8004
* Integra MetaSet (8100) e FDB-Bridge (8200) ao ArcadiaSuite
* Proxy manual usando módulo http nativo (bypass http-proxy-middleware ECONNRESET)
"""
import express from 'express';
import http from 'http';
const METASET_URL = `http://${process.env.METASET_HOST || 'metaset'}:${process.env.METASET_PORT || '8100'}`;
// Manual proxy: http.request() com pathRewrite
// Solução para ECONNRESET com Gunicorn keepalive
// Health check agrega MetaSet + FDB-Bridge status
🎨 Configuração de Branding (superset_config.py)
"""
Configuração do MetaSet (Superset) para ArcadiaSuite
"""
import os
from pathlib import Path
BASE_DIR = Path(__file__).parent.absolute()
SUPERSET_HOME = BASE_DIR / 'superset_home'
# ==========================================
# BRANDING - ARCADIASUITE ✅ IMPLEMENTADO
# ==========================================
APP_NAME = "MetaSet by Arcádia"
APP_ICON = "/static/assets/images/branding/metaset-logo-horiz.png"
LOGO_TARGET_PATH = "/"
LOGO_TOOLTIP = "MetaSet - Business Intelligence by ArcadiaSuite"
# Favicons
FAVICONS = [
{"href": "/static/assets/images/branding/favicon-16x16.png", "sizes": "16x16"},
{"href": "/static/assets/images/branding/favicon-32x32.png", "sizes": "32x32"},
{"href": "/static/assets/images/branding/apple-touch-icon.png", "sizes": "180x180"},
]
# Cores ArcadiaSuite
ARCADIA_PRIMARY = "#0ea5e9" # Azul celeste
ARCADIA_SECONDARY = "#10b981" # Verde
ARCADIA_ACCENT = "#f59e0b" # Laranja
ARCADIA_BG = "#f8fafc" # Background claro
ARCADIA_TEXT = "#1e293b" # Texto escuro
# Desabilitar cache de arquivos estáticos
SEND_FILE_MAX_AGE_DEFAULT = 0
THEME_DEFAULT = {
"token": {
"brandAppName": "MetaSet",
"brandLogoAlt": "MetaSet by ArcadiaSuite",
"brandLogoUrl": "/static/assets/images/branding/metaset-logo-horiz.png",
"brandLogoMargin": "16px 0",
"brandLogoHeight": "28px",
"colorPrimary": ARCADIA_PRIMARY,
"colorLink": ARCADIA_PRIMARY,
"colorSuccess": ARCADIA_SECONDARY,
"colorWarning": ARCADIA_ACCENT,
"colorError": "#ef4444",
"colorInfo": "#3b82f6",
"colorBgLayout": ARCADIA_BG,
"colorBgContainer": "#ffffff",
"colorText": ARCADIA_TEXT,
"colorTextSecondary": "#64748b",
"fontFamily": "Inter, -apple-system, BlinkMacSystemFont, sans-serif",
"fontSize": 14,
"borderRadius": 8,
"borderRadiusLG": 12,
"boxShadow": "0 1px 3px 0 rgba(0, 0, 0, 0.1)",
"boxShadowSecondary": "0 4px 6px -1px rgba(0, 0, 0, 0.1)",
},
"algorithm": "default",
}
THEME_DARK = { ... } # Tema escuro
# ==========================================
# SEGURANÇA & MULTI-TENANCY
# ==========================================
from security_manager import ArcadiaSecurityManager
CUSTOM_SECURITY_MANAGER = ArcadiaSecurityManager # ✅ Funcionando
AUTH_TYPE = 1
WTF_CSRF_ENABLED = True
WTF_CSRF_TIME_LIMIT = 3600
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_SECURE = False # True em produção com HTTPS
SESSION_COOKIE_SAMESITE = "Lax"
# ==========================================
# BANCO DE DADOS
# ==========================================
SQLALCHEMY_DATABASE_URI = os.getenv(
'DATABASE_URL',
'postgresql://arcadia:arcadia123@db:5432/metaset_db'
)
SQLALCHEMY_ENGINE_OPTIONS = {
"connect_args": {"options": "-c row_security=on"},
"pool_pre_ping": True,
"pool_recycle": 300,
}
# ==========================================
# FEATURE FLAGS
# ==========================================
FEATURE_FLAGS = {
"EMBEDDED_SUPERSET": True,
"EMBEDDABLE_CHARTS": True,
"DASHBOARD_RBAC": True,
"SQLLAB_BACKEND_PERSISTENCE": True,
"DASHBOARD_VIRTUALIZATION": True,
"DRILL_BY": True,
"CSS_TEMPLATES": True,
"ENABLE_JAVASCRIPT_CONTROLS": False,
"ALERT_REPORTS": False,
}
📋 Roadmap de Implementação (8 Semanas)
Semana Foco Entregáveis
1 Setup MetaSet Fork Superset, branding básico (logo, cores), superset_config.py
2 Integração Kernel services.json atualizado, BI-API gateway, proxy funcionando
3 Segurança ArcadiaSecurityManager, JWT validation, injeção de headers
4 Multi-tenancy RLS PostgreSQL, isolamento de datasources, testes de segurança
5 FDB Bridge Serviço Python porta 8200, conexão Firebird, testes de sync
6 Sync Engine Sincronização incremental, agendamento, resolução de conflitos
7 Frontend Páginas BI no React, embed de dashboards, SQL Lab integrado
8 Go-Live Testes E2E, documentação, otimização de performance
✅ Checklist de Implementação - STATUS ATUAL
Semana 1-2: Setup e Integração ✅ CONCLUÍDO
✅ Clonar superset (4.1.0rc4) para server/bi/metaset/superset-src
✅ Criar superset_config.py com branding ArcadiaSuite (APP_NAME, cores, tema)
✅ Rebuild do frontend React com logos MetaSet (COMPLETO - 07/04/2026)
- Substituição de textos: "Superset" → "MetaSet" em todo codebase
- Traduções atualizadas: en/LC_MESSAGES/messages.po, pt_BR/LC_MESSAGES/messages.po
- Arquivos fonte atualizados: RightMenu.tsx, OAuth2RedirectMessage.tsx,
SliceHeaderControls, HeaderActionsDropdown, AnchorLink, EmbeddedModal,
useExploreAdditionalActionsMenu
- Templates HTML: basic.html, public_welcome.html, 404.html, 500.html
- Config Python: config.py (APP_NAME), constants.py (USER_AGENT), cli/*.py
- Build webpack concluído com sucesso (429 warnings, 0 errors)
- Assets compilados com branding MetaSet incorporado
✅ Criar server/bi/metaset/run.py entry point (Gunicorn)
✅ Criar server/bi/metaset/init.sh container initialization
✅ Criar server/bi/index.ts BI-API gateway (proxy manual Node.js)
✅ Atualizar server/kernel/config/services.json (autoStart: false, Docker Discovery)
✅ Docker Compose: metaset + bi-api + redes configuradas
✅ Dockerfile multi-stage build com assets locais (não mais copiando de apache/superset:latest)
✅ Deploy: https://bi.onboardbi.com.br (MetaSet rodando com branding completo)
✅ Container antigo arcadia-prod-superset-1 removido
✅ Container metaset conectado à rede coolify para Traefik
✅ Banco de dados metaset_db migrado e inicializado
✅ Usuário admin criado (login: admin / senha: admin)
✅ BI-API Gateway proxy /bi/metaset funcionando (porta 8004)
✅ Health checks integrados (metaset + bi-api)
✅ requirements.txt corrigido (compatível apache-superset 4.1.0)
✅ extra_hosts configurado para resolver db → 10.0.10.2 (IPv4)
Semana 3-4: Segurança 🔄 EM ANDAMENTO
✅ Implementar ArcadiaSecurityManager (CORRIGIDO - chama super().before_request())
✅ Configurar JWT validation
🔄 Criar schema metaset no PostgreSQL (banco criado, migrações aplicadas)
☐ Configurar RLS em tabelas do arcadia_db
☐ Testar isolamento entre tenants
Semana 5-6: FDB Bridge ⏳ PENDENTE
☐ Criar server/bi/fdb-bridge/main.py
☐ Implementar conexão Firebird (fdb library)
☐ Criar lógica de sincronização incremental
☐ Configurar agendador APScheduler
☐ Testar sync Matriz + 5 Filiais
Semana 7-8: Frontend e Go-Live ⏳ PENDENTE
☐ Criar páginas BI no frontend React
☐ Implementar embed de dashboards MetaSet
☐ Criar componente de status de sincronização
☐ Testes E2E completos
☐ Documentação do módulo BI
📝 Lições Aprendidas (07/04/2026)
1. Frontend rebuild obrigatório: Substituir arquivos estáticos PNG no Docker
não funciona porque os assets são compilados em bundles JS pelo webpack.
É necessário rebuildar o superset-frontend com npm run build.
2. Dependências faltantes: O build pode falhar por pacotes não instalados:
@react-spring/web, global-box, currencyformatter.js. Instalar com
npm install --legacy-peer-deps.
3. Security Manager: O ArcadiaSecurityManager DEVE chamar super().before_request()
no início do método para preservar o comportamento de autenticação padrão
do Flask-AppBuilder. Sem isso, o login falha com AttributeError: user.
4. IPv6 vs IPv4: O hostname "db" resolve para IPv6 (fd20:a15a:c2d4::c) mas
o psycopg2 falha na autenticação via IPv6. Solução: mapear db → IP IPv4
via extra_hosts no docker-compose.yml.
5. Container antigo: Sempre verificar se há containers antigos com labels
do Traefik apontando para o mesmo domínio. Eles podem conflitar com
o novo container.
6. Traefik discovery: O container DEVE estar na mesma rede Docker que o
Traefik (coolify) para ser descoberto automaticamente.
💰 Custos Adicionais
Componente Especificação Custo Estimado
Memória extra +2GB para Python (MetaSet + FDB-Bridge) ~$20/mês
Storage PostgreSQL +10GB para metadata MetaSet ~$5/mês
CPU Processamento de sync FDB ~$15/mês
Total ~$40/mês
🚀 Comandos de Deploy
# 1. Build da imagem Docker
cd /opt/arcadia_merged
docker compose build --no-cache metaset
# 2. Recriar container com nova imagem
docker compose up -d --force-recreate metaset
# 3. Verificar status
curl http://localhost:8100/health
curl https://bi.onboardbi.com.br/login/ | grep "<title>"
# 4. Logs
docker logs -f arcadia-dev-metaset-1
# 5. Migrar banco (se necessário)
docker exec -e FLASK_APP=superset \
-e DATABASE_URL="postgresql://arcadia:arcadia123@10.0.10.2:5432/metaset_db" \
arcadia-dev-metaset-1 superset db upgrade
# 6. Inicializar
docker exec -e FLASK_APP=superset \
-e DATABASE_URL="postgresql://arcadia:arcadia123@10.0.10.2:5432/metaset_db" \
arcadia-dev-metaset-1 superset init
📌 URLs de Acesso
Serviço URL Status
MetaSet UI https://bi.onboardbi.com.br ✅ Online com branding MetaSet
MetaSet Health http://localhost:8100/health ✅ OK
BI-API Gateway http://localhost:8004 ⚠️ Unhealthy (esperado - requer JWT)
Traefik Dashboard http://localhost:8080 ✅ Online
🔧 Próximos Passos Prioritários
1. Configurar RLS (Row Level Security) no PostgreSQL para isolamento de tenants
2. Testar fluxo completo de autenticação com token JWT do Arcadia
3. Criar datasource de exemplo conectado ao arcadia_db
4. Implementar FDB Bridge (conector Firebird)
5. Criar páginas BI no frontend React
6. Configurar cache Redis para MetaSet

1049
docs/PLANO_SKILL_FABRIC.md Normal file

File diff suppressed because it is too large Load Diff