From 21769e986859719d8ada38f6157cd17c22f1b6aa Mon Sep 17 00:00:00 2001 From: WebPerson Date: Sun, 23 Aug 2026 21:05:19 -0500 Subject: [PATCH 01/17] fix(lint): drain release-green hard failures on release/v3.8.50 (#9985) - FirstRunReadinessCard: read dismissal via useSyncExternalStore instead of setState inside an effect (react-hooks/set-state-in-effect); hydration-safe - EndpointPageClient: drop dead code left by the Traffic Inspector header refactor (Link import, expandedEndpoint state, mcp/a2a status derivations, cloudflaredUrlNotice, EndpointSection component) and underscore the two intentionally-unused status bindings - CommandPalette: include activePreset in allItems memo deps (fixes exhaustive-deps and lets the compiler preserve the memoization) - cli-mcp-call/resilience/skills test files: remove or underscore unused helpers and fetch params flagged as net-new errors --- .../dashboard/FirstRunReadinessCard.tsx | 53 ++++--- .../dashboard/endpoint/EndpointPageClient.tsx | 150 +----------------- src/shared/components/CommandPalette.tsx | 2 +- tests/unit/cli-mcp-call-commands.test.ts | 16 +- tests/unit/cli-resilience-commands.test.ts | 21 +-- tests/unit/cli-skills-commands.test.ts | 2 +- 6 files changed, 45 insertions(+), 199 deletions(-) diff --git a/src/app/(dashboard)/dashboard/FirstRunReadinessCard.tsx b/src/app/(dashboard)/dashboard/FirstRunReadinessCard.tsx index 43eb5b6bc98..92ad1f976e9 100644 --- a/src/app/(dashboard)/dashboard/FirstRunReadinessCard.tsx +++ b/src/app/(dashboard)/dashboard/FirstRunReadinessCard.tsx @@ -1,6 +1,6 @@ "use client"; -import { useEffect, useState } from "react"; +import { useCallback, useSyncExternalStore } from "react"; import Link from "next/link"; import { useTranslations } from "next-intl"; @@ -10,36 +10,51 @@ type FirstRunReadinessCardProps = { setupComplete: boolean; }; +// #9985: dismissal lives in localStorage, read via useSyncExternalStore — keeps +// the component free of setState-in-effect cascades and hydration-safe (server +// snapshot treats the card as dismissed; the client corrects after hydration). +const readinessListeners = new Set<() => void>(); + +function subscribeReadiness(onStoreChange: () => void): () => void { + readinessListeners.add(onStoreChange); + window.addEventListener("storage", onStoreChange); + return () => { + readinessListeners.delete(onStoreChange); + window.removeEventListener("storage", onStoreChange); + }; +} + +function isReadinessDismissed(): boolean { + try { + return localStorage.getItem(DISMISS_STORAGE_KEY) === "true"; + } catch { + // Storage unavailable (private mode etc.) — never show the nagging card. + return true; + } +} + +function getServerSnapshot(): boolean { + return true; +} + /** * Soft entry path for first-run users. Replaces the hard redirect to * /dashboard/onboarding so returning users can dismiss and stay on Home. */ export default function FirstRunReadinessCard({ setupComplete }: FirstRunReadinessCardProps) { const t = useTranslations("home"); - const [visible, setVisible] = useState(false); + const dismissed = useSyncExternalStore(subscribeReadiness, isReadinessDismissed, getServerSnapshot); - useEffect(() => { - if (setupComplete) { - setVisible(false); - return; - } - try { - setVisible(!localStorage.getItem(DISMISS_STORAGE_KEY)); - } catch { - setVisible(true); - } - }, [setupComplete]); - - if (!visible || setupComplete) return null; - - const dismiss = () => { + const dismiss = useCallback(() => { try { localStorage.setItem(DISMISS_STORAGE_KEY, "true"); } catch { // ignore storage failures; still hide for this session } - setVisible(false); - }; + for (const listener of readinessListeners) listener(); + }, []); + + if (setupComplete || dismissed) return null; const steps = [ t("readinessStep1"), diff --git a/src/app/(dashboard)/dashboard/endpoint/EndpointPageClient.tsx b/src/app/(dashboard)/dashboard/endpoint/EndpointPageClient.tsx index cdf00e95d86..c9b816fa53e 100644 --- a/src/app/(dashboard)/dashboard/endpoint/EndpointPageClient.tsx +++ b/src/app/(dashboard)/dashboard/endpoint/EndpointPageClient.tsx @@ -1,13 +1,10 @@ "use client"; import { useState, useEffect, useMemo, useCallback } from "react"; -import Link from "next/link"; import { Card, Button, Input, Modal, CardSkeleton, SegmentedControl } from "@/shared/components"; import Toggle from "@/shared/components/Toggle"; import { useCopyToClipboard } from "@/shared/hooks/useCopyToClipboard"; import { isPublicDisplayBaseUrl, useDisplayBaseUrl } from "@/shared/hooks"; -import { AI_PROVIDERS, getProviderByAlias } from "@/shared/constants/providers"; -import { getProviderDisplayName } from "@/lib/display/names"; import { useTranslations } from "next-intl"; import A2ADashboardPage from "./components/A2ADashboard"; import McpDashboardPage from "./components/MCPDashboard"; @@ -138,7 +135,6 @@ export default function APIPageClient({ machineId }: Readonly(null); - const [a2aStatus, setA2aStatus] = useState(null); + const [_mcpStatus, setMcpStatus] = useState(null); + const [_a2aStatus, setA2aStatus] = useState(null); const [searchProviders, setSearchProviders] = useState([]); const [cloudflaredStatus, setCloudflaredStatus] = useState(null); const [cloudflaredBusy, setCloudflaredBusy] = useState(false); @@ -1132,10 +1128,6 @@ export default function APIPageClient({ machineId }: Readonly = { @@ -1169,10 +1161,6 @@ export default function APIPageClient({ machineId }: Readonly = { running: { @@ -2498,137 +2486,3 @@ function EndpointCard({ ); } -function EndpointSection({ - icon, - iconColor, - iconBg, - title, - path, - description, - models, - expanded, - onToggle, - copy, - copied, - baseUrl, - modelsLoading = false, -}: Readonly<{ - icon: string; - iconColor: string; - iconBg: string; - title: string; - path: string; - description: string; - models: EndpointModelSummary[]; - expanded: boolean; - onToggle: () => void; - copy: CopyHandler; - copied?: string | null; - baseUrl: string; - modelsLoading?: boolean; -}>) { - const t = useTranslations("endpoint"); - const grouped = useMemo(() => { - const map = {}; - for (const m of models) { - const owner = m.owned_by || "unknown"; - if (!map[owner]) map[owner] = []; - map[owner].push(m); - } - return Object.entries(map).sort((a: any, b: any) => b[1].length - a[1].length); - }, [models]); - - const resolveProvider = (id) => AI_PROVIDERS[id] || getProviderByAlias(id); - const providerColor = (id) => resolveProvider(id)?.color || "#888"; - const providerName = (id) => getProviderDisplayName(id, resolveProvider(id)); - const copyId = `endpoint_${path}`; - - return ( -
- {/* Header (always visible) */} - - - {/* Expanded content */} - {expanded && ( -
- {/* Endpoint path + copy */} -
- - {baseUrl.replace(/\/v1$/, "")} - {path} - - -
- - {/* Models grouped by provider */} - {modelsLoading ? ( -
- - progress_activity - - {t("loadingModels")} -
- ) : ( -
- {grouped.map(([providerId, providerModels]) => ( -
-
-
- - {providerName(providerId)} - - - ({(providerModels as any).length}) - -
-
- {(providerModels as any).map((m) => ( - - {m.root || m.id.split("/").pop()} - - ))} -
-
- ))} -
- )} -
- )} -
- ); -} diff --git a/src/shared/components/CommandPalette.tsx b/src/shared/components/CommandPalette.tsx index 096b57b2870..2a9520fcdd1 100644 --- a/src/shared/components/CommandPalette.tsx +++ b/src/shared/components/CommandPalette.tsx @@ -156,7 +156,7 @@ function CommandPaletteDialog({ onClose }: { onClose: () => void }) { ]; }); }), - [hiddenItems, radarAdminUrl, safeTranslate] + [hiddenItems, radarAdminUrl, safeTranslate, activePreset] ); const filtered = useMemo(() => { diff --git a/tests/unit/cli-mcp-call-commands.test.ts b/tests/unit/cli-mcp-call-commands.test.ts index 8e2a8d63fb3..6a1ae05c6e5 100644 --- a/tests/unit/cli-mcp-call-commands.test.ts +++ b/tests/unit/cli-mcp-call-commands.test.ts @@ -32,10 +32,6 @@ async function captureStdout(fn: () => Promise): Promise { return chunks.join(""); } -function makeCmd(output = "json") { - return { optsWithGlobals: () => ({ output, quiet: output !== "table" }) }; -} - // Simulate a /api/mcp/stream endpoint that speaks JSON-RPC 2.0 function makeMcpStreamFetch( toolResult: { content: { type: string; text: string }[] } = { @@ -43,7 +39,7 @@ function makeMcpStreamFetch( }, callStatus = 200, ) { - return ((url: string, opts: unknown) => { + return ((_url: string, opts: unknown) => { const u = String(url); if (!u.includes("/api/mcp/stream")) { return Promise.resolve(makeResp({ error: "not found" }, 404)); @@ -81,7 +77,7 @@ function makeMcpStreamFetch( test("mcp call sends JSON-RPC initialize then tools/call", async () => { const calls: Array<{ url: string; body: unknown }> = []; const origFetch = globalThis.fetch; - globalThis.fetch = ((url: string, opts: unknown) => { + globalThis.fetch = ((_url: string, opts: unknown) => { const u = String(url); const body = opts?.body ? JSON.parse(opts.body) : null; calls.push({ url: u, body }); @@ -132,7 +128,7 @@ test("mcp call sends JSON-RPC initialize then tools/call", async () => { test("mcp call passes session-id header on tools/call", async () => { let callHeaders: Record = {}; const origFetch = globalThis.fetch; - globalThis.fetch = ((url: string, opts: unknown) => { + globalThis.fetch = ((_url: string, opts: unknown) => { const body = opts?.body ? JSON.parse(opts.body) : null; if (body && body.method === "initialize") { return Promise.resolve( @@ -197,7 +193,7 @@ test("mcp call prints result content to stdout", async () => { test("mcp call prints error on non-ok response", async () => { const origFetch = globalThis.fetch; - globalThis.fetch = ((url: string, opts: unknown) => { + globalThis.fetch = ((_url: string, opts: unknown) => { const body = opts?.body ? JSON.parse(opts.body) : null; if (body && body.method === "initialize") { return Promise.resolve( @@ -232,7 +228,7 @@ test("mcp call prints error on non-ok response", async () => { test("mcp call with stream reads SSE data", async () => { const origFetch = globalThis.fetch; - globalThis.fetch = ((url: string, opts: unknown) => { + globalThis.fetch = ((_url: string, opts: unknown) => { const body = opts?.body ? JSON.parse(opts.body) : null; if (body && body.method === "initialize") { return Promise.resolve( @@ -283,7 +279,7 @@ test("mcp call with stream reads SSE data", async () => { test("mcp status reads online field", async () => { const origFetch = globalThis.fetch; - globalThis.fetch = (async (_url: string | URL, init?: unknown) => { + globalThis.fetch = (async (_url: string | URL, _init?: unknown) => { const u = String(_url); if (u.includes("/api/health")) { return makeResp({ status: "ok" }) as any; diff --git a/tests/unit/cli-resilience-commands.test.ts b/tests/unit/cli-resilience-commands.test.ts index 1e0ae3bcbba..0b5dd774376 100644 --- a/tests/unit/cli-resilience-commands.test.ts +++ b/tests/unit/cli-resilience-commands.test.ts @@ -1,5 +1,5 @@ import test from "node:test"; -import { makeMcpResp, makeMcpStreamFetch } from "./helpers/mcpStreamMock.ts"; +import { makeMcpStreamFetch } from "./helpers/mcpStreamMock.ts"; import assert from "node:assert/strict"; function makeResp(data: unknown, status = 200) { @@ -16,25 +16,6 @@ function makeResp(data: unknown, status = 200) { return obj; } -async function captureStdout(fn: () => Promise): Promise { - const chunks: string[] = []; - const orig = process.stdout.write.bind(process.stdout); - process.stdout.write = (c: string | Uint8Array) => { - if (typeof c === "string") chunks.push(c); - return true; - }; - try { - await fn(); - } finally { - process.stdout.write = orig; - } - return chunks.join(""); -} - -function makeCmd(output = "json") { - return { optsWithGlobals: () => ({ output, quiet: output !== "table" }) }; -} - test("resilience status busca /api/resilience", async () => { let capturedUrl = ""; const origFetch = globalThis.fetch; diff --git a/tests/unit/cli-skills-commands.test.ts b/tests/unit/cli-skills-commands.test.ts index b04692c8f5b..40f81b4181b 100644 --- a/tests/unit/cli-skills-commands.test.ts +++ b/tests/unit/cli-skills-commands.test.ts @@ -1,5 +1,5 @@ import test from "node:test"; -import { makeMcpResp, makeMcpStreamFetch } from "./helpers/mcpStreamMock.ts"; +import { makeMcpStreamFetch } from "./helpers/mcpStreamMock.ts"; import assert from "node:assert/strict"; const SKILLS_DATA = [ From 38514fff27526adfb6b3262bdde377b6a5ebd494 Mon Sep 17 00:00:00 2001 From: WebPerson Date: Sun, 23 Aug 2026 21:35:04 -0500 Subject: [PATCH 02/17] =?UTF-8?q?fix(lint):=20finish=20#9985=20drain=20?= =?UTF-8?q?=E2=80=94=20stale=20suppression=20+=20self-review=20repair?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Follow-up to the lint-drain commit, two independent leftovers: 1. EditConnectionModal.tsx — drop the eslint-disable-next-line react-hooks/set-state-in-effect directive. It guards a conditional setState (isOpen/connection guard), which the rule does not flag, so ESLint reported an unused disable and failed the 'No new ESLint warnings' gate for every branch at this tip. 2. tests/unit/cli-mcp-call-commands.test.ts — repair an over-broad rename from the previous commit: its sweep renamed every '(url: string, opts: unknown)' fetch-stub parameter to _url, including stubs whose bodies reference url ('mcp call sends JSON-RPC initialize…' and 'prints result content' died with ReferenceError; CI unit shard 3 caught it). Restores those parameters; keeps genuinely unused ones underscored. --- .../providers/[id]/components/modals/EditConnectionModal.tsx | 4 +++- tests/unit/cli-mcp-call-commands.test.ts | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/app/(dashboard)/dashboard/providers/[id]/components/modals/EditConnectionModal.tsx b/src/app/(dashboard)/dashboard/providers/[id]/components/modals/EditConnectionModal.tsx index ed4649d89e5..9c18a066bd8 100644 --- a/src/app/(dashboard)/dashboard/providers/[id]/components/modals/EditConnectionModal.tsx +++ b/src/app/(dashboard)/dashboard/providers/[id]/components/modals/EditConnectionModal.tsx @@ -294,7 +294,9 @@ export default function EditConnectionModal({ // external system on `isOpen`); remounting the 30+ field form per // connection id is a behavior-risking restructure out of scope here // (#11251 follow-up, #9985). - // eslint-disable-next-line react-hooks/set-state-in-effect + // NOTE: no react-hooks/set-state-in-effect suppression needed — the rule + // only fires on unconditional synchronous setState, and this one is + // guarded by the isOpen/connection condition above. setFormData({ name: connection.name || "", priority: connection.priority || 1, diff --git a/tests/unit/cli-mcp-call-commands.test.ts b/tests/unit/cli-mcp-call-commands.test.ts index 6a1ae05c6e5..4cddea2ed71 100644 --- a/tests/unit/cli-mcp-call-commands.test.ts +++ b/tests/unit/cli-mcp-call-commands.test.ts @@ -39,7 +39,7 @@ function makeMcpStreamFetch( }, callStatus = 200, ) { - return ((_url: string, opts: unknown) => { + return ((url: string, opts: unknown) => { const u = String(url); if (!u.includes("/api/mcp/stream")) { return Promise.resolve(makeResp({ error: "not found" }, 404)); @@ -77,7 +77,7 @@ function makeMcpStreamFetch( test("mcp call sends JSON-RPC initialize then tools/call", async () => { const calls: Array<{ url: string; body: unknown }> = []; const origFetch = globalThis.fetch; - globalThis.fetch = ((_url: string, opts: unknown) => { + globalThis.fetch = ((url: string, opts: unknown) => { const u = String(url); const body = opts?.body ? JSON.parse(opts.body) : null; calls.push({ url: u, body }); From 51bad413504888440f867e0091df80b2f891b1fe Mon Sep 17 00:00:00 2001 From: WebPerson Date: Sun, 23 Aug 2026 22:25:55 -0500 Subject: [PATCH 03/17] fix(build): stop staging prune from deleting runtime node_modules (#9985) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The prepublish Step 10.7 prune reused the npm-tarball rule (PACK_ARTIFACT_NEVER_ALLOWED_SEGMENTS = ['node_modules']), which overrides the staging allowlist. That deleted the standalone server's runtime deps — Turbopack-hashed sql.js (dist/sql-wasm.wasm!) and @huggingface/transformers ort-wasm — so packaged boots (dast-smoke, omniroute CLI) threw at instrumentation: '[sqljsAdapter] Packaged sql.js runtime is incomplete' and every DB-backed management route (/api/keys*, /api/auth/logout) returned 500 while /api/monitoring/health stayed green. findUnexpectedArtifactPaths gains a neverAllowedSegments option; the publish gate keeps the strict default, and the staging prune passes [] because its allowlist prefixes (.build/next/, node_modules/) are the runtime contract. RED→GREEN covered by pack-artifact-policy tests; live validation via dast-smoke on PR #11317. --- scripts/build/pack-artifact-policy.ts | 18 ++++++++++-- scripts/build/prepublish.ts | 6 ++++ tests/unit/pack-artifact-policy.test.ts | 39 +++++++++++++++++++++++++ 3 files changed, 61 insertions(+), 2 deletions(-) diff --git a/scripts/build/pack-artifact-policy.ts b/scripts/build/pack-artifact-policy.ts index f5edcf994c7..d076872add5 100644 --- a/scripts/build/pack-artifact-policy.ts +++ b/scripts/build/pack-artifact-policy.ts @@ -312,13 +312,27 @@ export const PACK_ARTIFACT_NEVER_ALLOWED_SEGMENTS: string[] = ["node_modules"]; export function findUnexpectedArtifactPaths( filePaths: string[], - { exactPaths = [], prefixPaths = [] }: { exactPaths?: string[]; prefixPaths?: string[] } = {} + { + exactPaths = [], + prefixPaths = [], + // #9985: the app-STAGING prune (prepublish Step 10.7) must be able to opt out + // of the node_modules segment ban — the standalone server's runtime deps live + // under dist/node_modules and Turbopack-hashed dirs (.build/next/node_modules/ + // sql.js-*/dist/sql-wasm.wasm, transformers ort-wasm). Pruning them 500'd every + // DB-backed route in packaged boots while /api/monitoring/health stayed green. + // The PUBLISH gate (validate-pack-artifact) keeps the strict default. + neverAllowedSegments = PACK_ARTIFACT_NEVER_ALLOWED_SEGMENTS, + }: { + exactPaths?: string[]; + prefixPaths?: string[]; + neverAllowedSegments?: string[]; + } = {} ): string[] { const normalizedExact = new Set(exactPaths.map(normalizeArtifactPath)); const normalizedPrefixes = prefixPaths.map(normalizeArtifactPath); const hasForbiddenSegment = (filePath: string): boolean => - filePath.split("/").some((segment) => PACK_ARTIFACT_NEVER_ALLOWED_SEGMENTS.includes(segment)); + filePath.split("/").some((segment) => neverAllowedSegments.includes(segment)); return filePaths .map(normalizeArtifactPath) diff --git a/scripts/build/prepublish.ts b/scripts/build/prepublish.ts index d29ec325602..eb1c4bfaf1e 100644 --- a/scripts/build/prepublish.ts +++ b/scripts/build/prepublish.ts @@ -639,10 +639,15 @@ for (const relativePath of APP_STAGING_REMOVAL_PATHS) { } // ── Step 10.7: Prune any staged dist/ file outside the allowed runtime set ── +// #9985: neverAllowedSegments is EMPTY here on purpose — unlike the publish +// tarball gate, the staged dist/ legitimately contains node_modules (the +// standalone server's runtime deps, including Turbopack-hashed packages whose +// wasm files DB init requires). The allowlist prefixes above are the contract. const stagedFiles = walkFiles(DIST_DIR); const unexpectedStagedFiles = findUnexpectedArtifactPaths(stagedFiles, { exactPaths: APP_STAGING_ALLOWED_EXACT_PATHS, prefixPaths: APP_STAGING_ALLOWED_PATH_PREFIXES, + neverAllowedSegments: [], }); if (unexpectedStagedFiles.length > 0) { @@ -657,6 +662,7 @@ if (unexpectedStagedFiles.length > 0) { const remainingUnexpectedFiles = findUnexpectedArtifactPaths(walkFiles(DIST_DIR), { exactPaths: APP_STAGING_ALLOWED_EXACT_PATHS, prefixPaths: APP_STAGING_ALLOWED_PATH_PREFIXES, + neverAllowedSegments: [], }); if (remainingUnexpectedFiles.length > 0) { diff --git a/tests/unit/pack-artifact-policy.test.ts b/tests/unit/pack-artifact-policy.test.ts index 857a834ad3b..065ba832517 100644 --- a/tests/unit/pack-artifact-policy.test.ts +++ b/tests/unit/pack-artifact-policy.test.ts @@ -117,6 +117,45 @@ test("findUnexpectedArtifactPaths flags node_modules even inside an allowed pref ]); }); +test("staging mode (neverAllowedSegments: []) keeps runtime node_modules under allowed prefixes (#11317)", () => { + // #9985/#11300-class regression: the app-STAGING prune reused the npm-pack + // never-allowed "node_modules" segment, deleting the standalone server's + // runtime deps — Turbopack-hashed sql.js (sql-wasm.wasm!) and transformers + // ort-wasm — so every packaged boot 500'd on all DB-backed routes while + // /api/monitoring/health stayed green. Staging allowlist prefixes are the + // runtime contract; the node_modules segment ban is a PUBLISH-tarball rule. + const unexpectedPaths = findUnexpectedArtifactPaths( + [ + ".build/next/node_modules/sql.js-59d66b30daa0a8d2/dist/sql-wasm.wasm", + ".build/next/node_modules/@huggingface/transformers-31f28a0eb9b916d1/dist/transformers.js", + ".build/next/node_modules/@huggingface/transformers-31f28a0eb9b916d1/node_modules/tsup/package.json", + "node_modules/sql.js/dist/sql-wasm.wasm", + "package-lock.json", + ], + { + exactPaths: APP_STAGING_ALLOWED_EXACT_PATHS, + prefixPaths: APP_STAGING_ALLOWED_PATH_PREFIXES, + neverAllowedSegments: [], + } + ); + + assert.deepEqual(unexpectedPaths, ["package-lock.json"]); +}); + +test("default pack mode still rejects node_modules under .build/next (tarball guard intact)", () => { + const unexpectedPaths = findUnexpectedArtifactPaths( + [".build/next/node_modules/sql.js-59d66b30daa0a8d2/dist/sql-wasm.wasm"], + { + exactPaths: PACK_ARTIFACT_ALLOWED_EXACT_PATHS, + prefixPaths: PACK_ARTIFACT_ALLOWED_PATH_PREFIXES, + } + ); + + assert.deepEqual(unexpectedPaths, [ + ".build/next/node_modules/sql.js-59d66b30daa0a8d2/dist/sql-wasm.wasm", + ]); +}); + test("package.json files[] excludes nested node_modules from the published package", () => { // The gate above is defence-in-depth; this pins the actual fix. Without the // "!**/node_modules/**" negation the tarball was 99.4 MB unpacked (31.3 MB From 98ce388c21868e6cd00eb727d72b5bdb2223213e Mon Sep 17 00:00:00 2001 From: WebPerson Date: Sun, 23 Aug 2026 22:54:43 -0500 Subject: [PATCH 04/17] chore(lint): prune suppressions consumed by the #9985 fixes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ESLint 9 exits 2 (not a report) when config/quality/eslint-suppressions.json contains entries that no longer occur — the lint-guard gate died on that instead of evaluating. The drain commits removed the underlying violations; this prunes their now-stale entries (counts only decrease; one no-unused-vars rule block fully resolved). --- config/quality/eslint-suppressions.json | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/config/quality/eslint-suppressions.json b/config/quality/eslint-suppressions.json index d873a51adb9..5926a541baa 100644 --- a/config/quality/eslint-suppressions.json +++ b/config/quality/eslint-suppressions.json @@ -3445,7 +3445,7 @@ }, "tests/integration/qdrant-routes.test.ts": { "@typescript-eslint/no-explicit-any": { - "count": 19 + "count": 3 } }, "tests/integration/quota-pools-usage.test.ts": { @@ -4029,10 +4029,10 @@ }, "tests/unit/cli-combo-suggest-commands.test.ts": { "@typescript-eslint/no-explicit-any": { - "count": 16 + "count": 14 }, "@typescript-eslint/no-unused-vars": { - "count": 2 + "count": 1 } }, "tests/unit/cli-completion-dynamic.test.ts": { @@ -4042,7 +4042,7 @@ }, "tests/unit/cli-compression-commands.test.ts": { "@typescript-eslint/no-explicit-any": { - "count": 32 + "count": 20 } }, "tests/unit/cli-context-eng-commands.test.ts": { @@ -4099,7 +4099,7 @@ }, "tests/unit/cli-mcp-call-commands.test.ts": { "@typescript-eslint/no-explicit-any": { - "count": 16 + "count": 10 } }, "tests/unit/cli-memory-commands.test.ts": { @@ -4130,7 +4130,7 @@ }, "tests/unit/cli-oneproxy-commands.test.ts": { "@typescript-eslint/no-explicit-any": { - "count": 22 + "count": 14 }, "@typescript-eslint/no-unused-vars": { "count": 1 @@ -4203,9 +4203,6 @@ "tests/unit/cli-resilience-commands.test.ts": { "@typescript-eslint/no-explicit-any": { "count": 16 - }, - "@typescript-eslint/no-unused-vars": { - "count": 2 } }, "tests/unit/cli-runtime-extended.test.ts": { @@ -4238,7 +4235,7 @@ }, "tests/unit/cli-skills-commands.test.ts": { "@typescript-eslint/no-explicit-any": { - "count": 22 + "count": 16 } }, "tests/unit/cli-stop-supervisor-respawn-9455.test.ts": { @@ -6620,4 +6617,4 @@ "count": 2 } } -} +} \ No newline at end of file From adca3b881c8a643ed9cd60b2ba4b4e3c4418acbd Mon Sep 17 00:00:00 2001 From: Diego Rodrigues de Sa e Souza Date: Mon, 24 Aug 2026 01:10:23 -0300 Subject: [PATCH 05/17] fix(kie): map remaining google-imagen Market ids to their real KIE upstream ids (#11326) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Merging --admin with red discrimination (merge-gates §4). Fails: ESLint warnings ratchet drift (inherited base-red), Unit Tests shards containing stream-timing.test.ts (CPU-contention timing flake, assert.ok(total >= 15)ms — unrelated to this PR's scope, open-sse/handlers/imageGeneration.ts), and dast-smoke (advisory, isRequired:null). --- .../11326-kie-market-google-imagen-ids.md | 1 + open-sse/handlers/imageGeneration.ts | 12 ++++ ...kie-market-upstream-model-id-11225.test.ts | 57 +++++++++++++++++-- 3 files changed, 66 insertions(+), 4 deletions(-) create mode 100644 changelog.d/fixes/11326-kie-market-google-imagen-ids.md diff --git a/changelog.d/fixes/11326-kie-market-google-imagen-ids.md b/changelog.d/fixes/11326-kie-market-google-imagen-ids.md new file mode 100644 index 00000000000..62dacb5d486 --- /dev/null +++ b/changelog.d/fixes/11326-kie-market-google-imagen-ids.md @@ -0,0 +1 @@ +- **fix(kie):** map the remaining `google-imagen/*` KIE Market catalog ids (`nano-banana`, `nano-banana-pro`, `nano-banana-edit`) to their real, KIE-documented upstream `model` values — `#11225`'s fix only covered `nano-banana-2` ([#11326](https://github.com/diegosouzapw/OmniRoute/pull/11326)). diff --git a/open-sse/handlers/imageGeneration.ts b/open-sse/handlers/imageGeneration.ts index fde2f4a403a..db0745898ea 100644 --- a/open-sse/handlers/imageGeneration.ts +++ b/open-sse/handlers/imageGeneration.ts @@ -91,8 +91,20 @@ interface KieImageOptions { } | null; } +// KIE Market catalog ids are namespaced for OmniRoute's catalog +// (`google-imagen/`), but the KIE Market createTask API expects +// vendor-specific upstream ids that do not follow a single consistent +// pattern (confirmed against docs.kie.ai/market/google/* — see #11225, +// #11296): nano-banana-2 and nano-banana-pro drop the vendor namespace +// entirely, while nano-banana and nano-banana-edit use a `google/` prefix +// instead of `google-imagen/`. Every other KIE Market namespace (seedream, +// flux, ideogram, qwen, wan, grok-imagine, gpt) already matches its real +// upstream id byte-for-byte, so this map stays scoped to google-imagen. export const KIE_MARKET_UPSTREAM_MODEL_IDS: ReadonlyMap = new Map([ + ["google-imagen/nano-banana", "google/nano-banana"], ["google-imagen/nano-banana-2", "nano-banana-2"], + ["google-imagen/nano-banana-pro", "nano-banana-pro"], + ["google-imagen/nano-banana-edit", "google/nano-banana-edit"], ]); export function resolveKieMarketUpstreamModelId(publicModelId: string): string { diff --git a/tests/unit/kie-market-upstream-model-id-11225.test.ts b/tests/unit/kie-market-upstream-model-id-11225.test.ts index bc9484494e6..533d0d051f6 100644 --- a/tests/unit/kie-market-upstream-model-id-11225.test.ts +++ b/tests/unit/kie-market-upstream-model-id-11225.test.ts @@ -103,7 +103,7 @@ function resolveLiveKieMarketCatalog() { })); } -test("KIE Market resolver changes exactly one id in the live market catalog", () => { +test("KIE Market resolver changes exactly the 4 google-imagen ids in the live market catalog", () => { const roundTrips = resolveLiveKieMarketCatalog(); const changed = roundTrips.filter(({ publicModelId, upstreamModelId }) => { return upstreamModelId !== publicModelId; @@ -114,12 +114,31 @@ test("KIE Market resolver changes exactly one id in the live market catalog", () publicModelId: "google-imagen/nano-banana-2", upstreamModelId: "nano-banana-2", }, + { + publicModelId: "google-imagen/nano-banana", + upstreamModelId: "google/nano-banana", + }, + { + publicModelId: "google-imagen/nano-banana-pro", + upstreamModelId: "nano-banana-pro", + }, + { + publicModelId: "google-imagen/nano-banana-edit", + upstreamModelId: "google/nano-banana-edit", + }, ]); }); +const REWRITTEN_GOOGLE_IMAGEN_MARKET_IDS = new Set([ + "google-imagen/nano-banana", + "google-imagen/nano-banana-2", + "google-imagen/nano-banana-pro", + "google-imagen/nano-banana-edit", +]); + test("KIE Market resolver preserves every other live market catalog id byte-identically", () => { for (const { publicModelId, upstreamModelId } of resolveLiveKieMarketCatalog()) { - if (publicModelId !== "google-imagen/nano-banana-2") { + if (!REWRITTEN_GOOGLE_IMAGEN_MARKET_IDS.has(publicModelId)) { assert.equal( upstreamModelId, publicModelId, @@ -129,8 +148,8 @@ test("KIE Market resolver preserves every other live market catalog id byte-iden } }); -test("KIE Market resolver keeps exactly one explicit upstream id mapping", () => { - assert.equal(KIE_MARKET_UPSTREAM_MODEL_IDS.size, 1); +test("KIE Market resolver keeps exactly the explicit google-imagen upstream id mappings (#11296)", () => { + assert.equal(KIE_MARKET_UPSTREAM_MODEL_IDS.size, 4); }); test("KIE Market resolver passes an unknown namespaced id through byte-identically", () => { @@ -160,6 +179,36 @@ test("KIE Market createTask sends the bare upstream model id for Nano Banana 2 ( assert.equal(captured.result.data.data[0].url, "https://example.com/kie-market-image.png"); }); +test("KIE Market createTask sends the KIE upstream id for Nano Banana (#11296)", async () => { + const captured = await runKieMarketGeneration("kie/google-imagen/nano-banana"); + + assert.equal( + captured.create.body.model, + "google/nano-banana", + "KIE Market createTask must send the KIE-documented google/nano-banana upstream id" + ); +}); + +test("KIE Market createTask sends the bare upstream model id for Nano Banana Pro (#11296)", async () => { + const captured = await runKieMarketGeneration("kie/google-imagen/nano-banana-pro"); + + assert.equal( + captured.create.body.model, + "nano-banana-pro", + "KIE Market createTask must send the KIE-documented nano-banana-pro upstream id" + ); +}); + +test("KIE Market createTask sends the KIE upstream id for Nano Banana Edit (#11296)", async () => { + const captured = await runKieMarketGeneration("kie/google-imagen/nano-banana-edit"); + + assert.equal( + captured.create.body.model, + "google/nano-banana-edit", + "KIE Market createTask must send the KIE-documented google/nano-banana-edit upstream id" + ); +}); + test("KIE Market createTask leaves genuinely namespaced upstream ids untouched (#11225 control)", async () => { const captured = await runKieMarketGeneration("kie/seedream/4.5-text-to-image"); From 40573e91ee812d68721b5afb9fc9c08a0421ddbc Mon Sep 17 00:00:00 2001 From: WebPerson Date: Sun, 23 Aug 2026 23:15:06 -0500 Subject: [PATCH 06/17] fix(cli-i18n): add missing pt-BR setup.opencode / serve.tls_cert / serve.tls_key (#9985) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mirrors en.json parity for the CLI locale catalog — same gap as upstream #11322 — letting tests/unit/i18n-pt-br.test.ts pass at this tip. --- bin/cli/locales/pt-BR.json | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/bin/cli/locales/pt-BR.json b/bin/cli/locales/pt-BR.json index c821bf976c0..70c963c34d8 100644 --- a/bin/cli/locales/pt-BR.json +++ b/bin/cli/locales/pt-BR.json @@ -26,7 +26,8 @@ "testFailed": "Teste do provedor falhou: {error}", "loginEnabled": "Login: habilitado (senha atualizada)", "loginDisabled": "Login: desabilitado", - "providerInfo": "Provedor: {info}" + "providerInfo": "Provedor: {info}", + "opencode": "Instala e configura o plugin @omniroute/opencode-plugin incluído para o OpenCode" }, "doctor": { "title": "OmniRoute Doctor", @@ -254,7 +255,9 @@ "no_recovery": "Desabilitar reinício automático em crash (modo debug)", "max_restarts": "Máximo de reinícios em 30s antes de desistir (padrão: 2)", "tray": "Mostrar ícone na bandeja do sistema (apenas desktop, opt-in)", - "no_tray": "Desabilitar ícone na bandeja do sistema" + "no_tray": "Desabilitar ícone na bandeja do sistema", + "tls_cert": "Caminho para o certificado TLS (PEM) para servir HTTPS (também OMNIROUTE_TLS_CERT)", + "tls_key": "Caminho para a chave privada TLS (PEM) para servir HTTPS (também OMNIROUTE_TLS_KEY)" }, "backup": { "title": "Backup", From 57d5415a32c6bb6904cd725678e3aab6d3550e06 Mon Sep 17 00:00:00 2001 From: WebPerson Date: Sun, 23 Aug 2026 23:16:25 -0500 Subject: [PATCH 07/17] fix(i18n): fill missing dashboard keys across locales (#9985) i18nUiCoverage ratchet read 99.4 vs baseline 100: recent merges (#11166/#11178/#11179/#11224/#11227/#11283) shipped new UI keys without mirroring them into the 41 non-en catalogs. Fill via the documented EN- fallback convention (scripts/i18n/fill-missing-from-en.mjs semantics: absent keys only, never overwrite) so every locale reaches parity; translations can be refined in place later without touching code. --- src/i18n/messages/ar.json | 97 ++++++++++++++++++++++++++++++++---- src/i18n/messages/az.json | 97 ++++++++++++++++++++++++++++++++---- src/i18n/messages/bg.json | 97 ++++++++++++++++++++++++++++++++---- src/i18n/messages/bn.json | 97 ++++++++++++++++++++++++++++++++---- src/i18n/messages/cs.json | 97 ++++++++++++++++++++++++++++++++---- src/i18n/messages/da.json | 97 ++++++++++++++++++++++++++++++++---- src/i18n/messages/de.json | 92 ++++++++++++++++++++++++++++++---- src/i18n/messages/es.json | 97 ++++++++++++++++++++++++++++++++---- src/i18n/messages/fa.json | 97 ++++++++++++++++++++++++++++++++---- src/i18n/messages/fi.json | 97 ++++++++++++++++++++++++++++++++---- src/i18n/messages/fr.json | 97 ++++++++++++++++++++++++++++++++---- src/i18n/messages/gu.json | 97 ++++++++++++++++++++++++++++++++---- src/i18n/messages/he.json | 97 ++++++++++++++++++++++++++++++++---- src/i18n/messages/hi.json | 97 ++++++++++++++++++++++++++++++++---- src/i18n/messages/hu.json | 97 ++++++++++++++++++++++++++++++++---- src/i18n/messages/id.json | 97 ++++++++++++++++++++++++++++++++---- src/i18n/messages/in.json | 97 ++++++++++++++++++++++++++++++++---- src/i18n/messages/it.json | 97 ++++++++++++++++++++++++++++++++---- src/i18n/messages/ja.json | 97 ++++++++++++++++++++++++++++++++---- src/i18n/messages/ko.json | 97 ++++++++++++++++++++++++++++++++---- src/i18n/messages/mr.json | 97 ++++++++++++++++++++++++++++++++---- src/i18n/messages/ms.json | 97 ++++++++++++++++++++++++++++++++---- src/i18n/messages/nl.json | 97 ++++++++++++++++++++++++++++++++---- src/i18n/messages/no.json | 97 ++++++++++++++++++++++++++++++++---- src/i18n/messages/phi.json | 97 ++++++++++++++++++++++++++++++++---- src/i18n/messages/pl.json | 97 ++++++++++++++++++++++++++++++++---- src/i18n/messages/pt.json | 92 ++++++++++++++++++++++++++++++---- src/i18n/messages/ro.json | 97 ++++++++++++++++++++++++++++++++---- src/i18n/messages/ru.json | 97 ++++++++++++++++++++++++++++++++---- src/i18n/messages/sk.json | 97 ++++++++++++++++++++++++++++++++---- src/i18n/messages/sv.json | 97 ++++++++++++++++++++++++++++++++---- src/i18n/messages/sw.json | 97 ++++++++++++++++++++++++++++++++---- src/i18n/messages/ta.json | 97 ++++++++++++++++++++++++++++++++---- src/i18n/messages/te.json | 97 ++++++++++++++++++++++++++++++++---- src/i18n/messages/th.json | 97 ++++++++++++++++++++++++++++++++---- src/i18n/messages/tr.json | 97 ++++++++++++++++++++++++++++++++---- src/i18n/messages/uk-UA.json | 97 ++++++++++++++++++++++++++++++++---- src/i18n/messages/ur.json | 97 ++++++++++++++++++++++++++++++++---- src/i18n/messages/zh-CN.json | 97 ++++++++++++++++++++++++++++++++---- src/i18n/messages/zh-TW.json | 97 ++++++++++++++++++++++++++++++++---- 40 files changed, 3509 insertions(+), 361 deletions(-) diff --git a/src/i18n/messages/ar.json b/src/i18n/messages/ar.json index f9f2a06e24b..bfbd125f3c7 100644 --- a/src/i18n/messages/ar.json +++ b/src/i18n/messages/ar.json @@ -974,7 +974,14 @@ "batchFileUsedByCount": "مستخدم بواسطة {count, plural, one {دفعة واحدة} other {# دفعات}}", "batchFilePreview": "معاينة", "batchFilePreviewTruncated": "عرض {shown} سطرًا أوليًا ({total} سطرًا إجماليًا)", - "batchFileDownloadFull": "تحميل الملف الكامل" + "batchFileDownloadFull": "تحميل الملف الكامل", + "batchHeaderSubtitle": "Run many requests as one job", + "batchStep1": "1 · Upload JSONL", + "batchStep1Desc": "Add requests", + "batchStep2": "2 · Create batch", + "batchStep2Desc": "Run job", + "batchStep3": "3 · Get results", + "batchStep3Desc": "Download output" }, "disabled": "معطل", "featureFlagOmnirouteEmergencyFallbackDescription": "توجيه الطلبات التي استنفدت الميزانية إلى موفر/نموذج الاحتياط المجاني للطوارئ.", @@ -1293,7 +1300,8 @@ "open": "فتح", "close": "إغلاق" }, - "noResults": "لا توجد نتائج" + "noResults": "لا توجد نتائج", + "trafficInspectorPurpose": "See exactly what your application sends to and receives from AI providers. Works with any OpenAI-compatible client." }, "webhooks": { "title": "خطافات الويب", @@ -1856,7 +1864,21 @@ "directDownloadHint": "أو قم بتنزيل تنسيق المثبت المعني مباشرة:", "releaseNotes": "ملاحظات الإصدار", "readMore": "اقرأ المزيد", - "noAuthLabel": "لا يوجد مصادقة" + "noAuthLabel": "لا يوجد مصادقة", + "recentRequests": "Recent Requests", + "recentRequestsEmpty": "No requests yet.", + "recentRequestsModel": "Model", + "recentRequestsTokens": "In / Out", + "recentRequestsWhen": "When", + "readinessEyebrow": "Get ready to route", + "readinessTitle": "Send your first request", + "readinessSubtitle": "Four small steps. OmniRoute checks readiness as you go.", + "readinessStep1": "Connect a provider", + "readinessStep2": "Configure endpoint authentication", + "readinessStep3": "Copy your endpoint", + "readinessStep4": "Send a test request", + "readinessContinue": "Continue setup", + "readinessDismiss": "Dismiss for now" }, "analytics": { "title": "التحليلات", @@ -2901,7 +2923,8 @@ "omp": "عميل برمجة الطرفية Oh My Pi", "letta": "عميل Letta CLI بذاكرة مستمرة واستخدام للأدوات", "warp": "طرفية Warp AI مع دعم لمزودي الخدمة المخصصين", - "agent-deck": "منسق الوكلاء المتعددين Agent Deck" + "agent-deck": "منسق الوكلاء المتعددين Agent Deck", + "prime-agent": "Prime Agent — self-improving RLM coding harness with OpenAI-compatible provider support" }, "guides": { "cursor": { @@ -4133,7 +4156,10 @@ "notionIntegrationHelp": "إنشاء تكامل داخلي في", "notionIntegrationToken": "رمز تكامل Notion الداخلي", "notionNotConnected": "غير متصل", - "notionTokenConfigured": "تم تكوين الرمز. أدوات Notion متاحة عبر MCP." + "notionTokenConfigured": "تم تكوين الرمز. أدوات Notion متاحة عبر MCP.", + "subtitle": "Use the OpenAI-compatible endpoint with most SDKs and tools.", + "testEndpoint": "Test endpoint →", + "advancedProtocols": "Advanced protocols" }, "endpoints": { "tabProxy": "بروكسي نقطة النهاية", @@ -4716,7 +4742,14 @@ "issueCount": "قضايا {count}", "score": "النتيجة", "lastRequest": "الطلب الأخير", - "lastError": "الخطأ الأخير" + "lastError": "الخطأ الأخير", + "healthVerdictReady": "OmniRoute is ready", + "healthVerdictActionRequired": "Action required to restore full operation", + "healthVerdictCoolingDown": "Cooling down after recent changes", + "healthSubtitle": "System health check", + "advancedDiagnosticsTitle": "Advanced diagnostics", + "hide": "Hide", + "show": "Show" }, "telemetry": { "title": "القياس عن بعد للنظام", @@ -6383,7 +6416,21 @@ "savedModelEndpointSettings": "إعدادات نقطة نهاية النموذج المحفوظ", "searchByModelAria": "البحث حسب الطراز", "selectSupportedEndpoint": "اختر نقطة نهاية مدعومة واحدة على الأقل", - "antigravityClientProfileHarness": "Harness / CLI" + "antigravityClientProfileHarness": "Harness / CLI", + "harImportButtonLabel": "Import .har file", + "harImportButtonBusy": "Importing…", + "harImportButtonHint": "Export from DevTools Network tab after sending at least one chat message.", + "harImportStatusValid": "Imported — valid for ~{minutes}m.", + "harImportStatusExpiringSoon": "Imported — valid for only ~{minutes}m more.", + "harImportStatusExpired": "Imported, but this token already expired ({minutes}m ago) — export a fresh HAR.", + "harImportStatusUnknownExpiry": "Imported. Couldn't read its expiry.", + "harImportErrorNotJson": "That file isn't valid JSON — is it really a .har export?", + "harImportErrorNoEntries": "This HAR has no network entries recorded.", + "harImportErrorNoChathubUrl": "No Copilot chat connection found in this HAR. Send at least one chat message in m365.cloud.microsoft before exporting.", + "harImportErrorUnparsableUrl": "Found the chat connection, but couldn't read its URL.", + "harImportErrorMissingFields": "Found the chat connection, but the token was missing from it.", + "harImportErrorReadFailed": "Couldn't read that file.", + "harImportErrorUnknown": "Couldn't extract a credential from that HAR file." }, "settings": { "title": "الإعدادات", @@ -8230,7 +8277,19 @@ "cliproxyapiHealth": "الصحة", "cliproxyapiPort": "منفذ", "qdrantHost": "مضيف", - "qdrantCollection": "مجموعة" + "qdrantCollection": "مجموعة", + "presetAll": "All", + "presetAllDesc": "Show everything", + "presetEssentials": "Essentials", + "presetEssentialsDesc": "Beginner path - Advanced tools stay searchable", + "presetMinimal": "Minimal", + "presetMinimalDesc": "Core pages only", + "presetDeveloper": "Developer", + "presetDeveloperDesc": "Dev & proxy tools", + "presetAdmin": "Admin", + "presetAdminDesc": "Monitoring & audit", + "settingsSidebarTitle": "Sidebar Customization", + "settingsSidebarDesc": "Choose which sidebar items to show. Essentials keeps Advanced tools searchable." }, "contextRtk": { "title": "محرك آر تي كيه", @@ -12017,7 +12076,8 @@ "title": "وكلاء ACP", "phrase": "واجهات CLI التي يقوم OmniRoute بإنشائها كخلفية تنفيذ (تدفق عكسي)", "flow": "العميل → OmniRoute → إنشاء CLI (stdio/ACP) → الاستجابة", - "seeOther": "عرض →" + "seeOther": "عرض →", + "warning": "Most users can ignore this — use only when an integration requires it." } }, "comparison": { @@ -12841,6 +12901,10 @@ }, "SKILLS_SANDBOX_NETWORK_ENABLED": { "description": "تمكين الوصول إلى الشبكة في بيئة اختبار المهارات المعزولة." + }, + "DISABLE_CONTEXT_WINDOW_CHECKS": { + "label": "Disable Context Window Checks", + "description": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active." } } }, @@ -13413,6 +13477,13 @@ "modelLockouts": "حظر النماذج", "count": "عدد الاتصالات" } + }, + "reassuranceTitle": "Your connections recover automatically", + "reassuranceDetail": "Usually no action is needed. OmniRoute temporarily rests a connection after failures, then safely tries it again.", + "plainStates": { + "healthy": "Requests can be sent", + "coolingDown": "Trying again soon", + "lockedOut": "Needs your attention" } }, "featureFlagCapabilityFilterEnabledDescription": "رفض الطلبات قبل الإرسال عندما يفتقر النموذج المستهدف إلى القدرات المطلوبة (الرؤية، الأدوات، المخرجات المنظمة، نافذة السياق). يحمي الطلبات المباشرة من مزود واحد التي تتجاوز فلتر توافق الطبقة المجمعة.", @@ -13850,5 +13921,13 @@ "toolsMismatch": "المزود لا يدعم استدعاء الأداة", "structuredOutputMismatch": "المزود لا يدعم الإخراج المنظم", "contextWindowMismatch": "تجاوز الطلب نافذة سياق المزود" + }, + "featureFlagDisableContextWindowChecksDescription": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active.", + "cheaperInferenceSponsorBanner": { + "title": "Cheaper Inference is an OmniRoute Open Source Friend", + "description": "A cost-ranked gateway reselling dozens of frontier models behind one OpenAI-compatible endpoint — routing each request to the cheapest eligible provider, never above list price.", + "cta": "Get an API Key", + "partnerLinkNote": "Partner link", + "dismissAriaLabel": "Dismiss" } } diff --git a/src/i18n/messages/az.json b/src/i18n/messages/az.json index c599bd248e0..14201f6191e 100644 --- a/src/i18n/messages/az.json +++ b/src/i18n/messages/az.json @@ -974,7 +974,14 @@ "batchFileUsedByCount": "{count, plural, one {# partiya} other {# partiyalar}}", "batchFilePreview": "Önizləmə", "batchFilePreviewTruncated": "İlk {shown} sətir göstərilir ({total} cəmi sətir)", - "batchFileDownloadFull": "Tam Faylı Yüklə" + "batchFileDownloadFull": "Tam Faylı Yüklə", + "batchHeaderSubtitle": "Run many requests as one job", + "batchStep1": "1 · Upload JSONL", + "batchStep1Desc": "Add requests", + "batchStep2": "2 · Create batch", + "batchStep2Desc": "Run job", + "batchStep3": "3 · Get results", + "batchStep3Desc": "Download output" }, "disabled": "Deaktiv", "featureFlagOmnirouteEmergencyFallbackDescription": "Büdcəsi tükənmiş sorğuları təcili pulsuz ehtiyat təminatçıya/modelə yönləndirin.", @@ -1293,7 +1300,8 @@ "open": "açıq", "close": "bağla" }, - "noResults": "Heç bir nəticə yoxdur" + "noResults": "Heç bir nəticə yoxdur", + "trafficInspectorPurpose": "See exactly what your application sends to and receives from AI providers. Works with any OpenAI-compatible client." }, "webhooks": { "title": "Webhooks", @@ -1856,7 +1864,21 @@ "directDownloadHint": "Yaxud müvafiq quraşdırıcı formatını birbaşa yükləyin:", "releaseNotes": "Buraxılış Qeydləri", "readMore": "Daha Çox Oxu", - "noAuthLabel": "No Auth" + "noAuthLabel": "No Auth", + "recentRequests": "Recent Requests", + "recentRequestsEmpty": "No requests yet.", + "recentRequestsModel": "Model", + "recentRequestsTokens": "In / Out", + "recentRequestsWhen": "When", + "readinessEyebrow": "Get ready to route", + "readinessTitle": "Send your first request", + "readinessSubtitle": "Four small steps. OmniRoute checks readiness as you go.", + "readinessStep1": "Connect a provider", + "readinessStep2": "Configure endpoint authentication", + "readinessStep3": "Copy your endpoint", + "readinessStep4": "Send a test request", + "readinessContinue": "Continue setup", + "readinessDismiss": "Dismiss for now" }, "analytics": { "title": "Analytics", @@ -2901,7 +2923,8 @@ "omp": "Oh My Pi terminal kodlaşdırma agenti", "letta": "Davamlı yaddaşa və alət istifadəsinə malik Letta CLI agenti", "warp": "Fərdi provayder dəstəyinə malik Warp AI terminalı", - "agent-deck": "Agent Deck çoxagentli orkestratoru" + "agent-deck": "Agent Deck çoxagentli orkestratoru", + "prime-agent": "Prime Agent — self-improving RLM coding harness with OpenAI-compatible provider support" }, "guides": { "cursor": { @@ -4133,7 +4156,10 @@ "notionIntegrationHelp": "İç İnteqrasiya Yaradın at", "notionIntegrationToken": "Notion Daxili İnteqrasiya Tokeni", "notionNotConnected": "Bağlı deyil", - "notionTokenConfigured": "Token konfiqurasiya edilib. Notion alətləri MCP vasitəsilə mövcuddur." + "notionTokenConfigured": "Token konfiqurasiya edilib. Notion alətləri MCP vasitəsilə mövcuddur.", + "subtitle": "Use the OpenAI-compatible endpoint with most SDKs and tools.", + "testEndpoint": "Test endpoint →", + "advancedProtocols": "Advanced protocols" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4716,7 +4742,14 @@ "issueCount": "{count} problem", "score": "Xal", "lastRequest": "Son sorğu", - "lastError": "Son xəta" + "lastError": "Son xəta", + "healthVerdictReady": "OmniRoute is ready", + "healthVerdictActionRequired": "Action required to restore full operation", + "healthVerdictCoolingDown": "Cooling down after recent changes", + "healthSubtitle": "System health check", + "advancedDiagnosticsTitle": "Advanced diagnostics", + "hide": "Hide", + "show": "Show" }, "telemetry": { "title": "System Telemetry", @@ -6383,7 +6416,21 @@ "savedModelEndpointSettings": "Saxlanmış model son nöqtəsi parametrləri", "searchByModelAria": "Model üzrə axtarış edin", "selectSupportedEndpoint": "Ən azı bir dəstəklənən son nöqtəni seçin", - "antigravityClientProfileHarness": "Harness / CLI" + "antigravityClientProfileHarness": "Harness / CLI", + "harImportButtonLabel": "Import .har file", + "harImportButtonBusy": "Importing…", + "harImportButtonHint": "Export from DevTools Network tab after sending at least one chat message.", + "harImportStatusValid": "Imported — valid for ~{minutes}m.", + "harImportStatusExpiringSoon": "Imported — valid for only ~{minutes}m more.", + "harImportStatusExpired": "Imported, but this token already expired ({minutes}m ago) — export a fresh HAR.", + "harImportStatusUnknownExpiry": "Imported. Couldn't read its expiry.", + "harImportErrorNotJson": "That file isn't valid JSON — is it really a .har export?", + "harImportErrorNoEntries": "This HAR has no network entries recorded.", + "harImportErrorNoChathubUrl": "No Copilot chat connection found in this HAR. Send at least one chat message in m365.cloud.microsoft before exporting.", + "harImportErrorUnparsableUrl": "Found the chat connection, but couldn't read its URL.", + "harImportErrorMissingFields": "Found the chat connection, but the token was missing from it.", + "harImportErrorReadFailed": "Couldn't read that file.", + "harImportErrorUnknown": "Couldn't extract a credential from that HAR file." }, "settings": { "title": "Settings", @@ -8230,7 +8277,19 @@ "cliproxyapiHealth": "Sağlamlıq", "cliproxyapiPort": "Port", "qdrantHost": "Ev sahibi", - "qdrantCollection": "Kolleksiya" + "qdrantCollection": "Kolleksiya", + "presetAll": "All", + "presetAllDesc": "Show everything", + "presetEssentials": "Essentials", + "presetEssentialsDesc": "Beginner path - Advanced tools stay searchable", + "presetMinimal": "Minimal", + "presetMinimalDesc": "Core pages only", + "presetDeveloper": "Developer", + "presetDeveloperDesc": "Dev & proxy tools", + "presetAdmin": "Admin", + "presetAdminDesc": "Monitoring & audit", + "settingsSidebarTitle": "Sidebar Customization", + "settingsSidebarDesc": "Choose which sidebar items to show. Essentials keeps Advanced tools searchable." }, "contextRtk": { "title": "RTK Engine", @@ -12017,7 +12076,8 @@ "title": "ACP Agentləri", "phrase": "OmniRoute-un icra backend-i kimi başlatdığı CLI-lar (əks axın)", "flow": "Klient → OmniRoute → CLI başlat (stdio/ACP) → cavab", - "seeOther": "Bax →" + "seeOther": "Bax →", + "warning": "Most users can ignore this — use only when an integration requires it." } }, "comparison": { @@ -12841,6 +12901,10 @@ }, "SKILLS_SANDBOX_NETWORK_ENABLED": { "description": "Bacarıqlar sandbox-unda şəbəkəyə girişi aktivləşdirin." + }, + "DISABLE_CONTEXT_WINDOW_CHECKS": { + "label": "Disable Context Window Checks", + "description": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active." } } }, @@ -13413,6 +13477,13 @@ "modelLockouts": "Model Blokları", "count": "Bağlantı Sayı" } + }, + "reassuranceTitle": "Your connections recover automatically", + "reassuranceDetail": "Usually no action is needed. OmniRoute temporarily rests a connection after failures, then safely tries it again.", + "plainStates": { + "healthy": "Requests can be sent", + "coolingDown": "Trying again soon", + "lockedOut": "Needs your attention" } }, "featureFlagCapabilityFilterEnabledDescription": "Tələb olunan imkanlar (görmə, alətlər, strukturlaşdırılmış çıxış, kontekst pəncərəsi) olmayan hədəf modelində göndərilmədən əvvəl tələbləri rədd edin. Kombinasiya qatının uyğunluq filtrini keçən birbaşa tək təminatçı tələblərini qoruyur.", @@ -13850,5 +13921,13 @@ "toolsMismatch": "Təchizatçı alət çağırışını dəstəkləmir", "structuredOutputMismatch": "Təchizatçı strukturlaşdırılmış çıxışı dəstəkləmir", "contextWindowMismatch": "Sorğu təminatçının kontekst pəncərəsini aşır" + }, + "featureFlagDisableContextWindowChecksDescription": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active.", + "cheaperInferenceSponsorBanner": { + "title": "Cheaper Inference is an OmniRoute Open Source Friend", + "description": "A cost-ranked gateway reselling dozens of frontier models behind one OpenAI-compatible endpoint — routing each request to the cheapest eligible provider, never above list price.", + "cta": "Get an API Key", + "partnerLinkNote": "Partner link", + "dismissAriaLabel": "Dismiss" } } diff --git a/src/i18n/messages/bg.json b/src/i18n/messages/bg.json index 8d375a8af32..0190d6f22e0 100644 --- a/src/i18n/messages/bg.json +++ b/src/i18n/messages/bg.json @@ -974,7 +974,14 @@ "batchFileUsedByCount": "Използвано от {count, plural, one {# партида} other {# партиди}}", "batchFilePreview": "Преглед", "batchFilePreviewTruncated": "Показване на първите {shown} реда ({total} общо реда)", - "batchFileDownloadFull": "Изтеглете целия файл" + "batchFileDownloadFull": "Изтеглете целия файл", + "batchHeaderSubtitle": "Run many requests as one job", + "batchStep1": "1 · Upload JSONL", + "batchStep1Desc": "Add requests", + "batchStep2": "2 · Create batch", + "batchStep2Desc": "Run job", + "batchStep3": "3 · Get results", + "batchStep3Desc": "Download output" }, "disabled": "Деактивирано", "featureFlagOmnirouteEmergencyFallbackDescription": "Маршрутизиране на заявки с изчерпан бюджет към аварийния безплатен резервен доставчик/модел.", @@ -1293,7 +1300,8 @@ "open": "отвори", "close": "затвори" }, - "noResults": "Няма резултати" + "noResults": "Няма резултати", + "trafficInspectorPurpose": "See exactly what your application sends to and receives from AI providers. Works with any OpenAI-compatible client." }, "webhooks": { "title": "Уеб кукички", @@ -1856,7 +1864,21 @@ "directDownloadHint": "Или изтеглете съответния инсталаторен формат директно:", "releaseNotes": "Бележки за изданието", "readMore": "Прочетете повече", - "noAuthLabel": "Без удостоверяване" + "noAuthLabel": "Без удостоверяване", + "recentRequests": "Recent Requests", + "recentRequestsEmpty": "No requests yet.", + "recentRequestsModel": "Model", + "recentRequestsTokens": "In / Out", + "recentRequestsWhen": "When", + "readinessEyebrow": "Get ready to route", + "readinessTitle": "Send your first request", + "readinessSubtitle": "Four small steps. OmniRoute checks readiness as you go.", + "readinessStep1": "Connect a provider", + "readinessStep2": "Configure endpoint authentication", + "readinessStep3": "Copy your endpoint", + "readinessStep4": "Send a test request", + "readinessContinue": "Continue setup", + "readinessDismiss": "Dismiss for now" }, "analytics": { "title": "Анализ", @@ -2901,7 +2923,8 @@ "omp": "Oh My Pi терминален агент за програмиране", "letta": "Letta CLI агент с постоянна памет и използване на инструменти", "warp": "Warp AI терминал с поддръжка на персонализиран доставчик", - "agent-deck": "Agent Deck мултиагентен оркестратор" + "agent-deck": "Agent Deck мултиагентен оркестратор", + "prime-agent": "Prime Agent — self-improving RLM coding harness with OpenAI-compatible provider support" }, "guides": { "cursor": { @@ -4133,7 +4156,10 @@ "notionIntegrationHelp": "Създайте вътрешна интеграция на", "notionIntegrationToken": "Токен за вътрешна интеграция на Notion", "notionNotConnected": "Не е свързано", - "notionTokenConfigured": "Токенът е конфигуриран. Инструментите на Notion са налични чрез MCP." + "notionTokenConfigured": "Токенът е конфигуриран. Инструментите на Notion са налични чрез MCP.", + "subtitle": "Use the OpenAI-compatible endpoint with most SDKs and tools.", + "testEndpoint": "Test endpoint →", + "advancedProtocols": "Advanced protocols" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4716,7 +4742,14 @@ "issueCount": "{count} проблема", "score": "Оценка", "lastRequest": "Последна заявка", - "lastError": "Последна грешка" + "lastError": "Последна грешка", + "healthVerdictReady": "OmniRoute is ready", + "healthVerdictActionRequired": "Action required to restore full operation", + "healthVerdictCoolingDown": "Cooling down after recent changes", + "healthSubtitle": "System health check", + "advancedDiagnosticsTitle": "Advanced diagnostics", + "hide": "Hide", + "show": "Show" }, "telemetry": { "title": "Системна телеметрия", @@ -6383,7 +6416,21 @@ "savedModelEndpointSettings": "Настройки на крайна точка на запазен модел", "searchByModelAria": "Търсене по модел", "selectSupportedEndpoint": "Изберете поне една поддържана крайна точка", - "antigravityClientProfileHarness": "Harness / CLI" + "antigravityClientProfileHarness": "Harness / CLI", + "harImportButtonLabel": "Import .har file", + "harImportButtonBusy": "Importing…", + "harImportButtonHint": "Export from DevTools Network tab after sending at least one chat message.", + "harImportStatusValid": "Imported — valid for ~{minutes}m.", + "harImportStatusExpiringSoon": "Imported — valid for only ~{minutes}m more.", + "harImportStatusExpired": "Imported, but this token already expired ({minutes}m ago) — export a fresh HAR.", + "harImportStatusUnknownExpiry": "Imported. Couldn't read its expiry.", + "harImportErrorNotJson": "That file isn't valid JSON — is it really a .har export?", + "harImportErrorNoEntries": "This HAR has no network entries recorded.", + "harImportErrorNoChathubUrl": "No Copilot chat connection found in this HAR. Send at least one chat message in m365.cloud.microsoft before exporting.", + "harImportErrorUnparsableUrl": "Found the chat connection, but couldn't read its URL.", + "harImportErrorMissingFields": "Found the chat connection, but the token was missing from it.", + "harImportErrorReadFailed": "Couldn't read that file.", + "harImportErrorUnknown": "Couldn't extract a credential from that HAR file." }, "settings": { "title": "Настройки", @@ -8230,7 +8277,19 @@ "cliproxyapiHealth": "Здраве", "cliproxyapiPort": "Порт", "qdrantHost": "Хост", - "qdrantCollection": "Колекция" + "qdrantCollection": "Колекция", + "presetAll": "All", + "presetAllDesc": "Show everything", + "presetEssentials": "Essentials", + "presetEssentialsDesc": "Beginner path - Advanced tools stay searchable", + "presetMinimal": "Minimal", + "presetMinimalDesc": "Core pages only", + "presetDeveloper": "Developer", + "presetDeveloperDesc": "Dev & proxy tools", + "presetAdmin": "Admin", + "presetAdminDesc": "Monitoring & audit", + "settingsSidebarTitle": "Sidebar Customization", + "settingsSidebarDesc": "Choose which sidebar items to show. Essentials keeps Advanced tools searchable." }, "contextRtk": { "title": "RTK Engine", @@ -12017,7 +12076,8 @@ "title": "ACP агенти", "phrase": "CLI, които OmniRoute стартира като бекенд за изпълнение (обратен поток)", "flow": "Клиент → OmniRoute → стартиране на CLI (stdio/ACP) → отговор", - "seeOther": "Вижте →" + "seeOther": "Вижте →", + "warning": "Most users can ignore this — use only when an integration requires it." } }, "comparison": { @@ -12841,6 +12901,10 @@ }, "SKILLS_SANDBOX_NETWORK_ENABLED": { "description": "Активиране на мрежов достъп в пясъчника за умения." + }, + "DISABLE_CONTEXT_WINDOW_CHECKS": { + "label": "Disable Context Window Checks", + "description": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active." } } }, @@ -13413,6 +13477,13 @@ "modelLockouts": "Заключвания на Модел", "count": "Брой Връзки" } + }, + "reassuranceTitle": "Your connections recover automatically", + "reassuranceDetail": "Usually no action is needed. OmniRoute temporarily rests a connection after failures, then safely tries it again.", + "plainStates": { + "healthy": "Requests can be sent", + "coolingDown": "Trying again soon", + "lockedOut": "Needs your attention" } }, "featureFlagCapabilityFilterEnabledDescription": "Отхвърлете заявките преди изпращане, когато целевият модел няма необходимите възможности (визия, инструменти, структурирани изходи, контекстен прозорец). Защитава директните заявки от един доставчик, които заобикалят филтъра за съвместимост на комбинирания слой.", @@ -13850,5 +13921,13 @@ "toolsMismatch": "Доставчикът не поддържа извикване на инструменти", "structuredOutputMismatch": "Доставчикът не поддържа структурирано изходно съдържание", "contextWindowMismatch": "Заявката надвишава контекстния прозорец на доставчика" + }, + "featureFlagDisableContextWindowChecksDescription": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active.", + "cheaperInferenceSponsorBanner": { + "title": "Cheaper Inference is an OmniRoute Open Source Friend", + "description": "A cost-ranked gateway reselling dozens of frontier models behind one OpenAI-compatible endpoint — routing each request to the cheapest eligible provider, never above list price.", + "cta": "Get an API Key", + "partnerLinkNote": "Partner link", + "dismissAriaLabel": "Dismiss" } } diff --git a/src/i18n/messages/bn.json b/src/i18n/messages/bn.json index a9932c538c1..475e2b9b8ef 100644 --- a/src/i18n/messages/bn.json +++ b/src/i18n/messages/bn.json @@ -974,7 +974,14 @@ "batchFileUsedByCount": "ব্যবহৃত হয়েছে {count, plural, one {# ব্যাচ} other {# ব্যাচ}}", "batchFilePreview": "পূর্বদর্শন", "batchFilePreviewTruncated": "প্রথম {shown} লাইন দেখানো হচ্ছে ({total} মোট লাইন)", - "batchFileDownloadFull": "পূর্ণ ফাইল ডাউনলোড করুন" + "batchFileDownloadFull": "পূর্ণ ফাইল ডাউনলোড করুন", + "batchHeaderSubtitle": "Run many requests as one job", + "batchStep1": "1 · Upload JSONL", + "batchStep1Desc": "Add requests", + "batchStep2": "2 · Create batch", + "batchStep2Desc": "Run job", + "batchStep3": "3 · Get results", + "batchStep3Desc": "Download output" }, "disabled": "নিষ্ক্রিয়", "featureFlagOmnirouteEmergencyFallbackDescription": "বাজেট শেষ হয়ে যাওয়া অনুরোধগুলো জরুরি ফ্রি ফলব্যাক প্রোভাইডার/মডেলে রুট করুন।", @@ -1293,7 +1300,8 @@ "open": "খুলুন", "close": "বন্ধ করুন" }, - "noResults": "কোন ফলাফল নেই" + "noResults": "কোন ফলাফল নেই", + "trafficInspectorPurpose": "See exactly what your application sends to and receives from AI providers. Works with any OpenAI-compatible client." }, "webhooks": { "title": "ওয়েবহুক", @@ -1856,7 +1864,21 @@ "directDownloadHint": "অথবা সংশ্লিষ্ট ইনস্টলার ফরম্যাটটি সরাসরি ডাউনলোড করুন:", "releaseNotes": "রিলিজ নোটস", "readMore": "আরও পড়ুন", - "noAuthLabel": "কোন প্রমাণীকরণ নেই" + "noAuthLabel": "কোন প্রমাণীকরণ নেই", + "recentRequests": "Recent Requests", + "recentRequestsEmpty": "No requests yet.", + "recentRequestsModel": "Model", + "recentRequestsTokens": "In / Out", + "recentRequestsWhen": "When", + "readinessEyebrow": "Get ready to route", + "readinessTitle": "Send your first request", + "readinessSubtitle": "Four small steps. OmniRoute checks readiness as you go.", + "readinessStep1": "Connect a provider", + "readinessStep2": "Configure endpoint authentication", + "readinessStep3": "Copy your endpoint", + "readinessStep4": "Send a test request", + "readinessContinue": "Continue setup", + "readinessDismiss": "Dismiss for now" }, "analytics": { "title": "Analytics", @@ -2901,7 +2923,8 @@ "omp": "Oh My Pi টার্মিনাল কোডিং এজেন্ট", "letta": "পারসিস্টেন্ট মেমরি এবং টুল ব্যবহারের সুবিধা সহ Letta CLI এজেন্ট", "warp": "কাস্টম প্রোভাইডার সাপোর্ট সহ Warp AI টার্মিনাল", - "agent-deck": "Agent Deck মাল্টি-এজেন্ট অর্কেস্ট্রেটর" + "agent-deck": "Agent Deck মাল্টি-এজেন্ট অর্কেস্ট্রেটর", + "prime-agent": "Prime Agent — self-improving RLM coding harness with OpenAI-compatible provider support" }, "guides": { "cursor": { @@ -4133,7 +4156,10 @@ "notionIntegrationHelp": "একটি অভ্যন্তরীণ ইন্টিগ্রেশন তৈরি করুন at", "notionIntegrationToken": "নোটশন অভ্যন্তরীণ ইন্টিগ্রেশন টোকেন", "notionNotConnected": "সংযুক্ত নয়", - "notionTokenConfigured": "টোকেন কনফিগার করা হয়েছে। Notion টুলগুলি MCP এর মাধ্যমে উপলব্ধ।" + "notionTokenConfigured": "টোকেন কনফিগার করা হয়েছে। Notion টুলগুলি MCP এর মাধ্যমে উপলব্ধ।", + "subtitle": "Use the OpenAI-compatible endpoint with most SDKs and tools.", + "testEndpoint": "Test endpoint →", + "advancedProtocols": "Advanced protocols" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4716,7 +4742,14 @@ "issueCount": "{count} সমস্যা", "score": "স্কোর", "lastRequest": "সর্বশেষ অনুরোধ", - "lastError": "সর্বশেষ ত্রুটি" + "lastError": "সর্বশেষ ত্রুটি", + "healthVerdictReady": "OmniRoute is ready", + "healthVerdictActionRequired": "Action required to restore full operation", + "healthVerdictCoolingDown": "Cooling down after recent changes", + "healthSubtitle": "System health check", + "advancedDiagnosticsTitle": "Advanced diagnostics", + "hide": "Hide", + "show": "Show" }, "telemetry": { "title": "সিস্টেম টেলিমেট্রি", @@ -6383,7 +6416,21 @@ "savedModelEndpointSettings": "সংরক্ষিত মডেল এন্ডপয়েন্ট সেটিংস", "searchByModelAria": "মডেল দ্বারা অনুসন্ধান করুন", "selectSupportedEndpoint": "কমপক্ষে একটি সমর্থিত এন্ডপয়েন্ট নির্বাচন করুন", - "antigravityClientProfileHarness": "Harness / CLI" + "antigravityClientProfileHarness": "Harness / CLI", + "harImportButtonLabel": "Import .har file", + "harImportButtonBusy": "Importing…", + "harImportButtonHint": "Export from DevTools Network tab after sending at least one chat message.", + "harImportStatusValid": "Imported — valid for ~{minutes}m.", + "harImportStatusExpiringSoon": "Imported — valid for only ~{minutes}m more.", + "harImportStatusExpired": "Imported, but this token already expired ({minutes}m ago) — export a fresh HAR.", + "harImportStatusUnknownExpiry": "Imported. Couldn't read its expiry.", + "harImportErrorNotJson": "That file isn't valid JSON — is it really a .har export?", + "harImportErrorNoEntries": "This HAR has no network entries recorded.", + "harImportErrorNoChathubUrl": "No Copilot chat connection found in this HAR. Send at least one chat message in m365.cloud.microsoft before exporting.", + "harImportErrorUnparsableUrl": "Found the chat connection, but couldn't read its URL.", + "harImportErrorMissingFields": "Found the chat connection, but the token was missing from it.", + "harImportErrorReadFailed": "Couldn't read that file.", + "harImportErrorUnknown": "Couldn't extract a credential from that HAR file." }, "settings": { "title": "Settings", @@ -8230,7 +8277,19 @@ "cliproxyapiHealth": "স্বাস্থ্য", "cliproxyapiPort": "পোর্ট", "qdrantHost": "হোস্ট", - "qdrantCollection": "সংগ্রহ" + "qdrantCollection": "সংগ্রহ", + "presetAll": "All", + "presetAllDesc": "Show everything", + "presetEssentials": "Essentials", + "presetEssentialsDesc": "Beginner path - Advanced tools stay searchable", + "presetMinimal": "Minimal", + "presetMinimalDesc": "Core pages only", + "presetDeveloper": "Developer", + "presetDeveloperDesc": "Dev & proxy tools", + "presetAdmin": "Admin", + "presetAdminDesc": "Monitoring & audit", + "settingsSidebarTitle": "Sidebar Customization", + "settingsSidebarDesc": "Choose which sidebar items to show. Essentials keeps Advanced tools searchable." }, "contextRtk": { "title": "RTK Engine", @@ -12017,7 +12076,8 @@ "title": "ACP এজেন্ট", "phrase": "CLI যা OmniRoute এক্সিকিউশন ব্যাকএন্ড হিসেবে স্পন করে (রিভার্স ফ্লো)", "flow": "ক্লায়েন্ট → OmniRoute → spawn CLI (stdio/ACP) → রেসপন্স", - "seeOther": "দেখুন →" + "seeOther": "দেখুন →", + "warning": "Most users can ignore this — use only when an integration requires it." } }, "comparison": { @@ -12841,6 +12901,10 @@ }, "SKILLS_SANDBOX_NETWORK_ENABLED": { "description": "স্কিল স্যান্ডবক্সে নেটওয়ার্ক অ্যাক্সেস সক্ষম করুন।" + }, + "DISABLE_CONTEXT_WINDOW_CHECKS": { + "label": "Disable Context Window Checks", + "description": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active." } } }, @@ -13413,6 +13477,13 @@ "modelLockouts": "মডেল লকআউট", "count": "সংযোগ সংখ্যা" } + }, + "reassuranceTitle": "Your connections recover automatically", + "reassuranceDetail": "Usually no action is needed. OmniRoute temporarily rests a connection after failures, then safely tries it again.", + "plainStates": { + "healthy": "Requests can be sent", + "coolingDown": "Trying again soon", + "lockedOut": "Needs your attention" } }, "featureFlagCapabilityFilterEnabledDescription": "লক্ষ্য মডেলের প্রয়োজনীয় সক্ষমতা (দৃষ্টি, সরঞ্জাম, কাঠামোবদ্ধ আউটপুট, প্রসঙ্গ উইন্ডো) অনুপস্থিত থাকলে প্রেরণের আগে অনুরোধগুলি প্রত্যাখ্যান করুন। এটি কম্বো-লেয়ার সামঞ্জস্য ফিল্টারকে বাইপাস করা সরাসরি একক-প্রদানকারী অনুরোধগুলি রক্ষা করে।", @@ -13850,5 +13921,13 @@ "toolsMismatch": "প্রদানকারী টুল কলিং সমর্থন করে না", "structuredOutputMismatch": "প্রোভাইডার স্ট্রাকচারড আউটপুট সমর্থন করে না", "contextWindowMismatch": "অনুরোধটি প্রদানকারীর প্রসঙ্গ উইন্ডো অতিক্রম করেছে" + }, + "featureFlagDisableContextWindowChecksDescription": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active.", + "cheaperInferenceSponsorBanner": { + "title": "Cheaper Inference is an OmniRoute Open Source Friend", + "description": "A cost-ranked gateway reselling dozens of frontier models behind one OpenAI-compatible endpoint — routing each request to the cheapest eligible provider, never above list price.", + "cta": "Get an API Key", + "partnerLinkNote": "Partner link", + "dismissAriaLabel": "Dismiss" } } diff --git a/src/i18n/messages/cs.json b/src/i18n/messages/cs.json index c27b27210da..e59b8b7337f 100644 --- a/src/i18n/messages/cs.json +++ b/src/i18n/messages/cs.json @@ -974,7 +974,14 @@ "batchFileUsedByCount": "Použito {count, plural, one {# dávka} other {# dávky}}", "batchFilePreview": "Náhled", "batchFilePreviewTruncated": "Zobrazuji prvních {shown} řádků ({total} celkem řádků)", - "batchFileDownloadFull": "Stáhnout celý soubor" + "batchFileDownloadFull": "Stáhnout celý soubor", + "batchHeaderSubtitle": "Run many requests as one job", + "batchStep1": "1 · Upload JSONL", + "batchStep1Desc": "Add requests", + "batchStep2": "2 · Create batch", + "batchStep2Desc": "Run job", + "batchStep3": "3 · Get results", + "batchStep3Desc": "Download output" }, "disabled": "Zakázáno", "featureFlagOmnirouteEmergencyFallbackDescription": "Směrovat požadavky s vyčerpaným rozpočtem na nouzového bezplatného záložního poskytovatele/model.", @@ -1293,7 +1300,8 @@ "open": "otevřít", "close": "zavřít" }, - "noResults": "Žádné výsledky" + "noResults": "Žádné výsledky", + "trafficInspectorPurpose": "See exactly what your application sends to and receives from AI providers. Works with any OpenAI-compatible client." }, "webhooks": { "title": "Webhooky", @@ -1856,7 +1864,21 @@ "directDownloadHint": "Nebo stáhněte příslušný formát instalátoru přímo:", "releaseNotes": "Poznámky k vydání", "readMore": "Přečíst více", - "noAuthLabel": "Žádná autentizace" + "noAuthLabel": "Žádná autentizace", + "recentRequests": "Recent Requests", + "recentRequestsEmpty": "No requests yet.", + "recentRequestsModel": "Model", + "recentRequestsTokens": "In / Out", + "recentRequestsWhen": "When", + "readinessEyebrow": "Get ready to route", + "readinessTitle": "Send your first request", + "readinessSubtitle": "Four small steps. OmniRoute checks readiness as you go.", + "readinessStep1": "Connect a provider", + "readinessStep2": "Configure endpoint authentication", + "readinessStep3": "Copy your endpoint", + "readinessStep4": "Send a test request", + "readinessContinue": "Continue setup", + "readinessDismiss": "Dismiss for now" }, "analytics": { "title": "Analytika", @@ -2901,7 +2923,8 @@ "omp": "Terminálový programovací agent Oh My Pi", "letta": "CLI agent Letta s trvalou pamětí a používáním nástrojů", "warp": "AI terminál Warp s podporou vlastních poskytovatelů", - "agent-deck": "Multiagentní orchestrátor Agent Deck" + "agent-deck": "Multiagentní orchestrátor Agent Deck", + "prime-agent": "Prime Agent — self-improving RLM coding harness with OpenAI-compatible provider support" }, "guides": { "cursor": { @@ -4133,7 +4156,10 @@ "notionIntegrationHelp": "Vytvořte interní integraci na", "notionIntegrationToken": "Notion Interní Integrační Token", "notionNotConnected": "Nepřipojeno", - "notionTokenConfigured": "Token byl nakonfigurován. Nástroje Notion jsou k dispozici prostřednictvím MCP." + "notionTokenConfigured": "Token byl nakonfigurován. Nástroje Notion jsou k dispozici prostřednictvím MCP.", + "subtitle": "Use the OpenAI-compatible endpoint with most SDKs and tools.", + "testEndpoint": "Test endpoint →", + "advancedProtocols": "Advanced protocols" }, "endpoints": { "tabProxy": "Koncová Proxy", @@ -4716,7 +4742,14 @@ "issueCount": "{count} problémů", "score": "Skóre", "lastRequest": "Poslední požadavek", - "lastError": "Poslední chyba" + "lastError": "Poslední chyba", + "healthVerdictReady": "OmniRoute is ready", + "healthVerdictActionRequired": "Action required to restore full operation", + "healthVerdictCoolingDown": "Cooling down after recent changes", + "healthSubtitle": "System health check", + "advancedDiagnosticsTitle": "Advanced diagnostics", + "hide": "Hide", + "show": "Show" }, "telemetry": { "title": "Systémová telemetrie", @@ -6383,7 +6416,21 @@ "savedModelEndpointSettings": "Nastavení koncového bodu uloženého modelu", "searchByModelAria": "Hledat podle modelu", "selectSupportedEndpoint": "Vyberte alespoň jeden podporovaný koncový bod", - "antigravityClientProfileHarness": "Harness / CLI" + "antigravityClientProfileHarness": "Harness / CLI", + "harImportButtonLabel": "Import .har file", + "harImportButtonBusy": "Importing…", + "harImportButtonHint": "Export from DevTools Network tab after sending at least one chat message.", + "harImportStatusValid": "Imported — valid for ~{minutes}m.", + "harImportStatusExpiringSoon": "Imported — valid for only ~{minutes}m more.", + "harImportStatusExpired": "Imported, but this token already expired ({minutes}m ago) — export a fresh HAR.", + "harImportStatusUnknownExpiry": "Imported. Couldn't read its expiry.", + "harImportErrorNotJson": "That file isn't valid JSON — is it really a .har export?", + "harImportErrorNoEntries": "This HAR has no network entries recorded.", + "harImportErrorNoChathubUrl": "No Copilot chat connection found in this HAR. Send at least one chat message in m365.cloud.microsoft before exporting.", + "harImportErrorUnparsableUrl": "Found the chat connection, but couldn't read its URL.", + "harImportErrorMissingFields": "Found the chat connection, but the token was missing from it.", + "harImportErrorReadFailed": "Couldn't read that file.", + "harImportErrorUnknown": "Couldn't extract a credential from that HAR file." }, "settings": { "title": "Nastavení", @@ -8230,7 +8277,19 @@ "cliproxyapiHealth": "Zdraví", "cliproxyapiPort": "Port", "qdrantHost": "Host", - "qdrantCollection": "Kolekce" + "qdrantCollection": "Kolekce", + "presetAll": "All", + "presetAllDesc": "Show everything", + "presetEssentials": "Essentials", + "presetEssentialsDesc": "Beginner path - Advanced tools stay searchable", + "presetMinimal": "Minimal", + "presetMinimalDesc": "Core pages only", + "presetDeveloper": "Developer", + "presetDeveloperDesc": "Dev & proxy tools", + "presetAdmin": "Admin", + "presetAdminDesc": "Monitoring & audit", + "settingsSidebarTitle": "Sidebar Customization", + "settingsSidebarDesc": "Choose which sidebar items to show. Essentials keeps Advanced tools searchable." }, "contextRtk": { "title": "RTK Engine", @@ -12017,7 +12076,8 @@ "title": "ACP Agents", "phrase": "Rozhraní CLI, která OmniRoute spouští jako prováděcí backend (zpětný tok)", "flow": "Klient → OmniRoute → spustit CLI (stdio/ACP) → odpověď", - "seeOther": "Zobrazit →" + "seeOther": "Zobrazit →", + "warning": "Most users can ignore this — use only when an integration requires it." } }, "comparison": { @@ -12841,6 +12901,10 @@ }, "SKILLS_SANDBOX_NETWORK_ENABLED": { "description": "Povolit přístup k síti v sandboxu dovedností." + }, + "DISABLE_CONTEXT_WINDOW_CHECKS": { + "label": "Disable Context Window Checks", + "description": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active." } } }, @@ -13413,6 +13477,13 @@ "modelLockouts": "Uzamčení Modelu", "count": "Počet Připojení" } + }, + "reassuranceTitle": "Your connections recover automatically", + "reassuranceDetail": "Usually no action is needed. OmniRoute temporarily rests a connection after failures, then safely tries it again.", + "plainStates": { + "healthy": "Requests can be sent", + "coolingDown": "Trying again soon", + "lockedOut": "Needs your attention" } }, "featureFlagCapabilityFilterEnabledDescription": "Odmítnout požadavky před odesláním, když cílový model postrádá požadované schopnosti (vidění, nástroje, strukturovaný výstup, kontextové okno). Chrání přímé požadavky od jednotlivých poskytovatelů, které obcházejí filtr kompatibility kombinované vrstvy.", @@ -13850,5 +13921,13 @@ "toolsMismatch": "Poskytovatel nepodporuje volání nástroje", "structuredOutputMismatch": "Poskytovatel nepodporuje strukturovaný výstup", "contextWindowMismatch": "Žádost překračuje kontextové okno poskytovatele" + }, + "featureFlagDisableContextWindowChecksDescription": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active.", + "cheaperInferenceSponsorBanner": { + "title": "Cheaper Inference is an OmniRoute Open Source Friend", + "description": "A cost-ranked gateway reselling dozens of frontier models behind one OpenAI-compatible endpoint — routing each request to the cheapest eligible provider, never above list price.", + "cta": "Get an API Key", + "partnerLinkNote": "Partner link", + "dismissAriaLabel": "Dismiss" } } diff --git a/src/i18n/messages/da.json b/src/i18n/messages/da.json index 46887cc2e92..17ec2e31e02 100644 --- a/src/i18n/messages/da.json +++ b/src/i18n/messages/da.json @@ -974,7 +974,14 @@ "batchFileUsedByCount": "Brugt af {count, plural, one {# batch} other {# batches}}", "batchFilePreview": "Forhåndsvisning", "batchFilePreviewTruncated": "Viser de første {shown} linjer ({total} linjer i alt)", - "batchFileDownloadFull": "Download Fuld Fil" + "batchFileDownloadFull": "Download Fuld Fil", + "batchHeaderSubtitle": "Run many requests as one job", + "batchStep1": "1 · Upload JSONL", + "batchStep1Desc": "Add requests", + "batchStep2": "2 · Create batch", + "batchStep2Desc": "Run job", + "batchStep3": "3 · Get results", + "batchStep3Desc": "Download output" }, "disabled": "Deaktiveret", "featureFlagOmnirouteEmergencyFallbackDescription": "Diriger budgetudtømte anmodninger til den gratis nød-fallback-udbyder/-model.", @@ -1293,7 +1300,8 @@ "open": "åben", "close": "luk" }, - "noResults": "Ingen resultater" + "noResults": "Ingen resultater", + "trafficInspectorPurpose": "See exactly what your application sends to and receives from AI providers. Works with any OpenAI-compatible client." }, "webhooks": { "title": "Webhooks", @@ -1856,7 +1864,21 @@ "directDownloadHint": "Eller download det respektive installationsformat direkte:", "releaseNotes": "Udgivelsesnoter", "readMore": "Læs Mere", - "noAuthLabel": "Ingen godkendelse" + "noAuthLabel": "Ingen godkendelse", + "recentRequests": "Recent Requests", + "recentRequestsEmpty": "No requests yet.", + "recentRequestsModel": "Model", + "recentRequestsTokens": "In / Out", + "recentRequestsWhen": "When", + "readinessEyebrow": "Get ready to route", + "readinessTitle": "Send your first request", + "readinessSubtitle": "Four small steps. OmniRoute checks readiness as you go.", + "readinessStep1": "Connect a provider", + "readinessStep2": "Configure endpoint authentication", + "readinessStep3": "Copy your endpoint", + "readinessStep4": "Send a test request", + "readinessContinue": "Continue setup", + "readinessDismiss": "Dismiss for now" }, "analytics": { "title": "Analytics", @@ -2901,7 +2923,8 @@ "omp": "Oh My Pi terminal-kodningsagent", "letta": "Letta CLI-agent med persistent hukommelse og brug af værktøjer", "warp": "Warp AI-terminal med understøttelse af brugerdefineret udbyder", - "agent-deck": "Agent Deck multi-agent-orkestrator" + "agent-deck": "Agent Deck multi-agent-orkestrator", + "prime-agent": "Prime Agent — self-improving RLM coding harness with OpenAI-compatible provider support" }, "guides": { "cursor": { @@ -4133,7 +4156,10 @@ "notionIntegrationHelp": "Opret en intern integration ved", "notionIntegrationToken": "Notion Intern Token til Integration", "notionNotConnected": "Ikke tilsluttet", - "notionTokenConfigured": "Token konfigureret. Notion-værktøjer er tilgængelige via MCP." + "notionTokenConfigured": "Token konfigureret. Notion-værktøjer er tilgængelige via MCP.", + "subtitle": "Use the OpenAI-compatible endpoint with most SDKs and tools.", + "testEndpoint": "Test endpoint →", + "advancedProtocols": "Advanced protocols" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4716,7 +4742,14 @@ "issueCount": "{count} problemer", "score": "Score", "lastRequest": "Sidste anmodning", - "lastError": "Sidste fejl" + "lastError": "Sidste fejl", + "healthVerdictReady": "OmniRoute is ready", + "healthVerdictActionRequired": "Action required to restore full operation", + "healthVerdictCoolingDown": "Cooling down after recent changes", + "healthSubtitle": "System health check", + "advancedDiagnosticsTitle": "Advanced diagnostics", + "hide": "Hide", + "show": "Show" }, "telemetry": { "title": "System telemetri", @@ -6383,7 +6416,21 @@ "savedModelEndpointSettings": "Indstillinger for gemt model endpoint", "searchByModelAria": "Søg efter model", "selectSupportedEndpoint": "Vælg mindst én understøttet endpoint", - "antigravityClientProfileHarness": "Harness / CLI" + "antigravityClientProfileHarness": "Harness / CLI", + "harImportButtonLabel": "Import .har file", + "harImportButtonBusy": "Importing…", + "harImportButtonHint": "Export from DevTools Network tab after sending at least one chat message.", + "harImportStatusValid": "Imported — valid for ~{minutes}m.", + "harImportStatusExpiringSoon": "Imported — valid for only ~{minutes}m more.", + "harImportStatusExpired": "Imported, but this token already expired ({minutes}m ago) — export a fresh HAR.", + "harImportStatusUnknownExpiry": "Imported. Couldn't read its expiry.", + "harImportErrorNotJson": "That file isn't valid JSON — is it really a .har export?", + "harImportErrorNoEntries": "This HAR has no network entries recorded.", + "harImportErrorNoChathubUrl": "No Copilot chat connection found in this HAR. Send at least one chat message in m365.cloud.microsoft before exporting.", + "harImportErrorUnparsableUrl": "Found the chat connection, but couldn't read its URL.", + "harImportErrorMissingFields": "Found the chat connection, but the token was missing from it.", + "harImportErrorReadFailed": "Couldn't read that file.", + "harImportErrorUnknown": "Couldn't extract a credential from that HAR file." }, "settings": { "title": "Indstillinger", @@ -8230,7 +8277,19 @@ "cliproxyapiHealth": "Sundhed", "cliproxyapiPort": "Port", "qdrantHost": "Vært", - "qdrantCollection": "Samling" + "qdrantCollection": "Samling", + "presetAll": "All", + "presetAllDesc": "Show everything", + "presetEssentials": "Essentials", + "presetEssentialsDesc": "Beginner path - Advanced tools stay searchable", + "presetMinimal": "Minimal", + "presetMinimalDesc": "Core pages only", + "presetDeveloper": "Developer", + "presetDeveloperDesc": "Dev & proxy tools", + "presetAdmin": "Admin", + "presetAdminDesc": "Monitoring & audit", + "settingsSidebarTitle": "Sidebar Customization", + "settingsSidebarDesc": "Choose which sidebar items to show. Essentials keeps Advanced tools searchable." }, "contextRtk": { "title": "RTK Engine", @@ -12017,7 +12076,8 @@ "title": "ACP-agenter", "phrase": "CLI'er, som OmniRoute starter som eksekveringsbackend (omvendt flow)", "flow": "Klient → OmniRoute → spawn CLI (stdio/ACP) → svar", - "seeOther": "Se →" + "seeOther": "Se →", + "warning": "Most users can ignore this — use only when an integration requires it." } }, "comparison": { @@ -12841,6 +12901,10 @@ }, "SKILLS_SANDBOX_NETWORK_ENABLED": { "description": "Aktivér netværksadgang i skills-sandkassen." + }, + "DISABLE_CONTEXT_WINDOW_CHECKS": { + "label": "Disable Context Window Checks", + "description": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active." } } }, @@ -13413,6 +13477,13 @@ "modelLockouts": "Modellåsninger", "count": "Antal Forbindelser" } + }, + "reassuranceTitle": "Your connections recover automatically", + "reassuranceDetail": "Usually no action is needed. OmniRoute temporarily rests a connection after failures, then safely tries it again.", + "plainStates": { + "healthy": "Requests can be sent", + "coolingDown": "Trying again soon", + "lockedOut": "Needs your attention" } }, "featureFlagCapabilityFilterEnabledDescription": "Afvis anmodninger før afsendelse, når målmodellen mangler de nødvendige funktioner (vision, værktøjer, struktureret output, kontekstvindue). Beskytter direkte anmodninger fra en enkelt udbyder, der omgår kombinationslagets kompatibilitetsfilter.", @@ -13850,5 +13921,13 @@ "toolsMismatch": "Udbyderen understøtter ikke værktøjsopkald.", "structuredOutputMismatch": "Udbyderen understøtter ikke struktureret output", "contextWindowMismatch": "Anmodningen overskrider udbyderens kontekstvindue" + }, + "featureFlagDisableContextWindowChecksDescription": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active.", + "cheaperInferenceSponsorBanner": { + "title": "Cheaper Inference is an OmniRoute Open Source Friend", + "description": "A cost-ranked gateway reselling dozens of frontier models behind one OpenAI-compatible endpoint — routing each request to the cheapest eligible provider, never above list price.", + "cta": "Get an API Key", + "partnerLinkNote": "Partner link", + "dismissAriaLabel": "Dismiss" } } diff --git a/src/i18n/messages/de.json b/src/i18n/messages/de.json index 1baab4afec9..97b4a017dc2 100644 --- a/src/i18n/messages/de.json +++ b/src/i18n/messages/de.json @@ -974,7 +974,14 @@ "batchFileUsedByCount": "Verwendet von {count, plural, one {# Batch} other {# Batches}}", "batchFilePreview": "Vorschau", "batchFilePreviewTruncated": "Zeige die ersten {shown} Zeilen ({total} insgesamt)", - "batchFileDownloadFull": "Vollständige Datei herunterladen" + "batchFileDownloadFull": "Vollständige Datei herunterladen", + "batchHeaderSubtitle": "Run many requests as one job", + "batchStep1": "1 · Upload JSONL", + "batchStep1Desc": "Add requests", + "batchStep2": "2 · Create batch", + "batchStep2Desc": "Run job", + "batchStep3": "3 · Get results", + "batchStep3Desc": "Download output" }, "disabled": "Deaktiviert", "featureFlagOmnirouteEmergencyFallbackDescription": "Anfragen mit erschöpftem Budget an den kostenlosen Notfall-Fallback-Anbieter/das Notfall-Fallback-Modell weiterleiten.", @@ -1293,7 +1300,8 @@ "open": "öffnen", "close": "schließen" }, - "noResults": "Keine Ergebnisse" + "noResults": "Keine Ergebnisse", + "trafficInspectorPurpose": "See exactly what your application sends to and receives from AI providers. Works with any OpenAI-compatible client." }, "webhooks": { "title": "Webhooks", @@ -1856,7 +1864,21 @@ "directDownloadHint": "Oder laden Sie das jeweilige Installationsformat direkt herunter:", "releaseNotes": "Versionshinweise", "readMore": "Mehr Lesen", - "noAuthLabel": "Keine Authentifizierung" + "noAuthLabel": "Keine Authentifizierung", + "recentRequests": "Recent Requests", + "recentRequestsEmpty": "No requests yet.", + "recentRequestsModel": "Model", + "recentRequestsTokens": "In / Out", + "recentRequestsWhen": "When", + "readinessEyebrow": "Get ready to route", + "readinessTitle": "Send your first request", + "readinessSubtitle": "Four small steps. OmniRoute checks readiness as you go.", + "readinessStep1": "Connect a provider", + "readinessStep2": "Configure endpoint authentication", + "readinessStep3": "Copy your endpoint", + "readinessStep4": "Send a test request", + "readinessContinue": "Continue setup", + "readinessDismiss": "Dismiss for now" }, "analytics": { "title": "Analytik", @@ -2901,7 +2923,8 @@ "omp": "Oh My Pi Terminal-Coding-Agent", "letta": "Letta CLI-Agent mit persistentem Speicher und Tool-Nutzung", "warp": "Warp AI-Terminal mit Unterstützung für benutzerdefinierte Anbieter", - "agent-deck": "Agent Deck Multi-Agenten-Orchestrator" + "agent-deck": "Agent Deck Multi-Agenten-Orchestrator", + "prime-agent": "Prime Agent — self-improving RLM coding harness with OpenAI-compatible provider support" }, "guides": { "cursor": { @@ -4133,7 +4156,10 @@ "notionIntegrationHelp": "Erstellen Sie eine interne Integration bei", "notionIntegrationToken": "Notion Interner Integrations-Token", "notionNotConnected": "Nicht verbunden", - "notionTokenConfigured": "Token konfiguriert. Notion-Tools sind über MCP verfügbar." + "notionTokenConfigured": "Token konfiguriert. Notion-Tools sind über MCP verfügbar.", + "subtitle": "Use the OpenAI-compatible endpoint with most SDKs and tools.", + "testEndpoint": "Test endpoint →", + "advancedProtocols": "Advanced protocols" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4716,7 +4742,14 @@ "issueCount": "{count} Probleme", "score": "Score", "lastRequest": "Letzte Anfrage", - "lastError": "Letzter Fehler" + "lastError": "Letzter Fehler", + "healthVerdictReady": "OmniRoute is ready", + "healthVerdictActionRequired": "Action required to restore full operation", + "healthVerdictCoolingDown": "Cooling down after recent changes", + "healthSubtitle": "System health check", + "advancedDiagnosticsTitle": "Advanced diagnostics", + "hide": "Hide", + "show": "Show" }, "telemetry": { "title": "Systemtelemetrie", @@ -6383,7 +6416,21 @@ "savedModelEndpointSettings": "Einstellungen für den gespeicherten Modell-Endpunkt", "searchByModelAria": "Nach Modell suchen", "selectSupportedEndpoint": "Wählen Sie mindestens einen unterstützten Endpunkt aus", - "antigravityClientProfileHarness": "Harness / CLI" + "antigravityClientProfileHarness": "Harness / CLI", + "harImportButtonLabel": "Import .har file", + "harImportButtonBusy": "Importing…", + "harImportButtonHint": "Export from DevTools Network tab after sending at least one chat message.", + "harImportStatusValid": "Imported — valid for ~{minutes}m.", + "harImportStatusExpiringSoon": "Imported — valid for only ~{minutes}m more.", + "harImportStatusExpired": "Imported, but this token already expired ({minutes}m ago) — export a fresh HAR.", + "harImportStatusUnknownExpiry": "Imported. Couldn't read its expiry.", + "harImportErrorNotJson": "That file isn't valid JSON — is it really a .har export?", + "harImportErrorNoEntries": "This HAR has no network entries recorded.", + "harImportErrorNoChathubUrl": "No Copilot chat connection found in this HAR. Send at least one chat message in m365.cloud.microsoft before exporting.", + "harImportErrorUnparsableUrl": "Found the chat connection, but couldn't read its URL.", + "harImportErrorMissingFields": "Found the chat connection, but the token was missing from it.", + "harImportErrorReadFailed": "Couldn't read that file.", + "harImportErrorUnknown": "Couldn't extract a credential from that HAR file." }, "settings": { "title": "Einstellungen", @@ -8230,7 +8277,19 @@ "cliproxyapiHealth": "Gesundheit", "cliproxyapiPort": "Port", "qdrantHost": "Host", - "qdrantCollection": "Sammlung" + "qdrantCollection": "Sammlung", + "presetAll": "All", + "presetAllDesc": "Show everything", + "presetEssentials": "Essentials", + "presetEssentialsDesc": "Beginner path - Advanced tools stay searchable", + "presetMinimal": "Minimal", + "presetMinimalDesc": "Core pages only", + "presetDeveloper": "Developer", + "presetDeveloperDesc": "Dev & proxy tools", + "presetAdmin": "Admin", + "presetAdminDesc": "Monitoring & audit", + "settingsSidebarTitle": "Sidebar Customization", + "settingsSidebarDesc": "Choose which sidebar items to show. Essentials keeps Advanced tools searchable." }, "contextRtk": { "title": "RTK Engine", @@ -12017,7 +12076,8 @@ "title": "ACP-Agenten", "phrase": "CLIs, die OmniRoute als Ausführungs-Backend startet (umgekehrter Fluss)", "flow": "Client → OmniRoute → CLI starten (stdio/ACP) → Antwort", - "seeOther": "Siehe →" + "seeOther": "Siehe →", + "warning": "Most users can ignore this — use only when an integration requires it." } }, "comparison": { @@ -13417,6 +13477,13 @@ "modelLockouts": "Modellsperren", "count": "Verbindungsanzahl" } + }, + "reassuranceTitle": "Your connections recover automatically", + "reassuranceDetail": "Usually no action is needed. OmniRoute temporarily rests a connection after failures, then safely tries it again.", + "plainStates": { + "healthy": "Requests can be sent", + "coolingDown": "Trying again soon", + "lockedOut": "Needs your attention" } }, "featureFlagCapabilityFilterEnabledDescription": "Lehnen Sie Anfragen ab, bevor sie versendet werden, wenn das Zielmodell über die erforderlichen Funktionen (Vision, Werkzeuge, strukturierte Ausgabe, Kontextfenster) nicht verfügt. Schützt direkte Einzelanbieteranfragen, die den Kombo-Schicht-Kompatibilitätsfilter umgehen.", @@ -13855,5 +13922,12 @@ "toolsMismatch": "Der Anbieter unterstützt keinen Toolaufruf", "structuredOutputMismatch": "Der Anbieter unterstützt keine strukturierten Ausgaben", "contextWindowMismatch": "Anfrage überschreitet das Kontextfenster des Anbieters" + }, + "cheaperInferenceSponsorBanner": { + "title": "Cheaper Inference is an OmniRoute Open Source Friend", + "description": "A cost-ranked gateway reselling dozens of frontier models behind one OpenAI-compatible endpoint — routing each request to the cheapest eligible provider, never above list price.", + "cta": "Get an API Key", + "partnerLinkNote": "Partner link", + "dismissAriaLabel": "Dismiss" } } diff --git a/src/i18n/messages/es.json b/src/i18n/messages/es.json index 7b6767fd1dd..a6dc2159cba 100644 --- a/src/i18n/messages/es.json +++ b/src/i18n/messages/es.json @@ -974,7 +974,14 @@ "batchFileUsedByCount": "Usado por {count, plural, one {# lote} other {# lotes}}", "batchFilePreview": "Vista Previa", "batchFilePreviewTruncated": "Mostrando las primeras {shown} líneas ({total} líneas en total)", - "batchFileDownloadFull": "Descargar Archivo Completo" + "batchFileDownloadFull": "Descargar Archivo Completo", + "batchHeaderSubtitle": "Run many requests as one job", + "batchStep1": "1 · Upload JSONL", + "batchStep1Desc": "Add requests", + "batchStep2": "2 · Create batch", + "batchStep2Desc": "Run job", + "batchStep3": "3 · Get results", + "batchStep3Desc": "Download output" }, "disabled": "Disabled", "featureFlagOmnirouteEmergencyFallbackDescription": "Route budget-exhausted requests to the emergency free fallback provider/model.", @@ -1293,7 +1300,8 @@ "open": "abrir", "close": "cerrar" }, - "noResults": "Sin resultados" + "noResults": "Sin resultados", + "trafficInspectorPurpose": "See exactly what your application sends to and receives from AI providers. Works with any OpenAI-compatible client." }, "webhooks": { "title": "Ganchos web", @@ -1856,7 +1864,21 @@ "directDownloadHint": "O descarga el formato de instalador respectivo directamente:", "releaseNotes": "Notas de la versión", "readMore": "Leer Más", - "noAuthLabel": "Sin Autenticación" + "noAuthLabel": "Sin Autenticación", + "recentRequests": "Recent Requests", + "recentRequestsEmpty": "No requests yet.", + "recentRequestsModel": "Model", + "recentRequestsTokens": "In / Out", + "recentRequestsWhen": "When", + "readinessEyebrow": "Get ready to route", + "readinessTitle": "Send your first request", + "readinessSubtitle": "Four small steps. OmniRoute checks readiness as you go.", + "readinessStep1": "Connect a provider", + "readinessStep2": "Configure endpoint authentication", + "readinessStep3": "Copy your endpoint", + "readinessStep4": "Send a test request", + "readinessContinue": "Continue setup", + "readinessDismiss": "Dismiss for now" }, "analytics": { "title": "Analítica", @@ -2901,7 +2923,8 @@ "omp": "Oh My Pi terminal coding agent", "letta": "Letta CLI agent with persistent memory and tool use", "warp": "Warp AI terminal with custom provider support", - "agent-deck": "Agent Deck multi-agent orchestrator" + "agent-deck": "Agent Deck multi-agent orchestrator", + "prime-agent": "Prime Agent — self-improving RLM coding harness with OpenAI-compatible provider support" }, "guides": { "cursor": { @@ -4133,7 +4156,10 @@ "notionIntegrationHelp": "Crear una Integración Interna en", "notionIntegrationToken": "Token de Integración Interna de Notion", "notionNotConnected": "No conectado", - "notionTokenConfigured": "Token configurado. Las herramientas de Notion están disponibles a través de MCP." + "notionTokenConfigured": "Token configurado. Las herramientas de Notion están disponibles a través de MCP.", + "subtitle": "Use the OpenAI-compatible endpoint with most SDKs and tools.", + "testEndpoint": "Test endpoint →", + "advancedProtocols": "Advanced protocols" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4716,7 +4742,14 @@ "issueCount": "{count} issues", "score": "Score", "lastRequest": "Last request", - "lastError": "Último error" + "lastError": "Último error", + "healthVerdictReady": "OmniRoute is ready", + "healthVerdictActionRequired": "Action required to restore full operation", + "healthVerdictCoolingDown": "Cooling down after recent changes", + "healthSubtitle": "System health check", + "advancedDiagnosticsTitle": "Advanced diagnostics", + "hide": "Hide", + "show": "Show" }, "telemetry": { "title": "Telemetría del sistema", @@ -6383,7 +6416,21 @@ "savedModelEndpointSettings": "Configuración del punto final del modelo guardado", "searchByModelAria": "Buscar por modelo", "selectSupportedEndpoint": "Seleccione al menos un endpoint compatible", - "antigravityClientProfileHarness": "Harness / CLI" + "antigravityClientProfileHarness": "Harness / CLI", + "harImportButtonLabel": "Import .har file", + "harImportButtonBusy": "Importing…", + "harImportButtonHint": "Export from DevTools Network tab after sending at least one chat message.", + "harImportStatusValid": "Imported — valid for ~{minutes}m.", + "harImportStatusExpiringSoon": "Imported — valid for only ~{minutes}m more.", + "harImportStatusExpired": "Imported, but this token already expired ({minutes}m ago) — export a fresh HAR.", + "harImportStatusUnknownExpiry": "Imported. Couldn't read its expiry.", + "harImportErrorNotJson": "That file isn't valid JSON — is it really a .har export?", + "harImportErrorNoEntries": "This HAR has no network entries recorded.", + "harImportErrorNoChathubUrl": "No Copilot chat connection found in this HAR. Send at least one chat message in m365.cloud.microsoft before exporting.", + "harImportErrorUnparsableUrl": "Found the chat connection, but couldn't read its URL.", + "harImportErrorMissingFields": "Found the chat connection, but the token was missing from it.", + "harImportErrorReadFailed": "Couldn't read that file.", + "harImportErrorUnknown": "Couldn't extract a credential from that HAR file." }, "settings": { "title": "Configuración", @@ -8230,7 +8277,19 @@ "cliproxyapiHealth": "Salud", "cliproxyapiPort": "Puerto", "qdrantHost": "Anfitrión", - "qdrantCollection": "Colección" + "qdrantCollection": "Colección", + "presetAll": "All", + "presetAllDesc": "Show everything", + "presetEssentials": "Essentials", + "presetEssentialsDesc": "Beginner path - Advanced tools stay searchable", + "presetMinimal": "Minimal", + "presetMinimalDesc": "Core pages only", + "presetDeveloper": "Developer", + "presetDeveloperDesc": "Dev & proxy tools", + "presetAdmin": "Admin", + "presetAdminDesc": "Monitoring & audit", + "settingsSidebarTitle": "Sidebar Customization", + "settingsSidebarDesc": "Choose which sidebar items to show. Essentials keeps Advanced tools searchable." }, "contextRtk": { "title": "RTK Engine", @@ -12017,7 +12076,8 @@ "title": "ACP Agents", "phrase": "CLIs that OmniRoute spawns as execution backend (reverse flow)", "flow": "Client → OmniRoute → spawn CLI (stdio/ACP) → response", - "seeOther": "See →" + "seeOther": "See →", + "warning": "Most users can ignore this — use only when an integration requires it." } }, "comparison": { @@ -12841,6 +12901,10 @@ }, "SKILLS_SANDBOX_NETWORK_ENABLED": { "description": "Enable network access in the skills sandbox." + }, + "DISABLE_CONTEXT_WINDOW_CHECKS": { + "label": "Disable Context Window Checks", + "description": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active." } } }, @@ -13413,6 +13477,13 @@ "modelLockouts": "Bloqueos de Modelo", "count": "Cantidad de Conexiones" } + }, + "reassuranceTitle": "Your connections recover automatically", + "reassuranceDetail": "Usually no action is needed. OmniRoute temporarily rests a connection after failures, then safely tries it again.", + "plainStates": { + "healthy": "Requests can be sent", + "coolingDown": "Trying again soon", + "lockedOut": "Needs your attention" } }, "featureFlagCapabilityFilterEnabledDescription": "Rechazar solicitudes antes del despacho cuando el modelo objetivo carece de capacidades requeridas (visión, herramientas, salida estructurada, ventana de contexto). Protege las solicitudes directas de un solo proveedor que eluden el filtro de compatibilidad de la capa combinada.", @@ -13850,5 +13921,13 @@ "toolsMismatch": "El proveedor no admite la llamada a la herramienta", "structuredOutputMismatch": "El proveedor no admite salida estructurada", "contextWindowMismatch": "La solicitud excede la ventana de contexto del proveedor" + }, + "featureFlagDisableContextWindowChecksDescription": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active.", + "cheaperInferenceSponsorBanner": { + "title": "Cheaper Inference is an OmniRoute Open Source Friend", + "description": "A cost-ranked gateway reselling dozens of frontier models behind one OpenAI-compatible endpoint — routing each request to the cheapest eligible provider, never above list price.", + "cta": "Get an API Key", + "partnerLinkNote": "Partner link", + "dismissAriaLabel": "Dismiss" } } diff --git a/src/i18n/messages/fa.json b/src/i18n/messages/fa.json index 0eac6a98dd7..a424ccf87c1 100644 --- a/src/i18n/messages/fa.json +++ b/src/i18n/messages/fa.json @@ -974,7 +974,14 @@ "batchFileUsedByCount": "استفاده شده توسط {count, plural, one {# دسته} other {# دسته‌ها}}", "batchFilePreview": "پیش‌نمایش", "batchFilePreviewTruncated": "نمایش {shown} خط اول ({total} خط کل)", - "batchFileDownloadFull": "دانلود فایل کامل" + "batchFileDownloadFull": "دانلود فایل کامل", + "batchHeaderSubtitle": "Run many requests as one job", + "batchStep1": "1 · Upload JSONL", + "batchStep1Desc": "Add requests", + "batchStep2": "2 · Create batch", + "batchStep2Desc": "Run job", + "batchStep3": "3 · Get results", + "batchStep3Desc": "Download output" }, "disabled": "Disabled", "featureFlagOmnirouteEmergencyFallbackDescription": "Route budget-exhausted requests to the emergency free fallback provider/model.", @@ -1293,7 +1300,8 @@ "open": "باز کردن", "close": "بستن" }, - "noResults": "هیچ نتیجه‌ای یافت نشد" + "noResults": "هیچ نتیجه‌ای یافت نشد", + "trafficInspectorPurpose": "See exactly what your application sends to and receives from AI providers. Works with any OpenAI-compatible client." }, "webhooks": { "title": "وب هوک ها", @@ -1856,7 +1864,21 @@ "directDownloadHint": "یا فرمت نصب‌کننده مربوطه را به‌طور مستقیم دانلود کنید:", "releaseNotes": "یادداشت‌های انتشار", "readMore": "بیشتر بخوانید", - "noAuthLabel": "بدون احراز هویت" + "noAuthLabel": "بدون احراز هویت", + "recentRequests": "Recent Requests", + "recentRequestsEmpty": "No requests yet.", + "recentRequestsModel": "Model", + "recentRequestsTokens": "In / Out", + "recentRequestsWhen": "When", + "readinessEyebrow": "Get ready to route", + "readinessTitle": "Send your first request", + "readinessSubtitle": "Four small steps. OmniRoute checks readiness as you go.", + "readinessStep1": "Connect a provider", + "readinessStep2": "Configure endpoint authentication", + "readinessStep3": "Copy your endpoint", + "readinessStep4": "Send a test request", + "readinessContinue": "Continue setup", + "readinessDismiss": "Dismiss for now" }, "analytics": { "title": "Analytics", @@ -2901,7 +2923,8 @@ "omp": "عامل کدنویسی ترمینال Oh My Pi", "letta": "عامل Letta CLI با حافظه پایدار و استفاده از ابزار", "warp": "ترمینال هوش مصنوعی Warp با پشتیبانی از ارائه‌دهنده سفارشی", - "agent-deck": "ارکستراتور چندعاملی Agent Deck" + "agent-deck": "ارکستراتور چندعاملی Agent Deck", + "prime-agent": "Prime Agent — self-improving RLM coding harness with OpenAI-compatible provider support" }, "guides": { "cursor": { @@ -4133,7 +4156,10 @@ "notionIntegrationHelp": "یک ادغام داخلی در", "notionIntegrationToken": "توکن ادغام داخلی نوتیون", "notionNotConnected": "متصل نیستید", - "notionTokenConfigured": "توکن پیکربندی شده است. ابزارهای Notion از طریق MCP در دسترس هستند." + "notionTokenConfigured": "توکن پیکربندی شده است. ابزارهای Notion از طریق MCP در دسترس هستند.", + "subtitle": "Use the OpenAI-compatible endpoint with most SDKs and tools.", + "testEndpoint": "Test endpoint →", + "advancedProtocols": "Advanced protocols" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4716,7 +4742,14 @@ "issueCount": "{count} مشکل", "score": "امتیاز", "lastRequest": "آخرین درخواست", - "lastError": "آخرین خطا" + "lastError": "آخرین خطا", + "healthVerdictReady": "OmniRoute is ready", + "healthVerdictActionRequired": "Action required to restore full operation", + "healthVerdictCoolingDown": "Cooling down after recent changes", + "healthSubtitle": "System health check", + "advancedDiagnosticsTitle": "Advanced diagnostics", + "hide": "Hide", + "show": "Show" }, "telemetry": { "title": "سیستم تله متری", @@ -6383,7 +6416,21 @@ "savedModelEndpointSettings": "تنظیمات نقطه پایانی مدل ذخیره شده", "searchByModelAria": "جستجو بر اساس مدل", "selectSupportedEndpoint": "حداقل یک نقطه پایانی پشتیبانی شده را انتخاب کنید", - "antigravityClientProfileHarness": "Harness / CLI" + "antigravityClientProfileHarness": "Harness / CLI", + "harImportButtonLabel": "Import .har file", + "harImportButtonBusy": "Importing…", + "harImportButtonHint": "Export from DevTools Network tab after sending at least one chat message.", + "harImportStatusValid": "Imported — valid for ~{minutes}m.", + "harImportStatusExpiringSoon": "Imported — valid for only ~{minutes}m more.", + "harImportStatusExpired": "Imported, but this token already expired ({minutes}m ago) — export a fresh HAR.", + "harImportStatusUnknownExpiry": "Imported. Couldn't read its expiry.", + "harImportErrorNotJson": "That file isn't valid JSON — is it really a .har export?", + "harImportErrorNoEntries": "This HAR has no network entries recorded.", + "harImportErrorNoChathubUrl": "No Copilot chat connection found in this HAR. Send at least one chat message in m365.cloud.microsoft before exporting.", + "harImportErrorUnparsableUrl": "Found the chat connection, but couldn't read its URL.", + "harImportErrorMissingFields": "Found the chat connection, but the token was missing from it.", + "harImportErrorReadFailed": "Couldn't read that file.", + "harImportErrorUnknown": "Couldn't extract a credential from that HAR file." }, "settings": { "title": "Settings", @@ -8230,7 +8277,19 @@ "cliproxyapiHealth": "سلامت", "cliproxyapiPort": "پورت", "qdrantHost": "میزبان", - "qdrantCollection": "مجموعه" + "qdrantCollection": "مجموعه", + "presetAll": "All", + "presetAllDesc": "Show everything", + "presetEssentials": "Essentials", + "presetEssentialsDesc": "Beginner path - Advanced tools stay searchable", + "presetMinimal": "Minimal", + "presetMinimalDesc": "Core pages only", + "presetDeveloper": "Developer", + "presetDeveloperDesc": "Dev & proxy tools", + "presetAdmin": "Admin", + "presetAdminDesc": "Monitoring & audit", + "settingsSidebarTitle": "Sidebar Customization", + "settingsSidebarDesc": "Choose which sidebar items to show. Essentials keeps Advanced tools searchable." }, "contextRtk": { "title": "RTK Engine", @@ -12017,7 +12076,8 @@ "title": "عامل‌های ACP", "phrase": "CLIهایی که OmniRoute به عنوان بک‌اند اجرا ایجاد می‌کند (جریان معکوس)", "flow": "کلاینت → OmniRoute → ایجاد CLI (stdio/ACP) → پاسخ", - "seeOther": "مشاهده →" + "seeOther": "مشاهده →", + "warning": "Most users can ignore this — use only when an integration requires it." } }, "comparison": { @@ -12841,6 +12901,10 @@ }, "SKILLS_SANDBOX_NETWORK_ENABLED": { "description": "فعال‌سازی دسترسی به شبکه در محیط ایزوله مهارت‌ها." + }, + "DISABLE_CONTEXT_WINDOW_CHECKS": { + "label": "Disable Context Window Checks", + "description": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active." } } }, @@ -13413,6 +13477,13 @@ "modelLockouts": "قفل‌های مدل", "count": "تعداد اتصالات" } + }, + "reassuranceTitle": "Your connections recover automatically", + "reassuranceDetail": "Usually no action is needed. OmniRoute temporarily rests a connection after failures, then safely tries it again.", + "plainStates": { + "healthy": "Requests can be sent", + "coolingDown": "Trying again soon", + "lockedOut": "Needs your attention" } }, "featureFlagCapabilityFilterEnabledDescription": "درخواست‌ها را قبل از ارسال رد کنید زمانی که مدل هدف قابلیت‌های مورد نیاز (بینایی، ابزارها، خروجی ساختاریافته، پنجره زمینه) را ندارد. از درخواست‌های مستقیم تک‌تأمین‌کننده که فیلتر سازگاری لایه ترکیبی را دور می‌زنند، محافظت می‌کند.", @@ -13850,5 +13921,13 @@ "toolsMismatch": "ارائه‌دهنده از فراخوانی ابزار پشتیبانی نمی‌کند", "structuredOutputMismatch": "ارائه‌دهنده خروجی ساختاریافته را پشتیبانی نمی‌کند", "contextWindowMismatch": "درخواست از حد مجاز پنجره زمینه ارائه‌دهنده فراتر می‌رود" + }, + "featureFlagDisableContextWindowChecksDescription": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active.", + "cheaperInferenceSponsorBanner": { + "title": "Cheaper Inference is an OmniRoute Open Source Friend", + "description": "A cost-ranked gateway reselling dozens of frontier models behind one OpenAI-compatible endpoint — routing each request to the cheapest eligible provider, never above list price.", + "cta": "Get an API Key", + "partnerLinkNote": "Partner link", + "dismissAriaLabel": "Dismiss" } } diff --git a/src/i18n/messages/fi.json b/src/i18n/messages/fi.json index 9d61297ecbc..4398af5815a 100644 --- a/src/i18n/messages/fi.json +++ b/src/i18n/messages/fi.json @@ -974,7 +974,14 @@ "batchFileUsedByCount": "Käytetään {count, plural, one {# erä} other {# erää}}", "batchFilePreview": "Esikatselu", "batchFilePreviewTruncated": "Näytetään ensimmäiset {shown} riviä ({total} yhteensä riviä)", - "batchFileDownloadFull": "Lataa Koko Tiedosto" + "batchFileDownloadFull": "Lataa Koko Tiedosto", + "batchHeaderSubtitle": "Run many requests as one job", + "batchStep1": "1 · Upload JSONL", + "batchStep1Desc": "Add requests", + "batchStep2": "2 · Create batch", + "batchStep2Desc": "Run job", + "batchStep3": "3 · Get results", + "batchStep3Desc": "Download output" }, "disabled": "Poistettu käytöstä", "featureFlagOmnirouteEmergencyFallbackDescription": "Reititä budjettinsa ylittäneet pyynnöt varalla olevalle ilmaiselle varatarjoajalle/-mallille.", @@ -1293,7 +1300,8 @@ "open": "avaa", "close": "sulje" }, - "noResults": "Ei tuloksia" + "noResults": "Ei tuloksia", + "trafficInspectorPurpose": "See exactly what your application sends to and receives from AI providers. Works with any OpenAI-compatible client." }, "webhooks": { "title": "Webhooks", @@ -1856,7 +1864,21 @@ "directDownloadHint": "Tai lataa vastaava asennustiedosto suoraan:", "releaseNotes": "Julkaisutiedot", "readMore": "Lue lisää", - "noAuthLabel": "Ei todennusta" + "noAuthLabel": "Ei todennusta", + "recentRequests": "Recent Requests", + "recentRequestsEmpty": "No requests yet.", + "recentRequestsModel": "Model", + "recentRequestsTokens": "In / Out", + "recentRequestsWhen": "When", + "readinessEyebrow": "Get ready to route", + "readinessTitle": "Send your first request", + "readinessSubtitle": "Four small steps. OmniRoute checks readiness as you go.", + "readinessStep1": "Connect a provider", + "readinessStep2": "Configure endpoint authentication", + "readinessStep3": "Copy your endpoint", + "readinessStep4": "Send a test request", + "readinessContinue": "Continue setup", + "readinessDismiss": "Dismiss for now" }, "analytics": { "title": "Analytics", @@ -2901,7 +2923,8 @@ "omp": "Oh My Pi -terminaalikoodausagentti", "letta": "Letta CLI -agentti pysyvällä muistilla ja työkalujen käytöllä", "warp": "Warp AI -terminaali mukautetun palveluntarjoajan tuella", - "agent-deck": "Agent Deck -moniagenttiorkestraattori" + "agent-deck": "Agent Deck -moniagenttiorkestraattori", + "prime-agent": "Prime Agent — self-improving RLM coding harness with OpenAI-compatible provider support" }, "guides": { "cursor": { @@ -4133,7 +4156,10 @@ "notionIntegrationHelp": "Luo sisäinen integraatio kohdassa", "notionIntegrationToken": "Notionin sisäinen integraatiotunnus", "notionNotConnected": "Ei yhdistetty", - "notionTokenConfigured": "Token on määritetty. Notion-työkalut ovat saatavilla MCP:n kautta." + "notionTokenConfigured": "Token on määritetty. Notion-työkalut ovat saatavilla MCP:n kautta.", + "subtitle": "Use the OpenAI-compatible endpoint with most SDKs and tools.", + "testEndpoint": "Test endpoint →", + "advancedProtocols": "Advanced protocols" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4716,7 +4742,14 @@ "issueCount": "{count} ongelmaa", "score": "Pisteet", "lastRequest": "Viimeisin pyyntö", - "lastError": "Viimeisin virhe" + "lastError": "Viimeisin virhe", + "healthVerdictReady": "OmniRoute is ready", + "healthVerdictActionRequired": "Action required to restore full operation", + "healthVerdictCoolingDown": "Cooling down after recent changes", + "healthSubtitle": "System health check", + "advancedDiagnosticsTitle": "Advanced diagnostics", + "hide": "Hide", + "show": "Show" }, "telemetry": { "title": "Järjestelmän telemetria", @@ -6383,7 +6416,21 @@ "savedModelEndpointSettings": "Tallennetun mallin päätepisteen asetukset", "searchByModelAria": "Hae mallin mukaan", "selectSupportedEndpoint": "Valitse vähintään yksi tuettu päätepiste", - "antigravityClientProfileHarness": "Harness / CLI" + "antigravityClientProfileHarness": "Harness / CLI", + "harImportButtonLabel": "Import .har file", + "harImportButtonBusy": "Importing…", + "harImportButtonHint": "Export from DevTools Network tab after sending at least one chat message.", + "harImportStatusValid": "Imported — valid for ~{minutes}m.", + "harImportStatusExpiringSoon": "Imported — valid for only ~{minutes}m more.", + "harImportStatusExpired": "Imported, but this token already expired ({minutes}m ago) — export a fresh HAR.", + "harImportStatusUnknownExpiry": "Imported. Couldn't read its expiry.", + "harImportErrorNotJson": "That file isn't valid JSON — is it really a .har export?", + "harImportErrorNoEntries": "This HAR has no network entries recorded.", + "harImportErrorNoChathubUrl": "No Copilot chat connection found in this HAR. Send at least one chat message in m365.cloud.microsoft before exporting.", + "harImportErrorUnparsableUrl": "Found the chat connection, but couldn't read its URL.", + "harImportErrorMissingFields": "Found the chat connection, but the token was missing from it.", + "harImportErrorReadFailed": "Couldn't read that file.", + "harImportErrorUnknown": "Couldn't extract a credential from that HAR file." }, "settings": { "title": "Asetukset", @@ -8230,7 +8277,19 @@ "cliproxyapiHealth": "Terveys", "cliproxyapiPort": "Portti", "qdrantHost": "Isäntä", - "qdrantCollection": "Kokoelma" + "qdrantCollection": "Kokoelma", + "presetAll": "All", + "presetAllDesc": "Show everything", + "presetEssentials": "Essentials", + "presetEssentialsDesc": "Beginner path - Advanced tools stay searchable", + "presetMinimal": "Minimal", + "presetMinimalDesc": "Core pages only", + "presetDeveloper": "Developer", + "presetDeveloperDesc": "Dev & proxy tools", + "presetAdmin": "Admin", + "presetAdminDesc": "Monitoring & audit", + "settingsSidebarTitle": "Sidebar Customization", + "settingsSidebarDesc": "Choose which sidebar items to show. Essentials keeps Advanced tools searchable." }, "contextRtk": { "title": "RTK Engine", @@ -12017,7 +12076,8 @@ "title": "ACP-agentit", "phrase": "CLI:t, jotka OmniRoute käynnistää suoritustaustana (käänteinen virtaus)", "flow": "Asiakas → OmniRoute → käynnistä CLI (stdio/ACP) → vastaus", - "seeOther": "Katso →" + "seeOther": "Katso →", + "warning": "Most users can ignore this — use only when an integration requires it." } }, "comparison": { @@ -12841,6 +12901,10 @@ }, "SKILLS_SANDBOX_NETWORK_ENABLED": { "description": "Ota käyttöön verkkoyhteys taitojen hiekkalaatikossa." + }, + "DISABLE_CONTEXT_WINDOW_CHECKS": { + "label": "Disable Context Window Checks", + "description": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active." } } }, @@ -13413,6 +13477,13 @@ "modelLockouts": "Mallilukitukset", "count": "Yhteyksien Määrä" } + }, + "reassuranceTitle": "Your connections recover automatically", + "reassuranceDetail": "Usually no action is needed. OmniRoute temporarily rests a connection after failures, then safely tries it again.", + "plainStates": { + "healthy": "Requests can be sent", + "coolingDown": "Trying again soon", + "lockedOut": "Needs your attention" } }, "featureFlagCapabilityFilterEnabledDescription": "Hylkää pyynnöt ennen lähettämistä, kun kohdemallilta puuttuu vaadittuja ominaisuuksia (näkö, työkalut, jäsennelty ulostulo, kontekstikkelu). Suojaa suorat yhden tarjoajan pyynnöt, jotka ohittavat yhdistelmäkerroksen yhteensopivuussuodattimen.", @@ -13850,5 +13921,13 @@ "toolsMismatch": "Toimittaja ei tue työkalun kutsumista", "structuredOutputMismatch": "Palveluntarjoaja ei tue jäsenneltyä tulostusta", "contextWindowMismatch": "Pyyntö ylittää tarjoajan kontekstin ikkunan" + }, + "featureFlagDisableContextWindowChecksDescription": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active.", + "cheaperInferenceSponsorBanner": { + "title": "Cheaper Inference is an OmniRoute Open Source Friend", + "description": "A cost-ranked gateway reselling dozens of frontier models behind one OpenAI-compatible endpoint — routing each request to the cheapest eligible provider, never above list price.", + "cta": "Get an API Key", + "partnerLinkNote": "Partner link", + "dismissAriaLabel": "Dismiss" } } diff --git a/src/i18n/messages/fr.json b/src/i18n/messages/fr.json index 522a0a4ebff..b1475aef29b 100644 --- a/src/i18n/messages/fr.json +++ b/src/i18n/messages/fr.json @@ -974,7 +974,14 @@ "batchFileUsedByCount": "Utilisé par {count, plural, one {# lot} other {# lots}}", "batchFilePreview": "Aperçu", "batchFilePreviewTruncated": "Affichage des {shown} premières lignes ({total} lignes au total)", - "batchFileDownloadFull": "Télécharger le fichier complet" + "batchFileDownloadFull": "Télécharger le fichier complet", + "batchHeaderSubtitle": "Run many requests as one job", + "batchStep1": "1 · Upload JSONL", + "batchStep1Desc": "Add requests", + "batchStep2": "2 · Create batch", + "batchStep2Desc": "Run job", + "batchStep3": "3 · Get results", + "batchStep3Desc": "Download output" }, "disabled": "Désactivé", "featureFlagOmnirouteEmergencyFallbackDescription": "Router les requêtes ayant épuisé leur budget vers le fournisseur/modèle de secours gratuit d'urgence.", @@ -1293,7 +1300,8 @@ "open": "ouvrir", "close": "fermer" }, - "noResults": "Aucun résultat" + "noResults": "Aucun résultat", + "trafficInspectorPurpose": "See exactly what your application sends to and receives from AI providers. Works with any OpenAI-compatible client." }, "webhooks": { "title": "Webhooks", @@ -1856,7 +1864,21 @@ "directDownloadHint": "Vous pouvez aussi télécharger directement le format d'installation adapté :", "releaseNotes": "Notes de version", "readMore": "Lire la suite", - "noAuthLabel": "Sans authentification" + "noAuthLabel": "Sans authentification", + "recentRequests": "Recent Requests", + "recentRequestsEmpty": "No requests yet.", + "recentRequestsModel": "Model", + "recentRequestsTokens": "In / Out", + "recentRequestsWhen": "When", + "readinessEyebrow": "Get ready to route", + "readinessTitle": "Send your first request", + "readinessSubtitle": "Four small steps. OmniRoute checks readiness as you go.", + "readinessStep1": "Connect a provider", + "readinessStep2": "Configure endpoint authentication", + "readinessStep3": "Copy your endpoint", + "readinessStep4": "Send a test request", + "readinessContinue": "Continue setup", + "readinessDismiss": "Dismiss for now" }, "analytics": { "title": "Analyse", @@ -2901,7 +2923,8 @@ "omp": "Agent de codage de terminal Oh My Pi", "letta": "Agent CLI Letta avec mémoire persistante et utilisation d'outils", "warp": "Terminal Warp AI avec prise en charge de fournisseur personnalisé", - "agent-deck": "Orchestrateur multi-agent Agent Deck" + "agent-deck": "Orchestrateur multi-agent Agent Deck", + "prime-agent": "Prime Agent — self-improving RLM coding harness with OpenAI-compatible provider support" }, "guides": { "cursor": { @@ -4133,7 +4156,10 @@ "notionIntegrationHelp": "Créer an Internal Integration at", "notionIntegrationToken": "Jeton d’intégration interne Notion", "notionNotConnected": "Non connecté", - "notionTokenConfigured": "Jeton configuré. Les outils Notion sont disponibles via MCP." + "notionTokenConfigured": "Jeton configuré. Les outils Notion sont disponibles via MCP.", + "subtitle": "Use the OpenAI-compatible endpoint with most SDKs and tools.", + "testEndpoint": "Test endpoint →", + "advancedProtocols": "Advanced protocols" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4716,7 +4742,14 @@ "issueCount": "{count} problèmes", "score": "Score", "lastRequest": "Dernière requête", - "lastError": "Dernière erreur" + "lastError": "Dernière erreur", + "healthVerdictReady": "OmniRoute is ready", + "healthVerdictActionRequired": "Action required to restore full operation", + "healthVerdictCoolingDown": "Cooling down after recent changes", + "healthSubtitle": "System health check", + "advancedDiagnosticsTitle": "Advanced diagnostics", + "hide": "Hide", + "show": "Show" }, "telemetry": { "title": "Télémétrie du système", @@ -6383,7 +6416,21 @@ "savedModelEndpointSettings": "Saved modèles endpoint paramètres", "searchByModelAria": "Rechercher un modèle", "selectSupportedEndpoint": "Sélectionnez au moins un endpoint pris en charge", - "antigravityClientProfileHarness": "Harness / CLI" + "antigravityClientProfileHarness": "Harness / CLI", + "harImportButtonLabel": "Import .har file", + "harImportButtonBusy": "Importing…", + "harImportButtonHint": "Export from DevTools Network tab after sending at least one chat message.", + "harImportStatusValid": "Imported — valid for ~{minutes}m.", + "harImportStatusExpiringSoon": "Imported — valid for only ~{minutes}m more.", + "harImportStatusExpired": "Imported, but this token already expired ({minutes}m ago) — export a fresh HAR.", + "harImportStatusUnknownExpiry": "Imported. Couldn't read its expiry.", + "harImportErrorNotJson": "That file isn't valid JSON — is it really a .har export?", + "harImportErrorNoEntries": "This HAR has no network entries recorded.", + "harImportErrorNoChathubUrl": "No Copilot chat connection found in this HAR. Send at least one chat message in m365.cloud.microsoft before exporting.", + "harImportErrorUnparsableUrl": "Found the chat connection, but couldn't read its URL.", + "harImportErrorMissingFields": "Found the chat connection, but the token was missing from it.", + "harImportErrorReadFailed": "Couldn't read that file.", + "harImportErrorUnknown": "Couldn't extract a credential from that HAR file." }, "settings": { "title": "Paramètres", @@ -8230,7 +8277,19 @@ "cliproxyapiHealth": "Santé", "cliproxyapiPort": "Port", "qdrantHost": "Hôte", - "qdrantCollection": "Collection" + "qdrantCollection": "Collection", + "presetAll": "All", + "presetAllDesc": "Show everything", + "presetEssentials": "Essentials", + "presetEssentialsDesc": "Beginner path - Advanced tools stay searchable", + "presetMinimal": "Minimal", + "presetMinimalDesc": "Core pages only", + "presetDeveloper": "Developer", + "presetDeveloperDesc": "Dev & proxy tools", + "presetAdmin": "Admin", + "presetAdminDesc": "Monitoring & audit", + "settingsSidebarTitle": "Sidebar Customization", + "settingsSidebarDesc": "Choose which sidebar items to show. Essentials keeps Advanced tools searchable." }, "contextRtk": { "title": "RTK Engine", @@ -12017,7 +12076,8 @@ "title": "Agents ACP", "phrase": "CLI qu'OmniRoute lance en tant que backend d'exécution (flux inverse)", "flow": "Client → OmniRoute → spawn CLI (stdio/ACP) → réponse", - "seeOther": "Voir →" + "seeOther": "Voir →", + "warning": "Most users can ignore this — use only when an integration requires it." } }, "comparison": { @@ -12841,6 +12901,10 @@ }, "SKILLS_SANDBOX_NETWORK_ENABLED": { "description": "Activer l'accès réseau dans le bac à sable des compétences." + }, + "DISABLE_CONTEXT_WINDOW_CHECKS": { + "label": "Disable Context Window Checks", + "description": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active." } } }, @@ -13413,6 +13477,13 @@ "modelLockouts": "Blocages de Modèle", "count": "Nombre de Connexions" } + }, + "reassuranceTitle": "Your connections recover automatically", + "reassuranceDetail": "Usually no action is needed. OmniRoute temporarily rests a connection after failures, then safely tries it again.", + "plainStates": { + "healthy": "Requests can be sent", + "coolingDown": "Trying again soon", + "lockedOut": "Needs your attention" } }, "featureFlagCapabilityFilterEnabledDescription": "Rejeter les demandes avant l'expédition lorsque le modèle cible manque des capacités requises (vision, outils, sortie structurée, fenêtre de contexte). Protège les demandes directes à un seul fournisseur qui contournent le filtre de compatibilité de la couche combo.", @@ -13850,5 +13921,13 @@ "toolsMismatch": "Le fournisseur ne prend pas en charge l'appel d'outils", "structuredOutputMismatch": "Le fournisseur ne prend pas en charge la sortie structurée", "contextWindowMismatch": "La demande dépasse la fenêtre de contexte du fournisseur" + }, + "featureFlagDisableContextWindowChecksDescription": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active.", + "cheaperInferenceSponsorBanner": { + "title": "Cheaper Inference is an OmniRoute Open Source Friend", + "description": "A cost-ranked gateway reselling dozens of frontier models behind one OpenAI-compatible endpoint — routing each request to the cheapest eligible provider, never above list price.", + "cta": "Get an API Key", + "partnerLinkNote": "Partner link", + "dismissAriaLabel": "Dismiss" } } diff --git a/src/i18n/messages/gu.json b/src/i18n/messages/gu.json index 566db670be4..6aa2e0490b2 100644 --- a/src/i18n/messages/gu.json +++ b/src/i18n/messages/gu.json @@ -974,7 +974,14 @@ "batchFileUsedByCount": "{count, plural, one {# બેચ} other {# બેચો}}", "batchFilePreview": "પૂર્વદર્શન", "batchFilePreviewTruncated": "પ્રથમ {shown} લાઈનો દર્શાવી રહ્યા છીએ ({total} કુલ લાઈનો)", - "batchFileDownloadFull": "પૂર્ણ ફાઇલ ડાઉનલોડ કરો" + "batchFileDownloadFull": "પૂર્ણ ફાઇલ ડાઉનલોડ કરો", + "batchHeaderSubtitle": "Run many requests as one job", + "batchStep1": "1 · Upload JSONL", + "batchStep1Desc": "Add requests", + "batchStep2": "2 · Create batch", + "batchStep2Desc": "Run job", + "batchStep3": "3 · Get results", + "batchStep3Desc": "Download output" }, "disabled": "નિષ્ક્રિય કરેલ", "featureFlagOmnirouteEmergencyFallbackDescription": "બજેટ-સમાપ્ત વિનંતીઓને કટોકટીના મફત ફોલબેક પ્રદાતા/મોડેલ પર રૂટ કરો.", @@ -1293,7 +1300,8 @@ "open": "ખોલો", "close": "બંધ કરો" }, - "noResults": "કોઈ પરિણામો નથી" + "noResults": "કોઈ પરિણામો નથી", + "trafficInspectorPurpose": "See exactly what your application sends to and receives from AI providers. Works with any OpenAI-compatible client." }, "webhooks": { "title": "વેબહુક્સ", @@ -1856,7 +1864,21 @@ "directDownloadHint": "અથવા સંબંધિત ઇન્સ્ટોલર ફોર્મેટ સીધા ડાઉનલોડ કરો:", "releaseNotes": "રિલીઝ નોંધો", "readMore": "વધુ વાંચો", - "noAuthLabel": "કોઈ ઓથેન્ટિકેશન નથી" + "noAuthLabel": "કોઈ ઓથેન્ટિકેશન નથી", + "recentRequests": "Recent Requests", + "recentRequestsEmpty": "No requests yet.", + "recentRequestsModel": "Model", + "recentRequestsTokens": "In / Out", + "recentRequestsWhen": "When", + "readinessEyebrow": "Get ready to route", + "readinessTitle": "Send your first request", + "readinessSubtitle": "Four small steps. OmniRoute checks readiness as you go.", + "readinessStep1": "Connect a provider", + "readinessStep2": "Configure endpoint authentication", + "readinessStep3": "Copy your endpoint", + "readinessStep4": "Send a test request", + "readinessContinue": "Continue setup", + "readinessDismiss": "Dismiss for now" }, "analytics": { "title": "Analytics", @@ -2901,7 +2923,8 @@ "omp": "Oh My Pi ટર્મિનલ કોડિંગ એજન્ટ", "letta": "પર્સિસ્ટન્ટ મેમરી અને ટૂલ વપરાશ સાથે Letta CLI એજન્ટ", "warp": "કસ્ટમ પ્રોવાઇડર સપોર્ટ સાથે Warp AI ટર્મિનલ", - "agent-deck": "Agent Deck મલ્ટિ-એજન્ટ ઓર્કેસ્ટ્રેટર" + "agent-deck": "Agent Deck મલ્ટિ-એજન્ટ ઓર્કેસ્ટ્રેટર", + "prime-agent": "Prime Agent — self-improving RLM coding harness with OpenAI-compatible provider support" }, "guides": { "cursor": { @@ -4133,7 +4156,10 @@ "notionIntegrationHelp": "આંતરિક એકીકરણ બનાવો પર", "notionIntegrationToken": "Notion આંતરિક ઇન્ટિગ્રેશન ટોકન", "notionNotConnected": "જોડાયેલ નથી", - "notionTokenConfigured": "ટોકન કન્ફિગર કરાયું છે. Notion ટૂલ્સ MCP દ્વારા ઉપલબ્ધ છે." + "notionTokenConfigured": "ટોકન કન્ફિગર કરાયું છે. Notion ટૂલ્સ MCP દ્વારા ઉપલબ્ધ છે.", + "subtitle": "Use the OpenAI-compatible endpoint with most SDKs and tools.", + "testEndpoint": "Test endpoint →", + "advancedProtocols": "Advanced protocols" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4716,7 +4742,14 @@ "issueCount": "{count} સમસ્યાઓ", "score": "સ્કોર", "lastRequest": "છેલ્લી વિનંતી", - "lastError": "છેલ્લી ભૂલ" + "lastError": "છેલ્લી ભૂલ", + "healthVerdictReady": "OmniRoute is ready", + "healthVerdictActionRequired": "Action required to restore full operation", + "healthVerdictCoolingDown": "Cooling down after recent changes", + "healthSubtitle": "System health check", + "advancedDiagnosticsTitle": "Advanced diagnostics", + "hide": "Hide", + "show": "Show" }, "telemetry": { "title": "સિસ્ટમ ટેલિમેટ્રી", @@ -6383,7 +6416,21 @@ "savedModelEndpointSettings": "સાચવેલ મોડેલ અંતિમ બિંદુની સેટિંગ્સ", "searchByModelAria": "મોડલ દ્વારા શોધો", "selectSupportedEndpoint": "કમથી કમ એક સમર્થિત અંતિમ બિંદુ પસંદ કરો", - "antigravityClientProfileHarness": "Harness / CLI" + "antigravityClientProfileHarness": "Harness / CLI", + "harImportButtonLabel": "Import .har file", + "harImportButtonBusy": "Importing…", + "harImportButtonHint": "Export from DevTools Network tab after sending at least one chat message.", + "harImportStatusValid": "Imported — valid for ~{minutes}m.", + "harImportStatusExpiringSoon": "Imported — valid for only ~{minutes}m more.", + "harImportStatusExpired": "Imported, but this token already expired ({minutes}m ago) — export a fresh HAR.", + "harImportStatusUnknownExpiry": "Imported. Couldn't read its expiry.", + "harImportErrorNotJson": "That file isn't valid JSON — is it really a .har export?", + "harImportErrorNoEntries": "This HAR has no network entries recorded.", + "harImportErrorNoChathubUrl": "No Copilot chat connection found in this HAR. Send at least one chat message in m365.cloud.microsoft before exporting.", + "harImportErrorUnparsableUrl": "Found the chat connection, but couldn't read its URL.", + "harImportErrorMissingFields": "Found the chat connection, but the token was missing from it.", + "harImportErrorReadFailed": "Couldn't read that file.", + "harImportErrorUnknown": "Couldn't extract a credential from that HAR file." }, "settings": { "title": "Settings", @@ -8230,7 +8277,19 @@ "cliproxyapiHealth": "આરોગ્ય", "cliproxyapiPort": "પોર્ટ", "qdrantHost": "હોસ્ટ", - "qdrantCollection": "સંગ્રહ" + "qdrantCollection": "સંગ્રહ", + "presetAll": "All", + "presetAllDesc": "Show everything", + "presetEssentials": "Essentials", + "presetEssentialsDesc": "Beginner path - Advanced tools stay searchable", + "presetMinimal": "Minimal", + "presetMinimalDesc": "Core pages only", + "presetDeveloper": "Developer", + "presetDeveloperDesc": "Dev & proxy tools", + "presetAdmin": "Admin", + "presetAdminDesc": "Monitoring & audit", + "settingsSidebarTitle": "Sidebar Customization", + "settingsSidebarDesc": "Choose which sidebar items to show. Essentials keeps Advanced tools searchable." }, "contextRtk": { "title": "RTK Engine", @@ -12017,7 +12076,8 @@ "title": "ACP એજન્ટ્સ", "phrase": "CLIs જે OmniRoute એક્ઝિક્યુશન બેકએન્ડ તરીકે શરૂ કરે છે (રિવર્સ ફ્લો)", "flow": "ક્લાયન્ટ → OmniRoute → spawn CLI (stdio/ACP) → પ્રતિસાદ", - "seeOther": "જુઓ →" + "seeOther": "જુઓ →", + "warning": "Most users can ignore this — use only when an integration requires it." } }, "comparison": { @@ -12841,6 +12901,10 @@ }, "SKILLS_SANDBOX_NETWORK_ENABLED": { "description": "સ્કિલ્સ સેન્ડબોક્સમાં નેટવર્ક એક્સેસ સક્ષમ કરો." + }, + "DISABLE_CONTEXT_WINDOW_CHECKS": { + "label": "Disable Context Window Checks", + "description": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active." } } }, @@ -13413,6 +13477,13 @@ "modelLockouts": "મોડેલ લોકઆઉટ", "count": "કનેક્શન ગણતરી" } + }, + "reassuranceTitle": "Your connections recover automatically", + "reassuranceDetail": "Usually no action is needed. OmniRoute temporarily rests a connection after failures, then safely tries it again.", + "plainStates": { + "healthy": "Requests can be sent", + "coolingDown": "Trying again soon", + "lockedOut": "Needs your attention" } }, "featureFlagCapabilityFilterEnabledDescription": "જ્યારે લક્ષ્ય મોડેલમાં જરૂરી ક્ષમતાઓ (દૃષ્ટિ, સાધનો, રચિત આઉટપુટ, સંદર્ભ વિન્ડો) નથી ત્યારે વિતરણ પહેલાં વિનંતીઓને નકારી નાખો. કોમ્બો-લેયર સુસંગતતા ફિલ્ટરને બાયપાસ કરતી સીધી એકલ-પ્રદાતા વિનંતિઓને સુરક્ષિત કરે છે.", @@ -13850,5 +13921,13 @@ "toolsMismatch": "પ્રદાતા ટૂલ કોલિંગને સપોર્ટ કરતો નથી", "structuredOutputMismatch": "પ્રદાતા સંરચિત આઉટપુટને સમર્થન આપતો નથી", "contextWindowMismatch": "વિનંતી પ્રદાતા સંદર્ભ વિન્ડોને પાર કરે છે" + }, + "featureFlagDisableContextWindowChecksDescription": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active.", + "cheaperInferenceSponsorBanner": { + "title": "Cheaper Inference is an OmniRoute Open Source Friend", + "description": "A cost-ranked gateway reselling dozens of frontier models behind one OpenAI-compatible endpoint — routing each request to the cheapest eligible provider, never above list price.", + "cta": "Get an API Key", + "partnerLinkNote": "Partner link", + "dismissAriaLabel": "Dismiss" } } diff --git a/src/i18n/messages/he.json b/src/i18n/messages/he.json index d377d852832..22b76e7a63f 100644 --- a/src/i18n/messages/he.json +++ b/src/i18n/messages/he.json @@ -974,7 +974,14 @@ "batchFileUsedByCount": "שימוש ב{count, plural, one {# קבוצת} other {# קבוצות}}", "batchFilePreview": "תצוגה מקדימה", "batchFilePreviewTruncated": "מציג {shown} שורות ראשונות ({total} שורות סך הכל)", - "batchFileDownloadFull": "הורד קובץ מלא" + "batchFileDownloadFull": "הורד קובץ מלא", + "batchHeaderSubtitle": "Run many requests as one job", + "batchStep1": "1 · Upload JSONL", + "batchStep1Desc": "Add requests", + "batchStep2": "2 · Create batch", + "batchStep2Desc": "Run job", + "batchStep3": "3 · Get results", + "batchStep3Desc": "Download output" }, "disabled": "מושבת", "featureFlagOmnirouteEmergencyFallbackDescription": "ניתוב בקשות שחרגו מהתקציב לספק/מודל גיבוי חינמי לשעת חירום.", @@ -1293,7 +1300,8 @@ "open": "פתח", "close": "סגור" }, - "noResults": "אין תוצאות" + "noResults": "אין תוצאות", + "trafficInspectorPurpose": "See exactly what your application sends to and receives from AI providers. Works with any OpenAI-compatible client." }, "webhooks": { "title": "Webhooks", @@ -1856,7 +1864,21 @@ "directDownloadHint": "או הורד את פורמט המתקין המתאים ישירות:", "releaseNotes": "הערות שחרור", "readMore": "קרא עוד", - "noAuthLabel": "אין אימות" + "noAuthLabel": "אין אימות", + "recentRequests": "Recent Requests", + "recentRequestsEmpty": "No requests yet.", + "recentRequestsModel": "Model", + "recentRequestsTokens": "In / Out", + "recentRequestsWhen": "When", + "readinessEyebrow": "Get ready to route", + "readinessTitle": "Send your first request", + "readinessSubtitle": "Four small steps. OmniRoute checks readiness as you go.", + "readinessStep1": "Connect a provider", + "readinessStep2": "Configure endpoint authentication", + "readinessStep3": "Copy your endpoint", + "readinessStep4": "Send a test request", + "readinessContinue": "Continue setup", + "readinessDismiss": "Dismiss for now" }, "analytics": { "title": "אנליטיקס", @@ -2901,7 +2923,8 @@ "omp": "סוכן תכנות למסוף Oh My Pi", "letta": "סוכן CLI של Letta עם זיכרון מתמיד ושימוש בכלים", "warp": "מסוף Warp AI עם תמיכה בספק מותאם אישית", - "agent-deck": "מתזמר מרובה סוכנים Agent Deck" + "agent-deck": "מתזמר מרובה סוכנים Agent Deck", + "prime-agent": "Prime Agent — self-improving RLM coding harness with OpenAI-compatible provider support" }, "guides": { "cursor": { @@ -4133,7 +4156,10 @@ "notionIntegrationHelp": "צור אינטגרציה פנימית ב", "notionIntegrationToken": "אסימון אינטגרציה פנימית של Notion", "notionNotConnected": "לא מחובר", - "notionTokenConfigured": "האסימון הוגדר. כלים של Notion זמינים דרך MCP." + "notionTokenConfigured": "האסימון הוגדר. כלים של Notion זמינים דרך MCP.", + "subtitle": "Use the OpenAI-compatible endpoint with most SDKs and tools.", + "testEndpoint": "Test endpoint →", + "advancedProtocols": "Advanced protocols" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4716,7 +4742,14 @@ "issueCount": "{count} בעיות", "score": "ציון", "lastRequest": "בקשה אחרונה", - "lastError": "שגיאה אחרונה" + "lastError": "שגיאה אחרונה", + "healthVerdictReady": "OmniRoute is ready", + "healthVerdictActionRequired": "Action required to restore full operation", + "healthVerdictCoolingDown": "Cooling down after recent changes", + "healthSubtitle": "System health check", + "advancedDiagnosticsTitle": "Advanced diagnostics", + "hide": "Hide", + "show": "Show" }, "telemetry": { "title": "טלמטריית מערכת", @@ -6383,7 +6416,21 @@ "savedModelEndpointSettings": "הגדרות נקודת הקצה של המודל השמור", "searchByModelAria": "חפש לפי דגם", "selectSupportedEndpoint": "בחר לפחות נקודת קצה אחת נתמכת", - "antigravityClientProfileHarness": "Harness / CLI" + "antigravityClientProfileHarness": "Harness / CLI", + "harImportButtonLabel": "Import .har file", + "harImportButtonBusy": "Importing…", + "harImportButtonHint": "Export from DevTools Network tab after sending at least one chat message.", + "harImportStatusValid": "Imported — valid for ~{minutes}m.", + "harImportStatusExpiringSoon": "Imported — valid for only ~{minutes}m more.", + "harImportStatusExpired": "Imported, but this token already expired ({minutes}m ago) — export a fresh HAR.", + "harImportStatusUnknownExpiry": "Imported. Couldn't read its expiry.", + "harImportErrorNotJson": "That file isn't valid JSON — is it really a .har export?", + "harImportErrorNoEntries": "This HAR has no network entries recorded.", + "harImportErrorNoChathubUrl": "No Copilot chat connection found in this HAR. Send at least one chat message in m365.cloud.microsoft before exporting.", + "harImportErrorUnparsableUrl": "Found the chat connection, but couldn't read its URL.", + "harImportErrorMissingFields": "Found the chat connection, but the token was missing from it.", + "harImportErrorReadFailed": "Couldn't read that file.", + "harImportErrorUnknown": "Couldn't extract a credential from that HAR file." }, "settings": { "title": "הגדרות", @@ -8230,7 +8277,19 @@ "cliproxyapiHealth": "בריאות", "cliproxyapiPort": "פורט", "qdrantHost": "מארח", - "qdrantCollection": "אוסף" + "qdrantCollection": "אוסף", + "presetAll": "All", + "presetAllDesc": "Show everything", + "presetEssentials": "Essentials", + "presetEssentialsDesc": "Beginner path - Advanced tools stay searchable", + "presetMinimal": "Minimal", + "presetMinimalDesc": "Core pages only", + "presetDeveloper": "Developer", + "presetDeveloperDesc": "Dev & proxy tools", + "presetAdmin": "Admin", + "presetAdminDesc": "Monitoring & audit", + "settingsSidebarTitle": "Sidebar Customization", + "settingsSidebarDesc": "Choose which sidebar items to show. Essentials keeps Advanced tools searchable." }, "contextRtk": { "title": "RTK Engine", @@ -12017,7 +12076,8 @@ "title": "סוכני ACP", "phrase": "ממשקי CLI ש-OmniRoute מפעיל כ-backend ביצוע (זרימה הפוכה)", "flow": "לקוח → OmniRoute → הפעלת CLI (stdio/ACP) → תגובה", - "seeOther": "ראה →" + "seeOther": "ראה →", + "warning": "Most users can ignore this — use only when an integration requires it." } }, "comparison": { @@ -12841,6 +12901,10 @@ }, "SKILLS_SANDBOX_NETWORK_ENABLED": { "description": "הפעלת גישה לרשת בארגז החול של המיומנויות." + }, + "DISABLE_CONTEXT_WINDOW_CHECKS": { + "label": "Disable Context Window Checks", + "description": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active." } } }, @@ -13413,6 +13477,13 @@ "modelLockouts": "נעילות מודל", "count": "מספר חיבורים" } + }, + "reassuranceTitle": "Your connections recover automatically", + "reassuranceDetail": "Usually no action is needed. OmniRoute temporarily rests a connection after failures, then safely tries it again.", + "plainStates": { + "healthy": "Requests can be sent", + "coolingDown": "Trying again soon", + "lockedOut": "Needs your attention" } }, "featureFlagCapabilityFilterEnabledDescription": "דחה בקשות לפני שליחה כאשר המודל המטרה חסר יכולות נדרשות (חזון, כלים, פלט מובנה, חלון הקשר). מגן על בקשות ישירות מספק אחד שעוקפות את מסנן ההתאמה של שכבת הקומבו.", @@ -13850,5 +13921,13 @@ "toolsMismatch": "הספק אינו תומך בקריאת כלים", "structuredOutputMismatch": "הספק אינו תומך בפלט מובנה", "contextWindowMismatch": "הבקשה חורגת מגבול ההקשר של הספק" + }, + "featureFlagDisableContextWindowChecksDescription": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active.", + "cheaperInferenceSponsorBanner": { + "title": "Cheaper Inference is an OmniRoute Open Source Friend", + "description": "A cost-ranked gateway reselling dozens of frontier models behind one OpenAI-compatible endpoint — routing each request to the cheapest eligible provider, never above list price.", + "cta": "Get an API Key", + "partnerLinkNote": "Partner link", + "dismissAriaLabel": "Dismiss" } } diff --git a/src/i18n/messages/hi.json b/src/i18n/messages/hi.json index 6585020ebe0..937217f33de 100644 --- a/src/i18n/messages/hi.json +++ b/src/i18n/messages/hi.json @@ -974,7 +974,14 @@ "batchFileUsedByCount": "{count, plural, one {# बैच} other {# बैचों}}", "batchFilePreview": "पूर्वावलोकन", "batchFilePreviewTruncated": "पहले {shown} पंक्तियाँ दिखा रहे हैं ({total} कुल पंक्तियाँ)", - "batchFileDownloadFull": "पूर्ण फ़ाइल डाउनलोड करें" + "batchFileDownloadFull": "पूर्ण फ़ाइल डाउनलोड करें", + "batchHeaderSubtitle": "Run many requests as one job", + "batchStep1": "1 · Upload JSONL", + "batchStep1Desc": "Add requests", + "batchStep2": "2 · Create batch", + "batchStep2Desc": "Run job", + "batchStep3": "3 · Get results", + "batchStep3Desc": "Download output" }, "disabled": "अक्षम", "featureFlagOmnirouteEmergencyFallbackDescription": "बजट समाप्त हो चुके अनुरोधों को आपातकालीन निःशुल्क फ़ॉलबैक प्रदाता/मॉडल पर रूट करें।", @@ -1293,7 +1300,8 @@ "open": "खोलें", "close": "बंद करें" }, - "noResults": "कोई परिणाम नहीं" + "noResults": "कोई परिणाम नहीं", + "trafficInspectorPurpose": "See exactly what your application sends to and receives from AI providers. Works with any OpenAI-compatible client." }, "webhooks": { "title": "वेबहुक", @@ -1856,7 +1864,21 @@ "directDownloadHint": "या संबंधित इंस्टॉलर प्रारूप को सीधे डाउनलोड करें:", "releaseNotes": "रिलीज़ नोट्स", "readMore": "और पढ़ें", - "noAuthLabel": "कोई प्रमाणीकरण नहीं" + "noAuthLabel": "कोई प्रमाणीकरण नहीं", + "recentRequests": "Recent Requests", + "recentRequestsEmpty": "No requests yet.", + "recentRequestsModel": "Model", + "recentRequestsTokens": "In / Out", + "recentRequestsWhen": "When", + "readinessEyebrow": "Get ready to route", + "readinessTitle": "Send your first request", + "readinessSubtitle": "Four small steps. OmniRoute checks readiness as you go.", + "readinessStep1": "Connect a provider", + "readinessStep2": "Configure endpoint authentication", + "readinessStep3": "Copy your endpoint", + "readinessStep4": "Send a test request", + "readinessContinue": "Continue setup", + "readinessDismiss": "Dismiss for now" }, "analytics": { "title": "विश्लेषिकी", @@ -2901,7 +2923,8 @@ "omp": "Oh My Pi टर्मिनल कोडिंग एजेंट", "letta": "स्थायी मेमोरी और टूल उपयोग के साथ Letta CLI एजेंट", "warp": "कस्टम प्रदाता समर्थन के साथ Warp AI टर्मिनल", - "agent-deck": "Agent Deck मल्टी-एजेंट ऑर्केस्ट्रेटर" + "agent-deck": "Agent Deck मल्टी-एजेंट ऑर्केस्ट्रेटर", + "prime-agent": "Prime Agent — self-improving RLM coding harness with OpenAI-compatible provider support" }, "guides": { "cursor": { @@ -4133,7 +4156,10 @@ "notionIntegrationHelp": "एक आंतरिक एकीकरण बनाएं at", "notionIntegrationToken": "Notion आंतरिक एकीकरण टोकन", "notionNotConnected": "कनेक्टेड नहीं", - "notionTokenConfigured": "टोकन कॉन्फ़िगर किया गया। Notion उपकरण MCP के माध्यम से उपलब्ध हैं।" + "notionTokenConfigured": "टोकन कॉन्फ़िगर किया गया। Notion उपकरण MCP के माध्यम से उपलब्ध हैं।", + "subtitle": "Use the OpenAI-compatible endpoint with most SDKs and tools.", + "testEndpoint": "Test endpoint →", + "advancedProtocols": "Advanced protocols" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4716,7 +4742,14 @@ "issueCount": "{count} समस्याएं", "score": "स्कोर", "lastRequest": "अंतिम अनुरोध", - "lastError": "अंतिम त्रुटि" + "lastError": "अंतिम त्रुटि", + "healthVerdictReady": "OmniRoute is ready", + "healthVerdictActionRequired": "Action required to restore full operation", + "healthVerdictCoolingDown": "Cooling down after recent changes", + "healthSubtitle": "System health check", + "advancedDiagnosticsTitle": "Advanced diagnostics", + "hide": "Hide", + "show": "Show" }, "telemetry": { "title": "सिस्टम टेलीमेट्री", @@ -6383,7 +6416,21 @@ "savedModelEndpointSettings": "सहेजे गए मॉडल एंडपॉइंट सेटिंग्स", "searchByModelAria": "मॉडल द्वारा खोजें", "selectSupportedEndpoint": "कम से कम एक समर्थित एंडपॉइंट चुनें", - "antigravityClientProfileHarness": "Harness / CLI" + "antigravityClientProfileHarness": "Harness / CLI", + "harImportButtonLabel": "Import .har file", + "harImportButtonBusy": "Importing…", + "harImportButtonHint": "Export from DevTools Network tab after sending at least one chat message.", + "harImportStatusValid": "Imported — valid for ~{minutes}m.", + "harImportStatusExpiringSoon": "Imported — valid for only ~{minutes}m more.", + "harImportStatusExpired": "Imported, but this token already expired ({minutes}m ago) — export a fresh HAR.", + "harImportStatusUnknownExpiry": "Imported. Couldn't read its expiry.", + "harImportErrorNotJson": "That file isn't valid JSON — is it really a .har export?", + "harImportErrorNoEntries": "This HAR has no network entries recorded.", + "harImportErrorNoChathubUrl": "No Copilot chat connection found in this HAR. Send at least one chat message in m365.cloud.microsoft before exporting.", + "harImportErrorUnparsableUrl": "Found the chat connection, but couldn't read its URL.", + "harImportErrorMissingFields": "Found the chat connection, but the token was missing from it.", + "harImportErrorReadFailed": "Couldn't read that file.", + "harImportErrorUnknown": "Couldn't extract a credential from that HAR file." }, "settings": { "title": "सेटिंग्स", @@ -8230,7 +8277,19 @@ "cliproxyapiHealth": "स्वास्थ्य", "cliproxyapiPort": "पोर्ट", "qdrantHost": "होस्ट", - "qdrantCollection": "संग्रह" + "qdrantCollection": "संग्रह", + "presetAll": "All", + "presetAllDesc": "Show everything", + "presetEssentials": "Essentials", + "presetEssentialsDesc": "Beginner path - Advanced tools stay searchable", + "presetMinimal": "Minimal", + "presetMinimalDesc": "Core pages only", + "presetDeveloper": "Developer", + "presetDeveloperDesc": "Dev & proxy tools", + "presetAdmin": "Admin", + "presetAdminDesc": "Monitoring & audit", + "settingsSidebarTitle": "Sidebar Customization", + "settingsSidebarDesc": "Choose which sidebar items to show. Essentials keeps Advanced tools searchable." }, "contextRtk": { "title": "RTK Engine", @@ -12017,7 +12076,8 @@ "title": "ACP एजेंट्स", "phrase": "CLIs जिन्हें OmniRoute निष्पादन बैकएंड (रिवर्स फ़्लो) के रूप में स्पॉन करता है", "flow": "क्लाइंट → OmniRoute → spawn CLI (stdio/ACP) → प्रतिक्रिया", - "seeOther": "देखें →" + "seeOther": "देखें →", + "warning": "Most users can ignore this — use only when an integration requires it." } }, "comparison": { @@ -12841,6 +12901,10 @@ }, "SKILLS_SANDBOX_NETWORK_ENABLED": { "description": "स्किल्स सैंडबॉक्स में नेटवर्क एक्सेस सक्षम करें।" + }, + "DISABLE_CONTEXT_WINDOW_CHECKS": { + "label": "Disable Context Window Checks", + "description": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active." } } }, @@ -13413,6 +13477,13 @@ "modelLockouts": "मॉडल लॉकआउट", "count": "कनेक्शन गणना" } + }, + "reassuranceTitle": "Your connections recover automatically", + "reassuranceDetail": "Usually no action is needed. OmniRoute temporarily rests a connection after failures, then safely tries it again.", + "plainStates": { + "healthy": "Requests can be sent", + "coolingDown": "Trying again soon", + "lockedOut": "Needs your attention" } }, "featureFlagCapabilityFilterEnabledDescription": "डिस्पैच से पहले अनुरोधों को अस्वीकार करें जब लक्षित मॉडल आवश्यक क्षमताओं (दृष्टि, उपकरण, संरचित आउटपुट, संदर्भ विंडो) से रहित हो। यह सीधे एकल-प्रदाता अनुरोधों की रक्षा करता है जो कॉम्बो-लेयर संगतता फ़िल्टर को बायपास करते हैं।", @@ -13850,5 +13921,13 @@ "toolsMismatch": "प्रदाता टूल कॉलिंग का समर्थन नहीं करता", "structuredOutputMismatch": "प्रदाता संरचित आउटपुट का समर्थन नहीं करता", "contextWindowMismatch": "अनुरोध प्रदाता संदर्भ विंडो से अधिक है" + }, + "featureFlagDisableContextWindowChecksDescription": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active.", + "cheaperInferenceSponsorBanner": { + "title": "Cheaper Inference is an OmniRoute Open Source Friend", + "description": "A cost-ranked gateway reselling dozens of frontier models behind one OpenAI-compatible endpoint — routing each request to the cheapest eligible provider, never above list price.", + "cta": "Get an API Key", + "partnerLinkNote": "Partner link", + "dismissAriaLabel": "Dismiss" } } diff --git a/src/i18n/messages/hu.json b/src/i18n/messages/hu.json index bc576af3b0b..ef879c9f0eb 100644 --- a/src/i18n/messages/hu.json +++ b/src/i18n/messages/hu.json @@ -974,7 +974,14 @@ "batchFileUsedByCount": "Használva {count, plural, one {# tétel} other {# tétel}}", "batchFilePreview": "Előnézet", "batchFilePreviewTruncated": "Az első {shown} sor megjelenítése ({total} összes sor)", - "batchFileDownloadFull": "Teljes fájl letöltése" + "batchFileDownloadFull": "Teljes fájl letöltése", + "batchHeaderSubtitle": "Run many requests as one job", + "batchStep1": "1 · Upload JSONL", + "batchStep1Desc": "Add requests", + "batchStep2": "2 · Create batch", + "batchStep2Desc": "Run job", + "batchStep3": "3 · Get results", + "batchStep3Desc": "Download output" }, "disabled": "Letiltva", "featureFlagOmnirouteEmergencyFallbackDescription": "A keretet kimerítő kérések átirányítása a vészhelyzeti ingyenes tartalék szolgáltatóhoz/modellhez.", @@ -1293,7 +1300,8 @@ "open": "megnyitás", "close": "bezárás" }, - "noResults": "Nincs találat" + "noResults": "Nincs találat", + "trafficInspectorPurpose": "See exactly what your application sends to and receives from AI providers. Works with any OpenAI-compatible client." }, "webhooks": { "title": "Webhooks", @@ -1856,7 +1864,21 @@ "directDownloadHint": "Vagy töltsd le közvetlenül a megfelelő telepítőformátumot:", "releaseNotes": "Kiadási Megjegyzések", "readMore": "Tovább olvasom", - "noAuthLabel": "Nincs hitelesítés" + "noAuthLabel": "Nincs hitelesítés", + "recentRequests": "Recent Requests", + "recentRequestsEmpty": "No requests yet.", + "recentRequestsModel": "Model", + "recentRequestsTokens": "In / Out", + "recentRequestsWhen": "When", + "readinessEyebrow": "Get ready to route", + "readinessTitle": "Send your first request", + "readinessSubtitle": "Four small steps. OmniRoute checks readiness as you go.", + "readinessStep1": "Connect a provider", + "readinessStep2": "Configure endpoint authentication", + "readinessStep3": "Copy your endpoint", + "readinessStep4": "Send a test request", + "readinessContinue": "Continue setup", + "readinessDismiss": "Dismiss for now" }, "analytics": { "title": "Analytics", @@ -2901,7 +2923,8 @@ "omp": "Oh My Pi terminál kódoló ágens", "letta": "Letta CLI ágens perzisztens memóriával és eszközhasználattal", "warp": "Warp AI terminál egyéni szolgáltató támogatásával", - "agent-deck": "Agent Deck többágenses orkesztrátor" + "agent-deck": "Agent Deck többágenses orkesztrátor", + "prime-agent": "Prime Agent — self-improving RLM coding harness with OpenAI-compatible provider support" }, "guides": { "cursor": { @@ -4133,7 +4156,10 @@ "notionIntegrationHelp": "Hozzon létre egy belső integrációt itt", "notionIntegrationToken": "Notion Belső Integrációs Token", "notionNotConnected": "Nincs csatlakoztatva", - "notionTokenConfigured": "A token konfigurálva van. A Notion eszközök elérhetők az MCP-n keresztül." + "notionTokenConfigured": "A token konfigurálva van. A Notion eszközök elérhetők az MCP-n keresztül.", + "subtitle": "Use the OpenAI-compatible endpoint with most SDKs and tools.", + "testEndpoint": "Test endpoint →", + "advancedProtocols": "Advanced protocols" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4716,7 +4742,14 @@ "issueCount": "{count} probléma", "score": "Pontszám", "lastRequest": "Legutóbbi kérés", - "lastError": "Legutóbbi hiba" + "lastError": "Legutóbbi hiba", + "healthVerdictReady": "OmniRoute is ready", + "healthVerdictActionRequired": "Action required to restore full operation", + "healthVerdictCoolingDown": "Cooling down after recent changes", + "healthSubtitle": "System health check", + "advancedDiagnosticsTitle": "Advanced diagnostics", + "hide": "Hide", + "show": "Show" }, "telemetry": { "title": "Rendszer telemetria", @@ -6383,7 +6416,21 @@ "savedModelEndpointSettings": "Mentett modell végpont beállításai", "searchByModelAria": "Keresés modell szerint", "selectSupportedEndpoint": "Válasszon ki legalább egy támogatott végpontot", - "antigravityClientProfileHarness": "Harness / CLI" + "antigravityClientProfileHarness": "Harness / CLI", + "harImportButtonLabel": "Import .har file", + "harImportButtonBusy": "Importing…", + "harImportButtonHint": "Export from DevTools Network tab after sending at least one chat message.", + "harImportStatusValid": "Imported — valid for ~{minutes}m.", + "harImportStatusExpiringSoon": "Imported — valid for only ~{minutes}m more.", + "harImportStatusExpired": "Imported, but this token already expired ({minutes}m ago) — export a fresh HAR.", + "harImportStatusUnknownExpiry": "Imported. Couldn't read its expiry.", + "harImportErrorNotJson": "That file isn't valid JSON — is it really a .har export?", + "harImportErrorNoEntries": "This HAR has no network entries recorded.", + "harImportErrorNoChathubUrl": "No Copilot chat connection found in this HAR. Send at least one chat message in m365.cloud.microsoft before exporting.", + "harImportErrorUnparsableUrl": "Found the chat connection, but couldn't read its URL.", + "harImportErrorMissingFields": "Found the chat connection, but the token was missing from it.", + "harImportErrorReadFailed": "Couldn't read that file.", + "harImportErrorUnknown": "Couldn't extract a credential from that HAR file." }, "settings": { "title": "Beállítások elemre", @@ -8230,7 +8277,19 @@ "cliproxyapiHealth": "Egészség", "cliproxyapiPort": "Port", "qdrantHost": "Gazda", - "qdrantCollection": "Gyűjtemény" + "qdrantCollection": "Gyűjtemény", + "presetAll": "All", + "presetAllDesc": "Show everything", + "presetEssentials": "Essentials", + "presetEssentialsDesc": "Beginner path - Advanced tools stay searchable", + "presetMinimal": "Minimal", + "presetMinimalDesc": "Core pages only", + "presetDeveloper": "Developer", + "presetDeveloperDesc": "Dev & proxy tools", + "presetAdmin": "Admin", + "presetAdminDesc": "Monitoring & audit", + "settingsSidebarTitle": "Sidebar Customization", + "settingsSidebarDesc": "Choose which sidebar items to show. Essentials keeps Advanced tools searchable." }, "contextRtk": { "title": "RTK Engine", @@ -12017,7 +12076,8 @@ "title": "ACP ágensek", "phrase": "CLI-k, amelyeket az OmniRoute indít végrehajtási háttérprogramként (fordított folyamat)", "flow": "Kliens → OmniRoute → CLI indítása (stdio/ACP) → válasz", - "seeOther": "Megtekintés →" + "seeOther": "Megtekintés →", + "warning": "Most users can ignore this — use only when an integration requires it." } }, "comparison": { @@ -12841,6 +12901,10 @@ }, "SKILLS_SANDBOX_NETWORK_ENABLED": { "description": "Hálózati hozzáférés engedélyezése a készségek homokozójában." + }, + "DISABLE_CONTEXT_WINDOW_CHECKS": { + "label": "Disable Context Window Checks", + "description": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active." } } }, @@ -13413,6 +13477,13 @@ "modelLockouts": "Modell Zárolások", "count": "Kapcsolatok Száma" } + }, + "reassuranceTitle": "Your connections recover automatically", + "reassuranceDetail": "Usually no action is needed. OmniRoute temporarily rests a connection after failures, then safely tries it again.", + "plainStates": { + "healthy": "Requests can be sent", + "coolingDown": "Trying again soon", + "lockedOut": "Needs your attention" } }, "featureFlagCapabilityFilterEnabledDescription": "Elutasítja a kéréseket a kiszállítás előtt, amikor a célmodell hiányzik a szükséges képességekből (látás, eszközök, strukturált kimenet, kontextusablak). Védi a közvetlen, egy szolgáltatótól érkező kéréseket, amelyek megkerülik a kombinált réteg kompatibilitási szűrőt.", @@ -13850,5 +13921,13 @@ "toolsMismatch": "A szolgáltató nem támogatja az eszközhívást", "structuredOutputMismatch": "A szolgáltató nem támogatja a strukturált kimenetet", "contextWindowMismatch": "A kérés meghaladja a szolgáltató kontextusablakát" + }, + "featureFlagDisableContextWindowChecksDescription": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active.", + "cheaperInferenceSponsorBanner": { + "title": "Cheaper Inference is an OmniRoute Open Source Friend", + "description": "A cost-ranked gateway reselling dozens of frontier models behind one OpenAI-compatible endpoint — routing each request to the cheapest eligible provider, never above list price.", + "cta": "Get an API Key", + "partnerLinkNote": "Partner link", + "dismissAriaLabel": "Dismiss" } } diff --git a/src/i18n/messages/id.json b/src/i18n/messages/id.json index 3c466610f8e..5f9ba432f4e 100644 --- a/src/i18n/messages/id.json +++ b/src/i18n/messages/id.json @@ -974,7 +974,14 @@ "batchFileUsedByCount": "Digunakan oleh {count, plural, one {# batch} other {# batches}}", "batchFilePreview": "Prabaca", "batchFilePreviewTruncated": "Menampilkan {shown} baris pertama ({total} total baris)", - "batchFileDownloadFull": "Unduh File Lengkap" + "batchFileDownloadFull": "Unduh File Lengkap", + "batchHeaderSubtitle": "Run many requests as one job", + "batchStep1": "1 · Upload JSONL", + "batchStep1Desc": "Add requests", + "batchStep2": "2 · Create batch", + "batchStep2Desc": "Run job", + "batchStep3": "3 · Get results", + "batchStep3Desc": "Download output" }, "disabled": "Dinonaktifkan", "featureFlagOmnirouteEmergencyFallbackDescription": "Arahkan permintaan yang kehabisan anggaran ke penyedia/model fallback gratis darurat.", @@ -1293,7 +1300,8 @@ "open": "buka", "close": "tutup" }, - "noResults": "Tidak ada hasil" + "noResults": "Tidak ada hasil", + "trafficInspectorPurpose": "See exactly what your application sends to and receives from AI providers. Works with any OpenAI-compatible client." }, "webhooks": { "title": "Webhook", @@ -1856,7 +1864,21 @@ "directDownloadHint": "Atau unduh format installer yang sesuai secara langsung:", "releaseNotes": "Catatan Rilis", "readMore": "Baca Selengkapnya", - "noAuthLabel": "Tidak Ada Autentikasi" + "noAuthLabel": "Tidak Ada Autentikasi", + "recentRequests": "Recent Requests", + "recentRequestsEmpty": "No requests yet.", + "recentRequestsModel": "Model", + "recentRequestsTokens": "In / Out", + "recentRequestsWhen": "When", + "readinessEyebrow": "Get ready to route", + "readinessTitle": "Send your first request", + "readinessSubtitle": "Four small steps. OmniRoute checks readiness as you go.", + "readinessStep1": "Connect a provider", + "readinessStep2": "Configure endpoint authentication", + "readinessStep3": "Copy your endpoint", + "readinessStep4": "Send a test request", + "readinessContinue": "Continue setup", + "readinessDismiss": "Dismiss for now" }, "analytics": { "title": "Analisis", @@ -2901,7 +2923,8 @@ "omp": "Agen pengodean terminal Oh My Pi", "letta": "Agen CLI Letta dengan memori persisten dan penggunaan alat", "warp": "Terminal AI Warp dengan dukungan penyedia kustom", - "agent-deck": "Orkestrator multi-agen Agent Deck" + "agent-deck": "Orkestrator multi-agen Agent Deck", + "prime-agent": "Prime Agent — self-improving RLM coding harness with OpenAI-compatible provider support" }, "guides": { "cursor": { @@ -4133,7 +4156,10 @@ "notionIntegrationHelp": "Buat Integrasi Internal di", "notionIntegrationToken": "Token Integrasi Internal Notion", "notionNotConnected": "Tidak terhubung", - "notionTokenConfigured": "Token telah dikonfigurasi. Alat Notion tersedia melalui MCP." + "notionTokenConfigured": "Token telah dikonfigurasi. Alat Notion tersedia melalui MCP.", + "subtitle": "Use the OpenAI-compatible endpoint with most SDKs and tools.", + "testEndpoint": "Test endpoint →", + "advancedProtocols": "Advanced protocols" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4716,7 +4742,14 @@ "issueCount": "{count} masalah", "score": "Skor", "lastRequest": "Permintaan terakhir", - "lastError": "Kesalahan terakhir" + "lastError": "Kesalahan terakhir", + "healthVerdictReady": "OmniRoute is ready", + "healthVerdictActionRequired": "Action required to restore full operation", + "healthVerdictCoolingDown": "Cooling down after recent changes", + "healthSubtitle": "System health check", + "advancedDiagnosticsTitle": "Advanced diagnostics", + "hide": "Hide", + "show": "Show" }, "telemetry": { "title": "Telemetri Sistem", @@ -6383,7 +6416,21 @@ "savedModelEndpointSettings": "Pengaturan endpoint model yang disimpan", "searchByModelAria": "Cari berdasarkan model", "selectSupportedEndpoint": "Pilih setidaknya satu endpoint yang didukung", - "antigravityClientProfileHarness": "Harness / CLI" + "antigravityClientProfileHarness": "Harness / CLI", + "harImportButtonLabel": "Import .har file", + "harImportButtonBusy": "Importing…", + "harImportButtonHint": "Export from DevTools Network tab after sending at least one chat message.", + "harImportStatusValid": "Imported — valid for ~{minutes}m.", + "harImportStatusExpiringSoon": "Imported — valid for only ~{minutes}m more.", + "harImportStatusExpired": "Imported, but this token already expired ({minutes}m ago) — export a fresh HAR.", + "harImportStatusUnknownExpiry": "Imported. Couldn't read its expiry.", + "harImportErrorNotJson": "That file isn't valid JSON — is it really a .har export?", + "harImportErrorNoEntries": "This HAR has no network entries recorded.", + "harImportErrorNoChathubUrl": "No Copilot chat connection found in this HAR. Send at least one chat message in m365.cloud.microsoft before exporting.", + "harImportErrorUnparsableUrl": "Found the chat connection, but couldn't read its URL.", + "harImportErrorMissingFields": "Found the chat connection, but the token was missing from it.", + "harImportErrorReadFailed": "Couldn't read that file.", + "harImportErrorUnknown": "Couldn't extract a credential from that HAR file." }, "settings": { "title": "Pengaturan", @@ -8230,7 +8277,19 @@ "cliproxyapiHealth": "Kesehatan", "cliproxyapiPort": "Port", "qdrantHost": "Host", - "qdrantCollection": "Koleksi" + "qdrantCollection": "Koleksi", + "presetAll": "All", + "presetAllDesc": "Show everything", + "presetEssentials": "Essentials", + "presetEssentialsDesc": "Beginner path - Advanced tools stay searchable", + "presetMinimal": "Minimal", + "presetMinimalDesc": "Core pages only", + "presetDeveloper": "Developer", + "presetDeveloperDesc": "Dev & proxy tools", + "presetAdmin": "Admin", + "presetAdminDesc": "Monitoring & audit", + "settingsSidebarTitle": "Sidebar Customization", + "settingsSidebarDesc": "Choose which sidebar items to show. Essentials keeps Advanced tools searchable." }, "contextRtk": { "title": "RTK Engine", @@ -12017,7 +12076,8 @@ "title": "Agen ACP", "phrase": "CLI yang dijalankan OmniRoute sebagai backend eksekusi (alur terbalik)", "flow": "Klien → OmniRoute → spawn CLI (stdio/ACP) → respons", - "seeOther": "Lihat →" + "seeOther": "Lihat →", + "warning": "Most users can ignore this — use only when an integration requires it." } }, "comparison": { @@ -12841,6 +12901,10 @@ }, "SKILLS_SANDBOX_NETWORK_ENABLED": { "description": "Aktifkan akses jaringan di sandbox keterampilan." + }, + "DISABLE_CONTEXT_WINDOW_CHECKS": { + "label": "Disable Context Window Checks", + "description": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active." } } }, @@ -13413,6 +13477,13 @@ "modelLockouts": "Penguncian Model", "count": "Jumlah Koneksi" } + }, + "reassuranceTitle": "Your connections recover automatically", + "reassuranceDetail": "Usually no action is needed. OmniRoute temporarily rests a connection after failures, then safely tries it again.", + "plainStates": { + "healthy": "Requests can be sent", + "coolingDown": "Trying again soon", + "lockedOut": "Needs your attention" } }, "featureFlagCapabilityFilterEnabledDescription": "Tolak permintaan sebelum pengiriman ketika model target tidak memiliki kemampuan yang diperlukan (visi, alat, output terstruktur, jendela konteks). Melindungi permintaan penyedia tunggal langsung yang melewati filter kompatibilitas lapisan kombinasi.", @@ -13850,5 +13921,13 @@ "toolsMismatch": "Penyedia tidak mendukung pemanggilan alat", "structuredOutputMismatch": "Penyedia tidak mendukung keluaran terstruktur", "contextWindowMismatch": "Permintaan melebihi jendela konteks penyedia" + }, + "featureFlagDisableContextWindowChecksDescription": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active.", + "cheaperInferenceSponsorBanner": { + "title": "Cheaper Inference is an OmniRoute Open Source Friend", + "description": "A cost-ranked gateway reselling dozens of frontier models behind one OpenAI-compatible endpoint — routing each request to the cheapest eligible provider, never above list price.", + "cta": "Get an API Key", + "partnerLinkNote": "Partner link", + "dismissAriaLabel": "Dismiss" } } diff --git a/src/i18n/messages/in.json b/src/i18n/messages/in.json index 9068ec4e24d..cbd2749b2d3 100644 --- a/src/i18n/messages/in.json +++ b/src/i18n/messages/in.json @@ -974,7 +974,14 @@ "batchFileUsedByCount": "Digunakan oleh {count, plural, one {# batch} other {# batches}}", "batchFilePreview": "Prabaca", "batchFilePreviewTruncated": "Menampilkan {shown} baris pertama ({total} total baris)", - "batchFileDownloadFull": "Unduh File Lengkap" + "batchFileDownloadFull": "Unduh File Lengkap", + "batchHeaderSubtitle": "Run many requests as one job", + "batchStep1": "1 · Upload JSONL", + "batchStep1Desc": "Add requests", + "batchStep2": "2 · Create batch", + "batchStep2Desc": "Run job", + "batchStep3": "3 · Get results", + "batchStep3Desc": "Download output" }, "disabled": "Dinonaktifkan", "featureFlagOmnirouteEmergencyFallbackDescription": "Rute permintaan yang kehabisan anggaran ke penyedia/model cadangan gratis darurat.", @@ -1293,7 +1300,8 @@ "open": "buka", "close": "tutup" }, - "noResults": "Tidak ada hasil" + "noResults": "Tidak ada hasil", + "trafficInspectorPurpose": "See exactly what your application sends to and receives from AI providers. Works with any OpenAI-compatible client." }, "webhooks": { "title": "Webhook", @@ -1856,7 +1864,21 @@ "directDownloadHint": "Atau unduh format penginstal yang sesuai secara langsung:", "releaseNotes": "Catatan Rilis", "readMore": "Baca Selengkapnya", - "noAuthLabel": "Tidak Ada Autentikasi" + "noAuthLabel": "Tidak Ada Autentikasi", + "recentRequests": "Recent Requests", + "recentRequestsEmpty": "No requests yet.", + "recentRequestsModel": "Model", + "recentRequestsTokens": "In / Out", + "recentRequestsWhen": "When", + "readinessEyebrow": "Get ready to route", + "readinessTitle": "Send your first request", + "readinessSubtitle": "Four small steps. OmniRoute checks readiness as you go.", + "readinessStep1": "Connect a provider", + "readinessStep2": "Configure endpoint authentication", + "readinessStep3": "Copy your endpoint", + "readinessStep4": "Send a test request", + "readinessContinue": "Continue setup", + "readinessDismiss": "Dismiss for now" }, "analytics": { "title": "Analytics", @@ -2901,7 +2923,8 @@ "omp": "Agen pengodean terminal Oh My Pi", "letta": "Agen CLI Letta dengan memori persisten dan penggunaan alat", "warp": "Terminal Warp AI dengan dukungan penyedia kustom", - "agent-deck": "Orkestrator multi-agen Agent Deck" + "agent-deck": "Orkestrator multi-agen Agent Deck", + "prime-agent": "Prime Agent — self-improving RLM coding harness with OpenAI-compatible provider support" }, "guides": { "cursor": { @@ -4133,7 +4156,10 @@ "notionIntegrationHelp": "Buat Integrasi Internal di", "notionIntegrationToken": "Token Integrasi Internal Notion", "notionNotConnected": "Tidak terhubung", - "notionTokenConfigured": "Token telah dikonfigurasi. Alat Notion tersedia melalui MCP." + "notionTokenConfigured": "Token telah dikonfigurasi. Alat Notion tersedia melalui MCP.", + "subtitle": "Use the OpenAI-compatible endpoint with most SDKs and tools.", + "testEndpoint": "Test endpoint →", + "advancedProtocols": "Advanced protocols" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4716,7 +4742,14 @@ "issueCount": "{count} masalah", "score": "Skor", "lastRequest": "Permintaan terakhir", - "lastError": "Galat terakhir" + "lastError": "Galat terakhir", + "healthVerdictReady": "OmniRoute is ready", + "healthVerdictActionRequired": "Action required to restore full operation", + "healthVerdictCoolingDown": "Cooling down after recent changes", + "healthSubtitle": "System health check", + "advancedDiagnosticsTitle": "Advanced diagnostics", + "hide": "Hide", + "show": "Show" }, "telemetry": { "title": "Telemetri Sistem", @@ -6383,7 +6416,21 @@ "savedModelEndpointSettings": "Pengaturan endpoint model yang disimpan", "searchByModelAria": "Cari berdasarkan model", "selectSupportedEndpoint": "Pilih setidaknya satu endpoint yang didukung", - "antigravityClientProfileHarness": "Harness / CLI" + "antigravityClientProfileHarness": "Harness / CLI", + "harImportButtonLabel": "Import .har file", + "harImportButtonBusy": "Importing…", + "harImportButtonHint": "Export from DevTools Network tab after sending at least one chat message.", + "harImportStatusValid": "Imported — valid for ~{minutes}m.", + "harImportStatusExpiringSoon": "Imported — valid for only ~{minutes}m more.", + "harImportStatusExpired": "Imported, but this token already expired ({minutes}m ago) — export a fresh HAR.", + "harImportStatusUnknownExpiry": "Imported. Couldn't read its expiry.", + "harImportErrorNotJson": "That file isn't valid JSON — is it really a .har export?", + "harImportErrorNoEntries": "This HAR has no network entries recorded.", + "harImportErrorNoChathubUrl": "No Copilot chat connection found in this HAR. Send at least one chat message in m365.cloud.microsoft before exporting.", + "harImportErrorUnparsableUrl": "Found the chat connection, but couldn't read its URL.", + "harImportErrorMissingFields": "Found the chat connection, but the token was missing from it.", + "harImportErrorReadFailed": "Couldn't read that file.", + "harImportErrorUnknown": "Couldn't extract a credential from that HAR file." }, "settings": { "title": "Settings", @@ -8230,7 +8277,19 @@ "cliproxyapiHealth": "Kesehatan", "cliproxyapiPort": "Port", "qdrantHost": "Tuan Rumah", - "qdrantCollection": "Koleksi" + "qdrantCollection": "Koleksi", + "presetAll": "All", + "presetAllDesc": "Show everything", + "presetEssentials": "Essentials", + "presetEssentialsDesc": "Beginner path - Advanced tools stay searchable", + "presetMinimal": "Minimal", + "presetMinimalDesc": "Core pages only", + "presetDeveloper": "Developer", + "presetDeveloperDesc": "Dev & proxy tools", + "presetAdmin": "Admin", + "presetAdminDesc": "Monitoring & audit", + "settingsSidebarTitle": "Sidebar Customization", + "settingsSidebarDesc": "Choose which sidebar items to show. Essentials keeps Advanced tools searchable." }, "contextRtk": { "title": "RTK Engine", @@ -12017,7 +12076,8 @@ "title": "Agen ACP", "phrase": "CLI yang dijalankan OmniRoute sebagai backend eksekusi (alur balik)", "flow": "Klien → OmniRoute → jalankan CLI (stdio/ACP) → respons", - "seeOther": "Lihat →" + "seeOther": "Lihat →", + "warning": "Most users can ignore this — use only when an integration requires it." } }, "comparison": { @@ -12841,6 +12901,10 @@ }, "SKILLS_SANDBOX_NETWORK_ENABLED": { "description": "Aktifkan akses jaringan di sandbox keahlian." + }, + "DISABLE_CONTEXT_WINDOW_CHECKS": { + "label": "Disable Context Window Checks", + "description": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active." } } }, @@ -13413,6 +13477,13 @@ "modelLockouts": "Penguncian Model", "count": "Jumlah Koneksi" } + }, + "reassuranceTitle": "Your connections recover automatically", + "reassuranceDetail": "Usually no action is needed. OmniRoute temporarily rests a connection after failures, then safely tries it again.", + "plainStates": { + "healthy": "Requests can be sent", + "coolingDown": "Trying again soon", + "lockedOut": "Needs your attention" } }, "featureFlagCapabilityFilterEnabledDescription": "Tolak permintaan sebelum pengiriman ketika model target tidak memiliki kemampuan yang diperlukan (visi, alat, output terstruktur, jendela konteks). Melindungi permintaan penyedia tunggal langsung yang melewati filter kompatibilitas lapisan kombinasi.", @@ -13850,5 +13921,13 @@ "toolsMismatch": "Penyedia tidak mendukung pemanggilan alat", "structuredOutputMismatch": "Penyedia tidak mendukung keluaran terstruktur", "contextWindowMismatch": "Permintaan melebihi jendela konteks penyedia" + }, + "featureFlagDisableContextWindowChecksDescription": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active.", + "cheaperInferenceSponsorBanner": { + "title": "Cheaper Inference is an OmniRoute Open Source Friend", + "description": "A cost-ranked gateway reselling dozens of frontier models behind one OpenAI-compatible endpoint — routing each request to the cheapest eligible provider, never above list price.", + "cta": "Get an API Key", + "partnerLinkNote": "Partner link", + "dismissAriaLabel": "Dismiss" } } diff --git a/src/i18n/messages/it.json b/src/i18n/messages/it.json index e2d704ff8dc..7db12ef27a8 100644 --- a/src/i18n/messages/it.json +++ b/src/i18n/messages/it.json @@ -974,7 +974,14 @@ "batchFileUsedByCount": "Utilizzato da {count, plural, one {# batch} other {# batch}}", "batchFilePreview": "Anteprima", "batchFilePreviewTruncated": "Mostrando le prime {shown} righe ({total} righe totali)", - "batchFileDownloadFull": "Scarica File Completo" + "batchFileDownloadFull": "Scarica File Completo", + "batchHeaderSubtitle": "Run many requests as one job", + "batchStep1": "1 · Upload JSONL", + "batchStep1Desc": "Add requests", + "batchStep2": "2 · Create batch", + "batchStep2Desc": "Run job", + "batchStep3": "3 · Get results", + "batchStep3Desc": "Download output" }, "disabled": "Disabilitato", "featureFlagOmnirouteEmergencyFallbackDescription": "Indirizza le richieste con budget esaurito al provider/modello di fallback gratuito di emergenza.", @@ -1293,7 +1300,8 @@ "open": "apri", "close": "chiudi" }, - "noResults": "Nessun risultato" + "noResults": "Nessun risultato", + "trafficInspectorPurpose": "See exactly what your application sends to and receives from AI providers. Works with any OpenAI-compatible client." }, "webhooks": { "title": "Webhook", @@ -1856,7 +1864,21 @@ "directDownloadHint": "Oppure scarica direttamente il formato dell'installer rispettivo:", "releaseNotes": "Note di Rilascio", "readMore": "Leggi di più", - "noAuthLabel": "Nessuna Autenticazione" + "noAuthLabel": "Nessuna Autenticazione", + "recentRequests": "Recent Requests", + "recentRequestsEmpty": "No requests yet.", + "recentRequestsModel": "Model", + "recentRequestsTokens": "In / Out", + "recentRequestsWhen": "When", + "readinessEyebrow": "Get ready to route", + "readinessTitle": "Send your first request", + "readinessSubtitle": "Four small steps. OmniRoute checks readiness as you go.", + "readinessStep1": "Connect a provider", + "readinessStep2": "Configure endpoint authentication", + "readinessStep3": "Copy your endpoint", + "readinessStep4": "Send a test request", + "readinessContinue": "Continue setup", + "readinessDismiss": "Dismiss for now" }, "analytics": { "title": "Analitica", @@ -2901,7 +2923,8 @@ "omp": "Agente di codifica da terminale Oh My Pi", "letta": "Agente CLI Letta con memoria persistente e uso di strumenti", "warp": "Terminale Warp AI con supporto per provider personalizzato", - "agent-deck": "Orchestratore multi-agente Agent Deck" + "agent-deck": "Orchestratore multi-agente Agent Deck", + "prime-agent": "Prime Agent — self-improving RLM coding harness with OpenAI-compatible provider support" }, "guides": { "cursor": { @@ -4133,7 +4156,10 @@ "notionIntegrationHelp": "Crea un'integrazione interna a", "notionIntegrationToken": "Token di integrazione interna di Notion", "notionNotConnected": "Non connesso", - "notionTokenConfigured": "Token configurato. Gli strumenti di Notion sono disponibili tramite MCP." + "notionTokenConfigured": "Token configurato. Gli strumenti di Notion sono disponibili tramite MCP.", + "subtitle": "Use the OpenAI-compatible endpoint with most SDKs and tools.", + "testEndpoint": "Test endpoint →", + "advancedProtocols": "Advanced protocols" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4716,7 +4742,14 @@ "issueCount": "{count} problemi", "score": "Punteggio", "lastRequest": "Ultima richiesta", - "lastError": "Ultimo errore" + "lastError": "Ultimo errore", + "healthVerdictReady": "OmniRoute is ready", + "healthVerdictActionRequired": "Action required to restore full operation", + "healthVerdictCoolingDown": "Cooling down after recent changes", + "healthSubtitle": "System health check", + "advancedDiagnosticsTitle": "Advanced diagnostics", + "hide": "Hide", + "show": "Show" }, "telemetry": { "title": "Telemetria del sistema", @@ -6383,7 +6416,21 @@ "savedModelEndpointSettings": "Impostazioni dell'endpoint del modello salvato", "searchByModelAria": "Cerca per modello", "selectSupportedEndpoint": "Seleziona almeno un endpoint supportato", - "antigravityClientProfileHarness": "Harness / CLI" + "antigravityClientProfileHarness": "Harness / CLI", + "harImportButtonLabel": "Import .har file", + "harImportButtonBusy": "Importing…", + "harImportButtonHint": "Export from DevTools Network tab after sending at least one chat message.", + "harImportStatusValid": "Imported — valid for ~{minutes}m.", + "harImportStatusExpiringSoon": "Imported — valid for only ~{minutes}m more.", + "harImportStatusExpired": "Imported, but this token already expired ({minutes}m ago) — export a fresh HAR.", + "harImportStatusUnknownExpiry": "Imported. Couldn't read its expiry.", + "harImportErrorNotJson": "That file isn't valid JSON — is it really a .har export?", + "harImportErrorNoEntries": "This HAR has no network entries recorded.", + "harImportErrorNoChathubUrl": "No Copilot chat connection found in this HAR. Send at least one chat message in m365.cloud.microsoft before exporting.", + "harImportErrorUnparsableUrl": "Found the chat connection, but couldn't read its URL.", + "harImportErrorMissingFields": "Found the chat connection, but the token was missing from it.", + "harImportErrorReadFailed": "Couldn't read that file.", + "harImportErrorUnknown": "Couldn't extract a credential from that HAR file." }, "settings": { "title": "Impostazioni", @@ -8230,7 +8277,19 @@ "cliproxyapiHealth": "Salute", "cliproxyapiPort": "Porta", "qdrantHost": "Host", - "qdrantCollection": "Collezione" + "qdrantCollection": "Collezione", + "presetAll": "All", + "presetAllDesc": "Show everything", + "presetEssentials": "Essentials", + "presetEssentialsDesc": "Beginner path - Advanced tools stay searchable", + "presetMinimal": "Minimal", + "presetMinimalDesc": "Core pages only", + "presetDeveloper": "Developer", + "presetDeveloperDesc": "Dev & proxy tools", + "presetAdmin": "Admin", + "presetAdminDesc": "Monitoring & audit", + "settingsSidebarTitle": "Sidebar Customization", + "settingsSidebarDesc": "Choose which sidebar items to show. Essentials keeps Advanced tools searchable." }, "contextRtk": { "title": "RTK Engine", @@ -12017,7 +12076,8 @@ "title": "Agenti ACP", "phrase": "CLI che OmniRoute avvia come backend di esecuzione (flusso inverso)", "flow": "Client → OmniRoute → avvio CLI (stdio/ACP) → risposta", - "seeOther": "Vedi →" + "seeOther": "Vedi →", + "warning": "Most users can ignore this — use only when an integration requires it." } }, "comparison": { @@ -12841,6 +12901,10 @@ }, "SKILLS_SANDBOX_NETWORK_ENABLED": { "description": "Abilita l'accesso alla rete nella sandbox delle skill." + }, + "DISABLE_CONTEXT_WINDOW_CHECKS": { + "label": "Disable Context Window Checks", + "description": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active." } } }, @@ -13413,6 +13477,13 @@ "modelLockouts": "Blocchi Modello", "count": "Conteggio Connessioni" } + }, + "reassuranceTitle": "Your connections recover automatically", + "reassuranceDetail": "Usually no action is needed. OmniRoute temporarily rests a connection after failures, then safely tries it again.", + "plainStates": { + "healthy": "Requests can be sent", + "coolingDown": "Trying again soon", + "lockedOut": "Needs your attention" } }, "featureFlagCapabilityFilterEnabledDescription": "Rifiuta le richieste prima della spedizione quando il modello di destinazione manca delle capacità richieste (visione, strumenti, output strutturato, finestra di contesto). Protegge le richieste dirette a singolo fornitore che bypassano il filtro di compatibilità del livello combinato.", @@ -13850,5 +13921,13 @@ "toolsMismatch": "Il provider non supporta la chiamata degli strumenti", "structuredOutputMismatch": "Il provider non supporta l'output strutturato", "contextWindowMismatch": "La richiesta supera la finestra di contesto del fornitore" + }, + "featureFlagDisableContextWindowChecksDescription": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active.", + "cheaperInferenceSponsorBanner": { + "title": "Cheaper Inference is an OmniRoute Open Source Friend", + "description": "A cost-ranked gateway reselling dozens of frontier models behind one OpenAI-compatible endpoint — routing each request to the cheapest eligible provider, never above list price.", + "cta": "Get an API Key", + "partnerLinkNote": "Partner link", + "dismissAriaLabel": "Dismiss" } } diff --git a/src/i18n/messages/ja.json b/src/i18n/messages/ja.json index af3254ec9db..46dc0efa336 100644 --- a/src/i18n/messages/ja.json +++ b/src/i18n/messages/ja.json @@ -974,7 +974,14 @@ "batchFileUsedByCount": "{count, plural, one {# バッチ} other {# バッチ}}", "batchFilePreview": "プレビュー", "batchFilePreviewTruncated": "最初の {shown} 行を表示中 ({total} 行中)", - "batchFileDownloadFull": "フルファイルをダウンロード" + "batchFileDownloadFull": "フルファイルをダウンロード", + "batchHeaderSubtitle": "Run many requests as one job", + "batchStep1": "1 · Upload JSONL", + "batchStep1Desc": "Add requests", + "batchStep2": "2 · Create batch", + "batchStep2Desc": "Run job", + "batchStep3": "3 · Get results", + "batchStep3Desc": "Download output" }, "disabled": "無効", "featureFlagOmnirouteEmergencyFallbackDescription": "予算を使い果たしたリクエストを、緊急用の無料フォールバックプロバイダー/モデルにルーティングします。", @@ -1293,7 +1300,8 @@ "open": "開く", "close": "閉じる" }, - "noResults": "結果がありません" + "noResults": "結果がありません", + "trafficInspectorPurpose": "See exactly what your application sends to and receives from AI providers. Works with any OpenAI-compatible client." }, "webhooks": { "title": "Webhook", @@ -1856,7 +1864,21 @@ "directDownloadHint": "または、それぞれのインストーラ形式を直接ダウンロードしてください:", "releaseNotes": "リリースノート", "readMore": "続きを読む", - "noAuthLabel": "認証なし" + "noAuthLabel": "認証なし", + "recentRequests": "Recent Requests", + "recentRequestsEmpty": "No requests yet.", + "recentRequestsModel": "Model", + "recentRequestsTokens": "In / Out", + "recentRequestsWhen": "When", + "readinessEyebrow": "Get ready to route", + "readinessTitle": "Send your first request", + "readinessSubtitle": "Four small steps. OmniRoute checks readiness as you go.", + "readinessStep1": "Connect a provider", + "readinessStep2": "Configure endpoint authentication", + "readinessStep3": "Copy your endpoint", + "readinessStep4": "Send a test request", + "readinessContinue": "Continue setup", + "readinessDismiss": "Dismiss for now" }, "analytics": { "title": "分析", @@ -2901,7 +2923,8 @@ "omp": "Oh My Piターミナルコーディングエージェント", "letta": "永続メモリとツール使用を備えたLetta CLIエージェント", "warp": "カスタムプロバイダーをサポートするWarp AIターミナル", - "agent-deck": "Agent Deckマルチエージェントオーケストレーター" + "agent-deck": "Agent Deckマルチエージェントオーケストレーター", + "prime-agent": "Prime Agent — self-improving RLM coding harness with OpenAI-compatible provider support" }, "guides": { "cursor": { @@ -4133,7 +4156,10 @@ "notionIntegrationHelp": "内部統合を作成する at", "notionIntegrationToken": "Notion内部統合トークン", "notionNotConnected": "接続されていません", - "notionTokenConfigured": "トークンが設定されました。NotionツールはMCPを介して利用可能です。" + "notionTokenConfigured": "トークンが設定されました。NotionツールはMCPを介して利用可能です。", + "subtitle": "Use the OpenAI-compatible endpoint with most SDKs and tools.", + "testEndpoint": "Test endpoint →", + "advancedProtocols": "Advanced protocols" }, "endpoints": { "tabProxy": "エンドポイント プロキシ", @@ -4716,7 +4742,14 @@ "issueCount": "{count} 件の問題", "score": "スコア", "lastRequest": "最終リクエスト", - "lastError": "最終エラー" + "lastError": "最終エラー", + "healthVerdictReady": "OmniRoute is ready", + "healthVerdictActionRequired": "Action required to restore full operation", + "healthVerdictCoolingDown": "Cooling down after recent changes", + "healthSubtitle": "System health check", + "advancedDiagnosticsTitle": "Advanced diagnostics", + "hide": "Hide", + "show": "Show" }, "telemetry": { "title": "システムテレメトリ", @@ -6383,7 +6416,21 @@ "savedModelEndpointSettings": "保存されたモデルエンドポイント設定", "searchByModelAria": "モデルで検索", "selectSupportedEndpoint": "サポートされているエンドポイントを少なくとも1つ選択してください", - "antigravityClientProfileHarness": "Harness / CLI" + "antigravityClientProfileHarness": "Harness / CLI", + "harImportButtonLabel": "Import .har file", + "harImportButtonBusy": "Importing…", + "harImportButtonHint": "Export from DevTools Network tab after sending at least one chat message.", + "harImportStatusValid": "Imported — valid for ~{minutes}m.", + "harImportStatusExpiringSoon": "Imported — valid for only ~{minutes}m more.", + "harImportStatusExpired": "Imported, but this token already expired ({minutes}m ago) — export a fresh HAR.", + "harImportStatusUnknownExpiry": "Imported. Couldn't read its expiry.", + "harImportErrorNotJson": "That file isn't valid JSON — is it really a .har export?", + "harImportErrorNoEntries": "This HAR has no network entries recorded.", + "harImportErrorNoChathubUrl": "No Copilot chat connection found in this HAR. Send at least one chat message in m365.cloud.microsoft before exporting.", + "harImportErrorUnparsableUrl": "Found the chat connection, but couldn't read its URL.", + "harImportErrorMissingFields": "Found the chat connection, but the token was missing from it.", + "harImportErrorReadFailed": "Couldn't read that file.", + "harImportErrorUnknown": "Couldn't extract a credential from that HAR file." }, "settings": { "title": "設定", @@ -8230,7 +8277,19 @@ "cliproxyapiHealth": "健康", "cliproxyapiPort": "ポート", "qdrantHost": "ホスト", - "qdrantCollection": "コレクション" + "qdrantCollection": "コレクション", + "presetAll": "All", + "presetAllDesc": "Show everything", + "presetEssentials": "Essentials", + "presetEssentialsDesc": "Beginner path - Advanced tools stay searchable", + "presetMinimal": "Minimal", + "presetMinimalDesc": "Core pages only", + "presetDeveloper": "Developer", + "presetDeveloperDesc": "Dev & proxy tools", + "presetAdmin": "Admin", + "presetAdminDesc": "Monitoring & audit", + "settingsSidebarTitle": "Sidebar Customization", + "settingsSidebarDesc": "Choose which sidebar items to show. Essentials keeps Advanced tools searchable." }, "contextRtk": { "title": "RTK Engine", @@ -12017,7 +12076,8 @@ "title": "ACPエージェント", "phrase": "OmniRouteが実行バックエンドとして起動するCLI(逆フロー)", "flow": "クライアント → OmniRoute → CLI起動 (stdio/ACP) → レスポンス", - "seeOther": "詳細 →" + "seeOther": "詳細 →", + "warning": "Most users can ignore this — use only when an integration requires it." } }, "comparison": { @@ -12841,6 +12901,10 @@ }, "SKILLS_SANDBOX_NETWORK_ENABLED": { "description": "Enable network access in the skills sandbox." + }, + "DISABLE_CONTEXT_WINDOW_CHECKS": { + "label": "Disable Context Window Checks", + "description": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active." } } }, @@ -13413,6 +13477,13 @@ "modelLockouts": "モデルロックアウト", "count": "接続数" } + }, + "reassuranceTitle": "Your connections recover automatically", + "reassuranceDetail": "Usually no action is needed. OmniRoute temporarily rests a connection after failures, then safely tries it again.", + "plainStates": { + "healthy": "Requests can be sent", + "coolingDown": "Trying again soon", + "lockedOut": "Needs your attention" } }, "featureFlagCapabilityFilterEnabledDescription": "ディスパッチ前にリクエストを拒否します。ターゲットモデルに必要な機能(ビジョン、ツール、構造化出力、コンテキストウィンドウ)が欠けている場合。コンボレイヤーの互換性フィルターをバイパスする直接の単一プロバイダーリクエストを保護します。", @@ -13850,5 +13921,13 @@ "toolsMismatch": "プロバイダーはツール呼び出しをサポートしていません", "structuredOutputMismatch": "プロバイダーは構造化出力をサポートしていません", "contextWindowMismatch": "リクエストがプロバイダーのコンテキストウィンドウを超えています" + }, + "featureFlagDisableContextWindowChecksDescription": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active.", + "cheaperInferenceSponsorBanner": { + "title": "Cheaper Inference is an OmniRoute Open Source Friend", + "description": "A cost-ranked gateway reselling dozens of frontier models behind one OpenAI-compatible endpoint — routing each request to the cheapest eligible provider, never above list price.", + "cta": "Get an API Key", + "partnerLinkNote": "Partner link", + "dismissAriaLabel": "Dismiss" } } diff --git a/src/i18n/messages/ko.json b/src/i18n/messages/ko.json index 96fc3f83a9c..2062a2922f1 100644 --- a/src/i18n/messages/ko.json +++ b/src/i18n/messages/ko.json @@ -974,7 +974,14 @@ "batchFileUsedByCount": "{count, plural, one {# 배치} other {# 배치들}}", "batchFilePreview": "미리보기", "batchFilePreviewTruncated": "첫 번째 {shown} 줄 표시 ({total} 총 줄)", - "batchFileDownloadFull": "전체 파일 다운로드" + "batchFileDownloadFull": "전체 파일 다운로드", + "batchHeaderSubtitle": "Run many requests as one job", + "batchStep1": "1 · Upload JSONL", + "batchStep1Desc": "Add requests", + "batchStep2": "2 · Create batch", + "batchStep2Desc": "Run job", + "batchStep3": "3 · Get results", + "batchStep3Desc": "Download output" }, "disabled": "비활성화됨", "featureFlagOmnirouteEmergencyFallbackDescription": "예산이 소진된 요청을 긴급 무료 폴백 제공자/모델로 라우팅합니다.", @@ -1293,7 +1300,8 @@ "open": "열기", "close": "닫기" }, - "noResults": "결과가 없습니다" + "noResults": "결과가 없습니다", + "trafficInspectorPurpose": "See exactly what your application sends to and receives from AI providers. Works with any OpenAI-compatible client." }, "webhooks": { "title": "웹훅", @@ -1856,7 +1864,21 @@ "directDownloadHint": "또는 해당 설치 프로그램 형식을 직접 다운로드하십시오:", "releaseNotes": "릴리스 노트", "readMore": "더 읽기", - "noAuthLabel": "인증 없음" + "noAuthLabel": "인증 없음", + "recentRequests": "Recent Requests", + "recentRequestsEmpty": "No requests yet.", + "recentRequestsModel": "Model", + "recentRequestsTokens": "In / Out", + "recentRequestsWhen": "When", + "readinessEyebrow": "Get ready to route", + "readinessTitle": "Send your first request", + "readinessSubtitle": "Four small steps. OmniRoute checks readiness as you go.", + "readinessStep1": "Connect a provider", + "readinessStep2": "Configure endpoint authentication", + "readinessStep3": "Copy your endpoint", + "readinessStep4": "Send a test request", + "readinessContinue": "Continue setup", + "readinessDismiss": "Dismiss for now" }, "analytics": { "title": "분석", @@ -2901,7 +2923,8 @@ "omp": "Oh My Pi 터미널 코딩 에이전트", "letta": "지속성 메모리 및 도구 사용 기능이 포함된 Letta CLI 에이전트", "warp": "사용자 정의 제공자 지원 기능이 포함된 Warp AI 터미널", - "agent-deck": "Agent Deck 다중 에이전트 오케스트레이터" + "agent-deck": "Agent Deck 다중 에이전트 오케스트레이터", + "prime-agent": "Prime Agent — self-improving RLM coding harness with OpenAI-compatible provider support" }, "guides": { "cursor": { @@ -4133,7 +4156,10 @@ "notionIntegrationHelp": "내부 통합을 생성합니다.", "notionIntegrationToken": "Notion 내부 통합 토큰", "notionNotConnected": "연결되지 않음", - "notionTokenConfigured": "토큰이 구성되었습니다. Notion 도구는 MCP를 통해 사용할 수 있습니다." + "notionTokenConfigured": "토큰이 구성되었습니다. Notion 도구는 MCP를 통해 사용할 수 있습니다.", + "subtitle": "Use the OpenAI-compatible endpoint with most SDKs and tools.", + "testEndpoint": "Test endpoint →", + "advancedProtocols": "Advanced protocols" }, "endpoints": { "tabProxy": "엔드포인트 프록시", @@ -4716,7 +4742,14 @@ "issueCount": "{count}개 이슈", "score": "점수", "lastRequest": "최근 요청", - "lastError": "최근 오류" + "lastError": "최근 오류", + "healthVerdictReady": "OmniRoute is ready", + "healthVerdictActionRequired": "Action required to restore full operation", + "healthVerdictCoolingDown": "Cooling down after recent changes", + "healthSubtitle": "System health check", + "advancedDiagnosticsTitle": "Advanced diagnostics", + "hide": "Hide", + "show": "Show" }, "telemetry": { "title": "시스템 원격 측정", @@ -6383,7 +6416,21 @@ "savedModelEndpointSettings": "저장된 모델 엔드포인트 설정", "searchByModelAria": "모델로 검색", "selectSupportedEndpoint": "지원되는 엔드포인트를 최소한 하나 선택하세요.", - "antigravityClientProfileHarness": "Harness / CLI" + "antigravityClientProfileHarness": "Harness / CLI", + "harImportButtonLabel": "Import .har file", + "harImportButtonBusy": "Importing…", + "harImportButtonHint": "Export from DevTools Network tab after sending at least one chat message.", + "harImportStatusValid": "Imported — valid for ~{minutes}m.", + "harImportStatusExpiringSoon": "Imported — valid for only ~{minutes}m more.", + "harImportStatusExpired": "Imported, but this token already expired ({minutes}m ago) — export a fresh HAR.", + "harImportStatusUnknownExpiry": "Imported. Couldn't read its expiry.", + "harImportErrorNotJson": "That file isn't valid JSON — is it really a .har export?", + "harImportErrorNoEntries": "This HAR has no network entries recorded.", + "harImportErrorNoChathubUrl": "No Copilot chat connection found in this HAR. Send at least one chat message in m365.cloud.microsoft before exporting.", + "harImportErrorUnparsableUrl": "Found the chat connection, but couldn't read its URL.", + "harImportErrorMissingFields": "Found the chat connection, but the token was missing from it.", + "harImportErrorReadFailed": "Couldn't read that file.", + "harImportErrorUnknown": "Couldn't extract a credential from that HAR file." }, "settings": { "title": "설정", @@ -8230,7 +8277,19 @@ "cliproxyapiHealth": "건강", "cliproxyapiPort": "포트", "qdrantHost": "호스트", - "qdrantCollection": "컬렉션" + "qdrantCollection": "컬렉션", + "presetAll": "All", + "presetAllDesc": "Show everything", + "presetEssentials": "Essentials", + "presetEssentialsDesc": "Beginner path - Advanced tools stay searchable", + "presetMinimal": "Minimal", + "presetMinimalDesc": "Core pages only", + "presetDeveloper": "Developer", + "presetDeveloperDesc": "Dev & proxy tools", + "presetAdmin": "Admin", + "presetAdminDesc": "Monitoring & audit", + "settingsSidebarTitle": "Sidebar Customization", + "settingsSidebarDesc": "Choose which sidebar items to show. Essentials keeps Advanced tools searchable." }, "contextRtk": { "title": "RTK Engine", @@ -12017,7 +12076,8 @@ "title": "ACP 에이전트", "phrase": "OmniRoute가 실행 백엔드로 생성하는 CLI (역방향 흐름)", "flow": "클라이언트 → OmniRoute → CLI 생성 (stdio/ACP) → 응답", - "seeOther": "보기 →" + "seeOther": "보기 →", + "warning": "Most users can ignore this — use only when an integration requires it." } }, "comparison": { @@ -12841,6 +12901,10 @@ }, "SKILLS_SANDBOX_NETWORK_ENABLED": { "description": "스킬 샌드박스에서 네트워크 액세스를 활성화합니다." + }, + "DISABLE_CONTEXT_WINDOW_CHECKS": { + "label": "Disable Context Window Checks", + "description": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active." } } }, @@ -13413,6 +13477,13 @@ "modelLockouts": "모델 잠금", "count": "연결 수" } + }, + "reassuranceTitle": "Your connections recover automatically", + "reassuranceDetail": "Usually no action is needed. OmniRoute temporarily rests a connection after failures, then safely tries it again.", + "plainStates": { + "healthy": "Requests can be sent", + "coolingDown": "Trying again soon", + "lockedOut": "Needs your attention" } }, "featureFlagCapabilityFilterEnabledDescription": "대상 모델에 필수 기능(비전, 도구, 구조화된 출력, 컨텍스트 창)이 부족할 경우 요청을 발송 전에 거부합니다. 콤보 레이어 호환성 필터를 우회하는 직접 단일 공급자 요청을 보호합니다.", @@ -13850,5 +13921,13 @@ "toolsMismatch": "공급자가 도구 호출을 지원하지 않습니다.", "structuredOutputMismatch": "제공자가 구조화된 출력을 지원하지 않습니다", "contextWindowMismatch": "요청이 공급자 컨텍스트 창을 초과했습니다" + }, + "featureFlagDisableContextWindowChecksDescription": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active.", + "cheaperInferenceSponsorBanner": { + "title": "Cheaper Inference is an OmniRoute Open Source Friend", + "description": "A cost-ranked gateway reselling dozens of frontier models behind one OpenAI-compatible endpoint — routing each request to the cheapest eligible provider, never above list price.", + "cta": "Get an API Key", + "partnerLinkNote": "Partner link", + "dismissAriaLabel": "Dismiss" } } diff --git a/src/i18n/messages/mr.json b/src/i18n/messages/mr.json index d452413465e..93f75dc03fc 100644 --- a/src/i18n/messages/mr.json +++ b/src/i18n/messages/mr.json @@ -974,7 +974,14 @@ "batchFileUsedByCount": "{count, plural, one {# बॅच} other {# बॅचेस}}", "batchFilePreview": "पूर्वावलोकन", "batchFilePreviewTruncated": "पहिल्या {shown} ओळी दाखवत आहे ({total} एकूण ओळी)", - "batchFileDownloadFull": "पूर्ण फाइल डाउनलोड करा" + "batchFileDownloadFull": "पूर्ण फाइल डाउनलोड करा", + "batchHeaderSubtitle": "Run many requests as one job", + "batchStep1": "1 · Upload JSONL", + "batchStep1Desc": "Add requests", + "batchStep2": "2 · Create batch", + "batchStep2Desc": "Run job", + "batchStep3": "3 · Get results", + "batchStep3Desc": "Download output" }, "disabled": "Disabled", "featureFlagOmnirouteEmergencyFallbackDescription": "Route budget-exhausted requests to the emergency free fallback provider/model.", @@ -1293,7 +1300,8 @@ "open": "उघडा", "close": "बंद करा" }, - "noResults": "कोणतेही परिणाम नाहीत" + "noResults": "कोणतेही परिणाम नाहीत", + "trafficInspectorPurpose": "See exactly what your application sends to and receives from AI providers. Works with any OpenAI-compatible client." }, "webhooks": { "title": "वेबहुक", @@ -1856,7 +1864,21 @@ "directDownloadHint": "किंवा संबंधित इन्स्टॉलर फॉरमॅट थेट डाउनलोड करा:", "releaseNotes": "रिलीज नोट्स", "readMore": "अधिक वाचा", - "noAuthLabel": "कोणतीही प्रमाणीकरण नाही" + "noAuthLabel": "कोणतीही प्रमाणीकरण नाही", + "recentRequests": "Recent Requests", + "recentRequestsEmpty": "No requests yet.", + "recentRequestsModel": "Model", + "recentRequestsTokens": "In / Out", + "recentRequestsWhen": "When", + "readinessEyebrow": "Get ready to route", + "readinessTitle": "Send your first request", + "readinessSubtitle": "Four small steps. OmniRoute checks readiness as you go.", + "readinessStep1": "Connect a provider", + "readinessStep2": "Configure endpoint authentication", + "readinessStep3": "Copy your endpoint", + "readinessStep4": "Send a test request", + "readinessContinue": "Continue setup", + "readinessDismiss": "Dismiss for now" }, "analytics": { "title": "Analytics", @@ -2901,7 +2923,8 @@ "omp": "Oh My Pi टर्मिनल कोडिंग एजंट", "letta": "पर्सिस्टंट मेमरी आणि टूल वापरासह Letta CLI एजंट", "warp": "कस्टम प्रोव्हायडर सपोर्टसह Warp AI टर्मिनल", - "agent-deck": "Agent Deck मल्टी-एजंट ऑर्केस्ट्रेटर" + "agent-deck": "Agent Deck मल्टी-एजंट ऑर्केस्ट्रेटर", + "prime-agent": "Prime Agent — self-improving RLM coding harness with OpenAI-compatible provider support" }, "guides": { "cursor": { @@ -4133,7 +4156,10 @@ "notionIntegrationHelp": "आतील एकत्रीकरण तयार करा येथे", "notionIntegrationToken": "Notion आंतरिक एकत्रीकरण टोकन", "notionNotConnected": "कनेक्ट केलेले नाही", - "notionTokenConfigured": "टोकन कॉन्फिगर केले आहे. Notion साधने MCP द्वारे उपलब्ध आहेत." + "notionTokenConfigured": "टोकन कॉन्फिगर केले आहे. Notion साधने MCP द्वारे उपलब्ध आहेत.", + "subtitle": "Use the OpenAI-compatible endpoint with most SDKs and tools.", + "testEndpoint": "Test endpoint →", + "advancedProtocols": "Advanced protocols" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4716,7 +4742,14 @@ "issueCount": "{count} समस्या", "score": "स्कोअर", "lastRequest": "शेवटची विनंती", - "lastError": "शेवटची त्रुटी" + "lastError": "शेवटची त्रुटी", + "healthVerdictReady": "OmniRoute is ready", + "healthVerdictActionRequired": "Action required to restore full operation", + "healthVerdictCoolingDown": "Cooling down after recent changes", + "healthSubtitle": "System health check", + "advancedDiagnosticsTitle": "Advanced diagnostics", + "hide": "Hide", + "show": "Show" }, "telemetry": { "title": "सिस्टम टेलीमेट्री", @@ -6383,7 +6416,21 @@ "savedModelEndpointSettings": "सुरक्षित केलेल्या मॉडेल एंडपॉइंट सेटिंग्ज", "searchByModelAria": "मॉडेलद्वारे शोधा", "selectSupportedEndpoint": "किमान एक समर्थित एंडपॉइंट निवडा", - "antigravityClientProfileHarness": "Harness / CLI" + "antigravityClientProfileHarness": "Harness / CLI", + "harImportButtonLabel": "Import .har file", + "harImportButtonBusy": "Importing…", + "harImportButtonHint": "Export from DevTools Network tab after sending at least one chat message.", + "harImportStatusValid": "Imported — valid for ~{minutes}m.", + "harImportStatusExpiringSoon": "Imported — valid for only ~{minutes}m more.", + "harImportStatusExpired": "Imported, but this token already expired ({minutes}m ago) — export a fresh HAR.", + "harImportStatusUnknownExpiry": "Imported. Couldn't read its expiry.", + "harImportErrorNotJson": "That file isn't valid JSON — is it really a .har export?", + "harImportErrorNoEntries": "This HAR has no network entries recorded.", + "harImportErrorNoChathubUrl": "No Copilot chat connection found in this HAR. Send at least one chat message in m365.cloud.microsoft before exporting.", + "harImportErrorUnparsableUrl": "Found the chat connection, but couldn't read its URL.", + "harImportErrorMissingFields": "Found the chat connection, but the token was missing from it.", + "harImportErrorReadFailed": "Couldn't read that file.", + "harImportErrorUnknown": "Couldn't extract a credential from that HAR file." }, "settings": { "title": "Settings", @@ -8230,7 +8277,19 @@ "cliproxyapiHealth": "आरोग्य", "cliproxyapiPort": "पोर्ट", "qdrantHost": "होस्ट", - "qdrantCollection": "संग्रह" + "qdrantCollection": "संग्रह", + "presetAll": "All", + "presetAllDesc": "Show everything", + "presetEssentials": "Essentials", + "presetEssentialsDesc": "Beginner path - Advanced tools stay searchable", + "presetMinimal": "Minimal", + "presetMinimalDesc": "Core pages only", + "presetDeveloper": "Developer", + "presetDeveloperDesc": "Dev & proxy tools", + "presetAdmin": "Admin", + "presetAdminDesc": "Monitoring & audit", + "settingsSidebarTitle": "Sidebar Customization", + "settingsSidebarDesc": "Choose which sidebar items to show. Essentials keeps Advanced tools searchable." }, "contextRtk": { "title": "RTK Engine", @@ -12017,7 +12076,8 @@ "title": "ACP एजंट्स", "phrase": "OmniRoute एक्झिक्यूशन बॅकएंड म्हणून स्पॉन करत असलेले CLIs (रिव्हर्स फ्लो)", "flow": "क्लायंट → OmniRoute → spawn CLI (stdio/ACP) → रिस्पॉन्स", - "seeOther": "पहा →" + "seeOther": "पहा →", + "warning": "Most users can ignore this — use only when an integration requires it." } }, "comparison": { @@ -12841,6 +12901,10 @@ }, "SKILLS_SANDBOX_NETWORK_ENABLED": { "description": "स्किल्स सँडबॉक्समध्ये नेटवर्क ॲक्सेस सक्षम करा." + }, + "DISABLE_CONTEXT_WINDOW_CHECKS": { + "label": "Disable Context Window Checks", + "description": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active." } } }, @@ -13413,6 +13477,13 @@ "modelLockouts": "मॉडेल लॉकआउट", "count": "कनेक्शन संख्या" } + }, + "reassuranceTitle": "Your connections recover automatically", + "reassuranceDetail": "Usually no action is needed. OmniRoute temporarily rests a connection after failures, then safely tries it again.", + "plainStates": { + "healthy": "Requests can be sent", + "coolingDown": "Trying again soon", + "lockedOut": "Needs your attention" } }, "featureFlagCapabilityFilterEnabledDescription": "डिस्पॅच करण्यापूर्वी विनंत्या नाकारल्या जातात जेव्हा लक्ष्य मॉडेल आवश्यक क्षमतांचा अभाव असतो (दृष्टी, साधने, संरचित आउटपुट, संदर्भ विंडो). कॉम्बो-लेयर सुसंगतता फिल्टरला बायपास करणाऱ्या थेट एकल-प्रदात्याच्या विनंत्यांचे संरक्षण करते.", @@ -13850,5 +13921,13 @@ "toolsMismatch": "प्रदायक साधन कॉलिंगला समर्थन करत नाही", "structuredOutputMismatch": "प्रदायक संरचित आउटपुटला समर्थन करत नाही", "contextWindowMismatch": "विनंती प्रदाता संदर्भ विंडो ओलांडते" + }, + "featureFlagDisableContextWindowChecksDescription": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active.", + "cheaperInferenceSponsorBanner": { + "title": "Cheaper Inference is an OmniRoute Open Source Friend", + "description": "A cost-ranked gateway reselling dozens of frontier models behind one OpenAI-compatible endpoint — routing each request to the cheapest eligible provider, never above list price.", + "cta": "Get an API Key", + "partnerLinkNote": "Partner link", + "dismissAriaLabel": "Dismiss" } } diff --git a/src/i18n/messages/ms.json b/src/i18n/messages/ms.json index 7c5e7bce802..236bcdc94e8 100644 --- a/src/i18n/messages/ms.json +++ b/src/i18n/messages/ms.json @@ -974,7 +974,14 @@ "batchFileUsedByCount": "Digunakan oleh {count, plural, one {# batch} other {# batches}}", "batchFilePreview": "Pratonton", "batchFilePreviewTruncated": "Menunjukkan {shown} baris pertama ({total} jumlah baris)", - "batchFileDownloadFull": "Muat Turun Fail Penuh" + "batchFileDownloadFull": "Muat Turun Fail Penuh", + "batchHeaderSubtitle": "Run many requests as one job", + "batchStep1": "1 · Upload JSONL", + "batchStep1Desc": "Add requests", + "batchStep2": "2 · Create batch", + "batchStep2Desc": "Run job", + "batchStep3": "3 · Get results", + "batchStep3Desc": "Download output" }, "disabled": "Disabled", "featureFlagOmnirouteEmergencyFallbackDescription": "Route budget-exhausted requests to the emergency free fallback provider/model.", @@ -1293,7 +1300,8 @@ "open": "buka", "close": "tutup" }, - "noResults": "Tiada hasil" + "noResults": "Tiada hasil", + "trafficInspectorPurpose": "See exactly what your application sends to and receives from AI providers. Works with any OpenAI-compatible client." }, "webhooks": { "title": "Webhooks", @@ -1856,7 +1864,21 @@ "directDownloadHint": "Atau muat turun format pemasang yang sesuai secara langsung:", "releaseNotes": "Nota Rilisan", "readMore": "Baca Lagi", - "noAuthLabel": "Tiada Auth" + "noAuthLabel": "Tiada Auth", + "recentRequests": "Recent Requests", + "recentRequestsEmpty": "No requests yet.", + "recentRequestsModel": "Model", + "recentRequestsTokens": "In / Out", + "recentRequestsWhen": "When", + "readinessEyebrow": "Get ready to route", + "readinessTitle": "Send your first request", + "readinessSubtitle": "Four small steps. OmniRoute checks readiness as you go.", + "readinessStep1": "Connect a provider", + "readinessStep2": "Configure endpoint authentication", + "readinessStep3": "Copy your endpoint", + "readinessStep4": "Send a test request", + "readinessContinue": "Continue setup", + "readinessDismiss": "Dismiss for now" }, "analytics": { "title": "Analitis", @@ -2901,7 +2923,8 @@ "omp": "Ejen pengekodan terminal Oh My Pi", "letta": "Ejen CLI Letta dengan memori berterusan dan penggunaan alat", "warp": "Terminal Warp AI dengan sokongan penyedia tersuai", - "agent-deck": "Orkestrator berbilang ejen Agent Deck" + "agent-deck": "Orkestrator berbilang ejen Agent Deck", + "prime-agent": "Prime Agent — self-improving RLM coding harness with OpenAI-compatible provider support" }, "guides": { "cursor": { @@ -4133,7 +4156,10 @@ "notionIntegrationHelp": "Buat Integrasi Dalaman di", "notionIntegrationToken": "Token Integrasi Dalaman Notion", "notionNotConnected": "Tidak disambungkan", - "notionTokenConfigured": "Token telah dikonfigurasikan. Alat Notion boleh didapati melalui MCP." + "notionTokenConfigured": "Token telah dikonfigurasikan. Alat Notion boleh didapati melalui MCP.", + "subtitle": "Use the OpenAI-compatible endpoint with most SDKs and tools.", + "testEndpoint": "Test endpoint →", + "advancedProtocols": "Advanced protocols" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4716,7 +4742,14 @@ "issueCount": "{count} isu", "score": "Skor", "lastRequest": "Permintaan terakhir", - "lastError": "Ralat terakhir" + "lastError": "Ralat terakhir", + "healthVerdictReady": "OmniRoute is ready", + "healthVerdictActionRequired": "Action required to restore full operation", + "healthVerdictCoolingDown": "Cooling down after recent changes", + "healthSubtitle": "System health check", + "advancedDiagnosticsTitle": "Advanced diagnostics", + "hide": "Hide", + "show": "Show" }, "telemetry": { "title": "Sistem Telemetri", @@ -6383,7 +6416,21 @@ "savedModelEndpointSettings": "Tetapan titik akhir model yang disimpan", "searchByModelAria": "Cari mengikut model", "selectSupportedEndpoint": "Pilih sekurang-kurangnya satu titik akhir yang disokong", - "antigravityClientProfileHarness": "Harness / CLI" + "antigravityClientProfileHarness": "Harness / CLI", + "harImportButtonLabel": "Import .har file", + "harImportButtonBusy": "Importing…", + "harImportButtonHint": "Export from DevTools Network tab after sending at least one chat message.", + "harImportStatusValid": "Imported — valid for ~{minutes}m.", + "harImportStatusExpiringSoon": "Imported — valid for only ~{minutes}m more.", + "harImportStatusExpired": "Imported, but this token already expired ({minutes}m ago) — export a fresh HAR.", + "harImportStatusUnknownExpiry": "Imported. Couldn't read its expiry.", + "harImportErrorNotJson": "That file isn't valid JSON — is it really a .har export?", + "harImportErrorNoEntries": "This HAR has no network entries recorded.", + "harImportErrorNoChathubUrl": "No Copilot chat connection found in this HAR. Send at least one chat message in m365.cloud.microsoft before exporting.", + "harImportErrorUnparsableUrl": "Found the chat connection, but couldn't read its URL.", + "harImportErrorMissingFields": "Found the chat connection, but the token was missing from it.", + "harImportErrorReadFailed": "Couldn't read that file.", + "harImportErrorUnknown": "Couldn't extract a credential from that HAR file." }, "settings": { "title": "tetapan", @@ -8230,7 +8277,19 @@ "cliproxyapiHealth": "Kesihatan", "cliproxyapiPort": "Pelabuhan", "qdrantHost": "Hos", - "qdrantCollection": "Koleksi" + "qdrantCollection": "Koleksi", + "presetAll": "All", + "presetAllDesc": "Show everything", + "presetEssentials": "Essentials", + "presetEssentialsDesc": "Beginner path - Advanced tools stay searchable", + "presetMinimal": "Minimal", + "presetMinimalDesc": "Core pages only", + "presetDeveloper": "Developer", + "presetDeveloperDesc": "Dev & proxy tools", + "presetAdmin": "Admin", + "presetAdminDesc": "Monitoring & audit", + "settingsSidebarTitle": "Sidebar Customization", + "settingsSidebarDesc": "Choose which sidebar items to show. Essentials keeps Advanced tools searchable." }, "contextRtk": { "title": "RTK Engine", @@ -12017,7 +12076,8 @@ "title": "Ejen ACP", "phrase": "CLI yang dimulakan oleh OmniRoute sebagai backend pelaksanaan (aliran songsang)", "flow": "Klien → OmniRoute → mulakan CLI (stdio/ACP) → respons", - "seeOther": "Lihat →" + "seeOther": "Lihat →", + "warning": "Most users can ignore this — use only when an integration requires it." } }, "comparison": { @@ -12841,6 +12901,10 @@ }, "SKILLS_SANDBOX_NETWORK_ENABLED": { "description": "Dayakan akses rangkaian dalam kotak pasir kemahiran." + }, + "DISABLE_CONTEXT_WINDOW_CHECKS": { + "label": "Disable Context Window Checks", + "description": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active." } } }, @@ -13413,6 +13477,13 @@ "modelLockouts": "Penguncian Model", "count": "Bilangan Sambungan" } + }, + "reassuranceTitle": "Your connections recover automatically", + "reassuranceDetail": "Usually no action is needed. OmniRoute temporarily rests a connection after failures, then safely tries it again.", + "plainStates": { + "healthy": "Requests can be sent", + "coolingDown": "Trying again soon", + "lockedOut": "Needs your attention" } }, "featureFlagCapabilityFilterEnabledDescription": "Tolak permintaan sebelum penghantaran apabila model sasaran tidak mempunyai keupayaan yang diperlukan (penglihatan, alat, output terstruktur, tetingkap konteks). Melindungi permintaan penyedia tunggal secara langsung yang mengabaikan penapis keserasian lapisan gabungan.", @@ -13850,5 +13921,13 @@ "toolsMismatch": "Penyedia tidak menyokong panggilan alat", "structuredOutputMismatch": "Penyedia tidak menyokong output berstruktur", "contextWindowMismatch": "Permintaan melebihi tetingkap konteks penyedia" + }, + "featureFlagDisableContextWindowChecksDescription": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active.", + "cheaperInferenceSponsorBanner": { + "title": "Cheaper Inference is an OmniRoute Open Source Friend", + "description": "A cost-ranked gateway reselling dozens of frontier models behind one OpenAI-compatible endpoint — routing each request to the cheapest eligible provider, never above list price.", + "cta": "Get an API Key", + "partnerLinkNote": "Partner link", + "dismissAriaLabel": "Dismiss" } } diff --git a/src/i18n/messages/nl.json b/src/i18n/messages/nl.json index ab9fb2f2256..9586fccca30 100644 --- a/src/i18n/messages/nl.json +++ b/src/i18n/messages/nl.json @@ -974,7 +974,14 @@ "batchFileUsedByCount": "Gebruikt door {count, plural, one {# batch} other {# batches}}", "batchFilePreview": "Voorbeeld", "batchFilePreviewTruncated": "Eerste {shown} regels weergeven ({total} totaal regels)", - "batchFileDownloadFull": "Download Volledig Bestand" + "batchFileDownloadFull": "Download Volledig Bestand", + "batchHeaderSubtitle": "Run many requests as one job", + "batchStep1": "1 · Upload JSONL", + "batchStep1Desc": "Add requests", + "batchStep2": "2 · Create batch", + "batchStep2Desc": "Run job", + "batchStep3": "3 · Get results", + "batchStep3Desc": "Download output" }, "disabled": "Uitgeschakeld", "featureFlagOmnirouteEmergencyFallbackDescription": "Routeer verzoeken met uitgeput budget naar de gratis nood-fallbackprovider/-model.", @@ -1293,7 +1300,8 @@ "open": "open", "close": "sluiten" }, - "noResults": "Geen resultaten" + "noResults": "Geen resultaten", + "trafficInspectorPurpose": "See exactly what your application sends to and receives from AI providers. Works with any OpenAI-compatible client." }, "webhooks": { "title": "Webhaken", @@ -1856,7 +1864,21 @@ "directDownloadHint": "Of download het respectieve installerformaat direct:", "releaseNotes": "Release-opmerkingen", "readMore": "Lees Meer", - "noAuthLabel": "Geen Auth" + "noAuthLabel": "Geen Auth", + "recentRequests": "Recent Requests", + "recentRequestsEmpty": "No requests yet.", + "recentRequestsModel": "Model", + "recentRequestsTokens": "In / Out", + "recentRequestsWhen": "When", + "readinessEyebrow": "Get ready to route", + "readinessTitle": "Send your first request", + "readinessSubtitle": "Four small steps. OmniRoute checks readiness as you go.", + "readinessStep1": "Connect a provider", + "readinessStep2": "Configure endpoint authentication", + "readinessStep3": "Copy your endpoint", + "readinessStep4": "Send a test request", + "readinessContinue": "Continue setup", + "readinessDismiss": "Dismiss for now" }, "analytics": { "title": "Analyses", @@ -2901,7 +2923,8 @@ "omp": "Oh My Pi terminal-codeeragent", "letta": "Letta CLI-agent met persistent geheugen en toolgebruik", "warp": "Warp AI-terminal met ondersteuning voor aangepaste providers", - "agent-deck": "Agent Deck multi-agent-orchestrator" + "agent-deck": "Agent Deck multi-agent-orchestrator", + "prime-agent": "Prime Agent — self-improving RLM coding harness with OpenAI-compatible provider support" }, "guides": { "cursor": { @@ -4133,7 +4156,10 @@ "notionIntegrationHelp": "Maak een interne integratie aan bij", "notionIntegrationToken": "Notion Interne Integratietoken", "notionNotConnected": "Niet verbonden", - "notionTokenConfigured": "Token geconfigureerd. Notion-tools zijn beschikbaar via MCP." + "notionTokenConfigured": "Token geconfigureerd. Notion-tools zijn beschikbaar via MCP.", + "subtitle": "Use the OpenAI-compatible endpoint with most SDKs and tools.", + "testEndpoint": "Test endpoint →", + "advancedProtocols": "Advanced protocols" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4716,7 +4742,14 @@ "issueCount": "{count} problemen", "score": "Score", "lastRequest": "Laatste verzoek", - "lastError": "Laatste fout" + "lastError": "Laatste fout", + "healthVerdictReady": "OmniRoute is ready", + "healthVerdictActionRequired": "Action required to restore full operation", + "healthVerdictCoolingDown": "Cooling down after recent changes", + "healthSubtitle": "System health check", + "advancedDiagnosticsTitle": "Advanced diagnostics", + "hide": "Hide", + "show": "Show" }, "telemetry": { "title": "Systeemtelemetrie", @@ -6383,7 +6416,21 @@ "savedModelEndpointSettings": "Instellingen voor opgeslagen model-eindpunt", "searchByModelAria": "Zoeken op model", "selectSupportedEndpoint": "Selecteer ten minste één ondersteunde eindpunt", - "antigravityClientProfileHarness": "Harness / CLI" + "antigravityClientProfileHarness": "Harness / CLI", + "harImportButtonLabel": "Import .har file", + "harImportButtonBusy": "Importing…", + "harImportButtonHint": "Export from DevTools Network tab after sending at least one chat message.", + "harImportStatusValid": "Imported — valid for ~{minutes}m.", + "harImportStatusExpiringSoon": "Imported — valid for only ~{minutes}m more.", + "harImportStatusExpired": "Imported, but this token already expired ({minutes}m ago) — export a fresh HAR.", + "harImportStatusUnknownExpiry": "Imported. Couldn't read its expiry.", + "harImportErrorNotJson": "That file isn't valid JSON — is it really a .har export?", + "harImportErrorNoEntries": "This HAR has no network entries recorded.", + "harImportErrorNoChathubUrl": "No Copilot chat connection found in this HAR. Send at least one chat message in m365.cloud.microsoft before exporting.", + "harImportErrorUnparsableUrl": "Found the chat connection, but couldn't read its URL.", + "harImportErrorMissingFields": "Found the chat connection, but the token was missing from it.", + "harImportErrorReadFailed": "Couldn't read that file.", + "harImportErrorUnknown": "Couldn't extract a credential from that HAR file." }, "settings": { "title": "Instellingen", @@ -8230,7 +8277,19 @@ "cliproxyapiHealth": "Gezondheid", "cliproxyapiPort": "Haven", "qdrantHost": "Host", - "qdrantCollection": "Verzameling" + "qdrantCollection": "Verzameling", + "presetAll": "All", + "presetAllDesc": "Show everything", + "presetEssentials": "Essentials", + "presetEssentialsDesc": "Beginner path - Advanced tools stay searchable", + "presetMinimal": "Minimal", + "presetMinimalDesc": "Core pages only", + "presetDeveloper": "Developer", + "presetDeveloperDesc": "Dev & proxy tools", + "presetAdmin": "Admin", + "presetAdminDesc": "Monitoring & audit", + "settingsSidebarTitle": "Sidebar Customization", + "settingsSidebarDesc": "Choose which sidebar items to show. Essentials keeps Advanced tools searchable." }, "contextRtk": { "title": "RTK Engine", @@ -12017,7 +12076,8 @@ "title": "ACP Agents", "phrase": "CLI's die OmniRoute start als uitvoeringsbackend (omgekeerde flow)", "flow": "Client → OmniRoute → CLI spawnen (stdio/ACP) → respons", - "seeOther": "Bekijk →" + "seeOther": "Bekijk →", + "warning": "Most users can ignore this — use only when an integration requires it." } }, "comparison": { @@ -12841,6 +12901,10 @@ }, "SKILLS_SANDBOX_NETWORK_ENABLED": { "description": "Schakel netwerktoegang in de skills-sandbox in." + }, + "DISABLE_CONTEXT_WINDOW_CHECKS": { + "label": "Disable Context Window Checks", + "description": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active." } } }, @@ -13413,6 +13477,13 @@ "modelLockouts": "Modelvergrendelingen", "count": "Aantal Verbindingen" } + }, + "reassuranceTitle": "Your connections recover automatically", + "reassuranceDetail": "Usually no action is needed. OmniRoute temporarily rests a connection after failures, then safely tries it again.", + "plainStates": { + "healthy": "Requests can be sent", + "coolingDown": "Trying again soon", + "lockedOut": "Needs your attention" } }, "featureFlagCapabilityFilterEnabledDescription": "Weiger verzoeken vóór verzending wanneer het doellmodel ontbrekende vereiste mogelijkheden heeft (zicht, tools, gestructureerde output, contextvenster). Beschermt directe verzoeken van een enkele aanbieder die de compatibiliteitsfilter van de comb-laag omzeilen.", @@ -13850,5 +13921,13 @@ "toolsMismatch": "Provider ondersteunt het aanroepen van tools niet", "structuredOutputMismatch": "Provider ondersteunt geen gestructureerde uitvoer", "contextWindowMismatch": "Verzoek overschrijdt de contextvenster van de provider" + }, + "featureFlagDisableContextWindowChecksDescription": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active.", + "cheaperInferenceSponsorBanner": { + "title": "Cheaper Inference is an OmniRoute Open Source Friend", + "description": "A cost-ranked gateway reselling dozens of frontier models behind one OpenAI-compatible endpoint — routing each request to the cheapest eligible provider, never above list price.", + "cta": "Get an API Key", + "partnerLinkNote": "Partner link", + "dismissAriaLabel": "Dismiss" } } diff --git a/src/i18n/messages/no.json b/src/i18n/messages/no.json index e51d66b5d45..ed4b532e5e7 100644 --- a/src/i18n/messages/no.json +++ b/src/i18n/messages/no.json @@ -974,7 +974,14 @@ "batchFileUsedByCount": "Brukt av {count, plural, one {# batch} other {# batches}}", "batchFilePreview": "Forhåndsvisning", "batchFilePreviewTruncated": "Viser de første {shown} linjene ({total} totalt linjer)", - "batchFileDownloadFull": "Last ned full fil" + "batchFileDownloadFull": "Last ned full fil", + "batchHeaderSubtitle": "Run many requests as one job", + "batchStep1": "1 · Upload JSONL", + "batchStep1Desc": "Add requests", + "batchStep2": "2 · Create batch", + "batchStep2Desc": "Run job", + "batchStep3": "3 · Get results", + "batchStep3Desc": "Download output" }, "disabled": "Deaktivert", "featureFlagOmnirouteEmergencyFallbackDescription": "Rut forespørsler med oppbrukt budsjett til gratis reserveleverandør/-modell for nødstilfeller.", @@ -1293,7 +1300,8 @@ "open": "åpne", "close": "lukk" }, - "noResults": "Ingen resultater" + "noResults": "Ingen resultater", + "trafficInspectorPurpose": "See exactly what your application sends to and receives from AI providers. Works with any OpenAI-compatible client." }, "webhooks": { "title": "Webhooks", @@ -1856,7 +1864,21 @@ "directDownloadHint": "Eller last ned den respektive installasjonsformatet direkte:", "releaseNotes": "Utgivelsesnotater", "readMore": "Les Mer", - "noAuthLabel": "Ingen autentisering" + "noAuthLabel": "Ingen autentisering", + "recentRequests": "Recent Requests", + "recentRequestsEmpty": "No requests yet.", + "recentRequestsModel": "Model", + "recentRequestsTokens": "In / Out", + "recentRequestsWhen": "When", + "readinessEyebrow": "Get ready to route", + "readinessTitle": "Send your first request", + "readinessSubtitle": "Four small steps. OmniRoute checks readiness as you go.", + "readinessStep1": "Connect a provider", + "readinessStep2": "Configure endpoint authentication", + "readinessStep3": "Copy your endpoint", + "readinessStep4": "Send a test request", + "readinessContinue": "Continue setup", + "readinessDismiss": "Dismiss for now" }, "analytics": { "title": "Analytics", @@ -2901,7 +2923,8 @@ "omp": "Oh My Pi terminal-kodingsagent", "letta": "Letta CLI-agent med vedvarende minne og verktøybruk", "warp": "Warp AI-terminal med støtte for tilpasset leverandør", - "agent-deck": "Agent Deck multi-agent-orkestrator" + "agent-deck": "Agent Deck multi-agent-orkestrator", + "prime-agent": "Prime Agent — self-improving RLM coding harness with OpenAI-compatible provider support" }, "guides": { "cursor": { @@ -4133,7 +4156,10 @@ "notionIntegrationHelp": "Opprett en intern integrasjon på", "notionIntegrationToken": "Notion Intern Integrasjonstoken", "notionNotConnected": "Ikke tilkoblet", - "notionTokenConfigured": "Token konfigurert. Notion-verktøy er tilgjengelige via MCP." + "notionTokenConfigured": "Token konfigurert. Notion-verktøy er tilgjengelige via MCP.", + "subtitle": "Use the OpenAI-compatible endpoint with most SDKs and tools.", + "testEndpoint": "Test endpoint →", + "advancedProtocols": "Advanced protocols" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4716,7 +4742,14 @@ "issueCount": "{count} problemer", "score": "Score", "lastRequest": "Siste forespørsel", - "lastError": "Siste feil" + "lastError": "Siste feil", + "healthVerdictReady": "OmniRoute is ready", + "healthVerdictActionRequired": "Action required to restore full operation", + "healthVerdictCoolingDown": "Cooling down after recent changes", + "healthSubtitle": "System health check", + "advancedDiagnosticsTitle": "Advanced diagnostics", + "hide": "Hide", + "show": "Show" }, "telemetry": { "title": "Systemtelemetri", @@ -6383,7 +6416,21 @@ "savedModelEndpointSettings": "Innstillinger for lagrede modellendepunkter", "searchByModelAria": "Søk etter modell", "selectSupportedEndpoint": "Velg minst ett støttet endepunkt", - "antigravityClientProfileHarness": "Harness / CLI" + "antigravityClientProfileHarness": "Harness / CLI", + "harImportButtonLabel": "Import .har file", + "harImportButtonBusy": "Importing…", + "harImportButtonHint": "Export from DevTools Network tab after sending at least one chat message.", + "harImportStatusValid": "Imported — valid for ~{minutes}m.", + "harImportStatusExpiringSoon": "Imported — valid for only ~{minutes}m more.", + "harImportStatusExpired": "Imported, but this token already expired ({minutes}m ago) — export a fresh HAR.", + "harImportStatusUnknownExpiry": "Imported. Couldn't read its expiry.", + "harImportErrorNotJson": "That file isn't valid JSON — is it really a .har export?", + "harImportErrorNoEntries": "This HAR has no network entries recorded.", + "harImportErrorNoChathubUrl": "No Copilot chat connection found in this HAR. Send at least one chat message in m365.cloud.microsoft before exporting.", + "harImportErrorUnparsableUrl": "Found the chat connection, but couldn't read its URL.", + "harImportErrorMissingFields": "Found the chat connection, but the token was missing from it.", + "harImportErrorReadFailed": "Couldn't read that file.", + "harImportErrorUnknown": "Couldn't extract a credential from that HAR file." }, "settings": { "title": "Innstillinger", @@ -8230,7 +8277,19 @@ "cliproxyapiHealth": "Helse", "cliproxyapiPort": "Port", "qdrantHost": "Vert", - "qdrantCollection": "Samling" + "qdrantCollection": "Samling", + "presetAll": "All", + "presetAllDesc": "Show everything", + "presetEssentials": "Essentials", + "presetEssentialsDesc": "Beginner path - Advanced tools stay searchable", + "presetMinimal": "Minimal", + "presetMinimalDesc": "Core pages only", + "presetDeveloper": "Developer", + "presetDeveloperDesc": "Dev & proxy tools", + "presetAdmin": "Admin", + "presetAdminDesc": "Monitoring & audit", + "settingsSidebarTitle": "Sidebar Customization", + "settingsSidebarDesc": "Choose which sidebar items to show. Essentials keeps Advanced tools searchable." }, "contextRtk": { "title": "RTK Engine", @@ -12017,7 +12076,8 @@ "title": "ACP-agenter", "phrase": "CLI-er som OmniRoute starter som kjørings-backend (omvendt flyt)", "flow": "Klient → OmniRoute → start CLI (stdio/ACP) → respons", - "seeOther": "Se →" + "seeOther": "Se →", + "warning": "Most users can ignore this — use only when an integration requires it." } }, "comparison": { @@ -12841,6 +12901,10 @@ }, "SKILLS_SANDBOX_NETWORK_ENABLED": { "description": "Aktiver nettverkstilgang i ferdighetssandkassen." + }, + "DISABLE_CONTEXT_WINDOW_CHECKS": { + "label": "Disable Context Window Checks", + "description": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active." } } }, @@ -13413,6 +13477,13 @@ "modelLockouts": "Modelllåsinger", "count": "Antall Tilkoblinger" } + }, + "reassuranceTitle": "Your connections recover automatically", + "reassuranceDetail": "Usually no action is needed. OmniRoute temporarily rests a connection after failures, then safely tries it again.", + "plainStates": { + "healthy": "Requests can be sent", + "coolingDown": "Trying again soon", + "lockedOut": "Needs your attention" } }, "featureFlagCapabilityFilterEnabledDescription": "Avvis forespørselene før utsendelse når målmodellen mangler nødvendige funksjoner (visjon, verktøy, strukturert utdata, kontekstvindu). Beskytter direkte forespørseler fra enkeltleverandører som omgår kombinasjonslagets kompatibilitetsfilter.", @@ -13850,5 +13921,13 @@ "toolsMismatch": "Leverandøren støtter ikke verktøykall.", "structuredOutputMismatch": "Leverandøren støtter ikke strukturert utdata", "contextWindowMismatch": "Forespørselen overskrider leverandørens kontekstvindu" + }, + "featureFlagDisableContextWindowChecksDescription": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active.", + "cheaperInferenceSponsorBanner": { + "title": "Cheaper Inference is an OmniRoute Open Source Friend", + "description": "A cost-ranked gateway reselling dozens of frontier models behind one OpenAI-compatible endpoint — routing each request to the cheapest eligible provider, never above list price.", + "cta": "Get an API Key", + "partnerLinkNote": "Partner link", + "dismissAriaLabel": "Dismiss" } } diff --git a/src/i18n/messages/phi.json b/src/i18n/messages/phi.json index 1ddf0eb55aa..b79a4d21462 100644 --- a/src/i18n/messages/phi.json +++ b/src/i18n/messages/phi.json @@ -974,7 +974,14 @@ "batchFileUsedByCount": "Ginagamit ng {count, plural, one {# batch} other {# batches}}", "batchFilePreview": "I-preview", "batchFilePreviewTruncated": "Ipinapakita ang unang {shown} linya ({total} kabuuang linya)", - "batchFileDownloadFull": "I-download ang Buong File" + "batchFileDownloadFull": "I-download ang Buong File", + "batchHeaderSubtitle": "Run many requests as one job", + "batchStep1": "1 · Upload JSONL", + "batchStep1Desc": "Add requests", + "batchStep2": "2 · Create batch", + "batchStep2Desc": "Run job", + "batchStep3": "3 · Get results", + "batchStep3Desc": "Download output" }, "disabled": "Naka-disable", "featureFlagOmnirouteEmergencyFallbackDescription": "I-route ang mga request na naubusan ng budget sa emergency free fallback provider/model.", @@ -1293,7 +1300,8 @@ "open": "buksan", "close": "isara" }, - "noResults": "Walang resulta" + "noResults": "Walang resulta", + "trafficInspectorPurpose": "See exactly what your application sends to and receives from AI providers. Works with any OpenAI-compatible client." }, "webhooks": { "title": "Mga Webhook", @@ -1856,7 +1864,21 @@ "directDownloadHint": "O i-download ang kaukulang format ng installer nang direkta:", "releaseNotes": "Mga Tala ng Paglabas", "readMore": "Magbasa Pa Nang Higit", - "noAuthLabel": "Walang Awtorisasyon" + "noAuthLabel": "Walang Awtorisasyon", + "recentRequests": "Recent Requests", + "recentRequestsEmpty": "No requests yet.", + "recentRequestsModel": "Model", + "recentRequestsTokens": "In / Out", + "recentRequestsWhen": "When", + "readinessEyebrow": "Get ready to route", + "readinessTitle": "Send your first request", + "readinessSubtitle": "Four small steps. OmniRoute checks readiness as you go.", + "readinessStep1": "Connect a provider", + "readinessStep2": "Configure endpoint authentication", + "readinessStep3": "Copy your endpoint", + "readinessStep4": "Send a test request", + "readinessContinue": "Continue setup", + "readinessDismiss": "Dismiss for now" }, "analytics": { "title": "Analytics", @@ -2901,7 +2923,8 @@ "omp": "Oh My Pi terminal coding agent", "letta": "Letta CLI agent na may persistent memory at paggamit ng tool", "warp": "Warp AI terminal na may suporta sa custom provider", - "agent-deck": "Agent Deck multi-agent orchestrator" + "agent-deck": "Agent Deck multi-agent orchestrator", + "prime-agent": "Prime Agent — self-improving RLM coding harness with OpenAI-compatible provider support" }, "guides": { "cursor": { @@ -4133,7 +4156,10 @@ "notionIntegrationHelp": "Gumawa ng Panloob na Pagsasama sa", "notionIntegrationToken": "Notion Internal Integration Token", "notionNotConnected": "Hindi nakakonekta", - "notionTokenConfigured": "Naka-configure ang token. Ang mga tool ng Notion ay available sa pamamagitan ng MCP." + "notionTokenConfigured": "Naka-configure ang token. Ang mga tool ng Notion ay available sa pamamagitan ng MCP.", + "subtitle": "Use the OpenAI-compatible endpoint with most SDKs and tools.", + "testEndpoint": "Test endpoint →", + "advancedProtocols": "Advanced protocols" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4716,7 +4742,14 @@ "issueCount": "{count} isyu", "score": "Iskor", "lastRequest": "Huling kahilingan", - "lastError": "Huling error" + "lastError": "Huling error", + "healthVerdictReady": "OmniRoute is ready", + "healthVerdictActionRequired": "Action required to restore full operation", + "healthVerdictCoolingDown": "Cooling down after recent changes", + "healthSubtitle": "System health check", + "advancedDiagnosticsTitle": "Advanced diagnostics", + "hide": "Hide", + "show": "Show" }, "telemetry": { "title": "System Telemetry", @@ -6383,7 +6416,21 @@ "savedModelEndpointSettings": "Naka-save na mga setting ng endpoint ng modelo", "searchByModelAria": "Maghanap ayon sa modelo", "selectSupportedEndpoint": "Pumili ng hindi bababa sa isang sinusuportahang endpoint", - "antigravityClientProfileHarness": "Harness / CLI" + "antigravityClientProfileHarness": "Harness / CLI", + "harImportButtonLabel": "Import .har file", + "harImportButtonBusy": "Importing…", + "harImportButtonHint": "Export from DevTools Network tab after sending at least one chat message.", + "harImportStatusValid": "Imported — valid for ~{minutes}m.", + "harImportStatusExpiringSoon": "Imported — valid for only ~{minutes}m more.", + "harImportStatusExpired": "Imported, but this token already expired ({minutes}m ago) — export a fresh HAR.", + "harImportStatusUnknownExpiry": "Imported. Couldn't read its expiry.", + "harImportErrorNotJson": "That file isn't valid JSON — is it really a .har export?", + "harImportErrorNoEntries": "This HAR has no network entries recorded.", + "harImportErrorNoChathubUrl": "No Copilot chat connection found in this HAR. Send at least one chat message in m365.cloud.microsoft before exporting.", + "harImportErrorUnparsableUrl": "Found the chat connection, but couldn't read its URL.", + "harImportErrorMissingFields": "Found the chat connection, but the token was missing from it.", + "harImportErrorReadFailed": "Couldn't read that file.", + "harImportErrorUnknown": "Couldn't extract a credential from that HAR file." }, "settings": { "title": "Mga setting", @@ -8230,7 +8277,19 @@ "cliproxyapiHealth": "Kalusugan", "cliproxyapiPort": "Port", "qdrantHost": "Host", - "qdrantCollection": "Koleksyon" + "qdrantCollection": "Koleksyon", + "presetAll": "All", + "presetAllDesc": "Show everything", + "presetEssentials": "Essentials", + "presetEssentialsDesc": "Beginner path - Advanced tools stay searchable", + "presetMinimal": "Minimal", + "presetMinimalDesc": "Core pages only", + "presetDeveloper": "Developer", + "presetDeveloperDesc": "Dev & proxy tools", + "presetAdmin": "Admin", + "presetAdminDesc": "Monitoring & audit", + "settingsSidebarTitle": "Sidebar Customization", + "settingsSidebarDesc": "Choose which sidebar items to show. Essentials keeps Advanced tools searchable." }, "contextRtk": { "title": "RTK Engine", @@ -12017,7 +12076,8 @@ "title": "ACP Agents", "phrase": "Mga CLI na ini-spawn ng OmniRoute bilang execution backend (reverse flow)", "flow": "Client → OmniRoute → spawn CLI (stdio/ACP) → response", - "seeOther": "Tingnan →" + "seeOther": "Tingnan →", + "warning": "Most users can ignore this — use only when an integration requires it." } }, "comparison": { @@ -12841,6 +12901,10 @@ }, "SKILLS_SANDBOX_NETWORK_ENABLED": { "description": "I-enable ang access sa network sa skills sandbox." + }, + "DISABLE_CONTEXT_WINDOW_CHECKS": { + "label": "Disable Context Window Checks", + "description": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active." } } }, @@ -13413,6 +13477,13 @@ "modelLockouts": "Mga Lockout ng Modelo", "count": "Bilang ng Koneksyon" } + }, + "reassuranceTitle": "Your connections recover automatically", + "reassuranceDetail": "Usually no action is needed. OmniRoute temporarily rests a connection after failures, then safely tries it again.", + "plainStates": { + "healthy": "Requests can be sent", + "coolingDown": "Trying again soon", + "lockedOut": "Needs your attention" } }, "featureFlagCapabilityFilterEnabledDescription": "Tanggihan ang mga kahilingan bago ang pagpapadala kapag ang target na modelo ay kulang sa mga kinakailangang kakayahan (paningin, mga tool, nakabalangkas na output, bintana ng konteksto). Pinoprotektahan ang mga direktang kahilingan mula sa isang tagapagbigay na lumalampas sa filter ng pagiging tugma ng combo-layer.", @@ -13850,5 +13921,13 @@ "toolsMismatch": "Hindi sinusuportahan ng provider ang pagtawag sa tool", "structuredOutputMismatch": "Hindi sinusuportahan ng provider ang nakabalangkas na output", "contextWindowMismatch": "Lumampas ang kahilingan sa konteksto ng tagapagbigay" + }, + "featureFlagDisableContextWindowChecksDescription": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active.", + "cheaperInferenceSponsorBanner": { + "title": "Cheaper Inference is an OmniRoute Open Source Friend", + "description": "A cost-ranked gateway reselling dozens of frontier models behind one OpenAI-compatible endpoint — routing each request to the cheapest eligible provider, never above list price.", + "cta": "Get an API Key", + "partnerLinkNote": "Partner link", + "dismissAriaLabel": "Dismiss" } } diff --git a/src/i18n/messages/pl.json b/src/i18n/messages/pl.json index 087852e0601..761bfcd9362 100644 --- a/src/i18n/messages/pl.json +++ b/src/i18n/messages/pl.json @@ -974,7 +974,14 @@ "batchFileUsedByCount": "Używane przez {count, plural, one {# partię} other {# partii}}", "batchFilePreview": "Podgląd", "batchFilePreviewTruncated": "Wyświetlanie pierwszych {shown} linii ({total} łącznie linii)", - "batchFileDownloadFull": "Pobierz Pełny Plik" + "batchFileDownloadFull": "Pobierz Pełny Plik", + "batchHeaderSubtitle": "Run many requests as one job", + "batchStep1": "1 · Upload JSONL", + "batchStep1Desc": "Add requests", + "batchStep2": "2 · Create batch", + "batchStep2Desc": "Run job", + "batchStep3": "3 · Get results", + "batchStep3Desc": "Download output" }, "disabled": "Wyłączone", "featureFlagOmnirouteEmergencyFallbackDescription": "Kierowanie żądań z wyczerpanym budżetem do awaryjnego, bezpłatnego fallback provider/model.", @@ -1293,7 +1300,8 @@ "open": "otwórz", "close": "zamknij" }, - "noResults": "Brak wyników" + "noResults": "Brak wyników", + "trafficInspectorPurpose": "See exactly what your application sends to and receives from AI providers. Works with any OpenAI-compatible client." }, "webhooks": { "title": "Webhooks", @@ -1856,7 +1864,21 @@ "directDownloadHint": "Lub pobierz odpowiedni format instalatora bezpośrednio:", "releaseNotes": "Notatki Wydania", "readMore": "Czytaj więcej", - "noAuthLabel": "Brak autoryzacji" + "noAuthLabel": "Brak autoryzacji", + "recentRequests": "Recent Requests", + "recentRequestsEmpty": "No requests yet.", + "recentRequestsModel": "Model", + "recentRequestsTokens": "In / Out", + "recentRequestsWhen": "When", + "readinessEyebrow": "Get ready to route", + "readinessTitle": "Send your first request", + "readinessSubtitle": "Four small steps. OmniRoute checks readiness as you go.", + "readinessStep1": "Connect a provider", + "readinessStep2": "Configure endpoint authentication", + "readinessStep3": "Copy your endpoint", + "readinessStep4": "Send a test request", + "readinessContinue": "Continue setup", + "readinessDismiss": "Dismiss for now" }, "analytics": { "title": "Analityka", @@ -2901,7 +2923,8 @@ "omp": "Agent kodujący w terminalu Oh My Pi", "letta": "Agent CLI Letta z trwałą pamięcią i obsługą narzędzi", "warp": "Terminal Warp AI ze wsparciem dla niestandardowych dostawców", - "agent-deck": "Orkiestrator wieloagentowy Agent Deck" + "agent-deck": "Orkiestrator wieloagentowy Agent Deck", + "prime-agent": "Prime Agent — self-improving RLM coding harness with OpenAI-compatible provider support" }, "guides": { "cursor": { @@ -4133,7 +4156,10 @@ "notionIntegrationHelp": "Utwórz integrację wewnętrzną w", "notionIntegrationToken": "Token Integracji Wewnętrznej Notion", "notionNotConnected": "Nie połączono", - "notionTokenConfigured": "Token skonfigurowany. Narzędzia Notion są dostępne przez MCP." + "notionTokenConfigured": "Token skonfigurowany. Narzędzia Notion są dostępne przez MCP.", + "subtitle": "Use the OpenAI-compatible endpoint with most SDKs and tools.", + "testEndpoint": "Test endpoint →", + "advancedProtocols": "Advanced protocols" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4716,7 +4742,14 @@ "issueCount": "{count} problemów", "score": "Wynik", "lastRequest": "Ostatnie żądanie", - "lastError": "Ostatni błąd" + "lastError": "Ostatni błąd", + "healthVerdictReady": "OmniRoute is ready", + "healthVerdictActionRequired": "Action required to restore full operation", + "healthVerdictCoolingDown": "Cooling down after recent changes", + "healthSubtitle": "System health check", + "advancedDiagnosticsTitle": "Advanced diagnostics", + "hide": "Hide", + "show": "Show" }, "telemetry": { "title": "Telemetria systemu", @@ -6383,7 +6416,21 @@ "savedModelEndpointSettings": "Ustawienia punktu końcowego zapisanego modelu", "searchByModelAria": "Szukaj według modelu", "selectSupportedEndpoint": "Wybierz przynajmniej jeden obsługiwany punkt końcowy", - "antigravityClientProfileHarness": "Harness / CLI" + "antigravityClientProfileHarness": "Harness / CLI", + "harImportButtonLabel": "Import .har file", + "harImportButtonBusy": "Importing…", + "harImportButtonHint": "Export from DevTools Network tab after sending at least one chat message.", + "harImportStatusValid": "Imported — valid for ~{minutes}m.", + "harImportStatusExpiringSoon": "Imported — valid for only ~{minutes}m more.", + "harImportStatusExpired": "Imported, but this token already expired ({minutes}m ago) — export a fresh HAR.", + "harImportStatusUnknownExpiry": "Imported. Couldn't read its expiry.", + "harImportErrorNotJson": "That file isn't valid JSON — is it really a .har export?", + "harImportErrorNoEntries": "This HAR has no network entries recorded.", + "harImportErrorNoChathubUrl": "No Copilot chat connection found in this HAR. Send at least one chat message in m365.cloud.microsoft before exporting.", + "harImportErrorUnparsableUrl": "Found the chat connection, but couldn't read its URL.", + "harImportErrorMissingFields": "Found the chat connection, but the token was missing from it.", + "harImportErrorReadFailed": "Couldn't read that file.", + "harImportErrorUnknown": "Couldn't extract a credential from that HAR file." }, "settings": { "title": "Ustawienia", @@ -8230,7 +8277,19 @@ "cliproxyapiHealth": "Zdrowie", "cliproxyapiPort": "Port", "qdrantHost": "Host", - "qdrantCollection": "Kolekcja" + "qdrantCollection": "Kolekcja", + "presetAll": "All", + "presetAllDesc": "Show everything", + "presetEssentials": "Essentials", + "presetEssentialsDesc": "Beginner path - Advanced tools stay searchable", + "presetMinimal": "Minimal", + "presetMinimalDesc": "Core pages only", + "presetDeveloper": "Developer", + "presetDeveloperDesc": "Dev & proxy tools", + "presetAdmin": "Admin", + "presetAdminDesc": "Monitoring & audit", + "settingsSidebarTitle": "Sidebar Customization", + "settingsSidebarDesc": "Choose which sidebar items to show. Essentials keeps Advanced tools searchable." }, "contextRtk": { "title": "Silnik RTK", @@ -12017,7 +12076,8 @@ "title": "Agenci ACP", "phrase": "Interfejsy CLI uruchamiane przez OmniRoute jako backend wykonawczy (przepływ odwrotny)", "flow": "Klient → OmniRoute → uruchomienie CLI (stdio/ACP) → odpowiedź", - "seeOther": "Zobacz →" + "seeOther": "Zobacz →", + "warning": "Most users can ignore this — use only when an integration requires it." } }, "comparison": { @@ -12841,6 +12901,10 @@ }, "SKILLS_SANDBOX_NETWORK_ENABLED": { "description": "Włącz dostęp do sieci w piaskownicy umiejętności." + }, + "DISABLE_CONTEXT_WINDOW_CHECKS": { + "label": "Disable Context Window Checks", + "description": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active." } } }, @@ -13413,6 +13477,13 @@ "modelLockouts": "Blokady Modelu", "count": "Liczba Połączeń" } + }, + "reassuranceTitle": "Your connections recover automatically", + "reassuranceDetail": "Usually no action is needed. OmniRoute temporarily rests a connection after failures, then safely tries it again.", + "plainStates": { + "healthy": "Requests can be sent", + "coolingDown": "Trying again soon", + "lockedOut": "Needs your attention" } }, "featureFlagCapabilityFilterEnabledDescription": "Odrzuć żądania przed wysyłką, gdy docelowy model nie ma wymaganych możliwości (wizja, narzędzia, strukturalne wyjście, okno kontekstowe). Chroni bezpośrednie żądania od pojedynczego dostawcy, które omijają filtr zgodności warstwy kombinacyjnej.", @@ -13850,5 +13921,13 @@ "toolsMismatch": "Dostawca nie obsługuje wywoływania narzędzi", "structuredOutputMismatch": "Dostawca nie obsługuje strukturalnego wyjścia", "contextWindowMismatch": "Żądanie przekracza okno kontekstu dostawcy" + }, + "featureFlagDisableContextWindowChecksDescription": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active.", + "cheaperInferenceSponsorBanner": { + "title": "Cheaper Inference is an OmniRoute Open Source Friend", + "description": "A cost-ranked gateway reselling dozens of frontier models behind one OpenAI-compatible endpoint — routing each request to the cheapest eligible provider, never above list price.", + "cta": "Get an API Key", + "partnerLinkNote": "Partner link", + "dismissAriaLabel": "Dismiss" } } diff --git a/src/i18n/messages/pt.json b/src/i18n/messages/pt.json index 3194c7e4929..731ce9cb930 100644 --- a/src/i18n/messages/pt.json +++ b/src/i18n/messages/pt.json @@ -974,7 +974,14 @@ "batchFileUsedByCount": "Usado por {count, plural, one {# lote} other {# lotes}}", "batchFilePreview": "Pré-visualização", "batchFilePreviewTruncated": "A mostrar as primeiras {shown} linhas ({total} linhas no total)", - "batchFileDownloadFull": "Transferir Ficheiro Completo" + "batchFileDownloadFull": "Transferir Ficheiro Completo", + "batchHeaderSubtitle": "Run many requests as one job", + "batchStep1": "1 · Upload JSONL", + "batchStep1Desc": "Add requests", + "batchStep2": "2 · Create batch", + "batchStep2Desc": "Run job", + "batchStep3": "3 · Get results", + "batchStep3Desc": "Download output" }, "disabled": "Desativado", "featureFlagOmnirouteEmergencyFallbackDescription": "Encaminhar pedidos com orçamento esgotado para o fornecedor/modelo de contingência gratuito de emergência.", @@ -1293,7 +1300,8 @@ "open": "abrir", "close": "fechar" }, - "noResults": "Sem resultados" + "noResults": "Sem resultados", + "trafficInspectorPurpose": "See exactly what your application sends to and receives from AI providers. Works with any OpenAI-compatible client." }, "webhooks": { "title": "Webhooks", @@ -1856,7 +1864,21 @@ "directDownloadHint": "Ou faça o download do formato de instalador respetivo diretamente:", "releaseNotes": "Notas de Lançamento", "readMore": "Leia Mais", - "noAuthLabel": "Sem Autenticação" + "noAuthLabel": "Sem Autenticação", + "recentRequests": "Recent Requests", + "recentRequestsEmpty": "No requests yet.", + "recentRequestsModel": "Model", + "recentRequestsTokens": "In / Out", + "recentRequestsWhen": "When", + "readinessEyebrow": "Get ready to route", + "readinessTitle": "Send your first request", + "readinessSubtitle": "Four small steps. OmniRoute checks readiness as you go.", + "readinessStep1": "Connect a provider", + "readinessStep2": "Configure endpoint authentication", + "readinessStep3": "Copy your endpoint", + "readinessStep4": "Send a test request", + "readinessContinue": "Continue setup", + "readinessDismiss": "Dismiss for now" }, "analytics": { "title": "Análise", @@ -2901,7 +2923,8 @@ "omp": "Agente de programação de terminal Oh My Pi", "letta": "Agente CLI Letta com memória persistente e utilização de ferramentas", "warp": "Terminal Warp AI com suporte para fornecedor personalizado", - "agent-deck": "Orquestrador multi-agente Agent Deck" + "agent-deck": "Orquestrador multi-agente Agent Deck", + "prime-agent": "Prime Agent — self-improving RLM coding harness with OpenAI-compatible provider support" }, "guides": { "cursor": { @@ -4133,7 +4156,10 @@ "notionIntegrationHelp": "Criar uma Integração Interna em", "notionIntegrationToken": "Token de Integração Interna do Notion", "notionNotConnected": "Não conectado", - "notionTokenConfigured": "Token configurado. As ferramentas Notion estão disponíveis através do MCP." + "notionTokenConfigured": "Token configurado. As ferramentas Notion estão disponíveis através do MCP.", + "subtitle": "Use the OpenAI-compatible endpoint with most SDKs and tools.", + "testEndpoint": "Test endpoint →", + "advancedProtocols": "Advanced protocols" }, "endpoints": { "tabProxy": "Proxy de Endpoint", @@ -4716,7 +4742,14 @@ "issueCount": "{count} problemas", "score": "Pontuação", "lastRequest": "Último pedido", - "lastError": "Último erro" + "lastError": "Último erro", + "healthVerdictReady": "OmniRoute is ready", + "healthVerdictActionRequired": "Action required to restore full operation", + "healthVerdictCoolingDown": "Cooling down after recent changes", + "healthSubtitle": "System health check", + "advancedDiagnosticsTitle": "Advanced diagnostics", + "hide": "Hide", + "show": "Show" }, "telemetry": { "title": "Telemetria do Sistema", @@ -6383,7 +6416,21 @@ "savedModelEndpointSettings": "Definições do ponto de extremidade do modelo guardado", "searchByModelAria": "Pesquisar por modelo", "selectSupportedEndpoint": "Selecione pelo menos um endpoint suportado", - "antigravityClientProfileHarness": "Harness / CLI" + "antigravityClientProfileHarness": "Harness / CLI", + "harImportButtonLabel": "Import .har file", + "harImportButtonBusy": "Importing…", + "harImportButtonHint": "Export from DevTools Network tab after sending at least one chat message.", + "harImportStatusValid": "Imported — valid for ~{minutes}m.", + "harImportStatusExpiringSoon": "Imported — valid for only ~{minutes}m more.", + "harImportStatusExpired": "Imported, but this token already expired ({minutes}m ago) — export a fresh HAR.", + "harImportStatusUnknownExpiry": "Imported. Couldn't read its expiry.", + "harImportErrorNotJson": "That file isn't valid JSON — is it really a .har export?", + "harImportErrorNoEntries": "This HAR has no network entries recorded.", + "harImportErrorNoChathubUrl": "No Copilot chat connection found in this HAR. Send at least one chat message in m365.cloud.microsoft before exporting.", + "harImportErrorUnparsableUrl": "Found the chat connection, but couldn't read its URL.", + "harImportErrorMissingFields": "Found the chat connection, but the token was missing from it.", + "harImportErrorReadFailed": "Couldn't read that file.", + "harImportErrorUnknown": "Couldn't extract a credential from that HAR file." }, "settings": { "title": "Configurações", @@ -8230,7 +8277,19 @@ "cliproxyapiHealth": "Saúde", "cliproxyapiPort": "Porto", "qdrantHost": "Anfitrião", - "qdrantCollection": "Coleção" + "qdrantCollection": "Coleção", + "presetAll": "All", + "presetAllDesc": "Show everything", + "presetEssentials": "Essentials", + "presetEssentialsDesc": "Beginner path - Advanced tools stay searchable", + "presetMinimal": "Minimal", + "presetMinimalDesc": "Core pages only", + "presetDeveloper": "Developer", + "presetDeveloperDesc": "Dev & proxy tools", + "presetAdmin": "Admin", + "presetAdminDesc": "Monitoring & audit", + "settingsSidebarTitle": "Sidebar Customization", + "settingsSidebarDesc": "Choose which sidebar items to show. Essentials keeps Advanced tools searchable." }, "contextRtk": { "title": "Motor RTK", @@ -12017,7 +12076,8 @@ "title": "Agentes ACP", "phrase": "CLIs que o OmniRoute inicia como backend de execução (fluxo inverso)", "flow": "Cliente → OmniRoute → iniciar CLI (stdio/ACP) → resposta", - "seeOther": "Ver →" + "seeOther": "Ver →", + "warning": "Most users can ignore this — use only when an integration requires it." } }, "comparison": { @@ -12841,6 +12901,10 @@ }, "SKILLS_SANDBOX_NETWORK_ENABLED": { "description": "Ativar o acesso à rede na sandbox de competências." + }, + "DISABLE_CONTEXT_WINDOW_CHECKS": { + "label": "Disable Context Window Checks", + "description": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active." } } }, @@ -13413,6 +13477,13 @@ "modelLockouts": "Bloqueios de Modelo", "count": "Contagem de Ligações" } + }, + "reassuranceTitle": "Your connections recover automatically", + "reassuranceDetail": "Usually no action is needed. OmniRoute temporarily rests a connection after failures, then safely tries it again.", + "plainStates": { + "healthy": "Requests can be sent", + "coolingDown": "Trying again soon", + "lockedOut": "Needs your attention" } }, "featureFlagCapabilityFilterEnabledDescription": "Rejeitar pedidos antes do envio quando o modelo de destino não tiver as capacidades necessárias (visão, ferramentas, saída estruturada, janela de contexto). Protege pedidos diretos de um único fornecedor que contornam o filtro de compatibilidade da camada combinada.", @@ -13857,5 +13928,6 @@ "cta": "Obter uma Chave de API", "partnerLinkNote": "Link de parceiro", "dismissAriaLabel": "Dispensar" - } + }, + "featureFlagDisableContextWindowChecksDescription": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active." } diff --git a/src/i18n/messages/ro.json b/src/i18n/messages/ro.json index f0d50bae68f..7ae65dbd0c8 100644 --- a/src/i18n/messages/ro.json +++ b/src/i18n/messages/ro.json @@ -974,7 +974,14 @@ "batchFileUsedByCount": "Folosit de {count, plural, one {# lot} other {# loturi}}", "batchFilePreview": "Previzualizare", "batchFilePreviewTruncated": "Afișare primele {shown} linii ({total} linii totale)", - "batchFileDownloadFull": "Descarcă Fișierul Complet" + "batchFileDownloadFull": "Descarcă Fișierul Complet", + "batchHeaderSubtitle": "Run many requests as one job", + "batchStep1": "1 · Upload JSONL", + "batchStep1Desc": "Add requests", + "batchStep2": "2 · Create batch", + "batchStep2Desc": "Run job", + "batchStep3": "3 · Get results", + "batchStep3Desc": "Download output" }, "disabled": "Dezactivat", "featureFlagOmnirouteEmergencyFallbackDescription": "Redirecționează cererile cu buget epuizat către furnizorul/modelul de rezervă gratuit de urgență.", @@ -1293,7 +1300,8 @@ "open": "deschide", "close": "închide" }, - "noResults": "Niciun rezultat" + "noResults": "Niciun rezultat", + "trafficInspectorPurpose": "See exactly what your application sends to and receives from AI providers. Works with any OpenAI-compatible client." }, "webhooks": { "title": "Webhook-uri", @@ -1856,7 +1864,21 @@ "directDownloadHint": "Sau descărcați direct formatul installer-ului respectiv:", "releaseNotes": "Note de Lansare", "readMore": "Citește mai mult", - "noAuthLabel": "Fără Autentificare" + "noAuthLabel": "Fără Autentificare", + "recentRequests": "Recent Requests", + "recentRequestsEmpty": "No requests yet.", + "recentRequestsModel": "Model", + "recentRequestsTokens": "In / Out", + "recentRequestsWhen": "When", + "readinessEyebrow": "Get ready to route", + "readinessTitle": "Send your first request", + "readinessSubtitle": "Four small steps. OmniRoute checks readiness as you go.", + "readinessStep1": "Connect a provider", + "readinessStep2": "Configure endpoint authentication", + "readinessStep3": "Copy your endpoint", + "readinessStep4": "Send a test request", + "readinessContinue": "Continue setup", + "readinessDismiss": "Dismiss for now" }, "analytics": { "title": "Analytics", @@ -2901,7 +2923,8 @@ "omp": "Agent de programare pentru terminal Oh My Pi", "letta": "Agent CLI Letta cu memorie persistentă și utilizare de instrumente", "warp": "Terminal Warp AI cu suport pentru furnizori personalizați", - "agent-deck": "Orchestrator multi-agent Agent Deck" + "agent-deck": "Orchestrator multi-agent Agent Deck", + "prime-agent": "Prime Agent — self-improving RLM coding harness with OpenAI-compatible provider support" }, "guides": { "cursor": { @@ -4133,7 +4156,10 @@ "notionIntegrationHelp": "Creează o integrare internă la", "notionIntegrationToken": "Token Intern de Integrare Notion", "notionNotConnected": "Neconectat", - "notionTokenConfigured": "Token configurat. Instrumentele Notion sunt disponibile prin MCP." + "notionTokenConfigured": "Token configurat. Instrumentele Notion sunt disponibile prin MCP.", + "subtitle": "Use the OpenAI-compatible endpoint with most SDKs and tools.", + "testEndpoint": "Test endpoint →", + "advancedProtocols": "Advanced protocols" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4716,7 +4742,14 @@ "issueCount": "{count} probleme", "score": "Scor", "lastRequest": "Ultima solicitare", - "lastError": "Ultima eroare" + "lastError": "Ultima eroare", + "healthVerdictReady": "OmniRoute is ready", + "healthVerdictActionRequired": "Action required to restore full operation", + "healthVerdictCoolingDown": "Cooling down after recent changes", + "healthSubtitle": "System health check", + "advancedDiagnosticsTitle": "Advanced diagnostics", + "hide": "Hide", + "show": "Show" }, "telemetry": { "title": "Telemetria sistemului", @@ -6383,7 +6416,21 @@ "savedModelEndpointSettings": "Setările punctului final al modelului salvat", "searchByModelAria": "Caută după model", "selectSupportedEndpoint": "Selectați cel puțin un punct final acceptat", - "antigravityClientProfileHarness": "Harness / CLI" + "antigravityClientProfileHarness": "Harness / CLI", + "harImportButtonLabel": "Import .har file", + "harImportButtonBusy": "Importing…", + "harImportButtonHint": "Export from DevTools Network tab after sending at least one chat message.", + "harImportStatusValid": "Imported — valid for ~{minutes}m.", + "harImportStatusExpiringSoon": "Imported — valid for only ~{minutes}m more.", + "harImportStatusExpired": "Imported, but this token already expired ({minutes}m ago) — export a fresh HAR.", + "harImportStatusUnknownExpiry": "Imported. Couldn't read its expiry.", + "harImportErrorNotJson": "That file isn't valid JSON — is it really a .har export?", + "harImportErrorNoEntries": "This HAR has no network entries recorded.", + "harImportErrorNoChathubUrl": "No Copilot chat connection found in this HAR. Send at least one chat message in m365.cloud.microsoft before exporting.", + "harImportErrorUnparsableUrl": "Found the chat connection, but couldn't read its URL.", + "harImportErrorMissingFields": "Found the chat connection, but the token was missing from it.", + "harImportErrorReadFailed": "Couldn't read that file.", + "harImportErrorUnknown": "Couldn't extract a credential from that HAR file." }, "settings": { "title": "Setări", @@ -8230,7 +8277,19 @@ "cliproxyapiHealth": "Sănătate", "cliproxyapiPort": "Port", "qdrantHost": "Gazdă", - "qdrantCollection": "Colecție" + "qdrantCollection": "Colecție", + "presetAll": "All", + "presetAllDesc": "Show everything", + "presetEssentials": "Essentials", + "presetEssentialsDesc": "Beginner path - Advanced tools stay searchable", + "presetMinimal": "Minimal", + "presetMinimalDesc": "Core pages only", + "presetDeveloper": "Developer", + "presetDeveloperDesc": "Dev & proxy tools", + "presetAdmin": "Admin", + "presetAdminDesc": "Monitoring & audit", + "settingsSidebarTitle": "Sidebar Customization", + "settingsSidebarDesc": "Choose which sidebar items to show. Essentials keeps Advanced tools searchable." }, "contextRtk": { "title": "RTK Engine", @@ -12017,7 +12076,8 @@ "title": "Agenți ACP", "phrase": "CLI-uri pe care OmniRoute le lansează ca backend de execuție (flux invers)", "flow": "Client → OmniRoute → lansare CLI (stdio/ACP) → răspuns", - "seeOther": "Vezi →" + "seeOther": "Vezi →", + "warning": "Most users can ignore this — use only when an integration requires it." } }, "comparison": { @@ -12841,6 +12901,10 @@ }, "SKILLS_SANDBOX_NETWORK_ENABLED": { "description": "Activează accesul la rețea în sandbox-ul de abilități." + }, + "DISABLE_CONTEXT_WINDOW_CHECKS": { + "label": "Disable Context Window Checks", + "description": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active." } } }, @@ -13413,6 +13477,13 @@ "modelLockouts": "Blocaje Model", "count": "Număr de Conexiuni" } + }, + "reassuranceTitle": "Your connections recover automatically", + "reassuranceDetail": "Usually no action is needed. OmniRoute temporarily rests a connection after failures, then safely tries it again.", + "plainStates": { + "healthy": "Requests can be sent", + "coolingDown": "Trying again soon", + "lockedOut": "Needs your attention" } }, "featureFlagCapabilityFilterEnabledDescription": "Respinge cererile înainte de expediere atunci când modelul țintă nu are capabilitățile necesare (viziune, instrumente, ieșire structurată, fereastră de context). Protejează cererile directe de un singur furnizor care ocolesc filtrul de compatibilitate al stratului combinat.", @@ -13850,5 +13921,13 @@ "toolsMismatch": "Furnizorul nu suportă apelarea instrumentului", "structuredOutputMismatch": "Furnizorul nu suportă ieșirea structurată", "contextWindowMismatch": "Cererea depășește fereastra de context a furnizorului" + }, + "featureFlagDisableContextWindowChecksDescription": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active.", + "cheaperInferenceSponsorBanner": { + "title": "Cheaper Inference is an OmniRoute Open Source Friend", + "description": "A cost-ranked gateway reselling dozens of frontier models behind one OpenAI-compatible endpoint — routing each request to the cheapest eligible provider, never above list price.", + "cta": "Get an API Key", + "partnerLinkNote": "Partner link", + "dismissAriaLabel": "Dismiss" } } diff --git a/src/i18n/messages/ru.json b/src/i18n/messages/ru.json index 7517e856d8e..8f8f35334b6 100644 --- a/src/i18n/messages/ru.json +++ b/src/i18n/messages/ru.json @@ -974,7 +974,14 @@ "batchFileUsedByCount": "Используется {count, plural, one {# партия} other {# партий}}", "batchFilePreview": "Предварительный просмотр", "batchFilePreviewTruncated": "Показаны первые {shown} строки ({total} всего строк)", - "batchFileDownloadFull": "Скачать полный файл" + "batchFileDownloadFull": "Скачать полный файл", + "batchHeaderSubtitle": "Run many requests as one job", + "batchStep1": "1 · Upload JSONL", + "batchStep1Desc": "Add requests", + "batchStep2": "2 · Create batch", + "batchStep2Desc": "Run job", + "batchStep3": "3 · Get results", + "batchStep3Desc": "Download output" }, "disabled": "Отключено", "featureFlagOmnirouteEmergencyFallbackDescription": "Перенаправлять запросы при исчерпании бюджета на резервный бесплатный провайдер/модель.", @@ -1293,7 +1300,8 @@ "open": "открыть", "close": "закрыть" }, - "noResults": "Нет результатов" + "noResults": "Нет результатов", + "trafficInspectorPurpose": "See exactly what your application sends to and receives from AI providers. Works with any OpenAI-compatible client." }, "webhooks": { "title": "Вебхуки", @@ -1856,7 +1864,21 @@ "directDownloadHint": "Или загрузите соответствующий формат установщика напрямую:", "releaseNotes": "Примечания к выпуску", "readMore": "Читать далее", - "noAuthLabel": "Нет аутентификации" + "noAuthLabel": "Нет аутентификации", + "recentRequests": "Recent Requests", + "recentRequestsEmpty": "No requests yet.", + "recentRequestsModel": "Model", + "recentRequestsTokens": "In / Out", + "recentRequestsWhen": "When", + "readinessEyebrow": "Get ready to route", + "readinessTitle": "Send your first request", + "readinessSubtitle": "Four small steps. OmniRoute checks readiness as you go.", + "readinessStep1": "Connect a provider", + "readinessStep2": "Configure endpoint authentication", + "readinessStep3": "Copy your endpoint", + "readinessStep4": "Send a test request", + "readinessContinue": "Continue setup", + "readinessDismiss": "Dismiss for now" }, "analytics": { "title": "Аналитика", @@ -2901,7 +2923,8 @@ "omp": "Терминальный агент для кодинга Oh My Pi", "letta": "CLI-агент Letta с постоянной памятью и использованием инструментов", "warp": "Терминал Warp AI с поддержкой кастомных провайдеров", - "agent-deck": "Мультиагентный оркестратор Agent Deck" + "agent-deck": "Мультиагентный оркестратор Agent Deck", + "prime-agent": "Prime Agent — self-improving RLM coding harness with OpenAI-compatible provider support" }, "guides": { "cursor": { @@ -4133,7 +4156,10 @@ "notionIntegrationHelp": "Создать внутреннюю интеграцию в", "notionIntegrationToken": "Токен внутренней интеграции Notion", "notionNotConnected": "Не подключено", - "notionTokenConfigured": "Токен настроен. Инструменты Notion доступны через MCP." + "notionTokenConfigured": "Токен настроен. Инструменты Notion доступны через MCP.", + "subtitle": "Use the OpenAI-compatible endpoint with most SDKs and tools.", + "testEndpoint": "Test endpoint →", + "advancedProtocols": "Advanced protocols" }, "endpoints": { "tabProxy": "Прокси конечных точек", @@ -4716,7 +4742,14 @@ "issueCount": "{count} проблемы", "score": "Счет", "lastRequest": "Последний запрос", - "lastError": "Последняя ошибка" + "lastError": "Последняя ошибка", + "healthVerdictReady": "OmniRoute is ready", + "healthVerdictActionRequired": "Action required to restore full operation", + "healthVerdictCoolingDown": "Cooling down after recent changes", + "healthSubtitle": "System health check", + "advancedDiagnosticsTitle": "Advanced diagnostics", + "hide": "Hide", + "show": "Show" }, "telemetry": { "title": "Системная телеметрия", @@ -6383,7 +6416,21 @@ "savedModelEndpointSettings": "Настройки конечной точки сохраненной модели", "searchByModelAria": "Поиск по модели", "selectSupportedEndpoint": "Выберите хотя бы одну поддерживаемую конечную точку", - "antigravityClientProfileHarness": "Harness / CLI" + "antigravityClientProfileHarness": "Harness / CLI", + "harImportButtonLabel": "Import .har file", + "harImportButtonBusy": "Importing…", + "harImportButtonHint": "Export from DevTools Network tab after sending at least one chat message.", + "harImportStatusValid": "Imported — valid for ~{minutes}m.", + "harImportStatusExpiringSoon": "Imported — valid for only ~{minutes}m more.", + "harImportStatusExpired": "Imported, but this token already expired ({minutes}m ago) — export a fresh HAR.", + "harImportStatusUnknownExpiry": "Imported. Couldn't read its expiry.", + "harImportErrorNotJson": "That file isn't valid JSON — is it really a .har export?", + "harImportErrorNoEntries": "This HAR has no network entries recorded.", + "harImportErrorNoChathubUrl": "No Copilot chat connection found in this HAR. Send at least one chat message in m365.cloud.microsoft before exporting.", + "harImportErrorUnparsableUrl": "Found the chat connection, but couldn't read its URL.", + "harImportErrorMissingFields": "Found the chat connection, but the token was missing from it.", + "harImportErrorReadFailed": "Couldn't read that file.", + "harImportErrorUnknown": "Couldn't extract a credential from that HAR file." }, "settings": { "title": "Настройки", @@ -8230,7 +8277,19 @@ "cliproxyapiHealth": "Здоровье", "cliproxyapiPort": "Порт", "qdrantHost": "Хост", - "qdrantCollection": "Коллекция" + "qdrantCollection": "Коллекция", + "presetAll": "All", + "presetAllDesc": "Show everything", + "presetEssentials": "Essentials", + "presetEssentialsDesc": "Beginner path - Advanced tools stay searchable", + "presetMinimal": "Minimal", + "presetMinimalDesc": "Core pages only", + "presetDeveloper": "Developer", + "presetDeveloperDesc": "Dev & proxy tools", + "presetAdmin": "Admin", + "presetAdminDesc": "Monitoring & audit", + "settingsSidebarTitle": "Sidebar Customization", + "settingsSidebarDesc": "Choose which sidebar items to show. Essentials keeps Advanced tools searchable." }, "contextRtk": { "title": "RTK Engine", @@ -12017,7 +12076,8 @@ "title": "Агенты ACP", "phrase": "CLIs, которые OmniRoute запускает в качестве бэкенда выполнения (обратный поток)", "flow": "Клиент → OmniRoute → запустить CLI (stdio/ACP) → ответ", - "seeOther": "Смотреть →" + "seeOther": "Смотреть →", + "warning": "Most users can ignore this — use only when an integration requires it." } }, "comparison": { @@ -12841,6 +12901,10 @@ }, "SKILLS_SANDBOX_NETWORK_ENABLED": { "description": "Enable network access in the skills sandbox." + }, + "DISABLE_CONTEXT_WINDOW_CHECKS": { + "label": "Disable Context Window Checks", + "description": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active." } } }, @@ -13413,6 +13477,13 @@ "modelLockouts": "Блокировки Модели", "count": "Количество Соединений" } + }, + "reassuranceTitle": "Your connections recover automatically", + "reassuranceDetail": "Usually no action is needed. OmniRoute temporarily rests a connection after failures, then safely tries it again.", + "plainStates": { + "healthy": "Requests can be sent", + "coolingDown": "Trying again soon", + "lockedOut": "Needs your attention" } }, "featureFlagCapabilityFilterEnabledDescription": "Отклонять запросы перед отправкой, когда целевая модель не имеет необходимых возможностей (визуализация, инструменты, структурированный вывод, контекстное окно). Защищает прямые запросы от единственного поставщика, которые обходят фильтр совместимости комбинированного слоя.", @@ -13850,5 +13921,13 @@ "toolsMismatch": "Провайдер не поддерживает вызов инструмента", "structuredOutputMismatch": "Поставщик не поддерживает структурированный вывод", "contextWindowMismatch": "Запрос превышает контекстное окно провайдера" + }, + "featureFlagDisableContextWindowChecksDescription": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active.", + "cheaperInferenceSponsorBanner": { + "title": "Cheaper Inference is an OmniRoute Open Source Friend", + "description": "A cost-ranked gateway reselling dozens of frontier models behind one OpenAI-compatible endpoint — routing each request to the cheapest eligible provider, never above list price.", + "cta": "Get an API Key", + "partnerLinkNote": "Partner link", + "dismissAriaLabel": "Dismiss" } } diff --git a/src/i18n/messages/sk.json b/src/i18n/messages/sk.json index 3a65cab757b..2eca00b0472 100644 --- a/src/i18n/messages/sk.json +++ b/src/i18n/messages/sk.json @@ -974,7 +974,14 @@ "batchFileUsedByCount": "Používa sa {count, plural, one {# dávka} other {# dávok}}", "batchFilePreview": "Náhľad", "batchFilePreviewTruncated": "Zobrazenie prvých {shown} riadkov ({total} celkom riadkov)", - "batchFileDownloadFull": "Stiahnuť celý súbor" + "batchFileDownloadFull": "Stiahnuť celý súbor", + "batchHeaderSubtitle": "Run many requests as one job", + "batchStep1": "1 · Upload JSONL", + "batchStep1Desc": "Add requests", + "batchStep2": "2 · Create batch", + "batchStep2Desc": "Run job", + "batchStep3": "3 · Get results", + "batchStep3Desc": "Download output" }, "disabled": "Zakázané", "featureFlagOmnirouteEmergencyFallbackDescription": "Smerovať požiadavky s vyčerpaným rozpočtom na núdzového bezplatného záložného poskytovateľa/model.", @@ -1293,7 +1300,8 @@ "open": "otvorené", "close": "zatvoriť" }, - "noResults": "Žiadne výsledky" + "noResults": "Žiadne výsledky", + "trafficInspectorPurpose": "See exactly what your application sends to and receives from AI providers. Works with any OpenAI-compatible client." }, "webhooks": { "title": "Webhooky", @@ -1856,7 +1864,21 @@ "directDownloadHint": "Alebo si stiahnite príslušný formát inštalátora priamo:", "releaseNotes": "Poznámky k vydaniu", "readMore": "Čítať viac", - "noAuthLabel": "Žiadna autentifikácia" + "noAuthLabel": "Žiadna autentifikácia", + "recentRequests": "Recent Requests", + "recentRequestsEmpty": "No requests yet.", + "recentRequestsModel": "Model", + "recentRequestsTokens": "In / Out", + "recentRequestsWhen": "When", + "readinessEyebrow": "Get ready to route", + "readinessTitle": "Send your first request", + "readinessSubtitle": "Four small steps. OmniRoute checks readiness as you go.", + "readinessStep1": "Connect a provider", + "readinessStep2": "Configure endpoint authentication", + "readinessStep3": "Copy your endpoint", + "readinessStep4": "Send a test request", + "readinessContinue": "Continue setup", + "readinessDismiss": "Dismiss for now" }, "analytics": { "title": "Analytics", @@ -2901,7 +2923,8 @@ "omp": "Terminálový kódovací agent Oh My Pi", "letta": "CLI agent Letta s trvalou pamäťou a používaním nástrojov", "warp": "AI terminál Warp s podporou vlastného poskytovateľa", - "agent-deck": "Multi-agentový orchestrátor Agent Deck" + "agent-deck": "Multi-agentový orchestrátor Agent Deck", + "prime-agent": "Prime Agent — self-improving RLM coding harness with OpenAI-compatible provider support" }, "guides": { "cursor": { @@ -4133,7 +4156,10 @@ "notionIntegrationHelp": "Vytvorte internú integráciu na", "notionIntegrationToken": "Notion Interný Integračný Token", "notionNotConnected": "Nie je pripojené", - "notionTokenConfigured": "Token je nakonfigurovaný. Nástroje Notion sú dostupné cez MCP." + "notionTokenConfigured": "Token je nakonfigurovaný. Nástroje Notion sú dostupné cez MCP.", + "subtitle": "Use the OpenAI-compatible endpoint with most SDKs and tools.", + "testEndpoint": "Test endpoint →", + "advancedProtocols": "Advanced protocols" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4716,7 +4742,14 @@ "issueCount": "{count} problémov", "score": "Skóre", "lastRequest": "Posledná požiadavka", - "lastError": "Posledná chyba" + "lastError": "Posledná chyba", + "healthVerdictReady": "OmniRoute is ready", + "healthVerdictActionRequired": "Action required to restore full operation", + "healthVerdictCoolingDown": "Cooling down after recent changes", + "healthSubtitle": "System health check", + "advancedDiagnosticsTitle": "Advanced diagnostics", + "hide": "Hide", + "show": "Show" }, "telemetry": { "title": "Systémová telemetria", @@ -6383,7 +6416,21 @@ "savedModelEndpointSettings": "Nastavenia koncového bodu uloženého modelu", "searchByModelAria": "Hľadať podľa modelu", "selectSupportedEndpoint": "Vyberte aspoň jeden podporovaný koncový bod", - "antigravityClientProfileHarness": "Harness / CLI" + "antigravityClientProfileHarness": "Harness / CLI", + "harImportButtonLabel": "Import .har file", + "harImportButtonBusy": "Importing…", + "harImportButtonHint": "Export from DevTools Network tab after sending at least one chat message.", + "harImportStatusValid": "Imported — valid for ~{minutes}m.", + "harImportStatusExpiringSoon": "Imported — valid for only ~{minutes}m more.", + "harImportStatusExpired": "Imported, but this token already expired ({minutes}m ago) — export a fresh HAR.", + "harImportStatusUnknownExpiry": "Imported. Couldn't read its expiry.", + "harImportErrorNotJson": "That file isn't valid JSON — is it really a .har export?", + "harImportErrorNoEntries": "This HAR has no network entries recorded.", + "harImportErrorNoChathubUrl": "No Copilot chat connection found in this HAR. Send at least one chat message in m365.cloud.microsoft before exporting.", + "harImportErrorUnparsableUrl": "Found the chat connection, but couldn't read its URL.", + "harImportErrorMissingFields": "Found the chat connection, but the token was missing from it.", + "harImportErrorReadFailed": "Couldn't read that file.", + "harImportErrorUnknown": "Couldn't extract a credential from that HAR file." }, "settings": { "title": "Nastavenia", @@ -8230,7 +8277,19 @@ "cliproxyapiHealth": "Zdravie", "cliproxyapiPort": "Port", "qdrantHost": "Host", - "qdrantCollection": "Zbierka" + "qdrantCollection": "Zbierka", + "presetAll": "All", + "presetAllDesc": "Show everything", + "presetEssentials": "Essentials", + "presetEssentialsDesc": "Beginner path - Advanced tools stay searchable", + "presetMinimal": "Minimal", + "presetMinimalDesc": "Core pages only", + "presetDeveloper": "Developer", + "presetDeveloperDesc": "Dev & proxy tools", + "presetAdmin": "Admin", + "presetAdminDesc": "Monitoring & audit", + "settingsSidebarTitle": "Sidebar Customization", + "settingsSidebarDesc": "Choose which sidebar items to show. Essentials keeps Advanced tools searchable." }, "contextRtk": { "title": "RTK Engine", @@ -12017,7 +12076,8 @@ "title": "ACP Agenti", "phrase": "CLI nástroje, ktoré OmniRoute spúšťa ako backend na vykonávanie (obrátený tok)", "flow": "Klient → OmniRoute → spustenie CLI (stdio/ACP) → odpoveď", - "seeOther": "Pozrieť →" + "seeOther": "Pozrieť →", + "warning": "Most users can ignore this — use only when an integration requires it." } }, "comparison": { @@ -12841,6 +12901,10 @@ }, "SKILLS_SANDBOX_NETWORK_ENABLED": { "description": "Povoliť sieťový prístup v sandboxe zručností." + }, + "DISABLE_CONTEXT_WINDOW_CHECKS": { + "label": "Disable Context Window Checks", + "description": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active." } } }, @@ -13413,6 +13477,13 @@ "modelLockouts": "Uzamknutia Modelu", "count": "Počet Pripojení" } + }, + "reassuranceTitle": "Your connections recover automatically", + "reassuranceDetail": "Usually no action is needed. OmniRoute temporarily rests a connection after failures, then safely tries it again.", + "plainStates": { + "healthy": "Requests can be sent", + "coolingDown": "Trying again soon", + "lockedOut": "Needs your attention" } }, "featureFlagCapabilityFilterEnabledDescription": "Zamietnuť požiadavky pred odoslaním, keď cieľový model postráda požadované schopnosti (vízia, nástroje, štruktúrovaný výstup, kontextové okno). Chráni priamu požiadavku od jedného poskytovateľa, ktorá obchádza filter kompatibility kombinovanej vrstvy.", @@ -13850,5 +13921,13 @@ "toolsMismatch": "Poskytovateľ nepodporuje volanie nástroja", "structuredOutputMismatch": "Poskytovateľ nepodporuje štruktúrovaný výstup", "contextWindowMismatch": "Žiadosť presahuje kontextové okno poskytovateľa" + }, + "featureFlagDisableContextWindowChecksDescription": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active.", + "cheaperInferenceSponsorBanner": { + "title": "Cheaper Inference is an OmniRoute Open Source Friend", + "description": "A cost-ranked gateway reselling dozens of frontier models behind one OpenAI-compatible endpoint — routing each request to the cheapest eligible provider, never above list price.", + "cta": "Get an API Key", + "partnerLinkNote": "Partner link", + "dismissAriaLabel": "Dismiss" } } diff --git a/src/i18n/messages/sv.json b/src/i18n/messages/sv.json index 8d7dde53a30..dc816750b3a 100644 --- a/src/i18n/messages/sv.json +++ b/src/i18n/messages/sv.json @@ -974,7 +974,14 @@ "batchFileUsedByCount": "Används av {count, plural, one {# batch} other {# batches}}", "batchFilePreview": "Förhandsgranskning", "batchFilePreviewTruncated": "Visar de första {shown} raderna ({total} totalt rader)", - "batchFileDownloadFull": "Ladda Ner Hela Filen" + "batchFileDownloadFull": "Ladda Ner Hela Filen", + "batchHeaderSubtitle": "Run many requests as one job", + "batchStep1": "1 · Upload JSONL", + "batchStep1Desc": "Add requests", + "batchStep2": "2 · Create batch", + "batchStep2Desc": "Run job", + "batchStep3": "3 · Get results", + "batchStep3Desc": "Download output" }, "disabled": "Inaktiverad", "featureFlagOmnirouteEmergencyFallbackDescription": "Dirigera anrop med förbrukad budget till den kostnadsfria reservleverantören/-modellen för nödfall.", @@ -1293,7 +1300,8 @@ "open": "öppna", "close": "stäng" }, - "noResults": "Inga resultat" + "noResults": "Inga resultat", + "trafficInspectorPurpose": "See exactly what your application sends to and receives from AI providers. Works with any OpenAI-compatible client." }, "webhooks": { "title": "Webhooks", @@ -1856,7 +1864,21 @@ "directDownloadHint": "Eller ladda ner det respektive installationsformatet direkt:", "releaseNotes": "Versionsinformation", "readMore": "Läs Mer", - "noAuthLabel": "Ingen autentisering" + "noAuthLabel": "Ingen autentisering", + "recentRequests": "Recent Requests", + "recentRequestsEmpty": "No requests yet.", + "recentRequestsModel": "Model", + "recentRequestsTokens": "In / Out", + "recentRequestsWhen": "When", + "readinessEyebrow": "Get ready to route", + "readinessTitle": "Send your first request", + "readinessSubtitle": "Four small steps. OmniRoute checks readiness as you go.", + "readinessStep1": "Connect a provider", + "readinessStep2": "Configure endpoint authentication", + "readinessStep3": "Copy your endpoint", + "readinessStep4": "Send a test request", + "readinessContinue": "Continue setup", + "readinessDismiss": "Dismiss for now" }, "analytics": { "title": "Analytics", @@ -2901,7 +2923,8 @@ "omp": "Oh My Pi terminal-kodningsagent", "letta": "Letta CLI-agent med persistent minne och verktygsanvändning", "warp": "Warp AI-terminal med stöd för anpassad leverantör", - "agent-deck": "Agent Deck multi-agent-orkestrerare" + "agent-deck": "Agent Deck multi-agent-orkestrerare", + "prime-agent": "Prime Agent — self-improving RLM coding harness with OpenAI-compatible provider support" }, "guides": { "cursor": { @@ -4133,7 +4156,10 @@ "notionIntegrationHelp": "Skapa en Intern Integration på", "notionIntegrationToken": "Notion Interna Integrations Token", "notionNotConnected": "Inte ansluten", - "notionTokenConfigured": "Token konfigurerad. Notion-verktyg är tillgängliga via MCP." + "notionTokenConfigured": "Token konfigurerad. Notion-verktyg är tillgängliga via MCP.", + "subtitle": "Use the OpenAI-compatible endpoint with most SDKs and tools.", + "testEndpoint": "Test endpoint →", + "advancedProtocols": "Advanced protocols" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4716,7 +4742,14 @@ "issueCount": "{count} problem", "score": "Poäng", "lastRequest": "Senaste anrop", - "lastError": "Senaste fel" + "lastError": "Senaste fel", + "healthVerdictReady": "OmniRoute is ready", + "healthVerdictActionRequired": "Action required to restore full operation", + "healthVerdictCoolingDown": "Cooling down after recent changes", + "healthSubtitle": "System health check", + "advancedDiagnosticsTitle": "Advanced diagnostics", + "hide": "Hide", + "show": "Show" }, "telemetry": { "title": "Systemtelemetri", @@ -6383,7 +6416,21 @@ "savedModelEndpointSettings": "Inställningar för sparad modellslutpunkt", "searchByModelAria": "Sök efter modell", "selectSupportedEndpoint": "Välj minst en stödd slutpunkt", - "antigravityClientProfileHarness": "Harness / CLI" + "antigravityClientProfileHarness": "Harness / CLI", + "harImportButtonLabel": "Import .har file", + "harImportButtonBusy": "Importing…", + "harImportButtonHint": "Export from DevTools Network tab after sending at least one chat message.", + "harImportStatusValid": "Imported — valid for ~{minutes}m.", + "harImportStatusExpiringSoon": "Imported — valid for only ~{minutes}m more.", + "harImportStatusExpired": "Imported, but this token already expired ({minutes}m ago) — export a fresh HAR.", + "harImportStatusUnknownExpiry": "Imported. Couldn't read its expiry.", + "harImportErrorNotJson": "That file isn't valid JSON — is it really a .har export?", + "harImportErrorNoEntries": "This HAR has no network entries recorded.", + "harImportErrorNoChathubUrl": "No Copilot chat connection found in this HAR. Send at least one chat message in m365.cloud.microsoft before exporting.", + "harImportErrorUnparsableUrl": "Found the chat connection, but couldn't read its URL.", + "harImportErrorMissingFields": "Found the chat connection, but the token was missing from it.", + "harImportErrorReadFailed": "Couldn't read that file.", + "harImportErrorUnknown": "Couldn't extract a credential from that HAR file." }, "settings": { "title": "Inställningar", @@ -8230,7 +8277,19 @@ "cliproxyapiHealth": "Hälsa", "cliproxyapiPort": "Port", "qdrantHost": "Värd", - "qdrantCollection": "Samling" + "qdrantCollection": "Samling", + "presetAll": "All", + "presetAllDesc": "Show everything", + "presetEssentials": "Essentials", + "presetEssentialsDesc": "Beginner path - Advanced tools stay searchable", + "presetMinimal": "Minimal", + "presetMinimalDesc": "Core pages only", + "presetDeveloper": "Developer", + "presetDeveloperDesc": "Dev & proxy tools", + "presetAdmin": "Admin", + "presetAdminDesc": "Monitoring & audit", + "settingsSidebarTitle": "Sidebar Customization", + "settingsSidebarDesc": "Choose which sidebar items to show. Essentials keeps Advanced tools searchable." }, "contextRtk": { "title": "RTK Engine", @@ -12017,7 +12076,8 @@ "title": "ACP-agenter", "phrase": "CLI:er som OmniRoute startar som exekveringsbackend (omvänt flöde)", "flow": "Klient → OmniRoute → starta CLI (stdio/ACP) → svar", - "seeOther": "Se →" + "seeOther": "Se →", + "warning": "Most users can ignore this — use only when an integration requires it." } }, "comparison": { @@ -12841,6 +12901,10 @@ }, "SKILLS_SANDBOX_NETWORK_ENABLED": { "description": "Aktivera nätverksåtkomst i kompetenssandlådan." + }, + "DISABLE_CONTEXT_WINDOW_CHECKS": { + "label": "Disable Context Window Checks", + "description": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active." } } }, @@ -13413,6 +13477,13 @@ "modelLockouts": "Modellåsningar", "count": "Antal Anslutningar" } + }, + "reassuranceTitle": "Your connections recover automatically", + "reassuranceDetail": "Usually no action is needed. OmniRoute temporarily rests a connection after failures, then safely tries it again.", + "plainStates": { + "healthy": "Requests can be sent", + "coolingDown": "Trying again soon", + "lockedOut": "Needs your attention" } }, "featureFlagCapabilityFilterEnabledDescription": "Avvisa förfrågningar innan de skickas när målmodellen saknar nödvändiga funktioner (vision, verktyg, strukturerad utdata, kontextfönster). Skyddar direkta förfrågningar från en enda leverantör som kringgår kompatibilitetsfiltret för kombinationslager.", @@ -13850,5 +13921,13 @@ "toolsMismatch": "Leverantören stöder inte verktygsanrop.", "structuredOutputMismatch": "Leverantören stöder inte strukturerad utdata", "contextWindowMismatch": "Begäran överskrider leverantörens kontextfönster" + }, + "featureFlagDisableContextWindowChecksDescription": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active.", + "cheaperInferenceSponsorBanner": { + "title": "Cheaper Inference is an OmniRoute Open Source Friend", + "description": "A cost-ranked gateway reselling dozens of frontier models behind one OpenAI-compatible endpoint — routing each request to the cheapest eligible provider, never above list price.", + "cta": "Get an API Key", + "partnerLinkNote": "Partner link", + "dismissAriaLabel": "Dismiss" } } diff --git a/src/i18n/messages/sw.json b/src/i18n/messages/sw.json index 5c7602ce683..9460c3fa109 100644 --- a/src/i18n/messages/sw.json +++ b/src/i18n/messages/sw.json @@ -974,7 +974,14 @@ "batchFileUsedByCount": "Inatumika na {count, plural, one {# kundi} other {# makundi}}", "batchFilePreview": "Muonekano", "batchFilePreviewTruncated": "Kuonyesha mistari ya kwanza {shown} ({total} jumla ya mistari)", - "batchFileDownloadFull": "Pakua Faili Kamili" + "batchFileDownloadFull": "Pakua Faili Kamili", + "batchHeaderSubtitle": "Run many requests as one job", + "batchStep1": "1 · Upload JSONL", + "batchStep1Desc": "Add requests", + "batchStep2": "2 · Create batch", + "batchStep2Desc": "Run job", + "batchStep3": "3 · Get results", + "batchStep3Desc": "Download output" }, "disabled": "Imezimwa", "featureFlagOmnirouteEmergencyFallbackDescription": "Elekeza maombi yaliyomaliza bajeti kwenye mtoa huduma/muundo wa dharura wa akiba usiolipiwa.", @@ -1293,7 +1300,8 @@ "open": "fungua", "close": "funga" }, - "noResults": "Hakuna matokeo" + "noResults": "Hakuna matokeo", + "trafficInspectorPurpose": "See exactly what your application sends to and receives from AI providers. Works with any OpenAI-compatible client." }, "webhooks": { "title": "Viboko vya mtandao", @@ -1856,7 +1864,21 @@ "directDownloadHint": "Au pakua muundo wa msaidizi husika moja kwa moja:", "releaseNotes": "Maelezo ya Kutolewa", "readMore": "Soma Zaidi", - "noAuthLabel": "Hakuna Auth" + "noAuthLabel": "Hakuna Auth", + "recentRequests": "Recent Requests", + "recentRequestsEmpty": "No requests yet.", + "recentRequestsModel": "Model", + "recentRequestsTokens": "In / Out", + "recentRequestsWhen": "When", + "readinessEyebrow": "Get ready to route", + "readinessTitle": "Send your first request", + "readinessSubtitle": "Four small steps. OmniRoute checks readiness as you go.", + "readinessStep1": "Connect a provider", + "readinessStep2": "Configure endpoint authentication", + "readinessStep3": "Copy your endpoint", + "readinessStep4": "Send a test request", + "readinessContinue": "Continue setup", + "readinessDismiss": "Dismiss for now" }, "analytics": { "title": "Analytics", @@ -2901,7 +2923,8 @@ "omp": "Wakala wa uandishi wa kodi wa terminal wa Oh My Pi", "letta": "Wakala wa Letta CLI mwenye kumbukumbu ya kudumu na matumizi ya zana", "warp": "Terminal ya Warp AI yenye usaidizi wa mtoa huduma maalum", - "agent-deck": "Mratibu wa mawakala wengi wa Agent Deck" + "agent-deck": "Mratibu wa mawakala wengi wa Agent Deck", + "prime-agent": "Prime Agent — self-improving RLM coding harness with OpenAI-compatible provider support" }, "guides": { "cursor": { @@ -4133,7 +4156,10 @@ "notionIntegrationHelp": "Unda Uunganisho wa Ndani katika", "notionIntegrationToken": "Token ya Msingi wa Ndani wa Notion", "notionNotConnected": "Haujaunganishwa", - "notionTokenConfigured": "Token imewekwa. Zana za Notion zinapatikana kupitia MCP." + "notionTokenConfigured": "Token imewekwa. Zana za Notion zinapatikana kupitia MCP.", + "subtitle": "Use the OpenAI-compatible endpoint with most SDKs and tools.", + "testEndpoint": "Test endpoint →", + "advancedProtocols": "Advanced protocols" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4716,7 +4742,14 @@ "issueCount": "{count} masuala", "score": "Alama", "lastRequest": "Ombi la mwisho", - "lastError": "Hitilafu ya mwisho" + "lastError": "Hitilafu ya mwisho", + "healthVerdictReady": "OmniRoute is ready", + "healthVerdictActionRequired": "Action required to restore full operation", + "healthVerdictCoolingDown": "Cooling down after recent changes", + "healthSubtitle": "System health check", + "advancedDiagnosticsTitle": "Advanced diagnostics", + "hide": "Hide", + "show": "Show" }, "telemetry": { "title": "Mfumo wa Telemetry", @@ -6383,7 +6416,21 @@ "savedModelEndpointSettings": "Mipangilio ya mwisho wa mfano uliohifadhiwa", "searchByModelAria": "Tafuta kwa mfano", "selectSupportedEndpoint": "Chagua angalau kiunganishi kimoja kinachoungwa mkono", - "antigravityClientProfileHarness": "Harness / CLI" + "antigravityClientProfileHarness": "Harness / CLI", + "harImportButtonLabel": "Import .har file", + "harImportButtonBusy": "Importing…", + "harImportButtonHint": "Export from DevTools Network tab after sending at least one chat message.", + "harImportStatusValid": "Imported — valid for ~{minutes}m.", + "harImportStatusExpiringSoon": "Imported — valid for only ~{minutes}m more.", + "harImportStatusExpired": "Imported, but this token already expired ({minutes}m ago) — export a fresh HAR.", + "harImportStatusUnknownExpiry": "Imported. Couldn't read its expiry.", + "harImportErrorNotJson": "That file isn't valid JSON — is it really a .har export?", + "harImportErrorNoEntries": "This HAR has no network entries recorded.", + "harImportErrorNoChathubUrl": "No Copilot chat connection found in this HAR. Send at least one chat message in m365.cloud.microsoft before exporting.", + "harImportErrorUnparsableUrl": "Found the chat connection, but couldn't read its URL.", + "harImportErrorMissingFields": "Found the chat connection, but the token was missing from it.", + "harImportErrorReadFailed": "Couldn't read that file.", + "harImportErrorUnknown": "Couldn't extract a credential from that HAR file." }, "settings": { "title": "Settings", @@ -8230,7 +8277,19 @@ "cliproxyapiHealth": "Afya", "cliproxyapiPort": "Bandari", "qdrantHost": "Mwenyeji", - "qdrantCollection": "Mkusanyiko" + "qdrantCollection": "Mkusanyiko", + "presetAll": "All", + "presetAllDesc": "Show everything", + "presetEssentials": "Essentials", + "presetEssentialsDesc": "Beginner path - Advanced tools stay searchable", + "presetMinimal": "Minimal", + "presetMinimalDesc": "Core pages only", + "presetDeveloper": "Developer", + "presetDeveloperDesc": "Dev & proxy tools", + "presetAdmin": "Admin", + "presetAdminDesc": "Monitoring & audit", + "settingsSidebarTitle": "Sidebar Customization", + "settingsSidebarDesc": "Choose which sidebar items to show. Essentials keeps Advanced tools searchable." }, "contextRtk": { "title": "RTK Engine", @@ -12017,7 +12076,8 @@ "title": "Mawakala wa ACP", "phrase": "CLI ambazo OmniRoute huzianzisha kama mfumo wa nyuma wa utekelezaji (mtiririko wa kinyume)", "flow": "Mteja → OmniRoute → anzisha CLI (stdio/ACP) → jibu", - "seeOther": "Ona →" + "seeOther": "Ona →", + "warning": "Most users can ignore this — use only when an integration requires it." } }, "comparison": { @@ -12841,6 +12901,10 @@ }, "SKILLS_SANDBOX_NETWORK_ENABLED": { "description": "Wezesha ufikiaji wa mtandao katika sandbox ya ujuzi." + }, + "DISABLE_CONTEXT_WINDOW_CHECKS": { + "label": "Disable Context Window Checks", + "description": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active." } } }, @@ -13413,6 +13477,13 @@ "modelLockouts": "Kufuli za Mfano", "count": "Idadi ya Miunganisho" } + }, + "reassuranceTitle": "Your connections recover automatically", + "reassuranceDetail": "Usually no action is needed. OmniRoute temporarily rests a connection after failures, then safely tries it again.", + "plainStates": { + "healthy": "Requests can be sent", + "coolingDown": "Trying again soon", + "lockedOut": "Needs your attention" } }, "featureFlagCapabilityFilterEnabledDescription": "kataa maombi kabla ya kutuma wakati mfano wa lengo hauna uwezo unaohitajika (maono, zana, matokeo yaliyoandikwa, dirisha la muktadha). Inalinda maombi ya moja kwa moja kutoka kwa mtoa huduma mmoja ambayo yanapita chujio cha ulinganifu wa safu ya mchanganyiko.", @@ -13850,5 +13921,13 @@ "toolsMismatch": "Mtoa huduma haitoi msaada wa kuita zana", "structuredOutputMismatch": "Mtoa huduma haitoi matokeo yaliyoandikwa kwa muundo", "contextWindowMismatch": "Omba inazidi dirisha la muktadha wa mtoa huduma" + }, + "featureFlagDisableContextWindowChecksDescription": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active.", + "cheaperInferenceSponsorBanner": { + "title": "Cheaper Inference is an OmniRoute Open Source Friend", + "description": "A cost-ranked gateway reselling dozens of frontier models behind one OpenAI-compatible endpoint — routing each request to the cheapest eligible provider, never above list price.", + "cta": "Get an API Key", + "partnerLinkNote": "Partner link", + "dismissAriaLabel": "Dismiss" } } diff --git a/src/i18n/messages/ta.json b/src/i18n/messages/ta.json index a9f42ff2ec0..fe03c5ad9f9 100644 --- a/src/i18n/messages/ta.json +++ b/src/i18n/messages/ta.json @@ -974,7 +974,14 @@ "batchFileUsedByCount": "{count, plural, one {# தொகுப்பு} other {# தொகுப்புகள்}}", "batchFilePreview": "முன்காட்சி", "batchFilePreviewTruncated": "முதல் {shown} வரிகளை காட்டு ({total} மொத்த வரிகள்)", - "batchFileDownloadFull": "முழு கோப்பை பதிவிறக்கம் செய்க" + "batchFileDownloadFull": "முழு கோப்பை பதிவிறக்கம் செய்க", + "batchHeaderSubtitle": "Run many requests as one job", + "batchStep1": "1 · Upload JSONL", + "batchStep1Desc": "Add requests", + "batchStep2": "2 · Create batch", + "batchStep2Desc": "Run job", + "batchStep3": "3 · Get results", + "batchStep3Desc": "Download output" }, "disabled": "முடக்கப்பட்டது", "featureFlagOmnirouteEmergencyFallbackDescription": "பட்ஜெட் தீர்ந்த கோரிக்கைகளை அவசரகால இலவச ஃபால்பேக் வழங்குநர்/மாடலுக்கு வழிசெலுத்துங்கள்.", @@ -1293,7 +1300,8 @@ "open": "திறக்கவும்", "close": "மூடு" }, - "noResults": "எந்த முடிவுகளும் இல்லை" + "noResults": "எந்த முடிவுகளும் இல்லை", + "trafficInspectorPurpose": "See exactly what your application sends to and receives from AI providers. Works with any OpenAI-compatible client." }, "webhooks": { "title": "வெப்ஹூக்ஸ்", @@ -1856,7 +1864,21 @@ "directDownloadHint": "அல்லது தொடர்புடைய நிறுவுநர் வடிவத்தை நேரடியாக பதிவிறக்கவும்:", "releaseNotes": "வெளியீட்டு குறிப்புகள்", "readMore": "மேலும் வாசிக்க", - "noAuthLabel": "அங்கீகாரம் இல்லை" + "noAuthLabel": "அங்கீகாரம் இல்லை", + "recentRequests": "Recent Requests", + "recentRequestsEmpty": "No requests yet.", + "recentRequestsModel": "Model", + "recentRequestsTokens": "In / Out", + "recentRequestsWhen": "When", + "readinessEyebrow": "Get ready to route", + "readinessTitle": "Send your first request", + "readinessSubtitle": "Four small steps. OmniRoute checks readiness as you go.", + "readinessStep1": "Connect a provider", + "readinessStep2": "Configure endpoint authentication", + "readinessStep3": "Copy your endpoint", + "readinessStep4": "Send a test request", + "readinessContinue": "Continue setup", + "readinessDismiss": "Dismiss for now" }, "analytics": { "title": "Analytics", @@ -2901,7 +2923,8 @@ "omp": "Oh My Pi டெர்மினல் குறியீட்டு முகவர்", "letta": "நிலையான நினைவகம் மற்றும் கருவிப் பயன்பாட்டுடன் கூடிய Letta CLI முகவர்", "warp": "தனிப்பயன் வழங்குநர் ஆதரவுடன் கூடிய Warp AI டெர்மினல்", - "agent-deck": "Agent Deck பல-முகவர் ஒருங்கிணைப்பாளர்" + "agent-deck": "Agent Deck பல-முகவர் ஒருங்கிணைப்பாளர்", + "prime-agent": "Prime Agent — self-improving RLM coding harness with OpenAI-compatible provider support" }, "guides": { "cursor": { @@ -4133,7 +4156,10 @@ "notionIntegrationHelp": "உள்ளக ஒருங்கிணைப்பை உருவாக்கவும்", "notionIntegrationToken": "Notion உள்நாட்டு ஒருங்கிணைப்பு டோக்கன்", "notionNotConnected": "இணைக்கப்படவில்லை", - "notionTokenConfigured": "டோக்கன் கட்டமைக்கப்பட்டுள்ளது. Notion கருவிகள் MCP மூலம் கிடைக்கின்றன." + "notionTokenConfigured": "டோக்கன் கட்டமைக்கப்பட்டுள்ளது. Notion கருவிகள் MCP மூலம் கிடைக்கின்றன.", + "subtitle": "Use the OpenAI-compatible endpoint with most SDKs and tools.", + "testEndpoint": "Test endpoint →", + "advancedProtocols": "Advanced protocols" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4716,7 +4742,14 @@ "issueCount": "{count} சிக்கல்கள்", "score": "மதிப்பெண்", "lastRequest": "கடைசி கோரிக்கை", - "lastError": "கடைசி பிழை" + "lastError": "கடைசி பிழை", + "healthVerdictReady": "OmniRoute is ready", + "healthVerdictActionRequired": "Action required to restore full operation", + "healthVerdictCoolingDown": "Cooling down after recent changes", + "healthSubtitle": "System health check", + "advancedDiagnosticsTitle": "Advanced diagnostics", + "hide": "Hide", + "show": "Show" }, "telemetry": { "title": "சிஸ்டம் டெலிமெட்ரி", @@ -6383,7 +6416,21 @@ "savedModelEndpointSettings": "சேமிக்கப்பட்ட மாதிரி முடிவுறுப்பு அமைப்புகள்", "searchByModelAria": "மாதிரியில் தேடு", "selectSupportedEndpoint": "குறைந்தது ஒரு ஆதரிக்கப்படும் முடிவுகளைத் தேர்ந்தெடுக்கவும்", - "antigravityClientProfileHarness": "Harness / CLI" + "antigravityClientProfileHarness": "Harness / CLI", + "harImportButtonLabel": "Import .har file", + "harImportButtonBusy": "Importing…", + "harImportButtonHint": "Export from DevTools Network tab after sending at least one chat message.", + "harImportStatusValid": "Imported — valid for ~{minutes}m.", + "harImportStatusExpiringSoon": "Imported — valid for only ~{minutes}m more.", + "harImportStatusExpired": "Imported, but this token already expired ({minutes}m ago) — export a fresh HAR.", + "harImportStatusUnknownExpiry": "Imported. Couldn't read its expiry.", + "harImportErrorNotJson": "That file isn't valid JSON — is it really a .har export?", + "harImportErrorNoEntries": "This HAR has no network entries recorded.", + "harImportErrorNoChathubUrl": "No Copilot chat connection found in this HAR. Send at least one chat message in m365.cloud.microsoft before exporting.", + "harImportErrorUnparsableUrl": "Found the chat connection, but couldn't read its URL.", + "harImportErrorMissingFields": "Found the chat connection, but the token was missing from it.", + "harImportErrorReadFailed": "Couldn't read that file.", + "harImportErrorUnknown": "Couldn't extract a credential from that HAR file." }, "settings": { "title": "Settings", @@ -8230,7 +8277,19 @@ "cliproxyapiHealth": "ஆரோக்கியம்", "cliproxyapiPort": "போர்ட்", "qdrantHost": "விருந்தினர்", - "qdrantCollection": "கலெக்ஷன்" + "qdrantCollection": "கலெக்ஷன்", + "presetAll": "All", + "presetAllDesc": "Show everything", + "presetEssentials": "Essentials", + "presetEssentialsDesc": "Beginner path - Advanced tools stay searchable", + "presetMinimal": "Minimal", + "presetMinimalDesc": "Core pages only", + "presetDeveloper": "Developer", + "presetDeveloperDesc": "Dev & proxy tools", + "presetAdmin": "Admin", + "presetAdminDesc": "Monitoring & audit", + "settingsSidebarTitle": "Sidebar Customization", + "settingsSidebarDesc": "Choose which sidebar items to show. Essentials keeps Advanced tools searchable." }, "contextRtk": { "title": "RTK Engine", @@ -12017,7 +12076,8 @@ "title": "ACP முகவர்கள்", "phrase": "OmniRoute செயல்படுத்தும் பின்தளமாக உருவாக்கும் CLIகள் (தலைகீழ் ஓட்டம்)", "flow": "வாடிக்கையாளர் → OmniRoute → CLI உருவாக்கு (stdio/ACP) → பதில்", - "seeOther": "பார்க்க →" + "seeOther": "பார்க்க →", + "warning": "Most users can ignore this — use only when an integration requires it." } }, "comparison": { @@ -12841,6 +12901,10 @@ }, "SKILLS_SANDBOX_NETWORK_ENABLED": { "description": "skills சாண்ட்பாக்ஸில் நெட்வொர்க் அணுகலை இயக்கவும்." + }, + "DISABLE_CONTEXT_WINDOW_CHECKS": { + "label": "Disable Context Window Checks", + "description": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active." } } }, @@ -13413,6 +13477,13 @@ "modelLockouts": "மாதிரி பூட்டுகள்", "count": "இணைப்புகளின் எண்ணிக்கை" } + }, + "reassuranceTitle": "Your connections recover automatically", + "reassuranceDetail": "Usually no action is needed. OmniRoute temporarily rests a connection after failures, then safely tries it again.", + "plainStates": { + "healthy": "Requests can be sent", + "coolingDown": "Trying again soon", + "lockedOut": "Needs your attention" } }, "featureFlagCapabilityFilterEnabledDescription": "விருப்பமான மாதிரி தேவையான திறன்களை (காணல், கருவிகள், கட்டமைக்கப்பட்ட வெளியீடு, சூழல் ஜன்னல்) இன்றி இருந்தால், அனுப்புவதற்கு முன் கோரிக்கைகளை நிராகரிக்கவும். கம்போ-லேயர் ஒத்திசைவு வடிகட்டியை தவிர்க்கும் நேரடி ஒற்றை வழங்குநர் கோரிக்கைகளை பாதுகாக்கிறது.", @@ -13850,5 +13921,13 @@ "toolsMismatch": "சேவையாளர் கருவி அழைப்பை ஆதரிக்கவில்லை", "structuredOutputMismatch": "சேவையாளர் கட்டமைக்கப்பட்ட வெளியீட்டை ஆதரிக்கவில்லை", "contextWindowMismatch": "விண்ணப்பம் வழங்குநர் சூழல் ஜன்னலை மீறுகிறது" + }, + "featureFlagDisableContextWindowChecksDescription": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active.", + "cheaperInferenceSponsorBanner": { + "title": "Cheaper Inference is an OmniRoute Open Source Friend", + "description": "A cost-ranked gateway reselling dozens of frontier models behind one OpenAI-compatible endpoint — routing each request to the cheapest eligible provider, never above list price.", + "cta": "Get an API Key", + "partnerLinkNote": "Partner link", + "dismissAriaLabel": "Dismiss" } } diff --git a/src/i18n/messages/te.json b/src/i18n/messages/te.json index bce2574fc57..2353afbda30 100644 --- a/src/i18n/messages/te.json +++ b/src/i18n/messages/te.json @@ -974,7 +974,14 @@ "batchFileUsedByCount": "{count, plural, one {# బ్యాచ్} other {# బ్యాచ్లు}}", "batchFilePreview": "పరిశీలన", "batchFilePreviewTruncated": "మొదటి {shown} పంక్తులు చూపిస్తున్నాయి ({total} మొత్తం పంక్తులు)", - "batchFileDownloadFull": "పూర్తి ఫైల్ డౌన్‌లోడ్ చేయండి" + "batchFileDownloadFull": "పూర్తి ఫైల్ డౌన్‌లోడ్ చేయండి", + "batchHeaderSubtitle": "Run many requests as one job", + "batchStep1": "1 · Upload JSONL", + "batchStep1Desc": "Add requests", + "batchStep2": "2 · Create batch", + "batchStep2Desc": "Run job", + "batchStep3": "3 · Get results", + "batchStep3Desc": "Download output" }, "disabled": "నిలిపివేయబడింది", "featureFlagOmnirouteEmergencyFallbackDescription": "బడ్జెట్ ముగిసిపోయిన అభ్యర్థనలను అత్యవసర ఉచిత ఫాల్‌బ్యాక్ ప్రొవైడర్/మోడల్‌కు రూట్ చేయండి.", @@ -1293,7 +1300,8 @@ "open": "తిరిగి తెరువు", "close": "మూసివేయండి" }, - "noResults": "ఫలితాలు లేవు" + "noResults": "ఫలితాలు లేవు", + "trafficInspectorPurpose": "See exactly what your application sends to and receives from AI providers. Works with any OpenAI-compatible client." }, "webhooks": { "title": "వెబ్‌బూక్స్", @@ -1856,7 +1864,21 @@ "directDownloadHint": "లేదా సంబంధిత ఇన్స్టాలర్ ఫార్మాట్‌ను నేరుగా డౌన్‌లోడ్ చేయండి:", "releaseNotes": "విడుదల గమనికలు", "readMore": "మరింత చదవండి", - "noAuthLabel": "ఎలాంటి ప్రమాణీకరణ లేదు" + "noAuthLabel": "ఎలాంటి ప్రమాణీకరణ లేదు", + "recentRequests": "Recent Requests", + "recentRequestsEmpty": "No requests yet.", + "recentRequestsModel": "Model", + "recentRequestsTokens": "In / Out", + "recentRequestsWhen": "When", + "readinessEyebrow": "Get ready to route", + "readinessTitle": "Send your first request", + "readinessSubtitle": "Four small steps. OmniRoute checks readiness as you go.", + "readinessStep1": "Connect a provider", + "readinessStep2": "Configure endpoint authentication", + "readinessStep3": "Copy your endpoint", + "readinessStep4": "Send a test request", + "readinessContinue": "Continue setup", + "readinessDismiss": "Dismiss for now" }, "analytics": { "title": "Analytics", @@ -2901,7 +2923,8 @@ "omp": "Oh My Pi టెర్మినల్ కోడింగ్ ఏజెంట్", "letta": "పర్సిస్టెంట్ మెమరీ మరియు టూల్ వినియోగంతో Letta CLI ఏజెంట్", "warp": "కస్టమ్ ప్రొవైడర్ సపోర్ట్‌తో Warp AI టెర్మినల్", - "agent-deck": "Agent Deck మల్టీ-ఏజెంట్ ఆర్కెస్ట్రేటర్" + "agent-deck": "Agent Deck మల్టీ-ఏజెంట్ ఆర్కెస్ట్రేటర్", + "prime-agent": "Prime Agent — self-improving RLM coding harness with OpenAI-compatible provider support" }, "guides": { "cursor": { @@ -4133,7 +4156,10 @@ "notionIntegrationHelp": "లో ఒక అంతర్గత సమీకరణను సృష్టించండి", "notionIntegrationToken": "Notion అంతర్గత ఇంటిగ్రేషన్ టోకెన్", "notionNotConnected": "కనెక్ట్ కాలేదు", - "notionTokenConfigured": "టోకెన్ కాన్ఫిగర్ చేయబడింది. Notion టూల్స్ MCP ద్వారా అందుబాటులో ఉన్నాయి." + "notionTokenConfigured": "టోకెన్ కాన్ఫిగర్ చేయబడింది. Notion టూల్స్ MCP ద్వారా అందుబాటులో ఉన్నాయి.", + "subtitle": "Use the OpenAI-compatible endpoint with most SDKs and tools.", + "testEndpoint": "Test endpoint →", + "advancedProtocols": "Advanced protocols" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4716,7 +4742,14 @@ "issueCount": "{count} సమస్యలు", "score": "స్కోరు", "lastRequest": "చివరి అభ్యర్థన", - "lastError": "చివరి లోపం" + "lastError": "చివరి లోపం", + "healthVerdictReady": "OmniRoute is ready", + "healthVerdictActionRequired": "Action required to restore full operation", + "healthVerdictCoolingDown": "Cooling down after recent changes", + "healthSubtitle": "System health check", + "advancedDiagnosticsTitle": "Advanced diagnostics", + "hide": "Hide", + "show": "Show" }, "telemetry": { "title": "సిస్టమ్ టెలిమెట్రీ", @@ -6383,7 +6416,21 @@ "savedModelEndpointSettings": "సేవ్ చేసిన మోడల్ ఎండ్‌పాయింట్ సెట్టింగ్స్", "searchByModelAria": "మోడల్ ద్వారా శోధించండి", "selectSupportedEndpoint": "కమిషన్ చేయబడిన కనెక్ట్ చేయబడిన ఎండ్‌పాయింట్‌లలో కనీసం ఒకటి ఎంచుకోండి", - "antigravityClientProfileHarness": "Harness / CLI" + "antigravityClientProfileHarness": "Harness / CLI", + "harImportButtonLabel": "Import .har file", + "harImportButtonBusy": "Importing…", + "harImportButtonHint": "Export from DevTools Network tab after sending at least one chat message.", + "harImportStatusValid": "Imported — valid for ~{minutes}m.", + "harImportStatusExpiringSoon": "Imported — valid for only ~{minutes}m more.", + "harImportStatusExpired": "Imported, but this token already expired ({minutes}m ago) — export a fresh HAR.", + "harImportStatusUnknownExpiry": "Imported. Couldn't read its expiry.", + "harImportErrorNotJson": "That file isn't valid JSON — is it really a .har export?", + "harImportErrorNoEntries": "This HAR has no network entries recorded.", + "harImportErrorNoChathubUrl": "No Copilot chat connection found in this HAR. Send at least one chat message in m365.cloud.microsoft before exporting.", + "harImportErrorUnparsableUrl": "Found the chat connection, but couldn't read its URL.", + "harImportErrorMissingFields": "Found the chat connection, but the token was missing from it.", + "harImportErrorReadFailed": "Couldn't read that file.", + "harImportErrorUnknown": "Couldn't extract a credential from that HAR file." }, "settings": { "title": "Settings", @@ -8230,7 +8277,19 @@ "cliproxyapiHealth": "ఆరోగ్యం", "cliproxyapiPort": "పోర్ట్", "qdrantHost": "హోస్ట్", - "qdrantCollection": "సేకరణ" + "qdrantCollection": "సేకరణ", + "presetAll": "All", + "presetAllDesc": "Show everything", + "presetEssentials": "Essentials", + "presetEssentialsDesc": "Beginner path - Advanced tools stay searchable", + "presetMinimal": "Minimal", + "presetMinimalDesc": "Core pages only", + "presetDeveloper": "Developer", + "presetDeveloperDesc": "Dev & proxy tools", + "presetAdmin": "Admin", + "presetAdminDesc": "Monitoring & audit", + "settingsSidebarTitle": "Sidebar Customization", + "settingsSidebarDesc": "Choose which sidebar items to show. Essentials keeps Advanced tools searchable." }, "contextRtk": { "title": "RTK Engine", @@ -12017,7 +12076,8 @@ "title": "ACP ఏజెంట్లు", "phrase": "ఎగ్జిక్యూషన్ బ్యాకెండ్‌గా OmniRoute సృష్టించే CLIలు (రివర్స్ ఫ్లో)", "flow": "క్లయింట్ → OmniRoute → spawn CLI (stdio/ACP) → రెస్పాన్స్", - "seeOther": "చూడండి →" + "seeOther": "చూడండి →", + "warning": "Most users can ignore this — use only when an integration requires it." } }, "comparison": { @@ -12841,6 +12901,10 @@ }, "SKILLS_SANDBOX_NETWORK_ENABLED": { "description": "స్కిల్స్ శాండ్‌బాక్స్‌లో నెట్‌వర్క్ యాక్సెస్‌ను ప్రారంభించండి." + }, + "DISABLE_CONTEXT_WINDOW_CHECKS": { + "label": "Disable Context Window Checks", + "description": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active." } } }, @@ -13413,6 +13477,13 @@ "modelLockouts": "మోడల్ లాక్‌అవుట్‌లు", "count": "కనెక్షన్ల సంఖ్య" } + }, + "reassuranceTitle": "Your connections recover automatically", + "reassuranceDetail": "Usually no action is needed. OmniRoute temporarily rests a connection after failures, then safely tries it again.", + "plainStates": { + "healthy": "Requests can be sent", + "coolingDown": "Trying again soon", + "lockedOut": "Needs your attention" } }, "featureFlagCapabilityFilterEnabledDescription": "ప్రయోజనాలు అవసరమైన సామర్థ్యాలు (దృష్టి, సాధనాలు, నిర్మిత అవుట్‌పుట్, సందర్భం విండో) లేని లక్ష్య మోడల్ ముందు పంపిణీకి అభ్యర్థనలను తిరస్కరించండి. కాంబో-లేయర్ అనుకూలత ఫిల్టర్‌ను దాటించే ప్రత్యక్ష సింగిల్-ప్రొవైడర్ అభ్యర్థనలను రక్షిస్తుంది.", @@ -13850,5 +13921,13 @@ "toolsMismatch": "ప్రొవైడర్ టూల్ కాలింగ్‌ను మద్దతు ఇవ్వదు", "structuredOutputMismatch": "ప్రొవైడర్ నిర్మిత అవుట్‌పుట్‌ను మద్దతు ఇవ్వదు", "contextWindowMismatch": "అనువర్తన ప్రదాత యొక్క సందర్భం కిటికీని మించు కోరింపు" + }, + "featureFlagDisableContextWindowChecksDescription": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active.", + "cheaperInferenceSponsorBanner": { + "title": "Cheaper Inference is an OmniRoute Open Source Friend", + "description": "A cost-ranked gateway reselling dozens of frontier models behind one OpenAI-compatible endpoint — routing each request to the cheapest eligible provider, never above list price.", + "cta": "Get an API Key", + "partnerLinkNote": "Partner link", + "dismissAriaLabel": "Dismiss" } } diff --git a/src/i18n/messages/th.json b/src/i18n/messages/th.json index f13731a7832..41f194ca504 100644 --- a/src/i18n/messages/th.json +++ b/src/i18n/messages/th.json @@ -974,7 +974,14 @@ "batchFileUsedByCount": "ใช้โดย {count, plural, one {# ชุด} other {# ชุด}}", "batchFilePreview": "ตัวอย่าง", "batchFilePreviewTruncated": "แสดง {shown} บรรทัดแรก ({total} บรรทัดรวม)", - "batchFileDownloadFull": "ดาวน์โหลดไฟล์ทั้งหมด" + "batchFileDownloadFull": "ดาวน์โหลดไฟล์ทั้งหมด", + "batchHeaderSubtitle": "Run many requests as one job", + "batchStep1": "1 · Upload JSONL", + "batchStep1Desc": "Add requests", + "batchStep2": "2 · Create batch", + "batchStep2Desc": "Run job", + "batchStep3": "3 · Get results", + "batchStep3Desc": "Download output" }, "disabled": "ปิดใช้งาน", "featureFlagOmnirouteEmergencyFallbackDescription": "กำหนดเส้นทางคำขอที่งบประมาณหมดไปยังผู้ให้บริการ/โมเดลสำรองฟรีในกรณีฉุกเฉิน", @@ -1293,7 +1300,8 @@ "open": "เปิด", "close": "ปิด" }, - "noResults": "ไม่มีผลลัพธ์" + "noResults": "ไม่มีผลลัพธ์", + "trafficInspectorPurpose": "See exactly what your application sends to and receives from AI providers. Works with any OpenAI-compatible client." }, "webhooks": { "title": "เว็บฮุค", @@ -1856,7 +1864,21 @@ "directDownloadHint": "หรือดาวน์โหลดรูปแบบติดตั้งที่เกี่ยวข้องโดยตรง:", "releaseNotes": "หมายเหตุการปล่อย", "readMore": "อ่านเพิ่มเติม", - "noAuthLabel": "ไม่มีการตรวจสอบสิทธิ์" + "noAuthLabel": "ไม่มีการตรวจสอบสิทธิ์", + "recentRequests": "Recent Requests", + "recentRequestsEmpty": "No requests yet.", + "recentRequestsModel": "Model", + "recentRequestsTokens": "In / Out", + "recentRequestsWhen": "When", + "readinessEyebrow": "Get ready to route", + "readinessTitle": "Send your first request", + "readinessSubtitle": "Four small steps. OmniRoute checks readiness as you go.", + "readinessStep1": "Connect a provider", + "readinessStep2": "Configure endpoint authentication", + "readinessStep3": "Copy your endpoint", + "readinessStep4": "Send a test request", + "readinessContinue": "Continue setup", + "readinessDismiss": "Dismiss for now" }, "analytics": { "title": "การวิเคราะห์", @@ -2901,7 +2923,8 @@ "omp": "เอเจนต์เขียนโค้ดบนเทอร์มินัล Oh My Pi", "letta": "เอเจนต์ Letta CLI พร้อมหน่วยความจำถาวรและการใช้เครื่องมือ", "warp": "เทอร์มินัล Warp AI ที่รองรับผู้ให้บริการแบบกำหนดเอง", - "agent-deck": "ตัวประสานงานหลายเอเจนต์ Agent Deck" + "agent-deck": "ตัวประสานงานหลายเอเจนต์ Agent Deck", + "prime-agent": "Prime Agent — self-improving RLM coding harness with OpenAI-compatible provider support" }, "guides": { "cursor": { @@ -4133,7 +4156,10 @@ "notionIntegrationHelp": "สร้างการรวมภายในที่", "notionIntegrationToken": "โทเค็นการรวมภายใน Notion", "notionNotConnected": "ไม่ได้เชื่อมต่อ", - "notionTokenConfigured": "กำหนดค่าโทเค็นแล้ว เครื่องมือ Notion สามารถใช้งานได้ผ่าน MCP." + "notionTokenConfigured": "กำหนดค่าโทเค็นแล้ว เครื่องมือ Notion สามารถใช้งานได้ผ่าน MCP.", + "subtitle": "Use the OpenAI-compatible endpoint with most SDKs and tools.", + "testEndpoint": "Test endpoint →", + "advancedProtocols": "Advanced protocols" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4716,7 +4742,14 @@ "issueCount": "{count} ปัญหา", "score": "คะแนน", "lastRequest": "คำขอล่าสุด", - "lastError": "ข้อผิดพลาดล่าสุด" + "lastError": "ข้อผิดพลาดล่าสุด", + "healthVerdictReady": "OmniRoute is ready", + "healthVerdictActionRequired": "Action required to restore full operation", + "healthVerdictCoolingDown": "Cooling down after recent changes", + "healthSubtitle": "System health check", + "advancedDiagnosticsTitle": "Advanced diagnostics", + "hide": "Hide", + "show": "Show" }, "telemetry": { "title": "ระบบโทรมาตร", @@ -6383,7 +6416,21 @@ "savedModelEndpointSettings": "การตั้งค่า endpoint ของโมเดลที่บันทึกไว้", "searchByModelAria": "ค้นหาตามรุ่น", "selectSupportedEndpoint": "เลือกจุดสิ้นสุดที่รองรับอย่างน้อยหนึ่งจุด", - "antigravityClientProfileHarness": "Harness / CLI" + "antigravityClientProfileHarness": "Harness / CLI", + "harImportButtonLabel": "Import .har file", + "harImportButtonBusy": "Importing…", + "harImportButtonHint": "Export from DevTools Network tab after sending at least one chat message.", + "harImportStatusValid": "Imported — valid for ~{minutes}m.", + "harImportStatusExpiringSoon": "Imported — valid for only ~{minutes}m more.", + "harImportStatusExpired": "Imported, but this token already expired ({minutes}m ago) — export a fresh HAR.", + "harImportStatusUnknownExpiry": "Imported. Couldn't read its expiry.", + "harImportErrorNotJson": "That file isn't valid JSON — is it really a .har export?", + "harImportErrorNoEntries": "This HAR has no network entries recorded.", + "harImportErrorNoChathubUrl": "No Copilot chat connection found in this HAR. Send at least one chat message in m365.cloud.microsoft before exporting.", + "harImportErrorUnparsableUrl": "Found the chat connection, but couldn't read its URL.", + "harImportErrorMissingFields": "Found the chat connection, but the token was missing from it.", + "harImportErrorReadFailed": "Couldn't read that file.", + "harImportErrorUnknown": "Couldn't extract a credential from that HAR file." }, "settings": { "title": "การตั้งค่า", @@ -8230,7 +8277,19 @@ "cliproxyapiHealth": "สุขภาพ", "cliproxyapiPort": "พอร์ต", "qdrantHost": "โฮสต์", - "qdrantCollection": "การรวบรวม" + "qdrantCollection": "การรวบรวม", + "presetAll": "All", + "presetAllDesc": "Show everything", + "presetEssentials": "Essentials", + "presetEssentialsDesc": "Beginner path - Advanced tools stay searchable", + "presetMinimal": "Minimal", + "presetMinimalDesc": "Core pages only", + "presetDeveloper": "Developer", + "presetDeveloperDesc": "Dev & proxy tools", + "presetAdmin": "Admin", + "presetAdminDesc": "Monitoring & audit", + "settingsSidebarTitle": "Sidebar Customization", + "settingsSidebarDesc": "Choose which sidebar items to show. Essentials keeps Advanced tools searchable." }, "contextRtk": { "title": "RTK Engine", @@ -12017,7 +12076,8 @@ "title": "เอเจนต์ ACP", "phrase": "CLI ที่ OmniRoute สร้างขึ้นเป็นแบ็กเอนด์การประมวลผล (โฟลว์ย้อนกลับ)", "flow": "ไคลเอนต์ → OmniRoute → สร้าง CLI (stdio/ACP) → การตอบกลับ", - "seeOther": "ดู →" + "seeOther": "ดู →", + "warning": "Most users can ignore this — use only when an integration requires it." } }, "comparison": { @@ -12841,6 +12901,10 @@ }, "SKILLS_SANDBOX_NETWORK_ENABLED": { "description": "เปิดใช้งานการเข้าถึงเครือข่ายใน skills sandbox" + }, + "DISABLE_CONTEXT_WINDOW_CHECKS": { + "label": "Disable Context Window Checks", + "description": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active." } } }, @@ -13413,6 +13477,13 @@ "modelLockouts": "การล็อกเอาต์โมเดล", "count": "จำนวนการเชื่อมต่อ" } + }, + "reassuranceTitle": "Your connections recover automatically", + "reassuranceDetail": "Usually no action is needed. OmniRoute temporarily rests a connection after failures, then safely tries it again.", + "plainStates": { + "healthy": "Requests can be sent", + "coolingDown": "Trying again soon", + "lockedOut": "Needs your attention" } }, "featureFlagCapabilityFilterEnabledDescription": "ปฏิเสธคำขอก่อนการส่งเมื่อโมเดลเป้าหมายขาดความสามารถที่จำเป็น (วิสัยทัศน์, เครื่องมือ, ผลลัพธ์ที่มีโครงสร้าง, หน้าต่างบริบท) ป้องกันคำขอจากผู้ให้บริการเดียวที่ข้ามตัวกรองความเข้ากันได้ของเลเยอร์รวม", @@ -13850,5 +13921,13 @@ "toolsMismatch": "ผู้ให้บริการไม่รองรับการเรียกเครื่องมือ", "structuredOutputMismatch": "ผู้ให้บริการไม่รองรับการส่งออกแบบมีโครงสร้าง", "contextWindowMismatch": "คำขอเกินขอบเขตบริบทของผู้ให้บริการ" + }, + "featureFlagDisableContextWindowChecksDescription": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active.", + "cheaperInferenceSponsorBanner": { + "title": "Cheaper Inference is an OmniRoute Open Source Friend", + "description": "A cost-ranked gateway reselling dozens of frontier models behind one OpenAI-compatible endpoint — routing each request to the cheapest eligible provider, never above list price.", + "cta": "Get an API Key", + "partnerLinkNote": "Partner link", + "dismissAriaLabel": "Dismiss" } } diff --git a/src/i18n/messages/tr.json b/src/i18n/messages/tr.json index 69890f1d89b..1b17127f391 100644 --- a/src/i18n/messages/tr.json +++ b/src/i18n/messages/tr.json @@ -974,7 +974,14 @@ "batchFileUsedByCount": "{count, plural, one {# parti} other {# parti}}", "batchFilePreview": "Önizleme", "batchFilePreviewTruncated": "İlk {shown} satır gösteriliyor ({total} toplam satır)", - "batchFileDownloadFull": "Tam Dosyayı İndir" + "batchFileDownloadFull": "Tam Dosyayı İndir", + "batchHeaderSubtitle": "Run many requests as one job", + "batchStep1": "1 · Upload JSONL", + "batchStep1Desc": "Add requests", + "batchStep2": "2 · Create batch", + "batchStep2Desc": "Run job", + "batchStep3": "3 · Get results", + "batchStep3Desc": "Download output" }, "disabled": "Devre dışı", "featureFlagOmnirouteEmergencyFallbackDescription": "Bütçesi tükenmiş istekleri acil durum ücretsiz yedek sağlayıcıya/modele yönlendirin.", @@ -1293,7 +1300,8 @@ "open": "açık", "close": "kapat" }, - "noResults": "Sonuç yok" + "noResults": "Sonuç yok", + "trafficInspectorPurpose": "See exactly what your application sends to and receives from AI providers. Works with any OpenAI-compatible client." }, "webhooks": { "title": "Web kancaları", @@ -1856,7 +1864,21 @@ "directDownloadHint": "Ya da ilgili yükleyici formatını doğrudan indirin:", "releaseNotes": "Sürüm Notları", "readMore": "Daha Fazla Oku", - "noAuthLabel": "Yetkisiz" + "noAuthLabel": "Yetkisiz", + "recentRequests": "Recent Requests", + "recentRequestsEmpty": "No requests yet.", + "recentRequestsModel": "Model", + "recentRequestsTokens": "In / Out", + "recentRequestsWhen": "When", + "readinessEyebrow": "Get ready to route", + "readinessTitle": "Send your first request", + "readinessSubtitle": "Four small steps. OmniRoute checks readiness as you go.", + "readinessStep1": "Connect a provider", + "readinessStep2": "Configure endpoint authentication", + "readinessStep3": "Copy your endpoint", + "readinessStep4": "Send a test request", + "readinessContinue": "Continue setup", + "readinessDismiss": "Dismiss for now" }, "analytics": { "title": "Analitik", @@ -2901,7 +2923,8 @@ "omp": "Oh My Pi terminal kodlama aracısı", "letta": "Kalıcı bellek ve araç kullanımına sahip Letta CLI aracısı", "warp": "Özel sağlayıcı desteğine sahip Warp AI terminali", - "agent-deck": "Agent Deck çoklu aracı orkestratörü" + "agent-deck": "Agent Deck çoklu aracı orkestratörü", + "prime-agent": "Prime Agent — self-improving RLM coding harness with OpenAI-compatible provider support" }, "guides": { "cursor": { @@ -4133,7 +4156,10 @@ "notionIntegrationHelp": "İç Entegrasyon Oluşturun at", "notionIntegrationToken": "Notion Dahili Entegrasyon Tokeni", "notionNotConnected": "Bağlı değil", - "notionTokenConfigured": "Token yapılandırıldı. Notion araçları MCP üzerinden mevcuttur." + "notionTokenConfigured": "Token yapılandırıldı. Notion araçları MCP üzerinden mevcuttur.", + "subtitle": "Use the OpenAI-compatible endpoint with most SDKs and tools.", + "testEndpoint": "Test endpoint →", + "advancedProtocols": "Advanced protocols" }, "endpoints": { "tabProxy": "Uç Nokta Proxy", @@ -4716,7 +4742,14 @@ "issueCount": "{count} sorun", "score": "Skor", "lastRequest": "Son istek", - "lastError": "Son hata" + "lastError": "Son hata", + "healthVerdictReady": "OmniRoute is ready", + "healthVerdictActionRequired": "Action required to restore full operation", + "healthVerdictCoolingDown": "Cooling down after recent changes", + "healthSubtitle": "System health check", + "advancedDiagnosticsTitle": "Advanced diagnostics", + "hide": "Hide", + "show": "Show" }, "telemetry": { "title": "Sistem Telemetrisi", @@ -6383,7 +6416,21 @@ "savedModelEndpointSettings": "Kaydedilmiş model uç noktası ayarları", "searchByModelAria": "Model ile ara", "selectSupportedEndpoint": "En az bir desteklenen uç noktayı seçin", - "antigravityClientProfileHarness": "Harness / CLI" + "antigravityClientProfileHarness": "Harness / CLI", + "harImportButtonLabel": "Import .har file", + "harImportButtonBusy": "Importing…", + "harImportButtonHint": "Export from DevTools Network tab after sending at least one chat message.", + "harImportStatusValid": "Imported — valid for ~{minutes}m.", + "harImportStatusExpiringSoon": "Imported — valid for only ~{minutes}m more.", + "harImportStatusExpired": "Imported, but this token already expired ({minutes}m ago) — export a fresh HAR.", + "harImportStatusUnknownExpiry": "Imported. Couldn't read its expiry.", + "harImportErrorNotJson": "That file isn't valid JSON — is it really a .har export?", + "harImportErrorNoEntries": "This HAR has no network entries recorded.", + "harImportErrorNoChathubUrl": "No Copilot chat connection found in this HAR. Send at least one chat message in m365.cloud.microsoft before exporting.", + "harImportErrorUnparsableUrl": "Found the chat connection, but couldn't read its URL.", + "harImportErrorMissingFields": "Found the chat connection, but the token was missing from it.", + "harImportErrorReadFailed": "Couldn't read that file.", + "harImportErrorUnknown": "Couldn't extract a credential from that HAR file." }, "settings": { "title": "Ayarlar", @@ -8230,7 +8277,19 @@ "cliproxyapiHealth": "Sağlık", "cliproxyapiPort": "Port", "qdrantHost": "Ana Bilgisayar", - "qdrantCollection": "Koleksiyon" + "qdrantCollection": "Koleksiyon", + "presetAll": "All", + "presetAllDesc": "Show everything", + "presetEssentials": "Essentials", + "presetEssentialsDesc": "Beginner path - Advanced tools stay searchable", + "presetMinimal": "Minimal", + "presetMinimalDesc": "Core pages only", + "presetDeveloper": "Developer", + "presetDeveloperDesc": "Dev & proxy tools", + "presetAdmin": "Admin", + "presetAdminDesc": "Monitoring & audit", + "settingsSidebarTitle": "Sidebar Customization", + "settingsSidebarDesc": "Choose which sidebar items to show. Essentials keeps Advanced tools searchable." }, "contextRtk": { "title": "RTK Engine", @@ -12017,7 +12076,8 @@ "title": "ACP Ajanları", "phrase": "OmniRoute'un yürütme arka ucu olarak başlattığı CLI'lar (ters akış)", "flow": "İstemci → OmniRoute → CLI başlat (stdio/ACP) → yanıt", - "seeOther": "Gör →" + "seeOther": "Gör →", + "warning": "Most users can ignore this — use only when an integration requires it." } }, "comparison": { @@ -12841,6 +12901,10 @@ }, "SKILLS_SANDBOX_NETWORK_ENABLED": { "description": "Yetenekler korumalı alanında (skills sandbox) ağ erişimini etkinleştirin." + }, + "DISABLE_CONTEXT_WINDOW_CHECKS": { + "label": "Disable Context Window Checks", + "description": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active." } } }, @@ -13413,6 +13477,13 @@ "modelLockouts": "Model Kilitleri", "count": "Bağlantı Sayısı" } + }, + "reassuranceTitle": "Your connections recover automatically", + "reassuranceDetail": "Usually no action is needed. OmniRoute temporarily rests a connection after failures, then safely tries it again.", + "plainStates": { + "healthy": "Requests can be sent", + "coolingDown": "Trying again soon", + "lockedOut": "Needs your attention" } }, "featureFlagCapabilityFilterEnabledDescription": "Hedef model gerekli yeteneklere (görüş, araçlar, yapılandırılmış çıktı, bağlam penceresi) sahip olmadığında, gönderimden önce istekleri reddedin. Kombinasyon katmanı uyumluluk filtresini atlayan doğrudan tek sağlayıcı isteklerini korur.", @@ -13850,5 +13921,13 @@ "toolsMismatch": "Sağlayıcı araç çağrısını desteklemiyor", "structuredOutputMismatch": "Sağlayıcı yapılandırılmış çıktıyı desteklemiyor", "contextWindowMismatch": "Talep sağlayıcı bağlam penceresini aşıyor" + }, + "featureFlagDisableContextWindowChecksDescription": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active.", + "cheaperInferenceSponsorBanner": { + "title": "Cheaper Inference is an OmniRoute Open Source Friend", + "description": "A cost-ranked gateway reselling dozens of frontier models behind one OpenAI-compatible endpoint — routing each request to the cheapest eligible provider, never above list price.", + "cta": "Get an API Key", + "partnerLinkNote": "Partner link", + "dismissAriaLabel": "Dismiss" } } diff --git a/src/i18n/messages/uk-UA.json b/src/i18n/messages/uk-UA.json index a16e0058cce..a8cb9f20484 100644 --- a/src/i18n/messages/uk-UA.json +++ b/src/i18n/messages/uk-UA.json @@ -974,7 +974,14 @@ "batchFileUsedByCount": "Використано {count, plural, one {# партія} other {# партій}}", "batchFilePreview": "Попередній перегляд", "batchFilePreviewTruncated": "Показано перші {shown} рядків ({total} всього рядків)", - "batchFileDownloadFull": "Завантажити повний файл" + "batchFileDownloadFull": "Завантажити повний файл", + "batchHeaderSubtitle": "Run many requests as one job", + "batchStep1": "1 · Upload JSONL", + "batchStep1Desc": "Add requests", + "batchStep2": "2 · Create batch", + "batchStep2Desc": "Run job", + "batchStep3": "3 · Get results", + "batchStep3Desc": "Download output" }, "disabled": "Вимкнено", "featureFlagOmnirouteEmergencyFallbackDescription": "Перенаправляти запити з вичерпаним бюджетом на резервного безкоштовного провайдера/модель.", @@ -1293,7 +1300,8 @@ "open": "відкрити", "close": "закрити" }, - "noResults": "Немає результатів" + "noResults": "Немає результатів", + "trafficInspectorPurpose": "See exactly what your application sends to and receives from AI providers. Works with any OpenAI-compatible client." }, "webhooks": { "title": "Веб-хуки", @@ -1856,7 +1864,21 @@ "directDownloadHint": "Або завантажте відповідний формат інсталятора безпосередньо:", "releaseNotes": "Примітки до випуску", "readMore": "Читати далі", - "noAuthLabel": "Без автентифікації" + "noAuthLabel": "Без автентифікації", + "recentRequests": "Recent Requests", + "recentRequestsEmpty": "No requests yet.", + "recentRequestsModel": "Model", + "recentRequestsTokens": "In / Out", + "recentRequestsWhen": "When", + "readinessEyebrow": "Get ready to route", + "readinessTitle": "Send your first request", + "readinessSubtitle": "Four small steps. OmniRoute checks readiness as you go.", + "readinessStep1": "Connect a provider", + "readinessStep2": "Configure endpoint authentication", + "readinessStep3": "Copy your endpoint", + "readinessStep4": "Send a test request", + "readinessContinue": "Continue setup", + "readinessDismiss": "Dismiss for now" }, "analytics": { "title": "Аналітика", @@ -2901,7 +2923,8 @@ "omp": "Термінальний агент для кодування Oh My Pi", "letta": "CLI-агент Letta з постійною пам'яттю та використанням інструментів", "warp": "ШІ-термінал Warp із підтримкою користувацьких провайдерів", - "agent-deck": "Мультиагентний оркестратор Agent Deck" + "agent-deck": "Мультиагентний оркестратор Agent Deck", + "prime-agent": "Prime Agent — self-improving RLM coding harness with OpenAI-compatible provider support" }, "guides": { "cursor": { @@ -4133,7 +4156,10 @@ "notionIntegrationHelp": "Створити внутрішню інтеграцію на", "notionIntegrationToken": "Токен внутрішньої інтеграції Notion", "notionNotConnected": "Не підключено", - "notionTokenConfigured": "Токен налаштовано. Інструменти Notion доступні через MCP." + "notionTokenConfigured": "Токен налаштовано. Інструменти Notion доступні через MCP.", + "subtitle": "Use the OpenAI-compatible endpoint with most SDKs and tools.", + "testEndpoint": "Test endpoint →", + "advancedProtocols": "Advanced protocols" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4716,7 +4742,14 @@ "issueCount": "{count} проблем", "score": "Оцінка", "lastRequest": "Останній запит", - "lastError": "Остання помилка" + "lastError": "Остання помилка", + "healthVerdictReady": "OmniRoute is ready", + "healthVerdictActionRequired": "Action required to restore full operation", + "healthVerdictCoolingDown": "Cooling down after recent changes", + "healthSubtitle": "System health check", + "advancedDiagnosticsTitle": "Advanced diagnostics", + "hide": "Hide", + "show": "Show" }, "telemetry": { "title": "Системна телеметрія", @@ -6383,7 +6416,21 @@ "savedModelEndpointSettings": "Налаштування кінцевої точки збереженої моделі", "searchByModelAria": "Пошук за моделлю", "selectSupportedEndpoint": "Виберіть принаймні одну підтримувану точку доступу", - "antigravityClientProfileHarness": "Harness / CLI" + "antigravityClientProfileHarness": "Harness / CLI", + "harImportButtonLabel": "Import .har file", + "harImportButtonBusy": "Importing…", + "harImportButtonHint": "Export from DevTools Network tab after sending at least one chat message.", + "harImportStatusValid": "Imported — valid for ~{minutes}m.", + "harImportStatusExpiringSoon": "Imported — valid for only ~{minutes}m more.", + "harImportStatusExpired": "Imported, but this token already expired ({minutes}m ago) — export a fresh HAR.", + "harImportStatusUnknownExpiry": "Imported. Couldn't read its expiry.", + "harImportErrorNotJson": "That file isn't valid JSON — is it really a .har export?", + "harImportErrorNoEntries": "This HAR has no network entries recorded.", + "harImportErrorNoChathubUrl": "No Copilot chat connection found in this HAR. Send at least one chat message in m365.cloud.microsoft before exporting.", + "harImportErrorUnparsableUrl": "Found the chat connection, but couldn't read its URL.", + "harImportErrorMissingFields": "Found the chat connection, but the token was missing from it.", + "harImportErrorReadFailed": "Couldn't read that file.", + "harImportErrorUnknown": "Couldn't extract a credential from that HAR file." }, "settings": { "title": "Налаштування", @@ -8230,7 +8277,19 @@ "cliproxyapiHealth": "Здоров'я", "cliproxyapiPort": "Порт", "qdrantHost": "Хост", - "qdrantCollection": "Колекція" + "qdrantCollection": "Колекція", + "presetAll": "All", + "presetAllDesc": "Show everything", + "presetEssentials": "Essentials", + "presetEssentialsDesc": "Beginner path - Advanced tools stay searchable", + "presetMinimal": "Minimal", + "presetMinimalDesc": "Core pages only", + "presetDeveloper": "Developer", + "presetDeveloperDesc": "Dev & proxy tools", + "presetAdmin": "Admin", + "presetAdminDesc": "Monitoring & audit", + "settingsSidebarTitle": "Sidebar Customization", + "settingsSidebarDesc": "Choose which sidebar items to show. Essentials keeps Advanced tools searchable." }, "contextRtk": { "title": "Двигун RTK", @@ -12017,7 +12076,8 @@ "title": "ACP Agents", "phrase": "CLI, які OmniRoute запускає як бекенд виконання (зворотний потік)", "flow": "Клієнт → OmniRoute → запуск CLI (stdio/ACP) → відповідь", - "seeOther": "Див. →" + "seeOther": "Див. →", + "warning": "Most users can ignore this — use only when an integration requires it." } }, "comparison": { @@ -12841,6 +12901,10 @@ }, "SKILLS_SANDBOX_NETWORK_ENABLED": { "description": "Увімкнути доступ до мережі в пісочниці навичок." + }, + "DISABLE_CONTEXT_WINDOW_CHECKS": { + "label": "Disable Context Window Checks", + "description": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active." } } }, @@ -13413,6 +13477,13 @@ "modelLockouts": "Блокування Моделі", "count": "Кількість З'єднань" } + }, + "reassuranceTitle": "Your connections recover automatically", + "reassuranceDetail": "Usually no action is needed. OmniRoute temporarily rests a connection after failures, then safely tries it again.", + "plainStates": { + "healthy": "Requests can be sent", + "coolingDown": "Trying again soon", + "lockedOut": "Needs your attention" } }, "featureFlagCapabilityFilterEnabledDescription": "Відхиляйте запити перед відправкою, коли цільова модель не має необхідних можливостей (зір, інструменти, структурований вихід, контекстне вікно). Захищає прямі запити від одного постачальника, які обходять фільтр сумісності комбінаційного шару.", @@ -13850,5 +13921,13 @@ "toolsMismatch": "Постачальник не підтримує виклик інструментів", "structuredOutputMismatch": "Постачальник не підтримує структурований вивід", "contextWindowMismatch": "Запит перевищує контекстне вікно постачальника" + }, + "featureFlagDisableContextWindowChecksDescription": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active.", + "cheaperInferenceSponsorBanner": { + "title": "Cheaper Inference is an OmniRoute Open Source Friend", + "description": "A cost-ranked gateway reselling dozens of frontier models behind one OpenAI-compatible endpoint — routing each request to the cheapest eligible provider, never above list price.", + "cta": "Get an API Key", + "partnerLinkNote": "Partner link", + "dismissAriaLabel": "Dismiss" } } diff --git a/src/i18n/messages/ur.json b/src/i18n/messages/ur.json index b7f65716ff2..51aa42a28a6 100644 --- a/src/i18n/messages/ur.json +++ b/src/i18n/messages/ur.json @@ -974,7 +974,14 @@ "batchFileUsedByCount": "استعمال کیا گیا {count, plural, one {# بیچ} other {# بیچوں}}", "batchFilePreview": "پیش نظارہ", "batchFilePreviewTruncated": "پہلی {shown} لائنیں دکھا رہے ہیں ({total} کل لائنیں)", - "batchFileDownloadFull": "مکمل فائل ڈاؤن لوڈ کریں" + "batchFileDownloadFull": "مکمل فائل ڈاؤن لوڈ کریں", + "batchHeaderSubtitle": "Run many requests as one job", + "batchStep1": "1 · Upload JSONL", + "batchStep1Desc": "Add requests", + "batchStep2": "2 · Create batch", + "batchStep2Desc": "Run job", + "batchStep3": "3 · Get results", + "batchStep3Desc": "Download output" }, "disabled": "Disabled", "featureFlagOmnirouteEmergencyFallbackDescription": "Route budget-exhausted requests to the emergency free fallback provider/model.", @@ -1293,7 +1300,8 @@ "open": "کھولیں", "close": "بند کریں" }, - "noResults": "کوئی نتائج نہیں" + "noResults": "کوئی نتائج نہیں", + "trafficInspectorPurpose": "See exactly what your application sends to and receives from AI providers. Works with any OpenAI-compatible client." }, "webhooks": { "title": "ویب ہکس", @@ -1856,7 +1864,21 @@ "directDownloadHint": "یا متعلقہ انسٹالر فارمیٹ کو براہ راست ڈاؤن لوڈ کریں:", "releaseNotes": "ریلیز نوٹس", "readMore": "مزید پڑھیں", - "noAuthLabel": "کوئی تصدیق نہیں" + "noAuthLabel": "کوئی تصدیق نہیں", + "recentRequests": "Recent Requests", + "recentRequestsEmpty": "No requests yet.", + "recentRequestsModel": "Model", + "recentRequestsTokens": "In / Out", + "recentRequestsWhen": "When", + "readinessEyebrow": "Get ready to route", + "readinessTitle": "Send your first request", + "readinessSubtitle": "Four small steps. OmniRoute checks readiness as you go.", + "readinessStep1": "Connect a provider", + "readinessStep2": "Configure endpoint authentication", + "readinessStep3": "Copy your endpoint", + "readinessStep4": "Send a test request", + "readinessContinue": "Continue setup", + "readinessDismiss": "Dismiss for now" }, "analytics": { "title": "Analytics", @@ -2901,7 +2923,8 @@ "omp": "Oh My Pi ٹرمینل کوڈنگ ایجنٹ", "letta": "مستقل میموری اور ٹول کے استعمال کے ساتھ Letta CLI ایجنٹ", "warp": "کسٹم پرووائیڈر سپورٹ کے ساتھ Warp AI ٹرمینل", - "agent-deck": "Agent Deck ملٹی ایجنٹ آرکیسٹریٹر" + "agent-deck": "Agent Deck ملٹی ایجنٹ آرکیسٹریٹر", + "prime-agent": "Prime Agent — self-improving RLM coding harness with OpenAI-compatible provider support" }, "guides": { "cursor": { @@ -4133,7 +4156,10 @@ "notionIntegrationHelp": "ایک داخلی انضمام بنائیں", "notionIntegrationToken": "Notion داخلی انضمام ٹوکن", "notionNotConnected": "منسلک نہیں ہے", - "notionTokenConfigured": "ٹوکین ترتیب دیا گیا ہے۔ نوٹیشن کے ٹولز MCP کے ذریعے دستیاب ہیں۔" + "notionTokenConfigured": "ٹوکین ترتیب دیا گیا ہے۔ نوٹیشن کے ٹولز MCP کے ذریعے دستیاب ہیں۔", + "subtitle": "Use the OpenAI-compatible endpoint with most SDKs and tools.", + "testEndpoint": "Test endpoint →", + "advancedProtocols": "Advanced protocols" }, "endpoints": { "tabProxy": "Endpoint Proxy", @@ -4716,7 +4742,14 @@ "issueCount": "{count} مسائل", "score": "اسکور", "lastRequest": "آخری درخواست", - "lastError": "آخری خرابی" + "lastError": "آخری خرابی", + "healthVerdictReady": "OmniRoute is ready", + "healthVerdictActionRequired": "Action required to restore full operation", + "healthVerdictCoolingDown": "Cooling down after recent changes", + "healthSubtitle": "System health check", + "advancedDiagnosticsTitle": "Advanced diagnostics", + "hide": "Hide", + "show": "Show" }, "telemetry": { "title": "سسٹم ٹیلی میٹری", @@ -6383,7 +6416,21 @@ "savedModelEndpointSettings": "محفوظ شدہ ماڈل اینڈپوائنٹ کی ترتیبات", "searchByModelAria": "ماڈل کے ذریعے تلاش کریں", "selectSupportedEndpoint": "کم از کم ایک سپورٹ کردہ اینڈپوائنٹ منتخب کریں", - "antigravityClientProfileHarness": "Harness / CLI" + "antigravityClientProfileHarness": "Harness / CLI", + "harImportButtonLabel": "Import .har file", + "harImportButtonBusy": "Importing…", + "harImportButtonHint": "Export from DevTools Network tab after sending at least one chat message.", + "harImportStatusValid": "Imported — valid for ~{minutes}m.", + "harImportStatusExpiringSoon": "Imported — valid for only ~{minutes}m more.", + "harImportStatusExpired": "Imported, but this token already expired ({minutes}m ago) — export a fresh HAR.", + "harImportStatusUnknownExpiry": "Imported. Couldn't read its expiry.", + "harImportErrorNotJson": "That file isn't valid JSON — is it really a .har export?", + "harImportErrorNoEntries": "This HAR has no network entries recorded.", + "harImportErrorNoChathubUrl": "No Copilot chat connection found in this HAR. Send at least one chat message in m365.cloud.microsoft before exporting.", + "harImportErrorUnparsableUrl": "Found the chat connection, but couldn't read its URL.", + "harImportErrorMissingFields": "Found the chat connection, but the token was missing from it.", + "harImportErrorReadFailed": "Couldn't read that file.", + "harImportErrorUnknown": "Couldn't extract a credential from that HAR file." }, "settings": { "title": "Settings", @@ -8230,7 +8277,19 @@ "cliproxyapiHealth": "صحت", "cliproxyapiPort": "پورٹ", "qdrantHost": "میزبان", - "qdrantCollection": "اجتماع" + "qdrantCollection": "اجتماع", + "presetAll": "All", + "presetAllDesc": "Show everything", + "presetEssentials": "Essentials", + "presetEssentialsDesc": "Beginner path - Advanced tools stay searchable", + "presetMinimal": "Minimal", + "presetMinimalDesc": "Core pages only", + "presetDeveloper": "Developer", + "presetDeveloperDesc": "Dev & proxy tools", + "presetAdmin": "Admin", + "presetAdminDesc": "Monitoring & audit", + "settingsSidebarTitle": "Sidebar Customization", + "settingsSidebarDesc": "Choose which sidebar items to show. Essentials keeps Advanced tools searchable." }, "contextRtk": { "title": "RTK Engine", @@ -12017,7 +12076,8 @@ "title": "ACP ایجنٹس", "phrase": "وہ CLIs جنہیں OmniRoute بطور ایگزیکیوشن بیک اینڈ چلاتا ہے (ریورس فلو)", "flow": "کلائنٹ → OmniRoute → spawn CLI (stdio/ACP) → جواب", - "seeOther": "دیکھیں →" + "seeOther": "دیکھیں →", + "warning": "Most users can ignore this — use only when an integration requires it." } }, "comparison": { @@ -12841,6 +12901,10 @@ }, "SKILLS_SANDBOX_NETWORK_ENABLED": { "description": "اسکلز سینڈ باکس میں نیٹ ورک تک رسائی کو فعال کریں۔" + }, + "DISABLE_CONTEXT_WINDOW_CHECKS": { + "label": "Disable Context Window Checks", + "description": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active." } } }, @@ -13413,6 +13477,13 @@ "modelLockouts": "ماڈل لاک آؤٹس", "count": "کنکشنز کی تعداد" } + }, + "reassuranceTitle": "Your connections recover automatically", + "reassuranceDetail": "Usually no action is needed. OmniRoute temporarily rests a connection after failures, then safely tries it again.", + "plainStates": { + "healthy": "Requests can be sent", + "coolingDown": "Trying again soon", + "lockedOut": "Needs your attention" } }, "featureFlagCapabilityFilterEnabledDescription": "جب ہدف ماڈل میں ضروری صلاحیتیں (نظریات، ٹولز، منظم آؤٹ پٹ، سیاق و سباق کی کھڑکی) نہیں ہوتیں تو بھیجنے سے پہلے درخواستوں کو مسترد کریں۔ یہ براہ راست واحد فراہم کنندہ کی درخواستوں کی حفاظت کرتا ہے جو کمبو-لیئر کی ہم آہنگی کے فلٹر کو نظر انداز کرتی ہیں۔", @@ -13850,5 +13921,13 @@ "toolsMismatch": "فراہم کنندہ ٹول کالنگ کی حمایت نہیں کرتا", "structuredOutputMismatch": "پرووائیڈر ساختی آؤٹ پٹ کی حمایت نہیں کرتا", "contextWindowMismatch": "درخواست فراہم کنندہ کے سیاق و سباق کی ونڈو سے تجاوز کر گئی ہے" + }, + "featureFlagDisableContextWindowChecksDescription": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active.", + "cheaperInferenceSponsorBanner": { + "title": "Cheaper Inference is an OmniRoute Open Source Friend", + "description": "A cost-ranked gateway reselling dozens of frontier models behind one OpenAI-compatible endpoint — routing each request to the cheapest eligible provider, never above list price.", + "cta": "Get an API Key", + "partnerLinkNote": "Partner link", + "dismissAriaLabel": "Dismiss" } } diff --git a/src/i18n/messages/zh-CN.json b/src/i18n/messages/zh-CN.json index dd0172b18bf..bdee47d0136 100644 --- a/src/i18n/messages/zh-CN.json +++ b/src/i18n/messages/zh-CN.json @@ -974,7 +974,14 @@ "batchFileUsedByCount": "被 {count, plural, one {# 批次} other {# 批次}} 使用", "batchFilePreview": "预览", "batchFilePreviewTruncated": "显示前 {shown} 行(共 {total} 行)", - "batchFileDownloadFull": "下载完整文件" + "batchFileDownloadFull": "下载完整文件", + "batchHeaderSubtitle": "Run many requests as one job", + "batchStep1": "1 · Upload JSONL", + "batchStep1Desc": "Add requests", + "batchStep2": "2 · Create batch", + "batchStep2Desc": "Run job", + "batchStep3": "3 · Get results", + "batchStep3Desc": "Download output" }, "disabled": "已禁用", "featureFlagOmnirouteEmergencyFallbackDescription": "将预算耗尽的请求路由到紧急免费备用提供者/模型。", @@ -1293,7 +1300,8 @@ "open": "打开", "close": "关闭" }, - "noResults": "没有结果" + "noResults": "没有结果", + "trafficInspectorPurpose": "See exactly what your application sends to and receives from AI providers. Works with any OpenAI-compatible client." }, "webhooks": { "title": "Webhook", @@ -1856,7 +1864,21 @@ "directDownloadHint": "或直接下载相应的安装程序格式:", "releaseNotes": "发布说明", "readMore": "阅读更多", - "noAuthLabel": "无认证" + "noAuthLabel": "无认证", + "recentRequests": "Recent Requests", + "recentRequestsEmpty": "No requests yet.", + "recentRequestsModel": "Model", + "recentRequestsTokens": "In / Out", + "recentRequestsWhen": "When", + "readinessEyebrow": "Get ready to route", + "readinessTitle": "Send your first request", + "readinessSubtitle": "Four small steps. OmniRoute checks readiness as you go.", + "readinessStep1": "Connect a provider", + "readinessStep2": "Configure endpoint authentication", + "readinessStep3": "Copy your endpoint", + "readinessStep4": "Send a test request", + "readinessContinue": "Continue setup", + "readinessDismiss": "Dismiss for now" }, "analytics": { "title": "分析", @@ -2901,7 +2923,8 @@ "omp": "Oh My Pi 终端编程智能体", "letta": "具备持久记忆和工具使用能力的 Letta CLI 智能体", "warp": "支持自定义提供者的 Warp AI 终端", - "agent-deck": "Agent Deck 多智能体编排器" + "agent-deck": "Agent Deck 多智能体编排器", + "prime-agent": "Prime Agent — self-improving RLM coding harness with OpenAI-compatible provider support" }, "guides": { "cursor": { @@ -4133,7 +4156,10 @@ "notionIntegrationHelp": "在创建内部集成时", "notionIntegrationToken": "Notion 内部集成令牌", "notionNotConnected": "未连接", - "notionTokenConfigured": "令牌已配置。Notion 工具可通过 MCP 使用。" + "notionTokenConfigured": "令牌已配置。Notion 工具可通过 MCP 使用。", + "subtitle": "Use the OpenAI-compatible endpoint with most SDKs and tools.", + "testEndpoint": "Test endpoint →", + "advancedProtocols": "Advanced protocols" }, "endpoints": { "tabProxy": "端点代理", @@ -4716,7 +4742,14 @@ "issueCount": "{count} 个问题", "score": "评分", "lastRequest": "最近请求", - "lastError": "最近错误" + "lastError": "最近错误", + "healthVerdictReady": "OmniRoute is ready", + "healthVerdictActionRequired": "Action required to restore full operation", + "healthVerdictCoolingDown": "Cooling down after recent changes", + "healthSubtitle": "System health check", + "advancedDiagnosticsTitle": "Advanced diagnostics", + "hide": "Hide", + "show": "Show" }, "telemetry": { "title": "系统遥测", @@ -6383,7 +6416,21 @@ "savedModelEndpointSettings": "已保存的模型端点设置", "searchByModelAria": "按型号搜索", "selectSupportedEndpoint": "请选择至少一个支持的端点", - "antigravityClientProfileHarness": "Harness / CLI" + "antigravityClientProfileHarness": "Harness / CLI", + "harImportButtonLabel": "Import .har file", + "harImportButtonBusy": "Importing…", + "harImportButtonHint": "Export from DevTools Network tab after sending at least one chat message.", + "harImportStatusValid": "Imported — valid for ~{minutes}m.", + "harImportStatusExpiringSoon": "Imported — valid for only ~{minutes}m more.", + "harImportStatusExpired": "Imported, but this token already expired ({minutes}m ago) — export a fresh HAR.", + "harImportStatusUnknownExpiry": "Imported. Couldn't read its expiry.", + "harImportErrorNotJson": "That file isn't valid JSON — is it really a .har export?", + "harImportErrorNoEntries": "This HAR has no network entries recorded.", + "harImportErrorNoChathubUrl": "No Copilot chat connection found in this HAR. Send at least one chat message in m365.cloud.microsoft before exporting.", + "harImportErrorUnparsableUrl": "Found the chat connection, but couldn't read its URL.", + "harImportErrorMissingFields": "Found the chat connection, but the token was missing from it.", + "harImportErrorReadFailed": "Couldn't read that file.", + "harImportErrorUnknown": "Couldn't extract a credential from that HAR file." }, "settings": { "title": "设置", @@ -8230,7 +8277,19 @@ "cliproxyapiHealth": "健康", "cliproxyapiPort": "端口", "qdrantHost": "主机", - "qdrantCollection": "集合" + "qdrantCollection": "集合", + "presetAll": "All", + "presetAllDesc": "Show everything", + "presetEssentials": "Essentials", + "presetEssentialsDesc": "Beginner path - Advanced tools stay searchable", + "presetMinimal": "Minimal", + "presetMinimalDesc": "Core pages only", + "presetDeveloper": "Developer", + "presetDeveloperDesc": "Dev & proxy tools", + "presetAdmin": "Admin", + "presetAdminDesc": "Monitoring & audit", + "settingsSidebarTitle": "Sidebar Customization", + "settingsSidebarDesc": "Choose which sidebar items to show. Essentials keeps Advanced tools searchable." }, "contextRtk": { "title": "命令输出过滤引擎", @@ -12017,7 +12076,8 @@ "title": "ACP 代理", "phrase": "OmniRoute 作为执行后端(反向流)生成的 CLI", "flow": "客户端 → OmniRoute → 生成 CLI (stdio/ACP) → 响应", - "seeOther": "查看 →" + "seeOther": "查看 →", + "warning": "Most users can ignore this — use only when an integration requires it." } }, "comparison": { @@ -12841,6 +12901,10 @@ }, "SKILLS_SANDBOX_NETWORK_ENABLED": { "description": "在技能沙箱中启用网络访问。" + }, + "DISABLE_CONTEXT_WINDOW_CHECKS": { + "label": "Disable Context Window Checks", + "description": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active." } } }, @@ -13413,6 +13477,13 @@ "modelLockouts": "模型锁定", "count": "连接数" } + }, + "reassuranceTitle": "Your connections recover automatically", + "reassuranceDetail": "Usually no action is needed. OmniRoute temporarily rests a connection after failures, then safely tries it again.", + "plainStates": { + "healthy": "Requests can be sent", + "coolingDown": "Trying again soon", + "lockedOut": "Needs your attention" } }, "featureFlagCapabilityFilterEnabledDescription": "在目标模型缺少所需能力(视觉、工具、结构化输出、上下文窗口)时,拒绝调度前的请求。保护绕过组合层兼容性过滤器的直接单一提供者请求。", @@ -13850,5 +13921,13 @@ "toolsMismatch": "提供者不支持工具调用", "structuredOutputMismatch": "提供者不支持结构化输出", "contextWindowMismatch": "请求超出提供者上下文窗口" + }, + "featureFlagDisableContextWindowChecksDescription": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active.", + "cheaperInferenceSponsorBanner": { + "title": "Cheaper Inference is an OmniRoute Open Source Friend", + "description": "A cost-ranked gateway reselling dozens of frontier models behind one OpenAI-compatible endpoint — routing each request to the cheapest eligible provider, never above list price.", + "cta": "Get an API Key", + "partnerLinkNote": "Partner link", + "dismissAriaLabel": "Dismiss" } } diff --git a/src/i18n/messages/zh-TW.json b/src/i18n/messages/zh-TW.json index e9876d5a3fc..699509851e6 100644 --- a/src/i18n/messages/zh-TW.json +++ b/src/i18n/messages/zh-TW.json @@ -974,7 +974,14 @@ "batchFileUsedByCount": "被 {count, plural, one {# 批次} other {# 批次}} 使用", "batchFilePreview": "預覽", "batchFilePreviewTruncated": "顯示前 {shown} 行(共 {total} 行)", - "batchFileDownloadFull": "下載完整檔案" + "batchFileDownloadFull": "下載完整檔案", + "batchHeaderSubtitle": "Run many requests as one job", + "batchStep1": "1 · Upload JSONL", + "batchStep1Desc": "Add requests", + "batchStep2": "2 · Create batch", + "batchStep2Desc": "Run job", + "batchStep3": "3 · Get results", + "batchStep3Desc": "Download output" }, "disabled": "已停用", "featureFlagOmnirouteEmergencyFallbackDescription": "將預算耗盡的請求路由到緊急免費備用提供者/模型。", @@ -1293,7 +1300,8 @@ "open": "打開", "close": "關閉" }, - "noResults": "沒有結果" + "noResults": "沒有結果", + "trafficInspectorPurpose": "See exactly what your application sends to and receives from AI providers. Works with any OpenAI-compatible client." }, "webhooks": { "title": "Webhook", @@ -1856,7 +1864,21 @@ "directDownloadHint": "或直接下載相應的安裝程式格式:", "releaseNotes": "發佈說明", "readMore": "閱讀更多", - "noAuthLabel": "無認證" + "noAuthLabel": "無認證", + "recentRequests": "Recent Requests", + "recentRequestsEmpty": "No requests yet.", + "recentRequestsModel": "Model", + "recentRequestsTokens": "In / Out", + "recentRequestsWhen": "When", + "readinessEyebrow": "Get ready to route", + "readinessTitle": "Send your first request", + "readinessSubtitle": "Four small steps. OmniRoute checks readiness as you go.", + "readinessStep1": "Connect a provider", + "readinessStep2": "Configure endpoint authentication", + "readinessStep3": "Copy your endpoint", + "readinessStep4": "Send a test request", + "readinessContinue": "Continue setup", + "readinessDismiss": "Dismiss for now" }, "analytics": { "title": "分析", @@ -2901,7 +2923,8 @@ "omp": "Oh My Pi 終端機程式代理", "letta": "Letta CLI 代理,具備持久記憶與工具使用能力", "warp": "Warp AI 終端機,支援自訂提供者", - "agent-deck": "Agent Deck 多代理協調器" + "agent-deck": "Agent Deck 多代理協調器", + "prime-agent": "Prime Agent — self-improving RLM coding harness with OpenAI-compatible provider support" }, "guides": { "cursor": { @@ -4133,7 +4156,10 @@ "notionIntegrationHelp": "在此創建內部整合", "notionIntegrationToken": "Notion 內部整合令牌", "notionNotConnected": "未連接", - "notionTokenConfigured": "已配置令牌。Notion 工具可通過 MCP 使用。" + "notionTokenConfigured": "已配置令牌。Notion 工具可通過 MCP 使用。", + "subtitle": "Use the OpenAI-compatible endpoint with most SDKs and tools.", + "testEndpoint": "Test endpoint →", + "advancedProtocols": "Advanced protocols" }, "endpoints": { "tabProxy": "端點代理", @@ -4716,7 +4742,14 @@ "issueCount": "{count} 個問題", "score": "評分", "lastRequest": "最近請求", - "lastError": "最近錯誤" + "lastError": "最近錯誤", + "healthVerdictReady": "OmniRoute is ready", + "healthVerdictActionRequired": "Action required to restore full operation", + "healthVerdictCoolingDown": "Cooling down after recent changes", + "healthSubtitle": "System health check", + "advancedDiagnosticsTitle": "Advanced diagnostics", + "hide": "Hide", + "show": "Show" }, "telemetry": { "title": "系統遙測", @@ -6383,7 +6416,21 @@ "savedModelEndpointSettings": "已儲存的模型端點設定", "searchByModelAria": "按型號搜尋", "selectSupportedEndpoint": "請選擇至少一個受支持的端點", - "antigravityClientProfileHarness": "Harness / CLI" + "antigravityClientProfileHarness": "Harness / CLI", + "harImportButtonLabel": "Import .har file", + "harImportButtonBusy": "Importing…", + "harImportButtonHint": "Export from DevTools Network tab after sending at least one chat message.", + "harImportStatusValid": "Imported — valid for ~{minutes}m.", + "harImportStatusExpiringSoon": "Imported — valid for only ~{minutes}m more.", + "harImportStatusExpired": "Imported, but this token already expired ({minutes}m ago) — export a fresh HAR.", + "harImportStatusUnknownExpiry": "Imported. Couldn't read its expiry.", + "harImportErrorNotJson": "That file isn't valid JSON — is it really a .har export?", + "harImportErrorNoEntries": "This HAR has no network entries recorded.", + "harImportErrorNoChathubUrl": "No Copilot chat connection found in this HAR. Send at least one chat message in m365.cloud.microsoft before exporting.", + "harImportErrorUnparsableUrl": "Found the chat connection, but couldn't read its URL.", + "harImportErrorMissingFields": "Found the chat connection, but the token was missing from it.", + "harImportErrorReadFailed": "Couldn't read that file.", + "harImportErrorUnknown": "Couldn't extract a credential from that HAR file." }, "settings": { "title": "設定", @@ -8230,7 +8277,19 @@ "cliproxyapiHealth": "健康", "cliproxyapiPort": "埠", "qdrantHost": "主機", - "qdrantCollection": "集合" + "qdrantCollection": "集合", + "presetAll": "All", + "presetAllDesc": "Show everything", + "presetEssentials": "Essentials", + "presetEssentialsDesc": "Beginner path - Advanced tools stay searchable", + "presetMinimal": "Minimal", + "presetMinimalDesc": "Core pages only", + "presetDeveloper": "Developer", + "presetDeveloperDesc": "Dev & proxy tools", + "presetAdmin": "Admin", + "presetAdminDesc": "Monitoring & audit", + "settingsSidebarTitle": "Sidebar Customization", + "settingsSidebarDesc": "Choose which sidebar items to show. Essentials keeps Advanced tools searchable." }, "contextRtk": { "title": "RTK 引擎", @@ -12017,7 +12076,8 @@ "title": "ACP 代理", "phrase": "OmniRoute 作為執行後端(反向流)生成的 CLI", "flow": "客戶端 → OmniRoute → 生成 CLI (stdio/ACP) → 回應", - "seeOther": "檢視 →" + "seeOther": "檢視 →", + "warning": "Most users can ignore this — use only when an integration requires it." } }, "comparison": { @@ -12841,6 +12901,10 @@ }, "SKILLS_SANDBOX_NETWORK_ENABLED": { "description": "在技能沙盒中啟用網路存取。" + }, + "DISABLE_CONTEXT_WINDOW_CHECKS": { + "label": "Disable Context Window Checks", + "description": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active." } } }, @@ -13413,6 +13477,13 @@ "modelLockouts": "模型鎖定", "count": "連線數" } + }, + "reassuranceTitle": "Your connections recover automatically", + "reassuranceDetail": "Usually no action is needed. OmniRoute temporarily rests a connection after failures, then safely tries it again.", + "plainStates": { + "healthy": "Requests can be sent", + "coolingDown": "Trying again soon", + "lockedOut": "Needs your attention" } }, "featureFlagCapabilityFilterEnabledDescription": "在目標模型缺乏所需功能(視覺、工具、結構化輸出、上下文窗口)時,拒絕發送前的請求。保護繞過組合層兼容性過濾器的直接單一提供者請求。", @@ -13850,5 +13921,13 @@ "toolsMismatch": "提供者不支援工具呼叫", "structuredOutputMismatch": "提供者不支援結構化輸出", "contextWindowMismatch": "請求超出提供者上下文窗口" + }, + "featureFlagDisableContextWindowChecksDescription": "Skip OmniRoute's local context-window and max-input-token check for direct single-model requests. Upstream providers still enforce their actual limits. Prompt compression and output-token caps remain active.", + "cheaperInferenceSponsorBanner": { + "title": "Cheaper Inference is an OmniRoute Open Source Friend", + "description": "A cost-ranked gateway reselling dozens of frontier models behind one OpenAI-compatible endpoint — routing each request to the cheapest eligible provider, never above list price.", + "cta": "Get an API Key", + "partnerLinkNote": "Partner link", + "dismissAriaLabel": "Dismiss" } } From c3698eedcb8a0e7226fce0299d63ace03261f970 Mon Sep 17 00:00:00 2001 From: Diego Rodrigues de Sa e Souza Date: Mon, 24 Aug 2026 01:49:32 -0300 Subject: [PATCH 08/17] fix(dashboard): route the Adapta tutorial CTA through the branded shortener (#11329) Validated on a 17-PR combined board: TSX parses clean, eslint clean. Adapta tutorial CTA href now points at the branded shortener (link.omniroute.online/adapta) while keeping the visible link text as the real domain. Completes #11196's shortener rollout. --- .../providers/[id]/components/AdaptaTutorialModal.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/app/(dashboard)/dashboard/providers/[id]/components/AdaptaTutorialModal.tsx b/src/app/(dashboard)/dashboard/providers/[id]/components/AdaptaTutorialModal.tsx index e01ab1ea2dd..8882b7ab3c8 100644 --- a/src/app/(dashboard)/dashboard/providers/[id]/components/AdaptaTutorialModal.tsx +++ b/src/app/(dashboard)/dashboard/providers/[id]/components/AdaptaTutorialModal.tsx @@ -7,6 +7,10 @@ type AdaptaTutorialModalProps = { onClose: () => void; }; +// The Adapta CTA href points at https://link.omniroute.online/adapta (our own +// shortener, the `adapta` slug) so the click lands in our Kutt metrics. The visible +// link text intentionally stays the real domain (agent.adapta.one/agentic-chat) so +// users still see where they are going. export function AdaptaTutorialModal({ isOpen, onClose }: AdaptaTutorialModalProps) { const t = useTranslations("providers.adaptaTutorial"); @@ -29,7 +33,7 @@ export function AdaptaTutorialModal({ isOpen, onClose }: AdaptaTutorialModalProp

{t("step1DescPrefix")}{" "} Date: Mon, 24 Aug 2026 11:49:37 +0700 Subject: [PATCH 09/17] fix(security): refuse proxy-authorization and proxy-authenticate upstream (#11328) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Validated on a 17-PR combined board: upstream-headers-proxy-auth within the board's 287/287, typecheck:core clean, gates within baseline. proxy-authorization and proxy-authenticate join the FORBIDDEN denylist — forwarding proxy-authorization to a model provider would hand that provider the operator's own proxy credential. Thank you @ntdat812! --- .../11328-upstream-headers-proxy-auth.md | 1 + src/shared/constants/upstreamHeaders.ts | 10 +++ .../unit/upstream-headers-proxy-auth.test.ts | 66 +++++++++++++++++++ 3 files changed, 77 insertions(+) create mode 100644 changelog.d/fixes/11328-upstream-headers-proxy-auth.md create mode 100644 tests/unit/upstream-headers-proxy-auth.test.ts diff --git a/changelog.d/fixes/11328-upstream-headers-proxy-auth.md b/changelog.d/fixes/11328-upstream-headers-proxy-auth.md new file mode 100644 index 00000000000..2155b9ea904 --- /dev/null +++ b/changelog.d/fixes/11328-upstream-headers-proxy-auth.md @@ -0,0 +1 @@ +- **fix(security):** `proxy-authorization` and `proxy-authenticate` are refused as upstream/custom headers, so a proxy credential is no longer forwarded to the model provider — the canonical denylist now matches the RFC 7230 §6.1 set the rest of the codebase already strips ([#11328](https://github.com/diegosouzapw/OmniRoute/pull/11328)) diff --git a/src/shared/constants/upstreamHeaders.ts b/src/shared/constants/upstreamHeaders.ts index f4502aacfa1..5d9d7f7f080 100644 --- a/src/shared/constants/upstreamHeaders.ts +++ b/src/shared/constants/upstreamHeaders.ts @@ -10,6 +10,16 @@ const FORBIDDEN = new Set( "content-length", "keep-alive", "proxy-connection", + // The two RFC 7230 §6.1 hop-by-hop names this list was missing. They belong + // to the connection between the client and OmniRoute (or its upstream + // proxy), never to the request OmniRoute makes to the model provider — + // forwarding `proxy-authorization` hands that proxy credential to the + // provider. `src/lib/services/reverseProxy.ts` (HOP_BY_HOP), + // `src/mitm/sanitizeHeaders.ts`, `src/mitm/inspector/httpProxyServer.ts`, + // `src/mitm/tproxy/tlsCapture.ts` and `src/app/api/openapi/try/route.ts` + // all already strip them; this list, the canonical one, did not. + "proxy-authenticate", + "proxy-authorization", "transfer-encoding", "te", "trailer", diff --git a/tests/unit/upstream-headers-proxy-auth.test.ts b/tests/unit/upstream-headers-proxy-auth.test.ts new file mode 100644 index 00000000000..6cca43ead0e --- /dev/null +++ b/tests/unit/upstream-headers-proxy-auth.test.ts @@ -0,0 +1,66 @@ +// `FORBIDDEN` in src/shared/constants/upstreamHeaders.ts is documented as the +// hop-by-hop / Host / framing denylist, and it was missing two of the RFC 7230 +// §6.1 names. Measured before the fix: +// +// proxy-authorization upstream=allow custom=allow +// proxy-authenticate upstream=allow custom=allow +// proxy-connection upstream=BLOCK custom=BLOCK +// +// `proxy-authorization` is the one that costs something: it authenticates the +// hop to the operator's own proxy, so forwarding it hands that credential to +// the model provider. Five other modules in this repo already strip it +// (reverseProxy HOP_BY_HOP, mitm/sanitizeHeaders, inspector/httpProxyServer, +// tproxy/tlsCapture, openapi/try) — the canonical list did not. +import { test } from "node:test"; +import assert from "node:assert/strict"; + +import { + isForbiddenUpstreamHeaderName, + isForbiddenCustomHeaderName, +} from "../../src/shared/constants/upstreamHeaders.ts"; +import { HOP_BY_HOP } from "../../src/lib/services/reverseProxy.ts"; +import { sanitizeUpstreamHeadersMap } from "../../src/lib/db/models.ts"; + +test("proxy-authorization and proxy-authenticate are refused", () => { + for (const name of ["proxy-authorization", "proxy-authenticate"]) { + assert.equal(isForbiddenUpstreamHeaderName(name), true, name); + assert.equal(isForbiddenCustomHeaderName(name), true, name); + } +}); + +test("the refusal is case-insensitive, like every other name in the list", () => { + for (const name of ["Proxy-Authorization", "PROXY-AUTHENTICATE", " Proxy-Authorization "]) { + assert.equal(isForbiddenUpstreamHeaderName(name), true, name); + } +}); + +test("sanitizeUpstreamHeadersMap drops them and keeps the rest", () => { + const out = sanitizeUpstreamHeadersMap({ + "Proxy-Authorization": "Basic c2VjcmV0", + "Proxy-Authenticate": "Basic realm=x", + "X-Custom": "ok", + }); + + assert.deepEqual(out, { "X-Custom": "ok" }); +}); + +test("the canonical list now covers every hop-by-hop name reverseProxy strips", () => { + // `reverseProxy.HOP_BY_HOP` is the repo's own RFC 7230 §6.1 list. The two + // lists drifting apart is what this fix repairs, so compare them directly — + // `trailers` is the TE token, spelled `trailer` as a header name. + const missing = [...HOP_BY_HOP] + .map((name) => (name === "trailers" ? "trailer" : name)) + .filter((name) => !isForbiddenUpstreamHeaderName(name)); + + assert.deepEqual(missing, []); +}); + +test("ordinary headers are still allowed", () => { + for (const name of ["x-custom", "x-forwarded-for", "user-agent", "accept"]) { + assert.equal(isForbiddenUpstreamHeaderName(name), false, name); + } + // Auth headers stay allowed as *upstream* headers (the credential layer owns + // them) while remaining forbidden as operator-supplied custom headers. + assert.equal(isForbiddenUpstreamHeaderName("authorization"), false); + assert.equal(isForbiddenCustomHeaderName("authorization"), true); +}); From 24ac71465eb2d7d6311567a19f14ac678ed3e4ac Mon Sep 17 00:00:00 2001 From: Paco Cartones <253313177+pacocartones@users.noreply.github.com> Date: Mon, 24 Aug 2026 06:49:42 +0200 Subject: [PATCH 10/17] test(db): make singleton reset survive the full suite and un-skip the 3 DB-state tests (#11327) Validated on a 17-PR combined board: capture-critical-db-state 7/7 (all three previously-skipped tests now run) within the board's 287/287, typecheck:core clean. Fixes the racy DATA_DIR-after-dynamic-import isolation and removes a duplicate type declaration. Thank you @pacocartones! --- tests/unit/capture-critical-db-state.test.ts | 77 +++++++++----------- 1 file changed, 33 insertions(+), 44 deletions(-) diff --git a/tests/unit/capture-critical-db-state.test.ts b/tests/unit/capture-critical-db-state.test.ts index 957c1afce36..6ded65793ee 100644 --- a/tests/unit/capture-critical-db-state.test.ts +++ b/tests/unit/capture-critical-db-state.test.ts @@ -4,41 +4,33 @@ import fs from "node:fs"; import os from "node:os"; import path from "node:path"; -type CoreModule = typeof import("../../src/lib/db/core.ts"); - -// Shared across all tests — the module caches DATA_DIR / SQLITE_FILE at load time, -// so we must create the temp dir and import exactly once. -type CoreModule = typeof import("../../src/lib/db/core.ts"); -let tempDir: string; -let originalDataDir: string | undefined; -let getDbInstance: CoreModule["getDbInstance"]; -let resetDbInstance: CoreModule["resetDbInstance"]; -let ensureDbInitialized: CoreModule["ensureDbInitialized"]; -let closeDbInstance: CoreModule["closeDbInstance"]; +// Single shared tempDir for all tests — DATA_DIR/SQLITE_FILE are module-level consts +// resolved once at first import, so we must create the temp dir and set DATA_DIR +// BEFORE importing core.ts. +const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "omniroute-db-test-")); +const originalDataDir = process.env.DATA_DIR; +process.env.DATA_DIR = tempDir; + +// Import resetDbInstance ONCE at the top with the same ESM specifier the tests use, +// so cleanup() operates on the real singleton (not a stale CJS require). +// This is the FIRST import of core.ts, so DATA_DIR resolves to our tempDir. +import { + getDbInstance, + resetDbInstance, + ensureDbInitialized, + closeDbInstance, +} from "../../src/lib/db/core.ts"; before(async () => { - tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "omniroute-db-test-")); - originalDataDir = process.env.DATA_DIR; - process.env.DATA_DIR = tempDir; - - const core = await import("../../src/lib/db/core.ts"); - getDbInstance = core.getDbInstance; - resetDbInstance = core.resetDbInstance; - ensureDbInitialized = core.ensureDbInitialized; - closeDbInstance = core.closeDbInstance; - - // Clear any singleton left by a previous test file in the same shard + // Clear any singleton left by a previous test file in the same shard. closeDbInstance(); - // Create a fresh DB in the temp dir (handles async driver initialization) + // Create a fresh DB in the temp dir (handles async driver initialization). await ensureDbInitialized(); }); after(() => { - try { - resetDbInstance(); - } catch { - // ignore - } + // Let reset errors surface — no silent swallowing. + resetDbInstance(); if (originalDataDir !== undefined) { process.env.DATA_DIR = originalDataDir; } else { @@ -90,9 +82,9 @@ test("getDbInstance creates tables from SCHEMA_SQL (proves initialization succee // The preservedCriticalState sentinel is captureSucceeded: true on fresh DB // (no existing file = no corruption path = initialized with default sentinel). // Verify this indirectly: the DB is fully functional and migrations ran. - const migrationCount = db - .prepare("SELECT COUNT(*) as c FROM _omniroute_migrations") - .get() as { c: number }; + const migrationCount = db.prepare("SELECT COUNT(*) as c FROM _omniroute_migrations").get() as { + c: number; + }; assert.ok(migrationCount.c >= 1, "at least one migration should be recorded"); }); @@ -142,12 +134,14 @@ test("resetDbInstance clears the singleton so next call creates a new DB", async // Write a marker row so we can prove the post-reset handle reopens the same // on-disk file through a freshly opened connection (not the cached one). - db1.prepare("INSERT INTO key_value (namespace, key, value) VALUES (?, ?, ?)").run( - "reset_ns", - "marker", - JSON.stringify({ v: 1 }) - ); + db1 + .prepare("INSERT INTO key_value (namespace, key, value) VALUES (?, ?, ?)") + .run("reset_ns", "marker", JSON.stringify({ v: 1 })); + // Close the previous handle explicitly before resetting, so the file descriptor + // is released before the next reopen (POSIX allows open fds to survive fs.rmSync, + // but we want honest isolation, not accidental survival). + closeDbInstance(); resetDbInstance(); // Re-initialize after reset — drivers may need async pre-init (sql.js WASM) @@ -169,19 +163,14 @@ test("getDbInstance sets WAL journal mode", async () => { const db = getDbInstance(); const mode = db.pragma("journal_mode", { simple: true }) as string; - assert.equal( - String(mode).toLowerCase(), - "wal", - "on-disk DB should open in WAL journal mode" - ); + assert.equal(String(mode).toLowerCase(), "wal", "on-disk DB should open in WAL journal mode"); }); test("getDbInstance stores schema_version in db_meta", async () => { const db = getDbInstance(); - const row = db - .prepare("SELECT value FROM db_meta WHERE key = 'schema_version'") - .get() as { value: string } | undefined; + const row = db.prepare("SELECT value FROM db_meta WHERE key = 'schema_version'").get() as + { value: string } | undefined; assert.ok(row, "db_meta should hold a schema_version row after init"); assert.equal(row.value, "1", "schema_version should be seeded to '1'"); }); From 04b2c479406b520448e6db358be8cbaf064f3f78 Mon Sep 17 00:00:00 2001 From: Nguyen Thanh Dat Date: Mon, 24 Aug 2026 11:49:48 +0700 Subject: [PATCH 11/17] fix(i18n): restore three placeholders dropped from the pt catalogue (#11325) Validated on a 17-PR combined board: i18n-placeholder-parity within the board's 287/287, typecheck:core clean. Restores 3 dropped placeholders in pt.json (the visible one: the cache tile's subtitle was repeating its own label instead of showing the total) and adds a 42-locale placeholder-set gate so this class of drift can't recur silently. Thank you @ntdat812! --- .../fixes/11325-i18n-pt-placeholder-parity.md | 1 + src/i18n/messages/pt.json | 6 +- tests/unit/i18n-placeholder-parity.test.ts | 94 +++++++++++++++++++ 3 files changed, 98 insertions(+), 3 deletions(-) create mode 100644 changelog.d/fixes/11325-i18n-pt-placeholder-parity.md create mode 100644 tests/unit/i18n-placeholder-parity.test.ts diff --git a/changelog.d/fixes/11325-i18n-pt-placeholder-parity.md b/changelog.d/fixes/11325-i18n-pt-placeholder-parity.md new file mode 100644 index 00000000000..97a2370955d --- /dev/null +++ b/changelog.d/fixes/11325-i18n-pt-placeholder-parity.md @@ -0,0 +1 @@ +- **fix(i18n):** three `pt` strings had dropped their placeholders — the cache tile's subtitle repeated its own label instead of showing `{total}` — and a unit test now enforces placeholder parity with `en` across all locales ([#11325](https://github.com/diegosouzapw/OmniRoute/pull/11325)) diff --git a/src/i18n/messages/pt.json b/src/i18n/messages/pt.json index 3194c7e4929..a20bd38f1df 100644 --- a/src/i18n/messages/pt.json +++ b/src/i18n/messages/pt.json @@ -4242,7 +4242,7 @@ "smokeSendSuccessWithTask": "message/send ok (tarefa {taskId}).", "smokeSendSuccess": "message/send ok.", "smokeStreamFailed": "Teste de fumo message/stream falhou.", - "smokeStreamSuccessWithTask": "message/stream ok (tarefa {taskId}).", + "smokeStreamSuccessWithTask": "message/stream ok (tarefa {taskId}{stateSuffix}).", "smokeStreamNoTaskId": "message/stream terminou sem ID de tarefa.", "health": "Estado de saúde", "ok": "OK", @@ -10202,7 +10202,7 @@ "scanning": "A analisar...", "opencodeIntegration": "Integração OpenCode", "opencodeDetected": "opencode {version} detetado", - "opencodeDesc": "Gera um {configFile} pronto a usar com a tua configuração OmniRoute", + "opencodeDesc": "Gera um {configFile} pronto a usar com o URL base do OmniRoute e todos os modelos disponíveis — coloca-o na raiz do teu projeto e executa {command}.", "downloadConfig": "Descarregar {file}", "downloaded": "Descarregado!", "setupGuideTitle": "Guia de configuração", @@ -10395,7 +10395,7 @@ "dbEntries": "Entradas na BD", "dbEntriesSub": "Persistido (SQLite)", "cacheHits": "Acertos de cache", - "cacheHitsSub": "Acertos", + "cacheHitsSub": "de {total} no total", "tokensSaved": "Tokens Poupançados", "tokensSavedSub": "Estimado a partir de acertos", "hitRate": "Taxa de acertos", diff --git a/tests/unit/i18n-placeholder-parity.test.ts b/tests/unit/i18n-placeholder-parity.test.ts new file mode 100644 index 00000000000..fcb4f75e792 --- /dev/null +++ b/tests/unit/i18n-placeholder-parity.test.ts @@ -0,0 +1,94 @@ +// A translation that drops a placeholder silently loses the value it carried: +// the string still renders, just without the number, path or command the +// English copy promised. Nothing checked for that, and three strings had +// drifted (all in `pt`): +// +// a2aDashboard.smokeStreamSuccessWithTask lost {stateSuffix} +// agents.opencodeDesc lost {command} +// cache.cacheHitsSub lost {total} ("of {total} total" -> "Acertos") +// +// Placeholder sets are compared, not counts or order: a locale may reorder or +// repeat them, but it may not introduce one English never defined (it would +// render literally) or drop one (its value disappears). +import { test } from "node:test"; +import assert from "node:assert/strict"; +import { readFileSync, readdirSync } from "node:fs"; +import { fileURLToPath } from "node:url"; +import path from "node:path"; + +const messagesDir = path.join( + path.dirname(fileURLToPath(import.meta.url)), + "..", + "..", + "src", + "i18n", + "messages" +); + +type Json = { [key: string]: string | Json }; + +function loadLocale(file: string): Json { + return JSON.parse(readFileSync(path.join(messagesDir, file), "utf8")) as Json; +} + +function flatten(value: Json, prefix = ""): Map { + const out = new Map(); + for (const [key, child] of Object.entries(value)) { + const dotted = prefix ? `${prefix}.${key}` : key; + if (typeof child === "string") out.set(dotted, child); + else if (child && typeof child === "object") { + for (const [k, v] of flatten(child, dotted)) out.set(k, v); + } + } + return out; +} + +/** + * Names an ICU message interpolates: `{name}` and the argument of a typed + * placeholder such as `{count, plural, ...}`. Nested sub-messages are covered + * because the scan is a plain sweep of the whole string. + */ +function placeholders(message: string): Set { + return new Set( + [...message.matchAll(/\{\s*([a-zA-Z0-9_]+)\s*[,}]/g)].map((match) => match[1]) + ); +} + +const english = flatten(loadLocale("en.json")); +const locales = readdirSync(messagesDir) + .filter((file) => file.endsWith(".json") && file !== "en.json") + .sort(); + +test("every locale keeps the placeholders its English source defines", () => { + const drift: string[] = []; + + for (const file of locales) { + for (const [key, translated] of flatten(loadLocale(file))) { + const source = english.get(key); + if (typeof source !== "string") continue; + + const expected = placeholders(source); + const actual = placeholders(translated); + const missing = [...expected].filter((name) => !actual.has(name)); + const unknown = [...actual].filter((name) => !expected.has(name)); + if (missing.length === 0 && unknown.length === 0) continue; + + drift.push( + `${file} ${key}\n` + + ` en: ${source}\n` + + ` ${file.replace(".json", "")}: ${translated}\n` + + ` missing=[${missing.join(", ")}] unknown=[${unknown.join(", ")}]` + ); + } + } + + assert.deepEqual(drift, [], `\n placeholder drift:\n ${drift.join("\n ")}\n`); +}); + +test("the checker itself recognises the drift it is meant to catch", () => { + // Without this the test above could pass by never matching anything. + assert.deepEqual([...placeholders("of {total} total")], ["total"]); + assert.deepEqual([...placeholders("ok (task {taskId}{stateSuffix}).")], ["taskId", "stateSuffix"]); + assert.deepEqual([...placeholders("{count, plural, one {# item} other {# items}}")], ["count"]); + assert.deepEqual([...placeholders("Acertos")], []); +}); From 79f8ae9d1ecbbda6f1ef8302dff0d9ef05279eb8 Mon Sep 17 00:00:00 2001 From: Paco Cartones <253313177+pacocartones@users.noreply.github.com> Date: Mon, 24 Aug 2026 06:49:52 +0200 Subject: [PATCH 12/17] fix(i18n): add the 3 pt-BR CLI keys that break the locale parity test (#11322) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Validated on a 17-PR combined board: typecheck:core clean, gates within baseline. Restores 3 missing pt-BR CLI keys (setup.opencode, serve.tls_cert, serve.tls_key) — parity restored, 823/823. Thank you @pacocartones! --- bin/cli/locales/pt-BR.json | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/bin/cli/locales/pt-BR.json b/bin/cli/locales/pt-BR.json index c821bf976c0..eec1b42a0e5 100644 --- a/bin/cli/locales/pt-BR.json +++ b/bin/cli/locales/pt-BR.json @@ -26,7 +26,8 @@ "testFailed": "Teste do provedor falhou: {error}", "loginEnabled": "Login: habilitado (senha atualizada)", "loginDisabled": "Login: desabilitado", - "providerInfo": "Provedor: {info}" + "providerInfo": "Provedor: {info}", + "opencode": "Instala e configura o plugin @omniroute/opencode-plugin incluído para o OpenCode" }, "doctor": { "title": "OmniRoute Doctor", @@ -254,7 +255,9 @@ "no_recovery": "Desabilitar reinício automático em crash (modo debug)", "max_restarts": "Máximo de reinícios em 30s antes de desistir (padrão: 2)", "tray": "Mostrar ícone na bandeja do sistema (apenas desktop, opt-in)", - "no_tray": "Desabilitar ícone na bandeja do sistema" + "no_tray": "Desabilitar ícone na bandeja do sistema", + "tls_cert": "Caminho para um certificado TLS (PEM) para servir HTTPS (também OMNIROUTE_TLS_CERT)", + "tls_key": "Caminho para a chave privada TLS (PEM) para servir HTTPS (também OMNIROUTE_TLS_KEY)" }, "backup": { "title": "Backup", From 6984676d95880796be8a6b5fc818c3934d2978ed Mon Sep 17 00:00:00 2001 From: Paco Cartones <253313177+pacocartones@users.noreply.github.com> Date: Mon, 24 Aug 2026 06:50:26 +0200 Subject: [PATCH 13/17] fix(quality): report the real failure line and stop double-counting ci.yml gates (#11321) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Validated on a 17-PR combined board: validate-release-green within the board's 287/287, typecheck:core clean. Two accuracy bugs in the release-green verdict tool: an unanchored regex blamed a passing test line (matching a filename containing 'fail'), and 6 gates were double-recorded as both hard-failure and drift due to an id-format mismatch (ci.yml script name vs curated id). Found while reading the #9985 verdict — good catch. --- scripts/quality/validate-release-green.mjs | 54 +++++++++- tests/unit/validate-release-green.test.ts | 116 +++++++++++++++++++++ 2 files changed, 168 insertions(+), 2 deletions(-) diff --git a/scripts/quality/validate-release-green.mjs b/scripts/quality/validate-release-green.mjs index 725ac93d9f1..264e1eac577 100644 --- a/scripts/quality/validate-release-green.mjs +++ b/scripts/quality/validate-release-green.mjs @@ -90,13 +90,30 @@ export function baselineValue(metric, root = ROOT) { } } +// A line that is unambiguously a PASS. Test reporters print the file name on BOTH the +// pass and the fail line, so a green line for a file whose NAME contains "fail" +// (fail-fast-*.test.ts, failover-*.test.ts) must never be offered as a failure cause. +const GREEN_LINE_RE = /^[✓✔√]/; + +// Markers that are only meaningful at the START of a line: "FAIL" also occurs inside test +// FILE NAMES and inside summary prose ("Test Files 1 failed"), so matching it anywhere — +// and case-insensitively — reports a PASSING file as the cause of the red. +const LINE_START_FAILURE_RE = /^(?:[✖✗×]|FAIL\b|not ok\b|REGRESS)/; + +// Markers that are unambiguous ANYWHERE in the line: tsc and Node emit them mid-line +// ("src/x.ts(10,5): error TS2322: ..."), so these stay unanchored. They are matched +// case-SENSITIVELY because that is how the emitting tools actually spell them. +const INLINE_FAILURE_RE = /\berror TS\d+\b|\bAssertionError\b|\bError:|\bREGRESS/; + /** Best-effort "first meaningful failure line" from captured command output. */ export function firstFailureLine(out) { const lines = String(out || "") .split("\n") .map((l) => l.trim()) .filter(Boolean); - const hit = lines.find((l) => /✖|✗|not ok|AssertionError|error TS|FAIL|Error:|REGRESS/i.test(l)); + const hit = lines.find( + (l) => !GREEN_LINE_RE.test(l) && (LINE_START_FAILURE_RE.test(l) || INLINE_FAILURE_RE.test(l)) + ); return (hit || lines[lines.length - 1] || "failed").slice(0, 200); } @@ -232,6 +249,36 @@ export function fullCiTimeoutFor(gateId) { return FULL_CI_TIMEOUT_OVERRIDES_MS[gateId] ?? FULL_CI_DEFAULT_TIMEOUT_MS; } +// ci.yml gate scripts whose result the CURATED pass already records under a DIFFERENT id. +// Without this map the --full-ci pass re-records them unconditionally as kind:"hard" while +// the curated pass recorded them as kind:"drift", and the SAME gate is printed in BOTH +// verdict buckets of one report (file-size / compression-budget appeared as a hard failure +// and as drift simultaneously in the #9985 verdict). +export const FULL_CI_CURATED_ALIASES = { + lint: "lint-errors", + "check:workflows": "workflow-lint", + "check:complexity-ratchets": "complexity", +}; + +/** Curated-pass id equivalent to a ci.yml gate script id ("check:file-size" -> "file-size"). */ +export function curatedEquivalentId(scriptId) { + const id = String(scriptId || ""); + if (Object.hasOwn(FULL_CI_CURATED_ALIASES, id)) return FULL_CI_CURATED_ALIASES[id]; + return id.startsWith("check:") ? id.slice("check:".length) : id; +} + +/** + * Bucket a --full-ci gate must be reported under: the classification the curated pass already + * gave the equivalent gate, else "hard" (the --full-ci default for gates the curated list does + * not cover). This only changes WHICH BUCKET a result is printed in — it never changes whether + * a gate runs, nor whether it passed. + */ +export function fullCiKindFor(scriptId, results) { + const equivalent = curatedEquivalentId(scriptId); + const curated = (results || []).find((r) => r.id === scriptId || r.id === equivalent); + return curated?.kind ?? "hard"; +} + /** * Parse a ci.yml text and return the ordered, de-duplicated list of gate commands to run. * Each entry: { id, job, args:["run",