OmniRoute/README.ms.md
diegosouzapw 52221488d0 docs: sync all 30 language READMEs with v1.7.3 features + create workflow files
- Synced feature tables across all 28 translated READMEs (Model Aliases, Background Degradation, Rate Limit Persistence, Token Refresh Resilience)
- Updated 6 docs/i18n/*/FEATURES.md with new Settings description
- Created workflows: update-docs.md (with multi-language sync step), generate-release.md, issue-triage.md
2026-03-01 22:02:38 -03:00

1372 lines
61 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<div align="center">
<img src="./docs/screenshots/MainOmniRoute.png" alt="OmniRoute Dashboard" width="800"/>
# 🚀 OmniRoute — Gerbang AI Percuma
### Jangan sekali-kali berhenti mengekod. Penghalaan pintar ke **model AI PERCUMA & kos rendah** dengan sandaran automatik.
_Proksi API universal anda — satu titik akhir, 36+ pembekal, masa henti sifar._
**Penyelesaian Sembang • Pembenaman • Penjanaan Imej • Audio • Kedudukan Semula • 100% TypeScript**
---
### 🤖 Pembekal AI percuma untuk ejen pengekodan kegemaran anda
_Sambungkan mana-mana alat IDE atau CLI berkuasa AI melalui OmniRoute — get laluan API percuma untuk pengekodan tanpa had._
<table>
<tr>
<td align="center" width="110">
<a href="https://github.com/cline/cline">
<img src="./public/providers/openclaw.png" alt="OpenClaw" width="48"/><br/>
<b>OpenClaw</b>
</a><br/>
<sub>⭐ 205K</sub>
</td>
<td align="center" width="110">
<a href="https://github.com/HKUDS/nanobot">
<img src="./public/providers/nanobot.png" alt="NanoBot" width="48"/><br/>
<b>NanoBot</b>
</a><br/>
<sub>⭐ 20.9K</sub>
</td>
<td align="center" width="110">
<a href="https://github.com/sipeed/picoclaw">
<img src="./public/providers/picoclaw.jpg" alt="PicoClaw" width="48"/><br/>
<b>PicoClaw</b>
</a><br/>
<sub>⭐ 14.6K</sub>
</td>
<td align="center" width="110">
<a href="https://github.com/zeroclaw-labs/zeroclaw">
<img src="./public/providers/zeroclaw.png" alt="ZeroClaw" width="48"/><br/>
<b>ZeroClaw</b>
</a><br/>
<sub>⭐ 9.9K</sub>
</td>
<td align="center" width="110">
<a href="https://github.com/nearai/ironclaw">
<img src="./public/providers/ironclaw.png" alt="IronClaw" width="48"/><br/>
<b>IronClaw</b>
</a><br/>
<sub>⭐ 2.1K</sub>
</td>
</tr>
<tr>
<td align="center" width="110">
<a href="https://github.com/anomalyco/opencode">
<img src="./public/providers/opencode.svg" alt="OpenCode" width="48"/><br/>
<b>OpenCode</b>
</a><br/>
<sub>⭐ 106K</sub>
</td>
<td align="center" width="110">
<a href="https://github.com/openai/codex">
<img src="./public/providers/codex.png" alt="Codex CLI" width="48"/><br/>
<b>Codex CLI</b>
</a><br/>
<sub>⭐ 60.8K</sub>
</td>
<td align="center" width="110">
<a href="https://github.com/anthropics/claude-code">
<img src="./public/providers/claude.png" alt="Claude Code" width="48"/><br/>
<b>Claude Code</b>
</a><br/>
<sub>⭐ 67.3K</sub>
</td>
<td align="center" width="110">
<a href="https://github.com/google-gemini/gemini-cli">
<img src="./public/providers/gemini-cli.png" alt="Gemini CLI" width="48"/><br/>
<b>Gemini CLI</b>
</a><br/>
<sub>⭐ 94.7K</sub>
</td>
<td align="center" width="110">
<a href="https://github.com/Kilo-Org/kilocode">
<img src="./public/providers/kilocode.png" alt="Kilo Code" width="48"/><br/>
<b>Kilo Code</b>
</a><br/>
<sub>⭐ 15.5K</sub>
</td>
</tr>
</table>
<sub>📡 Semua ejen menyambung melalui <code>http://localhost:20128/v1</code> atau <code>http://cloud.omniroute.online/v1</code> atau model <code>http://cloud.omniroute.online/v1 —i_24_TOKEN dan satu —i_konfigurasi kuota</sub>
---
[![npm version](https://img.shields.io/npm/v/omniroute?color=cb3837&logo=npm)](https://www.npmjs.com/package/omniroute)
[![Docker Hub](https://img.shields.io/docker/v/diegosouzapw/omniroute?label=Docker%20Hub&logo=docker&color=2496ED)](https://hub.docker.com/r/diegosouzapw/omniroute)
[![License](https://img.shields.io/github/license/diegosouzapw/OmniRoute)](https://github.com/diegosouzapw/OmniRoute/blob/main/LICENSE)
[![Website](https://img.shields.io/badge/Website-omniroute.online-blue?logo=google-chrome&logoColor=white)](https://omniroute.online)
[![WhatsApp](https://img.shields.io/badge/WhatsApp-Community-25D366?logo=whatsapp&logoColor=white)](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t)
[🌐 Website](https://omniroute.online) • [🚀 Quick Start](#-quick-start) • [💡 Features](#-key-features) • [📖 Docs](#-documentation) • [💰 Pricing](#-pricing-at-a-glance) • [💬 WhatsApp](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t)
🌐 **Available in:** 🇺🇸 [English](README.md) | 🇧🇷 [Português (Brasil)](README.pt-BR.md) | 🇪🇸 [Español](README.es.md) | 🇫🇷 [Français](README.fr.md) | 🇮🇹 [Italiano](README.it.md) | 🇷🇺 [Русский](README.ru.md) | 🇨🇳 [中文 (简体)](README.zh-CN.md) | 🇩🇪 [Deutsch](README.de.md) | 🇮🇳 [हिन्दी](README.in.md) | 🇹🇭 [ไทย](README.th.md) | 🇺🇦 [Українська](README.uk-UA.md) | 🇸🇦 [العربية](README.ar.md) | 🇯🇵 [日本語](README.ja.md) | 🇻🇳 [Tiếng Việt](README.vi.md) | 🇧🇬 [Български](README.bg.md) | 🇩🇰 [Dansk](README.da.md) | 🇫🇮 [Suomi](README.fi.md) | 🇮🇱 [עברית](README.he.md) | 🇭🇺 [Magyar](README.hu.md) | 🇮🇩 [Bahasa Indonesia](README.id.md) | 🇰🇷 [한국어](README.ko.md) | 🇲🇾 [Bahasa Melayu](README.ms.md) | 🇳🇱 [Nederlands](README.nl.md) | 🇳🇴 [Norsk](README.no.md) | 🇵🇹 [Português (Portugal)](README.pt.md) | 🇷🇴 [Română](README.ro.md) | 🇵🇱 [Polski](README.pl.md) | 🇸🇰 [Slovenčina](README.sk.md) | 🇸🇪 [Svenska](README.sv.md) | 🇵🇭 [Filipino](README.phi.md)
</div>
---
## 🤔 Mengapa OmniRoute?
**Berhenti membazir wang dan mencapai had:**
- <img src="https://img.shields.io/badge/✗-e74c3c?style=flat-square" height="16"/> Kuota langganan tamat tempoh tidak digunakan setiap bulan
- <img src="https://img.shields.io/badge/✗-e74c3c?style=flat-square" height="16"/> Had kadar menghalang anda pertengahan pengekodan
- <img src="https://img.shields.io/badge/✗-e74c3c?style=flat-square" height="16"/> API Mahal ($20-50/bulan bagi setiap pembekal)
- <img src="https://img.shields.io/badge/✗-e74c3c?style=flat-square" height="16"/> Pertukaran manual antara pembekal
**OmniRoute menyelesaikan ini:**
-**Maksimumkan langganan** - Jejaki kuota, gunakan setiap bit sebelum ditetapkan semula
-**Auto sandaran** - Langganan → Kunci API → Murah → Percuma, masa henti sifar
-**Berbilang akaun** - Round-robin antara akaun bagi setiap pembekal
-**Universal** - Berfungsi dengan Kod Claude, Codex, Gemini CLI, Kursor, Cline, OpenClaw, sebarang alat CLI
---
## 🔄 Cara Ia Berfungsi
```
┌─────────────┐
│ Your CLI │ (Claude Code, Codex, Gemini CLI, OpenClaw, Cursor, Cline...)
│ Tool │
└──────┬──────┘
│ http://localhost:20128/v1
┌─────────────────────────────────────────┐
│ OmniRoute (Smart Router) │
│ • Format translation (OpenAI ↔ Claude) │
│ • Quota tracking + Embeddings + Images │
│ • Auto token refresh │
└──────┬──────────────────────────────────┘
├─→ [Tier 1: SUBSCRIPTION] Claude Code, Codex, Gemini CLI
│ ↓ quota exhausted
├─→ [Tier 2: API KEY] DeepSeek, Groq, xAI, Mistral, NVIDIA NIM, etc.
│ ↓ budget limit
├─→ [Tier 3: CHEAP] GLM ($0.6/1M), MiniMax ($0.2/1M)
│ ↓ budget limit
└─→ [Tier 4: FREE] iFlow, Qwen, Kiro (unlimited)
Result: Never stop coding, minimal cost
```
---
## 🎯 What OmniRoute Solves — 16 Real Pain Points
> **Every developer using AI tools faces these problems daily.** OmniRoute was built to solve them all — from cost overruns to regional blocks, from broken OAuth flows to zero observability.
<details>
<summary><b>💸 1. "I pay for an expensive subscription but still get interrupted by limits"</b></summary>
Developers pay $20200/month for Claude Pro, Codex Pro, or GitHub Copilot. Even paying, quota has a ceiling — 5h of usage, weekly limits, or per-minute rate limits. Mid-coding session, the provider stops responding and the developer loses flow and productivity.
**How OmniRoute solves it:**
- **Smart 4-Tier Fallback** — If subscription quota runs out, automatically redirects to API Key → Cheap → Free with zero manual intervention
- **Real-Time Quota Tracking** — Shows token consumption in real-time with reset countdown (5h, daily, weekly)
- **Multi-Account Support** — Multiple accounts per provider with auto round-robin — when one runs out, switches to the next
- **Custom Combos** — Customizable fallback chains with 6 balancing strategies (fill-first, round-robin, P2C, random, least-used, cost-optimized)
- **Codex Business Quotas** — Business/Team workspace quota monitoring directly in the dashboard
</details>
<details>
<summary><b>🔌 2. "I need to use multiple providers but each has a different API"</b></summary>
OpenAI uses one format, Claude (Anthropic) uses another, Gemini yet another. If a dev wants to test models from different providers or fallback between them, they need to reconfigure SDKs, change endpoints, deal with incompatible formats. Custom providers (FriendLI, NIM) have non-standard model endpoints.
**How OmniRoute solves it:**
- **Unified Endpoint** — A single `http://localhost:20128/v1` serves as proxy for all 36+ providers
- **Format Translation** — Automatic and transparent: OpenAI ↔ Claude ↔ Gemini ↔ Responses API
- **Response Sanitization** — Strips non-standard fields (`x_groq`, `usage_breakdown`, `service_tier`) that break OpenAI SDK v1.83+
- **Role Normalization** — Converts `developer``system` for non-OpenAI providers; `system``user` for GLM/ERNIE
- **Think Tag Extraction** — Extracts `<think>` blocks from models like DeepSeek R1 into standardized `reasoning_content`
- **Structured Output for Gemini** — `json_schema``responseMimeType`/`responseSchema` automatic conversion
- **`stream` defaults to `false`** — Aligns with OpenAI spec, avoiding unexpected SSE in Python/Rust/Go SDKs
</details>
<details>
<summary><b>🌐 3. "My AI provider blocks my region/country"</b></summary>
Providers like OpenAI/Codex block access from certain geographic regions. Users get errors like `unsupported_country_region_territory` during OAuth and API connections. This is especially frustrating for developers from developing countries.
**How OmniRoute solves it:**
- **3-Level Proxy Config** — Configurable proxy at 3 levels: global (all traffic), per-provider (one provider only), and per-connection/key
- **Color-Coded Proxy Badges** — Visual indicators: 🟢 global proxy, 🟡 provider proxy, 🔵 connection proxy, always showing the IP
- **OAuth Token Exchange Through Proxy** — OAuth flow also goes through the proxy, solving `unsupported_country_region_territory`
- **Connection Tests via Proxy** — Connection tests use the configured proxy (no more direct bypass)
- **SOCKS5 Support** — Full SOCKS5 proxy support for outbound routing
- **TLS Fingerprint Spoofing** — Browser-like TLS fingerprint via `wreq-js` to bypass bot detection
</details>
<details>
<summary><b>🆓 4. "I want to use AI for coding but I have no money"</b></summary>
Not everyone can pay $20200/month for AI subscriptions. Students, devs from emerging countries, hobbyists, and freelancers need access to quality models at zero cost.
**How OmniRoute solves it:**
- **Free Tier Providers Built-in** — Native support for 100% free providers: iFlow (8 unlimited models), Qwen (3 unlimited models), Kiro (Claude for free), Gemini CLI (180K/month free)
- **Free-Only Combos** — Chain `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/month with zero downtime
- **NVIDIA NIM Free Credits** — 1000 free credits integrated
- **Cost Optimized Strategy** — Routing strategy that automatically chooses the cheapest available provider
</details>
<details>
<summary><b>🔒 5. "I need to protect my AI gateway from unauthorized access"</b></summary>
When exposing an AI gateway to the network (LAN, VPS, Docker), anyone with the address can consume the developer's tokens/quota. Without protection, APIs are vulnerable to misuse, prompt injection, and abuse.
**How OmniRoute solves it:**
- **API Key Management** — Generation, rotation, and scoping per provider with a dedicated `/dashboard/api-manager` page
- **Model-Level Permissions** — Restrict API keys to specific models (`openai/*`, wildcard patterns), with Allow All/Restrict toggle
- **API Endpoint Protection** — Require a key for `/v1/models` and block specific providers from the listing
- **Auth Guard + CSRF Protection** — All dashboard routes protected with `withAuth` middleware + CSRF tokens
- **Rate Limiter** — Per-IP rate limiting with configurable windows
- **IP Filtering** — Allowlist/blocklist for access control
- **Prompt Injection Guard** — Sanitization against malicious prompt patterns
- **AES-256-GCM Encryption** — Credentials encrypted at rest
</details>
<details>
<summary><b>🛑 6. "My provider went down and I lost my coding flow"</b></summary>
AI providers can become unstable, return 5xx errors, or hit temporary rate limits. If a dev depends on a single provider, they're interrupted. Without circuit breakers, repeated retries can crash the application.
**How OmniRoute solves it:**
- **Circuit Breaker per-provider** — Auto-open/close with configurable thresholds and cooldown (Closed/Open/Half-Open)
- **Exponential Backoff** — Progressive retry delays
- **Anti-Thundering Herd** — Mutex + semaphore protection against concurrent retry storms
- **Combo Fallback Chains** — If the primary provider fails, automatically falls through the chain with no intervention
- **Combo Circuit Breaker** — Auto-disables failing providers within a combo chain
- **Health Dashboard** — Uptime monitoring, circuit breaker states, lockouts, cache stats, p50/p95/p99 latency
</details>
<details>
<summary><b>🔧 7. "Configuring each AI tool is tedious and repetitive"</b></summary>
Developers use Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Each tool needs a different config (API endpoint, key, model). Reconfiguring when switching providers or models is a waste of time.
**How OmniRoute solves it:**
- **CLI Tools Dashboard** — Dedicated page with one-click setup for Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline
- **GitHub Copilot Config Generator** — Generates `chatLanguageModels.json` for VS Code with bulk model selection
- **Onboarding Wizard** — Guided 4-step setup for first-time users
- **One endpoint, all models** — Configure `http://localhost:20128/v1` once, access 36+ providers
</details>
<details>
<summary><b>🔑 8. "Managing OAuth tokens from multiple providers is hell"</b></summary>
Claude Code, Codex, Gemini CLI, Copilot — all use OAuth 2.0 with expiring tokens. Developers need to re-authenticate constantly, deal with `client_secret is missing`, `redirect_uri_mismatch`, and failures on remote servers. OAuth on LAN/VPS is particularly problematic.
**How OmniRoute solves it:**
- **Auto Token Refresh** — OAuth tokens refresh in background before expiration
- **OAuth 2.0 (PKCE) Built-in** — Automatic flow for Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow
- **Multi-Account OAuth** — Multiple accounts per provider via JWT/ID token extraction
- **OAuth LAN/Remote Fix** — Private IP detection for `redirect_uri` + manual URL mode for remote servers
- **OAuth Behind Nginx** — Uses `window.location.origin` for reverse proxy compatibility
- **Remote OAuth Guide** — Step-by-step guide for Google Cloud credentials on VPS/Docker
</details>
<details>
<summary><b>📊 9. "I don't know how much I'm spending or where"</b></summary>
Developers use multiple paid providers but have no unified view of spending. Each provider has its own billing dashboard, but there's no consolidated view. Unexpected costs can pile up.
**How OmniRoute solves it:**
- **Cost Analytics Dashboard** — Per-token cost tracking and budget management per provider
- **Budget Limits per Tier** — Spending ceiling per tier that triggers automatic fallback
- **Per-Model Pricing Configuration** — Configurable prices per model
- **Usage Statistics Per API Key** — Request count and last-used timestamp per key
- **Analytics Dashboard** — Stat cards, model usage chart, provider table with success rates and latency
</details>
<details>
<summary><b>🐛 10. "I can't diagnose errors and problems in AI calls"</b></summary>
When a call fails, the dev doesn't know if it was a rate limit, expired token, wrong format, or provider error. Fragmented logs across different terminals. Without observability, debugging is trial-and-error.
**How OmniRoute solves it:**
- **Unified Logs Dashboard** — 4 tabs: Request Logs, Proxy Logs, Audit Logs, Console
- **Console Log Viewer** — Real-time terminal-style viewer with color-coded levels, auto-scroll, search, filter
- **SQLite Proxy Logs** — Persistent logs that survive server restarts
- **Translator Playground** — 4 debugging modes: Playground (format translation), Chat Tester (round-trip), Test Bench (batch), Live Monitor (real-time)
- **Request Telemetry** — p50/p95/p99 latency + X-Request-Id tracing
- **File-Based Logging with Rotation** — Console interceptor captures everything to JSON log with size-based rotation
</details>
<details>
<summary><b>🏗️ 11. "Deploying and maintaining the gateway is complex"</b></summary>
Installing, configuring, and maintaining an AI proxy across different environments (local, VPS, Docker, cloud) is labor-intensive. Problems like hardcoded paths, `EACCES` on directories, port conflicts, and cross-platform builds add friction.
**How OmniRoute solves it:**
- **npm global install** — `npm install -g omniroute && omniroute` — done
- **Docker Multi-Platform** — AMD64 + ARM64 native (Apple Silicon, AWS Graviton, Raspberry Pi)
- **Docker Compose Profiles** — `base` (no CLI tools) and `cli` (with Claude Code, Codex, OpenClaw)
- **Electron Desktop App** — Native app for Windows/macOS/Linux with system tray, auto-start, offline mode
- **Split-Port Mode** — API and Dashboard on separate ports for advanced scenarios (reverse proxy, container networking)
- **Cloud Sync** — Config synchronization across devices via Cloudflare Workers
- **DB Backups** — Automatic backup, restore, export and import of all settings
</details>
<details>
<summary><b>🌍 12. "The interface is English-only and my team doesn't speak English"</b></summary>
Teams in non-English-speaking countries, especially in Latin America, Asia, and Europe, struggle with English-only interfaces. Language barriers reduce adoption and increase configuration errors.
**How OmniRoute solves it:**
- **Dashboard i18n — 30 Languages** — All 500+ keys translated including Arabic, Bulgarian, Danish, German, Spanish, Finnish, French, Hebrew, Hindi, Hungarian, Indonesian, Italian, Japanese, Korean, Malay, Dutch, Norwegian, Polish, Portuguese (PT/BR), Romanian, Russian, Slovak, Swedish, Thai, Ukrainian, Vietnamese, Chinese, Filipino, English
- **RTL Support** — Right-to-left support for Arabic and Hebrew
- **Multi-Language READMEs** — 30 complete documentation translations
- **Language Selector** — Globe icon in header for real-time switching
</details>
<details>
<summary><b>🔄 13. "I need more than chat — I need embeddings, images, audio"</b></summary>
AI isn't just chat completion. Devs need to generate images, transcribe audio, create embeddings for RAG, rerank documents, and moderate content. Each API has a different endpoint and format.
**How OmniRoute solves it:**
- **Embeddings** — `/v1/embeddings` with 6 providers and 9+ models
- **Image Generation** — `/v1/images/generations` with 4 providers and 9+ models
- **Audio Transcription** — `/v1/audio/transcriptions` — Whisper-compatible
- **Text-to-Speech** — `/v1/audio/speech` — Multi-provider audio synthesis
- **Moderations** — `/v1/moderations` — Content safety checks
- **Reranking** — `/v1/rerank` — Document relevance reranking
- **Responses API** — Full `/v1/responses` support for Codex
</details>
<details>
<summary><b>🧪 14. "I have no way to test and compare quality across models"</b></summary>
Developers want to know which model is best for their use case — code, translation, reasoning — but comparing manually is slow. No integrated eval tools exist.
**How OmniRoute solves it:**
- **LLM Evaluations** — Golden set testing with 10 pre-loaded cases covering greetings, math, geography, code generation, JSON compliance, translation, markdown, safety refusal
- **4 Match Strategies** — `exact`, `contains`, `regex`, `custom` (JS function)
- **Translator Playground Test Bench** — Batch testing with multiple inputs and expected outputs, cross-provider comparison
- **Chat Tester** — Full round-trip with visual response rendering
- **Live Monitor** — Real-time stream of all requests flowing through the proxy
</details>
<details>
<summary><b>📈 15. "I need to scale without losing performance"</b></summary>
As request volume grows, without caching the same questions generate duplicate costs. Without idempotency, duplicate requests waste processing. Per-provider rate limits must be respected.
**How OmniRoute solves it:**
- **Semantic Cache** — Two-tier cache (signature + semantic) reduces cost and latency
- **Request Idempotency** — 5s deduplication window for identical requests
- **Rate Limit Detection** — Per-provider RPM, min gap, and max concurrent tracking
- **Editable Rate Limits** — Configurable defaults in Settings → Resilience with persistence
- **API Key Validation Cache** — 3-tier cache for production performance
- **Health Dashboard with Telemetry** — p50/p95/p99 latency, cache stats, uptime
</details>
<details>
<summary><b>🤖 16. "I want to control model behavior globally"</b></summary>
Developers who want all responses in a specific language, with a specific tone, or want to limit reasoning tokens. Configuring this in every tool/request is impractical.
**How OmniRoute solves it:**
- **System Prompt Injection** — Global prompt applied to all requests
- **Thinking Budget Validation** — Reasoning token allocation control per request (passthrough, auto, custom, adaptive)
- **6 Routing Strategies** — Global strategies that determine how requests are distributed
- **Wildcard Router** — `provider/*` patterns route dynamically to any provider
- **Combo Enable/Disable Toggle** — Toggle combos directly from the dashboard
- **Provider Toggle** — Enable/disable all connections for a provider with one click
- **Blocked Providers** — Exclude specific providers from `/v1/models` listing
</details>
## ⚡ Mula Pantas
**1. Pasang secara global:**
```bash
npm install -g omniroute
omniroute
```
🎉 Papan pemuka dibuka pada `http://localhost:20128`
| Perintah | Penerangan |
| ----------------------- | ---------------------------------- |
| `omniroute` | Mulakan pelayan (port lalai 20128) |
| `omniroute --port 3000` | Gunakan port tersuai |
| `omniroute --no-open` | Jangan auto buka penyemak imbas |
| `omniroute --help` | Tunjukkan bantuan |
**2. Sambungkan pembekal PERCUMA:**
Papan pemuka → Pembekal → Sambung **Kod Claude** atau **Antigraviti** → Log masuk OAuth → Selesai!
**3. Gunakan dalam alat CLI anda:**
```
Claude Code/Codex/Gemini CLI/OpenClaw/Cursor/Cline Settings:
Endpoint: http://localhost:20128/v1
API Key: [copy from dashboard]
Model: if/kimi-k2-thinking
```
**Itu sahaja!** Mulakan pengekodan dengan model AI PERCUMA.
**Alternatif — dijalankan dari sumber:**
```bash
cp .env.example .env
npm install
PORT=20128 NEXT_PUBLIC_BASE_URL=http://localhost:20128 npm run dev
```
---
## 🐳 Docker
OmniRoute tersedia sebagai imej Docker awam pada [Docker Hub](https://hub.docker.com/r/diegosouzapw/omniroute).
**Larian pantas:**
```bash
docker run -d \
--name omniroute \
--restart unless-stopped \
-p 20128:20128 \
-v omniroute-data:/app/data \
diegosouzapw/omniroute:latest
```
**Dengan fail persekitaran:**
```bash
# Copy and edit .env first
cp .env.example .env
docker run -d \
--name omniroute \
--restart unless-stopped \
--env-file .env \
-p 20128:20128 \
-v omniroute-data:/app/data \
diegosouzapw/omniroute:latest
```
**Menggunakan Docker Compose:**
```bash
# Base profile (no CLI tools)
docker compose --profile base up -d
# CLI profile (Claude Code, Codex, OpenClaw built-in)
docker compose --profile cli up -d
```
| Imej | Tag | Saiz | Penerangan |
| ------------------------ | -------- | ------ | ----------------------- |
| `diegosouzapw/omniroute` | `latest` | ~250MB | Keluaran stabil terkini |
| `diegosouzapw/omniroute` | `1.0.3` | ~250MB | Versi semasa |
---
---
## 🖥️ Desktop App — Offline & Always-On
> 🆕 **NEW!** OmniRoute is now available as a **native desktop application** for Windows, macOS, and Linux.
- 🖥️ **Native Window** — Dedicated app window with system tray integration
- 🔄 **Auto-Start** — Launch OmniRoute on system login
- 🔔 **Native Notifications** — Get alerts for quota exhaustion or provider issues
-**One-Click Install** — NSIS (Windows), DMG (macOS), AppImage (Linux)
- 🌐 **Offline Mode** — Works fully offline with bundled server
```bash
npm run electron:dev # Development mode
npm run electron:build # Current platform
npm run electron:build:win # Windows (.exe)
npm run electron:build:mac # macOS (.dmg)
npm run electron:build:linux # Linux (.AppImage)
```
📖 Full documentation: [`electron/README.md`](electron/README.md)
---
## 💰 Sekilas Pandang Harga
| Peringkat | Pembekal | Kos | Set Semula Kuota | Terbaik Untuk |
| ---------------- | ---------------- | ---------------------------- | ------------------ | ----------------------- |
| **💳 LANGGANAN** | Kod Claude (Pro) | $20/bln | 5j + mingguan | Sudah melanggan |
| | Codex (Plus/Pro) | $20-200/bln | 5j + mingguan | Pengguna OpenAI |
| | Gemini CLI | **PERCUMA** | 180K/bln + 1K/hari | Semua orang! |
| | GitHub Copilot | $10-19/bln | Bulanan | Pengguna GitHub |
| **🔑 KUNCI API** | NVIDIA NIM | **PERCUMA** (1000 kredit) | Satu kali | Ujian peringkat percuma |
| | DeepSeek | Bayar setiap penggunaan | Tiada | Harga/kualiti terbaik |
| | Groq | Peringkat percuma + berbayar | Kadar terhad | Inferens sangat pantas |
| | xAI (Grok) | Bayar setiap penggunaan | Tiada | Model Grok |
| | Mistral | Peringkat percuma + berbayar | Kadar terhad | AI Eropah |
| | OpenRouter | Bayar setiap penggunaan | Tiada | 100+ model |
| **💰 MURAH** | GLM-4.7 | $0.6/1J | Setiap hari 10AM | Sandaran belanjawan |
| | MiniMax M2.1 | $0.2/1J | 5 jam bergolek | Pilihan termurah |
| | Kimi K2 | $9/bln flat | 10 juta token/bln | Kos yang boleh diramal |
| **🆓 PERCUMA** | iFlow | $0 | tanpa had | 8 model percuma |
| | Qwen | $0 | tanpa had | 3 model percuma |
| | Kiro | $0 | tanpa had | Claude percuma |
**💡 Petua Pro:** Mulakan dengan Gemini CLI (180K percuma/bulan) + iFlow (percuma tanpa had) kombo = $0 kos!
---
## 💡 Ciri Utama
### 🧠 Penghalaan Teras & Kepintaran
| Ciri | Apa yang Dilakukan |
| ---------------------------------- | --------------------------------------------------------------------------------------------- |
| 🎯 **Smart 4-Tier Fallback** | Laluan automatik: Langganan → Kunci API → Murah → Percuma |
| 📊 **Penjejakan Kuota Masa Nyata** | Kiraan token langsung + tetapan semula kira detik setiap pembekal |
| 🔄 **Terjemahan Format** | OpenAI ↔ Claude ↔ Gemini ↔ Kursor ↔ Kiro lancar + pembersihan tindak balas |
| 👥 **Sokongan Berbilang Akaun** | Berbilang akaun bagi setiap pembekal dengan pemilihan pintar |
| 🔄 **Muat Semula Token Auto** | Token OAuth dimuat semula secara automatik dengan cuba semula |
| 🎨 **Kombo Tersuai** | 6 strategi: isikan dahulu, round-robin, p2c, rawak, paling kurang digunakan, dioptimumkan kos |
| 🧩 **Model Tersuai** | Tambahkan sebarang ID model pada mana-mana pembekal |
| 🌐 **Penghala Wildcard** | Halakan corak `provider/*` kepada mana-mana pembekal secara dinamik |
| 🧠 **Anggaran Berfikir** | Mod laluan, auto, tersuai dan adaptif untuk model penaakulan |
| 🔀 **Model Aliases** | Auto-forward deprecated model IDs to current replacements (built-in + custom) |
| ⚡ **Background Degradation** | Auto-route background tasks (titles, summaries) to cheaper models |
| 💬 **System Prompt Suntikan** | Gesaan sistem global digunakan merentas semua permintaan |
| 📄 **API Respons** | Sokongan OpenAI Responses API (`/v1/responses`) penuh untuk Codex |
### 🎵 API Berbilang Modal
| Ciri | Apa yang Dilakukan |
| ------------------------ | ------------------------------------------------------ |
| 🖼️ **Penjanaan Imej** | `/v1/images/generations` — 4 pembekal, 9+ model |
| 📐 **Pembenaman** | `/v1/embeddings` — 6 pembekal, 9+ model |
| 🎤 **Transkripsi Audio** | `/v1/audio/transcriptions` — Serasi dengan bisikan |
| 🔊 **Teks-ke-Ucapan** | `/v1/audio/speech` — Sintesis audio berbilang pembekal |
| 🛡️ **Kesederhanaan** | `/v1/moderations` — Pemeriksaan keselamatan kandungan |
| 🔀 **Penyusunan semula** | `/v1/rerank` — Penarafan semula perkaitan dokumen |
### 🛡️ Ketahanan & Keselamatan
| Ciri | Apa yang Dilakukan |
| ----------------------------------- | ----------------------------------------------------------------------------------- |
| 🔌 **Pemutus Litar** | Auto buka/tutup setiap pembekal dengan ambang boleh dikonfigurasikan |
| 🛡️ **Kawanan Anti Guruh** | Had kadar Mutex + semaphore untuk pembekal kunci API |
| 🧠 **Cache Semantik** | Cache dua peringkat (tandatangan + semantik) mengurangkan kos & kependaman |
| ⚡ **Minta Idepotency** | Tetingkap pendua 5s untuk permintaan pendua |
| 🔒 **TLS Fingerprint Spoofing** | Pintas pengesanan bot berasaskan TLS melalui wreq-js |
| 🌐 **Penapisan IP** | Senarai kebenaran/senarai sekat untuk kawalan akses API |
| 📊 **Had Kadar Boleh Diedit** | RPM boleh dikonfigurasikan, jurang min dan serentak maksimum pada tahap sistem |
| 💾 **Rate Limit Persistence** | Learned limits survive restarts via SQLite with 60s debounce + 24h staleness |
| 🔄 **Token Refresh Resilience** | Per-provider circuit breaker (5 fails→30min) + 30s timeout per attempt |
| 🛡 **Perlindungan Titik Akhir API** | Gating pengesahan + penyekatan penyedia untuk titik akhir `/models` |
| 🔒 **Keterlihatan Proksi** | Lencana berkod warna: 🟢 global, 🟡 pembekal, 🔵 setiap sambungan dengan paparan IP |
| 🌐 **Konfigurasi Proksi 3 Tahap** | Konfigurasikan proksi pada peringkat global, setiap pembekal atau setiap sambungan |
### 📊 Kebolehlihatan & Analitis
| Ciri | Apa yang Dilakukan |
| --------------------------------- | ------------------------------------------------------------------------------ |
| 📝 **Minta Pembalakan** | Mod nyahpepijat dengan log permintaan/tindak balas penuh |
| 💾 **Log Proksi SQLite** | Log proksi berterusan bertahan dimulakan semula pelayan |
| 📊 **Papan Pemuka Analitik** | Dikuasakan semula: kad statistik, carta penggunaan model, jadual pembekal |
| 📈 **Penjejakan Kemajuan** | Ikut serta acara kemajuan SSE untuk penstriman |
| 🧪 **Penilaian LLM** | Ujian set emas dengan 4 strategi perlawanan |
| 🔍 **Minta Telemetri** | p50/p95/p99 pengagregatan kependaman + pengesanan X-Request-Id |
| 📋 **Papan Pemuka Log** | Halaman 4 tab bersatu: Log Permintaan, Log Proksi, Log Audit, Konsol |
| 🖥️ **Pemapar Log Konsol** | Pemapar gaya terminal masa nyata dengan penapis tahap, carian, tatal automatik |
| 📑 **Pengelogan Berasaskan Fail** | Pemintas konsol menangkap semua output ke fail log JSON dengan putaran |
| 🏥 **Papan Pemuka Kesihatan** | Masa beroperasi sistem, keadaan pemutus litar, sekatan keluar, statistik cache |
| 💰 **Penjejakan Kos** | Pengurusan belanjawan + konfigurasi harga setiap model |
### ☁️ Penyerahan & Penyegerakan
| Ciri | Apa yang Dilakukan |
| ----------------------------- | ----------------------------------------------------------------------- |
| 💾 **Penyegerakan Awan** | Segerakkan konfigurasi merentas peranti melalui Cloudflare Workers |
| 🌐 **Kerahkan Di Mana-mana** | Localhost, VPS, Docker, Pekerja Cloudflare |
| 🔑 **Pengurusan Kunci API** | Jana, putar dan skop kunci API bagi setiap pembekal |
| 🧙 **Onboarding Wizard** | Persediaan berpandu 4 langkah untuk pengguna kali pertama |
| 🔧 **Papan Pemuka Alat CLI** | Konfigurasi satu klik Claude, Codex, Cline, OpenClaw, Kilo, Antigravity |
| 🔄 **Sandaran DB** | Sandaran automatik, pulihkan, eksport & import untuk semua tetapan |
| 🌐 **Pengantarabangsaan** | i18n penuh dengan next-intl — sokongan Inggeris + Portugis (Brazil) |
| 🌍 **Pemilih Bahasa** | Ikon glob dalam pengepala untuk penukaran bahasa masa nyata (🇺🇸/🇧🇷) |
| 📂 **Direktori Data Tersuai** | `DATA_DIR` env var untuk mengatasi laluan storan lalai `~/.omniroute` |
<details>
<summary><b>📖 Butiran Ciri</b></summary>
### 🎯 Kemunduran 4 Peringkat Pintar
Cipta gabungan dengan sandaran automatik:
```
Combo: "my-coding-stack"
1. cc/claude-opus-4-6 (your subscription)
2. nvidia/llama-3.3-70b (free NVIDIA API)
3. glm/glm-4.7 (cheap backup, $0.6/1M)
4. if/kimi-k2-thinking (free fallback)
→ Auto switches when quota runs out or errors occur
```
### 📊 Penjejakan Kuota Masa Nyata
- Penggunaan token setiap pembekal
- Tetapkan semula kira detik (5 jam, harian, mingguan)
- Anggaran kos untuk peringkat berbayar
- Laporan perbelanjaan bulanan
### 🔄 Terjemahan Format
Terjemahan lancar antara format:
- **OpenAI** ↔ **Claude****Gemini****Respons OpenAI**
- Alat CLI anda menghantar format OpenAI → OmniRoute menterjemah → Pembekal menerima format asli
- Berfungsi dengan mana-mana alat yang menyokong titik akhir OpenAI tersuai
- **Pembersihan tindak balas** — Menghapuskan medan bukan standard untuk keserasian OpenAI SDK yang ketat
- **Penormalan peranan** — `developer``system` untuk bukan OpenAI; `system``user` untuk model GLM/ERNIE
- **Pengekstrakan teg Think** — `<think>` blok → `reasoning_content` untuk model pemikiran
- **Output berstruktur** — `json_schema` → Gemini's `responseMimeType`/`responseSchema`
### 👥 Sokongan Berbilang Akaun
- Tambah berbilang akaun bagi setiap pembekal
- Auto round-robin atau penghalaan berasaskan keutamaan
- Berundur ke akaun seterusnya apabila seseorang mencapai kuota
### 🔄 Muat Semula Token Auto
- Token OAuth dimuat semula secara automatik sebelum tamat tempoh
- Tiada pengesahan semula manual diperlukan
- Pengalaman lancar merentas semua pembekal
### 🎨 Kombo Tersuai
- Buat kombinasi model tanpa had
- 6 strategi: isikan dahulu, round-robin, kuasa dua pilihan, rawak, paling kurang digunakan, dioptimumkan kos
- Kongsi gabungan merentas peranti dengan Cloud Sync
### 🏥 Papan Pemuka Kesihatan
- Status sistem (masa hidup, versi, penggunaan memori)
- Keadaan pemutus litar bagi setiap pembekal (Tertutup/Terbuka/Separuh Terbuka)
- Status had kadar dan sekatan aktif
- Statistik cache tandatangan
- Telemetri kependaman (p50/p95/p99) + cache segera
- Tetapkan semula status kesihatan dengan satu klik
### 🔧 Taman Permainan Penterjemah
OmniRoute termasuk Taman Permainan Penterjemah terbina dalam yang berkuasa dengan **4 mod** untuk penyahpepijatan, ujian dan pemantauan terjemahan API:
| Mod | Penerangan |
| ------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **💻 Taman permainan** | Terjemahan format langsung — tampal mana-mana badan permintaan API dan lihat serta-merta cara OmniRoute menterjemahkannya antara format pembekal (OpenAI ↔ Claude ↔ Gemini ↔ Responses API). Termasuk templat contoh dan pengesanan automatik format. |
| **💬 Penguji Sembang** | Hantar permintaan sembang sebenar melalui OmniRoute dan lihat perjalanan pergi balik penuh: input anda, permintaan yang diterjemahkan, respons pembekal dan balasan yang diterjemahkan kembali. Tidak ternilai untuk mengesahkan penghalaan kombo. |
| **🧪 Bangku Ujian** | Mod ujian kelompok — tentukan berbilang kes ujian dengan input dan output yang dijangkakan berbeza, jalankan semuanya sekali gus dan bandingkan hasil merentas pembekal dan model. |
| **📱 Pemantau Langsung** | Pemantauan permintaan masa nyata — tonton permintaan masuk semasa ia mengalir melalui OmniRoute, lihat terjemahan format berlaku secara langsung dan kenal pasti isu serta-merta. |
**Akses:** Papan Pemuka → Penterjemah (bar sisi)
### 💾 Penyegerakan Awan
- Penyegerakan penyedia, gabungan dan tetapan merentas peranti
- Penyegerakan latar belakang automatik
- Storan yang disulitkan selamat
</details>
---
## 🎯 Kes Penggunaan
### Kes 1: "Saya mempunyai langganan Claude Pro"
**Masalah:** Kuota tamat tempoh tidak digunakan, had kadar semasa pengekodan berat
```
Combo: "maximize-claude"
1. cc/claude-opus-4-6 (use subscription fully)
2. glm/glm-4.7 (cheap backup when quota out)
3. if/kimi-k2-thinking (free emergency fallback)
Monthly cost: $20 (subscription) + ~$5 (backup) = $25 total
vs. $20 + hitting limits = frustration
```
### Kes 2: "Saya mahu kos sifar"
**Masalah:** Tidak mampu membayar langganan, memerlukan pengekodan AI yang boleh dipercayai
```
Combo: "free-forever"
1. gc/gemini-3-flash (180K free/month)
2. if/kimi-k2-thinking (unlimited free)
3. qw/qwen3-coder-plus (unlimited free)
Monthly cost: $0
Quality: Production-ready models
```
### Kes 3: "Saya memerlukan pengekodan 24/7, tiada gangguan"
**Masalah:** Tarikh akhir, tidak mampu membayar masa henti
```
Combo: "always-on"
1. cc/claude-opus-4-6 (best quality)
2. cx/gpt-5.2-codex (second subscription)
3. glm/glm-4.7 (cheap, resets daily)
4. minimax/MiniMax-M2.1 (cheapest, 5h reset)
5. if/kimi-k2-thinking (free unlimited)
Result: 5 layers of fallback = zero downtime
```
### Kes 4: "Saya mahukan AI PERCUMA dalam OpenClaw"
**Masalah:** Memerlukan pembantu AI dalam apl pemesejan, percuma sepenuhnya
```
Combo: "openclaw-free"
1. if/glm-4.7 (unlimited free)
2. if/minimax-m2.1 (unlimited free)
3. if/kimi-k2-thinking (unlimited free)
Monthly cost: $0
Access via: WhatsApp, Telegram, Slack, Discord, iMessage, Signal...
```
---
## 📖 Panduan Persediaan
<details>
<summary><b>💳 Pembekal Langganan</b></summary>
### Kod Claude (Pro/Max)
```bash
Dashboard → Providers → Connect Claude Code
→ OAuth login → Auto token refresh
→ 5-hour + weekly quota tracking
Models:
cc/claude-opus-4-6
cc/claude-sonnet-4-5-20250929
cc/claude-haiku-4-5-20251001
```
**Petua Pro:** Gunakan Opus untuk tugas yang rumit, Sonnet untuk kelajuan. OmniRoute menjejaki kuota setiap model!
### OpenAI Codex (Plus/Pro)
```bash
Dashboard → Providers → Connect Codex
→ OAuth login (port 1455)
→ 5-hour + weekly reset
Models:
cx/gpt-5.2-codex
cx/gpt-5.1-codex-max
```
### Gemini CLI (PERCUMA 180K/bulan!)
```bash
Dashboard → Providers → Connect Gemini CLI
→ Google OAuth
→ 180K completions/month + 1K/day
Models:
gc/gemini-3-flash-preview
gc/gemini-2.5-pro
```
**Nilai Terbaik:** Peringkat percuma yang besar! Gunakan ini sebelum peringkat berbayar.
### Copilot GitHub
```bash
Dashboard → Providers → Connect GitHub
→ OAuth via GitHub
→ Monthly reset (1st of month)
Models:
gh/gpt-5
gh/claude-4.5-sonnet
gh/gemini-3-pro
```
</details>
<details>
<summary><b>🔑 Pembekal Kunci API</b></summary>
### NVIDIA NIM (PERCUMA 1000 kredit!)
1. Daftar: [build.nvidia.com](https://build.nvidia.com)
2. Dapatkan kunci API percuma (1000 kredit inferens disertakan)
3. Papan Pemuka → Tambah Pembekal → NVIDIA NIM:
- Kunci API: `nvapi-your-key`
**Model:** `nvidia/llama-3.3-70b-instruct`, `nvidia/mistral-7b-instruct` dan 50+ lagi
**Petua Pro:** API serasi OpenAI — berfungsi dengan lancar dengan terjemahan format OmniRoute!
### DeepSeek
1. Daftar: [platform.deepseek.com](https://platform.deepseek.com)
2. Dapatkan kunci API
3. Papan Pemuka → Tambah Pembekal → DeepSeek
**Model:** `deepseek/deepseek-chat`, `deepseek/deepseek-coder`
### Groq (Tier Percuma Tersedia!)
1. Daftar: [console.groq.com](https://console.groq.com)
2. Dapatkan kunci API (termasuk peringkat percuma)
3. Papan Pemuka → Tambah Pembekal → Groq
**Model:** `groq/llama-3.3-70b`, `groq/mixtral-8x7b`
**Petua Pro:** Inferens sangat pantas — terbaik untuk pengekodan masa nyata!
### OpenRouter (100+ Model)
1. Daftar: [openrouter.ai](https://openrouter.ai)
2. Dapatkan kunci API
3. Papan Pemuka → Tambah Pembekal → OpenRouter
**Model:** Akses 100+ model daripada semua pembekal utama melalui kunci API tunggal.
</details>
<details>
<summary><b>💰 Penyedia Murah (Sandaran)</b></summary>
### GLM-4.7 (Tetapan semula harian, $0.6/1J)
1. Daftar: [Zhipu AI](https://open.bigmodel.cn/)
2. Dapatkan kunci API daripada Pelan Pengekodan
3. Papan Pemuka → Tambah Kunci API:
- Pembekal: `glm`
- Kunci API: `your-key`
**Gunakan:** `glm/glm-4.7`
**Petua Pro:** Pelan Pengekodan menawarkan kuota 3× pada kos 1/7! Tetapkan semula setiap hari 10:00 AM.
### MiniMax M2.1 (tetapan semula 5j, $0.20/1J)
1. Daftar: [MiniMax](https://www.minimax.io/)
2. Dapatkan kunci API
3. Papan Pemuka → Tambah Kunci API
**Gunakan:** `minimax/MiniMax-M2.1`
**Petua Pro:** Pilihan termurah untuk konteks panjang (token 1M)!
### Kimi K2 ($9/bulan rata)
1. Langgan: [Moonshot AI](https://platform.moonshot.ai/)
2. Dapatkan kunci API
3. Papan Pemuka → Tambah Kunci API
**Gunakan:** `kimi/kimi-latest`
**Petua Pro:** Tetap $9/bulan untuk 10J token = $0.90/1J kos efektif!
</details>
<details>
<summary><b>🆓 Pembekal PERCUMA (Sandaran Kecemasan)</b></summary>
### iFlow (8 model PERCUMA)
```bash
Dashboard → Connect iFlow
→ iFlow OAuth login
→ Unlimited usage
Models:
if/kimi-k2-thinking
if/qwen3-coder-plus
if/glm-4.7
if/minimax-m2
if/deepseek-r1
```
### Qwen (3 model PERCUMA)
```bash
Dashboard → Connect Qwen
→ Device code authorization
→ Unlimited usage
Models:
qw/qwen3-coder-plus
qw/qwen3-coder-flash
```
### Kiro (Claude PERCUMA)
```bash
Dashboard → Connect Kiro
→ AWS Builder ID or Google/GitHub
→ Unlimited usage
Models:
kr/claude-sonnet-4.5
kr/claude-haiku-4.5
```
</details>
<details>
<summary><b>🎨 Cipta Kombo</b></summary>
### Contoh 1: Maksimumkan Langganan → Sandaran Murah
```
Dashboard → Combos → Create New
Name: premium-coding
Models:
1. cc/claude-opus-4-6 (Subscription primary)
2. glm/glm-4.7 (Cheap backup, $0.6/1M)
3. minimax/MiniMax-M2.1 (Cheapest fallback, $0.20/1M)
Use in CLI: premium-coding
```
### Contoh 2: Percuma-Sahaja (Kos Sifar)
```
Name: free-combo
Models:
1. gc/gemini-3-flash-preview (180K free/month)
2. if/kimi-k2-thinking (unlimited)
3. qw/qwen3-coder-plus (unlimited)
Cost: $0 forever!
```
</details>
<details>
<summary><b>🔧 CLI Integrasi</b></summary>
### IDE Kursor
```
Settings → Models → Advanced:
OpenAI API Base URL: http://localhost:20128/v1
OpenAI API Key: [from OmniRoute dashboard]
Model: cc/claude-opus-4-6
```
### Kod Claude
Gunakan halaman **Alat CLI** dalam papan pemuka untuk konfigurasi satu klik atau edit `~/.claude/settings.json` secara manual.
### Codex CLI
```bash
export OPENAI_BASE_URL="http://localhost:20128"
export OPENAI_API_KEY="your-omniroute-api-key"
codex "your prompt"
```
### OpenClaw
**Pilihan 1 — Papan Pemuka (disyorkan):**
```
Dashboard → CLI Tools → OpenClaw → Select Model → Apply
```
**Pilihan 2 — Manual:** Edit `~/.openclaw/openclaw.json`:
```json
{
"models": {
"providers": {
"omniroute": {
"baseUrl": "http://127.0.0.1:20128/v1",
"apiKey": "sk_omniroute",
"api": "openai-completions"
}
}
}
}
```
> **Nota:** OpenClaw hanya berfungsi dengan OmniRoute tempatan. Gunakan `127.0.0.1` dan bukannya `localhost` untuk mengelakkan isu resolusi IPv6.
### Cline / Teruskan / RooCode
```
Settings → API Configuration:
Provider: OpenAI Compatible
Base URL: http://localhost:20128/v1
API Key: [from OmniRoute dashboard]
Model: if/kimi-k2-thinking
```
</details>
---
## 🧪 Penilaian (Evals)
OmniRoute termasuk rangka kerja penilaian terbina dalam untuk menguji kualiti tindak balas LLM terhadap set emas. Aksesnya melalui **Analytics → Evals** dalam papan pemuka.
### Set Emas Terbina dalam
"Set Emas OmniRoute" pra-muat mengandungi 10 kes ujian yang meliputi:
- Salam, matematik, geografi, penjanaan kod
- Pematuhan format JSON, terjemahan, penurunan harga
- Penolakan keselamatan (kandungan berbahaya), pengiraan, logik boolean
### Strategi Penilaian
| Strategi | Penerangan | Contoh |
| ---------- | --------------------------------------------------------------------- | -------------------------------- |
| `exact` | Output mesti sepadan dengan tepat | `"4"` |
| `contains` | Output mesti mengandungi subrentetan (tidak peka huruf besar-besaran) | `"Paris"` |
| `regex` | Output mesti sepadan dengan corak regex | `"1.*2.*3"` |
| `custom` | Fungsi JS tersuai mengembalikan benar/salah | `(output) => output.length > 10` |
---
## 🐛 Menyelesaikan masalah
<details>
<summary><b>Klik untuk mengembangkan panduan penyelesaian masalah</b></summary>
**"Model bahasa tidak memberikan mesej"**
- Kuota pembekal habis → Semak penjejak kuota papan pemuka
- Penyelesaian: Gunakan sandaran kombo atau tukar kepada peringkat yang lebih murah
**Penghadan kadar**
- Kuota langganan habis → Sandar kepada GLM/MiniMax
- Tambah kombo: `cc/claude-opus-4-6 → glm/glm-4.7 → if/kimi-k2-thinking`
**Token OAuth tamat tempoh**
- Dikemas semula secara automatik oleh OmniRoute
- Jika isu berterusan: Papan Pemuka → Pembekal → Sambung semula
**Kos tinggi**
- Semak statistik penggunaan dalam Papan Pemuka → Kos
- Tukar model utama kepada GLM/MiniMax
- Gunakan peringkat percuma (Gemini CLI, iFlow) untuk tugasan yang tidak kritikal
**Papan pemuka dibuka pada port yang salah**
- Tetapkan `PORT=20128` dan `NEXT_PUBLIC_BASE_URL=http://localhost:20128`
**Ralat penyegerakan awan**
- Sahkan `BASE_URL` mata pada contoh larian anda
- Sahkan `CLOUD_URL` mata ke titik akhir awan anda yang dijangkakan
- Pastikan nilai `NEXT_PUBLIC_*` sejajar dengan nilai sebelah pelayan
**Log masuk pertama tidak berfungsi**
- Semak `INITIAL_PASSWORD` dalam `.env`
- Jika tidak ditetapkan, kata laluan sandaran ialah `123456`
**Tiada log permintaan**
- Tetapkan `ENABLE_REQUEST_LOGS=true` dalam `.env`
**Ujian sambungan menunjukkan "Tidak sah" untuk pembekal yang serasi dengan OpenAI**
- Banyak pembekal tidak mendedahkan titik akhir `/models`
- OmniRoute v1.0.6+ termasuk pengesahan sandaran melalui pelengkapan sembang
- Pastikan URL asas mengandungi akhiran `/v1`
### 🔐 OAuth em Servidor Remoto (Persediaan OAuth Jauh)
<a name="oauth-em-servidor-remoto"></a>
> **⚠️ PENTING untuk biasa menggunakan OmniRoute em VPS/Docker/servidor remoto**
### Adakah OAuth melakukan Antigraviti / Gemini CLI tidak menggunakan perkhidmatan anda?
Ia membuktikan **Antigraviti** dan **Gemini CLI** menggunakan **Google OAuth 2.0** untuk autenticação. O Google exige que a `redirect_uri` gunakan tiada fluks OAuth seja **exatamente** uma das URIs sebelum kadastrada tiada Google Cloud Console untuk aplicativo.
Sebagai credenciais OAuth embutidas no OmniRoute estão cadastradas **apenas untuk `localhost`**. Quando você acessa o OmniRoute em um servidor remoto (cth: `https://omniroute.meuservidor.com`), o Google rejeita a autenticação com:
```
Error 400: redirect_uri_mismatch
```
### Penyelesaian: Konfigurasikan suas próprias credenciais OAuth
Você precisa criar um **OAuth 2.0 Client ID** no Google Cloud Console com a URI do seu servidor.
#### Passo a passo
**1. Akses ke Konsol Awan Google**
Abra: [https://console.cloud.google.com/apis/credentials](https://console.cloud.google.com/apis/credentials)
**2. Crie um novo ID Pelanggan OAuth 2.0**
- Klik em **"+ Cipta Bukti Kelayakan"** → **"ID klien OAuth"**
- Tipo de aplicativo: **"Aplikasi web"**
- Nama: escolha qualquer nome (cth: `OmniRoute Remote`)
**3. Tambah sebagai URI Ubah Hala Dibenarkan**
Tiada **"URI ubah hala yang dibenarkan"**, tambahan:
```
https://seu-servidor.com/callback
```
> Gantikan `seu-servidor.com` pelo domínio ou IP do seu servidor (termasuk porta se necessário, cth: `http://45.33.32.156:20128/callback`).
**4. Simpan dan salin sebagai kredensia**
Após criar, o Google mostrará o **ID Pelanggan** e o **Rahsia Pelanggan**.
**5. Konfigurasikan sebagai variáveis de ambiente**
No seu `.env` (ou nas variáveis de ambiente do Docker):
```bash
# Para Antigravity:
ANTIGRAVITY_OAUTH_CLIENT_ID=seu-client-id.apps.googleusercontent.com
ANTIGRAVITY_OAUTH_CLIENT_SECRET=GOCSPX-seu-secret
# Para Gemini CLI:
GEMINI_OAUTH_CLIENT_ID=seu-client-id.apps.googleusercontent.com
GEMINI_OAUTH_CLIENT_SECRET=GOCSPX-seu-secret
GEMINI_CLI_OAUTH_CLIENT_SECRET=GOCSPX-seu-secret
```
**6. Reinicie o OmniRoute**
```bash
# Se usando npm:
npm run dev
# Se usando Docker:
docker restart omniroute
```
**7. Tente conectar novamente**
Papan pemuka → Pembekal → Antigraviti (ou Gemini CLI) → OAuth
Agora o Google redirectionará corretamente untuk `https://seu-servidor.com/callback` dan a autenticação funcionará.
---
### Penyelesaian sementara (sem configurar credenciais próprias)
Jika anda ingin mendapatkan credenciais próprias agora, ada kemungkinan penggunaan atau fluks **manual de URL**:
1. OmniRoute abrirá a URL de authorização do Google
2. Após você authorizar, o Google tentará redirectionar para `localhost` (que falha no servidor remoto)
3. **Salin URL lengkap** pada penyemak imbas barra de endereço do seu (mesmo que a página não carregue)
4. Cole essa URL no campo que aparece no modal de conexão do OmniRoute
5. Klik em **"Sambung"**
> Penyelesaian ini berfungsi sebagai kodigo de autorização na URL adalah bebas untuk mengubah hala mengikut arahan atau tidak.
</details>
---
## 🛠️ Timbunan Teknologi
- **Waktu Jalan**: Node.js 1822 LTS (⚠️ Node.js 24+ **tidak disokong**`better-sqlite3` binari asli tidak serasi)
- **Bahasa**: TypeScript 5.9 — **100% TypeScript** merentas `src/` dan `open-sse/` (v1.0.6)
- **Kerangka**: Next.js 16 + React 19 + Tailwind CSS 4
- **Pangkalan Data**: LowDB (JSON) + SQLite (keadaan domain + log proksi)
- **Penstriman**: Acara Dihantar Pelayan (SSE)
- **Auth**: OAuth 2.0 (PKCE) + JWT + Kunci API
- **Ujian**: Pelari ujian Node.js (368+ ujian unit)
- **CI/CD**: GitHub Actions (auto npm publish + Docker Hub pada keluaran)
- **Laman web**: [omniroute.online](https://omniroute.online)
- **Pakej**: [npmjs.com/package/omniroute](https://www.npmjs.com/package/omniroute)
- **Docker**: [hub.docker.com/r/diegosouzapw/omniroute](https://hub.docker.com/r/diegosouzapw/omniroute)
- **Ketahanan**: Pemutus litar, mundur eksponen, kumpulan anti gemuruh, penipuan TLS
---
## 📖 Dokumentasi
| Dokumen | Penerangan |
| -------------------------------------------- | --------------------------------------------------- |
| [User Guide](docs/USER_GUIDE.md) | Pembekal, kombo, penyepaduan CLI, penggunaan |
| [API Reference](docs/API_REFERENCE.md) | Semua titik akhir dengan contoh |
| [Troubleshooting](docs/TROUBLESHOOTING.md) | Masalah dan penyelesaian biasa |
| [Architecture](docs/ARCHITECTURE.md) | Seni bina sistem dan dalaman |
| [Contributing](CONTRIBUTING.md) | Persediaan pembangunan dan garis panduan |
| [OpenAPI Spec](docs/openapi.yaml) | Spesifikasi OpenAPI 3.0 |
| [Security Policy](SECURITY.md) | Pelaporan kerentanan dan amalan keselamatan |
| [VM Deployment](docs/VM_DEPLOYMENT_GUIDE.md) | Panduan lengkap: Persediaan VM + nginx + Cloudflare |
| [Features Gallery](docs/FEATURES.md) | Lawatan papan pemuka visual dengan tangkapan skrin |
### 📸 Pratonton Papan Pemuka
<details>
<summary><b>Klik untuk melihat tangkapan skrin papan pemuka</b></summary>
| Halaman | Tangkapan skrin |
| ------------------ | ------------------------------------------------- |
| **Pembekal** | ![Providers](docs/screenshots/01-providers.png) |
| **Kombo** | ![Combos](docs/screenshots/02-combos.png) |
| **Analisis** | ![Analytics](docs/screenshots/03-analytics.png) |
| **Kesihatan** | ![Health](docs/screenshots/04-health.png) |
| **Penterjemah** | ![Translator](docs/screenshots/05-translator.png) |
| **Tetapan** | ![Settings](docs/screenshots/06-settings.png) |
| **Alat CLI** | ![CLI Tools](docs/screenshots/07-cli-tools.png) |
| **Log Penggunaan** | ![Usage](docs/screenshots/08-usage.png) |
| **Titik Akhir** | ![Endpoint](docs/screenshots/09-endpoint.png) |
</details>
---
## 🗺️ Pelan Hala Tuju
OmniRoute mempunyai **210+ ciri yang dirancang** merentas berbilang fasa pembangunan. Berikut adalah bidang utama:
| Kategori | Ciri Terancang | Sorotan |
| ------------------------------ | -------------- | ---------------------------------------------------------------------------------------------------- |
| 🧠 **Penghalaan & Perisikan** | 25+ | Penghalaan kependaman terendah, penghalaan berasaskan teg, kuota prapenerbangan, pemilihan akaun P2C |
| 🔒 **Keselamatan & Pematuhan** | 20+ | Pengerasan SSRF, penyelubungan kelayakan, had kadar setiap titik akhir, skop kunci pengurusan |
| 📊 **Kebolehlihatan** | 15+ | Penyepaduan OpenTelemetry, pemantauan kuota masa nyata, penjejakan kos setiap model |
| 🔄 **Integrasi Pembekal** | 20+ | Pendaftaran model dinamik, penyejukan pembekal, Codex berbilang akaun, penghuraian kuota Copilot |
| ⚡ **Prestasi** | 15+ | Lapisan cache dwi, cache gesaan, cache respons, penstriman keepalive, API kelompok |
| 🌐 **Ekosistem** | 10+ | API WebSocket, konfigurasi hot-reload, kedai konfigurasi teragih, mod komersial |
### 🔜 Akan Datang
- 🔗 **OpenCode Integration** — Sokongan pembekal asli untuk IDE pengekodan AI OpenCode
- 🔗 **Pengintegrasian TRAE** — Sokongan penuh untuk rangka kerja pembangunan TRAE AI
- 📦 **API Kelompok** — Pemprosesan kelompok tak segerak untuk permintaan pukal
- 🎯 **Penghalaan Berasaskan Teg** — Permintaan laluan berdasarkan teg tersuai dan metadata
- 💰 **Strategi Kos Terendah** — Pilih pembekal yang tersedia paling murah secara automatik
> 📝 Spesifikasi ciri penuh tersedia dalam [link](docs/new-features/) (217 spesifikasi terperinci)
---
## 📧 Sokongan
> 💬 **Sertai komuniti kami!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Dapatkan bantuan, kongsi petua dan kekal kemas kini.
- **Laman web**: [omniroute.online](https://omniroute.online)
- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute)
- **Isu**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues)
- **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t)
- **Projek Asal**: [9router by decolua](https://github.com/decolua/9router)
---
## 👥 Penyumbang
[![Contributors](https://contrib.rocks/image?repo=diegosouzapw/OmniRoute&max=100&columns=20&anon=1)](https://github.com/diegosouzapw/OmniRoute/graphs/contributors)
### Cara Menyumbang
1. Garpu repositori
2. Buat cawangan ciri anda (`git checkout -b feature/amazing-feature`)
3. Serahkan perubahan anda (`git commit -m 'Add amazing feature'`)
4. Tolak ke cawangan (`git push origin feature/amazing-feature`)
5. Buka Permintaan Tarik
Lihat [CONTRIBUTING.md](CONTRIBUTING.md) untuk garis panduan terperinci.
### Mengeluarkan Versi Baharu
```bash
# Create a release — npm publish happens automatically
gh release create v1.0.6 --title "v1.0.6" --generate-notes
```
---
## 📊 Sejarah Bintang
<a href="https://star-history.com/#diegosouzapw/OmniRoute&Date">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=diegosouzapw/OmniRoute&type=Date&theme=dark" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=diegosouzapw/OmniRoute&type=Date" />
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=diegosouzapw/OmniRoute&type=Date" />
</picture>
</a>
---
## 🙏 Ucapan terima kasih
Terima kasih khas kepada **[9router](https://github.com/decolua/9router)** oleh **[decolua](https://github.com/decolua)** — projek asal yang mengilhamkan garpu ini. OmniRoute membina asas yang luar biasa itu dengan ciri tambahan, API berbilang modal dan penulisan semula TypeScript penuh.
Terima kasih khas kepada **[CLIProxyAPI](https://github.com/router-for-me/CLIProxyAPI)** — pelaksanaan Go asal yang mengilhamkan port JavaScript ini.
---
## 📄 Lesen
Lesen MIT - lihat [LICENSE](LICENSE) untuk butiran.
---
<div align="center">
<sub>Dibina dengan ❤️ untuk pembangun yang kod 24/7</sub>
<br/>
<sub><a href="https://omniroute.online">omniroute.online</a></sub>
</div>