# ๐Ÿ“– 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) ยท ๐Ÿ‡ฐ๐Ÿ‡ญ [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) ยท ๐Ÿ‡ต๐Ÿ‡ญ [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-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 เจธเฉˆเฉฑเจŸเจ…เฉฑเจช (เจฎเจพเจกเจฒ เจ•เจพเจ‚เจŸเฉˆเจ•เจธเจŸ เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ) 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 เจธเจฐเจตเจฐ README](../../open-sse/mcp-server/README.md) โ€” 110 เจŸเฉ‚เจฒ, IDE เจธเฉฐเจฐเจšเจจเจพเจตเจพเจ‚, Python/TS/Go เจ•เจฒเจพเจ‡เฉฐเจŸเฅค ### A2A เจธเฉˆเฉฑเจŸเจ…เฉฑเจช (เจเจœเฉฐเจŸ-เจคเฉ‹เจ‚-เจเจœเฉฐเจŸ เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ) 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 เจธเจฐเจตเจฐ 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` เจนเฉˆเจกเจฐ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจฆเจพ เจนเฉˆ, เจคเจพเจ‚ เจœเฉ‹ เจชเฉเจฐเจฆเจพเจคเจพ-เจชเจพเจธเฉ‡ เจฆเฉ‡ เจฐเฉ€เจก เจŸเจพเจˆเจฎเจ†เจ‰เจŸ เจคเฉเจนเจพเจกเฉ€ env เจธเฉฐเจฐเจšเจจเจพ เจจเจพเจฒ เจ‡เจ•เจธเจพเจฐ เจฐเจนเจฟเจฃเฅค เจคเฉ€เจœเฉ€-เจงเจฟเจฐ 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 เจจเจฟเจธเจผเจ•เจฟเจฐเจฟเจ† keep-alive เจธเจพเจ•เจŸ เจŸเจพเจˆเจฎเจ†เจ‰เจŸ | | `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 เจฌเฉเจฐเจฟเจœ เจธเจฐเจตเจฐ 'เจคเฉ‡ keep-alive เจŸเจพเจˆเจฎเจ†เจ‰เจŸ | | `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 เจ…เจคเฉ‡ 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="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) เจตเฉ‡เจ–เฉ‹เฅค