Commit Graph

32 Commits

Author SHA1 Message Date
Jonas Pacheco c73b9d6658 feat(04): OpenClaw Embutido — PatternDetector + Skills Emergentes
- 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>
2026-03-26 15:16:59 -03:00
Jonas Pacheco 7528d4c36e feat(02-04): implementar versionamento Git-like de skills com rollback, fork e diff 2026-03-25 16:00:17 -03:00
Jonas Pacheco 9232666b8c fix: miroflow container conecta ao Ollama via ollama-net
- Remove extra_hosts (não funciona pois Ollama só escuta em 127.0.0.1)
- Adiciona rede ollama-net ao serviço miroflow
- OLLAMA_BASE_URL aponta para nome do container Ollama

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-25 14:34:03 -03:00
Jonas Pacheco 76adec5893 feat: MiroFlow containerizado no docker-compose
- 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>
2026-03-25 14:22:39 -03:00
Jonas Pacheco 4ceb407505 feat(03-03): add Científico tab to BiWorkspace with MiroFlowControl
- Added Brain icon import from lucide-react
- Added MiroFlowControl component import
- Added TabsTrigger for 'cientifico' tab with Brain icon
- Added TabsContent rendering MiroFlowControl component
- All existing tabs (overview, datasources, upload, datasets, charts, backups, staging, advanced) preserved
2026-03-25 10:57:28 -03:00
Jonas Pacheco e5b915e7e8 feat(03-03): create MiroFlowControl component with agent selection and analysis interface
- Toggle for scientific mode with Brain icon
- Agent selector (Statistician, Fiscal Auditor, Researcher)
- Task textarea with dynamic placeholder per agent
- Analysis button with loading state (Loader2 animation)
- Result display with metadata (model, duration, execution_id)
- Error handling with readable messages
- Styled for dark theme matching BiWorkspace
2026-03-25 10:54:42 -03:00
Jonas Pacheco e4e809fa5b docs(03-01): atualizar SUMMARY.md com commits e desvios do plano 03-01
- Adicionar hashes de commit ao SUMMARY.md
- Documentar fallback llama3.2:3b para researcher
- Documentar conftest.py como desvio Rule 2
- Atualizar STATE.md com plano 03-01 concluido
- Atualizar ROADMAP.md progresso fase 3
2026-03-25 10:52:59 -03:00
Jonas Pacheco c14f238fe9 docs(03-01): criar SUMMARY.md do plano 03-01 2026-03-25 10:51:28 -03:00
Jonas Pacheco 76e1d34f5d fix(03-01): adicionar conftest.py para resolver imports em pytest do root
- conftest.py adiciona server/python ao sys.path
- Corrige ModuleNotFoundError ao rodar pytest da raiz do projeto
2026-03-25 10:50:54 -03:00
Jonas Pacheco 60f1c5cb1d feat(03-01): criar miroflow_service.py FastAPI porta 8006 com 3 agentes + testes pytest
- 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
2026-03-25 10:50:05 -03:00
Jonas Pacheco 071d74c7a3 docs(03-02): criar SUMMARY.md do plano 03-02 2026-03-25 10:45:15 -03:00
Jonas Pacheco 1a70e87cd4 feat(03-02): registrar MiroFlow routes em server/routes.ts
- 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
2026-03-25 10:41:19 -03:00
Jonas Pacheco d53be76474 feat(03-02): criar MiroFlow proxy TypeScript com timeout 300s e KG audit logging
- 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
2026-03-25 10:41:12 -03:00
Jonas Pacheco 4057821404 feat(skills): Skill Marketplace (Biblioteca) — Fase 2
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>
2026-03-25 09:44:49 -03:00
Jonas Pacheco 194a8dcc1b feat(skills): rota /skills + autocomplete de referências / no Monaco
- App.tsx: adiciona ProtectedRoute path="/skills"
- Skills.tsx: completion provider para referências no body editor
  - dispara ao digitar "/" em qualquer ponto do markdown
  - sugere todos os prefixos: /skill/, /skill:system/, /var/, /data/,
    /kg/, /file/, /tool/, /agent/
  - ao digitar /skill/ lista skills existentes do tenant com slug/desc
  - usa ref para evitar closure stale com skillsData
  - cleanup do provider no unmount

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-25 09:38:37 -03:00
Jonas Pacheco c9a0563422 feat(agentic): Fase 1-2 — Skills POO, Neo4j, UI editor e melhorias gerais
Arcádia Agentic Suite — Fase 1 (Fundação):
- shared/schema.ts: tabelas arcadia_skills + skill_executions (multi-tenant, herança, audit hash)
- docker-compose.yml: Neo4j 5 como profile 'kg' (porta 7474/7687)
- docker/litellm-config.yaml: ajustes de configuração

Arcádia Agentic Suite — Fase 2 (Skills Engine):
- client/src/pages/Skills.tsx: UI completa — lista, filtros, editor Monaco (Geral/Body/Params), executar e histórico
- client/src/App.tsx: import do componente Skills

Manus — melhorias de prompt e comportamento:
- server/manus/service.ts: system prompt com identidade Manus, regras PROATIVO, tabelas markdown
- server/manus/routes.ts: ajustes de rotas
- server/replit_integrations/chat/prompt.ts: prompt de chat aprimorado
- server/replit_integrations/chat/routes.ts: melhorias no fluxo de chat

Outros:
- Agent.tsx, ProcessCompass.tsx: melhorias de UI
- Correções menores em bi, blackboard, compass, ide, support, valuation, whatsapp

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-25 09:32:39 -03:00
Jonas Pacheco 3c61acf4d9 feat(xos): restaura forms de cadastro e adiciona seletor "Novo"
- XosCentral: botão "Novo" abre seletor (Contato / Negócio / Atividade)
- Restaura dialog de Novo Contato (perdido no rebuild anterior)
- Adiciona dialog de Nova Atividade (tipo, título, data, prioridade)
- Adiciona dialog de Novo Negócio (título, estágio, valor)
- Superset: logos v2 aplicadas via volume mount, retry de token, healthcheck 127.0.0.1
- xos_conversations: coluna status adicionada no banco

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-24 15:15:51 -03:00
Jonas Pacheco 9bfc888d28 feat(migration): suporte a upload de arquivos RAR, SQL e SQL.GZ
- Dockerfile: instala p7zip no Alpine para extração de RAR via 7z
- migration/routes.ts: detecta .rar, .sql.gz e .sql; extrai RAR com 7z,
  descomprime .gz com gunzip, analisa tabelas do dump SQL
- Migration.tsx: accept e hint atualizados para incluir RAR/SQL

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-24 12:00:13 -03:00
Jonas Pacheco 66d8dfbfcc feat: add MiroFlow and OpenClaw as git submodules
- server/modules/miroflow → github.com/MiroMindAI/MiroFlow
- server/modules/openclaw → github.com/miaoxworld/OpenClawInstaller

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-24 11:57:27 -03:00
Jonas Pacheco 1c6c3865e5 feat(skills): Fase 1 — SkillEngine POO + ReferenceParser + API REST
- server/skills/engine.ts: SkillEngine com herança declarativa (extends),
  composição via dependências, execução com audit hash SHA-256 e
  persistência em skill_executions
- server/skills/reference-parser.ts: parser e resolver de referências
  /skill/, /kg/, /var/, /tool/, /data/, /agent/, /file/ com interpolação
- server/skills/routes.ts: API REST completa (CRUD + execute + histórico)
- server/routes.ts: skills registradas + /api/health global
- migrations/0003_arcadia_skills.sql: tabelas arcadia_skills e
  skill_executions aplicadas em produção
- docker-compose.prod.yml: healthcheck via wget /api/health no serviço app

Parte do planejamento Arcádia Agentic Suite — Fase 1 (Fundação).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-24 11:30:51 -03:00
Jonas Pacheco 5b35aa49a2 feat(agent): otimizações para apresentação + botão cancelar
- manus/service.ts: system prompt enxuto, sem frameworks desnecessários, data/hora real injetada
- replit_integrations/chat: modelo gpt-4o → arcadia-agent, prompt limpo sem SWOT/Canvas/PDCA
- litellm-config.yaml: fallback gpt-4o/gpt-4o-mini → arcadia-agent (evita carregar R1 14B)
- Agent.tsx: botão cancelar (X vermelho) aparece durante processamento do Manus

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 15:57:03 -03:00
Jonas Pacheco 4788aaf296 feat(agent): trocar modelo Manus para arcadia-agent (llama3.2:3b) + identidade soberana
- service.ts: model gpt-4o → arcadia-agent, max_tokens 4000 → 1500
- litellm-config.yaml: arcadia-agent → ollama/llama3.2:3b (era deepseek-r1:14b)
- System prompt: adiciona identidade Manus/Arcádia Suite, contexto soberano, comportamento de apresentação
- Ollama: KEEP_ALIVE=8h, threads=7, memory=28G para performance em apresentação

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 14:50:41 -03:00
Jonas Pacheco 4d20d36bfd feat(ai): adiciona DeepSeek R1 14B como agente principal no LiteLLM
- Adiciona deepseek-r1:14b e alias arcadia-agent no litellm-config.yaml
- arcadia-default agora aponta para R1 14B (era llama3.2:3b)
- Timeout LiteLLM aumentado de 120s para 300s
- Adiciona rede ollama-net (external) ao serviço litellm no compose
  para comunicação com container Ollama via hostname estável
- .gitignore: ignora arquivos .aider*

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 13:02:57 -03:00
Jonas Pacheco 4fd0e9d893 fix(superset): corrigir erro fetch failed no guest-token
- Adiciona AbortSignal.timeout(8s) em todas as chamadas fetch ao Superset
- Limpa cache de token automaticamente em caso de erro (clearTokenCache)
  para que próxima requisição force novo login ao invés de usar token stale
- Reduz TTL do cache de 50 para 45 min como margem de segurança
- Força iframe do SupersetDashboard a 100% width/height via classe CSS

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 21:18:44 -03:00
Jonas Pacheco 4214a2561c fix(superset): corrige embedding de dashboards via guest token
- superset_config.py: adiciona FLASK_APP_MUTATOR que seta g.user a partir
  do Bearer JWT quando o usuário está como anônimo (necessário porque o
  papel Public com can_read on Dashboard faz protect() pular verificação JWT)
- superset_config.py: TALISMAN_ENABLED=False, X_FRAME_OPTIONS=ALLOWALL
  para permitir embedding cross-origin via iframe
- routes.ts: adiciona session cookie nas chamadas de busca do dashboard
  além de incluir X-CSRFToken + Cookie no guest token request
- SupersetDashboard.tsx: usa bi.onboardbi.com.br como supersetDomain,
  tela de unavailable com UI adequada (sem iframe de fallback)
- BiWorkspace.tsx: link "Abrir em Nova Aba" aponta para bi.onboardbi.com.br
- docker-compose.prod.yml: labels HTTP→HTTPS redirect para Superset

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-19 17:30:40 -03:00
Jonas Pacheco a1ba3b4b02 fix(superset): corrigir dependência fetchGuestToken → fetchTokenData no useCallback
Referência ao nome antigo causava ReferenceError no runtime.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-19 15:09:35 -03:00
Jonas Pacheco 275b589765 fix(soe): corrigir caminhos de import do db/index nos arquivos SOE
db/index.ts está na raiz do projeto, não dentro de server/.
- server/soe/event-bus.ts: ../db → ../../db
- server/soe/handlers/*: ../../db → ../../../db
- server/soe/rule-engine/index.ts: ../../db → ../../../db

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-19 15:02:53 -03:00
Jonas Pacheco 023451e000 fix(superset): resolver slug → UUID antes de gerar guest token e embeddar
O SDK do Superset exige o UUID do embedded config (não o slug) tanto no
embedDashboard quanto no guest token. Agora o backend resolve:
  slug → dashboard ID → embedded UUID → guest token com UUID
E retorna { token, embeddedId } para o frontend usar no embedDashboard.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-19 14:55:36 -03:00
Jonas Pacheco 6e8a3261bb fix(superset): corrigir health check do init.sh e criar banco superset
init.sh tentava conectar ao banco 'superset' (inexistente) para o health
check, causando loop infinito. Agora usa banco 'postgres' para verificar
se o PostgreSQL está disponível, depois cria o banco 'superset' antes de
rodar as migrações.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-19 14:25:55 -03:00
Jonas Pacheco 953567fa47 feat(bi): migração MetaSet → Apache Superset (Fase 1–4 completas)
- BiWorkspace: tab Advanced substituída por SupersetDashboard (financial-overview)
- Financeiro: nova tab "Análise BI" com SupersetDashboard (financial-overview)
- Contabil: nova tab "Análise BI" com SupersetDashboard (dre-mensal)
- SOE: card Arcádia Insights no dashboard (executive-summary)
- Home: seção full-width Arcádia Insights (executive-summary)
- docker-compose.yml dev: serviço superset adicionado com profile [bi]
- .env.example: documentadas variáveis SUPERSET_* e remoção de METABASE_*
- server/superset/routes.ts: corrigido payload RLS (removido type:"BASE_ROLE" inválido)

Arquivos metaset/metabase mantidos: ainda usados por server/manus e server/autonomous.
Próximos passos: subir container, criar dashboards base, testar health/guest-token.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-19 14:08:03 -03:00
Jonas Pacheco 4ecc8846bf feat(soe): integrar Rule Engine em pedidos de venda e emissão NF-e
Aplica soeRuleEngine.apply() antes de inserir sales orders e antes
de emitir NF-e, validando e enriquecendo o payload via motor de regras.
Retorna 422 com detalhes de validação se regras SOE falharem.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-19 14:07:26 -03:00
Jonas Pacheco e2c482a67d Suite Arcádia — estado atual do servidor (arcadia_merged)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-19 13:11:28 -03:00