# 🚀 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, 67+ pembekal, masa henti sifar. Kini dengan orkestra ejen **MCP & A2A**._

**Penyelesaian Sembang • Pembenaman • Penjanaan Imej • Video • Muzik • Audio • Kedudukan Semula • **Carian Web** • Pelayan MCP • Protokol A2A • 100% TypeScript**

---

<div align="center">

[![npm version](https://img.shields.io/npm/v/omniroute?color=cb3837&logo=npm)](https://www.npmjs.com/package/omniroute)
[![npm downloads](https://img.shields.io/npm/dm/omniroute?color=cb3837&logo=npm&label=npm%20downloads)](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)
[![Docker Pulls](https://img.shields.io/docker/pulls/diegosouzapw/omniroute?logo=docker&color=2496ED&label=docker%20pulls)](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)

</div>

🌐 **Terdapat dalam:** 🇺🇸 [English](README.md) | 🇧🇷 [Português (Brasil)](docs/i18n/pt-BR/README.md) | 🇪🇸 [Español](docs/i18n/es/README.md) | 🇫🇷 [Français](docs/i18n/fr/README.md) | 🇮🇹 [Italiano](docs/i18n/it/README.md) | 🇷🇺 [Русский](docs/i18n/ru/README.md) | 🇨🇳 [中文 (简体)](docs/i18n/zh-CN/README.md) | 🇩🇪 [Deutsch](docs/i18n/de/README.md) | 🇮🇳 [हिन्दी](docs/i18n/in/README.md) | 🇹🇭 [ไทย](docs/i18n/th/README.md) | 🇺🇦 [Українська](docs/i18n/uk-UA/README.md) | 🇸🇦 [العربية](docs/i18n/ar/README.md) | 🇯🇵 [日本語](docs/i18n/ja/README.md) | 🇻🇳 [Tiếng Việt](docs/i18n/vi/README.md) | 🇧🇬 [Български](docs/i18n/bg/README.md) | 🇩🇰 [Dansk](docs/i18n/da/README.md) | 🇫🇮 [Suomi](docs/i18n/fi/README.md) | 🇮🇱 [עברית](docs/i18n/he/README.md) | 🇭🇺 [Magyar](docs/i18n/hu/README.md) | 🇮🇩 [Bahasa Indonesia](docs/i18n/id/README.md) | 🇰🇷 [한국어](docs/i18n/ko/README.md) | 🇲🇾 [Bahasa Melayu](docs/i18n/ms/README.md) | 🇳🇱 [Nederlands](docs/i18n/nl/README.md) | 🇳🇴 [Norsk](docs/i18n/no/README.md) | 🇵🇹 [Português (Portugal)](docs/i18n/pt/README.md) | 🇷🇴 [Română](docs/i18n/ro/README.md) | 🇵🇱 [Polski](docs/i18n/pl/README.md) | 🇸🇰 [Slovenčina](docs/i18n/sk/README.md) | 🇸🇪 [Svenska](docs/i18n/sv/README.md) | 🇵🇭 [Filipino](docs/i18n/phi/README.md) | 🇨🇿 [Čeština](docs/i18n/cs/README.md)

---

## 🆕 Apa yang Baharu dalam v3.0.0

> **Menaik taraf daripada v2.9.5?** — Lihat [full CHANGELOG](CHANGELOG.md#300--2026-03-22-release-candidate--not-yet-merged-to-main) untuk semua perubahan.

| Kawasan                         | Tukar                                                                                                                                                                             |
| ------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 🔒 **Keselamatan CodeQL**       | Memperbaiki 10+ amaran CodeQL: polinomial-redos, tidak selamat-rawak, pemulihan suntikan shell                                                                                    |
| ✅ **Pengesahan Laluan**        | Semua 176 laluan API kini disahkan dengan skema Zod + `validateBody()` — CI `check:route-validation:t06` pas                                                                      |
| 🐛 **omniModel Tag Bocor**      | Teg dalaman `<omniModel>` tidak lagi bocor kepada pelanggan dalam respons penstriman SSE (#585)                                                                                   |
| 🔑 **API Kunci Berdaftar**      | Auto-peruntukkan kunci API melalui `POST /api/v1/registered-keys` dengan penguatkuasaan kuota setiap pembekal/akaun, idempotency, storan SHA-256 dan pelaporan isu GitHub pilihan |
| 👁️ **Scoped API Key Reveal** 🆕 | Opt-in recovery of API keys via `ALLOW_API_KEY_REVEAL`                                                                                                                            |
| 🎨 **Ikon Pembekal**            | 130+ logo pembekal melalui `@lobehub/icons` (SVG) dengan PNG → rantaian sandaran generik                                                                                          |
| 🔄 **Model Auto-Segerak**       | Penjadual 24 jam dan togol UI manual untuk menyegerakkan senarai model bagi pembekal terbina dalam dan tersuai serasi OpenAI                                                      |
| 🌐 **OpenCode Zen/Go**          | Dua pembekal baharu daripada @kang-heewon melalui PR #530: peringkat percuma + peringkat langganan melalui `OpencodeExecutor`                                                     |
| 🐛 **Gemini CLI OAuth**         | Ralat boleh diambil tindakan apabila `GEMINI_OAUTH_CLIENT_SECRET` tiada dalam Docker (adalah ralat Google samar)                                                                  |
| 🐛 **Konfigurasi OpenCode**     | `saveOpenCodeConfig()` kini menulis TOML dengan betul kepada `XDG_CONFIG_HOME`                                                                                                    |
| 🐛 **Timpa model disematkan**   | `body.model` ditetapkan dengan betul kepada `pinnedModel` pada perlindungan konteks-cache                                                                                         |
| 🐛 **Gelung Codex/Claude**      | `tool_result` blok kini ditukar kepada teks untuk menghentikan gelung tak terhingga                                                                                               |
| 🐛 **Ubah hala log masuk**      | Log masuk tidak lagi membeku selepas melangkau persediaan kata laluan                                                                                                             |
| 🐛 **Laluan Windows**           | Laluan MSYS2/Git-Bash (`/c/...`) dinormalkan kepada `C:\...` secara automatik                                                                                                     |

---

## 🖼️ Papan Pemuka Utama

<div align="center">
  <img src="./docs/screenshots/MainOmniRoute.png" alt="OmniRoute Dashboard" width="800"/>
</div>

---

## 📸 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 tamat**    | ![Endpoints](docs/screenshots/09-endpoint.png)    |

</details>

---

### 🤖 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/openclaw/openclaw">
          <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 bersambung melalui <code>http://localhost:20128/v1</code> atau <code>http://cloud.omniroute.online/v1</code> atau model <code>http://cloud.omniroute.online/v1__OMNI_TOKEN — un_config dan_4 kuota</sub>

---

## 🤔 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

---

## 📧 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)
- **Menyumbang**: Lihat [CONTRIBUTING.md](CONTRIBUTING.md), buka PR atau pilih `good first issue`
- **Projek Asal**: [9router by decolua](https://github.com/decolua/9router)

### 🐛 Melaporkan Pepijat?

Apabila membuka isu, sila jalankan arahan maklumat sistem dan lampirkan fail yang dijana:

```bash
npm run system-info
```

Ini menjana `system-info.txt` dengan versi Node.js anda, versi OmniRoute, butiran OS, alat CLI yang dipasang (iflow, gemini, claude, codex, antigravity, droid, dll.), status Docker/PM2 dan pakej sistem — semua yang kami perlukan untuk mengeluarkan semula isu anda dengan cepat. Lampirkan fail terus pada isu GitHub anda.

---

## 🔄 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
```

---

## 🎯 Perkara yang Selesaikan OmniRoute — 30 Titik Sakit Nyata & Kes Penggunaan

> **Setiap pembangun yang menggunakan alatan AI menghadapi masalah ini setiap hari.** OmniRoute dibina untuk menyelesaikan kesemuanya — daripada lebihan kos kepada blok serantau, daripada aliran OAuth yang rosak kepada operasi protokol dan kebolehmerhatian perusahaan.

<details>
<summary><b>💸 1. "Saya membayar untuk langganan yang mahal tetapi masih terganggu oleh had"</b></summary>

Pembangun membayar $20–200/bulan untuk Claude Pro, Codex Pro atau GitHub Copilot. Walaupun membayar, kuota mempunyai siling — 5j penggunaan, had mingguan atau had kadar seminit. Sesi pertengahan pengekodan, pembekal berhenti bertindak balas dan pembangun kehilangan aliran dan produktiviti.

**Cara OmniRoute menyelesaikannya:**

- **Smart 4-Tier Fallback** — Jika kuota langganan habis, diubah hala secara automatik ke API Key → Murah → Percuma tanpa campur tangan manual
- **Penjejakan Kuota Masa Nyata** — Menunjukkan penggunaan token dalam masa nyata dengan kira detik tetapan semula (5j, harian, mingguan)
- **Sokongan Berbilang Akaun** — Berbilang akaun bagi setiap pembekal dengan auto round-robin — apabila satu kehabisan, beralih kepada yang seterusnya
- **Kombo Tersuai** — Rantaian sandaran yang boleh disesuaikan dengan 6 strategi pengimbangan (isi dahulu, round-robin, P2C, rawak, paling kurang digunakan, dioptimumkan kos)
- **Kuota Perniagaan Codex** — Pemantauan kuota ruang kerja Perniagaan/Pasukan terus dalam papan pemuka

</details>

<details>
<summary><b>🔌 2. "Saya perlu menggunakan berbilang pembekal tetapi setiap satu mempunyai API yang berbeza"</b></summary>

OpenAI menggunakan satu format, Claude (Anthropic) menggunakan satu lagi, Gemini satu lagi. Jika pembangun ingin menguji model daripada pembekal yang berbeza atau sandaran antara mereka, mereka perlu mengkonfigurasi semula SDK, menukar titik akhir, menangani format yang tidak serasi. Pembekal tersuai (FriendLI, NIM) mempunyai titik akhir model bukan standard.

**Cara OmniRoute menyelesaikannya:**

- **Titik Akhir Disatukan** — Satu `http://localhost:20128/v1` berfungsi sebagai proksi untuk semua 67+ pembekal
- **Format Terjemahan** — Automatik dan telus: OpenAI ↔ Claude ↔ Gemini ↔ Responses API
- **Sanitization Response** — Mencabut medan bukan standard (`x_groq`, `usage_breakdown`, `service_tier`) yang memecahkan OpenAI SDK v1.83+
- **Penormalan Peranan** — Menukar `developer` → `system` untuk penyedia bukan OpenAI; `system` → `user` untuk GLM/ERNIE
- **Think Tag Extraction** — Mengekstrak `<think>` menyekat daripada model seperti DeepSeek R1 ke dalam standard `reasoning_content`
- **Output Berstruktur untuk Gemini** — `json_schema` → `responseMimeType`/`responseSchema` penukaran automatik
- **`stream` lalai kepada `false`** — Menjajarkan dengan spesifikasi OpenAI, mengelakkan SSE yang tidak dijangka dalam Python/Rust/Go SDK

</details>

<details>
<summary><b>🌐 3. "Pembekal AI saya menyekat wilayah/negara saya"</b></summary>

Penyedia seperti OpenAI/Codex menyekat akses daripada kawasan geografi tertentu. Pengguna mendapat ralat seperti `unsupported_country_region_territory` semasa sambungan OAuth dan API. Ini amat mengecewakan bagi pemaju dari negara membangun.

**Cara OmniRoute menyelesaikannya:**

- **Konfigurasi Proksi 3 Tahap** — Proksi boleh dikonfigurasikan pada 3 peringkat: global (semua trafik), setiap pembekal (satu pembekal sahaja) dan setiap sambungan/kunci
- **Lencana Proksi Berkod Warna** — Penunjuk visual: 🟢 proksi global, 🟡 proksi pembekal, 🔵 proksi sambungan, sentiasa menunjukkan IP
- **Pertukaran Token OAuth Melalui Proksi** — Aliran OAuth juga melalui proksi, menyelesaikan `unsupported_country_region_territory`
- **Ujian Sambungan melalui Proksi** — Ujian sambungan menggunakan proksi yang dikonfigurasikan (tiada lagi pintasan langsung)
- **Sokongan SOCKS5** — Sokongan proksi SOCKS5 penuh untuk penghalaan keluar
- **TLS Fingerprint Spoofing** — Cap jari TLS seperti penyemak imbas melalui `wreq-js` untuk memintas pengesanan bot
- **🔏 Padanan Cap Jari CLI** — Menyusun semula pengepala dan medan badan agar sepadan dengan tandatangan binari CLI asli, secara drastik mengurangkan risiko pembenderaan akaun. IP proksi dikekalkan — anda mendapat kedua-dua penyamaran **dan** IP secara serentak

</details>

<details>
<summary><b>🆓 4. "Saya mahu menggunakan AI untuk pengekodan tetapi saya tidak mempunyai wang"</b></summary>

Tidak semua orang boleh membayar $20–200/bulan untuk langganan AI. Pelajar, pembangun dari negara baru muncul, penggemar dan pekerja bebas memerlukan akses kepada model berkualiti pada kos sifar.

**Cara OmniRoute menyelesaikannya:**

- **Pembekal Peringkat Percuma Terbina dalam** — Sokongan asli untuk penyedia percuma 100%: iFlow (5 model tanpa had melalui OAuth: kimi-k2-thinking, qwen3-coder-plus, deepseek-r1, minimax-m2, kimi-k2), Qwen (4 model tanpa had: qwender3-coder3,-coplus qwen3-coder-next, vision-model), Kiro (Claude + AWS Builder ID secara percuma), Gemini CLI (180K token/bulan percuma)
- **Ollama Cloud** — Model Ollama dihoskan awan di `api.ollama.com` dengan peringkat "Penggunaan cahaya" percuma; gunakan awalan `ollamacloud/<model>`
- **Kombo Percuma-Sahaja** — Rantaian `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/bulan tanpa masa berhenti sifar
- **Akses Percuma NVIDIA NIM** — ~40 RPM dev-forever akses percuma kepada 70+ model di build.nvidia.com (peralihan daripada kredit kepada had kadar tulen)
- **Strategi Dioptimumkan Kos** — Strategi penghalaan yang secara automatik memilih pembekal yang tersedia paling murah

</details>

<details>
<summary><b>🔒 5. "Saya perlu melindungi gerbang AI saya daripada akses tanpa kebenaran"</b></summary>

Apabila mendedahkan get laluan AI kepada rangkaian (LAN, VPS, Docker), sesiapa sahaja yang mempunyai alamat boleh menggunakan token/kuota pembangun. Tanpa perlindungan, API terdedah kepada penyalahgunaan, suntikan segera dan penyalahgunaan.

**Cara OmniRoute menyelesaikannya:**

- **Pengurusan Kunci API** — Penjanaan, penggiliran dan skop setiap pembekal dengan halaman `/dashboard/api-manager` khusus
- **Kebenaran Tahap Model** — Hadkan kunci API kepada model tertentu (`openai/*`, corak kad bebas), dengan Togol Benarkan Semua/Sekat
- **Perlindungan Titik Akhir API** — Memerlukan kunci untuk `/v1/models` dan menyekat penyedia tertentu daripada penyenaraian
- **Auth Guard + CSRF Protection** — Semua laluan papan pemuka dilindungi dengan `withAuth` middleware + token CSRF
- **Penghad Kadar** — Pengehadan kadar Per-IP dengan tetingkap boleh dikonfigurasikan
- **Penapisan IP** — Senarai Benar/senarai sekat untuk kawalan akses
- **Pengawal Suntikan Segera** — Pensanitasi terhadap corak segera yang berniat jahat
- **Penyulitan AES-256-GCM** — Bukti kelayakan disulitkan semasa rehat

</details>

<details>
<summary><b>🛑 6. "Pembekal saya gagal dan saya kehilangan aliran pengekodan saya"</b></summary>

Pembekal AI boleh menjadi tidak stabil, mengembalikan ralat 5xx atau mencapai had kadar sementara. Jika pembangun bergantung pada penyedia tunggal, mereka akan terganggu. Tanpa pemutus litar, percubaan semula berulang boleh ranap aplikasi.

**Cara OmniRoute menyelesaikannya:**

- **Pemutus Litar bagi setiap model** — Auto buka/tutup dengan ambang boleh dikonfigurasikan dan cooldown (Tertutup/Buka/Separuh Terbuka), berskop setiap model untuk mengelakkan blok berlatarkan
- **Penyingkiran Eksponen** — Kelewatan percubaan semula progresif
- **Kawanan Anti Gemuruh** — Mutex + perlindungan semafor terhadap ribut percubaan semula serentak
- **Kombo Rantai Sandar** — Jika pembekal utama gagal, secara automatik jatuh melalui rantaian tanpa campur tangan
- **Pemutus Litar Kombo** — Lumpuhkan automatik pembekal yang gagal dalam rantaian kombo
- **Papan Pemuka Kesihatan** — Pemantauan masa aktif, keadaan pemutus litar, penguncian, statistik cache, kependaman p50/p95/p99

</details>

<details>
<summary><b>🔧 7. "Mengkonfigurasi setiap alat AI adalah membosankan dan berulang"</b></summary>

Pembangun menggunakan Kursor, Kod Claude, Codex CLI, OpenClaw, Gemini CLI, Kod Kilo... Setiap alat memerlukan konfigurasi yang berbeza (titik akhir API, kunci, model). Mengkonfigurasi semula apabila menukar pembekal atau model adalah membuang masa.

**Cara OmniRoute menyelesaikannya:**

- **Papan Pemuka Alat CLI** — Halaman khusus dengan persediaan satu klik untuk Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline
- **GitHub Copilot Config Generator** — Menghasilkan `chatLanguageModels.json` untuk Kod VS dengan pemilihan model pukal
- **Onboarding Wizard** — Persediaan 4 langkah berpandu untuk pengguna kali pertama
- **Satu titik akhir, semua model** — Konfigurasikan `http://localhost:20128/v1` sekali, akses 67+ pembekal

</details>

<details>
<summary><b>🔑 8. "Menguruskan token OAuth daripada berbilang pembekal adalah neraka"</b></summary>

Kod Claude, Codex, Gemini CLI, Copilot — semuanya menggunakan OAuth 2.0 dengan token tamat tempoh. Pembangun perlu sentiasa mengesahkan semula, menangani `client_secret is missing`, `redirect_uri_mismatch` dan kegagalan pada pelayan jauh. OAuth pada LAN/VPS amat bermasalah.

**Cara OmniRoute menyelesaikannya:**

- **Muat Semula Token Auto** — Token OAuth dimuat semula di latar belakang sebelum tamat tempoh
- **OAuth 2.0 (PKCE) Terbina dalam** — Aliran automatik untuk Kod Claude, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow
- **OAuth Berbilang Akaun** — Berbilang akaun bagi setiap pembekal melalui pengekstrakan token JWT/ID
- **OAuth LAN/Remote Fix** — Pengesanan IP peribadi untuk `redirect_uri` + mod URL manual untuk pelayan jauh
- **OAuth Behind Nginx** — Menggunakan `window.location.origin` untuk keserasian proksi terbalik
- **Panduan OAuth Jauh** — Panduan langkah demi langkah untuk kelayakan Google Cloud pada VPS/Docker

</details>

<details>
<summary><b>📊 9. "Saya tidak tahu berapa banyak yang saya belanjakan atau di mana"</b></summary>

Pembangun menggunakan berbilang penyedia berbayar tetapi tidak mempunyai pandangan bersatu tentang perbelanjaan. Setiap pembekal mempunyai papan pemuka pengebilan sendiri, tetapi tiada paparan disatukan. Kos yang tidak dijangka boleh bertimbun.

**Cara OmniRoute menyelesaikannya:**

- **Papan Pemuka Analitis Kos** — Penjejakan kos per-token dan pengurusan belanjawan bagi setiap pembekal
- **Had Belanjawan setiap Peringkat** — Siling perbelanjaan setiap peringkat yang mencetuskan sandaran automatik
- **Konfigurasi Harga Per-Model** — Harga boleh dikonfigurasikan bagi setiap model
- **Statistik Penggunaan Setiap Kunci API** — Kiraan permintaan dan cap masa yang terakhir digunakan setiap kunci
- **Papan Pemuka Analitik** — Kad statistik, carta penggunaan model, jadual pembekal dengan kadar kejayaan dan kependaman

</details>

<details>
<summary><b>🐛 10. "Saya tidak dapat mendiagnosis ralat dan masalah dalam panggilan AI"</b></summary>

Apabila panggilan gagal, pembangun tidak tahu sama ada ia adalah had kadar, token tamat tempoh, format yang salah atau ralat pembekal. Log berpecah-belah merentasi terminal yang berbeza. Tanpa pemerhatian, penyahpepijatan adalah percubaan-dan-ralat.

**Cara OmniRoute menyelesaikannya:**

- **Papan Pemuka Log Bersatu** — 4 tab: Log Permintaan, Log Proksi, Log Audit, Konsol
- **Pemapar Log Konsol** — Pemapar gaya terminal masa nyata dengan tahap berkod warna, tatal automatik, carian, penapis
- **Log Proksi SQLite** — Log berterusan yang bertahan dimulakan semula
- **Taman Permainan Penterjemah** — 4 mod nyahpepijat: Taman Permainan (terjemahan format), Penguji Sembang (perjalanan pergi balik), Bangku Ujian (batch), Monitor Langsung (masa nyata)
- **Permintaan Telemetri** — kependaman p50/p95/p99 + pengesanan X-Request-Id
- **Pengelogan Berasaskan Fail dengan Putaran** — Pemintas konsol menangkap segala-galanya ke log JSON dengan putaran berasaskan saiz
- **Laporan Maklumat Sistem** — `npm run system-info` menjana `system-info.txt` dengan persekitaran penuh anda (Versi Nod, versi OmniRoute, OS, alatan CLI, status Docker/PM2). Lampirkannya apabila melaporkan isu untuk percubaan segera.

</details>

<details>
<summary><b>🏗️ 11. "Menyedia dan menyelenggara gerbang adalah rumit"</b></summary>

Memasang, mengkonfigurasi dan menyelenggara proksi AI merentas persekitaran yang berbeza (tempatan, VPS, Docker, awan) adalah intensif buruh. Masalah seperti laluan berkod keras, `EACCES` pada direktori, konflik port dan binaan merentas platform menambahkan geseran.

**Cara OmniRoute menyelesaikannya:**

- **pemasangan global npm** — `npm install -g omniroute && omniroute` — selesai
- **Docker Multi-Platform** — AMD64 + ARM64 asli (Apple Silicon, AWS Graviton, Raspberry Pi)
- **Profil Karang Docker** — `base` (tiada alat CLI) dan `cli` (dengan Kod Claude, Codex, OpenClaw)
- **Apl Desktop Elektron** — Apl asli untuk Windows/macOS/Linux dengan dulang sistem, auto mula, mod luar talian
- **Mod Split-Port** — API dan Papan Pemuka pada port berasingan untuk senario lanjutan (proksi terbalik, rangkaian kontena)
- **Cloud Sync** — Konfigurasikan penyegerakan merentas peranti melalui Cloudflare Workers
- **Sandaran DB** — Sandaran automatik, pulihkan, eksport dan import semua tetapan

</details>

<details>
<summary><b>🌍 12. "Antara muka adalah bahasa Inggeris sahaja dan pasukan saya tidak berbahasa Inggeris"</b></summary>

Pasukan di negara bukan berbahasa Inggeris, terutamanya di Amerika Latin, Asia dan Eropah, bergelut dengan antara muka bahasa Inggeris sahaja. Halangan bahasa mengurangkan penggunaan dan meningkatkan ralat konfigurasi.

**Cara OmniRoute menyelesaikannya:**

- **Papan pemuka i18n — 30 Bahasa** — Semua 500+ kunci diterjemahkan termasuk bahasa Arab, Bulgaria, Denmark, Jerman, Sepanyol, Finland, Perancis, Ibrani, Hindi, Hungary, Indonesia, Itali, Jepun, Korea, Melayu, Belanda, Norway, Poland, Portugis (PT/BR), Romania, Rusia, Slovak, Sweden, Thai, Ukraine, Inggeris, Cina
- **Sokongan RTL** — Sokongan kanan ke kiri untuk bahasa Arab dan Ibrani
- **README Berbilang Bahasa** — 30 terjemahan dokumentasi lengkap
- **Pemilih Bahasa** — Ikon Glob dalam pengepala untuk penukaran masa nyata

</details>

<details>
<summary><b>🔄 13. "Saya perlukan lebih daripada sembang — saya perlukan pembenaman, imej, audio"</b></summary>

AI bukan sekadar penyelesaian sembang. Pembangun perlu menjana imej, menyalin audio, membuat pembenaman untuk RAG, menyusun semula dokumen dan kandungan sederhana. Setiap API mempunyai titik akhir dan format yang berbeza.

**Cara OmniRoute menyelesaikannya:**

- **Pembenaman** — `/v1/embeddings` dengan 6 pembekal dan 9+ model
- **Penjanaan Imej** — `/v1/images/generations` dengan 10 pembekal dan 20+ model (OpenAI, xAI, Together, Fireworks, Nebius, Hyperbolic, NanoBanana, Antigravity, SD WebUI, ComfyUI)
- **Teks-ke-Video** — `/v1/videos/generations` — ComfyUI (AnimateDiff, SVD) dan SD WebUI
- **Teks-ke-Muzik** — `/v1/music/generations` — ComfyUI (Audio Terbuka, MusicGen)
- **Transkripsi Audio** — `/v1/audio/transcriptions` — Whisper + Nvidia NIM, HuggingFace, Qwen3
- **Text-to-Speech** — `/v1/audio/speech` — ElevenLabs, Nvidia NIM, HuggingFace, Coqui, Tortoise, Qwen3, **Inworld**, **Cartesia**, **PlayHT**, + pembekal sedia ada
- **Moderasi** — `/v1/moderations` — Pemeriksaan keselamatan kandungan
- **Penyusunan semula** — `/v1/rerank` — Penyusunan semula perkaitan dokumen
- **Responses API** — Sokongan `/v1/responses` penuh untuk Codex

</details>

<details>
<summary><b>🧪 14. "Saya tiada cara untuk menguji dan membandingkan kualiti merentas model"</b></summary>

Pembangun ingin mengetahui model mana yang terbaik untuk kes penggunaan mereka — kod, terjemahan, penaakulan — tetapi membandingkan secara manual adalah perlahan. Tiada alat eval bersepadu wujud.

**Cara OmniRoute menyelesaikannya:**

- **LLM Evaluations** — Ujian set emas dengan 10 kes pra-muat meliputi salam, matematik, geografi, penjanaan kod, pematuhan JSON, terjemahan, penurunan harga, penolakan keselamatan
- **4 Strategi Padanan** — `exact`, `contains`, `regex`, `custom` (fungsi JS)
- **Bangku Ujian Taman Permainan Penterjemah** — Ujian kelompok dengan berbilang input dan output yang dijangka, perbandingan merentas pembekal
- **Penguji Sembang** — Perjalanan pergi balik penuh dengan pemaparan respons visual
- **Pantau Langsung** — Strim masa nyata semua permintaan yang mengalir melalui proksi

</details>

<details>
<summary><b>📈 15. "Saya perlu skala tanpa kehilangan prestasi"</b></summary>

Apabila volum permintaan bertambah, tanpa menyimpan cache soalan yang sama menjana kos pendua. Tanpa idempotensi, pendua meminta pemprosesan sisa. Had kadar setiap pembekal mesti dipatuhi.

**Cara OmniRoute menyelesaikannya:**

- **Cache Semantik** — Cache dua peringkat (tandatangan + semantik) mengurangkan kos dan kependaman
- **Request Idempotency** — tetingkap penyahduplikasi 5s untuk permintaan yang sama
- **Pengesanan Had Kadar** — RPM setiap pembekal, jurang min dan penjejakan serentak maks
- **Had Kadar Boleh Diedit** — Lalai boleh dikonfigurasikan dalam Tetapan → Ketahanan dengan kegigihan
- **Cache Pengesahan Kunci API** — Cache 3 peringkat untuk prestasi pengeluaran
- **Papan Pemuka Kesihatan dengan Telemetri** — kependaman p50/p95/p99, statistik cache, masa beroperasi

</details>

<details>
<summary><b>🤖 16. "Saya mahu mengawal tingkah laku model secara global"</b></summary>

Pembangun yang mahukan semua respons dalam bahasa tertentu, dengan nada tertentu atau ingin mengehadkan token penaakulan. Mengkonfigurasi ini dalam setiap alat/permintaan adalah tidak praktikal.

**Cara OmniRoute menyelesaikannya:**

- **System Prompt Injection** — Gesaan global digunakan untuk semua permintaan
- **Pengesahan Belanjawan Berfikir** — Kawalan peruntukan token penaakulan setiap permintaan (laluan, auto, tersuai, adaptif)
- **6 Strategi Penghalaan** — Strategi global yang menentukan cara permintaan diedarkan
- **Penghala Wildcard** — `provider/*` laluan corak secara dinamik kepada mana-mana pembekal
- **Kombo Dayakan/Lumpuhkan Togol** — Togol kombo terus dari papan pemuka
- **Togol Pembekal** — Dayakan/lumpuhkan semua sambungan untuk pembekal dengan satu klik
- **Pembekal Disekat** — Kecualikan pembekal khusus daripada penyenaraian `/v1/models`

</details>

<details>
<summary><b>🧰 17. "Saya memerlukan alatan MCP sebagai keupayaan produk kelas pertama"</b></summary>

Banyak get laluan AI mendedahkan MCP hanya sebagai butiran pelaksanaan tersembunyi. Pasukan memerlukan lapisan operasi yang boleh dilihat dan boleh diurus.

**Cara OmniRoute menyelesaikannya:**

- MCP muncul dalam navigasi papan pemuka dan tab protokol titik akhir
- Halaman pengurusan MCP khusus dengan proses, alatan, skop dan audit
- Permulaan pantas terbina dalam untuk `omniroute --mcp` dan penerimaan pelanggan

</details>

<details>
<summary><b>🧠 18. "Saya memerlukan orkestrasi A2A dengan laluan tugasan penyegerakan + strim"</b></summary>

Aliran kerja ejen memerlukan balasan langsung dan pelaksanaan strim jangka panjang dengan kawalan kitaran hayat.

**Cara OmniRoute menyelesaikannya:**

- Titik akhir JSON-RPC A2A (`POST /a2a`) dengan `message/send` dan `message/stream`
- Penstriman SSE dengan penyebaran keadaan terminal
- API kitaran hayat tugas untuk `tasks/get` dan `tasks/cancel`

</details>

<details>
<summary><b>🛰️ 19. "Saya memerlukan kesihatan proses MCP sebenar, bukan status yang diduga"</b></summary>

Pasukan operasi perlu mengetahui sama ada MCP sebenarnya masih hidup, bukan hanya sama ada API boleh dicapai.

**Cara OmniRoute menyelesaikannya:**

- Fail degupan jantung masa jalan dengan PID, cap masa, pengangkutan, kiraan alat dan mod skop
- API status MCP yang menggabungkan degupan jantung + aktiviti terkini
- Kad status UI untuk kesegaran proses/masa hidup/degupan jantung

</details>

<details>
<summary><b>📋 20. "Saya memerlukan pelaksanaan alat MCP yang boleh diaudit"</b></summary>

Apabila alat mengubah konfigurasi atau mencetuskan tindakan ops, pasukan memerlukan kebolehkesanan forensik.

**Cara OmniRoute menyelesaikannya:**

- Pengelogan audit yang disokong SQLite untuk panggilan alat MCP
- Tapis mengikut alat, kejayaan/kegagalan, kunci API dan penomboran
- Jadual audit papan pemuka + titik akhir statistik untuk automasi

</details>

<details>
<summary><b>🔐 21. "Saya memerlukan keizinan MCP berskop bagi setiap penyepaduan"</b></summary>

Pelanggan yang berbeza harus mempunyai akses paling tidak istimewa kepada kategori alat.

**Cara OmniRoute menyelesaikannya:**

- 9 skop MCP berbutir untuk akses alat terkawal
- Penguatkuasaan skop dan keterlihatan dalam UI pengurusan MCP
- Postur lalai yang selamat untuk perkakas operasi

</details>

<details>
<summary><b>⚙️ 22. "Saya memerlukan kawalan operasi tanpa menggunakan semula"</b></summary>

Pasukan memerlukan perubahan masa jalan yang cepat semasa insiden atau peristiwa kos.

**Cara OmniRoute menyelesaikannya:**

- Tukar pengaktifan kombo terus dari papan pemuka MCP
- Gunakan profil daya tahan daripada pek dasar yang telah ditetapkan
- Tetapkan semula keadaan pemutus litar daripada panel operasi yang sama

</details>

<details>
<summary><b>🔄 23. "Saya memerlukan keterlihatan dan pembatalan kitaran hayat tugas A2A secara langsung"</b></summary>

Tanpa keterlihatan kitaran hayat, insiden tugasan menjadi sukar untuk dicuba.

**Cara OmniRoute menyelesaikannya:**

- Penyenaraian tugas/penapisan mengikut keadaan/kemahiran dengan penomboran
- Latih tubi tentang metadata tugas, peristiwa dan artifak
- Titik akhir pembatalan tugas dan tindakan UI dengan pengesahan

</details>

<details>
<summary><b>🌊 24. "Saya memerlukan metrik strim aktif untuk beban A2A"</b></summary>

Aliran kerja penstriman memerlukan cerapan operasi tentang konkurensi dan sambungan langsung.

**Cara OmniRoute menyelesaikannya:**

- Kaunter aliran aktif disepadukan ke dalam status A2A
- Cap masa tugas terakhir dan kiraan setiap negeri
- Kad papan pemuka A2A untuk pemantauan operasi masa nyata

</details>

<details>
<summary><b>🪪 25. "Saya memerlukan penemuan ejen standard untuk pelanggan"</b></summary>

Pelanggan dan orkestra luar memerlukan metadata yang boleh dibaca mesin untuk onboarding.

**Cara OmniRoute menyelesaikannya:**

- Kad Ejen terdedah di `/.well-known/agent.json`
- Keupayaan dan kemahiran ditunjukkan dalam UI pengurusan
- API status A2A termasuk metadata penemuan untuk automasi

</details>

<details>
<summary><b>🧭 26. "Saya memerlukan kebolehtemuan protokol dalam UX produk"</b></summary>

Jika pengguna tidak dapat menemui permukaan protokol, penggunaan dan kualiti sokongan akan menurun.

**Cara OmniRoute menyelesaikannya:**

- Halaman **Titik Akhir** yang disatukan dengan tab untuk Titik Akhir Proksi, MCP, A2A dan API
- Togol status perkhidmatan dalam talian (Dalam Talian/Luar Talian) untuk MCP dan A2A
- Pautan dari gambaran keseluruhan ke tab pengurusan khusus

</details>

<details>
<summary><b>🧪 27. "Saya memerlukan pengesahan protokol hujung ke hujung dengan pelanggan sebenar"</b></summary>

Ujian olok-olok tidak mencukupi untuk mengesahkan keserasian protokol sebelum dikeluarkan.

**Cara OmniRoute menyelesaikannya:**

- Suite E2E yang but apl dan menggunakan pengangkutan pelanggan MCP SDK sebenar
- Ujian pelanggan A2A untuk penemuan, menghantar, menstrim, mendapatkan dan membatalkan aliran
- Periksa silang dakwaan terhadap audit MCP dan API tugasan A2A

</details>

<details>
<summary><b>📡 28. "Saya memerlukan pemerhatian bersatu merentas semua antara muka"</b></summary>

Memisahkan kebolehmerhatian mengikut protokol mewujudkan titik buta dan MTTR yang lebih panjang.

**Cara OmniRoute menyelesaikannya:**

- Papan pemuka/log/analisis bersatu dalam satu produk
- Kesihatan + audit + telemetri permintaan merentas lapisan OpenAI, MCP dan A2A
- API Operasi untuk status dan automasi

</details>

<details>
<summary><b>💼 29. "Saya memerlukan satu masa jalan untuk proksi + alatan + orkestrasi ejen"</b></summary>

Menjalankan banyak perkhidmatan berasingan meningkatkan kos operasi dan mod kegagalan.

**Cara OmniRoute menyelesaikannya:**

- Proksi serasi OpenAI, pelayan MCP dan pelayan A2A dalam satu tindanan
- Kebenaran dikongsi, daya tahan, stor data dan kebolehmerhatian
- Model dasar yang konsisten merentas semua permukaan interaksi

</details>

<details>
<summary><b>🚀 30. "Saya perlu menghantar aliran kerja agen tanpa penyebaran kod gam"</b></summary>

Pasukan kehilangan halaju apabila mencantumkan berbilang perkhidmatan dan skrip ad-hoc.

**Cara OmniRoute menyelesaikannya:**

- Strategi titik akhir bersatu untuk pelanggan dan ejen
- UI pengurusan protokol terbina dalam dan laluan pengesahan asap
- Asas sedia pengeluaran (keselamatan, pembalakan, daya tahan, sandaran)

</details>

### Contoh Buku Main (Kes Penggunaan Bersepadu)

**Playbook A: Maksimumkan langganan berbayar + sandaran murah**

```txt
Combo: "maximize-claude"
  1. cc/claude-opus-4-6
  2. glm/glm-4.7
  3. if/kimi-k2-thinking

Monthly cost: $20 + small backup spend
Outcome: higher quality, near-zero interruption
```

**Playbook B: Timbunan pengekodan kos sifar**

```txt
Combo: "free-forever"
  1. gc/gemini-3-flash
  2. if/kimi-k2-thinking
  3. qw/qwen3-coder-plus

Monthly cost: $0
Outcome: stable free coding workflow
```

**Playbook C: 24/7 rantai sandaran sentiasa hidup**

```txt
Combo: "always-on"
  1. cc/claude-opus-4-6
  2. cx/gpt-5.2-codex
  3. glm/glm-4.7
  4. minimax/MiniMax-M2.1
  5. if/kimi-k2-thinking

Outcome: deep fallback depth for deadline-critical workloads
```

**Playbook D: Operasi ejen dengan MCP + A2A**

```txt
1) Start MCP transport (`omniroute --mcp`) for tool-driven operations
2) Run A2A tasks via `message/send` and `message/stream`
3) Observe via /dashboard/endpoint (MCP and A2A tabs)
4) Toggle services via inline status controls
```

---

## 🆓 Mula Percuma — Kos Konfigurasi Sifar

> Sediakan pengekodan AI dalam beberapa minit pada **$0/bulan**. Sambungkan akaun percuma ini dan gunakan kombo **Timbunan Percuma** terbina dalam.

| Langkah | Tindakan                                                | Pembekal Dibuka Kunci                                              |
| ------- | ------------------------------------------------------- | ------------------------------------------------------------------ |
| 1       | Sambung **Kiro** (AWS Builder ID OAuth)                 | Claude Sonnet 4.5, Haiku 4.5 — **tanpa had**                       |
| 2       | Sambung **iFlow** (Google OAuth)                        | kimi-k2-thinking, qwen3-coder-plus, deepseek-r1... — **tanpa had** |
| 3       | Sambung **Qwen** (Kod Peranti)                          | qwen3-coder-plus, qwen3-coder-flash... — **tanpa had**             |
| 4       | Sambung **Gemini CLI** (Google OAuth)                   | gemini-3-flash, Gemini-2.5-pro — **180K/bln percuma**              |
| 5       | `/dashboard/combos` → **Templat Timbunan Percuma ($0)** | Round-robin semua pembekal percuma secara automatik                |

**Tuding mana-mana IDE/CLI ke:** `http://localhost:20128/v1` · Kunci API: `any-string` · Selesai.

> **Liputan tambahan pilihan (juga percuma):** Kunci API Groq (30 RPM percuma), NVIDIA NIM (40 RPM percuma, 70+ model), Cerebras (1M tok/hari), kunci API LongCat (50M token/hari!), Cloudflare Workers AI (10K Neuron/hari, 50+ model).

## ⚡ Mula Pantas

### 1) Pasang dan jalankan

```bash
npm install -g omniroute
omniroute
```

> **pengguna pnpm:** Jalankan `pnpm approve-builds -g` selepas pemasangan untuk mendayakan skrip binaan asli yang diperlukan oleh `better-sqlite3` dan `@swc/core`:
>
> ```bash
> pnpm install -g omniroute
> pnpm approve-builds -g   # Select all packages → approve
> omniroute
> ```

Papan pemuka dibuka pada `http://localhost:20128` dan URL asas API ialah `http://localhost:20128/v1`.

| Perintah                | Penerangan                                                               |
| ----------------------- | ------------------------------------------------------------------------ |
| `omniroute`             | Mulakan pelayan (`PORT=20128`, API dan papan pemuka pada port yang sama) |
| `omniroute --port 3000` | Tetapkan port kanonik/API kepada 3000                                    |
| `omniroute --mcp`       | Mulakan pelayan MCP (stdio transport)                                    |
| `omniroute --no-open`   | Jangan auto buka penyemak imbas                                          |
| `omniroute --help`      | Tunjukkan bantuan                                                        |

Mod split-port pilihan:

```bash
PORT=20128 DASHBOARD_PORT=20129 omniroute
# API:       http://localhost:20128/v1
# Dashboard: http://localhost:20129
```

### 2) Sambungkan penyedia dan buat kunci API anda

1. Buka Papan Pemuka → `Providers` dan sambungkan sekurang-kurangnya satu pembekal (kunci OAuth atau API).
2. Buka Papan Pemuka → `Endpoints` dan buat kunci API.
3. (Pilihan) Buka Papan Pemuka → `Combos` dan tetapkan rantaian sandaran anda.

### 3) Halakan alat pengekodan anda ke OmniRoute

```txt
Base URL: http://localhost:20128/v1
API Key:  [copy from Endpoint page]
Model:    if/kimi-k2-thinking (or any provider/model prefix)
```

Berfungsi dengan Claude Code, Codex CLI, Gemini CLI, Cursor, Cline, OpenClaw, OpenCode dan SDK serasi OpenAI.

### 4) Dayakan dan sahkan protokol (v2.0)

**MCP (untuk operasi dipacu alat):**

```bash
omniroute --mcp
```

Kemudian sambungkan klien MCP anda melalui `stdio` dan alat ujian seperti:

- `omniroute_get_health`
- `omniroute_list_combos`

**A2A (untuk aliran kerja ejen-ke-ejen):**

```bash
curl http://localhost:20128/.well-known/agent.json
```

```bash
curl -X POST http://localhost:20128/a2a \
  -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":"quickstart","method":"message/send","params":{"skill":"quota-management","messages":[{"role":"user","content":"Give me a short quota summary."}]}}'
```

### 5) Sahkan semuanya hujung ke hujung (disyorkan)

```bash
npm run test:protocols:e2e
```

Suite ini mengesahkan aliran klien MCP dan A2A sebenar terhadap apl yang sedang berjalan.

### Alternatif: jalankan dari sumber

```bash
cp .env.example .env
npm install
PORT=20128 DASHBOARD_PORT=20129 NEXT_PUBLIC_BASE_URL=http://localhost:20129 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            |

---

## 🖥️ Apl Desktop — Luar Talian & Sentiasa Hidup

> 🆕 **BARU!** OmniRoute kini tersedia sebagai **aplikasi desktop asli** untuk Windows, macOS dan Linux.

Jalankan OmniRoute sebagai apl desktop kendiri — tiada terminal, tiada penyemak imbas, tiada internet diperlukan untuk model tempatan. Aplikasi berasaskan Elektron termasuk:

- 🖥️ **Tetingkap Asli** — Tetingkap apl khusus dengan penyepaduan dulang sistem
- 🔄 **Auto Mula** — Lancarkan OmniRoute pada log masuk sistem
- 🔔 **Pemberitahuan Asli** — Dapatkan makluman untuk masalah keletihan kuota atau pembekal
- ⚡ **Pasang Satu Klik** — NSIS (Windows), DMG (macOS), AppImage (Linux)
- 🌐 **Mod Luar Talian** — Berfungsi sepenuhnya di luar talian dengan pelayan yang digabungkan

### Mula Pantas

```bash
# Development mode
npm run electron:dev

# Build for your platform
npm run electron:build         # Current platform
npm run electron:build:win     # Windows (.exe)
npm run electron:build:mac     # macOS (.dmg) — x64 & arm64
npm run electron:build:linux   # Linux (.AppImage)
```

### Dulang Sistem

Apabila diminimumkan, OmniRoute tinggal dalam dulang sistem anda dengan tindakan pantas:

- Buka papan pemuka
- Tukar port pelayan
- Hentikan permohonan

📖 Dokumentasi penuh: [**OMNI_TOKEN_153**](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** (dev forever)       | ~40 RPM            | 70+ model terbuka                    |
|                  | Serebral                    | **PERCUMA** (1J tok/hari)       | 60K TPM / 30 RPM   | Terpantas di dunia                   |
|                  | Groq                        | **PERCUMA** (30 RPM)            | 14.4K RPD          | Llama/Gemma sangat pantas            |
|                  | DeepSeek V3.2               | $0.27/$1.10 setiap 1J           | Tiada              | Penalaran harga/kualiti terbaik      |
|                  | xAI Grok-4 Cepat            | **$0.20/$0.50 setiap 1J** 🆕    | Tiada              | Panggilan alat + terpantas, ultralow |
|                  | xAI Grok-4 (standard)       | $0.20/$1.50 setiap 1J 🆕        | Tiada              | Penaakulan perdana daripada xAI      |
|                  | Mistral                     | Percubaan percuma + berbayar    | Kadar terhad       | AI Eropah                            |
|                  | OpenRouter                  | Bayar setiap penggunaan         | Tiada              | 100+ model aggr.                     |
| **💰 MURAH**     | GLM-5 (melalui Z.AI) 🆕     | $0.5/1J                         | Setiap hari 10AM   | Keluaran 128K, perdana terbaharu     |
|                  | GLM-4.7                     | $0.6/1J                         | Setiap hari 10AM   | Sandaran belanjawan                  |
|                  | MiniMax M2.5 🆕             | Input $0.3/1J                   | 5 jam bergolek     | Penaakulan + tugas agen              |
|                  | MiniMax M2.1                | $0.2/1J                         | 5 jam bergolek     | Pilihan termurah                     |
|                  | Kimi K2.5 (Moonshot API) 🆕 | Bayar setiap penggunaan         | Tiada              | Akses langsung Moonshot API          |
|                  | Kimi K2                     | $9/bln flat                     | 10 juta token/bln  | Kos yang boleh diramal               |
| **🆓 PERCUMA**   | iFlow                       | **$0**                          | tanpa had          | 5 model tanpa had                    |
|                  | Qwen                        | **$0**                          | tanpa had          | 4 model tanpa had                    |
|                  | Kiro                        | **$0**                          | tanpa had          | Claude Sonnet/Haiku (Pembina AWS)    |
|                  | LongCat Flash-Lite 🆕       | **$0** (50J tok/hari 🔥)        | 1 RPS              | Kuota percuma terbesar di Bumi       |
|                  | Pendebungaan AI 🆕          | **$0** (tiada kunci diperlukan) | 1 req/15s          | GPT-5, Claude, DeepSeek, Llama 4     |
|                  | Pekerja Cloudflare AI 🆕    | **$0** (10K Neuron/hari)        | ~150 resp/hari     | 50+ model, kelebihan global          |
|                  | Scaleway AI 🆕              | **$0** (Jumlah token 1J)        | Kadar terhad       | EU/GDPR, Qwen3 235B, Llama 70B       |

> 🆕 **Model baharu ditambah (Mac 2026):** Keluarga Grok-4 Fast pada $0.20/$0.50/M (ditanda aras pada 1143ms — 30% lebih pantas daripada Gemini 2.5 Flash), GLM-5 melalui Z.AI dengan output 128K, penaakulan MiniMax M2.5. Kim2 DeepSeek V3, penentuan harga Kim2 DeepSeek V3.

**💡 Timbunan Kombo $0 — Persediaan Percuma Lengkap:**

```
# 🆓 Ultimate Free Stack 2026 — 11 Providers, $0 Forever
Kiro (kr/)             → Claude Sonnet/Haiku UNLIMITED
iFlow (if/)            → kimi-k2-thinking, qwen3-coder-plus, deepseek-r1 UNLIMITED
LongCat Lite (lc/)     → LongCat-Flash-Lite — 50M tokens/day 🔥
Pollinations (pol/)    → GPT-5, Claude, DeepSeek, Llama 4 — no key needed
Qwen (qw/)             → qwen3-coder-plus, qwen3-coder-flash, qwen3-coder-next UNLIMITED
Gemini (gemini/)       → Gemini 2.5 Flash — 1,500 req/day free API key
Cloudflare AI (cf/)    → Llama 70B, Gemma 3, Mistral — 10K Neurons/day
Scaleway (scw/)        → Qwen3 235B, Llama 70B — 1M free tokens (EU)
Groq (groq/)           → Llama/Gemma ultra-fast — 14.4K req/day
NVIDIA NIM (nvidia/)   → 70+ open models — 40 RPM forever
Cerebras (cerebras/)   → Llama/Qwen world-fastest — 1M tok/day
```

**Kos sifar. Jangan sekali-kali berhenti pengekodan.** Konfigurasikan ini sebagai satu kombo OmniRoute dan semua sandaran berlaku secara automatik — tiada penukaran manual.

---

---

## 🆓 Model Percuma — Perkara Yang Anda Dapat

> Semua model di bawah adalah **100% percuma dengan kad kredit sifar diperlukan**. Laluan automatik OmniRoute antara mereka apabila satu kuota habis — gabungkan kesemuanya untuk kombo $0 yang tidak boleh dipecahkan.

### 🔵 MODEL CLAUDE (melalui Kiro — AWS Builder ID)

| Model               | Awalan | Had              | Had Kadar                   |
| ------------------- | ------ | ---------------- | --------------------------- |
| `claude-sonnet-4.5` | `kr/`  | **Tidak terhad** | Tiada had harian dilaporkan |
| `claude-haiku-4.5`  | `kr/`  | **Tidak terhad** | Tiada had harian dilaporkan |
| `claude-opus-4.6`   | `kr/`  | **Tidak terhad** | Opus terkini melalui Kiro   |

### 🟢 MODEL IFLOW (OAuth Percuma — Tiada Kad Kredit)

| Model              | Awalan | Had              | Had Kadar                 |
| ------------------ | ------ | ---------------- | ------------------------- |
| `kimi-k2-thinking` | `if/`  | **Tidak terhad** | Tiada had yang dilaporkan |
| `qwen3-coder-plus` | `if/`  | **Tidak terhad** | Tiada had yang dilaporkan |
| `deepseek-r1`      | `if/`  | **Tidak terhad** | Tiada had yang dilaporkan |
| `minimax-m2.1`     | `if/`  | **Tidak terhad** | Tiada had yang dilaporkan |
| `kimi-k2`          | `if/`  | **Tidak terhad** | Tiada had yang dilaporkan |

### MODEL QWEN (Pengesahan Kod Peranti)

| Model               | Awalan | Had              | Had Kadar                 |
| ------------------- | ------ | ---------------- | ------------------------- |
| `qwen3-coder-plus`  | `qw/`  | **Tidak terhad** | Tiada had yang dilaporkan |
| `qwen3-coder-flash` | `qw/`  | **Tidak terhad** | Tiada had dilaporkan      |
| `qwen3-coder-next`  | `qw/`  | **Tidak terhad** | Tiada had dilaporkan      |
| `vision-model`      | `qw/`  | **Tidak terhad** | Multimodal (imej)         |

### 🟣 GEMINI CLI (Google OAuth)

| Model                    | Awalan | Had                          | Had Kadar              |
| ------------------------ | ------ | ---------------------------- | ---------------------- |
| `gemini-3-flash-preview` | `gc/`  | **180K tok/bulan** + 1K/hari | Tetapan semula bulanan |
| `gemini-2.5-pro`         | `gc/`  | 180K/bulan (kolam kongsi)    | Berkualiti tinggi      |

### ⚫ NVIDIA NIM (Kunci API Percuma — build.nvidia.com)

| Peringkat     | Had Harian       | Had Kadar   | Nota                                                       |
| ------------- | ---------------- | ----------- | ---------------------------------------------------------- |
| Percuma (Dev) | Tiada topi token | **~40 RPM** | 70+ model; beralih kepada had kadar tulen pertengahan 2025 |

Model percuma popular: `moonshotai/kimi-k2.5` (Kimi K2.5), `z-ai/glm4.7` (GLM 4.7), `deepseek-ai/deepseek-v3.2` (DeepSeek V3.2), `nvidia/llama-3.3-70b-instruct`, `deepseek/deepseek-r1`

### ⚪ CEREBRAS (Kunci API Percuma — inference.cerebras.ai)

| Peringkat | Had Harian        | Had Kadar        | Nota                                                           |
| --------- | ----------------- | ---------------- | -------------------------------------------------------------- |
| Percuma   | **1J token/hari** | 60K TPM / 30 RPM | Inferens LLM terpantas di dunia; ditetapkan semula setiap hari |

Tersedia secara percuma: `llama-3.3-70b`, `llama-3.1-8b`, `deepseek-r1-distill-llama-70b`

### 🔴 GROQ (Kunci API Percuma — console.groq.com)

| Peringkat | Had Harian    | Had Kadar           | Nota                                        |
| --------- | ------------- | ------------------- | ------------------------------------------- |
| Percuma   | **14.4K RPD** | 30 RPM setiap model | Tiada kad kredit; 429 pada had, tidak dicaj |

Tersedia secara percuma: `llama-3.3-70b-versatile`, `gemma2-9b-it`, `mixtral-8x7b`, `whisper-large-v3`

### 🔴 LONGCAT AI (Kunci API Percuma — longcat.chat) 🆕

| Model                         | Awalan | Kuota Percuma Harian | Nota                          |
| ----------------------------- | ------ | -------------------- | ----------------------------- |
| `LongCat-Flash-Lite`          | `lc/`  | **50J token** 💥     | Kuota percuma terbesar pernah |
| `LongCat-Flash-Chat`          | `lc/`  | 500K token           | Sembang berbilang pusingan    |
| `LongCat-Flash-Thinking`      | `lc/`  | 500K token           | Penaakulan / CoT              |
| `LongCat-Flash-Thinking-2601` | `lc/`  | 500K token           | Versi Jan 2026                |
| `LongCat-Flash-Omni-2603`     | `lc/`  | 500K token           | Multimodal                    |

> 100% percuma semasa dalam beta awam. Daftar di [longcat.chat](https://longcat.chat) dengan e-mel atau telefon. Ditetapkan semula setiap hari 00:00 UTC.

### 🟢 PENDEBATAN AI (Tiada Kunci API Diperlukan) 🆕

| Model      | Awalan | Had Kadar | Pembekal Di Belakang  |
| ---------- | ------ | --------- | --------------------- |
| `openai`   | `pol/` | 1 req/15s | GPT-5                 |
| `claude`   | `pol/` | 1 req/15s | Claude Anthropic      |
| `gemini`   | `pol/` | 1 req/15s | Google Gemini         |
| `deepseek` | `pol/` | 1 req/15s | DeepSeek V3           |
| `llama`    | `pol/` | 1 req/15s | Pengakap Meta Llama 4 |
| `mistral`  | `pol/` | 1 req/15s | Mistral AI            |

> ✨ **Sifar geseran:** Tiada pendaftaran, tiada kunci API. Tambahkan penyedia Pendebungaan dengan medan kunci kosong dan ia berfungsi serta-merta.

### 🟠 CLOUDFLARE WORKERS AI (Kunci API Percuma — cloudflare.com) 🆕

| Peringkat | Neuron Harian | Penggunaan Setara                         | Nota                        |
| --------- | ------------- | ----------------------------------------- | --------------------------- |
| Percuma   | **10,000**    | ~150 LLM respons / 500s audio / 15K benam | Kelebihan global, 50+ model |

Model percuma popular: `@cf/meta/llama-3.3-70b-instruct`, `@cf/google/gemma-3-12b-it`, `@cf/openai/whisper-large-v3-turbo` (audio percuma!), `@cf/qwen/qwen2.5-coder-15b-instruct`

> Memerlukan Token API + ID Akaun daripada [dash.cloudflare.com](https://dash.cloudflare.com). Simpan ID Akaun dalam tetapan pembekal.

### 🟣 SCALEWAY AI (Token Percuma 1J — scaleway.com) 🆕

| Peringkat | Kuota Percuma | Lokasi       | Nota                                  |
| --------- | ------------- | ------------ | ------------------------------------- |
| Percuma   | **1J token**  | 🇫🇷 Paris, EU | Tiada kad kredit diperlukan dalam had |

Tersedia secara percuma: `qwen3-235b-a22b-instruct-2507` (Qwen3 235B!), `llama-3.1-70b-instruct`, `mistral-small-3.2-24b-instruct-2506`, `deepseek-v3-0324`

> patuh EU/GDPR. Dapatkan kunci API di [console.scaleway.com](https://console.scaleway.com).

> **💡 Timbunan Percuma Terunggul (11 Pembekal, $0 Selamanya):**
>
> ```
> Kiro (kr/)             → Claude Sonnet/Haiku UNLIMITED
> iFlow (if/)            → kimi-k2-thinking, qwen3-coder-plus, deepseek-r1 UNLIMITED
> LongCat Lite (lc/)     → LongCat-Flash-Lite — 50M tokens/day 🔥
> Pollinations (pol/)    → GPT-5, Claude, DeepSeek, Llama 4 — no key needed
> Qwen (qw/)             → qwen3-coder models UNLIMITED
> Gemini (gemini/)       → Gemini 2.5 Flash — 1,500 req/day free
> Cloudflare AI (cf/)    → 50+ models — 10K Neurons/day
> Scaleway (scw/)        → Qwen3 235B, Llama 70B — 1M free tokens (EU)
> Groq (groq/)           → Llama/Gemma — 14.4K req/day ultra-fast
> NVIDIA NIM (nvidia/)   → 70+ open models — 40 RPM forever
> Cerebras (cerebras/)   → Llama/Qwen world-fastest — 1M tok/day
> ```

## 🎙️ Kombo Transkripsi Percuma

> Transkripsikan sebarang audio/video untuk **$0** — Deepgram memimpin dengan percuma $200, sandaran AssemblyAI $50, Groq Whisper sebagai sandaran kecemasan tanpa had.

| Pembekal             | Kredit Percuma                 | Model Terbaik                            | Had Kadar                          |
| -------------------- | ------------------------------ | ---------------------------------------- | ---------------------------------- |
| 🟢 **Deepgram**      | **$200 percuma** (pendaftaran) | `nova-3` — ketepatan terbaik, 30+ bahasa | Tiada had RPM untuk kredit percuma |
| 🔵 **PerhimpunanAI** | **$50 percuma** (pendaftaran)  | `universal-3-pro` — bab, sentimen, PII   | Tiada had RPM untuk kredit percuma |
| 🔴 **Groq**          | **Percuma selamanya**          | `whisper-large-v3` — OpenAI Whisper      | 30 RPM (kadar terhad)              |

**Kombo yang dicadangkan dalam `/dashboard/combos`:**

```
Name: free-transcription
Strategy: Priority
Nodes:
  [1] deepgram/nova-3          → uses $200 free first
  [2] assemblyai/universal-3-pro → fallback when Deepgram credits run out
  [3] groq/whisper-large-v3    → free forever, emergency fallback
```

Kemudian dalam `/dashboard/media` → **Transkripsi** tab: muat naik mana-mana fail audio atau video → pilih titik akhir kombo anda → dapatkan transkripsi dalam format yang disokong.

## 💡 Ciri Utama

OmniRoute v2.0 dibina sebagai platform operasi, bukan hanya proksi geganti.

### 🆕 Baharu — Penambahbaikan Berinspirasikan ClawRouter (Mac 2026)

| Ciri                                      | Apa yang Dilakukan                                                                                                        |
| ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| ⚡ **Keluarga Cepat Grok-4**              | model xAI pada $0.20/$0.50/M — menanda aras 1143ms (30% lebih pantas daripada Gemini 2.5 Flash)                           |
| 🧠 **GLM-5 melalui Z.AI**                 | Konteks keluaran 128K, $0.5/1J — perdana terbaharu daripada keluarga GLM                                                  |
| 🔮 **MiniMax M2.5**                       | Penaakulan + tugas agen pada $0.30/1J — peningkatan ketara daripada M2.1                                                  |
| 🎯 **alatMemanggil Bendera setiap Model** | Per-model `toolCalling: true/false` dalam registry — AutoCombo melangkau model bukan alat yang mampu                      |
| 🌍 **Pengesanan Niat Pelbagai Bahasa**    | Kata kunci PT/ZH/ES/AR dalam pemarkahan AutoCombo — pemilihan model yang lebih baik untuk kandungan bukan bahasa Inggeris |
| 📊 **Kemunduran Didorong Penanda Aras**   | Kependaman p95 sebenar daripada pemarkahan kombo suapan permintaan langsung — AutoCombo belajar daripada data sebenar     |
| 🔁 **Minta Deduplikasi**                  | Tetingkap penyahduaan berasaskan cincang kandungan — selamat berbilang ejen, menghalang caj pendua                        |
| 🔌 **Strategi Penghala Boleh Pasang**     | Antara muka `RouterStrategy` boleh diperluas — tambah logik penghalaan tersuai sebagai pemalam                            |

### 🚀 v2.0.9+ sebelumnya — Taman Permainan, Cap Jari CLI & ACP

| Ciri                                          | Apa yang Dilakukan                                                                                                                                                                                                                                                                         |
| --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| 🎮 **Taman Permainan Model**                  | Halaman papan pemuka untuk menguji mana-mana model secara langsung — pemilih pembekal/model/titik akhir, Editor Monaco, penstriman, batalkan, pemasaan                                                                                                                                     |
| 🔏 **Padanan Cap Jari CLI**                   | Penyusunan pengepala/badan setiap penyedia untuk memadankan tandatangan CLI asli — togol setiap pembekal dalam Tetapan > Keselamatan. **IP proksi anda dipelihara**                                                                                                                        |
| 🤝 **Sokongan ACP (Protokol Pelanggan Agen)** | Penemuan ejen CLI (Codex, Claude, Goose, Gemini CLI, OpenClaw + 9 lagi), pemijah proses, `/api/acp/agents` titik akhir                                                                                                                                                                     |
| 🤖 **Papan Pemuka Ejen ACP**                  | Nyahpepijat › Halaman ejen — grid 14 ejen dengan status pemasangan, versi, borang ejen tersuai untuk sebarang alat CLI. Pengguna **OpenCode** mendapat butang "Muat turun opencode.json" yang menjana secara automatik konfigurasi sedia untuk digunakan dengan semua model yang tersedia. |
| 🔧 **Model Tersuai `apiFormat` Penghalaan**   | Model tersuai dengan `apiFormat: "responses"` kini dihalakan dengan betul ke penterjemah API Respons                                                                                                                                                                                       |
| 🏢 **Pengasingan Ruang Kerja Codex**          | Berbilang ruang kerja Codex setiap e-mel — OAuth memisahkan sambungan dengan betul mengikut ID ruang kerja                                                                                                                                                                                 |
| 🔄 **Kemas Kini Auto Elektron**               | Apl desktop menyemak kemas kini + pemasangan automatik semasa dimulakan semula                                                                                                                                                                                                             |

### 🤖 Operasi Ejen & Protokol (v2.0)

| Ciri                                      | Apa yang Dilakukan                                                                                      |
| ----------------------------------------- | ------------------------------------------------------------------------------------------------------- |
| 🔧 **Pelayan MCP (16 alatan)**            | Alat IDE/agen melalui 3 pengangkutan: stdio, SSE (`/api/mcp/sse`), HTTP Boleh Strim (`/api/mcp/stream`) |
| 🤝 **Pelayan A2A (JSON-RPC + SSE)**       | Pelaksanaan tugas ejen kepada ejen dengan aliran penyegerakan dan penstriman                            |
| 🧭 **Halaman Titik Akhir Disatukan**      | Halaman pengurusan tab dengan tab Endpoint Proxy, MCP, A2A dan Titik Akhir API                          |
| 🎚️ **Servis Dayakan/Lumpuhkan Togol**     | Suis HIDUP/MATI untuk MCP dan A2A dengan tetapan tetapan (lalai: MATI)                                  |
| 🛰️ **Denyutan Jantung Masa Jalanan MCP**  | Status proses sebenar (pid, masa beroperasi, umur degupan jantung, pengangkutan, mod skop)              |
| 📋 **Jejak Audit MCP**                    | Log audit boleh ditapis dengan kejayaan/kegagalan dan atribusi utama                                    |
| 🔐 **Penguatkuasaan Skop MCP**            | 9 kebenaran skop berbutir untuk akses alat terkawal                                                     |
| 📡 **Pengurusan Kitaran Hayat Tugas A2A** | Senaraikan/tapis tugas, periksa acara/artifak, batalkan tugas yang sedang dijalankan                    |
| 📋 **Penemuan Kad Agen**                  | `/.well-known/agent.json` untuk penemuan automatik pelanggan                                            |
| 🧪 **Protokol E2E Test Harness**          | Klien MCP SDK + A2A sebenar mengalir dalam `test:protocols:e2e`                                         |
| ⚙️ **Kawalan Operasi**                    | Tukar kombo, gunakan profil daya tahan, tetapkan semula pemutus dari satu permukaan kawalan             |

### 🧠 Penghalaan & Perisikan

| 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 ↔ Respons dengan penukaran selamat skema                    |
| 👥 **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 pengimbangan + kawalan rantai sandaran                                    |
| 🌐 **Penghala Wildcard**             | `provider/*` penghalaan dinamik                                                      |
| 🧠 **Kawalan Belanjawan Berfikir**   | Had penaakulan laluan, auto, tersuai dan adaptif                                     |
| 🔀 **Alias ​​Model**                 | Pengalian model + tersuai terbina dalam dan keselamatan penghijrahan                 |
| ⚡ **Degradasi Latar Belakang**      | Halakan tugas latar belakang keutamaan rendah ke model yang lebih murah              |
| 🧪 **Penghalaan Pintar Sedar Tugas** | Autopilih model mengikut jenis kandungan (pengekodan/penglihatan/analisis/ringkasan) |
| 💬 **System Prompt Suntikan**        | Kawalan tingkah laku global digunakan secara konsisten                               |
| 📄 **Kesesuaian API Respons**        | Sokongan penuh `/v1/responses` untuk Codex dan aliran kerja agen lanjutan            |

### 🎵 API Berbilang Modal

| Ciri                     | Apa yang Dilakukan                                                                                                                                                       |
| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| 🖼️ **Penjanaan Imej**    | `/v1/images/generations` dengan awan dan hujung belakang tempatan                                                                                                        |
| 📐 **Pembenaman**        | `/v1/embeddings` untuk carian dan saluran paip RAG                                                                                                                       |
| 🎤 **Transkripsi Audio** | `/v1/audio/transcriptions` — 7 pembekal (Deepgram Nova 3, AssemblyAI, Groq Whisper, HuggingFace, ElevenLabs, OpenAI, Azure), pengesanan autobahasa, sokongan MP4/MP3/WAV |
| 🔊 **Teks-ke-Ucapan**    | `/v1/audio/speech` — 10 pembekal (ElevenLabs, OpenAI, Deepgram, Cartesia, PlayHT, HuggingFace, Nvidia NIM, Inworld, Coqui, Tortoise) dengan mesej ralat yang betul       |
| 🎬 **Penjanaan Video**   | `/v1/videos/generations` (Aliran kerja ComfyUI + SD WebUI)                                                                                                               |
| 🎵 **Generasi Muzik**    | `/v1/music/generations` (aliran kerja ComfyUI)                                                                                                                           |
| 🛡️ **Kesederhanaan**     | `/v1/moderations` pemeriksaan keselamatan                                                                                                                                |
| 🔀 **Penyusunan semula** | `/v1/rerank` untuk pemarkahan perkaitan                                                                                                                                  |
| 🔍 **Carian Web** 🆕     | `/v1/search` — 5 pembekal (Serper, Brave, Perplexity, Exa, Tavily), 6,500+ percuma/bulan, auto-failover, cache                                                           |

### 🛡️ Ketahanan, Keselamatan & Tadbir Urus

| Ciri                                | Apa yang Dilakukan                                                                                           |
| ----------------------------------- | ------------------------------------------------------------------------------------------------------------ |
| 🔌 **Pemutus Litar**                | Perjalanan/pulih setiap model dengan kawalan ambang                                                          |
| 🎯 **Model Sedar Titik Akhir**      | Model tersuai mengisytiharkan titik akhir yang disokong + format API                                         |
| 🛡️ **Kawanan Anti Guruh**           | Perlindungan Mutex + semaphore pada acara cuba semula/kadar                                                  |
| 🧠 **Semantik + Cache Tandatangan** | Pengurangan kos/pendaman dengan dua lapisan cache                                                            |
| ⚡ **Minta Idepotency**             | Tetingkap perlindungan pendua                                                                                |
| 🔒 **TLS Fingerprint Spoofing**     | Cap jari TLS seperti pelayar — **mengurangkan pengesanan bot dan pembenderaan akaun**                        |
| 🔏 **Padanan Cap Jari CLI**         | Padan dengan tandatangan permintaan CLI asli — **mengurangkan risiko larangan sambil mengekalkan IP proksi** |
| 🌐 **Penapisan IP**                 | Kawalan senarai benar/senarai sekat untuk penempatan terdedah                                                |
| 📊 **Had Kadar Boleh Diedit**       | Had global/peringkat pembekal boleh dikonfigurasikan dengan kegigihan                                        |
| 🔑 **Pengurusan Kunci API + Skop**  | Kawalan pengeluaran/putaran kunci dan model/pembekal selamat                                                 |
| 🛡️ **Dilindungi `/models`**         | Gating pengesahan pilihan dan penyembunyian penyedia untuk katalog model                                     |

### 📊 Kebolehlihatan & Analitis

| Ciri                                  | Apa yang Dilakukan                                               |
| ------------------------------------- | ---------------------------------------------------------------- |
| 📝 **Permintaan + Pembalakan Proksi** | Permintaan/tindak balas penuh dan pengelogan proksi              |
| 📉 **Streamed Detailed Logs** 🆕      | Reconstructs SSE payload streams cleanly into the UI             |
| 📋 **Papan Pemuka Log Bersatu**       | Permintaan, proksi, audit dan paparan konsol dalam satu halaman  |
| 🔍 **Minta Telemetri**                | kependaman p50/p95/p99 dan pengesanan permintaan                 |
| 🏥 **Papan Pemuka Kesihatan**         | Masa aktif, keadaan pemutus, sekatan, statistik cache            |
| 💰 **Penjejakan Kos**                 | Kawalan belanjawan dan keterlihatan harga setiap model           |
| 📈 **Penggambaran Analitik**          | Cerapan penggunaan model/pembekal dan pandangan arah aliran      |
| 🧪 **Rangka Kerja Penilaian**         | Ujian set emas dengan strategi perlawanan boleh dikonfigurasikan |

### ☁️ Deployment & Platform

| Ciri                          | Apa yang Dilakukan                                              |
| ----------------------------- | --------------------------------------------------------------- |
| 🌐 **Kerahkan Di Mana-mana**  | Localhost, VPS, Docker, persekitaran Cloud                      |
| 💾 **Penyegerakan Awan**      | Penyegerakan konfigurasi melalui pekerja awan                   |
| 🔄 **Sandaran/Pulihkan**      | Eksport/import dan aliran pemulihan bencana                     |
| 🧙 **Onboarding Wizard**      | Persediaan berpandu jalan pertama                               |
| 🔧 **Papan Pemuka Alat CLI**  | Persediaan satu klik untuk alat pengekodan popular              |
| 🎮 **Taman Permainan Model**  | Uji mana-mana pembekal/model/titik akhir daripada papan pemuka  |
| 🔏 **Togol Cap Jari CLI**     | Padanan cap jari setiap pembekal dalam Tetapan > Keselamatan    |
| 🌐 **i18n (30 bahasa)**       | Papan pemuka penuh + sokongan bahasa dokumen dengan liputan RTL |
| 🧹 **Kosongkan Semua Model**  | Pembersihan senarai model satu klik dalam butiran pembekal      |
| 👁️ **Sidebar Controls** 🆕    | Hide components and integrations from Appearance Settings       |
| 📋 **Templat Isu**            | Templat GitHub standard untuk pepijat dan ciri                  |
| 📂 **Direktori Data Tersuai** | `DATA_DIR` ganti untuk lokasi storan                            |

### Menampilkan Deep Dive

#### Saling balik pintar dengan kawalan kos praktikal

```txt
Combo: "my-coding-stack"
  1. cc/claude-opus-4-6
  2. nvidia/llama-3.3-70b
  3. glm/glm-4.7
  4. if/kimi-k2-thinking
```

Apabila kuota, kadar atau kesihatan gagal, OmniRoute secara automatik beralih ke calon seterusnya tanpa penukaran manual.

#### Pengurusan protokol yang boleh dilihat dan dikendalikan

- MCP + A2A boleh ditemui dalam UI dan dokumen (tidak tersembunyi)
- API status protokol mendedahkan data operasi secara langsung (`/api/mcp/*`, `/api/a2a/*`)
- Papan pemuka termasuk tindakan untuk operasi hari ke-2 (togol kombo, penetapan semula pemutus, pembatalan tugas)

#### Penterjemah + aliran kerja pengesahan

Kawasan Penterjemah termasuk:

- **Taman Permainan**: meminta semakan transformasi
- **Penguji Sembang**: permintaan penuh/tindak balas pergi balik
- **Bangku Ujian**: berbilang kes dalam satu larian
- **Pemantau Langsung**: paparan trafik masa nyata

Selain itu pengesahan protokol dengan pelanggan sebenar melalui `npm run test:protocols:e2e`.

> 📖 **[MCP Server README](open-sse/mcp-server/README.md)** — Rujukan alat, konfigurasi IDE dan contoh klien
>
> 📖 **[A2A Server README](src/lib/a2a/README.md)** — Kemahiran, kaedah JSON-RPC, penstriman dan kitaran hayat tugas

## 🧪 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" yang dipramuat mengandungi kes ujian untuk:

- Salam, matematik, geografi, penjanaan kod
- Pematuhan format JSON, terjemahan, penjanaan turun nilai
- 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` |

---

## 📖 Panduan Persediaan

### Persediaan Protokol (MCP + A2A)

<details>
<summary><b>🧩 Persediaan MCP (Protokol Konteks Model)</b></summary>

Mulakan pengangkutan MCP dalam mod stdio:

```bash
omniroute --mcp
```

Aliran pengesahan yang disyorkan:

1. Sambungkan klien MCP anda melalui stdio.
2. Jalankan `omniroute_get_health`.
3. Jalankan `omniroute_list_combos`.
4. Buka `/dashboard/mcp` untuk mengesahkan degupan jantung, aktiviti dan audit.

API berguna untuk automasi:

- `GET /api/mcp/status`
- `GET /api/mcp/tools`
- `GET /api/mcp/audit`
- `GET /api/mcp/audit/stats`

</details>

<details>
<summary><b>🤝 Persediaan A2A (Agent2Agent)</b></summary>

Temui ejen:

```bash
curl http://localhost:20128/.well-known/agent.json
```

Hantar tugasan:

```bash
curl -X POST http://localhost:20128/a2a \
  -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":"setup-a2a","method":"message/send","params":{"skill":"quota-management","messages":[{"role":"user","content":"Summarize quota status."}]}}'
```

Urus kitaran hayat:

- `GET /api/a2a/status`
- `GET /api/a2a/tasks`
- `GET /api/a2a/tasks/:id`
- `POST /api/a2a/tasks/:id/cancel`

UI Operasi:

- `/dashboard/a2a` untuk pemerhatian tugas/keadaan/strim dan tindakan asap

</details>

<details>
<summary><b>🧪 Pengesahan protokol hujung ke hujung</b></summary>

Sahkan kedua-dua protokol dengan pelanggan sebenar:

```bash
npm run test:protocols:e2e
```

Ini mengesahkan:

- Sambung/senarai/panggilan klien MCP SDK
- Penemuan A2A/hantar/strim/dapat/batal
- Semak silang data dalam audit MCP dan API pengurusan tugas A2A

</details>

<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
```

#### Pengurusan Had Akaun Codex (5j + Mingguan)

Setiap akaun Codex kini mempunyai togol dasar dalam `Dashboard -> Providers`:

- `5h` (HIDUP/MATI): menguatkuasakan dasar ambang tetingkap 5 jam.
- `Weekly` (HIDUP/MATI): menguatkuasakan dasar ambang tetingkap mingguan.
- Tingkah laku ambang: apabila tetingkap yang didayakan mencapai >=90% penggunaan, akaun itu dilangkau.
- Tingkah laku putaran: Laluan OmniRoute ke akaun Codex yang layak seterusnya secara automatik.
- Tetapkan semula tingkah laku: apabila masa pembekal `resetAt` berlalu, akaun menjadi layak semula secara automatik.

Senario:

- `5h ON` + `Weekly ON`: akaun dilangkau apabila mana-mana tetingkap mencapai ambang.
- `5h OFF` + `Weekly ON`: hanya penggunaan mingguan boleh menyekat akaun.
- `5h ON` + `Weekly OFF`: hanya penggunaan 5 jam boleh menyekat akaun.
- `resetAt` lulus: akaun memasuki semula putaran secara automatik (tiada manual didayakan semula).

### 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 (Akses pembangun PERCUMA — 70+ model)

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 (5 model PERCUMA melalui OAuth)

```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 (4 model PERCUMA melalui Kod Peranti)

```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 **CLI Tools** 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
```

### OpenCode

**Langkah 1:** Tambahkan OmniRoute sebagai pembekal tersuai:

```bash
opencode
/connect
# Select "Other" → Enter ID: "omniroute" → Enter your OmniRoute API key
```

**Langkah 2:** Cipta/edit `opencode.json` dalam akar projek anda:

```json
{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "omniroute": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "OmniRoute",
      "options": {
        "baseURL": "http://localhost:20128/v1"
      },
      "models": {
        "cc/claude-sonnet-4-20250514": { "name": "Claude Sonnet 4" },
        "gg/gemini-2.5-pro": { "name": "Gemini 2.5 Pro" },
        "if/kimi-k2-thinking": { "name": "Kimi K2 (Free)" }
      }
    }
  }
}
```

**Langkah 3:** Pilih model dalam OpenCode:

```bash
/models
# Select any OmniRoute model from the list
```

> **Petua:** Tambahkan sebarang model yang tersedia dalam titik akhir `/v1/models` OmniRoute anda ke bahagian `models`. Gunakan format `provider/model-id` daripada papan pemuka OmniRoute anda.

</details>

---

## 🐛 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

**Port papan pemuka/API salah**

- `PORT` ialah port asas kanonik (dan port API secara lalai)
- `API_PORT` mengatasi hanya pendengar API yang serasi dengan OpenAI
- `DASHBOARD_PORT` mengatasi hanya papan pemuka/pendengar Next.js
- Tetapkan `NEXT_PUBLIC_BASE_URL` pada papan pemuka/URL awam anda (untuk panggilan balik OAuth)

**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 pada Pelayan Jauh

<a name="oauth-on-a-remote-server"></a>
<a name="oauth-em-servidor-remoto"></a>

> **⚠️ Penting untuk pengguna yang menjalankan OmniRoute pada VPS, Docker atau mana-mana pelayan jauh**

#### Mengapa Antigravity / Gemini CLI OAuth gagal pada pelayan jauh?

Pembekal **Antigravity** dan **Gemini CLI** menggunakan **Google OAuth 2.0**. Google memerlukan `redirect_uri` dalam aliran OAuth agar sepadan dengan salah satu URI pradaftar dalam Konsol Awan Google apl.

Bukti kelayakan OAuth yang digabungkan dalam OmniRoute didaftarkan **untuk `localhost` sahaja**. Apabila anda mengakses OmniRoute pada pelayan jauh (cth. `https://omniroute.myserver.com`), Google menolak pengesahan dengan:

```
Error 400: redirect_uri_mismatch
```

#### Penyelesaian: Konfigurasikan bukti kelayakan OAuth anda sendiri

Anda perlu membuat **ID Klien OAuth 2.0** dalam Google Cloud Console dengan URI pelayan anda.

#### Langkah demi langkah

**1. Buka Google Cloud Console**

Pergi ke: [https://console.cloud.google.com/apis/credentials](https://console.cloud.google.com/apis/credentials)

**2. Buat ID Pelanggan OAuth 2.0 baharu**

- Klik **"+ Cipta Bukti kelayakan"** → **"ID klien OAuth"**
- Jenis aplikasi: **"Aplikasi web"**
- Nama: apa sahaja yang anda suka (cth. `OmniRoute Remote`)

**3. Tambah URI Ubah Hala Dibenarkan**

Dalam medan **"URI halauan dibenarkan"**, tambahkan:

```
https://your-server.com/callback
```

> Gantikan `your-server.com` dengan domain atau IP pelayan anda (sertakan port jika perlu, cth. `http://45.33.32.156:20128/callback`).

**4. Simpan dan salin bukti kelayakan**

Selepas membuat, Google akan menunjukkan **ID Pelanggan** dan **Rahsia Pelanggan**.

**5. Tetapkan pembolehubah persekitaran**

Dalam `.env` anda (atau pembolehubah persekitaran Docker):

```bash
# For Antigravity:
ANTIGRAVITY_OAUTH_CLIENT_ID=your-client-id.apps.googleusercontent.com
ANTIGRAVITY_OAUTH_CLIENT_SECRET=GOCSPX-your-secret

# For Gemini CLI:
GEMINI_OAUTH_CLIENT_ID=your-client-id.apps.googleusercontent.com
GEMINI_OAUTH_CLIENT_SECRET=GOCSPX-your-secret
GEMINI_CLI_OAUTH_CLIENT_SECRET=GOCSPX-your-secret
```

**6. Mulakan semula OmniRoute**

```bash
# npm:
npm run dev

# Docker:
docker restart omniroute
```

**7. Cuba sambung semula**

Papan pemuka → Pembekal → Antigraviti (atau Gemini CLI) → OAuth

Google kini akan mengubah hala dengan betul ke `https://your-server.com/callback`.

---

#### Penyelesaian sementara (tanpa kelayakan tersuai)

Jika anda tidak mahu menyediakan bukti kelayakan anda sendiri sekarang, anda masih boleh menggunakan **aliran URL manual**:

1. OmniRoute membuka URL kebenaran Google
2. Selepas memberi kebenaran, Google cuba mengubah hala ke `localhost` (yang gagal pada pelayan jauh)
3. **Salin URL penuh** dari bar alamat penyemak imbas anda (walaupun halaman tidak dimuatkan)
4. Tampalkan URL tersebut ke dalam medan yang ditunjukkan dalam modal sambungan OmniRoute
5. Klik **"Sambung"**

> Ini berfungsi kerana kod kebenaran dalam URL adalah sah tidak kira sama ada halaman ubah hala dimuatkan.

---

<details>
<summary><b>🇧🇷 Versão em Português</b></summary>

#### 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 pré-cadastradas no 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 yang lengkap** pada penyemak imbas barra de endeç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>

---

</details>

## 🛠️ Timbunan Teknologi

<details>
<summary><b>Klik untuk mengembangkan butiran tindanan teknologi</b></summary>

- **Waktu Jalan**: Node.js 18–22 LTS (⚠️ Node.js 24+ **tidak disokong** — `better-sqlite3` binari asli tidak serasi)
- **Bahasa**: TypeScript 5.9 — **100% TypeScript** merentas `src/` dan `open-sse/` (sifar `any` dalam modul teras sejak v2.0)
- **Kerangka**: Next.js 16 + React 19 + Tailwind CSS 4
- **Pangkalan Data**: LowDB (JSON) + SQLite (keadaan domain + log proksi + audit MCP + keputusan penghalaan)
- **Skema**: Zod (pengesahan I/O alat MCP, kontrak API)
- **Protokol**: MCP (stdio/HTTP) + A2A v0.3 (JSON-RPC 2.0 + SSE)
- **Penstriman**: Acara Dihantar Pelayan (SSE)
- **Auth**: OAuth 2.0 (PKCE) + JWT + API Keys + MCP Scoped Authorization
- **Ujian**: Pelari ujian Node.js + Vitest (900+ ujian termasuk unit, penyepaduan, E2E)
- **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, pengunduran eksponen, kumpulan anti-gemuruh, penipuan TLS, penyembuhan diri kombo automatik

</details>

---

## 📖 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                          |
| [MCP Server](open-sse/mcp-server/README.md)    | 16 alatan MCP, konfigurasi IDE, pelanggan Python/TS/Go   |
| [A2A Server](src/lib/a2a/README.md)            | JSON-RPC 2.0 protokol, kemahiran, penstriman, mgmt tugas |
| [Auto-Combo Engine](docs/auto-combo.md)        | Pemarkahan 6 faktor, pek mod, penyembuhan diri           |
| [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       |
| [Release Checklist](docs/RELEASE_CHECKLIST.md) | Langkah pengesahan prakeluaran                           |

---

## 🗺️ 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 [**OMNI_TOKEN_342**](docs/new-features/) (217 spesifikasi terperinci)

---

## 👥 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 mendapatkan garis panduan terperinci.

### Mengeluarkan Versi Baharu

```bash
# Create a release — npm publish happens automatically
gh release create v2.0.0 --title "v2.0.0" --generate-notes
```

---

## 📊 Sejarah Bintang

## Stargazers dari semasa ke semasa

## [![Stargazers over time](https://starchart.cc/diegosouzapw/OmniRoute.svg?variant=adaptive)](https://starchart.cc/diegosouzapw/OmniRoute)

## 🙏 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>
<!-- Perbincangan GitHub didayakan untuk Soal Jawab komuniti -->
