From a1d3ce707cce750cffbfec7316aad8c2aaf08c02 Mon Sep 17 00:00:00 2001 From: Fred Date: Fri, 27 Feb 2026 23:46:05 -0300 Subject: [PATCH 1/5] =?UTF-8?q?Corrigir=20E2BIG=20em=20pipelines,=20adicio?= =?UTF-8?q?nar=20diret=C3=B3rio=20de=20projeto=20e=20retomada?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 1 + public/css/styles.css | 19 ++++ public/index.html | 10 +- public/js/api.js | 1 + public/js/app.js | 2 + public/js/components/history.js | 15 +++ public/js/components/pipelines.js | 19 +++- server.js | 1 + src/agents/executor.js | 32 ++++-- src/agents/pipeline.js | 178 +++++++++++++++++++++++++++++- src/routes/api.js | 12 ++ 11 files changed, 274 insertions(+), 16 deletions(-) diff --git a/Dockerfile b/Dockerfile index 6bfa586..f5936ce 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,6 +2,7 @@ FROM node:22-alpine WORKDIR /app COPY package*.json ./ RUN npm ci --omit=dev +RUN npm install -g @anthropic-ai/claude-code COPY . . RUN mkdir -p data ENV HOST=0.0.0.0 diff --git a/public/css/styles.css b/public/css/styles.css index 1636ae6..1c55dde 100644 --- a/public/css/styles.css +++ b/public/css/styles.css @@ -3489,6 +3489,25 @@ tbody tr:hover td { } } +.pipeline-workdir-badge { + display: inline-flex; + align-items: center; + gap: 6px; + padding: 3px 10px; + background-color: var(--bg-tertiary); + border: 1px solid var(--border-primary); + border-radius: 6px; + font-size: 11px; + color: var(--text-muted); + margin-bottom: 4px; +} + +.pipeline-workdir-badge code { + font-family: 'JetBrains Mono', monospace; + font-size: 11px; + color: var(--text-secondary); +} + .pipeline-flow { display: flex; flex-direction: column; diff --git a/public/index.html b/public/index.html index c541e2c..27048e8 100644 --- a/public/index.html +++ b/public/index.html @@ -1138,6 +1138,14 @@ +
+ + +

Caminho onde o projeto será criado/trabalhado. Todos os passos usarão este diretório.

+
+ - ${(exec.status === 'error' && exec.type === 'pipeline' && exec.failedAtStep !== undefined) ? ` + ${(exec.status === 'error' && exec.type === 'pipeline') ? ` + + + +
+ + +
+ + + +
+ +
+
+
+
+ +
+
+ Total de Agentes + 0 +
+
+
+
+ +
+
+ Agentes Ativos + 0 +
+
+
+
+ +
+
+ Execuções Hoje + 0 +
+
+
+
+ +
+
+ Agendamentos + 0 +
+
+
+
+ +
+
+ Custo Hoje + $0.0000 +
+
+
+
+ +
+
+ Webhooks Ativos + 0 +
+
+
+ +
+
+
+

Execuções

+ +
+ +
+
+
+

Custo (USD)

+
+ +
+
+
+
+
+

Status

+
+ +
+
+
+

Top Agentes

+
+ +
+
+
+

Taxa de Sucesso

+
+ +
+
+ +
+
+
+

Atividade Recente

+ +
+
+
    +
  • + + Nenhuma execução recente +
  • +
+
+
+ +
+
+

Status do Sistema

+
+
+
    +
  • +
    + + Servidor HTTP +
    + Online +
  • +
  • +
    + + WebSocket +
    + Desconectado +
  • +
  • +
    + + Armazenamento +
    + OK +
  • +
  • +
    + + Claude CLI +
    + Verificando... +
  • +
+
+
+
+
+ + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + diff --git a/public/index.html b/public/index.html index 94d4db0..7117b28 100644 --- a/public/index.html +++ b/public/index.html @@ -1,1386 +1,544 @@ - - - Agents Orchestrator - - - - - + + +AgentFlow — Orquestre Agentes IA + + + -
+ + - +
+
+

Pipelines Visuais

+

Editor drag-and-drop com canvas HTML5. Monte fluxos complexos conectando agentes em sequência, com sumarização automática entre steps.

+
-
-
-
-

Dashboard

-
-
-
- - 0 - ativas -
- - - - -
- - -
-
-
+
+
+

Execução em Tempo Real

+

Streaming via WebSocket com terminal integrado. Veja cada token sendo gerado, chamadas de ferramenta e custos ao vivo.

+
-
+
+
+

Agendamento Inteligente

+

Cron scheduling com retry automático e backoff exponencial. Agende execuções recorrentes e nunca mais esqueça uma tarefa.

+
-
-
-
-
- -
-
- Total de Agentes - 0 -
-
-
-
- -
-
- Agentes Ativos - 0 -
-
-
-
- -
-
- Execuções Hoje - 0 -
-
-
-
- -
-
- Agendamentos - 0 -
-
-
-
- -
-
- Custo Hoje - $0.0000 -
-
-
-
- -
-
- Webhooks Ativos - 0 -
-
-
+
+
👤
+

Human-in-the-Loop

+

Aprovação manual entre steps do pipeline. Defina pontos de controle onde um humano valida antes de prosseguir.

+
-
-
-
-

Execuções

- -
- -
-
-
-

Custo (USD)

-
- -
-
-
-
-
-

Status

-
- -
-
-
-

Top Agentes

-
- -
-
-
-

Taxa de Sucesso

-
- -
-
+
+
+

Versionamento

+

Histórico completo de alterações com rollback instantâneo. Cada edição gera uma versão que pode ser restaurada.

+
-
-
-
-

Atividade Recente

- -
-
-
    -
  • - - Nenhuma execução recente -
  • -
-
-
+
+
🔗
+

Webhooks & Integrações

+

Conecte com GitHub, CI/CD ou qualquer endpoint HTTP. Assinatura HMAC-SHA256 compatível com GitHub Webhooks.

+
-
-
-

Status do Sistema

-
-
-
    -
  • -
    - - Servidor HTTP -
    - Online -
  • -
  • -
    - - WebSocket -
    - Desconectado -
  • -
  • -
    - - Armazenamento -
    - OK -
  • -
  • -
    - - Claude CLI -
    - Verificando... -
  • -
-
-
-
-
+
+
+ - + +
+
+ +

Planos para cada necessidade

+

Comece pequeno e escale conforme sua operação cresce. Sem surpresas.

+
- + -
+
+
-
-
-

Histórico de Disparos

-
-
-

Nenhum disparo registrado

-
-
- + +
+
+ +

Perguntas Frequentes

+

Tudo o que você precisa saber antes de começar.

+
- +
+
+Como funciona a integração com Claude Code? + +
+
O AgentFlow executa o CLI do Claude Code como subprocesso, herdando todas as suas capacidades — ferramentas, permissões, sessões. O output é parseado em tempo real e transmitido via WebSocket para seu navegador. Isso significa que qualquer coisa que o Claude Code faz no terminal, o AgentFlow faz na interface web.
+
- +
+
+Posso cancelar a qualquer momento? + +
+
Sim. Todos os planos são mensais sem fidelidade. Você pode fazer upgrade, downgrade ou cancelar quando quiser. Seus dados ficam disponíveis por 30 dias após o cancelamento.
+
- +
+
+Vocês oferecem teste gratuito? + +
+
Sim! Oferecemos 14 dias de teste gratuito no plano Pro, sem precisar de cartão de crédito. Você pode explorar todas as funcionalidades e decidir com calma qual plano faz mais sentido para sua operação.
+
- +
+
+
- + - - - - - - - - - - - - - - - - - +// Mobile nav +const style = document.createElement('style'); +style.textContent = ` +@media(max-width:900px){ + .nav-links.show{display:flex!important;flex-direction:column;position:absolute;top:100%;left:0;right:0;background:rgba(9,9,11,.95);backdrop-filter:blur(20px);padding:24px;gap:16px;border-bottom:1px solid var(--glass-border)} +}`; +document.head.appendChild(style); + From af1c59b75c8fa4eea3d9ce5fc9477f1f81e80bea Mon Sep 17 00:00:00 2001 From: Frederico Castro Date: Sat, 28 Feb 2026 00:40:39 -0300 Subject: [PATCH 5/5] Desabilitar cache HTTP para arquivos HTML --- server.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/server.js b/server.js index 8268e58..87acf69 100644 --- a/server.js +++ b/server.js @@ -111,7 +111,18 @@ app.use(express.json({ verify: (req, res, buf) => { req.rawBody = buf || Buffer.alloc(0); }, })); app.use('/hook', hookLimiter, verifyWebhookSignature, hookRouter); -app.use(express.static(join(__dirname, 'public'), { maxAge: '1h', etag: true })); +app.use(express.static(join(__dirname, 'public'), { + etag: true, + setHeaders(res, filePath) { + if (filePath.endsWith('.html')) { + res.setHeader('Cache-Control', 'no-cache, no-store, must-revalidate'); + res.setHeader('Pragma', 'no-cache'); + res.setHeader('Expires', '0'); + } else { + res.setHeader('Cache-Control', 'public, max-age=3600'); + } + }, +})); app.use('/api', apiRouter); const connectedClients = new Map();