# OmniRoute Architecture (Magyar) 🌐 **Languages:** 🇺🇸 [English](../../../../architecture/ARCHITECTURE.md) · 🇪🇹 [am](../../../am/docs/architecture/ARCHITECTURE.md) · 🇸🇦 [ar](../../../ar/docs/architecture/ARCHITECTURE.md) · 🇦🇿 [az](../../../az/docs/architecture/ARCHITECTURE.md) · 🇧🇬 [bg](../../../bg/docs/architecture/ARCHITECTURE.md) · 🇧🇩 [bn](../../../bn/docs/architecture/ARCHITECTURE.md) · 🇧🇦 [bs](../../../bs/docs/architecture/ARCHITECTURE.md) · 🇨🇿 [cs](../../../cs/docs/architecture/ARCHITECTURE.md) · 🇩🇰 [da](../../../da/docs/architecture/ARCHITECTURE.md) · 🇩🇪 [de](../../../de/docs/architecture/ARCHITECTURE.md) · 🇬🇷 [el](../../../el/docs/architecture/ARCHITECTURE.md) · 🇪🇸 [es](../../../es/docs/architecture/ARCHITECTURE.md) · 🇪🇪 [et](../../../et/docs/architecture/ARCHITECTURE.md) · 🇮🇷 [fa](../../../fa/docs/architecture/ARCHITECTURE.md) · 🇫🇮 [fi](../../../fi/docs/architecture/ARCHITECTURE.md) · 🇫🇷 [fr](../../../fr/docs/architecture/ARCHITECTURE.md) · 🇮🇪 [ga](../../../ga/docs/architecture/ARCHITECTURE.md) · 🇮🇳 [gu](../../../gu/docs/architecture/ARCHITECTURE.md) · 🇳🇬 [ha](../../../ha/docs/architecture/ARCHITECTURE.md) · 🇮🇱 [he](../../../he/docs/architecture/ARCHITECTURE.md) · 🇮🇳 [hi](../../../hi/docs/architecture/ARCHITECTURE.md) · 🇭🇷 [hr](../../../hr/docs/architecture/ARCHITECTURE.md) · 🇦🇲 [hy](../../../hy/docs/architecture/ARCHITECTURE.md) · 🇮🇩 [id](../../../id/docs/architecture/ARCHITECTURE.md) · 🇳🇬 [ig](../../../ig/docs/architecture/ARCHITECTURE.md) · 🇮🇹 [it](../../../it/docs/architecture/ARCHITECTURE.md) · 🇯🇵 [ja](../../../ja/docs/architecture/ARCHITECTURE.md) · 🇬🇪 [ka](../../../ka/docs/architecture/ARCHITECTURE.md) · 🇰🇭 [km](../../../km/docs/architecture/ARCHITECTURE.md) · 🇮🇳 [kn](../../../kn/docs/architecture/ARCHITECTURE.md) · 🇰🇷 [ko](../../../ko/docs/architecture/ARCHITECTURE.md) · 🇱🇹 [lt](../../../lt/docs/architecture/ARCHITECTURE.md) · 🇱🇻 [lv](../../../lv/docs/architecture/ARCHITECTURE.md) · 🇮🇳 [ml](../../../ml/docs/architecture/ARCHITECTURE.md) · 🇮🇳 [mr](../../../mr/docs/architecture/ARCHITECTURE.md) · 🇲🇾 [ms](../../../ms/docs/architecture/ARCHITECTURE.md) · 🇲🇹 [mt](../../../mt/docs/architecture/ARCHITECTURE.md) · 🇲🇲 [my](../../../my/docs/architecture/ARCHITECTURE.md) · 🇳🇵 [ne](../../../ne/docs/architecture/ARCHITECTURE.md) · 🇳🇱 [nl](../../../nl/docs/architecture/ARCHITECTURE.md) · 🇳🇴 [no](../../../no/docs/architecture/ARCHITECTURE.md) · 🇮🇳 [or](../../../or/docs/architecture/ARCHITECTURE.md) · 🇮🇳 [pa](../../../pa/docs/architecture/ARCHITECTURE.md) · 🇵🇭 [phi](../../../phi/docs/architecture/ARCHITECTURE.md) · 🇵🇱 [pl](../../../pl/docs/architecture/ARCHITECTURE.md) · 🇵🇹 [pt](../../../pt/docs/architecture/ARCHITECTURE.md) · 🇧🇷 [pt-BR](../../../pt-BR/docs/architecture/ARCHITECTURE.md) · 🇷🇴 [ro](../../../ro/docs/architecture/ARCHITECTURE.md) · 🇷🇺 [ru](../../../ru/docs/architecture/ARCHITECTURE.md) · 🇱🇰 [si](../../../si/docs/architecture/ARCHITECTURE.md) · 🇸🇰 [sk](../../../sk/docs/architecture/ARCHITECTURE.md) · 🇸🇮 [sl](../../../sl/docs/architecture/ARCHITECTURE.md) · 🇷🇸 [sr](../../../sr/docs/architecture/ARCHITECTURE.md) · 🇸🇪 [sv](../../../sv/docs/architecture/ARCHITECTURE.md) · 🇰🇪 [sw](../../../sw/docs/architecture/ARCHITECTURE.md) · 🇮🇳 [ta](../../../ta/docs/architecture/ARCHITECTURE.md) · 🇮🇳 [te](../../../te/docs/architecture/ARCHITECTURE.md) · 🇹🇭 [th](../../../th/docs/architecture/ARCHITECTURE.md) · 🇹🇷 [tr](../../../tr/docs/architecture/ARCHITECTURE.md) · 🇺🇦 [uk-UA](../../../uk-UA/docs/architecture/ARCHITECTURE.md) · 🇵🇰 [ur](../../../ur/docs/architecture/ARCHITECTURE.md) · 🇺🇿 [uz](../../../uz/docs/architecture/ARCHITECTURE.md) · 🇻🇳 [vi](../../../vi/docs/architecture/ARCHITECTURE.md) · 🇳🇬 [yo](../../../yo/docs/architecture/ARCHITECTURE.md) · 🇨🇳 [zh-CN](../../../zh-CN/docs/architecture/ARCHITECTURE.md) · 🇹🇼 [zh-TW](../../../zh-TW/docs/architecture/ARCHITECTURE.md) --- 🌐 **Languages:** 🇺🇸 [English](../../../../architecture/ARCHITECTURE.md) · 🇪🇹 [am](../../../am/docs/architecture/ARCHITECTURE.md) · 🇸🇦 [ar](../../../ar/docs/architecture/ARCHITECTURE.md) · 🇦🇿 [az](../../../az/docs/architecture/ARCHITECTURE.md) · 🇧🇬 [bg](../../../bg/docs/architecture/ARCHITECTURE.md) · 🇧🇩 [bn](../../../bn/docs/architecture/ARCHITECTURE.md) · 🇧🇦 [bs](../../../bs/docs/architecture/ARCHITECTURE.md) · 🇨🇿 [cs](../../../cs/docs/architecture/ARCHITECTURE.md) · 🇩🇰 [da](../../../da/docs/architecture/ARCHITECTURE.md) · 🇩🇪 [de](../../../de/docs/architecture/ARCHITECTURE.md) · 🇬🇷 [el](../../../el/docs/architecture/ARCHITECTURE.md) · 🇪🇸 [es](../../../es/docs/architecture/ARCHITECTURE.md) · 🇪🇪 [et](../../../et/docs/architecture/ARCHITECTURE.md) · 🇮🇷 [fa](../../../fa/docs/architecture/ARCHITECTURE.md) · 🇫🇮 [fi](../../../fi/docs/architecture/ARCHITECTURE.md) · 🇫🇷 [fr](../../../fr/docs/architecture/ARCHITECTURE.md) · 🇮🇪 [ga](../../../ga/docs/architecture/ARCHITECTURE.md) · 🇮🇳 [gu](../../../gu/docs/architecture/ARCHITECTURE.md) · 🇳🇬 [ha](../../../ha/docs/architecture/ARCHITECTURE.md) · 🇮🇱 [he](../../../he/docs/architecture/ARCHITECTURE.md) · 🇮🇳 [hi](../../../hi/docs/architecture/ARCHITECTURE.md) · 🇭🇷 [hr](../../../hr/docs/architecture/ARCHITECTURE.md) · 🇦🇲 [hy](../../../hy/docs/architecture/ARCHITECTURE.md) · 🇮🇩 [id](../../../id/docs/architecture/ARCHITECTURE.md) · 🇳🇬 [ig](../../../ig/docs/architecture/ARCHITECTURE.md) · 🇮🇹 [it](../../../it/docs/architecture/ARCHITECTURE.md) · 🇯🇵 [ja](../../../ja/docs/architecture/ARCHITECTURE.md) · 🇬🇪 [ka](../../../ka/docs/architecture/ARCHITECTURE.md) · 🇰🇭 [km](../../../km/docs/architecture/ARCHITECTURE.md) · 🇮🇳 [kn](../../../kn/docs/architecture/ARCHITECTURE.md) · 🇰🇷 [ko](../../../ko/docs/architecture/ARCHITECTURE.md) · 🇱🇹 [lt](../../../lt/docs/architecture/ARCHITECTURE.md) · 🇱🇻 [lv](../../../lv/docs/architecture/ARCHITECTURE.md) · 🇮🇳 [ml](../../../ml/docs/architecture/ARCHITECTURE.md) · 🇮🇳 [mr](../../../mr/docs/architecture/ARCHITECTURE.md) · 🇲🇾 [ms](../../../ms/docs/architecture/ARCHITECTURE.md) · 🇲🇹 [mt](../../../mt/docs/architecture/ARCHITECTURE.md) · 🇲🇲 [my](../../../my/docs/architecture/ARCHITECTURE.md) · 🇳🇵 [ne](../../../ne/docs/architecture/ARCHITECTURE.md) · 🇳🇱 [nl](../../../nl/docs/architecture/ARCHITECTURE.md) · 🇳🇴 [no](../../../no/docs/architecture/ARCHITECTURE.md) · 🇮🇳 [or](../../../or/docs/architecture/ARCHITECTURE.md) · 🇮🇳 [pa](../../../pa/docs/architecture/ARCHITECTURE.md) · 🇵🇭 [phi](../../../phi/docs/architecture/ARCHITECTURE.md) · 🇵🇱 [pl](../../../pl/docs/architecture/ARCHITECTURE.md) · 🇵🇹 [pt](../../../pt/docs/architecture/ARCHITECTURE.md) · 🇧🇷 [pt-BR](../../../pt-BR/docs/architecture/ARCHITECTURE.md) · 🇷🇴 [ro](../../../ro/docs/architecture/ARCHITECTURE.md) · 🇷🇺 [ru](../../../ru/docs/architecture/ARCHITECTURE.md) · 🇱🇰 [si](../../../si/docs/architecture/ARCHITECTURE.md) · 🇸🇰 [sk](../../../sk/docs/architecture/ARCHITECTURE.md) · 🇸🇮 [sl](../../../sl/docs/architecture/ARCHITECTURE.md) · 🇷🇸 [sr](../../../sr/docs/architecture/ARCHITECTURE.md) · 🇸🇪 [sv](../../../sv/docs/architecture/ARCHITECTURE.md) · 🇰🇪 [sw](../../../sw/docs/architecture/ARCHITECTURE.md) · 🇮🇳 [ta](../../../ta/docs/architecture/ARCHITECTURE.md) · 🇮🇳 [te](../../../te/docs/architecture/ARCHITECTURE.md) · 🇹🇭 [th](../../../th/docs/architecture/ARCHITECTURE.md) · 🇹🇷 [tr](../../../tr/docs/architecture/ARCHITECTURE.md) · 🇺🇦 [uk-UA](../../../uk-UA/docs/architecture/ARCHITECTURE.md) · 🇵🇰 [ur](../../../ur/docs/architecture/ARCHITECTURE.md) · 🇺🇿 [uz](../../../uz/docs/architecture/ARCHITECTURE.md) · 🇻🇳 [vi](../../../vi/docs/architecture/ARCHITECTURE.md) · 🇳🇬 [yo](../../../yo/docs/architecture/ARCHITECTURE.md) · 🇨🇳 [zh-CN](../../../zh-CN/docs/architecture/ARCHITECTURE.md) · 🇹🇼 [zh-TW](../../../zh-TW/docs/architecture/ARCHITECTURE.md) _Utolsó frissítés: 2026-06-28_ ## Vezetői összefoglaló OmniRoute egy helyi AI útválasztási átjáró és műszerfal, amely Next.js re épül. Egyetlen OpenAI-kompatibilis végpontot (`/v1/*`) biztosít, és a forgalmat több upstream szolgáltató között irányítja át fordítással, tartalékkal, tokenfrissítéssel és használat követéssel. Alapvető képességek: - OpenAI-kompatibilis API felület CLI/tools (381 szolgáltató, 159 végrehajtó modul) - Request/response fordítás a szolgáltatói formátumok között - Modell kombinált tartalék (több modell sorozat) - Strukturált kombinált lépések (`provider + model + connection`) `compositeTiers` futásidejű sorrendjével - Fiókszintű tartalék (szolgáltatónként több fiók) - Kvóta előzetes ellenőrzése és kvóta-tudatos P2C -fiók kiválasztása a fő csevegési útvonalon - OAuth + API-kulcs szolgáltató kapcsolatkezelés (27 OAuth szolgáltató modul) - Generáció beágyazása `/v1/embeddings` keresztül (18 szolgáltató) - Képgenerálás `/v1/images/generations` keresztül (10 + szolgáltató, 20 + modell) - Hang átírása `/v1/audio/transcriptions` keresztül (18 szolgáltató) - Szövegfelolvasó `/v1/audio/speech` keresztül (24 beépített szolgáltató) - Videó generálása `/v1/videos/generations` segítségével (ComfyUI + SD WebUI) - Zenegenerálás `/v1/music/generations` keresztül (ComfyUI) - Internetes keresés `/v1/search` keresztül (20 szolgáltató) - Moderálás `/v1/moderations` keresztül - Újrasorolás `/v1/rerank` keresztül - Gondoljon a címkeelemzésre (`...`) az érvelési modellekhez - Válasz fertőtlenítés a szigorú OpenAI SDK kompatibilitás érdekében - Szerepkör normalizálás (fejlesztői → rendszer, rendszer → felhasználó) a szolgáltatók közötti kompatibilitás érdekében - Strukturált kimenet átalakítás (json_schema → Gemini responseSchema) - Helyi megmaradás a szolgáltatók, kulcsok, álnevek, kombinációk, beállítások, árképzés számára (122 DB modul) - Usage/cost követés és kérésnaplózás - Opcionális felhőszinkronizálás multi-device/state szinkronizáláshoz - IP allowlist/blocklist API hozzáférés-vezérléshez - Gondolkodó költségvetés-menedzsment (passthrough/auto/custom/adaptive) - Globális rendszer azonnali befecskendezése - Munkamenet-követés és ujjlenyomatvétel - Fiókonként továbbfejlesztett díjkorlátozás szolgáltató-specifikus profilokkal - Megszakító minta a szolgáltatói rugalmasság érdekében - Mennydörgés elleni állományvédelem mutex zárral - Aláírás-alapú kérés deduplikációs gyorsítótár - Domain réteg: költségszabályok, tartalék házirend, kizárási szabályzat - Context Relay: munkamenet-átadási összefoglalók a fiókrotáció folytonosságához - Tartomány állapotának fennmaradása (SQLite átírási gyorsítótár tartalékok, költségvetések, zárolások, árammegszakítók számára) - Házirend motor a kérelmek központosított kiértékeléséhez (lockout → budget → backback) - Telemetria kérése p50/p95/p99 késleltetési összesítéssel - Kombinált céltelemetria és történelmi kombinált célállapot `combo_execution_key` / `combo_step_id` segítségével - Korreláció ID (X-Request-Id) a végpontok közötti nyomkövetéshez - Megfelelőségi audit naplózás API kulcsonkénti leiratkozással - Eval keretrendszer LLM minőségbiztosításhoz - Egészségügyi műszerfal valós idejű szolgáltatói megszakító állapottal - MCP szerver (110 eszköz) 3 átvitellel (stdio/SSE/Streamable HTTP) - A2A szerver (JSON-RPC 2.0 + SSE) készségekkel és feladatok életciklusával - Memóriarendszer (kivonás, injekció, előhívás, összegzés) - Skills rendszer (nyilvántartó, végrehajtó, homokozó, beépített készségek) - MITM proxy tanúsítványkezeléssel és DNS kezeléssel - Azonnali befecskendezésvédő köztes szoftver - Gyors tömörítési folyamat Cavemannel, RTK, halmozott folyamatokkal, tömörítési kombókkal, nyelvi csomagokkal és elemzésekkel - ACP (Agent Communication Protocol) nyilvántartás - Moduláris OAuth szolgáltatók (22 egyedi modul a `src/lib/oauth/providers/` alatt) - Uninstall/full-uninstall szkriptek - OAuth környezetvédelmi javítási akció - WebSocket híd OpenAI-kompatibilis WS kliensekhez (`/v1/ws`) - Szinkron tokenkezelés (issue/revoke, ETag-verziójú konfigurációs csomag letöltése) - GLM Thinking (`glmt`) első osztályú szolgáltató előre beállított - Hibrid token számlálás (szolgáltató oldali `/messages/count_tokens` becslési tartalékkal) - Modellalias automatikus vetés (30 + proxy dialektusok közötti normalizálás indításkor) - Biztonságos kimenő letöltés SSRF védelemmel, privát URL blokkolással és konfigurálható újrapróbálkozással - Lehűlés-tudatos csevegési próbálkozások konfigurálható `requestRetry` és `maxRetryIntervalSec` segítségével - Futási környezet ellenőrzése Zod val indításkor - Megfelelőségi audit v2 oldalszámozással, szolgáltatói CRUD eseményekkel és SSRF által blokkolt érvényesítési naplózással Elsődleges futásidejű modell: - A Next.js alkalmazásútvonalai `src/app/api/*` alatt mind a műszerfali APIs, mind a kompatibilitási APIs megvalósítják - A `src/sse/*` + `open-sse/*` megosztott SSE/routing magja kezeli a szolgáltató végrehajtását, fordítását, adatfolyamát, visszaállítását és használatát ## Referenciadiagramok A v3.8.0 platform kanonikus, verziókövetett Mermaid-forrásai a [`docs/diagrams/`](../diagrams/README.md) könyvtárban találhatók. A tájékozódás megkönnyítésére kettőt alább is bemutatunk; a többi a saját szakterületéhez tartozó útmutatóból érhető el. ![Kérésfeldolgozási folyamat (/v1/chat/completions)](../diagrams/exported/request-pipeline.svg) > Forrás: [diagrams/request-pipeline.mmd](../diagrams/request-pipeline.mmd) ![Háromrétegű rezilienciamodell](../diagrams/exported/resilience-3layers.svg) > Forrás: [diagrams/resilience-3layers.mmd](../diagrams/resilience-3layers.mmd) — hivatkozás található rá továbbá a > [RESILIENCE_GUIDE.md](./RESILIENCE_GUIDE.md) fájlban és a `CLAUDE.md` rezilienciával kapcsolatos referenciájában. ## Hatókör és korlátok ### A hatókör része - Helyi átjáró futtatókörnyezete - Az irányítópult felügyeleti API-jai - Szolgáltatói hitelesítés és tokenfrissítés - Kérések átalakítása és SSE-adatfolyamok továbbítása - Helyi állapot és használati adatok tartós tárolása - Opcionális felhőszinkronizáció vezénylése ### Nem része a hatókörnek - A `NEXT_PUBLIC_CLOUD_URL` mögötti felhőszolgáltatás megvalósítása - A helyi folyamaton kívüli szolgáltatói SLA/vezérlősík - Maguk a külső CLI-binárisok (Claude CLI, Codex CLI stb.) ## Irányítópult-felület (jelenlegi) Fő oldalak a `src/app/(dashboard)/dashboard/` alatt: - `/dashboard` — gyors kezdés és szolgáltatói áttekintés - `/dashboard/endpoint` — végpontproxy, valamint MCP-, A2A- és API-végpontfülek - `/dashboard/providers` — szolgáltatói kapcsolatok és hitelesítő adatok - `/dashboard/combos` — kombinációs stratégiák, sablonok, lépésalapú összeállító, modellútválasztási szabályok és kézzel beállított, tartós sorrend - `/dashboard/auto-combo` — Auto Combo Engine: pontozási súlyok, módcsomagok, virtuális gyári előbeállítások és telemetria - `/dashboard/costs` — költségösszesítés és árképzési áttekinthetőség - `/dashboard/analytics` — használati analitika, kiértékelések és a kombinációs célok állapota - `/dashboard/limits` — kvóta- és sebességkorlátozási vezérlők - `/dashboard/cli-tools` — CLI-bevezetés, futtatókörnyezet-észlelés és konfigurációgenerálás - `/dashboard/agents` — észlelt ACP-ügynökök és egyéni ügynökök regisztrációja - `/dashboard/cloud-agents` — felhőben futtatott ügynökfeladatok (Codex Cloud, Devin, Jules) és a feladatok életciklusa - `/dashboard/skills` — A2A-képességjegyzék, homokozókörnyezetben történő végrehajtás és beépített képességkatalógus - `/dashboard/memory` — tartós társalgási memória vizsgálata és visszakeresése - `/dashboard/webhooks` — kimenő webhook-előfizetések, titokkulcs-rotáció és újrapróbálkozási statisztikák - `/dashboard/batch` — kötegelt feladatok beküldése és előrehaladása - `/dashboard/cache` — átengedéses és következtetési gyorsítótár statisztikái, valamint kiürítési vezérlők - `/dashboard/playground` — interaktív csevegési tesztkörnyezet bármely konfigurált kombinációval vagy modellel - `/dashboard/changelog` — alkalmazáson belüli változásnapló-megjelenítő (a `CHANGELOG.md` fájlt rendereli) - `/dashboard/system` — futtatókörnyezeti diagnosztika, verzióinformációk és környezet-ellenőrzési felület - `/dashboard/onboarding` — első futtatási beállítóvarázsló új telepítésekhez - `/dashboard/media` — kép-, videó- és zenetesztkörnyezet - `/dashboard/search-tools` — keresési szolgáltatók tesztelése és előzmények - `/dashboard/health` — rendelkezésre állás, megszakítók, sebességkorlátok és kvótafigyelt munkamenetek - `/dashboard/logs` — kérés-, proxy-, audit- és konzolnaplók - `/dashboard/settings` — rendszerbeállítási fülek (általános, útválasztás, kombinációs alapértelmezések stb.) - `/dashboard/context/caveman` — Caveman tömörítési szabályok, nyelvi csomagok, előnézet és kimeneti mód - `/dashboard/context/rtk` — RTK parancskimeneti szűrők, előnézet és futásidejű biztonsági beállítások - `/dashboard/context/combos` — útválasztási kombinációkhoz rendelt, elnevezett tömörítési folyamatláncok - `/dashboard/translator` — fordítóvizsgálat és kérésformátum-konverziós előnézet - `/dashboard/audit` — megfelelőségi auditnaplók lapozható böngészője strukturált metaadatokkal - `/dashboard/usage` — kérésenkénti használati böngésző a `usage_history` adataihoz kapcsolva - `/dashboard/compression` — tömörítési analitika, statisztikák és folyamatlánc-hozzárendelés - `/dashboard/api-manager` — API-kulcsok életciklusa és modellengedélyek Felhasználói felületi réteg: minden oldal egyetlen kereten belül jelenik meg — `src/app/(dashboard)/layout.tsx` → `src/shared/components/layouts/DashboardLayout.tsx` → `DashboardShell.tsx` (a készlet `SidebarProvider`/`SidebarInset` elemei, valamint az OmniRoute `Sidebar.tsx` és `Header.tsx` fájljai). Az oldalak az építőelemeiket a `@/shared/components` modulból (a `packages/ui-kit` alatt szállított Keak CI UI Kit adapterei) vagy a készlet komponens-alútvonalairól (`@omniroute/ui-kit/table`, `…/page-header`) importálják, az ikonokat pedig az `` elemen keresztül (`ICON_MAP` → Lucide). A téma (alapértelmezés szerint `system`, világos/sötét) és a tokenek a készletből származnak a `src/app/globals.css` fájlban található hídon keresztül. Részletek: `docs/architecture/DESIGN_SYSTEM.md`. ## Magas szintű rendszerkörnyezet ```mermaid flowchart LR subgraph Clients[Fejlesztői kliensek] C1[Claude Code] C2[Codex CLI] C3[OpenClaw / Droid / Cline / Continue / Roo] C4[Egyedi OpenAI-kompatibilis kliensek] BROWSER[Böngészőalapú irányítópult] end subgraph Router[OmniRoute helyi folyamat] API[V1 kompatibilitási API\n/v1/*] DASH[Irányítópult + felügyeleti API\n/api/*] CORE[SSE + fordítási mag\nopen-sse + src/sse] DB[(storage.sqlite)] UDB[(használati táblák + naplóösszetevők)] end subgraph Upstreams[Forrásoldali szolgáltatók] P1[OAuth-szolgáltatók\nClaude/Codex/Gemini/Qoder/GitHub/Kiro/Cursor/Antigravity] P2[API-kulcsos szolgáltatók\nOpenAI/Anthropic/OpenRouter/GLM/Kimi/MiniMax\nDeepSeek/Groq/xAI/Mistral/Perplexity\nTogether/Fireworks/Cerebras/Cohere/NVIDIA] P3[Kompatibilis csomópontok\nOpenAI-kompatibilis / Anthropic-kompatibilis] end subgraph Cloud[Opcionális felhőszinkronizálás] CLOUD[Felhőszinkronizálási végpont\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 ``` ## Alapvető futásidejű összetevők ## 1) API- és útválasztási réteg (Next.js alkalmazásútvonalak) Fő könyvtárak: - `src/app/api/v1/*` és `src/app/api/v1beta/*` a kompatibilitási API-khoz - `src/app/api/*` a felügyeleti és konfigurációs API-khoz - A `next.config.mjs` fájlban található Next-átírások a `/v1/*` útvonalakat az `/api/v1/*` útvonalakra képezik le Fontos kompatibilitási útvonalak: - `src/app/api/v1/chat/completions/route.ts` - `src/app/api/v1/messages/route.ts` - `src/app/api/v1/responses/route.ts` - `src/app/api/v1/models/route.ts` — tartalmazza a `custom: true` értékkel rendelkező egyedi modelleket - `src/app/api/v1/embeddings/route.ts` — embeddingek generálása (6 szolgáltató) - `src/app/api/v1/images/generations/route.ts` — képgenerálás (több mint 4 szolgáltató, beleértve az Antigravity/Nebius szolgáltatókat) - `src/app/api/v1/messages/count_tokens/route.ts` - `src/app/api/v1/providers/[provider]/chat/completions/route.ts` — szolgáltatónként elkülönített csevegési végpont - `src/app/api/v1/providers/[provider]/embeddings/route.ts` — szolgáltatónként elkülönített embeddingvégpont - `src/app/api/v1/providers/[provider]/images/generations/route.ts` — szolgáltatónként elkülönített képgenerálási végpont - `src/app/api/v1beta/models/route.ts` - `src/app/api/v1beta/models/[...path]/route.ts` Felügyeleti területek: - Hitelesítés/beállítások: `src/app/api/auth/*`, `src/app/api/settings/*` - Szolgáltatók/kapcsolatok: `src/app/api/providers*` - Szolgáltatói csomópontok: `src/app/api/provider-nodes*` - Egyedi modellek: `src/app/api/provider-models` (GET/POST/DELETE) - Modellkatalógus: `src/app/api/models/route.ts` (GET) - Proxykonfiguráció: `src/app/api/settings/proxy` (GET/PUT/DELETE) + `src/app/api/settings/proxy/test` (POST) - OAuth: `src/app/api/oauth/*` - Kulcsok/álnevek/kombinációk/árképzés: `src/app/api/keys*`, `src/app/api/models/alias`, `src/app/api/combos*`, `src/app/api/pricing` - Használat: `src/app/api/usage/*` - Szinkronizálás/felhő: `src/app/api/sync/*`, `src/app/api/cloud/*` - CLI-eszközök segédfunkciói: `src/app/api/cli-tools/*` - IP-szűrő: `src/app/api/settings/ip-filter` (GET/PUT) - Gondolkodási keret: `src/app/api/settings/thinking-budget` (GET/PUT) - Rendszerüzenet: `src/app/api/settings/system-prompt` (GET/PUT) - Tömörítés: `src/app/api/settings/compression`, `src/app/api/compression/*`, valamint `src/app/api/context/*` - Munkamenetek: `src/app/api/sessions` (GET) - Sebességkorlátok: `src/app/api/rate-limits` (GET) - Hibatűrés: `src/app/api/resilience` (GET/PATCH) — kérési várólista, kapcsolat-visszahűtés, szolgáltatói megszakító és visszahűtésre várási konfiguráció - Hibatűrés alaphelyzetbe állítása: `src/app/api/resilience/reset` (POST) — a szolgáltatói megszakítók alaphelyzetbe állítása - Gyorsítótár-statisztikák: `src/app/api/cache/stats` (GET/DELETE) - Telemetria: `src/app/api/telemetry/summary` (GET) - Költségkeret: `src/app/api/usage/budget` (GET/POST) - Tartalék láncok: `src/app/api/fallback/chains` (GET/POST/DELETE) - Megfelelőségi audit: `src/app/api/compliance/audit-log` (GET, lapozással + strukturált metaadatokkal) - Kiértékelések: `src/app/api/evals` (GET/POST), `src/app/api/evals/[suiteId]` (GET) - Szabályzatok: `src/app/api/policies` (GET/POST) - Szinkronizálási tokenek: `src/app/api/sync/tokens` (GET/POST), `src/app/api/sync/tokens/[id]` (GET/DELETE) - Konfigurációs csomag: `src/app/api/sync/bundle` (GET, a beállításokról/szolgáltatókról/kombinációkról/kulcsokról készült, ETag-verziózott pillanatkép) - WebSocket: `src/app/api/v1/ws/route.ts` — Upgrade-kezelő OpenAI-kompatibilis WS-kliensekhez ## 2) SSE + fordítási mag A fő folyamat moduljai: - Belépési pont: `src/sse/handlers/chat.ts` - Alapvető vezérlés: `open-sse/handlers/chatCore.ts` - Szolgáltatói végrehajtási adapterek: `open-sse/executors/*` - Formátumfelismerés/szolgáltatói konfiguráció: `open-sse/services/provider.ts` - Modell feldolgozása/feloldása: `src/sse/services/model.ts`, `open-sse/services/model.ts` - Fiók-visszaállási logika: `open-sse/services/accountFallback.ts` - Fordítási nyilvántartás: `open-sse/translator/index.ts` - Adatfolyam-átalakítások: `open-sse/utils/stream.ts`, `open-sse/utils/streamHandler.ts` - Használati adatok kinyerése/normalizálása: `open-sse/utils/usageTracking.ts` - Think-címke elemzője: `open-sse/utils/thinkTagParser.ts` - Beágyazáskezelő: `open-sse/handlers/embeddings.ts` - Beágyazási szolgáltatók nyilvántartása: `open-sse/config/embeddingRegistry.ts` - Képgenerálási kezelő: `open-sse/handlers/imageGeneration.ts` - Képszolgáltatók nyilvántartása: `open-sse/config/imageRegistry.ts` - Válaszok megtisztítása: `open-sse/handlers/responseSanitizer.ts` - Szerepkörök normalizálása: `open-sse/services/roleNormalizer.ts` Szolgáltatások (üzleti logika): - Fiókkiválasztás/pontozás: `open-sse/services/accountSelector.ts` - A kontextus életciklusának kezelése: `open-sse/services/contextManager.ts` - IP-szűrés kikényszerítése: `open-sse/services/ipFilter.ts` - Munkamenetek követése: `open-sse/services/sessionManager.ts` - Kérések deduplikációja: `open-sse/services/signatureCache.ts` - Rendszerprompt beszúrása: `open-sse/services/systemPrompt.ts` - Gondolkodási keret kezelése: `open-sse/services/thinkingBudget.ts` - Helyettesítő karakteres modellútválasztás: `open-sse/services/wildcardRouter.ts` - Sebességkorlátozás kezelése: `open-sse/services/rateLimitManager.ts` - Megszakító: `src/shared/utils/circuitBreaker.ts` - Kontextusátadás: `open-sse/services/contextHandoff.ts` — átadási összefoglaló létrehozása és beszúrása a kontextusközvetítési stratégiához - Tömörítés: `open-sse/services/compression/*` — proaktív tömörítés a szolgáltatói fordítás előtt; tartalmazza a Caveman-szabályokat, RTK-szűrőket, egymásra épülő feldolgozási láncokat, tömörítési kombinációkat, statisztikákat és ellenőrzést - Codex-kvótalekérő: `open-sse/services/codexQuotaFetcher.ts` — lekéri a Codex-kvótát a kontextusközvetítési átadási döntésekhez - Várakozási időt figyelembe vevő újrapróbálkozás: `src/sse/services/cooldownAwareRetry.ts` — modellenkénti, várakozási idővel működő újrapróbálkozások konfigurálható `requestRetry` / `maxRetryIntervalSec` értékekkel - Biztonságos kimenő lekérés: `src/shared/network/safeOutboundFetch.ts` — védett szolgáltató-/modell-lekérés SSRF-védelemmel, privát URL-ek blokkolásával, újrapróbálkozással és időtúllépéssel - Kimenő URL-ek védelme: `src/shared/network/outboundUrlGuard.ts` — gazdagép-ellenőrzések a szolgáltatói URL-eken; a `src/shared/network/outboundUrlGuardPolicy.ts` az `OMNIROUTE_ALLOW_LOCAL_PROVIDER_URLS`, az `OMNIROUTE_ALLOW_PRIVATE_PROVIDER_URLS` és a hozzájuk tartozó irányítópulti kapcsolók alapján választja ki a módot (lásd: `docs/reference/ENVIRONMENT.md`) - Szolgáltatói kérések alapértelmezett értékei: `open-sse/services/providerRequestDefaults.ts` — szolgáltatói szintű `maxTokens`, `temperature`, `thinkingBudgetTokens` alapértékek - GLM szolgáltatói konstansok: `open-sse/config/glmProvider.ts` — megosztott GLM-modellek, kvóta-URL-ek, GLMT-időtúllépési és alapértelmezett értékek - Antigravity felsőbb réteg: `open-sse/config/antigravityUpstream.ts` — alap-URL és felderítési útvonal konstansai - Codex-klienskonstansok: `open-sse/config/codexClient.ts` — verziózott felhasználóiügynök- és kliensverzió-értékek - Modellaliasok kiinduló adatai: `src/lib/modelAliasSeed.ts` — indításkor több mint 30, proxy-dialektusok közötti aliast tölt be A tartományi réteg moduljai: - Költségszabályok/keretek: `src/domain/costRules.ts` - Visszaállási szabályzat: `src/domain/fallbackPolicy.ts` - Kombinációfeloldó: `src/domain/comboResolver.ts` - Kizárási szabályzat: `src/domain/lockoutPolicy.ts` - Szabályzatmotor: `src/domain/policyEngine.ts` — központosított kizárás → keret → visszaállás kiértékelés - Hibakód-katalógus: `src/shared/constants/errorCodes.ts` - Kérésazonosító: `src/shared/utils/requestId.ts` - Lekérési időtúllépés: `src/shared/utils/fetchTimeout.ts` - Kéréstelemetria: `src/shared/utils/requestTelemetry.ts` - Megfelelőség/audit: `src/lib/compliance/index.ts` - Kiértékelés-futtató: `src/lib/evals/evalRunner.ts` - Tartományi állapot tartós tárolása: `src/lib/db/domainState.ts` — SQLite CRUD a visszaállási láncokhoz, keretekhez, költségelőzményekhez, kizárási állapothoz és megszakítókhoz OAuth-szolgáltatói modulok (27 különálló fájl a `src/lib/oauth/providers/` alatt): - Nyilvántartási index: `src/lib/oauth/providers/index.ts` - Egyedi szolgáltatók: `agy.ts`, `antigravity.ts`, `claude.ts`, `cline.ts`, `codebuddy-cn.ts`, `codebuddy-intl.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`, `muse-code.ts`, `openference.ts`, `qoder.ts`, `trae.ts`, `workbuddy.ts`, `xai-oauth.ts`, `zed-hosted.ts`, `zed.ts` - Megosztott segédfüggvények: `codebuddyDeviceAuth.ts` (CodeBuddy CN/nemzetközi eszközfolyamat), `museCodeDeviceResponse.ts` - Vékony burkolómodul: `src/lib/oauth/providers.ts` — újraexportál az egyedi modulokból ## 5) Beágyazott szolgáltatások (v3.8.4) Az OmniRoute képes telepíteni, felügyelni és útválasztási célként használni a helyben futó, **beágyazott szolgáltatásoknak** nevezett AI-eszközfolyamatokat. Öt ilyen szolgáltatást tartalmaz: 9Router, CLIProxyAPI, Bifrost, Mux és Dario. Architekturális rétegek: - **Felhasználói felület** (`/dashboard/providers/services`) — kétlapos oldal életciklus-vezérlőkkel, élő naplóközvetítéssel, API-kulcsok kezelésével, valamint (a 9Router esetében) egy belső fordított proxyn keresztül beágyazott natív felhasználói felülettel. - **API** (`/api/services/{name}/*`) — 11 végpont a 9Routerhez, 10 a CLIProxyAPI-hoz, valamint egyenként 8 a Bifrost / Mux / Dario szolgáltatásokhoz, valamennyi **LOCAL_ONLY** besorolással (17. szigorú szabály). Egy megosztott `GET /api/services/[name]/logs` SSE-végpont szolgálja ki mindkét szolgáltatást. - **Felügyelő** (`src/lib/services/`) — az általános `ServiceSupervisor` osztály a `child_process.spawn` köré épül, egy 5 MB-os körkörös puffert tart fenn az SSE-naplóközvetítéshez, továbbá állapotellenőrzési ciklust, atomi műveleti zárolást és SIGTERM→SIGKILL szabályos leállítást biztosít. A `bootstrap.ts` a folyamat indításakor csatlakoztatja az összes konfigurált szolgáltatást. - **Szolgáltató/végrehajtó** (`open-sse/executors/ninerouter.ts`) — a 9Router valódi szolgáltatóként érhető el. A modellek `9router/{sub}/{model}` előtagot kapnak, és 5 percenként szinkronizálódnak a 9Router `/v1/models` végpontjáról. Részletes leírás: `docs/frameworks/EMBEDDED-SERVICES.md` ## Főbb alrendszerek (v3.8.0) ### A. Automatikus kombinált motor Az Auto Combo dinamikusan pontozza és kiválasztja az útválasztási célokat a kérés időpontjában, ahelyett, hogy statikus kombináció-definícióra hagyatkozna. Ez hajtja a `auto/*` modell előtagcsaládot. - Motorbemenet: `open-sse/services/autoCombo/` (`autoComboEngine.ts`, `scoringEngine.ts`, `virtualFactory.ts`, `modePacks.ts`) - Feloldó: `src/domain/comboResolver.ts` ( `auto/` előtag automatikus felismerése) - Műszerfal: `/dashboard/auto-combo` - Telemetria: `auto_combo_decisions` SQLite asztal Főbb képességek: - **20 útválasztási stratégia** (prioritás, súlyozott, kitöltési sorrend, kör-robin, P2C, véletlenszerű, legkevésbé használt, költségoptimalizált, reset-aware, reset-window, headroom, kvótával súlyozott, szigorú véletlenszerű,** auto** , lkgp, kontextusra optimalizált, gyorsítótárra optimalizált, környezetrelé,** fúzió** , pipeline) — auto a 3.8.0-s v3.8.0 címsor kiegészítése; `fusion` (panel fan-out + bíró szintézis, `open-sse/services/fusion.ts`) új a v3.8.36-ban. - **16 faktoros pontozás** : kvóta, egészség, fordított költség, fordított késleltetés, feladat-illesztés és még tíz. A faktorok kanonikus táblázata és alapértelmezett súlyaik [`docs/routing/AUTO-COMBO.md`](../routing/AUTO-COMBO.md) — -ben élnek, ha itt újra megismételjük, ez egy második helyet adna az elavulásnak. - **Virtuális gyár** efemer kombinációkat valósít meg, ha nem létezik megfelelő nevű kombináció, így a jelölteket egészséges aktív szolgáltatói kapcsolatokból szerzi be. - **Automatikus előtagok** : `auto/coding`, `auto/cheap`, `auto/fast`, `auto/offline`, `auto/smart`, `auto/lkgp` — mindegyiket hangolt súlyprofil támogatja. - **6 mód csomag** : `ship-fast`, `cost-saver`, `quality-first`, `offline-friendly`, `reliability-first` és `chaos-mode` — előre beállított súlykonfigurációk, amelyek a műszerfalról hívhatók. (Nem tévesztendő össze a fenti `auto/*` előtagokkal, amelyek kérésidő-változatok.) A teljes algoritmus részleteit (tényezőképletek, súlyhangolás) lásd: [`docs/routing/AUTO-COMBO.md`](../routing/AUTO-COMBO.md). ### B. Felhőügynökök A Cloud Agents a harmadik féltől származó kódügynök-platformokat (Codex Cloud, Devin, Jules) egységes, adatbázis-támogatott feladatéletciklus mögé burkolja. Minden feladat creation/inspection végpontja felügyeleti hitelesítést igényel. - Modul gyökér: `src/lib/cloudAgent/` (`baseAgent.ts`, `registry.ts`, `api.ts`, `types.ts`, `db.ts`, plusz ügynökönkénti alkönyvtárak `agents/` alatt) - Ügynökönkénti megvalósítások: `agents/codex/`, `agents/devin/`, `agents/jules/` - Nyilvános végpontok: `/api/v1/agents/tasks/*` (list/create/get/cancel) - Felügyeleti végpontok: `/api/cloud/*` (kiépítés, állapot, köteg) - Műszerfal: `/dashboard/cloud-agents` - Tárolás: `cloud_agent_tasks` asztal Az ügynökönkénti kiépítés és OAuth sajátosságaiért lásd: [`docs/frameworks/CLOUD_AGENT.md`](../frameworks/CLOUD_AGENT.md). ### C. Védőkorlátok A védőkorlát modul egy üzem közben újratölthető köztes szoftverréteg, amely megvizsgálja a kéréseket és válaszokat PII, a gyors befecskendezés és a nem biztonságos látástartalom szempontjából. A szabálysértések rövidre zárják a kérést HTTP vel** 503** plusz egy strukturált hibakód, amely lehetővé teszi a későbbi hívók számára, hogy újra próbálkozzanak vagy elágazjanak. - Modul gyökér: `src/lib/guardrails/` (`base.ts`, `registry.ts`, `piiMasker.ts`, `promptInjection.ts`, `visionBridge.ts`, `visionBridgeHelpers.ts`) - Hot reload: a rendszerleíró adatbázis figyeli a konfigurációs változásokat, és a helyén újraépíti a láncot - Bekötési pontok: chatkezelő belépés, képgeneráló kezelő, válaszfertőtlenítő - HTTP szerződés: a jogsértések `503` ként jelennek meg `error.code = "GUARDRAIL_VIOLATION"` vel A szabálykészlet létrehozásáról és a küszöbhangolásról lásd: [`docs/security/GUARDRAILS.md`](../security/GUARDRAILS.md). ### D. Domain réteg A `src/domain/` névtér központosítja a politikai döntéseket, így az útvonalkezelőknek nem kell maguknak összeállítaniuk lockout/budget/fallback logikát. - Irányelvmotor: `src/domain/policyEngine.ts` — egyetlen belépési pont a végrehajtás előtti értékeléshez (zárolási → költségvetési → tartalék rendelés) - Költségszabályok: `src/domain/costRules.ts` - Tartalék irányelv: `src/domain/fallbackPolicy.ts` - Kizárási politika: `src/domain/lockoutPolicy.ts` - Címke alapú útválasztás: `src/domain/tagRouter.ts` - Kombinált feloldó: `src/domain/comboResolver.ts` — feloldja a kombinált neveket, az auto/\* előtagokat és a helyettesítő karakteres modellcélokat a konkrét végrehajtási tervekhez - Connection/model szabálycsatlakozó: `src/domain/connectionModelRules.ts` - Modell elérhetőségi pillanatképek: `src/domain/modelAvailability.ts` - Szolgáltató lejáratának követése: `src/domain/providerExpiration.ts` - Kvóta gyorsítótár: `src/domain/quotaCache.ts`. A szolgáltatók kvótaablakokat adnak hozzá és távolítanak el (OpenAI elvetette az 5 órás Codex ablakot egyes terveknél), így a szolgáltató adapterét leolvasó használat teljesnek igazolja (`quotasComplete`, lásd `src/lib/usage/usageReading.ts`) a fiók teljes ablakkészlete: a korábban ismert, de abból hiányzó ablak megszűnik, a gyorsítótárban, a rependedqrekordban, a restartqreffates. megmaradt a Codex kvóta állapota és Claude `quota_snapshots` sávjaiban. A részleges bizonyítékok (válaszfejlécek, elavult másolatok) csak az általuk hordozott ablakokat frissítik. - Lebomlási állapot: `src/domain/degradation.ts` - Konfiguráció audit: `src/domain/configAudit.ts` - OmniRoute válasz metaadat-készítő: `src/domain/omnirouteResponseMeta.ts` - Értékelési alrendszer: `src/domain/assessment/` — időszakos értékelési munkák ### E. Engedélyezési folyamat Az engedélyezési folyamat minden bejövő kérelmet osztályoz, és a megfelelő házirend-láncot alkalmazza a feladás előtt. - Csővezeték-bevezetés: `src/server/authz/pipeline.ts` - Kérelem osztályozója: `src/server/authz/classify.ts` — megkülönbözteti a nyilvános kompatibilitási útvonalakat a kezelési útvonalaktól - Közút leltár: `src/shared/constants/publicApiRoutes.ts` - Irányelvek: `src/server/authz/policies/` — összeállítható predikátumok (`requireApiKey`, `requireManagement`, `requireFreshAuth` stb.) - Fejléc segédprogramok: `src/server/authz/headers.ts` - Állítási segéd: `src/server/authz/assertAuth.ts` - A kérés szövegkörnyezete: `src/server/authz/context.ts` A nyilvános és a felügyeleti útvonalak kemény határvonalat jelentenek: agent/cooldown APIs és a szolgáltatói mutációk kezelési hitelesítést igényelnek (HTTP 401, ha hiányzik). A teljes útvonal-besorolási szabályokat lásd: [`docs/architecture/AUTHZ_GUIDE.md`](./AUTHZ_GUIDE.md). ### F. Workflow FSM és Task-Aware Router Egy véges állapotú gép által vezérelt útválasztó, amely a kombinált kiválasztás fölé rétegezve irányítja a forgalmat az észlelt munkafolyamat szakasza (tervezés, végrehajtás, áttekintés) és a háttérfeladat-affinitás alapján. - Munkafolyamat FSM: `open-sse/services/workflowFSM.ts` - Feladat-tudatos útválasztó: `open-sse/services/taskAwareRouter.ts` - Háttérfeladat detektor: `open-sse/services/backgroundTaskDetector.ts` - Szándékos osztályozó: `open-sse/services/intentClassifier.ts` A FSM átmenetek beépülnek az Auto Combo pontozásába, és az olcsóbb modellek felé hajlanak background/automation feladatokhoz, és az erősebb modellek felé az interaktív planning/review fordulatokhoz. ### G. Szolgáltató-specifikus rugalmasság Számos szolgáltató dedikált rugalmassági és lopakodó modulokat szállít, amelyek visszatartják a globális megszakító / kapcsolat lehűlés / modellzár réteget: - Antigravity 429 motor: `open-sse/services/antigravity429Engine.ts` (az identitás elforgatása, a válaszfejlécek tisztítása, credits/version nyomon követése `antigravityCredits.ts`, `antigravityHeaderScrub.ts`, `antigravityHeaders.ts`, `antigravityIdentity.ts`, `antigravityVersion.ts` segítségével) - Antigravity 429 őr: `open-sse/services/antigravity429Guard.ts` (az upstream 429-ek kérésenkénti költségvetése az összes gazdagépen, `ANTIGRAVITY_MAX_429_ATTEMPTS`; a visszautasított test azonos újraküldésére helyileg válaszol; `src/sse/handlers/chat.ts` nem indítja újra az ilyen kérést a lehűlés-tudatos újrapróbálkozáson keresztül) - ModelScope kvótapolitika: `open-sse/services/modelscopePolicy.ts` - Claude kód CCH (kompatibilitási csatorna kézfogás): `open-sse/services/claudeCodeCCH.ts`, plusz `claudeCodeCompatible.ts`, `claudeCodeConstraints.ts`, `claudeCodeExtraRemap.ts`, `claudeCodeToolRemapper.ts` - Claude Kód ujjlenyomat formázás: `open-sse/services/claudeCodeFingerprint.ts` - Claude Kódzavarás: `open-sse/services/claudeCodeObfuscation.ts` A teljes rejtett játékkönyvet és a működési útmutatást lásd `docs/security/STEALTH_GUIDE.md` (git; nincs `/docs`-be fordítva). ### H. Webhooks, érvelési gyorsítótár, olvasási gyorsítótár - **Webhookok** — kimenő feladás provider/account/task eseményekhez. - Diszpécser: `src/lib/webhookDispatcher.ts` - Tárhely: `webhooks` SQLite asztal ( `src/lib/db/webhooks.ts` n keresztül) - Irányítópult: `/dashboard/webhooks` (előfizetések, titkok, újrapróbálkozási előzmények) - Az eseménytaxonómiával és az újrapróbálkozási szemantikával kapcsolatban lásd [`docs/frameworks/WEBHOOKS.md`](../frameworks/WEBHOOKS.md). - **Érvelési gyorsítótár** — újrajátszható érvelési blokkok olyan szolgáltatók számára, amelyek gondolkodási tokeneket (Claude, GLMT stb.) bocsátanak ki, így az egymást követő fordulatok kihagyhatják az újragondolást. - DB réteg: `src/lib/db/reasoningCache.ts` - Szolgáltatási réteg: `open-sse/services/reasoningCache.ts` - A visszajátszás szemantikáját lásd: [`docs/routing/REASONING_REPLAY.md`](../routing/REASONING_REPLAY.md). - **Olvassa el a gyorsítótárat** — rövid élettartamú válaszgyorsítótár, amelyet aláírással kulcsolnak, és a törött upstream SDKs azonos újrapróbálkozásainak összecsukására használják. - DB réteg: `src/lib/db/readCache.ts` - Statisztikák végpontja: `GET /api/cache/stats`, műszerfal `/dashboard/cache` nél ## 3) Perzisztenciaréteg Elsődleges állapot-adatbázis (SQLite): - Alapinfrastruktúra: `src/lib/db/core.ts` (better-sqlite3, migrációk, WAL) - Adatbázis-hozzáférés: közvetlenül az egyes `src/lib/db/*` modulokat importálja (a régi `localDb.ts` gyűjtőmodult eltávolították) - fájl: `${DATA_DIR}/storage.sqlite` (vagy `$XDG_CONFIG_HOME/omniroute/storage.sqlite`, ha be van állítva, egyébként `~/.omniroute/storage.sqlite`) - entitások (táblák + KV-névterek): providerConnections, providerNodes, modelAliases, combos, apiKeys, settings, pricing, **customModels**, **proxyConfig**, **ipFilter**, **thinkingBudget**, **systemPrompt** Használati adatok perzisztenciája: - homlokzat: `src/lib/usageDb.ts` (felbontott modulok a `src/lib/usage/*` alatt) - SQLite-táblák a `storage.sqlite` fájlban: `usage_history`, `call_logs`, `proxy_logs` - az opcionális fájlartefaktumok kompatibilitási és hibakeresési célból megmaradnak (`${DATA_DIR}/log.txt`, `${DATA_DIR}/call_logs/`, `/logs/...`) - a régi JSON-fájlokat az indítási migrációk SQLite-ba migrálják, ha jelen vannak Tartományi állapotadatbázis (SQLite): - `src/lib/db/domainState.ts` — CRUD-műveletek a tartományi állapothoz - Táblák (létrehozásuk helye: `src/lib/db/core.ts`): `domain_fallback_chains`, `domain_budgets`, `domain_cost_history`, `domain_lockout_state`, `domain_circuit_breakers` - Azonnali adatbázisba írást alkalmazó gyorsítótár-minta: futásidőben a memóriabeli Mapek a mérvadók; a módosítások szinkron módon íródnak az SQLite-ba; hidegindításkor az állapot visszaáll az adatbázisból ## 4) Hitelesítés + biztonsági felületek - Vezérlőpult cookie-alapú hitelesítése: `src/proxy.ts`, `src/app/api/auth/login/route.ts` - API-kulcsok létrehozása/ellenőrzése: `src/shared/utils/apiKey.ts` - A szolgáltatói titkos adatok a `providerConnections` bejegyzésekben vannak tartósan tárolva - Kimenő proxy támogatása az `open-sse/utils/proxyFetch.ts` (környezeti változók) és az `open-sse/utils/networkProxy.ts` (szolgáltatónként vagy globálisan konfigurálható) révén - SSRF-/kimenő URL-védelem: `src/shared/network/outboundUrlGuard.ts` — gazdagép-ellenőrzések a szolgáltatói hívásoknál és a webhook-célpontoknál; a módot a `src/shared/network/outboundUrlGuardPolicy.ts` határozza meg (jelzők: `docs/reference/ENVIRONMENT.md`) - Futásidejű környezeti ellenőrzés: `src/lib/env/runtimeEnv.ts` — Zod-séma az összes környezeti változóhoz, amely az indítási hibákat/figyelmeztetéseket is megjeleníti - Szinkronizálási tokenek: `src/lib/db/syncTokens.ts` — hatókörrel rendelkező tokenek a konfigurációscsomag-letöltési végpontokhoz; a `sync_tokens` SQLite-tábla tárolja őket (`024_create_sync_tokens.sql` migráció) - WebSocket-kézfogás hitelesítése: `src/lib/ws/handshake.ts` — API-kulccsal vagy munkamenet-cookie-val ellenőrzi a WS-frissítési kéréseket - Az élő vezérlőpult WebSocket-hitelesítése: `src/server/ws/liveServer.ts` — a segédfolyamat (a `LIVE_WS_PORT` porton) vezérlőpult-munkamenet-cookie-t vagy kezelési hatókörrel (`manage`/`admin`) rendelkező Bearer API-kulcsot fogad el; a csak következtetésre jogosító kulcsokat elutasítja. A belső `POST /__omniroute_event` közzétevő végpont csak akkor fogad el loopback társtól érkező kapcsolatot, ha nincs jelen proxyugrást jelző fejléc (`x-forwarded-*`, `x-real-ip`, `forwarded`, `via`) ## 5) Felhőalapú szinkronizálás - Ütemező inicializálása: `src/lib/initCloudSync.ts`, `src/shared/services/initializeCloudSync.ts`, `src/shared/services/modelSyncScheduler.ts` - Időszakos feladat: `src/shared/services/cloudSyncScheduler.ts` - Időszakos feladat: `src/shared/services/modelSyncScheduler.ts` - Vezérlési útvonal: `src/app/api/sync/cloud/route.ts` ## Kérés életciklusa (`/v1/chat/completions`) ```mermaid sequenceDiagram autonumber participant Client as CLI/SDK-kliens participant Route as /api/v1/chat/completions participant Chat as src/sse/handlers/chat participant Core as open-sse/handlers/chatCore participant Model as Modellfeloldó participant Auth as Hitelesítőadat-kiválasztó participant Exec as Szolgáltatói végrehajtó participant Prov as Felsőbb szintű szolgáltató participant Stream as Adatfolyam-átalakító participant Usage as usageDb Client->>Route: POST /v1/chat/completions Route->>Chat: handleChat(request) Chat->>Model: modell vagy kombináció értelmezése/feloldása alt Kombinált modell Chat->>Chat: végighaladás a kombináció modelljein (handleComboChat) end Chat->>Auth: getProviderCredentials(provider) Auth-->>Chat: aktív fiók + tokenek/API-kulcs Chat->>Core: handleChatCore(body, modelInfo, credentials) Core->>Core: forrásformátum észlelése Core->>Core: kérés átalakítása a célformátumra Core->>Exec: execute(provider, transformedBody) Exec->>Prov: felsőbb szintű API-hívás Prov-->>Exec: SSE-/JSON-válasz Exec-->>Core: válasz + metaadatok alt 401/403 Core->>Exec: refreshCredentials() Exec-->>Core: frissített tokenek Core->>Exec: kérés újbóli megkísérlése end Core->>Stream: adatfolyam átalakítása/normalizálása a kliensformátumra Stream-->>Client: SSE-adatrészletek / JSON-válasz Stream->>Usage: használati adatok kinyerése + előzmények/napló tárolása ``` ## Kombinációs + fiók-visszalépési folyamat ```mermaid flowchart TD A[Beérkező modellkarakterlánc] --> B{Kombinációnév?} B -- Igen --> C[Kombináció modelljeinek sorrendjének betöltése] B -- Nem --> D[Egyetlen modell útvonala] C --> E[N. modell kipróbálása] E --> F[Szolgáltató/modell feloldása] D --> F F --> G[Fiók hitelesítő adatainak kiválasztása] G --> H{Elérhetők a hitelesítő adatok?} H -- Nem --> I[Szolgáltató nem érhető el eredmény visszaadása] H -- Igen --> J[Kérés végrehajtása] J --> K{Sikeres?} K -- Igen --> L[Válasz visszaadása] K -- Nem --> M{Visszalépésre jogosító hiba?} M -- Nem --> N[Hiba visszaadása] M -- Igen --> O[Fiók megjelölése átmenetileg nem elérhetőként] O --> P{Van másik fiók a szolgáltatóhoz?} P -- Igen --> G P -- Nem --> Q{Kombinációban van következő modell?} Q -- Igen --> E Q -- Nem --> R[Mindegyik nem érhető el eredmény visszaadása] ``` A visszalépési döntéseket az `open-sse/services/accountFallback.ts` vezérli az állapotkódok és a hibaüzenetek heurisztikus elemzése alapján. A kombinációs útválasztás egy további védelmi feltételt ad hozzá: a szolgáltatóhoz kötődő 400-as hibákat, például a felsőbb szintű tartalomblokkolási és szerepkör-ellenőrzési hibákat, modellszintű helyi hibaként kezeli, így a kombináció későbbi célmodelljei továbbra is futtathatók. ## OAuth-bevezetés és tokenfrissítési életciklus ```mermaid sequenceDiagram autonumber participant UI as Irányítópult felhasználói felülete participant OAuth as /api/oauth/[provider]/[action] participant ProvAuth as Szolgáltató hitelesítési kiszolgálója participant DB as localDb participant Test as /api/providers/[id]/test participant Exec as Szolgáltató-végrehajtó UI->>OAuth: GET engedélyezés vagy eszközkód OAuth->>ProvAuth: hitelesítési/eszközfolyamat létrehozása ProvAuth-->>OAuth: hitelesítési URL vagy eszközkód-adat OAuth-->>UI: folyamatadatok UI->>OAuth: POST csere vagy lekérdezés OAuth->>ProvAuth: tokencsere/lekérdezés ProvAuth-->>OAuth: hozzáférési/frissítési tokenek OAuth->>DB: createProviderConnection(oauth adatok) OAuth-->>UI: siker + kapcsolat azonosítója UI->>Test: POST /api/providers/[id]/test Test->>Exec: hitelesítő adatok ellenőrzése / opcionális frissítés Exec-->>Test: érvényes vagy frissített tokeninformációk Test->>DB: állapot/tokenek/hibák frissítése Test-->>UI: ellenőrzési eredmény ``` Az élő forgalom közbeni frissítés az `open-sse/handlers/chatCore.ts` fájlban, a végrehajtó `refreshCredentials()` függvényén keresztül történik. ## Felhőszinkronizálási életciklus (engedélyezés / szinkronizálás / letiltás) ```mermaid sequenceDiagram autonumber participant UI as Végpontoldal felhasználói felülete participant Sync as /api/sync/cloud participant DB as localDb participant Cloud as Külső felhőszinkronizálás participant Claude as ~/.claude/settings.json UI->>Sync: POST action=enable Sync->>DB: cloudEnabled=true beállítása Sync->>DB: API-kulcs meglétének biztosítása Sync->>Cloud: POST /sync/{machineId} (szolgáltatók/álnevek/kombinációk/kulcsok) Cloud-->>Sync: szinkronizálási eredmény Sync->>Cloud: GET /{machineId}/v1/verify Sync-->>UI: engedélyezve + ellenőrzési állapot UI->>Sync: POST action=sync Sync->>Cloud: POST /sync/{machineId} Cloud-->>Sync: távoli adatok Sync->>DB: újabb helyi tokenek/állapot frissítése Sync-->>UI: szinkronizálva UI->>Sync: POST action=disable Sync->>DB: cloudEnabled=false beállítása Sync->>Cloud: DELETE /sync/{machineId} Sync->>Claude: az ANTHROPIC_BASE_URL visszaállítása helyire (ha szükséges) Sync-->>UI: letiltva ``` Az időszakos szinkronizálást a `CloudSyncScheduler` indítja el, amikor a felhő engedélyezve van. ## Adatmodell és tárolási térkép ```mermaid 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 } ``` Fizikai tárolófájlok: - elsődleges futásidejű adatbázis: `${DATA_DIR}/storage.sqlite` - kérésnapló sorai: `${DATA_DIR}/log.txt` (kompatibilitási/hibakeresési melléktermék) - strukturált hívásiadat-archívumok: `${DATA_DIR}/call_logs/` - opcionális fordítói/kérés-hibakeresési munkamenetek: `/logs/...` ## Telepítési topológia ```mermaid flowchart LR subgraph LocalHost[Fejlesztői gép] CLI[CLI-eszközök] Browser[Vezérlőpult böngészője] end subgraph ContainerOrProcess[OmniRoute futtatókörnyezet] Next[Next.js-kiszolgáló\nPORT=20128] Core[SSE-mag + végrehajtók] MainDB[(storage.sqlite)] UsageDB[(használati táblák + naplózási melléktermékek)] end subgraph External[Külső szolgáltatások] Providers[MI-szolgáltatók] SyncCloud[Felhőszinkronizálási szolgáltatás] end CLI --> Next Browser --> Next Next --> Core Next --> MainDB Core --> MainDB Core --> UsageDB Core --> Providers Next --> SyncCloud ``` ## Modulok leképezése (döntéskritikus) ### Útvonal- és API-modulok - `src/app/api/v1/*`, `src/app/api/v1beta/*`: kompatibilitási API-k - `src/app/api/v1/providers/[provider]/*`: szolgáltatónként elkülönített útvonalak (csevegés, beágyazások, képek) - `src/app/api/providers*`: szolgáltatók CRUD-műveletei, ellenőrzése és tesztelése - `src/app/api/provider-nodes*`: egyéni kompatibilis csomópontok kezelése - `src/app/api/provider-models`: egyéni modellek kezelése (CRUD) - `src/app/api/models/route.ts`: modellkatalógus API-ja (álnevek + egyéni modellek) - `src/app/api/oauth/*`: OAuth-/eszközkód-folyamatok - `src/app/api/keys*`: helyi API-kulcsok életciklusa - `src/app/api/models/alias`: álnevek kezelése - `src/app/api/combos*`: tartalék kombinációk kezelése - `src/app/api/pricing`: árképzési felülbírálások a költségszámításhoz - `src/app/api/settings/proxy`: proxykonfiguráció (GET/PUT/DELETE) - `src/app/api/settings/proxy/test`: kimenő proxy kapcsolatának tesztelése (POST) - `src/app/api/usage/*`: használati és naplózási API-k - `src/app/api/sync/*` + `src/app/api/cloud/*`: felhőszinkronizálás és felhőorientált segédfunkciók - `src/app/api/cli-tools/*`: helyi CLI-konfigurációk írói/ellenőrzői - `src/app/api/settings/ip-filter`: IP-engedélyezési/tiltási lista (GET/PUT) - `src/app/api/settings/thinking-budget`: gondolkodási tokenkeret konfigurációja (GET/PUT) - `src/app/api/settings/system-prompt`: globális rendszerprompt (GET/PUT) - `src/app/api/settings/compression`: globális tömörítési beállítások (GET/PUT) - `src/app/api/compression/*`: tömörítési előnézet, szabálymetaadatok és nyelvi csomagok - `src/app/api/context/caveman/config`: Caveman-beállítások álneve (GET/PUT) - `src/app/api/context/rtk/*`: RTK-konfiguráció, szűrőkatalógus, tesztvégpont és nyers kimenet helyreállítása - `src/app/api/context/combos*`: tömörítési kombinációk CRUD-műveletei és útválasztási kombinációk hozzárendelései - `src/app/api/context/analytics`: tömörítéselemzési álnév - `src/app/api/sessions`: aktív munkamenetek listázása (GET) - `src/app/api/rate-limits`: fiókonkénti sebességkorlátozási állapot (GET) - `src/app/api/sync/tokens`: szinkronizálási tokenek CRUD-műveletei (GET/POST) - `src/app/api/sync/tokens/[id]`: szinkronizálási token lekérése/törlése (GET/DELETE) - `src/app/api/sync/bundle`: konfigurációs csomag letöltése (GET, ETag-verziókezelés) - `src/app/api/v1/ws`: WebSocket-frissítés kezelője OpenAI-kompatibilis WS-kliensekhez ### Útválasztási és végrehajtási mag - `src/sse/handlers/chat.ts`: kérés feldolgozása, kombinációk kezelése, fiókkiválasztási ciklus - `open-sse/handlers/chatCore.ts`: fordítás, végrehajtó kiválasztása, újrapróbálkozás/frissítés kezelése, adatfolyam beállítása - `open-sse/executors/*`: szolgáltatóspecifikus hálózati és formátumkezelési viselkedés ### Fordítási nyilvántartás és formátumkonverterek - `open-sse/translator/index.ts`: fordítóregiszter és vezérlés - Kérésfordítók: `open-sse/translator/request/*` (9 modul — `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`) - Válaszfordítók: `open-sse/translator/response/*` (11 modul — `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`) - Segédmodulok: `open-sse/translator/helpers/*` (12 modul — `claudeHelper`, `geminiHelper`, `geminiToolsSanitizer`, `jsonUtil`, `markdownBoundary`, `maxTokensHelper`, `openaiHelper`, `responsesApiHelper`, `schemaCoercion`, `strictSystemHoist`, `toolCallHelper`, `toolCallShim`) - Formátumkonstansok: `open-sse/translator/formats.ts` - Rendszerindítás és regiszter: `open-sse/translator/bootstrap.ts`, `open-sse/translator/registry.ts` - Képformátum-segédmodulok: `open-sse/translator/image/` ### Perzisztencia - `src/lib/db/*`: tartós konfiguráció-/állapottárolás és tartományi perzisztencia SQLite-on - `src/lib/db/*`: az egyes modulokat közvetlenül importáld — nincs gyűjtőmodul (a régi `localDb.ts` újraexportáló réteget eltávolították) - `src/lib/usageDb.ts`: használati előzmények és hívásnaplók homlokzata az SQLite-táblák felett ## Szolgáltatói végrehajtók lefedettsége (stratégiaminta) Minden szolgáltató rendelkezik egy specializált, a `BaseExecutor` osztályt kiterjesztő végrehajtóval (az `open-sse/executors/base.ts` fájlban), amely biztosítja az URL-ek összeállítását, a fejlécek létrehozását, az exponenciális késleltetésű újrapróbálkozást, a hitelesítő adatok frissítéséhez szükséges hookokat, valamint az `execute()` vezénylési metódust. | Végrehajtó | Szolgáltató(k) | Speciális kezelés | | ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | | `DefaultExecutor` | OpenAI, Claude, Gemini, Qwen, OpenRouter, GLM, Kimi, MiniMax, DeepSeek, Groq, xAI, Mistral, Perplexity, Together, Fireworks, Cerebras, Cohere, NVIDIA stb. | Dinamikus URL-/fejléc-konfiguráció szolgáltatónként | | `AntigravityExecutor` | Google Antigravity | Egyéni projekt-/munkamenet-azonosítók, Retry-After feldolgozása, 429-es hibák elfedése | | `AzureOpenAIExecutor` | Azure OpenAI | Telepítésalapú útválasztás, az api-version lekérdezési paraméter kikényszerítése | | `BlackboxWebExecutor` | Blackbox AI (webes mód) | Webes munkamenet visszafejtése TLS-ujjlenyomat-emulációval | | `ClaudeIdentityExecutor` | Claude.ai (CCH-útvonal) | Korlátozási és eszköz-újraleképezési folyamatok, ujjlenyomat-formálás | | `CliProxyApiExecutor` | CLIProxyAPI-kompatibilis szolgáltatók | Egyéni hitelesítés- és protokollkezelés | | `CloudflareAiExecutor` | Cloudflare Workers AI | Fiókazonosító beillesztése, Neurons-alapú használatkövetés | | `CodexExecutor` | OpenAI Codex | Rendszerutasításokat illeszt be, kikényszeríti az érvelési erőfeszítés szintjét | | `ChatGptWebCodexExecutor` | ChatGPT Web (Codex) | Böngésző-munkamenetes Responses API-híd szál-/fordulórögzítéssel | | `CommandCodeExecutor` | Command Code | OAuth és munkamenetenkénti fejlécrotáció | | `CursorExecutor` | Cursor IDE | ConnectRPC protokoll, Protobuf-kódolás, kérések aláírása ellenőrzőösszeggel | | `DevinCliExecutor` | Devin CLI | A Devin-feladatok életciklusának összekapcsolása felhőügynök-modulon keresztül | | `GithubExecutor` | GitHub Copilot | Copilot-token frissítése, VSCode-ot utánzó fejlécek | | `GitlabExecutor` | GitLab Duo | GitLab OAuth és projekthatókörű útválasztás | | `GlmExecutor` | Z.AI GLM (beleértve a `glmt` előbeállítást) | Gondolkodási keretet figyelembe vevő működés, GLMT előbeállítási állandók | | `GrokWebExecutor` | xAI Grok web | Webes munkamenet visszafejtése, módválasztás (gondolkodó/normál) | | `KieExecutor` | KIE | Egyéni tokenkibocsátás változó munkamenet-horgonyokkal | | `KiroExecutor` | AWS CodeWhisperer/Kiro | AWS EventStream bináris formátum → SSE-konverzió | | `MuseSparkWebExecutor` | Muse Spark (web) | Webes munkamenet visszafejtése képüzenetek áthidalásával | | `NlpCloudExecutor` | NLP Cloud | Szolgáltatóspecifikus kérés-törzsstruktúra | | `OpenCodeExecutor` | OpenCode | AI SDK-kompatibilis szolgáltató-beállítás | | `PerplexityWebExecutor` | Perplexity web | Webes munkamenet visszafejtése a csevegés folytatásához | | `PetalsExecutor` | Petals elosztott inferencia | Decentralizált rajalapú útválasztás | | `PollinationsExecutor` | Pollinations AI | Nem igényel API-kulcsot, sebességkorlátozott kérések | | `QoderExecutor` | Qoder AI | PAT- és OAuth-támogatás, többmodelles ingyenes csomag | | `VertexExecutor` | Google Vertex AI | Szolgáltatásfiók-alapú hitelesítés, régióalapú végpontok | | `DevinDesktopExecutor` | Devin Desktop | Importált API-kulcs és Connect-protobuf csevegésstreamelés | Minden más szolgáltató (beleértve az egyéni kompatibilis csomópontokat is) a `DefaultExecutor` végrehajtót használja. ## Szolgáltatói kompatibilitási mátrix > **Megjegyzés:** Az alábbi mátrix az OmniRoute v3.8.0 rendszerben regisztrált 351 szolgáltató reprezentatív mintája. > A hiteles és folyamatosan frissített listát lásd az > [`docs/reference/PROVIDER_REFERENCE.md`](../reference/PROVIDER_REFERENCE.md) (automatikusan generált) fájlban, vagy a mérvadó > `src/shared/constants/providers.ts` forrásban (betöltéskor Zod által validálva). | Szolgáltató | Formátum | Hitelesítés | Streamelés | Nem streamelt | Tokenfrissítés | Használati API | | ------------------- | ---------------- | ------------------------- | ---------------- | ------------- | -------------- | --------------------------- | | Claude | claude | API-kulcs / OAuth | ✅ | ✅ | ✅ | ⚠️ Csak adminisztrátoroknak | | Gemini | gemini | API-kulcs / OAuth | ✅ | ✅ | ✅ | ⚠️ Cloud Console | | Antigravity | antigravity | OAuth | ✅ | ✅ | ✅ | ✅ Teljes kvóta-API | | OpenAI | openai | API-kulcs | ✅ | ✅ | ❌ | ❌ | | Codex | openai-responses | OAuth | ✅ kötelező | ❌ | ✅ | ✅ Sebességkorlátok | | ChatGPT Web (Codex) | openai-responses | Böngésző-munkamenet | ✅ kötelező | ❌ | ❌ | ❌ | | GitHub Copilot | openai | OAuth + Copilot-token | ✅ | ✅ | ✅ | ✅ Kvótapillanatképek | | Cursor | cursor | Egyéni ellenőrzőösszeg | ✅ | ✅ | ❌ | ❌ | | Kiro | kiro | AWS SSO OIDC | ✅ (EventStream) | ❌ | ✅ | ✅ Használati korlátok | | Qoder | openai | OAuth / PAT | ✅ | ✅ | ✅ | ⚠️ Kérésenként | | Kilo Code | openai | OAuth | ✅ | ✅ | ✅ | ❌ | | Cline | openai | OAuth | ✅ | ✅ | ✅ | ❌ | | Kimi Coding | openai | OAuth | ✅ | ✅ | ✅ | ❌ | | OpenRouter | openai | API-kulcs | ✅ | ✅ | ❌ | ❌ | | GLM/Kimi/MiniMax | claude | API-kulcs | ✅ | ✅ | ❌ | ❌ | | DeepSeek | openai | API-kulcs | ✅ | ✅ | ❌ | ❌ | | Groq | openai | API-kulcs | ✅ | ✅ | ❌ | ❌ | | xAI (Grok) | openai | API-kulcs | ✅ | ✅ | ❌ | ❌ | | Mistral | openai | API-kulcs | ✅ | ✅ | ❌ | ❌ | | Perplexity | openai | API-kulcs | ✅ | ✅ | ❌ | ❌ | | Together AI | openai | API-kulcs | ✅ | ✅ | ❌ | ❌ | | Fireworks AI | openai | API-kulcs | ✅ | ✅ | ❌ | ❌ | | Cerebras | openai | API-kulcs | ✅ | ✅ | ❌ | ❌ | | Cohere | openai | API-kulcs | ✅ | ✅ | ❌ | ❌ | | NVIDIA NIM | openai | API-kulcs | ✅ | ✅ | ❌ | ❌ | | Cloudflare AI | openai | API-token + fiókazonosító | ✅ | ✅ | ❌ | ❌ | | Pollinations | openai | Nincs (nem kell kulcs) | ✅ | ✅ | ❌ | ❌ | | Scaleway AI | openai | API-kulcs | ✅ | ✅ | ❌ | ❌ | | LongCat | openai | API-kulcs | ✅ | ✅ | ❌ | ❌ | | Ollama Cloud | openai | API-kulcs (opcionális) | ✅ | ✅ | ❌ | ❌ | | HuggingFace | openai | API-kulcs | ✅ | ✅ | ❌ | ❌ | | Nebius | openai | API-kulcs | ✅ | ✅ | ❌ | ❌ | | SiliconFlow | openai | API-kulcs | ✅ | ✅ | ❌ | ❌ | | Hyperbolic | openai | API-kulcs | ✅ | ✅ | ❌ | ❌ | | Vertex AI | gemini | Szolgáltatásfiók | ✅ | ✅ | ✅ | ⚠️ Cloud Console | | Command Code | openai | OAuth | ✅ | ✅ | ✅ | ⚠️ Kérésenként | | Z.AI / GLM | openai | API-kulcs / OAuth | ✅ | ✅ | ❌ | ❌ | | GLMT (előbeállítás) | claude | API-kulcs | ✅ | ✅ | ❌ | ⚠️ Kérésenként | | Kimi Coding | openai | OAuth / API-kulcs | ✅ | ✅ | ✅ | ❌ | | KIE | openai | API-kulcs | ✅ | ✅ | ❌ | ❌ | | Devin Desktop | openai | Importált API-kulcs | ✅ (Connect→SSE) | ✅ | ❌ | ⚠️ Kérésenként | | GitLab Duo | openai | OAuth (GitLab) | ✅ | ✅ | ✅ | ❌ | | Devin CLI | openai | Helyi CLI-bejelentkezés | ✅ | ✅ | ❌ | ✅ Feladat-API | | Codex Cloud | openai-responses | OAuth | ✅ | ❌ | ✅ | ✅ Sebességkorlátok | | Jules | openai | OAuth | ✅ | ✅ | ✅ | ✅ Feladat-API | | AgentRouter | openai | API-kulcs | ✅ | ✅ | ❌ | ❌ | | Grok-Web | openai | Munkamenetsüti | ✅ | ✅ | ❌ | ❌ | | Perplexity-Web | openai | Munkamenetsüti | ✅ | ✅ | ❌ | ❌ | | BlackBox-Web | openai | Munkamenetsüti + TLS | ✅ | ✅ | ❌ | ❌ | | Muse-Spark-Web | openai | Munkamenetsüti | ✅ | ✅ | ❌ | ❌ | | ModelScope | openai | API-kulcs | ✅ | ✅ | ❌ | ⚠️ Kvótaszabályzat | | BazaarLink | openai | API-kulcs | ✅ | ✅ | ❌ | ❌ | | Petals | openai | Nincs | ✅ | ✅ | ❌ | ❌ | | Qoder | openai | OAuth / PAT | ✅ | ✅ | ✅ | ⚠️ Kérésenként | | OpenCode (Go/Zen) | openai | OAuth | ✅ | ✅ | ✅ | ❌ | | CLIProxyAPI | openai | Egyéni | ✅ | ✅ | ❌ | ❌ | ## Formátumfordítási lefedettség Az észlelt forrásformátumok: - `openai` - `openai-responses` - `claude` - `gemini` A célformátumok: - OpenAI chat/Responses - Claude - Gemini/Antigravity-boríték - Kiro - Cursor A fordítások **az OpenAI-t használják központi formátumként** — minden konverzió az OpenAI-on mint köztes formátumon keresztül történik: ``` Forrásformátum → OpenAI (központ) → Célformátum ``` A fordítások kiválasztása dinamikusan, a forrásadat-struktúra alakja és a célszolgáltató formátuma alapján történik. További feldolgozási rétegek a fordítási folyamatban: - **Válaszok tisztítása** — Eltávolítja a nem szabványos mezőket az OpenAI-formátumú válaszokból (streamelt és nem streamelt válaszokból egyaránt), így biztosítva az SDK-k szigorú követelményeinek való megfelelést - **Szerepkörök normalizálása** — A nem OpenAI-célok esetén a `developer` szerepkört `system` szerepkörré alakítja; a rendszerszerepkört elutasító modelleknél (GLM, ERNIE) a `system` szerepkört a `user` szerepkörbe egyesíti - **Think címkék kinyerése** — A tartalomban található `...` blokkokat feldolgozza, és a `reasoning_content` mezőbe helyezi - **Strukturált kimenet** — Az OpenAI `response_format.json_schema` formátumát a Gemini `responseMimeType` + `responseSchema` formátumára alakítja ## Támogatott API-végpontok | Végpont | Formátum | Kezelő | | -------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------ | | `POST /v1/chat/completions` | OpenAI Chat | `src/sse/handlers/chat.ts` | | `POST /v1/messages` | Claude Messages | Ugyanaz a kezelő (automatikusan észlelve) | | `POST /v1/responses` | OpenAI Responses | `open-sse/handlers/responsesHandler.ts` | | `POST /v1/embeddings` | OpenAI Embeddings | `open-sse/handlers/embeddings.ts` | | `GET /v1/embeddings` | Modelllista | API-útvonal | | `POST /v1/images/generations` | OpenAI Images | `open-sse/handlers/imageGeneration.ts` | | `GET /v1/images/generations` | Modelllista | API-útvonal | | `POST /v1/providers/{provider}/chat/completions` | OpenAI Chat | Dedikált szolgáltatónkénti végpont modellvalidációval | | `POST /v1/providers/{provider}/embeddings` | OpenAI Embeddings | Dedikált szolgáltatónkénti végpont modellvalidációval | | `POST /v1/providers/{provider}/images/generations` | OpenAI Images | Dedikált szolgáltatónkénti végpont modellvalidációval | | `POST /v1/messages/count_tokens` | Claude tokenszámlálás | API-útvonal | | `GET /v1/models` | OpenAI modelllista | API-útvonal (chat-, beágyazási, kép- és egyéni modellek) | | `GET /api/models/catalog` | Katalógus | Az összes modell szolgáltató és típus szerint csoportosítva | | `POST /v1beta/models/*:streamGenerateContent` | Natív Gemini | API-útvonal | | `GET/PUT/DELETE /api/settings/proxy` | Proxykonfiguráció | Hálózati proxy konfigurációja | | `POST /api/settings/proxy/test` | Proxykapcsolat | A proxy állapotát és kapcsolódását ellenőrző végpont | | `GET/POST/DELETE /api/provider-models` | Szolgáltatói modellek | Az egyéni és felügyelt elérhető modellek mögötti szolgáltatói modellmetaadatok | ## Megkerülési kezelő A megkerülési kezelő (`open-sse/utils/bypassHandler.ts`) elfogja a Claude CLI ismert „eldobható” kéréseit — a bemelegítő pingeket, a címkinyeréseket és a tokenszámlálásokat —, és egy **hamis választ** ad vissza anélkül, hogy felhasználná a felsőbb szintű szolgáltató tokenjeit. Ez csak akkor aktiválódik, ha a `User-Agent` tartalmazza a `claude-cli` értéket. ## Kérések naplózása és műtermékek A régebbi, fájlalapú kérésnaplózó (`open-sse/utils/requestLogger.ts`) csak a visszamenőleges kompatibilitás érdekében maradt meg. A jelenlegi futásidejű szerződés a következőket használja: - `APP_LOG_TO_FILE=true` az alkalmazás- és auditnaplókhoz, amelyek a `/logs/` alatt kerülnek tárolásra - SQLite-alapú hívásnapló-rekordok a `call_logs` táblában - `${DATA_DIR}/call_logs/YYYY-MM-DD/...` műtermékek, ha a hívásnaplózási folyamat engedélyezve van ## Hibamódok és ellenálló képesség ## 1) Fiók-/szolgáltató-elérhetőség - kapcsolati várakozási idő az újrapróbálható felsőbb szintű hibák után - tartalék fiók használata a kérés sikertelen lezárása előtt - kombinált modellre való tartalék átváltás, amikor az aktuális modell-/szolgáltatói útvonal lehetőségei kimerültek ## 2) Token lejárata - előzetes ellenőrzés és frissítés újrapróbálással a frissíthető szolgáltatóknál - 401/403 esetén újrapróbálás a frissítési kísérlet után az alapvető feldolgozási útvonalon ## 3) Adatfolyam-biztonság - kapcsolatbontást figyelembe vevő adatfolyam-vezérlő - fordítási adatfolyam az adatfolyam végi pufferürítés és a `[DONE]` kezelésével - tartalék használatbecslés, ha a szolgáltató használati metaadatai hiányoznak ## 4) Felhőszinkronizálás korlátozott működése - a szinkronizálási hibák megjelennek, de a helyi futtatókörnyezet tovább működik - az ütemező újrapróbálásra képes logikával rendelkezik, de az időszakos végrehajtás jelenleg alapértelmezés szerint egyszeri szinkronizálási kísérletet indít ## 5) Adatintegritás - SQLite-sémamigrációk és automatikus frissítési horgok indításkor - visszamenőleges kompatibilitási útvonal a régi JSON → SQLite migrációhoz ## 6) SSRF / kimenő URL-ek védelme - a `src/shared/network/outboundUrlGuard.ts` blokkol minden privát, visszacsatolási és helyi kapcsolati cél-URL-t, mielőtt azok elérnék a szolgáltatói végrehajtókat - a szolgáltatói modellek felderítési és ellenőrzési útvonalai a `src/shared/network/safeOutboundFetch.ts` fájlt használják, amely minden kimenő kérés előtt alkalmazza a védelmet - a védelmi hibák `URL_GUARD_BLOCKED` hibakóddal és HTTP 422-es állapotkóddal jelennek meg, és a `providerAudit.ts` segítségével bekerülnek a megfelelőségi auditnaplóba ## Megfigyelhetőség és üzemeltetési jelzések A futásidejű láthatóság forrásai: - konzolnaplók a `src/sse/utils/logger.ts` fájlból - kérésenkénti összesített használati adatok az SQLite-ban (`usage_history`, `call_logs`, `proxy_logs`) - négyszakaszos, részletes adattartalom-rögzítés az SQLite-ban (`request_detail_logs`), ha `settings.detailed_logs_enabled=true` - szöveges kérésállapot-napló a `log.txt` fájlban (opcionális/kompatibilitási) - opcionális alkalmazásnapló-fájlok a `logs/` alatt, ha `APP_LOG_TO_FILE=true` - opcionális kérésműtermékek a `${DATA_DIR}/call_logs/` alatt, ha a hívásnaplózási folyamat engedélyezve van - irányítópulti használati végpontok (`/api/usage/*`) a felhasználói felület számára A részletes kérés-adattartalom rögzítése irányított hívásonként legfeljebb négy JSON-adattartalmi szakaszt tárol: - a klienstől fogadott nyers kérés - a ténylegesen a felsőbb szintre küldött, átalakított kérés - a szolgáltató JSON-ként rekonstruált válasza; az adatfolyamban továbbított válaszok a végső összefoglalóra és az adatfolyam metaadataira tömörítve kerülnek tárolásra - az OmniRoute által visszaadott végső kliensválasz; az adatfolyamban továbbított válaszok ugyanebben a tömörített összefoglaló-formában kerülnek tárolásra ## Biztonsági szempontból érzékeny határok - A JWT-titok (`JWT_SECRET`) biztosítja az irányítópult munkamenetsütijének ellenőrzését/aláírását - A kezdeti jelszó rendszerindítási beállítását (`INITIAL_PASSWORD`) explicit módon kell konfigurálni az első futtatáskor történő kiépítéshez - Az API-kulcs HMAC-titka (`API_KEY_SECRET`) biztosítja a generált helyi API-kulcs formátumát - A szolgáltatói titkok (API-kulcsok/tokenek) a helyi adatbázisban vannak tárolva, és fájlrendszerszinten kell védeni őket - A felhőszinkronizálási végpontok API-kulcsos hitelesítésre és gépazonosító-szemantikára támaszkodnak ## Környezeti és futtatási mátrix A kód által aktívan használt környezeti változók: - Alkalmazás/hitelesítés: `JWT_SECRET`, `INITIAL_PASSWORD` - Tárolás: `DATA_DIR` - Opcionális tárolásialap-felülbírálás (Linux/macOS rendszeren, ha a `DATA_DIR` nincs beállítva): `XDG_CONFIG_HOME` - Biztonsági kivonatolás: `API_KEY_SECRET`, `MACHINE_ID_SALT` - Naplózás: `APP_LOG_TO_FILE`, `APP_LOG_RETENTION_DAYS`, `CALL_LOG_RETENTION_DAYS` - Szinkronizálási/felhőbeli URL-kezelés: `NEXT_PUBLIC_BASE_URL`, `NEXT_PUBLIC_CLOUD_URL` - Kimenő proxy: `HTTP_PROXY`, `HTTPS_PROXY`, `ALL_PROXY`, `NO_PROXY` és kisbetűs változataik - SOCKS5-funkciójelzők: `ENABLE_SOCKS5_PROXY`, `NEXT_PUBLIC_ENABLE_SOCKS5_PROXY` - Platform-/futtatókörnyezet-segédváltozók (nem alkalmazásspecifikus konfiguráció): `APPDATA`, `NODE_ENV`, `PORT`, `HOSTNAME` ## Ismert architekturális megjegyzések 1. A `usageDb` és a `localDb` ugyanazt az alapkönyvtár-házirendet használja (`DATA_DIR` -> `XDG_CONFIG_HOME/omniroute` -> `~/.omniroute`), a régi fájlok migrációjával. 2. A `/api/v1/route.ts` ugyanarra az egységes katalóguskészítőre delegál, amelyet a `/api/v1/models` is használ (`src/app/api/v1/models/catalog.ts`), így elkerülhető a szemantikai eltérés. 3. A kérésnaplózó engedélyezés esetén a teljes fejlécet és törzset kiírja; a naplókönyvtárat érzékeny adatként kell kezelni. 4. A felhőbeli működés a `NEXT_PUBLIC_BASE_URL` helyes beállításától és a felhővégpont elérhetőségétől függ. 5. Az `open-sse/` könyvtár `@omniroute/open-sse` **npm workspace csomagként** van közzétéve. A forráskód a `@omniroute/open-sse/...` útvonalon importálja (a Next.js `transpilePackages` oldja fel). A dokumentumban szereplő fájlútvonalak a következetesség érdekében továbbra is az `open-sse/` könyvtárnevet használják. 6. Az irányítópult diagramjai **Recharts** (SVG-alapú) használatával biztosítanak akadálymentes, interaktív analitikai vizualizációkat (modellhasználati oszlopdiagramok, szolgáltatói bontást és sikerességi arányokat tartalmazó táblázatok). 7. Az E2E-tesztek **Playwright** használatával készülnek (`tests/e2e/`), és az `npm run test:e2e` paranccsal futtathatók. Az egységtesztek a **Node.js test runner** használatával készülnek (`tests/unit/`), és az `npm run test:unit` paranccsal futtathatók. A `src/` alatti forráskód **TypeScript** (`.ts`/`.tsx`); az `open-sse/` workspace továbbra is JavaScript (`.js`). 8. A beállítások oldala 7 lapra tagolódik: Általános, Megjelenés, MI, Biztonság, Útválasztás, Hibatűrés, Speciális. A Hibatűrés oldal kizárólag a kérési sort, a kapcsolat-várakoztatást, a szolgáltatói megszakítót és a lehűlés kivárásának viselkedését konfigurálja; a megszakító élő futásidejű állapota az Állapot oldalon jelenik meg. 9. A **Context Relay** stratégia (`context-relay`) két réteg között oszlik meg: a `combo.ts` dönti el, hogy kell-e átadást generálni, a `chat.ts` pedig a fiók feloldása után illeszti be az átadást. Az átadási adatok a `context_handoffs` SQLite-táblában találhatók. Ez a felosztás szándékos, mert csak a `chat.ts` tudja, hogy a tényleges fiók megváltozott-e. 10. A **proxykényszerítés** immár átfogó: a `tokenHealthCheck.ts` kapcsolatonként oldja fel a proxyt, az `/api/providers/validate` a `runWithProxyContext` használatával működik, a `proxyFetch.ts` pedig az `undici.fetch()` függvényt használja a diszpécser-kompatibilitás fenntartásához Node 22 alatt. 11. **Node.js futtatókörnyezet-házirend észlelése**: az `/api/settings/require-login` végpont `nodeVersion` és `nodeCompatible` mezőket ad vissza. A bejelentkezési oldal figyelmeztető sávot jelenít meg, ha a futtatókörnyezet kívül esik a támogatott, biztonságos Node.js-verzióvonalakon. ## Üzemeltetési ellenőrzőlista - Fordítás forráskódból: `npm run build` - Docker-kép létrehozása: `docker build -t omniroute .` - Indítsa el a szolgáltatást, és ellenőrizze a következőket: - `GET /api/settings` - `GET /api/v1/models` - A CLI céljának alap URL-je `http://:20128/v1` legyen, ha `PORT=20128`