<div align="center">
  <img src="./docs/screenshots/MainOmniRoute.png" alt="OmniRoute Dashboard" width="800"/>
  
  # 🚀 OmniRoute — Gerbang AI Gratis

### Jangan pernah berhenti membuat kode. Perutean cerdas ke **model AI GRATIS & berbiaya rendah** dengan fallback otomatis.

_Proksi API universal Anda — satu titik akhir, 36+ penyedia, tanpa waktu henti._

**Penyelesaian Obrolan • Penyematan • Pembuatan Gambar • Audio • Pemeringkatan Ulang • 100% TypeScript**

---

### 🆕 What's New in v2.7.0

- **Pluggable RouterStrategy** — rules, cost, and latency routing strategies
- **Multilingual intent detection** — routing scoring in 30+ languages
- **Request deduplication** — prevent duplicate API calls via content hash
- **New providers:** Grok-4 Fast (xAI), GLM-5 / Z.AI, MiniMax M2.5, Kimi K2.5
- **Updated pricing:** Grok-4 Fast $0.20/$0.50/M, GLM-5 $0.50/M, MiniMax M2.5 $0.30/M

---

### 🚀 New in v2.0.9+ — Playground, CLI Fingerprints & ACP

| Feature                                    | What It Does                                                                                                                                  |
| ------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------- |
| 🎮 **Model Playground**                    | Dashboard page to test any model directly — provider/model/endpoint selectors, Monaco Editor, streaming, abort, timing                        |
| 🔏 **CLI Fingerprint Matching**            | Per-provider header/body ordering to match native CLI signatures — toggle per provider in Settings > Security. **Your proxy IP is preserved** |
| 🤝 **ACP Support (Agent Client Protocol)** | CLI agent discovery (Codex, Claude, Goose, Gemini CLI, OpenClaw), process spawner, `/api/acp/agents` endpoint                                 |
| 🤖 **ACP Agents Dashboard**                | Debug > Agents page — grid of 14 agents with install status, version, custom agent form for any CLI tool                                      |
| 🔧 **Custom Model `apiFormat` Routing**    | Custom models with `apiFormat: "responses"` now correctly route to the Responses API translator                                               |
| 🏢 **Codex Workspace Isolation**           | Multiple Codex workspaces per email — OAuth correctly separates connections by workspace ID                                                   |
| 🔄 **Electron Auto-Update**                | Desktop app checks for updates + auto-install on restart                                                                                      |

### 🤖 Penyedia AI gratis untuk agen coding favorit Anda

_Hubungkan alat IDE atau CLI apa pun yang didukung AI melalui OmniRoute — gerbang API gratis untuk pengkodean tanpa batas._

  <table>
    <tr>
      <td align="center" width="110">
        <a href="https://github.com/cline/cline">
          <img src="./public/providers/openclaw.png" alt="OpenClaw" width="48"/><br/>
          <b>OpenClaw</b>
        </a><br/>
        <sub>⭐ 205K</sub>
      </td>
      <td align="center" width="110">
        <a href="https://github.com/HKUDS/nanobot">
          <img src="./public/providers/nanobot.png" alt="NanoBot" width="48"/><br/>
          <b>NanoBot</b>
        </a><br/>
        <sub>⭐ 20.9K</sub>
      </td>
      <td align="center" width="110">
        <a href="https://github.com/sipeed/picoclaw">
          <img src="./public/providers/picoclaw.jpg" alt="PicoClaw" width="48"/><br/>
          <b>PicoClaw</b>
        </a><br/>
        <sub>⭐ 14.6K</sub>
      </td>
      <td align="center" width="110">
        <a href="https://github.com/zeroclaw-labs/zeroclaw">
          <img src="./public/providers/zeroclaw.png" alt="ZeroClaw" width="48"/><br/>
          <b>ZeroClaw</b>
        </a><br/>
        <sub>⭐ 9.9K</sub>
      </td>
      <td align="center" width="110">
        <a href="https://github.com/nearai/ironclaw">
          <img src="./public/providers/ironclaw.png" alt="IronClaw" width="48"/><br/>
          <b>IronClaw</b>
        </a><br/>
        <sub>⭐ 2.1K</sub>
      </td>
    </tr>
    <tr>
      <td align="center" width="110">
        <a href="https://github.com/anomalyco/opencode">
          <img src="./public/providers/opencode.svg" alt="OpenCode" width="48"/><br/>
          <b>OpenCode</b>
        </a><br/>
        <sub>⭐ 106K</sub>
      </td>
      <td align="center" width="110">
        <a href="https://github.com/openai/codex">
          <img src="./public/providers/codex.png" alt="Codex CLI" width="48"/><br/>
          <b>Codex CLI</b>
        </a><br/>
        <sub>⭐ 60.8K</sub>
      </td>
      <td align="center" width="110">
        <a href="https://github.com/anthropics/claude-code">
          <img src="./public/providers/claude.png" alt="Claude Code" width="48"/><br/>
          <b>Claude Code</b>
        </a><br/>
        <sub>⭐ 67.3K</sub>
      </td>
      <td align="center" width="110">
        <a href="https://github.com/google-gemini/gemini-cli">
          <img src="./public/providers/gemini-cli.png" alt="Gemini CLI" width="48"/><br/>
          <b>Gemini CLI</b>
        </a><br/>
        <sub>⭐ 94.7K</sub>
      </td>
      <td align="center" width="110">
        <a href="https://github.com/Kilo-Org/kilocode">
          <img src="./public/providers/kilocode.png" alt="Kilo Code" width="48"/><br/>
          <b>Kilo Code</b>
        </a><br/>
        <sub>⭐ 15.5K</sub>
      </td>
    </tr>
  </table>

<sub>📡 Semua agen terhubung melalui <code>http://localhost:20128/v1</code> atau <code>http://cloud.omniroute.online/v1</code> — satu konfigurasi, model tak terbatas, dan kuota</sub>

---

[![npm version](https://img.shields.io/npm/v/omniroute?color=cb3837&logo=npm)](https://www.npmjs.com/package/omniroute)
[![Docker Hub](https://img.shields.io/docker/v/diegosouzapw/omniroute?label=Docker%20Hub&logo=docker&color=2496ED)](https://hub.docker.com/r/diegosouzapw/omniroute)
[![License](https://img.shields.io/github/license/diegosouzapw/OmniRoute)](https://github.com/diegosouzapw/OmniRoute/blob/main/LICENSE)
[![Website](https://img.shields.io/badge/Website-omniroute.online-blue?logo=google-chrome&logoColor=white)](https://omniroute.online)
[![WhatsApp](https://img.shields.io/badge/WhatsApp-Community-25D366?logo=whatsapp&logoColor=white)](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t)

[🌐 Website](https://omniroute.online) • [🚀 Quick Start](#-quick-start) • [💡 Features](#-key-features) • [📖 Docs](#-documentation) • [💰 Pricing](#-pricing-at-a-glance) • [💬 WhatsApp](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t)

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

</div>

---

## 🖼️

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

---

## 📸

<details>
<summary><b>...</b></summary>

| #     | #                                        |
| ----- | ---------------------------------------- |
| **1** | ![1](docs/screenshots/01-providers.png)  |
| **2** | ![2](docs/screenshots/02-combos.png)     |
| **3** | ![3](docs/screenshots/03-analytics.png)  |
| **4** | ![4](docs/screenshots/04-health.png)     |
| **5** | ![5](docs/screenshots/05-translator.png) |
| **6** | ![6](docs/screenshots/06-settings.png)   |
| **7** | ![7](docs/screenshots/07-cli-tools.png)  |
| **8** | ![8](docs/screenshots/08-usage.png)      |
| **9** | ![9](docs/screenshots/09-endpoint.png)   |

</details>

---

## 🤔 Mengapa OmniRoute?

**Berhenti membuang-buang uang dan mencapai batas:**

- <img src="https://img.shields.io/badge/✗-e74c3c?style=flat-square" height="16"/> Kuota berlangganan habis tanpa terpakai setiap bulannya
- <img src="https://img.shields.io/badge/✗-e74c3c?style=flat-square" height="16"/> Batas kecepatan menghentikan Anda di tengah coding
- <img src="https://img.shields.io/badge/✗-e74c3c?style=flat-square" height="16"/> API mahal ($20-50/bulan per penyedia)
- <img src="https://img.shields.io/badge/✗-e74c3c?style=flat-square" height="16"/> Peralihan antar penyedia secara manual

**OmniRoute memecahkan masalah ini:**

- ✅ **Maksimalkan langganan** - Lacak kuota, gunakan setiap bit sebelum menyetel ulang
- ✅ **Pengembalian otomatis** - Berlangganan → Kunci API → Murah → Gratis, tanpa downtime
- ✅ **Multi-akun** - Round-robin antar akun per penyedia
- ✅ **Universal** - Bekerja dengan Claude Code, Codex, Gemini CLI, Cursor, Cline, OpenClaw, alat CLI apa pun

---

## 📧 Dukungan

> 💬 **Bergabunglah dengan komunitas kami!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Dapatkan bantuan, berbagi kiat, dan dapatkan informasi terbaru.

- **Situs Web**: [omniroute.online](https://omniroute.online)
- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute)
- **Masalah**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues)
- **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t)
- **Proyek Asli**: [9router by decolua](https://github.com/decolua/9router)

---

## 🔄 Cara Kerjanya

```
┌─────────────┐
│  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
```

---

## 🎯 Apa yang Dipecahkan OmniRoute — 30 Masalah Nyata & Kasus Penggunaan

> **Setiap pengembang yang menggunakan alat AI menghadapi masalah ini setiap hari.** OmniRoute dibuat untuk menyelesaikan semuanya — mulai dari pembengkakan biaya hingga pemblokiran regional, mulai dari aliran OAuth yang rusak hingga operasi protokol dan kemampuan observasi perusahaan.

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

Pengembang membayar $20–200/bulan untuk Claude Pro, Codex Pro, atau GitHub Copilot. Bahkan saat membayar, kuota memiliki batas tertinggi — penggunaan 5 jam, batas mingguan, atau batas tarif per menit. Di tengah sesi pengkodean, penyedia berhenti merespons dan pengembang kehilangan aliran dan produktivitas.

**Bagaimana OmniRoute menyelesaikannya:**

- **Smart 4-Tier Fallback** — Jika kuota berlangganan habis, otomatis dialihkan ke Kunci API → Murah → Gratis tanpa intervensi manual
- **Pelacakan Kuota Real-Time** — Menampilkan konsumsi token secara real-time dengan hitungan mundur reset (5 jam, harian, mingguan)
- **Dukungan Multi-Akun** — Beberapa akun per penyedia dengan sistem round-robin otomatis — jika satu akun habis, beralih ke akun berikutnya
- **Kombo Khusus** — Rantai cadangan yang dapat disesuaikan dengan 6 strategi penyeimbangan (isi terlebih dahulu, round-robin, P2C, acak, paling jarang digunakan, hemat biaya)
- **Codex Business Quotas** — Pemantauan kuota ruang kerja Bisnis/Tim langsung di dasbor

</details>

<details>
<summary><b>🔌 2. "Saya perlu menggunakan beberapa penyedia tetapi masing-masing memiliki API yang berbeda"</b></summary>

OpenAI menggunakan satu format, Claude (Anthropic) menggunakan format lain, Gemini menggunakan format lain. Jika pengembang ingin menguji model dari penyedia yang berbeda atau melakukan fallback di antara penyedia tersebut, mereka perlu mengonfigurasi ulang SDK, mengubah titik akhir, menangani format yang tidak kompatibel. Penyedia khusus (FriendLI, NIM) memiliki titik akhir model non-standar.

**Bagaimana OmniRoute menyelesaikannya:**

- **Titik Akhir Terpadu** — Satu `http://localhost:20128/v1` berfungsi sebagai proxy untuk 36+ penyedia
- **Terjemahan Format** — Otomatis dan transparan: OpenAI ↔ Claude ↔ Gemini ↔ Responses API
- **Sanitasi Respons** — Menghapus kolom non-standar (`x_groq`, `usage_breakdown`, `service_tier`) yang merusak OpenAI SDK v1.83+
- **Normalisasi Peran** — Mengonversi `developer` → `system` untuk penyedia non-OpenAI; `system` → `user` untuk GLM/ERNIE
- **Think Tag Extraction** — Mengekstrak blok `<think>` dari model seperti DeepSeek R1 ke dalam `reasoning_content` standar
- **Output Terstruktur untuk Gemini** — `json_schema` → `responseMimeType`/`responseSchema` konversi otomatis
- **`stream` defaultnya adalah `false`** — Sesuai dengan spesifikasi OpenAI, menghindari SSE yang tidak terduga di SDK Python/Rust/Go

</details>

<details>
<summary><b>🌐 3. "Penyedia AI saya memblokir wilayah/negara saya"</b></summary>

Penyedia seperti OpenAI/Codex memblokir akses dari wilayah geografis tertentu. Pengguna mendapatkan kesalahan seperti `unsupported_country_region_territory` selama koneksi OAuth dan API. Hal ini sangat membuat frustasi bagi pengembang dari negara-negara berkembang.

**Bagaimana OmniRoute menyelesaikannya:**

- **Konfigurasi Proksi 3 Tingkat** — Proksi yang dapat dikonfigurasi pada 3 tingkat: global (semua lalu lintas), per penyedia (hanya satu penyedia), dan per koneksi/kunci
- **Lencana Proksi Berkode Warna** — Indikator visual: 🟢 proksi global, 🟡 proksi penyedia, 🔵 proksi koneksi, selalu menampilkan IP
- **OAuth Token Exchange Through Proxy** — Aliran OAuth juga melewati proxy, menyelesaikan `unsupported_country_region_territory`
- **Tes Koneksi melalui Proxy** — Tes koneksi menggunakan proxy yang dikonfigurasi (tidak ada lagi bypass langsung)
- **Dukungan SOCKS5** — Dukungan proksi SOCKS5 penuh untuk perutean keluar
- **TLS Fingerprint Spoofing** — Sidik jari TLS mirip browser melalui `wreq-js` untuk melewati deteksi bot

</details>

<details>
<summary><b>🆓 4. "Saya ingin menggunakan AI untuk coding tetapi saya tidak punya uang" </b></summary>

Tidak semua orang mampu membayar $20–200/bulan untuk berlangganan AI. Pelajar, pengembang dari negara-negara berkembang, penghobi, dan pekerja lepas memerlukan akses ke model berkualitas tanpa biaya.

**Bagaimana OmniRoute menyelesaikannya:**

- **Terintegrasi Penyedia Tingkat Gratis** — Dukungan asli untuk 100% penyedia gratis: iFlow (8 model tak terbatas), Qwen (3 model tak terbatas), Kiro (Claude gratis), Gemini CLI (gratis 180K/bulan)
- **Ollama Cloud** — Cloud-hosted Ollama models at `api.ollama.com` with free "Light usage" tier; use `ollamacloud/<model>` prefix
- **Kombo Khusus Gratis** — Rantai `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/bulan tanpa downtime
- **Kredit Gratis NVIDIA NIM** — 1000 kredit gratis terintegrasi
- **Strategi Pengoptimalan Biaya** — Strategi perutean yang secara otomatis memilih penyedia termurah yang tersedia

</details>

<details>
<summary><b>🔒 5. "Saya perlu melindungi gateway AI saya dari akses tidak sah" </b></summary>

Saat mengekspos gateway AI ke jaringan (LAN, VPS, Docker), siapa pun yang memiliki alamat tersebut dapat menggunakan token/kuota pengembang. Tanpa perlindungan, API rentan terhadap penyalahgunaan, injeksi cepat, dan penyalahgunaan.

**Bagaimana OmniRoute menyelesaikannya:**

- **Manajemen Kunci API** — Pembuatan, rotasi, dan pelingkupan per penyedia dengan halaman `/dashboard/api-manager` khusus
- **Izin Tingkat Model** — Membatasi kunci API untuk model tertentu (`openai/*`, pola karakter pengganti), dengan tombol Izinkan Semua/Batasi
- **API Endpoint Protection** — Memerlukan kunci untuk `/v1/models` dan memblokir penyedia tertentu dari daftar
- **Auth Guard + Perlindungan CSRF** — Semua rute dasbor dilindungi dengan middleware `withAuth` + token CSRF
- **Pembatas Kecepatan** — Pembatasan kecepatan per-IP dengan jendela yang dapat dikonfigurasi
- **Pemfilteran IP** — Daftar yang diizinkan/daftar blokir untuk kontrol akses
- **Prompt Injection Guard** — Sanitasi terhadap pola prompt berbahaya
- **Enkripsi AES-256-GCM** — Kredensial dienkripsi saat disimpan

</details>

<details>
<summary><b>🛑 6. "Penyedia saya down dan saya kehilangan alur pengkodean"</b></summary>

Penyedia AI bisa menjadi tidak stabil, menampilkan kesalahan 5xx, atau mencapai batas kecepatan sementara. Jika pengembang bergantung pada satu penyedia, mereka akan terganggu. Tanpa pemutus sirkuit, percobaan ulang yang berulang-ulang dapat membuat aplikasi crash.

**Bagaimana OmniRoute menyelesaikannya:**

- **Pemutus Sirkuit per penyedia** — Buka/tutup otomatis dengan ambang batas dan cooldown yang dapat dikonfigurasi (Tertutup/Terbuka/Setengah Terbuka)
- **Kemunduran Eksponensial** — Penundaan percobaan ulang yang progresif
- **Kawanan Anti-Guntur** — Perlindungan mutex + semaphore terhadap badai percobaan ulang secara bersamaan
- **Combo Fallback Chains** — Jika penyedia utama gagal, otomatis gagal dalam rantai tanpa intervensi
- **Combo Circuit Breaker** — Menonaktifkan secara otomatis penyedia yang gagal dalam rantai kombo
  | 🎯 **Endpoint-Aware Models** | Custom models declare supported endpoints + API format |
- **Dasbor Kesehatan** — Pemantauan waktu aktif, status pemutus sirkuit, penguncian, statistik cache, latensi p50/p95/p99

</details>

<details>
<summary><b>🔧 7. "Mengonfigurasi setiap alat AI membosankan dan berulang-ulang"</b></summary>

Pengembang menggunakan Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Setiap alat memerlukan konfigurasi yang berbeda (titik akhir API, kunci, model). Mengonfigurasi ulang saat berpindah penyedia atau model hanya membuang-buang waktu.

**Bagaimana OmniRoute menyelesaikannya:**

- **Dasbor Alat CLI** — Halaman khusus dengan pengaturan sekali klik untuk Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline
- **GitHub Copilot Config Generator** — Menghasilkan `chatLanguageModels.json` untuk VS Code dengan pemilihan model massal
- **Onboarding Wizard** — Panduan penyiapan 4 langkah untuk pengguna pertama kali
- **Satu titik akhir, semua model** — Konfigurasikan `http://localhost:20128/v1` satu kali, akses 36+ penyedia

</details>

<details>
<summary><b>🔑 8. "Mengelola token OAuth dari banyak penyedia adalah neraka"</b></summary>

Claude Code, Codex, Gemini CLI, Copilot — semuanya menggunakan OAuth 2.0 dengan token yang kedaluwarsa. Pengembang perlu melakukan autentikasi ulang terus-menerus, menangani `client_secret is missing`, `redirect_uri_mismatch`, dan kegagalan pada server jarak jauh. OAuth pada LAN/VPS sangat bermasalah.

**Bagaimana OmniRoute menyelesaikannya:**

- **Penyegaran Token Otomatis** — Penyegaran token OAuth di latar belakang sebelum masa berlakunya habis
- **OAuth 2.0 (PKCE) Bawaan** — Aliran otomatis untuk Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow
- **OAuth Multi-Akun** — Beberapa akun per penyedia melalui ekstraksi token JWT/ID
- **OAuth LAN/Remote Fix** — Deteksi IP pribadi untuk `redirect_uri` + mode URL manual untuk server jarak jauh
- **OAuth Dibalik Nginx** — Menggunakan `window.location.origin` untuk kompatibilitas proxy terbalik
- **Panduan OAuth Jarak Jauh** — Panduan langkah demi langkah untuk kredensial Google Cloud di VPS/Docker

</details>

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

Pengembang menggunakan beberapa penyedia berbayar tetapi tidak memiliki pandangan terpadu mengenai pembelanjaan. Setiap penyedia memiliki dasbor penagihannya sendiri, namun tidak ada tampilan gabungan. Biaya tak terduga bisa menumpuk.

**Bagaimana OmniRoute menyelesaikannya:**

- **Dasbor Analisis Biaya** — Pelacakan biaya per token dan pengelolaan anggaran per penyedia
- **Batas Anggaran per Tingkat** — Batas pembelanjaan per tingkat yang memicu penggantian otomatis
- **Konfigurasi Harga Per Model** — Harga per model yang dapat dikonfigurasi
- **Statistik Penggunaan Per Kunci API** — Jumlah permintaan dan stempel waktu terakhir digunakan per kunci
- **Dasbor Analytics** — Kartu statistik, diagram penggunaan model, tabel penyedia dengan tingkat keberhasilan dan latensi

</details>

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

Saat panggilan gagal, pengembang tidak mengetahui apakah itu batas kecepatan, token kedaluwarsa, format salah, atau kesalahan penyedia. Log terfragmentasi di terminal yang berbeda. Tanpa observabilitas, debugging adalah trial-and-error.

**Bagaimana OmniRoute menyelesaikannya:**

- **Dasbor Log Terpadu** — 4 tab: Log Permintaan, Log Proksi, Log Audit, Konsol
- **Penampil Log Konsol** — Penampil gaya terminal real-time dengan level kode warna, gulir otomatis, pencarian, filter
- **Log Proxy SQLite** — Log persisten yang bertahan saat server dimulai ulang
- **Translator Playground** — 4 mode debugging: Playground (terjemahan format), Chat Tester (pulang pergi), Test Bench (batch), Live Monitor (real-time)
- **Telemetri Permintaan** — latensi p50/p95/p99 + penelusuran X-Request-Id
- **Logging Berbasis File dengan Rotasi** — Pencegat konsol menangkap semuanya ke log JSON dengan rotasi berbasis ukuran

</details>

<details>
<summary><b>🏗️ 11. "Menyebarkan dan memelihara gateway itu rumit"</b></summary>

Menginstal, mengonfigurasi, dan memelihara proksi AI di berbagai lingkungan (lokal, VPS, Docker, cloud) membutuhkan banyak tenaga. Masalah seperti jalur hardcode, `EACCES` pada direktori, konflik port, dan pembangunan lintas platform menambah gesekan.

**Bagaimana OmniRoute menyelesaikannya:**

- **instal global npm** — `npm install -g omniroute && omniroute` — selesai
- **Docker Multi-Platform** — asli AMD64 + ARM64 (Apple Silicon, AWS Graviton, Raspberry Pi)
- **Docker Compose Profiles** — `base` (tanpa alat CLI) dan `cli` (dengan Claude Code, Codex, OpenClaw)
- **Aplikasi Desktop Electron** — Aplikasi asli untuk Windows/macOS/Linux dengan baki sistem, mulai otomatis, mode offline
- **Mode Port Terpisah** — API dan Dasbor pada port terpisah untuk skenario tingkat lanjut (proksi terbalik, jaringan kontainer)
- **Cloud Sync** — Konfigurasi sinkronisasi antar perangkat melalui Cloudflare Workers
- **DB Backups** — Pencadangan otomatis, pemulihan, ekspor dan impor semua pengaturan

</details>

<details>
<summary><b>🌍 12. "Antarmuka hanya berbahasa Inggris dan tim saya tidak bisa berbahasa Inggris"</b></summary>

Tim di negara-negara yang tidak berbahasa Inggris, khususnya di Amerika Latin, Asia, dan Eropa, kesulitan dengan antarmuka yang hanya berbahasa Inggris. Hambatan bahasa mengurangi adopsi dan meningkatkan kesalahan konfigurasi.

**Bagaimana OmniRoute menyelesaikannya:**

- **Dasbor i18n — 30 Bahasa** — 500+ tombol diterjemahkan termasuk Arab, Bulgaria, Denmark, Jerman, Spanyol, Finlandia, Prancis, Ibrani, Hindi, Hungaria, Indonesia, Italia, Jepang, Korea, Melayu, Belanda, Norwegia, Polandia, Portugis (PT/BR), Rumania, Rusia, Slovakia, Swedia, Thailand, Ukraina, Vietnam, China, Filipina, Inggris
- **Dukungan RTL** — Dukungan kanan ke kiri untuk bahasa Arab dan Ibrani
- **README Multi-Bahasa** — 30 terjemahan dokumentasi lengkap
- **Pemilih Bahasa** — Ikon bola dunia di header untuk peralihan waktu nyata

</details>

<details>
<summary><b>🔄 13. "Saya memerlukan lebih dari sekadar obrolan — saya memerlukan penyematan, gambar, audio"</b></summary>

AI bukan hanya penyelesaian obrolan. Pengembang perlu membuat gambar, mentranskripsikan audio, membuat penyematan untuk RAG, mengubah peringkat dokumen, dan memoderasi konten. Setiap API memiliki titik akhir dan format yang berbeda.

**Bagaimana OmniRoute menyelesaikannya:**

- **Sematan** — `/v1/embeddings` dengan 6 penyedia dan 9+ model
- **Image Generation** — `/v1/images/generations` dengan 10 penyedia 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-Musik** — `/v1/music/generations` — ComfyUI (Audio Terbuka Stabil, 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, + penyedia yang ada
- **Moderasi** — `/v1/moderations` — Pemeriksaan keamanan konten
- **Pemeringkatan ulang** — `/v1/rerank` — Pemeringkatan ulang relevansi dokumen
- **Respon API** — Dukungan penuh `/v1/responses` untuk Codex

</details>

<details>
<summary><b>🧪 14. "Saya tidak punya cara untuk menguji dan membandingkan kualitas antar model"</b></summary>

Pengembang ingin mengetahui model mana yang terbaik untuk kasus penggunaan mereka — kode, terjemahan, penalaran — tetapi membandingkan secara manual itu lambat. Tidak ada alat evaluasi terintegrasi.

**Bagaimana OmniRoute menyelesaikannya:**

- **Evaluasi LLM** — Pengujian set emas dengan 10 kasus yang dimuat sebelumnya yang mencakup salam, matematika, geografi, pembuatan kode, kepatuhan JSON, terjemahan, penurunan harga, penolakan keamanan
- **4 Strategi Pertandingan** — `exact`, `contains`, `regex`, `custom` (fungsi JS)
- **Bangku Tes Taman Bermain Penerjemah** — Pengujian batch dengan banyak masukan dan keluaran yang diharapkan, perbandingan lintas penyedia
- **Penguji Obrolan** — Perjalanan bolak-balik penuh dengan rendering respons visual
- **Monitor Langsung** — Aliran real-time dari semua permintaan yang mengalir melalui proxy

</details>

<details>
<summary><b>📈 15. "Saya perlu melakukan penskalaan tanpa kehilangan performa"</b></summary>

Seiring bertambahnya volume permintaan, tanpa menyimpan pertanyaan yang sama akan menghasilkan biaya duplikat. Tanpa idempotensi, permintaan duplikat akan membuang-buang pemrosesan. Batasan tarif per penyedia harus dipatuhi.

**Bagaimana OmniRoute menyelesaikannya:**

- **Cache Semantik** — Cache dua tingkat (tanda tangan + semantik) mengurangi biaya dan latensi
- **Request Idempoency** — Jendela deduplikasi 5 detik untuk permintaan yang identik
- **Deteksi Batas Tarif** — RPM per penyedia, selisih minimum, dan pelacakan serentak maks
- **Batas Nilai yang Dapat Diedit** — Default yang dapat dikonfigurasi di Pengaturan → Ketahanan dengan persistensi
- **Cache Validasi Kunci API** — cache 3 tingkat untuk kinerja produksi
- **Dasbor Kesehatan dengan Telemetri** — latensi p50/p95/p99, statistik cache, waktu aktif

</details>

<details>
<summary><b>🤖 16. "Saya ingin mengontrol perilaku model secara global"</b></summary>

Pengembang yang menginginkan semua respons dalam bahasa tertentu, dengan nada tertentu, atau ingin membatasi token penalaran. Mengonfigurasi ini di setiap alat/permintaan tidak praktis.

**Bagaimana OmniRoute menyelesaikannya:**

- **Injeksi Perintah Sistem** — Perintah global diterapkan ke semua permintaan
- **Validasi Anggaran Berpikir** — Kontrol alokasi token penalaran per permintaan (passthrough, otomatis, kustom, adaptif)
- **6 Strategi Perutean** — Strategi global yang menentukan cara permintaan didistribusikan
- **Wildcard Router** — Pola `provider/*` dirutekan secara dinamis ke penyedia mana pun
- **Combo Aktifkan/Nonaktifkan Toggle** — Beralih kombo langsung dari dasbor
- **Toggle Penyedia** — Mengaktifkan/menonaktifkan semua koneksi untuk penyedia dengan satu klik
- **Penyedia yang Diblokir** — Kecualikan penyedia tertentu dari daftar `/v1/models`

</details>

<details>
<summary><b>🧰 17. "Saya membutuhkan alat MCP sebagai kemampuan produk kelas satu" </b></summary>

Banyak gateway AI yang mengekspos MCP hanya sebagai detail implementasi yang tersembunyi. Tim memerlukan lapisan operasi yang terlihat dan dapat dikelola.

**Bagaimana OmniRoute menyelesaikannya:**

- MCP muncul di navigasi dasbor dan tab protokol titik akhir
- Halaman manajemen MCP khusus dengan proses, alat, cakupan, dan audit
- Mulai cepat bawaan untuk `omniroute --mcp` dan orientasi klien

</details>

<details>
<summary><b>🧠 18. "Saya memerlukan orkestrasi A2A dengan jalur tugas sinkronisasi + streaming"</b></summary>

Alur kerja agen memerlukan balasan langsung dan eksekusi streaming jangka panjang dengan kontrol siklus hidup.

**Bagaimana OmniRoute menyelesaikannya:**

- Titik akhir A2A JSON-RPC (`POST /a2a`) dengan `message/send` dan `message/stream`
- Streaming SSE dengan propagasi status terminal
- API siklus hidup tugas untuk `tasks/get` dan `tasks/cancel`

</details>

<details>
<summary><b>🛰️ 19. "Saya membutuhkan kesehatan proses MCP yang nyata, bukan status yang dapat ditebak" </b></summary>

Tim operasional perlu mengetahui apakah MCP benar-benar aktif, bukan hanya apakah API dapat dijangkau.

**Bagaimana OmniRoute menyelesaikannya:**

- File detak jantung runtime dengan PID, stempel waktu, transportasi, jumlah alat, dan mode cakupan
- API status MCP menggabungkan detak jantung + aktivitas terkini
- Kartu status UI untuk kesegaran proses/waktu aktif/detak jantung

</details>

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

Saat alat mengubah konfigurasi atau memicu tindakan operasi, tim memerlukan kemampuan penelusuran forensik.

**Bagaimana OmniRoute menyelesaikannya:**

- Pencatatan audit yang didukung SQLite untuk panggilan alat MCP
- Filter berdasarkan alat, keberhasilan/kegagalan, kunci API, dan penomoran halaman
- Tabel audit dasbor + titik akhir statistik untuk otomatisasi

</details>

<details>
<summary><b>🔐 21. "Saya memerlukan izin MCP terbatas per integrasi"</b></summary>

Klien yang berbeda harus memiliki akses dengan hak istimewa paling rendah ke kategori alat.

**Bagaimana OmniRoute menyelesaikannya:**

- 9 cakupan MCP granular untuk akses alat terkontrol
- Penegakan cakupan dan visibilitas di UI manajemen MCP
- Postur default yang aman untuk perkakas operasional

</details>

<details>
<summary><b>⚙️ 22. "Saya memerlukan kontrol operasional tanpa memindahkan" </b></summary>

Tim memerlukan perubahan runtime yang cepat selama insiden atau peristiwa biaya.

**Bagaimana OmniRoute menyelesaikannya:**

- Beralih aktivasi kombo langsung dari dasbor MCP
- Menerapkan profil ketahanan dari paket kebijakan yang telah ditentukan sebelumnya
- Reset status pemutus sirkuit dari panel operasi yang sama

</details>

<details>
<summary><b>🔄 23. "Saya memerlukan visibilitas dan pembatalan siklus hidup tugas A2A langsung" </b></summary>

Tanpa visibilitas siklus hidup, insiden tugas menjadi sulit untuk diprioritaskan.

**Bagaimana OmniRoute menyelesaikannya:**

- Daftar tugas/pemfilteran berdasarkan status/keterampilan dengan penomoran halaman
- Telusuri metadata tugas, peristiwa, dan artefak
- Titik akhir pembatalan tugas dan tindakan UI dengan konfirmasi

</details>

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

Alur kerja streaming memerlukan wawasan operasional tentang konkurensi dan koneksi langsung.

**Bagaimana OmniRoute menyelesaikannya:**

- Penghitung aliran aktif terintegrasi ke dalam status A2A
- Stempel waktu tugas terakhir dan jumlah per negara bagian
- Kartu dasbor A2A untuk pemantauan operasi waktu nyata

</details>

<details>
<summary><b>🪪 25. "Saya memerlukan penemuan agen standar untuk klien"</b></summary>

Klien dan orkestra eksternal memerlukan metadata yang dapat dibaca mesin untuk orientasi.

**Bagaimana OmniRoute menyelesaikannya:**

- Kartu Agen terekspos di `/.well-known/agent.json`
- Kemampuan dan keterampilan yang ditunjukkan dalam manajemen UI
- API status A2A mencakup metadata penemuan untuk otomatisasi

</details>

<details>
<summary><b>🧭 26. "Saya memerlukan kemampuan protokol untuk ditemukan di UX produk" </b></summary>

Jika pengguna tidak dapat menemukan permukaan protokol, kualitas adopsi dan dukungan akan menurun.

**Bagaimana OmniRoute menyelesaikannya:**

- Entri sidebar untuk MCP dan A2A
- Tab Protokol halaman titik akhir dengan mulai cepat dan status
- Tautan dari ikhtisar ke dasbor manajemen khusus

</details>

<details>
<summary><b>🧪 27. "Saya memerlukan validasi protokol end-to-end dengan klien nyata"</b></summary>

Tes tiruan tidak cukup untuk memvalidasi kompatibilitas protokol sebelum rilis.

**Bagaimana OmniRoute menyelesaikannya:**

- Suite E2E yang mem-boot aplikasi dan menggunakan transportasi klien MCP SDK yang sebenarnya
- Klien A2A menguji penemuan, pengiriman, streaming, dapatkan, dan pembatalan aliran
- Periksa silang pernyataan terhadap audit MCP dan API tugas A2A

</details>

<details>
<summary><b>📡 28. "Saya memerlukan kemampuan pengamatan terpadu di semua antarmuka"</b></summary>

Memisahkan observabilitas berdasarkan protokol menciptakan titik buta dan MTTR yang lebih panjang.

**Bagaimana OmniRoute menyelesaikannya:**

- Dasbor/log/analitik terpadu dalam satu produk
- Kesehatan + audit + permintaan telemetri di seluruh lapisan OpenAI, MCP, dan A2A
- API Operasional untuk status dan otomatisasi

</details>

<details>
<summary><b>💼 29. "Saya memerlukan satu runtime untuk proxy + alat + orkestrasi agen" </b></summary>

Menjalankan banyak layanan terpisah akan meningkatkan biaya operasional dan mode kegagalan.

**Bagaimana OmniRoute menyelesaikannya:**

- Proksi yang kompatibel dengan OpenAI, server MCP, dan server A2A dalam satu tumpukan
- Otentikasi bersama, ketahanan, penyimpanan data, dan kemampuan observasi
- Model kebijakan yang konsisten di seluruh platform interaksi

</details>

<details>
<summary><b>🚀 30. "Saya perlu mengirimkan alur kerja agen tanpa gepeng kode lem"</b></summary>

Tim kehilangan kecepatan saat menggabungkan beberapa layanan dan skrip ad-hoc.

**Bagaimana OmniRoute menyelesaikannya:**

- Strategi titik akhir terpadu untuk klien dan agen
- UI manajemen protokol bawaan dan jalur validasi asap
- Fondasi siap produksi (keamanan, logging, ketahanan, cadangan)

</details>

### Contoh Playbook (Kasus Penggunaan Terintegrasi)

**Playbook A: Maksimalkan langganan berbayar + cadangan 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: Tumpukan coding tanpa biaya**

```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: Rantai fallback yang selalu aktif 24/7**

```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 agen 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/mcp and /dashboard/a2a
4) Control incidents with resilience profile + task cancellation
```

---

## ⚡ Mulai Cepat

**1. Instal secara global:**

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

🎉 Dasbor terbuka di `http://localhost:20128`

| Perintah                | Deskripsi                         |
| ----------------------- | --------------------------------- |
| `omniroute`             | Mulai server (port default 20128) |
| `omniroute --port 3000` | Gunakan port khusus               |
| `omniroute --no-open`   | Jangan buka otomatis browser      |
| `omniroute --help`      | Tampilkan bantuan                 |

**2. Hubungkan penyedia GRATIS:**

Dasbor → Penyedia → Hubungkan **Kode Claude** atau **Antigravitasi** → Login OAuth → Selesai!

**3. Gunakan di alat CLI Anda:**

```
Claude Code/Codex/Gemini CLI/OpenClaw/Cursor/Cline Settings:
  Endpoint: http://localhost:20128/v1
  API Key: [copy from dashboard]
  Model: if/kimi-k2-thinking
```

**Selesai!** Mulai coding dengan model AI GRATIS.

**Alternatif — dijalankan dari sumber:**

```bash
cp .env.example .env
npm install
PORT=20128 NEXT_PUBLIC_BASE_URL=http://localhost:20128 npm run dev
```

---

## 🐳 buruh pelabuhan

OmniRoute tersedia sebagai image Docker publik di [Docker Hub](https://hub.docker.com/r/diegosouzapw/omniroute).

**Lari cepat:**

```bash
docker run -d \
  --name omniroute \
  --restart unless-stopped \
  -p 20128:20128 \
  -v omniroute-data:/app/data \
  diegosouzapw/omniroute:latest
```

**Dengan file lingkungan:**

```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 Tulis:**

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

| Gambar                   | Tandai   | Ukuran  | Deskripsi            |
| ------------------------ | -------- | ------- | -------------------- |
| `diegosouzapw/omniroute` | `latest` | ~250 MB | Rilis stabil terbaru |
| `diegosouzapw/omniroute` | `1.0.3`  | ~250 MB | Versi saat ini       |

---

---

## 🖥️

> 🆕 **NEW!** OmniRoute is now available as a **native desktop application** for Windows, macOS, and Linux.

- 🖥️ **Native Window** — Dedicated app window with system tray integration
- 🔄 **Auto-Start** — Launch OmniRoute on system login
- 🔔 **Native Notifications** — Get alerts for quota exhaustion or provider issues
- ⚡ **One-Click Install** — NSIS (Windows), DMG (macOS), AppImage (Linux)
- 🌐 **Offline Mode** — Works fully offline with bundled server

```bash
npm run electron:dev           # Development mode
npm run electron:build         # Current platform
npm run electron:build:win     # Windows (.exe)
npm run electron:build:mac     # macOS (.dmg)
npm run electron:build:linux   # Linux (.AppImage)
```

📖 Full documentation: [`electron/README.md`](electron/README.md)

---

## 💰 Sekilas tentang Harga

| Tingkat             | Penyedia          | Biaya                     | Reset Kuota               | Terbaik Untuk               |
| ------------------- | ----------------- | ------------------------- | ------------------------- | --------------------------- |
| **💳 BERLANGGANAN** | Kode Claude (Pro) | $20/bln                   | 5 jam + mingguan          | Sudah berlangganan          |
|                     | Kodeks (Plus/Pro) | $20-200/bln               | 5 jam + mingguan          | Pengguna OpenAI             |
|                     | CLI Gemini        | **GRATIS**                | 180K/bln + 1K/hari        | Setiap orang!               |
|                     | Kopilot GitHub    | $10-19/bln                | Bulanan                   | Pengguna GitHub             |
| **🔑 KUNCI API**    | NVIDIA NIM        | **GRATIS** (1000 sks)     | Satu kali                 | Pengujian tingkat gratis    |
|                     | Pencarian Dalam   | Bayar per penggunaan      | Tidak ada                 | Harga/kualitas terbaik      |
|                     | Bagus             | Tingkat gratis + berbayar | Tarif terbatas            | Inferensi ultra-cepat       |
|                     | xAI (Grok)        | Bayar per penggunaan      | Tidak ada                 | Model Grok                  |
|                     | Mistral           | Tingkat gratis + berbayar | Tarif terbatas            | AI Eropa                    |
|                     | BukaRouter        | Bayar per penggunaan      | Tidak ada                 | 100+ model                  |
| **💰 MURAH**        | GLM-4.7           | $0,6/1 juta               | Setiap hari pukul 10 pagi | Cadangan anggaran           |
|                     | MiniMax M2.1      | $0,2/1 juta               | 5 jam bergulir            | Pilihan termurah            |
|                     | Kimi K2           | $9/bln tetap              | 10 juta token/bln         | Biaya yang dapat diprediksi |
| **🆓 GRATIS**       | iFlow             | $0                        | Tidak terbatas            | 8 model gratis              |
|                     | Qwen              | $0                        | Tidak terbatas            | 3 model gratis              |
|                     | Kiro              | $0                        | Tidak terbatas            | Claude gratis               |

**💡 Kiat Pro:** Mulai dengan Gemini CLI (gratis 180 ribu/bulan) + kombo iFlow (gratis tanpa batas) = ​​biaya $0!

---

## 💡 Fitur Utama

### 🧠 Perutean & Kecerdasan Inti

| Fitur                                | Apa Fungsinya                                                                      |
| ------------------------------------ | ---------------------------------------------------------------------------------- |
| 🎯 **Pengembalian 4 Tingkat Cerdas** | Rute otomatis: Berlangganan → Kunci API → Murah → Gratis                           |
| 📊 **Pelacakan Kuota Waktu Nyata**   | Jumlah token langsung + setel ulang hitungan mundur per penyedia                   |
| 🔄 **Terjemahan Format**             | OpenAI ↔ Claude ↔ Gemini ↔ Kursor ↔ Kiro mulus + sanitasi respons                  |
| 👥 **Dukungan Multi-Akun**           | Banyak akun per penyedia dengan pilihan cerdas                                     |
| 🔄 **Penyegaran Token Otomatis**     | Token OAuth disegarkan secara otomatis dengan coba lagi                            |
| 🎨 **Kombo Khusus**                  | 6 strategi: isi dulu, round-robin, p2c, acak, paling jarang digunakan, hemat biaya |
| 🧩 **Model Khusus**                  | Tambahkan ID model apa pun ke penyedia mana pun                                    |
| 🌐 **Router Wildcard**               | Rutekan pola `provider/*` ke penyedia mana pun secara dinamis                      |
| 🧠 **Memikirkan Anggaran**           | Mode passthrough, otomatis, kustom, dan adaptif untuk model penalaran              |
| 🔀 **Model Aliases**                 | Auto-forward deprecated model IDs to current replacements (built-in + custom)      |
| ⚡ **Background Degradation**        | Auto-route background tasks (titles, summaries) to cheaper models                  |
| 💬 **Injeksi Perintah Sistem**       | Perintah sistem global diterapkan di semua permintaan                              |
| 📄 **API Respons**                   | Dukungan penuh OpenAI Responses API (`/v1/responses`) untuk Codex                  |

### 🎵 API Multi-Modal

| Fitur                      | Apa Fungsinya                                          |
| -------------------------- | ------------------------------------------------------ |
| 🖼️ **Pembuatan Gambar**    | `/v1/images/generations` — 4 penyedia, 9+ model        |
| 📐 **Sematan**             | `/v1/embeddings` — 6 penyedia, 9+ model                |
| 🎤 **Transkripsi Audio**   | `/v1/audio/transcriptions` — Kompatibel dengan bisikan |
| 🔊 **Teks-ke-Ucapan**      | `/v1/audio/speech` — Sintesis audio multi-penyedia     |
| 🛡️ **Moderasi**            | `/v1/moderations` — Pemeriksaan keamanan konten        |
| 🔀 **Pemeringkatan Ulang** | `/v1/rerank` — Pemeringkatan ulang relevansi dokumen   |

### 🛡️ Ketahanan & Keamanan

| Fitur                                | Apa Fungsinya                                                                              |
| ------------------------------------ | ------------------------------------------------------------------------------------------ |
| 🔌 **Pemutus Arus**                  | Buka/tutup otomatis per penyedia dengan ambang batas yang dapat dikonfigurasi              |
| 🛡️ **Kawanan Anti Guntur**           | Batas kecepatan mutex + semaphore untuk penyedia kunci API                                 |
| 🧠 **Cache Semantik**                | Cache dua tingkat (tanda tangan + semantik) mengurangi biaya & latensi                     |
| ⚡ **Minta Idempotensi**             | Jendela dedup 5 detik untuk permintaan duplikat                                            |
| 🔒 **Spoofing Sidik Jari TLS**       | Lewati deteksi bot berbasis TLS melalui wreq-js                                            |
| 🌐 **Pemfilteran IP**                | Daftar yang diizinkan/daftar blokir untuk kontrol akses API                                |
| 📊 **Batas Tarif yang Dapat Diedit** | RPM yang dapat dikonfigurasi, celah minimum, dan maks secara bersamaan pada tingkat sistem |
| 💾 **Rate Limit Persistence**        | Learned limits survive restarts via SQLite with 60s debounce + 24h staleness               |
| 🔄 **Token Refresh Resilience**      | Per-provider circuit breaker (5 fails→30min) + 30s timeout per attempt                     |
| 🛡 **Perlindungan Titik Akhir API**  | Gerbang autentikasi + pemblokiran penyedia untuk titik akhir `/models`                     |
| 🔒 **Visibilitas Proksi**            | Lencana berkode warna: 🟢 global, 🟡 penyedia, 🔵 per koneksi dengan tampilan IP           |
| 🌐 **Konfigurasi Proksi 3 Tingkat**  | Konfigurasikan proxy di tingkat global, per penyedia, atau per koneksi                     |

### 📊 Observabilitas & Analisis

| Fitur                        | Apa Fungsinya                                                                   |
| ---------------------------- | ------------------------------------------------------------------------------- |
| 📝 **Permintaan Pencatatan** | Mode debug dengan log permintaan/respons lengkap                                |
| 💾 **Log Proksi SQLite**     | Log proksi persisten bertahan saat server dimulai ulang                         |
| 📊 **Dasbor Analitik**       | Didukung grafik ulang: kartu stat, bagan penggunaan model, tabel penyedia       |
| 📈 **Pelacakan Kemajuan**    | Ikut serta dalam acara kemajuan SSE untuk streaming                             |
| 🧪 **Evaluasi LLM**          | Pengujian set emas dengan 4 strategi pertandingan                               |
| 🔍 **Permintaan Telemetri**  | agregasi latensi p50/p95/p99 + penelusuran X-Request-Id                         |
| 📋 **Dasbor Log**            | Halaman 4 tab terpadu: Log Permintaan, Log Proksi, Log Audit, Konsol            |
| 🖥️ **Penampil Log Konsol**   | Penampil gaya terminal real-time dengan filter level, pencarian, gulir otomatis |
| 📑 **Logging Berbasis File** | Pencegat konsol menangkap semua output ke file log JSON dengan rotasi           |
| 🏥 **Dasbor Kesehatan**      | Waktu aktif sistem, status pemutus sirkuit, penguncian, statistik cache         |
| 💰 **Pelacakan Biaya**       | Manajemen anggaran + konfigurasi harga per model                                |

### ☁️ Penerapan & Sinkronisasi

| Fitur                        | Apa Fungsinya                                                                |
| ---------------------------- | ---------------------------------------------------------------------------- |
| 💾 **Sinkronisasi Cloud**    | Sinkronkan konfigurasi antar perangkat melalui Cloudflare Workers            |
| 🌐 **Terapkan Di Mana Saja** | Localhost, VPS, Docker, Pekerja Cloudflare                                   |
| 🔑 **Manajemen Kunci API**   | Menghasilkan, memutar, dan mencakup kunci API per penyedia                   |
| 🧙 **Wizard Orientasi**      | Penyiapan terpandu 4 langkah untuk pengguna pertama kali                     |
| 🔧 **Dasbor Alat CLI**       | Konfigurasikan sekali klik Claude, Codex, Cline, OpenClaw, Kilo, Antigravity |
| 🔄 **Cadangan DB**           | Pencadangan, pemulihan, ekspor & impor otomatis untuk semua pengaturan       |
| 🌐 **Internasionalisasi**    | I18n lengkap dengan next-intl — Dukungan Inggris + Portugis (Brasil)         |
| 🌍 **Pemilih Bahasa**        | Ikon bola dunia di header untuk peralihan bahasa secara real-time (🇮🇩/🇧🇷)    |
| 📂 **Direktori Data Khusus** | `DATA_DIR` env var untuk mengganti jalur penyimpanan `~/.omniroute` default  |

<details>
<summary><b>📖 Detail Fitur</b></summary>

### 🎯 Penggantian 4 Tingkat yang Cerdas

Buat kombo dengan fallback otomatis:

```
Combo: "my-coding-stack"
  1. cc/claude-opus-4-6        (your subscription)
  2. nvidia/llama-3.3-70b      (free NVIDIA API)
  3. glm/glm-4.7               (cheap backup, $0.6/1M)
  4. if/kimi-k2-thinking       (free fallback)

→ Auto switches when quota runs out or errors occur
```

### 📊 Pelacakan Kuota Waktu Nyata

- Konsumsi token per penyedia
- Atur ulang hitungan mundur (5 jam, harian, mingguan)
- Estimasi biaya untuk tingkatan berbayar
- Laporan pengeluaran bulanan

### 🔄 Format Terjemahan

Terjemahan mulus antar format:

- **OpenAI** ↔ **Claude** ↔ **Gemini** ↔ **Respon OpenAI**
- Alat CLI Anda mengirimkan format OpenAI → OmniRoute menerjemahkan → Penyedia menerima format asli
- Bekerja dengan alat apa pun yang mendukung titik akhir OpenAI khusus
- **Sanitasi respons** — Menghapus kolom non-standar untuk kompatibilitas OpenAI SDK yang ketat
- **Normalisasi peran** — `developer` → `system` untuk non-OpenAI; `system` → `user` untuk model GLM/ERNIE
- **Think tag ekstraksi** — `<think>` blok → `reasoning_content` untuk model berpikir
- **Keluaran terstruktur** — `json_schema` → `responseMimeType`/`responseSchema` Gemini

### 👥 Dukungan Multi-Akun

- Tambahkan beberapa akun per penyedia
- Perutean otomatis round-robin atau berbasis prioritas
- Penggantian ke akun berikutnya ketika ada yang mencapai kuota

### 🔄 Penyegaran Token Otomatis

- Token OAuth secara otomatis disegarkan sebelum masa berlakunya habis
- Tidak diperlukan otentikasi ulang manual
- Pengalaman mulus di semua penyedia

### 🎨 Kombo Khusus

- Buat kombinasi model tanpa batas
- 6 strategi: isi pertama, round-robin, kekuatan dua pilihan, acak, paling jarang digunakan, hemat biaya
- Bagikan kombo di seluruh perangkat dengan Cloud Sync

### 🏥 Dasbor Kesehatan

- Status sistem (waktu aktif, versi, penggunaan memori)
- Status pemutus sirkuit per penyedia (Tertutup/Terbuka/Setengah Terbuka)
- Status batas tarif dan penguncian aktif
- Statistik cache tanda tangan
- Telemetri latensi (p50/p95/p99) + cache cepat
- Atur ulang status kesehatan dengan satu klik

### 🔧 Taman Bermain Penerjemah

OmniRoute menyertakan Taman Bermain Penerjemah bawaan yang canggih dengan **4 mode** untuk melakukan debug, menguji, dan memantau terjemahan API:

| Modus                   | Deskripsi                                                                                                                                                                                                                                                 |
| ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **💻 Taman bermain**    | Terjemahan format langsung — tempelkan isi permintaan API apa pun dan langsung lihat bagaimana OmniRoute menerjemahkannya antar format penyedia (OpenAI ↔ Claude ↔ Gemini ↔ Responses API). Termasuk contoh templat dan deteksi otomatis format.          |
| **💬 Penguji Obrolan**  | Kirim permintaan obrolan nyata melalui OmniRoute dan lihat perjalanan pulang pergi selengkapnya: masukan Anda, permintaan yang diterjemahkan, respons penyedia, dan respons yang diterjemahkan kembali. Sangat berharga untuk memvalidasi perutean kombo. |
| **🧪 Bangku Tes**       | Mode pengujian batch — tentukan beberapa kasus pengujian dengan masukan berbeda dan keluaran yang diharapkan, jalankan semuanya sekaligus, dan bandingkan hasilnya di seluruh penyedia dan model.                                                         |
| **📱 Monitor Langsung** | Pemantauan permintaan waktu nyata — perhatikan permintaan masuk saat mengalir melalui OmniRoute, lihat terjemahan format yang terjadi secara langsung, dan identifikasi masalah secara instan.                                                            |

**Akses:** Dasbor → Penerjemah (bilah samping)

### 💾 Sinkronisasi Awan

- Sinkronisasi penyedia, kombo, dan pengaturan di seluruh perangkat
- Sinkronisasi latar belakang otomatis
- Penyimpanan terenkripsi yang aman

</details>

## 🧪 Evaluasi (Eval)

OmniRoute menyertakan kerangka evaluasi bawaan untuk menguji kualitas respons LLM terhadap rangkaian emas. Akses melalui **Analytics → Evals** di dasbor.

### Set Emas Bawaan

"OmniRoute Golden Set" yang dimuat sebelumnya berisi 10 kasus uji yang meliputi:

- Salam, matematika, geografi, pembuatan kode
- Kepatuhan format JSON, terjemahan, penurunan harga
- Penolakan keamanan (konten berbahaya), penghitungan, logika boolean

### Strategi Evaluasi

| Strategi   | Deskripsi                                                    | Contoh                           |
| ---------- | ------------------------------------------------------------ | -------------------------------- |
| `exact`    | Output harus sama persis                                     | `"4"`                            |
| `contains` | Output harus berisi substring (tidak peka huruf besar-kecil) | `"Paris"`                        |
| `regex`    | Output harus sesuai dengan pola regex                        | `"1.*2.*3"`                      |
| `custom`   | Fungsi JS khusus mengembalikan benar/salah                   | `(output) => output.length > 10` |

---

## 📖 Panduan Pengaturan

<details>
<summary><b>💳 Penyedia Langganan</b></summary>

### Kode Claude (Pro/Maks)

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

**Kiat Pro:** Gunakan Opus untuk tugas kompleks, Soneta untuk kecepatan. OmniRoute melacak kuota per model!

### Kodeks OpenAI (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
```

#### Manajemen Limit Akun Codex (5h + Mingguan)

Setiap akun Codex sekarang punya toggle kebijakan di `Dashboard -> Providers`:

- `5h` (ON/OFF): menerapkan kebijakan ambang untuk jendela 5 jam.
- `Weekly` (ON/OFF): menerapkan kebijakan ambang untuk jendela mingguan.
- Perilaku ambang: saat jendela yang aktif mencapai >=90% penggunaan, akun tersebut di-skip.
- Perilaku rotasi: OmniRoute otomatis merutekan ke akun Codex berikutnya yang masih eligible.
- Perilaku reset: saat waktu `resetAt` provider sudah lewat, akun otomatis bisa dipakai lagi.

Skenario:

- `5h ON` + `Weekly ON`: akun di-skip jika salah satu jendela mencapai ambang.
- `5h OFF` + `Weekly ON`: hanya penggunaan mingguan yang bisa memblokir akun.
- `5h ON` + `Weekly OFF`: hanya penggunaan 5 jam yang bisa memblokir akun.
- `resetAt` sudah lewat: akun otomatis masuk rotasi lagi (tanpa enable manual).

### Gemini CLI (GRATIS 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:** Tingkat gratis yang sangat besar! Gunakan ini sebelum tingkatan berbayar.

### Kopilot 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>🔑 Penyedia Kunci API</b></summary>

### NVIDIA NIM (GRATIS 1000 kredit!)

1. Daftar: [build.nvidia.com](https://build.nvidia.com)
2. Dapatkan kunci API gratis (termasuk 1000 kredit inferensi)
3. Dasbor → Tambah Penyedia → NVIDIA NIM:
   - Kunci API: `nvapi-your-key`

**Model:** `nvidia/llama-3.3-70b-instruct`, `nvidia/mistral-7b-instruct`, dan 50+ lainnya

**Kiat Pro:** API yang kompatibel dengan OpenAI — bekerja secara lancar dengan terjemahan format OmniRoute!

### Pencarian Dalam

1. Daftar: [platform.deepseek.com](https://platform.deepseek.com)
2. Dapatkan kunci API
3. Dasbor → Tambah Penyedia → DeepSeek

**Model:** `deepseek/deepseek-chat`, `deepseek/deepseek-coder`

### Groq (Tersedia Tingkat Gratis!)

1. Daftar: [console.groq.com](https://console.groq.com)
2. Dapatkan kunci API (termasuk tingkat gratis)
3. Dasbor → Tambah Penyedia → Groq

**Model:** `groq/llama-3.3-70b`, `groq/mixtral-8x7b`

**Kiat Pro:** Inferensi ultra-cepat — terbaik untuk pengkodean waktu nyata!

### OpenRouter (100+ Model)

1. Daftar: [openrouter.ai](https://openrouter.ai)
2. Dapatkan kunci API
3. Dasbor → Tambah Penyedia → OpenRouter

**Model:** Akses 100+ model dari semua penyedia utama melalui satu kunci API.

</details>

<details>
<summary><b>💰 Penyedia Murah (Cadangan)</b></summary>

### GLM-4.7 (Reset harian, $0,6/1 juta)

1. Daftar: [Zhipu AI](https://open.bigmodel.cn/)
2. Dapatkan kunci API dari Coding Plan
3. Dasbor → Tambahkan Kunci API:
   - Penyedia: `glm`
   - Kunci API: `your-key`

**Gunakan:** `glm/glm-4.7`

**Tips Pro:** Paket Coding menawarkan 3× kuota dengan biaya 1/7! Reset setiap hari pukul 10.00.

### MiniMax M2.1 (reset 5 jam, $0,20/1 juta)

1. Daftar: [MiniMax](https://www.minimax.io/)
2. Dapatkan kunci API
3. Dasbor → Tambahkan Kunci API

**Gunakan:** `minimax/MiniMax-M2.1`

**Kiat Pro:** Opsi termurah untuk konteks panjang (1 juta token)!

### Kimi K2 ($9/bulan tetap)

1. Berlangganan: [Moonshot AI](https://platform.moonshot.ai/)
2. Dapatkan kunci API
3. Dasbor → Tambahkan Kunci API

**Gunakan:** `kimi/kimi-latest`

**Kiat Pro:** Memperbaiki $9/bulan untuk 10 juta token = biaya efektif $0,90/1 juta!

</details>

<details>
<summary><b>🆓 Penyedia GRATIS (Cadangan Darurat)</b></summary>

### iFlow (8 model GRATIS)

```bash
Dashboard → Connect iFlow
→ iFlow OAuth login
→ Unlimited usage

Models:
  if/kimi-k2-thinking
  if/qwen3-coder-plus
  if/glm-4.7
  if/minimax-m2
  if/deepseek-r1
```

### Qwen (3 model GRATIS)

```bash
Dashboard → Connect Qwen
→ Device code authorization
→ Unlimited usage

Models:
  qw/qwen3-coder-plus
  qw/qwen3-coder-flash
```

### Kiro (Claude GRATIS)

```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>🎨 Buat Kombo</b></summary>

### Contoh 1: Maksimalkan Langganan → Cadangan 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: Gratis Saja (Tanpa Biaya)

```
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>🔧 Integrasi CLI</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
```

### Kode Claude

Gunakan halaman **Alat CLI** di dasbor untuk konfigurasi sekali klik, atau edit `~/.claude/settings.json` secara manual.

### Kodeks CLI

```bash
export OPENAI_BASE_URL="http://localhost:20128"
export OPENAI_API_KEY="your-omniroute-api-key"

codex "your prompt"
```

### Buka Cakar

**Opsi 1 — Dasbor (disarankan):**

```
Dashboard → CLI Tools → OpenClaw → Select Model → Apply
```

**Opsi 2 — Panduan:** Sunting `~/.openclaw/openclaw.json`:

```json
{
  "models": {
    "providers": {
      "omniroute": {
        "baseUrl": "http://127.0.0.1:20128/v1",
        "apiKey": "sk_omniroute",
        "api": "openai-completions"
      }
    }
  }
}
```

> **Catatan:** OpenClaw hanya berfungsi dengan OmniRoute lokal. Gunakan `127.0.0.1` alih-alih `localhost` untuk menghindari masalah resolusi IPv6.

### Cline / Lanjutkan / RooCode

```
Settings → API Configuration:
  Provider: OpenAI Compatible
  Base URL: http://localhost:20128/v1
  API Key: [from OmniRoute dashboard]
  Model: if/kimi-k2-thinking
```

</details>

---

## 🐛 Pemecahan masalah

<details>
<summary><b>Klik untuk memperluas panduan pemecahan masalah</b></summary>

**"Model bahasa tidak memberikan pesan"**

- Kuota penyedia habis → Periksa dashboard pelacak kuota
- Solusi: Gunakan combo fallback atau beralih ke tier yang lebih murah

**Pembatasan tarif**

- Kuota berlangganan habis → Penggantian ke GLM/MiniMax
- Tambahkan kombo: `cc/claude-opus-4-6 → glm/glm-4.7 → if/kimi-k2-thinking`

**Token OAuth kedaluwarsa**

- Disegarkan secara otomatis oleh OmniRoute
- Jika masalah terus berlanjut: Dasbor → Penyedia → Sambungkan kembali

**Biaya tinggi**

- Periksa statistik penggunaan di Dashboard → Biaya
- Ganti model utama ke GLM/MiniMax
- Gunakan tingkat gratis (Gemini CLI, iFlow) untuk tugas-tugas yang tidak penting

**Dasbor terbuka pada port yang salah**

- Tetapkan `PORT=20128` dan `NEXT_PUBLIC_BASE_URL=http://localhost:20128`

**Kesalahan sinkronisasi cloud**

- Verifikasi `BASE_URL` poin ke instance Anda yang sedang berjalan
- Verifikasi `CLOUD_URL` poin ke titik akhir cloud yang Anda harapkan
- Jaga agar nilai `NEXT_PUBLIC_*` selaras dengan nilai sisi server

**Login pertama tidak berfungsi**

- Periksa `INITIAL_PASSWORD` di `.env`
- Jika tidak disetel, kata sandi cadangan adalah `123456`

**Tidak ada log permintaan**

- Tetapkan `ENABLE_REQUEST_LOGS=true` di `.env`

**Tes koneksi menunjukkan "Tidak Valid" untuk penyedia yang kompatibel dengan OpenAI**

- Banyak penyedia tidak mengekspos titik akhir `/models`
- OmniRoute v1.0.6+ menyertakan validasi fallback melalui penyelesaian obrolan
- Pastikan URL dasar menyertakan akhiran `/v1`

### 🔐 OAuth

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

> **⚠️ PENTING bagi pengguna dengan OmniRoute pada VPS/Docker/server jarak jauh**

### OAuth

Pembuktiannya **Antigravitasi** dan **Gemini CLI** digunakan **Google OAuth 2.0** untuk autentikasi. Google meminta agar `redirect_uri` menggunakan OAuth yang terus berubah, jadi **exatamente** adalah URI yang sudah ada sebelumnya di Google Cloud Console yang dapat diterapkan.

Karena kredensial OAuth yang diberikan pada OmniRoute adalah kadastrada **apenas untuk `localhost`**. Ketika Anda mengakses OmniRoute dari server jarak jauh (misal: `https://omniroute.meuservidor.com`), atau Google meminta autenticação com:

```
Error 400: redirect_uri_mismatch
```

### Solusi: Konfigurasikan akun OAuth Anda

Anda perlu membuat **ID Klien OAuth 2.0** di Google Cloud Console dengan URI di server Anda.

#### Lewati dulu

**1. Mengakses Google Cloud Console**

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

**2. Inilah ID Klien OAuth 2.0 yang baru**

- Klik pada **"+ Buat Kredensial"** → **"ID klien OAuth"**
- Tip aplikasi: **"Aplikasi web"**
- Nama: nama escolha qualquer (misal: `OmniRoute Remote`)

**3. Tambahan sebagai URI Pengalihan Resmi**

Selain itu **"URI pengalihan resmi"**, tambahan:

```
https://seu-servidor.com/callback
```

> Pengganti `seu-servidor.com` pelo domínio atau IP ke server Anda (termasuk port yang diperlukan, misal: `http://45.33.32.156:20128/callback`).

**4. Salep dan salin sebagai kredensial**

Kemudian, Google menampilkan **ID Klien** dan **Rahasia Klien**.

**5. Konfigurasikan sebagai variáveis de ambiente**

Di `.env` (atau berbagai lingkungan di 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. Memulai kembali OmniRoute**

```bash
# Se usando npm:
npm run dev

# Se usando Docker:
docker restart omniroute
```

**7. Mari kita sambungkan lagi**

Dasbor → Penyedia → Antigravitasi (atau Gemini CLI) → OAuth

Sekarang o Google dialihkan langsung ke `https://seu-servidor.com/callback` dan autentikasi berfungsi.

---

### Solusi sementara (sem configurar credenciais próprias)

Jika Anda tidak ingin membuat kredensial pribadi sekarang, Anda mungkin dapat menggunakan fluks **panduan URL**:

1. O OmniRoute membuka URL autoriza dari Google
2. Setelah Anda autorizar, Google mengarahkan pengalihan ke `localhost` (yang gagal pada server jarak jauh)
3. **Salin URL lengkap** dari bilah akhir browser Anda (meskipun halaman tidak dimuat)
4. Gunakan URL ini karena tidak ada modal koneksi ke OmniRoute
5. Klik pada **"Hubungkan"**

> Solusi ini berfungsi karena kode otorisasi pada URL valid secara independen untuk mengarahkan ulang ke akun atau tidak.

</details>

---

## 🛠️

- **Runtime**: Node.js 18–22 LTS (⚠️ Node.js 24+ **tidak didukung** — `better-sqlite3` biner asli tidak kompatibel)
- **Bahasa**: TypeScript 5.9 — **100% TypeScript** di `src/` dan `open-sse/` (v1.0.6)
- **Kerangka Kerja**: Next.js 16 + React 19 + Tailwind CSS 4
- **Database**: LowDB (JSON) + SQLite (status domain + log proksi)
- **Streaming**: Peristiwa Terkirim Server (SSE)
- **Auth**: OAuth 2.0 (PKCE) + JWT + Kunci API
- **Pengujian**: pelari pengujian Node.js (368+ pengujian unit)
- **CI/CD**: Tindakan GitHub (publikasi npm otomatis + Docker Hub saat dirilis)
- **Situs Web**: [omniroute.online](https://omniroute.online)
- **Paket**: [npmjs.com/package/omniroute](https://www.npmjs.com/package/omniroute)
- **Pekerja Pelabuhan**: [hub.docker.com/r/diegosouzapw/omniroute](https://hub.docker.com/r/diegosouzapw/omniroute)
- **Ketahanan**: Pemutus sirkuit, kemunduran eksponensial, kawanan anti-guntur, spoofing TLS

---

## 📖 Dokumentasi

| Dokumen                                      | Deskripsi                                           |
| -------------------------------------------- | --------------------------------------------------- |
| [User Guide](docs/USER_GUIDE.md)             | Penyedia, kombo, integrasi CLI, penerapan           |
| [API Reference](docs/API_REFERENCE.md)       | Semua titik akhir dengan contoh                     |
| [Troubleshooting](docs/TROUBLESHOOTING.md)   | Masalah umum dan solusinya                          |
| [Architecture](docs/ARCHITECTURE.md)         | Arsitektur sistem dan internal                      |
| [Contributing](CONTRIBUTING.md)              | Pengaturan dan pedoman pengembangan                 |
| [OpenAPI Spec](docs/openapi.yaml)            | Spesifikasi OpenAPI 3.0                             |
| [Security Policy](SECURITY.md)               | Pelaporan kerentanan dan praktik keamanan           |
| [VM Deployment](docs/VM_DEPLOYMENT_GUIDE.md) | Panduan lengkap: VM + nginx + Pengaturan Cloudflare |
| [Features Gallery](docs/FEATURES.md)         | Tur dasbor visual dengan tangkapan layar            |

### 📸 Pratinjau Dasbor

<details>
<summary><b>Klik untuk melihat tangkapan layar dasbor</b></summary>

| Halaman            | Tangkapan layar                                   |
| ------------------ | ------------------------------------------------- |
| **Penyedia**       | ![Providers](docs/screenshots/01-providers.png)   |
| **Kombo**          | ![Combos](docs/screenshots/02-combos.png)         |
| **Analitik**       | ![Analytics](docs/screenshots/03-analytics.png)   |
| **Kesehatan**      | ![Health](docs/screenshots/04-health.png)         |
| **Penerjemah**     | ![Translator](docs/screenshots/05-translator.png) |
| **Pengaturan**     | ![Settings](docs/screenshots/06-settings.png)     |
| **Alat CLI**       | ![CLI Tools](docs/screenshots/07-cli-tools.png)   |
| **Log Penggunaan** | ![Usage](docs/screenshots/08-usage.png)           |
| **Titik Akhir**    | ![Endpoint](docs/screenshots/09-endpoint.png)     |

</details>

---

## 🗺️

OmniRoute memiliki **210+ fitur yang direncanakan** di berbagai fase pengembangan. Berikut adalah bidang-bidang utamanya:

| Kategori                     | Fitur yang Direncanakan | Sorotan                                                                                             |
| ---------------------------- | ----------------------- | --------------------------------------------------------------------------------------------------- |
| 🧠 **Perutean & Kecerdasan** | 25+                     | Perutean latensi terendah, perutean berbasis tag, preflight kuota, pemilihan akun P2C               |
| 🔒 **Keamanan & Kepatuhan**  | 20+                     | Pengerasan SSRF, penyelubungan kredensial, batas tarif per titik akhir, pelingkupan kunci manajemen |
| 📊 **Kemampuan Observasi**   | 15+                     | Integrasi OpenTelemetry, pemantauan kuota waktu nyata, pelacakan biaya per model                    |
| 🔄 **Integrasi Penyedia**    | 20+                     | Registri model dinamis, cooldown penyedia, Codex multi-akun, penguraian kuota Salinan               |
| ⚡ **Kinerja**               | 15+                     | Lapisan cache ganda, cache cepat, cache respons, streaming keepalive, API batch                     |
| 🌐 **Ekosistem**             | 10+                     | WebSocket API, konfigurasi hot-reload, penyimpanan konfigurasi terdistribusi, mode komersial        |

### 🔜 Segera Hadir

- 🔗 **Integrasi OpenCode** — Dukungan penyedia asli untuk IDE pengkodean AI OpenCode
- 🔗 **Integrasi TRAE** — Dukungan penuh untuk kerangka pengembangan AI TRAE
- 📦 **Batch API** — Pemrosesan batch asinkron untuk permintaan massal
- 🎯 **Perutean Berbasis Tag** — Merutekan permintaan berdasarkan tag dan metadata khusus
- 💰 **Strategi Biaya Terendah** — Secara otomatis memilih penyedia termurah yang tersedia

> 📝 Spesifikasi fitur lengkap tersedia di [link](docs/new-features/) (217 spesifikasi detail)

---

## 👥 Kontributor

[![Contributors](https://contrib.rocks/image?repo=diegosouzapw/OmniRoute&max=100&columns=20&anon=1)](https://github.com/diegosouzapw/OmniRoute/graphs/contributors)

### Cara Berkontribusi

1. Cabangkan repositori
2. Buat cabang fitur Anda (`git checkout -b feature/amazing-feature`)
3. Komit perubahan Anda (`git commit -m 'Add amazing feature'`)
4. Dorong ke cabang (`git push origin feature/amazing-feature`)
5. Buka Permintaan Tarik

Lihat [CONTRIBUTING.md](CONTRIBUTING.md) untuk panduan detailnya.

### Merilis Versi Baru

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

---

## 📊 Sejarah Bintang

## Stargazers over time

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

## 🙏 Ucapan Terima Kasih

Terima kasih khusus kepada **[9router](https://github.com/decolua/9router)** oleh **[decolua](https://github.com/decolua)** — proyek asli yang menginspirasi fork ini. OmniRoute dibangun di atas fondasi luar biasa tersebut dengan fitur tambahan, API multi-modal, dan penulisan ulang TypeScript lengkap.

Terima kasih khusus kepada **[CLIProxyAPI](https://github.com/router-for-me/CLIProxyAPI)** — implementasi Go asli yang menginspirasi port JavaScript ini.

---

## 📄 Lisensi

Lisensi MIT - lihat [LICENSE](LICENSE) untuk detailnya.

---

<div align="center">
  <sub>Dibangun dengan ❤️ untuk pengembang yang membuat kode 24/7</sub>
  <br/>
  <sub><a href="https://omniroute.online">omniroute.online</a></sub>
</div>
