diff --git a/CHANGELOG.md b/CHANGELOG.md index 127a438ce2..aebd18988e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,14 @@ ## [2.3.8] - 2026-03-12 +## [2.3.9] - 2026-03-12 + +### Added + +- **/v1/completions**: New legacy OpenAI completions endpoint — accepts both `prompt` string and `messages` array, normalizes to chat format automatically +- **EndpointPage**: Now shows all 3 OpenAI-compatible endpoint types: Chat Completions, Responses API, and Legacy Completions +- **i18n**: Added `completionsLegacy/completionsLegacyDesc` to 30 language files + ### Fixed - **OAuthModal**: Fix `[object Object]` displayed on all OAuth connection errors — properly extract `.message` from error response objects in all 3 `throw new Error(data.error)` calls (exchange, device-code, authorize) diff --git a/package.json b/package.json index ce34cf9e3f..fe420991f5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "omniroute", - "version": "2.3.8", + "version": "2.3.9", "description": "Smart AI Router with auto fallback — route to FREE & cheap models, zero downtime. Works with Cursor, Cline, Claude Desktop, Codex, and any OpenAI-compatible tool.", "type": "module", "bin": { diff --git a/src/app/(dashboard)/dashboard/endpoint/EndpointPageClient.tsx b/src/app/(dashboard)/dashboard/endpoint/EndpointPageClient.tsx index 33911fc8ba..03a95600f2 100644 --- a/src/app/(dashboard)/dashboard/endpoint/EndpointPageClient.tsx +++ b/src/app/(dashboard)/dashboard/endpoint/EndpointPageClient.tsx @@ -446,6 +446,27 @@ export default function APIPageClient({ machineId }) { copied={copied} baseUrl={currentEndpoint} /> + + {/* Legacy Completions */} + + setExpandedEndpoint(expandedEndpoint === "completions" ? null : "completions") + } + copy={copy} + copied={copied} + baseUrl={currentEndpoint} + /> diff --git a/src/app/api/v1/completions/route.ts b/src/app/api/v1/completions/route.ts new file mode 100644 index 0000000000..69d79a2777 --- /dev/null +++ b/src/app/api/v1/completions/route.ts @@ -0,0 +1,97 @@ +import { CORS_ORIGIN, CORS_HEADERS } from "@/shared/utils/cors"; +import { handleChat } from "@/sse/handlers/chat"; +import { initTranslators } from "@omniroute/open-sse/translator/index.ts"; +import { createInjectionGuard } from "@/middleware/promptInjectionGuard"; + +let initPromise = null; +const injectionGuard = createInjectionGuard(); + +function ensureInitialized() { + if (!initPromise) { + initPromise = Promise.resolve(initTranslators()).then(() => { + console.log("[SSE] Translators initialized"); + }); + } + return initPromise; +} + +/** + * Handle CORS preflight + */ +export async function OPTIONS() { + return new Response(null, { + headers: { + "Access-Control-Allow-Origin": CORS_ORIGIN, + "Access-Control-Allow-Methods": "GET, POST, OPTIONS", + "Access-Control-Allow-Headers": "*", + }, + }); +} + +/** + * POST /v1/completions — Legacy OpenAI Completions API + * + * Accepts both the modern chat format (messages[]) and the legacy + * text-completions format (prompt string). Legacy requests are + * automatically normalized to chat/completions format before routing. + * + * @see https://platform.openai.com/docs/api-reference/completions + */ +export async function POST(request: Request) { + await ensureInitialized(); + + // Prompt injection guard + try { + const cloned = request.clone(); + const body = await cloned.json().catch(() => null); + if (body) { + const { blocked, result } = injectionGuard(body); + if (blocked) { + return new Response( + JSON.stringify({ + error: { + message: "Request blocked: potential prompt injection detected", + type: "injection_detected", + code: "SECURITY_001", + detections: result.detections.length, + }, + }), + { status: 400, headers: { ...CORS_HEADERS, "Content-Type": "application/json" } } + ); + } + + // Normalize legacy completions format: { prompt, model } → { messages, model } + // If the body has `prompt` but no `messages`, convert to chat format. + if (body.prompt !== undefined && !body.messages) { + const prompt = Array.isArray(body.prompt) ? body.prompt.join("\n") : String(body.prompt); + const normalized = { + ...body, + messages: [{ role: "user", content: prompt }], + }; + delete normalized.prompt; + + const newRequest = new Request(request.url, { + method: request.method, + headers: request.headers, + body: JSON.stringify(normalized), + }); + return await handleChat(newRequest); + } + } + } catch (error) { + console.error("[SECURITY] Prompt injection guard failed:", error); + return new Response( + JSON.stringify({ + error: { + message: "Security validation temporarily unavailable", + type: "security_guard_unavailable", + code: "SECURITY_002", + }, + }), + { status: 503, headers: { ...CORS_HEADERS, "Content-Type": "application/json" } } + ); + } + + // Standard path: body already has messages[] (chat format) + return await handleChat(request); +} diff --git a/src/i18n/messages/ar.json b/src/i18n/messages/ar.json index f6aabb6193..048fde2be6 100644 --- a/src/i18n/messages/ar.json +++ b/src/i18n/messages/ar.json @@ -858,7 +858,9 @@ "a2aQuickStartTitle": "البدء السريع", "a2aQuickStartStep1": "اكتشف بطاقة الوكيل على `/.well-known/agent.json`.", "a2aQuickStartStep2": "إرسال طلبات JSON - RPC إلى@@ PH0 @@ باستخدام @@PH1 @@ أو `message/stream`.", - "a2aQuickStartStep3": "تتبع المهام والتحكم فيها باستخدام `tasks/get` و `tasks/cancel`." + "a2aQuickStartStep3": "تتبع المهام والتحكم فيها باستخدام `tasks/get` و `tasks/cancel`.", + "completionsLegacy": "Completions (Legacy)", + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" }, "mcpDashboard": { "loading": "جارٍ تحميل لوحة تحكم MCP...", diff --git a/src/i18n/messages/bg.json b/src/i18n/messages/bg.json index af240e4391..0d5801ab3e 100644 --- a/src/i18n/messages/bg.json +++ b/src/i18n/messages/bg.json @@ -858,7 +858,9 @@ "a2aQuickStartTitle": "Button text: start playing a game", "a2aQuickStartStep1": "Открийте картата на агента на @@PH0 @@.", "a2aQuickStartStep2": "Изпратете JSON - RPC заявки до@@ PH0 @@, като използвате @@ PH1 @@ или @@ PH2 @@.", - "a2aQuickStartStep3": "Проследяване и контрол на задачите с помощта на @@ PH0 @@ и @@ PH1 @@." + "a2aQuickStartStep3": "Проследяване и контрол на задачите с помощта на @@ PH0 @@ и @@ PH1 @@.", + "completionsLegacy": "Completions (Legacy)", + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" }, "mcpDashboard": { "loading": "Зареждане на таблото за управление на MCP...", diff --git a/src/i18n/messages/da.json b/src/i18n/messages/da.json index 22f53b71e8..857abd335c 100644 --- a/src/i18n/messages/da.json +++ b/src/i18n/messages/da.json @@ -858,7 +858,9 @@ "a2aQuickStartTitle": "Hurtig start", "a2aQuickStartStep1": "Find agentkortet på`/.well-known/agent.json`.", "a2aQuickStartStep2": "Send JSON-RPC-anmodninger til`POST /a2a`vedhjælp af `message/send` eller `message/stream`.", - "a2aQuickStartStep3": "Spor og kontroller opgaver ved hjælp af `tasks/get` og `tasks/cancel`." + "a2aQuickStartStep3": "Spor og kontroller opgaver ved hjælp af `tasks/get` og `tasks/cancel`.", + "completionsLegacy": "Completions (Legacy)", + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" }, "mcpDashboard": { "loading": "Indlæser MCP-dashboard...", diff --git a/src/i18n/messages/de.json b/src/i18n/messages/de.json index 0e6b6ee1cd..bda0425683 100644 --- a/src/i18n/messages/de.json +++ b/src/i18n/messages/de.json @@ -858,7 +858,9 @@ "a2aQuickStartTitle": "A2A-Schnellstart", "a2aQuickStartStep1": "Entdecken Sie die Agentenkarte unter `/.well-known/agent.json`.", "a2aQuickStartStep2": "Senden Sie JSON-RPC-Anfragen an `POST /a2a` mit `message/send` oder `message/stream`.", - "a2aQuickStartStep3": "Verfolgen und steuern Sie Aufgaben mit `tasks/get` und `tasks/cancel`." + "a2aQuickStartStep3": "Verfolgen und steuern Sie Aufgaben mit `tasks/get` und `tasks/cancel`.", + "completionsLegacy": "Completions (Legacy)", + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" }, "mcpDashboard": { "loading": "MCP-Dashboard wird geladen...", diff --git a/src/i18n/messages/en.json b/src/i18n/messages/en.json index 9459b7b8c8..e69d03d174 100644 --- a/src/i18n/messages/en.json +++ b/src/i18n/messages/en.json @@ -858,7 +858,9 @@ "a2aQuickStartTitle": "A2A Quick Start", "a2aQuickStartStep1": "Discover the agent card at `/.well-known/agent.json`.", "a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.", - "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`." + "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`.", + "completionsLegacy": "Completions (Legacy)", + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" }, "endpoints": { "tabProxy": "Endpoint Proxy", diff --git a/src/i18n/messages/es.json b/src/i18n/messages/es.json index 56624e6964..7045fd503e 100644 --- a/src/i18n/messages/es.json +++ b/src/i18n/messages/es.json @@ -858,7 +858,9 @@ "a2aQuickStartTitle": "Inicio rápido de A2A", "a2aQuickStartStep1": "Descubra la tarjeta de agente en `/.well-known/agent.json`.", "a2aQuickStartStep2": "Envíe solicitudes JSON-RPC a `POST /a2a` usando `message/send` o `message/stream`.", - "a2aQuickStartStep3": "Realice un seguimiento y controle las tareas utilizando `tasks/get` y `tasks/cancel`." + "a2aQuickStartStep3": "Realice un seguimiento y controle las tareas utilizando `tasks/get` y `tasks/cancel`.", + "completionsLegacy": "Completions (Legacy)", + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" }, "mcpDashboard": { "loading": "Cargando el panel de MCP...", diff --git a/src/i18n/messages/fi.json b/src/i18n/messages/fi.json index b2b914f8de..3d68b648e5 100644 --- a/src/i18n/messages/fi.json +++ b/src/i18n/messages/fi.json @@ -858,7 +858,9 @@ "a2aQuickStartTitle": "A2A Pikaopas", "a2aQuickStartStep1": "Tutustu agenttikorttiin osoitteessa `/.well-known/agent.json`.", "a2aQuickStartStep2": "Lähetä JSON-RPC-pyynnöt osoitteeseen `POST /a2a` käyttämällä `message/send` tai `message/stream`.", - "a2aQuickStartStep3": "Seuraa ja ohjaa tehtäviä käyttämällä `tasks/get` ja `tasks/cancel`." + "a2aQuickStartStep3": "Seuraa ja ohjaa tehtäviä käyttämällä `tasks/get` ja `tasks/cancel`.", + "completionsLegacy": "Completions (Legacy)", + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" }, "mcpDashboard": { "loading": "Ladataan MCP-hallintapaneelia...", diff --git a/src/i18n/messages/fr.json b/src/i18n/messages/fr.json index 67ab07d5ff..938646575e 100644 --- a/src/i18n/messages/fr.json +++ b/src/i18n/messages/fr.json @@ -858,7 +858,9 @@ "a2aQuickStartTitle": "Démarrage rapide A2A", "a2aQuickStartStep1": "Découvrez la carte d'agent sur `/.well-known/agent.json`.", "a2aQuickStartStep2": "Envoyez des requêtes JSON-RPC à `POST /a2a` en utilisant `message/send` ou `message/stream`.", - "a2aQuickStartStep3": "Suivez et contrôlez les tâches à l’aide de `tasks/get` et `tasks/cancel`." + "a2aQuickStartStep3": "Suivez et contrôlez les tâches à l’aide de `tasks/get` et `tasks/cancel`.", + "completionsLegacy": "Completions (Legacy)", + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" }, "mcpDashboard": { "loading": "Chargement du tableau de bord MCP...", diff --git a/src/i18n/messages/he.json b/src/i18n/messages/he.json index ecad4c2fc8..c75bbe09ae 100644 --- a/src/i18n/messages/he.json +++ b/src/i18n/messages/he.json @@ -858,7 +858,9 @@ "a2aQuickStartTitle": "A2A Quick Start", "a2aQuickStartStep1": "Discover the agent card at `/.well-known/agent.json`.", "a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.", - "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`." + "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`.", + "completionsLegacy": "Completions (Legacy)", + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" }, "mcpDashboard": { "loading": "Loading MCP dashboard...", diff --git a/src/i18n/messages/hu.json b/src/i18n/messages/hu.json index c90d8932a7..b501f1c0ba 100644 --- a/src/i18n/messages/hu.json +++ b/src/i18n/messages/hu.json @@ -858,7 +858,9 @@ "a2aQuickStartTitle": "A2A Quick Start", "a2aQuickStartStep1": "Discover the agent card at `/.well-known/agent.json`.", "a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.", - "a2aQuickStartStep3": "Kövesse nyomon és vezérelje a feladatokat a `tasks/get` és `tasks/cancel` használatával." + "a2aQuickStartStep3": "Kövesse nyomon és vezérelje a feladatokat a `tasks/get` és `tasks/cancel` használatával.", + "completionsLegacy": "Completions (Legacy)", + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" }, "mcpDashboard": { "loading": "Loading MCP dashboard...", diff --git a/src/i18n/messages/id.json b/src/i18n/messages/id.json index 0650f6b2db..3ded250332 100644 --- a/src/i18n/messages/id.json +++ b/src/i18n/messages/id.json @@ -858,7 +858,9 @@ "a2aQuickStartTitle": "A2A Quick Start", "a2aQuickStartStep1": "Discover the agent card at `/.well-known/agent.json`.", "a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.", - "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`." + "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`.", + "completionsLegacy": "Completions (Legacy)", + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" }, "mcpDashboard": { "loading": "Loading MCP dashboard...", diff --git a/src/i18n/messages/in.json b/src/i18n/messages/in.json index 4010c2629f..28a3003dc1 100644 --- a/src/i18n/messages/in.json +++ b/src/i18n/messages/in.json @@ -858,7 +858,9 @@ "a2aQuickStartTitle": "A2A Quick Start", "a2aQuickStartStep1": "Discover the agent card at `/.well-known/agent.json`.", "a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.", - "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`." + "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`.", + "completionsLegacy": "Completions (Legacy)", + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" }, "mcpDashboard": { "loading": "Loading MCP dashboard...", diff --git a/src/i18n/messages/it.json b/src/i18n/messages/it.json index da3fc3d6f5..3f7a523735 100644 --- a/src/i18n/messages/it.json +++ b/src/i18n/messages/it.json @@ -858,7 +858,9 @@ "a2aQuickStartTitle": "A2A Quick Start", "a2aQuickStartStep1": "Discover the agent card at `/.well-known/agent.json`.", "a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.", - "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`." + "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`.", + "completionsLegacy": "Completions (Legacy)", + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" }, "mcpDashboard": { "loading": "Loading MCP dashboard...", diff --git a/src/i18n/messages/ja.json b/src/i18n/messages/ja.json index 8c79820a10..3105e090c9 100644 --- a/src/i18n/messages/ja.json +++ b/src/i18n/messages/ja.json @@ -858,7 +858,9 @@ "a2aQuickStartTitle": "A2A Quick Start", "a2aQuickStartStep1": "Discover the agent card at `/.well-known/agent.json`.", "a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.", - "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`." + "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`.", + "completionsLegacy": "Completions (Legacy)", + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" }, "mcpDashboard": { "loading": "Loading MCP dashboard...", diff --git a/src/i18n/messages/ko.json b/src/i18n/messages/ko.json index 4a3b8b6e76..6e068df13e 100644 --- a/src/i18n/messages/ko.json +++ b/src/i18n/messages/ko.json @@ -858,7 +858,9 @@ "a2aQuickStartTitle": "A2A Quick Start", "a2aQuickStartStep1": "Discover the agent card at `/.well-known/agent.json`.", "a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.", - "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`." + "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`.", + "completionsLegacy": "Completions (Legacy)", + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" }, "mcpDashboard": { "loading": "Loading MCP dashboard...", diff --git a/src/i18n/messages/ms.json b/src/i18n/messages/ms.json index ca6faa1c85..925b4f41ae 100644 --- a/src/i18n/messages/ms.json +++ b/src/i18n/messages/ms.json @@ -858,7 +858,9 @@ "a2aQuickStartTitle": "A2A Mula Pantas", "a2aQuickStartStep1": "Temui kad ejen di `/.well-known/agent.json`.", "a2aQuickStartStep2": "Hantar permintaan JSON-RPC ke `POST /a2a` menggunakan `message/send` atau `message/stream`.", - "a2aQuickStartStep3": "Jejak dan kawal tugas menggunakan `tasks/get` dan `tasks/cancel`." + "a2aQuickStartStep3": "Jejak dan kawal tugas menggunakan `tasks/get` dan `tasks/cancel`.", + "completionsLegacy": "Completions (Legacy)", + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" }, "mcpDashboard": { "loading": "Loading MCP dashboard...", diff --git a/src/i18n/messages/nl.json b/src/i18n/messages/nl.json index eeabf33382..b2828567df 100644 --- a/src/i18n/messages/nl.json +++ b/src/i18n/messages/nl.json @@ -858,7 +858,9 @@ "a2aQuickStartTitle": "A2A Quick Start", "a2aQuickStartStep1": "Discover the agent card at `/.well-known/agent.json`.", "a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.", - "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`." + "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`.", + "completionsLegacy": "Completions (Legacy)", + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" }, "mcpDashboard": { "loading": "Loading MCP dashboard...", diff --git a/src/i18n/messages/no.json b/src/i18n/messages/no.json index 01f6f313a4..fa61b465d6 100644 --- a/src/i18n/messages/no.json +++ b/src/i18n/messages/no.json @@ -858,7 +858,9 @@ "a2aQuickStartTitle": "A2A hurtigstart", "a2aQuickStartStep1": "Oppdag agentkortet på `/.well-known/agent.json`.", "a2aQuickStartStep2": "Send JSON-RPC-forespørsler til `POST /a2a` ved å bruke `message/send` eller `message/stream`.", - "a2aQuickStartStep3": "Spor og kontroller oppgaver ved å bruke `tasks/get` og `tasks/cancel`." + "a2aQuickStartStep3": "Spor og kontroller oppgaver ved å bruke `tasks/get` og `tasks/cancel`.", + "completionsLegacy": "Completions (Legacy)", + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" }, "mcpDashboard": { "loading": "Laster inn MCP-dashbordet ...", diff --git a/src/i18n/messages/phi.json b/src/i18n/messages/phi.json index 32eefc48de..6f434c5e5c 100644 --- a/src/i18n/messages/phi.json +++ b/src/i18n/messages/phi.json @@ -858,7 +858,9 @@ "a2aQuickStartTitle": "A2A Quick Start", "a2aQuickStartStep1": "Discover the agent card at `/.well-known/agent.json`.", "a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.", - "a2aQuickStartStep3": "Subaybayan at kontrolin ang mga gawain gamit ang `tasks/get` at `tasks/cancel`." + "a2aQuickStartStep3": "Subaybayan at kontrolin ang mga gawain gamit ang `tasks/get` at `tasks/cancel`.", + "completionsLegacy": "Completions (Legacy)", + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" }, "mcpDashboard": { "loading": "Nilo-load ang MCP dashboard...", diff --git a/src/i18n/messages/pl.json b/src/i18n/messages/pl.json index e720d53d50..f21acc1f30 100644 --- a/src/i18n/messages/pl.json +++ b/src/i18n/messages/pl.json @@ -858,7 +858,9 @@ "a2aQuickStartTitle": "A2A Quick Start", "a2aQuickStartStep1": "Discover the agent card at `/.well-known/agent.json`.", "a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.", - "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`." + "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`.", + "completionsLegacy": "Completions (Legacy)", + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" }, "mcpDashboard": { "loading": "Loading MCP dashboard...", diff --git a/src/i18n/messages/pt-BR.json b/src/i18n/messages/pt-BR.json index 8219108ee1..e9c4249d16 100644 --- a/src/i18n/messages/pt-BR.json +++ b/src/i18n/messages/pt-BR.json @@ -858,7 +858,9 @@ "a2aQuickStartTitle": "A2A Início rápido", "a2aQuickStartStep1": "Descubra o agent card em `/.well-known/agent.json`.", "a2aQuickStartStep2": "Envie requisições JSON-RPC para `POST /a2a` usando `message/send` ou `message/stream`.", - "a2aQuickStartStep3": "Acompanhe e controle tarefas com `tasks/get` e `tasks/cancel`." + "a2aQuickStartStep3": "Acompanhe e controle tarefas com `tasks/get` e `tasks/cancel`.", + "completionsLegacy": "Completions (Legacy)", + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" }, "mcpDashboard": { "loading": "Carregando painel MCP...", diff --git a/src/i18n/messages/pt.json b/src/i18n/messages/pt.json index 0b8e29dccb..7e811330b9 100644 --- a/src/i18n/messages/pt.json +++ b/src/i18n/messages/pt.json @@ -858,7 +858,9 @@ "a2aQuickStartTitle": "A2A Quick Start", "a2aQuickStartStep1": "Discover the agent card at `/.well-known/agent.json`.", "a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.", - "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`." + "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`.", + "completionsLegacy": "Completions (Legacy)", + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" }, "endpoints": { "tabProxy": "Endpoint Proxy", diff --git a/src/i18n/messages/ro.json b/src/i18n/messages/ro.json index 82ff81e45b..7296c1dff5 100644 --- a/src/i18n/messages/ro.json +++ b/src/i18n/messages/ro.json @@ -858,7 +858,9 @@ "a2aQuickStartTitle": "A2A Quick Start", "a2aQuickStartStep1": "Discover the agent card at `/.well-known/agent.json`.", "a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.", - "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`." + "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`.", + "completionsLegacy": "Completions (Legacy)", + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" }, "mcpDashboard": { "loading": "Loading MCP dashboard...", diff --git a/src/i18n/messages/ru.json b/src/i18n/messages/ru.json index 0254ba2bc1..4f97a38923 100644 --- a/src/i18n/messages/ru.json +++ b/src/i18n/messages/ru.json @@ -858,7 +858,9 @@ "a2aQuickStartTitle": "A2A Quick Start", "a2aQuickStartStep1": "Discover the agent card at `/.well-known/agent.json`.", "a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.", - "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`." + "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`.", + "completionsLegacy": "Completions (Legacy)", + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" }, "mcpDashboard": { "loading": "Loading MCP dashboard...", diff --git a/src/i18n/messages/sk.json b/src/i18n/messages/sk.json index 8106cc90ca..14ad79a186 100644 --- a/src/i18n/messages/sk.json +++ b/src/i18n/messages/sk.json @@ -858,7 +858,9 @@ "a2aQuickStartTitle": "A2A Quick Start", "a2aQuickStartStep1": "Discover the agent card at `/.well-known/agent.json`.", "a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.", - "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`." + "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`.", + "completionsLegacy": "Completions (Legacy)", + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" }, "mcpDashboard": { "loading": "Loading MCP dashboard...", diff --git a/src/i18n/messages/sv.json b/src/i18n/messages/sv.json index 8106385970..d49e993631 100644 --- a/src/i18n/messages/sv.json +++ b/src/i18n/messages/sv.json @@ -858,7 +858,9 @@ "a2aQuickStartTitle": "A2A Quick Start", "a2aQuickStartStep1": "Discover the agent card at `/.well-known/agent.json`.", "a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.", - "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`." + "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`.", + "completionsLegacy": "Completions (Legacy)", + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" }, "mcpDashboard": { "loading": "Loading MCP dashboard...", diff --git a/src/i18n/messages/th.json b/src/i18n/messages/th.json index 437982e7b2..7ab6ba1541 100644 --- a/src/i18n/messages/th.json +++ b/src/i18n/messages/th.json @@ -858,7 +858,9 @@ "a2aQuickStartTitle": "A2A Quick Start", "a2aQuickStartStep1": "Discover the agent card at `/.well-known/agent.json`.", "a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.", - "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`." + "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`.", + "completionsLegacy": "Completions (Legacy)", + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" }, "mcpDashboard": { "loading": "Loading MCP dashboard...", diff --git a/src/i18n/messages/uk-UA.json b/src/i18n/messages/uk-UA.json index f3470792a8..767b269ccd 100644 --- a/src/i18n/messages/uk-UA.json +++ b/src/i18n/messages/uk-UA.json @@ -858,7 +858,9 @@ "a2aQuickStartTitle": "A2A Quick Start", "a2aQuickStartStep1": "Discover the agent card at `/.well-known/agent.json`.", "a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.", - "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`." + "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`.", + "completionsLegacy": "Completions (Legacy)", + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" }, "mcpDashboard": { "loading": "Loading MCP dashboard...", diff --git a/src/i18n/messages/vi.json b/src/i18n/messages/vi.json index 96c1203ce1..392184f767 100644 --- a/src/i18n/messages/vi.json +++ b/src/i18n/messages/vi.json @@ -858,7 +858,9 @@ "a2aQuickStartTitle": "A2A Quick Start", "a2aQuickStartStep1": "Discover the agent card at `/.well-known/agent.json`.", "a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.", - "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`." + "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`.", + "completionsLegacy": "Completions (Legacy)", + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" }, "mcpDashboard": { "loading": "Loading MCP dashboard...", diff --git a/src/i18n/messages/zh-CN.json b/src/i18n/messages/zh-CN.json index d60669335c..9d5fc168ac 100644 --- a/src/i18n/messages/zh-CN.json +++ b/src/i18n/messages/zh-CN.json @@ -858,7 +858,9 @@ "a2aQuickStartTitle": "A2A Quick Start", "a2aQuickStartStep1": "Discover the agent card at `/.well-known/agent.json`.", "a2aQuickStartStep2": "Send JSON-RPC requests to `POST /a2a` using `message/send` or `message/stream`.", - "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`." + "a2aQuickStartStep3": "Track and control tasks using `tasks/get` and `tasks/cancel`.", + "completionsLegacy": "Completions (Legacy)", + "completionsLegacyDesc": "Legacy OpenAI text completions — accepts both prompt string and messages array format" }, "mcpDashboard": { "loading": "Loading MCP dashboard...",