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

### Slutt aldri å kode. Smart ruting til **GRATIS og rimelige AI-modeller** med automatisk fallback.

_Din universelle API-proxy – ett endepunkt, 36+ leverandører, null nedetid._

**Chatfullføringer • Innebygginger • Bildegenerering • Lyd • Omrangering • 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                                                                                      |

### 🤖 Gratis AI-leverandør for dine favorittkodeagenter

_Koble til ethvert AI-drevet IDE- eller CLI-verktøy gjennom OmniRoute – gratis API-gateway for ubegrenset koding._

  <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>📡 Alle agenter kobler til via <code>http://localhost:20128/v1</code> eller <code>http://cloud.omniroute.online/v1</code>, —limited one models_245 kvote</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>

---

## 🤔 Hvorfor OmniRoute?

**Slutt å kaste bort penger og nå grensene:**

- <img src="https://img.shields.io/badge/✗-e74c3c?style=flat-square" height="16"/> Abonnementskvoten utløper ubrukt hver måned
- <img src="https://img.shields.io/badge/✗-e74c3c?style=flat-square" height="16"/> Takstgrenser stopper deg med midtkoding
- <img src="https://img.shields.io/badge/✗-e74c3c?style=flat-square" height="16"/> Dyre APIer ($20–50/måned per leverandør)
- <img src="https://img.shields.io/badge/✗-e74c3c?style=flat-square" height="16"/> Manuell veksling mellom tilbydere

**OmniRoute løser dette:**

- ✅ **Maksimer abonnementer** - Spor kvote, bruk hver bit før tilbakestilling
- ✅ **Automatisk fallback** - Abonnement → API-nøkkel → Billig → Gratis, null nedetid
- ✅ **Multi-konto** - Round-robin mellom kontoer per leverandør
- ✅ **Universal** - Fungerer med Claude Code, Codex, Gemini CLI, Cursor, Cline, OpenClaw, hvilket som helst CLI-verktøy

---

## 📧 Støtte

> 💬 **Bli med i fellesskapet vårt!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) — Få hjelp, del tips og hold deg oppdatert.

- **Nettsted**: [omniroute.online](https://omniroute.online)
- **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute)
- **Problemer**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues)
- **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t)
- **Originalt prosjekt**: [9router by decolua](https://github.com/decolua/9router)

---

## 🔄 Hvordan det fungerer

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

---

## 🎯 Hva OmniRoute løser — 30 ekte smertepoeng og brukstilfeller

> **Hver utviklere som bruker AI-verktøy møter disse problemene daglig.** OmniRoute ble bygget for å løse dem alle – fra kostnadsoverskridelser til regionale blokker, fra ødelagte OAuth-flyter til protokolloperasjoner og observerbarhet i bedrifter.

<details>
<summary><b>💸 1. "Jeg betaler for et dyrt abonnement, men blir fortsatt avbrutt av grenser" </b></summary>

Utviklere betaler $20–200/måned for Claude Pro, Codex Pro eller GitHub Copilot. Selv om du betaler, har kvoten et tak – 5 timers bruk, ukentlige grenser eller rategrenser per minutt. Midtkodingsøkt, leverandøren slutter å svare og utvikleren mister flyt og produktivitet.

**Hvordan OmniRoute løser det:**

- **Smart 4-lags fallback** — Hvis abonnementskvoten går tom, omdirigeres automatisk til API-nøkkel → Billig → Gratis med null manuell intervensjon
- **Sanntidskvotesporing** — Viser tokenforbruk i sanntid med tilbakestilt nedtelling (5 timer, daglig, ukentlig)
- **Støtte for flere kontoer** - Flere kontoer per leverandør med automatisk round-robin - når en går tom, bytter du til den neste
- **Egendefinerte kombinasjoner** — Tilpassbare reservekjeder med 6 balansestrategier (fyll først, round-robin, P2C, tilfeldig, minst brukt, kostnadsoptimalisert)
- **Codex Business Quotas** — Overvåking av bedrifts-/teamarbeidsområdekvoter direkte i dashbordet

</details>

<details>
<summary><b>🔌 2. "Jeg trenger å bruke flere leverandører, men hver av dem har en annen API" </b></summary>

OpenAI bruker ett format, Claude (Anthropic) bruker et annet, Gemini enda et annet. Hvis en utvikler ønsker å teste modeller fra forskjellige leverandører eller fallback mellom dem, må de rekonfigurere SDK-er, endre endepunkter, håndtere inkompatible formater. Tilpassede leverandører (FriendLI, NIM) har ikke-standardmodellende endepunkter.

**Hvordan OmniRoute løser det:**

- **Unified Endpoint** - En enkelt `http://localhost:20128/v1` fungerer som proxy for alle 36+ leverandører
- **Formatoversettelse** — Automatisk og gjennomsiktig: OpenAI ↔ Claude ↔ Gemini ↔ Responses API
- **Responsrensing** — Fjerner ikke-standardfelter (`x_groq`, `usage_breakdown`, `service_tier`) som bryter OpenAI SDK v1.83+
- **Rollenormalisering** — Konverterer `developer` → `system` for ikke-OpenAI-leverandører; `system` → `user` for GLM/ERNIE
- **Think Tag Extraction** — Trekker ut `<think>`-blokker fra modeller som DeepSeek R1 til standardiserte `reasoning_content`
- **Structured Output for Gemini** — `json_schema` → `responseMimeType`/`responseSchema` automatisk konvertering
- **`stream` er standard til `false`** — Justerer med OpenAI-spesifikasjoner, og unngår uventet SSE i Python/Rust/Go SDK-er

</details>

<details>
<summary><b>🌐 3. "Min AI-leverandør blokkerer min region/land" </b></summary>

Leverandører som OpenAI/Codex blokkerer tilgang fra visse geografiske områder. Brukere får feil som `unsupported_country_region_territory` under OAuth- og API-tilkoblinger. Dette er spesielt frustrerende for utviklere fra utviklingsland.

**Hvordan OmniRoute løser det:**

- **3-Level Proxy Config** — Konfigurerbar proxy på 3 nivåer: global (all trafikk), per leverandør (kun én leverandør) og per tilkobling/nøkkel
- **Fargekodede proxy-merker** — Visuelle indikatorer: 🟢 global proxy, 🟡 leverandørproxy, 🔵 tilkoblings proxy, viser alltid IP
- **OAuth-tokenutveksling gjennom proxy** - OAuth-flyt går også gjennom proxyen, og løser `unsupported_country_region_territory`
- **Test av tilkobling via proxy** — Tilkoblingstester bruker den konfigurerte proxyen (ikke mer direkte forbikobling)
- **SOCKS5-støtte** — Full SOCKS5-proxystøtte for utgående ruting
- **TLS-fingeravtrykkspoofing** — Nettleserlignende TLS-fingeravtrykk via `wreq-js` for å omgå botdeteksjon

</details>

<details>
<summary><b>🆓 4. "Jeg vil bruke AI for koding, men jeg har ingen penger" </b></summary>

Ikke alle kan betale $20–200 per måned for AI-abonnementer. Studenter, utviklere fra fremvoksende land, hobbyfolk og frilansere trenger tilgang til kvalitetsmodeller uten kostnad.

**Hvordan OmniRoute løser det:**

- **Gratis-tilbydere innebygd** — Innebygd støtte for 100 % gratisleverandører: iFlow (8 ubegrensede modeller), Qwen (3 ubegrensede modeller), Kiro (Claude gratis), Gemini CLI (180K/mnd gratis)
- **Ollama Cloud** — Cloud-hosted Ollama models at `api.ollama.com` with free "Light usage" tier; use `ollamacloud/<model>` prefix
- **Kun gratis kombinasjoner** — Kjede `gc/gemini-3-flash → if/kimi-k2-thinking → qw/qwen3-coder-plus` = $0/måned med null nedetid
- **NVIDIA NIM gratis kreditter** — 1000 gratis kreditter integrert
- **Kostnadsoptimalisert strategi** — Rutingstrategi som automatisk velger den billigste tilgjengelige leverandøren

</details>

<details>
<summary><b>🔒 5. "Jeg trenger å beskytte AI-gatewayen min mot uautorisert tilgang" </b></summary>

Når du eksponerer en AI-gateway til nettverket (LAN, VPS, Docker), kan alle med adressen konsumere utviklerens tokens/kvote. Uten beskyttelse er API-er sårbare for misbruk, umiddelbar injeksjon og misbruk.

**Hvordan OmniRoute løser det:**

- **API Key Management** — Generering, rotasjon og scoping per leverandør med en dedikert `/dashboard/api-manager`-side
- **Tillatelser på modellnivå** — Begrens API-nøkler til spesifikke modeller (`openai/*`, jokertegnmønstre), med Tillat alt/begrens
- **API Endpoint Protection** — Krev en nøkkel for `/v1/models` og blokker spesifikke leverandører fra oppføringen
- **Auth Guard + CSRF Protection** — Alle dashbordruter beskyttet med `withAuth` mellomvare + CSRF-tokens
- **Rate Limiter** — Per-IP ratebegrensning med konfigurerbare vinduer
- **IP-filtrering** — Tillatelsesliste/blokkeringsliste for tilgangskontroll
- **Prompt Injection Guard** — Sanitisering mot ondsinnede spørsmålsmønstre
- **AES-256-GCM-kryptering** — Legitimasjon kryptert i hvile

</details>

<details>
<summary><b>🛑 6. «Tilbyderen min gikk ned og jeg mistet kodeflyten min» </b></summary>

AI-leverandører kan bli ustabile, returnere 5xx-feil eller nå midlertidige hastighetsgrenser. Hvis en utvikler er avhengig av en enkelt leverandør, blir de avbrutt. Uten strømbrytere kan gjentatte forsøk krasje applikasjonen.

**Hvordan OmniRoute løser det:**

- **Circuit Breaker per leverandør** — Automatisk åpning/lukking med konfigurerbare terskler og nedkjøling (Lukket/Åpen/HalvÅpen)
- **Eksponentiell backoff** — Progressive forsinkelser på nytt forsøk
- **Anti-tordenflokk** — Mutex + semaforbeskyttelse mot samtidige stormer på nytt forsøk
- **Combo Fallback Chains** — Hvis primærleverandøren mislykkes, faller den automatisk gjennom kjeden uten inngrep
- **Combo Circuit Breaker** - Deaktiverer sviktende leverandører automatisk i en kombinasjonskjede
- **Helsedashbord** — Oppetidsovervåking, strømbrytertilstander, sperringer, cachestatistikk, p50/p95/p99 latency

</details>

<details>
<summary><b>🔧 7. "Å konfigurere hvert AI-verktøy er kjedelig og repeterende" </b></summary>

Utviklere bruker Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code... Hvert verktøy trenger en annen konfigurasjon (API-endepunkt, nøkkel, modell). Å konfigurere på nytt når du bytter leverandør eller modell er bortkastet tid.

**Hvordan OmniRoute løser det:**

- **CLI Tools Dashboard** — Dedikert side med ett-klikksoppsett for Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline
- **GitHub Copilot Config Generator** — Genererer `chatLanguageModels.json` for VS-kode med bulkmodellvalg
- **Onboarding Wizard** — Veiledet 4-trinns oppsett for førstegangsbrukere
- **Ett endepunkt, alle modeller** — Konfigurer `http://localhost:20128/v1` én gang, få tilgang til 36+ leverandører

</details>

<details>
<summary><b>🔑 8. "Å administrere OAuth-tokens fra flere leverandører er et helvete" </b></summary>

Claude Code, Codex, Gemini CLI, Copilot – alle bruker OAuth 2.0 med tokens som utløper. Utviklere må re-autentisere hele tiden, håndtere `client_secret is missing`, `redirect_uri_mismatch` og feil på eksterne servere. OAuth på LAN/VPS er spesielt problematisk.

**Hvordan OmniRoute løser det:**

- **Automatisk oppdatering av token** — OAuth-tokener oppdateres i bakgrunnen før utløp
- **OAuth 2.0 (PKCE) innebygd** — Automatisk flyt for Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow
- **Multi-Account OAuth** - Flere kontoer per leverandør via JWT/ID-tokenutvinning
- **OAuth LAN/Remote Fix** — Privat IP-deteksjon for `redirect_uri` + manuell URL-modus for eksterne servere
- **OAuth Behind Nginx** — Bruker `window.location.origin` for omvendt proxy-kompatibilitet
- **Remote OAuth Guide** — Trinn-for-trinn-veiledning for Google Cloud-legitimasjon på VPS/Docker

</details>

<details>
<summary><b>📊 9. "Jeg vet ikke hvor mye jeg bruker eller hvor" </b></summary>

Utviklere bruker flere betalte leverandører, men har ikke noe enhetlig syn på utgifter. Hver leverandør har sitt eget faktureringsdashbord, men det er ingen konsolidert visning. Uventede kostnader kan hope seg opp.

**Hvordan OmniRoute løser det:**

- **Dashboard for kostnadsanalyse** — Kostnadssporing per token og budsjettadministrasjon per leverandør
  – **Budsjettgrenser per nivå** – Utgiftstak per nivå som utløser automatisk fallback
- **Priskonfigurasjon per modell** — Konfigurerbare priser per modell
- **Bruksstatistikk per API-nøkkel** — Antall forespørsler og sist brukte tidsstempel per nøkkel
- **Analytics Dashboard** — Statistiske kort, modellbruksdiagram, leverandørtabell med suksessrater og latens

</details>

<details>
<summary><b>🐛 10. "Jeg kan ikke diagnostisere feil og problemer i AI-anrop" </b></summary>

Når et anrop mislykkes, vet ikke utvikleren om det var en takstgrense, utløpt token, feil format eller leverandørfeil. Fragmenterte logger på tvers av forskjellige terminaler. Uten observerbarhet er feilsøking prøving og feiling.

**Hvordan OmniRoute løser det:**

- **Unified Logs Dashboard** — 4 faner: Forespørselslogger, proxy-logger, revisjonslogger, konsoll
- **Console Log Viewer** — Viser i sanntid i terminalstil med fargekodede nivåer, automatisk rulling, søk, filter
- **SQLite Proxy Logger** — Vedvarende logger som overlever serverstarter
- **Translator Playground** — 4 feilsøkingsmoduser: Playground (formatoversettelse), Chat Tester (tur-retur), Test Bench (batch), Live Monitor (sanntid)
- **Request Telemetri** — p50/p95/p99 latens + X-Request-Id-sporing
- **Filbasert logging med rotasjon** — Konsollinterceptor fanger opp alt til JSON-logg med størrelsesbasert rotasjon

</details>

<details>
<summary><b>🏗️ 11. "Deployering og vedlikehold av gatewayen er kompleks" </b></summary>

Installering, konfigurering og vedlikehold av en AI-proxy på tvers av forskjellige miljøer (lokalt, VPS, Docker, sky) er arbeidskrevende. Problemer som hardkodede baner, `EACCES` på kataloger, portkonflikter og kryssplattformbygg gir friksjon.

**Hvordan OmniRoute løser det:**

- **npm global installasjon** — `npm install -g omniroute && omniroute` — ferdig
- **Docker Multi-Platform** — AMD64 + ARM64 native (Apple Silicon, AWS Graviton, Raspberry Pi)
- **Docker Compose-profiler** — `base` (ingen CLI-verktøy) og `cli` (med Claude Code, Codex, OpenClaw)
- **Electron Desktop App** — Innebygd app for Windows/macOS/Linux med systemstatusfelt, automatisk start, offline-modus
- **Split-Port Mode** — API og Dashboard på separate porter for avanserte scenarier (omvendt proxy, containernettverk)
- **Cloud Sync** — Konfigurer synkronisering på tvers av enheter via Cloudflare Workers
- **DB-sikkerhetskopier** — Automatisk sikkerhetskopiering, gjenoppretting, eksport og import av alle innstillinger

</details>

<details>
<summary><b>🌍 12. "Grensesnittet er kun engelsk, og teamet mitt snakker ikke engelsk" </b></summary>

Lag i ikke-engelsktalende land, spesielt i Latin-Amerika, Asia og Europa, sliter med grensesnitt som kun er på engelsk. Språkbarrierer reduserer bruken og øker konfigurasjonsfeil.

**Hvordan OmniRoute løser det:**

- **Dashboard i18n — 30 språk** — Alle 500+ nøkler oversatt, inkludert arabisk, bulgarsk, dansk, tysk, spansk, finsk, fransk, hebraisk, hindi, ungarsk, indonesisk, italiensk, japansk, koreansk, malaysisk, nederlandsk, norsk, polsk, portugisisk (PT/BR), rumensk, russisk, ukrainsk, ukrainsk, kinesisk, engelsk, kinesisk, ukrainsk, kinesisk, ukrainsk, kinesisk, ukrainsk, kinesisk, ukrainsk, kinesisk
- **RTL-støtte** — Høyre-til-venstre-støtte for arabisk og hebraisk
- **Multi-Language READMEs** - 30 komplette dokumentasjonsoversettelser
- **Språkvelger** — Globusikon i overskriften for sanntidsbytte

</details>

<details>
<summary><b>🔄 13. "Jeg trenger mer enn chat — jeg trenger innebygginger, bilder, lyd" </b></summary>

AI er ikke bare fullføring av chat. Utviklere må generere bilder, transkribere lyd, lage innbygginger for RAG, omrangere dokumenter og moderere innhold. Hver API har et annet endepunkt og format.

**Hvordan OmniRoute løser det:**

- **Innbygging** — `/v1/embeddings` med 6 leverandører og 9+ modeller
- **Bildegenerering** — `/v1/images/generations` med 10 leverandører og 20+ modeller (OpenAI, xAI, Together, Fireworks, Nebius, Hyperbolic, NanoBanana, Antigravity, SD WebUI, ComfyUI)
- **Tekst-til-video** — `/v1/videos/generations` — ComfyUI (AnimateDiff, SVD) og SD WebUI
- **Tekst-til-musikk** — `/v1/music/generations` — ComfyUI (Stable Audio Open, MusicGen)
- **Lydtranskripsjon** — `/v1/audio/transcriptions` — Whisper + Nvidia NIM, HuggingFace, Qwen3
- **Tekst-til-tale** — `/v1/audio/speech` — ElevenLabs, Nvidia NIM, HuggingFace, Coqui, Tortoise, Qwen3, Inworld, Cartesia, PlayHT, + eksisterende leverandører
- **Moderasjoner** — `/v1/moderations` — Innholdssikkerhetssjekker
- **Rerangering** — `/v1/rerank` — Rerangering av dokumentrelevans
- **Responses API** — Full `/v1/responses`-støtte for Codex

</details>

<details>
<summary><b>🧪 14. "Jeg har ingen måte å teste og sammenligne kvalitet på tvers av modeller" </b></summary>

Utviklere ønsker å vite hvilken modell som er best for deres brukssituasjon – kode, oversettelse, resonnement – men det går tregt å sammenligne manuelt. Det finnes ingen integrerte evalueringsverktøy.

**Hvordan OmniRoute løser det:**

- **LLM-evalueringer** — Gyldent sett-testing med 10 forhåndslastede tilfeller som dekker hilsener, matematikk, geografi, kodegenerering, JSON-overholdelse, oversettelse, nedskrivning, sikkerhetsavslag
- **4 matchstrategier** — `exact`, `contains`, `regex`, `custom` (JS-funksjon)
- **Translator Playground Test Bench** — Batchtesting med flere innganger og forventede utganger, sammenligning på tvers av leverandører
- **Chattetester** — Full rundtur med visuell responsgjengivelse
- **Live Monitor** — Sanntidsstrøm av alle forespørsler som strømmer gjennom proxyen

</details>

<details>
<summary><b>📈 15. "Jeg trenger å skalere uten å miste ytelse" </b></summary>

Når forespørselsvolumet vokser, genererer de samme spørsmålene dupliserte kostnader uten å bufre. Uten idempotens, dupliserte forespørsler om avfallsbehandling. Satsgrenser per leverandør må respekteres.

**Hvordan OmniRoute løser det:**

- **Semantisk hurtigbuffer** — To-lags cache (signatur + semantisk) reduserer kostnader og ventetid
- **Request Idempotency** — 5s dedupliseringsvindu for identiske forespørsler
- **Deteksjon av hastighetsgrense** - RPM per leverandør, minimum gap og maksimal samtidig sporing
- **Redigerbare frekvensgrenser** — Konfigurerbare standardinnstillinger i Innstillinger → Motstandsdyktighet med utholdenhet
- **API Key Validation Cache** — 3-lags cache for produksjonsytelse
- **Helsedashbord med telemetri** — p50/p95/p99-forsinkelse, hurtigbufferstatistikk, oppetid

</details>

<details>
<summary><b>🤖 16. "Jeg vil kontrollere modellatferd globalt" </b></summary>

Utviklere som vil ha alle svar på et spesifikt språk, med en bestemt tone, eller som ønsker å begrense resonnement-tokens. Å konfigurere dette i hvert verktøy/hver forespørsel er upraktisk.

**Hvordan OmniRoute løser det:**

- **System Prompt Injection** — Global forespørsel brukt på alle forespørsler
- **Thinking Budget Validation** — Reasoning token allocation control per request (passthrough, auto, custom, adaptive)
- **6 rutingstrategier** — Globale strategier som bestemmer hvordan forespørsler distribueres
- **Wildcard-ruter** — `provider/*`-mønstre ruter dynamisk til enhver leverandør
- **Kombo aktiver/deaktiver veksle** — Veksle kombinasjoner direkte fra dashbordet
- **Tilkobling av leverandør** — Aktiver/deaktiver alle tilkoblinger for en leverandør med ett klikk
- **Blokkerte leverandører** — Ekskluder spesifikke leverandører fra `/v1/models`-oppføringen

</details>

<details>
<summary><b>🧰 17. "Jeg trenger MCP-verktøy som førsteklasses produktegenskaper" </b></summary>

Mange AI-gatewayer avslører MCP bare som en skjult implementeringsdetalj. Team trenger et synlig, håndterbart driftslag.

**Hvordan OmniRoute løser det:**

- MCP vises i dashbordnavigasjons- og endepunktprotokollfanen
- Dedikert MCP-administrasjonsside med prosess, verktøy, omfang og revisjon
- Innebygd hurtigstart for `omniroute --mcp` og klient onboarding

</details>

<details>
<summary><b>🧠 18. "Jeg trenger A2A-orkestrering med synkronisering + strømoppgavestier" </b></summary>

Agentarbeidsflyter trenger både direkte svar og langvarig strømmet utførelse med livssykluskontroll.

**Hvordan OmniRoute løser det:**

- A2A JSON-RPC-endepunkt (`POST /a2a`) med `message/send` og `message/stream`
- SSE-streaming med forplantning av terminaltilstand
- Oppgavelivssyklus-APIer for `tasks/get` og `tasks/cancel`

</details>

<details>
<summary><b>🛰️ 19. "Jeg trenger ekte MCP-prosesshelse, ikke gjettet status" </b></summary>

Operasjonelle team må vite om MCP faktisk er i live, ikke bare om en API er tilgjengelig.

**Hvordan OmniRoute løser det:**

- Runtime hjerteslag-fil med PID, tidsstempler, transport, verktøytelling og omfangsmodus
- MCP status API som kombinerer hjerteslag + nylig aktivitet
- UI-statuskort for prosess/oppetid/hjerteslag

</details>

<details>
<summary><b>📋 20. "Jeg trenger reviderbar MCP-verktøykjøring" </b></summary>

Når verktøy muterer konfigurasjon eller utløser operasjonshandlinger, trenger teamene rettsmedisinsk sporbarhet.

**Hvordan OmniRoute løser det:**

- SQLite-støttet revisjonslogging for MCP-verktøykall
- Filtrerer etter verktøy, suksess/fiasko, API-nøkkel og paginering
- Dashboard revisjonstabell + statistikkendepunkter for automatisering

</details>

<details>
<summary><b>🔐 21. "Jeg trenger scoped MCP-tillatelser per integrasjon" </b></summary>

Ulike klienter bør ha minst privilegert tilgang til verktøykategorier.

**Hvordan OmniRoute løser det:**

- 9 granulære MCP-skoper for kontrollert verktøytilgang
- Håndhevelse av omfang og synlighet i MCP-administrasjonsgrensesnittet
- Sikker standardstilling for operativt verktøy

</details>

<details>
<summary><b>⚙️ 22. "Jeg trenger operasjonelle kontroller uten å omdistribuere" </b></summary>

Lag trenger raske endringer i kjøretiden under hendelser eller kostnadshendelser.

**Hvordan OmniRoute løser det:**

- Bytt kombinasjonsaktivering direkte fra MCP-dashbordet
- Bruk robusthetsprofiler fra forhåndsdefinerte policypakker
- Tilbakestill strømbryterens tilstand fra samme driftspanel

</details>

<details>
<summary><b>🔄 23. «I need live A2A task lifecycle synibility and cancellation»</b></summary>

Uten livssyklussynlighet blir oppgavehendelser vanskelig å triage.

**Hvordan OmniRoute løser det:**

- Oppgaveliste/filtrering etter tilstand/ferdighet med paginering
- Drill-down på oppgavemetadata, hendelser og artefakter
- Sluttpunkt for kansellering av oppgave og UI-handling med bekreftelse

</details>

<details>
<summary><b>🌊 24. «Jeg trenger aktive strømmålinger for A2A-last» </b></summary>

Strømmearbeidsflyter krever operasjonell innsikt i samtidighet og direkteforbindelser.

**Hvordan OmniRoute løser det:**

- Aktive strømtellere integrert i A2A-status
- Tidsstempel for siste oppgave og antall per stat
- A2A dashbordkort for operasjonsovervåking i sanntid

</details>

<details>
<summary><b>🪪 25. "Jeg trenger standard agentoppdagelse for klienter" </b></summary>

Eksterne klienter og orkestratorer trenger maskinlesbare metadata for onboarding.

**Hvordan OmniRoute løser det:**

- Agentkort eksponert på `/.well-known/agent.json`
- Evner og ferdigheter vist i ledelsens brukergrensesnitt
- A2A status API inkluderer oppdagelsesmetadata for automatisering

</details>

<details>
<summary><b>🧭 26. "Jeg trenger protokolloppdagbarhet i produktets UX" </b></summary>

Hvis brukere ikke kan oppdage protokolloverflater, faller kvaliteten på adopsjon og støtte.

**Hvordan OmniRoute løser det:**

- Sidefeltoppføringer for MCP og A2A
- Endpoint-side Protokoller-fane med hurtigstart og status
- Lenker fra oversikt til dedikerte styringsdashboards

</details>

<details>
<summary><b>🧪 27. "Jeg trenger ende-til-ende protokollvalidering med ekte klienter" </b></summary>

Mock-tester er ikke nok til å validere protokollkompatibilitet før utgivelse.

**Hvordan OmniRoute løser det:**

- E2E-suite som starter opp app og bruker ekte MCP SDK-klienttransport
- A2A-klient tester for å oppdage, sende, streame, hente og kansellere flyter
- Krysssjekk påstander mot MCP-revisjon og A2A-oppgave-APIer

</details>

<details>
<summary><b>📡 28. «Jeg trenger enhetlig observerbarhet på tvers av alle grensesnitt» </b></summary>

Å dele observerbarhet etter protokoll skaper blinde flekker og lengre MTTR.

**Hvordan OmniRoute løser det:**

- Samlede dashboards/logger/analyse i ett produkt
- Helse + revisjon + forespørsel om telemetri på tvers av OpenAI-, MCP- og A2A-lag
- Operasjonelle APIer for status og automatisering

</details>

<details>
<summary><b>💼 29. "Jeg trenger én kjøretid for proxy + verktøy + agentorkestrering" </b></summary>

Å kjøre mange separate tjenester øker driftskostnadene og feilmodusene.

**Hvordan OmniRoute løser det:**

- OpenAI-kompatibel proxy, MCP-server og A2A-server i én stabel
- Delt autentisering, robusthet, datalagring og observerbarhet
- Konsekvent policymodell på tvers av alle interaksjonsflater

</details>

<details>
<summary><b>🚀 30. "Jeg trenger å sende agentiske arbeidsflyter uten limkodespredning" </b></summary>

Lag mister hastighet når de setter sammen flere ad-hoc-tjenester og skript.

**Hvordan OmniRoute løser det:**

- Enhetlig endepunktstrategi for kunder og agenter
- Innebygde brukergrensesnitt for protokolladministrasjon og røykvalideringsveier
- Produksjonsklare fundamenter (sikkerhet, logging, robusthet, backup)

</details>

### Eksempel på Playbooks (integrerte brukstilfeller)

**Playbook A: Maksimer betalt abonnement + billig backup**

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

```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 alltid aktiv reservekjede**

```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: Agentoperasjoner med 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
```

---

## ⚡ Hurtigstart

**1. Installer globalt:**

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

🎉 Dashboard åpner kl. `http://localhost:20128`

| Kommando                | Beskrivelse                        |
| ----------------------- | ---------------------------------- |
| `omniroute`             | Start server (standard port 20128) |
| `omniroute --port 3000` | Bruk tilpasset port                |
| `omniroute --no-open`   | Ikke åpne nettleseren automatisk   |
| `omniroute --help`      | Vis hjelp                          |

**2. Koble til en GRATIS leverandør:**

Dashboard → Leverandører → Koble til **Claude-kode** eller **Antigravity** → OAuth-pålogging → Ferdig!

**3. Bruk i CLI-verktøyet:**

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

**Det var det!** Begynn å kode med GRATIS AI-modeller.

**Alternativt – kjør fra kilden:**

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

---

## 🐳 Docker

OmniRoute er tilgjengelig som et offentlig Docker-bilde på [Docker Hub](https://hub.docker.com/r/diegosouzapw/omniroute).

**Rask løp:**

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

**Med miljøfil:**

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

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

| Bilde                    | Tag      | Størrelse | Beskrivelse             |
| ------------------------ | -------- | --------- | ----------------------- |
| `diegosouzapw/omniroute` | `latest` | ~250MB    | Siste stabile utgivelse |
| `diegosouzapw/omniroute` | `1.0.3`  | ~250MB    | Gjeldende versjon       |

---

---

## 🖥️

> 🆕 **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)

---

## 💰 Priser på et øyeblikk

| Nivå              | Leverandør        | Kostnad                       | Kvote Tilbakestill      | Best for             |
| ----------------- | ----------------- | ----------------------------- | ----------------------- | -------------------- |
| **💳 ABONNEMENT** | Claude Code (Pro) | $20/md                        | 5t + ukentlig           | Allerede abonnert    |
|                   | Codex (Pluss/Pro) | $20-200/md                    | 5t + ukentlig           | OpenAI-brukere       |
|                   | Gemini CLI        | **GRATIS**                    | 180K/mnd + 1K/dag       | Alle sammen!         |
|                   | GitHub Copilot    | $10-19/md                     | Månedlig                | GitHub-brukere       |
| **🔑 API NØKKEL** | NVIDIA NIM        | **GRATIS** (1000 studiepoeng) | Engangs                 | Gratis tier testing  |
|                   | DeepSeek          | Betal per bruk                | Ingen                   | Beste pris/kvalitet  |
|                   | Groq              | Gratis lag + betalt           | Begrenset pris          | Ultrarask slutning   |
|                   | xAI (Grok)        | Betal per bruk                | Ingen                   | Grok modeller        |
|                   | Mistral           | Gratis lag + betalt           | Begrenset pris          | Europeisk AI         |
|                   | OpenRouter        | Betal per bruk                | Ingen                   | 100+ modeller        |
| **💰 BILLIG**     | GLM-4.7           | $0,6/1M                       | Daglig 10:00            | Budsjett backup      |
|                   | MiniMax M2.1      | $0,2/1M                       | 5-timers rullende       | Billigste alternativ |
|                   | Kimi K2           | $9/md leilighet               | 10 millioner tokens/mnd | Forutsigbar kostnad  |
| **🆓 GRATIS**     | iFlow             | $0                            | Ubegrenset              | 8 modeller gratis    |
|                   | Qwen              | $0                            | Ubegrenset              | 3 modeller gratis    |
|                   | Kiro              | $0                            | Ubegrenset              | Claude gratis        |

**💡 Profftips:** Start med Gemini CLI (180K gratis/måned) + iFlow (ubegrenset gratis) kombinasjon = $0 kostnad!

---

## 💡 Nøkkelfunksjoner

### 🧠 Kjerneruting og intelligens

| Funksjon                           | Hva det gjør                                                                             |
| ---------------------------------- | ---------------------------------------------------------------------------------------- |
| 🎯 **Smart 4-lags fallback**       | Automatisk rute: Abonnement → API-nøkkel → Billig → Gratis                               |
| 📊 **Sanntidskvotesporing**        | Live tokenantall + tilbakestilt nedtelling per leverandør                                |
| 🔄 **Formatoversettelse**          | OpenAI ↔ Claude ↔ Gemini ↔ Markør ↔ Kiro sømløs + respons sanitization                   |
| 👥 **Støtte for flere kontoer**    | Flere kontoer per leverandør med intelligent utvalg                                      |
| 🔄 **Auto Token Refresh**          | OAuth-tokens oppdateres automatisk med prøv på nytt                                      |
| 🎨 **Egendefinerte kombinasjoner** | 6 strategier: fyll først, round-robin, p2c, tilfeldig, minst brukt, kostnadsoptimalisert |
| 🧩 **Egendefinerte modeller**      | Legg til hvilken som helst modell-ID til en hvilken som helst leverandør                 |
| 🌐 **Wildcard-ruter**              | Ruter `provider/*`-mønstre til enhver leverandør dynamisk                                |
| 🧠 **Tenkebudsjett**               | Passthrough, auto, egendefinerte og adaptive moduser for resonnerende modeller           |
| 🔀 **Model Aliases**               | Auto-forward deprecated model IDs to current replacements (built-in + custom)            |
| ⚡ **Background Degradation**      | Auto-route background tasks (titles, summaries) to cheaper models                        |
| 💬 **Systemprompt-injeksjon**      | Global systemforespørsel brukt på alle forespørsler                                      |
| 📄 **Responses API**               | Full støtte for OpenAI Responses API (`/v1/responses`) for Codex                         |

### 🎵 Multi-Modal APIer

| Funksjon                | Hva det gjør                                           |
| ----------------------- | ------------------------------------------------------ |
| 🖼️ **Bildegenerering**  | `/v1/images/generations` — 4 leverandører, 9+ modeller |
| 📐 **Innbygging**       | `/v1/embeddings` — 6 leverandører, 9+ modeller         |
| 🎤 **Lydtranskripsjon** | `/v1/audio/transcriptions` — Whisper-kompatibel        |
| 🔊 **Tekst-til-tale**   | `/v1/audio/speech` — Multi-leverandør lydsyntese       |
| 🛡️ **Moderasjoner**     | `/v1/moderations` — Innholdssikkerhetssjekker          |
| 🔀 **Omrangering**      | `/v1/rerank` — Rerangering av dokumentrelevans         |

### 🛡️ Spenst og sikkerhet

| Funksjon                          | Hva det gjør                                                                  |
| --------------------------------- | ----------------------------------------------------------------------------- |
| 🔌 **Circuit Breaker**            | Automatisk åpning/lukking per leverandør med konfigurerbare terskler          |
| 🎯 **Endpoint-Aware Models**      | Custom models declare supported endpoints + API format                        |
| 🛡️ **Anti-tordenflokk**           | Mutex + semaforhastighetsgrense for API-nøkkelleverandører                    |
| 🧠 **Semantisk cache**            | To-lags cache (signatur + semantisk) reduserer kostnader og ventetid          |
| ⚡ **Be om idempotens**           | 5s dedup-vindu for dupliserte forespørsler                                    |
| 🔒 **TLS-fingeravtrykkspoofing**  | Omgå TLS-basert botdeteksjon via wreq-js                                      |
| 🌐 **IP-filtrering**              | Tillatelsesliste/blokkeringsliste for API-tilgangskontroll                    |
| 📊 **Redigerbare satsgrenser**    | Konfigurerbar RPM, min gap og maks samtidig på systemnivå                     |
| 💾 **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        |
| 🛡 **API-endepunktbeskyttelse**   | Auth-gate + leverandørblokkering for `/models`-endepunktet                    |
| 🔒 **Proxy-synlighet**            | Fargekodede merker: 🟢 global, 🟡 leverandør, 🔵 per tilkobling med IP-skjerm |
| 🌐 **3-nivå proxy-konfigurasjon** | Konfigurer proxyer på globalt nivå, per leverandør eller per tilkoblingsnivå  |

### 📊 Observerbarhet og analyse

| Funksjon                   | Hva det gjør                                                                        |
| -------------------------- | ----------------------------------------------------------------------------------- |
| 📝 **Be om logging**       | Feilsøkingsmodus med fullstendige forespørsels-/svarlogger                          |
| 💾 **SQLite proxy-logger** | Vedvarende proxy-logger overlever omstart av server                                 |
| 📊 **Analytics Dashboard** | Recharts-drevet: statistikkkort, modellbruksdiagram, leverandørtabell               |
| 📈 **Fremdriftssporing**   | Opt-in SSE-fremdriftshendelser for streaming                                        |
| 🧪 **LLM-evalueringer**    | Gylden sett-testing med 4 kampstrategier                                            |
| 🔍 **Be om telemetri**     | p50/p95/p99 latensaggregering + X-Request-Id-sporing                                |
| 📋 **Logger Dashboard**    | Samlet side med 4 faner: Forespørselslogger, proxy-logger, revisjonslogger, konsoll |
| 🖥️ **Konsollloggvisning**  | Viser i sanntid i terminalstil med nivåfilter, søk, automatisk rulling              |
| 📑 **Filbasert logging**   | Console interceptor fanger opp all utgang til JSON-loggfil med rotasjon             |
| 🏥 **Helse Dashboard**     | Systemoppetid, strømbrytertilstander, sperringer, cachestatistikk                   |
| 💰 **Kostnadssporing**     | Budsjettadministrasjon + priskonfigurasjon per modell                               |

### ☁️ Implementering og synkronisering

| Funksjon                         | Hva det gjør                                                                             |
| -------------------------------- | ---------------------------------------------------------------------------------------- |
| 💾 **Cloud Sync**                | Synkroniser konfigurasjon på tvers av enheter via Cloudflare Workers                     |
| 🌐 **Distribuer hvor som helst** | Localhost, VPS, Docker, Cloudflare Workers                                               |
| 🔑 **API Key Management**        | Generer, roter og omfang API-nøkler per leverandør                                       |
| 🧙 **Onboarding Wizard**         | 4-trinns veiledet oppsett for førstegangsbrukere                                         |
| 🔧 **CLI Tools Dashboard**       | Ett-klikk konfigurer Claude, Codex, Cline, OpenClaw, Kilo, Antigravity                   |
| 🔄 **DB-sikkerhetskopier**       | Automatisk sikkerhetskopiering, gjenoppretting, eksport og import for alle innstillinger |
| 🌐 **Internasjonalisering**      | Full i18n med neste-intl — støtte for engelsk + portugisisk (Brasil)                     |
| 🌍 **Språkvelger**               | Globusikon i overskriften for sanntids språkbytte (🇺🇸/🇧🇷)                                |
| 📂 **Tilpasset datakatalog**     | `DATA_DIR` env var for å overstyre standard `~/.omniroute` lagringsbane                  |

<details>
<summary><b>📖 Funksjonsdetaljer</b></summary>

### 🎯 Smart 4-lags fallback

Lag kombinasjoner med automatisk fallback:

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

### 📊 Sanntidskvotesporing

- Tokenforbruk per leverandør
- Tilbakestill nedtellingen (5 timer, daglig, ukentlig)
- Kostnadsestimat for betalte nivåer
- Månedlige utgiftsrapporter

### 🔄 Formatoversettelse

Sømløs oversettelse mellom formater:

- **OpenAI** ↔ **Claude** ↔ **Gemini** ↔ **OpenAI-svar**
- CLI-verktøyet ditt sender OpenAI-format → OmniRoute oversetter → Leverandøren mottar eget format
- Fungerer med alle verktøy som støtter tilpassede OpenAI-endepunkter
- **Responssanering** - Fjerner ikke-standardfelter for streng OpenAI SDK-kompatibilitet
- **Rollenormalisering** — `developer` → `system` for ikke-OpenAI; `system` → `user` for GLM/ERNIE-modeller
- **Tenk tag-utvinning** — `<think>` blokker → `reasoning_content` for tenkemodeller
- **Strukturert utgang** — `json_schema` → Gemini's `responseMimeType`/`responseSchema`

### 👥 Støtte for flere kontoer

- Legg til flere kontoer per leverandør
- Auto round-robin eller prioritetsbasert ruting
- Tilbakeslag til neste konto når en når kvoten

### 🔄 Automatisk tokenoppdatering

- OAuth-tokens oppdateres automatisk før utløp
- Ingen manuell re-autentisering nødvendig
- Sømløs opplevelse på tvers av alle leverandører

### 🎨 Egendefinerte kombinasjoner

- Lag ubegrensede modellkombinasjoner
- 6 strategier: fyll-først, round-robin, kraft-av-to-valg, tilfeldig, minst brukt, kostnadsoptimalisert
- Del kombinasjoner på tvers av enheter med Cloud Sync

### 🏥 Helse Dashboard

- Systemstatus (oppetid, versjon, minnebruk)
- Strømbrytertilstander per leverandør (lukket/åpen/halvåpen)
- Takstgrensestatus og aktive sperringer
- Signaturbufferstatistikk
- Latency-telemetri (p50/p95/p99) + hurtigbuffer
- Tilbakestill helsestatus med ett klikk

### 🔧 Oversetter Lekeplass

OmniRoute inkluderer en kraftig innebygd oversetterlekeplass med **4 moduser** for feilsøking, testing og overvåking av API-oversettelser:

| Modus               | Beskrivelse                                                                                                                                                                                                                                                            |
| ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **💻 Lekeplass**    | Direkte formatoversettelse – lim inn hvilken som helst API-forespørselstekst og se umiddelbart hvordan OmniRoute oversetter den mellom leverandørformater (OpenAI ↔ Claude ↔ Gemini ↔ Responses API). Inkluderer eksempelmaler og automatisk gjenkjenning av formater. |
| **💬 Chat Tester**  | Send ekte chatteforespørsler gjennom OmniRoute og se hele rundturen: innspillet ditt, den oversatte forespørselen, leverandørens svar og det oversatte svaret tilbake. Uvurderlig for validering av kombinasjonsruting.                                                |
| **🧪 Testbenk**     | Batch-testmodus – definer flere testtilfeller med forskjellige innganger og forventede utganger, kjør dem alle samtidig og sammenlign resultater på tvers av leverandører og modeller.                                                                                 |
| **📱 Live Monitor** | Sanntidsovervåking av forespørsler – se innkommende forespørsler mens de strømmer gjennom OmniRoute, se formatoversettelser som skjer live, og identifiser problemer umiddelbart.                                                                                      |

**Tilgang:** Dashboard → Oversetter (sidefelt)

### 💾 Cloud Sync

- Synkroniser leverandører, kombinasjoner og innstillinger på tvers av enheter
- Automatisk bakgrunnssynkronisering
- Sikker kryptert lagring

</details>

## 🧪 Evalueringer (evalueringer)

OmniRoute inkluderer et innebygd evalueringsrammeverk for å teste LLM-responskvaliteten mot et gyldent sett. Få tilgang til den via **Analytics → Evals** i dashbordet.

### Innebygd gyldent sett

Det forhåndsinstallerte "OmniRoute Golden Set" inneholder 10 testcases som dekker:

- Hilsen, matematikk, geografi, kodegenerering
- JSON-formatoverholdelse, oversettelse, markdown
- Sikkerhetsavslag (skadelig innhold), telling, boolsk logikk

### Evalueringsstrategier

| Strategi   | Beskrivelse                                                           | Eksempel                         |
| ---------- | --------------------------------------------------------------------- | -------------------------------- |
| `exact`    | Utdata må samsvare nøyaktig med                                       | `"4"`                            |
| `contains` | Utdata må inneholde understreng (uavhengig av store og små bokstaver) | `"Paris"`                        |
| `regex`    | Utdata må samsvare med regulært uttrykksmønster                       | `"1.*2.*3"`                      |
| `custom`   | Egendefinert JS-funksjon returnerer true/false                        | `(output) => output.length > 10` |

---

## 📖 Oppsettveiledning

<details>
<summary><b>💳 Abonnementsleverandører</b></summary>

### Claude Code (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
```

**Profftips:** Bruk Opus for komplekse oppgaver, Sonnet for hastighet. OmniRoute sporer kvote per modell!

### OpenAI Codex (Plus/Pro)

```bash
Dashboard → Providers → Connect Codex
→ OAuth login (port 1455)
→ 5-hour + weekly reset

Models:
  cx/gpt-5.2-codex
  cx/gpt-5.1-codex-max
```

### Gemini CLI (GRATIS 180K/måned!)

```bash
Dashboard → Providers → Connect Gemini CLI
→ Google OAuth
→ 180K completions/month + 1K/day

Models:
  gc/gemini-3-flash-preview
  gc/gemini-2.5-pro
```

**Mest verdi:** Enormt gratis nivå! Bruk dette før betalte nivåer.

### GitHub Copilot

```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>🔑 API nøkkelleverandører</b></summary>

### NVIDIA NIM (GRATIS 1000 studiepoeng!)

1. Registrer deg: [build.nvidia.com](https://build.nvidia.com)
2. Få gratis API-nøkkel (1000 slutningspoeng inkludert)
3. Dashboard → Legg til leverandør → NVIDIA NIM:
   - API-nøkkel: `nvapi-your-key`

**Modeller:** `nvidia/llama-3.3-70b-instruct`, `nvidia/mistral-7b-instruct` og 50+ til

**Profftips:** OpenAI-kompatibel API — fungerer sømløst med OmniRoutes formatoversettelse!

### DeepSeek

1. Registrer deg: [platform.deepseek.com](https://platform.deepseek.com)
2. Få API-nøkkel
3. Dashboard → Legg til leverandør → DeepSeek

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

### Groq (gratis nivå tilgjengelig!)

1. Registrer deg: [console.groq.com](https://console.groq.com)
2. Få API-nøkkel (gratis nivå inkludert)
3. Dashboard → Legg til leverandør → Groq

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

**Profftips:** Ultrarask slutning — best for sanntidskoding!

### OpenRouter (100+ modeller)

1. Registrer deg: [openrouter.ai](https://openrouter.ai)
2. Få API-nøkkel
3. Dashboard → Legg til leverandør → OpenRouter

**Modeller:** Få tilgang til 100+ modeller fra alle store leverandører gjennom én enkelt API-nøkkel.

</details>

<details>
<summary><b>💰 Billige leverandører (backup)</b></summary>

### GLM-4.7 (Daglig tilbakestilling, $0,6/1M)

1. Registrer deg: [Zhipu AI](https://open.bigmodel.cn/)
2. Få API-nøkkel fra Coding Plan
3. Dashboard → Legg til API-nøkkel:
   - Leverandør: `glm`
   - API-nøkkel: `your-key`

**Bruk:** `glm/glm-4.7`

**Profftips:** Coding Plan tilbyr 3× kvote til 1/7 kostnad! Tilbakestill daglig 10:00.

### MiniMax M2.1 (5t tilbakestilling, $0,20/1M)

1. Registrer deg: [MiniMax](https://www.minimax.io/)
2. Få API-nøkkel
3. Dashboard → Legg til API-nøkkel

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

**Profftips:** Billigste alternativet for lang kontekst (1M tokens)!

### Kimi K2 ($9/mnd leilighet)

1. Abonner: [Moonshot AI](https://platform.moonshot.ai/)
2. Få API-nøkkel
3. Dashboard → Legg til API-nøkkel

**Bruk:** `kimi/kimi-latest`

**Profftips:** Fast $9/måned for 10M tokens = $0,90/1M effektiv kostnad!

</details>

<details>
<summary><b>🆓 GRATIS Leverandører (Emergency Backup)</b></summary>

### iFlow (8 GRATIS modeller)

```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 GRATIS modeller)

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

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

### Kiro (Claude FREE)

```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>🎨 Lag kombinasjoner</b></summary>

### Eksempel 1: Maksimer abonnement → Billig sikkerhetskopi

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

### Eksempel 2: Kun gratis (nullkostnad)

```
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-integrasjon</b></summary>

### Markør IDE

```
Settings → Models → Advanced:
  OpenAI API Base URL: http://localhost:20128/v1
  OpenAI API Key: [from OmniRoute dashboard]
  Model: cc/claude-opus-4-6
```

### Claude Code

Bruk **CLI Tools**-siden i dashbordet for ett-klikks konfigurasjon, eller rediger `~/.claude/settings.json` manuelt.

### Codex CLI

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

codex "your prompt"
```

### OpenClaw

**Alternativ 1 – Dashboard (anbefalt):**

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

**Alternativ 2 — Manuell:** Rediger `~/.openclaw/openclaw.json`:

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

> **Merk:** OpenClaw fungerer bare med lokale OmniRoute. Bruk `127.0.0.1` i stedet for `localhost` for å unngå problemer med IPv6-oppløsning.

### Cline / Fortsett / RooCode

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

</details>

---

## 🐛 Feilsøking

<details>
<summary><b>Klikk for å utvide feilsøkingsveiledningen</b></summary>

**«Språkmodellen ga ikke meldinger»**

- Leverandørkvoten er oppbrukt → Sjekk dashboardkvotesporing
- Løsning: Bruk kombinasjonsalternativ eller bytt til et billigere nivå

**Satsbegrensning**

- Abonnementskvote ut → Fallback til GLM/MiniMax
- Legg til kombinasjon: `cc/claude-opus-4-6 → glm/glm-4.7 → if/kimi-k2-thinking`

**OAuth-token er utløpt**

- Automatisk oppdatering av OmniRoute
- Hvis problemene vedvarer: Dashboard → Leverandør → Koble til på nytt

**Høye kostnader**

- Sjekk bruksstatistikk i Dashboard → Kostnader
- Bytt primærmodell til GLM/MiniMax
- Bruk gratis nivå (Gemini CLI, iFlow) for ikke-kritiske oppgaver

**Dashboard åpnes på feil port**

- Sett `PORT=20128` og `NEXT_PUBLIC_BASE_URL=http://localhost:20128`

**Skysynkroniseringsfeil**

- Bekreft at `BASE_URL` peker på løpeforekomsten din
- Bekreft `CLOUD_URL` poeng til det forventede skyendepunktet
- Hold `NEXT_PUBLIC_*` verdier på linje med verdiene på tjenersiden

**Første pålogging fungerer ikke**

- Sjekk `INITIAL_PASSWORD` i `.env`
- Hvis det ikke er angitt, er reservepassordet `123456`

**Ingen forespørselslogger**

- Sett `ENABLE_REQUEST_LOGS=true` i `.env`

**Test viser «Ugyldig» for OpenAI-kompatible leverandører**

- Mange leverandører avslører ikke et `/models`-endepunkt
- OmniRoute v1.0.6+ inkluderer reservevalidering via chatfullføringer
- Sørg for at basis-URL inkluderer suffikset `/v1`

### 🔐 OAuth

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

> **⚠️ VIKTIG for bruk av OmniRoute med VPS/Docker/server-fjernkontroll**

### OAuth

Os testedores **Antigravity** og **Gemini CLI** usam **Google OAuth 2.0** for autenticação. O Google exige que a `redirect_uri` usada no fluxo OAuth seja **exatamente** uma das URIs pre-cadastradas no Google Cloud Console do aplicativo.

Som credenciais OAuth embutidas no OmniRoute estão cadastradas **apenas para `localhost`**. Quando você acessa o OmniRoute em um servidor remoto (eks: `https://omniroute.meuservidor.com`), o Google avviser autenticação com:

```
Error 400: redirect_uri_mismatch
```

### Løsning: Konfigurer OAuth-tilbehør

Você precisa criar um **OAuth 2.0 Client ID** no Google Cloud Console com en URI for seu service.

#### Passo a passo

**1. Tilgang til Google Cloud Console**

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

**2. Crie um novo OAuth 2.0 Client ID**

- Klikk dem **"+ Opprett legitimasjon"** → **"OAuth-klient-ID"**
- Tipo de aplicativo: **"Nettapplikasjon"**
- Navn: escolha qualquer nome (eks.: `OmniRoute Remote`)

**3. Adicione som autorisert omdirigerings-URI**

Ingen campo **"Authorized redirect URIs"**, adicione:

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

> Substitua `seu-servidor.com` pelo domínio ou IP do seu servidor (inclua a porta se necessário, ex: `http://45.33.32.156:20128/callback`).

**4. Salve e copy as credenciais**

Após criar, o Google mostrará o **Client ID** e o **Client Secret**.

**5. Konfigurer som 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**

Dashboard → Leverandører → Antigravity (ou Gemini CLI) → OAuth

Agora o Google redirecionará corretamente para `https://seu-servidor.com/callback` e autenticação funcionará.

---

### Midlertidig midlertidig løsning (som konfigureres på forhånd)

Se não quiser criar credenciais próprias agora, ainda é possível usar o fluxo **manual de URL**:

1. O OmniRoute abrirá en URL fra autorização til Google
2. Após você autorizar, o Google tentará redirecionar for `localhost` (que falha no servidor remoto)
3. **Kopier en URL fullført** da barra de endereço do seu nettleseren (mesmo que a página não carregue)
4. Cole essa URL no campo que aparece no modal de conexão do OmniRoute
5. Klikk på **"Koble til"**

> Este workaround funciona porque or código de autorização na URL é válido independente do redirect ter carregado or não.

</details>

---

## 🛠️

- **Kjøretid**: Node.js 18–22 LTS (⚠️ Node.js 24+ støttes **ikke** — `better-sqlite3` native binærfiler er inkompatible)
- **Språk**: TypeScript 5.9 — **100 % TypeScript** på tvers av `src/` og `open-sse/` (v1.0.6)
- **Rammeverk**: Next.js 16 + React 19 + Tailwind CSS 4
- **Database**: LowDB (JSON) + SQLite (domenetilstand + proxy-logger)
- **Streaming**: Server-sendte hendelser (SSE)
- **Auth**: OAuth 2.0 (PKCE) + JWT + API-nøkler
- **Test**: Node.js-testløper (368+ enhetstester)
- **CI/CD**: GitHub-handlinger (automatisk npm-publisering + Docker Hub ved utgivelse)
- **Nettsted**: [omniroute.online](https://omniroute.online)
- **Pakke**: [npmjs.com/package/omniroute](https://www.npmjs.com/package/omniroute)
- **Dokker**: [hub.docker.com/r/diegosouzapw/omniroute](https://hub.docker.com/r/diegosouzapw/omniroute)
- **Resiliens**: Strømbryter, eksponentiell backoff, anti-trdnende flokk, TLS-spoofing

---

## 📖 Dokumentasjon

| Dokument                                     | Beskrivelse                                                |
| -------------------------------------------- | ---------------------------------------------------------- |
| [User Guide](docs/USER_GUIDE.md)             | Leverandører, kombinasjoner, CLI-integrasjon, distribusjon |
| [API Reference](docs/API_REFERENCE.md)       | Alle endepunkter med eksempler                             |
| [Troubleshooting](docs/TROUBLESHOOTING.md)   | Vanlige problemer og løsninger                             |
| [Architecture](docs/ARCHITECTURE.md)         | Systemarkitektur og innvendig                              |
| [Contributing](CONTRIBUTING.md)              | Utviklingsoppsett og retningslinjer                        |
| [OpenAPI Spec](docs/openapi.yaml)            | OpenAPI 3.0-spesifikasjon                                  |
| [Security Policy](SECURITY.md)               | Sårbarhetsrapportering og sikkerhetspraksis                |
| [VM Deployment](docs/VM_DEPLOYMENT_GUIDE.md) | Komplett guide: VM + nginx + Cloudflare-oppsett            |
| [Features Gallery](docs/FEATURES.md)         | Visuell dashbordomvisning med skjermbilder                 |

### 📸 Forhåndsvisning av dashbord

<details>
<summary><b>Klikk for å se skjermbilder av dashbordet</b></summary>

| Side              | Skjermbilde                                       |
| ----------------- | ------------------------------------------------- |
| **Tilbydere**     | ![Providers](docs/screenshots/01-providers.png)   |
| **Komboer**       | ![Combos](docs/screenshots/02-combos.png)         |
| **Analyse**       | ![Analytics](docs/screenshots/03-analytics.png)   |
| **Helse**         | ![Health](docs/screenshots/04-health.png)         |
| **Oversetter**    | ![Translator](docs/screenshots/05-translator.png) |
| **Innstillinger** | ![Settings](docs/screenshots/06-settings.png)     |
| **CLI-verktøy**   | ![CLI Tools](docs/screenshots/07-cli-tools.png)   |
| **Brukslogger**   | ![Usage](docs/screenshots/08-usage.png)           |
| **Endepunkt**     | ![Endpoint](docs/screenshots/09-endpoint.png)     |

</details>

---

## 🗺️

OmniRoute har **210+ funksjoner planlagt** på tvers av flere utviklingsfaser. Her er nøkkelområdene:

| Kategori                         | Planlagte funksjoner | Høydepunkter                                                                                   |
| -------------------------------- | -------------------- | ---------------------------------------------------------------------------------------------- |
| 🧠 **Routing og intelligens**    | 25+                  | Ruting med lavest ventetid, tag-basert ruting, forhåndskontroll av kvoter, valg av P2C-konto   |
| 🔒 **Sikkerhet og overholdelse** | 20+                  | SSRF-herding, tilsløring av legitimasjon, hastighetsgrense per endepunkt, styringsnøkkelomfang |
| 📊 **Observerbarhet**            | 15+                  | OpenTelemetry-integrasjon, kvoteovervåking i sanntid, kostnadssporing per modell               |
| 🔄 **Tilbyderintegrasjoner**     | 20+                  | Dynamisk modellregister, leverandørnedkjøling, multi-konto Codex, Copilot-kvoteparsing         |
| ⚡ **Ytelse**                    | 15+                  | Dobbelt hurtigbufferlag, promptbuffer, svarbuffer, streaming keepalive, batch API              |
| 🌐 **Økosystem**                 | 10+                  | WebSocket API, config hot-reload, distribuert config store, kommersiell modus                  |

### 🔜 Kommer snart

- 🔗 **OpenCode Integration** — Innebygd leverandørstøtte for OpenCode AI-kodings-IDE
- 🔗 **TRAE-integrasjon** — Full støtte for utviklingsrammeverket for TRAE AI
- 📦 **Batch API** — Asynkron batchbehandling for bulkforespørsler
- 🎯 **Tag-basert ruting** — Ruteforespørsler basert på tilpassede tagger og metadata
- 💰 **Laveste kostnadsstrategi** — Velg automatisk den billigste tilgjengelige leverandøren

> 📝 Full funksjonsspesifikasjoner tilgjengelig i [link](docs/new-features/) (217 detaljerte spesifikasjoner)

---

## 👥 Bidragsytere

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

### Hvordan bidra

1. Fordel depotet
2. Lag din funksjonsgren (`git checkout -b feature/amazing-feature`)
3. Bekreft endringene dine (`git commit -m 'Add amazing feature'`)
4. Skyv til grenen (`git push origin feature/amazing-feature`)
5. Åpne en pull-forespørsel

Se [CONTRIBUTING.md](CONTRIBUTING.md) for detaljerte retningslinjer.

### Slipper en ny versjon

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

---

## 📊 Stjernehistorie

## Stargazers over time

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

## 🙏 Anerkjennelser

Spesiell takk til **[9router](https://github.com/decolua/9router)** av **[decolua](https://github.com/decolua)** — det originale prosjektet som inspirerte denne gaffelen. OmniRoute bygger på det utrolige grunnlaget med tilleggsfunksjoner, multimodale APIer og en full TypeScript-omskriving.

Spesiell takk til **[CLIProxyAPI](https://github.com/router-for-me/CLIProxyAPI)** — den originale Go-implementeringen som inspirerte denne JavaScript-porten.

---

## 📄 Lisens

MIT-lisens - se [LICENSE](LICENSE) for detaljer.

---

<div align="center">
  <sub>Bygget med ❤️ for utviklere som koder 24/7</sub>
  <br/>
  <sub><a href="https://omniroute.online">omniroute.online</a></sub>
</div>
