omniroute 3.2.4 → 3.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/.next/BUILD_ID +1 -1
- package/app/.next/build-manifest.json +2 -2
- package/app/.next/prerender-manifest.json +3 -3
- package/app/.next/server/app/(dashboard)/dashboard/a2a/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/agents/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/analytics/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/api-manager/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/audit-log/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/auto-combo/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/cache/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/costs/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/health/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/limits/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/logs/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/mcp/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/media/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/onboarding/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/playground/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/search-tools/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/settings/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/400/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/401/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/403/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/408/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/429/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/500/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/502/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/503/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/_global-error.html +2 -2
- package/app/.next/server/app/_global-error.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/app/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/app/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/callback/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/docs/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/forbidden/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/forgot-password/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/landing/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/maintenance/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/privacy/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/status/page_client-reference-manifest.js +1 -1
- package/app/.next/server/app/terms/page_client-reference-manifest.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__051203a6._.js +2 -2
- package/app/.next/server/chunks/[root-of-the-server]__0891af92._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__1f27646b._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__1f2b0d89._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__46e00e59._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__6e52619e._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__f6f5609a._.js +1 -1
- package/app/.next/server/chunks/_05c48915._.js +1 -1
- package/app/.next/server/chunks/_06515a8a._.js +1 -1
- package/app/.next/server/chunks/_2115d8de._.js +1 -1
- package/app/.next/server/chunks/_3ac953eb._.js +1 -1
- package/app/.next/server/chunks/_4b8fd853._.js +1 -1
- package/app/.next/server/chunks/_68683848._.js +1 -1
- package/app/.next/server/chunks/_ee9b677b._.js +1 -1
- package/app/.next/server/chunks/ssr/[root-of-the-server]__9ef96d20._.js +1 -1
- package/app/.next/server/chunks/ssr/[root-of-the-server]__a6942102._.js +1 -1
- package/app/.next/server/pages/500.html +2 -2
- package/app/.next/server/server-reference-manifest.js +1 -1
- package/app/.next/server/server-reference-manifest.json +1 -1
- package/app/.next/static/chunks/{c8b4e7749ccea265.js → 4bce9ec936c62139.js} +1 -1
- package/app/CHANGELOG.md +6 -0
- package/app/docs/USER_GUIDE.md +100 -0
- package/app/docs/i18n/ar/USER_GUIDE.md +121 -5
- package/app/docs/i18n/bg/USER_GUIDE.md +121 -5
- package/app/docs/i18n/da/USER_GUIDE.md +121 -5
- package/app/docs/i18n/de/USER_GUIDE.md +121 -5
- package/app/docs/i18n/es/USER_GUIDE.md +121 -5
- package/app/docs/i18n/fi/USER_GUIDE.md +121 -5
- package/app/docs/i18n/fr/USER_GUIDE.md +121 -5
- package/app/docs/i18n/he/USER_GUIDE.md +121 -5
- package/app/docs/i18n/hu/USER_GUIDE.md +121 -5
- package/app/docs/i18n/id/USER_GUIDE.md +121 -5
- package/app/docs/i18n/in/USER_GUIDE.md +121 -5
- package/app/docs/i18n/it/USER_GUIDE.md +121 -5
- package/app/docs/i18n/ja/USER_GUIDE.md +121 -5
- package/app/docs/i18n/ko/USER_GUIDE.md +121 -5
- package/app/docs/i18n/ms/USER_GUIDE.md +121 -5
- package/app/docs/i18n/nl/USER_GUIDE.md +121 -5
- package/app/docs/i18n/no/USER_GUIDE.md +121 -5
- package/app/docs/i18n/phi/USER_GUIDE.md +121 -5
- package/app/docs/i18n/pl/USER_GUIDE.md +121 -5
- package/app/docs/i18n/pt/USER_GUIDE.md +121 -5
- package/app/docs/i18n/pt-BR/USER_GUIDE.md +100 -0
- package/app/docs/i18n/ro/USER_GUIDE.md +121 -5
- package/app/docs/i18n/ru/USER_GUIDE.md +121 -5
- package/app/docs/i18n/sk/USER_GUIDE.md +121 -5
- package/app/docs/i18n/sv/USER_GUIDE.md +121 -5
- package/app/docs/i18n/th/USER_GUIDE.md +121 -5
- package/app/docs/i18n/uk-UA/USER_GUIDE.md +121 -5
- package/app/docs/i18n/vi/USER_GUIDE.md +121 -5
- package/app/docs/i18n/zh-CN/USER_GUIDE.md +121 -5
- package/app/docs/openapi.yaml +1 -1
- package/app/package-lock.json +2 -2
- package/app/package.json +1 -1
- package/package.json +1 -1
- /package/app/.next/static/{2IF93mnmfu11I384FtD2v → y_TDM0gR5foAipMsSmkFd}/_buildManifest.js +0 -0
- /package/app/.next/static/{2IF93mnmfu11I384FtD2v → y_TDM0gR5foAipMsSmkFd}/_clientMiddlewareManifest.json +0 -0
- /package/app/.next/static/{2IF93mnmfu11I384FtD2v → y_TDM0gR5foAipMsSmkFd}/_ssgManifest.js +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
# User Guide (Nederlands)
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
🌐 **Languages:** 🇺🇸 [English](../../USER_GUIDE.md) · 🇧🇷 [pt-BR](../pt-BR/USER_GUIDE.md) · 🇪🇸 [es](../es/USER_GUIDE.md) · 🇫🇷 [fr](../fr/USER_GUIDE.md) · 🇩🇪 [de](../de/USER_GUIDE.md) · 🇮🇹 [it](../it/USER_GUIDE.md) · 🇷🇺 [ru](../ru/USER_GUIDE.md) · 🇨🇳 [zh-CN](../zh-CN/USER_GUIDE.md) · 🇯🇵 [ja](../ja/USER_GUIDE.md) · 🇰🇷 [ko](../ko/USER_GUIDE.md) · 🇸🇦 [ar](../ar/USER_GUIDE.md) · 🇮🇳 [in](../in/USER_GUIDE.md) · 🇹🇭 [th](../th/USER_GUIDE.md) · 🇻🇳 [vi](../vi/USER_GUIDE.md) · 🇮🇩 [id](../id/USER_GUIDE.md) · 🇲🇾 [ms](../ms/USER_GUIDE.md) · 🇳🇱 [nl](../nl/USER_GUIDE.md) · 🇵🇱 [pl](../pl/USER_GUIDE.md) · 🇸🇪 [sv](../sv/USER_GUIDE.md) · 🇳🇴 [no](../no/USER_GUIDE.md) · 🇩🇰 [da](../da/USER_GUIDE.md) · 🇫🇮 [fi](../fi/USER_GUIDE.md) · 🇵🇹 [pt](../pt/USER_GUIDE.md) · 🇷🇴 [ro](../ro/USER_GUIDE.md) · 🇭🇺 [hu](../hu/USER_GUIDE.md) · 🇧🇬 [bg](../bg/USER_GUIDE.md) · 🇸🇰 [sk](../sk/USER_GUIDE.md) · 🇺🇦 [uk-UA](../uk-UA/USER_GUIDE.md) · 🇮🇱 [he](../he/USER_GUIDE.md) · 🇵🇭 [phi](../phi/USER_GUIDE.md)
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
> 🇺🇸 [English](../../USER_GUIDE.md)
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
---
|
|
8
8
|
|
|
9
9
|
Complete guide for configuring providers, creating combos, integrating CLI tools, and deploying OmniRoute.
|
|
10
10
|
|
|
@@ -409,6 +409,106 @@ docker run -d --name omniroute -p 20128:20128 --env-file ./.env -v omniroute-dat
|
|
|
409
409
|
|
|
410
410
|
For host-integrated mode with CLI binaries, see the Docker section in the main docs.
|
|
411
411
|
|
|
412
|
+
### Void Linux (xbps-src)
|
|
413
|
+
|
|
414
|
+
Void Linux users can package and install OmniRoute natively using the `xbps-src` cross-compilation framework. This automates the Node.js standalone build along with the required `better-sqlite3` native bindings.
|
|
415
|
+
|
|
416
|
+
<details>
|
|
417
|
+
<summary><b>View xbps-src template</b></summary>
|
|
418
|
+
|
|
419
|
+
```bash
|
|
420
|
+
# Template file for 'omniroute'
|
|
421
|
+
pkgname=omniroute
|
|
422
|
+
version=3.2.4
|
|
423
|
+
revision=1
|
|
424
|
+
hostmakedepends="nodejs python3 make"
|
|
425
|
+
depends="openssl"
|
|
426
|
+
short_desc="Universal AI gateway with smart routing for multiple LLM providers"
|
|
427
|
+
maintainer="zenobit <zenobit@disroot.org>"
|
|
428
|
+
license="MIT"
|
|
429
|
+
homepage="https://github.com/diegosouzapw/OmniRoute"
|
|
430
|
+
distfiles="https://github.com/diegosouzapw/OmniRoute/archive/refs/tags/v${version}.tar.gz"
|
|
431
|
+
checksum=009400afee90a9f32599d8fe734145cfd84098140b7287990183dde45ae2245b
|
|
432
|
+
system_accounts="_omniroute"
|
|
433
|
+
omniroute_homedir="/var/lib/omniroute"
|
|
434
|
+
export NODE_ENV=production
|
|
435
|
+
export npm_config_engine_strict=false
|
|
436
|
+
export npm_config_loglevel=error
|
|
437
|
+
export npm_config_fund=false
|
|
438
|
+
export npm_config_audit=false
|
|
439
|
+
|
|
440
|
+
do_build() {
|
|
441
|
+
# Determine target CPU arch for node-gyp
|
|
442
|
+
local _gyp_arch
|
|
443
|
+
case "$XBPS_TARGET_MACHINE" in
|
|
444
|
+
aarch64*) _gyp_arch=arm64 ;;
|
|
445
|
+
armv7*|armv6*) _gyp_arch=arm ;;
|
|
446
|
+
i686*) _gyp_arch=ia32 ;;
|
|
447
|
+
*) _gyp_arch=x64 ;;
|
|
448
|
+
esac
|
|
449
|
+
|
|
450
|
+
# 1) Install all deps – skip scripts
|
|
451
|
+
NODE_ENV=development npm ci --ignore-scripts
|
|
452
|
+
|
|
453
|
+
# 2) Build the Next.js standalone bundle
|
|
454
|
+
npm run build
|
|
455
|
+
|
|
456
|
+
# 3) Copy static assets into standalone
|
|
457
|
+
cp -r .next/static .next/standalone/.next/static
|
|
458
|
+
[ -d public ] && cp -r public .next/standalone/public || true
|
|
459
|
+
|
|
460
|
+
# 4) Compile better-sqlite3 native binding
|
|
461
|
+
local _node_gyp=/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js
|
|
462
|
+
(cd node_modules/better-sqlite3 && node "$_node_gyp" rebuild --arch="$_gyp_arch")
|
|
463
|
+
|
|
464
|
+
# 5) Place the compiled binding into the standalone bundle
|
|
465
|
+
local _bs3_release=.next/standalone/node_modules/better-sqlite3/build/Release
|
|
466
|
+
mkdir -p "$_bs3_release"
|
|
467
|
+
cp node_modules/better-sqlite3/build/Release/better_sqlite3.node "$_bs3_release/"
|
|
468
|
+
|
|
469
|
+
# 6) Remove arch-specific sharp bundles
|
|
470
|
+
rm -rf .next/standalone/node_modules/@img
|
|
471
|
+
|
|
472
|
+
# 7) Copy pino runtime deps omitted by Next.js static analysis:
|
|
473
|
+
for _mod in pino-abstract-transport split2 process-warning; do
|
|
474
|
+
cp -r "node_modules/$_mod" .next/standalone/node_modules/
|
|
475
|
+
done
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
do_check() {
|
|
479
|
+
npm run test:unit
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
do_install() {
|
|
483
|
+
vmkdir usr/lib/omniroute/.next
|
|
484
|
+
vcopy .next/standalone/. usr/lib/omniroute/.next/standalone
|
|
485
|
+
|
|
486
|
+
# Prevent removal of empty Next.js app router dirs by the post-install hook
|
|
487
|
+
for _d in \
|
|
488
|
+
.next/standalone/.next/server/app/dashboard \
|
|
489
|
+
.next/standalone/.next/server/app/dashboard/settings \
|
|
490
|
+
.next/standalone/.next/server/app/dashboard/providers; do
|
|
491
|
+
touch "${DESTDIR}/usr/lib/omniroute/${_d}/.keep"
|
|
492
|
+
done
|
|
493
|
+
|
|
494
|
+
cat > "${WRKDIR}/omniroute" <<'EOF'
|
|
495
|
+
#!/bin/sh
|
|
496
|
+
export PORT="${PORT:-20128}"
|
|
497
|
+
export DATA_DIR="${DATA_DIR:-${XDG_DATA_HOME:-${HOME}/.local/share}/omniroute}"
|
|
498
|
+
export LOG_TO_FILE="${LOG_TO_FILE:-false}"
|
|
499
|
+
mkdir -p "${DATA_DIR}"
|
|
500
|
+
exec node /usr/lib/omniroute/.next/standalone/server.js "$@"
|
|
501
|
+
EOF
|
|
502
|
+
vbin "${WRKDIR}/omniroute"
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
post_install() {
|
|
506
|
+
vlicense LICENSE
|
|
507
|
+
}
|
|
508
|
+
```
|
|
509
|
+
|
|
510
|
+
</details>
|
|
511
|
+
|
|
412
512
|
### Environment Variables
|
|
413
513
|
|
|
414
514
|
| Variable | Default | Description |
|
|
@@ -582,6 +682,22 @@ Configure via **Dashboard → Settings → Routing**.
|
|
|
582
682
|
| **Least Used** | Routes to the account with the oldest `lastUsedAt` timestamp, distributing traffic evenly |
|
|
583
683
|
| **Cost Optimized** | Routes to the account with the lowest priority value, optimizing for lowest-cost providers |
|
|
584
684
|
|
|
685
|
+
#### External Sticky Session Header
|
|
686
|
+
|
|
687
|
+
For external session affinity (for example, Claude Code/Codex agents behind reverse proxies), send:
|
|
688
|
+
|
|
689
|
+
```http
|
|
690
|
+
X-Session-Id: your-session-key
|
|
691
|
+
```
|
|
692
|
+
|
|
693
|
+
OmniRoute also accepts `x_session_id` and returns the effective session key in `X-OmniRoute-Session-Id`.
|
|
694
|
+
|
|
695
|
+
If you use Nginx and send underscore-form headers, enable:
|
|
696
|
+
|
|
697
|
+
```nginx
|
|
698
|
+
underscores_in_headers on;
|
|
699
|
+
```
|
|
700
|
+
|
|
585
701
|
#### Wildcard Model Aliases
|
|
586
702
|
|
|
587
703
|
Create wildcard patterns to remap model names:
|
|
@@ -766,7 +882,7 @@ Access via **Dashboard → Health**. Real-time system health overview with 6 car
|
|
|
766
882
|
|
|
767
883
|
OmniRoute is available as a native desktop application for Windows, macOS, and Linux.
|
|
768
884
|
|
|
769
|
-
###
|
|
885
|
+
### Installeren
|
|
770
886
|
|
|
771
887
|
```bash
|
|
772
888
|
# From the electron directory:
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
# User Guide (Norsk)
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
🌐 **Languages:** 🇺🇸 [English](../../USER_GUIDE.md) · 🇧🇷 [pt-BR](../pt-BR/USER_GUIDE.md) · 🇪🇸 [es](../es/USER_GUIDE.md) · 🇫🇷 [fr](../fr/USER_GUIDE.md) · 🇩🇪 [de](../de/USER_GUIDE.md) · 🇮🇹 [it](../it/USER_GUIDE.md) · 🇷🇺 [ru](../ru/USER_GUIDE.md) · 🇨🇳 [zh-CN](../zh-CN/USER_GUIDE.md) · 🇯🇵 [ja](../ja/USER_GUIDE.md) · 🇰🇷 [ko](../ko/USER_GUIDE.md) · 🇸🇦 [ar](../ar/USER_GUIDE.md) · 🇮🇳 [in](../in/USER_GUIDE.md) · 🇹🇭 [th](../th/USER_GUIDE.md) · 🇻🇳 [vi](../vi/USER_GUIDE.md) · 🇮🇩 [id](../id/USER_GUIDE.md) · 🇲🇾 [ms](../ms/USER_GUIDE.md) · 🇳🇱 [nl](../nl/USER_GUIDE.md) · 🇵🇱 [pl](../pl/USER_GUIDE.md) · 🇸🇪 [sv](../sv/USER_GUIDE.md) · 🇳🇴 [no](../no/USER_GUIDE.md) · 🇩🇰 [da](../da/USER_GUIDE.md) · 🇫🇮 [fi](../fi/USER_GUIDE.md) · 🇵🇹 [pt](../pt/USER_GUIDE.md) · 🇷🇴 [ro](../ro/USER_GUIDE.md) · 🇭🇺 [hu](../hu/USER_GUIDE.md) · 🇧🇬 [bg](../bg/USER_GUIDE.md) · 🇸🇰 [sk](../sk/USER_GUIDE.md) · 🇺🇦 [uk-UA](../uk-UA/USER_GUIDE.md) · 🇮🇱 [he](../he/USER_GUIDE.md) · 🇵🇭 [phi](../phi/USER_GUIDE.md)
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
> 🇺🇸 [English](../../USER_GUIDE.md)
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
---
|
|
8
8
|
|
|
9
9
|
Complete guide for configuring providers, creating combos, integrating CLI tools, and deploying OmniRoute.
|
|
10
10
|
|
|
@@ -409,6 +409,106 @@ docker run -d --name omniroute -p 20128:20128 --env-file ./.env -v omniroute-dat
|
|
|
409
409
|
|
|
410
410
|
For host-integrated mode with CLI binaries, see the Docker section in the main docs.
|
|
411
411
|
|
|
412
|
+
### Void Linux (xbps-src)
|
|
413
|
+
|
|
414
|
+
Void Linux users can package and install OmniRoute natively using the `xbps-src` cross-compilation framework. This automates the Node.js standalone build along with the required `better-sqlite3` native bindings.
|
|
415
|
+
|
|
416
|
+
<details>
|
|
417
|
+
<summary><b>View xbps-src template</b></summary>
|
|
418
|
+
|
|
419
|
+
```bash
|
|
420
|
+
# Template file for 'omniroute'
|
|
421
|
+
pkgname=omniroute
|
|
422
|
+
version=3.2.4
|
|
423
|
+
revision=1
|
|
424
|
+
hostmakedepends="nodejs python3 make"
|
|
425
|
+
depends="openssl"
|
|
426
|
+
short_desc="Universal AI gateway with smart routing for multiple LLM providers"
|
|
427
|
+
maintainer="zenobit <zenobit@disroot.org>"
|
|
428
|
+
license="MIT"
|
|
429
|
+
homepage="https://github.com/diegosouzapw/OmniRoute"
|
|
430
|
+
distfiles="https://github.com/diegosouzapw/OmniRoute/archive/refs/tags/v${version}.tar.gz"
|
|
431
|
+
checksum=009400afee90a9f32599d8fe734145cfd84098140b7287990183dde45ae2245b
|
|
432
|
+
system_accounts="_omniroute"
|
|
433
|
+
omniroute_homedir="/var/lib/omniroute"
|
|
434
|
+
export NODE_ENV=production
|
|
435
|
+
export npm_config_engine_strict=false
|
|
436
|
+
export npm_config_loglevel=error
|
|
437
|
+
export npm_config_fund=false
|
|
438
|
+
export npm_config_audit=false
|
|
439
|
+
|
|
440
|
+
do_build() {
|
|
441
|
+
# Determine target CPU arch for node-gyp
|
|
442
|
+
local _gyp_arch
|
|
443
|
+
case "$XBPS_TARGET_MACHINE" in
|
|
444
|
+
aarch64*) _gyp_arch=arm64 ;;
|
|
445
|
+
armv7*|armv6*) _gyp_arch=arm ;;
|
|
446
|
+
i686*) _gyp_arch=ia32 ;;
|
|
447
|
+
*) _gyp_arch=x64 ;;
|
|
448
|
+
esac
|
|
449
|
+
|
|
450
|
+
# 1) Install all deps – skip scripts
|
|
451
|
+
NODE_ENV=development npm ci --ignore-scripts
|
|
452
|
+
|
|
453
|
+
# 2) Build the Next.js standalone bundle
|
|
454
|
+
npm run build
|
|
455
|
+
|
|
456
|
+
# 3) Copy static assets into standalone
|
|
457
|
+
cp -r .next/static .next/standalone/.next/static
|
|
458
|
+
[ -d public ] && cp -r public .next/standalone/public || true
|
|
459
|
+
|
|
460
|
+
# 4) Compile better-sqlite3 native binding
|
|
461
|
+
local _node_gyp=/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js
|
|
462
|
+
(cd node_modules/better-sqlite3 && node "$_node_gyp" rebuild --arch="$_gyp_arch")
|
|
463
|
+
|
|
464
|
+
# 5) Place the compiled binding into the standalone bundle
|
|
465
|
+
local _bs3_release=.next/standalone/node_modules/better-sqlite3/build/Release
|
|
466
|
+
mkdir -p "$_bs3_release"
|
|
467
|
+
cp node_modules/better-sqlite3/build/Release/better_sqlite3.node "$_bs3_release/"
|
|
468
|
+
|
|
469
|
+
# 6) Remove arch-specific sharp bundles
|
|
470
|
+
rm -rf .next/standalone/node_modules/@img
|
|
471
|
+
|
|
472
|
+
# 7) Copy pino runtime deps omitted by Next.js static analysis:
|
|
473
|
+
for _mod in pino-abstract-transport split2 process-warning; do
|
|
474
|
+
cp -r "node_modules/$_mod" .next/standalone/node_modules/
|
|
475
|
+
done
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
do_check() {
|
|
479
|
+
npm run test:unit
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
do_install() {
|
|
483
|
+
vmkdir usr/lib/omniroute/.next
|
|
484
|
+
vcopy .next/standalone/. usr/lib/omniroute/.next/standalone
|
|
485
|
+
|
|
486
|
+
# Prevent removal of empty Next.js app router dirs by the post-install hook
|
|
487
|
+
for _d in \
|
|
488
|
+
.next/standalone/.next/server/app/dashboard \
|
|
489
|
+
.next/standalone/.next/server/app/dashboard/settings \
|
|
490
|
+
.next/standalone/.next/server/app/dashboard/providers; do
|
|
491
|
+
touch "${DESTDIR}/usr/lib/omniroute/${_d}/.keep"
|
|
492
|
+
done
|
|
493
|
+
|
|
494
|
+
cat > "${WRKDIR}/omniroute" <<'EOF'
|
|
495
|
+
#!/bin/sh
|
|
496
|
+
export PORT="${PORT:-20128}"
|
|
497
|
+
export DATA_DIR="${DATA_DIR:-${XDG_DATA_HOME:-${HOME}/.local/share}/omniroute}"
|
|
498
|
+
export LOG_TO_FILE="${LOG_TO_FILE:-false}"
|
|
499
|
+
mkdir -p "${DATA_DIR}"
|
|
500
|
+
exec node /usr/lib/omniroute/.next/standalone/server.js "$@"
|
|
501
|
+
EOF
|
|
502
|
+
vbin "${WRKDIR}/omniroute"
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
post_install() {
|
|
506
|
+
vlicense LICENSE
|
|
507
|
+
}
|
|
508
|
+
```
|
|
509
|
+
|
|
510
|
+
</details>
|
|
511
|
+
|
|
412
512
|
### Environment Variables
|
|
413
513
|
|
|
414
514
|
| Variable | Default | Description |
|
|
@@ -582,6 +682,22 @@ Configure via **Dashboard → Settings → Routing**.
|
|
|
582
682
|
| **Least Used** | Routes to the account with the oldest `lastUsedAt` timestamp, distributing traffic evenly |
|
|
583
683
|
| **Cost Optimized** | Routes to the account with the lowest priority value, optimizing for lowest-cost providers |
|
|
584
684
|
|
|
685
|
+
#### External Sticky Session Header
|
|
686
|
+
|
|
687
|
+
For external session affinity (for example, Claude Code/Codex agents behind reverse proxies), send:
|
|
688
|
+
|
|
689
|
+
```http
|
|
690
|
+
X-Session-Id: your-session-key
|
|
691
|
+
```
|
|
692
|
+
|
|
693
|
+
OmniRoute also accepts `x_session_id` and returns the effective session key in `X-OmniRoute-Session-Id`.
|
|
694
|
+
|
|
695
|
+
If you use Nginx and send underscore-form headers, enable:
|
|
696
|
+
|
|
697
|
+
```nginx
|
|
698
|
+
underscores_in_headers on;
|
|
699
|
+
```
|
|
700
|
+
|
|
585
701
|
#### Wildcard Model Aliases
|
|
586
702
|
|
|
587
703
|
Create wildcard patterns to remap model names:
|
|
@@ -766,7 +882,7 @@ Access via **Dashboard → Health**. Real-time system health overview with 6 car
|
|
|
766
882
|
|
|
767
883
|
OmniRoute is available as a native desktop application for Windows, macOS, and Linux.
|
|
768
884
|
|
|
769
|
-
###
|
|
885
|
+
### Installer
|
|
770
886
|
|
|
771
887
|
```bash
|
|
772
888
|
# From the electron directory:
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
# User Guide (Filipino)
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
🌐 **Languages:** 🇺🇸 [English](../../USER_GUIDE.md) · 🇧🇷 [pt-BR](../pt-BR/USER_GUIDE.md) · 🇪🇸 [es](../es/USER_GUIDE.md) · 🇫🇷 [fr](../fr/USER_GUIDE.md) · 🇩🇪 [de](../de/USER_GUIDE.md) · 🇮🇹 [it](../it/USER_GUIDE.md) · 🇷🇺 [ru](../ru/USER_GUIDE.md) · 🇨🇳 [zh-CN](../zh-CN/USER_GUIDE.md) · 🇯🇵 [ja](../ja/USER_GUIDE.md) · 🇰🇷 [ko](../ko/USER_GUIDE.md) · 🇸🇦 [ar](../ar/USER_GUIDE.md) · 🇮🇳 [in](../in/USER_GUIDE.md) · 🇹🇭 [th](../th/USER_GUIDE.md) · 🇻🇳 [vi](../vi/USER_GUIDE.md) · 🇮🇩 [id](../id/USER_GUIDE.md) · 🇲🇾 [ms](../ms/USER_GUIDE.md) · 🇳🇱 [nl](../nl/USER_GUIDE.md) · 🇵🇱 [pl](../pl/USER_GUIDE.md) · 🇸🇪 [sv](../sv/USER_GUIDE.md) · 🇳🇴 [no](../no/USER_GUIDE.md) · 🇩🇰 [da](../da/USER_GUIDE.md) · 🇫🇮 [fi](../fi/USER_GUIDE.md) · 🇵🇹 [pt](../pt/USER_GUIDE.md) · 🇷🇴 [ro](../ro/USER_GUIDE.md) · 🇭🇺 [hu](../hu/USER_GUIDE.md) · 🇧🇬 [bg](../bg/USER_GUIDE.md) · 🇸🇰 [sk](../sk/USER_GUIDE.md) · 🇺🇦 [uk-UA](../uk-UA/USER_GUIDE.md) · 🇮🇱 [he](../he/USER_GUIDE.md) · 🇵🇭 [phi](../phi/USER_GUIDE.md)
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
> 🇺🇸 [English](../../USER_GUIDE.md)
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
---
|
|
8
8
|
|
|
9
9
|
Complete guide for configuring providers, creating combos, integrating CLI tools, and deploying OmniRoute.
|
|
10
10
|
|
|
@@ -409,6 +409,106 @@ docker run -d --name omniroute -p 20128:20128 --env-file ./.env -v omniroute-dat
|
|
|
409
409
|
|
|
410
410
|
For host-integrated mode with CLI binaries, see the Docker section in the main docs.
|
|
411
411
|
|
|
412
|
+
### Void Linux (xbps-src)
|
|
413
|
+
|
|
414
|
+
Void Linux users can package and install OmniRoute natively using the `xbps-src` cross-compilation framework. This automates the Node.js standalone build along with the required `better-sqlite3` native bindings.
|
|
415
|
+
|
|
416
|
+
<details>
|
|
417
|
+
<summary><b>View xbps-src template</b></summary>
|
|
418
|
+
|
|
419
|
+
```bash
|
|
420
|
+
# Template file for 'omniroute'
|
|
421
|
+
pkgname=omniroute
|
|
422
|
+
version=3.2.4
|
|
423
|
+
revision=1
|
|
424
|
+
hostmakedepends="nodejs python3 make"
|
|
425
|
+
depends="openssl"
|
|
426
|
+
short_desc="Universal AI gateway with smart routing for multiple LLM providers"
|
|
427
|
+
maintainer="zenobit <zenobit@disroot.org>"
|
|
428
|
+
license="MIT"
|
|
429
|
+
homepage="https://github.com/diegosouzapw/OmniRoute"
|
|
430
|
+
distfiles="https://github.com/diegosouzapw/OmniRoute/archive/refs/tags/v${version}.tar.gz"
|
|
431
|
+
checksum=009400afee90a9f32599d8fe734145cfd84098140b7287990183dde45ae2245b
|
|
432
|
+
system_accounts="_omniroute"
|
|
433
|
+
omniroute_homedir="/var/lib/omniroute"
|
|
434
|
+
export NODE_ENV=production
|
|
435
|
+
export npm_config_engine_strict=false
|
|
436
|
+
export npm_config_loglevel=error
|
|
437
|
+
export npm_config_fund=false
|
|
438
|
+
export npm_config_audit=false
|
|
439
|
+
|
|
440
|
+
do_build() {
|
|
441
|
+
# Determine target CPU arch for node-gyp
|
|
442
|
+
local _gyp_arch
|
|
443
|
+
case "$XBPS_TARGET_MACHINE" in
|
|
444
|
+
aarch64*) _gyp_arch=arm64 ;;
|
|
445
|
+
armv7*|armv6*) _gyp_arch=arm ;;
|
|
446
|
+
i686*) _gyp_arch=ia32 ;;
|
|
447
|
+
*) _gyp_arch=x64 ;;
|
|
448
|
+
esac
|
|
449
|
+
|
|
450
|
+
# 1) Install all deps – skip scripts
|
|
451
|
+
NODE_ENV=development npm ci --ignore-scripts
|
|
452
|
+
|
|
453
|
+
# 2) Build the Next.js standalone bundle
|
|
454
|
+
npm run build
|
|
455
|
+
|
|
456
|
+
# 3) Copy static assets into standalone
|
|
457
|
+
cp -r .next/static .next/standalone/.next/static
|
|
458
|
+
[ -d public ] && cp -r public .next/standalone/public || true
|
|
459
|
+
|
|
460
|
+
# 4) Compile better-sqlite3 native binding
|
|
461
|
+
local _node_gyp=/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js
|
|
462
|
+
(cd node_modules/better-sqlite3 && node "$_node_gyp" rebuild --arch="$_gyp_arch")
|
|
463
|
+
|
|
464
|
+
# 5) Place the compiled binding into the standalone bundle
|
|
465
|
+
local _bs3_release=.next/standalone/node_modules/better-sqlite3/build/Release
|
|
466
|
+
mkdir -p "$_bs3_release"
|
|
467
|
+
cp node_modules/better-sqlite3/build/Release/better_sqlite3.node "$_bs3_release/"
|
|
468
|
+
|
|
469
|
+
# 6) Remove arch-specific sharp bundles
|
|
470
|
+
rm -rf .next/standalone/node_modules/@img
|
|
471
|
+
|
|
472
|
+
# 7) Copy pino runtime deps omitted by Next.js static analysis:
|
|
473
|
+
for _mod in pino-abstract-transport split2 process-warning; do
|
|
474
|
+
cp -r "node_modules/$_mod" .next/standalone/node_modules/
|
|
475
|
+
done
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
do_check() {
|
|
479
|
+
npm run test:unit
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
do_install() {
|
|
483
|
+
vmkdir usr/lib/omniroute/.next
|
|
484
|
+
vcopy .next/standalone/. usr/lib/omniroute/.next/standalone
|
|
485
|
+
|
|
486
|
+
# Prevent removal of empty Next.js app router dirs by the post-install hook
|
|
487
|
+
for _d in \
|
|
488
|
+
.next/standalone/.next/server/app/dashboard \
|
|
489
|
+
.next/standalone/.next/server/app/dashboard/settings \
|
|
490
|
+
.next/standalone/.next/server/app/dashboard/providers; do
|
|
491
|
+
touch "${DESTDIR}/usr/lib/omniroute/${_d}/.keep"
|
|
492
|
+
done
|
|
493
|
+
|
|
494
|
+
cat > "${WRKDIR}/omniroute" <<'EOF'
|
|
495
|
+
#!/bin/sh
|
|
496
|
+
export PORT="${PORT:-20128}"
|
|
497
|
+
export DATA_DIR="${DATA_DIR:-${XDG_DATA_HOME:-${HOME}/.local/share}/omniroute}"
|
|
498
|
+
export LOG_TO_FILE="${LOG_TO_FILE:-false}"
|
|
499
|
+
mkdir -p "${DATA_DIR}"
|
|
500
|
+
exec node /usr/lib/omniroute/.next/standalone/server.js "$@"
|
|
501
|
+
EOF
|
|
502
|
+
vbin "${WRKDIR}/omniroute"
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
post_install() {
|
|
506
|
+
vlicense LICENSE
|
|
507
|
+
}
|
|
508
|
+
```
|
|
509
|
+
|
|
510
|
+
</details>
|
|
511
|
+
|
|
412
512
|
### Environment Variables
|
|
413
513
|
|
|
414
514
|
| Variable | Default | Description |
|
|
@@ -582,6 +682,22 @@ Configure via **Dashboard → Settings → Routing**.
|
|
|
582
682
|
| **Least Used** | Routes to the account with the oldest `lastUsedAt` timestamp, distributing traffic evenly |
|
|
583
683
|
| **Cost Optimized** | Routes to the account with the lowest priority value, optimizing for lowest-cost providers |
|
|
584
684
|
|
|
685
|
+
#### External Sticky Session Header
|
|
686
|
+
|
|
687
|
+
For external session affinity (for example, Claude Code/Codex agents behind reverse proxies), send:
|
|
688
|
+
|
|
689
|
+
```http
|
|
690
|
+
X-Session-Id: your-session-key
|
|
691
|
+
```
|
|
692
|
+
|
|
693
|
+
OmniRoute also accepts `x_session_id` and returns the effective session key in `X-OmniRoute-Session-Id`.
|
|
694
|
+
|
|
695
|
+
If you use Nginx and send underscore-form headers, enable:
|
|
696
|
+
|
|
697
|
+
```nginx
|
|
698
|
+
underscores_in_headers on;
|
|
699
|
+
```
|
|
700
|
+
|
|
585
701
|
#### Wildcard Model Aliases
|
|
586
702
|
|
|
587
703
|
Create wildcard patterns to remap model names:
|
|
@@ -766,7 +882,7 @@ Access via **Dashboard → Health**. Real-time system health overview with 6 car
|
|
|
766
882
|
|
|
767
883
|
OmniRoute is available as a native desktop application for Windows, macOS, and Linux.
|
|
768
884
|
|
|
769
|
-
###
|
|
885
|
+
### I-install
|
|
770
886
|
|
|
771
887
|
```bash
|
|
772
888
|
# From the electron directory:
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
# User Guide (Polski)
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
🌐 **Languages:** 🇺🇸 [English](../../USER_GUIDE.md) · 🇧🇷 [pt-BR](../pt-BR/USER_GUIDE.md) · 🇪🇸 [es](../es/USER_GUIDE.md) · 🇫🇷 [fr](../fr/USER_GUIDE.md) · 🇩🇪 [de](../de/USER_GUIDE.md) · 🇮🇹 [it](../it/USER_GUIDE.md) · 🇷🇺 [ru](../ru/USER_GUIDE.md) · 🇨🇳 [zh-CN](../zh-CN/USER_GUIDE.md) · 🇯🇵 [ja](../ja/USER_GUIDE.md) · 🇰🇷 [ko](../ko/USER_GUIDE.md) · 🇸🇦 [ar](../ar/USER_GUIDE.md) · 🇮🇳 [in](../in/USER_GUIDE.md) · 🇹🇭 [th](../th/USER_GUIDE.md) · 🇻🇳 [vi](../vi/USER_GUIDE.md) · 🇮🇩 [id](../id/USER_GUIDE.md) · 🇲🇾 [ms](../ms/USER_GUIDE.md) · 🇳🇱 [nl](../nl/USER_GUIDE.md) · 🇵🇱 [pl](../pl/USER_GUIDE.md) · 🇸🇪 [sv](../sv/USER_GUIDE.md) · 🇳🇴 [no](../no/USER_GUIDE.md) · 🇩🇰 [da](../da/USER_GUIDE.md) · 🇫🇮 [fi](../fi/USER_GUIDE.md) · 🇵🇹 [pt](../pt/USER_GUIDE.md) · 🇷🇴 [ro](../ro/USER_GUIDE.md) · 🇭🇺 [hu](../hu/USER_GUIDE.md) · 🇧🇬 [bg](../bg/USER_GUIDE.md) · 🇸🇰 [sk](../sk/USER_GUIDE.md) · 🇺🇦 [uk-UA](../uk-UA/USER_GUIDE.md) · 🇮🇱 [he](../he/USER_GUIDE.md) · 🇵🇭 [phi](../phi/USER_GUIDE.md)
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
> 🇺🇸 [English](../../USER_GUIDE.md)
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
---
|
|
8
8
|
|
|
9
9
|
Complete guide for configuring providers, creating combos, integrating CLI tools, and deploying OmniRoute.
|
|
10
10
|
|
|
@@ -409,6 +409,106 @@ docker run -d --name omniroute -p 20128:20128 --env-file ./.env -v omniroute-dat
|
|
|
409
409
|
|
|
410
410
|
For host-integrated mode with CLI binaries, see the Docker section in the main docs.
|
|
411
411
|
|
|
412
|
+
### Void Linux (xbps-src)
|
|
413
|
+
|
|
414
|
+
Void Linux users can package and install OmniRoute natively using the `xbps-src` cross-compilation framework. This automates the Node.js standalone build along with the required `better-sqlite3` native bindings.
|
|
415
|
+
|
|
416
|
+
<details>
|
|
417
|
+
<summary><b>View xbps-src template</b></summary>
|
|
418
|
+
|
|
419
|
+
```bash
|
|
420
|
+
# Template file for 'omniroute'
|
|
421
|
+
pkgname=omniroute
|
|
422
|
+
version=3.2.4
|
|
423
|
+
revision=1
|
|
424
|
+
hostmakedepends="nodejs python3 make"
|
|
425
|
+
depends="openssl"
|
|
426
|
+
short_desc="Universal AI gateway with smart routing for multiple LLM providers"
|
|
427
|
+
maintainer="zenobit <zenobit@disroot.org>"
|
|
428
|
+
license="MIT"
|
|
429
|
+
homepage="https://github.com/diegosouzapw/OmniRoute"
|
|
430
|
+
distfiles="https://github.com/diegosouzapw/OmniRoute/archive/refs/tags/v${version}.tar.gz"
|
|
431
|
+
checksum=009400afee90a9f32599d8fe734145cfd84098140b7287990183dde45ae2245b
|
|
432
|
+
system_accounts="_omniroute"
|
|
433
|
+
omniroute_homedir="/var/lib/omniroute"
|
|
434
|
+
export NODE_ENV=production
|
|
435
|
+
export npm_config_engine_strict=false
|
|
436
|
+
export npm_config_loglevel=error
|
|
437
|
+
export npm_config_fund=false
|
|
438
|
+
export npm_config_audit=false
|
|
439
|
+
|
|
440
|
+
do_build() {
|
|
441
|
+
# Determine target CPU arch for node-gyp
|
|
442
|
+
local _gyp_arch
|
|
443
|
+
case "$XBPS_TARGET_MACHINE" in
|
|
444
|
+
aarch64*) _gyp_arch=arm64 ;;
|
|
445
|
+
armv7*|armv6*) _gyp_arch=arm ;;
|
|
446
|
+
i686*) _gyp_arch=ia32 ;;
|
|
447
|
+
*) _gyp_arch=x64 ;;
|
|
448
|
+
esac
|
|
449
|
+
|
|
450
|
+
# 1) Install all deps – skip scripts
|
|
451
|
+
NODE_ENV=development npm ci --ignore-scripts
|
|
452
|
+
|
|
453
|
+
# 2) Build the Next.js standalone bundle
|
|
454
|
+
npm run build
|
|
455
|
+
|
|
456
|
+
# 3) Copy static assets into standalone
|
|
457
|
+
cp -r .next/static .next/standalone/.next/static
|
|
458
|
+
[ -d public ] && cp -r public .next/standalone/public || true
|
|
459
|
+
|
|
460
|
+
# 4) Compile better-sqlite3 native binding
|
|
461
|
+
local _node_gyp=/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js
|
|
462
|
+
(cd node_modules/better-sqlite3 && node "$_node_gyp" rebuild --arch="$_gyp_arch")
|
|
463
|
+
|
|
464
|
+
# 5) Place the compiled binding into the standalone bundle
|
|
465
|
+
local _bs3_release=.next/standalone/node_modules/better-sqlite3/build/Release
|
|
466
|
+
mkdir -p "$_bs3_release"
|
|
467
|
+
cp node_modules/better-sqlite3/build/Release/better_sqlite3.node "$_bs3_release/"
|
|
468
|
+
|
|
469
|
+
# 6) Remove arch-specific sharp bundles
|
|
470
|
+
rm -rf .next/standalone/node_modules/@img
|
|
471
|
+
|
|
472
|
+
# 7) Copy pino runtime deps omitted by Next.js static analysis:
|
|
473
|
+
for _mod in pino-abstract-transport split2 process-warning; do
|
|
474
|
+
cp -r "node_modules/$_mod" .next/standalone/node_modules/
|
|
475
|
+
done
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
do_check() {
|
|
479
|
+
npm run test:unit
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
do_install() {
|
|
483
|
+
vmkdir usr/lib/omniroute/.next
|
|
484
|
+
vcopy .next/standalone/. usr/lib/omniroute/.next/standalone
|
|
485
|
+
|
|
486
|
+
# Prevent removal of empty Next.js app router dirs by the post-install hook
|
|
487
|
+
for _d in \
|
|
488
|
+
.next/standalone/.next/server/app/dashboard \
|
|
489
|
+
.next/standalone/.next/server/app/dashboard/settings \
|
|
490
|
+
.next/standalone/.next/server/app/dashboard/providers; do
|
|
491
|
+
touch "${DESTDIR}/usr/lib/omniroute/${_d}/.keep"
|
|
492
|
+
done
|
|
493
|
+
|
|
494
|
+
cat > "${WRKDIR}/omniroute" <<'EOF'
|
|
495
|
+
#!/bin/sh
|
|
496
|
+
export PORT="${PORT:-20128}"
|
|
497
|
+
export DATA_DIR="${DATA_DIR:-${XDG_DATA_HOME:-${HOME}/.local/share}/omniroute}"
|
|
498
|
+
export LOG_TO_FILE="${LOG_TO_FILE:-false}"
|
|
499
|
+
mkdir -p "${DATA_DIR}"
|
|
500
|
+
exec node /usr/lib/omniroute/.next/standalone/server.js "$@"
|
|
501
|
+
EOF
|
|
502
|
+
vbin "${WRKDIR}/omniroute"
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
post_install() {
|
|
506
|
+
vlicense LICENSE
|
|
507
|
+
}
|
|
508
|
+
```
|
|
509
|
+
|
|
510
|
+
</details>
|
|
511
|
+
|
|
412
512
|
### Environment Variables
|
|
413
513
|
|
|
414
514
|
| Variable | Default | Description |
|
|
@@ -582,6 +682,22 @@ Configure via **Dashboard → Settings → Routing**.
|
|
|
582
682
|
| **Least Used** | Routes to the account with the oldest `lastUsedAt` timestamp, distributing traffic evenly |
|
|
583
683
|
| **Cost Optimized** | Routes to the account with the lowest priority value, optimizing for lowest-cost providers |
|
|
584
684
|
|
|
685
|
+
#### External Sticky Session Header
|
|
686
|
+
|
|
687
|
+
For external session affinity (for example, Claude Code/Codex agents behind reverse proxies), send:
|
|
688
|
+
|
|
689
|
+
```http
|
|
690
|
+
X-Session-Id: your-session-key
|
|
691
|
+
```
|
|
692
|
+
|
|
693
|
+
OmniRoute also accepts `x_session_id` and returns the effective session key in `X-OmniRoute-Session-Id`.
|
|
694
|
+
|
|
695
|
+
If you use Nginx and send underscore-form headers, enable:
|
|
696
|
+
|
|
697
|
+
```nginx
|
|
698
|
+
underscores_in_headers on;
|
|
699
|
+
```
|
|
700
|
+
|
|
585
701
|
#### Wildcard Model Aliases
|
|
586
702
|
|
|
587
703
|
Create wildcard patterns to remap model names:
|
|
@@ -766,7 +882,7 @@ Access via **Dashboard → Health**. Real-time system health overview with 6 car
|
|
|
766
882
|
|
|
767
883
|
OmniRoute is available as a native desktop application for Windows, macOS, and Linux.
|
|
768
884
|
|
|
769
|
-
###
|
|
885
|
+
### Zainstaluj
|
|
770
886
|
|
|
771
887
|
```bash
|
|
772
888
|
# From the electron directory:
|