# ЁЯУЦ Setup Guide тАФ OmniRoute (рд╣рд┐рдиреНрджреА) ЁЯМР **Languages:** ЁЯЗ║ЁЯЗ╕ [English](../../../../guides/SETUP_GUIDE.md) ┬╖ ЁЯЗкЁЯЗ╣ [am](../../../am/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ╕ЁЯЗж [ar](../../../ar/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗжЁЯЗ┐ [az](../../../az/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗзЁЯЗм [bg](../../../bg/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗзЁЯЗй [bn](../../../bn/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗзЁЯЗж [bs](../../../bs/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗиЁЯЗ┐ [cs](../../../cs/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗйЁЯЗ░ [da](../../../da/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗйЁЯЗк [de](../../../de/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗмЁЯЗ╖ [el](../../../el/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗкЁЯЗ╕ [es](../../../es/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗкЁЯЗк [et](../../../et/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗоЁЯЗ╖ [fa](../../../fa/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗлЁЯЗо [fi](../../../fi/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗлЁЯЗ╖ [fr](../../../fr/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗоЁЯЗк [ga](../../../ga/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗоЁЯЗ│ [gu](../../../gu/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ│ЁЯЗм [ha](../../../ha/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗоЁЯЗ▒ [he](../../../he/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗнЁЯЗ╖ [hr](../../../hr/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗнЁЯЗ║ [hu](../../../hu/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗжЁЯЗ▓ [hy](../../../hy/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗоЁЯЗй [id](../../../id/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ│ЁЯЗм [ig](../../../ig/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗоЁЯЗ╣ [it](../../../it/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗпЁЯЗ╡ [ja](../../../ja/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗмЁЯЗк [ka](../../../ka/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ░ЁЯЗн [km](../../../km/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗоЁЯЗ│ [kn](../../../kn/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ░ЁЯЗ╖ [ko](../../../ko/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ▒ЁЯЗ╣ [lt](../../../lt/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ▒ЁЯЗ╗ [lv](../../../lv/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗоЁЯЗ│ [ml](../../../ml/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗоЁЯЗ│ [mr](../../../mr/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ▓ЁЯЗ╛ [ms](../../../ms/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ▓ЁЯЗ╣ [mt](../../../mt/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ▓ЁЯЗ▓ [my](../../../my/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ│ЁЯЗ╡ [ne](../../../ne/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ│ЁЯЗ▒ [nl](../../../nl/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ│ЁЯЗ┤ [no](../../../no/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗоЁЯЗ│ [or](../../../or/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗоЁЯЗ│ [pa](../../../pa/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ╡ЁЯЗн [phi](../../../phi/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ╡ЁЯЗ▒ [pl](../../../pl/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ╡ЁЯЗ╣ [pt](../../../pt/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗзЁЯЗ╖ [pt-BR](../../../pt-BR/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ╖ЁЯЗ┤ [ro](../../../ro/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ╖ЁЯЗ║ [ru](../../../ru/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ▒ЁЯЗ░ [si](../../../si/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ╕ЁЯЗ░ [sk](../../../sk/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ╕ЁЯЗо [sl](../../../sl/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ╖ЁЯЗ╕ [sr](../../../sr/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ╕ЁЯЗк [sv](../../../sv/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ░ЁЯЗк [sw](../../../sw/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗоЁЯЗ│ [ta](../../../ta/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗоЁЯЗ│ [te](../../../te/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ╣ЁЯЗн [th](../../../th/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ╣ЁЯЗ╖ [tr](../../../tr/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ║ЁЯЗж [uk-UA](../../../uk-UA/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ╡ЁЯЗ░ [ur](../../../ur/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ║ЁЯЗ┐ [uz](../../../uz/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ╗ЁЯЗ│ [vi](../../../vi/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ│ЁЯЗм [yo](../../../yo/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗиЁЯЗ│ [zh-CN](../../../zh-CN/docs/guides/SETUP_GUIDE.md) ┬╖ ЁЯЗ╣ЁЯЗ╝ [zh-TW](../../../zh-TW/docs/guides/SETUP_GUIDE.md) --- > OmniRoute рдХреЗ рд╕рдВрдкреВрд░реНрдг рд╕реЗрдЯрдЕрдк рдХрд╛ рд╕рдВрджрд░реНрднред рддреНрд╡рд░рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП, [README рдореЗрдВ рддреНрд╡рд░рд┐рдд рд╢реБрд░реБрдЖрдд](../README.md#-quick-start) рджреЗрдЦреЗрдВред ## рд╡рд┐рд╖рдп-рд╕реВрдЪреА - [рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рд╡рд┐рдзрд┐рдпрд╛рдБ](#install-methods) - [CLI рдЯреВрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди](#cli-tool-configuration) - [рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕реЗрдЯрдЕрдк (MCP + A2A)](#protocol-setup-mcp--a2a) - [рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди](#timeout-configuration) - [рд╕реНрдкреНрд▓рд┐рдЯ-рдкреЛрд░реНрдЯ рдореЛрдб](#split-port-mode) - [Void Linux (xbps-src)](#void-linux-xbps-src-template) - [рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛](#uninstalling) --- ## рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рд╡рд┐рдзрд┐рдпрд╛рдБ ### npm (рдЕрдиреБрд╢рдВрд╕рд┐рдд) ```bash npm install -g omniroute omniroute ``` рдбреИрд╢рдмреЛрд░реНрдб `http://localhost:20128` рдкрд░ рдЦреБрд▓рддрд╛ рд╣реИ рдФрд░ API рдХрд╛ рдЖрдзрд╛рд░ URL `http://localhost:20128/v1` рд╣реИред ### pnpm ```bash pnpm add -g omniroute@latest --allow-build=better-sqlite3 --allow-build=@swc/core omniroute ``` > **pnpm рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛:** `better-sqlite3` рдФрд░ `@swc/core` рдХреЗ рд▓рд┐рдП рдиреЗрдЯрд┐рд╡ рдмрд┐рд▓реНрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рд╣реЗрддреБ `--allow-build` рдлрд╝реНрд▓реИрдЧ рдЖрд╡рд╢реНрдпрдХ рд╣реИред pnpm v11 рдкрд░ рдЧреНрд▓реЛрдмрд▓ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдХреЗ рд▓рд┐рдП `pnpm approve-builds -g` рдХрдорд╛рдВрдб рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИред ### Arch Linux (AUR) ```bash yay -S omniroute-bin systemctl --user enable --now omniroute.service ``` [AUR рдкреИрдХреЗрдЬ](https://aur.archlinux.org/packages/omniroute-bin) OmniRoute рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ systemd рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред ### рд╕реНрд░реЛрдд рд╕реЗ ```bash npm install PORT=20128 DASHBOARD_PORT=20129 NEXT_PUBLIC_BASE_URL=http://localhost:20129 npm run dev ``` > **Windows рд╕рдВрдмрдВрдзреА рдЯрд┐рдкреНрдкрдгреА:** рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдЬрдм рдкреБрд░рд╛рдиреА `%USERPROFILE%\.omniroute` рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рддреЛ OmniRoute `%APPDATA%\omniroute` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдХрд┐рд╕реА рдЕрдиреНрдп рдбреЗрдЯрд╛-рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рд╕реНрдерд╛рди рдХреЛ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП `DATA_DIR` рд╕реЗрдЯ рдХрд░реЗрдВред > **рдЯрд┐рдкреНрдкрдгреА:** рдкрд╣рд▓реА рдмрд╛рд░ рдЪрд▓рд╛рдиреЗ рдкрд░ `npm install`, `.env.example` рд╕реЗ `.env` рд╕реНрд╡рддрдГ рдЬрдирд░реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдмрд╛рдж рдХреЗ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдореМрдЬреВрджрд╛ `.env` рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рди рд╕реБрд░рдХреНрд╖рд┐рдд рд░рд╣рддреЗ рд╣реИрдВред рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рджреЛрдмрд╛рд░рд╛ рдЪрд▓рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ `.env` рд╣рдЯрд╛рдПрдБред ### Docker Compose рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдФрд░ Caddy HTTPS рд╕рд╣рд┐рдд рд╕рдВрдкреВрд░реНрдг Docker рд╕реЗрдЯрдЕрдк рдХреЗ рд▓рд┐рдП [Docker рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛](./DOCKER_GUIDE.md) рджреЗрдЦреЗрдВред ### рдбреЗрд╕реНрдХрдЯреЙрдк рдРрдк (Electron) OmniRoute рдХреЗ рд╕рд╛рде Electron 41 + electron-builder 26.10 рдкрд░ рдирд┐рд░реНрдорд┐рдд рдПрдХ рдбреЗрд╕реНрдХрдЯреЙрдк рд░реИрдкрд░ рдорд┐рд▓рддрд╛ рд╣реИред рдЙрдкрд▓рдмреНрдз рд╕реНрдХреНрд░рд┐рдкреНрдЯ (рд╡рд░реНрдХрд╕реНрдкреЗрд╕ рд░реВрдЯ): ```bash npm run electron:dev # рд╣реЙрдЯ-рд░реАрд▓реЛрдб рдХреЗ рд╕рд╛рде рдбреЗрд╕реНрдХрдЯреЙрдк рдЪрд▓рд╛рдПрдБ npm run electron:build # рд╡рд░реНрддрдорд╛рди OS рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдб рдХрд░реЗрдВ (рд╕реНрд╡рддрдГ рдкрд╣рдЪрд╛рдирд╛ рдЧрдпрд╛) npm run electron:build:win # Windows рдЗрдВрд╕реНрдЯреЙрд▓рд░ (NSIS + рдкреЛрд░реНрдЯреЗрдмрд▓) npm run electron:build:mac # macOS (dmg + zip, arm64+x64) npm run electron:build:linux # Linux (AppImage + deb + rpm) npm run electron:smoke:packaged # рдкреИрдХреЗрдЬ рдХрд┐рдП рдЧрдП рдмрд┐рд▓реНрдб рдХрд╛ рд╕реНрдореЛрдХ-рдЯреЗрд╕реНрдЯ рдХрд░реЗрдВ ``` рдбреЗрд╕реНрдХрдЯреЙрдк рдЗрдВрд╕реНрдЯреЙрд▓рд░ рдХреЗ рд░рд┐рд▓реАрдЬрд╝ GitHub Releases рд╕реЗ рд╕рдВрд▓рдЧреНрди рд╣реЛрддреЗ рд╣реИрдВред Electron рдХреЗ рд╕рдВрдкреВрд░реНрдг рдЧрд╣рди рд╡рд┐рд╡рд░рдг (рд╕рд╛рдЗрдирд┐рдВрдЧ, IPC рдмреНрд░рд┐рдЬ, рдбрд┐рд╕реНрдЯреНрд░реЛ) рдХреЗ рд▓рд┐рдП, [`ELECTRON_GUIDE.md`](./ELECTRON_GUIDE.md) рджреЗрдЦреЗрдВ _(рдмрд╛рдж рдХреЗ рдЪрд░рдг рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛)_ред ### рд╣реЗрдбрд▓реЗрд╕ рд╕рд░реНрд╡рд░ (CI/рдСрдЯреЛрдореЗрд╢рди) рдмрд┐рдирд╛ рдирд┐рдЧрд░рд╛рдиреА рд╡рд╛рд▓реЗ рд╕реЗрдЯрдЕрдк (Docker, Kubernetes, CI) рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: ```bash omniroute setup --non-interactive omniroute providers test-batch ``` env vars (`INITIAL_PASSWORD`, `OMNIROUTE_WS_BRIDGE_SECRET`, рдЖрджрд┐) рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдХреЗ, рдпрд╣ рдЖрдкрдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ-рдпреЛрдЧреНрдп OmniRoute рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╢реБрд░реВ рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИред ### CLI рд╡рд┐рдХрд▓реНрдк | рдХрдорд╛рдВрдб | рд╡рд┐рд╡рд░рдг | | ----------------------- | ----------------------------------------------------------------------------------------------- | | `omniroute` | рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░реЗрдВ (`PORT=20128`, API рдФрд░ рдбреИрд╢рдмреЛрд░реНрдб рдПрдХ рд╣реА рдкреЛрд░реНрдЯ рдкрд░) | | `omniroute setup` | рдкрд╛рд╕рд╡рд░реНрдб рдФрд░ рдкрд╣рд▓реЗ рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд┐рдд CLI рдСрдирдмреЛрд░реНрдбрд┐рдВрдЧ | | `omniroute doctor` | рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд┐рдП рдмрд┐рдирд╛ рд╕реНрдерд╛рдиреАрдп рд╕реНрд╡рд╛рд╕реНрдереНрдп рдЬрд╛рдБрдЪ рдЪрд▓рд╛рдПрдБ | | `omniroute providers` | CLI рд╕реЗ рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ рдЦреЛрдЬреЗрдВ, рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдВ, рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ рдФрд░ рдЙрдирдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ | | `omniroute config` | CLI рдЯреВрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди тАФ рдХреЙрдиреНрдлрд╝рд┐рдЧ рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдВ, рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рд╕реЗрдЯ рдХрд░реЗрдВ рдФрд░ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ | | `omniroute status` | рдСрдлрд╝рд▓рд╛рдЗрди рд╕реНрдерд┐рддрд┐ рдбреИрд╢рдмреЛрд░реНрдб тАФ рд╕рдВрд╕реНрдХрд░рдг, DB, рдЯреВрд▓, рдХреЙрдиреНрдлрд╝рд┐рдЧ | | `omniroute logs` | API рд╕реЗ рдЙрдкрдпреЛрдЧ рд▓реЙрдЧ рд╕реНрдЯреНрд░реАрдо рдХрд░реЗрдВ (`--follow` рд╕рдорд░реНрдерд┐рдд рд╣реИ) | | `omniroute update` | OmniRoute рдЕрдкрдбреЗрдЯ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдпрд╛ рдЙрдиреНрд╣реЗрдВ рд▓рд╛рдЧреВ рдХрд░реЗрдВ | | `omniroute provider` | рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ рдХрдиреЗрдХреНрд╢рди рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░реЗрдВ тАФ рдЬреЛрдбрд╝реЗрдВ, рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдВ, рд╣рдЯрд╛рдПрдБ, рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдЯ рдХрд░реЗрдВ | | `omniroute --port 3000` | рдХреИрдиреЛрдирд┐рдХрд▓/API рдкреЛрд░реНрдЯ рдХреЛ 3000 рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВ | | `omniroute --mcp` | MCP рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░реЗрдВ (stdio рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ) | | `omniroute --no-open` | рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реНрд╡рддрдГ рди рдЦреЛрд▓реЗрдВ | | `omniroute --help` | рд╕рд╣рд╛рдпрддрд╛ рджрд┐рдЦрд╛рдПрдБ | рд╣реЗрдбрд▓реЗрд╕ рд╕реЗрдЯрдЕрдк рдХреЛ рдлрд╝реНрд▓реИрдЧ рдпрд╛ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЗ рд╕рд╛рде рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: ```bash omniroute setup --non-interactive --password "$OMNIROUTE_PASSWORD" omniroute setup --non-interactive --add-provider --provider openai --api-key "$OPENAI_API_KEY" omniroute setup --non-interactive --add-provider --provider openai --api-key "$OPENAI_API_KEY" --test-provider ``` рдбреИрд╢рдмреЛрд░реНрдб рдЦреЛрд▓реЗ рдмрд┐рдирд╛ рд╕реНрдерд╛рдиреАрдп рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХреНрд╕ рдЪрд▓рд╛рдПрдБ: ```bash omniroute doctor omniroute doctor --json omniroute doctor --no-liveness ``` рдбреИрд╢рдмреЛрд░реНрдб рдЦреЛрд▓реЗ рдмрд┐рдирд╛ SSH рдпрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░реЗрдВ: ```bash omniroute providers available omniroute providers available --search openai omniroute providers available --category api-key omniroute providers list omniroute providers test omniroute providers test-all omniroute providers validate ``` --- ## CLI рдЯреВрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди ### 1) рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ рдФрд░ API рдХреБрдВрдЬреА рдмрдирд╛рдПрдБ 1. Dashboard тЖТ `Providers` рдЦреЛрд▓реЗрдВ рдФрд░ рдХрдо-рд╕реЗ-рдХрдо рдПрдХ рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ (OAuth рдпрд╛ API рдХреБрдВрдЬреА) рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВред 2. Dashboard тЖТ `Endpoints` рдЦреЛрд▓реЗрдВ рдФрд░ рдПрдХ API рдХреБрдВрдЬреА рдмрдирд╛рдПрдБред 3. (рд╡реИрдХрд▓реНрдкрд┐рдХ) Dashboard тЖТ `Combos` рдЦреЛрд▓реЗрдВ рдФрд░ рдЕрдкрдиреА рдлрд╝реЙрд▓рдмреИрдХ рд╢реГрдВрдЦрд▓рд╛ рд╕реЗрдЯ рдХрд░реЗрдВред ### 2) рдЕрдкрдиреЗ рдХреЛрдбрд┐рдВрдЧ рдЯреВрд▓ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ ```txt рдмреЗрд╕ URL: http://localhost:20128/v1 API рдХреБрдВрдЬреА: [Endpoint рдкреЗрдЬ рд╕реЗ рдХреЙрдкреА рдХрд░реЗрдВ] рдореЙрдбрд▓: if/qwen3.8-max-preview (рдпрд╛ рдХреЛрдИ рднреА рдкреНрд░реЛрд╡рд╛рдЗрдбрд░/рдореЙрдбрд▓ рдкреНрд░реАрдлрд╝рд┐рдХреНрд╕) ``` рдпрджрд┐ рдЖрдкрдХрд╛ рдПрдбрд┐рдЯрд░ `Authorization: Bearer ...` рдирд╣реАрдВ рднреЗрдЬ рд╕рдХрддрд╛, рддреЛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЯреЛрдХрдирдпреБрдХреНрдд рд╕рдВрдЧрддрддрд╛ рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: ```txt рдмреЗрд╕ URL: http://localhost:20128/api/v1/vscode/YOUR_KEY/ рдореЙрдбрд▓ URL: http://localhost:20128/api/v1/vscode/YOUR_KEY/models рдЪреИрдЯ URL: http://localhost:20128/api/v1/vscode/YOUR_KEY/chat/completions Ollama рдЯреИрдЧ URL: http://localhost:20128/api/v1/vscode/YOUR_KEY/api/tags ``` рдпрд╣ Claude Code, Codex CLI, Cursor, Cline, OpenClaw, OpenCode рдФрд░ OpenAI-рд╕рдВрдЧрдд SDKs рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред #### `setup-*` рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ рдмреЗрд╕ URL рдФрд░ рдХреБрдВрдЬреА рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкреЗрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, OmniRoute рдХреЛ рд▓рд╛рдЗрд╡ рдореЙрдбрд▓ рдХреИрдЯрд▓реЙрдЧ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЯреВрд▓ рдХрд╛ рдЕрдкрдирд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд▓рд┐рдЦрдиреЗ рджреЗрдВред рдкреНрд░рддреНрдпреЗрдХ рдЯреВрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдорд╛рдВрдб: ```bash omniroute setup-codex # ~/.codex/.config.toml рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓реЗрдВ omniroute setup-claude # ~/.claude/profiles//settings.json omniroute setup-opencode # ~/.config/opencode/opencode.json (OpenAI-рд╕рдВрдЧрдд) omniroute setup-cline # Cline CLI + VS Code рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ omniroute setup-kilo # Kilo Code omniroute setup-continue # ~/.continue/config.yaml (Continue / cn) omniroute setup-cursor # Cursor рдореЗрдВ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЪрд░рдг рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ omniroute setup-roo # Roo Code рдЗрдореНрдкреЛрд░реНрдЯ + autoImport рдкреЙрдЗрдВрдЯрд░ omniroute setup-crush # ~/.config/crush/crush.json omniroute setup-zed # ~/.config/zed/settings.json (OpenAI-рд╕рдВрдЧрдд) omniroute setup-goose # ~/.config/goose/config.yaml omniroute setup-aider # ~/.aider.conf.yml omniroute setup-qwen # ~/.qwen/settings.json + ~/.qwen/.env ``` рд╕реНрдерд╛рдиреАрдп рдЯреВрд▓ рдХреЛ рдХрд┐рд╕реА **рд░рд┐рдореЛрдЯ** OmniRoute рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рд╣реЗрддреБ рдкреНрд░рддреНрдпреЗрдХ рдХрдорд╛рдВрдб `--remote --api-key ` рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдХреЗ рд▓рд┐рдП `--dry-run` рднреА рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рд╕рд╣реА env рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдХреЗ рдФрд░ рдХреЛрдИ рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд▓рд┐рдЦреЗ рдмрд┐рдирд╛ CLI рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд▓реЙрдиреНрдЪрд░ `omniroute run ` (claude, codex, aider, goose, opencode, qwen, gemini) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ; рдкреБрд░рд╛рдиреЗ рдкреНрд░рддрд┐-рдЯреВрд▓ рд▓реЙрдиреНрдЪрд░ `omniroute launch` (Claude Code) рдФрд░ `omniroute launch-codex` (Codex) рдЕрднреА рднреА рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рдкреВрд░реА рддрд╛рд▓рд┐рдХрд╛ (рдкреНрд░рддреНрдпреЗрдХ рдХрдорд╛рдВрдб рдХреНрдпрд╛ рд▓рд┐рдЦрддрд╛ рд╣реИ, рд╕рднреА рдлрд╝реНрд▓реИрдЧ, рд╕реНрдерд╛рдиреАрдп рдмрдирд╛рдо рд░рд┐рдореЛрдЯ, рдмреЗрд╕-URL `/v1` рдкрд░рдВрдкрд░рд╛рдПрдБ) рдХреЗ рд▓рд┐рдП, **[CLI рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди](./CLI-INTEGRATIONS.md)** рджреЗрдЦреЗрдВред рдкреНрд░рддреНрдпреЗрдХ рдЯреВрд▓ рдХреЗ рд╡рд┐рд╕реНрддреГрдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди (Claude Code, Codex CLI, Cursor, Cline, OpenClaw, Kilo Code, Copilot рдФрд░ рдЕрдиреНрдп) рдХреЗ рд▓рд┐рдП, рд╕рдорд░реНрдкрд┐рдд **[CLI рдЯреВрд▓реНрд╕ рдЧрд╛рдЗрдб](../reference/CLI-TOOLS.md)** рджреЗрдЦреЗрдВред --- ## рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕реЗрдЯрдЕрдк (MCP + A2A) ### MCP рд╕реЗрдЯрдЕрдк (Model Context Protocol) MCP рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ рдХреЛ stdio рдореЛрдб рдореЗрдВ рд╢реБрд░реВ рдХрд░реЗрдВ: ```bash omniroute --mcp ``` рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╕рддреНрдпрд╛рдкрди рдкреНрд░рд╡рд╛рд╣: ```bash # 1. MCP рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░реЗрдВ omniroute --mcp # 2. рдЕрдкрдиреЗ MCP рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдЗрдиреНрд╣реЗрдВ рдХреЙрд▓ рдХрд░реЗрдВ: omniroute_get_health # рд╕рд┐рд╕реНрдЯрдо рдХреА рд╕реНрдерд┐рддрд┐ рд▓реМрдЯрд╛рдиреА рдЪрд╛рд╣рд┐рдП omniroute_list_combos # рд╕рдХреНрд░рд┐рдп рдХреЙрдореНрдмреЛ рд▓реМрдЯрд╛рдиреЗ рдЪрд╛рд╣рд┐рдП # 3. рдпрд╛ рдкреВрд░рд╛ E2E рд╕реВрдЯ рдЪрд▓рд╛рдПрдБ: npm run test:protocols:e2e ``` #### MCP рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди **Claude Code:** ```bash claude mcp add-server omniroute --type http --url http://localhost:20128/api/mcp/stream ``` **Cursor / Cline:** рдЕрдкрдиреА MCP рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ: ```json { "mcpServers": { "omniroute": { "command": "omniroute", "args": ["--mcp"], "env": {} } } } ``` **рд╕рдВрдкреВрд░реНрдг MCP рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг:** [MCP Server README](../../open-sse/mcp-server/README.md) тАФ 110 рдЯреВрд▓, IDE рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди, Python/TS/Go рдХреНрд▓рд╛рдЗрдВрдЯред ### A2A рд╕реЗрдЯрдЕрдк (Agent-to-Agent Protocol) Agent Card рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ: ```bash curl http://localhost:20128/.well-known/agent.json ``` рдПрдХ рдХрд╛рд░реНрдп рднреЗрдЬреЗрдВ: ```bash curl -X POST http://localhost:20128/a2a \ -H 'content-type: application/json' \ -d '{"jsonrpc":"2.0","id":"quickstart","method":"message/send","params":{"skill":"quota-management","messages":[{"role":"user","content":"Give me a short quota summary."}]}}' ``` **рд╕рдВрдкреВрд░реНрдг A2A рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг:** [A2A Server README](../../src/lib/a2a/README.md) тАФ JSON-RPC 2.0, рдХреМрд╢рд▓, рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ, рдХрд╛рд░реНрдп рдЬреАрд╡рдирдЪрдХреНрд░ред --- ## рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди ### рдмреБрдирд┐рдпрд╛рджреА рдЯрд╛рдЗрдордЖрдЙрдЯ рдЕрдзрд┐рдХрд╛рдВрд╢ рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдЗрди рджреЛ рд╡реЗрд░рд┐рдПрдмрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ: | рд╡реЗрд░рд┐рдПрдмрд▓ | рдбрд┐рдлрд╝реЙрд▓реНрдЯ | рдЙрджреНрджреЗрд╢реНрдп | | ------------------------ | ------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | | `REQUEST_TIMEOUT_MS` | `600000` | рдЕрдкрд╕реНрдЯреНрд░реАрдо рд░рд┐рд╕реНрдкреЙрдиреНрд╕ рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреЗ рдЯрд╛рдЗрдордЖрдЙрдЯ, рдЫрд┐рдкреЗ рд╣реБрдП Undici рдЯрд╛рдЗрдордЖрдЙрдЯ, TLS рдлрд╝рд┐рдВрдЧрд░рдкреНрд░рд┐рдВрдЯ рдЕрдиреБрд░реЛрдзреЛрдВ рдФрд░ API рдмреНрд░рд┐рдЬ рдЕрдиреБрд░реЛрдз/рдкреНрд░реЙрдХреНрд╕реА рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рд▓рд┐рдП рд╕рд╛рдЭрд╛ рдЖрдзрд╛рд░ | | `STREAM_IDLE_TIMEOUT_MS` | `REQUEST_TIMEOUT_MS` рд╕реЗ рдкреНрд░рд╛рдкреНрдд | OmniRoute рджреНрд╡рд╛рд░рд╛ SSE рд╕реНрдЯреНрд░реАрдо рдХреЛ рдирд┐рд░рд╕реНрдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдЪрдВрдХреНрд╕ рдХреЗ рдмреАрдЪ рдЕрдзрд┐рдХрддрдо рдЕрдВрддрд░рд╛рд▓ | рдмреИрдХрд╡рд░реНрдб рдХрдореНрдкреИрдЯрд┐рдмрд┐рд▓рд┐рдЯреА рдмрд░рдХрд░рд╛рд░ рд░рдЦреА рдЧрдИ рд╣реИ: рдореМрдЬреВрджрд╛ `FETCH_TIMEOUT_MS`, `API_BRIDGE_PROXY_TIMEOUT_MS` рдФрд░ рдЕрдиреНрдп рдкреНрд░рддрд┐-рд▓реЗрдпрд░ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╡реЗрд░рд┐рдПрдмрд▓ рдЕрдм рднреА рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рд╛рдЭрд╛ рдЖрдзрд╛рд░ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддреЗ рд╣реИрдВред ### рдкреНрд░реЛрд╡рд╛рдЗрдбрд░-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ Claude Code-рд╕рдВрдЧрдд рдЕрдкрд╕реНрдЯреНрд░реАрдо (`anthropic-compatible-cc-*`) рдХреЗ рд▓рд┐рдП, OmniRoute рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдлрд╝реЗрдЪ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╕реЗ рдЖрдЙрдЯрдмрд╛рдЙрдВрдб `X-Stainless-Timeout` рд╣реЗрдбрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдкреНрд░реЛрд╡рд╛рдЗрдбрд░-рд╕рд╛рдЗрдб рд░реАрдб рдЯрд╛рдЗрдордЖрдЙрдЯ рдЖрдкрдХреЗ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдЕрдиреБрд░реВрдк рд░рд╣реЗрдВред рддреГрддреАрдп-рдкрдХреНрд╖ Claude Code-рд╕рдВрдЧрдд рд░рд┐рд╡рд░реНрд╕ рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рд▓рд┐рдП, OmniRoute рдбрд┐рдлрд╝реЙрд▓реНрдЯ `anthropic-beta` рд╕реЗрдЯ рдХреЛ рд╕реАрдорд┐рдд рд░рдЦрддрд╛ рд╣реИ рдФрд░ рдЬрдм `Client Cache Control` рдХреЛ `Auto` рдкрд░ рдЫреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХреЗрд╡рд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рджреНрд╡рд╛рд░рд╛ рджрд┐рдП рдЧрдП `cache_control` рдорд╛рд░реНрдХрд░ рдлрд╝реЙрд░рд╡рд░реНрдб рдХрд░рддрд╛ рд╣реИред рдкреНрд░рддрд┐-рдХрдиреЗрдХреНрд╢рди "рд░реАрдбреИрдХреНрдЯ-рдерд┐рдВрдХрд┐рдВрдЧ рдмреАрдЯрд╛ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ" рдЯреЙрдЧрд▓ рдХреЗрд╡рд▓ рддрднреА рд╕рдХреНрд╖рдо рдХрд░реЗрдВ, рдЬрдм рдЕрдкрд╕реНрдЯреНрд░реАрдо рдХреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд░реАрдбреИрдХреНрдЯ рдХреА рдЧрдИ Claude рдерд┐рдВрдХрд┐рдВрдЧ рд╕реНрдЯреНрд░реАрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛред ### рдЙрдиреНрдирдд рдЯрд╛рдЗрдордЖрдЙрдЯ рдУрд╡рд░рд░рд╛рдЗрдб | рд╡реЗрд░рд┐рдПрдмрд▓ | рдбрд┐рдлрд╝реЙрд▓реНрдЯ | рдЙрджреНрджреЗрд╢реНрдп | | ---------------------------------------- | ------------------------------------------- | ------------------------------------------------------------------------------ | | `FETCH_TIMEOUT_MS` | `REQUEST_TIMEOUT_MS` рд╕реЗ рдкреНрд░рд╛рдкреНрдд | рд░рд┐рд╕реНрдкреЙрдиреНрд╕ рд╣реЗрдбрд░ рдЖрдиреЗ рддрдХ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдЕрдкрд╕реНрдЯреНрд░реАрдо рд░рд┐рд╕реНрдкреЙрдиреНрд╕-рд╕реНрдЯрд╛рд░реНрдЯ рдЯрд╛рдЗрдордЖрдЙрдЯ | | `FETCH_HEADERS_TIMEOUT_MS` | `FETCH_TIMEOUT_MS` рд╕реЗ рдкреНрд░рд╛рдкреНрдд | рдЕрдкрд╕реНрдЯреНрд░реАрдо рд░рд┐рд╕реНрдкреЙрдиреНрд╕ рд╣реЗрдбрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Undici рдХреА рд╕рдордп-рд╕реАрдорд╛ | | `FETCH_BODY_TIMEOUT_MS` | `FETCH_TIMEOUT_MS` рд╕реЗ рдкреНрд░рд╛рдкреНрдд | рдЕрдкрд╕реНрдЯреНрд░реАрдо рдмреЙрдбреА рдЪрдВрдХреНрд╕ рдХреЗ рдмреАрдЪ Undici рдХреА рд╕рдордп-рд╕реАрдорд╛ (`0` рдЗрд╕реЗ рдЕрдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИ) | | `FETCH_CONNECT_TIMEOUT_MS` | `30000` | Undici TCP рдХрдиреЗрдХреНрдЯ рдЯрд╛рдЗрдордЖрдЙрдЯ | | `FETCH_KEEPALIVE_TIMEOUT_MS` | `4000` | Undici рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХреАрдк-рдЕрд▓рд╛рдЗрд╡ рд╕реЙрдХреЗрдЯ рдЯрд╛рдЗрдордЖрдЙрдЯ | | `TLS_CLIENT_TIMEOUT_MS` | `FETCH_TIMEOUT_MS` рд╕реЗ рдкреНрд░рд╛рдкреНрдд | `wreq-js` рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдП рдЧрдП TLS рдлрд╝рд┐рдВрдЧрд░рдкреНрд░рд┐рдВрдЯ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдЯрд╛рдЗрдордЖрдЙрдЯ | | `API_BRIDGE_PROXY_TIMEOUT_MS` | `REQUEST_TIMEOUT_MS` рдпрд╛ `600000` рд╕реЗ рдкреНрд░рд╛рдкреНрдд | API рдкреЛрд░реНрдЯ рд╕реЗ рдбреИрд╢рдмреЛрд░реНрдб рдкреЛрд░реНрдЯ рддрдХ `/v1` рдкреНрд░реЙрдХреНрд╕реА рдлрд╝реЙрд░рд╡рд░реНрдбрд┐рдВрдЧ рдХрд╛ рдЯрд╛рдЗрдордЖрдЙрдЯ | | `API_BRIDGE_SERVER_REQUEST_TIMEOUT_MS` | `max(API_BRIDGE_PROXY_TIMEOUT_MS, 300000)` | API рдмреНрд░рд┐рдЬ рд╕рд░реНрд╡рд░ рдкрд░ рдЗрдирдХрдорд┐рдВрдЧ рдЕрдиреБрд░реЛрдз рдХрд╛ рдЯрд╛рдЗрдордЖрдЙрдЯ | | `API_BRIDGE_SERVER_HEADERS_TIMEOUT_MS` | `60000` | API рдмреНрд░рд┐рдЬ рд╕рд░реНрд╡рд░ рдкрд░ рдЗрдирдХрдорд┐рдВрдЧ рд╣реЗрдбрд░ рдХрд╛ рдЯрд╛рдЗрдордЖрдЙрдЯ | | `API_BRIDGE_SERVER_KEEPALIVE_TIMEOUT_MS` | `5000` | API рдмреНрд░рд┐рдЬ рд╕рд░реНрд╡рд░ рдкрд░ рдХреАрдк-рдЕрд▓рд╛рдЗрд╡ рдЯрд╛рдЗрдордЖрдЙрдЯ | | `API_BRIDGE_SERVER_SOCKET_TIMEOUT_MS` | `0` | API рдмреНрд░рд┐рдЬ рд╕рд░реНрд╡рд░ рдкрд░ рд╕реЙрдХреЗрдЯ рдирд┐рд╖реНрдХреНрд░рд┐рдпрддрд╛ рдЯрд╛рдЗрдордЖрдЙрдЯ (`0` рдЗрд╕реЗ рдЕрдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИ) | > **рдиреЛрдЯ:** рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП, `FETCH_TIMEOUT_MS` рдХреЗрд╡рд▓ рдХрдиреЗрдХреНрд╢рди рд╕реЗрдЯрдЕрдк / рдкрд╣рд▓реЗ рдЕрдкрд╕реНрдЯреНрд░реАрдо рд░рд┐рд╕реНрдкреЙрдиреНрд╕ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЛ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИред рд╕реНрдЯреНрд░реАрдо рд╕рдХреНрд░рд┐рдп рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, OmniRoute рдХреЗрд╡рд▓ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд░реБрдХрд╛рд╡рдЯ (`STREAM_IDLE_TIMEOUT_MS`) рдпрд╛ Undici рдмреЙрдбреА рдирд┐рд╖реНрдХреНрд░рд┐рдпрддрд╛ (`FETCH_BODY_TIMEOUT_MS`) рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реА рдЗрд╕реЗ рдирд┐рд░рд╕реНрдд рдХрд░реЗрдЧрд╛ред ### рд░рд┐рд╡рд░реНрд╕ рдкреНрд░реЙрдХреНрд╕реА рд╕рдВрдЧрддрддрд╛ рдпрджрд┐ рдЖрдк OmniRoute рдХреЛ Nginx, Caddy, Cloudflare рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд░рд┐рд╡рд░реНрд╕ рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рдкреАрдЫреЗ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдкреНрд░реЙрдХреНрд╕реА рдЯрд╛рдЗрдордЖрдЙрдЯ рднреА рдЖрдкрдХреЗ OmniRoute рд╕реНрдЯреНрд░реАрдо/рдлрд╝реЗрдЪ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдВред --- ## рд╕реНрдкреНрд▓рд┐рдЯ-рдкреЛрд░реНрдЯ рдореЛрдб рдЙрдиреНрдирдд рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ (рд░рд┐рд╡рд░реНрд╕ рдкреНрд░реЙрдХреНрд╕реА, рдХрдВрдЯреЗрдирд░ рдиреЗрдЯрд╡рд░реНрдХрд┐рдВрдЧ) рдХреЗ рд▓рд┐рдП API рдФрд░ рдбреИрд╢рдмреЛрд░реНрдб рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреЛрд░реНрдЯ рдкрд░ рдЪрд▓рд╛рдПрдБ: ```bash PORT=20128 DASHBOARD_PORT=20129 omniroute # API: http://localhost:20128/v1 # рдбреИрд╢рдмреЛрд░реНрдб: http://localhost:20129 ``` --- ## Void Linux (`xbps-src`) рдЯреЗрдореНрдкрд▓реЗрдЯ Void Linux рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ `xbps-src` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдиреЗрдЯрд┐рд╡ рдкреИрдХреЗрдЬ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдмреНрд▓реЙрдХ рдХреЛ `srcpkgs/omniroute/template` рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВ: ```bash # 'omniroute' рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдлрд╝рд╛рдЗрд▓ pkgname=omniroute version=3.8.0 revision=1 hostmakedepends="nodejs python3 make" depends="openssl" short_desc="Universal AI gateway with smart routing for multiple LLM providers" maintainer="zenobit " license="MIT" homepage="https://github.com/diegosouzapw/OmniRoute" distfiles="https://github.com/diegosouzapw/OmniRoute/archive/refs/tags/v${version}.tar.gz" # рдкреНрд░рддреНрдпреЗрдХ рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдЪреЗрдХрд╕рдо рдХреЛ рдЗрд╕ рдХрдорд╛рдВрдб рд╕реЗ рдкреБрдирдГ рдЬрдирд░реЗрдЯ рдХрд░реЗрдВ: # curl -L -o /tmp/omniroute.tar.gz "https://github.com/diegosouzapw/OmniRoute/archive/refs/tags/v${version}.tar.gz" && sha256sum /tmp/omniroute.tar.gz checksum=PLACEHOLDER_REGENERATE_PER_RELEASE system_accounts="_omniroute" omniroute_homedir="/var/lib/omniroute" export NODE_ENV=production export npm_config_engine_strict=false export npm_config_loglevel=error export npm_config_fund=false export npm_config_audit=false do_build() { local _gyp_arch case "$XBPS_TARGET_MACHINE" in aarch64*) _gyp_arch=arm64 ;; armv7*|armv6*) _gyp_arch=arm ;; i686*) _gyp_arch=ia32 ;; *) _gyp_arch=x64 ;; esac NODE_ENV=development npm ci --ignore-scripts npm run build cp -r .next/static .next/standalone/.next/static [ -d public ] && cp -r public .next/standalone/public || true local _node_gyp=/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js (cd node_modules/better-sqlite3 && node "$_node_gyp" rebuild --arch="$_gyp_arch") local _bs3_release=.next/standalone/node_modules/better-sqlite3/build/Release mkdir -p "$_bs3_release" cp node_modules/better-sqlite3/build/Release/better_sqlite3.node "$_bs3_release/" rm -rf .next/standalone/node_modules/@img for _mod in pino-abstract-transport split2 process-warning; do cp -r "node_modules/$_mod" .next/standalone/node_modules/ done } do_check() { npm run test:unit } do_install() { vmkdir usr/lib/omniroute/.next vcopy .next/standalone/. usr/lib/omniroute/.next/standalone for _d in \ .next/standalone/.next/server/app/dashboard \ .next/standalone/.next/server/app/dashboard/settings \ .next/standalone/.next/server/app/dashboard/providers; do touch "${DESTDIR}/usr/lib/omniroute/${_d}/.keep" done cat > "${WRKDIR}/omniroute" <<'EOF' #!/bin/sh export PORT="${PORT:-20128}" export DATA_DIR="${DATA_DIR:-${XDG_DATA_HOME:-${HOME}/.local/share}/omniroute}" export APP_LOG_TO_FILE="${APP_LOG_TO_FILE:-false}" mkdir -p "${DATA_DIR}" exec node /usr/lib/omniroute/.next/standalone/server.js "$@" EOF vbin "${WRKDIR}/omniroute" } post_install() { vlicense LICENSE } ``` --- ## рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ | рдХрдорд╛рдВрдб | рдХрд╛рд░реНрд░рд╡рд╛рдИ | | ------------------------ | ------------------------------------------------------------------------------------------------------ | | `npm run uninstall` | рд╕рд┐рд╕реНрдЯрдо рдРрдк рдХреЛ рд╣рдЯрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди `~/.omniroute` рдореЗрдВ рдореМрдЬреВрдж **рдЖрдкрдХреЗ DB рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рдЦрддрд╛ рд╣реИ**ред | | `npm run uninstall:full` | рдРрдк рдХреЛ рд╣рдЯрд╛рддрд╛ рд╣реИ рдФрд░ **рд╕рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди, рдХреБрдВрдЬрд┐рдпреЛрдВ рддрдерд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдорд┐рдЯрд╛ рджреЗрддрд╛ рд╣реИ**ред | > рд╕рднреА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╕реНрддреГрдд рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓ рдирд┐рд░реНрджреЗрд╢реЛрдВ рд╣реЗрддреБ [UNINSTALL.md](./UNINSTALL.md) рджреЗрдЦреЗрдВред