# ๐Ÿ“– 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) ยท ๐Ÿ‡ฎ๐Ÿ‡ณ [hi](../../../hi/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) ยท ๐Ÿ‡ฎ๐Ÿ‡ณ [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` แž แžพแž™ URL แž˜แžผแž›แžŠแŸ’แž‹แžถแž“แžšแž”แžŸแŸ‹ API แž‚แžบ `http://localhost:20128/v1`แŸ” ### pnpm ```bash pnpm add -g omniroute@latest --allow-build=better-sqlite3 --allow-build=@swc/core omniroute ``` > **แžขแŸ’แž“แž€แž”แŸ’แžšแžพ pnpmแŸ–** แžแŸ’แžšแžผแžœแž€แžถแžšแž‘แž„แŸ‹ `--allow-build` แžŠแžพแž˜แŸ’แž”แžธแž”แžพแž€แžŸแŸ’แž‚แŸ’แžšแžธแž” build แžŠแžพแž˜แžŸแž˜แŸ’แžšแžถแž”แŸ‹ `better-sqlite3` แž“แžทแž„ `@swc/core`แŸ” แž–แžถแž€แŸ’แž™แž”แž‰แŸ’แž‡แžถ `pnpm approve-builds -g` แž˜แžทแž“แžแŸ’แžšแžผแžœแž”แžถแž“แž‚แžถแŸ†แž‘แŸ’แžšแžŸแž˜แŸ’แžšแžถแž”แŸ‹แž€แžถแžšแžŠแŸ†แžกแžพแž„แž‡แžถแžŸแž€แž›แž›แžพ pnpm v11 แž‘แŸแŸ” ### 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แŸ–** แžแžถแž˜แž›แŸ†แž“แžถแŸ†แžŠแžพแž˜ OmniRoute แž”แŸ’แžšแžพ `%APPDATA%\omniroute` แž“แŸ…แž–แŸแž›แž˜แžทแž“แž˜แžถแž“แžแžแž…แžถแžŸแŸ‹ `%USERPROFILE%\.omniroute`แŸ” แž€แŸ†แžŽแžแŸ‹ `DATA_DIR` แžŠแžพแž˜แŸ’แž”แžธแž‡แŸ’แžšแžพแžŸแžšแžพแžŸแž‘แžธแžแžถแŸ†แž„แžแžแž‘แžทแž“แŸ’แž“แž“แŸแž™แž•แŸ’แžŸแŸแž„แŸ” > **แž…แŸ†แžŽแžถแŸ†แŸ–** `npm install` แž”แž„แŸ’แž€แžพแž `.env` แžŠแŸ„แž™แžŸแŸ’แžœแŸแž™แž”แŸ’แžšแžœแžแŸ’แžแžทแž–แžธ `.env.example` แž“แŸ…แž–แŸแž›แžŠแŸ†แžŽแžพแžšแž€แžถแžšแž›แžพแž€แžŠแŸ†แž”แžผแž„แŸ” แž€แžถแžšแžŠแŸ†แžกแžพแž„แž”แž“แŸ’แž‘แžถแž”แŸ‹แž“แžนแž„แž˜แžทแž“แžŸแžšแžŸแŸแžšแž‡แžถแž“แŸ‹แž›แžพ `.env` แžŠแŸ‚แž›แž˜แžถแž“แžŸแŸ’แžšแžถแž”แŸ‹แž‘แŸ แžŠแžผแž…แŸ’แž“แŸแŸ‡แž€แžถแžšแž€แŸ‚แžแž˜แŸ’แžšแžผแžœแž•แŸ’แž‘แžถแž›แŸ‹แžแŸ’แž›แžฝแž“แžแŸ’แžšแžผแžœแž”แžถแž“แžšแž€แŸ’แžŸแžถแž‘แžปแž€แŸ” แžŠแžพแž˜แŸ’แž”แžธแž”แž„แŸ’แž€แžพแžแžœแžถแžกแžพแž„แžœแžทแž‰ แžŸแžผแž˜แž›แžปแž” `.env` แž˜แžปแž“แž–แŸแž›แžŠแŸ†แžŽแžพแžšแž€แžถแžšแž˜แŸ’แžŠแž„แž‘แŸ€แžแŸ” ### Docker แžŸแžผแž˜แž˜แžพแž› [แž˜แž‚แŸ’แž‚แžปแž‘แŸ’แž‘แŸแžŸแž€แŸ Docker](./DOCKER_GUIDE.md) แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž€แžถแžšแžŠแŸ†แžกแžพแž„ Docker แž–แŸแž‰แž›แŸแž‰ แžšแžฝแž˜แž‘แžถแŸ†แž„แž”แŸ’แžšแžผแž แŸ’แžœแžถแž›แŸ‹ Compose แž“แžทแž„ Caddy HTTPSแŸ” ### แž€แž˜แŸ’แž˜แžœแžทแž’แžธแž•แŸ’แž‘แŸƒแžแžป (Electron) OmniRoute แž•แŸ’แžŠแž›แŸ‹แž‡แžผแž“แž€แž˜แŸ’แž˜แžœแžทแž’แžธแž‚แŸ’แžšแž”แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž•แŸ’แž‘แŸƒแžแžปแžŠแŸ‚แž›แž”แž„แŸ’แž€แžพแžแžกแžพแž„แž›แžพ Electron 41 + electron-builder 26.10แŸ” แžŸแŸ’แž‚แŸ’แžšแžธแž”แžŠแŸ‚แž›แžขแžถแž…แž”แŸ’แžšแžพแž”แžถแž“ (แžแžแžซแžŸแžšแž”แžŸแŸ‹ workspace)แŸ– ```bash npm run electron:dev # แžŠแŸ†แžŽแžพแžšแž€แžถแžšแž€แž˜แŸ’แž˜แžœแžทแž’แžธแž•แŸ’แž‘แŸƒแžแžปแž‡แžถแž˜แžฝแž™แž€แžถแžšแž•แŸ’แž‘แžปแž€แžกแžพแž„แžœแžทแž‰แžŠแŸ„แž™แžŸแŸ’แžœแŸแž™แž”แŸ’แžšแžœแžแŸ’แžแžท npm run electron:build # Build แžŸแž˜แŸ’แžšแžถแž”แŸ‹ OS แž”แž…แŸ’แž…แžปแž”แŸ’แž”แž“แŸ’แž“ (แžšแž€แžƒแžพแž‰แžŠแŸ„แž™แžŸแŸ’แžœแŸแž™แž”แŸ’แžšแžœแžแŸ’แžแžท) npm run electron:build:win # แž€แž˜แŸ’แž˜แžœแžทแž’แžธแžŠแŸ†แžกแžพแž„ Windows (NSIS + portable) npm run electron:build:mac # macOS (dmg + zip, arm64+x64) npm run electron:build:linux # Linux (AppImage + deb + rpm) npm run electron:smoke:packaged # แžŸแžถแž€แž›แŸ’แž”แž„ smoke แž›แžพ build แžŠแŸ‚แž›แž”แžถแž“แžœแŸแž…แžแŸ’แž…แž”แŸ‹ ``` แž€แŸ†แžŽแŸ‚แž…แŸแž‰แž•แŸ’แžŸแžถแž™แž“แŸƒแž€แž˜แŸ’แž˜แžœแžทแž’แžธแžŠแŸ†แžกแžพแž„แž•แŸ’แž‘แŸƒแžแžปแžแŸ’แžšแžผแžœแž”แžถแž“แž—แŸ’แž‡แžถแž”แŸ‹แž‡แžถแž˜แžฝแž™ GitHub ReleasesแŸ” แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž–แŸแžแŸŒแž˜แžถแž“แž›แž˜แŸ’แžขแžทแžแžŸแŸŠแžธแž‡แž˜แŸ’แžšแŸ…แž–แŸแž‰แž›แŸแž‰แžขแŸ†แž–แžธ Electron (แž€แžถแžšแž…แžปแŸ‡แž แžแŸ’แžแž›แŸแžแžถ, แžŸแŸ’แž–แžถแž“ IPC, แž€แžถแžšแž…แŸ‚แž€แž…แžถแž™) แžŸแžผแž˜แž˜แžพแž› [`ELECTRON_GUIDE.md`](./ELECTRON_GUIDE.md) _(แž”แžถแž“แž”แž„แŸ’แž€แžพแžแž“แŸ…แžŠแŸ†แžŽแžถแž€แŸ‹แž€แžถแž›แž€แŸ’แžšแŸ„แž™)_แŸ” ### แž˜แŸ‰แžถแžŸแŸŠแžธแž“แž˜แŸแž‚แŸ’แž˜แžถแž“แž…แŸ†แžŽแžปแž…แž”แŸ’แžšแž‘แžถแž€แŸ‹ (CI/แžŸแŸ’แžœแŸแž™แž”แŸ’แžšแžœแžแŸ’แžแžทแž€แž˜แŸ’แž˜) แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž€แžถแžšแžŠแŸ†แžกแžพแž„แžŠแŸ„แž™แž˜แžทแž“แžแŸ’แžšแžผแžœแž€แžถแžšแžขแŸ’แž“แž€แž˜แžพแž›แž€แžถแžšแžแžปแžŸแžแŸ’แžšแžผแžœ (Docker, Kubernetes, CI) แžŸแžผแž˜แž”แŸ’แžšแžพแŸ– ```bash omniroute setup --non-interactive omniroute providers test-batch ``` แž“แŸ…แž–แŸแž›แž”แŸ’แžšแžพแžšแžฝแž˜แž‚แŸ’แž“แžถแž‡แžถแž˜แžฝแž™แžขแžแŸแžšแž”แžšแžทแžŸแŸ’แžแžถแž“ (`INITIAL_PASSWORD`, `OMNIROUTE_WS_BRIDGE_SECRET` แž‡แžถแžŠแžพแž˜) แžœแžถแžขแž“แžปแž‰แŸ’แž‰แžถแžแžฑแŸ’แž™แžขแŸ’แž“แž€แžŠแŸ†แžŽแžพแžšแž€แžถแžš instance แžšแž”แžŸแŸ‹ 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` | แž€แŸ†แžŽแžแŸ‹แž…แŸ’แžšแž€ canonical/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 Key 1. แž”แžพแž€ Dashboard โ†’ `Providers` แž แžพแž™แž—แŸ’แž‡แžถแž”แŸ‹แžขแŸ’แž“แž€แž•แŸ’แžŠแž›แŸ‹แžŸแŸแžœแžถแž™แŸ‰แžถแž„แž แŸ„แž…แžŽแžถแžŸแŸ‹แž˜แžฝแž™ (OAuth แžฌ API key)แŸ” 2. แž”แžพแž€ Dashboard โ†’ `Endpoints` แž แžพแž™แž”แž„แŸ’แž€แžพแž API key แž˜แžฝแž™แŸ” 3. (แž‡แžถแž‡แž˜แŸ’แžšแžพแžŸ) แž”แžพแž€ Dashboard โ†’ `Combos` แž แžพแž™แž€แŸ†แžŽแžแŸ‹แžแŸ’แžŸแŸ‚แžŸแž„แŸ’แžšแŸ’แž‚แŸ„แŸ‡แž”แž˜แŸ’แžšแžปแž„แžšแž”แžŸแŸ‹แžขแŸ’แž“แž€แŸ” ### 2) แž—แŸ’แž‡แžถแž”แŸ‹แžงแž”แž€แžšแžŽแŸแžŸแžšแžŸแŸแžšแž€แžผแžŠแžšแž”แžŸแŸ‹แžขแŸ’แž“แž€ ```txt Base URL: http://localhost:20128/v1 API Key: [copy from Endpoint page] Model: if/qwen3.8-max-preview (or any provider/model prefix) ``` แž”แŸ’แžšแžŸแžทแž“แž”แžพแž€แž˜แŸ’แž˜แžœแžทแž’แžธแž€แŸ‚แžŸแž˜แŸ’แžšแžฝแž›แžšแž”แžŸแŸ‹แžขแŸ’แž“แž€แž˜แžทแž“แžขแžถแž…แž•แŸ’แž‰แžพ `Authorization: Bearer ...` แž”แžถแž“แž‘แŸ แžŸแžผแž˜แž”แŸ’แžšแžพ base แžŠแŸ‚แž›แžแŸ’แžšแžผแžœแž‚แŸ’แž“แžถ แž“แžทแž„แž˜แžถแž“ token แž‡แŸ†แž“แžฝแžŸแžœแžทแž‰แŸ– ```txt Base URL: http://localhost:20128/api/v1/vscode/YOUR_KEY/ Models URL: http://localhost:20128/api/v1/vscode/YOUR_KEY/models Chat URL: http://localhost:20128/api/v1/vscode/YOUR_KEY/chat/completions Ollama Tags URL: http://localhost:20128/api/v1/vscode/YOUR_KEY/api/tags ``` แžŠแŸ†แžŽแžพแžšแž€แžถแžšแž‡แžถแž˜แžฝแž™ Claude Code, Codex CLI, Cursor, Cline, OpenClaw, OpenCode แž“แžทแž„ SDK แžŠแŸ‚แž›แžแŸ’แžšแžผแžœแž‚แŸ’แž“แžถแž‡แžถแž˜แžฝแž™ OpenAIแŸ” #### แž€แŸ†แžŽแžแŸ‹แžšแž…แž“แžถแžŸแž˜แŸ’แž–แŸแž“แŸ’แž’แžŠแŸ„แž™แžŸแŸ’แžœแŸแž™แž”แŸ’แžšแžœแžแŸ’แžแžทแž‡แžถแž˜แžฝแž™ `setup-*` แž‡แŸ†แž“แžฝแžŸแžฑแŸ’แž™แž€แžถแžšแž”แžทแž‘แž—แŸ’แž‡แžถแž”แŸ‹ base URL แž“แžทแž„ key แžŠแŸ„แž™แžŠแŸƒ แžขแž“แžปแž‰แŸ’แž‰แžถแžแžฑแŸ’แž™ 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-goose # ~/.config/goose/config.yaml omniroute setup-aider # ~/.aider.conf.yml omniroute setup-qwen # ~/.qwen/settings.json + ~/.qwen/.env ``` แž–แžถแž€แŸ’แž™แž”แž‰แŸ’แž‡แžถแž“แžธแž˜แžฝแž™แŸ—แž‘แž‘แžฝแž›แž™แž€ `--remote --api-key ` แžŠแžพแž˜แŸ’แž”แžธแž€แŸ†แžŽแžแŸ‹แžšแž…แž“แžถแžŸแž˜แŸ’แž–แŸแž“แŸ’แž’แžงแž”แž€แžšแžŽแŸแž˜แžผแž›แžŠแŸ’แž‹แžถแž“แžฑแŸ’แž™แž”แŸ’แžšแžพแž‡แžถแž˜แžฝแž™ OmniRoute **แž–แžธแž…แž˜แŸ’แž„แžถแž™** แž–แŸ’แžšแž˜แž‘แžถแŸ†แž„ `--dry-run` แžŠแžพแž˜แŸ’แž”แžธแž˜แžพแž›แž‡แžถแž˜แžปแž“แŸ” แžŠแžพแž˜แŸ’แž”แžธแž…แžถแž”แŸ‹แž•แŸ’แžŠแžพแž˜ CLI แžŠแŸ„แž™แž”แžถแž“แž”แž‰แŸ’แž…แžผแž› env แžแŸ’แžšแžนแž˜แžแŸ’แžšแžผแžœ แž“แžทแž„แž˜แžทแž“แžŸแžšแžŸแŸแžšแž€แžถแžšแž€แŸ†แžŽแžแŸ‹แžšแž…แž“แžถแžŸแž˜แŸ’แž–แŸแž“แŸ’แž’แžขแŸ’แžœแžธแž‘แžถแŸ†แž„แžขแžŸแŸ‹ แžŸแžผแž˜แž”แŸ’แžšแžพแž€แž˜แŸ’แž˜แžœแžทแž’แžธแž…แžถแž”แŸ‹แž•แŸ’แžŠแžพแž˜แž‘แžผแž‘แŸ… `omniroute run ` (claude, codex, aider, goose, opencode, qwen, gemini); แž€แž˜แŸ’แž˜แžœแžทแž’แžธแž…แžถแž”แŸ‹แž•แŸ’แžŠแžพแž˜แž‡แžถแž€แŸ‹แž›แžถแž€แŸ‹แžแžถแž˜แžงแž”แž€แžšแžŽแŸแž…แžถแžŸแŸ‹แŸ— `omniroute launch` (Claude Code) แž“แžทแž„ `omniroute launch-codex` (Codex) แž“แŸ…แžแŸ‚แžขแžถแž…แž”แŸ’แžšแžพแž”แžถแž“แŸ” แžŸแž˜แŸ’แžšแžถแž”แŸ‹แžแžถแžšแžถแž„แž–แŸแž‰แž›แŸแž‰ (แžขแŸ’แžœแžธแžŠแŸ‚แž›แž–แžถแž€แŸ’แž™แž”แž‰แŸ’แž‡แžถแž“แžธแž˜แžฝแž™แŸ—แžŸแžšแžŸแŸแžš, flag แž‘แžถแŸ†แž„แžขแžŸแŸ‹, แž˜แžผแž›แžŠแŸ’แž‹แžถแž“แž’แŸ€แž”แž“แžนแž„แž–แžธแž…แž˜แŸ’แž„แžถแž™, แžขแž“แžปแžŸแž‰แŸ’แž‰แžถ base-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) แž…แžถแž”แŸ‹แž•แŸ’แžŠแžพแž˜ transport MCP แž€แŸ’แž“แžปแž„แžšแž”แŸ€แž” stdioแŸ– ```bash omniroute --mcp ``` แž›แŸ†แž แžผแžšแž•แŸ’แž‘แŸ€แž„แž•แŸ’แž‘แžถแžแŸ‹แžŠแŸ‚แž›แž”แžถแž“แžŽแŸ‚แž“แžถแŸ†แŸ– ```bash # 1. แž…แžถแž”แŸ‹แž•แŸ’แžŠแžพแž˜แž˜แŸ‰แžถแžŸแŸŠแžธแž“แž˜แŸ MCP omniroute --mcp # 2. แž–แžธแž˜แŸ‰แžถแžŸแŸŠแžธแž“แž—แŸ’แž‰แŸ€แžœ MCP แžšแž”แžŸแŸ‹แžขแŸ’แž“แž€ แžŸแžผแž˜แž แŸ…แŸ– omniroute_get_health # แž‚แžฝแžšแžแŸ‚แžแŸ’แžšแžกแž”แŸ‹แžŸแŸ’แžแžถแž“แž—แžถแž–แžŸแžปแžแž—แžถแž–แž”แŸ’แžšแž–แŸแž“แŸ’แž’ omniroute_list_combos # แž‚แžฝแžšแžแŸ‚แžแŸ’แžšแžกแž”แŸ‹ 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 แž–แŸแž‰แž›แŸแž‰แŸ–** [README แžšแž”แžŸแŸ‹แž˜แŸ‰แžถแžŸแŸŠแžธแž“แž˜แŸ MCP](../../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 แž–แŸแž‰แž›แŸแž‰แŸ–** [README แžšแž”แžŸแŸ‹แž˜แŸ‰แžถแžŸแŸŠแžธแž“แž˜แŸ A2A](../../src/lib/a2a/README.md) โ€” JSON-RPC 2.0, แž‡แŸ†แž“แžถแž‰, แž€แžถแžšแžŸแŸ’แž‘แŸ’แžšแžธแž˜, แžœแžŠแŸ’แžแž‡แžธแžœแžทแžแž—แžถแžšแž€แžทแž…แŸ’แž…แŸ” --- ## แž€แžถแžšแž€แŸ†แžŽแžแŸ‹แžšแž…แž“แžถแžŸแž˜แŸ’แž–แŸแž“แŸ’แž’ Timeout ### Timeout แž˜แžผแž›แžŠแŸ’แž‹แžถแž“ แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž€แžถแžšแžŠแžถแž€แŸ‹แžฑแŸ’แž™แžŠแŸ†แžŽแžพแžšแž€แžถแžšแž—แžถแž‚แž…แŸ’แžšแžพแž“ แžขแŸ’แž“แž€แžแŸ’แžšแžผแžœแž€แžถแžšแžแŸ‚แžขแžแŸแžšแž‘แžถแŸ†แž„แž–แžธแžšแž“แŸแŸ‡แž”แŸ‰แžปแžŽแŸ’แžŽแŸ„แŸ‡แŸ– | แžขแžแŸแžš | แžแž˜แŸ’แž›แŸƒแž›แŸ†แž“แžถแŸ†แžŠแžพแž˜ | แž‚แŸ„แž›แž”แŸ†แžŽแž„ | | ------------------------ | ------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | | `REQUEST_TIMEOUT_MS` | `600000` | แžแž˜แŸ’แž›แŸƒแž‚แŸ„แž›แžšแžฝแž˜แžŸแž˜แŸ’แžšแžถแž”แŸ‹ timeout แž“แŸƒแž€แžถแžšแž…แžถแž”แŸ‹แž•แŸ’แžแžพแž˜แž€แžถแžšแž†แŸ’แž›แžพแž™แžแž”แž–แžธ upstream, timeout แž›แžถแž€แŸ‹แžšแž”แžŸแŸ‹ Undici, แžŸแŸ†แžŽแžพ TLS fingerprint แž“แžทแž„ timeout แžŸแŸ†แžŽแžพ/proxy แžšแž”แžŸแŸ‹ API bridge | | `STREAM_IDLE_TIMEOUT_MS` | แž‘แž‘แžฝแž›แž˜แžšแžแž€แž–แžธ `REQUEST_TIMEOUT_MS` | แž…แž“แŸ’แž›แŸ„แŸ‡แž–แŸแž›แžขแžแžทแž”แžšแž˜แžถแžšแžœแžถแž„ streaming chunks แž˜แžปแž“แž–แŸแž› OmniRoute แž”แŸ„แŸ‡แž”แž„แŸ‹ SSE stream | แž—แžถแž–แž†แž”แž‚แŸ’แž“แžถแžแž™แž€แŸ’แžšแŸ„แž™แžแŸ’แžšแžผแžœแž”แžถแž“แžšแž€แŸ’แžŸแžถแž‘แžปแž€แŸ– `FETCH_TIMEOUT_MS`, `API_BRIDGE_PROXY_TIMEOUT_MS` แž“แžทแž„แžขแžแŸแžš timeout แž•แŸ’แžŸแŸแž„แž‘แŸ€แžแžŸแž˜แŸ’แžšแžถแž”แŸ‹แžŸแŸ’แžšแž‘แžถแž”แŸ‹แž“แžธแž˜แžฝแž™แŸ—แžŠแŸ‚แž›แž˜แžถแž“แžŸแŸ’แžšแžถแž”แŸ‹แž“แŸ…แžแŸ‚แžŠแŸ†แžŽแžพแžšแž€แžถแžš แž แžพแž™แžขแžถแž…แž€แŸ†แžŽแžแŸ‹แž‡แŸ†แž“แžฝแžŸแžแž˜แŸ’แž›แŸƒแž‚แŸ„แž›แžšแžฝแž˜แž”แžถแž“แŸ” ### แž€แŸ†แžŽแžแŸ‹แžŸแž˜แŸ’แž‚แžถแž›แŸ‹แž‡แžถแž€แŸ‹แž›แžถแž€แŸ‹แžแžถแž˜แžขแŸ’แž“แž€แž•แŸ’แžแž›แŸ‹แžŸแŸแžœแžถ แžŸแž˜แŸ’แžšแžถแž”แŸ‹ upstream แžŠแŸ‚แž›แž†แž”แž‚แŸ’แž“แžถแž‡แžถแž˜แžฝแž™ Claude Code (`anthropic-compatible-cc-*`) OmniRoute แž€แŸ†แžŽแžแŸ‹แžแž˜แŸ’แž›แŸƒ header `X-Stainless-Timeout` แžŸแž˜แŸ’แžšแžถแž”แŸ‹แžŸแŸ†แžŽแžพแž…แŸแž‰ แžŠแŸ„แž™แž•แŸ’แžขแŸ‚แž€แž›แžพ fetch timeout แžŠแŸ‚แž›แž”แžถแž“แžŠแŸ„แŸ‡แžŸแŸ’แžšแžถแž™ แžŠแžพแž˜แŸ’แž”แžธแžฑแŸ’แž™ read timeout แž“แŸ…แž•แŸ’แž“แŸ‚แž€แžขแŸ’แž“แž€แž•แŸ’แžแž›แŸ‹แžŸแŸแžœแžถแž“แŸ…แžŸแŸ’แžšแž”แž“แžนแž„แž€แžถแžšแž€แŸ†แžŽแžแŸ‹แžšแž…แž“แžถแžŸแž˜แŸ’แž–แŸแž“แŸ’แž’ env แžšแž”แžŸแŸ‹แžขแŸ’แž“แž€แŸ” แžŸแž˜แŸ’แžšแžถแž”แŸ‹ reverse proxy แž—แžถแž‚แžธแž‘แžธแž”แžธแžŠแŸ‚แž›แž†แž”แž‚แŸ’แž“แžถแž‡แžถแž˜แžฝแž™ Claude Code OmniRoute แžšแž€แŸ’แžŸแžถแžŸแŸ†แžŽแžปแŸ† `anthropic-beta` แž›แŸ†แž“แžถแŸ†แžŠแžพแž˜แžฑแŸ’แž™แž˜แžถแž“แž›แž€แŸ’แžแžŽแŸˆแž”แŸ’แžšแžปแž„แž”แŸ’แžšแž™แŸแžแŸ’แž“ แž แžพแž™แž“แŸ…แž–แŸแž› `Client Cache Control` แžแŸ’แžšแžผแžœแž”แžถแž“แž‘แžปแž€แž‡แžถ `Auto` แžœแžถแž”แž‰แŸ’แž‡แžผแž“แž”แž“แŸ’แžแžแŸ‚ marker `cache_control` แžŠแŸ‚แž›แž•แŸ’แžแž›แŸ‹แžŠแŸ„แž™ client แž”แŸ‰แžปแžŽแŸ’แžŽแŸ„แŸ‡แŸ” แž”แžพแž€แž”แŸŠแžผแžแžปแž„แž”แžทแž‘แž”แžพแž€ "Enable redact-thinking beta" แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž€แžถแžšแžแž—แŸ’แž‡แžถแž”แŸ‹แž“แžธแž˜แžฝแž™แŸ— แžแŸ‚แž“แŸ…แž–แŸแž› upstream แžแž˜แŸ’แžšแžผแžœแžฑแŸ’แž™แž˜แžถแž“ Claude thinking stream แžŠแŸ‚แž›แžแŸ’แžšแžผแžœแž”แžถแž“แž›แžถแž€แŸ‹แž‡แžถแž€แŸ‹แž›แžถแž€แŸ‹แž”แŸ‰แžปแžŽแŸ’แžŽแŸ„แŸ‡แŸ” ### แž€แžถแžšแž€แŸ†แžŽแžแŸ‹แž‡แŸ†แž“แžฝแžŸ Timeout แž€แž˜แŸ’แžšแžทแžแžแŸ’แž–แžŸแŸ‹ | แžขแžแŸแžš | แžแž˜แŸ’แž›แŸƒแž›แŸ†แž“แžถแŸ†แžŠแžพแž˜ | แž‚แŸ„แž›แž”แŸ†แžŽแž„ | | ---------------------------------------- | ------------------------------------------ | ---------------------------------------------------------------------------------- | | `FETCH_TIMEOUT_MS` | แž‘แž‘แžฝแž›แž˜แžšแžแž€แž–แžธ `REQUEST_TIMEOUT_MS` | Timeout แž“แŸƒแž€แžถแžšแž…แžถแž”แŸ‹แž•แŸ’แžแžพแž˜แž€แžถแžšแž†แŸ’แž›แžพแž™แžแž”แž–แžธ upstream แžŠแŸ‚แž›แž”แŸ’แžšแžพแžšแž แžผแžแžŠแž›แŸ‹แž‘แž‘แžฝแž›แž”แžถแž“ response headers | | `FETCH_HEADERS_TIMEOUT_MS` | แž‘แž‘แžฝแž›แž˜แžšแžแž€แž–แžธ `FETCH_TIMEOUT_MS` | แžšแž™แŸˆแž–แŸแž›แž€แŸ†แžŽแžแŸ‹แžšแž”แžŸแŸ‹ Undici แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž‘แž‘แžฝแž› response headers แž–แžธ upstream | | `FETCH_BODY_TIMEOUT_MS` | แž‘แž‘แžฝแž›แž˜แžšแžแž€แž–แžธ `FETCH_TIMEOUT_MS` | แžšแž™แŸˆแž–แŸแž›แž€แŸ†แžŽแžแŸ‹แžšแž”แžŸแŸ‹ Undici แžšแžœแžถแž„ body chunks แž–แžธ upstream (`0` แž”แžทแž‘แžœแžถ) | | `FETCH_CONNECT_TIMEOUT_MS` | `30000` | Timeout แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž€แžถแžšแžแž—แŸ’แž‡แžถแž”แŸ‹ TCP แžšแž”แžŸแŸ‹ Undici | | `FETCH_KEEPALIVE_TIMEOUT_MS` | `4000` | Timeout แžŸแž˜แŸ’แžšแžถแž”แŸ‹ idle keep-alive socket แžšแž”แžŸแŸ‹ Undici | | `TLS_CLIENT_TIMEOUT_MS` | แž‘แž‘แžฝแž›แž˜แžšแžแž€แž–แžธ `FETCH_TIMEOUT_MS` | Timeout แžŸแž˜แŸ’แžšแžถแž”แŸ‹แžŸแŸ†แžŽแžพ TLS fingerprint แžŠแŸ‚แž›แž’แŸ’แžœแžพแžกแžพแž„แžแžถแž˜แžšแž™แŸˆ `wreq-js` | | `API_BRIDGE_PROXY_TIMEOUT_MS` | แž‘แž‘แžฝแž›แž˜แžšแžแž€แž–แžธ `REQUEST_TIMEOUT_MS` แžฌ `600000` | Timeout แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž€แžถแžšแž”แž‰แŸ’แž‡แžผแž“แž”แž“แŸ’แž proxy `/v1` แž–แžธ API port แž‘แŸ… dashboard port | | `API_BRIDGE_SERVER_REQUEST_TIMEOUT_MS` | `max(API_BRIDGE_PROXY_TIMEOUT_MS, 300000)` | Timeout แž“แŸƒแžŸแŸ†แžŽแžพแž…แžผแž›แž›แžพ API bridge server | | `API_BRIDGE_SERVER_HEADERS_TIMEOUT_MS` | `60000` | Timeout แž“แŸƒ header แž…แžผแž›แž›แžพ API bridge server | | `API_BRIDGE_SERVER_KEEPALIVE_TIMEOUT_MS` | `5000` | Keep-alive timeout แž›แžพ API bridge server | | `API_BRIDGE_SERVER_SOCKET_TIMEOUT_MS` | `0` | Timeout แž“แŸƒแž—แžถแž–แžขแžŸแž€แž˜แŸ’แž˜แžšแž”แžŸแŸ‹ socket แž›แžพ API bridge server (`0` แž”แžทแž‘แžœแžถ) | > **แž…แŸ†แžŽแžถแŸ†แŸ–** แžŸแž˜แŸ’แžšแžถแž”แŸ‹ streaming requests, `FETCH_TIMEOUT_MS` แž‚แŸ’แžšแž”แžŠแžŽแŸ’แžแž”แŸ‹แžแŸ‚แž€แžถแžšแžšแŸ€แž”แž…แŸ†แž€แžถแžšแžแž—แŸ’แž‡แžถแž”แŸ‹ / แž€แžถแžšแžšแž„แŸ‹แž…แžถแŸ†แž€แžถแžšแž†แŸ’แž›แžพแž™แžแž”แžŠแŸ†แž”แžผแž„แž–แžธ upstream แž”แŸ‰แžปแžŽแŸ’แžŽแŸ„แŸ‡แŸ” แž“แŸ…แž–แŸแž› stream แžŸแž€แž˜แŸ’แž˜ OmniRoute แž“แžนแž„แž”แŸ„แŸ‡แž”แž„แŸ‹แžแŸ‚แž€แŸ’แž“แžปแž„แž€แžšแžŽแžธแž˜แžถแž“แž€แžถแžšแž‡แžถแž”แŸ‹แž‚แžถแŸ†แž„แž–แžทแžแž”แŸ’แžšแžถแž€แžŠ (`STREAM_IDLE_TIMEOUT_MS`) แžฌแž—แžถแž–แžขแžŸแž€แž˜แŸ’แž˜แžšแž”แžŸแŸ‹ body แž€แŸ’แž“แžปแž„ Undici (`FETCH_BODY_TIMEOUT_MS`)แŸ” ### แž—แžถแž–แž†แž”แž‚แŸ’แž“แžถแž‡แžถแž˜แžฝแž™ Reverse Proxy แž”แŸ’แžšแžŸแžทแž“แž”แžพแžขแŸ’แž“แž€แžŠแŸ†แžŽแžพแžšแž€แžถแžš OmniRoute แž“แŸ…แžแžถแž„แž€แŸ’แžšแŸ„แž™ Nginx, Caddy, Cloudflare แžฌ reverse proxy แž•แŸ’แžŸแŸแž„แž‘แŸ€แž แžŸแžผแž˜แž”แŸ’แžšแžถแž€แžŠแžแžถ timeout แžšแž”แžŸแŸ‹ proxy แž€แŸแžแŸ’แž–แžŸแŸ‹แž‡แžถแž„ stream/fetch timeout แžšแž”แžŸแŸ‹ OmniRoute แž•แž„แžŠแŸ‚แžšแŸ” --- ## แžšแž”แŸ€แž”แž”แŸ†แž”แŸ‚แž€แž…แŸ’แžšแž€ แžŠแŸ†แžŽแžพแžšแž€แžถแžš API แž“แžทแž„ Dashboard แž“แŸ…แž›แžพแž…แŸ’แžšแž€แž•แŸ’แžŸแŸแž„แž‚แŸ’แž“แžถแžŸแž˜แŸ’แžšแžถแž”แŸ‹แžŸแŸแžŽแžถแžšแžธแž™แŸ‰แžผแž€แž˜แŸ’แžšแžทแžแžแŸ’แž–แžŸแŸ‹ (แž”แŸ’แžšแžผแž€แžŸแŸŠแžธแž”แž‰แŸ’แž…แŸ’แžšแžถแžŸ แž”แžŽแŸ’แžŠแžถแž‰แž€แžปแž„แžแžบแž“แŸแžš)แŸ– ```bash PORT=20128 DASHBOARD_PORT=20129 omniroute # APIแŸ– http://localhost:20128/v1 # DashboardแŸ– 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="แž…แŸ’แžšแž€แž•แŸ’แž›แžผแžœ AI แžŸแž€แž›แžŠแŸ‚แž›แž˜แžถแž“แž€แžถแžšแž”แž‰แŸ’แž‡แžผแž“แž•แŸ’แž›แžผแžœแž†แŸ’แž›แžถแžแžœแŸƒแžŸแž˜แŸ’แžšแžถแž”แŸ‹แžขแŸ’แž“แž€แž•แŸ’แžŠแž›แŸ‹แžŸแŸแžœแžถ LLM แž‡แžถแž…แŸ’แžšแžพแž“" maintainer="zenobit " license="MIT" homepage="https://github.com/diegosouzapw/OmniRoute" distfiles="https://github.com/diegosouzapw/OmniRoute/archive/refs/tags/v${version}.tar.gz" # แž”แž„แŸ’แž€แžพแž checksum แžกแžพแž„แžœแžทแž‰แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž€แžถแžšแž…แŸแž‰แž•แŸ’แžŸแžถแž™แž“แžธแž˜แžฝแž™แŸ—แžŠแŸ„แž™แž”แŸ’แžšแžพแŸ– # 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` | แž›แžปแž”แž€แž˜แŸ’แž˜แžœแžทแž’แžธแž…แŸแž‰แž–แžธแž”แŸ’แžšแž–แŸแž“แŸ’แž’ แž”แŸ‰แžปแž“แŸ’แžแŸ‚ **แžšแž€แŸ’แžŸแžถแž‘แžปแž€ DB แž“แžทแž„แž€แžถแžšแž€แŸ†แžŽแžแŸ‹แžšแž…แž“แžถแžŸแž˜แŸ’แž–แŸแž“แŸ’แž’แžšแž”แžŸแŸ‹แžขแŸ’แž“แž€** แž“แŸ…แž€แŸ’แž“แžปแž„ `~/.omniroute`แŸ” | | `npm run uninstall:full` | แž›แžปแž”แž€แž˜แŸ’แž˜แžœแžทแž’แžธ แž แžพแž™ **แž›แžปแž”แž‡แžถแžขแž…แžทแž“แŸ’แžแŸ’แžšแŸƒแž™แŸแž“แžผแžœแž€แžถแžšแž€แŸ†แžŽแžแŸ‹แžšแž…แž“แžถแžŸแž˜แŸ’แž–แŸแž“แŸ’แž’ แžŸแŸ„ แž“แžทแž„แž˜แžผแž›แžŠแŸ’แž‹แžถแž“แž‘แžทแž“แŸ’แž“แž“แŸแž™แž‘แžถแŸ†แž„แžขแžŸแŸ‹**แŸ” | > แžŸแž˜แŸ’แžšแžถแž”แŸ‹แžŸแŸแž…แž€แŸ’แžŠแžธแžŽแŸ‚แž“แžถแŸ†แž›แž˜แŸ’แžขแžทแžแžขแŸ†แž–แžธแž€แžถแžšแž›แžปแž”แž€แžถแžšแžŠแŸ†แžกแžพแž„แžแžถแž˜แžœแžทแž’แžธแžŸแžถแžŸแŸ’แžแŸ’แžšแž‘แžถแŸ†แž„แžขแžŸแŸ‹ แžŸแžผแž˜แž˜แžพแž› [UNINSTALL.md](./UNINSTALL.md)แŸ”