diff --git a/AGENTS.md b/AGENTS.md index 10b8ffa700e1..85c2a7d4a398 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -47,7 +47,7 @@ Repository map and Reference Documentation sections below. ## Project at a Glance -**OmniRoute** โ€” unified AI proxy/router. One endpoint, 370 LLM providers, auto-fallback. +**OmniRoute** โ€” unified AI proxy/router. One endpoint, 372 LLM providers, auto-fallback. | Layer | Location | Purpose | | ------------- | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | diff --git a/README.md b/README.md index fc0e3367be7c..6b7e687bb652 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ # ๐Ÿš€ OmniRoute โ€” The Free AI Gateway -OmniRoute โ€” Never stop coding. Every AI tool โ†’ 370 providers โ€” 150+ free โ€” through one endpoint. Claude Code, Codex, Cursor, Cline, Copilot & Antigravity into FREE Claude / GPT / Gemini with auto-fallback. RTK + Caveman stacked compression saves 15โ€“95% tokens (~89% avg) โ€” never hit limits. 370 AI providers ยท 150+ free tiers ยท ~1.62B free tokens/mo ยท 19 routing strategies ยท $0 to start. +OmniRoute โ€” Never stop coding. Every AI tool โ†’ 372 providers โ€” 150+ free โ€” through one endpoint. Claude Code, Codex, Cursor, Cline, Copilot & Antigravity into FREE Claude / GPT / Gemini with auto-fallback. RTK + Caveman stacked compression saves 15โ€“95% tokens (~89% avg) โ€” never hit limits. 372 AI providers ยท 150+ free tiers ยท ~1.62B free tokens/mo ยท 19 routing strategies ยท $0 to start. @@ -237,7 +237,7 @@ curl http://localhost:20128/v1/chat/completions \ -The Promise โ€” One endpoint and 370 providers. Automatic fallback keeps routing while another healthy target is available. Six pillars: resilient fallback across 370 providers ยท up to 95% token savings on eligible workloads ยท $0 to start with 150+ free tiers and 54 recurring/keyless free-forever providers ยท 36 CLI/agent integrations through one config ยท OpenAI, Claude, Gemini and Responses API compatibility at /v1 ยท production controls including circuit breakers, TLS stealth, MCP 110 tools, A2A, memory, guardrails, evals and 39,000+ static test declarations across 5,100+ tracked test files. +The Promise โ€” One endpoint and 372 providers. Automatic fallback keeps routing while another healthy target is available. Six pillars: resilient fallback across 372 providers ยท up to 95% token savings on eligible workloads ยท $0 to start with 150+ free tiers and 54 recurring/keyless free-forever providers ยท 36 CLI/agent integrations through one config ยท OpenAI, Claude, Gemini and Responses API compatibility at /v1 ยท production controls including circuit breakers, TLS stealth, MCP 110 tools, A2A, memory, guardrails, evals and 39,000+ static test declarations across 5,100+ tracked test files.

@@ -492,7 +492,7 @@ All **19** strategies โ€” mix & match per combo step: -What sets OmniRoute apart โ€” a dated feature snapshot vs 9router, OpenRouter, CLIProxyAPI and LiteLLM across 13 capabilities. OmniRoute: 370 providers, 150+ free tiers built in, 19 routing strategies, 12-engine token compression, built-in MCP server with 110 tools, A2A agent protocol, persistent memory, guardrails, cloud agents, TLS fingerprint stealth, Desktop/Termux/PWA and 42 i18n UI locales. OmniRoute is MIT-licensed and self-hostable. Competitor capabilities and counts may change; see the linked methodology. +What sets OmniRoute apart โ€” a dated feature snapshot vs 9router, OpenRouter, CLIProxyAPI and LiteLLM across 13 capabilities. OmniRoute: 372 providers, 150+ free tiers built in, 19 routing strategies, 12-engine token compression, built-in MCP server with 110 tools, A2A agent protocol, persistent memory, guardrails, cloud agents, TLS fingerprint stealth, Desktop/Termux/PWA and 42 i18n UI locales. OmniRoute is MIT-licensed and self-hostable. Competitor capabilities and counts may change; see the linked methodology. ๐Ÿ“Š Full methodology & per-feature detail vs 9router, OpenRouter, CLIProxyAPI & LiteLLM โ†’ [`docs/comparison/OMNIROUTE_VS_ALTERNATIVES.md`](docs/comparison/OMNIROUTE_VS_ALTERNATIVES.md) diff --git a/changelog.d/features/15173-codebuddy-intl-provider.md b/changelog.d/features/15173-codebuddy-intl-provider.md new file mode 100644 index 000000000000..f2753a5ec14a --- /dev/null +++ b/changelog.d/features/15173-codebuddy-intl-provider.md @@ -0,0 +1,4 @@ +# CodeBuddy International (codebuddy-intl) Provider + +Added the CodeBuddy International (`codebuddy.ai`) provider under the `cbai` alias (#15173). +Parametrizes the shared CodeBuddy device-auth flow, executor, token refresh, and quota fetcher by realm. diff --git a/config/quality/eslint-suppressions.json b/config/quality/eslint-suppressions.json index f20888c04c60..8cbc6474a0c3 100644 --- a/config/quality/eslint-suppressions.json +++ b/config/quality/eslint-suppressions.json @@ -548,14 +548,6 @@ "count": 3 } }, - "open-sse/services/usage/codebuddy-cn.ts": { - "@typescript-eslint/no-explicit-any": { - "count": 2 - }, - "@typescript-eslint/no-unused-vars": { - "count": 1 - } - }, "open-sse/services/usage/github.ts": { "@typescript-eslint/no-unused-vars": { "count": 1 @@ -1462,11 +1454,6 @@ "count": 1 } }, - "src/lib/oauth/providers/codebuddy-cn.ts": { - "@typescript-eslint/no-unused-vars": { - "count": 1 - } - }, "src/lib/oauth/providers/codex.ts": { "@typescript-eslint/no-unused-vars": { "count": 1 diff --git a/docs/architecture/ARCHITECTURE.md b/docs/architecture/ARCHITECTURE.md index 1db009b19985..a373d3341f9e 100644 --- a/docs/architecture/ARCHITECTURE.md +++ b/docs/architecture/ARCHITECTURE.md @@ -17,13 +17,13 @@ It provides a single OpenAI-compatible endpoint (`/v1/*`) and routes traffic acr Core capabilities: -- OpenAI-compatible API surface for CLI/tools (355 providers, 108 executors) +- OpenAI-compatible API surface for CLI/tools (372 providers, 148 executors) - Request/response translation across provider formats - Model combo fallback (multi-model sequence) - Structured combo steps (`provider + model + connection`) with runtime ordering by `compositeTiers` - Account-level fallback (multi-account per provider) - Quota preflight and quota-aware P2C account selection in the main chat path -- OAuth + API-key provider connection management (22 OAuth provider modules) +- OAuth + API-key provider connection management (27 OAuth provider modules) - Embedding generation via `/v1/embeddings` (18 providers) - Image generation via `/v1/images/generations` (10+ providers, 20+ models) - Audio transcription via `/v1/audio/transcriptions` (18 providers) @@ -321,10 +321,11 @@ Domain layer modules: - Eval runner: `src/lib/evals/evalRunner.ts` - Domain state persistence: `src/lib/db/domainState.ts` โ€” SQLite CRUD for fallback chains, budgets, cost history, lockout state, circuit breakers -OAuth provider modules (22 individual files under `src/lib/oauth/providers/`): +OAuth provider modules (27 individual files under `src/lib/oauth/providers/`): - Registry index: `src/lib/oauth/providers/index.ts` -- Individual providers: `agy.ts`, `antigravity.ts`, `claude.ts`, `cline.ts`, `codebuddy-cn.ts`, `codex.ts`, `cursor.ts`, `devin-desktop.ts`, `ghe-copilot.ts`, `github.ts`, `gitlab-duo.ts`, `grok-cli-oauth.ts`, `grok-cli.ts`, `kilocode.ts`, `kimi-coding.ts`, `kiro.ts`, `openference.ts`, `qoder.ts`, `trae.ts`, `xai-oauth.ts`, `zed-hosted.ts`, `zed.ts` +- Individual providers: `agy.ts`, `antigravity.ts`, `claude.ts`, `cline.ts`, `codebuddy-cn.ts`, `codebuddy-intl.ts`, `codex.ts`, `cursor.ts`, `devin-desktop.ts`, `ghe-copilot.ts`, `github.ts`, `gitlab-duo.ts`, `grok-cli-oauth.ts`, `grok-cli.ts`, `kilocode.ts`, `kimi-coding.ts`, `kiro.ts`, `muse-code.ts`, `openference.ts`, `qoder.ts`, `trae.ts`, `workbuddy.ts`, `xai-oauth.ts`, `zed-hosted.ts`, `zed.ts` +- Shared helpers: `codebuddyDeviceAuth.ts` (CodeBuddy CN/intl device flow), `museCodeDeviceResponse.ts` - Thin wrapper: `src/lib/oauth/providers.ts` โ€” re-exports from individual modules ## 5) Embedded Services (v3.8.4) diff --git a/docs/architecture/CODEBASE_DOCUMENTATION.md b/docs/architecture/CODEBASE_DOCUMENTATION.md index 7408edb5cbf8..f8d728b3a98a 100644 --- a/docs/architecture/CODEBASE_DOCUMENTATION.md +++ b/docs/architecture/CODEBASE_DOCUMENTATION.md @@ -479,7 +479,7 @@ open-sse/ ### 4.2 `open-sse/executors/` -108 provider executors, each extending `BaseExecutor` (`base.ts`): +148 provider executors, each extending `BaseExecutor` (`base.ts`): `antigravity`, `azure-openai`, `blackbox-web`, `cliproxyapi`, `chatgpt-web-codex`, `cloudflare-ai`, `codex`, `commandCode`, `cursor`, `default`, `devin-cli`, diff --git a/docs/diagrams/cli-terminal.svg b/docs/diagrams/cli-terminal.svg index dcc2b109609f..637db2c5ebdc 100644 --- a/docs/diagrams/cli-terminal.svg +++ b/docs/diagrams/cli-terminal.svg @@ -1,4 +1,4 @@ - + Compact animated terminal cycling three real OmniRoute CLI commands with a typewriter effect and a scrolling subcommand ticker; the first frame shows the completed providers-list screen. diff --git a/docs/diagrams/comparison-table.svg b/docs/diagrams/comparison-table.svg index dc2127a67ab1..037d793d405d 100644 --- a/docs/diagrams/comparison-table.svg +++ b/docs/diagrams/comparison-table.svg @@ -1,4 +1,4 @@ - + Static-header comparison table where each capability row fades in top to bottom; the OmniRoute column is highlighted and shows a check or a leading value in every row, while competitors show a mix of checks, partials and crosses. diff --git a/docs/diagrams/promise-pillars.svg b/docs/diagrams/promise-pillars.svg index e3a6e9b33bf3..e8344cb4b4c6 100644 --- a/docs/diagrams/promise-pillars.svg +++ b/docs/diagrams/promise-pillars.svg @@ -1,4 +1,4 @@ - + Animated promise card: six pillar tiles fade in in reading order, then a soft colored border highlight sweeps from tile to tile in a continuous cycle. @@ -21,7 +21,7 @@ - One endpoint. 370 providers. Never stop building โ€” OmniRoute picks the cheapest one that works. + One endpoint. 372 providers. Never stop building โ€” OmniRoute picks the cheapest one that works. @@ -38,7 +38,7 @@ Never hit limits - Auto-fallback across 370 providers in + Auto-fallback across 372 providers in milliseconds. Quota out? The next provider takes over while a healthy target remains. diff --git a/docs/diagrams/readme-hero.svg b/docs/diagrams/readme-hero.svg index 2513d80e7cca..8719fd4b2256 100644 --- a/docs/diagrams/readme-hero.svg +++ b/docs/diagrams/readme-hero.svg @@ -1,4 +1,4 @@ - + Animated hero card: a pulse travels the divider line and a compression bar demo repeatedly shrinks a prompt by up to 95 percent; all headline content is static and readable on the first frame. @@ -28,7 +28,7 @@ Never stop coding. - Every AI tool โ†’ 370 providers โ€” 150+ free โ€” through one endpoint. + Every AI tool โ†’ 372 providers โ€” 150+ free โ€” through one endpoint. Claude Code ยท Codex ยท Cursor ยท Cline ยท Copilot ยท Antigravity  โ†’  FREE Claude / GPT / Gemini ยท auto-fallback diff --git a/docs/i18n/am/llm.txt b/docs/i18n/am/llm.txt index b631cf2f04fe..0a707abcfbc3 100644 --- a/docs/i18n/am/llm.txt +++ b/docs/i18n/am/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/ar/llm.txt b/docs/i18n/ar/llm.txt index b2b9ae717c0f..90f873b3ea01 100644 --- a/docs/i18n/ar/llm.txt +++ b/docs/i18n/ar/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/az/llm.txt b/docs/i18n/az/llm.txt index a076dce0e6be..ca0d8956102d 100644 --- a/docs/i18n/az/llm.txt +++ b/docs/i18n/az/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/bg/llm.txt b/docs/i18n/bg/llm.txt index 7b8893a815cf..3a53b4c0cc45 100644 --- a/docs/i18n/bg/llm.txt +++ b/docs/i18n/bg/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/bn/llm.txt b/docs/i18n/bn/llm.txt index 9112ccdab97c..77cfa236f492 100644 --- a/docs/i18n/bn/llm.txt +++ b/docs/i18n/bn/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/bs/llm.txt b/docs/i18n/bs/llm.txt index 123eb42d85d9..1714d119f9f1 100644 --- a/docs/i18n/bs/llm.txt +++ b/docs/i18n/bs/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/cs/llm.txt b/docs/i18n/cs/llm.txt index 2502d510c871..233f3b1ac966 100644 --- a/docs/i18n/cs/llm.txt +++ b/docs/i18n/cs/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/da/llm.txt b/docs/i18n/da/llm.txt index fa1702d4421e..672612362beb 100644 --- a/docs/i18n/da/llm.txt +++ b/docs/i18n/da/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/de/llm.txt b/docs/i18n/de/llm.txt index 2b0ff2512896..53166a7286ae 100644 --- a/docs/i18n/de/llm.txt +++ b/docs/i18n/de/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/el/llm.txt b/docs/i18n/el/llm.txt index 64c5324079d5..b9ae1019b5f0 100644 --- a/docs/i18n/el/llm.txt +++ b/docs/i18n/el/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/es/llm.txt b/docs/i18n/es/llm.txt index a27b941b6cb4..9c5fbcf0107c 100644 --- a/docs/i18n/es/llm.txt +++ b/docs/i18n/es/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/et/llm.txt b/docs/i18n/et/llm.txt index bc36209999a2..1cd8096ea9dc 100644 --- a/docs/i18n/et/llm.txt +++ b/docs/i18n/et/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/fa/llm.txt b/docs/i18n/fa/llm.txt index 72e97a37ae5e..cf726d2c372b 100644 --- a/docs/i18n/fa/llm.txt +++ b/docs/i18n/fa/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/fi/llm.txt b/docs/i18n/fi/llm.txt index dc7d759d818d..e5007a41a535 100644 --- a/docs/i18n/fi/llm.txt +++ b/docs/i18n/fi/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/fr/llm.txt b/docs/i18n/fr/llm.txt index 0fec24452672..66c5ee875324 100644 --- a/docs/i18n/fr/llm.txt +++ b/docs/i18n/fr/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/ga/llm.txt b/docs/i18n/ga/llm.txt index e36df22718ca..69ff228e1a9c 100644 --- a/docs/i18n/ga/llm.txt +++ b/docs/i18n/ga/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/gu/llm.txt b/docs/i18n/gu/llm.txt index 3a28a15b4989..3891d635f7a7 100644 --- a/docs/i18n/gu/llm.txt +++ b/docs/i18n/gu/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/ha/llm.txt b/docs/i18n/ha/llm.txt index 0cbf265326b1..77e6dac6aac9 100644 --- a/docs/i18n/ha/llm.txt +++ b/docs/i18n/ha/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/he/llm.txt b/docs/i18n/he/llm.txt index 35d296f4604a..cb8620b7b003 100644 --- a/docs/i18n/he/llm.txt +++ b/docs/i18n/he/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/hi/llm.txt b/docs/i18n/hi/llm.txt index 7c303110ece0..9f2a822a22da 100644 --- a/docs/i18n/hi/llm.txt +++ b/docs/i18n/hi/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/hr/llm.txt b/docs/i18n/hr/llm.txt index 7c157adbd163..78e04e9730b2 100644 --- a/docs/i18n/hr/llm.txt +++ b/docs/i18n/hr/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/hu/llm.txt b/docs/i18n/hu/llm.txt index 40c2d73149ea..3f3fb2e71b50 100644 --- a/docs/i18n/hu/llm.txt +++ b/docs/i18n/hu/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/hy/llm.txt b/docs/i18n/hy/llm.txt index bbbe984e3538..97ea211b27fa 100644 --- a/docs/i18n/hy/llm.txt +++ b/docs/i18n/hy/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/id/llm.txt b/docs/i18n/id/llm.txt index ca55b63edbfc..fe6f68e78d29 100644 --- a/docs/i18n/id/llm.txt +++ b/docs/i18n/id/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/ig/llm.txt b/docs/i18n/ig/llm.txt index 6de121ff951c..238773cab416 100644 --- a/docs/i18n/ig/llm.txt +++ b/docs/i18n/ig/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/it/llm.txt b/docs/i18n/it/llm.txt index 0ef8e862a9e7..79f25ffdfc5e 100644 --- a/docs/i18n/it/llm.txt +++ b/docs/i18n/it/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/ja/llm.txt b/docs/i18n/ja/llm.txt index fb80ae55623e..4e9a220cd569 100644 --- a/docs/i18n/ja/llm.txt +++ b/docs/i18n/ja/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/ka/llm.txt b/docs/i18n/ka/llm.txt index 5e43596cf95a..a529d32622ff 100644 --- a/docs/i18n/ka/llm.txt +++ b/docs/i18n/ka/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/km/llm.txt b/docs/i18n/km/llm.txt index 12cb91dddf54..06174a749ec3 100644 --- a/docs/i18n/km/llm.txt +++ b/docs/i18n/km/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/kn/llm.txt b/docs/i18n/kn/llm.txt index 6489f8df5393..170a60d15ace 100644 --- a/docs/i18n/kn/llm.txt +++ b/docs/i18n/kn/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/ko/llm.txt b/docs/i18n/ko/llm.txt index 785919e737eb..b362d7a4ed70 100644 --- a/docs/i18n/ko/llm.txt +++ b/docs/i18n/ko/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/lt/llm.txt b/docs/i18n/lt/llm.txt index d941a2d504f5..e10b402c87c7 100644 --- a/docs/i18n/lt/llm.txt +++ b/docs/i18n/lt/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/lv/llm.txt b/docs/i18n/lv/llm.txt index fccd02632a05..584b51c9aff7 100644 --- a/docs/i18n/lv/llm.txt +++ b/docs/i18n/lv/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/ml/llm.txt b/docs/i18n/ml/llm.txt index 65d3b2d0abc1..fa366a5d1a1b 100644 --- a/docs/i18n/ml/llm.txt +++ b/docs/i18n/ml/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/mr/llm.txt b/docs/i18n/mr/llm.txt index aedb1e85be3f..a2a12b96dc08 100644 --- a/docs/i18n/mr/llm.txt +++ b/docs/i18n/mr/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/ms/llm.txt b/docs/i18n/ms/llm.txt index ff91f3646f9b..bd9719ef6092 100644 --- a/docs/i18n/ms/llm.txt +++ b/docs/i18n/ms/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/mt/llm.txt b/docs/i18n/mt/llm.txt index bb02ed69a653..dc6ddd348fb6 100644 --- a/docs/i18n/mt/llm.txt +++ b/docs/i18n/mt/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/my/llm.txt b/docs/i18n/my/llm.txt index 51488b16bc9d..d3c58638ab8a 100644 --- a/docs/i18n/my/llm.txt +++ b/docs/i18n/my/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/ne/llm.txt b/docs/i18n/ne/llm.txt index a62d3bcbaede..1d038a3e1f63 100644 --- a/docs/i18n/ne/llm.txt +++ b/docs/i18n/ne/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/nl/llm.txt b/docs/i18n/nl/llm.txt index 35f48646443f..75770c8b56ab 100644 --- a/docs/i18n/nl/llm.txt +++ b/docs/i18n/nl/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/no/llm.txt b/docs/i18n/no/llm.txt index c2bf1e30f4a9..14cfc056e022 100644 --- a/docs/i18n/no/llm.txt +++ b/docs/i18n/no/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/or/llm.txt b/docs/i18n/or/llm.txt index d5fbb15e85e6..bbf5edd7ea51 100644 --- a/docs/i18n/or/llm.txt +++ b/docs/i18n/or/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/pa/llm.txt b/docs/i18n/pa/llm.txt index b8c9d87d36f0..14f3e62d9a0b 100644 --- a/docs/i18n/pa/llm.txt +++ b/docs/i18n/pa/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/phi/llm.txt b/docs/i18n/phi/llm.txt index 1ceeef8c3459..2b35f5606f71 100644 --- a/docs/i18n/phi/llm.txt +++ b/docs/i18n/phi/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/pl/llm.txt b/docs/i18n/pl/llm.txt index bd60ce9720bb..749ed21e6a92 100644 --- a/docs/i18n/pl/llm.txt +++ b/docs/i18n/pl/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/pt-BR/llm.txt b/docs/i18n/pt-BR/llm.txt index 2662ebe958d6..34ef409fdab1 100644 --- a/docs/i18n/pt-BR/llm.txt +++ b/docs/i18n/pt-BR/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/pt/llm.txt b/docs/i18n/pt/llm.txt index 0ff79581109e..c270e0b2b58f 100644 --- a/docs/i18n/pt/llm.txt +++ b/docs/i18n/pt/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/ro/llm.txt b/docs/i18n/ro/llm.txt index 50b3cea75797..05daf97c3eb3 100644 --- a/docs/i18n/ro/llm.txt +++ b/docs/i18n/ro/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/ru/llm.txt b/docs/i18n/ru/llm.txt index 55dd54192d27..d1edd9a29981 100644 --- a/docs/i18n/ru/llm.txt +++ b/docs/i18n/ru/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/si/llm.txt b/docs/i18n/si/llm.txt index 79588d7fde02..409acd1aa2e2 100644 --- a/docs/i18n/si/llm.txt +++ b/docs/i18n/si/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/sk/llm.txt b/docs/i18n/sk/llm.txt index 99902b3d33a8..34326cacc3ff 100644 --- a/docs/i18n/sk/llm.txt +++ b/docs/i18n/sk/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/sl/llm.txt b/docs/i18n/sl/llm.txt index c3c4eac59257..499eb83abed3 100644 --- a/docs/i18n/sl/llm.txt +++ b/docs/i18n/sl/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/sr/llm.txt b/docs/i18n/sr/llm.txt index 46ec1979225d..f76dd3c9cd14 100644 --- a/docs/i18n/sr/llm.txt +++ b/docs/i18n/sr/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/sv/llm.txt b/docs/i18n/sv/llm.txt index 1c81a734b17b..21e131cd6fe9 100644 --- a/docs/i18n/sv/llm.txt +++ b/docs/i18n/sv/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/sw/llm.txt b/docs/i18n/sw/llm.txt index 4b0fb883a096..b590c31656d7 100644 --- a/docs/i18n/sw/llm.txt +++ b/docs/i18n/sw/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/ta/llm.txt b/docs/i18n/ta/llm.txt index 1bfe324039ad..d5fec8ddae01 100644 --- a/docs/i18n/ta/llm.txt +++ b/docs/i18n/ta/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/te/llm.txt b/docs/i18n/te/llm.txt index 46e7376f6b74..69771a68b121 100644 --- a/docs/i18n/te/llm.txt +++ b/docs/i18n/te/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/th/llm.txt b/docs/i18n/th/llm.txt index 65318c9863b0..b34141b76ed7 100644 --- a/docs/i18n/th/llm.txt +++ b/docs/i18n/th/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/tr/llm.txt b/docs/i18n/tr/llm.txt index 0095b7bd84fc..d6c4dc5382db 100644 --- a/docs/i18n/tr/llm.txt +++ b/docs/i18n/tr/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/uk-UA/llm.txt b/docs/i18n/uk-UA/llm.txt index 0e0f37ac8b57..ec0a0249c46b 100644 --- a/docs/i18n/uk-UA/llm.txt +++ b/docs/i18n/uk-UA/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/ur/llm.txt b/docs/i18n/ur/llm.txt index 43277175807f..f12cd9eacfc9 100644 --- a/docs/i18n/ur/llm.txt +++ b/docs/i18n/ur/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/uz/llm.txt b/docs/i18n/uz/llm.txt index fc7cdf947814..20d97c76c398 100644 --- a/docs/i18n/uz/llm.txt +++ b/docs/i18n/uz/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/vi/llm.txt b/docs/i18n/vi/llm.txt index d02eebcbb9e3..ee65520145d4 100644 --- a/docs/i18n/vi/llm.txt +++ b/docs/i18n/vi/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/yo/llm.txt b/docs/i18n/yo/llm.txt index d0d31639b493..13fe5d5b4c0b 100644 --- a/docs/i18n/yo/llm.txt +++ b/docs/i18n/yo/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/zh-CN/llm.txt b/docs/i18n/zh-CN/llm.txt index 8a6d4553c38b..f8e453872460 100644 --- a/docs/i18n/zh-CN/llm.txt +++ b/docs/i18n/zh-CN/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/i18n/zh-TW/llm.txt b/docs/i18n/zh-TW/llm.txt index dae8863413d7..2cf730e733ea 100644 --- a/docs/i18n/zh-TW/llm.txt +++ b/docs/i18n/zh-TW/llm.txt @@ -4,7 +4,7 @@ --- -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -281,7 +281,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/docs/reference/PROVIDER_REFERENCE.md b/docs/reference/PROVIDER_REFERENCE.md index 189bbd35940c..d5ee3c531ee3 100644 --- a/docs/reference/PROVIDER_REFERENCE.md +++ b/docs/reference/PROVIDER_REFERENCE.md @@ -1,16 +1,16 @@ --- title: "Provider Reference" version: 3.8.52 -lastUpdated: 2026-10-08 +lastUpdated: 2026-10-10 --- # Provider Reference > **Auto-generated** from `src/shared/constants/providers.ts` โ€” do not edit by hand. > Regenerate with: `npm run gen:provider-reference` -> **Last generated:** 2026-10-08 +> **Last generated:** 2026-10-10 -Total providers: **370**. See category breakdown below. +Total providers: **372**. See category breakdown below. ## Categories @@ -49,7 +49,7 @@ Use the dashboard at `/dashboard/providers` to enable, configure, and test each | `veoaifree-web` | `veo-free` | Veo AI Free | No-auth, video | [link](https://veoaifree.com) | No auth required. Rate limited to 6 requests/hour per IP. | โ€” | | `zcode` | `zc` | ZCode (GLM Coding Plan) | No-auth | [link](https://zcode.z.ai) | No API key stored by OmniRoute. The local ZCode app-server uses the existing builtin:zai-coding-plan login. | โ€” | -## OAuth Providers (26) +## OAuth Providers (27) | ID | Alias | Name | Tags | Website | Notes | |----|-------|------|------|---------|-------| @@ -60,6 +60,7 @@ Use the dashboard at `/dashboard/providers` to enable, configure, and test each | `cline` | `cl` | Cline | OAuth | โ€” | Sign in with your Cline account (OAuth), or paste a direct API key from app.cline.bot โ†’ Settings โ†’ API Keys. Multiple API keys are supported and rotated automatically โ€” add each as a separate connection. | | `clinepass` | `cp` | ClinePass | OAuth | [link](https://cline.bot/cline-pass) | ClinePass is Cline's $9.99/mo subscription bundling 10 open coding models. Sign in with your Cline account (same login as the Cline CLI/IDE), or paste a direct ClinePass API key (app.cline.bot โ†’ Settings โ†’ API Keys). A ClinePass subscription unlocks the cline-pass/* models. Reuses the Cline WorkOS OAuth flow. | | `codebuddy-cn` | `cbcn` | CodeBuddy CN | OAuth | [link](https://copilot.tencent.com) | Tencent CodeBuddy CN (copilot.tencent.com). Sign in via the official CLI device-code flow, or paste a direct API key (sent as Authorization: Bearer). Catalog: GLM / Kimi / MiniMax / DeepSeek / Hunyuan. | +| `codebuddy-intl` | `cbai` | CodeBuddy Intl | OAuth | [link](https://www.codebuddy.ai) | CodeBuddy International (codebuddy.ai). Sign in via the device-code flow, or paste a direct API key (sent as Authorization: Bearer). Catalog: GLM / Kimi / MiniMax / DeepSeek / Hunyuan. | | `codex` | `cx` | OpenAI Codex | OAuth | โ€” | โ€” | | `cursor` | `cu` | Cursor IDE | OAuth | โ€” | โ€” | | `devin-cli` | `dv` | Devin CLI | OAuth | [link](https://cli.devin.ai) | Requires the Devin CLI binary. Run `devin auth login` to authenticate, or provide your WINDSURF_API_KEY. Install: https://cli.devin.ai | @@ -73,7 +74,7 @@ Use the dashboard at `/dashboard/providers` to enable, configure, and test each | `kiro` | `kr` | Kiro AI | OAuth | โ€” | Free tier: 50 credits/month (~25Kโ€“100K tokens). โš ๏ธ Kiro ToS prohibits third-party proxy/harness use. | | `muse-code` | `mc` | Muse Code (Meta) | OAuth | [link](https://ai.developer.meta.com/docs/muse-code/auth) | Sign in with the Muse Code device flow (same as `muse login` / CLIProxyAPI `-meta-login`) to use a Muse subscription, or paste a META_API_KEY. Device login keeps the durable dca token and mints the inference key; a 401 remints that key. Wire format is OpenAI Responses (POST /responses). | | `openference` | `of` | Openference | OAuth | [link](https://openference.com) | Sign in with your Openference account to route requests through api.openference.com. Includes free-tier access to Qwen3.8 27b and Llama 3.2 3B โ€” see openference.com/pricing for current plan terms. | -| `qoder` | `if` | Qoder | OAuth | โ€” | โ€” | +| `qoder` | `if` | Qoder | OAuth | โ€” | PAT (pt-): requires local qodercli; plain chat only, no caller tools, buffered streaming and a 45-second chat limit. HTTP keys use DashScope; browser OAuth requires administrator configuration. | | `trae` | `tr` | Trae | OAuth | [link](https://trae.ai) | Trae is an AI-native IDE by ByteDance (SOLO remote agent). Authorize via trae.ai in the popup, or sign in at solo.trae.ai and paste the Cloud-IDE-JWT (sent as 'Authorization: Cloud-IDE-JWT ', ~14-day lifetime) as the access token; web_id/biz_user_id/user_unique_id/scope/tenant/region propagate via providerSpecificData. No headless refresh for pasted tokens โ€” re-paste on expiry. | | `workbuddy` | `wb` | WorkBuddy | OAuth | [link](https://www.workbuddy.ai) | Tencent WorkBuddy (www.workbuddy.ai). Authorize the CLI device flow in the popup; OmniRoute then polls for the token and attaches the required X-Product: SaaS header. The model roster is served by the authenticated catalogue, so it is discovered live rather than listed here. WorkBuddy only accepts streaming requests, which OmniRoute accumulates back into a JSON response for non-streaming callers. | | `xai-oauth` | `xao` | xAI OAuth (Grok) | OAuth | [link](https://x.ai) | Sign in with xAI to use api.x.ai models such as Grok 4.5. This is separate from Grok Build JWT sessions, which use cli-chat-proxy.grok.com and grok-build model aliases. | @@ -122,7 +123,7 @@ Use the dashboard at `/dashboard/providers` to enable, configure, and test each | `zai-web` | `zw` | Z.ai Web | Web cookie | [link](https://chat.z.ai) | Copy the "token" value from chat.z.ai โ†’ DevTools โ†’ Application โ†’ Local Storage. Do not copy cookies; OmniRoute handles the per-request CAPTCHA through its browser transport. | โ€” | | `zenmux-free` | `zmf` | ZenMux Free (Web) | Web cookie | [link](https://zenmux.ai) | Login at zenmux.ai, then export all cookies using EditThisCookie or Cookie-Editor and paste the full Cookie header string here. Refresh every ~30 days. | โ€” | -## API Key Providers (paid / paid-with-free-credits) (248) +## API Key Providers (paid / paid-with-free-credits) (249) | ID | Alias | Name | Tags | Website | Notes | |----|-------|------|------|---------|-------| @@ -342,6 +343,7 @@ Use the dashboard at `/dashboard/providers` to enable, configure, and test each | `tokenreply` | `tokenreply` | TokenReply | API key, aggregator | [link](https://www.tokenreply.com) | Free-tagged models have model- and campaign-specific daily limits; no fixed global free quota is published. | | `tokenrouter` | `trk` | TokenRouter | API key | [link](https://tokenrouter.com) | Use your TokenRouter API key in Authorization: Bearer . Fully OpenAI-compatible. API base URL: https://api.tokenrouter.com/v1. | | `topaz` | `topaz` | Topaz | API key, image | [link](https://topazlabs.com) | โ€” | +| `typesafe` | `typesafe` | TypeSafe AI | API key | [link](https://docs.typesafe.ai) | Bearer API key for api.typesafe.ai. OmniRoute uses it for System One evaluation (Jev) โ€” not chat completions. Store the key here; the jev combo strategy reads it at request time. | | `typhoon` | `typhoon` | Typhoon | API key | [link](https://docs.opentyphoon.ai) | Free API key with a 5 req/s and 200 req/m rate limit. | | `uc-direct` | `ucd` | UC Direct (uncensored.com) | API key | [link](https://uncensored.com) | Use your uncensored.com Developer API key (uai_sk_live_...). OmniRoute sends it as the X-api-key header to the OpenAI-compatible https://api.uncensored.com/api/v1 endpoint. The key never expires. This is the metered/credits surface; the un-metered subscription chat is the separate 'uc' provider. | | `udio` | `udio` | Udio | API key | [link](https://udio.com) | Paste session cookie from udio.com (Supabase auth) | @@ -458,7 +460,7 @@ Use the dashboard at `/dashboard/providers` to enable, configure, and test each - Catalog: [`src/shared/constants/providers.ts`](../../src/shared/constants/providers.ts) - Registry (per-model details): [`open-sse/config/providerRegistry.ts`](../../open-sse/config/providerRegistry.ts) -- Executors: [`open-sse/executors/`](../../open-sse/executors/) (146 implementations) +- Executors: [`open-sse/executors/`](../../open-sse/executors/) (148 implementations) - Translators: [`open-sse/translator/`](../../open-sse/translator/) ## See Also diff --git a/llm.txt b/llm.txt index 5e168bb1b32a..ba66ec3d5e35 100644 --- a/llm.txt +++ b/llm.txt @@ -1,6 +1,6 @@ # OmniRoute -> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 370 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. +> OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 372 AI providers โ€” all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (110 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -277,7 +277,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo ## Key Features (v3.8.50) ### Core Proxy -- **370 AI providers** with automatic format translation +- **372 AI providers** with automatic format translation - **Provider categories**: Free (90+ free tiers), OAuth, API Key, Self-Hosted, Custom (OpenAI/Anthropic-compatible) - **19 routing strategies**: priority, weighted, round-robin, fill-first, p2c, random, least-used, cost-optimized, reset-aware, reset-window, headroom, strict-random, auto, lkgp, context-optimized, cache-optimized, context-relay, fusion, pipeline - **4-tier fallback**: Subscription โ†’ API Key โ†’ Cheap โ†’ Free diff --git a/open-sse/config/providerHeaderProfiles.ts b/open-sse/config/providerHeaderProfiles.ts index 6810076e5b8e..9295c29d1491 100644 --- a/open-sse/config/providerHeaderProfiles.ts +++ b/open-sse/config/providerHeaderProfiles.ts @@ -191,6 +191,9 @@ export const QODER_DEFAULT_USER_AGENT = "Qoder-Cli"; // getCodeBuddyCnUserAgent(), which may replace both numbers with a newer npm publish. export const CODEBUDDY_CN_USER_AGENT = "CLI/2.108.1 CodeBuddy/2.108.1"; +// CodeBuddy International (codebuddy.ai) - single source of truth for intl profile. +export const CODEBUDDY_INTL_USER_AGENT = "IDE/2.108.1 CodeBuddy/2.108.1"; + const QWEN_DOTTED_TRIPLE_PATTERN = /^\d+\.\d+\.\d+$/; const NPM_QWEN_CODE_LATEST_URL = "https://registry.npmjs.org/@qwen-code/qwen-code/latest"; const NPM_CODEBUDDY_LATEST_URL = "https://registry.npmjs.org/@tencent-ai/codebuddy-code/latest"; diff --git a/open-sse/config/providers/index.ts b/open-sse/config/providers/index.ts index 76e6daea4ff6..bedcf9346e4c 100644 --- a/open-sse/config/providers/index.ts +++ b/open-sse/config/providers/index.ts @@ -226,6 +226,7 @@ import { tokenrouterProvider } from "./registry/tokenrouter/index.ts"; import { token_kioskProvider } from "./registry/token-kiosk/index.ts"; import { grok_cliProvider } from "./registry/grok-cli/index.ts"; import { codebuddy_cnProvider } from "./registry/codebuddy-cn/index.ts"; +import { codebuddy_intlProvider } from "./registry/codebuddy-intl/index.ts"; import { pioneerProvider } from "./registry/pioneer/index.ts"; import { zenmux_freeProvider } from "./registry/zenmux-free/index.ts"; import { tinycmsProvider } from "./registry/tinycms/index.ts"; @@ -515,6 +516,7 @@ export const REGISTRY: Record = { "token-kiosk": token_kioskProvider, "grok-cli": grok_cliProvider, "codebuddy-cn": codebuddy_cnProvider, + "codebuddy-intl": codebuddy_intlProvider, pioneer: pioneerProvider, "zenmux-free": zenmux_freeProvider, "tinycms-web": tinycmsProvider, diff --git a/open-sse/config/providers/registry/codebuddy-cn/index.ts b/open-sse/config/providers/registry/codebuddy-cn/index.ts index 43604652a430..25908f19de1d 100644 --- a/open-sse/config/providers/registry/codebuddy-cn/index.ts +++ b/open-sse/config/providers/registry/codebuddy-cn/index.ts @@ -9,7 +9,7 @@ import type { RegistryEntry } from "../../shared.ts"; * `reasoning_effort` (not vendor-native thinking shapes). Streaming is forced * by the executor because non-stream requests are rejected with code 11101. * - * Short alias "cbcn" reserves "cbai" for a future CodeBuddy intl variant. + * Short alias "cbcn" (paired with "cbai" for the CodeBuddy intl variant). * Per-model context windows/vision are advertised in the catalog below. */ export const codebuddy_cnProvider: RegistryEntry = { diff --git a/open-sse/config/providers/registry/codebuddy-intl/index.ts b/open-sse/config/providers/registry/codebuddy-intl/index.ts new file mode 100644 index 000000000000..a00779b54bee --- /dev/null +++ b/open-sse/config/providers/registry/codebuddy-intl/index.ts @@ -0,0 +1,199 @@ +import { CODEBUDDY_INTL_USER_AGENT } from "../../../providerHeaderProfiles.ts"; +import type { RegistryEntry } from "../../shared.ts"; + +/** + * CodeBuddy International (codebuddy.ai). + * + * Unified OpenAI-compatible gateway behind the CodeBuddy International service. + * Carries live-probed models (GLM, Kimi, MiniMax, DeepSeek, Hunyuan, GPT, Gemini) + * and reasons via OpenAI-style `reasoning_effort` (not vendor-native thinking shapes). + * Streaming is forced by the executor because non-stream requests are rejected + * with code 11101. The intl gateway publishes no model-catalog endpoint, so + * this list is curated from live-gateway probes. + * + * Short alias "cbai" matches the reserved alias convention. + */ +export const codebuddy_intlProvider: RegistryEntry = { + id: "codebuddy-intl", + alias: "cbai", + format: "openai", + executor: "codebuddy-intl", + baseUrl: "https://www.codebuddy.ai/v2/chat/completions", + authType: "oauth", + authHeader: "bearer", + headers: { + "User-Agent": CODEBUDDY_INTL_USER_AGENT, + "X-Product": "SaaS", + "X-IDE-Type": "IDE", + "X-IDE-Name": "IDE", + "x-requested-with": "XMLHttpRequest", + "x-codebuddy-request": "1", + }, + models: [ + { + id: "hy4-preview", + name: "Hy4-Preview", + contextLength: 256000, + maxOutputTokens: 64000, + supportsReasoning: true, + supportsVision: true, + }, + { + id: "hy3", + name: "Hy3", + contextLength: 192000, + maxOutputTokens: 64000, + supportsReasoning: true, + supportsVision: true, + }, + { + id: "gpt-6-astra", + name: "GPT 6.0 Astra", + contextLength: 1000000, + maxOutputTokens: 64000, + supportsReasoning: true, + }, + { + id: "gpt-6-luna", + name: "GPT-6-Luna", + contextLength: 1000000, + maxOutputTokens: 64000, + supportsReasoning: true, + }, + { + id: "gpt-6-sol", + name: "GPT-6-Sol", + contextLength: 1000000, + maxOutputTokens: 64000, + supportsReasoning: true, + }, + { + id: "gpt-5.6-sol", + name: "GPT-5.6-Sol", + contextLength: 512000, + maxOutputTokens: 64000, + supportsReasoning: true, + }, + { + id: "gpt-5.6-terra", + name: "GPT-5.6-Terra", + contextLength: 256000, + maxOutputTokens: 64000, + supportsReasoning: true, + }, + { + id: "gpt-5.6-luna", + name: "GPT-5.6-Luna", + contextLength: 256000, + maxOutputTokens: 64000, + supportsReasoning: true, + }, + { + id: "gpt-5.5", + name: "GPT-5.5", + contextLength: 256000, + maxOutputTokens: 64000, + supportsReasoning: true, + }, + { + id: "gpt-5.4", + name: "GPT-5.4", + contextLength: 256000, + maxOutputTokens: 64000, + supportsReasoning: true, + }, + { + id: "gpt-5.3-codex", + name: "GPT-5.3-Codex", + contextLength: 256000, + maxOutputTokens: 64000, + supportsReasoning: true, + }, + { + id: "gemini-3.5-flash", + name: "Gemini-3.5-Flash", + contextLength: 1000000, + maxOutputTokens: 64000, + supportsReasoning: true, + supportsVision: true, + }, + { + id: "glm-5v-turbo", + name: "GLM-5v-Turbo", + contextLength: 200000, + maxOutputTokens: 38000, + supportsReasoning: true, + supportsVision: true, + }, + { + id: "glm-5.3", + name: "GLM-5.3", + contextLength: 1000000, + maxOutputTokens: 48000, + supportsReasoning: true, + }, + { + id: "glm-5.3-flash", + name: "GLM-5.3-Flash", + contextLength: 1000000, + maxOutputTokens: 48000, + supportsReasoning: true, + }, + { + id: "glm-5.2", + name: "GLM-5.2", + contextLength: 1000000, + maxOutputTokens: 48000, + supportsReasoning: true, + }, + { + id: "glm-5.1", + name: "GLM-5.1", + contextLength: 200000, + maxOutputTokens: 48000, + supportsReasoning: true, + }, + { + id: "minimax-m3", + name: "MiniMax-M3", + contextLength: 512000, + maxOutputTokens: 48000, + supportsReasoning: true, + supportsVision: true, + }, + { + id: "kimi-k3", + name: "Kimi-K3", + contextLength: 256000, + maxOutputTokens: 32000, + supportsReasoning: true, + supportsVision: true, + }, + { + id: "kimi-k2.7", + name: "Kimi-K2.7-Code", + contextLength: 256000, + maxOutputTokens: 32000, + supportsReasoning: true, + supportsVision: true, + }, + { + id: "kimi-k2.6", + name: "Kimi-K2.6", + contextLength: 256000, + maxOutputTokens: 32000, + supportsReasoning: true, + supportsVision: true, + }, + { + id: "deepseek-v4.1-flash", + name: "DeepSeek-V4.1-Flash", + contextLength: 1000000, + maxOutputTokens: 50000, + supportsReasoning: true, + supportsVision: true, + }, + ], +}; + +export default codebuddy_intlProvider; diff --git a/open-sse/executors/codebuddy-cn.ts b/open-sse/executors/codebuddy-cn.ts index f7af6f24595a..3df6c2b3b7a9 100644 --- a/open-sse/executors/codebuddy-cn.ts +++ b/open-sse/executors/codebuddy-cn.ts @@ -1,208 +1,14 @@ -import { DefaultExecutor } from "./default.ts"; -import type { ExecuteInput, ExecutorExecuteResult, ProviderCredentials } from "./base.ts"; - -const SENSITIVE_CONTENT_REJECTION = - "ๆŠฑๆญ‰๏ผŒ็ณป็ปŸๆฃ€ๆต‹ๅˆฐๆ‚จๅฝ“ๅ‰่พ“ๅ…ฅ็š„ไฟกๆฏๅญ˜ๅœจๆ•ๆ„Ÿๅ†…ๅฎน๏ผŒๆˆ‘ๆ— ๆณ•ๅ“ๅบ”ๆ‚จ็š„่ฏทๆฑ‚๏ผŒ่ฏทๆฃ€ๆŸฅๅŽ้‡ๆ–ฐ่พ“ๅ…ฅ"; -const LARGE_TOOL_METADATA_BYTES = 64 * 1024; - -function responseFromResult(result: ExecutorExecuteResult): Response { - return result instanceof Response ? result : result.response; -} - -function credentialsFromResult( - result: ExecutorExecuteResult, - fallback: ProviderCredentials -): ProviderCredentials { - if (result instanceof Response || !result.headers) return fallback; - - const authorization = Object.entries(result.headers).find( - ([name]) => name.toLowerCase() === "authorization" - )?.[1]; - if (!authorization?.startsWith("Bearer ")) return fallback; - - return { - ...fallback, - accessToken: authorization.slice("Bearer ".length), - expiresAt: undefined, - }; -} - -function compactToolDescriptions(body: unknown): unknown | null { - if (!body || typeof body !== "object" || Array.isArray(body)) return null; - - const request = body as Record; - if (!Array.isArray(request.tools) || request.tools.length === 0) return null; - - const originalTools = request.tools; - try { - const serializedTools = JSON.stringify(originalTools); - if (new TextEncoder().encode(serializedTools).byteLength < LARGE_TOOL_METADATA_BYTES) { - return null; - } - } catch { - return null; - } - - let tools: unknown[] | null = null; - originalTools.forEach((tool, index) => { - if (!tool || typeof tool !== "object" || Array.isArray(tool)) return; - - const declaration = tool as Record; - if ( - declaration.type !== "function" || - !declaration.function || - typeof declaration.function !== "object" || - Array.isArray(declaration.function) - ) { - return; - } - - const toolFunction = declaration.function as Record; - if (!Object.prototype.hasOwnProperty.call(toolFunction, "description")) return; - - const compactFunction = { ...toolFunction }; - delete compactFunction.description; - tools ??= originalTools.slice(); - tools[index] = { ...declaration, function: compactFunction }; - }); - - return tools ? { ...request, tools } : null; -} - -async function isSensitiveContentRejection(response: Response): Promise { - if (response.status !== 400) return false; - const responseText = await response - .clone() - .text() - .catch(() => ""); - return responseText.includes(SENSITIVE_CONTENT_REJECTION); -} +import { CodeBuddyBaseExecutor } from "./codebuddy/shared.ts"; /** * CodeBuddyCnExecutor โ€” talks to https://copilot.tencent.com/v2/chat/completions * - * CodeBuddy CN is an OpenAI-compatible Tencent gateway but it rejects non-stream - * chat requests (HTTP 400, code 11101 "Non-stream chat request is currently not - * supported"). The same-format (openaiโ†’openai) translator path leaves body.stream - * as the client sent it, so we force it true here โ€” OmniRoute still re-aggregates - * the SSE into a JSON response for non-streaming clients. - * - * Reasoning params are opt-in: reasoning_summary:"auto" is only added when the - * client explicitly sets reasoning_effort. Plain requests are left untouched. - * When the caller explicitly asks for "none"/"off" we drop the field entirely - * (the gateway has no "none" value). Forcing reasoning on plain requests trips - * CodeBuddy's content filter and returns an error. - * - * Agent system prompt replacement: Tencent's content filter flags CLI agent system - * prompts ("You are Claude Code, Anthropic's official CLIโ€ฆ") as prompt injection / - * sensitive content and rejects the whole request. Detect agent system prompts - * (length catch-all + identity-marker regex) and replace them with a neutral one, - * while leaving legitimate user system prompts untouched. Content may be a string - * or typed blocks ([{type:"text",text}]) depending on the incoming client format, - * so flatten before matching and preserve the original shape on replacement. + * CodeBuddy CN is an OpenAI-compatible Tencent gateway. Inherits all shared + * CodeBuddy gateway behavior (forced stream, reasoning_summary, agent-prompt + * sanitization, tool compaction). */ -export class CodeBuddyCnExecutor extends DefaultExecutor { - constructor() { - super("codebuddy-cn"); - } - - async execute(input: ExecuteInput): Promise { - const result = await super.execute(input); - if (!(await isSensitiveContentRejection(responseFromResult(result)))) { - return result; - } - - const compactBody = compactToolDescriptions(input.body); - if (!compactBody) return result; - - input.log?.debug?.( - "CODEBUDDY_CN", - "Upstream rejected an oversized tool request as sensitive content; retrying with compact tool descriptions" - ); - return super.execute({ - ...input, - body: compactBody, - credentials: credentialsFromResult(result, input.credentials), - }); - } - - transformRequest( - model: string, - body: unknown, - stream: boolean, - credentials: ProviderCredentials - ): unknown { - const transformed = super.transformRequest(model, body, stream, credentials); - if (!transformed || typeof transformed !== "object" || Array.isArray(transformed)) { - return transformed; - } - const out = transformed as Record; - out.stream = true; - - const eff = out.reasoning_effort; - if (eff === "none" || eff === "off") { - delete out.reasoning_effort; - } else if (eff) { - out.reasoning_summary = "auto"; - } - - // --- Agent system prompt replacement --- - // Tencent's content filter flags CLI agent system prompts as sensitive content. - // Detect and replace them with a neutral prompt. - const NEUTRAL_PROMPT = "You are a helpful AI assistant that helps with software engineering tasks."; - const AGENT_PATTERN = /you are claude code|claude.?code.+official.+cli|anthropic.+official.+cli|anxthxropic.+official.+cli|you are (?:cursor|windsurf|cline|aider|continue|copilot|cody)|you are an? (?:ai )?(?:coding |code )?agent|cc_entrypoint\s*=\s*(?:cli|vscode|jetbrains|gui)|claude.?code.+issues|give feedback.+claude.?code|you are .{0,30}(?:powerful )?ai agent|orchestration capabilities|OhMyOpenCode|||/i; - const flatten = (content: unknown): string => - typeof content === "string" - ? content - : Array.isArray(content) - ? (content as Array>) - .map((b) => (b && typeof b.text === "string" ? b.text : "")) - .join("\n") - : ""; - - // Handle top-level `system` field (Anthropic format after translation) - if (out.system) { - const text = flatten(out.system); - if (text && (text.length > 2000 || AGENT_PATTERN.test(text))) { - out.system = NEUTRAL_PROMPT; - } - } - - // Handle messages array with role: "system" - if (Array.isArray(out.messages)) { - out.messages = (out.messages as Array>).map((message) => { - if (!message || message.role !== "system") return message; - const text = flatten(message.content); - if (!text) return message; - if (text.length > 2000 || AGENT_PATTERN.test(text)) { - return typeof message.content === "string" - ? { ...message, content: NEUTRAL_PROMPT } - : { ...message, content: [{ type: "text", text: NEUTRAL_PROMPT }] }; - } - return message; - }); - } - - // --- Strip oversized tool descriptions (>64KB) --- - // Large tool descriptions can also trigger the content filter. - if (Array.isArray(out.tools) && out.tools.length > 0) { - try { - const s = JSON.stringify(out.tools); - if (new TextEncoder().encode(s).byteLength >= 65536) { - out.tools = (out.tools as Array>).map((tool) => { - if (!tool || typeof tool !== "object" || Array.isArray(tool)) return tool; - if (tool.type !== "function" || !tool.function || typeof tool.function !== "object" || Array.isArray(tool.function)) return tool; - if (!Object.prototype.hasOwnProperty.call(tool.function, "description")) return tool; - const cf = { ...(tool.function as Record) }; - delete cf.description; - return { ...tool, function: cf }; - }); - } - } catch {} - } - - return out; +export class CodeBuddyCnExecutor extends CodeBuddyBaseExecutor { + constructor(providerId: string = "codebuddy-cn") { + super(providerId); } } - -export default CodeBuddyCnExecutor; diff --git a/open-sse/executors/codebuddy-intl.ts b/open-sse/executors/codebuddy-intl.ts new file mode 100644 index 000000000000..3469824d99b9 --- /dev/null +++ b/open-sse/executors/codebuddy-intl.ts @@ -0,0 +1,38 @@ +import { CodeBuddyBaseExecutor, NEUTRAL_PROMPT } from "./codebuddy/shared.ts"; +import type { ProviderCredentials } from "./base.ts"; + +/** + * CodeBuddyIntlExecutor โ€” talks to https://www.codebuddy.ai/v2/chat/completions + * + * CodeBuddy International gateway strictly requires the first message in the + * request to be a system prompt (rejects with 400 "first message is not system + * prompt" otherwise). Inherits all shared CodeBuddy gateway behavior and + * prepends a neutral system prompt when callers/probes send none. + */ +export class CodeBuddyIntlExecutor extends CodeBuddyBaseExecutor { + constructor(providerId: string = "codebuddy-intl") { + super(providerId); + } + + transformRequest( + model: string, + body: unknown, + stream: boolean, + credentials: ProviderCredentials + ): unknown { + const transformed = super.transformRequest(model, body, stream, credentials); + if (!transformed || typeof transformed !== "object" || Array.isArray(transformed)) { + return transformed; + } + const out = transformed as Record; + + if (Array.isArray(out.messages)) { + const first = out.messages[0] as Record | undefined; + if (!first || first.role !== "system") { + out.messages = [{ role: "system", content: NEUTRAL_PROMPT }, ...out.messages]; + } + } + + return out; + } +} diff --git a/open-sse/executors/codebuddy/shared.ts b/open-sse/executors/codebuddy/shared.ts new file mode 100644 index 000000000000..30cc035d214d --- /dev/null +++ b/open-sse/executors/codebuddy/shared.ts @@ -0,0 +1,199 @@ +import { DefaultExecutor } from "../default.ts"; +import type { ExecuteInput, ExecutorExecuteResult, ProviderCredentials } from "../base.ts"; + +export const SENSITIVE_CONTENT_REJECTION = + "ๆŠฑๆญ‰๏ผŒ็ณป็ปŸๆฃ€ๆต‹ๅˆฐๆ‚จๅฝ“ๅ‰่พ“ๅ…ฅ็š„ไฟกๆฏๅญ˜ๅœจๆ•ๆ„Ÿๅ†…ๅฎน๏ผŒๆˆ‘ๆ— ๆณ•ๅ“ๅบ”ๆ‚จ็š„่ฏทๆฑ‚๏ผŒ่ฏทๆฃ€ๆŸฅๅŽ้‡ๆ–ฐ่พ“ๅ…ฅ"; +export const LARGE_TOOL_METADATA_BYTES = 64 * 1024; +export const NEUTRAL_PROMPT = + "You are a helpful AI assistant that helps with software engineering tasks."; +export const AGENT_PATTERN = + /you are claude code|claude.?code.+official.+cli|anthropic.+official.+cli|anxthxropic.+official.+cli|you are (?:cursor|windsurf|cline|aider|continue|copilot|cody)|you are an? (?:ai )?(?:coding |code )?agent|cc_entrypoint\s*=\s*(?:cli|vscode|jetbrains|gui)|claude.?code.+issues|give feedback.+claude.?code|you are .{0,30}(?:powerful )?ai agent|orchestration capabilities|OhMyOpenCode|||/i; + +export function responseFromResult(result: ExecutorExecuteResult): Response { + return result instanceof Response ? result : result.response; +} + +export function credentialsFromResult( + result: ExecutorExecuteResult, + fallback: ProviderCredentials +): ProviderCredentials { + if (result instanceof Response || !result.headers) return fallback; + + const authorization = Object.entries(result.headers).find( + ([name]) => name.toLowerCase() === "authorization" + )?.[1]; + if (!authorization?.startsWith("Bearer ")) return fallback; + + return { + ...fallback, + accessToken: authorization.slice("Bearer ".length), + expiresAt: undefined, + }; +} + +export function compactToolDescriptions(body: unknown): unknown | null { + if (!body || typeof body !== "object" || Array.isArray(body)) return null; + + const request = body as Record; + if (!Array.isArray(request.tools) || request.tools.length === 0) return null; + + const originalTools = request.tools; + try { + const serializedTools = JSON.stringify(originalTools); + if (new TextEncoder().encode(serializedTools).byteLength < LARGE_TOOL_METADATA_BYTES) { + return null; + } + } catch { + return null; + } + + let tools: unknown[] | null = null; + originalTools.forEach((tool, index) => { + if (!tool || typeof tool !== "object" || Array.isArray(tool)) return; + + const declaration = tool as Record; + if ( + declaration.type !== "function" || + !declaration.function || + typeof declaration.function !== "object" || + Array.isArray(declaration.function) + ) { + return; + } + + const toolFunction = declaration.function as Record; + if (!Object.prototype.hasOwnProperty.call(toolFunction, "description")) return; + + const compactFunction = { ...toolFunction }; + delete compactFunction.description; + tools ??= originalTools.slice(); + tools[index] = { ...declaration, function: compactFunction }; + }); + + return tools ? { ...request, tools } : null; +} + +export async function isSensitiveContentRejection(response: Response): Promise { + if (response.status !== 400) return false; + const responseText = await response + .clone() + .text() + .catch(() => ""); + return responseText.includes(SENSITIVE_CONTENT_REJECTION); +} + +export function flattenContent(content: unknown): string { + if (typeof content === "string") return content; + if (Array.isArray(content)) { + return (content as Array>) + .map((b) => (b && typeof b.text === "string" ? b.text : "")) + .join("\n"); + } + return ""; +} + +/** + * Shared base executor for CodeBuddy gateways (Tencent CN and International). + * + * Both speak OpenAI-compatible SSE over their respective gateways. Shared behavior: + * - forces stream: true (non-stream rejected with code 11101) + * - handles reasoning_effort (strips none/off, adds reasoning_summary:"auto") + * - sanitizes agent system prompts to avoid Tencent's content filter + * - proactively strips oversized tool descriptions (>64KB) + * - retries sensitive-content 400 rejections once with compact tool descriptions + */ +export class CodeBuddyBaseExecutor extends DefaultExecutor { + constructor(providerId: string) { + super(providerId); + } + + async execute(input: ExecuteInput): Promise { + const result = await super.execute(input); + if (!(await isSensitiveContentRejection(responseFromResult(result)))) { + return result; + } + + const compactBody = compactToolDescriptions(input.body); + if (!compactBody) return result; + + const logTag = (this.provider || "codebuddy").toUpperCase().replace(/-/g, "_"); + input.log?.debug?.( + logTag, + "Upstream rejected an oversized tool request as sensitive content; retrying with compact tool descriptions" + ); + return super.execute({ + ...input, + body: compactBody, + credentials: credentialsFromResult(result, input.credentials), + }); + } + + transformRequest( + model: string, + body: unknown, + stream: boolean, + credentials: ProviderCredentials + ): unknown { + const transformed = super.transformRequest(model, body, stream, credentials); + if (!transformed || typeof transformed !== "object" || Array.isArray(transformed)) { + return transformed; + } + const out = transformed as Record; + out.stream = true; + + const eff = out.reasoning_effort; + if (eff === "none" || eff === "off") { + delete out.reasoning_effort; + } else if (eff) { + out.reasoning_summary = "auto"; + } + + // --- Agent system prompt replacement --- + if (out.system) { + const text = flattenContent(out.system); + if (text && (text.length > 2000 || AGENT_PATTERN.test(text))) { + out.system = NEUTRAL_PROMPT; + } + } + + if (Array.isArray(out.messages)) { + out.messages = (out.messages as Array>).map((message) => { + if (!message || message.role !== "system") return message; + const text = flattenContent(message.content); + if (!text) return message; + if (text.length > 2000 || AGENT_PATTERN.test(text)) { + return typeof message.content === "string" + ? { ...message, content: NEUTRAL_PROMPT } + : { ...message, content: [{ type: "text", text: NEUTRAL_PROMPT }] }; + } + return message; + }); + } + + // --- Strip oversized tool descriptions (>64KB) --- + if (Array.isArray(out.tools) && out.tools.length > 0) { + try { + const s = JSON.stringify(out.tools); + if (new TextEncoder().encode(s).byteLength >= 65536) { + out.tools = (out.tools as Array>).map((tool) => { + if (!tool || typeof tool !== "object" || Array.isArray(tool)) return tool; + if ( + tool.type !== "function" || + !tool.function || + typeof tool.function !== "object" || + Array.isArray(tool.function) + ) { + return tool; + } + if (!Object.prototype.hasOwnProperty.call(tool.function, "description")) return tool; + const cf = { ...(tool.function as Record) }; + delete cf.description; + return { ...tool, function: cf }; + }); + } + } catch {} + } + + return out; + } +} diff --git a/open-sse/executors/index.ts b/open-sse/executors/index.ts index 20b093b3e69c..43496d0e5e01 100644 --- a/open-sse/executors/index.ts +++ b/open-sse/executors/index.ts @@ -168,6 +168,8 @@ const lazyExecutors: Record Promise> = { gc: () => import("./grok-cli.ts").then((m) => new m.GrokCliExecutor()), // Alias "codebuddy-cn": () => import("./codebuddy-cn.ts").then((m) => new m.CodeBuddyCnExecutor()), cbcn: () => import("./codebuddy-cn.ts").then((m) => new m.CodeBuddyCnExecutor()), // Alias for codebuddy-cn + "codebuddy-intl": () => import("./codebuddy-intl.ts").then((m) => new m.CodeBuddyIntlExecutor()), + cbai: () => import("./codebuddy-intl.ts").then((m) => new m.CodeBuddyIntlExecutor()), // Alias for codebuddy-intl "zenmux-free": () => import("./zenmux-free.ts").then((m) => new m.ZenmuxFreeExecutor()), "cloudflare-playground": () => import("./cloudflare-playground.ts").then((m) => new m.CloudflarePlaygroundExecutor()), diff --git a/open-sse/services/tokenRefresh.ts b/open-sse/services/tokenRefresh.ts index 96255a2def5f..60674f5c7643 100755 --- a/open-sse/services/tokenRefresh.ts +++ b/open-sse/services/tokenRefresh.ts @@ -40,6 +40,7 @@ import { refreshWithRetry, } from "./tokenRefresh/circuitBreaker.ts"; import { refreshCodebuddyCnToken } from "./tokenRefresh/providers/codebuddyCn.ts"; +import { refreshCodebuddyIntlToken } from "./tokenRefresh/providers/codebuddyIntl.ts"; import { refreshWorkbuddyToken } from "./tokenRefresh/providers/workbuddy.ts"; import { refreshClineToken } from "./tokenRefresh/providers/cline.ts"; import { refreshKimiCodingToken } from "./tokenRefresh/providers/kimiCoding.ts"; @@ -472,6 +473,9 @@ async function _getAccessTokenInternal(provider, credentials, log, proxyConfig: case "codebuddy-cn": return await refreshCodebuddyCnToken(credentials.refreshToken, log, proxyConfig); + case "codebuddy-intl": + return await refreshCodebuddyIntlToken(credentials.refreshToken, log, proxyConfig); + case "workbuddy": return await refreshWorkbuddyToken(credentials.refreshToken, log, proxyConfig); @@ -506,6 +510,7 @@ export function supportsTokenRefresh(provider) { // testStatus="expired" / errorCode="no_refresh_token". "gitlab-duo", "codebuddy-cn", + "codebuddy-intl", "workbuddy", "cursor", ]); diff --git a/open-sse/services/tokenRefresh/providers/codebuddyCn.ts b/open-sse/services/tokenRefresh/providers/codebuddyCn.ts index 993007420a7a..97dd9ee3778f 100644 --- a/open-sse/services/tokenRefresh/providers/codebuddyCn.ts +++ b/open-sse/services/tokenRefresh/providers/codebuddyCn.ts @@ -1,71 +1,12 @@ // @ts-nocheck -// Extracted from open-sse/services/tokenRefresh.ts โ€” see ../shared.ts for -// provenance notes (ported idea from KooshaPari's PR #7338, redone on tip). -import { runWithProxyContext } from "../../../utils/proxyFetch.ts"; import type { RefreshLogger } from "../shared.ts"; +import { refreshCodebuddyToken } from "./codebuddyShared.ts"; -/** - * CodeBuddy CN (Tencent) token refresh โ€” POST /v2/plugin/auth/token/refresh with - * the refresh token carried in the X-Refresh-Token header (not a form body), - * matching the official CodeBuddy CLI. Response: { code: 0, data: }. - */ export async function refreshCodebuddyCnToken( refreshToken: string, log: RefreshLogger, proxyConfig: unknown = null ) { - if (!refreshToken) return null; const { CODEBUDDY_CN_CONFIG } = await import("@/lib/oauth/constants/oauth"); - const oauth = CODEBUDDY_CN_CONFIG; - try { - const response = await runWithProxyContext(proxyConfig, () => - fetch(oauth.refreshUrl, { - method: "POST", - headers: { - "Content-Type": "application/json", - Accept: "application/json", - "User-Agent": oauth.userAgent, - "X-Requested-With": "XMLHttpRequest", - "X-Domain": "copilot.tencent.com", - "X-Refresh-Token": refreshToken, - "X-Auth-Refresh-Source": "plugin", - "X-Product": "SaaS", - }, - body: "{}", - }) - ); - - if (!response.ok) { - const errorText = await response.text(); - log?.error?.("TOKEN_REFRESH", "Failed to refresh CodeBuddy CN token", { - status: response.status, - error: errorText, - }); - return null; - } - - const data = await response.json(); - if (data?.code !== 0 || !data?.data?.accessToken) { - log?.error?.("TOKEN_REFRESH", "CodeBuddy CN token refresh returned no token", { - code: data?.code, - msg: data?.msg, - }); - return null; - } - - log?.info?.("TOKEN_REFRESH", "Successfully refreshed CodeBuddy CN token", { - hasNewAccessToken: !!data.data.accessToken, - hasNewRefreshToken: !!data.data.refreshToken, - expiresIn: data.data.expiresIn, - }); - - return { - accessToken: data.data.accessToken, - refreshToken: data.data.refreshToken || refreshToken, - expiresIn: data.data.expiresIn, - }; - } catch (error) { - log?.error?.("TOKEN_REFRESH", `Network error refreshing CodeBuddy CN token: ${error?.message}`); - return null; - } + return refreshCodebuddyToken(CODEBUDDY_CN_CONFIG, refreshToken, log, proxyConfig, "CodeBuddy CN"); } diff --git a/open-sse/services/tokenRefresh/providers/codebuddyIntl.ts b/open-sse/services/tokenRefresh/providers/codebuddyIntl.ts new file mode 100644 index 000000000000..91e869c59e3b --- /dev/null +++ b/open-sse/services/tokenRefresh/providers/codebuddyIntl.ts @@ -0,0 +1,18 @@ +// @ts-nocheck +import type { RefreshLogger } from "../shared.ts"; +import { refreshCodebuddyToken } from "./codebuddyShared.ts"; + +export async function refreshCodebuddyIntlToken( + refreshToken: string, + log: RefreshLogger, + proxyConfig: unknown = null +) { + const { CODEBUDDY_INTL_CONFIG } = await import("@/lib/oauth/constants/oauth"); + return refreshCodebuddyToken( + CODEBUDDY_INTL_CONFIG, + refreshToken, + log, + proxyConfig, + "CodeBuddy Intl" + ); +} diff --git a/open-sse/services/tokenRefresh/providers/codebuddyShared.ts b/open-sse/services/tokenRefresh/providers/codebuddyShared.ts new file mode 100644 index 000000000000..ab39dd237dd7 --- /dev/null +++ b/open-sse/services/tokenRefresh/providers/codebuddyShared.ts @@ -0,0 +1,75 @@ +// @ts-nocheck +// Extracted from open-sse/services/tokenRefresh.ts โ€” see ../shared.ts for +// provenance notes (ported idea from KooshaPari's PR #7338, redone on tip). +import { runWithProxyContext } from "../../../utils/proxyFetch.ts"; +import type { RefreshLogger } from "../shared.ts"; + +/** + * Shared CodeBuddy token refresh โ€” POST /v2/plugin/auth/token/refresh with + * the refresh token carried in the X-Refresh-Token header (not a form body), + * matching the official CodeBuddy CLI. Response: { code: 0, data: }. + */ +export async function refreshCodebuddyToken( + oauthConfig: { refreshUrl: string; userAgent: string; domain?: string }, + refreshToken: string, + log: RefreshLogger, + proxyConfig: unknown = null, + realmLabel: string = "CodeBuddy" +) { + if (!refreshToken) return null; + const domain = oauthConfig.domain || "copilot.tencent.com"; + try { + const response = await runWithProxyContext(proxyConfig, () => + fetch(oauthConfig.refreshUrl, { + method: "POST", + headers: { + "Content-Type": "application/json", + Accept: "application/json", + "User-Agent": oauthConfig.userAgent, + "X-Requested-With": "XMLHttpRequest", + "X-Domain": domain, + "X-Refresh-Token": refreshToken, + "X-Auth-Refresh-Source": "plugin", + "X-Product": "SaaS", + }, + body: "{}", + }) + ); + + if (!response.ok) { + const errorText = await response.text(); + log?.error?.("TOKEN_REFRESH", `Failed to refresh ${realmLabel} token`, { + status: response.status, + error: errorText, + }); + return null; + } + + const data = await response.json(); + if (data?.code !== 0 || !data?.data?.accessToken) { + log?.error?.("TOKEN_REFRESH", `${realmLabel} token refresh returned no token`, { + code: data?.code, + msg: data?.msg, + }); + return null; + } + + log?.info?.("TOKEN_REFRESH", `Successfully refreshed ${realmLabel} token`, { + hasNewAccessToken: !!data.data.accessToken, + hasNewRefreshToken: !!data.data.refreshToken, + expiresIn: data.data.expiresIn, + }); + + return { + accessToken: data.data.accessToken, + refreshToken: data.data.refreshToken || refreshToken, + expiresIn: data.data.expiresIn, + }; + } catch (error) { + log?.error?.( + "TOKEN_REFRESH", + `Network error refreshing ${realmLabel} token: ${error?.message}` + ); + return null; + } +} diff --git a/open-sse/services/usage.ts b/open-sse/services/usage.ts index 895d89a06400..de764abe71b2 100644 --- a/open-sse/services/usage.ts +++ b/open-sse/services/usage.ts @@ -55,6 +55,7 @@ import { getLlmgatewayUsage } from "./usage/llmgateway.ts"; import { getLyceumUsage } from "./usage/lyceum.ts"; import { getOllamaCloudUsage } from "./opencodeOllamaUsage.ts"; import { getCodeBuddyCnUsage } from "./usage/codebuddy-cn.ts"; +import { getCodeBuddyIntlUsage } from "./usage/codebuddy-intl.ts"; import { getPromptQlUsage } from "./usage/promptql.ts"; import { getHyperAgentUsage } from "./usage/hyperagent.ts"; import { getGitHubUsage, formatGitHubQuotaSnapshot, inferGitHubPlanName } from "./usage/github.ts"; @@ -236,6 +237,9 @@ export async function getUsageForProvider( return await getGrokCliUsage(accessToken); case "codebuddy-cn": return await getCodeBuddyCnUsage(accessToken, apiKey, providerSpecificData); + case "codebuddy-intl": + case "cbai": + return await getCodeBuddyIntlUsage(accessToken, apiKey, providerSpecificData); case "promptql": case "pql": // DDN lux JWTs carry projectId only in JWT aud; connection.projectId may be set by sync. diff --git a/open-sse/services/usage/codebuddy-cn.ts b/open-sse/services/usage/codebuddy-cn.ts index d5eeff4af84c..1cc594b8e834 100644 --- a/open-sse/services/usage/codebuddy-cn.ts +++ b/open-sse/services/usage/codebuddy-cn.ts @@ -1,201 +1,19 @@ -/** - * CodeBuddy CN usage handler โ€” scoped to the "codebuddy-cn" provider. - * - * Quota lives behind a Tencent billing endpoint (POST, payload wrapped twice - * under data.Response.Data). It mixes two credit types that must NOT be merged: - * - * - Refill / base ("ๅŸบ็ก€ไฝ“้ชŒๅŒ…"): recurring allowance whose cycle resets long - * before the resource itself expires (CycleEndTime << DeductionEndTime). - * Live numbers in the *Cycle* fields; resetAt = next refresh. - * - Bonus ("ๆดปๅŠจ่ต ้€ๅŒ…"): one-shot credits that run a single cycle and expire - * (CycleEndTime โ‰ˆ DeductionEndTime). Numbers in the plain Capacity fields. - * - * One quota row per package โ€” cadence label (Monthly/Weekly/Daily) for refill - * packs, "Bonus Pack N" for bonus packs (soonest-expiring first). - */ - import { CODEBUDDY_CN_USER_AGENT } from "../../config/providerHeaderProfiles.ts"; +import { fetchCodeBuddyQuotaFromEndpoint, type CodeBuddyUsageResult } from "./codebuddyShared.ts"; -const USAGE_URL = "https://copilot.tencent.com/v2/billing/meter/get-user-resource"; - -interface TencentAccount { - PackageName?: string; - SubProductName?: string; - CycleStartTime?: string | number; - CycleEndTime?: string | number; - DeductionEndTime?: string | number; - CycleCapacitySize?: number | string; - CycleCapacitySizePrecise?: string | number; - CycleCapacityUsed?: number | string; - CycleCapacityUsedPrecise?: string | number; - CapacitySize?: number | string; - CapacitySizePrecise?: string | number; - CapacityUsed?: number | string; - CapacityUsedPrecise?: string | number; -} - -function parseResetTime(value: unknown): string | null { - if (!value) return null; - try { - if (value instanceof Date) return value.toISOString(); - if (typeof value === "number") { - const ts = value < 1e12 ? value * 1000 : value; - const d = new Date(ts); - return d.getTime() > 0 ? d.toISOString() : null; - } - if (typeof value === "string") { - if (/^\d+$/.test(value)) { - const n = Number(value); - const d = new Date(n < 1e12 ? n * 1000 : n); - return d.getTime() > 0 ? d.toISOString() : null; - } - const d = new Date(value); - return Number.isNaN(d.getTime()) || d.getTime() <= 0 ? null : d.toISOString(); - } - return null; - } catch { - return null; - } -} - -// Prefer the *Precise string fields (exact), fall back to the numeric ones. -function num(precise: unknown, plain: unknown): number { - const n = Number(precise ?? plain); - return Number.isFinite(n) ? n : 0; -} - -// Label a refill pack by its cycle length (Monthly is the common CodeBuddy case). -function refillCadence(acc: TencentAccount): "Monthly" | "Weekly" | "Daily" { - const start = parseResetTime(acc.CycleStartTime); - const end = parseResetTime(acc.CycleEndTime); - if (start && end) { - const days = (new Date(end).getTime() - new Date(start).getTime()) / 86400000; - if (days <= 1.5) return "Daily"; - if (days <= 10) return "Weekly"; - } - return "Monthly"; -} - -function cycleEndMs(acc: TencentAccount): number { - const r = parseResetTime(acc.CycleEndTime); - return r ? new Date(r).getTime() : Number.POSITIVE_INFINITY; -} - -function deductionEndMs(acc: TencentAccount): number { - const v = acc.DeductionEndTime; - if (typeof v === "number") return v < 1e12 ? v * 1000 : v; - if (typeof v === "string" && /^\d+$/.test(v)) { - const n = Number(v); - return n < 1e12 ? n * 1000 : n; - } - const r = parseResetTime(v); - return r ? new Date(r).getTime() : Number.POSITIVE_INFINITY; -} - -// Refill packs roll into a new cycle before the resource expires; bonus packs -// end at expiry. >2d gap between cycle end and validity end = refill. -const REFILL_GAP_MS = 2 * 24 * 60 * 60 * 1000; -function isRefill(acc: TencentAccount): boolean { - const ce = cycleEndMs(acc); - const de = deductionEndMs(acc); - return Number.isFinite(ce) && Number.isFinite(de) && de - ce > REFILL_GAP_MS; -} - -interface CodeBuddyUsageResult { - plan?: string; - quotas?: Record< - string, - { - used: number; - total: number; - resetAt: string | null; - unlimited: boolean; - } - >; - message?: string; -} +export const CN_USAGE_URL = "https://copilot.tencent.com/v2/billing/meter/get-user-resource"; export async function getCodeBuddyCnUsage( accessToken?: string, apiKey?: string, _providerSpecificData?: unknown ): Promise { - const token = accessToken || apiKey; - if (!token) { - return { message: "CodeBuddy CN credential not available." }; - } - - try { - const response = await fetch(USAGE_URL, { - method: "POST", - headers: { - Authorization: `Bearer ${token}`, - "Content-Type": "application/json", - Accept: "application/json", - "User-Agent": CODEBUDDY_CN_USER_AGENT, - "X-Product": "SaaS", - "X-IDE-Type": "CLI", - "X-IDE-Name": "CLI", - "x-requested-with": "XMLHttpRequest", - "x-codebuddy-request": "1", - }, - body: "{}", - }); - - if (response.status === 401 || response.status === 403) { - return { message: "CodeBuddy CN credential invalid or expired." }; - } - if (!response.ok) { - return { message: `CodeBuddy CN quota API error (${response.status}).` }; - } - - const json: any = await response.json(); - if (json?.code !== 0) { - return { message: `CodeBuddy CN quota error: ${json?.msg || "unknown"}` }; - } - - const data = json?.data?.Response?.Data || {}; - const accountsRaw: TencentAccount[] = Array.isArray(data.Accounts) ? data.Accounts : []; - if (accountsRaw.length === 0) { - return { message: "CodeBuddy CN connected. No credit package found." }; - } - - const byExpiry = (a: TencentAccount, b: TencentAccount) => cycleEndMs(a) - cycleEndMs(b); - const refills = accountsRaw.filter(isRefill).sort(byExpiry); - const bonuses = accountsRaw.filter((a) => !isRefill(a)).sort(byExpiry); - - const quotas: NonNullable = {}; - const seenRefill: Record = {}; - refills.forEach((acc) => { - const base = refillCadence(acc); - seenRefill[base] = (seenRefill[base] || 0) + 1; - const name = seenRefill[base] > 1 ? `${base} ${seenRefill[base]}` : base; - quotas[name] = { - used: num(acc.CycleCapacityUsedPrecise, acc.CycleCapacityUsed), - total: num(acc.CycleCapacitySizePrecise, acc.CycleCapacitySize), - resetAt: parseResetTime(acc.CycleEndTime), - unlimited: false, - }; - }); - bonuses.forEach((acc, i) => { - quotas[`Bonus Pack ${i + 1}`] = { - used: num(acc.CapacityUsedPrecise, acc.CapacityUsed), - total: num(acc.CapacitySizePrecise, acc.CapacitySize), - resetAt: parseResetTime(acc.CycleEndTime), - unlimited: false, - }; - }); - - const basePkg = refills[0] || accountsRaw[0] || {}; - const plan = basePkg.PackageName || basePkg.SubProductName || "CodeBuddy CN"; - - return { plan, quotas }; - } catch (error: any) { - // Hard Rule #12: no raw err.message in any HTTP/SSE/executor response. Usage - // handler returns a controlled string for the dashboard; do not include the - // raw exception text in case it carries a path/stack snippet. - return { message: "CodeBuddy CN error: failed to fetch quota." }; - } + return fetchCodeBuddyQuotaFromEndpoint(accessToken, apiKey, { + url: CN_USAGE_URL, + userAgent: CODEBUDDY_CN_USER_AGENT, + ideType: "CLI", + label: "CodeBuddy CN", + }); } export default getCodeBuddyCnUsage; diff --git a/open-sse/services/usage/codebuddy-intl.ts b/open-sse/services/usage/codebuddy-intl.ts new file mode 100644 index 000000000000..e062fc7bfde8 --- /dev/null +++ b/open-sse/services/usage/codebuddy-intl.ts @@ -0,0 +1,19 @@ +import { CODEBUDDY_INTL_USER_AGENT } from "../../config/providerHeaderProfiles.ts"; +import { fetchCodeBuddyQuotaFromEndpoint, type CodeBuddyUsageResult } from "./codebuddyShared.ts"; + +export const INTL_USAGE_URL = "https://www.codebuddy.ai/v2/billing/meter/get-user-resource"; + +export async function getCodeBuddyIntlUsage( + accessToken?: string, + apiKey?: string, + _providerSpecificData?: unknown +): Promise { + return fetchCodeBuddyQuotaFromEndpoint(accessToken, apiKey, { + url: INTL_USAGE_URL, + userAgent: CODEBUDDY_INTL_USER_AGENT, + ideType: "IDE", + label: "CodeBuddy Intl", + }); +} + +export default getCodeBuddyIntlUsage; diff --git a/open-sse/services/usage/codebuddyShared.ts b/open-sse/services/usage/codebuddyShared.ts new file mode 100644 index 000000000000..8894ab34b00c --- /dev/null +++ b/open-sse/services/usage/codebuddyShared.ts @@ -0,0 +1,190 @@ +export interface TencentAccount { + PackageName?: string; + SubProductName?: string; + CycleStartTime?: string | number; + CycleEndTime?: string | number; + DeductionEndTime?: string | number; + CycleCapacitySize?: number | string; + CycleCapacitySizePrecise?: string | number; + CycleCapacityUsed?: number | string; + CycleCapacityUsedPrecise?: string | number; + CapacitySize?: number | string; + CapacitySizePrecise?: string | number; + CapacityUsed?: number | string; + CapacityUsedPrecise?: string | number; +} + +export function parseResetTime(value: unknown): string | null { + if (!value) return null; + try { + if (value instanceof Date) return value.toISOString(); + if (typeof value === "number") { + const ts = value < 1e12 ? value * 1000 : value; + const d = new Date(ts); + return d.getTime() > 0 ? d.toISOString() : null; + } + if (typeof value === "string") { + if (/^\d+$/.test(value)) { + const n = Number(value); + const d = new Date(n < 1e12 ? n * 1000 : n); + return d.getTime() > 0 ? d.toISOString() : null; + } + const d = new Date(value); + return Number.isNaN(d.getTime()) || d.getTime() <= 0 ? null : d.toISOString(); + } + return null; + } catch { + return null; + } +} + +export function num(precise: unknown, plain: unknown): number { + const n = Number(precise ?? plain); + return Number.isFinite(n) ? n : 0; +} + +export function refillCadence(acc: TencentAccount): "Monthly" | "Weekly" | "Daily" { + const start = parseResetTime(acc.CycleStartTime); + const end = parseResetTime(acc.CycleEndTime); + if (start && end) { + const days = (new Date(end).getTime() - new Date(start).getTime()) / 86400000; + if (days <= 1.5) return "Daily"; + if (days <= 10) return "Weekly"; + } + return "Monthly"; +} + +export function cycleEndMs(acc: TencentAccount): number { + const r = parseResetTime(acc.CycleEndTime); + return r ? new Date(r).getTime() : Number.POSITIVE_INFINITY; +} + +export function deductionEndMs(acc: TencentAccount): number { + const v = acc.DeductionEndTime; + if (typeof v === "number") return v < 1e12 ? v * 1000 : v; + if (typeof v === "string" && /^\d+$/.test(v)) { + const n = Number(v); + return n < 1e12 ? n * 1000 : n; + } + const r = parseResetTime(v); + return r ? new Date(r).getTime() : Number.POSITIVE_INFINITY; +} + +export const REFILL_GAP_MS = 2 * 24 * 60 * 60 * 1000; +export function isRefill(acc: TencentAccount): boolean { + const ce = cycleEndMs(acc); + const de = deductionEndMs(acc); + return Number.isFinite(ce) && Number.isFinite(de) && de - ce > REFILL_GAP_MS; +} + +export interface CodeBuddyUsageResult { + plan?: string; + quotas?: Record< + string, + { + used: number; + total: number; + resetAt: string | null; + unlimited: boolean; + } + >; + message?: string; +} + +export interface CodeBuddyQuotaOptions { + url: string; + userAgent: string; + ideType: string; + label: string; +} + +export async function fetchCodeBuddyQuotaFromEndpoint( + accessToken: string | undefined, + apiKey: string | undefined, + options: CodeBuddyQuotaOptions +): Promise { + const token = accessToken || apiKey; + const { url, userAgent, ideType, label } = options; + if (!token) { + return { message: `${label} credential not available.` }; + } + + try { + const response = await fetch(url, { + method: "POST", + headers: { + Authorization: `Bearer ${token}`, + "Content-Type": "application/json", + Accept: "application/json", + "User-Agent": userAgent, + "X-Product": "SaaS", + "X-IDE-Type": ideType, + "X-IDE-Name": ideType, + "x-requested-with": "XMLHttpRequest", + "x-codebuddy-request": "1", + }, + body: "{}", + }); + + if (response.status === 401 || response.status === 403) { + return { message: `${label} credential invalid or expired.` }; + } + if (!response.ok) { + return { message: `${label} quota API error (${response.status}).` }; + } + + const json = (await response.json()) as { + code?: number; + msg?: string; + data?: { + Response?: { + Data?: { + Accounts?: TencentAccount[]; + }; + }; + }; + }; + if (json?.code !== 0) { + return { message: `${label} quota error: ${json?.msg || "unknown"}` }; + } + + const data = json?.data?.Response?.Data || {}; + const accountsRaw: TencentAccount[] = Array.isArray(data.Accounts) ? data.Accounts : []; + if (accountsRaw.length === 0) { + return { message: `${label} connected. No credit package found.` }; + } + + const byExpiry = (a: TencentAccount, b: TencentAccount) => cycleEndMs(a) - cycleEndMs(b); + const refills = accountsRaw.filter(isRefill).sort(byExpiry); + const bonuses = accountsRaw.filter((a) => !isRefill(a)).sort(byExpiry); + + const quotas: NonNullable = {}; + const seenRefill: Record = {}; + refills.forEach((acc) => { + const base = refillCadence(acc); + seenRefill[base] = (seenRefill[base] || 0) + 1; + const name = seenRefill[base] > 1 ? `${base} ${seenRefill[base]}` : base; + quotas[name] = { + used: num(acc.CycleCapacityUsedPrecise, acc.CycleCapacityUsed), + total: num(acc.CycleCapacitySizePrecise, acc.CycleCapacitySize), + resetAt: parseResetTime(acc.CycleEndTime), + unlimited: false, + }; + }); + bonuses.forEach((acc, i) => { + quotas[`Bonus Pack ${i + 1}`] = { + used: num(acc.CapacityUsedPrecise, acc.CapacityUsed), + total: num(acc.CapacitySizePrecise, acc.CapacitySize), + resetAt: parseResetTime(acc.CycleEndTime), + unlimited: false, + }; + }); + + const basePkg = refills[0] || accountsRaw[0] || {}; + const plan = basePkg.PackageName || basePkg.SubProductName || label; + + return { plan, quotas }; + } catch (_error: unknown) { + return { message: `${label} error: failed to fetch quota.` }; + } +} diff --git a/open-sse/services/usage/fetcherProviders.ts b/open-sse/services/usage/fetcherProviders.ts index 407544345266..8223d260ff46 100644 --- a/open-sse/services/usage/fetcherProviders.ts +++ b/open-sse/services/usage/fetcherProviders.ts @@ -61,6 +61,8 @@ export const USAGE_FETCHER_PROVIDERS = [ "vertex", "vertex-partner", "codebuddy-cn", + "codebuddy-intl", + "cbai", "openrouter", // LLM Gateway DevPass allowance (GET /v1/key โ†’ monthly + weekly premium) "llmgateway", diff --git a/open-sse/services/usage/supportedProviders.ts b/open-sse/services/usage/supportedProviders.ts index 161f818ffda2..c37b49cf15aa 100644 --- a/open-sse/services/usage/supportedProviders.ts +++ b/open-sse/services/usage/supportedProviders.ts @@ -52,6 +52,8 @@ export const USAGE_SUPPORTED_PROVIDERS: readonly string[] = [ "vertex", "vertex-partner", "codebuddy-cn", + "codebuddy-intl", + "cbai", // PromptQL playground credits (getCreditSummary โ†’ USD micros) "promptql", "pql", diff --git a/package.json b/package.json index f820ee9a0c3d..a867685e7daf 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "omniroute", "version": "3.8.52", - "description": "Unified AI router with 370 providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.", + "description": "Unified AI router with 372 providers, RTK+Caveman compression, auto fallback, MCP/A2A, desktop, PWA, and OpenAI-compatible APIs.", "type": "module", "bin": { "omniroute": "bin/omniroute.mjs", diff --git a/public/images/tier-flow-dark.svg b/public/images/tier-flow-dark.svg index 0d79669dc17c..02b580d6f163 100644 --- a/public/images/tier-flow-dark.svg +++ b/public/images/tier-flow-dark.svg @@ -1,6 +1,6 @@ - + OmniRoute 4-tier fallback - OmniRoute 4-tier fallback: your IDE or CLI calls one local endpoint and the OmniRoute Smart Router fails over across 370 providers in 4 tiers โ€” Tier 1 Subscription, Tier 2 API, Tier 3 Cheap, Tier 4 Free. + OmniRoute 4-tier fallback: your IDE or CLI calls one local endpoint and the OmniRoute Smart Router fails over across 372 providers in 4 tiers โ€” Tier 1 Subscription, Tier 2 API, Tier 3 Cheap, Tier 4 Free. @@ -15,7 +15,7 @@ OmniRoute 4-tier fallback - Never stop building โ€” automatic zero-config failover across 370 providers + Never stop building โ€” automatic zero-config failover across 372 providers diff --git a/public/images/tier-flow-light.svg b/public/images/tier-flow-light.svg index b2f22060d816..c7715c3b3d08 100644 --- a/public/images/tier-flow-light.svg +++ b/public/images/tier-flow-light.svg @@ -1,6 +1,6 @@ - + OmniRoute 4-tier fallback - OmniRoute 4-tier fallback: your IDE or CLI calls one local endpoint and the OmniRoute Smart Router fails over across 370 providers in 4 tiers โ€” Tier 1 Subscription, Tier 2 API, Tier 3 Cheap, Tier 4 Free. + OmniRoute 4-tier fallback: your IDE or CLI calls one local endpoint and the OmniRoute Smart Router fails over across 372 providers in 4 tiers โ€” Tier 1 Subscription, Tier 2 API, Tier 3 Cheap, Tier 4 Free. @@ -15,7 +15,7 @@ OmniRoute 4-tier fallback - Never stop building โ€” automatic zero-config failover across 370 providers + Never stop building โ€” automatic zero-config failover across 372 providers diff --git a/src/app/api/oauth/[provider]/[action]/route.ts b/src/app/api/oauth/[provider]/[action]/route.ts index 3cd2e6be63e9..895169e4d3e4 100755 --- a/src/app/api/oauth/[provider]/[action]/route.ts +++ b/src/app/api/oauth/[provider]/[action]/route.ts @@ -68,6 +68,7 @@ const NO_PKCE_DEVICE_CODE_PROVIDERS = new Set([ "kimi-coding", "kilocode", "codebuddy-cn", + "codebuddy-intl", "workbuddy", "grok-cli", "ghe-copilot", diff --git a/src/app/api/providers/[id]/test/oauthTestConfig.ts b/src/app/api/providers/[id]/test/oauthTestConfig.ts index bdcbefb23522..2092e0105e4a 100644 --- a/src/app/api/providers/[id]/test/oauthTestConfig.ts +++ b/src/app/api/providers/[id]/test/oauthTestConfig.ts @@ -282,6 +282,10 @@ export const OAUTH_TEST_CONFIG: Record = { checkExpiry: true, refreshable: true, }, + "codebuddy-intl": { + checkExpiry: true, + refreshable: true, + }, workbuddy: { // WorkBuddy is a separate product from CodeBuddy CN (own host and account // system) but shares the same plugin-auth protocol shape, so the same diff --git a/src/lib/oauth/constants/oauth.ts b/src/lib/oauth/constants/oauth.ts index 7c6e4aab5cb1..55f1501cc4f6 100644 --- a/src/lib/oauth/constants/oauth.ts +++ b/src/lib/oauth/constants/oauth.ts @@ -5,6 +5,7 @@ import { } from "@omniroute/open-sse/config/antigravityUpstream.ts"; import { CODEBUDDY_CN_USER_AGENT, + CODEBUDDY_INTL_USER_AGENT, GITHUB_COPILOT_API_VERSION, GITHUB_COPILOT_CHAT_PLUGIN_VERSION, GITHUB_COPILOT_CHAT_USER_AGENT, @@ -116,6 +117,19 @@ export const CODEBUDDY_CN_CONFIG = { refreshUrl: "https://copilot.tencent.com/v2/plugin/auth/token/refresh", userAgent: CODEBUDDY_CN_USER_AGENT, platform: "CLI", + domain: "copilot.tencent.com", + pollInterval: 5000, +}; + +// CodeBuddy International (codebuddy.ai) OAuth Configuration +export const CODEBUDDY_INTL_CONFIG = { + baseUrl: "https://www.codebuddy.ai", + stateUrl: "https://www.codebuddy.ai/v2/plugin/auth/state", + tokenUrl: "https://www.codebuddy.ai/v2/plugin/auth/token", + refreshUrl: "https://www.codebuddy.ai/v2/plugin/auth/token/refresh", + userAgent: CODEBUDDY_INTL_USER_AGENT, + platform: "ide", + domain: "www.codebuddy.ai", pollInterval: 5000, }; @@ -524,6 +538,7 @@ export const PROVIDERS = { DEVIN_CLI: "devin-cli", TRAE: "trae", CODEBUDDY_CN: "codebuddy-cn", + CODEBUDDY_INTL: "codebuddy-intl", WORKBUDDY: "workbuddy", GROK_CLI: "grok-cli", XAI_OAUTH: "xai-oauth", diff --git a/src/lib/oauth/providers/codebuddy-cn.ts b/src/lib/oauth/providers/codebuddy-cn.ts index f24a4de0dba1..e4f0649ef23c 100644 --- a/src/lib/oauth/providers/codebuddy-cn.ts +++ b/src/lib/oauth/providers/codebuddy-cn.ts @@ -1,126 +1,22 @@ import { CODEBUDDY_CN_CONFIG } from "../constants/oauth"; +import { + requestDeviceCode, + pollToken, + mapTokens, + type CodeBuddyDeviceCodeConfig, +} from "./codebuddyDeviceAuth"; /** * CodeBuddy CN (Tencent โ€” copilot.tencent.com) โ€” custom device-auth flow. - * - * 1. POST stateUrl โ†’ { code: 0, data: { state, authUrl } } - * 2. Open authUrl in the browser - * 3. GET tokenUrl?state= until { code: 0, data.accessToken } (11217 = pending) - * - * Mirrors the official CodeBuddy CLI's distinguishing detail: poll is GET with - * the state as a query param, NOT POST/body. */ -type CodeBuddyConfig = typeof CODEBUDDY_CN_CONFIG; - -interface CodeBuddyDeviceCodeResponse { - device_code: string; - user_code: string; - verification_uri: string; - verification_uri_complete: string; - expires_in: number; - interval: number; -} - -interface CodeBuddyTokens { - access_token: string; - refresh_token: string; - token_type: string; - expires_in?: number; -} - -interface CodeBuddyPollResult { - ok: boolean; - data: Record | CodeBuddyTokens; -} - export const codebuddyCn = { config: CODEBUDDY_CN_CONFIG, flowType: "device_code" as const, - - requestDeviceCode: async (config: CodeBuddyConfig): Promise => { - // CodeBuddy reads `platform` from the QUERY string, not the JSON body โ€” sending it only in the - // body returns 400 "platform is empty" (verified). Pass it as a query param; body kept as-is. - const stateUrl = `${config.stateUrl}?platform=${encodeURIComponent(config.platform)}`; - const response = await fetch(stateUrl, { - method: "POST", - headers: { - "Content-Type": "application/json", - Accept: "application/json", - "User-Agent": config.userAgent, - "X-Requested-With": "XMLHttpRequest", - "X-Domain": "copilot.tencent.com", - "X-No-Authorization": "true", - "X-No-User-Id": "true", - "X-Product": "SaaS", - }, - body: JSON.stringify({ platform: config.platform }), - }); - - if (!response.ok) { - const err = await response.text(); - throw new Error(`CodeBuddy state request failed (${response.status})`); - } - - const json = (await response.json()) as { code?: number; data?: any; msg?: string }; - if (json.code !== 0 || !json.data?.state) { - throw new Error(`CodeBuddy state error: ${json.msg || "no state in response"}`); - } - - const state = String(json.data.state); - const authUrl = String(json.data.authUrl || json.data.url || ""); - return { - device_code: state, - user_code: state, - verification_uri: authUrl, - verification_uri_complete: authUrl, - expires_in: 600, - interval: Math.max(1, Math.floor((config.pollInterval || 5000) / 1000)), - }; - }, - - pollToken: async (config: CodeBuddyConfig, deviceCode: string): Promise => { - // GET with state as a query param (not POST/body) โ€” matches the official CLI's - // /v2/plugin/auth/token?state=... endpoint shape. - const response = await fetch( - `${config.tokenUrl}?state=${encodeURIComponent(deviceCode)}`, - { - method: "GET", - headers: { - Accept: "application/json", - "User-Agent": config.userAgent, - "X-Requested-With": "XMLHttpRequest", - "X-Domain": "copilot.tencent.com", - "X-No-Authorization": "true", - "X-No-User-Id": "true", - "X-No-Enterprise-Id": "true", - "X-No-Department-Info": "true", - "X-Product": "SaaS", - }, - } - ); - if (!response.ok) return { ok: false, data: { error: "request_failed" } }; - const data = (await response.json()) as { code?: number; data?: any; msg?: string }; - // code 11217 = pending (RetryFetchToken), code 0 = success - if (data.code === 0 && data.data?.accessToken) { - return { - ok: true, - data: { - access_token: data.data.accessToken, - refresh_token: data.data.refreshToken || "", - token_type: data.data.tokenType || "Bearer", - expires_in: data.data.expiresIn, - }, - }; - } - return { ok: false, data: { code: data.code, msg: data.msg } }; - }, - - mapTokens: (tokens: CodeBuddyTokens) => ({ - accessToken: tokens.access_token, - refreshToken: tokens.refresh_token, - expiresIn: tokens.expires_in || 86400, - providerSpecificData: {}, - }), + requestDeviceCode: (config: CodeBuddyDeviceCodeConfig = CODEBUDDY_CN_CONFIG) => + requestDeviceCode(config), + pollToken: (config: CodeBuddyDeviceCodeConfig = CODEBUDDY_CN_CONFIG, deviceCode: string) => + pollToken(config, deviceCode), + mapTokens, }; export default codebuddyCn; diff --git a/src/lib/oauth/providers/codebuddy-intl.ts b/src/lib/oauth/providers/codebuddy-intl.ts new file mode 100644 index 000000000000..651d9c98c6c2 --- /dev/null +++ b/src/lib/oauth/providers/codebuddy-intl.ts @@ -0,0 +1,22 @@ +import { CODEBUDDY_INTL_CONFIG } from "../constants/oauth"; +import { + requestDeviceCode, + pollToken, + mapTokens, + type CodeBuddyDeviceCodeConfig, +} from "./codebuddyDeviceAuth"; + +/** + * CodeBuddy International (codebuddy.ai) โ€” custom device-auth flow. + */ +export const codebuddyIntl = { + config: CODEBUDDY_INTL_CONFIG, + flowType: "device_code" as const, + requestDeviceCode: (config: CodeBuddyDeviceCodeConfig = CODEBUDDY_INTL_CONFIG) => + requestDeviceCode(config), + pollToken: (config: CodeBuddyDeviceCodeConfig = CODEBUDDY_INTL_CONFIG, deviceCode: string) => + pollToken(config, deviceCode), + mapTokens, +}; + +export default codebuddyIntl; diff --git a/src/lib/oauth/providers/codebuddyDeviceAuth.ts b/src/lib/oauth/providers/codebuddyDeviceAuth.ts new file mode 100644 index 000000000000..fa854694dbd9 --- /dev/null +++ b/src/lib/oauth/providers/codebuddyDeviceAuth.ts @@ -0,0 +1,134 @@ +export interface CodeBuddyDeviceCodeConfig { + stateUrl: string; + tokenUrl: string; + userAgent: string; + platform: string; + domain?: string; + pollInterval?: number; +} + +export interface CodeBuddyDeviceCodeResponse { + device_code: string; + user_code: string; + verification_uri: string; + verification_uri_complete: string; + expires_in: number; + interval: number; +} + +export interface CodeBuddyTokens { + access_token: string; + refresh_token: string; + token_type: string; + expires_in?: number; +} + +interface CodeBuddyEnvelope { + code?: number; + data?: T; + msg?: string; +} + +interface CodeBuddyStatePayload { + state?: string | number; + authUrl?: string; + url?: string; +} + +interface CodeBuddyTokenPayload { + accessToken?: string; + refreshToken?: string; + tokenType?: string; + expiresIn?: number; +} + +export interface CodeBuddyPollResult { + ok: boolean; + data: Record | CodeBuddyTokens; +} + +export async function requestDeviceCode( + config: CodeBuddyDeviceCodeConfig +): Promise { + const stateUrl = `${config.stateUrl}?platform=${encodeURIComponent(config.platform)}`; + const domain = config.domain || "copilot.tencent.com"; + const response = await fetch(stateUrl, { + method: "POST", + headers: { + "Content-Type": "application/json", + Accept: "application/json", + "User-Agent": config.userAgent, + "X-Requested-With": "XMLHttpRequest", + "X-Domain": domain, + "X-No-Authorization": "true", + "X-No-User-Id": "true", + "X-Product": "SaaS", + }, + body: JSON.stringify({ platform: config.platform }), + }); + + if (!response.ok) { + const _err = await response.text(); + throw new Error(`CodeBuddy state request failed (${response.status})`); + } + + const json = (await response.json()) as CodeBuddyEnvelope; + if (json.code !== 0 || !json.data?.state) { + throw new Error(`CodeBuddy state error: ${json.msg || "no state in response"}`); + } + + const state = String(json.data.state); + const authUrl = String(json.data.authUrl || json.data.url || ""); + return { + device_code: state, + user_code: state, + verification_uri: authUrl, + verification_uri_complete: authUrl, + expires_in: 600, + interval: Math.max(1, Math.floor((config.pollInterval || 5000) / 1000)), + }; +} + +export async function pollToken( + config: CodeBuddyDeviceCodeConfig, + deviceCode: string +): Promise { + const domain = config.domain || "copilot.tencent.com"; + const response = await fetch(`${config.tokenUrl}?state=${encodeURIComponent(deviceCode)}`, { + method: "GET", + headers: { + Accept: "application/json", + "User-Agent": config.userAgent, + "X-Requested-With": "XMLHttpRequest", + "X-Domain": domain, + "X-No-Authorization": "true", + "X-No-User-Id": "true", + "X-No-Enterprise-Id": "true", + "X-No-Department-Info": "true", + "X-Product": "SaaS", + }, + }); + if (!response.ok) return { ok: false, data: { error: "request_failed" } }; + const data = (await response.json()) as CodeBuddyEnvelope; + if (data.code === 0 && data.data?.accessToken) { + return { + ok: true, + data: { + access_token: data.data.accessToken, + refresh_token: data.data.refreshToken || "", + token_type: data.data.tokenType || "Bearer", + expires_in: data.data.expiresIn, + }, + }; + } + return { ok: false, data: { code: data.code, msg: data.msg } }; +} + +export function mapTokens(tokens: CodeBuddyTokens) { + return { + accessToken: tokens.access_token, + refreshToken: tokens.refresh_token, + expiresIn: tokens.expires_in || 86400, + providerSpecificData: {}, + }; +} diff --git a/src/lib/oauth/providers/index.ts b/src/lib/oauth/providers/index.ts index f6ba3563c293..1de72a50104f 100644 --- a/src/lib/oauth/providers/index.ts +++ b/src/lib/oauth/providers/index.ts @@ -29,6 +29,7 @@ import { grokCli } from "./grok-cli"; import { xaiOauth } from "./xai-oauth"; import { openference } from "./openference"; import { codebuddyCn } from "./codebuddy-cn"; +import { codebuddyIntl } from "./codebuddy-intl"; import { workbuddy } from "./workbuddy"; import { zed } from "./zed"; import { zedHosted } from "./zed-hosted"; @@ -63,6 +64,7 @@ export const PROVIDERS = { "xai-oauth": xaiOauth, openference, "codebuddy-cn": codebuddyCn, + "codebuddy-intl": codebuddyIntl, // WorkBuddy is a separate Tencent product from CodeBuddy CN (own host, own // account system, own catalog). It shares the plugin-auth protocol shape, so // it deliberately gets its OWN module rather than aliasing codebuddyCn โ€” diff --git a/src/lib/providers/modelListingCapability.ts b/src/lib/providers/modelListingCapability.ts index eec0b2647291..96a4705de473 100644 --- a/src/lib/providers/modelListingCapability.ts +++ b/src/lib/providers/modelListingCapability.ts @@ -22,6 +22,10 @@ const CURATED_MODEL_ONLY_PROVIDERS = new Set([ // The clean-room browser integration exposes only model/effort routes // observed in the first-party picker. It has no upstream model-list API. "chatgpt-web", + // CodeBuddy gateways (Tencent CN and intl) publish no model-catalog endpoint; + // their registry models are the complete curated lineup. + "codebuddy-cn", + "codebuddy-intl", ]); export function providerUsesCuratedModelsOnly(providerId: string): boolean { diff --git a/src/shared/components/OAuthModal.tsx b/src/shared/components/OAuthModal.tsx index 81f7f7ba62ab..5deb9d1e9ccb 100644 --- a/src/shared/components/OAuthModal.tsx +++ b/src/shared/components/OAuthModal.tsx @@ -50,6 +50,7 @@ const DEVICE_CODE_PROVIDERS = new Set([ "kimi-coding", "kilocode", "codebuddy-cn", + "codebuddy-intl", "ghe-copilot", "grok-cli", "muse-code", diff --git a/src/shared/components/lobeProviderIcons.ts b/src/shared/components/lobeProviderIcons.ts index ea2125624ef4..874762fedef8 100644 --- a/src/shared/components/lobeProviderIcons.ts +++ b/src/shared/components/lobeProviderIcons.ts @@ -445,6 +445,7 @@ const LOBE_PROVIDER_ALIASES = { "tavily-search": "Tavily", tencent: "Tencent", "codebuddy-cn": "Tencent", + "codebuddy-intl": "Tencent", together: "Together", topaz: "TopazLabs", trae: "Trae", diff --git a/src/shared/constants/providers.ts b/src/shared/constants/providers.ts index f8100a76e66b..9fed0ab2645a 100644 --- a/src/shared/constants/providers.ts +++ b/src/shared/constants/providers.ts @@ -47,6 +47,7 @@ export function supportsApiKeyOnFreeProvider(providerId: unknown): boolean { const DUAL_AUTH_PROVIDER_IDS = new Set([ "clinepass", "codebuddy-cn", + "codebuddy-intl", "xai", "muse-code", "cline", diff --git a/src/shared/constants/providers/oauth.ts b/src/shared/constants/providers/oauth.ts index 5f57c2810428..a4c9d43a74d6 100644 --- a/src/shared/constants/providers/oauth.ts +++ b/src/shared/constants/providers/oauth.ts @@ -313,6 +313,20 @@ export const OAUTH_PROVIDERS = { authHint: "Tencent CodeBuddy CN (copilot.tencent.com). Sign in via the official CLI device-code flow, or paste a direct API key (sent as Authorization: Bearer). Catalog: GLM / Kimi / MiniMax / DeepSeek / Hunyuan.", }, + "codebuddy-intl": { + id: "codebuddy-intl", + serviceKinds: ["llm"], + alias: "cbai", + name: "CodeBuddy Intl", + icon: "smart_toy", + color: "#006EFF", + textIcon: "CB", + website: "https://www.codebuddy.ai", + subscriptionRisk: true, + riskNoticeVariant: "oauth", + authHint: + "CodeBuddy International (codebuddy.ai). Sign in via the device-code flow, or paste a direct API key (sent as Authorization: Bearer). Catalog: GLM / Kimi / MiniMax / DeepSeek / Hunyuan.", + }, workbuddy: { id: "workbuddy", serviceKinds: ["llm"], diff --git a/tests/snapshots/executors/executor-map.json b/tests/snapshots/executors/executor-map.json index 59a00530a8d5..4449e4d541a9 100644 --- a/tests/snapshots/executors/executor-map.json +++ b/tests/snapshots/executors/executor-map.json @@ -70,6 +70,11 @@ "configSource": "", "provider": "blackbox-web" }, + "cbai": { + "className": "CodeBuddyIntlExecutor", + "configSource": "codebuddy-intl", + "provider": "codebuddy-intl" + }, "cbcn": { "className": "CodeBuddyCnExecutor", "configSource": "codebuddy-cn", @@ -155,6 +160,11 @@ "configSource": "codebuddy-cn", "provider": "codebuddy-cn" }, + "codebuddy-intl": { + "className": "CodeBuddyIntlExecutor", + "configSource": "codebuddy-intl", + "provider": "codebuddy-intl" + }, "codex": { "className": "CodexExecutor", "configSource": "codex", @@ -575,11 +585,21 @@ "configSource": "", "provider": "tinycms-web" }, + "tm": { + "className": "TwinmindExecutor", + "configSource": "", + "provider": "twinmind" + }, "trae": { "className": "TraeExecutor", "configSource": "trae", "provider": "trae" }, + "twinmind": { + "className": "TwinmindExecutor", + "configSource": "", + "provider": "twinmind" + }, "uc": { "className": "UcExecutor", "configSource": "uc", @@ -686,6 +706,6 @@ "provider": "zai-web" } }, - "keyCount": 137, + "keyCount": 141, "sharedInstances": [] } diff --git a/tests/snapshots/provider/translate-path.json b/tests/snapshots/provider/translate-path.json index f2cdf22424de..cd79ea2d50db 100644 --- a/tests/snapshots/provider/translate-path.json +++ b/tests/snapshots/provider/translate-path.json @@ -1395,6 +1395,47 @@ "stream": "https://copilot.tencent.com/v2/chat/completions" } }, + "codebuddy-intl": { + "format": "openai", + "headers": { + "apiKey": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json", + "User-Agent": "IDE/2.108.1 CodeBuddy/2.108.1", + "X-IDE-Name": "IDE", + "X-IDE-Type": "IDE", + "X-Product": "SaaS", + "x-codebuddy-request": "1", + "x-requested-with": "XMLHttpRequest" + }, + "nonStream": { + "Authorization": "Bearer ", + "Content-Type": "application/json", + "User-Agent": "IDE/2.108.1 CodeBuddy/2.108.1", + "X-IDE-Name": "IDE", + "X-IDE-Type": "IDE", + "X-Product": "SaaS", + "x-codebuddy-request": "1", + "x-requested-with": "XMLHttpRequest" + }, + "oauth": { + "Accept": "text/event-stream", + "Authorization": "Bearer ", + "Content-Type": "application/json", + "User-Agent": "IDE/2.108.1 CodeBuddy/2.108.1", + "X-IDE-Name": "IDE", + "X-IDE-Type": "IDE", + "X-Product": "SaaS", + "x-codebuddy-request": "1", + "x-requested-with": "XMLHttpRequest" + } + }, + "url": { + "nonStream": "https://www.codebuddy.ai/v2/chat/completions", + "stream": "https://www.codebuddy.ai/v2/chat/completions" + } + }, "codestral": { "format": "openai", "headers": { diff --git a/tests/unit/codebuddy-intl-provider.test.ts b/tests/unit/codebuddy-intl-provider.test.ts new file mode 100644 index 000000000000..fde4ca5ce520 --- /dev/null +++ b/tests/unit/codebuddy-intl-provider.test.ts @@ -0,0 +1,180 @@ +import test from "node:test"; +import assert from "node:assert/strict"; + +import { + AI_PROVIDERS, + USAGE_SUPPORTED_PROVIDERS, + supportsDualAuthProvider, +} from "../../src/shared/constants/providers.ts"; +import { REGISTRY } from "../../open-sse/config/providerRegistry.ts"; +import { getExecutor } from "../../open-sse/executors/index.ts"; +import { CodeBuddyIntlExecutor } from "../../open-sse/executors/codebuddy-intl.ts"; +import { + PROVIDERS as OAUTH_PROVIDER_IDS, + CODEBUDDY_INTL_CONFIG, +} from "../../src/lib/oauth/constants/oauth.ts"; +import PROVIDERS_MAP from "../../src/lib/oauth/providers/index.ts"; +import { supportsTokenRefresh } from "../../open-sse/services/tokenRefresh.ts"; +import { getCodeBuddyIntlUsage } from "../../open-sse/services/usage/codebuddy-intl.ts"; +import { CODEBUDDY_INTL_USER_AGENT } from "../../open-sse/config/providerHeaderProfiles.ts"; + +test("codebuddy-intl is registered as an OAuth provider in the UI catalog", () => { + const p = AI_PROVIDERS["codebuddy-intl"]; + assert.ok(p, "codebuddy-intl missing from AI_PROVIDERS"); + assert.equal(p.id, "codebuddy-intl"); + assert.equal(p.alias, "cbai"); + assert.equal(p.name, "CodeBuddy Intl"); + assert.equal(p.website, "https://www.codebuddy.ai"); + assert.equal(p.subscriptionRisk, true); + assert.equal(p.riskNoticeVariant, "oauth"); + assert.deepEqual(p.serviceKinds, ["llm"]); +}); + +test("codebuddy-intl registry entry has expected shape", () => { + const r = REGISTRY["codebuddy-intl"]; + assert.ok(r, "codebuddy-intl missing from REGISTRY"); + assert.equal(r.id, "codebuddy-intl"); + assert.equal(r.alias, "cbai"); + assert.equal(r.format, "openai"); + assert.equal(r.baseUrl, "https://www.codebuddy.ai/v2/chat/completions"); + assert.equal(r.authType, "oauth"); + assert.equal(r.authHeader, "bearer"); + assert.equal(r.headers?.["User-Agent"], CODEBUDDY_INTL_USER_AGENT); + assert.equal(r.headers?.["X-Product"], "SaaS"); + assert.equal(r.headers?.["X-IDE-Type"], "IDE"); + assert.equal(r.headers?.["X-IDE-Name"], "IDE"); + assert.equal(r.headers?.["x-codebuddy-request"], "1"); + assert.ok(Array.isArray(r.models), "models array expected"); + assert.equal(r.models.length, 22, "probed intl lineup: 22 models"); +}); + +test("codebuddy-intl carries GLM, Kimi, MiniMax, Hy, GPT, Gemini and DeepSeek models", () => { + const r = REGISTRY["codebuddy-intl"]; + const modelIds = (r.models || []).map((m) => m.id); + assert.ok(modelIds.includes("glm-5.2")); + assert.ok(modelIds.includes("glm-5.3")); + assert.ok(modelIds.includes("glm-5.3-flash")); + assert.ok(modelIds.includes("kimi-k3")); + assert.ok(modelIds.includes("kimi-k2.7")); + assert.ok(modelIds.includes("minimax-m3")); + assert.ok(modelIds.includes("hy3")); + assert.ok(modelIds.includes("hy4-preview")); + assert.ok(modelIds.includes("gpt-6-astra")); + assert.ok(modelIds.includes("gemini-3.5-flash")); + assert.ok(modelIds.includes("deepseek-v4.1-flash")); +}); + +test("getExecutor returns the CodeBuddyIntlExecutor for 'codebuddy-intl' and the 'cbai' alias", async () => { + const exec = await getExecutor("codebuddy-intl"); + assert.ok( + exec instanceof CodeBuddyIntlExecutor, + "codebuddy-intl must resolve to CodeBuddyIntlExecutor" + ); + assert.equal(exec.provider, "codebuddy-intl"); + + const aliasExec = await getExecutor("cbai"); + assert.ok( + aliasExec instanceof CodeBuddyIntlExecutor, + "alias 'cbai' must resolve to CodeBuddyIntlExecutor" + ); + assert.equal(aliasExec.provider, "codebuddy-intl"); +}); + +test("CodeBuddyIntlExecutor forces stream:true and handles reasoning", () => { + const exec = new CodeBuddyIntlExecutor("codebuddy-intl"); + const transformed = exec.transformRequest( + "glm-5.2", + { messages: [{ role: "user", content: "hi" }] }, + false, + { apiKey: "test" } + ) as Record; + + assert.equal(transformed.stream, true, "stream must be forced true"); + assert.equal(transformed.reasoning_summary, undefined); + const msgs = transformed.messages as Array>; + assert.equal(msgs[0]?.role, "system", "must prepend system message when first is user"); + assert.equal(msgs[1]?.role, "user"); +}); + +test("CodeBuddyIntlExecutor preserves existing system message and does not duplicate it", () => { + const exec = new CodeBuddyIntlExecutor("codebuddy-intl"); + const transformed = exec.transformRequest( + "glm-5.2", + { + messages: [ + { role: "system", content: "You are an assistant." }, + { role: "user", content: "hi" }, + ], + }, + false, + { apiKey: "test" } + ) as Record; + + const msgs = transformed.messages as Array>; + assert.equal(msgs.length, 2); + assert.equal(msgs[0]?.role, "system"); + assert.equal(msgs[0]?.content, "You are an assistant."); + assert.equal(msgs[1]?.role, "user"); +}); + +test("getCodeBuddyIntlUsage returns credential not available when no token provided", async () => { + const res = await getCodeBuddyIntlUsage(); + assert.ok(res.message?.includes("CodeBuddy Intl credential not available")); +}); + +test("codebuddy-intl OAuth config points to .ai endpoints", () => { + assert.equal(CODEBUDDY_INTL_CONFIG.baseUrl, "https://www.codebuddy.ai"); + assert.equal(CODEBUDDY_INTL_CONFIG.stateUrl, "https://www.codebuddy.ai/v2/plugin/auth/state"); + assert.equal(CODEBUDDY_INTL_CONFIG.tokenUrl, "https://www.codebuddy.ai/v2/plugin/auth/token"); + assert.equal( + CODEBUDDY_INTL_CONFIG.refreshUrl, + "https://www.codebuddy.ai/v2/plugin/auth/token/refresh" + ); + assert.equal(CODEBUDDY_INTL_CONFIG.domain, "www.codebuddy.ai"); + assert.equal(CODEBUDDY_INTL_CONFIG.platform, "ide"); + assert.equal(CODEBUDDY_INTL_CONFIG.userAgent, CODEBUDDY_INTL_USER_AGENT); + assert.equal(OAUTH_PROVIDER_IDS.CODEBUDDY_INTL, "codebuddy-intl"); +}); + +test("codebuddy-intl OAuth provider is wired in PROVIDERS_MAP", () => { + const prov = PROVIDERS_MAP["codebuddy-intl"]; + assert.ok(prov, "codebuddy-intl missing from OAuth PROVIDERS_MAP"); + assert.equal(prov.flowType, "device_code"); + assert.equal(typeof prov.requestDeviceCode, "function"); + assert.equal(typeof prov.pollToken, "function"); + assert.equal(typeof prov.mapTokens, "function"); +}); + +test("codebuddy-intl token refresh is supported", () => { + assert.ok( + supportsTokenRefresh("codebuddy-intl"), + "codebuddy-intl must be supported in tokenRefresh" + ); +}); + +test("codebuddy-intl is in USAGE_SUPPORTED_PROVIDERS", () => { + assert.ok( + USAGE_SUPPORTED_PROVIDERS.includes("codebuddy-intl"), + "codebuddy-intl missing from USAGE_SUPPORTED_PROVIDERS" + ); +}); + +test("codebuddy-intl is treated as a managed dual-auth provider", () => { + assert.ok( + supportsDualAuthProvider("codebuddy-intl"), + "codebuddy-intl must be in DUAL_AUTH_PROVIDER_IDS" + ); +}); + +test("#12702: codebuddy-intl presents the same IDE/CodeBuddy version across OAuth and chat", () => { + assert.equal( + CODEBUDDY_INTL_CONFIG.userAgent, + CODEBUDDY_INTL_USER_AGENT, + "OAuth userAgent must match single source of truth" + ); + assert.equal( + REGISTRY["codebuddy-intl"].headers?.["User-Agent"], + CODEBUDDY_INTL_USER_AGENT, + "Chat completions User-Agent must match single source of truth" + ); +}); diff --git a/tests/unit/model-listing-capability-5420.test.ts b/tests/unit/model-listing-capability-5420.test.ts index ba986cd43ade..aa59d9ee7f1a 100644 --- a/tests/unit/model-listing-capability-5420.test.ts +++ b/tests/unit/model-listing-capability-5420.test.ts @@ -36,6 +36,8 @@ describe("providerLacksModelListing (#5420)", () => { assert.equal(providerUsesCuratedModelsOnly("kimi-web"), true); assert.equal(providerUsesCuratedModelsOnly("zai-web"), true); assert.equal(providerUsesCuratedModelsOnly("chatgpt-web"), true); + assert.equal(providerUsesCuratedModelsOnly("codebuddy-cn"), true); + assert.equal(providerUsesCuratedModelsOnly("codebuddy-intl"), true); assert.equal(providerUsesCuratedModelsOnly("cgpt-web"), false); assert.equal(providerUsesCuratedModelsOnly("qwen-cloud"), false); assert.equal(providerUsesCuratedModelsOnly("kimi-coding"), false); diff --git a/tests/unit/oauth-device-code-endpoints.test.ts b/tests/unit/oauth-device-code-endpoints.test.ts index 13d15e5c89cd..b71e87d8acc7 100644 --- a/tests/unit/oauth-device-code-endpoints.test.ts +++ b/tests/unit/oauth-device-code-endpoints.test.ts @@ -16,10 +16,15 @@ const here = dirname(fileURLToPath(import.meta.url)); const read = (p: string) => readFileSync(resolve(here, "../..", p), "utf8"); test("codebuddy-cn device-code sends platform as a query param (not body-only)", () => { - const cb = read("src/lib/oauth/providers/codebuddy-cn.ts"); + const cb = read("src/lib/oauth/providers/codebuddyDeviceAuth.ts"); assert.match( cb, /\?platform=\$\{encodeURIComponent\(config\.platform\)\}/, "platform query param" ); }); + +test("codebuddy-intl device-code re-uses the shared query-param platform flow", () => { + const intl = read("src/lib/oauth/providers/codebuddy-intl.ts"); + assert.match(intl, /codebuddyDeviceAuth/, "re-uses shared requestDeviceCode implementation"); +}); diff --git a/tests/unit/oauth-providers-config.test.ts b/tests/unit/oauth-providers-config.test.ts index 3dac0cc6574c..47988c72cc4d 100644 --- a/tests/unit/oauth-providers-config.test.ts +++ b/tests/unit/oauth-providers-config.test.ts @@ -28,6 +28,7 @@ const { CLINE_CONFIG, CODEX_CONFIG, CODEBUDDY_CN_CONFIG, + CODEBUDDY_INTL_CONFIG, WORKBUDDY_CONFIG, DEVIN_DESKTOP_CONFIG, ZED_CONFIG, @@ -75,6 +76,7 @@ const EXPECTED_PROVIDER_KEYS = [ "xai-oauth", "openference", "codebuddy-cn", + "codebuddy-intl", "workbuddy", "zed", "zed-hosted", @@ -111,6 +113,7 @@ const EXPECTED_CONFIG_BY_PROVIDER = { "xai-oauth": XAI_OAUTH_CONFIG, openference: OPENFERENCE_CONFIG, "codebuddy-cn": CODEBUDDY_CN_CONFIG, + "codebuddy-intl": CODEBUDDY_INTL_CONFIG, workbuddy: WORKBUDDY_CONFIG, zed: ZED_CONFIG, "zed-hosted": ZED_HOSTED_CONFIG, diff --git a/tests/unit/provider-node-reserved-prefix.test.ts b/tests/unit/provider-node-reserved-prefix.test.ts index 37a6c5eb948c..5d99c0cbdb0f 100644 --- a/tests/unit/provider-node-reserved-prefix.test.ts +++ b/tests/unit/provider-node-reserved-prefix.test.ts @@ -214,8 +214,9 @@ test("shared set size includes live REGISTRY and retired Designer + Felo + Qwen // Token Market (#13191) registers id "tokenmarket" with the same alias โ€” one more. // Twinmind (#14131) registers id "twinmind" and alias "tm" โ€” two more. // SYNTX.ai (#14269) registers id "syntx" and alias "stx" โ€” two more. - // Measured on the merged tree: RESERVED_PROVIDER_PREFIXES.size = 429. - assert.equal(RESERVED_PREFIX_COUNT, 429); + // CodeBuddy International (#15173) adds id "codebuddy-intl" plus alias "cbai" (429 -> 431). + // Measured on the merged tree: RESERVED_PROVIDER_PREFIXES.size = 431. + assert.equal(RESERVED_PREFIX_COUNT, 431); }); test("notrack-web registry id and alias stay reserved", () => {