* feat(docs): mirror every docs/ page in all 65 locales Extends the documentation mirrors from the 22-page core set (#13940) to every Markdown page under docs/: 152 sources x 65 locales = 9,880 mirrors (6,208 new), language bars rewritten for the full locale list, state adopted so the blocking drift gate now covers all 152 pages. run-translation.mjs: an oversized block made only of table rows or list items (PROVIDER_REFERENCE.md 244-row table, FREE_TIERS.md 71-item list) is cut at item boundaries and rejoined without a blank line — the single 16-40 KB request outlived the backend socket for verbose scripts. 48 older mirrors whose tables had lost rows were retranslated with --force. * docs(i18n): refresh mirrors for the sources the base changed since the branch cut Section-level retranslation of the 29 docs (and README.md) whose source or mirrors moved on release/v3.8.51 during the run, then state adoption; the drift gate is green again on the merged tree.
85 KiB
OmniRoute Architecture (Filipino)
🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇬🇷 el · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇪 ga · 🇮🇳 gu · 🇳🇬 ha · 🇮🇱 he · 🇮🇳 hi · 🇭🇷 hr · 🇭🇺 hu · 🇦🇲 hy · 🇮🇩 id · 🇳🇬 ig · 🇮🇹 it · 🇯🇵 ja · 🇬🇪 ka · 🇰🇭 km · 🇮🇳 kn · 🇰🇷 ko · 🇱🇹 lt · 🇱🇻 lv · 🇮🇳 ml · 🇮🇳 mr · 🇲🇾 ms · 🇲🇹 mt · 🇲🇲 my · 🇳🇵 ne · 🇳🇱 nl · 🇳🇴 no · 🇮🇳 or · 🇮🇳 pa · 🇵🇱 pl · 🇵🇹 pt · 🇧🇷 pt-BR · 🇷🇴 ro · 🇷🇺 ru · 🇱🇰 si · 🇸🇰 sk · 🇸🇮 sl · 🇷🇸 sr · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW
🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇬🇷 el · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇪 ga · 🇮🇳 gu · 🇳🇬 ha · 🇮🇱 he · 🇮🇳 hi · 🇭🇷 hr · 🇭🇺 hu · 🇦🇲 hy · 🇮🇩 id · 🇳🇬 ig · 🇮🇹 it · 🇯🇵 ja · 🇬🇪 ka · 🇰🇭 km · 🇮🇳 kn · 🇰🇷 ko · 🇱🇹 lt · 🇱🇻 lv · 🇮🇳 ml · 🇮🇳 mr · 🇲🇾 ms · 🇲🇹 mt · 🇲🇲 my · 🇳🇵 ne · 🇳🇱 nl · 🇳🇴 no · 🇮🇳 or · 🇮🇳 pa · 🇵🇱 pl · 🇵🇹 pt · 🇧🇷 pt-BR · 🇷🇴 ro · 🇷🇺 ru · 🇱🇰 si · 🇸🇰 sk · 🇸🇮 sl · 🇷🇸 sr · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW
Huling na-update: 2026-06-28
Ehekutibong Buod
Ang OmniRoute ay isang lokal na AI routing gateway at dashboard na binuo gamit ang Next.js.
Nagbibigay ito ng iisang endpoint na compatible sa OpenAI (/v1/*) at nagruruta ng trapiko sa maraming upstream provider gamit ang pagsasalin, fallback, pag-refresh ng token, at pagsubaybay sa paggamit.
Mga pangunahing kakayahan:
- API surface na compatible sa OpenAI para sa CLI/mga tool (355 provider, 108 executor)
- Pagsasalin ng request/response sa iba't ibang format ng provider
- Fallback ng kumbinasyon ng modelo (pagkakasunod-sunod ng maraming modelo)
- Mga structured na hakbang ng combo (
provider + model + connection) na may runtime ordering ayon sacompositeTiers - Fallback sa antas ng account (maraming account bawat provider)
- Paunang pagsusuri ng quota at pagpili ng P2C account na isinasaalang-alang ang quota sa pangunahing chat path
- Pamamahala ng koneksyon sa provider gamit ang OAuth + API key (22 OAuth provider module)
- Pagbuo ng embedding sa pamamagitan ng
/v1/embeddings(18 provider) - Pagbuo ng larawan sa pamamagitan ng
/v1/images/generations(10+ provider, 20+ modelo) - Transkripsiyon ng audio sa pamamagitan ng
/v1/audio/transcriptions(18 provider) - Text-to-speech sa pamamagitan ng
/v1/audio/speech(24 built-in na provider) - Pagbuo ng video sa pamamagitan ng
/v1/videos/generations(ComfyUI + SD WebUI) - Pagbuo ng musika sa pamamagitan ng
/v1/music/generations(ComfyUI) - Paghahanap sa web sa pamamagitan ng
/v1/search(20 provider) - Mga moderation sa pamamagitan ng
/v1/moderations - Muling pagraranggo sa pamamagitan ng
/v1/rerank - Pag-parse ng think tag (
<think>...</think>) para sa mga reasoning model - Paglilinis ng response para sa mahigpit na compatibility sa OpenAI SDK
- Normalisasyon ng role (developer→system, system→user) para sa compatibility sa iba't ibang provider
- Conversion ng structured output (json_schema → Gemini responseSchema)
- Lokal na persistence para sa mga provider, key, alias, combo, setting, at pagpepresyo (122 DB module)
- Pagsubaybay sa paggamit/gastos at pag-log ng request
- Opsyonal na cloud sync para sa pag-sync ng maraming device/state
- IP allowlist/blocklist para sa kontrol ng access sa API
- Pamamahala ng thinking budget (passthrough/auto/custom/adaptive)
- Pangkalahatang pag-inject ng system prompt
- Pagsubaybay sa session at fingerprinting
- Pinahusay na rate limiting bawat account na may mga profile na partikular sa provider
- Circuit breaker pattern para sa katatagan ng provider
- Proteksiyon laban sa thundering herd gamit ang mutex locking
- Cache para sa deduplication ng request batay sa signature
- Domain layer: mga panuntunan sa gastos, patakaran sa fallback, patakaran sa lockout
- Context Relay: mga buod ng paglilipat ng session para sa pagpapanatili ng continuity sa pag-ikot ng account
- Persistence ng domain state (SQLite write-through cache para sa mga fallback, budget, lockout, at circuit breaker)
- Policy engine para sa sentralisadong pagsusuri ng request (lockout → budget → fallback)
- Telemetry ng request na may pinagsama-samang latency na p50/p95/p99
- Telemetry ng combo target at makasaysayang kalagayan ng combo target sa pamamagitan ng
combo_execution_key/combo_step_id - Correlation ID (X-Request-Id) para sa end-to-end na tracing
- Pag-log ng compliance audit na may opsyong mag-opt out bawat API key
- Eval framework para sa pagtiyak ng kalidad ng LLM
- Health dashboard na may real-time na status ng circuit breaker ng provider
- MCP Server (110 tool) na may 3 transport (stdio/SSE/Streamable HTTP)
- A2A Server (JSON-RPC 2.0 + SSE) na may mga skill at lifecycle ng task
- Memory system (extraction, injection, retrieval, summarization)
- Skills system (registry, executor, sandbox, mga built-in na skill)
- MITM proxy na may pamamahala ng certificate at paghawak sa DNS
- Middleware na panangga laban sa prompt injection
- Pipeline ng prompt compression na may Caveman, RTK, mga stacked pipeline, compression combo, language pack, at analytics
- Registry ng ACP (Agent Communication Protocol)
- Mga modular na OAuth provider (22 indibidwal na module sa ilalim ng
src/lib/oauth/providers/) - Mga script para sa pag-uninstall/ganap na pag-uninstall
- Aksiyon sa pagkukumpuni ng OAuth environment
- WebSocket bridge para sa mga WS client na compatible sa OpenAI (
/v1/ws) - Pamamahala ng sync token (pag-isyu/pagbawi, pag-download ng config bundle na may bersiyon sa pamamagitan ng ETag)
- GLM Thinking (
glmt) bilang first-class na preset ng provider - Hybrid na pagbibilang ng token (
/messages/count_tokenssa panig ng provider na may estimation fallback) - Awtomatikong pag-seed ng model alias (30+ normalisasyon ng cross-proxy dialect sa pagsisimula)
- Ligtas na outbound fetch na may SSRF guard, pag-block ng pribadong URL, at nako-configure na retry
- Mga chat retry na isinasaalang-alang ang cooldown, gamit ang nako-configure na
requestRetryatmaxRetryIntervalSec - Pag-validate ng runtime environment gamit ang Zod sa pagsisimula
- Compliance audit v2 na may pagination, mga CRUD event ng provider, at pag-log ng validation na hinarang ng SSRF
Pangunahing runtime model:
- Ipinapatupad ng mga Next.js app route sa ilalim ng
src/app/api/*ang mga dashboard API at compatibility API - Isang pinagsasaluhang SSE/routing core sa
src/sse/*+open-sse/*ang namamahala sa pagpapatupad ng provider, pagsasalin, streaming, fallback, at paggamit
Mga Reference Diagram
Ang mga kanonikal at kinokontrol ng bersyon na Mermaid source para sa platform na v3.8.0 ay nasa
docs/diagrams/. Dalawa ang muling ipinapakita sa ibaba bilang gabay;
ang iba pa ay naka-link mula sa mga gabay na partikular sa kani-kanilang domain.
Source: diagrams/request-pipeline.mmd
Source: diagrams/resilience-3layers.mmd — naka-link din mula sa RESILIENCE_GUIDE.md at sa reference ng resilience sa
CLAUDE.md.
Saklaw at mga Hangganan
Kasama sa Saklaw
- Lokal na runtime ng gateway
- Mga API sa pamamahala ng dashboard
- Authentication ng provider at pag-refresh ng token
- Pagsasalin ng request at SSE streaming
- Lokal na state + persistence ng paggamit
- Opsyonal na orchestration ng cloud sync
Hindi Kasama sa Saklaw
- Implementasyon ng cloud service sa likod ng
NEXT_PUBLIC_CLOUD_URL - SLA/control plane ng provider sa labas ng lokal na proseso
- Ang mismong mga external CLI binary (Claude CLI, Codex CLI, atbp.)
Saklaw ng Dashboard (Kasalukuyan)
Mga pangunahing page sa ilalim ng src/app/(dashboard)/dashboard/:
/dashboard— mabilisang pagsisimula + pangkalahatang-ideya ng provider/dashboard/endpoint— endpoint proxy + MCP + A2A + mga tab ng API endpoint/dashboard/providers— mga koneksyon at credential ng provider/dashboard/combos— mga combo strategy, template, step-based builder, panuntunan sa pag-route ng modelo, manu-manong naka-persist na pagkakasunod-sunod/dashboard/auto-combo— Auto Combo Engine: mga timbang sa pagmamarka, mode pack, virtual factory preset, telemetry/dashboard/costs— pagsasama-sama ng gastos at visibility ng pagpepresyo/dashboard/analytics— analytics ng paggamit, mga ebalwasyon, kalagayan ng combo target/dashboard/limits— mga kontrol sa quota/rate/dashboard/cli-tools— onboarding sa CLI, pagtukoy sa runtime, pagbuo ng config/dashboard/agents— mga natukoy na ACP agent + pagpaparehistro ng custom agent/dashboard/cloud-agents— mga task ng agent na naka-host sa cloud (Codex Cloud, Devin, Jules) at lifecycle ng task/dashboard/skills— registry ng A2A skill, sandbox execution, built-in na catalog ng skill/dashboard/memory— inspeksyon at retrieval ng persistent na memorya ng pag-uusap/dashboard/webhooks— mga outbound webhook subscription, pag-rotate ng secret, mga istatistika ng retry/dashboard/batch— pagsusumite ng batch job at progreso/dashboard/cache— mga istatistika ng read-through at reasoning cache, mga kontrol sa eviction/dashboard/playground— interactive na chat playground para sa anumang naka-configure na combo/modelo/dashboard/changelog— viewer ng changelog sa loob ng app (nire-render angCHANGELOG.md)/dashboard/system— mga diagnostic ng runtime, impormasyon ng bersyon, surface para sa validation ng environment/dashboard/onboarding— wizard para sa unang setup ng mga bagong installation/dashboard/media— playground para sa image/video/music/dashboard/search-tools— pagsubok sa search provider at history/dashboard/health— uptime, mga circuit breaker, rate limit, mga session na mino-monitor ang quota/dashboard/logs— mga log ng request/proxy/audit/console/dashboard/settings— mga tab ng system setting (pangkalahatan, routing, mga default ng combo, atbp.)/dashboard/context/caveman— mga panuntunan sa Caveman compression, language pack, preview, at output mode/dashboard/context/rtk— mga filter ng output ng RTK command, preview, at mga setting sa kaligtasan ng runtime/dashboard/context/combos— mga pinangalanang compression pipeline na nakatalaga sa mga routing combo/dashboard/translator— inspeksyon ng translator at preview ng conversion ng format ng request/dashboard/audit— browser ng compliance audit log na may pagination at structured metadata/dashboard/usage— browser ng paggamit sa bawat request na nakaugnay sausage_history/dashboard/compression— analytics ng compression, mga istatistika, at pagtatalaga ng pipeline/dashboard/api-manager— lifecycle ng API key at mga pahintulot sa modelo
Mataas na Antas na Konteksto ng System
flowchart LR
subgraph Clients[Mga Developer Client]
C1[Claude Code]
C2[Codex CLI]
C3[OpenClaw / Droid / Cline / Continue / Roo]
C4[Mga custom na OpenAI-compatible client]
BROWSER[Dashboard ng Browser]
end
subgraph Router[Lokal na Proseso ng OmniRoute]
API[V1 Compatibility API\n/v1/*]
DASH[Dashboard + Management API\n/api/*]
CORE[SSE + Translation Core\nopen-sse + src/sse]
DB[(storage.sqlite)]
UDB[(mga talahanayan ng paggamit + mga log artifact)]
end
subgraph Upstreams[Mga Upstream Provider]
P1[Mga OAuth Provider\nClaude/Codex/Gemini/Qoder/GitHub/Kiro/Cursor/Antigravity]
P2[Mga API Key Provider\nOpenAI/Anthropic/OpenRouter/GLM/Kimi/MiniMax\nDeepSeek/Groq/xAI/Mistral/Perplexity\nTogether/Fireworks/Cerebras/Cohere/NVIDIA]
P3[Mga Compatible Node\nOpenAI-compatible / Anthropic-compatible]
end
subgraph Cloud[Opsyonal na Cloud Sync]
CLOUD[Cloud Sync Endpoint\nNEXT_PUBLIC_CLOUD_URL]
end
C1 --> API
C2 --> API
C3 --> API
C4 --> API
BROWSER --> DASH
API --> CORE
DASH --> DB
CORE --> DB
CORE --> UDB
CORE --> P1
CORE --> P2
CORE --> P3
DASH --> CLOUD
Mga Pangunahing Runtime Component
1) Layer ng API at Routing (Mga App Route ng Next.js)
Mga pangunahing directory:
src/app/api/v1/*atsrc/app/api/v1beta/*para sa mga compatibility APIsrc/app/api/*para sa mga API ng pamamahala/configuration- Ang mga Next rewrite sa
next.config.mjsay nagmamapa ng/v1/*sa/api/v1/*
Mahahalagang compatibility route:
src/app/api/v1/chat/completions/route.tssrc/app/api/v1/messages/route.tssrc/app/api/v1/responses/route.tssrc/app/api/v1/models/route.ts— kabilang ang mga custom model na maycustom: truesrc/app/api/v1/embeddings/route.ts— pagbuo ng embedding (6 na provider)src/app/api/v1/images/generations/route.ts— pagbuo ng larawan (4+ na provider, kabilang ang Antigravity/Nebius)src/app/api/v1/messages/count_tokens/route.tssrc/app/api/v1/providers/[provider]/chat/completions/route.ts— nakalaang chat para sa bawat providersrc/app/api/v1/providers/[provider]/embeddings/route.ts— mga nakalaang embedding para sa bawat providersrc/app/api/v1/providers/[provider]/images/generations/route.ts— mga nakalaang larawan para sa bawat providersrc/app/api/v1beta/models/route.tssrc/app/api/v1beta/models/[...path]/route.ts
Mga domain ng pamamahala:
- Auth/mga setting:
src/app/api/auth/*,src/app/api/settings/* - Mga provider/koneksyon:
src/app/api/providers* - Mga provider node:
src/app/api/provider-nodes* - Mga custom model:
src/app/api/provider-models(GET/POST/DELETE) - Catalog ng model:
src/app/api/models/route.ts(GET) - Config ng proxy:
src/app/api/settings/proxy(GET/PUT/DELETE) +src/app/api/settings/proxy/test(POST) - OAuth:
src/app/api/oauth/* - Mga key/alias/combo/presyo:
src/app/api/keys*,src/app/api/models/alias,src/app/api/combos*,src/app/api/pricing - Paggamit:
src/app/api/usage/* - Sync/cloud:
src/app/api/sync/*,src/app/api/cloud/* - Mga helper ng CLI tooling:
src/app/api/cli-tools/* - Filter ng IP:
src/app/api/settings/ip-filter(GET/PUT) - Badyet sa pag-iisip:
src/app/api/settings/thinking-budget(GET/PUT) - System prompt:
src/app/api/settings/system-prompt(GET/PUT) - Compression:
src/app/api/settings/compression,src/app/api/compression/*, atsrc/app/api/context/* - Mga session:
src/app/api/sessions(GET) - Mga limitasyon sa rate:
src/app/api/rate-limits(GET) - Resilience:
src/app/api/resilience(GET/PATCH) — pila ng request, cooldown ng koneksyon, breaker ng provider, config ng paghihintay sa cooldown - Pag-reset ng resilience:
src/app/api/resilience/reset(POST) — i-reset ang mga breaker ng provider - Mga estadistika ng cache:
src/app/api/cache/stats(GET/DELETE) - Telemetry:
src/app/api/telemetry/summary(GET) - Badyet:
src/app/api/usage/budget(GET/POST) - Mga fallback chain:
src/app/api/fallback/chains(GET/POST/DELETE) - Audit ng compliance:
src/app/api/compliance/audit-log(GET, may pagination + structured metadata) - Mga eval:
src/app/api/evals(GET/POST),src/app/api/evals/[suiteId](GET) - Mga patakaran:
src/app/api/policies(GET/POST) - Mga sync token:
src/app/api/sync/tokens(GET/POST),src/app/api/sync/tokens/[id](GET/DELETE) - Config bundle:
src/app/api/sync/bundle(GET, snapshot ng mga setting/provider/combo/key na may bersyon gamit ang ETag) - WebSocket:
src/app/api/v1/ws/route.ts— Upgrade handler para sa mga OpenAI-compatible WS client
2) SSE + Core ng Pagsasalin
Mga module ng pangunahing daloy:
- Entry point:
src/sse/handlers/chat.ts - Pangunahing orkestrasyon:
open-sse/handlers/chatCore.ts - Mga adapter sa pagpapatupad ng provider:
open-sse/executors/* - Pagtukoy ng format/config ng provider:
open-sse/services/provider.ts - Pag-parse/paglutas ng modelo:
src/sse/services/model.ts,open-sse/services/model.ts - Lohika ng fallback ng account:
open-sse/services/accountFallback.ts - Registry ng pagsasalin:
open-sse/translator/index.ts - Mga transformasyon ng stream:
open-sse/utils/stream.ts,open-sse/utils/streamHandler.ts - Pagkuha/normalisasyon ng usage:
open-sse/utils/usageTracking.ts - Parser ng think tag:
open-sse/utils/thinkTagParser.ts - Handler ng embedding:
open-sse/handlers/embeddings.ts - Registry ng provider ng embedding:
open-sse/config/embeddingRegistry.ts - Handler ng pagbuo ng larawan:
open-sse/handlers/imageGeneration.ts - Registry ng provider ng larawan:
open-sse/config/imageRegistry.ts - Paglilinis ng response:
open-sse/handlers/responseSanitizer.ts - Normalisasyon ng role:
open-sse/services/roleNormalizer.ts
Mga serbisyo (lohika ng negosyo):
- Pagpili/pagmamarka ng account:
open-sse/services/accountSelector.ts - Pamamahala sa lifecycle ng context:
open-sse/services/contextManager.ts - Pagpapatupad ng IP filter:
open-sse/services/ipFilter.ts - Pagsubaybay sa session:
open-sse/services/sessionManager.ts - Pag-aalis ng mga dobleng request:
open-sse/services/signatureCache.ts - Pag-inject ng system prompt:
open-sse/services/systemPrompt.ts - Pamamahala sa thinking budget:
open-sse/services/thinkingBudget.ts - Pagruruta ng wildcard model:
open-sse/services/wildcardRouter.ts - Pamamahala sa rate limit:
open-sse/services/rateLimitManager.ts - Circuit breaker:
src/shared/utils/circuitBreaker.ts - Handoff ng context:
open-sse/services/contextHandoff.ts— pagbuo at pag-inject ng buod ng handoff para sa estratehiyang context-relay - Compression:
open-sse/services/compression/*— maagap na compression bago ang pagsasalin ng provider; kabilang ang mga panuntunan ng Caveman, mga filter ng RTK, mga naka-stack na pipeline, mga kumbinasyon ng compression, mga estadistika, at validation - Tagakuha ng quota ng Codex:
open-sse/services/codexQuotaFetcher.ts— kinukuha ang quota ng Codex para sa mga desisyon sa context-relay handoff - Retry na isinasaalang-alang ang cooldown:
src/sse/services/cooldownAwareRetry.ts— mga retry ng cooldown bawat modelo na may nako-configure narequestRetry/maxRetryIntervalSec - Ligtas na outbound fetch:
src/shared/network/safeOutboundFetch.ts— protektadong pag-fetch ng provider/model na may SSRF guard, pag-block ng pribadong URL, retry, at timeout - Guard ng outbound URL:
src/shared/network/outboundUrlGuard.ts— vina-validate ang mga URL ng provider laban sa mga saklaw ng CIDR ng private/localhost - Mga default ng request ng provider:
open-sse/services/providerRequestDefaults.ts— mga default namaxTokens,temperature,thinkingBudgetTokenssa antas ng provider - Mga constant ng GLM provider:
open-sse/config/glmProvider.ts— mga pinagsasaluhang modelo ng GLM, mga URL ng quota, at timeout/mga default ng GLMT - Antigravity upstream:
open-sse/config/antigravityUpstream.ts— base URL at mga constant ng discovery path - Mga constant ng Codex client:
open-sse/config/codexClient.ts— mga value ng user-agent at client-version na may bersyon - Seed ng alias ng modelo:
src/lib/modelAliasSeed.ts— nagse-seed ng 30+ alias ng cross-proxy dialect sa startup
Mga module ng domain layer:
- Mga panuntunan sa gastos/badyet:
src/domain/costRules.ts - Patakaran sa fallback:
src/domain/fallbackPolicy.ts - Resolver ng combo:
src/domain/comboResolver.ts - Patakaran sa lockout:
src/domain/lockoutPolicy.ts - Policy engine:
src/domain/policyEngine.ts— sentralisadong pagsusuri ng lockout → badyet → fallback - Catalog ng mga error code:
src/shared/constants/errorCodes.ts - Request ID:
src/shared/utils/requestId.ts - Timeout ng fetch:
src/shared/utils/fetchTimeout.ts - Telemetry ng request:
src/shared/utils/requestTelemetry.ts - Compliance/audit:
src/lib/compliance/index.ts - Runner ng eval:
src/lib/evals/evalRunner.ts - Persistence ng estado ng domain:
src/lib/db/domainState.ts— SQLite CRUD para sa mga fallback chain, badyet, kasaysayan ng gastos, estado ng lockout, at mga circuit breaker
Mga module ng OAuth provider (22 indibidwal na file sa ilalim ng src/lib/oauth/providers/):
- Index ng registry:
src/lib/oauth/providers/index.ts - Mga indibidwal na provider:
agy.ts,antigravity.ts,claude.ts,cline.ts,codebuddy-cn.ts,codex.ts,cursor.ts,devin-desktop.ts,ghe-copilot.ts,github.ts,gitlab-duo.ts,grok-cli-oauth.ts,grok-cli.ts,kilocode.ts,kimi-coding.ts,kiro.ts,openference.ts,qoder.ts,trae.ts,xai-oauth.ts,zed-hosted.ts,zed.ts - Manipis na wrapper:
src/lib/oauth/providers.ts— muling nag-e-export mula sa mga indibidwal na module
5) Mga Naka-embed na Serbisyo (v3.8.4)
Maaaring mag-install, mangasiwa, at magruta ang OmniRoute patungo sa mga lokal na tumatakbong proseso ng AI tool na tinatawag na mga naka-embed na serbisyo. Limang serbisyo ang kasama: 9Router, CLIProxyAPI, Bifrost, Mux at Dario.
Mga layer ng arkitektura:
- UI (
/dashboard/providers/services) — pahinang may dalawang tab na may mga kontrol sa lifecycle, live na pag-stream ng log, pamamahala ng API key, at (para sa 9Router) naka-embed na native UI sa pamamagitan ng isang internal na reverse proxy. - API (
/api/services/{name}/*) — 11 endpoint para sa 9Router, 10 para sa CLIProxyAPI, tig-8 para sa Bifrost / Mux / Dario, lahat ay nauuri bilang LOCAL_ONLY (mahigpit na panuntunan #17). Isang pinagsasaluhangGET /api/services/[name]/logsSSE endpoint ang nagsisilbi sa parehong serbisyo. - Supervisor (
src/lib/services/) — binabalot ng generic naServiceSupervisorclass angchild_process.spawn, nagpapanatili ng 5 MB ring buffer para sa SSE log streaming, isang health probe loop, isang atomic operation lock, at maayos na pag-shutdown na SIGTERM→SIGKILL. Ikinokonekta ngbootstrap.tsang lahat ng naka-configure na serbisyo sa pagsisimula ng proseso. - Provider/executor (
open-sse/executors/ninerouter.ts) — inilalantad ang 9Router bilang isang tunay na provider. Nilalagyan ang mga modelo ng prefix na9router/{sub}/{model}at sini-sync bawat 5 min mula sa/v1/modelsendpoint ng 9Router.
Masusing talakayan: docs/frameworks/EMBEDDED-SERVICES.md
Mga Pangunahing Subsystem (v3.8.0)
A. Auto Combo Engine
Dinamikong binibigyan ng score at pinipili ng Auto Combo ang mga target ng pagruruta sa oras ng kahilingan, sa halip na
umasa sa isang static na depinisyon ng combo. Pinapagana nito ang pamilya ng prefix ng modelong auto/*.
- Entry ng engine:
open-sse/services/autoCombo/(autoComboEngine.ts,scoringEngine.ts,virtualFactory.ts,modePacks.ts) - Resolver:
src/domain/comboResolver.ts(awtomatikong pagtukoy sa prefix naauto/) - Dashboard:
/dashboard/auto-combo - Telemetry: SQLite table na
auto_combo_decisions
Mga pangunahing kakayahan:
- 19 na estratehiya sa pagruruta (priyoridad, weighted, fill-first, round-robin, P2C, random,
least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random,
auto, lkgp, context-optimized, context-relay, fusion, kasama ang isang fallback path) —
auto ang pangunahing karagdagan sa v3.8.0; bago sa v3.8.36 ang
fusion(panel fan-out + judge synthesis,open-sse/services/fusion.ts). - 16-factor scoring: quota, kalagayan, inverse cost, inverse latency, pagiging angkop sa gawain at
sampu pa. Ang kanonikal na talahanayan ng mga factor at ng mga default na weight ng mga ito ay nasa
docs/routing/AUTO-COMBO.md— ang muling paglalahad nito rito ay magbibigay rito ng pangalawang lugar kung saan maaari itong maluma. - Virtual factory na lumilikha ng mga ephemeral combo kapag walang umiiral na tumutugmang pinangalanang combo, na kumukuha ng mga kandidato mula sa malulusog at aktibong koneksyon ng provider.
- Mga auto prefix:
auto/coding,auto/cheap,auto/fast,auto/offline,auto/smart,auto/lkgp— bawat isa ay sinusuportahan ng isang iniangkop na profile ng weight. - 6 na mode pack:
ship-fast,cost-saver,quality-first,offline-friendly,reliability-firstatchaos-mode— mga preset na configuration ng weight na maaaring tawagin mula sa dashboard. (Huwag ipagkamali sa mga prefix naauto/*sa itaas, na mga variant sa oras ng kahilingan.)
Para sa kumpletong detalye ng algorithm (mga formula ng factor, pag-tune ng weight), tingnan ang
docs/routing/AUTO-COMBO.md.
B. Mga Cloud Agent
Binabalot ng Cloud Agents ang mga third-party na hosted code-agent platform (Codex Cloud, Devin, Jules) sa likod ng isang pare-parehong lifecycle ng gawain na sinusuportahan ng DB. Nangangailangan ang lahat ng endpoint para sa paggawa/pagsisiyasat ng gawain ng authentication sa pamamahala.
- Root ng module:
src/lib/cloudAgent/(baseAgent.ts,registry.ts,api.ts,types.ts,db.ts, kasama ang mga subdirectory para sa bawat agent sa ilalim ngagents/) - Mga implementation para sa bawat agent:
agents/codex/,agents/devin/,agents/jules/ - Mga pampublikong endpoint:
/api/v1/agents/tasks/*(paglilista/paggawa/pagkuha/pagkansela) - Mga endpoint sa pamamahala:
/api/cloud/*(provisioning, status, batch) - Dashboard:
/dashboard/cloud-agents - Storage: table na
cloud_agent_tasks
Para sa provisioning at mga detalye ng OAuth para sa bawat agent, tingnan ang
docs/frameworks/CLOUD_AGENT.md.
C. Mga Guardrail
Ang module ng mga guardrail ay isang hot-reloadable na middleware layer na sumusuri sa mga kahilingan at tugon para sa PII, prompt injection, at hindi ligtas na nilalamang biswal. Agad na itinitigil ng mga paglabag ang kahilingan gamit ang HTTP 503 kasama ang isang structured na error code, na nagbibigay-daan sa mga downstream caller na muling sumubok o magsanga.
- Root ng module:
src/lib/guardrails/(base.ts,registry.ts,piiMasker.ts,promptInjection.ts,visionBridge.ts,visionBridgeHelpers.ts) - Hot reload: sinusubaybayan ng registry ang mga pagbabago sa config at muling binubuo ang chain sa mismong kinalalagyan nito
- Mga punto ng pagkakabit: entry ng chat handler, image generation handler, response sanitizer
- Kontrata ng HTTP: lumilitaw ang mga paglabag bilang
503na mayerror.code = "GUARDRAIL_VIOLATION"
Para sa paggawa ng ruleset at pag-tune ng threshold, tingnan ang
docs/security/GUARDRAILS.md.
D. Domain Layer
Isinasentralisa ng namespace na src/domain/ ang mga pagpapasya sa patakaran upang hindi na kailangang
buoin mismo ng mga route handler ang lockout/budget/fallback logic.
- Policy engine:
src/domain/policyEngine.ts— nag-iisang entry point para sa pagsusuri bago ang execution (pagkakasunod-sunod na lockout → budget → fallback) - Mga panuntunan sa gastos:
src/domain/costRules.ts - Patakaran sa fallback:
src/domain/fallbackPolicy.ts - Patakaran sa lockout:
src/domain/lockoutPolicy.ts - Pagrurutang batay sa tag:
src/domain/tagRouter.ts - Combo resolver:
src/domain/comboResolver.ts— nire-resolve ang mga pangalan ng combo, mga prefix na auto/*, at mga wildcard na target ng modelo tungo sa mga konkretong execution plan - Tagapag-ugnay ng panuntunan ng koneksyon/modelo:
src/domain/connectionModelRules.ts - Mga snapshot ng availability ng modelo:
src/domain/modelAvailability.ts - Pagsubaybay sa expiration ng provider:
src/domain/providerExpiration.ts - Quota cache:
src/domain/quotaCache.ts - Estado ng degradation:
src/domain/degradation.ts - Audit ng configuration:
src/domain/configAudit.ts - Tagabuo ng metadata ng tugon ng OmniRoute:
src/domain/omnirouteResponseMeta.ts - Subsystem ng assessment:
src/domain/assessment/— mga pana-panahong trabaho sa pagsusuri
E. Pipeline ng Awtorisasyon
Inuuri ng pipeline ng awtorisasyon ang bawat papasok na kahilingan at inilalapat ang naaangkop na chain ng patakaran bago ito ipadala.
- Entry ng pipeline:
src/server/authz/pipeline.ts - Classifier ng kahilingan:
src/server/authz/classify.ts— tinutukoy ang pagkakaiba ng mga pampublikong compatibility route at mga management route - Imbentaryo ng mga pampublikong route:
src/shared/constants/publicApiRoutes.ts - Mga patakaran:
src/server/authz/policies/— mga predicate na maaaring pagsama-samahin (requireApiKey,requireManagement,requireFreshAuth, atbp.) - Mga utility ng header:
src/server/authz/headers.ts - Helper para sa assertion:
src/server/authz/assertAuth.ts - Konteksto ng kahilingan:
src/server/authz/context.ts
Mahigpit ang hangganan sa pagitan ng mga pampubliko at management route: ang mga agent/cooldown API at pagbabago sa provider ay nangangailangan ng management auth (HTTP 401 kung wala).
Para sa kumpletong mga panuntunan sa pag-uuri ng route, tingnan ang
docs/architecture/AUTHZ_GUIDE.md.
F. Workflow FSM at Task-Aware Router
Isang router na pinapatakbo ng finite-state machine at nakapatong sa pagpili ng combo upang idirekta ang trapiko batay sa natukoy na yugto ng workflow (pagpaplano, pagpapatupad, pagsusuri) at affinity sa background task.
- Workflow FSM:
open-sse/services/workflowFSM.ts - Task-aware router:
open-sse/services/taskAwareRouter.ts - Detector ng background task:
open-sse/services/backgroundTaskDetector.ts - Classifier ng layunin:
open-sse/services/intentClassifier.ts
Ang mga transition ng FSM ay ipinapasok sa scoring ng Auto Combo, na nagbibigay ng pagkiling sa mas murang mga modelo para sa mga background/automation task at sa mas mahuhusay na modelo para sa mga interactive na turn ng pagpaplano/pagsusuri.
G. Resilience na Partikular sa Provider
May ilang provider na may mga dedikadong module para sa resilience at stealth na nakasakay sa mga pandaigdigang layer ng circuit breaker / connection cooldown / model lockout:
- Antigravity 429 engine:
open-sse/services/antigravity429Engine.ts(nagpapalit-palit ng identity, naglilinis ng mga response header, at namamahala sa pagsubaybay ng credits/version sa pamamagitan ngantigravityCredits.ts,antigravityHeaderScrub.ts,antigravityHeaders.ts,antigravityIdentity.ts,antigravityVersion.ts) - Patakaran sa quota ng ModelScope:
open-sse/services/modelscopePolicy.ts - Claude Code CCH (Compatibility Channel Handshake):
open-sse/services/claudeCodeCCH.ts, kasama angclaudeCodeCompatible.ts,claudeCodeConstraints.ts,claudeCodeExtraRemap.ts,claudeCodeToolRemapper.ts - Paghubog ng fingerprint ng Claude Code:
open-sse/services/claudeCodeFingerprint.ts - Obfuscation ng Claude Code:
open-sse/services/claudeCodeObfuscation.ts
Para sa kumpletong stealth playbook at gabay sa operasyon, tingnan ang
docs/security/STEALTH_GUIDE.md (git; hindi kino-compile sa /docs).
H. Mga Webhook, Reasoning Cache, Read Cache
- Mga Webhook — outbound dispatch para sa mga event ng provider/account/task.
- Dispatcher:
src/lib/webhookDispatcher.ts - Imbakan: SQLite table na
webhooks(sa pamamagitan ngsrc/lib/db/webhooks.ts) - Dashboard:
/dashboard/webhooks(mga subscription, secret, kasaysayan ng retry) - Para sa taxonomy ng event at semantics ng retry, tingnan ang
docs/frameworks/WEBHOOKS.md.
- Dispatcher:
- Reasoning Cache — mga reasoning block na maaaring i-replay para sa mga provider na naglalabas ng
thinking token (Claude, GLMT, atbp.) upang hindi na kailangang ulitin ng magkakasunod na turn ang pag-iisip.
- DB layer:
src/lib/db/reasoningCache.ts - Service layer:
open-sse/services/reasoningCache.ts - Para sa semantics ng replay, tingnan ang
docs/routing/REASONING_REPLAY.md.
- DB layer:
- Read Cache — panandaliang response cache na naka-key ayon sa signature at ginagamit upang
pagsamahin ang magkakaparehong retry mula sa mga sirang upstream SDK.
- DB layer:
src/lib/db/readCache.ts - Stats endpoint:
GET /api/cache/stats, dashboard sa/dashboard/cache
- DB layer:
3) Layer ng Persistence
Pangunahing state DB (SQLite):
- Pangunahing imprastraktura:
src/lib/db/core.ts(better-sqlite3, mga migration, WAL) - Pag-access sa DB: direktang i-import ang mga partikular na module ng
src/lib/db/*(inalis na ang lumanglocalDb.tsbarrel) - file:
${DATA_DIR}/storage.sqlite(o$XDG_CONFIG_HOME/omniroute/storage.sqlitekapag nakatakda, kung hindi ay~/.omniroute/storage.sqlite) - mga entity (mga table + KV namespace): providerConnections, providerNodes, modelAliases, combos, apiKeys, settings, pricing, customModels, proxyConfig, ipFilter, thinkingBudget, systemPrompt
Persistence ng paggamit:
- facade:
src/lib/usageDb.ts(mga hinating module sasrc/lib/usage/*) - Mga SQLite table sa
storage.sqlite:usage_history,call_logs,proxy_logs - nananatili ang mga opsyonal na file artifact para sa compatibility/debugging (
${DATA_DIR}/log.txt,${DATA_DIR}/call_logs/,<repo>/logs/...) - inililipat sa SQLite ng mga startup migration ang mga legacy JSON file kapag naroon ang mga ito
Domain State DB (SQLite):
src/lib/db/domainState.ts— mga operasyong CRUD para sa domain state- Mga table (ginagawa sa
src/lib/db/core.ts):domain_fallback_chains,domain_budgets,domain_cost_history,domain_lockout_state,domain_circuit_breakers - Pattern ng write-through cache: ang mga in-memory Map ang awtoritatibo habang runtime; sabayang isinusulat sa SQLite ang mga pagbabago; ibinabalik mula sa DB ang state sa cold start
4) Mga Surface ng Auth + Seguridad
- Auth ng dashboard cookie:
src/proxy.ts,src/app/api/auth/login/route.ts - Pagbuo/pag-verify ng API key:
src/shared/utils/apiKey.ts - Naka-persist ang mga provider secret sa mga entry ng
providerConnections - Suporta sa outbound proxy sa pamamagitan ng
open-sse/utils/proxyFetch.ts(mga env var) atopen-sse/utils/networkProxy.ts(maaaring i-configure kada provider o sa pangkalahatan) - Guard para sa SSRF / outbound URL:
src/shared/network/outboundUrlGuard.ts— bina-block ang mga private/loopback/link-local range para sa lahat ng tawag sa provider - Runtime na validation ng env:
src/lib/env/runtimeEnv.ts— Zod schema para sa lahat ng environment variable, na inilalantad bilang mga error/babala sa startup - Mga sync token:
src/lib/db/syncTokens.ts— mga scoped token para sa mga endpoint sa pag-download ng config bundle; sinusuportahan ng SQLite table nasync_tokens(migration na024_create_sync_tokens.sql) - Auth para sa WebSocket handshake:
src/lib/ws/handshake.ts— vina-validate ang mga kahilingan sa pag-upgrade ng WS sa pamamagitan ng API key o session cookie
5) Cloud Sync
- Pagsisimula ng scheduler:
src/lib/initCloudSync.ts,src/shared/services/initializeCloudSync.ts,src/shared/services/modelSyncScheduler.ts - Pana-panahong task:
src/shared/services/cloudSyncScheduler.ts - Pana-panahong task:
src/shared/services/modelSyncScheduler.ts - Route ng kontrol:
src/app/api/sync/cloud/route.ts
Lifecycle ng Request (/v1/chat/completions)
sequenceDiagram
autonumber
participant Client as CLI/SDK Client
participant Route as /api/v1/chat/completions
participant Chat as src/sse/handlers/chat
participant Core as open-sse/handlers/chatCore
participant Model as Resolver ng Model
participant Auth as Tagapili ng Credential
participant Exec as Executor ng Provider
participant Prov as Upstream Provider
participant Stream as Tagapagsalin ng Stream
participant Usage as usageDb
Client->>Route: POST /v1/chat/completions
Route->>Chat: handleChat(request)
Chat->>Model: i-parse/i-resolve ang model o combo
alt Combo model
Chat->>Chat: ulitin sa mga combo model (handleComboChat)
end
Chat->>Auth: getProviderCredentials(provider)
Auth-->>Chat: aktibong account + mga token/api key
Chat->>Core: handleChatCore(body, modelInfo, credentials)
Core->>Core: tukuyin ang source format
Core->>Core: isalin ang request sa target format
Core->>Exec: execute(provider, transformedBody)
Exec->>Prov: tawag sa upstream API
Prov-->>Exec: tugon na SSE/JSON
Exec-->>Core: tugon + metadata
alt 401/403
Core->>Exec: refreshCredentials()
Exec-->>Core: mga na-update na token
Core->>Exec: subukang muli ang request
end
Core->>Stream: isalin/i-normalize ang stream sa format ng client
Stream-->>Client: mga SSE chunk / tugong JSON
Stream->>Usage: kunin ang paggamit + i-persist ang history/log
Daloy ng Combo + Fallback ng Account
flowchart TD
A[Papasok na string ng modelo] --> B{Pangalan ba ng combo?}
B -- Oo --> C[I-load ang pagkakasunod-sunod ng mga modelo sa combo]
B -- Hindi --> D[Landas ng iisang modelo]
C --> E[Subukan ang modelong N]
E --> F[Tukuyin ang provider/model]
D --> F
F --> G[Piliin ang mga kredensyal ng account]
G --> H{May available na mga kredensyal?}
H -- Wala --> I[Ibalik na hindi available ang provider]
H -- Mayroon --> J[Isagawa ang request]
J --> K{Tagumpay?}
K -- Oo --> L[Ibalik ang response]
K -- Hindi --> M{Error na kwalipikado para sa fallback?}
M -- Hindi --> N[Ibalik ang error]
M -- Oo --> O[Markahan ang account bilang hindi available sa panahon ng cooldown]
O --> P{May iba pang account para sa provider?}
P -- Oo --> G
P -- Wala --> Q{Nasa combo na may kasunod na modelo?}
Q -- Oo --> E
Q -- Hindi --> R[Ibalik na hindi available ang lahat]
Ang mga desisyon sa fallback ay pinapatakbo ng open-sse/services/accountFallback.ts gamit ang mga status code at heuristic ng mensahe ng error. Nagdaragdag ang pagruruta ng combo ng isang karagdagang guard: ang mga 400 na nakasaklaw sa provider, gaya ng mga pagkabigo sa pag-block ng content at pag-validate ng role mula sa upstream, ay itinuturing na mga pagkabigong lokal sa modelo upang maaari pa ring tumakbo ang mga susunod na target ng combo.
Lifecycle ng OAuth Onboarding at Pag-refresh ng Token
sequenceDiagram
autonumber
participant UI as UI ng Dashboard
participant OAuth as /api/oauth/[provider]/[action]
participant ProvAuth as Auth Server ng Provider
participant DB as localDb
participant Test as /api/providers/[id]/test
participant Exec as Executor ng Provider
UI->>OAuth: GET authorize o device-code
OAuth->>ProvAuth: gumawa ng auth/device flow
ProvAuth-->>OAuth: auth URL o payload ng device code
OAuth-->>UI: data ng flow
UI->>OAuth: POST exchange o poll
OAuth->>ProvAuth: token exchange/poll
ProvAuth-->>OAuth: mga access/refresh token
OAuth->>DB: createProviderConnection(oauth data)
OAuth-->>UI: tagumpay + connection id
UI->>Test: POST /api/providers/[id]/test
Test->>Exec: i-validate ang mga kredensyal / opsyonal na pag-refresh
Exec-->>Test: valid o na-refresh na impormasyon ng token
Test->>DB: i-update ang status/mga token/mga error
Test-->>UI: resulta ng validation
Ang pag-refresh habang may live traffic ay isinasagawa sa loob ng open-sse/handlers/chatCore.ts sa pamamagitan ng executor na refreshCredentials().
Lifecycle ng Cloud Sync (Pag-enable / Pag-sync / Pag-disable)
sequenceDiagram
autonumber
participant UI as UI ng Endpoint Page
participant Sync as /api/sync/cloud
participant DB as localDb
participant Cloud as Panlabas na Cloud Sync
participant Claude as ~/.claude/settings.json
UI->>Sync: POST action=enable
Sync->>DB: itakda ang cloudEnabled=true
Sync->>DB: tiyaking may API key
Sync->>Cloud: POST /sync/{machineId} (mga provider/alias/combo/key)
Cloud-->>Sync: resulta ng sync
Sync->>Cloud: GET /{machineId}/v1/verify
Sync-->>UI: naka-enable + status ng verification
UI->>Sync: POST action=sync
Sync->>Cloud: POST /sync/{machineId}
Cloud-->>Sync: remote na data
Sync->>DB: i-update ang mas bagong mga lokal na token/status
Sync-->>UI: na-sync
UI->>Sync: POST action=disable
Sync->>DB: itakda ang cloudEnabled=false
Sync->>Cloud: DELETE /sync/{machineId}
Sync->>Claude: ibalik ang ANTHROPIC_BASE_URL sa lokal (kung kinakailangan)
Sync-->>UI: naka-disable
Ang pana-panahong sync ay tini-trigger ng CloudSyncScheduler kapag naka-enable ang cloud.
Modelo ng Data at Mapa ng Storage
erDiagram
SETTINGS ||--o{ PROVIDER_CONNECTION : controls
PROVIDER_NODE ||--o{ PROVIDER_CONNECTION : backs_compatible_provider
PROVIDER_CONNECTION ||--o{ USAGE_ENTRY : emits_usage
SETTINGS {
boolean cloudEnabled
number stickyRoundRobinLimit
boolean requireLogin
string password_hash
string fallbackStrategy
json rateLimitDefaults
json providerProfiles
}
PROVIDER_CONNECTION {
string id
string provider
string authType
string name
number priority
boolean isActive
string apiKey
string accessToken
string refreshToken
string expiresAt
string testStatus
string lastError
string rateLimitedUntil
json providerSpecificData
}
PROVIDER_NODE {
string id
string type
string name
string prefix
string apiType
string baseUrl
}
MODEL_ALIAS {
string alias
string targetModel
}
COMBO {
string id
string name
string[] models
}
API_KEY {
string id
string name
string key
string machineId
}
USAGE_ENTRY {
string provider
string model
number prompt_tokens
number completion_tokens
string connectionId
string timestamp
}
CUSTOM_MODEL {
string id
string name
string providerId
}
PROXY_CONFIG {
string global
json providers
}
IP_FILTER {
string mode
string[] allowlist
string[] blocklist
}
THINKING_BUDGET {
string mode
number customBudget
string effortLevel
}
SYSTEM_PROMPT {
boolean enabled
string prompt
string position
}
Mga pisikal na file ng storage:
- pangunahing runtime DB:
${DATA_DIR}/storage.sqlite - mga linya ng log ng kahilingan:
${DATA_DIR}/log.txt(artifact para sa compatibility/debugging) - mga archive ng nakaayos na payload ng tawag:
${DATA_DIR}/call_logs/ - mga opsyonal na session ng pag-debug para sa translator/kahilingan:
<repo>/logs/...
Topolohiya ng Deployment
flowchart LR
subgraph LocalHost[Host ng Developer]
CLI[Mga CLI Tool]
Browser[Browser ng Dashboard]
end
subgraph ContainerOrProcess[OmniRoute Runtime]
Next[Next.js Server\nPORT=20128]
Core[SSE Core + Mga Executor]
MainDB[(storage.sqlite)]
UsageDB[(mga talahanayan ng paggamit + mga artifact ng log)]
end
subgraph External[Mga Panlabas na Serbisyo]
Providers[Mga AI Provider]
SyncCloud[Serbisyo ng Cloud Sync]
end
CLI --> Next
Browser --> Next
Next --> Core
Next --> MainDB
Core --> MainDB
Core --> UsageDB
Core --> Providers
Next --> SyncCloud
Pagmamapa ng Module (Kritikal sa Pagpapasya)
Mga Module ng Route at API
src/app/api/v1/*,src/app/api/v1beta/*: mga compatibility APIsrc/app/api/v1/providers/[provider]/*: mga nakalaang route para sa bawat provider (chat, embeddings, mga image)src/app/api/providers*: CRUD, pagpapatunay, at pagsubok ng providersrc/app/api/provider-nodes*: pamamahala ng mga custom na compatible nodesrc/app/api/provider-models: pamamahala ng custom na modelo (CRUD)src/app/api/models/route.ts: API ng katalogo ng modelo (mga alias + custom na modelo)src/app/api/oauth/*: mga daloy ng OAuth/device-codesrc/app/api/keys*: lifecycle ng lokal na API keysrc/app/api/models/alias: pamamahala ng aliassrc/app/api/combos*: pamamahala ng fallback combosrc/app/api/pricing: mga override sa pagpepresyo para sa pagkalkula ng gastossrc/app/api/settings/proxy: configuration ng proxy (GET/PUT/DELETE)src/app/api/settings/proxy/test: pagsubok sa outbound na pagkakakonekta ng proxy (POST)src/app/api/usage/*: mga API ng paggamit at logsrc/app/api/sync/*+src/app/api/cloud/*: cloud sync at mga helper na nakaharap sa cloudsrc/app/api/cli-tools/*: mga lokal na tagasulat/tagasuri ng configuration ng CLIsrc/app/api/settings/ip-filter: IP allowlist/blocklist (GET/PUT)src/app/api/settings/thinking-budget: configuration ng badyet ng thinking token (GET/PUT)src/app/api/settings/system-prompt: pandaigdigang system prompt (GET/PUT)src/app/api/settings/compression: mga pandaigdigang setting ng compression (GET/PUT)src/app/api/compression/*: preview ng compression, metadata ng panuntunan, at mga language packsrc/app/api/context/caveman/config: alias ng mga setting ng Caveman (GET/PUT)src/app/api/context/rtk/*: configuration ng RTK, katalogo ng filter, endpoint ng pagsubok, at pagbawi ng raw na outputsrc/app/api/context/combos*: CRUD ng compression combo at mga pagtatalaga ng routing-combosrc/app/api/context/analytics: alias ng analytics ng compressionsrc/app/api/sessions: listahan ng mga aktibong session (GET)src/app/api/rate-limits: status ng rate limit sa bawat account (GET)src/app/api/sync/tokens: CRUD ng sync token (GET/POST)src/app/api/sync/tokens/[id]: pagkuha/pagtanggal ng sync token (GET/DELETE)src/app/api/sync/bundle: pag-download ng bundle ng configuration (GET, ETag versioning)src/app/api/v1/ws: handler ng WebSocket upgrade para sa mga OpenAI-compatible na WS client
Core ng Routing at Pagpapatupad
src/sse/handlers/chat.ts: pag-parse ng kahilingan, paghawak sa combo, loop ng pagpili ng accountopen-sse/handlers/chatCore.ts: pagsasalin, pag-dispatch sa executor, paghawak sa retry/refresh, pag-set up ng streamopen-sse/executors/*: pag-uugali sa network at format na partikular sa provider
Registry ng Pagsasalin at Mga Converter ng Format
open-sse/translator/index.ts: registry at orkestrasyon ng translator- Mga translator ng request:
open-sse/translator/request/*(9 na module —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) - Mga translator ng response:
open-sse/translator/response/*(11 na module —claude-to-openai,cursor-to-openai,gemini-to-claude,gemini-to-openai,kiro-to-openai,openai-responses,openai-to-antigravity,openai-to-claude,openai-to-gemini,openai-to-gemini-sse,responsesToolItem) - Mga helper:
open-sse/translator/helpers/*(12 module —claudeHelper,geminiHelper,geminiToolsSanitizer,jsonUtil,markdownBoundary,maxTokensHelper,openaiHelper,responsesApiHelper,schemaCoercion,strictSystemHoist,toolCallHelper,toolCallShim) - Mga constant ng format:
open-sse/translator/formats.ts - Bootstrap at registry:
open-sse/translator/bootstrap.ts,open-sse/translator/registry.ts - Mga helper ng format ng larawan:
open-sse/translator/image/
Persistensiya
src/lib/db/*: persistent na config/state at persistensiya ng domain sa SQLitesrc/lib/db/*: direktang i-import ang mga partikular na module — walang barrel (inalis na ang lumang re-export layer nalocalDb.ts)src/lib/usageDb.ts: facade ng history ng paggamit/mga log ng call sa ibabaw ng mga table ng SQLite
Saklaw ng Provider Executor (Strategy Pattern)
Ang bawat provider ay may espesyalisadong executor na nag-e-extend sa BaseExecutor (sa open-sse/executors/base.ts), na nagbibigay ng pagbuo ng URL, paggawa ng header, muling pagsubok gamit ang exponential backoff, mga hook para sa pag-refresh ng credential, at ang orchestration method na execute().
| Executor | (Mga) Provider | Espesyal na Pangangasiwa |
|---|---|---|
DefaultExecutor |
OpenAI, Claude, Gemini, Qwen, OpenRouter, GLM, Kimi, MiniMax, DeepSeek, Groq, xAI, Mistral, Perplexity, Together, Fireworks, Cerebras, Cohere, NVIDIA, atbp. | Dinamikong configuration ng URL/header para sa bawat provider |
AntigravityExecutor |
Google Antigravity | Mga custom na project/session ID, pag-parse ng Retry-After, pagtatago ng 429 |
AzureOpenAIExecutor |
Azure OpenAI | Routing batay sa deployment, pagpapatupad ng query na api-version |
BlackboxWebExecutor |
Blackbox AI (web-mode) | Pag-reverse ng web session na may emulation ng TLS fingerprint |
ClaudeIdentityExecutor |
Claude.ai (CCH path) | Mga pipeline ng constraint + tool remap, paghubog ng fingerprint |
CliProxyApiExecutor |
Mga provider na compatible sa CLIProxyAPI | Custom na authentication at pangangasiwa ng protocol |
CloudflareAiExecutor |
Cloudflare Workers AI | Pag-inject ng account ID, pagsubaybay sa paggamit batay sa Neurons |
CodexExecutor |
OpenAI Codex | Nag-i-inject ng mga tagubilin ng system, ipinipilit ang antas ng reasoning |
ChatGptWebCodexExecutor |
ChatGPT Web (Codex) | Bridge ng Responses API para sa browser session na may pag-pin ng thread/turn |
CommandCodeExecutor |
Command Code | OAuth + pag-rotate ng header sa bawat session |
CursorExecutor |
Cursor IDE | ConnectRPC protocol, Protobuf encoding, pag-sign ng request sa pamamagitan ng checksum |
DevinCliExecutor |
Devin CLI | Pag-bridge ng lifecycle ng Devin task sa pamamagitan ng cloud agent module |
GithubExecutor |
GitHub Copilot | Pag-refresh ng Copilot token, mga header na gumagaya sa VSCode |
GitlabExecutor |
GitLab Duo | GitLab OAuth + routing na nakasaklaw sa proyekto |
GlmExecutor |
Z.AI GLM (kasama ang glmt preset) |
Isinasaalang-alang ang thinking budget, mga constant ng GLMT preset |
GrokWebExecutor |
xAI Grok web | Pag-reverse ng web session, pagpili ng mode (think/standard) |
KieExecutor |
KIE | Custom na pag-isyu ng token na may mga umiikot na session anchor |
KiroExecutor |
AWS CodeWhisperer/Kiro | AWS EventStream binary format → conversion sa SSE |
MuseSparkWebExecutor |
Muse Spark (web) | Pag-reverse ng web session na may pag-bridge ng image message |
NlpCloudExecutor |
NLP Cloud | Hugis ng request body na partikular sa provider |
OpenCodeExecutor |
OpenCode | Setup ng provider na compatible sa AI SDK |
PerplexityWebExecutor |
Perplexity web | Pag-reverse ng web session para sa pagpapatuloy ng chat |
PetalsExecutor |
Petals distributed inference | Desentralisadong swarm routing |
PollinationsExecutor |
Pollinations AI | Hindi kailangan ng API key, mga request na may limitasyon sa rate |
QoderExecutor |
Qoder AI | Suporta sa PAT at OAuth, libreng tier na may maraming modelo |
VertexExecutor |
Google Vertex AI | Authentication gamit ang service account, mga endpoint batay sa rehiyon |
DevinDesktopExecutor |
Devin Desktop | Na-import na API key + Connect-protobuf chat streaming |
Ginagamit ng lahat ng iba pang provider (kabilang ang mga custom na compatible na node) ang DefaultExecutor.
Matrix ng Compatibility ng Provider
Tandaan: Ang matrix sa ibaba ay isang kumakatawang sample ng 351 nakarehistrong provider sa OmniRoute v3.8.0. Para sa opisyal at patuloy na ina-update na listahan, sumangguni sa
docs/reference/PROVIDER_REFERENCE.md(awtomatikong binuo) o sa pinagmumulan ng katotohanan sasrc/shared/constants/providers.ts(bine-validate ng Zod sa pag-load).
| Provider | Format | Auth | Stream | Hindi Stream | Pag-refresh ng Token | API ng Paggamit |
|---|---|---|---|---|---|---|
| Claude | claude | API Key / OAuth | ✅ | ✅ | ✅ | ⚠️ Admin lamang |
| Gemini | gemini | API Key / OAuth | ✅ | ✅ | ✅ | ⚠️ Cloud Console |
| Antigravity | antigravity | OAuth | ✅ | ✅ | ✅ | ✅ Buong quota API |
| OpenAI | openai | API Key | ✅ | ✅ | ❌ | ❌ |
| Codex | openai-responses | OAuth | ✅ sapilitan | ❌ | ✅ | ✅ Mga limitasyon sa rate |
| ChatGPT Web (Codex) | openai-responses | Session ng browser | ✅ sapilitan | ❌ | ❌ | ❌ |
| GitHub Copilot | openai | OAuth + Copilot Token | ✅ | ✅ | ✅ | ✅ Mga snapshot ng quota |
| Cursor | cursor | Custom na checksum | ✅ | ✅ | ❌ | ❌ |
| Kiro | kiro | AWS SSO OIDC | ✅ (EventStream) | ❌ | ✅ | ✅ Mga limitasyon sa paggamit |
| Qoder | openai | OAuth / PAT | ✅ | ✅ | ✅ | ⚠️ Bawat request |
| Kilo Code | openai | OAuth | ✅ | ✅ | ✅ | ❌ |
| Cline | openai | OAuth | ✅ | ✅ | ✅ | ❌ |
| Kimi Coding | openai | OAuth | ✅ | ✅ | ✅ | ❌ |
| OpenRouter | openai | API Key | ✅ | ✅ | ❌ | ❌ |
| GLM/Kimi/MiniMax | claude | API Key | ✅ | ✅ | ❌ | ❌ |
| DeepSeek | openai | API Key | ✅ | ✅ | ❌ | ❌ |
| Groq | openai | API Key | ✅ | ✅ | ❌ | ❌ |
| xAI (Grok) | openai | API Key | ✅ | ✅ | ❌ | ❌ |
| Mistral | openai | API Key | ✅ | ✅ | ❌ | ❌ |
| Perplexity | openai | API Key | ✅ | ✅ | ❌ | ❌ |
| Together AI | openai | API Key | ✅ | ✅ | ❌ | ❌ |
| Fireworks AI | openai | API Key | ✅ | ✅ | ❌ | ❌ |
| Cerebras | openai | API Key | ✅ | ✅ | ❌ | ❌ |
| Cohere | openai | API Key | ✅ | ✅ | ❌ | ❌ |
| NVIDIA NIM | openai | API Key | ✅ | ✅ | ❌ | ❌ |
| Cloudflare AI | openai | API Token + Acct ID | ✅ | ✅ | ❌ | ❌ |
| Pollinations | openai | Wala (walang key) | ✅ | ✅ | ❌ | ❌ |
| Scaleway AI | openai | API Key | ✅ | ✅ | ❌ | ❌ |
| LongCat | openai | API Key | ✅ | ✅ | ❌ | ❌ |
| Ollama Cloud | openai | API Key (opsyonal) | ✅ | ✅ | ❌ | ❌ |
| HuggingFace | openai | API Key | ✅ | ✅ | ❌ | ❌ |
| Nebius | openai | API Key | ✅ | ✅ | ❌ | ❌ |
| SiliconFlow | openai | API Key | ✅ | ✅ | ❌ | ❌ |
| Hyperbolic | openai | API Key | ✅ | ✅ | ❌ | ❌ |
| Vertex AI | gemini | Service Account | ✅ | ✅ | ✅ | ⚠️ Cloud Console |
| Command Code | openai | OAuth | ✅ | ✅ | ✅ | ⚠️ Bawat request |
| Z.AI / GLM | openai | API Key / OAuth | ✅ | ✅ | ❌ | ❌ |
| GLMT (preset) | claude | API Key | ✅ | ✅ | ❌ | ⚠️ Bawat request |
| Kimi Coding | openai | OAuth / API Key | ✅ | ✅ | ✅ | ❌ |
| KIE | openai | API Key | ✅ | ✅ | ❌ | ❌ |
| Devin Desktop | openai | Na-import na API key | ✅ (Connect→SSE) | ✅ | ❌ | ⚠️ Bawat request |
| GitLab Duo | openai | OAuth (GitLab) | ✅ | ✅ | ✅ | ❌ |
| Devin CLI | openai | Lokal na CLI login | ✅ | ✅ | ❌ | ✅ Task API |
| Codex Cloud | openai-responses | OAuth | ✅ | ❌ | ✅ | ✅ Mga limitasyon sa rate |
| Jules | openai | OAuth | ✅ | ✅ | ✅ | ✅ Task API |
| AgentRouter | openai | API Key | ✅ | ✅ | ❌ | ❌ |
| Grok-Web | openai | Cookie ng session | ✅ | ✅ | ❌ | ❌ |
| Perplexity-Web | openai | Cookie ng session | ✅ | ✅ | ❌ | ❌ |
| BlackBox-Web | openai | Cookie ng session + TLS | ✅ | ✅ | ❌ | ❌ |
| Muse-Spark-Web | openai | Cookie ng session | ✅ | ✅ | ❌ | ❌ |
| ModelScope | openai | API Key | ✅ | ✅ | ❌ | ⚠️ Patakaran sa quota |
| BazaarLink | openai | API Key | ✅ | ✅ | ❌ | ❌ |
| Petals | openai | Wala | ✅ | ✅ | ❌ | ❌ |
| Qoder | openai | OAuth / PAT | ✅ | ✅ | ✅ | ⚠️ Bawat request |
| OpenCode (Go/Zen) | openai | OAuth | ✅ | ✅ | ✅ | ❌ |
| CLIProxyAPI | openai | Custom | ✅ | ✅ | ❌ | ❌ |
Saklaw ng Pagsasalin ng Format
Kabilang sa mga natukoy na source format ang:
openaiopenai-responsesclaudegemini
Kabilang sa mga target format ang:
- OpenAI chat/Responses
- Claude
- Gemini/Antigravity envelope
- Kiro
- Cursor
Ginagamit ng mga pagsasalin ang OpenAI bilang hub format — dumaraan sa OpenAI bilang intermediate ang lahat ng conversion:
Source Format → OpenAI (hub) → Target Format
Dinamikong pinipili ang mga pagsasalin batay sa hugis ng source payload at target format ng provider.
Mga karagdagang layer ng pagproseso sa pipeline ng pagsasalin:
- Paglilinis ng tugon — Tinatanggal ang mga hindi karaniwang field mula sa mga tugon na nasa OpenAI format (streaming at non-streaming) upang matiyak ang mahigpit na pagsunod sa SDK
- Normalisasyon ng role — Kino-convert ang
developer→systempara sa mga target na hindi OpenAI; pinagsasama angsystem→userpara sa mga model na hindi tumatanggap sa system role (GLM, ERNIE) - Pagkuha ng think tag — Pina-parse ang mga block na
<think>...</think>mula sa content papunta sa field nareasoning_content - Structured output — Kino-convert ang OpenAI
response_format.json_schemasaresponseMimeType+responseSchemang Gemini
Mga Sinusuportahang API Endpoint
| Endpoint | Format | Handler |
|---|---|---|
POST /v1/chat/completions |
OpenAI Chat | src/sse/handlers/chat.ts |
POST /v1/messages |
Claude Messages | Parehong handler (awtomatikong natutukoy) |
POST /v1/responses |
OpenAI Responses | open-sse/handlers/responsesHandler.ts |
POST /v1/embeddings |
OpenAI Embeddings | open-sse/handlers/embeddings.ts |
GET /v1/embeddings |
Listahan ng model | API route |
POST /v1/images/generations |
OpenAI Images | open-sse/handlers/imageGeneration.ts |
GET /v1/images/generations |
Listahan ng model | API route |
POST /v1/providers/{provider}/chat/completions |
OpenAI Chat | Nakalaan sa bawat provider na may pagpapatunay ng model |
POST /v1/providers/{provider}/embeddings |
OpenAI Embeddings | Nakalaan sa bawat provider na may pagpapatunay ng model |
POST /v1/providers/{provider}/images/generations |
OpenAI Images | Nakalaan sa bawat provider na may pagpapatunay ng model |
POST /v1/messages/count_tokens |
Bilang ng Token ng Claude | API route |
GET /v1/models |
Listahan ng mga Model ng OpenAI | API route (chat + embedding + image + mga custom na model) |
GET /api/models/catalog |
Catalog | Lahat ng model na pinangkat ayon sa provider + uri |
POST /v1beta/models/*:streamGenerateContent |
Native na Gemini | API route |
GET/PUT/DELETE /api/settings/proxy |
Configuration ng Proxy | Configuration ng network proxy |
POST /api/settings/proxy/test |
Connectivity ng Proxy | Endpoint para sa pagsusuri ng kalagayan/connectivity ng proxy |
GET/POST/DELETE /api/provider-models |
Mga Model ng Provider | Metadata ng model ng provider na sumusuporta sa mga available na custom at managed na model |
Handler ng Pag-bypass
Sinasalo ng handler ng pag-bypass (open-sse/utils/bypassHandler.ts) ang mga kilalang "throwaway" na kahilingan mula sa Claude CLI — mga warmup ping, pagkuha ng pamagat, at pagbibilang ng token — at nagbabalik ng pekeng tugon nang hindi kumokonsumo ng mga token ng upstream provider. Nati-trigger lamang ito kapag naglalaman ang User-Agent ng claude-cli.
Pag-log ng Kahilingan at Mga Artifact
Pinananatili lamang ang mas lumang file-based na logger ng kahilingan (open-sse/utils/requestLogger.ts) para sa
compatibility sa mga legacy na sistema. Ginagamit ng kasalukuyang runtime contract ang:
APP_LOG_TO_FILE=truepara sa mga application at audit log na isinusulat sa ilalim ng<repo>/logs/- Mga record ng call log na naka-back sa SQLite sa
call_logs - Mga artifact sa
${DATA_DIR}/call_logs/YYYY-MM-DD/...kapag naka-enable ang pipeline ng call log
Mga Mode ng Pagkabigo at Katatagan
1) Availability ng Account/Provider
- cooldown ng koneksyon sa mga retryable na upstream failure
- fallback ng account bago ibagsak ang kahilingan
- fallback ng combo model kapag naubos na ang kasalukuyang path ng modelo/provider
2) Pag-expire ng Token
- paunang pagsusuri at pag-refresh na may retry para sa mga provider na maaaring i-refresh
- retry sa 401/403 pagkatapos ng pagtatangkang mag-refresh sa core path
3) Kaligtasan ng Stream
- stream controller na may kamalayan sa pagkakadiskonekta
- translation stream na may flush sa dulo ng stream at pangangasiwa sa
[DONE] - fallback sa pagtatantiya ng usage kapag nawawala ang metadata ng usage mula sa provider
4) Pagbaba ng Serbisyo ng Cloud Sync
- Inilalantad ang mga error sa sync ngunit nagpapatuloy ang lokal na runtime
- May logic ang scheduler na may kakayahang mag-retry, ngunit kasalukuyang tumatawag ang pana-panahong execution sa single-attempt sync bilang default
5) Integridad ng Data
- Mga migration ng SQLite schema at mga hook para sa awtomatikong pag-upgrade sa startup
- Compatibility path para sa migration mula sa legacy JSON → SQLite
6) SSRF / Guard ng Outbound URL
- Hinaharang ng
src/shared/network/outboundUrlGuard.tsang lahat ng pribado/loopback/link-local na target URL bago makarating ang mga ito sa mga provider executor - Gumagamit ang mga route para sa pagtuklas at validation ng provider model ng
src/shared/network/safeOutboundFetch.ts, na inilalapat ang guard bago ang bawat outbound na kahilingan - Lumalabas ang mga error ng guard bilang
URL_GUARD_BLOCKEDna may HTTP 422 at nilo-log sa compliance audit trail sa pamamagitan ngproviderAudit.ts
Observability at Mga Signal sa Operasyon
Mga pinagmumulan ng visibility ng runtime:
- mga console log mula sa
src/sse/utils/logger.ts - mga aggregate ng usage kada kahilingan sa SQLite (
usage_history,call_logs,proxy_logs) - detalyadong pagkuha ng payload sa apat na yugto sa SQLite (
request_detail_logs) kapagsettings.detailed_logs_enabled=true - tekstuwal na log ng status ng kahilingan sa
log.txt(opsyonal/compat) - mga opsyonal na application log file sa ilalim ng
logs/kapagAPP_LOG_TO_FILE=true - mga opsyonal na artifact ng kahilingan sa ilalim ng
${DATA_DIR}/call_logs/kapag naka-enable ang pipeline ng call log - mga endpoint ng usage sa dashboard (
/api/usage/*) para sa paggamit ng UI
Nag-iimbak ang detalyadong pagkuha ng payload ng kahilingan ng hanggang apat na yugto ng JSON payload sa bawat na-route na call:
- hilaw na kahilingang natanggap mula sa client
- isinaling kahilingan na aktuwal na ipinadala upstream
- tugon ng provider na muling binuo bilang JSON; ang mga naka-stream na tugon ay kino-compact sa panghuling buod kasama ang metadata ng stream
- panghuling tugon sa client na ibinalik ng OmniRoute; iniimbak ang mga naka-stream na tugon sa parehong compact na anyo ng buod
Mga Hangganang Sensitibo sa Seguridad
- Pinoprotektahan ng JWT secret (
JWT_SECRET) ang pag-verify/pag-sign ng cookie ng session ng dashboard - Dapat tahasang i-configure ang paunang bootstrap ng password (
INITIAL_PASSWORD) para sa provisioning sa unang pagpapatakbo - Pinoprotektahan ng API key HMAC secret (
API_KEY_SECRET) ang format ng nabuong lokal na API key - Ang mga lihim ng provider (mga API key/token) ay pinapanatili sa lokal na DB at dapat protektahan sa antas ng filesystem
- Umaasa ang mga endpoint ng cloud sync sa API key auth + mga semantika ng machine id
Matrix ng Environment at Runtime
Mga environment variable na aktibong ginagamit ng code:
- App/auth:
JWT_SECRET,INITIAL_PASSWORD - Storage:
DATA_DIR - Opsyonal na pag-override sa base ng storage (Linux/macOS kapag hindi nakatakda ang
DATA_DIR):XDG_CONFIG_HOME - Security hashing:
API_KEY_SECRET,MACHINE_ID_SALT - Logging:
APP_LOG_TO_FILE,APP_LOG_RETENTION_DAYS,CALL_LOG_RETENTION_DAYS - Pagbuo ng URL para sa sync/cloud:
NEXT_PUBLIC_BASE_URL,NEXT_PUBLIC_CLOUD_URL - Outbound proxy:
HTTP_PROXY,HTTPS_PROXY,ALL_PROXY,NO_PROXYat mga variant na lowercase - Mga feature flag ng SOCKS5:
ENABLE_SOCKS5_PROXY,NEXT_PUBLIC_ENABLE_SOCKS5_PROXY - Mga helper ng platform/runtime (hindi config na partikular sa app):
APPDATA,NODE_ENV,PORT,HOSTNAME
Mga Kilalang Tala sa Arkitektura
- Magkapareho ang patakaran sa base directory ng
usageDbatlocalDb(DATA_DIR->XDG_CONFIG_HOME/omniroute->~/.omniroute) kasama ang migration ng mga legacy file. - Nagde-delegate ang
/api/v1/route.tssa parehong pinag-isang tagabuo ng catalog na ginagamit ng/api/v1/models(src/app/api/v1/models/catalog.ts) upang maiwasan ang paglihis ng semantika. - Isinusulat ng request logger ang buong mga header/body kapag naka-enable; ituring na sensitibo ang direktoryo ng log.
- Nakasalalay ang gawi ng cloud sa tamang
NEXT_PUBLIC_BASE_URLat pagiging naaabot ng cloud endpoint. - Pino-publish ang direktoryong
open-sse/bilang npm workspace package na@omniroute/open-sse. Ini-import ito ng source code sa pamamagitan ng@omniroute/open-sse/...(nire-resolve ng Next.jstranspilePackages). Ginagamit pa rin ng mga file path sa dokumentong ito ang pangalan ng direktoryongopen-sse/para sa pagkakapare-pareho. - Gumagamit ang mga chart sa dashboard ng Recharts (batay sa SVG) para sa naa-access at interaktibong mga visualization ng analytics (mga bar chart ng paggamit ng modelo, mga talahanayan ng breakdown ng provider na may mga success rate).
- Gumagamit ang mga E2E test ng Playwright (
tests/e2e/), na pinapatakbo sa pamamagitan ngnpm run test:e2e. Gumagamit ang mga unit test ng Node.js test runner (tests/unit/), na pinapatakbo sa pamamagitan ngnpm run test:unit. Ang source code sa ilalim ngsrc/ay TypeScript (.ts/.tsx); nananatiling JavaScript (.js) ang workspace naopen-sse/. - Nakaayos ang pahina ng mga setting sa 7 tab: General, Appearance, AI, Security, Routing, Resilience, Advanced. Kino-configure lamang ng pahinang Resilience ang request queue, connection cooldown, provider breaker, at gawi ng wait-for-cooldown; ipinapakita sa pahinang Health ang live na runtime state ng breaker.
- Nahahati sa dalawang layer ang estratehiyang Context Relay (
context-relay): nagpapasya angcombo.tskung dapat bumuo ng handoff, at ini-inject ngchat.tsang handoff pagkatapos ng paglutas ng account. Nasa SQLite table nacontext_handoffsang data ng handoff. Sinadya ang paghahating ito dahil angchat.tslamang ang nakaaalam kung nagbago ang aktuwal na account. - Komprehensibo na ngayon ang pagpapatupad ng proxy: nire-resolve ng
tokenHealthCheck.tsang proxy para sa bawat koneksyon, ginagamit ng/api/providers/validateangrunWithProxyContext, at ginagamit ngproxyFetch.tsangundici.fetch()upang mapanatili ang compatibility ng dispatcher sa Node 22. - Pagtukoy sa patakaran ng Node.js runtime: ibinabalik ng
/api/settings/require-loginang mga field nanodeVersionatnodeCompatible. Nagre-render ang pahina ng pag-login ng warning banner kapag nasa labas ng mga sinusuportahang secure na linya ng Node.js ang runtime.
Checklist ng Beripikasyon sa Operasyon
- Bumuo mula sa source:
npm run build - Bumuo ng Docker image:
docker build -t omniroute . - Simulan ang serbisyo at beripikahin:
GET /api/settingsGET /api/v1/models- Ang base URL na target ng CLI ay dapat
http://<host>:20128/v1kapagPORT=20128