fix(i18n): refresh translation state hash for architecture/ARCHITECTURE.md

The FASE 7 frontmatter sync touched docs/architecture/ARCHITECTURE.md but
.i18n-state.json was not refreshed, so npm run i18n:check reported
source-changed drift on every subsequent run.

Resolution: re-ran the hash-based translator end-to-end (npm run i18n:run
-- --locale=pt-BR --files=docs/architecture/ARCHITECTURE.md) which:

  - retranslated the source through the production backend (14 chunks,
    75 KB pt-BR output);
  - persisted the new source/target SHA-256 pair in .i18n-state.json
    (target_hash now matches the regenerated translation);
  - left every other source/locale pair untouched.

After the run:
  npm run i18n:check → PASS - all sources and targets match recorded hashes.

The pre-commit i18n drift advisory will no longer warn for this file.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
diegosouzapw
2026-05-13 19:58:52 -03:00
parent 52f29f2347
commit b23127e53c
2 changed files with 186 additions and 177 deletions

View File

@@ -11,12 +11,12 @@
}
},
"docs/architecture/ARCHITECTURE.md": {
"source_hash": "573ccfe1a49d74999101460a3ee055bd07109c832d15dc9a4c6ef61ee8433302",
"source_hash": "7e691870a4f6f25a535a023206cff5ef88aed619c9734851ebdacdd3a3bafcc8",
"locales": {
"pt-BR": {
"source_hash": "573ccfe1a49d74999101460a3ee055bd07109c832d15dc9a4c6ef61ee8433302",
"target_hash": "6daa8b7db866dd2781efd9ae02a576cf9f2cce2a8597b02a808c341e1d1335c3",
"updated_at": "2026-05-13T20:09:25.192Z"
"source_hash": "7e691870a4f6f25a535a023206cff5ef88aed619c9734851ebdacdd3a3bafcc8",
"target_hash": "3e2a58f341f20b29cf245330b094bec40ffeede43526b4d416c660c37abca8db",
"updated_at": "2026-05-13T22:58:05.984Z"
}
}
}

View File

@@ -1,26 +1,36 @@
# OmniRoute Architecture (Português (Brasil))
# ARCHITECTURE (Português (Brasil))
🌐 **Languages:** 🇺🇸 [English](../../../../architecture/ARCHITECTURE.md) · 🇸🇦 [ar](../../../ar/docs/architecture/ARCHITECTURE.md) · 🇧🇬 [bg](../../../bg/docs/architecture/ARCHITECTURE.md) · 🇧🇩 [bn](../../../bn/docs/architecture/ARCHITECTURE.md) · 🇨🇿 [cs](../../../cs/docs/architecture/ARCHITECTURE.md) · 🇩🇰 [da](../../../da/docs/architecture/ARCHITECTURE.md) · 🇩🇪 [de](../../../de/docs/architecture/ARCHITECTURE.md) · 🇪🇸 [es](../../../es/docs/architecture/ARCHITECTURE.md) · 🇮🇷 [fa](../../../fa/docs/architecture/ARCHITECTURE.md) · 🇫🇮 [fi](../../../fi/docs/architecture/ARCHITECTURE.md) · 🇫🇷 [fr](../../../fr/docs/architecture/ARCHITECTURE.md) · 🇮🇳 [gu](../../../gu/docs/architecture/ARCHITECTURE.md) · 🇮🇱 [he](../../../he/docs/architecture/ARCHITECTURE.md) · 🇮🇳 [hi](../../../hi/docs/architecture/ARCHITECTURE.md) · 🇭🇺 [hu](../../../hu/docs/architecture/ARCHITECTURE.md) · 🇮🇩 [id](../../../id/docs/architecture/ARCHITECTURE.md) · 🇮🇩 [in](../../../in/docs/architecture/ARCHITECTURE.md) · 🇮🇹 [it](../../../it/docs/architecture/ARCHITECTURE.md) · 🇯🇵 [ja](../../../ja/docs/architecture/ARCHITECTURE.md) · 🇰🇷 [ko](../../../ko/docs/architecture/ARCHITECTURE.md) · 🇮🇳 [mr](../../../mr/docs/architecture/ARCHITECTURE.md) · 🇲🇾 [ms](../../../ms/docs/architecture/ARCHITECTURE.md) · 🇳🇱 [nl](../../../nl/docs/architecture/ARCHITECTURE.md) · 🇳🇴 [no](../../../no/docs/architecture/ARCHITECTURE.md) · 🇵🇭 [phi](../../../phi/docs/architecture/ARCHITECTURE.md) · 🇵🇱 [pl](../../../pl/docs/architecture/ARCHITECTURE.md) · 🇵🇹 [pt](../../../pt/docs/architecture/ARCHITECTURE.md) · 🇷🇴 [ro](../../../ro/docs/architecture/ARCHITECTURE.md) · 🇷🇺 [ru](../../../ru/docs/architecture/ARCHITECTURE.md) · 🇸🇰 [sk](../../../sk/docs/architecture/ARCHITECTURE.md) · 🇸🇪 [sv](../../../sv/docs/architecture/ARCHITECTURE.md) · 🇰🇪 [sw](../../../sw/docs/architecture/ARCHITECTURE.md) · 🇮🇳 [ta](../../../ta/docs/architecture/ARCHITECTURE.md) · 🇮🇳 [te](../../../te/docs/architecture/ARCHITECTURE.md) · 🇹🇭 [th](../../../th/docs/architecture/ARCHITECTURE.md) · 🇹🇷 [tr](../../../tr/docs/architecture/ARCHITECTURE.md) · 🇺🇦 [uk-UA](../../../uk-UA/docs/architecture/ARCHITECTURE.md) · 🇵🇰 [ur](../../../ur/docs/architecture/ARCHITECTURE.md) · 🇻🇳 [vi](../../../vi/docs/architecture/ARCHITECTURE.md) · 🇨🇳 [zh-CN](../../../zh-CN/docs/architecture/ARCHITECTURE.md)
---
🌐 **Idiomas:** 🇺🇸 [English](./ARCHITECTURE.md) | 🇧🇷 [Português (Brasil)](i18n/pt-BR/ARCHITECTURE.md) | 🇪🇸 [Español](i18n/es/ARCHITECTURE.md) | 🇫🇷 [Français](i18n/fr/ARCHITECTURE.md) | 🇮🇹 [Italiano](i18n/it/ARCHITECTURE.md) | 🇷🇺 [Русский](i18n/ru/ARCHITECTURE.md) | 🇨🇳 [中文 (简体)](i18n/zh-CN/ARCHITECTURE.md) | 🇩🇪 [Deutsch](i18n/de/ARCHITECTURE.md) | 🇮🇳 [हिन्दी](i18n/in/ARCHITECTURE.md) | 🇹🇭 [ไทย](i18n/th/ARCHITECTURE.md) | 🇺🇦 [Українська](i18n/uk-UA/ARCHITECTURE.md) | 🇸🇦 [العربية](i18n/ar/ARCHITECTURE.md) | 🇯🇵 [日本語](i18n/ja/ARCHITECTURE.md) | 🇻🇳 [Tiếng Việt](i18n/vi/ARCHITECTURE.md) | 🇧🇬 [Български](i18n/bg/ARCHITECTURE.md) | 🇩🇰 [Dansk](i18n/da/ARCHITECTURE.md) | 🇫🇮 [Suomi](i18n/fi/ARCHITECTURE.md) | 🇮🇱 [עברית](i18n/he/ARCHITECTURE.md) | 🇭🇺 [Magyar](i18n/hu/ARCHITECTURE.md) | 🇮🇩 [Bahasa Indonesia](i18n/id/ARCHITECTURE.md) | 🇰🇷 [한국어](i18n/ko/ARCHITECTURE.md) | 🇲🇾 [Bahasa Melayu](i18n/ms/ARCHITECTURE.md) | 🇳🇱 [Nederlands](i18n/nl/ARCHITECTURE.md) | 🇳🇴 [Norsk](i18n/no/ARCHITECTURE.md) | 🇵🇹 [Português (Portugal)](i18n/pt/ARCHITECTURE.md) | 🇷🇴 [Română](i18n/ro/ARCHITECTURE.md) | 🇵🇱 [Polski](i18n/pl/ARCHITECTURE.md) | 🇸🇰 [Slovenčina](i18n/sk/ARCHITECTURE.md) | 🇸🇪 [Svenska](i18n/sv/ARCHITECTURE.md) | 🇵🇭 [Filipino](i18n/phi/ARCHITECTURE.md) | 🇨🇿 [Čeština](i18n/cs/ARCHITECTURE.md)
---
title: "Arquitetura do OmniRoute"
version: 3.8.0
lastUpdated: 2026-05-13
---
# Arquitetura do OmniRoute
🌐 **Idiomas:** 🇺🇸 [English](./ARCHITECTURE.md) | 🇧🇷 [Português (Brasil)](../i18n/pt-BR/docs/architecture/ARCHITECTURE.md) | 🇪🇸 [Español](../i18n/es/docs/architecture/ARCHITECTURE.md) | 🇫🇷 [Français](../i18n/fr/docs/architecture/ARCHITECTURE.md) | 🇮🇹 [Italiano](../i18n/it/docs/architecture/ARCHITECTURE.md) | 🇷🇺 [Русский](../i18n/ru/docs/architecture/ARCHITECTURE.md) | 🇨🇳 [中文 (简体)](../i18n/zh-CN/docs/architecture/ARCHITECTURE.md) | 🇩🇪 [Deutsch](../i18n/de/docs/architecture/ARCHITECTURE.md) | 🇮🇳 [हिन्दी](../i18n/in/docs/architecture/ARCHITECTURE.md) | 🇹🇭 [ไทย](../i18n/th/docs/architecture/ARCHITECTURE.md) | 🇺🇦 [Українська](../i18n/uk-UA/docs/architecture/ARCHITECTURE.md) | 🇸🇦 [العربية](../i18n/ar/docs/architecture/ARCHITECTURE.md) | 🇯🇵 [日本語](../i18n/ja/docs/architecture/ARCHITECTURE.md) | 🇻🇳 [Tiếng Việt](../i18n/vi/docs/architecture/ARCHITECTURE.md) | 🇧🇬 [Български](../i18n/bg/docs/architecture/ARCHITECTURE.md) | 🇩🇰 [Dansk](../i18n/da/docs/architecture/ARCHITECTURE.md) | 🇫🇮 [Suomi](../i18n/fi/docs/architecture/ARCHITECTURE.md) | 🇮🇱 [עברית](../i18n/he/docs/architecture/ARCHITECTURE.md) | 🇭🇺 [Magyar](../i18n/hu/docs/architecture/ARCHITECTURE.md) | 🇮🇩 [Bahasa Indonesia](../i18n/id/docs/architecture/ARCHITECTURE.md) | 🇰🇷 [한국어](../i18n/ko/docs/architecture/ARCHITECTURE.md) | 🇲🇾 [Bahasa Melayu](../i18n/ms/docs/architecture/ARCHITECTURE.md) | 🇳🇱 [Nederlands](../i18n/nl/docs/architecture/ARCHITECTURE.md) | 🇳🇴 [Norsk](../i18n/no/docs/architecture/ARCHITECTURE.md) | 🇵🇹 [Português (Portugal)](../i18n/pt/docs/architecture/ARCHITECTURE.md) | 🇷🇴 [Română](../i18n/ro/docs/architecture/ARCHITECTURE.md) | 🇵🇱 [Polski](../i18n/pl/docs/architecture/ARCHITECTURE.md) | 🇸🇰 [Slovenčina](../i18n/sk/docs/architecture/ARCHITECTURE.md) | 🇸🇪 [Svenska](../i18n/sv/docs/architecture/ARCHITECTURE.md) | 🇵🇭 [Filipino](../i18n/phi/docs/architecture/ARCHITECTURE.md) | 🇨🇿 [Čeština](../i18n/cs/docs/architecture/ARCHITECTURE.md)
_Última atualização: 2026-05-13_
## Resumo Executivo
OmniRoute é um gateway de roteamento de IA local e um painel construído em Next.js.
OmniRoute é um gateway de roteamento de IA local e um painel construído sobre Next.js.
Ele fornece um único endpoint compatível com OpenAI (`/v1/*`) e roteia o tráfego entre vários provedores upstream com tradução, fallback, atualização de token e rastreamento de uso.
Capacidades principais:
Principais capacidades:
- Superfície de API compatível com OpenAI para CLI/ferramentas (179 provedores, 31 executores)
- Superfície de API compatível com OpenAI para CLI/ferramentas (177 provedores, 31 executores)
- Tradução de solicitação/resposta entre formatos de provedores
- Fallback de combinação de modelos (sequência de múltiplos modelos)
- Etapas de combinação estruturadas (`provedor + modelo + conexão`) com ordenação em tempo de execução por `compositeTiers`
- Fallback em nível de conta (múltiplas contas por provedor)
- Pré-verificação de cota e seleção de conta P2C ciente da cota no caminho principal de chat
- Pré-verificação de cota e seleção de conta P2C ciente da cota no caminho principal do chat
- Gerenciamento de conexão de provedor OAuth + chave de API (14 módulos OAuth)
- Geração de embeddings via `/v1/embeddings` (6 provedores, 9 modelos)
- Geração de imagens via `/v1/images/generations` (10+ provedores, 20+ modelos)
@@ -35,7 +45,7 @@ Capacidades principais:
- Sanitização de resposta para compatibilidade estrita com o SDK da OpenAI
- Normalização de papéis (desenvolvedor→sistema, sistema→usuário) para compatibilidade entre provedores
- Conversão de saída estruturada (json_schema → Gemini responseSchema)
- Persistência local para provedores, chaves, aliases, combos, configurações, preços (26 módulos de DB)
- Persistência local para provedores, chaves, aliases, combinações, configurações, preços (26 módulos de DB)
- Rastreamento de uso/custo e registro de solicitações
- Sincronização em nuvem opcional para sincronização de múltiplos dispositivos/estados
- Lista de permissão/bloqueio de IP para controle de acesso à API
@@ -44,14 +54,14 @@ Capacidades principais:
- Rastreamento de sessão e identificação
- Limitação de taxa aprimorada por conta com perfis específicos de provedores
- Padrão de disjuntor para resiliência do provedor
- Proteção contra rebanho de trovão com bloqueio de mutex
- Proteção contra rebanho de trovão com bloqueio mutex
- Cache de deduplicação de solicitação baseado em assinatura
- Camada de domínio: regras de custo, política de fallback, política de bloqueio
- Context Relay: resumos de transferência de sessão para continuidade de rotação de conta
- Persistência de estado de domínio (cache de gravação SQLite para fallbacks, orçamentos, bloqueios, disjuntores)
- Motor de políticas para avaliação centralizada de solicitações (bloqueio → orçamento → fallback)
- Telemetria de solicitação com agregação de latência p50/p95/p99
- Telemetria de alvo de combo e saúde histórica do alvo de combo via `combo_execution_key` / `combo_step_id`
- Telemetria de solicitações com agregação de latência p50/p95/p99
- Telemetria de alvo de combinação e saúde histórica do alvo de combinação via `combo_execution_key` / `combo_step_id`
- ID de correlação (X-Request-Id) para rastreamento de ponta a ponta
- Registro de auditoria de conformidade com opção de exclusão por chave de API
- Framework de avaliação para garantia de qualidade de LLM
@@ -62,19 +72,19 @@ Capacidades principais:
- Sistema de habilidades (registro, executor, sandbox, habilidades integradas)
- Proxy MITM com gerenciamento de certificados e manipulação de DNS
- Middleware de proteção contra injeção de prompt
- Pipeline de compressão de prompt com Caveman, RTK, pipelines empilhados, combos de compressão, pacotes de idiomas e análises
- Pipeline de compressão de prompt com Caveman, RTK, pipelines empilhados, combinações de compressão, pacotes de idiomas e análises
- Registro de ACP (Agent Communication Protocol)
- Provedores OAuth modulares (14 módulos individuais sob `src/lib/oauth/providers/`)
- Scripts de desinstalação/desinstalação completa
- Ação de reparo de ambiente OAuth
- Ponte WebSocket para clientes WS compatíveis com OpenAI (`/v1/ws`)
- Gerenciamento de token de sincronização (emissão/revogação, download de pacote de configuração versionado por ETag)
- Pensamento GLM (`glmt`) como preset de provedor de primeira classe
- Contagem de tokens híbrida (contagem de tokens do lado do provedor `/messages/count_tokens` com fallback de estimativa)
- Gerenciamento de tokens de sincronização (emissão/revogação, download de pacote de configuração versionado por ETag)
- GLM Thinking (`glmt`) preset de provedor de primeira classe
- Contagem híbrida de tokens (contagem de tokens do lado do provedor `/messages/count_tokens` com fallback de estimativa)
- Auto-semeadura de alias de modelo (30+ normalizações de dialeto cross-proxy na inicialização)
- Busca segura de saída com proteção SSRF, bloqueio de URL privada e retry configurável
- Repetições de chat cientes de cooldown com `requestRetry` e `maxRetryIntervalSec` configuráveis
- Validação do ambiente de execução com Zod na inicialização
- Validação do ambiente em tempo de execução com Zod na inicialização
- Auditoria de conformidade v2 com paginação, eventos CRUD de provedores e registro de validação bloqueada por SSRF
Modelo de execução principal:
@@ -84,7 +94,7 @@ Modelo de execução principal:
## Diagramas de Referência
Fontes canônicas e controladas por versão do Mermaid para a plataforma v3.8.0 estão disponíveis em
Fontes Mermaid canônicas e controladas por versão para a plataforma v3.8.0 estão em
[`docs/diagrams/`](../diagrams/README.md). Dois são reproduzidos abaixo para orientação;
os demais estão vinculados a seus guias específicos de domínio.
@@ -106,13 +116,13 @@ os demais estão vinculados a seus guias específicos de domínio.
- Autenticação de provedor e atualização de token
- Tradução de requisições e streaming SSE
- Persistência de estado local + uso
- Orquestração opcional de sincronização em nuvem
- Orquestração de sincronização em nuvem opcional
### Fora do Escopo
- Implementação de serviço em nuvem por trás de `NEXT_PUBLIC_CLOUD_URL`
- SLA do provedor/plano de controle fora do processo local
- Binaries de CLI externas (Claude CLI, Codex CLI, etc.)
- Binaries CLI externas em si (Claude CLI, Codex CLI, etc.)
## Superfície do Painel (Atual)
@@ -124,20 +134,20 @@ Páginas principais em `src/app/(dashboard)/dashboard/`:
- `/dashboard/combos` — estratégias de combo, templates, construtor baseado em etapas, regras de roteamento de modelo, ordenação persistida manual
- `/dashboard/auto-combo` — Motor de Auto Combo: pesos de pontuação, pacotes de modo, predefinições de fábrica virtual, telemetria
- `/dashboard/costs` — agregação de custos e visibilidade de preços
- `/dashboard/analytics` — análises de uso, avaliações, saúde do alvo do combo
- `/dashboard/analytics` — análises de uso, avaliações, saúde do alvo de combo
- `/dashboard/limits` — controles de cota/taxa
- `/dashboard/cli-tools` — integração de CLI, detecção de tempo de execução, geração de configuração
- `/dashboard/cli-tools` — integração CLI, detecção de tempo de execução, geração de configuração
- `/dashboard/agents` — agentes ACP detectados + registro de agente personalizado
- `/dashboard/cloud-agents` — tarefas de agente hospedadas na nuvem (Codex Cloud, Devin, Jules) e ciclo de vida da tarefa
- `/dashboard/skills` — registro de habilidades A2A, execução em sandbox, catálogo de habilidades embutido
- `/dashboard/memory` — inspeção e recuperação de memória conversacional persistente
- `/dashboard/webhooks` — assinaturas de webhook de saída, rotação de segredos, estatísticas de tentativas
- `/dashboard/batch` — submissão de trabalhos em lote e progresso
- `/dashboard/batch` — submissão de trabalho em lote e progresso
- `/dashboard/cache` — estatísticas de cache de leitura e raciocínio, controles de expulsão
- `/dashboard/playground` — playground de chat interativo contra qualquer combo/modelo configurado
- `/dashboard/changelog` — visualizador de changelog no aplicativo (renderiza `CHANGELOG.md`)
- `/dashboard/system` — diagnósticos de tempo de execução, informações de versão, superfície de validação de ambiente
- `/dashboard/onboarding` — assistente de configuração de primeira execução para novas instalações
- `/dashboard/system` — diagnósticos de tempo de execução, informações de versão, superfície de validação do ambiente
- `/dashboard/onboarding` — assistente de configuração para primeira execução em novas instalações
- `/dashboard/media` — playground de imagem/vídeo/música
- `/dashboard/search-tools` — teste de provedor de busca e histórico
- `/dashboard/health` — tempo de atividade, disjuntores, limites de taxa, sessões monitoradas por cota
@@ -145,7 +155,7 @@ Páginas principais em `src/app/(dashboard)/dashboard/`:
- `/dashboard/settings` — abas de configurações do sistema (geral, roteamento, padrões de combo, etc.)
- `/dashboard/context/caveman` — regras de compressão Caveman, pacotes de idioma, visualização e modo de saída
- `/dashboard/context/rtk` — filtros de saída de comando RTK, visualização e configurações de segurança em tempo de execução
- `/dashboard/context/combos` — pipelines de compressão nomeados atribuídos a combos de roteamento
- `/dashboard/context/combos` — pipelines de compressão nomeadas atribuídas a combos de roteamento
- `/dashboard/translator` — inspeção de tradutor e visualização de conversão de formato de requisição
- `/dashboard/audit` — navegador de log de auditoria de conformidade com paginação e metadados estruturados
- `/dashboard/usage` — navegador de uso por requisição vinculado a `usage_history`
@@ -178,8 +188,8 @@ flowchart LR
P3[Nós Compatíveis\ncompatíveis com OpenAI / compatíveis com Anthropic]
end
subgraph Cloud[Sincronização em Nuvem Opcional]
CLOUD[Ponto de Sincronização em Nuvem\nNEXT_PUBLIC_CLOUD_URL]
subgraph Cloud[Síncrono em Nuvem Opcional]
CLOUD[Ponto de Síncrono em Nuvem\nNEXT_PUBLIC_CLOUD_URL]
end
C1 --> API
@@ -202,9 +212,9 @@ flowchart LR
## Componentes Centrais de Execução
## 1) Camada de API e Roteamento (Rotas do App Next.js)
## 1) API e Camada de Roteamento (Rotas do App Next.js)
Diretórios principais:
Principais diretórios:
- `src/app/api/v1/*` e `src/app/api/v1beta/*` para APIs de compatibilidade
- `src/app/api/*` para APIs de gerenciamento/configuração
@@ -236,8 +246,8 @@ Domínios de gerenciamento:
- OAuth: `src/app/api/oauth/*`
- Chaves/aliases/combos/preços: `src/app/api/keys*`, `src/app/api/models/alias`, `src/app/api/combos*`, `src/app/api/pricing`
- Uso: `src/app/api/usage/*`
- Sincronização/nuvem: `src/app/api/sync/*`, `src/app/api/cloud/*`
- Ferramentas auxiliares de CLI: `src/app/api/cli-tools/*`
- Síncrono/nuvem: `src/app/api/sync/*`, `src/app/api/cloud/*`
- Ferramentas de CLI: `src/app/api/cli-tools/*`
- Filtro de IP: `src/app/api/settings/ip-filter` (GET/PUT)
- Orçamento de pensamento: `src/app/api/settings/thinking-budget` (GET/PUT)
- Prompt do sistema: `src/app/api/settings/system-prompt` (GET/PUT)
@@ -245,16 +255,16 @@ Domínios de gerenciamento:
`src/app/api/context/*`
- Sessões: `src/app/api/sessions` (GET)
- Limites de taxa: `src/app/api/rate-limits` (GET)
- Resiliência: `src/app/api/resilience` (GET/PATCH) — fila de requisições, cooldown de conexão, breaker de provedor, configuração de espera por cooldown
- Reset de resiliência: `src/app/api/resilience/reset` (POST) — resetar breakers de provedores
- Resiliência: `src/app/api/resilience` (GET/PATCH) — fila de requisições, cooldown de conexão, quebra de provedor, configuração de espera por cooldown
- Redefinição de resiliência: `src/app/api/resilience/reset` (POST) — redefinir quebras de provedores
- Estatísticas de cache: `src/app/api/cache/stats` (GET/DELETE)
- Telemetria: `src/app/api/telemetry/summary` (GET)
- Orçamento: `src/app/api/usage/budget` (GET/POST)
- Cadeias de fallback: `src/app/api/fallback/chains` (GET/POST/DELETE)
- Auditoria de conformidade: `src/app/api/compliance/audit-log` (GET, com paginação + metadados estruturados)
- Evals: `src/app/api/evals` (GET/POST), `src/app/api/evals/[suiteId]` (GET)
- Avaliações: `src/app/api/evals` (GET/POST), `src/app/api/evals/[suiteId]` (GET)
- Políticas: `src/app/api/policies` (GET/POST)
- Tokens de sincronização: `src/app/api/sync/tokens` (GET/POST), `src/app/api/sync/tokens/[id]` (GET/DELETE)
- Tokens de síncrono: `src/app/api/sync/tokens` (GET/POST), `src/app/api/sync/tokens/[id]` (GET/DELETE)
- Pacote de configuração: `src/app/api/sync/bundle` (GET, snapshot versionado por ETag de configurações/provedores/combos/chaves)
- WebSocket: `src/app/api/v1/ws/route.ts` — manipulador de upgrade para clientes WS compatíveis com OpenAI
@@ -297,10 +307,10 @@ Serviços (lógica de negócios):
- Recuperador de cota Codex: `open-sse/services/codexQuotaFetcher.ts` — recupera a cota Codex para decisões de transferência de contexto
- Retry ciente de cooldown: `src/sse/services/cooldownAwareRetry.ts` — retries de cooldown por modelo com `requestRetry` / `maxRetryIntervalSec` configuráveis
- Fetch seguro de saída: `src/shared/network/safeOutboundFetch.ts` — fetch protegido de provedor/modelo com proteção SSRF, bloqueio de URL privada, retry e timeout
- Guarda de URL de saída: `src/shared/network/outboundUrlGuard.ts` — valida URLs de provedores contra intervalos CIDR privados/localhost
- Guarda de URL de saída: `src/shared/network/outboundUrlGuard.ts` — valida URLs de provedores contra intervalos CIDR de privado/localhost
- Padrões de requisição do provedor: `open-sse/services/providerRequestDefaults.ts` — padrões de `maxTokens`, `temperature`, `thinkingBudgetTokens` a nível de provedor
- Constantes do provedor GLM: `open-sse/config/glmProvider.ts` — modelos GLM compartilhados, URLs de cota, timeout/padrões GLMT
- Upstream de antigravidade: `open-sse/config/antigravityUpstream.ts` — constantes de URL base e caminho de descoberta
- Upstream Antigravity: `open-sse/config/antigravityUpstream.ts` — constantes de URL base e caminho de descoberta
- Constantes do cliente Codex: `open-sse/config/codexClient.ts` — valores de user-agent e versão do cliente versionados
- Semente de alias de modelo: `src/lib/modelAliasSeed.ts` — semeia 30+ aliases de dialetos cross-proxy na inicialização
@@ -316,14 +326,14 @@ Módulos da camada de domínio:
- Timeout de fetch: `src/lib/domain/fetchTimeout.ts`
- Telemetria de requisição: `src/lib/domain/requestTelemetry.ts`
- Conformidade/auditoria: `src/lib/domain/compliance/index.ts`
- Executor de avaliação: `src/lib/domain/evalRunner.ts`
- Executor de eval: `src/lib/domain/evalRunner.ts`
- Persistência do estado do domínio: `src/lib/db/domainState.ts` — CRUD SQLite para cadeias de fallback, orçamentos, histórico de custos, estado de bloqueio, disjuntores
Módulos do provedor OAuth (14 arquivos individuais sob `src/lib/oauth/providers/`):
- Índice do registro: `src/lib/oauth/providers/index.ts`
- Índice de registro: `src/lib/oauth/providers/index.ts`
- Provedores individuais: `claude.ts`, `codex.ts`, `gemini.ts`, `antigravity.ts`, `qoder.ts`, `qwen.ts`, `kimi-coding.ts`, `github.ts`, `kiro.ts`, `cursor.ts`, `kilocode.ts`, `cline.ts`, `windsurf.ts`, `gitlab-duo.ts`
- Wrapper fino: `src/lib/oauth/providers.ts` — re-exporta de módulos individuais
- Wrapper fino: `src/lib/oauth/providers.ts` — re-exportações de módulos individuais
## Subsistemas Principais (v3.8.0)
@@ -339,15 +349,15 @@ O Motor de Combinação Automática pontua e escolhe dinamicamente os alvos de r
Principais capacidades:
- **14 estratégias de roteamento** (prioridade, ponderada, preenchimento primeiro, round-robin, P2C, aleatório,
menos utilizado, otimizado por custo, estritamente aleatório, **auto**, lkgp, otimizado por contexto,
retransmissão de contexto, além de um caminho de fallback) — auto é a adição principal na v3.8.0.
- **14 estratégias de roteamento** (prioridade, ponderada, preenchimento primeiro, round-robin, P2C, aleatória,
menos utilizada, otimizada por custo, estritamente aleatória, **automática**, lkgp, otimizada por contexto,
re de contexto, além de um caminho de fallback) — automática é a adição principal na v3.8.0.
- **Pontuação de 9 fatores**: custo, latência p95, taxa de sucesso, margem de cota, proximidade de bloqueio,
estado do disjuntor, falhas recentes, disponibilidade do modelo e afinidade de tags.
- **Fábrica virtual** materializa combinações efêmeras quando nenhuma combinação nomeada correspondente
existe, obtendo candidatos de conexões de provedores ativos e saudáveis.
existe, buscando candidatos de conexões de provedores ativos e saudáveis.
- **Prefixos automáticos**: `auto/coding`, `auto/cheap`, `auto/fast`, `auto/offline`,
`auto/smart`, `auto/lkgp` — cada um apoiado por um perfil de peso ajustado.
`auto/smart`, `auto/lkgp` — cada um respaldado por um perfil de peso ajustado.
- **4 pacotes de modo**: coding, fast, cheap, smart — enviados como configurações de peso pré-definidas
chamáveis a partir do painel.
@@ -356,8 +366,8 @@ Para detalhes algorítmicos completos (fórmulas de fatores, ajuste de peso), co
### B. Agentes de Nuvem
Agentes de Nuvem envolvem plataformas de código-agente hospedadas de terceiros (Codex Cloud, Devin,
Jules) por trás de um ciclo de vida de tarefa uniforme baseado em DB. Todos os pontos de criação/inspeção
Os Agentes de Nuvem envolvem plataformas de código-agente hospedadas de terceiros (Codex Cloud, Devin,
Jules) por trás de um ciclo de vida de tarefa uniforme baseado em DB. Todos os pontos finais de criação/inspeção
de tarefas requerem autenticação de gerenciamento.
- Raiz do módulo: `src/lib/cloudAgent/` (`baseAgent.ts`, `registry.ts`, `api.ts`,
@@ -368,13 +378,13 @@ de tarefas requerem autenticação de gerenciamento.
- Painel: `/dashboard/cloud-agents`
- Armazenamento: tabela `cloud_agent_tasks`
Para detalhes de provisionamento por agente e especificidades de OAuth, consulte
Para detalhes de provisionamento por agente e especificidades do OAuth, consulte
[`docs/frameworks/CLOUD_AGENT.md`](../frameworks/CLOUD_AGENT.md).
### C. Guardrails
O módulo de guardrails é uma camada de middleware recarregável que inspeciona solicitações
e respostas em busca de PII, injeção de prompt e conteúdo de visão inseguro. Violações
e respostas em busca de PII, injeção de prompt e conteúdo visual inseguro. Violações
interrompem a solicitação com HTTP **503** mais um código de erro estruturado, permitindo
que chamadores subsequentes tentem novamente ou ramifiquem.
@@ -384,7 +394,7 @@ que chamadores subsequentes tentem novamente ou ramifiquem.
- Pontos de conexão: entrada do manipulador de chat, manipulador de geração de imagem, sanitizador de resposta
- Contrato HTTP: violações aparecem como `503` com `error.code = "GUARDRAIL_VIOLATION"`
Para autoria de regras e ajuste de limites, consulte
Para autoria de regras e ajuste de limiares, consulte
[`docs/security/GUARDRAILS.md`](../security/GUARDRAILS.md).
### D. Camada de Domínio
@@ -392,7 +402,7 @@ Para autoria de regras e ajuste de limites, consulte
O namespace `src/domain/` centraliza decisões de política para que os manipuladores de rota não
precisem montar a lógica de bloqueio/orçamento/fallback por conta própria.
- Motor de políticas: `src/domain/policyEngine.ts` — ponto de entrada único para
- Motor de política: `src/domain/policyEngine.ts` — ponto de entrada único para
avaliação pré-execução (bloqueio → orçamento → ordem de fallback)
- Regras de custo: `src/domain/costRules.ts`
- Política de fallback: `src/domain/fallbackPolicy.ts`
@@ -401,13 +411,13 @@ precisem montar a lógica de bloqueio/orçamento/fallback por conta própria.
- Resolvedor de combinação: `src/domain/comboResolver.ts` — resolve nomes de combinação, prefixos auto/\*
e alvos de modelo curinga para planos de execução concretos
- Conector de regras de conexão/modelo: `src/domain/connectionModelRules.ts`
- Capturas de disponibilidade do modelo: `src/domain/modelAvailability.ts`
- Rastreamento de expiração do provedor: `src/domain/providerExpiration.ts`
- Instantâneas de disponibilidade do modelo: `src/domain/modelAvailability.ts`
- Rastreamento de expiração de provedores: `src/domain/providerExpiration.ts`
- Cache de cota: `src/domain/quotaCache.ts`
- Estado de degradação: `src/domain/degradation.ts`
- Auditoria de configuração: `src/domain/configAudit.ts`
- Construtor de metadados de resposta OmniRoute: `src/domain/omnirouteResponseMeta.ts`
- Subsistema de avaliação: `src/domain/assessment/` — trabalhos de avaliação periódicos
- Subsistema de avaliação: `src/domain/assessment/` — trabalhos de avaliação periódica
### E. Pipeline de Autorização
@@ -415,13 +425,13 @@ O pipeline de autorização classifica cada solicitação recebida e aplica a
cadeia de políticas apropriada antes do despacho.
- Entrada do pipeline: `src/server/authz/pipeline.ts`
- Classificador de solicitações: `src/server/authz/classify.ts` — distingue rotas de compatibilidade públicas
- Classificador de solicitações: `src/server/authz/classify.ts` — distingue rotas de compatibilidade pública
de rotas de gerenciamento
- Inventário de rotas públicas: `src/shared/constants/publicApiRoutes.ts`
- Políticas: `src/server/authz/policies/` — predicados compostáveis
(`requireApiKey`, `requireManagement`, `requireFreshAuth`, etc.)
- Utilitários de cabeçalho: `src/server/authz/headers.ts`
- Helper de asserção: `src/server/authz/assertAuth.ts`
- Auxiliar de asserção: `src/server/authz/assertAuth.ts`
- Contexto da solicitação: `src/server/authz/context.ts`
Rotas públicas vs rotas de gerenciamento são uma fronteira rígida: APIs de agente/cooldown e
@@ -432,7 +442,7 @@ Para as regras completas de classificação de rotas, consulte
### F. FSM de Workflow e Roteador Consciente de Tarefas
Um roteador acionado por máquina de estados finitos, posicionado acima da seleção de combinações para direcionar
Um roteador impulsionado por máquina de estados finitos, posicionado acima da seleção de combinações para direcionar
o tráfego com base na fase de workflow detectada (planejamento, execução,
revisão) e afinidade de tarefas em segundo plano.
@@ -441,9 +451,8 @@ revisão) e afinidade de tarefas em segundo plano.
- Detector de tarefas em segundo plano: `open-sse/services/backgroundTaskDetector.ts`
- Classificador de intenção: `open-sse/services/intentClassifier.ts`
As transições da FSM alimentam a pontuação do Auto Combo, tendendo a modelos mais baratos
para tarefas de automação/fundo e a modelos mais robustos para turnos interativos de
planejamento/revisão.
As transições da FSM alimentam a pontuação do Motor de Combinação Automática, tendendo a modelos mais baratos
para tarefas de background/automação e a modelos mais fortes para turnos interativos de planejamento/revisão.
### G. Resiliência Específica do Provedor
@@ -455,11 +464,11 @@ camadas globais de disjuntor / cooldown de conexão / bloqueio de modelo:
`antigravityCredits.ts`, `antigravityHeaderScrub.ts`, `antigravityHeaders.ts`,
`antigravityIdentity.ts`, `antigravityObfuscation.ts`, `antigravityVersion.ts`)
- Política de cota ModelScope: `open-sse/services/modelscopePolicy.ts`
- Claude Code CCH (Handshake de Canal de Compatibilidade): `open-sse/services/claudeCodeCCH.ts`,
- CCH de Código Claude (Handshake de Canal de Compatibilidade): `open-sse/services/claudeCodeCCH.ts`,
além de `claudeCodeCompatible.ts`, `claudeCodeConstraints.ts`, `claudeCodeExtraRemap.ts`,
`claudeCodeToolRemapper.ts`
- Modelagem de impressão digital do Claude Code: `open-sse/services/claudeCodeFingerprint.ts`
- Ofuscação do Claude Code: `open-sse/services/claudeCodeObfuscation.ts`
- Modelagem de impressão digital de Código Claude: `open-sse/services/claudeCodeFingerprint.ts`
- Ofuscação de Código Claude: `open-sse/services/claudeCodeObfuscation.ts`
- Cliente TLS do ChatGPT: `open-sse/services/chatgptTlsClient.ts` (estilo curl-impersonate
para sessões do ChatGPT-Web)
- Cache de imagem do ChatGPT: `open-sse/services/chatgptImageCache.ts`
@@ -470,15 +479,15 @@ Para o guia completo de furtividade e orientações operacionais, consulte
### H. Webhooks, Cache de Raciocínio, Cache de Leitura
- **Webhooks** — despacho de saída para eventos de provedor/conta/tarefa.
- Dispatcher: `src/lib/webhookDispatcher.ts`
- Despachante: `src/lib/webhookDispatcher.ts`
- Armazenamento: tabela SQLite `webhooks` (via `src/lib/db/webhooks.ts`)
- Painel: `/dashboard/webhooks` (assinaturas, segredos, histórico de tentativas)
- Para taxonomia de eventos e semântica de tentativas, consulte [`docs/frameworks/WEBHOOKS.md`](../frameworks/WEBHOOKS.md).
- **Cache de Raciocínio** — blocos de raciocínio replays para provedores que emitem
tokens de pensamento (Claude, GLMT, etc.) para que turnos consecutivos possam pular o re-pensar.
- **Cache de Raciocínio** — blocos de raciocínio reproduzíveis para provedores que emitem
tokens de pensamento (Claude, GLMT, etc.) para que turnos consecutivos possam pular o re-pensamento.
- Camada de DB: `src/lib/db/reasoningCache.ts`
- Camada de serviço: `open-sse/services/reasoningCache.ts`
- Para semântica de replay, consulte [`docs/routing/REASONING_REPLAY.md`](../routing/REASONING_REPLAY.md).
- Para semântica de reprodução, consulte [`docs/routing/REASONING_REPLAY.md`](../routing/REASONING_REPLAY.md).
- **Cache de Leitura** — cache de resposta de curta duração indexado por assinatura e usado para
colapsar tentativas idênticas de SDKs upstream quebrados.
- Camada de DB: `src/lib/db/readCache.ts`
@@ -513,7 +522,7 @@ Banco de dados de estado de domínio (SQLite):
- Segredos do provedor persistidos nas entradas de `providerConnections`
- Suporte a proxy de saída via `open-sse/utils/proxyFetch.ts` (variáveis de ambiente) e `open-sse/utils/networkProxy.ts` (configurável por provedor ou global)
- Proteção SSRF / URL de saída: `src/shared/network/outboundUrlGuard.ts` — bloqueia intervalos privados/loopback/link-local para todas as chamadas de provedor
- Validação do ambiente em tempo de execução: `src/lib/env/runtimeEnv.ts` — esquema Zod para todas as variáveis de ambiente, apresentado como erros/avisos de inicialização
- Validação do ambiente em tempo de execução: `src/lib/env/runtimeEnv.ts` — esquema Zod para todas as variáveis de ambiente, exibido como erros/avisos de inicialização
- Tokens de sincronização: `src/lib/db/syncTokens.ts` — tokens escopados para endpoints de download de pacotes de configuração; respaldados pela tabela SQLite `sync_tokens` (migração `024_create_sync_tokens.sql`)
- Autenticação de handshake WebSocket: `src/lib/ws/handshake.ts` — valida solicitações de upgrade WS via chave de API ou cookie de sessão
@@ -620,8 +629,8 @@ sequenceDiagram
ProvAuth-->>OAuth: URL de auth ou payload de código de dispositivo
OAuth-->>UI: dados do fluxo
UI->>OAuth: POST trocar ou poll
OAuth->>ProvAuth: troca/poll de token
UI->>OAuth: POST trocar ou consultar
OAuth->>ProvAuth: troca de token/consulta
ProvAuth-->>OAuth: tokens de acesso/atualização
OAuth->>DB: createProviderConnection(dados oauth)
OAuth-->>UI: sucesso + id da conexão
@@ -772,9 +781,9 @@ erDiagram
Arquivos de armazenamento físico:
- banco de dados de execução primário: `${DATA_DIR}/storage.sqlite`
- linhas de log de requisição: `${DATA_DIR}/log.txt` (artefato de compatibilidade/debug)
- arquivos de carga útil de chamadas estruturadas: `${DATA_DIR}/call_logs/`
- banco de dados de runtime principal: `${DATA_DIR}/storage.sqlite`
- linhas de log de requisições: `${DATA_DIR}/log.txt` (artefato de compatibilidade/debug)
- arquivos de payload de chamadas estruturadas: `${DATA_DIR}/call_logs/`
- sessões de depuração de tradutor/requisição opcionais: `<repo>/logs/...`
## Topologia de Implantação
@@ -786,7 +795,7 @@ flowchart LR
Browser[Navegador do Dashboard]
end
subgraph ContainerOrProcess[Execução do OmniRoute]
subgraph ContainerOrProcess[Runtime OmniRoute]
Next[Servidor Next.js\nPORT=20128]
Core[Núcleo SSE + Executores]
MainDB[(storage.sqlite)]
@@ -814,7 +823,7 @@ flowchart LR
- `src/app/api/v1/*`, `src/app/api/v1beta/*`: APIs de compatibilidade
- `src/app/api/v1/providers/[provider]/*`: rotas dedicadas por provedor (chat, embeddings, imagens)
- `src/app/api/providers*`: CRUD de provedores, validação, teste
- `src/app/api/providers*`: CRUD de provedor, validação, teste
- `src/app/api/provider-nodes*`: gerenciamento de nós compatíveis personalizados
- `src/app/api/provider-models`: gerenciamento de modelos personalizados (CRUD)
- `src/app/api/models/route.ts`: API de catálogo de modelos (aliases + modelos personalizados)
@@ -822,18 +831,18 @@ flowchart LR
- `src/app/api/keys*`: ciclo de vida da chave API local
- `src/app/api/models/alias`: gerenciamento de alias
- `src/app/api/combos*`: gerenciamento de combos de fallback
- `src/app/api/pricing`: substituições de preços para cálculo de custos
- `src/app/api/pricing`: substituições de preços para cálculo de custo
- `src/app/api/settings/proxy`: configuração de proxy (GET/PUT/DELETE)
- `src/app/api/settings/proxy/test`: teste de conectividade de proxy de saída (POST)
- `src/app/api/usage/*`: APIs de uso e logs
- `src/app/api/sync/*` + `src/app/api/cloud/*`: sincronização em nuvem e helpers voltados para a nuvem
- `src/app/api/sync/*` + `src/app/api/cloud/*`: sincronização em nuvem e auxiliares voltados para a nuvem
- `src/app/api/cli-tools/*`: escritores/verificadores de configuração CLI local
- `src/app/api/settings/ip-filter`: lista de permissão/bloqueio de IP (GET/PUT)
- `src/app/api/settings/thinking-budget`: configuração do orçamento de tokens de pensamento (GET/PUT)
- `src/app/api/settings/system-prompt`: prompt do sistema global (GET/PUT)
- `src/app/api/settings/compression`: configurações de compressão global (GET/PUT)
- `src/app/api/compression/*`: visualização de compressão, metadados de regras e pacotes de idiomas
- `src/app/api/context/caveman/config`: alias de configurações do Caveman (GET/PUT)
- `src/app/api/compression/*`: visualização de compressão, metadados de regras e pacotes de idioma
- `src/app/api/context/caveman/config`: alias de configurações Caveman (GET/PUT)
- `src/app/api/context/rtk/*`: configuração RTK, catálogo de filtros, endpoint de teste e recuperação de saída bruta
- `src/app/api/context/combos*`: CRUD de combos de compressão e atribuições de combos de roteamento
- `src/app/api/context/analytics`: alias de análises de compressão
@@ -846,7 +855,7 @@ flowchart LR
### Núcleo de Roteamento e Execução
- `src/sse/handlers/chat.ts`: análise de requisição, manipulação de combo, loop de seleção de conta
- `src/sse/handlers/chat.ts`: análise de requisições, manipulação de combos, loop de seleção de conta
- `open-sse/handlers/chatCore.ts`: tradução, despacho de executores, manipulação de retry/refresh, configuração de stream
- `open-sse/executors/*`: comportamento de rede e formato específico do provedor
@@ -855,32 +864,32 @@ flowchart LR
- `open-sse/translator/index.ts`: registro e orquestração de tradutores
- Tradutores de requisição: `open-sse/translator/request/*` (9 módulos — `antigravity-to-openai`, `claude-to-gemini`, `claude-to-openai`, `gemini-to-openai`, `openai-responses`, `openai-to-claude`, `openai-to-cursor`, `openai-to-gemini`, `openai-to-kiro`)
- Tradutores de resposta: `open-sse/translator/response/*` (8 módulos — `claude-to-openai`, `cursor-to-openai`, `gemini-to-claude`, `gemini-to-openai`, `kiro-to-openai`, `openai-responses`, `openai-to-antigravity`, `openai-to-claude`)
- Helpers: `open-sse/translator/helpers/*` (8 módulos — `claudeHelper`, `geminiHelper`, `geminiToolsSanitizer`, `maxTokensHelper`, `openaiHelper`, `responsesApiHelper`, `schemaCoercion`, `toolCallHelper`)
- Auxiliares: `open-sse/translator/helpers/*` (8 módulos — `claudeHelper`, `geminiHelper`, `geminiToolsSanitizer`, `maxTokensHelper`, `openaiHelper`, `responsesApiHelper`, `schemaCoercion`, `toolCallHelper`)
- Constantes de formato: `open-sse/translator/formats.ts`
- Bootstrap e registro: `open-sse/translator/bootstrap.ts`, `open-sse/translator/registry.ts`
- Helpers de formato de imagem: `open-sse/translator/image/`
- Auxiliares de formato de imagem: `open-sse/translator/image/`
### Persistência
- `src/lib/db/*`: configuração/persistência de estado e domínio persistente no SQLite
- `src/lib/db/*`: configuração/persistência de estado persistente e persistência de domínio no SQLite
- `src/lib/localDb.ts`: re-exportação de compatibilidade para módulos de DB
- `src/lib/usageDb.ts`: fachada de histórico de uso/logs de chamadas sobre tabelas SQLite
## Cobertura do Executor do Provedor (Padrão de Estratégia)
Cada provedor possui um executor especializado que estende `BaseExecutor` (em `open-sse/executors/base.ts`), que fornece construção de URL, construção de cabeçalhos, tentativas com retrocesso exponencial, ganchos de atualização de credenciais e o método de orquestração `execute()`.
Cada provedor tem um executor especializado que estende `BaseExecutor` (em `open-sse/executors/base.ts`), que fornece construção de URL, construção de cabeçalhos, tentativas com retrocesso exponencial, ganchos de atualização de credenciais e o método de orquestração `execute()`.
| Executor | Provedor(es) | Tratamento Especial |
| ------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ |
| `DefaultExecutor` | OpenAI, Claude, Gemini, Qwen, OpenRouter, GLM, Kimi, MiniMax, DeepSeek, Groq, xAI, Mistral, Perplexity, Together, Fireworks, Cerebras, Cohere, NVIDIA, etc. | Configuração dinâmica de URL/cabeçalho por provedor |
| `AntigravityExecutor` | Google Antigravity | IDs de projeto/sessão personalizados, análise de Retry-After, ofuscação de 429 |
| `AzureOpenAIExecutor` | Azure OpenAI | Roteamento baseado em implantação, aplicação de consulta de api-version |
| `AzureOpenAIExecutor` | Azure OpenAI | Roteamento baseado em implantação, imposição de consulta de api-version |
| `BlackboxWebExecutor` | Blackbox AI (modo web) | Reversão de sessão web com emulação de impressão digital TLS |
| `ChatGPTWebExecutor` | ChatGPT web | Gerenciamento de cliente TLS + cookie de sessão (`chatgptTlsClient.ts`) |
| `ClaudeIdentityExecutor` | Claude.ai (caminho CCH) | Pipelines de restrição + remapeamento de ferramentas, modelagem de impressão digital |
| `CliProxyApiExecutor` | Provedores compatíveis com CLIProxyAPI | Tratamento personalizado de autenticação e protocolo |
| `CliProxyApiExecutor` | Provedores compatíveis com CLIProxyAPI | Manipulação personalizada de autenticação e protocolo |
| `CloudflareAiExecutor` | Cloudflare Workers AI | Injeção de ID de conta, rastreamento de uso baseado em Neurons |
| `CodexExecutor` | OpenAI Codex | Injeções de instruções do sistema, força de esforço de raciocínio |
| `CodexExecutor` | OpenAI Codex | Injeta instruções do sistema, força esforço de raciocínio |
| `CommandCodeExecutor` | Código de Comando | Rotação de cabeçalho por sessão + OAuth |
| `CursorExecutor` | Cursor IDE | Protocolo ConnectRPC, codificação Protobuf, assinatura de requisições via checksum |
| `DevinCliExecutor` | Devin CLI | Conexão do ciclo de vida da tarefa Devin via módulo de agente em nuvem |
@@ -906,72 +915,72 @@ Todos os outros provedores (incluindo nós compatíveis personalizados) usam o `
## Matriz de Compatibilidade de Provedores
> **Nota:** A matriz abaixo é uma amostra representativa dos 179 provedores registrados no
> **Nota:** A matriz abaixo é uma amostra representativa dos 177 provedores registrados no
> OmniRoute v3.8.0. Para a lista canônica e continuamente atualizada, consulte
> [`docs/reference/PROVIDER_REFERENCE.md`](../reference/PROVIDER_REFERENCE.md) (gerada automaticamente) ou a fonte
> de verdade em `src/shared/constants/providers.ts` (validada pelo Zod no carregamento).
| Provedor | Formato | Autenticação | Stream | Não-Stream | Atualização de Token | API de Uso |
| ----------------- | ---------------- | -------------------------- | ---------------- | ---------- | -------------------- | -------------------- |
| Claude | claude | Chave de API / OAuth | ✅ | ✅ | ✅ | ⚠️ Somente Admin |
| Gemini | gemini | Chave de API / OAuth | ✅ | ✅ | ✅ | ⚠️ Console da Nuvem |
| Gemini CLI | gemini-cli | OAuth | ✅ | ✅ | ✅ | ⚠️ Console da Nuvem |
| Antigravity | antigravity | OAuth | ✅ | ✅ | ✅ | ✅ API de cota total |
| OpenAI | openai | Chave de API | ✅ | ✅ | ❌ | ❌ |
| Codex | openai-responses | OAuth | ✅ forçado | ❌ | ✅ | ✅ Limites de taxa |
| GitHub Copilot | openai | OAuth + Token Copilot | ✅ | ✅ | ✅ | ✅ Capturas de cota |
| Cursor | cursor | Checksum personalizado | ✅ | ✅ | ❌ | ❌ |
| Kiro | kiro | AWS SSO OIDC | ✅ (EventStream) | ❌ | ✅ | ✅ Limites de uso |
| Qwen | openai | OAuth | ✅ | ✅ | ✅ | ⚠️ Por solicitação |
| Qoder | openai | OAuth / PAT | ✅ | ✅ | ✅ | ⚠️ Por solicitação |
| Kilo Code | openai | OAuth | ✅ | ✅ | ✅ | ❌ |
| Cline | openai | OAuth | ✅ | ✅ | ✅ | ❌ |
| Kimi Coding | openai | OAuth | ✅ | ✅ | ✅ | ❌ |
| OpenRouter | openai | Chave de API | ✅ | ✅ | ❌ | ❌ |
| GLM/Kimi/MiniMax | claude | Chave de API | ✅ | ✅ | ❌ | ❌ |
| DeepSeek | openai | Chave de API | ✅ | ✅ | ❌ | ❌ |
| Groq | openai | Chave de API | ✅ | ✅ | ❌ | ❌ |
| xAI (Grok) | openai | Chave de API | ✅ | ✅ | ❌ | ❌ |
| Mistral | openai | Chave de API | ✅ | ✅ | ❌ | ❌ |
| Perplexity | openai | Chave de API | ✅ | ✅ | ❌ | ❌ |
| Together AI | openai | Chave de API | ✅ | ✅ | ❌ | ❌ |
| Fireworks AI | openai | Chave de API | ✅ | ✅ | ❌ | ❌ |
| Cerebras | openai | Chave de API | ✅ | ✅ | ❌ | ❌ |
| Cohere | openai | Chave de API | ✅ | ✅ | ❌ | ❌ |
| NVIDIA NIM | openai | Chave de API | ✅ | ✅ | ❌ | ❌ |
| Cloudflare AI | openai | Token de API + ID da Conta | ✅ | ✅ | ❌ | ❌ |
| Pollinations | openai | Nenhum (sem chave) | ✅ | ✅ | ❌ | ❌ |
| Scaleway AI | openai | Chave de API | ✅ | ✅ | ❌ | ❌ |
| LongCat | openai | Chave de API | ✅ | ✅ | ❌ | ❌ |
| Ollama Cloud | openai | Chave de API (opcional) | ✅ | ✅ | ❌ | ❌ |
| HuggingFace | openai | Chave de API | ✅ | ✅ | ❌ | ❌ |
| Nebius | openai | Chave de API | ✅ | ✅ | ❌ | ❌ |
| SiliconFlow | openai | Chave de API | ✅ | ✅ | ❌ | ❌ |
| Hyperbolic | openai | Chave de API | ✅ | ✅ | ❌ | ❌ |
| Vertex AI | gemini | Conta de Serviço | ✅ | ✅ | ✅ | ⚠️ Console da Nuvem |
| Puter | openai | Chave de API | ✅ | ✅ | ❌ | ❌ |
| Command Code | openai | OAuth | ✅ | ✅ | ✅ | ⚠️ Por solicitação |
| Z.AI / GLM | openai | Chave de API / OAuth | ✅ | ✅ | ❌ | ❌ |
| GLMT (preset) | claude | Chave de API | ✅ | ✅ | ❌ | ⚠️ Por solicitação |
| Kimi Coding | openai | OAuth / Chave de API | ✅ | ✅ | ✅ | ❌ |
| KIE | openai | Chave de API | ✅ | ✅ | ❌ | ❌ |
| Windsurf | openai | OAuth (Codeium) | ✅ | ✅ | ✅ | ⚠️ Por solicitação |
| GitLab Duo | openai | OAuth (GitLab) | ✅ | ✅ | ✅ | ❌ |
| Devin CLI | openai | OAuth | ✅ | ✅ | ✅ | ✅ API de Tarefas |
| Codex Cloud | openai-responses | OAuth | ✅ | ❌ | ✅ | ✅ Limites de taxa |
| Jules | openai | OAuth | ✅ | ✅ | ✅ | ✅ API de Tarefas |
| AgentRouter | openai | Chave de API | ✅ | ✅ | ❌ | ❌ |
| ChatGPT-Web | openai | Cookie de sessão + TLS | ✅ | ✅ | ❌ | ❌ |
| Grok-Web | openai | Cookie de sessão | ✅ | ✅ | ❌ | ❌ |
| Perplexity-Web | openai | Cookie de sessão | ✅ | ✅ | ❌ | ❌ |
| BlackBox-Web | openai | Cookie de sessão + TLS | ✅ | ✅ | ❌ | ❌ |
| Muse-Spark-Web | openai | Cookie de sessão | ✅ | ✅ | ❌ | ❌ |
| ModelScope | openai | Chave de API | ✅ | ✅ | ❌ | ⚠️ Política de cota |
| BazaarLink | openai | Chave de API | ✅ | ✅ | ❌ | ❌ |
| Petals | openai | Nenhum | ✅ | ✅ | ❌ | ❌ |
| Qoder | openai | OAuth / PAT | ✅ | ✅ | ✅ | ⚠️ Por solicitação |
| OpenCode (Go/Zen) | openai | OAuth | ✅ | ✅ | ✅ | ❌ |
| CLIProxyAPI | openai | Personalizado | ✅ | ✅ | ❌ | ❌ |
| Provedor | Formato | Autenticação | Stream | Não-Stream | Atualização de Token | API de Uso |
| ----------------- | ---------------- | -------------------------- | ---------------- | ---------- | -------------------- | ----------------------- |
| Claude | claude | Chave de API / OAuth | ✅ | ✅ | ✅ | ⚠️ Somente Admin |
| Gemini | gemini | Chave de API / OAuth | ✅ | ✅ | ✅ | ⚠️ Console da Nuvem |
| Gemini CLI | gemini-cli | OAuth | ✅ | ✅ | ✅ | ⚠️ Console da Nuvem |
| Antigravity | antigravity | OAuth | ✅ | ✅ | ✅ | ✅ API de cota total |
| OpenAI | openai | Chave de API | ✅ | ✅ | ❌ | ❌ |
| Codex | openai-responses | OAuth | ✅ forçado | ❌ | ✅ | ✅ Limites de taxa |
| GitHub Copilot | openai | OAuth + Token Copilot | ✅ | ✅ | ✅ | ✅ Instantâneas de cota |
| Cursor | cursor | Checksum personalizado | ✅ | ✅ | ❌ | ❌ |
| Kiro | kiro | AWS SSO OIDC | ✅ (EventStream) | ❌ | ✅ | ✅ Limites de uso |
| Qwen | openai | OAuth | ✅ | ✅ | ✅ | ⚠️ Por solicitação |
| Qoder | openai | OAuth / PAT | ✅ | ✅ | ✅ | ⚠️ Por solicitação |
| Kilo Code | openai | OAuth | ✅ | ✅ | ✅ | ❌ |
| Cline | openai | OAuth | ✅ | ✅ | ✅ | ❌ |
| Kimi Coding | openai | OAuth | ✅ | ✅ | ✅ | ❌ |
| OpenRouter | openai | Chave de API | ✅ | ✅ | ❌ | ❌ |
| GLM/Kimi/MiniMax | claude | Chave de API | ✅ | ✅ | ❌ | ❌ |
| DeepSeek | openai | Chave de API | ✅ | ✅ | ❌ | ❌ |
| Groq | openai | Chave de API | ✅ | ✅ | ❌ | ❌ |
| xAI (Grok) | openai | Chave de API | ✅ | ✅ | ❌ | ❌ |
| Mistral | openai | Chave de API | ✅ | ✅ | ❌ | ❌ |
| Perplexity | openai | Chave de API | ✅ | ✅ | ❌ | ❌ |
| Together AI | openai | Chave de API | ✅ | ✅ | ❌ | ❌ |
| Fireworks AI | openai | Chave de API | ✅ | ✅ | ❌ | ❌ |
| Cerebras | openai | Chave de API | ✅ | ✅ | ❌ | ❌ |
| Cohere | openai | Chave de API | ✅ | ✅ | ❌ | ❌ |
| NVIDIA NIM | openai | Chave de API | ✅ | ✅ | ❌ | ❌ |
| Cloudflare AI | openai | Token de API + ID da conta | ✅ | ✅ | ❌ | ❌ |
| Pollinations | openai | Nenhum (sem chave) | ✅ | ✅ | ❌ | ❌ |
| Scaleway AI | openai | Chave de API | ✅ | ✅ | ❌ | ❌ |
| LongCat | openai | Chave de API | ✅ | ✅ | ❌ | ❌ |
| Ollama Cloud | openai | Chave de API (opcional) | ✅ | ✅ | ❌ | ❌ |
| HuggingFace | openai | Chave de API | ✅ | ✅ | ❌ | ❌ |
| Nebius | openai | Chave de API | ✅ | ✅ | ❌ | ❌ |
| SiliconFlow | openai | Chave de API | ✅ | ✅ | ❌ | ❌ |
| Hyperbolic | openai | Chave de API | ✅ | ✅ | ❌ | ❌ |
| Vertex AI | gemini | Conta de Serviço | ✅ | ✅ | ✅ | ⚠️ Console da Nuvem |
| Puter | openai | Chave de API | ✅ | ✅ | ❌ | ❌ |
| Command Code | openai | OAuth | ✅ | ✅ | ✅ | ⚠️ Por solicitação |
| Z.AI / GLM | openai | Chave de API / OAuth | ✅ | ✅ | ❌ | ❌ |
| GLMT (preset) | claude | Chave de API | ✅ | ✅ | ❌ | ⚠️ Por solicitação |
| Kimi Coding | openai | OAuth / Chave de API | ✅ | ✅ | ✅ | ❌ |
| KIE | openai | Chave de API | ✅ | ✅ | ❌ | ❌ |
| Windsurf | openai | OAuth (Codeium) | ✅ | ✅ | ✅ | ⚠️ Por solicitação |
| GitLab Duo | openai | OAuth (GitLab) | ✅ | ✅ | ✅ | ❌ |
| Devin CLI | openai | OAuth | ✅ | ✅ | ✅ | ✅ API de Tarefas |
| Codex Cloud | openai-responses | OAuth | ✅ | ❌ | ✅ | ✅ Limites de taxa |
| Jules | openai | OAuth | ✅ | ✅ | ✅ | ✅ API de Tarefas |
| AgentRouter | openai | Chave de API | ✅ | ✅ | ❌ | ❌ |
| ChatGPT-Web | openai | Cookie de sessão + TLS | ✅ | ✅ | ❌ | ❌ |
| Grok-Web | openai | Cookie de sessão | ✅ | ✅ | ❌ | ❌ |
| Perplexity-Web | openai | Cookie de sessão | ✅ | ✅ | ❌ | ❌ |
| BlackBox-Web | openai | Cookie de sessão + TLS | ✅ | ✅ | ❌ | ❌ |
| Muse-Spark-Web | openai | Cookie de sessão | ✅ | ✅ | ❌ | ❌ |
| ModelScope | openai | Chave de API | ✅ | ✅ | ❌ | ⚠️ Política de cota |
| BazaarLink | openai | Chave de API | ✅ | ✅ | ❌ | ❌ |
| Petals | openai | Nenhum | ✅ | ✅ | ❌ | ❌ |
| Qoder | openai | OAuth / PAT | ✅ | ✅ | ✅ | ⚠️ Por solicitação |
| OpenCode (Go/Zen) | openai | OAuth | ✅ | ✅ | ✅ | ❌ |
| CLIProxyAPI | openai | Personalizado | ✅ | ✅ | ❌ | ❌ |
## Cobertura de Tradução de Formato
@@ -984,9 +993,9 @@ Os formatos de origem detectados incluem:
Os formatos de destino incluem:
- OpenAI chat/Respostas
- OpenAI chat/Responses
- Claude
- Gemini/Gemini-CLI/envelope Antigravity
- Gemini/Gemini-CLI/Antigravity envelope
- Kiro
- Cursor
@@ -996,12 +1005,12 @@ As traduções usam **OpenAI como o formato central** — todas as conversões p
Formato de Origem → OpenAI (central) → Formato de Destino
```
As traduções são selecionadas dinamicamente com base na forma do payload de origem e no formato de destino do provedor.
As traduções são selecionadas dinamicamente com base na forma da carga útil de origem e no formato de destino do provedor.
Camadas de processamento adicionais no pipeline de tradução:
- **Sanitização de resposta** — Remove campos não padrão das respostas no formato OpenAI (tanto streaming quanto não streaming) para garantir conformidade estrita com o SDK
- **Normalização de função** — Converte `developer``system` para alvos que não são OpenAI; mescla `system``user` para modelos que rejeitam a função de sistema (GLM, ERNIE)
- **Normalização de função** — Converte `developer``system` para destinos que não são OpenAI; mescla `system``user` para modelos que rejeitam a função de sistema (GLM, ERNIE)
- **Extração de tag de pensamento** — Analisa blocos ``do conteúdo para o campo`reasoning_content`
- **Saída estruturada** — Converte `response_format.json_schema` do OpenAI para `responseMimeType` + `responseSchema` do Gemini
@@ -1011,16 +1020,16 @@ Camadas de processamento adicionais no pipeline de tradução:
| -------------------------------------------------- | ------------------------- | --------------------------------------------------------------------------------------------- |
| `POST /v1/chat/completions` | OpenAI Chat | `src/sse/handlers/chat.ts` |
| `POST /v1/messages` | Claude Messages | Mesmo manipulador (detecção automática) |
| `POST /v1/responses` | OpenAI Respostas | `open-sse/handlers/responsesHandler.ts` |
| `POST /v1/responses` | OpenAI Responses | `open-sse/handlers/responsesHandler.ts` |
| `POST /v1/embeddings` | OpenAI Embeddings | `open-sse/handlers/embeddings.ts` |
| `GET /v1/embeddings` | Listagem de Modelos | Rota da API |
| `POST /v1/images/generations` | OpenAI Imagens | `open-sse/handlers/imageGeneration.ts` |
| `POST /v1/images/generations` | OpenAI Images | `open-sse/handlers/imageGeneration.ts` |
| `GET /v1/images/generations` | Listagem de Modelos | Rota da API |
| `POST /v1/providers/{provider}/chat/completions` | OpenAI Chat | Dedicado por provedor com validação de modelo |
| `POST /v1/providers/{provider}/embeddings` | OpenAI Embeddings | Dedicado por provedor com validação de modelo |
| `POST /v1/providers/{provider}/images/generations` | OpenAI Imagens | Dedicado por provedor com validação de modelo |
| `POST /v1/providers/{provider}/images/generations` | OpenAI Images | Dedicado por provedor com validação de modelo |
| `POST /v1/messages/count_tokens` | Contagem de Tokens Claude | Rota da API |
| `GET /v1/models` | Lista de Modelos OpenAI | Rota da API (chat + embedding + imagem + modelos personalizados) |
| `GET /v1/models` | Lista de Modelos OpenAI | Rota da API (chat + embedding + image + modelos personalizados) |
| `GET /api/models/catalog` | Catálogo | Todos os modelos agrupados por provedor + tipo |
| `POST /v1beta/models/*:streamGenerateContent` | Nativo do Gemini | Rota da API |
| `GET/PUT/DELETE /api/settings/proxy` | Configuração de Proxy | Configuração de proxy de rede |
@@ -1035,7 +1044,7 @@ O manipulador de bypass (`open-sse/utils/bypassHandler.ts`) intercepta solicita
O antigo registrador de solicitações baseado em arquivo (`open-sse/utils/requestLogger.ts`) é mantido apenas para compatibilidade com versões anteriores. O contrato de tempo de execução atual utiliza:
- `APP_LOG_TO_FILE=true` para logs de aplicação e auditoria gravados em `<repo>/logs/`
- `APP_LOG_TO_FILE=true` para logs de aplicação e auditoria escritos em `<repo>/logs/`
- Registros de log de chamadas com suporte a SQLite em `call_logs`
- Artefatos em `${DATA_DIR}/call_logs/YYYY-MM-DD/...` quando o pipeline de log de chamadas está habilitado
@@ -1049,21 +1058,21 @@ O antigo registrador de solicitações baseado em arquivo (`open-sse/utils/reque
## 2) Expiração de Token
- pré-verificação e atualização com tentativa de repetição para provedores atualizáveis
- tentativa de repetição 401/403 após tentativa de atualização no caminho principal
- pré-verificação e atualização com nova tentativa para provedores atualizáveis
- nova tentativa 401/403 após tentativa de atualização no caminho principal
## 3) Segurança do Stream
## 3) Segurança de Stream
- controlador de stream ciente de desconexões
- stream de tradução com descarte de fim de stream e tratamento de `[DONE]`
- fallback de estimativa de uso quando os metadados de uso do provedor estão ausentes
## 4) Degradação da Sincronização na Nuvem
## 4) Degradação de Sincronização em Nuvem
- erros de sincronização são exibidos, mas o tempo de execução local continua
- o agendador possui lógica capaz de repetição, mas a execução periódica atualmente chama a sincronização de tentativa única por padrão
- o agendador possui lógica capaz de nova tentativa, mas a execução periódica atualmente chama a sincronização de tentativa única por padrão
## 5) Integridade dos Dados
## 5) Integridade de Dados
- migrações de esquema SQLite e ganchos de autoatualização na inicialização
- caminho de compatibilidade de migração legado JSON → SQLite
@@ -1091,7 +1100,7 @@ A captura detalhada do payload da solicitação armazena até quatro estágios d
- solicitação bruta recebida do cliente
- solicitação traduzida realmente enviada para upstream
- resposta do provedor reconstruída como JSON; respostas transmitidas são compactadas para o resumo final mais metadados do stream
- resposta final do cliente retornada pelo OmniRoute; respostas transmitidas são armazenadas na mesma forma de resumo compacto
- resposta final do cliente retornada pelo OmniRoute; respostas transmitidas são armazenadas na mesma forma de resumo compactado
## Limites Sensíveis à Segurança
@@ -1108,7 +1117,7 @@ Variáveis de ambiente ativamente usadas pelo código:
- App/auth: `JWT_SECRET`, `INITIAL_PASSWORD`
- Armazenamento: `DATA_DIR`
- Comportamento compatível do node: `ALLOW_MULTI_CONNECTIONS_PER_COMPAT_NODE`
- Sobrescrita opcional da base de armazenamento (Linux/macOS quando `DATA_DIR` não estiver definido): `XDG_CONFIG_HOME`
- Substituição opcional da base de armazenamento (Linux/macOS quando `DATA_DIR` não definido): `XDG_CONFIG_HOME`
- Hashing de segurança: `API_KEY_SECRET`, `MACHINE_ID_SALT`
- Registro: `APP_LOG_TO_FILE`, `APP_LOG_RETENTION_DAYS`, `CALL_LOG_RETENTION_DAYS`
- URL de sincronização/nuvem: `NEXT_PUBLIC_BASE_URL`, `NEXT_PUBLIC_CLOUD_URL`
@@ -1120,21 +1129,21 @@ Variáveis de ambiente ativamente usadas pelo código:
1. `usageDb` e `localDb` compartilham a mesma política de diretório base (`DATA_DIR` -> `XDG_CONFIG_HOME/omniroute` -> `~/.omniroute`) com migração de arquivos legados.
2. `/api/v1/route.ts` delega para o mesmo construtor de catálogo unificado usado por `/api/v1/models` (`src/app/api/v1/models/catalog.ts`) para evitar desvios semânticos.
3. O registrador de solicitações escreve cabeçalhos/corpo completos quando habilitado; trate o diretório de logs como sensível.
3. O logger de requisições escreve cabeçalhos/corpo completos quando habilitado; trate o diretório de logs como sensível.
4. O comportamento em nuvem depende do correto `NEXT_PUBLIC_BASE_URL` e da acessibilidade do endpoint em nuvem.
5. O diretório `open-sse/` é publicado como o pacote de **workspace npm** `@omniroute/open-sse`. O código-fonte o importa via `@omniroute/open-sse/...` (resolvido pelo Next.js `transpilePackages`). Os caminhos de arquivos neste documento ainda usam o nome do diretório `open-sse/` para consistência.
6. Gráficos no painel usam **Recharts** (baseado em SVG) para visualizações analíticas interativas e acessíveis (gráficos de barras de uso de modelo, tabelas de divisão de provedores com taxas de sucesso).
5. O diretório `open-sse/` é publicado como o pacote **npm workspace** `@omniroute/open-sse`. O código-fonte o importa via `@omniroute/open-sse/...` (resolvido pelo Next.js `transpilePackages`). Os caminhos de arquivos neste documento ainda usam o nome do diretório `open-sse/` para consistência.
6. Gráficos no painel usam **Recharts** (baseado em SVG) para visualizações analíticas interativas e acessíveis (gráficos de barras de uso de modelo, tabelas de quebra de provedor com taxas de sucesso).
7. Testes E2E usam **Playwright** (`tests/e2e/`), executados via `npm run test:e2e`. Testes unitários usam **Node.js test runner** (`tests/unit/`), executados via `npm run test:unit`. O código-fonte sob `src/` é **TypeScript** (`.ts`/`.tsx`); o workspace `open-sse/` permanece em JavaScript (`.js`).
8. A página de configurações é organizada em 7 abas: Geral, Aparência, IA, Segurança, Roteamento, Resiliência, Avançado. A página de Resiliência configura apenas a fila de solicitações, o tempo de espera de conexão, o disjuntor do provedor e o comportamento de espera pelo tempo de espera; o estado de tempo de execução do disjuntor ao vivo é mostrado na página de Saúde.
9. A estratégia de **Context Relay** (`context-relay`) é dividida em duas camadas: `combo.ts` decide se uma transferência deve ser gerada, `chat.ts` injeta a transferência após a resolução da conta. Os dados da transferência vivem na tabela SQLite `context_handoffs`. Essa divisão é intencional porque apenas `chat.ts` sabe se a conta real mudou.
10. A **aplicação de proxy** agora é abrangente: `tokenHealthCheck.ts` resolve o proxy por conexão, `/api/providers/validate` usa `runWithProxyContext`, e `proxyFetch.ts` usa `undici.fetch()` para manter a compatibilidade do despachante no Node 22.
8. A página de configurações é organizada em 7 abas: Geral, Aparência, IA, Segurança, Roteamento, Resiliência, Avançado. A página de Resiliência configura apenas a fila de requisições, o tempo de espera de conexão, o quebra-provedor e o comportamento de espera; o estado de tempo de execução do quebra ao vivo é mostrado na página de Saúde.
9. A estratégia **Context Relay** (`context-relay`) é dividida em duas camadas: `combo.ts` decide se uma transferência deve ser gerada, `chat.ts` injeta a transferência após a resolução da conta. Os dados da transferência vivem na tabela SQLite `context_handoffs`. Essa divisão é intencional porque apenas `chat.ts` sabe se a conta real mudou.
10. A **imposição de proxy** agora é abrangente: `tokenHealthCheck.ts` resolve o proxy por conexão, `/api/providers/validate` usa `runWithProxyContext`, e `proxyFetch.ts` usa `undici.fetch()` para manter a compatibilidade do despachante no Node 22.
11. **Detecção de política de tempo de execução do Node.js**: `/api/settings/require-login` retorna os campos `nodeVersion` e `nodeCompatible`. A página de login renderiza um banner de aviso quando o tempo de execução está fora das linhas seguras suportadas do Node.js.
## Lista de Verificação de Verificação Operacional
- Compilar a partir do código-fonte: `npm run build`
- Construir a imagem Docker: `docker build -t omniroute .`
- Iniciar o serviço e verificar:
- Construir imagem Docker: `docker build -t omniroute .`
- Iniciar serviço e verificar:
- `GET /api/settings`
- `GET /api/v1/models`
- A URL base do alvo da CLI deve ser `http://<host>:20128/v1` quando `PORT=20128`