Pular para o conteúdo
OmniRoute source

Traffic Inspector (Português (Brasil))

Recurso mitmweb Charles Fiddler OmniRoute Traffic Inspector
Baseado na Web ✓ ✗ ✗ ✓
Código aberto ✓ ✗ parcial ✓
Compatível com agentes (identifica se a solicitação vem do Antigravity/Copilot/etc.) ✗ ✗ ✗ ✓
Compatível com LLMs (analisa o formato OpenAI/Anthropic/Gemini, tokens e modelo) ✗ ✗ ✗ ✓
Mapeamento de modelos visível (gemini-3-flash → claude-sonnet-4.7) ✗ ✗ ✗ ✓
Separação da latência do proxy/upstream parcial ✗ ✗ ✓
Integrado ao roteamento, fallback e custo do OmniRoute ✗ ✗ ✗ ✓
Depuração de proxy em todo o sistema (qualquer aplicativo na máquina) ✓ ✓ ✓ ✓
Captura de host personalizado (redirecionamento de DNS por host) ✓ ✓ ✓ ✓
Modo da variável de ambiente HTTP_PROXY ✓ ✓ ✓ ✓
Visualização de conversas (balões com múltiplos turnos, tool_use/tool_result) ✗ ✗ ✗ ✓
Mesclador de streams SSE (reconstrói a partir de eventos delta) ✗ ✗ ✗ ✓
Gravação de sessões (nomeadas, exportáveis como .har/.jsonl) ✗ ✓ ✓ ✓

O TrafficBuffer (src/mitm/inspector/buffer.ts) é um buffer circular compartilhado em memória (por padrão, 1000 entradas, configurável por meio de INSPECTOR_BUFFER_SIZE). Todas as fontes de captura gravam nele por meio de push(). A classe do buffer classifica cada entrada usando kindDetector.ts (determina se é uma solicitação de LLM), calcula uma contextKey (impressão digital SHA-256 do prompt do sistema) e transmite para todos os assinantes do WebSocket por meio de globalTrafficBuffer.subscribe(). O dashboard se conecta por meio de GET /api/tools/traffic-inspector/ws e recebe um snapshot ao estabelecer a conexão, seguido pelos eventos new/update/clear.


O Traffic Inspector oferece suporte a 5 fontes de captura simultâneas. Cada uma pode ser ativada ou desativada de forma independente. O campo source de cada InterceptedRequest (src/mitm/inspector/types.ts) é um dos seguintes: "agent-bridge", "custom-host", "http-proxy", "system-proxy" ou "tproxy".

Fonte: Manipuladores do AgentBridge (src/mitm/handlers/base.ts) Mecanismo: Cada chamada a intercept() em MitmHandlerBase chama hookBufferStart() antes do encaminhamento e hookBufferUpdate() após a conclusão. Nenhuma configuração adicional — funciona assim que o AgentBridge está em execução. Alcance: Os 9 agentes de IDE configurados no AgentBridge Observação: Campo source em InterceptedRequest = "agent-bridge"

Modo 2 — Hosts personalizados (redirecionamento de DNS)

Seção intitulada “Modo 2 — Hosts personalizados (redirecionamento de DNS)”

Fonte: Lista de hosts definida pelo usuário (tabela inspector_custom_hosts) Mecanismo: Adicionar um host pela interface adiciona 127.0.0.1 <host> a /etc/hosts (requer sudo). O servidor MITM existente do AgentBridge (porta 443) gera dinamicamente um certificado SNI para o novo host. Alcance: Qualquer aplicação que use o host adicionado — nenhuma alteração na configuração da aplicação é necessária Observação: source = "custom-host"

Exemplos de casos de uso:

  • Monitorar api.openai.com a partir de scripts Python
  • Depurar my-internal-llm.company.com
  • Capturar tráfego de dispositivos móveis na mesma rede (por meio de falsificação ARP — avançado)

Fonte: Aplicações que usam as variáveis de ambiente HTTP_PROXY/HTTPS_PROXY Mecanismo: Listener secundário na porta 8080 (src/mitm/inspector/httpProxyServer.ts) que atua como um proxy HTTP/HTTPS explícito padrão. Aceita túneis CONNECT (HTTPS) e requisições HTTP diretas. Alcance: Qualquer aplicação que respeite a variável de ambiente HTTP_PROXY — nenhuma alteração de DNS, sem sudo Observação: source = "http-proxy"

Janela do terminal
# Captura rápida para um único comando:
HTTPS_PROXY=http://127.0.0.1:8080 curl https://api.openai.com/v1/models
# Captura persistente em uma sessão do shell:
export HTTP_PROXY=http://127.0.0.1:8080
export HTTPS_PROXY=http://127.0.0.1:8080

Limitação de TLS: Túneis HTTPS CONNECT são capturados somente como metadados (host, porta, temporização) — o corpo TLS não é descriptografado por padrão. Ative a opção “Descriptografar HTTPS no modo proxy” (opcional, requer que o certificado do AgentBridge seja confiável) para inspecionar o corpo completo.

Conflito de porta: Se a porta 8080 estiver em uso, o AgentBridge retornará um erro 409 estruturado. Altere a porta por meio da variável de ambiente INSPECTOR_HTTP_PROXY_PORT.

Modo 4 — Proxy de todo o sistema (avançado, opcional)

Seção intitulada “Modo 4 — Proxy de todo o sistema (avançado, opcional)”

Fonte: Configurações de proxy do sistema operacional (aplicam-se a todas as aplicações da máquina) Mecanismo: Usa APIs do sistema operacional para redirecionar todo o tráfego HTTP/HTTPS pelo listener HTTP_PROXY:

  • macOS: networksetup -setwebproxy / -setsecurewebproxy
  • Linux: gsettings set org.gnome.system.proxy + /etc/environment
  • Windows: netsh winhttp set proxy 127.0.0.1:8080 Alcance: Todas as aplicações da máquina que respeitem as configurações de proxy do sistema Observação: source = "system-proxy"

Mecanismos de segurança:

  • Temporizador de desativação automática (padrão de 30 min, configurável por meio de INSPECTOR_SYSTEM_PROXY_GUARD_MINUTES)
  • O estado anterior do proxy do sistema é salvo no banco de dados e restaurado ao reverter
  • O painel exibe o aviso “Revertendo o proxy do sistema” se o usuário sair da página enquanto ele estiver ativo
  • A interface exibe o selo ⚠ Avançado + uma caixa de seleção de confirmação explícita

Modo 5 — Descriptografia transparente com TPROXY (Linux, root, opcional)

Seção intitulada “Modo 5 — Descriptografia transparente com TPROXY (Linux, root, opcional)”

Fonte: TPROXY do kernel + roteamento baseado em políticas (src/mitm/tproxy/) Mecanismo: Marca novas conexões TCP locais de saída destinadas a uma porta-alvo (padrão 443) em mangle OUTPUT; uma regra ip rule redireciona os pacotes marcados para entrega local; e o alvo TPROXY de mangle PREROUTING os entrega a um listener transparente (IP_TRANSPARENT) (porta padrão 8443). O listener encerra o TLS com um certificado de entidade final emitido sob demanda para cada nome de host SNI por uma CA dinâmica, captura a troca descriptografada e encaminha a requisição, criptografada novamente, ao destino original. Alcance: Hosts de destino arbitrários na porta-alvo — sem falsificação de /etc/hosts, sem variável de ambiente HTTP_PROXY, sem alteração do proxy de todo o sistema. O processo interceptado não precisa de nenhuma alteração de configuração, mas deve confiar na CA dinâmica. Observação: source = "tproxy"

Requisitos: Somente Linux (IP_TRANSPARENT está disponível apenas no Linux), a capacidade CAP_NET_ADMIN (root) e um addon N-API nativo que deve ser compilado com uma cadeia de ferramentas C (npm run build:native:tproxy). Quando não estiver disponível, a opção do painel ficará desabilitada com a dica “A descriptografia TPROXY requer Linux + root + o addon nativo”. As regras de firewall são aplicadas/revertidas de forma transacional (uma falha nunca deixa uma regra mangle para trás) e são removidas na reinicialização. Um mecanismo antirrecursão baseado em SO_MARK impede que o encaminhamento recriptografado do próprio proxy seja interceptado novamente.

Este é um subsistema substancial com seu próprio guia dedicado para operadores — consulte docs/security/MITM-TPROXY-DECRYPT.md (git; não compilado em /docs) para ver a configuração completa do firewall, a CA dinâmica por SNI + o instalador no repositório de confiança, a rota exclusivamente local, os detalhes do mecanismo antirrecursão e o esquema de configuração. A opção é controlada por GET / POST / DELETE /api/tools/agent-bridge/tproxy (observação: a rota está sob o prefixo do AgentBridge, não sob o prefixo do Traffic Inspector).

Modo Configuração Sudo? Abrangência Observações
1. AgentBridge Automática Uma vez (cert+hosts) 9 agentes de IDE Ativado por padrão
2. Hosts personalizados Entrada por host Sim (arquivo hosts) Qualquer app que use esse host Persistido no banco de dados
3. HTTP_PROXY export HTTPS_PROXY=... Não Apps que respeitam variáveis de ambiente Porta 8080, sem descriptografia TLS por padrão
4. Todo o sistema Alternar + confirmar Sim Todos os apps na máquina Desativação automática em 30 min
5. Descriptografia TPROXY Alternar (Linux + addon nativo) Sim (root + instalação da CA) Qualquer host na porta de destino Descriptografa hosts arbitrários; desativado por padrão — consulte docs/security/MITM-TPROXY-DECRYPT.md (git; não compilado em /docs)

┌─ Inspetor de tráfego ──────────────────────────────────────────────────┐
│ ┌─ Barra de fontes de captura ─────────────────────────────────────┐ │
│ │ [✓ AgentBridge] [✓ Hosts personalizados (3)] [○ HTTP_PROXY] │ │
│ │ [○ Sistema] │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ ┌─ Barra de filtros/controles ────────────────────────────────────┐ │
│ │ Perfil: (●) Apenas LLM (○) Personalizado (○) Todos │ │
│ │ [⎉ Pausar] [🗑 Limpar] [⬇ .har] [● GRAVAR sessão] ● ao vivo 482/1k│ │
│ └─────────────────────────────────────────────────────────────────────┘ │
├══◀▶══════════════════════════════╬══════════════════════════════════════╤╡
│ LISTA DE REQUISIÇÕES ║ PAINEL DE DETALHES ▲ │
│ (redimensionável) ║ [Conversa][Cabeçalhos][Requisição] │ │
│ ────────────────────────────── │ ║ [Resposta][Tempos][LLM][Estatísticas]│ │
│ ▎ 14:32 POST 200 12k AG openai ║ ▼ │
│ ▎ 14:31 POST 200 8k CP openai ║ │
│ ▎ 14:31 POST 503 ⚠ KR ... ║ │
│ ▎ 14:30 GET 200 3k 🌐 personalizado ║ │
└══════════════════════════════════╝══════════════════════════════════════╝
  • Virtualizada (useVirtualList + ResizeObserver): processa 1000 itens sem travar
  • Rolagem automática com opção para pausar durante a inspeção
  • Status codificado por cores: verde (2xx), amarelo (3xx), vermelho (4xx/5xx), cinza (em andamento)
  • Emoji do agente: 🔵 Antigravity, 🟢 Copilot, 🟠 Kiro, 🟣 Codex, 🔷 Cursor, 🟤 Zed, 🟡 Claude Code, ⚫ Open Code, 🌐 host personalizado
  • Barra de cores do contexto: borda esquerda de 1px colorida por contextKey (SHA-256 do prompt do sistema) — agrupa visualmente conversas relacionadas
  • Corpo com carregamento tardio: somente o corpo da requisição selecionada é materializado nas abas de detalhes (evita renderizar 1000 corpos de 1 MB)
Aba Conteúdo Observações
Conversa Balões de chat com vários turnos (sistema/usuário/assistente + tool_use/tool_result) Normalizados a partir do formato de qualquer provedor; exibidos apenas para detectedKind === "llm"
Cabeçalhos Tabelas de cabeçalhos da requisição e da resposta Cabeçalhos sensíveis (Authorization, Cookie, api-key) mascarados por padrão; opção “Mostrar segredos”
Requisição Corpo bruto, visualização em árvore do JSON, selo do campo de modelo JSON formatado ou texto bruto
Resposta Corpo bruto ou lista de eventos SSE; opção “Bruto ↔ Mesclado” O mesclador de SSE reconstrói a mensagem final a partir de eventos delta
Tempos Cascata: sobrecarga do proxy versus latência do upstream Total, TTFB e tamanho
Detalhes de LLM Provedor, modelo, quantidade de mensagens, tokens de entrada/saída, estimativa de custo, destino mapeado Exibidos apenas para requisições de LLM
Estatísticas Recharts: linha do tempo de latência, gráfico de barras de tokens, dispersão de chamadas de ferramentas Exibidas apenas quando uma sessão gravada é carregada
Controle Ação
⎉ Pausar Interrompe a renderização de novas requisições; o selo “X novas” acumula
🗑 Limpar Limpa a lista da IU (o buffer do servidor não é afetado)
⬇ Exportar .har Baixa a lista filtrada atual como arquivo HAR
● Gravar sessão Inicia uma sessão de gravação com nome
Seletor de perfil Apenas LLM / Hosts personalizados / Todos
Filtro de host Correspondência de substring no campo host
Filtro de agente Lista suspensa: Todos / por agente
Filtro de status Todos / 2xx / 3xx / 4xx / 5xx / erro
Filtro de origem Todos / agent-bridge / custom-host / http-proxy / system-proxy / tproxy
Filtro Ao vivo Mostra somente requisições em andamento (abertas) — opção liveOnly (consulte §4.6)
  • A lista e o painel de detalhes são separados por uma alça de arrasto
  • Largura da lista: mín. de 280px, máx. de 720px, persistida em localStorage (inspector.listWidth)
  • Recolhível para uma barra de 48px (somente ícones); clique em uma linha da barra para expandir

4.1 Detector de tipo (src/mitm/inspector/kindDetector.ts)

Seção intitulada “4.1 Detector de tipo (src/mitm/inspector/kindDetector.ts)”

Classifica cada solicitação como "llm", "app" ou "unknown" usando 4 sinais:

  1. Registro de hosts — cerca de 18 nomes de host conhecidos de APIs de LLMs (OpenAI, Anthropic, Gemini, Groq, Mistral, Together, Fireworks, Cohere, Perplexity, Hugging Face, OpenRouter, xAI, Moonshot etc.)
  2. Padrões de caminho — /v1/chat/completions, /v1/messages, /generateContent, /v1/responses etc.
  3. Estrutura do corpo — detecta os campos messages[] (OpenAI/Claude), contents[] (Gemini), prompt e input
  4. Indícios do user agent — codex, claude, gemini, antigravity, kiro, copilot, cursor na string de UA

Hosts personalizados adicionados pelo Modo 2 herdam seu kind da entrada do formulário (o padrão é "custom").

4.2 Mesclador de SSE (src/mitm/inspector/sseMerger.ts)

Seção intitulada “4.2 Mesclador de SSE (src/mitm/inspector/sseMerger.ts)”

Implementação independente de sala limpa. A análise de eventos segue o algoritmo de eventos enviados pelo servidor do WHATWG, enquanto a reconstrução segue os esquemas públicos de streaming da OpenAI, Anthropic e Gemini.

Reconstrói a mensagem final do assistente a partir de eventos delta SSE brutos:

  • Anthropic: acumula content_block_delta por índice; trata text_delta, input_json_delta (chamadas de ferramentas) e thinking_delta
  • OpenAI: acumula opções/chamadas de ferramentas de Chat Completions e itens de saída da Responses API por índice
  • Gemini: acumula candidates[i].content.parts
  • Desconhecido: retorna os eventos brutos sem alterações

A aba Response exibe um controle: “Eventos brutos ↔ Mesclados”.

4.3 Normalizador de conversas (src/mitm/inspector/conversationNormalizer.ts)

Seção intitulada “4.3 Normalizador de conversas (src/mitm/inspector/conversationNormalizer.ts)”

Implementação independente de sala limpa. A normalização é definida por contratos locais de caixa-preta e pelos esquemas públicos de mensagens da OpenAI, Anthropic e Gemini; nenhuma implementação de código-fonte upstream é usada.

Converte os formatos de mensagens da OpenAI, Anthropic e Gemini em um único NormalizedConversation antes da renderização:

interface NormalizedConversation {
request: NormalizedTurn[]; // mensagens / conteúdos / prompt do corpo da solicitação
response: NormalizedTurn[]; // resposta do assistente (mesclada via sseMerger)
contextKey: string | null; // impressão digital SHA-256 do prompt do sistema
}

Tipos de bloco: text, tool_use, tool_result. A aba Conversation usa essa estrutura independentemente do provedor.

4.4 Colorização da chave de contexto (src/mitm/inspector/contextKey.ts)

Seção intitulada “4.4 Colorização da chave de contexto (src/mitm/inspector/contextKey.ts)”
  • Calcula o SHA-256 do prompt do sistema (a primeira mensagem com role:system, o campo system ou o systemInstruction do Gemini)
  • Retorna um prefixo hexadecimal de 12 caracteres ("a3f9c2...")
  • O frontend mapeia a chave para uma cor HSL determinística na barra da borda esquerda
  • Filtro “mesmo contexto”: clicar no chip ctx #a3f adiciona um filtro para mostrar apenas solicitações com a mesma impressão digital

Isso facilita a distinção visual entre diferentes “personas” ou tarefas em execução na mesma sessão do agente.

Para solicitações de LLM, a aba LLM Details extrai:

interface LlmMetadata {
provider: string | null; // "openai" | "anthropic" | "gemini" | ...
apiKind: string | null; // "chat.completions" | "messages" | "embeddings" | ...
model: string | null; // do corpo da solicitação ou da resposta
messages: number; // quantidade de turnos
tokensIn: number | null; // usage.prompt_tokens / usage.input_tokens
tokensOut: number | null; // usage.completion_tokens / usage.output_tokens
streamed: boolean; // true se for uma resposta SSE
mappedTo: string | null; // cabeçalho x-omniroute-mapped
costEstimateUsd: number | null; // custo estimado com base nos preços do OmniRoute
}

4.6 Filtro em tempo real de solicitações em andamento

Seção intitulada “4.6 Filtro em tempo real de solicitações em andamento”

O campo status da solicitação é number | "in-flight" | "error" — uma entrada é adicionada como "in-flight" no momento em que a solicitação começa e é atualizada no próprio local quando a resposta (ou o erro) chega. O controle “Ao vivo” da barra de ferramentas (liveOnly, chave de i18n trafficInspector.liveOnly) restringe a lista às entradas cujo status === "in-flight", permitindo acompanhar conexões abertas em tempo real.

O filtro é um predicado puro no lado do cliente em src/lib/inspector/matchesTrafficFilter.ts:

if (f.liveOnly && req.status !== "in-flight") return false;

O estado do controle fica em useTrafficFilters (os hooks do painel do inspetor) e é combinado com os outros filtros (perfil, host, agente, origem, status, contexto).

No Linux, cada solicitação interceptada pode ser atribuída ao processo local de origem. Dois campos opcionais são adicionados a InterceptedRequest:

pid?: number; // id do processo de origem (somente Linux)
processName?: string; // nome do processo de origem (somente Linux)

src/mitm/inspector/processAttribution.ts mapeia a porta efêmera do cliente da conexão para um PID + nome por meio das seguintes etapas:

  1. Lê /proc/net/tcp e /proc/net/tcp6 para encontrar o inode do socket correspondente à porta (parseProcNetTcpForInode, um analisador puro testável com fixtures).
  2. Examina /proc/<pid>/fd/ em busca de um link simbólico para socket:[<inode>].
  3. Lê o nome do processo em /proc/<pid>/comm.

Um cache com TTL de 1 segundo limita o custo da varredura do procfs sob carga. A atribuição é realizada em melhor esforço — qualquer falha resulta em null e nunca bloqueia a captura. No macOS/Windows, a função retorna null (stub; o suporte a lsof/GetExtendedTcpTable será adicionado posteriormente).


  1. Clique em “● Gravar sessão” na barra de ferramentas → insira um nome (opcional)
  2. O acompanhamento em tempo real continua normalmente; um indicador vermelho pulsante exibe ◉ GRAVANDO · <nome> · 00:42 · 23 reqs
  3. Clique em “⏹ Parar” → o snapshot da sessão é salvo em inspector_sessions + inspector_session_requests

O menu suspenso Sessões na barra de ferramentas lista as sessões salvas. Ao selecionar uma:

  • Carrega o snapshot da sessão (estado congelado)
  • Um banner exibe: Visualizando a sessão gravada "<nome>" — [Voltar ao tempo real]
  • A aba Estatísticas fica disponível com agregações do Recharts

Cada sessão pode ser exportada como:

Formato Uso
HAR (HTTP Archive 1.2) Compatível com Chrome DevTools, Charles e Fiddler — importe para realizar análises offline
JSONL Um InterceptedRequest por linha — compatível com o formato llm-interceptor

Exporte por meio de GET /api/tools/traffic-inspector/sessions/{id}/export.har ou do botão ⬇ no menu suspenso Sessões.


O Traffic Inspector exibe todo o tráfego HTTPS interceptado, incluindo cabeçalhos de autorização e corpos de requisições. Os seguintes controles estão implementados:

Controle Detalhes
LOCAL_ONLY Todas as rotas e o endpoint WebSocket são restritos ao loopback (imposto em routeGuard.ts antes da autenticação)
Mascaramento de segredos O scanner linear maskSecret() oculta credenciais Bearer da RFC 6750, chaves com prefixos de provedores e tokens opacos longos antes de TrafficBuffer.push()
Limite de tamanho do corpo Corpos > INSPECTOR_MAX_BODY_KB (padrão: 1024 KB) são truncados com o aviso "(truncado por motivos de desempenho)"
Sanitização de cabeçalhos Os nomes são convertidos em letras minúsculas; cabeçalhos de enquadramento/salto a salto e de autenticação de proxy são descartados; cookies são totalmente ocultados; valores de credenciais são delegados a maskSecret()
CSP Política de Segurança de Conteúdo rigorosa nas páginas do Traffic Inspector para impedir XSS por meio de corpos de respostas injetados
Sem persistência por padrão O TrafficBuffer é mantido na memória e perdido quando o servidor é reiniciado. As sessões são persistidas somente quando gravadas explicitamente
Regra Aplicação
#12 sanitizeErrorMessage Todas as respostas de erro HTTP das rotas do Traffic Inspector são sanitizadas
#15 + #17 isLocalOnlyPath() /api/tools/traffic-inspector/ é LOCAL_ONLY + SPAWN_CAPABLE (comandos de proxy do sistema)
  • O modo de proxy para todo o sistema afeta todos os aplicativos da máquina, incluindo clientes VPN e SSO. Sempre o utilize com o temporizador de desativação automática. Não o utilize em máquinas compartilhadas.
  • HTTPS por túnel CONNECT: o Modo 3 (HTTP_PROXY) captura apenas metadados do túnel para destinos HTTPS, a menos que a interceptação TLS esteja habilitada. Isso é proposital — a captura transparente sem que o certificado do AgentBridge seja considerado confiável interromperia a verificação TLS desses aplicativos.
  • Strings codificadas diretamente em alguns componentes: alguns componentes da interface (F7/F8) têm um pequeno número de strings codificadas diretamente que ainda não são cobertas por chaves de i18n. Elas estão documentadas como uma Limitação Conhecida no relatório de lacunas de i18n; serão migradas em uma etapa posterior. As strings afetadas são rótulos decorativos da interface que não precisam de tradução para o uso funcional.

Se o acompanhamento em tempo real mostrar “Desconectado”:

  1. Verifique se o servidor ainda está em execução: GET /api/tools/traffic-inspector/capture-modes
  2. Recarregue a página — o WebSocket se reconecta e recebe um novo snapshot
  3. Se o servidor tiver sido reiniciado, o buffer em memória terá sido limpo — as entradas antigas não estarão mais disponíveis, a menos que uma sessão tenha sido gravada

Se o modo HTTP_PROXY não iniciar:

Janela do terminal
lsof -i :8080 # localize o processo

Altere a porta:

.env
INSPECTOR_HTTP_PROXY_PORT=8888

Se o OmniRoute falhar enquanto o modo de proxy de todo o sistema estiver ativo:

macOS:

Janela do terminal
networksetup -setwebproxystate Wi-Fi off
networksetup -setsecurewebproxystate Wi-Fi off

Linux (GNOME):

Janela do terminal
gsettings set org.gnome.system.proxy mode 'none'

Windows:

Janela do terminal
netsh winhttp reset proxy

O painel também oferecerá a opção “Reverter proxy do sistema” no próximo carregamento se detectar que o estado no banco de dados indica que o proxy estava ativo.

Quando o buffer atinge INSPECTOR_BUFFER_SIZE (padrão: 1000), as novas entradas substituem as mais antigas. Se solicitações importantes estiverem sendo perdidas:

  • Aumente INSPECTOR_BUFFER_SIZE (por exemplo, 5000) — isso troca memória por retenção
  • Grave uma sessão para persistir no banco de dados o intervalo relevante

Todas as rotas são LOCAL_ONLY (somente loopback) e SPAWN_CAPABLE (comandos de proxy do sistema). Consulte src/server/authz/routeGuard.ts.

Caminho base: /api/tools/traffic-inspector/

Método Caminho Descrição
GET /requests Lista solicitações (filtrável: ?profile=llm&host=&agent=&status=&source=&sessionId=)
GET /requests/{id} Detalhes de uma única solicitação
DELETE /requests Limpa o buffer em memória
POST /requests/{id}/replay Executa novamente a mesma solicitação por meio do roteador do OmniRoute
PUT /requests/{id}/annotation Salva ou atualiza uma observação em uma solicitação
Método Caminho Descrição
GET /ws Fluxo WebSocket em tempo real. Envia snapshot ao conectar e, depois, eventos new/update/clear
Método Caminho Descrição
GET /export.har Exporta a lista filtrada atual como HAR 1.2
Método Caminho Descrição
GET /hosts Lista hosts personalizados
POST /hosts Adiciona um host (edita /etc/hosts automaticamente)
DELETE /hosts/{host} Remove o host
PATCH /hosts/{host} Alterna enabled
Método Caminho Descrição
GET /capture-modes Estado dos modos AgentBridge / hosts personalizados / HTTP_PROXY / proxy do sistema + a opção tls-intercept
POST /capture-modes/http-proxy Inicia/interrompe o listener HTTP_PROXY ({action: "start"|"stop"})
POST /capture-modes/system-proxy Aplica/reverte o proxy de todo o sistema ({action: "apply"|"revert"})
POST /capture-modes/tls-intercept Alterna a descriptografia do corpo HTTPS no modo proxy ({enabled: boolean})

A descriptografia TPROXY (modo de captura 5) é controlada por uma rota separada sob o prefixo AgentBridge — GET / POST / DELETE /api/tools/agent-bridge/tproxy — e não sob /api/tools/traffic-inspector/. Consulte docs/security/MITM-TPROXY-DECRYPT.md (git; não compilado em /docs).

Método Caminho Descrição
POST /sessions Inicia a gravação ({name?: string})
PATCH /sessions/{id} Interrompe ou renomeia ({action: "stop"|"rename", name?: string})
GET /sessions Lista todas as sessões salvas
GET /sessions/{id} Snapshot da sessão (todas as solicitações)
DELETE /sessions/{id} Exclui a sessão
GET /sessions/{id}/export.har Exporta a sessão como HAR 1.2
Método Caminho Descrição
POST /internal/ingest Aceita uma solicitação interceptada do caminho de passagem de server.cjs; exige o cabeçalho INSPECTOR_INTERNAL_INGEST_TOKEN

Esquemas OpenAPI completos: docs/openapi.yaml → tag Traffic Inspector.


Código-fonte do OmniRoute (a58000c7685f)

HagiCode

HagiCode é um ambiente de programação com agentes, fluxos estruturados, execução multiagente e visualizações Hero Dungeon.

Transforme ideias em software útil com um fluxo de trabalho com agentes mais inteligente, rápido e agradável.

Interface principal do HagiCode no tema claro
  • SmartFluxos estruturados transformam intenções em um caminho executável da ideia à entrega.
  • EfficientFluxos multiagente mantêm pesquisa, implementação e revisão em andamento simultaneamente.
  • FunO Hero Dungeon torna longas sessões de programação mais visuais e colaborativas.
Acessar HagiCode