Files
OmniRoute/docs/i18n/ru
Markus Hartung beb6ec857b feat(dashboard): agentic conversation tracking — v4, decoupled + storage-architecture concern resolved (#10263)
* feat(responses): virtualize previous_response_id continuation regardless of upstream support

OmniRoute now exposes OpenAI-compatible previous_response_id/store
continuation to clients unconditionally, even when the selected upstream
provider has no native Responses-API state support. Reconstruction happens
server-side in handleChatImplementation, before any downstream validation
or provider translation: OmniRoute resolves the response id back to the
full input/output it previously produced, prepends it to the client's
delta, and forwards the full reconstructed history upstream exactly as it
does today. Client<->OmniRoute traffic shrinks to the new delta only;
OmniRoute<->provider traffic is unchanged.

Storage reuses the existing call-log pipeline artifact (already gated by
call_log_pipeline_enabled, already retained/cleaned up by the existing
call-log lifecycle) instead of duplicating conversation content into a
second store -- only a lightweight call_logs.response_id index is new.
Every lookup is scoped by api_key_id so one client can never resolve
another client's stored conversation, and any unresolvable/missing/
size-limit-omitted state fails closed with OpenAI's own
previous_response_not_found contract.

Stacked on feat/openai-responses-store-toggle (#10121).

* feat(dashboard): agentic conversation tracking with live transcript view

Every agentic chat request now gets a conversation id (X-ConversationId
response header). OmniRoute detects when a follow-up request continues the
same conversation via fingerprint + bounded prefix-hash matching, with a
strict-growth invariant to prevent false merges between independent
single-shot requests that happen to share identical opening content.
Continuation detection excludes the system message from the identity
anchor, since real coding-agent CLIs commonly regenerate it every request
with live context (timestamp, cwd, git status) — without this, that
volatility alone broke every continuation check against real traffic.

- `/dashboard/logs`: new toggleable Conversation column.
- `/dashboard/logs/timeline`: requests sharing a conversation id share a
  timeline lane, connected by an arrow, with a configurable lane-reuse
  window.
- Request detail panel: new Full Conversation transcript above the raw SSE
  event stream — Markdown rendering, per-turn timestamps, turn-relative
  view, click-any-turn navigation, live auto-refresh building the
  transcript in real time from the in-flight SSE chunk buffer while a
  request is still streaming, auto-scroll-to-bottom as the live turn grows.
- New `/dashboard/conversations` page listing conversations with 2+ turns,
  no-forking model (an edited/duplicated mid-history turn mints its own
  independent conversation instead of merging), pagination, duplicate-
  anchor fix.
- Configurable auto-refresh intervals on both the timeline and
  conversations list pages.
- Responses API tool-call gap fix: turnsFromOpenAiMessages only handled
  role-based Chat Completions messages, so bare {type:"function_call"} /
  {type:"function_call_output"} / {type:"reasoning"} items (real Responses
  API traffic) silently vanished from the Conversation Context panel.
- truncateForLog now counts input[] (Responses API), not just messages[]
  (Chat Completions), so a truncated /v1/responses request still shows a
  placeholder instead of nothing.
- RequestTimeline.tsx now reads the same debugEnabled/emailsVisible
  settings RequestLoggerV2.tsx already used, instead of hardcoding both
  false — the timeline view never showed SSE/stream-chunk events or
  respected email-masking, regardless of the actual setting.

Migrations 147/148 (agentic_conversations, conversation_turn_nodes) — 135
and 136 are now taken upstream; 143-145 are documented KNOWN_GAPS, so this
uses the next free slot past upstream's current highest.

Test plan:
- npm run typecheck:core — clean
- npm run lint — clean
- node --import tsx/esm scripts/check/check-migration-numbering.mjs — OK, 0 collisions
- 109 unit tests across the conversation-tracking, migration-renumber, and
  dashboard-wiring surface — 0 failures

* refactor(dashboard): reuse call-log artifacts for conversation transcript content

conversation_turn_nodes no longer stores turn text/tool-call content
(text_preview/block_kind/tool_name) -- it's identity-only now (id/parent/
content_hash), matching agentic_conversations' existing lightweight-index
shape. Every node's originating request is already fully captured by the
call-log pipeline artifact its last_correlation_id points at, so the
/dashboard/conversations tree view resolves each node's actual display
content on demand from there (open-sse/services/conversationTurnContent.ts),
re-running the same extractCanonicalTurns/hashTurnContent the write path
used and matching by content_hash, instead of duplicating conversation
content into a second store under a separate retention/gating policy. This
also drops the old 8000-char text_preview truncation entirely -- resolved
content is always full and untruncated.

The frontend contract is unchanged (tree API still returns
{textPreview, blockKind, toolName} per node), so the dashboard UI itself
(page.tsx, RequestLoggerDetail/RequestTimeline, sidebar, i18n) needed no
changes.

Renumbered the cherry-picked 147/148 migrations to 153/154 -- 147 now
collides with 147_api_keys_model_access_mode.sql, which landed on
release/v3.8.50 after this work was originally built.

Also includes a standalone, unrelated fix carried along from this rebase:
close isProviderModelHidden's missing function-body brace in
modelSelectModalHelpers.ts (separately landed as #10206).

Stacked on feat/responses-previous-response-id-virtualization (#3), which
is itself stacked on feat/openai-responses-store-toggle (#10121).

* fix(dashboard): resync conversation list on open so the live-text poll starts immediately

openConversation() seeded activeConversation (and therefore activeCallLogId,
which gates the live-partial-text poll effect) from whatever row snapshot the
list's own fixed-interval poll last produced. A conversation opened right
after a reply started streaming -- after that tick, before the next -- had
activeCallLogId still null, so the live-text poll never started; only a
subsequent background list-poll resync (already existed) picked it up,
which is why closing and reopening the same conversation "just worked".

loadConversations() is now a shared callback so openConversation can force
one immediately on open instead of waiting on pollSeconds.

Live-verified against omniroute-dev: opening a conversation mid-stream now
shows live reasoning on the first open.

* style: prettier formatting for conversationTurnContent.test.ts

* fix(db): close migration numbering gap left by decoupling from #3/#10262

153/154 (originally 154/155) were chosen back when this branch stacked on
top of the previous_response_id migration (153_call_logs_response_id.sql).
Decoupling removed that migration from this branch's history, leaving an
unused 153 slot that check-migration-numbering.test.ts correctly flags as
a gap.

* refactor(dashboard): split RequestTimeline/RequestLoggerDetail under the 1000-line file-size cap

Both files exceeded check-file-size's new-file cap after this PR's own
additions (RequestTimeline 1048, RequestLoggerDetail 1163). Extracted pure
non-component logic (types, constants, allocateLanes and its helpers) out
of RequestTimeline.tsx into RequestTimeline.utils.ts, and the two
self-contained presentational sub-components (PayloadSection,
ConversationContextSection + its private helper) out of
RequestLoggerDetail.tsx into RequestLoggerDetail.sections.tsx. No behavior
change; existing external imports (default exports, allocateLanes,
TimelineLog, CONVERSATION_LANE_REUSE_STORAGE_KEY) still resolve from the
original file paths.

* fix(db): renumber agentic-conversation migrations to clear 153 collision + sync migration-count docs

The refresh-merge of release/v3.8.50 exposed that the feature's three
migrations collided at slot 153 with the base's radar_local_model_state
(153) and its own call_logs_response_id. Migration runner enforces unique
numeric prefixes -> every DB init threw, red-ing Vitest, all Unit shards and
the DB-backed quality gates. Renumber the feature's pair to
155_agentic_conversations / 156_conversation_turn_nodes and move
call_logs_response_id to 154 (keeps 153_radar base-owned, preserves
agentic-before-turn_nodes ordering). Update SQL headers and the
154/156 references in feature code + tests.

Migration count is now 151 (was 148 stale in README/AGENTS/llm.txt) — sync
the doc counts to clear the docs-accuracy gate.

Co-authored-by: diegosouzapw <diegosouza.pw@gmail.com>

* fix(ui): drop unused CONVERSATION_LANE_REUSE_STORAGE_KEY re-export from RequestTimeline

Knip 6.32 (baseline 415) flags the public re-export of
CONVERSATION_LANE_REUSE_STORAGE_KEY from RequestTimeline.tsx as dead: no
external consumer imports it through that re-export (it is imported and
used directly from RequestTimeline.utils.ts inside the component). Removed
the unused re-export; the internal import stays. DEAD_TOTAL 416 -> 415,
back to the frozen baseline.

Co-authored-by: diegosouzapw <diegosouza.pw@gmail.com>

* fix(agentic-conversations): guard resolveConversationId, drop dead whole-chain export

- Wrap resolveConversationId() in try/catch in chat.ts, matching the
  defensive pattern used by every other best-effort side call nearby, so a
  DB hiccup in conversation tracking can't turn a working chat request into
  a hard failure.
- Remove getConversationTurnTree: knip's project scope excludes tests/**,
  so an export used only by tests can never register as used there. Swap
  its 8 test call sites to the paginated getConversationTurnPage (already
  the dashboard's canonical query) with a generous limit, collapsing to one
  query path instead of keeping a second whole-chain export alive solely
  for test convenience.
- Regenerate i18n llm.txt mirrors from root (pre-existing drift on this
  branch, unrelated to the above, caught by the docs-sync pre-commit gate).

Addresses PR review feedback.

* fix(i18n): close requestLogger conversation-column gap, fix domain-modules count drift

- fr.json, vi.json were missing requestLogger.columns.conversation (added
  in the conversation-tracking feature), failing i18n-vi-completeness.test.ts.
- docs/i18n/*/llm.txt mirrors still said 117 domain-specific files after an
  earlier rebase fixed the migration count but missed this companion number,
  failing check-docs-sync.mjs across all 42 locales.

Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>

* fix(docs): restore PROXY_LOG_INCLUDE_IPS env/doc entries (env-doc-sync red)

.env.example and docs/reference/ENVIRONMENT.md were both missing the
PROXY_LOG_INCLUDE_IPS entry that src/lib/proxyLogger.ts already reads
(confirmed present at this branch's merge-base too, so this predates
the conversation-tracking work and is unrelated to it) -- the entry
was added on release/v3.8.50 after this branch's last sync and this
branch never picked it up. That gap red-lines
tests/unit/check-env-doc-sync.test.ts and
tests/unit/issue-7793-env-doc-sync-repro.test.ts (Unit Tests
fast-path 2/4 in CI). Restore both entries verbatim from the current
release/v3.8.50 tip -- no feature-code change.

Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>

---------

Co-authored-by: hartmark <hartmark@users.noreply.github.com>
Co-authored-by: diegosouzapw <diegosouza.pw@gmail.com>
Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
2026-08-18 11:32:33 -03:00
..

🚀 OmniRoute — Бесплатный AI-шлюз (Русский)

🌐 Языки: 🇺🇸 English · 🇸🇦 ar · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇪🇸 es · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇳 gu · 🇮🇱 he · 🇮🇳 hi · 🇭🇺 hu · 🇮🇩 id · 🇮🇹 it · 🇯🇵 ja · 🇰🇷 ko · 🇮🇳 mr · 🇲🇾 ms · 🇳🇱 nl · 🇳🇴 no · 🇵🇭 phi · 🇵🇱 pl · 🇵🇹 pt · 🇧🇷 pt-BR · 🇷🇴 ro · 🇷🇺 ru · 🇸🇰 sk · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇻🇳 vi · 🇨🇳 zh-CN · 🇹🇼 zh-TW


Панель OmniRoute

🚀 OmniRoute — Бесплатный AI-шлюз

Код без остановок. Один endpoint — 329 провайдеров, 155 free/no-auth.

Claude Code, Codex, Cursor, Cline, Copilot и Antigravity → бесплатные Claude / GPT / Gemini с автопереключением.


RTK + Caveman: экономия 1595% токенов. Лимиты больше не мешают.


~1.53B учитываемых бесплатных токенов / месяц — в первый месяц до ~2.15B с регистрационными бонусами. Живой учёт на /dashboard/free-tiers. (методика →)


329 AI Providers 155 Free/No-Auth 1.53B Free Tokens/mo Token Savings 19 Strategies $0 to start


💬 Сообщество

Discord Telegram WhatsApp Global WhatsApp Brasil

Вопросы, советы по провайдерам, roadmap и поддержка → Discord · Telegram · WhatsApp 🌍 Global / 🇧🇷 Brasil


diegosouzapw%2FOmniRoute | Trendshift

npm License: MIT Stars

npm version NPM Monthly Docker Hub Docker Pulls Electron Downloads Website


🚀 Быстрый старт🎯 Комбо🌐 Провайдеры🔌 CLI и MCP🗜️ Сжатие🌍 Сайт

💥 Обещание🤔 Зачем🏆 Чем отличается🤖 Совместимые CLI🖥️ Где запускать🔒 Приватность🎬 В деле📚 Дальше📧 Поддержка


💰 ~1.53B бесплатных токенов / месяц

Собирать free-tier вручную — боль: десятки SDK, лимиты и непонятный остаток. OmniRoute показывает 155 записи каталога с меткой free/no-auth; строго рассчитанный бюджет охватывает 43 пула / 522 бюджетные записи моделей и отображается live на /dashboard/free-tiers.

  • ~1.53B free tokens / мес (steady) — в первый месяц до ~2.15B с signup-кредитами.
  • Честная математика — каждый shared pool считается один раз. «Если крутить rate limit 24/7» выйдет ~10B — такие цифры мы не публикуем.
  • Отдельно — провайдеры без опубликованного token cap, но с rate/concurrency/account-ограничениями (SiliconFlow, Z.AI GLM-Flash, Kilo, OpenCode Zen…), и разовый top-up OpenRouter на $10 → +24M/мес (не раздувают headline).
  • По моделям, used/remaining и пометки ToS — прямо в дашборде.

Методика (дедуп пулов, кредиты, ToS): docs/reference/FREE_TIERS.md. Цифры пересматривают примерно раз в две недели — могут и упасть, и вырасти. CI (check:docs-counts) падает, если headline расходится с каталогом.


💥 Обещание

Один endpoint. 329 провайдеров. Код не останавливается — OmniRoute сам выбирает самый дешёвый рабочий вариант.

🛡️ Устойчивый fallback
При сбое upstream или исчерпании квоты OmniRoute пробует следующий допустимый маршрут; доступность зависит от провайдеров.
💸 До 95% токенов
RTK + Caveman stacked: 1595% на сжимаемом (в tool-heavy сессиях в среднем ~89%).
🆓 Старт с $0
155 записей каталога помечены free/no-auth; условия и лимиты зависят от провайдера.
🔌 Все инструменты
26+ coding agents — Claude Code, Codex, Cursor, Cline, Copilot, Antigravity — один конфиг.
🧩 Один endpoint
OpenAI ↔ Claude ↔ Gemini ↔ Responses API. Укажите /v1 — и готово.
🛡️ Production-grade
Circuit breakers, TLS stealth, MCP (107 tools), A2A, memory, guardrails, evals. 25000+ тестов.

🤔 Зачем OmniRoute?

Хватит прыгать между десятью кабинетами, мёртвыми ключами и неожиданными счетами.

Боль каждый день Как решает OmniRoute
📉 Подписка сгорает неиспользованной Выжимаем подписку — трекинг квоты, тратим до reset
🛑 Rate limit посреди кода 4-tier auto-fallback — Subscription → API → Cheap → Free
🔥 Tool-output (git diff, логи) жжёт токены RTK + Caveman — 1595% на сжимаемом
💸 Дорогие API ($2050/мес за провайдера) Cost-optimized routing — самый выгодный живой вариант
🧰 У каждого IDE свой сетап Один endpoint, один дашборд
🌍 AI заблокирован в регионе 3-level proxy + TLS fingerprint stealth
┌──────────────────────────────────────────────────────────┐
│     Ваш IDE / CLI  (Claude Code, Cursor, Cline…)          │
└─────────────────────────┬────────────────────────────────┘
                          │ http://localhost:20128/v1
                          ▼
┌──────────────────────────────────────────────────────────┐
│              OmniRoute — умный роутер                      │
│  RTK + Caveman · 19 стратегий · circuit breakers          │
│  TLS stealth · MCP · A2A · guardrails                     │
└─────────────────────────┬────────────────────────────────┘
        ┌─────────────┬────┴────────┬─────────────┐
        ▼ Tier 1      ▼ Tier 2      ▼ Tier 3      ▼ Tier 4
     Подписка        API Key       Cheap         Free
   Claude Code,     DeepSeek,     GLM $0.5,     Kiro, Qoder,
   Codex, Copilot   Groq, xAI     MiniMax $0.2  Pollinations
   квота? ───────▶  бюджет? ───▶  бюджет? ───▶  лимиты upstream

🎯 Комбо — главная фича

Combo — цепочка моделей, по которой OmniRoute ходит сам. Квота кончилась, провайдер упал, цена взлетела — комбо пробует следующий допустимый шаг. Это расширяет покрытие fallback, но не гарантирует доступность upstream. 🛡️

Без настройки — просто auto

Комбо создавать не обязательно. Поставьте модель auto (или вариант) — OmniRoute соберёт виртуальное комбо из подключённых провайдеров:

Model ID На что оптимизирует
auto 🎯 Баланс (LKGP — держится за последний удачный провайдер)
auto/coding 🧑‍💻 Качество кода
auto/fast Минимальная latency
auto/cheap 💰 Минимальная цена за токен
auto/offline 🔋 Максимум headroom по квоте / rate limit
auto/smart 🔭 Качество + 10% exploration

🔀 Или соберите своё — 19 стратегий

# Стратегия Что делает
1 priority Идёт по списку по порядку — выжимает каждый target 🥇
2 fill-first Сначала полностью заполняет квоту target
3 weighted Взвешенный random
4 round-robin Цикл по targets
5 p2c Power-of-two-choices load balancing
6 least-used Наименьшая текущая нагрузка
7 random Uniform random (с dedupe)
8 strict-random Random без dedupe 🎲
9 cost-optimized Минимум $ за запрос из live pricing 💸
10 headroom Больше всего оставшейся квоты
11 reset-window Чья квота reset ближе
12 reset-aware Ранг по reset — короткие окна первыми 📊
13 context-relay Передача контекста между targets 🧠
14 context-optimized Лучший fit под размер контекста
15 cache-optimized Закрепляет повторно используемый prefix prompt за тем же аккаунтом
16 lkgp Last-Known-Good Path — sticky к успеху
17 auto Live scoring по 13 факторам 🤖
18 fusion Панель моделей + judge → один ответ 🧬
19 pipeline Цепочка: output шага N → input N+1 🔗

Auto-Combo scoring: 13 факторов (health, quota, cost, latency, success rate, freshness, cache affinity…). Подробнее: docs/routing/AUTO-COMBO.md.

⚖️ Quota-Share — одна подписка на команду

Несколько ключей на один upstream-аккаунт? Burst на одном ключе может сжечь 5h/hourly quota на всех. Quota-Share честно делит time-based quota между ключами пула (work-conserving: idle-доля отдаётся другим).

Параметр Управление
⚖️ Weight Доля ключа, напр. 50 / 30 / 20
📐 Dimensions % · requests · tokens · $, окна 5h / 7d / per-model
🚦 Policy hard · soft · burst
🧱 Cap Жёсткий потолок на ключ

📖 Quota Sharing Engine

🧱 Три слоя устойчивости

Слой Область Механизм
🔌 Circuit breaker Весь провайдер Перестаёт слать запросы в «падающий» upstream; probe recovery
💤 Connection cooldown Один ключ / аккаунт Пропускает «горячий» ключ, siblings продолжают
🎯 Model lockout Одна модель Блокирует только исчерпанную модель, не всю connection
Combo: "always-on"                         strategy: priority
  1. cc/claude-opus-4-7   ← подписка (сначала)
  2. cx/gpt-5.2-codex     ← вторая подписка
  3. glm/glm-4.7          ← cheap ($0.50.6/1M)
  4. if/kimi-k2-thinking  ← listed free access; rate limits may apply
Итог: 4 уровня расширяют fallback; доступность upstream не гарантируется

📖 Auto-Combo · Resilience Guide


🏆 Чем OmniRoute отличается

Фича OmniRoute Другие роутеры
🌐 Провайдеры 329 20100
🆓 Free/no-auth 155 записей каталога 15
🔀 Стратегии 19 13
🗜️ Сжатие токенов RTK + Caveman (1595%) Нет / 2040%
🧰 MCP server 107 tools, 3 transports, 32 scopes Редко
🤝 A2A 6 skills, JSON-RPC 2.0 Нет
🧠 Memory (FTS5 + vector) Да Редко
🛡️ Guardrails Да Редко
☁️ Cloud agents Codex, Cursor, Devin, Jules Нет
🥷 TLS stealth JA3/JA4 via wreq-js Нет
🖥️ Платформы Web · Desktop · Termux · PWA Только web
🌍 i18n 43 локали 04

📊 Сравнение с LiteLLM, OpenRouter, Portkey → docs/comparison/OMNIROUTE_VS_ALTERNATIVES.md


Что нового

Highlights v3.8.20 → v3.8.49. Полная история: CHANGELOG.md.

  • 🗜️ Compression hardening — inflation guard по умолчанию, Caveman packs DE/FR/JA + Chinese (文言), RTK filters для Gradle & .NET.
  • 💸 Honest flat-rate cost — subscription/coding-plan в analytics = $0; budget/quota/routing по-прежнему оценивают.
  • ⚖️ Quota-Share routing — DRR, concurrency, multi-window buckets, session stickiness.
  • 🤖 One-command CLI setupsetup-* для 12+ tools; omniroute launch / launch-codex.
  • 🛰️ Remote modeconnect / contexts / tokens + OAuth helper для VPS.
  • 🧭 Smarter autoauto/<category>:<tier>, Fusion, task-aware routing, per-request overrides.
  • 🗜️ Pluggable compression — 11 engines + Studios, LLMLingua-2, Ultra, fidelity gate, GCF v3.2.
  • 🕵️ MITM decrypt (TPROXY) — CLI, игнорирующие proxy env; per-SNI CA.
  • 💸 Cost telemetryX-OmniRoute-* headers, cache-HIT savings, per-key USD quotas.
  • 🧠 Memory — opt-in, int8 quantization, x-omniroute-no-memory.
  • 🛡️ Security — prompt-injection guard + DuckDuckGo last-resort search.
  • 🖼️ Endpoints/v1/ocr, /v1/audio/translations.
  • 🤝 Providers & agents — Cursor Cloud Agent, Grok Build (xAI), Ollama card, Claude Sonnet 5, Zed, Requesty…

🤖 Совместимые CLI и агенты

Один конфиг — http://localhost:20128/v1 — и любой AI IDE/CLI едет на free & low-cost моделях.

Claude Code Codex CLI Cline Kilo Code Roo Code Continue
OpenCode Copilot CLI Cursor CLI Factory Droid Grok Build OpenClaw
также · Aider · Goose · Hermes · Kiro · Antigravity · Windsurf · AMP · любой OpenAI-compatible tool

📖 Setup 34 tools → docs/reference/CLI-TOOLS.md · OpenCode plugin → @omniroute/opencode-provider


🌐 329 AI-провайдеров — 155 free/no-auth

Самый полный каталог среди open-source роутеров: 329 провайдеров, включая 155 записи free/no-auth.

🆓 Documented free access — $0 where listed, без карты

Провайдер Что даёт
AgentRouter GPT-5, Claude, Gemini — $100 free credits
Qoder AI Kimi-K2, DeepSeek-R1 — free access; daily/rate limits may apply
Pollinations GPT-5, Claude, Llama 4 — без ключа
LongCat LongCat-2.0 — 10M one-time (KYC)
Cloudflare AI 50+ models — 10K neurons/day
NVIDIA NIM 129 models — ~40 RPM free
Cerebras Qwen3 235B — 1M tokens/day
Kiro Claude Sonnet/Haiku — ~50 credits/mo

📖 Machine-readable catalog → docs/reference/PROVIDER_REFERENCE.md


🖥️ Где запускается OmniRoute — везде

Платформа Установка Плюсы
📦 npm (global) npm install -g omniroute Одна команда, любая ОС
🐳 Docker docker run … diegosouzapw/omniroute AMD64 + ARM64
🖥️ Desktop (Electron) npm run electron:build Окно + tray — Win/macOS/Linux
💪 ARM native arm64 Pi, ARM servers, Apple Silicon
📱 Android (Termux) pkg install nodejs && npx -y omniroute На телефоне 24/7, без root
📲 PWA «Add to Home Screen» Fullscreen, offline
🧩 OpenCode plugin @omniroute/opencode-provider Нативная интеграция
🛠️ Из исходников npm install && npm run dev Хакинг и контрибьют

📖 Docker · Desktop · Termux · PWA · OpenCode


🔒 Приватно и local-first

Ваши ключи, ваша машина, ваши данные. OmniRoute — локальный прокси, без «звонков домой».

  • 🏠 100% на вашем железе — npm, Docker, desktop или телефон. Нет cloud-hop OmniRoute.
  • 🔐 Credentials at rest — API keys и OAuth в AES-256-GCM.
  • 🚫 Zero telemetry по умолчанию — промпты уходят только выбранным провайдерам.
  • 🛡️ Жёсткий gateway — scoping ключей, IP filter, rate limits, prompt-injection guard, loopback-only process routes.
  • 📜 MIT, fully open-source — аудируйте построчно, self-host навсегда.

📖 Authorization · Guardrails · Compliance


🔌 Полный CLI + A2A и MCP

Это не «просто сервер» — CLI-кокит с 80+ командами и открытыми agent-протоколами, чтобы AI управлял OmniRoute сам.

⌨️ Настоящий CLI

omniroute               # gateway + dashboard (порт 20128)
omniroute chat          # TUI-чат (/model /combo /skill /memory)
omniroute setup         # мастер первого запуска
omniroute doctor        # диагностика провайдеров, портов, native deps

🛰️ Remote mode — CLI здесь, OmniRoute на VPS

omniroute connect 192.168.0.15            # пароль → scoped token
omniroute models list                     # ← на REMOTE
omniroute configure codex                 # remote model → local Codex profile
omniroute tokens create --name ci --scope read
omniroute contexts use default            # ← обратно на local

Scopes: read / write / admin. Process-spawning routes — только loopback. 📖 Remote Mode

🤝 Подключите агента — он управляет шлюзом

Протокол Endpoint Зачем
🧰 MCP (stdio) omniroute --mcp Claude Desktop, Cursor, любой MCP client
🌊 MCP (HTTP) http://localhost:20128/api/mcp/stream Remote MCP — 107 tools, 32 scopes
📡 MCP (SSE) http://localhost:20128/api/mcp/sse Streaming MCP
🤝 A2A http://localhost:20128/.well-known/agent.json Agent-to-agent, JSON-RPC 2.0 + SSE
claude mcp add-server omniroute --type http --url http://localhost:20128/api/mcp/stream

📖 MCP · A2A · Agent Protocols


🗜️ Экономьте 1595% токенов — автоматически

Зачем тратить много токенов, если хватает меньшего? Каждый запрос идёт через compression pipeline прозрачно — клиент не меняется. Стек из 11 composable engines (идеи RTK, Caveman, LLMLingua-2, Troglodita).

🧱 11-engine stack

# Engine Что делает
1 Session-Dedup Убирает повторённый cross-turn контент
2 CCR Крупные блоки за retrieve-markers, fetch on demand
3 RTK Умная фильтрация tool-result, dedup, truncation
4 Headroom Lossless tabular compaction JSON arrays (~30%), GCF v3.2
5 Relevance Extractive scoring относительно last user query
6 Caveman Rule-based prose (~6575% на output)
7 LLMLingua-2 ML semantic pruning (MobileBERT ONNX), code-safe
8 Lite Whitespace + image-URL trimming
9 Aggressive Summarization + progressive aging старых turns
10 Ultra Heuristic pruning + optional SLM tier

Код, URL и structured data всегда сохраняются byte-perfect.

Режим Экономия Когда
🪶 Lite ~15% Безопасный always-on default
🪨 Standard (Caveman) ~30% Ежедневный coding
Aggressive ~50% Длинные tool-heavy сессии
🔥 Ultra ~75% Максимум экономии
🧰 RTK 6090% Shell / test / build / git output
🔗 Stacked (RTK → Caveman) 7895% Промпты + tool logs

Пример — Standard:

До (69 tokens): "The reason your React component is re-rendering is likely because you're creating a new object reference on each render cycle…"

После (19 tokens): "New object ref each render. Inline object prop = new ref = re-render. Wrap in useMemo."

Тот же смысл. 72% tokens. Без потери точности.

Default stack: RTK → Caveman. Combined:

combined = 1  (1  RTK) × (1  Caveman_input)
average  = 1  (1  0.80) × (1  0.46) = 89.2%
range    = 78.4  94.6%

Precedence (high → low): header x-omniroute-compression combo override named profile adaptive panel default off.

📖 COMPRESSION_GUIDE.md · RTK_COMPRESSION.md · COMPRESSION_ENGINES.md


Быстрый старт

1) Установка и запуск

npm install -g omniroute
omniroute

💡 Видите npm warn ERESOLVE / peer-dep? Это безвредно.

Dashboard: http://localhost:20128 · API: http://localhost:20128/v1.

2) Подключите FREE-провайдера (без signup)

Dashboard → ProvidersKiro AI (free Claude, ~50 credits/mo) или OpenCode Free (без auth) → готово.

3) Направьте coding tool

Base URL: http://localhost:20128/v1
API Key:  [Dashboard → Endpoints]
Model:    auto            (zero-config smart routing — или любой provider/model)

4) Проверка

curl http://localhost:20128/v1/models -H "Authorization: Bearer YOUR_KEY"

Должны появиться подключённые модели. 🎉 Дальше пишите код — OmniRoute сам роутит и делает fallback.

Если клиент не умеет custom headers — tokenized aliases:

OpenAI catalog:   http://localhost:20128/vscode/YOUR_KEY/
OpenAI models:    http://localhost:20128/vscode/YOUR_KEY/models
OpenAI chat:      http://localhost:20128/vscode/YOUR_KEY/chat/completions
OpenAI responses: http://localhost:20128/vscode/YOUR_KEY/responses
Ollama chat:      http://localhost:20128/vscode/YOUR_KEY/api/chat
Ollama tags:      http://localhost:20128/vscode/YOUR_KEY/api/tags

Предпочтительно: Authorization: Bearer ....


📦 Другие способы — Docker, source, pnpm, Arch

🐳 Docker

docker run -d --name omniroute --restart unless-stopped --stop-timeout 40 \
  -p 127.0.0.1:20128:20128 -v omniroute-data:/app/data diegosouzapw/omniroute:latest

🛠️ Из исходников

cp .env.example .env && npm install
PORT=20128 npm run dev

📦 pnpm

pnpm add -g omniroute@latest --allow-build=better-sqlite3 --allow-build=@swc/core && omniroute

🐧 Arch Linux (AUR)

yay -S omniroute-bin && systemctl --user enable --now omniroute.service

🔧 Nix (Flake)

nix develop
npm run dev
# или: devbox run npm run dev

📖 Docker Guide — Compose, Caddy HTTPS, Cloudflare tunnels.

Полезные флаги CLI

Команда Описание
omniroute Сервер (PORT=20128, API + dashboard)
omniroute --port 3000 Порт 3000
omniroute --mcp MCP server (stdio)
omniroute --no-open Не открывать браузер
omniroute --help Справка

Split-port:

PORT=20128 DASHBOARD_PORT=20129 omniroute
# API:       http://localhost:20128/v1
# Dashboard: http://localhost:20129

Удаление

Команда Действие
npm run uninstall Убирает app, сохраняет ~/.omniroute
npm run uninstall:full Удаляет app и все ключи/БД
npm uninstall -g omniroute Глобальный npm uninstall

Старт с $0 — Free Stack

Шаг Действие Что открывается
1 Подключить Kiro (AWS Builder ID OAuth) Claude Sonnet / Haiku
2 Подключить Qoder (Google OAuth) kimi-k2-thinking, qwen3-coder-plus…
3 Подключить Qwen (Device Code) qwen3-coder-plus/flash…
4 /dashboard/combos → шаблон Free Stack ($0) Round-robin free-провайдеров

IDE/CLI: http://localhost:20128/v1 · API Key: любая строка (если REQUIRE_API_KEY=false).

Дополнительно free: Groq (30 RPM), NVIDIA NIM (~40 RPM), Cerebras (1M tok/day), LongCat, Cloudflare Workers AI (10K Neurons/day).


🎬 OmniRoute в деле

Guia em Português
🇧🇷 Português
Полный гайд
English Guide
🇺🇸 English
Complete walkthrough
Руководство на русском
🇷🇺 Русский
Полное руководство

🎬 Сняли видео про OmniRoute? Откройте issue или discussion — добавим в этот раздел.


📚 Узнать больше

💰 Цены и zero-cost stack
Tier Примеры Стоимость
💳 Subscription Claude Code Pro / Codex / Copilot $10200/мес
🔑 API Key (free tiers) NVIDIA NIM, Cerebras, Groq Free
💰 Cheap GLM ~$0.5/1M · MiniMax ~$0.20.3/1M Копейки
🆓 Documented free access Kiro, Qoder, Qwen, Pollinations, LongCat $0 where listed

Playbook A — выжать подписку + cheap backup:

Combo: "maximize-claude"
  1. cc/claude-opus-4-7
  2. glm/glm-4.7
  3. if/kimi-k2-thinking

Playbook B — zero-cost coding:

Combo: "free-tier-fallback"
  1. if/kimi-k2-thinking
  2. qw/qwen3-coder-plus

💡 «Cost» в дашборде — tracker экономии, не счёт OmniRoute. OmniRoute вам не выставляет счета.

📖 Free catalog → docs/reference/FREE_TIERS.md

🌍 Геоблоки — 3-level proxy + stealth

🇷🇺 🇨🇳 🇮🇷 и другие restricted regions? Proxy на 3 уровнях (global / per-provider / per-connection): API, OAuth, connection tests, token refresh, model sync.

  • Protocols: HTTP/HTTPS, SOCKS5, auth proxies
  • TLS fingerprint spoofing (wreq-js), CLI fingerprint matching
  • OAuth через proxy — лечит unsupported_country_region_territory

📖 docs/ops/PROXY_GUIDE.md

Возможности (кратко)

Routing: 19 стратегий · task-aware · thinking budget · wildcards · system prompt injection. Compatibility: OpenAI ↔ Claude ↔ Gemini ↔ Responses · OAuth PKCE auto-refresh · multi-account · Batch + Files API.
Protocols: MCP (107 tools) · A2A · ACP · cloud agents. Quality/ops: Evals · guardrails (PII, injection) · health · p50/p95/p99 · webhooks · audit.
Media: embeddings, images, video, music, STT/TTS, OCR, moderations, rerank.

📖 Env, FAQ
Variable Default Назначение
PORT 20128 API + dashboard
REQUIRE_API_KEY false Требовать API key на /v1
DATA_DIR ~/.omniroute БД и конфиги
REQUEST_TIMEOUT_MS 600000 Базовый timeout
STREAM_IDLE_TIMEOUT_MS inherits Idle gap SSE

OmniRoute берёт деньги? Нет — open-source на вашей машине. Платите только платным провайдерам.
Free правда unlimited? Нет гарантии: даже без опубликованного token cap действуют rate/concurrency/account/region limits и условия провайдера. Комбо из нескольких free/no-auth записей повышает устойчивость, но не отменяет эти ограничения. Сжатие портит качество? Сжимается input; code/URL/JSON protected.
Регион заблокирован? Proxy + stealth.

📖 User Guide · API · Environment

🐛 Troubleshooting
Проблема Быстрый фикс
"Language model did not provide messages" Квота провайдера → combo fallback
429 rate limit Цепочка: cc/claude → glm/glm-4.7 → if/kimi-k2-thinking
OAuth expired Auto-refresh; иначе Providers → re-auth
unsupported_country_region_territory Settings → Proxy
Docker SQLite lock --stop-timeout 40
Node runtime Node >=22.0.0 <23 или >=24.0.0 <27

🐛 Баг? npm run system-info → приложите system-info.txt к issue.
📖 TROUBLESHOOTING.md

📸 Скриншоты дашборда
Page Screenshot Page Screenshot
Providers Providers Combos Combos
Analytics Analytics Health Health
Translator Translator Settings Settings
CLI Tools CLI Tools Usage Logs Usage

📧 Поддержка и сообщество

💬 Ссылки Discord / Telegram / WhatsApp — в шапке README.


🛠️ Стек

  • Runtime: Node.js 22.x или 24.x LTS — >=22.0.0 <23 || >=24.0.0 <27
  • Language: TypeScript (src/ + open-sse/)
  • Framework: Next.js 16 + React 19 + Tailwind CSS 4
  • DB: better-sqlite3 + LowDB
  • Validation: Zod
  • Protocols: MCP (stdio/HTTP/SSE) + A2A (JSON-RPC 2.0 + SSE)
  • Auth: OAuth 2.0 (PKCE) + JWT + API keys + MCP scopes
  • Platforms: Electron desktop, Termux, PWA
  • CI/CD: GitHub Actions → npm + Docker Hub
  • Resilience: circuit breakers, backoff, anti-thundering-herd, TLS stealth, auto-combo

📖 Документация

📘 Старт

Документ О чём
User Guide Провайдеры, комбо, CLI, deploy
Setup Guide Установка, CLI tools, protocols, timeouts
CLI Tools Claude Code, Codex, Cursor, Cline…
Remote Mode CLI с ноутбука → OmniRoute на VPS
Quick Start EN root: install → connect → point

🔧 Ops

Документ О чём
Docker Guide Run, Compose, Caddy, tunnels
Podman Quadlet, SELinux
VM Deployment VM + nginx + Cloudflare
Termux Android
Environment Полный .env reference

🧠 Архитектура и фичи

Документ О чём
Architecture Система и data flow
Compression Guide Pipeline сжатия
Resilience Guide Breakers, cooldown, queue
Auto-Combo Scoring и self-heal
Proxy Guide 3-level proxy
Free Tiers Free catalog

🤖 Протоколы и API

Документ О чём
API Reference Все endpoints
MCP Server Tools, transports
A2A Server Skills, streaming

📋 Проект

Документ О чём
CONTRIBUTING Dev setup
CHANGELOG История релизов
SECURITY Vulnerability reporting
I18N 43 языка, pipeline переводов

👥 Как внести вклад

  1. Fork репозитория
  2. Ветка: git checkout -b docs/ru-readme-full-translation
  3. Commit: git commit -m "docs(i18n): full Russian README rewrite"
  4. Push и Pull Request в upstream

Полный гайд: CONTRIBUTING.md.

Contributors


📊 Star History

Star History Chart



Сделано с ❤️ open-source сообществом · MIT License · omniroute.online

Если OmniRoute помог сэкономить — поставьте star репозиторию.