Reescrever README com layout profissional e documentação completa

This commit is contained in:
Frederico Castro
2026-02-28 04:42:00 -03:00
parent 633b19f80d
commit 1606efa09f

556
README.md
View File

@@ -1,351 +1,373 @@
# Agents Orchestrator <p align="center">
<img src="docs/logo.svg" alt="Agents Orchestrator" width="80" />
</p>
Painel administrativo web para orquestração de agentes [Claude Code](https://docs.anthropic.com/en/docs/claude-code). Crie, configure e execute múltiplos agentes com diferentes personalidades, modelos e diretórios de trabalho — tudo a partir de uma interface visual profissional. <h1 align="center">Agents Orchestrator</h1>
![Dashboard do Agents Orchestrator — visão geral com métricas, gráficos de execuções e custos, distribuição de status, ranking de agentes e taxa de sucesso](docs/dashboard.png) <p align="center">
<strong>Plataforma de orquestração de agentes IA com interface visual, pipelines automatizados e integração Git nativa.</strong>
</p>
## Acesso <p align="center">
<a href="https://agents.nitro-cloud.duckdns.org"><img src="https://img.shields.io/badge/demo-live-00d4aa?style=flat-square" alt="Live Demo" /></a>
<a href="https://git.nitro-cloud.duckdns.org/fred/agents-orchestrator"><img src="https://img.shields.io/badge/gitea-repo-6c40cc?style=flat-square" alt="Gitea" /></a>
<img src="https://img.shields.io/badge/node-%3E%3D22-339933?style=flat-square&logo=node.js&logoColor=white" alt="Node.js" />
<img src="https://img.shields.io/badge/license-MIT-blue?style=flat-square" alt="License" />
</p>
| Recurso | URL | <p align="center">
|---------|-----| <a href="#visao-geral">Visao Geral</a> &bull;
| **Aplicação** | https://agents.nitro-cloud.duckdns.org | <a href="#funcionalidades">Funcionalidades</a> &bull;
| **Repositório** | https://git.nitro-cloud.duckdns.org/fred/agents-orchestrator | <a href="#quick-start">Quick Start</a> &bull;
| **Portal Nitro Cloud** | https://nitro-cloud.duckdns.org | <a href="#arquitetura">Arquitetura</a> &bull;
<a href="#api">API</a> &bull;
<a href="#deploy">Deploy</a>
</p>
---
## Visao Geral
Agents Orchestrator e uma plataforma web para criar, configurar e executar agentes [Claude Code](https://docs.anthropic.com/en/docs/claude-code) de forma visual. Projetada para equipes de desenvolvimento e profissionais que precisam orquestrar multiplos agentes IA com diferentes especialidades, executar pipelines de trabalho automatizados e integrar com repositorios Git — tudo a partir de um painel administrativo elegante.
### Por que usar?
| Problema | Solucao |
|----------|---------|
| Gerenciar multiplos agentes via CLI e tedioso | Interface visual com cards, filtros e execucao com 1 clique |
| Saida do agente nao e visivel em tempo real | Terminal com streaming WebSocket chunk-a-chunk |
| Automatizar fluxos sequenciais e complexo | Pipelines visuais com aprovacao humana entre passos |
| Agentes nao tem acesso a repositorios remotos | Integracao Git nativa com clone, commit e push automatico |
| Deploy manual e propenso a erros | `git deploy` — um comando faz tudo |
---
## Funcionalidades ## Funcionalidades
### Gerenciamento de Agentes ### Agentes
- Crie agentes com nome, system prompt, modelo (Sonnet/Opus/Haiku), diretório de trabalho, ferramentas permitidas, modo de permissão e tags
- Ative, desative, edite, **duplique** ou exclua a qualquer momento
- Exporte/importe configurações completas em JSON
### Catálogo de Tarefas - Criacao com system prompt, modelo (Sonnet/Opus/Haiku), diretorio de trabalho, ferramentas permitidas e modo de permissao
- Crie e gerencie tarefas reutilizáveis com nome, categoria e descrição detalhada - Tags para organizacao e filtragem
- Categorias: Code Review, Segurança, Refatoração, Testes, Documentação, Performance - Duplicacao, importacao/exportacao JSON
- Filtro por texto e categoria - Delegacao automatica entre agentes (Tech Lead → PO)
- Execute qualquer tarefa diretamente no agente escolhido - Agentes coordenadores recebem lista de agentes disponiveis injetada no prompt
- Cards com truncamento inteligente e tooltip com descrição completa
### Execução de Tarefas ### Execucao
- Execute tarefas sob demanda em qualquer agente ativo
- Templates rápidos incluídos (detecção de bugs, revisão OWASP, refatoração, testes, documentação, performance)
- **Reexecute** tarefas que falharam ou foram canceladas com um clique
- Continuação de conversa (resume session) no terminal
### Terminal em Tempo Real - Modal de execucao com seletor de agente, tarefa, instrucoes adicionais e arquivos de contexto
- Streaming chunk-a-chunk via WebSocket com indicador de conexão - **Seletor de repositorio Git** — escolha um repo do Gitea e o branch; o sistema clona/atualiza, executa e faz commit/push automatico
- **Botão Interromper** para cancelar todas as execuções ativas - Templates rapidos: deteccao de bugs, revisao OWASP, refatoracao, testes, documentacao, performance
- **Busca** no output do terminal com navegação entre ocorrências - Retry automatico configuravel por agente
- **Download** da saída completa como `.txt` - Continuacao de conversa (resume session)
- **Copiar** saída para a área de transferência - Cancelamento individual ou em massa
- **Toggle de auto-scroll** para controle manual da rolagem
- Filtro por execução
### Dashboard com Gráficos
- Métricas em tempo real (agentes, execuções, agendamentos, custo, webhooks)
- **Gráfico de execuções** por dia (barras empilhadas sucesso/erro)
- **Gráfico de custo** por dia (linha com área preenchida)
- **Distribuição de status** (doughnut chart)
- **Top 5 agentes** mais executados (barras horizontais)
- **Taxa de sucesso** geral (gauge com percentual)
- Seletor de período: 7, 14 ou 30 dias
### Agendamento Cron
- Agende tarefas recorrentes com expressões cron
- Presets incluídos (horário, diário, semanal, mensal)
- Histórico de execuções por agendamento com duração e custo
### Pipelines ### Pipelines
- Encadeie múltiplos agentes em fluxos sequenciais
- Saída de cada passo alimenta o próximo via template `{{input}}` - Encadeamento de multiplos agentes em fluxos sequenciais
- **Diretório de trabalho** configurável por pipeline (pré-preenchido com base path) - Saida de cada passo alimenta o proximo via `{{input}}`
- Portões de aprovação humana entre passos (human-in-the-loop) - **Seletor de repositorio** — todos os passos trabalham no mesmo repo com commit automatico ao final
- **Retomar pipelines falhas** a partir do passo onde pararam - Portoes de aprovacao humana (human-in-the-loop)
- Ideal para fluxos como "analisar → corrigir → testar" - Retomada de pipelines falhos a partir do passo onde pararam
- Editor de fluxo visual com drag para reordenar passos
### Terminal
- Streaming em tempo real via WebSocket
- Botao Interromper para cancelar execucoes ativas
- Busca no output com navegacao entre ocorrencias
- Download como `.txt` e copia para clipboard
- Auto-scroll toggleavel
### Integração Git
- Listagem automatica de repositorios do Gitea
- Seletor de branch dinamico
- Clone/pull automatico antes da execucao
- **Commit e push automatico** ao final com mensagem descritiva
- Instrucao injetada para agentes nao fazerem operacoes git
- Publicacao de projetos: cria repo, configura subdominio, deploy com 1 clique
### Explorador de Arquivos
- Navegacao em `/home/projetos/` com breadcrumb
- Download de arquivos individuais ou pastas completas (.tar.gz)
- Exclusao com confirmacao
- Botao publicar em projetos — cria repo no Gitea, configura Caddy e faz deploy automatico em `projeto.nitro-cloud.duckdns.org`
### Dashboard
- Metricas em tempo real: agentes, execucoes, agendamentos, custo, webhooks
- Graficos: execucoes por dia, custo diario, distribuicao de status, top 5 agentes, taxa de sucesso
- Seletor de periodo: 7, 14 ou 30 dias
### Catalogo de Tarefas
- Tarefas reutilizaveis com nome, categoria e descricao
- Categorias: Code Review, Seguranca, Refatoracao, Testes, Documentacao, Performance
- Filtro por texto e categoria
- Execucao direta a partir do catalogo
### Agendamento Cron
- Expressoes cron com presets (horario, diario, semanal, mensal)
- Historico de execucoes por agendamento
- Retry automatico em caso de limite de slots
### Webhooks ### Webhooks
- Dispare execuções de agentes ou pipelines via HTTP externo
- **Edite** webhooks existentes (nome, alvo, status)
- **Teste** webhooks com um clique para verificar configuração
- Snippet cURL pronto para copiar
- Assinatura HMAC-SHA256 para validação de origem
### Notificações - Disparo de execucoes via HTTP externo
- **Centro de notificações** no header com badge de contagem - Edicao, teste com 1 clique e snippet cURL
- Notificações automáticas para execuções concluídas e com erro - Assinatura HMAC-SHA256
- **Notificações nativas do navegador** (Browser Notification API)
- Marcar como lidas / limpar todas
- Polling automático a cada 15 segundos
### Tema Claro/Escuro ### Notificacoes
- Toggle de tema no header com transições suaves
- Persistência da preferência em localStorage
- Terminal mantém fundo escuro em ambos os temas
### Exportação de Dados - Centro de notificacoes com badge de contagem
- **Exportar histórico** de execuções como CSV (UTF-8 com BOM) - Notificacoes nativas do navegador
- Exportar configuração de agentes em JSON - Polling automatico a cada 15 segundos
### Atalhos de Teclado ### Tema e UX
| Tecla | Ação |
|-------|------|
| `1``9` | Navegar entre seções |
| `N` | Novo agente |
| `Esc` | Fechar modal |
## Deploy - Tema claro/escuro com transicao suave
- Atalhos de teclado (`1`-`9` navegacao, `N` novo agente, `Esc` fechar modal)
- Exportacao de historico como CSV
A aplicação roda em container Docker na infraestrutura Nitro Cloud com HTTPS automático via Caddy + Let's Encrypt. ---
### Deploy automático (recomendado) ## Quick Start
Um único comando faz push e deploy completo: ### Requisitos
- Node.js >= 22
- [Claude CLI](https://docs.anthropic.com/en/docs/claude-code) instalado e autenticado
### Execucao local
```bash ```bash
git deploy git clone https://github.com/fredac100/agents-orchestrator.git
cd agents-orchestrator
npm install
npm start
``` ```
O script `scripts/deploy.sh` executa automaticamente: Acesse `http://localhost:3000`.
1. Push para GitHub (origin) e Gitea (nitro) ### Com Docker
2. Backup dos dados no VPS (`data-backup-YYYYMMDD-HHMMSS`)
3. Sincronização via rsync (exclui `data/`, `.git`, `node_modules`)
4. Correção de permissões do diretório de dados
5. Rebuild do container Docker
6. Verificação do container e integridade dos dados
7. Limpeza de backups antigos (mantém os 3 mais recentes)
Opções:
```bash ```bash
git deploy # Push + deploy completo docker build -t agents-orchestrator .
bash scripts/deploy.sh --skip-push # Apenas deploy, sem push docker run -p 3000:3000 \
-v $(pwd)/data:/app/data \
-v ~/.claude:/home/node/.claude \
agents-orchestrator
``` ```
## Variáveis de Ambiente ---
| Variável | Descrição | Padrão | ## Arquitetura
|----------|-----------|--------|
| `PORT` | Porta do servidor | `3000` |
| `HOST` | Endereço de bind | `0.0.0.0` |
| `AUTH_TOKEN` | Token Bearer para autenticação da API | _(desabilitado)_ |
| `ALLOWED_ORIGIN` | Origin permitida para CORS | `https://agents.nitro-cloud.duckdns.org` |
| `ALLOWED_DIRECTORIES` | Diretórios permitidos para working directory (CSV) | _(todos)_ |
| `WEBHOOK_SECRET` | Segredo HMAC para assinatura de webhooks | _(desabilitado)_ |
| `CLAUDE_BIN` | Caminho para o binário do Claude CLI | _(auto-detectado)_ |
| `REDIS_URL` | URL do Redis para cache L2 (opcional) | _(somente memória)_ |
## Como Funciona
### Criando um agente
1. Acesse https://agents.nitro-cloud.duckdns.org
2. Clique em **Novo Agente** no header ou na seção Agentes
3. Configure nome, system prompt, modelo e diretório de trabalho
4. Salve — o agente aparecerá como card na listagem
### Executando uma tarefa
1. No card do agente, clique em **Executar**
2. Descreva a tarefa ou use um template rápido
3. Opcionalmente adicione instruções extras
4. A execução inicia e o terminal abre automaticamente com streaming da saída
### Criando um pipeline
1. Vá em **Pipelines****Novo Pipeline**
2. Adicione pelo menos 2 passos, selecionando um agente para cada
3. Opcionalmente defina um template de input usando `{{input}}` para referenciar a saída do passo anterior
4. Marque passos que requerem aprovação humana antes de prosseguir
5. Execute o pipeline fornecendo o input inicial
### Agendando uma tarefa
1. Vá em **Agendamentos****Novo Agendamento**
2. Selecione o agente, descreva a tarefa e defina a expressão cron
3. A tarefa será executada automaticamente nos horários configurados
## Infraestrutura
``` ```
Cliente (navegador) HTTPS (443)
|
▼ HTTPS (porta 443) [Caddy] ─── SSL automatico via DuckDNS
Caddy (reverse proxy + SSL automático) |
*.nitro-cloud.duckdns.org
▼ agents.nitro-cloud.duckdns.org |
Container Docker (agents-orchestrator) ┌──────────────┼──────────────┐
| | |
├── Express (HTTP API + arquivos estáticos) [agents.*] [git.*] [projeto.*]
└── WebSocket (streaming em tempo real) | | |
┌──────┴──────┐ [Gitea] [Caddy file_server]
| |
[Express] [WebSocket]
| |
├── API REST (40+ endpoints)
├── Manager (CRUD + orquestracao)
├── Executor (spawn claude CLI)
├── Pipeline (sequencial + aprovacao)
├── Scheduler (cron jobs)
├── Git Integration (clone/pull/commit/push)
└── Store (JSON com escrita atomica)
``` ```
### Arquitetura Interna ### Estrutura do Projeto
``` ```
server.js Express + WebSocket + rate limiting + auth server.js HTTP + WebSocket + rate limiting + auth
src/ src/
routes/api.js API REST (/api/*)30+ endpoints routes/api.js API REST — 40+ endpoints
agents/ agents/
manager.js CRUD + orquestração + notificações manager.js CRUD + orquestracao + delegacao
executor.js Spawna o CLI claude como child_process executor.js Spawna o CLI claude como child_process
scheduler.js Agendamento cron (in-memory + persistido) scheduler.js Agendamento cron
pipeline.js Execução sequencial com aprovação humana pipeline.js Execucao sequencial + aprovacao humana
store/db.js Persistência em JSON com escrita atômica git-integration.js Clone, pull, commit, push automatico
cache/index.js Cache em 2 níveis (memória + Redis opcional) store/db.js Persistencia JSON com escrita atomica
cache/index.js Cache L1 (memoria) + L2 (Redis opcional)
reports/generator.js Geracao de relatorios de execucao
public/ public/
index.html SPA single-page com hash routing app.html SPA com hash routing
css/styles.css Design system (dark/light themes) css/styles.css Design system (dark/light)
js/ js/
app.js Controlador principal + WebSocket + tema + routing app.js Controlador principal + WebSocket
api.js Client HTTP para a API api.js Client HTTP para a API
components/ UI por seção (15 módulos) components/ 16 modulos UI independentes
data/ scripts/
agents.json Agentes cadastrados deploy.sh Deploy automatizado via rsync + Docker
tasks.json Templates de tarefas data/ Persistencia em JSON (8 stores)
pipelines.json Pipelines configurados
schedules.json Agendamentos persistidos
executions.json Histórico de execuções (max 5000)
webhooks.json Configuração de webhooks
notifications.json Notificações do sistema
settings.json Configurações globais
``` ```
O executor invoca o binário `claude` com `--output-format stream-json`, parseia o stdout linha a linha e transmite os chunks via WebSocket para o frontend em tempo real. ---
## API REST ## API
### Agentes ### Agentes
| Método | Endpoint | Descrição | | Metodo | Endpoint | Descricao |
|--------|----------|-----------| |--------|----------|-----------|
| `GET` | `/api/agents` | Listar agentes | | `GET` | `/api/agents` | Listar agentes |
| `POST` | `/api/agents` | Criar agente | | `POST` | `/api/agents` | Criar agente |
| `GET` | `/api/agents/:id` | Obter agente | | `GET` | `/api/agents/:id` | Obter agente |
| `PUT` | `/api/agents/:id` | Atualizar agente | | `PUT` | `/api/agents/:id` | Atualizar agente |
| `DELETE` | `/api/agents/:id` | Excluir agente | | `DELETE` | `/api/agents/:id` | Excluir agente |
| `POST` | `/api/agents/:id/execute` | Executar tarefa no agente | | `POST` | `/api/agents/:id/execute` | Executar tarefa (aceita `repoName` e `repoBranch`) |
| `POST` | `/api/agents/:id/continue` | Continuar conversa (resume) | | `POST` | `/api/agents/:id/continue` | Continuar conversa |
| `POST` | `/api/agents/:id/cancel/:execId` | Cancelar execução | | `POST` | `/api/agents/:id/cancel/:execId` | Cancelar execucao |
| `GET` | `/api/agents/:id/export` | Exportar agente (JSON) | | `GET` | `/api/agents/:id/export` | Exportar agente |
| `POST` | `/api/agents/:id/duplicate` | Duplicar agente | | `POST` | `/api/agents/:id/duplicate` | Duplicar agente |
### Tarefas
| Método | Endpoint | Descrição |
|--------|----------|-----------|
| `GET` | `/api/tasks` | Listar tarefas |
| `POST` | `/api/tasks` | Criar tarefa |
| `PUT` | `/api/tasks/:id` | Atualizar tarefa |
| `DELETE` | `/api/tasks/:id` | Excluir tarefa |
### Agendamentos
| Método | Endpoint | Descrição |
|--------|----------|-----------|
| `GET` | `/api/schedules` | Listar agendamentos |
| `POST` | `/api/schedules` | Criar agendamento |
| `PUT` | `/api/schedules/:taskId` | Atualizar agendamento |
| `DELETE` | `/api/schedules/:taskId` | Remover agendamento |
| `GET` | `/api/schedules/history` | Histórico de execuções agendadas |
### Pipelines ### Pipelines
| Método | Endpoint | Descrição | | Metodo | Endpoint | Descricao |
|--------|----------|-----------| |--------|----------|-----------|
| `GET` | `/api/pipelines` | Listar pipelines | | `GET` | `/api/pipelines` | Listar pipelines |
| `POST` | `/api/pipelines` | Criar pipeline | | `POST` | `/api/pipelines` | Criar pipeline |
| `GET` | `/api/pipelines/:id` | Obter pipeline | | `POST` | `/api/pipelines/:id/execute` | Executar (aceita `repoName` e `repoBranch`) |
| `PUT` | `/api/pipelines/:id` | Atualizar pipeline |
| `DELETE` | `/api/pipelines/:id` | Excluir pipeline |
| `POST` | `/api/pipelines/:id/execute` | Executar pipeline |
| `POST` | `/api/pipelines/:id/cancel` | Cancelar pipeline |
| `POST` | `/api/pipelines/:id/approve` | Aprovar passo pendente | | `POST` | `/api/pipelines/:id/approve` | Aprovar passo pendente |
| `POST` | `/api/pipelines/:id/reject` | Rejeitar passo pendente | | `POST` | `/api/pipelines/:id/reject` | Rejeitar passo |
| `POST` | `/api/pipelines/resume/:execId` | Retomar pipeline falha | | `POST` | `/api/pipelines/resume/:execId` | Retomar pipeline falho |
### Webhooks ### Repositorios
| Método | Endpoint | Descrição | | Metodo | Endpoint | Descricao |
|--------|----------|-----------| |--------|----------|-----------|
| `GET` | `/api/webhooks` | Listar webhooks | | `GET` | `/api/repos` | Listar repositorios do Gitea |
| `POST` | `/api/webhooks` | Criar webhook | | `GET` | `/api/repos/:name/branches` | Listar branches de um repo |
| `PUT` | `/api/webhooks/:id` | Atualizar webhook |
| `DELETE` | `/api/webhooks/:id` | Excluir webhook |
| `POST` | `/api/webhooks/:id/test` | Testar webhook |
### Execuções e Histórico ### Arquivos e Publicacao
| Método | Endpoint | Descrição | | Metodo | Endpoint | Descricao |
|--------|----------|-----------| |--------|----------|-----------|
| `GET` | `/api/executions/active` | Execuções em andamento | | `GET` | `/api/files` | Listar diretorio |
| `GET` | `/api/executions/history` | Histórico paginado com filtros | | `GET` | `/api/files/download` | Download de arquivo |
| `GET` | `/api/executions/recent` | Execuções recentes | | `GET` | `/api/files/download-folder` | Download de pasta (.tar.gz) |
| `GET` | `/api/executions/export` | Exportar histórico como CSV | | `DELETE` | `/api/files` | Excluir arquivo ou pasta |
| `GET` | `/api/executions/:id` | Detalhes de uma execução | | `POST` | `/api/files/publish` | Publicar projeto (repo + deploy + subdominio) |
| `DELETE` | `/api/executions/:id` | Excluir execução do histórico |
| `POST` | `/api/executions/:id/retry` | Reexecutar execução falha |
| `POST` | `/api/executions/cancel-all` | Cancelar todas as execuções ativas |
| `DELETE` | `/api/executions` | Limpar histórico |
### Notificações
| Método | Endpoint | Descrição |
|--------|----------|-----------|
| `GET` | `/api/notifications` | Listar notificações |
| `POST` | `/api/notifications/:id/read` | Marcar como lida |
| `POST` | `/api/notifications/read-all` | Marcar todas como lidas |
| `DELETE` | `/api/notifications` | Limpar notificações |
### Sistema ### Sistema
| Método | Endpoint | Descrição | | Metodo | Endpoint | Descricao |
|--------|----------|-----------| |--------|----------|-----------|
| `GET` | `/api/health` | Health check (sem auth) | | `GET` | `/api/health` | Health check |
| `GET` | `/api/system/status` | Status geral do sistema | | `GET` | `/api/system/status` | Status geral |
| `GET` | `/api/system/info` | Informações do servidor | | `GET` | `/api/stats/costs` | Estatisticas de custo |
| `GET` | `/api/stats/costs` | Estatísticas de custo | | `GET` | `/api/stats/charts` | Dados para graficos |
| `GET` | `/api/stats/charts` | Dados para gráficos do dashboard |
| `GET/PUT` | `/api/settings` | Configurações globais | ---
## Deploy
### Deploy automatico
```bash
git deploy
```
O alias executa `scripts/deploy.sh` que automaticamente:
1. Push para GitHub e Gitea
2. Backup dos dados no VPS
3. Sincronizacao via rsync
4. Correcao de permissoes
5. Rebuild do container Docker
6. Verificacao de integridade
7. Limpeza de backups antigos (mantem 3)
```bash
# Apenas deploy sem push
bash scripts/deploy.sh --skip-push
```
### Variaveis de Ambiente
| Variavel | Descricao | Padrao |
|----------|-----------|--------|
| `PORT` | Porta do servidor | `3000` |
| `HOST` | Endereco de bind | `0.0.0.0` |
| `AUTH_TOKEN` | Bearer token para auth da API | _(desabilitado)_ |
| `ALLOWED_ORIGIN` | Origin para CORS | `http://localhost:3000` |
| `WEBHOOK_SECRET` | Segredo HMAC para webhooks | _(desabilitado)_ |
| `GITEA_URL` | URL interna do Gitea | `http://gitea:3000` |
| `GITEA_USER` | Usuario do Gitea | `fred` |
| `GITEA_PASS` | Senha do Gitea | _(obrigatorio para Git)_ |
| `DOMAIN` | Dominio base para subdominios | `nitro-cloud.duckdns.org` |
| `CLAUDE_BIN` | Caminho do CLI Claude | _(auto-detectado)_ |
| `REDIS_URL` | Redis para cache L2 | _(somente memoria)_ |
---
## Seguranca
- HTTPS via Caddy com certificado wildcard Let's Encrypt
- Autenticacao Bearer token com timing-safe comparison
- Rate limiting: 100 req/min (API), 30 req/min (webhooks)
- CORS restrito a origin configurada
- Correlation IDs em todas as requisicoes
- Escrita atomica em disco (temp + rename)
- Sanitizacao de prompts (NUL, controle, limite 50K chars)
- HMAC-SHA256 para webhooks recebidos
- Protecao contra path traversal no file explorer
---
## Eventos WebSocket ## Eventos WebSocket
O servidor envia eventos tipados via WebSocket que o frontend renderiza no terminal: | Evento | Descricao |
| Evento | Descrição |
|--------|-----------| |--------|-----------|
| `execution_output` | Chunk de texto da saída do agente | | `execution_output` | Chunk de saida do agente |
| `execution_complete` | Execução finalizada com resultado | | `execution_complete` | Execucao finalizada |
| `execution_error` | Erro durante execução | | `execution_error` | Erro durante execucao |
| `pipeline_step_start` | Início de um passo do pipeline | | `execution_retry` | Tentativa de retry |
| `pipeline_step_complete` | Passo do pipeline concluído | | `pipeline_step_start` | Inicio de passo |
| `pipeline_step_complete` | Passo concluido |
| `pipeline_complete` | Pipeline finalizado | | `pipeline_complete` | Pipeline finalizado |
| `pipeline_error` | Erro em um passo do pipeline | | `pipeline_error` | Erro no pipeline |
| `pipeline_approval_required` | Passo aguardando aprovação humana | | `pipeline_approval_required` | Aguardando aprovacao humana |
| `report_generated` | Relatorio gerado |
## Segurança ---
- **HTTPS** via Caddy com certificado Let's Encrypt automático
- **Autenticação** via Bearer token (variável `AUTH_TOKEN`)
- **Rate limiting** — 100 requisições por minuto por IP
- **CORS** restrito à origin configurada
- **Timing-safe comparison** para tokens de autenticação e webhooks
- **Correlation IDs** em todas as requisições para rastreabilidade
- **Escrita atômica** em disco (temp + rename) para integridade de dados
- **Sanitização** de prompts (NUL, caracteres de controle, limite de 50.000 chars)
- **Assinatura HMAC-SHA256** para webhooks recebidos
## Stack ## Stack
- **Backend**: Node.js, Express, WebSocket (ws), node-cron, uuid, express-rate-limit | Camada | Tecnologias |
- **Frontend**: HTML, CSS, JavaScript vanilla (sem framework, sem bundler) |--------|-------------|
- **Gráficos**: Chart.js 4.x | **Backend** | Node.js 22, Express, WebSocket (ws), node-cron, uuid |
- **Ícones**: Lucide | **Frontend** | HTML, CSS, JavaScript vanilla — sem framework, sem bundler |
- **Fontes**: Inter (UI), JetBrains Mono (código/terminal) | **Graficos** | Chart.js 4.x |
- **Persistência**: Arquivos JSON em disco com escrita atômica | **Icones** | Lucide |
- **Cache**: In-memory com suporte opcional a Redis (ioredis) | **Fontes** | Inter (UI), JetBrains Mono (terminal) |
- **Infraestrutura**: Docker + Caddy + DuckDNS + Let's Encrypt | **Persistencia** | JSON em disco com escrita atomica |
| **Cache** | In-memory + Redis opcional (ioredis) |
| **Infra** | Docker, Caddy, DuckDNS, Let's Encrypt |
| **Git** | Gitea (self-hosted) |
## Licença ---
## Licenca
MIT MIT
---
<p align="center">
<sub>Desenvolvido por <a href="https://nitro-cloud.duckdns.org">Nitro Cloud</a></sub>
</p>