Files
OmniRoute/bin/cli/locales/pt-BR.json
Diego Rodrigues de Sa e Souza 6248699ce5 Release/v3.8.0 — full changelog with 660+ commits (#2419)
* fix(cli-tools): guard modelId type before calling indexOf

E2E shakedown v3.8.0: cli-tools quebrava com TypeError quando dynamicModels
continha entradas sem .id (objeto retornado diretamente em vez de string).

* fix(offline): avoid SSR/CSR hydration mismatch on navigator.onLine

Replace useState+lazy-initializer with useSyncExternalStore so the server
snapshot (() => false) and client snapshot (() => navigator.onLine) are
declared separately. React hydrates with the server value and switches to
the real online status client-side without a mismatch.

* chore(i18n): add missing en.json keys for translator, cli-tools, memory, onboarding

Adds 58 missing keys identified by the new dashboard audit script:
- cliTools: 18 custom CLI builder keys (CustomCliCard)
- translator: 24 keys covering stream transformer, live monitor, test bench
- memory: 12 health/pagination/dialog keys
- onboarding.tier: 8 keys for the tier tour walkthrough

Also adds scripts/i18n/audit-dashboard-pages.mjs which scans all dashboard
pages, reports t() calls referencing missing en.json keys, and flags
candidate hardcoded JSX/attribute strings.

* chore(i18n): replace hardcoded UI text with t() calls across dashboard (round 1)

Subagents refactored 8 high-impact dashboard pages, replacing 81 of the
407 hardcoded English/PT strings flagged by the audit with proper
useTranslations() lookups. Added 73 corresponding keys to en.json across
the home, apiManager, providers, settings, and usage namespaces.

Pages affected:
- BudgetTab (27 → 0)
- HomePageClient (2 → 0)
- RoutingTab (25 → 7)
- ResilienceTab (38 → 18)
- SystemStorageTab (42 → 21)
- providers/[id] (17 → 15)
- ApiManagerPageClient (14 → 13)
- OneproxyTab (13 → 10)

Also adds two helper scripts:
- scripts/i18n/extract-keys-from-diff.mjs — extracts new keys from git diff
- scripts/i18n/merge-keys.mjs — merges a pending-keys JSON into en.json

Remaining hardcoded strings will be addressed in follow-up rounds.

* chore(i18n): replace hardcoded UI text with t() calls across dashboard (round 2)

Continues round 1 (commit 8d34f4c65). Round-2 subagents refactored
additional dashboard pages, replacing 77 more hardcoded strings with
useTranslations() lookups. Added 79 corresponding keys to en.json
across the a2aDashboard, agents, analytics, apiManager, cliTools,
common, and settings namespaces.

Pages affected:
- a2a/page (new useTranslations + 6 keys)
- agent-skills/page (new useTranslations + 9 keys)
- AutoRoutingAnalyticsTab (new useTranslations + 6 keys)
- AppearanceTab (8 → 6 remaining)
- OneproxyTab (10 → 0)
- ResilienceTab (18 → 0 missing key)
- RoutingTab (7 → 0 missing key)
- VisionBridgeSettingsTab (new useTranslations + 6 keys)
- CopilotToolCard (7 → 0 missing key)
- ApiManagerPageClient (13 → 0 missing key)
- gamification/admin (new useTranslations + 7 keys)

Hardcoded total: 326 → 249. Real missing keys: 0 (the 6 still flagged
are false positives in exampleTemplates.tsx where t is passed as a
parameter — keys exist at translator.templatePayloads.*).

* chore(i18n): replace hardcoded UI text with t() calls across dashboard (round 3)

Round-3 subagents and manual edits refactored 9 more dashboard pages
(plus 2 small extras), replacing ~80 hardcoded strings with
useTranslations() lookups. Added 79 corresponding keys to en.json
across analytics, cloudAgents, combos, common, health, settings, and
usage namespaces.

Pages affected:
- analytics/ComboHealthTab (new useTranslations + 15 keys)
- analytics/CompressionAnalyticsTab (new useTranslations + 11 keys)
- settings/SystemStorageTab (21 → 0 missing key)
- tokens/page (new useTranslations + 13 keys)
- usage/BudgetTab (9 missing fixed)
- health/page (manual: 6 keys)
- cloud-agents/page (manual: 3 keys)
- combos/page (manual: 1 key)

Hardcoded total: 249 → 164. Real missing keys: 0 (6 remaining are
exampleTemplates.tsx false positives).

Also adds scripts/i18n/build-pending-from-missing.mjs which reads
_audit.json and locates English values from HEAD to rebuild
_pending-keys.json after race-condition resets between subagent edits.

* chore(i18n): localize remaining dashboard settings labels

Replace hardcoded labels in compression and resilience settings with
translation lookups to continue the dashboard i18n cleanup.

Add the v3.8.0 dashboard shakedown runbook to document the manual
smoke-test process and known dev environment pitfalls.

* chore(i18n): replace hardcoded UI text with t() calls across dashboard (round 4)

Round-4 subagent + manual key-resolution refactored remaining strings in
3 high-traffic settings/API tabs, plus extracted English values for
keys that were already added as t() calls but lost during the previous
en.json race-condition resets.

Pages affected:
- api-manager/ApiManagerPageClient (7 → 0 missing key)
- settings/CompressionSettingsTab (8 → 0 missing key)
- settings/MemorySkillsTab (8 → 0 missing key)
- settings/ResilienceTab (4 more keys recovered)

Hardcoded total: 164 → 140. Real missing keys: 0 (6 remaining are the
exampleTemplates.tsx false positives — t passed as parameter).

* chore(i18n): replace hardcoded UI text with t() calls across dashboard (round 5)

Round-5 agent began processing the remaining smaller dashboard files.
Added 5 more keys to en.json for providers/[id]/page.tsx OAuth flow
labels and the cross-OS auto-detection hint.

Pages affected:
- providers/[id]/page.tsx (5 keys)

Hardcoded total: 140 → 136. Real missing keys: 0.

* chore(i18n): resolve last 2 missing providers/[id] keys

Adds providerDetailMyClaudeAccountPlaceholder and
providerDetailPathAutoDetected — the final user-visible labels in the
providers/[id] page that the round-5 subagent rewrote to t() calls
without yet adding to en.json.

Real missing keys: 0 (6 remaining are exampleTemplates.tsx false
positives — t is passed as a parameter so the audit cannot resolve the
namespace; keys do exist at translator.templatePayloads.*).

* chore(i18n): replace hardcoded UI text with t() calls across dashboard (round 6 — 10 parallel agents)

Round-6 dispatched 10 parallel subagents covering all 57 remaining
dashboard files. Each agent worked on a disjoint file set to avoid
en.json race conditions. Added ~60 new i18n keys across 9 namespaces
covering small UI labels, table headers, search placeholders, and
empty-state messages.

Major changes:
- analytics: SearchAnalyticsTab, ProviderUtilizationTab, DiversityScoreCard, CompressionAnalyticsTab (new useTranslations + keys)
- batch: BatchDetailModal, BatchListTab, FileDetailModal, FilesListTab (new useTranslations + keys)
- settings: CliproxyapiSettingsTab, PayloadRulesTab, ModelCooldownsCard, AppearanceTab, PricingTab (mostly new useTranslations)
- endpoint: TokenSaverCard, ApiEndpointsTab, EndpointPageClient
- cache: CachePerformance, IdempotencyLayer, ReasoningCacheTab, MediaPageClient, page
- combos: IntelligentComboPanel, page
- playground: ChatPlayground, SearchPlayground
- providers: ProviderCard
- onboarding: TierFlowDiagram
- changelog: ChangelogViewer
- home: ProviderTopology, TierCoverageWidget, BootstrapBanner, BadgeToast
- usage: BudgetTab, BudgetTelemetryCards, QuotaTable
- quotaShare: QuotaSharePageClient
- profile: page
- leaderboard: page
- skills: page

Hardcoded total: 131 → 60. Real missing keys: 0 plus 1 false-positive
for combos.modePack (lookup via prop-passed t).

* chore(i18n): finalize round-6 keys for batch/cache/endpoint/usage

Adds the remaining keys produced by parallel agents A4, A6, A8, A9:
- common: batch-related labels (BatchDetailModal, BatchListTab,
  FileDetailModal, FilesListTab, page) + profile/leaderboard
- cache: hit rate, latency, retry, avg chars
- endpoint: token saver, API endpoints, copy URL, cloud/local labels
- usage: noSpend, activeSessions, quotaAlerts, budget timing
- skills: install/marketplace/filter
- proxyRegistry/quotaShare/mcpDashboard: misc labels

Hardcoded total: 60 → 48. Real missing keys: 0 (modePack remaining is a
false positive — combos.modePack exists but the audit can't resolve it
since IntelligentComboPanel receives t as a prop).

* fix(playground): dedupe filteredModels to avoid duplicate React key warning

The /v1/models endpoint can return the same model id twice (e.g., when a
model is listed by both an alias and its canonical provider), which made
the <Select> emit two <option> elements with the same key — triggering
"Encountered two children with the same key, codex/gpt-5.5".

Replace the chained filter + map with a single pass that skips ids
already added.

* fix(playground): guard against non-string model ids before .split/.startsWith

The /v1/models endpoint can include synthetic entries (combos, locals,
in-progress imports) with a null/undefined id. The playground used to
call m.id.split("/") in the provider-discovery loop, which threw on the
first non-string entry; the surrounding .catch(() => {}) silently
swallowed the error, so the provider/model/account dropdowns ended up
empty even though /v1/models returned thousands of valid entries.

- Skip entries without a string id before split/startsWith.
- Log the rejection in the .catch handler so future regressions are
  visible in DevTools instead of silently emptying the UI.

* fix(playground): guard ChatPlayground filteredModels for non-string ids

Same root cause as commit 49fe356b9: ChatPlayground filtered models
with m.id.startsWith(...) which crashed on null/undefined ids returned
by /v1/models (synthetic combo entries). Apply the same defensive guard
and dedupe used in the parent page.

* fix(claude): drop orphan tool_result after fixToolAdjacency strip (discussion #2410)

Discussion #2410 reports Claude returning 400 for sequences like:
  assistant: tool_use(id=X)
  user: <plain text>           ← breaks adjacency
  user: tool_result(id=X)

The previous round added `fixToolAdjacency` (commit 44d9abac9) which
correctly strips the orphan tool_use from the assistant message. But
that left the now-unmatched tool_result intact, so the upstream
rejected the request with:

  messages.N.content.M: unexpected `tool_use_id` found in `tool_result`
  blocks: X. Each tool_result block must have a corresponding tool_use
  block in the previous message.

Fix: after running `fixToolAdjacency`, re-run `fixToolPairs` to drop
the orphaned tool_result blocks. All three call sites updated:
  - contextManager.purifyHistory (both inside the binary-search loop
    and the final pass)
  - BaseExecutor message-prep (Claude path)
  - claudeCodeCompatible request signer

Also tightens an unrelated dynamic-key access in
readNestedString (claudeCodeCompatible) to satisfy the prototype-
pollution scanner triggered by the post-tool semgrep hook.

* fix(mitm): point runtime manager re-export to js entrypoint

Use the emitted `.js` path for the runtime manager re-export so dynamic
runtime loading resolves correctly outside the Turbopack alias handling.

* docs: add AgentRouter setup guide (#2422)

Integrated into release/v3.8.0 — AgentRouter setup guide docs.

* feat: add new feature on combos - falloverBeforeRetry (#2417)

Integrated into release/v3.8.0 — falloverBeforeRetry for per-model quota skipping in combos.

* feat(batch): implement 10 feature requests harvested  (#2414)

Integrated into release/v3.8.0 — batch of 10 feature requests: llama.cpp local provider, upstream error exposure, Termux detection, providers rotate CLI, t3.chat web skeleton, Zed Docker integration, Kiro multi-account OAuth isolation, auto-combo cost blending, auto-combo context filter, combo provider-level exhaustion tracking (#1731). Conflicts with #2417 (falloverBeforeRetry) resolved.

* fix(gamification): resolve SQL bug, auth gap, pagination, and anomaly scoring (#2421)

Integrated into release/v3.8.0 — 6 critical gamification bug fixes: SQL SELECT in checkActionCountBadges, federation auth enforcement, leaderboard pagination offset, real z-score computation, addXp level calculation, and barrel index.ts

* docs(changelog): add post-release entries for #2414 #2417 #2421 #2422

- feat(batch): T3-Chat-Web executor, exhaustedProviders set (#1731), Zed Docker
- feat(combos): falloverBeforeRetry + setTry loop (#2417 — @hartmark)
- fix(gamification): SQL SELECT bug, federation auth, pagination, z-score (#2421 — @oyi77)
- docs: AgentRouter setup guide (#2422 — @leninejunior)

* fix(security): resolve CodeQL random/password-hash alerts and sync docs & tests

---------

Co-authored-by: diegosouzapw <diego.souza.pw@gmail.com>
Co-authored-by: Lenine Júnior <lenine@engrene.com.br>
Co-authored-by: Markus Hartung <mail@hartmark.se>
Co-authored-by: Paijo <14921983+oyi77@users.noreply.github.com>
2026-05-20 02:05:50 -03:00

1259 lines
48 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"common": {
"error": "Erro: {message}",
"serverOffline": "Servidor OmniRoute offline. Inicie com: omniroute serve",
"authRequired": "Autenticação necessária. Configure OMNIROUTE_API_KEY ou execute: omniroute setup",
"rateLimited": "Limite de requisições atingido. Tente novamente em {seconds}s.",
"timeout": "Requisição expirou após {ms}ms.",
"success": "Concluído.",
"yes": "sim",
"no": "não",
"confirm": "Tem certeza? (sim/não)",
"dryRun": "[simulação] faria: {action}",
"cancelled": "Cancelado.",
"jsonOpt": "Saída em JSON",
"yesOpt": "Pular confirmação"
},
"setup": {
"title": "Configuração do OmniRoute",
"passwordPrompt": "Senha de administrador",
"providerPrompt": "Provedor padrão (deixe em branco para pular)",
"done": "Configuração concluída",
"passwordSet": "Senha de administrador configurada",
"providerSet": "Provedor configurado: {name}",
"testingProvider": "Testando conexão com provedor: {name}",
"testPassed": "Teste do provedor aprovado",
"testFailed": "Teste do provedor falhou: {error}",
"loginEnabled": "Login: habilitado (senha atualizada)",
"loginDisabled": "Login: desabilitado",
"providerInfo": "Provedor: {info}"
},
"doctor": {
"title": "OmniRoute Doctor",
"dbOk": "Banco de dados: OK ({path})",
"dbMissing": "Banco de dados: não inicializado — execute `omniroute setup`",
"portOk": "Porta {port}: disponível",
"portConflict": "Porta {port}: em uso por outro processo",
"encryptionOk": "Chave de criptografia: configurada",
"encryptionMissing": "Chave de criptografia ausente — execute `omniroute setup`",
"allGood": "Todas as verificações passaram.",
"warnings": "{count} aviso(s) — veja acima."
},
"providers": {
"title": "Provedores",
"noProviders": "Nenhum provedor configurado. Execute: omniroute setup",
"testing": "Testando {name}...",
"available": "{count} provedor(es) disponível(is)",
"connected": "Conectado",
"disconnected": "Desconectado",
"validationFailed": "Validação falhou: {error}",
"metrics": {
"description": "Exibir métricas de performance dos provedores (latência, taxa de sucesso, custo)",
"provider": "Filtrar por ID de provedor",
"connection_id": "Filtrar por ID de conexão",
"period": "Período: 1h|6h|24h|7d|30d (padrão: 24h)",
"metric": "Focar em um campo de métrica específico",
"sort": "Ordenar por campo (decrescente)",
"limit": "Máximo de linhas (padrão: 50)",
"watch": "Atualizar a cada 5s (modo live)",
"compare": "IDs de provedores separados por vírgula para comparar"
},
"metric_single": {
"description": "Obter um único valor de métrica para uma conexão específica"
},
"rotate": {
"description": "Rotacionar a chave de API upstream de uma conexão de provedor",
"newKeyOpt": "Novo valor de chave de API (evite: prefira --from-env)",
"fromEnvOpt": "Ler nova chave da variável de ambiente VAR",
"oauthOpt": "Iniciar fluxo de reautenticação OAuth",
"skipTestOpt": "Pular teste de conectividade pós-rotação",
"dryRunOpt": "Exibir o que seria alterado sem gravar",
"confirmPrompt": "Substituir a chave de API da conexão \"{name}\" ({id})? [s/N] ",
"dryRunResult": "[dry-run] Rotacionaria a chave para \"{name}\" ({id}). Nenhuma alteração feita.",
"oauthHint": "Conexão OAuth — execute: omniroute oauth {provider}",
"envVarEmpty": "A variável de ambiente {var} não está definida ou está vazia.",
"success": "Chave rotacionada para \"{name}\". Execute `providers test {id}` para verificar.",
"testPassed": "Teste pós-rotação aprovado.",
"testFailed": "Teste pós-rotação falhou: {error}"
},
"status": {
"description": "Exibir saúde das chaves de todas as conexões de provedores (idade, validade, cooldown)",
"providerOpt": "Filtrar por nome do provedor",
"header": "ID Provedor Nome Validade Status Status Teste Cooldown Até",
"noData": "Nenhum dado de conexão de provedor disponível.",
"requiresServer": "providers status requer o servidor OmniRoute em execução."
}
},
"keys": {
"title": "Chaves de API",
"addDescription": "Adicionar ou atualizar uma chave de API para um provedor",
"listDescription": "Listar todas as chaves de API configuradas",
"removeDescription": "Remover uma chave de API de um provedor",
"regenerateDescription": "Regenerar uma chave de API do OmniRoute",
"revokeDescription": "Revogar uma chave de API do OmniRoute",
"revealDescription": "Revelar o valor completo da chave (sem máscara)",
"usageDescription": "Exibir uso recente de uma chave de API",
"usageLimitOpt": "Número de requisições recentes",
"rotateDescription": "Gerar nova chave e invalidar a antiga",
"graceOpt": "Período de carência (ms) antes de invalidar a chave antiga",
"stdinOpt": "Ler chave de API via stdin",
"added": "Chave adicionada para {provider}.",
"removed": "Chave removida.",
"listed": "{count} chave(s).",
"noKeys": "Nenhuma chave configurada.",
"noUsage": "Nenhum dado de uso encontrado.",
"confirmRemove": "Remover chave {id}?",
"confirmRegenerate": "Regenerar chave {id}?",
"confirmRevoke": "Revogar chave {id}?",
"confirmRotate": "Rotacionar chave {id}? (a chave antiga será invalidada após o período de carência)",
"regenerated": "Chave regenerada. Nova chave: {key}",
"revoked": "Chave {id} revogada.",
"rotated": "Chave {id} rotacionada. Novo ID: {newId}",
"revealWarning": "⚠ Isso exibirá a chave completa sem máscara. Certifique-se de que sua tela está privada.",
"providerRequired": "Provedor é obrigatório.",
"keyRequired": "Chave de API é obrigatória.",
"stdinEmpty": "Nenhuma chave fornecida via stdin.",
"unknownProvider": "Provedor desconhecido: {provider}",
"policy": {
"title": "Política da Chave",
"showDescription": "Exibir política de taxa/custo de uma chave",
"setDescription": "Definir política de taxa/custo de uma chave",
"rateLimitOpt": "Máximo de requisições por minuto",
"maxCostOpt": "Custo máximo por dia (USD)",
"allowedModelsOpt": "Lista de modelos permitidos (separados por vírgula)",
"nothingToSet": "Nenhum campo de política fornecido. Use --rate-limit, --max-cost ou --allowed-models.",
"updated": "Política atualizada."
},
"expiration": {
"title": "Expiração de Chaves",
"listDescription": "Listar chaves prestes a expirar",
"daysOpt": "Exibir chaves que expiram em N dias",
"none": "Nenhuma chave expirando nos próximos {days} dias.",
"listTitle": "Chaves que expiram nos próximos {days} dias:"
}
},
"stream": {
"description": "Transmitir resposta de chat com modos de inspeção SSE",
"file": "Ler prompt de arquivo",
"stdin": "Ler prompt da entrada padrão",
"model": "ID do modelo (padrão: auto)",
"system": "Prompt de sistema",
"combo": "Forçar um combo específico pelo nome",
"max_tokens": "Máximo de tokens na resposta",
"responses_api": "Usar /v1/responses em vez de /v1/chat/completions",
"raw": "Imprimir linhas SSE brutas como recebidas",
"debug": "Imprimir informações de timing por chunk no stderr",
"save": "Salvar todos os eventos SSE em arquivo .jsonl",
"error": {
"empty_prompt": "Erro: prompt obrigatório (argumento posicional, --file ou --stdin)"
}
},
"usage": {
"description": "Analytics de uso, budgets, quotas e logs",
"analytics": {
"description": "Exibir analytics de uso agregados",
"period": "Período: 1d|7d|30d|90d|ytd|all (padrão: 30d)",
"provider": "Filtrar por ID de provedor"
},
"budget": {
"description": "Gerenciar budgets de custo",
"set": {
"scope": "Escopo do budget (padrão: global)",
"period": "Período do budget: daily|weekly|monthly (padrão: monthly)"
}
},
"quota": {
"description": "Exibir uso de quota dos provedores",
"provider": "Filtrar por ID de provedor",
"check": "Mostrar se há quota disponível para uma nova requisição"
},
"logs": {
"description": "Exibir logs de chamadas",
"limit": "Número de entradas de log a retornar (padrão: 100)",
"search": "Filtro de busca",
"since": "Retornar logs a partir deste timestamp",
"follow": "Fazer tail contínuo de novos logs",
"api_key": "Filtrar logs por chave de API"
},
"utilization": {
"description": "Exibir métricas de utilização por chave de API",
"api_key": "Filtrar por chave de API"
},
"history": {
"description": "Exibir histórico de requisições",
"limit": "Número de entradas de histórico (padrão: 100)"
},
"proxy_logs": {
"description": "Exibir logs de requisições em nível de proxy",
"limit": "Número de entradas de proxy log (padrão: 100)"
}
},
"cost": {
"description": "Exibir relatório de custos com breakdown por provedor, modelo, combo ou chave de API",
"period": "Período: 1d|7d|30d|90d|ytd|all (padrão: 30d)",
"since": "Data de início (formato ISO, ex: 2026-01-01) — substitui --period",
"until": "Data de fim (formato ISO)",
"group_by": "Agrupar por: provider|model|api-key|combo|day (padrão: provider)",
"api_key_filter": "Filtrar por uma chave de API específica",
"limit": "Número máximo de linhas (padrão: 100)"
},
"simulate": {
"description": "Simulação de routing em dry-run — mostra quais provedores seriam selecionados sem chamar o upstream",
"file": "Carregar body completo da requisição de arquivo JSON",
"model": "ID do modelo (padrão: auto)",
"combo": "Forçar um combo específico pelo nome",
"reasoning": "Nível de esforço de raciocínio (low|medium|high)",
"thinking": "Budget de tokens para raciocínio estendido",
"explain": "Imprimir árvore de fallback e faixa de custo no stderr",
"noCombo": "Nenhum combo correspondente encontrado. Configure um com: omniroute combo create"
},
"chat": {
"description": "Enviar um prompt único ao OmniRoute",
"file": "Ler prompt de arquivo",
"stdin": "Ler prompt da entrada padrão",
"system": "Prompt de sistema",
"model": "ID do modelo (padrão: auto)",
"max_tokens": "Máximo de tokens na resposta",
"temperature": "Temperatura de amostragem (02)",
"top_p": "Amostragem nucleus top-p",
"reasoning_effort": "Nível de esforço de raciocínio (low|medium|high)",
"thinking_budget": "Budget de tokens para raciocínio estendido",
"combo": "Forçar um combo específico pelo nome",
"responses_api": "Usar /v1/responses em vez de /v1/chat/completions",
"stream": "Transmitir resposta incrementalmente",
"no_history": "Não salvar em ~/.omniroute/cli-history.jsonl",
"error": {
"empty_prompt": "Erro: prompt obrigatório (argumento posicional, --file ou --stdin)"
}
},
"serve": {
"description": "Iniciar o servidor OmniRoute (ação padrão)",
"starting": "Iniciando servidor OmniRoute na porta {port}...",
"ready": "Pronto em http://localhost:{port}",
"stopping": "Parando servidor (PID {pid})...",
"stopped": "Servidor parado.",
"notRunning": "Servidor não está em execução.",
"port": "Porta de escuta (padrão: 20128)",
"no_open": "Não abrir navegador automaticamente",
"daemon": "Executar servidor em segundo plano",
"log": "Exibir logs do servidor inline",
"no_recovery": "Desabilitar reinício automático em crash (modo debug)",
"max_restarts": "Máximo de reinícios em 30s antes de desistir (padrão: 2)",
"tray": "Mostrar ícone na bandeja do sistema (apenas desktop, opt-in)",
"no_tray": "Desabilitar ícone na bandeja do sistema"
},
"backup": {
"title": "Backup",
"description": "Criar backup dos dados do OmniRoute",
"creating": "Criando backup...",
"done": "Backup salvo em {path}",
"noFiles": "Nenhum arquivo para backup (banco não inicializado)",
"failed": "Backup falhou: {error}",
"restoring": "Restaurando de {path}...",
"restored": "Restauração concluída.",
"restoreDescription": "Restaurar a partir de um backup",
"listTitle": "Backups Disponíveis",
"noBackups": "Nenhum backup encontrado.",
"notFound": "Backup não encontrado: {name}",
"confirmRestore": "Substituir dados atuais pelo backup de {ts}?",
"createDescription": "Criar backup dos dados do OmniRoute",
"nameOpt": "Nome personalizado para o backup",
"cloudOpt": "Fazer upload do backup para armazenamento na nuvem",
"encryptOpt": "Criptografar backup com AES-256-GCM",
"keyFileOpt": "Caminho para arquivo com a senha de criptografia",
"excludeOpt": "Excluir arquivo que corresponde ao padrão (repetível)",
"retentionOpt": "Manter apenas os últimos N backups",
"passphrasePrompt": "Senha de criptografia: ",
"noPassphrase": "Senha é obrigatória para backup criptografado.",
"cloudFailed": "Aviso: upload para nuvem falhou. Backup local foi salvo.",
"cloudUploaded": "Backup enviado para nuvem: {url}",
"auto": {
"title": "Agendamento de Backup",
"enableDescription": "Ativar backups automáticos agendados",
"disableDescription": "Desativar backups automáticos agendados",
"statusDescription": "Exibir status do agendamento de backup",
"cronOpt": "Expressão cron para o agendamento (padrão: diário às 3h)",
"enabled": "Backup automático ativado (cron: {cron}).",
"hint": " O agendamento é lido pelo omniroute serve ao iniciar.",
"disabled": "Backup automático desativado.",
"notConfigured": "Nenhum agendamento de backup configurado."
}
},
"health": {
"description": "Verificar saúde do servidor e status dos componentes",
"noServer": "Servidor não está em execução. Inicie com: omniroute serve",
"title": "Saúde",
"status": "Status: {status}",
"uptime": "Uptime: {uptime}",
"requests": "Requisições (24h): {count}",
"cost": "Custo (24h): ${cost}"
},
"quota": {
"description": "Exibir uso de cota dos provedores",
"noServer": "Servidor não está em execução. Inicie com: omniroute serve",
"noData": "Nenhuma informação de cota disponível."
},
"cache": {
"description": "Gerenciar cache de respostas",
"noServer": "Servidor não está em execução. Inicie com: omniroute serve",
"cleared": "Cache limpo.",
"clearFailed": "Falha ao limpar cache."
},
"test": {
"description": "Testar conexão com um provedor",
"noServer": "Servidor não está em execução. Inicie com: omniroute serve",
"testing": "Testando {provider} / {model}...",
"passed": "Conexão bem-sucedida!",
"failed": "Conexão falhou: {error}",
"allProvidersOpt": "Testar todos os provedores configurados",
"latencyOpt": "Exibir medições de latência (avg/min/max ms)",
"repeatOpt": "Repetir o teste N vezes e agregar os resultados",
"compareOpt": "Modelos separados por vírgula para comparar (ex: gpt-4o,claude-3-5-sonnet)",
"saveOpt": "Salvar resultados em arquivo JSON",
"saved": "Resultados salvos em {path}",
"compareTitle": "Comparação de Modelos",
"compareMinTwo": "São necessários pelo menos dois modelos para --compare (separados por vírgula)",
"noProviders": "Nenhum provedor configurado. Adicione um com: omniroute keys add"
},
"update": {
"checking": "Verificando atualizações...",
"upToDate": "Já está atualizado ({version}).",
"available": "Atualização disponível: {current} → {latest}",
"installing": "Instalando {latest}...",
"done": "Atualizado para {latest}. Reinicie o servidor para aplicar."
},
"mcp": {
"title": "Servidor MCP",
"call": {
"description": "Invocar uma ferramenta MCP diretamente",
"args": "Objeto JSON de argumentos (inline)",
"args_file": "Caminho para arquivo JSON de argumentos",
"stream": "Usar endpoint de streaming (/api/mcp/stream)",
"scope": "Escopo requerido (repetível, ex: read:health)"
},
"scopes": {
"description": "Listar escopos MCP disponíveis",
"tool": "Mostrar escopos requeridos por uma ferramenta específica"
},
"tools": {
"description": "Inspecionar ferramentas MCP",
"list": {
"description": "Listar todas as ferramentas MCP",
"scope": "Filtrar por escopo"
},
"info": {
"description": "Exibir metadados de uma ferramenta MCP"
},
"schema": {
"description": "Exibir schema JSON de entrada/saída de uma ferramenta MCP",
"io": "Tipo de schema: input|output (padrão: input)"
}
},
"audit": {
"description": "Log de auditoria MCP (alias para audit --source mcp)"
},
"running": "Servidor MCP em execução ({transport})",
"stopped": "Servidor MCP parado.",
"restarted": "Servidor MCP reiniciado."
},
"a2a": {
"skills": {
"description": "Listar skills A2A disponíveis na agent card"
},
"invoke": {
"description": "Invocar uma skill A2A e retornar o ID da task",
"input": "Objeto JSON de entrada",
"input_file": "Caminho para arquivo JSON de entrada",
"wait": "Aguardar conclusão da task antes de retornar",
"timeout": "Timeout aguardando conclusão em ms (padrão: 60000)"
},
"tasks": {
"description": "Gerenciar tasks A2A",
"list": {
"status": "Filtrar por status",
"skill": "Filtrar por ID de skill"
},
"watch": {
"description": "Monitorar status da task até conclusão"
},
"stream": {
"description": "Transmitir eventos de execução da task via SSE"
},
"logs": {
"description": "Exibir mensagens e artefatos da task"
}
}
},
"policy": {
"description": "Gerenciar políticas de autorização do OmniRoute",
"list": {
"description": "Listar políticas",
"kind": "Filtrar por tipo (allow|deny|rate-limit|cost-cap)",
"scope": "Filtrar por escopo (global|api-key|provider)"
},
"get": {
"description": "Obter detalhes de política por ID"
},
"create": {
"description": "Criar política a partir de arquivo JSON",
"file": "Caminho para arquivo JSON de política"
},
"update": {
"description": "Atualizar política a partir de arquivo JSON",
"file": "Caminho para arquivo JSON de política"
},
"delete": {
"description": "Deletar política por ID",
"yes": "Pular confirmação"
},
"evaluate": {
"description": "Dry-run de avaliação de política (saída 0=permitido, 4=negado)",
"api_key": "Chave de API a avaliar",
"action": "Ação a verificar (ex: chat, embed, admin)",
"resource": "Caminho ou identificador do recurso",
"context": "Contexto adicional como objeto JSON"
},
"export": {
"description": "Exportar todas as políticas para arquivo JSON"
},
"import": {
"description": "Importar políticas de arquivo JSON",
"overwrite": "Sobrescrever políticas existentes com mesmo ID"
}
},
"compression": {
"description": "Configurar e inspecionar o pipeline de compressão do OmniRoute",
"status": {
"description": "Exibir status atual de compressão e configurações"
},
"configure": {
"description": "Configurar as definições de compressão",
"engine": "Engine de compressão (caveman|rtk|hybrid|none)",
"caveman_agg": "Agressividade do Caveman 0.01.0",
"rtk_budget": "Budget de tokens RTK",
"language_pack": "Language pack a ativar"
},
"engine": {
"description": "Obter ou definir o engine de compressão ativo"
},
"combos": {
"description": "Gerenciar estatísticas de combos de compressão"
},
"rules": {
"description": "Gerenciar regras de compressão",
"add": {
"pattern": "Padrão para corresponder (regex ou campo:padrão)",
"action": "Ação: drop|shrink|replace"
}
},
"language_packs": {
"description": "Listar language packs de compressão disponíveis"
},
"preview": {
"description": "Visualizar efeito de compressão em uma requisição",
"file": "Caminho para arquivo JSON da requisição"
}
},
"tunnel": {
"title": "Túneis",
"listDescription": "Listar túneis ativos",
"createDescription": "Criar um túnel",
"created": "Túnel criado: {url}",
"stopped": "Túnel parado.",
"confirmStop": "Parar túnel {id}?",
"stopDescription": "Parar um túnel",
"statusDescription": "Exibir status detalhado de um túnel",
"logsDescription": "Exibir logs de um túnel",
"infoDescription": "Exibir configuração detalhada de um túnel",
"rotateDescription": "Gerar nova URL para o túnel",
"tailOpt": "Número de linhas de log a exibir",
"typeRequired": "Tipo de túnel é obrigatório.",
"noLogs": "Nenhum log disponível.",
"notAvailable": "Informações do túnel não disponíveis.",
"noTunnels": "Nenhum túnel ativo.",
"infoTitle": "Info do túnel: {type}",
"rotated": "URL do túnel rotacionada: {url}",
"confirmRotate": "Rotacionar túnel {type}? (uma nova URL será gerada)"
},
"stop": {
"description": "Parar o servidor OmniRoute",
"stopping": "Parando servidor (PID {pid})...",
"stopped": "Servidor parado.",
"notRunning": "Nenhum servidor está em execução.",
"portFallback": "Arquivo PID não encontrado, tentando parar pela porta..."
},
"restart": {
"description": "Reiniciar o servidor OmniRoute",
"restarting": "Reiniciando servidor OmniRoute..."
},
"dashboard": {
"description": "Abrir o painel OmniRoute no navegador",
"opening": "Abrindo painel em {url}",
"urlOnly": "Exibir URL do painel sem abrir o navegador",
"tui": "Abrir painel TUI interativo (terminal UI, 7 abas)"
},
"models": {
"description": "Listar modelos disponíveis (requer servidor)",
"search": "Filtrar modelos por id, nome, provedor ou descrição",
"noServer": "Servidor não está em execução. Inicie com: omniroute serve",
"noModels": "Nenhum modelo encontrado."
},
"audit": {
"description": "Acessar logs de auditoria de compliance e MCP",
"source": "Fonte do log: all|compliance|mcp (padrão: all)",
"since": "Retornar entradas desde este timestamp (ISO 8601)",
"until": "Retornar entradas até este timestamp (ISO 8601)",
"tail": {
"description": "Exibir entradas recentes do log de auditoria",
"follow": "Fazer tail contínuo de novas entradas (poll 2s)",
"limit": "Máximo de entradas (padrão: 100)"
},
"search": {
"description": "Buscar entradas do log de auditoria por palavra-chave",
"limit": "Máximo de resultados (padrão: 200)",
"actor": "Filtrar por ID de ator",
"action": "Filtrar por nome de ação"
},
"export": {
"description": "Exportar log de auditoria para arquivo",
"format": "Formato de saída: jsonl|csv (padrão: jsonl)"
},
"stats": {
"description": "Exibir estatísticas do log de auditoria",
"period": "Período: 1d|7d|30d (padrão: 7d)"
},
"get": {
"description": "Obter uma entrada do log de auditoria por ID"
}
},
"skills": {
"description": "Gerenciar skills do OmniRoute (sandbox, builtin, custom, hybrid, skillssh)",
"list": {
"description": "Listar skills instaladas",
"type": "Filtrar por tipo (sandbox|custom|builtin|hybrid|skillssh)",
"enabled": "Mostrar apenas skills habilitadas",
"disabled": "Mostrar apenas skills desabilitadas",
"api_key": "Filtrar por chave de API"
},
"get": {
"description": "Obter detalhes de uma skill por ID"
},
"install": {
"description": "Instalar uma skill a partir de arquivo ou URL",
"from_file": "Caminho para o arquivo JSON de definição da skill",
"from_url": "URL da definição remota da skill",
"type": "Tipo de skill (sandbox|custom|hybrid)",
"enable": "Habilitar skill após instalar"
},
"enable": {
"description": "Habilitar uma skill por ID"
},
"disable": {
"description": "Desabilitar uma skill por ID",
"yes": "Pular confirmação"
},
"delete": {
"description": "Deletar uma skill por ID",
"yes": "Pular confirmação"
},
"execute": {
"description": "Executar uma skill por ID",
"input": "Objeto JSON de entrada",
"input_file": "Caminho para arquivo JSON de entrada",
"timeout": "Timeout de execução em ms (padrão: 30000)"
},
"executions": {
"description": "Listar histórico de execuções de skills",
"skill": "Filtrar por ID de skill",
"limit": "Máximo de resultados (padrão: 50)",
"status": "Filtrar por status (running|completed|failed)"
},
"skillssh": {
"description": "Gerenciar skills instaladas via SSH"
},
"marketplace": {
"description": "Explorar e instalar skills do marketplace"
},
"mp": {
"search": {
"description": "Buscar pacotes no marketplace",
"category": "Filtrar por categoria",
"tag": "Filtrar por tag",
"limit": "Máximo de resultados (padrão: 30)",
"sort": "Ordenar por: downloads|rating|recent"
},
"info": {
"description": "Exibir detalhes e readme do pacote"
},
"install": {
"description": "Instalar um pacote do marketplace",
"version": "Versão do pacote (padrão: latest)",
"enable": "Habilitar após instalar",
"yes": "Pular confirmação"
},
"categories": {
"description": "Listar categorias do marketplace"
},
"featured": {
"description": "Exibir pacotes em destaque do marketplace"
}
}
},
"memory": {
"description": "Gerenciar memória conversacional do OmniRoute (FTS5 + vetorial)",
"search": {
"description": "Buscar entradas de memória por query semântica",
"type": "Filtrar por tipo (user|feedback|project|reference)",
"limit": "Máximo de resultados (padrão: 20)",
"api_key": "Filtrar por chave de API",
"token_budget": "Limitar total de tokens nos resultados"
},
"add": {
"description": "Adicionar nova entrada de memória",
"content": "Conteúdo textual da memória",
"file": "Ler conteúdo de arquivo",
"type": "Tipo de memória (padrão: user)",
"metadata": "Objeto JSON de metadados",
"api_key": "Associar a chave de API"
},
"clear": {
"description": "Deletar entradas de memória que correspondem aos filtros",
"type": "Filtrar por tipo",
"older": "Deletar entradas mais antigas que a duração (30d, 6m, 1y)",
"api_key": "Filtrar por chave de API",
"yes": "Pular confirmação"
},
"list": {
"description": "Listar entradas de memória sem ranking de busca",
"type": "Filtrar por tipo",
"limit": "Máximo de resultados (padrão: 100)",
"api_key": "Filtrar por chave de API"
},
"get": {
"description": "Obter entrada de memória por ID"
},
"delete": {
"description": "Deletar entrada de memória por ID",
"yes": "Pular confirmação"
},
"health": {
"description": "Exibir saúde do subsistema de memória (FTS5 + Qdrant)"
}
},
"oauth": {
"description": "Gerenciar conexões OAuth de provedores",
"providers": {
"description": "Listar provedores com suporte OAuth e seus tipos de fluxo"
},
"start": {
"description": "Iniciar fluxo de autorização OAuth para um provedor",
"provider": "ID do provedor (gemini, copilot, cursor, …)",
"no_browser": "Apenas exibir URL — não abrir navegador",
"import_system": "Auto-importar credenciais da configuração local do sistema",
"social": "Provedor de login social (google|github) — obrigatório para kiro",
"timeout": "Timeout aguardando autorização em ms (padrão: 300000)"
},
"status": {
"description": "Listar conexões OAuth ativas",
"provider": "Filtrar por ID do provedor"
},
"revoke": {
"description": "Revogar uma conexão OAuth",
"provider": "ID do provedor a revogar",
"connection_id": "Revogar uma conexão específica por ID",
"yes": "Pular confirmação"
}
},
"cloud": {
"description": "Gerenciar tarefas de agentes cloud de IA (codex, devin, jules)",
"agents": {
"description": "Listar agentes cloud disponíveis"
},
"agent": {
"description": "Gerenciar tarefas do agente cloud {agent}",
"auth": {
"description": "Autorizar {agent} via OAuth"
}
},
"task": {
"description": "Gerenciar tarefas de agentes cloud",
"create": {
"description": "Criar nova tarefa de agente",
"title": "Título da tarefa (padrão: primeiros 80 chars do prompt)",
"prompt": "Texto do prompt da tarefa",
"prompt_file": "Ler prompt de arquivo",
"repo": "URL do repositório para clonar na tarefa",
"branch": "Nome do branch a usar",
"metadata": "Objeto JSON de metadados"
},
"list": {
"description": "Listar tarefas de agentes",
"status": "Filtrar por status (running|completed|failed|cancelled)",
"limit": "Máximo de resultados (padrão: 50)"
},
"get": {
"description": "Obter detalhes da tarefa por ID"
},
"status": {
"description": "Exibir status da tarefa (running|completed|failed|cancelled)"
},
"cancel": {
"description": "Cancelar uma tarefa em execução",
"yes": "Pular confirmação"
},
"approve": {
"description": "Aprovar o plano do agente para iniciar execução"
},
"message": {
"description": "Enviar mensagem para uma tarefa em execução"
}
},
"sources": {
"description": "Listar arquivos de origem produzidos por uma tarefa"
}
},
"eval": {
"description": "Gerenciar suites e execuções de avaliação",
"suites": {
"description": "Gerenciar suites de avaliação",
"list": {
"description": "Listar suites de avaliação"
},
"get": {
"description": "Obter detalhes de suite por ID"
},
"create": {
"description": "Criar suite de avaliação a partir de arquivo JSON",
"file": "Caminho para arquivo JSON de definição da suite"
}
},
"run": {
"description": "Iniciar execução de avaliação para uma suite",
"model": "ID do modelo a avaliar (padrão: auto)",
"combo": "Forçar combo específico por nome",
"concurrency": "Número de amostras concorrentes (padrão: 4)",
"tag": "Tag para esta execução",
"watch": "Monitorar progresso até conclusão"
},
"list": {
"description": "Listar execuções de avaliação",
"suite": "Filtrar por ID de suite",
"status": "Filtrar por status",
"since": "Retornar execuções desde este timestamp",
"limit": "Máximo de resultados (padrão: 50)"
},
"get": {
"description": "Obter detalhes de execução por ID"
},
"results": {
"description": "Exibir resultados de amostras de uma execução",
"failed": "Exibir apenas amostras que falharam"
},
"cancel": {
"description": "Cancelar uma avaliação em execução",
"yes": "Pular confirmação"
},
"scorecard": {
"description": "Exibir scorecard de uma execução concluída"
}
},
"webhooks": {
"description": "Gerenciar webhooks do OmniRoute",
"events": {
"description": "Listar todos os tipos de evento disponíveis para webhooks"
},
"list": {
"description": "Listar webhooks configurados"
},
"get": {
"description": "Obter detalhes de webhook por ID"
},
"add": {
"description": "Registrar novo webhook",
"url": "URL de destino",
"events": "Lista de tipos de evento separados por vírgula",
"secret": "Segredo HMAC de assinatura",
"header": "Header extra no formato chave=valor (repetível)",
"no_enabled": "Criar webhook em estado desabilitado"
},
"update": {
"description": "Atualizar webhook existente",
"enabled": "Definir estado habilitado (true|false)"
},
"remove": {
"description": "Deletar webhook",
"yes": "Pular confirmação"
},
"test": {
"description": "Enviar evento de teste para um webhook",
"event": "Tipo de evento a simular (padrão: request.completed)"
}
},
"program": {
"description": "OmniRoute — Roteador de IA com Fallback Automático",
"version": "Exibir versão e sair",
"output": "Formato de saída (table, json, jsonl, csv)",
"quiet": "Suprimir saída não essencial",
"no_color": "Desativar saída colorida",
"timeout": "Timeout de requisições HTTP em milissegundos",
"api_key": "Chave de API para o servidor OmniRoute",
"base_url": "URL base do servidor OmniRoute",
"context": "Contexto/perfil do servidor a usar neste comando",
"lang": "Definir idioma de exibição do CLI (substitui OMNIROUTE_LANG)"
},
"files": {
"description": "Gerenciar arquivos (upload, listar, obter, baixar, deletar)",
"list": {
"purpose": "Filtrar por propósito",
"limit": "Máximo de resultados"
},
"get": {
"description": "Obter metadados do arquivo"
},
"upload": {
"description": "Fazer upload de um arquivo",
"purpose": "Propósito do arquivo (batch, assistants, fine-tune)"
},
"content": {
"description": "Baixar conteúdo do arquivo",
"out": "Salvar no caminho (padrão: stdout)"
},
"delete": {
"yes": "Pular confirmação"
}
},
"batches": {
"description": "Gerenciar jobs em batch (compatível com OpenAI)",
"list": {
"status": "Filtrar por status",
"limit": "Máximo de resultados"
},
"create": {
"description": "Criar um job em batch",
"inputFile": "ID do arquivo de entrada",
"endpoint": "Endpoint destino",
"window": "Janela de conclusão",
"metadata": "Adicionar metadado key=value"
},
"submit": {
"description": "Fazer upload do JSONL e criar batch",
"jsonl": "Caminho para o arquivo JSONL",
"endpoint": "Endpoint destino",
"wait": "Aguardar conclusão"
},
"cancel": {
"yes": "Pular confirmação"
},
"wait": {
"timeout": "Timeout em ms"
},
"output": {
"out": "Salvar output no caminho"
},
"errors": {
"out": "Salvar erros no caminho"
}
},
"translator": {
"description": "Traduzir payloads entre formatos LLM",
"detect": {
"description": "Detectar formato do body"
},
"translate": {
"description": "Converter body de um formato para outro"
},
"send": {
"description": "Traduzir e despachar para upstream"
},
"stream": {
"description": "Tradução de request em stream"
},
"from": "Formato de origem (openai|anthropic|gemini|cohere)",
"to": "Formato de destino (openai|anthropic|gemini|cohere)",
"file": "Caminho para o arquivo JSON do request",
"out": "Salvar output em arquivo",
"model": "Sobrescrever model",
"history": {
"limit": "Máximo de resultados"
}
},
"pricing": {
"description": "Gerenciar dados de precificação dos modelos",
"sync": {
"description": "Sincronizar preços com fontes upstream",
"provider": "Filtrar por provider",
"force": "Forçar re-sincronização"
},
"list": {
"provider": "Filtrar por provider",
"model": "Filtrar por model",
"limit": "Máximo de resultados"
},
"defaults": {
"description": "Gerenciar preços padrão",
"input": "Custo de entrada por 1M tokens (USD)",
"output": "Custo de saída por 1M tokens (USD)",
"cacheRead": "Custo de leitura de cache por 1M tokens (USD)",
"cacheWrite": "Custo de escrita de cache por 1M tokens (USD)"
},
"diff": {
"description": "Mostrar divergências em relação ao upstream",
"model": "Filtrar por model"
}
},
"resilience": {
"description": "Inspecionar e gerenciar mecanismos de resiliência",
"status": {
"provider": "Filtrar por provider"
},
"breakers": {
"provider": "Filtrar por provider"
},
"cooldowns": {
"provider": "Filtrar por provider",
"connectionId": "Filtrar por ID de conexão"
},
"lockouts": {
"provider": "Filtrar por provider",
"model": "Filtrar por model"
},
"reset": {
"description": "Resetar estado de breaker/cooldown",
"provider": "Provider para resetar",
"connectionId": "ID de conexão para resetar",
"model": "Model para liberar lockout",
"allCooldowns": "Resetar todos os cooldowns do provider",
"yes": "Pular confirmação"
},
"profile": {
"description": "Gerenciar perfil de resiliência",
"name": "Nome do perfil"
},
"config": {
"description": "Gerenciar configuração de resiliência",
"threshold": "Limiar de falhas",
"resetTimeout": "Timeout de reset em ms",
"baseCooldown": "Cooldown base em ms"
}
},
"nodes": {
"description": "Gerenciar nodes de provider (endpoints)",
"list": {
"provider": "Filtrar por provider",
"enabled": "Exibir apenas nodes ativos"
},
"add": {
"provider": "Nome do provider",
"baseUrl": "URL base do node",
"name": "Nome do node",
"weight": "Peso para balanceamento de carga",
"region": "Tag de região",
"authHeader": "Header de autenticação customizado (key=value)"
},
"update": {
"baseUrl": "Nova URL base",
"name": "Novo nome",
"weight": "Novo peso",
"region": "Nova região",
"enabled": "Habilitar ou desabilitar (true|false)"
},
"remove": {
"yes": "Pular confirmação"
},
"validate": {
"baseUrl": "URL para validar",
"provider": "Provider para validar"
},
"test": {
"description": "Enviar requisição de teste ao node"
},
"metrics": {
"description": "Exibir métricas do node",
"period": "Período de tempo (ex: 24h, 7d)"
}
},
"context": {
"description": "Configurar pipeline de context engineering (Caveman, RTK)",
"analytics": {
"period": "Período de tempo (ex: 7d, 30d)"
},
"caveman": {
"description": "Gerenciar compressor de contexto Caveman",
"config": {
"description": "Exibir ou atualizar configuração do Caveman",
"aggressiveness": "Agressividade 0.01.0",
"maxShrinkPct": "Percentual máximo de redução",
"preserveTags": "Tags a preservar (separadas por vírgula)"
}
},
"rtk": {
"description": "Gerenciar otimizador de contexto RTK",
"config": {
"description": "Exibir ou atualizar configuração RTK",
"tokenBudget": "Orçamento de tokens RTK",
"reservePct": "Percentual de reserva"
},
"filters": {
"description": "Gerenciar filtros RTK",
"pattern": "Padrão do filtro (regex)",
"priority": "Prioridade do filtro (padrão: 100)",
"action": "Ação: drop|shrink|replace",
"yes": "Pular confirmação"
},
"test": {
"file": "Caminho para arquivo JSON de requisição"
}
},
"combos": {
"description": "Gerenciamento de combos com context-awareness"
}
},
"sessions": {
"description": "Inspecionar e encerrar sessões ativas",
"list": {
"user": "Filtrar por usuário",
"kind": "Filtrar por tipo (dashboard|api-key|mcp|a2a)",
"active": "Exibir apenas sessões ativas",
"limit": "Máximo de resultados (padrão: 100)"
},
"expire": {
"yes": "Pular confirmação"
},
"expireAll": {
"user": "Usuário cujas sessões serão encerradas",
"yes": "Pular confirmação"
}
},
"tags": {
"description": "Gerenciar tags de recursos",
"add": {
"color": "Cor da tag (hex ou nome)",
"description": "Descrição da tag"
},
"remove": {
"yes": "Pular confirmação"
},
"assign": {
"tag": "Nome da tag",
"to": "Recurso de destino como tipo:id (ex: provider:openai)"
},
"unassign": {
"tag": "Nome da tag",
"from": "Recurso de origem como tipo:id"
}
},
"openapi": {
"description": "Acessar e testar o spec OpenAPI do OmniRoute",
"dump": {
"description": "Exportar spec OpenAPI para stdout ou arquivo",
"format": "Formato de saída: yaml|json (padrão: yaml)",
"out": "Salvar em caminho de arquivo"
},
"validate": {
"description": "Validar o spec OpenAPI"
},
"try": {
"description": "Testar um endpoint da API via spec",
"method": "Método HTTP (padrão: GET)",
"body": "Caminho para arquivo JSON do corpo da requisição",
"query": "Parâmetro de query como key=value (repetível)",
"header": "Header como key=value (repetível)"
},
"endpoints": {
"description": "Listar todos os endpoints da API",
"search": "Filtrar por caminho ou summary"
},
"paths": {
"description": "Listar todos os caminhos da API"
}
},
"combo": {
"title": "Combos",
"switched": "Combo ativo: {name}",
"created": "Combo criado: {name}",
"deleted": "Combo removido: {name}",
"noCombos": "Nenhum combo configurado.",
"confirmDelete": "Remover combo {name}?",
"suggest": {
"description": "Sugerir o melhor combo para uma tarefa usando scoring de IA",
"task": "Descrição da tarefa",
"maxCost": "Custo máximo por requisição em USD",
"maxLatencyMs": "Latência máxima em milissegundos",
"weights": "Pesos JSON ex: {\"latency\":0.7,\"cost\":0.3}",
"top": "Número de candidatos a exibir (padrão: 5)",
"explain": "Imprimir justificativa no stderr",
"switch": "Ativar o combo mais bem classificado"
}
},
"oneproxy": {
"description": "Gerenciar o pool de proxies OneProxy",
"stats": {
"provider": "Filtrar por provider",
"period": "Período de tempo (padrão: 24h)"
},
"fetch": {
"description": "Buscar proxies do pool",
"count": "Número de proxies a buscar (padrão: 1)",
"type": "Tipo de proxy: http|socks5 (padrão: http)"
},
"rotate": {
"description": "Forçar rotação de proxy",
"provider": "Provider para rotacionar",
"connectionId": "ID de conexão específica para rotacionar"
},
"config": {
"description": "Exibir ou atualizar configuração do OneProxy",
"enabled": "Habilitar pool de proxies (true|false)",
"poolSize": "Tamanho do pool",
"providerSource": "URL do provedor de proxies",
"rotationPolicy": "Política de rotação: sticky|per-request|periodic"
},
"pool": {
"description": "Listar pool de proxies atual com métricas"
}
},
"open": {
"description": "Abrir uma página específica do dashboard OmniRoute no navegador",
"url": "Apenas imprime a URL, sem abrir o navegador"
},
"telemetry": {
"description": "Acessar dados de telemetria agregados",
"summary": {
"description": "Exibir resumo de telemetria agregado",
"period": "Período: 24h|7d|30d (padrão: 24h)",
"compareTo": "Comparar com período anterior"
},
"export": {
"description": "Exportar eventos de telemetria para JSONL",
"out": "Caminho do arquivo de saída (padrão: telemetry.jsonl)",
"period": "Período para exportação (padrão: 7d)"
}
},
"sync": {
"description": "Sincronizar configuração entre instâncias OmniRoute",
"push": {
"description": "Enviar config para cloud ou instância remota",
"target": "Destino (cloud ou context:nome)",
"bundle": "Partes do bundle para sincronizar",
"dryRun": "Visualizar sem aplicar"
},
"pull": {
"description": "Baixar config da cloud ou remoto",
"source": "Origem (cloud ou context:nome)",
"merge": "Mesclar com config existente",
"replace": "Substituir config existente",
"dryRun": "Visualizar sem aplicar"
},
"diff": {
"source": "Contexto de origem",
"target": "Contexto de destino"
},
"bundle": {
"description": "Exportar config como arquivo bundle",
"include": "Partes a incluir (separadas por vírgula)"
},
"import": {
"description": "Importar arquivo bundle",
"dryRun": "Validar sem aplicar"
},
"initialize": {
"fromCloud": "Inicializar a partir de backup na cloud"
},
"tokens": {
"description": "Gerenciar tokens de sincronização",
"create": {
"name": "Nome do token",
"scope": "Escopo do token",
"ttl": "TTL do token (ex: 30d)"
},
"revoke": {
"yes": "Pular confirmação"
}
},
"resolve": {
"description": "Resolver conflitos de sincronização interativamente"
}
},
"config": {
"contexts": {
"description": "Gerenciar contextos/perfis de servidor (add, use, list, show, remove, rename, export, import)"
},
"lang": {
"description": "Gerenciar idioma de exibição do CLI",
"getDescription": "Exibir o código de idioma atualmente ativo",
"setDescription": "Definir o idioma de exibição e salvar na configuração",
"listDescription": "Listar todos os idiomas disponíveis",
"listTitle": "Idiomas Disponíveis",
"current": "Idioma: {code} ({name})",
"saved": "Idioma definido como {code} ({name}).",
"noCode": "Código de idioma obrigatório. Execute 'omniroute config lang list' para ver os códigos disponíveis.",
"unknown": "Código de idioma desconhecido: {code}. Execute 'omniroute config lang list' para ver os códigos disponíveis.",
"alreadySet": "O idioma já está definido como {code}.",
"envHint": "Dica: você também pode definir OMNIROUTE_LANG={code} no seu ambiente."
}
},
"completion": {
"description": "Gerar ou instalar scripts de completion do shell",
"zsh": "Imprimir script de completion para zsh",
"bash": "Imprimir script de completion para bash",
"fish": "Imprimir script de completion para fish",
"install": "Instalar completion globalmente para o shell detectado",
"refresh": "Atualizar cache de combos/providers/models"
},
"logs": {
"description": "Streaming ou exportação de logs de request",
"follow": "Transmitir logs em tempo real",
"filter": "Filtrar por nível (error,warn,info) — separados por vírgula",
"lines": "Número de linhas a buscar",
"timeout": "Timeout de conexão em ms",
"baseUrl": "URL base da API do OmniRoute",
"requestId": "Filtrar por ID do request",
"apiKey": "Filtrar por chave de API",
"combo": "Filtrar por nome do combo",
"status": "Filtrar por código HTTP",
"durationMin": "Duração mínima do request em ms",
"durationMax": "Duração máxima do request em ms",
"export": "Salvar logs em arquivo (json/jsonl/csv)",
"exported": "Logs salvos em {path}",
"stopped": "Stream de logs interrompido.",
"streamError": "Erro no stream de logs: {message}"
},
"tray": {
"description": "Controlar o ícone na bandeja do sistema",
"show": "Mostrar o ícone na bandeja (se o servidor estiver rodando com --tray)",
"hide": "Ocultar o ícone na bandeja",
"quit": "Encerrar OmniRoute via bandeja"
},
"autostart": {
"description": "Gerenciar inicialização automática do OmniRoute no login",
"enable": "Habilitar inicialização automática no login",
"disable": "Desabilitar inicialização automática no login",
"status": "Mostrar status de inicialização automática"
},
"runtime": {
"description": "Gerenciar dependências nativas do runtime",
"check": "Verificar status das deps nativas no diretório de runtime",
"repair": "Reinstalar deps nativas no diretório de runtime",
"repair_force": "Forçar reinstalação mesmo se estiver válido",
"clean": "Remover diretório de runtime (libera espaço em disco)",
"clean_yes": "Pular confirmação"
},
"repl": {
"description": "REPL interativo multi-turn com LLM",
"model": "Modelo a usar (padrão: auto)",
"combo": "Nome do combo a usar",
"system": "System prompt",
"resume": "Retomar sessão salva pelo nome"
},
"plugin": {
"description": "Gerenciar plugins CLI (omniroute-cmd-*)",
"list": "Listar plugins instalados",
"install": "Instalar plugin do npm ou caminho local",
"remove": "Remover plugin instalado",
"info": "Mostrar detalhes de um plugin instalado",
"search": "Buscar plugins disponíveis no npm",
"update": "Atualizar plugin(s) instalado(s)",
"scaffold": "Gerar boilerplate de novo plugin"
}
}