Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 49 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,54 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

---

## [0.8.5] — 2026-02-17

### Added

- 🔒 **TLS fingerprint spoofing** — Implement browser-like TLS fingerprinting via `wreq-js` to bypass bot detection on providers that enforce TLS client fingerprint checks (`3dd0cc1`, PR #52)
- 💾 **SQLite proxy log persistence** — Proxy request/response logs now persist to SQLite database, surviving server restarts. Previously, logs were lost on restart (`f1664fe`, PR #53)
- 📋 **Unified test logging** — Shared `Logger` + Proxy logging infrastructure for all provider connection test flows. Consistent log formatting across batch and individual tests (`bce302e`, PR #55)

### Refactored

- 🔷 **Full TypeScript migration — `src/`** — Migrated the entire `src/` directory from JavaScript to TypeScript. All `.js`/`.jsx` files converted to `.ts`/`.tsx` with proper type annotations across API routes, lib modules, components, services, stores, domain layer, and shared utilities (`d0ca595`)
- **Wave 1**: Shared component interfaces + EventTarget fixes (`dfdd2a2`)
- **Wave 2**: Utils & services typed fields, Zustand stores, logger, sync scheduler (`89dd107`, `b2907cd`)
- **Wave 3a**: Lib layer, DB, compliance, domain layer typed (`9e13fe2`)
- **Wave 3b**: Usage, CLI runtime, SSE auth/logger typed (`a291abd`)
- **Wave 3c**: OAuth services + server utils typed (`d62cf8d`)
- **Wave 4a**: 7 API routes — providers, cli-tools, oauth (`7cdb923`)
- **Wave 4b**: 7 more API routes — providers, test, usage, nodes (`5592c2e`)
- **Wave 4c**: 8 files — components, SSE handlers, services (`d8ce9dc`)
- **Dashboard hardening**: Resolve all TypeScript errors across dashboard pages (`7a463a3`, PR #61)
- 🔷 **Full TypeScript migration — `open-sse/`** — Migrated all 94 `.js` files in the SSE routing engine to TypeScript (PR #62)
- **Phase 1**: Rename all 94 `.js` → `.ts` files (`256e443`)
- **Phase 6**: Reduce `@ts-ignore` from 231 → 186 with targeted fixes (`6a54b84`)
- **Phase 7**: Eliminate ALL `@ts-ignore` annotations (186 → 0) and ALL TypeScript errors (237 → 0) — zero `@ts-ignore`, zero errors (`7b37a3c`)
- Typing strategies: `Record<string, any>` for dynamic objects, optional function params, `as any` casts for custom Error/Array properties, `declare var EdgeRuntime` for edge compatibility, proper `fs`/`path` imports

### Fixed

- 🐛 **Qwen token refresh** — Detect `invalid_request` as unrecoverable error and switch broken test endpoints to `checkExpiry` method instead of failing silently (`1e0ffbc`, PR #60)
- 🐛 **VPS batch test compatibility** — Eliminate HTTP self-calls in batch provider connection tests for VPS environments where localhost is unreachable (`a3bbbb5`, PR #54)
- 🐛 **E2E test assertions** — Correct API endpoints and response format assertions in end-to-end tests (`92b5e66`)
- 🐛 **CI coverage thresholds** — Lower coverage thresholds, use production server for E2E, block ESLint major upgrades from breaking CI (`3ca4b6b`, PR #51)

### Changed

- 📖 **Documentation update** — Updated all documentation to reflect JS → TS migration, corrected file extensions and import paths (`7ff8aa2`)
- ⬆️ **CI/CD** — Bump `actions/checkout` v4 → v6, `actions/setup-node` v4 → v6, `peter-evans/dockerhub-description` v4 → v5

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

This line duplicates information about CI/CD dependency bumps that is already listed in the 'Dependencies' section. To keep the changelog concise and avoid redundancy, it's best to list these updates in only one section. I recommend removing this line from the 'Changed' section.


### Dependencies

- ⬆️ `undici` 7.21.0 → 7.22.0 (production)
- ⬆️ `actions/checkout` 4 → 6
- ⬆️ `actions/setup-node` 4 → 6
- ⬆️ `peter-evans/dockerhub-description` 4 → 5
- 🚫 `eslint` 10.0.0 blocked — major version incompatible with `eslint-config-next`

Copilot AI Feb 17, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The changelog entry “eslint 10.0.0 blocked” appears incorrect because the repo currently depends on eslint ^10.0.0. If the intent is to block a newer major (e.g., eslint 11+) or to pin eslint to a range, update this line to match the actual dependency policy/versioning.

Suggested change
- 🚫 `eslint` 10.0.0 blocked — major version incompatible with `eslint-config-next`
- 🚫 `eslint` 11.x blocked — major version incompatible with `eslint-config-next`

Copilot uses AI. Check for mistakes.

---

## [0.8.0] — 2026-02-16

### Added
Expand Down Expand Up @@ -143,6 +191,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

---

[0.8.5]: https://github.com/diegosouzapw/OmniRoute/compare/v0.8.0...v0.8.5
[0.8.0]: https://github.com/diegosouzapw/OmniRoute/compare/v0.7.0...v0.8.0
[0.7.0]: https://github.com/diegosouzapw/OmniRoute/compare/v0.6.0...v0.7.0
[0.6.0]: https://github.com/diegosouzapw/OmniRoute/compare/v0.5.0...v0.6.0
Expand Down
90 changes: 64 additions & 26 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

**Never stop coding. Auto-route to FREE & cheap AI models with smart fallback.**

**36+ Providers • Embeddings • Image Generation • Think Tag Parsing**
**36+ Providers • Embeddings • Image Generation • Audio • Reranking • Full TypeScript**

**Free AI Provider for OpenClaw.**

Expand Down Expand Up @@ -158,31 +158,69 @@ docker compose --profile cli up -d
| Image | Tag | Size | Description |
| ------------------------ | -------- | ------ | --------------------- |
| `diegosouzapw/omniroute` | `latest` | ~250MB | Latest stable release |
| `diegosouzapw/omniroute` | `0.6.0` | ~250MB | Current version |
| `diegosouzapw/omniroute` | `0.8.5` | ~250MB | Current version |

---

## 💡 Key Features

| Feature | What It Does |
| ------------------------------- | --------------------------------------------- |
| 🎯 **Smart 3-Tier Fallback** | Auto-route: Subscription → Cheap → Free |
| 📊 **Real-Time Quota Tracking** | Live token count + reset countdown |
| 🔄 **Format Translation** | OpenAI ↔ Claude ↔ Gemini seamless |
| 👥 **Multi-Account Support** | Multiple accounts per provider |
| 🔄 **Auto Token Refresh** | OAuth tokens refresh automatically |
| 🎨 **Custom Combos** | Create unlimited model combinations |
| 🧩 **Custom Models** | Add any model ID to any provider |
| 📝 **Request Logging** | Debug mode with full request/response logs |
| 💾 **Cloud Sync** | Sync config across devices |
| 📊 **Usage Analytics** | Track tokens, cost, trends over time |
| 🌐 **Deploy Anywhere** | Localhost, VPS, Docker, Cloudflare Workers |
| 🔌 **Circuit Breaker** | Auto-open/close per-provider with cooldowns |
| 🛡️ **Anti-Thundering Herd** | Mutex + auto rate-limit for API key providers |
| 🧠 **Semantic Cache** | Two-tier cache reduces cost & latency |
| ⚡ **Request Idempotency** | 5s dedup window for duplicate requests |
| 📈 **Progress Tracking** | Opt-in SSE progress events for streaming |
| 🧪 **LLM Evaluations** | Golden set testing with 4 match strategies |
### 🧠 Core Routing & Intelligence

| Feature | What It Does |
| ------------------------------- | --------------------------------------------------------------------------------- |
| 🎯 **Smart 4-Tier Fallback** | Auto-route: Subscription → API Key → Cheap → Free |
| 📊 **Real-Time Quota Tracking** | Live token count + reset countdown per provider |
| 🔄 **Format Translation** | OpenAI ↔ Claude ↔ Gemini ↔ Cursor ↔ Kiro seamless |
| 👥 **Multi-Account Support** | Multiple accounts per provider with P2C selection |
| 🔄 **Auto Token Refresh** | OAuth tokens refresh automatically with retry |
| 🎨 **Custom Combos** | 6 strategies: priority, weighted, round-robin, random, least-used, cost-optimized |
| 🧩 **Custom Models** | Add any model ID to any provider |
| 🌐 **Wildcard Router** | Route `provider/*` patterns to any provider dynamically |
| 🧠 **Thinking Budget** | Passthrough, auto, custom, and adaptive modes for reasoning models |
| 💬 **System Prompt Injection** | Global system prompt applied across all requests |
| 📄 **Responses API** | Full OpenAI Responses API (`/v1/responses`) support for Codex |

### 🎵 Multi-Modal APIs

| Feature | What It Does |
| -------------------------- | --------------------------------------------------- |
| 🖼️ **Image Generation** | `/v1/images/generations` — 4 providers, 9+ models |
| 📐 **Embeddings** | `/v1/embeddings` — 6 providers, 9+ models |
| 🎤 **Audio Transcription** | `/v1/audio/transcriptions` — Whisper-compatible |
| 🔊 **Text-to-Speech** | `/v1/audio/speech` — Multi-provider audio synthesis |
| 🛡️ **Moderations** | `/v1/moderations` — Content safety checks |
| 🔀 **Reranking** | `/v1/rerank` — Document relevance reranking |

### 🛡️ Resilience & Security

| Feature | What It Does |
| ------------------------------- | ------------------------------------------------------------ |
| 🔌 **Circuit Breaker** | Auto-open/close per-provider with configurable thresholds |
| 🛡️ **Anti-Thundering Herd** | Mutex + semaphore rate-limit for API key providers |
| 🧠 **Semantic Cache** | Two-tier cache (signature + semantic) reduces cost & latency |
| ⚡ **Request Idempotency** | 5s dedup window for duplicate requests |
| 🔒 **TLS Fingerprint Spoofing** | Bypass TLS-based bot detection via wreq-js |
| 🌐 **IP Filtering** | Allowlist/blocklist for API access control |
| 📋 **Compliance Audit Log** | Tamper-proof request logs with opt-out per API key |
Comment on lines +196 to +204

Copilot AI Feb 17, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The “Compliance Audit Log” row is misleading: the codebase’s audit_log is for administrative actions (settings/apiKey/server events), not “tamper-proof request logs”. If you mean request/usage/proxy logging with per-key opt-out (noLog), consider renaming this feature or updating the description to reflect admin audit logging + per-API-key logging opt-out accurately.

Suggested change
| Feature | What It Does |
| ------------------------------- | ------------------------------------------------------------ |
| 🔌 **Circuit Breaker** | Auto-open/close per-provider with configurable thresholds |
| 🛡️ **Anti-Thundering Herd** | Mutex + semaphore rate-limit for API key providers |
| 🧠 **Semantic Cache** | Two-tier cache (signature + semantic) reduces cost & latency |
| ⚡ **Request Idempotency** | 5s dedup window for duplicate requests |
| 🔒 **TLS Fingerprint Spoofing** | Bypass TLS-based bot detection via wreq-js |
| 🌐 **IP Filtering** | Allowlist/blocklist for API access control |
| 📋 **Compliance Audit Log** | Tamper-proof request logs with opt-out per API key |
| Feature | What It Does |
| ------------------------------- | ---------------------------------------------------------------------------- |
| 🔌 **Circuit Breaker** | Auto-open/close per-provider with configurable thresholds |
| 🛡️ **Anti-Thundering Herd** | Mutex + semaphore rate-limit for API key providers |
| 🧠 **Semantic Cache** | Two-tier cache (signature + semantic) reduces cost & latency |
| ⚡ **Request Idempotency** | 5s dedup window for duplicate requests |
| 🔒 **TLS Fingerprint Spoofing** | Bypass TLS-based bot detection via wreq-js |
| 🌐 **IP Filtering** | Allowlist/blocklist for API access control |
| 📋 **Admin Audit Log & Log Opt-out** | Immutable log of admin actions (settings/API keys/server events) + per-API-key opt-out for request/proxy logging |

Copilot uses AI. Check for mistakes.

### 📊 Observability & Analytics

| Feature | What It Does |
| ------------------------ | ------------------------------------------------------ |
| 📝 **Request Logging** | Debug mode with full request/response logs |
| 💾 **SQLite Proxy Logs** | Persistent proxy logs survive server restarts |
| 📊 **Usage Analytics** | Track tokens, cost, trends over time |
| 📈 **Progress Tracking** | Opt-in SSE progress events for streaming |
| 🧪 **LLM Evaluations** | Golden set testing with 4 match strategies |
| 🔍 **Request Telemetry** | p50/p95/p99 latency aggregation + X-Request-Id tracing |

### ☁️ Deployment & Sync

| Feature | What It Does |
| ------------------------- | ------------------------------------------------- |
| 💾 **Cloud Sync** | Sync config across devices via Cloudflare Workers |
| 🌐 **Deploy Anywhere** | Localhost, VPS, Docker, Cloudflare Workers |
| 🔑 **API Key Management** | Generate, rotate, and scope API keys per provider |

---

Expand Down Expand Up @@ -254,17 +292,17 @@ registerSuite({
## 🛠️ Tech Stack

- **Runtime**: Node.js 20+

Copilot AI Feb 17, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

README now states Node.js 20+ runtime, but the repo’s declared engine requirement is still >=18.0.0 (package.json). This mismatch can confuse users and tooling; either adjust the README runtime line to match the supported engines, or update package.json engines to reflect the real minimum Node version.

Suggested change
- **Runtime**: Node.js 20+
- **Runtime**: Node.js 18+ (recommended: 20+)

Copilot uses AI. Check for mistakes.
- **Language**: TypeScript 5.9 (src/) + JavaScript (open-sse/)
- **Language**: TypeScript 5.9 — **100% TypeScript** across `src/` and `open-sse/` (v0.8.5)
- **Framework**: Next.js 16 + React 19 + Tailwind CSS 4
- **Database**: LowDB (JSON) + SQLite (domain state)
- **Database**: LowDB (JSON) + SQLite (domain state + proxy logs)
- **Streaming**: Server-Sent Events (SSE)
- **Auth**: OAuth 2.0 (PKCE) + JWT + API Keys
- **Testing**: Node.js test runner (368+ unit tests)
- **CI/CD**: GitHub Actions (auto npm publish on release)
- **CI/CD**: GitHub Actions (auto npm publish + Docker Hub on release)
- **Website**: [omniroute.online](https://omniroute.online)
- **Package**: [npmjs.com/package/omniroute](https://www.npmjs.com/package/omniroute)
- **Docker**: [hub.docker.com/r/diegosouzapw/omniroute](https://hub.docker.com/r/diegosouzapw/omniroute)
- **Resilience**: Circuit breaker, exponential backoff, anti-thundering herd
- **Resilience**: Circuit breaker, exponential backoff, anti-thundering herd, TLS spoofing

---

Expand Down Expand Up @@ -309,7 +347,7 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for detailed guidelines.

```bash
# Create a release — npm publish happens automatically
gh release create v0.8.0 --title "v0.8.0" --generate-notes
gh release create v0.8.5 --title "v0.8.5" --generate-notes
```

---
Expand Down
Loading