omniroute 3.4.0 โ 3.4.1
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/README.md +107 -0
- 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/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/api/system/version/route.js.nft.json +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]__00506b12._.js +3 -3
- package/app/.next/server/chunks/[root-of-the-server]__065579e2._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0afaa15f._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__0d7861ae._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__18cfc934._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__28c3dc07._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__3cedce56._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__42f8ae2b._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__44e9e6ab._.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]__49ea8f9d._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__54fdae92._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__55469489._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__60f5aa24._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__620cd5d6._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__6cea0a3b._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__75958ae6._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__7ace0fcd._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__81696045._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__81cb2f10._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__82a16e48._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__85486e23._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__863ba23a._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__90ac0c12._.js +2 -2
- package/app/.next/server/chunks/[root-of-the-server]__929e2a6f._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__976c4cd3._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__98bcfee2._.js +2 -2
- package/app/.next/server/chunks/[root-of-the-server]__a32d3818._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__b756cf74._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__ba461ded._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__bfaa196f._.js +3 -3
- package/app/.next/server/chunks/[root-of-the-server]__cd397a19._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__d36f8208._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__d68b1385._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__d8230cae._.js +2 -2
- package/app/.next/server/chunks/[root-of-the-server]__ee20f39d._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__f1f0a45a._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__f46235a5._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__f894811a._.js +1 -1
- package/app/.next/server/chunks/[root-of-the-server]__fadc6492._.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/{fcf7178f8caed48a.js โ b9e44dba32828555.js} +1 -1
- package/app/README.md +107 -0
- package/app/docs/i18n/ar/README.md +168 -30
- package/app/docs/i18n/bg/README.md +168 -30
- package/app/docs/i18n/da/README.md +168 -30
- package/app/docs/i18n/de/README.md +168 -30
- package/app/docs/i18n/es/README.md +168 -30
- package/app/docs/i18n/fi/README.md +168 -30
- package/app/docs/i18n/fr/README.md +168 -30
- package/app/docs/i18n/he/README.md +168 -30
- package/app/docs/i18n/hu/README.md +168 -30
- package/app/docs/i18n/id/README.md +168 -30
- package/app/docs/i18n/in/README.md +168 -30
- package/app/docs/i18n/it/README.md +168 -30
- package/app/docs/i18n/ja/README.md +168 -30
- package/app/docs/i18n/ko/README.md +168 -30
- package/app/docs/i18n/ms/README.md +168 -30
- package/app/docs/i18n/nl/README.md +168 -30
- package/app/docs/i18n/no/README.md +168 -30
- package/app/docs/i18n/phi/README.md +168 -30
- package/app/docs/i18n/pl/README.md +168 -30
- package/app/docs/i18n/pt/README.md +168 -30
- package/app/docs/i18n/pt-BR/README.md +168 -30
- package/app/docs/i18n/ro/README.md +168 -30
- package/app/docs/i18n/ru/README.md +168 -30
- package/app/docs/i18n/sk/README.md +168 -30
- package/app/docs/i18n/sv/README.md +168 -30
- package/app/docs/i18n/th/README.md +168 -30
- package/app/docs/i18n/uk-UA/README.md +168 -30
- package/app/docs/i18n/vi/README.md +168 -30
- package/app/docs/i18n/zh-CN/README.md +168 -30
- package/app/docs/openapi.yaml +1 -1
- package/app/package-lock.json +2 -2
- package/app/package.json +1 -1
- package/app/src/lib/apiBridgeServer.ts +2 -0
- package/app/src/shared/utils/apiAuth.ts +6 -1
- package/app/tests/integration/integration-wiring.test.mjs +4 -4
- package/package.json +1 -1
- /package/app/.next/static/{lM78WtVwkrUDAIJYkWgbP โ 6GZ871m6mzG0Q0bvGX2dT}/_buildManifest.js +0 -0
- /package/app/.next/static/{lM78WtVwkrUDAIJYkWgbP โ 6GZ871m6mzG0Q0bvGX2dT}/_clientMiddlewareManifest.json +0 -0
- /package/app/.next/static/{lM78WtVwkrUDAIJYkWgbP โ 6GZ871m6mzG0Q0bvGX2dT}/_ssgManifest.js +0 -0
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
|
|
7
8
|
### Never stop coding. Smart routing to **FREE & low-cost AI models** with automatic fallback.
|
|
8
9
|
|
|
9
10
|
_Your universal API proxy โ one endpoint, 67+ providers, zero downtime. Now with **MCP & A2A** agent orchestration._
|
|
@@ -30,6 +31,30 @@ _Your universal API proxy โ one endpoint, 67+ providers, zero downtime. Now wi
|
|
|
30
31
|
|
|
31
32
|
---
|
|
32
33
|
|
|
34
|
+
## Breaking Change: Unified Logging Upgrade
|
|
35
|
+
|
|
36
|
+
> [!WARNING]
|
|
37
|
+
> **This release changes both the on-disk request log layout and the logging environment variables.**
|
|
38
|
+
>
|
|
39
|
+
> If you are upgrading an existing instance:
|
|
40
|
+
>
|
|
41
|
+
> - Request logs now live in `DATA_DIR/call_logs/YYYY-MM-DD/` as **one JSON artifact per request**.
|
|
42
|
+
> - The old `DATA_DIR/logs/` session folders and `DATA_DIR/log.txt` summary file are removed.
|
|
43
|
+
> - On the first startup after upgrading, OmniRoute creates a safety backup at `DATA_DIR/log_archives/*.zip` before removing the deprecated request log layout.
|
|
44
|
+
> - Legacy logging env vars such as `LOG_TO_FILE`, `LOG_FILE_PATH`, `LOG_MAX_FILE_SIZE`, `LOG_RETENTION_DAYS`, `LOG_LEVEL`, `LOG_FORMAT`, `ENABLE_REQUEST_LOGS`, `CALL_LOGS_MAX`, `CALL_LOG_PAYLOAD_MODE`, and `PROXY_LOG_MAX_ENTRIES` are no longer supported.
|
|
45
|
+
> - Use the new env model instead:
|
|
46
|
+
> - `APP_LOG_TO_FILE`
|
|
47
|
+
> - `APP_LOG_FILE_PATH`
|
|
48
|
+
> - `APP_LOG_MAX_FILE_SIZE`
|
|
49
|
+
> - `APP_LOG_RETENTION_DAYS`
|
|
50
|
+
> - `APP_LOG_LEVEL`
|
|
51
|
+
> - `APP_LOG_FORMAT`
|
|
52
|
+
> - `CALL_LOG_RETENTION_DAYS`
|
|
53
|
+
>
|
|
54
|
+
> For release details and upgrade notes, see the [CHANGELOG](CHANGELOG.md).
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
33
58
|
## ๐ What's New in v3.0.0
|
|
34
59
|
|
|
35
60
|
> **Upgrading from v2.9.5?** โ See the [full CHANGELOG](CHANGELOG.md#300--2026-03-22-release-candidate--not-yet-merged-to-main) for all changes.
|
|
@@ -203,7 +228,7 @@ When opening an issue, please run the system-info command and attach the generat
|
|
|
203
228
|
npm run system-info
|
|
204
229
|
```
|
|
205
230
|
|
|
206
|
-
This generates a `system-info.txt` with your Node.js version, OmniRoute version, OS details, installed CLI tools (
|
|
231
|
+
This generates a `system-info.txt` with your Node.js version, OmniRoute version, OS details, installed CLI tools (qoder, gemini, claude, codex, antigravity, droid, etc.), Docker/PM2 status, and system packages โ everything we need to reproduce your issue quickly. Attach the file directly to your GitHub issue.
|
|
207
232
|
|
|
208
233
|
---
|
|
209
234
|
|
|
@@ -229,7 +254,7 @@ This generates a `system-info.txt` with your Node.js version, OmniRoute version,
|
|
|
229
254
|
โ โ budget limit
|
|
230
255
|
โโโ [Tier 3: CHEAP] GLM ($0.6/1M), MiniMax ($0.2/1M)
|
|
231
256
|
โ โ budget limit
|
|
232
|
-
โโโ [Tier 4: FREE]
|
|
257
|
+
โโโ [Tier 4: FREE] Qoder, Qwen, Kiro (unlimited)
|
|
233
258
|
|
|
234
259
|
Result: Never stop coding, minimal cost
|
|
235
260
|
```
|
|
@@ -296,7 +321,7 @@ Not everyone can pay $20โ200/month for AI subscriptions. Students, devs from e
|
|
|
296
321
|
|
|
297
322
|
**How OmniRoute solves it:**
|
|
298
323
|
|
|
299
|
-
- **Free Tier Providers Built-in** โ Native support for 100% free providers:
|
|
324
|
+
- **Free Tier Providers Built-in** โ Native support for 100% free providers: Qoder (5 unlimited models via OAuth: kimi-k2-thinking, qwen3-coder-plus, deepseek-r1, minimax-m2, kimi-k2), Qwen (4 unlimited models: qwen3-coder-plus, qwen3-coder-flash, qwen3-coder-next, vision-model), Kiro (Claude + AWS Builder ID for free), Gemini CLI (180K tokens/month free)
|
|
300
325
|
- **Ollama Cloud** โ Cloud-hosted Ollama models at `api.ollama.com` with free "Light usage" tier; use `ollamacloud/<model>` prefix
|
|
301
326
|
- **Free-Only Combos** โ Chain `gc/gemini-3-flash โ if/kimi-k2-thinking โ qw/qwen3-coder-plus` = $0/month with zero downtime
|
|
302
327
|
- **NVIDIA NIM Free Access** โ ~40 RPM dev-forever free access to 70+ models at build.nvidia.com (transitioning from credits to pure rate limits)
|
|
@@ -360,7 +385,7 @@ Claude Code, Codex, Gemini CLI, Copilot โ all use OAuth 2.0 with expiring toke
|
|
|
360
385
|
**How OmniRoute solves it:**
|
|
361
386
|
|
|
362
387
|
- **Auto Token Refresh** โ OAuth tokens refresh in background before expiration
|
|
363
|
-
- **OAuth 2.0 (PKCE) Built-in** โ Automatic flow for Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen,
|
|
388
|
+
- **OAuth 2.0 (PKCE) Built-in** โ Automatic flow for Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, Qoder
|
|
364
389
|
- **Multi-Account OAuth** โ Multiple accounts per provider via JWT/ID token extraction
|
|
365
390
|
- **OAuth LAN/Remote Fix** โ Private IP detection for `redirect_uri` + manual URL mode for remote servers
|
|
366
391
|
- **OAuth Behind Nginx** โ Uses `window.location.origin` for reverse proxy compatibility
|
|
@@ -413,7 +438,7 @@ Installing, configuring, and maintaining an AI proxy across different environmen
|
|
|
413
438
|
- **Electron Desktop App** โ Native app for Windows/macOS/Linux with system tray, auto-start, offline mode
|
|
414
439
|
- **Split-Port Mode** โ API and Dashboard on separate ports for advanced scenarios (reverse proxy, container networking)
|
|
415
440
|
- **Cloud Sync** โ Config synchronization across devices via Cloudflare Workers
|
|
416
|
-
- **DB Backups** โ Automatic backup, restore, export and import of all settings
|
|
441
|
+
- **DB Backups** โ Automatic backup, restore, export and import of all settings, with `DISABLE_SQLITE_AUTO_BACKUP` for externally managed backups
|
|
417
442
|
|
|
418
443
|
</details>
|
|
419
444
|
|
|
@@ -737,7 +762,7 @@ Outcome: deep fallback depth for deadline-critical workloads
|
|
|
737
762
|
| Step | Action | Providers Unlocked |
|
|
738
763
|
| ---- | -------------------------------------------------- | ------------------------------------------------------------------ |
|
|
739
764
|
| 1 | Connect **Kiro** (AWS Builder ID OAuth) | Claude Sonnet 4.5, Haiku 4.5 โ **unlimited** |
|
|
740
|
-
| 2 | Connect **
|
|
765
|
+
| 2 | Connect **Qoder** (Google OAuth) | kimi-k2-thinking, qwen3-coder-plus, deepseek-r1... โ **unlimited** |
|
|
741
766
|
| 3 | Connect **Qwen** (Device Code) | qwen3-coder-plus, qwen3-coder-flash... โ **unlimited** |
|
|
742
767
|
| 4 | Connect **Gemini CLI** (Google OAuth) | gemini-3-flash, gemini-2.5-pro โ **180K/mo free** |
|
|
743
768
|
| 5 | `/dashboard/combos` โ **Free Stack ($0)** template | Round-robin all free providers automatically |
|
|
@@ -838,6 +863,113 @@ npm install
|
|
|
838
863
|
PORT=20128 DASHBOARD_PORT=20129 NEXT_PUBLIC_BASE_URL=http://localhost:20129 npm run dev
|
|
839
864
|
```
|
|
840
865
|
|
|
866
|
+
<details>
|
|
867
|
+
<summary><b>Void Linux (`xbps-src` template)</b></summary>
|
|
868
|
+
|
|
869
|
+
For Void Linux users, you can build a native package using `xbps-src`. Save this block as `srcpkgs/omniroute/template`:
|
|
870
|
+
|
|
871
|
+
```bash
|
|
872
|
+
# Template file for 'omniroute'
|
|
873
|
+
pkgname=omniroute
|
|
874
|
+
version=3.4.1
|
|
875
|
+
revision=1
|
|
876
|
+
hostmakedepends="nodejs python3 make"
|
|
877
|
+
depends="openssl"
|
|
878
|
+
short_desc="Universal AI gateway with smart routing for multiple LLM providers"
|
|
879
|
+
maintainer="zenobit <zenobit@disroot.org>"
|
|
880
|
+
license="MIT"
|
|
881
|
+
homepage="https://github.com/diegosouzapw/OmniRoute"
|
|
882
|
+
distfiles="https://github.com/diegosouzapw/OmniRoute/archive/refs/tags/v${version}.tar.gz"
|
|
883
|
+
checksum=009400afee90a9f32599d8fe734145cfd84098140b7287990183dde45ae2245b
|
|
884
|
+
system_accounts="_omniroute"
|
|
885
|
+
omniroute_homedir="/var/lib/omniroute"
|
|
886
|
+
export NODE_ENV=production
|
|
887
|
+
export npm_config_engine_strict=false
|
|
888
|
+
export npm_config_loglevel=error
|
|
889
|
+
export npm_config_fund=false
|
|
890
|
+
export npm_config_audit=false
|
|
891
|
+
|
|
892
|
+
do_build() {
|
|
893
|
+
# Determine target CPU arch for node-gyp
|
|
894
|
+
local _gyp_arch
|
|
895
|
+
case "$XBPS_TARGET_MACHINE" in
|
|
896
|
+
aarch64*) _gyp_arch=arm64 ;;
|
|
897
|
+
armv7*|armv6*) _gyp_arch=arm ;;
|
|
898
|
+
i686*) _gyp_arch=ia32 ;;
|
|
899
|
+
*) _gyp_arch=x64 ;;
|
|
900
|
+
esac
|
|
901
|
+
|
|
902
|
+
# 1) Install all deps โ skip scripts (no network in do_build, native modules
|
|
903
|
+
# compiled separately below; better-sqlite3 is serverExternalPackage so
|
|
904
|
+
# Next.js does not execute it during next build)
|
|
905
|
+
NODE_ENV=development npm ci --ignore-scripts
|
|
906
|
+
|
|
907
|
+
# 2) Build the Next.js standalone bundle
|
|
908
|
+
npm run build
|
|
909
|
+
|
|
910
|
+
# 3) Copy static assets into standalone
|
|
911
|
+
cp -r .next/static .next/standalone/.next/static
|
|
912
|
+
[ -d public ] && cp -r public .next/standalone/public || true
|
|
913
|
+
|
|
914
|
+
# 4) Compile better-sqlite3 native binding for the target architecture.
|
|
915
|
+
# Use node-gyp directly so CC/CXX from xbps-src cross-toolchain are used
|
|
916
|
+
# without npm altering them.
|
|
917
|
+
local _node_gyp=/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js
|
|
918
|
+
(cd node_modules/better-sqlite3 && node "$_node_gyp" rebuild --arch="$_gyp_arch")
|
|
919
|
+
|
|
920
|
+
# 5) Place the compiled binding into the standalone bundle
|
|
921
|
+
local _bs3_release=.next/standalone/node_modules/better-sqlite3/build/Release
|
|
922
|
+
mkdir -p "$_bs3_release"
|
|
923
|
+
cp node_modules/better-sqlite3/build/Release/better_sqlite3.node "$_bs3_release/"
|
|
924
|
+
|
|
925
|
+
# 6) Remove arch-specific sharp bundles โ upstream sets images.unoptimized=true
|
|
926
|
+
# so sharp is not used at runtime; x64 .so files would break aarch64 strip
|
|
927
|
+
rm -rf .next/standalone/node_modules/@img
|
|
928
|
+
|
|
929
|
+
# 7) Copy pino runtime deps omitted by Next.js static analysis:
|
|
930
|
+
# pino-abstract-transport โ required by pino's worker thread
|
|
931
|
+
# split2 โ dep of pino-abstract-transport
|
|
932
|
+
# process-warning โ dep of pino itself
|
|
933
|
+
for _mod in pino-abstract-transport split2 process-warning; do
|
|
934
|
+
cp -r "node_modules/$_mod" .next/standalone/node_modules/
|
|
935
|
+
done
|
|
936
|
+
}
|
|
937
|
+
|
|
938
|
+
do_check() {
|
|
939
|
+
npm run test:unit
|
|
940
|
+
}
|
|
941
|
+
|
|
942
|
+
do_install() {
|
|
943
|
+
vmkdir usr/lib/omniroute/.next
|
|
944
|
+
|
|
945
|
+
vcopy .next/standalone/. usr/lib/omniroute/.next/standalone
|
|
946
|
+
|
|
947
|
+
# Prevent removal of empty Next.js app router dirs by the post-install hook
|
|
948
|
+
for _d in \
|
|
949
|
+
.next/standalone/.next/server/app/dashboard \
|
|
950
|
+
.next/standalone/.next/server/app/dashboard/settings \
|
|
951
|
+
.next/standalone/.next/server/app/dashboard/providers; do
|
|
952
|
+
touch "${DESTDIR}/usr/lib/omniroute/${_d}/.keep"
|
|
953
|
+
done
|
|
954
|
+
|
|
955
|
+
cat > "${WRKDIR}/omniroute" <<'EOF'
|
|
956
|
+
#!/bin/sh
|
|
957
|
+
export PORT="${PORT:-20128}"
|
|
958
|
+
export DATA_DIR="${DATA_DIR:-${XDG_DATA_HOME:-${HOME}/.local/share}/omniroute}"
|
|
959
|
+
export LOG_TO_FILE="${LOG_TO_FILE:-false}"
|
|
960
|
+
mkdir -p "${DATA_DIR}"
|
|
961
|
+
exec node /usr/lib/omniroute/.next/standalone/server.js "$@"
|
|
962
|
+
EOF
|
|
963
|
+
vbin "${WRKDIR}/omniroute"
|
|
964
|
+
}
|
|
965
|
+
|
|
966
|
+
post_install() {
|
|
967
|
+
vlicense LICENSE
|
|
968
|
+
}
|
|
969
|
+
```
|
|
970
|
+
|
|
971
|
+
</details>
|
|
972
|
+
|
|
841
973
|
---
|
|
842
974
|
|
|
843
975
|
## ๐ณ Docker
|
|
@@ -886,6 +1018,7 @@ Notes:
|
|
|
886
1018
|
|
|
887
1019
|
- Quick Tunnel URLs are temporary and change after every restart.
|
|
888
1020
|
- Managed install currently supports Linux, macOS, and Windows on `x64` / `arm64`.
|
|
1021
|
+
- Docker images bundle system CA roots and pass them to managed `cloudflared`, which avoids TLS trust failures when the tunnel bootstraps inside the container.
|
|
889
1022
|
- Set `CLOUDFLARED_BIN=/absolute/path/to/cloudflared` if you want OmniRoute to use an existing binary instead of downloading one.
|
|
890
1023
|
|
|
891
1024
|
**Using Docker Compose with Caddy (HTTPS Auto-TLS):**
|
|
@@ -983,7 +1116,7 @@ When minimized, OmniRoute lives in your system tray with quick actions:
|
|
|
983
1116
|
| | MiniMax M2.1 | $0.2/1M | 5-hour rolling | Cheapest option |
|
|
984
1117
|
| | Kimi K2.5 (Moonshot API) ๐ | Pay-per-use | None | Direct Moonshot API access |
|
|
985
1118
|
| | Kimi K2 | $9/mo flat | 10M tokens/mo | Predictable cost |
|
|
986
|
-
| **๐ FREE** |
|
|
1119
|
+
| **๐ FREE** | Qoder | **$0** | Unlimited | 5 models unlimited |
|
|
987
1120
|
| | Qwen | **$0** | Unlimited | 4 models unlimited |
|
|
988
1121
|
| | Kiro | **$0** | Unlimited | Claude Sonnet/Haiku (AWS Builder) |
|
|
989
1122
|
| | LongCat Flash-Lite ๐ | **$0** (50M tok/day ๐ฅ) | 1 RPS | Largest free quota on Earth |
|
|
@@ -998,7 +1131,7 @@ When minimized, OmniRoute lives in your system tray with quick actions:
|
|
|
998
1131
|
```
|
|
999
1132
|
# ๐ Ultimate Free Stack 2026 โ 11 Providers, $0 Forever
|
|
1000
1133
|
Kiro (kr/) โ Claude Sonnet/Haiku UNLIMITED
|
|
1001
|
-
|
|
1134
|
+
Qoder (if/) โ kimi-k2-thinking, qwen3-coder-plus, deepseek-r1 UNLIMITED
|
|
1002
1135
|
LongCat Lite (lc/) โ LongCat-Flash-Lite โ 50M tokens/day ๐ฅ
|
|
1003
1136
|
Pollinations (pol/) โ GPT-5, Claude, DeepSeek, Llama 4 โ no key needed
|
|
1004
1137
|
Qwen (qw/) โ qwen3-coder-plus, qwen3-coder-flash, qwen3-coder-next UNLIMITED
|
|
@@ -1028,7 +1161,7 @@ Cerebras (cerebras/) โ Llama/Qwen world-fastest โ 1M tok/day
|
|
|
1028
1161
|
| `claude-haiku-4.5` | `kr/` | **Unlimited** | No reported daily cap |
|
|
1029
1162
|
| `claude-opus-4.6` | `kr/` | **Unlimited** | Latest Opus via Kiro |
|
|
1030
1163
|
|
|
1031
|
-
### ๐ข
|
|
1164
|
+
### ๐ข QODER MODELS (Free OAuth โ No Credit Card)
|
|
1032
1165
|
|
|
1033
1166
|
| Model | Prefix | Limit | Rate Limit |
|
|
1034
1167
|
| ------------------ | ------ | ------------- | --------------- |
|
|
@@ -1127,7 +1260,7 @@ Available free: `qwen3-235b-a22b-instruct-2507` (Qwen3 235B!), `llama-3.1-70b-in
|
|
|
1127
1260
|
>
|
|
1128
1261
|
> ```
|
|
1129
1262
|
> Kiro (kr/) โ Claude Sonnet/Haiku UNLIMITED
|
|
1130
|
-
>
|
|
1263
|
+
> Qoder (if/) โ kimi-k2-thinking, qwen3-coder-plus, deepseek-r1 UNLIMITED
|
|
1131
1264
|
> LongCat Lite (lc/) โ LongCat-Flash-Lite โ 50M tokens/day ๐ฅ
|
|
1132
1265
|
> Pollinations (pol/) โ GPT-5, Claude, DeepSeek, Llama 4 โ no key needed
|
|
1133
1266
|
> Qwen (qw/) โ qwen3-coder models UNLIMITED
|
|
@@ -1279,21 +1412,22 @@ OmniRoute v2.0 is built as an operational platform, not just a relay proxy.
|
|
|
1279
1412
|
|
|
1280
1413
|
### โ๏ธ Deployment & Platform
|
|
1281
1414
|
|
|
1282
|
-
| Feature
|
|
1283
|
-
|
|
|
1284
|
-
| ๐ **Deploy Anywhere**
|
|
1285
|
-
| ๐ **Cloudflare Tunnel** ๐
|
|
1286
|
-
|
|
|
1287
|
-
|
|
|
1288
|
-
|
|
|
1289
|
-
|
|
|
1290
|
-
|
|
|
1291
|
-
|
|
|
1292
|
-
|
|
|
1293
|
-
|
|
|
1294
|
-
|
|
|
1295
|
-
|
|
|
1296
|
-
|
|
|
1415
|
+
| Feature | What It Does |
|
|
1416
|
+
| ------------------------------ | --------------------------------------------------------------------- |
|
|
1417
|
+
| ๐ **Deploy Anywhere** | Localhost, VPS, Docker, Cloud environments |
|
|
1418
|
+
| ๐ **Cloudflare Tunnel** ๐ | One-click Quick Tunnel integration from the dashboard |
|
|
1419
|
+
| ๐ **API Key Model Filtering** | Native /v1/models response filtered via assigned Bearer context roles |
|
|
1420
|
+
| โก **Smart Cache Bypass** | Configurable TTL heuristics and forced refetch controls |
|
|
1421
|
+
| ๐ **Backup/Restore** | Export/import and disaster recovery flows |
|
|
1422
|
+
| ๐ง **Onboarding Wizard** | First-run guided setup |
|
|
1423
|
+
| ๐ง **CLI Tools Dashboard** | One-click setup for popular coding tools |
|
|
1424
|
+
| ๐ฎ **Model Playground** | Test any provider/model/endpoint from the dashboard |
|
|
1425
|
+
| ๐ **CLI Fingerprint Toggle** | Per-provider fingerprint matching in Settings > Security |
|
|
1426
|
+
| ๐ **i18n (30 languages)** | Full dashboard + docs language support with RTL coverage |
|
|
1427
|
+
| ๐งน **Clear All Models** | One-click model list clearing in provider details |
|
|
1428
|
+
| ๐๏ธ **Sidebar Controls** ๐ | Hide components and integrations from Appearance Settings |
|
|
1429
|
+
| ๐ **Issue Templates** | Standardized GitHub templates for bugs and features |
|
|
1430
|
+
| ๐ **Custom Data Directory** | `DATA_DIR` override for storage location |
|
|
1297
1431
|
|
|
1298
1432
|
### Feature Deep Dive
|
|
1299
1433
|
|
|
@@ -1545,6 +1679,8 @@ Models:
|
|
|
1545
1679
|
|
|
1546
1680
|
**Models:** Access 100+ models from all major providers through a single API key.
|
|
1547
1681
|
|
|
1682
|
+
**Dashboard behavior:** OpenRouter models are managed from **Available Models**. Manual add, import, and auto-sync all update the same list.
|
|
1683
|
+
|
|
1548
1684
|
</details>
|
|
1549
1685
|
|
|
1550
1686
|
<details>
|
|
@@ -1587,11 +1723,11 @@ Models:
|
|
|
1587
1723
|
<details>
|
|
1588
1724
|
<summary><b>๐ FREE Providers (Emergency Backup)</b></summary>
|
|
1589
1725
|
|
|
1590
|
-
###
|
|
1726
|
+
### Qoder (5 FREE models via OAuth)
|
|
1591
1727
|
|
|
1592
1728
|
```bash
|
|
1593
|
-
Dashboard โ Connect
|
|
1594
|
-
โ
|
|
1729
|
+
Dashboard โ Connect Qoder
|
|
1730
|
+
โ Qoder OAuth login
|
|
1595
1731
|
โ Unlimited usage
|
|
1596
1732
|
|
|
1597
1733
|
Models:
|
|
@@ -1789,7 +1925,7 @@ opencode
|
|
|
1789
1925
|
|
|
1790
1926
|
- Check usage stats in Dashboard โ Costs
|
|
1791
1927
|
- Switch primary model to GLM/MiniMax
|
|
1792
|
-
- Use free tier (Gemini CLI,
|
|
1928
|
+
- Use free tier (Gemini CLI, Qoder) for non-critical tasks
|
|
1793
1929
|
|
|
1794
1930
|
**Dashboard/API ports are wrong**
|
|
1795
1931
|
|
|
@@ -1811,7 +1947,9 @@ opencode
|
|
|
1811
1947
|
|
|
1812
1948
|
**No request logs**
|
|
1813
1949
|
|
|
1814
|
-
-
|
|
1950
|
+
- Request artifacts are written to `DATA_DIR/call_logs/` as one JSON file per request
|
|
1951
|
+
- Enable pipeline capture from Dashboard โ Logs โ Request Logs if you need detailed per-stage payloads
|
|
1952
|
+
- Set `APP_LOG_TO_FILE=true` if you also want application console logs in `logs/application/app.log`
|
|
1815
1953
|
|
|
1816
1954
|
**Connection test shows "Invalid" for OpenAI-compatible providers**
|
|
1817
1955
|
|