Traffic Inspector (Português (Brasil))
§1 Visão geral
Seção intitulada “§1 Visão geral”O que torna o Traffic Inspector único
Seção intitulada “O que torna o Traffic Inspector único”| 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) | ✗ | ✓ | ✓ | ✓ |
Arquitetura em um parágrafo
Seção intitulada “Arquitetura em um parágrafo”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.
§2 Modos de captura
Seção intitulada “§2 Modos de captura”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".
Modo 1 — AgentBridge (padrão, sempre ativo)
Seção intitulada “Modo 1 — AgentBridge (padrão, sempre ativo)”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.coma 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)
Modo 3 — Listener HTTP_PROXY (porta 8080)
Seção intitulada “Modo 3 — Listener HTTP_PROXY (porta 8080)”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"
# 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:8080export HTTPS_PROXY=http://127.0.0.1:8080Limitaçã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:8080Alcance: 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).
Comparação dos modos de captura
Seção intitulada “Comparação dos modos de captura”| 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) |
3.1 Layout
Seção intitulada “3.1 Layout”┌─ 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 ║ │└══════════════════════════════════╝══════════════════════════════════════╝3.2 Lista de requisições (painel esquerdo)
Seção intitulada “3.2 Lista de requisições (painel esquerdo)”- 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)
3.3 Painel de detalhes — 7 abas
Seção intitulada “3.3 Painel de detalhes — 7 abas”| 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 |
3.4 Controles da barra de ferramentas
Seção intitulada “3.4 Controles da barra de ferramentas”| 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) |
3.5 Painéis redimensionáveis
Seção intitulada “3.5 Painéis redimensionáveis”- 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 Recursos voltados para LLMs
Seção intitulada “§4 Recursos voltados para LLMs”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:
- 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.)
- Padrões de caminho —
/v1/chat/completions,/v1/messages,/generateContent,/v1/responsesetc. - Estrutura do corpo — detecta os campos
messages[](OpenAI/Claude),contents[](Gemini),prompteinput - Indícios do user agent —
codex,claude,gemini,antigravity,kiro,copilot,cursorna 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_deltapor índice; tratatext_delta,input_json_delta(chamadas de ferramentas) ethinking_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-256do prompt do sistema (a primeira mensagem comrole:system, o camposystemou osystemInstructiondo 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 #a3fadiciona 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.
4.5 Extração de metadados de LLM
Seção intitulada “4.5 Extração de metadados de LLM”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).
4.7 Atribuição de processo (Linux)
Seção intitulada “4.7 Atribuição de processo (Linux)”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:
- Lê
/proc/net/tcpe/proc/net/tcp6para encontrar o inode do socket correspondente à porta (parseProcNetTcpForInode, um analisador puro testável com fixtures). - Examina
/proc/<pid>/fd/em busca de um link simbólico parasocket:[<inode>]. - 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).
§5 Sessões
Seção intitulada “§5 Sessões”5.1 Gravando uma sessão
Seção intitulada “5.1 Gravando uma sessão”- Clique em “● Gravar sessão” na barra de ferramentas → insira um nome (opcional)
- O acompanhamento em tempo real continua normalmente; um indicador vermelho pulsante exibe
◉ GRAVANDO · <nome> · 00:42 · 23 reqs - Clique em “⏹ Parar” → o snapshot da sessão é salvo em
inspector_sessions+inspector_session_requests
5.2 Visualizando uma sessão gravada
Seção intitulada “5.2 Visualizando uma sessão gravada”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
5.3 Formatos de exportação
Seção intitulada “5.3 Formatos de exportação”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.
§6 Segurança
Seção intitulada “§6 Segurança”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 |
Regras rígidas aplicadas
Seção intitulada “Regras rígidas aplicadas”| 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) |
Limitações conhecidas
Seção intitulada “Limitações conhecidas”- 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.
§7 Solução de problemas
Seção intitulada “§7 Solução de problemas”Desconexão do WebSocket
Seção intitulada “Desconexão do WebSocket”Se o acompanhamento em tempo real mostrar “Desconectado”:
- Verifique se o servidor ainda está em execução:
GET /api/tools/traffic-inspector/capture-modes - Recarregue a página — o WebSocket se reconecta e recebe um novo snapshot
- 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
Conflito na porta 8080
Seção intitulada “Conflito na porta 8080”Se o modo HTTP_PROXY não iniciar:
lsof -i :8080 # localize o processoAltere a porta:
INSPECTOR_HTTP_PROXY_PORT=8888Proxy do sistema não revertido
Seção intitulada “Proxy do sistema não revertido”Se o OmniRoute falhar enquanto o modo de proxy de todo o sistema estiver ativo:
macOS:
networksetup -setwebproxystate Wi-Fi offnetworksetup -setsecurewebproxystate Wi-Fi offLinux (GNOME):
gsettings set org.gnome.system.proxy mode 'none'Windows:
netsh winhttp reset proxyO 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.
Buffer cheio
Seção intitulada “Buffer cheio”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
§8 Referência da API
Seção intitulada “§8 Referência da API”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/
Gerenciamento de solicitações
Seção intitulada “Gerenciamento de solicitações”| 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 |
WebSocket
Seção intitulada “WebSocket”| Método | Caminho | Descrição |
|---|---|---|
| GET | /ws |
Fluxo WebSocket em tempo real. Envia snapshot ao conectar e, depois, eventos new/update/clear |
Exportação
Seção intitulada “Exportação”| Método | Caminho | Descrição |
|---|---|---|
| GET | /export.har |
Exporta a lista filtrada atual como HAR 1.2 |
Hosts personalizados
Seção intitulada “Hosts personalizados”| 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 |
Modos de captura
Seção intitulada “Modos de captura”| 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/. Consultedocs/security/MITM-TPROXY-DECRYPT.md(git; não compilado em/docs).
Sessões
Seção intitulada “Sessões”| 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 |
Ingestão interna (fallback D4)
Seção intitulada “Ingestão interna (fallback D4)”| 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.
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.

- 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.