From be04c7aecb28b6b0a2506b3af4fe1b20b855ce1b Mon Sep 17 00:00:00 2001 From: Xiangzhe Date: Fri, 14 Aug 2026 12:21:43 -0300 Subject: [PATCH] fix(radar): reconcile cumulative release integration --- .github/pull_request_template.md | 2 +- .github/workflows/ci.yml | 7 +++-- AGENTS.md | 2 +- README.md | 2 +- docs/diagrams/comparison-table.svg | 4 +-- docs/diagrams/promise-pillars.svg | 4 +-- docs/frameworks/RADAR.md | 2 +- docs/i18n/ar/llm.txt | 13 ++++----- docs/i18n/az/llm.txt | 13 ++++----- docs/i18n/bg/llm.txt | 13 ++++----- docs/i18n/bn/llm.txt | 13 ++++----- docs/i18n/cs/llm.txt | 13 ++++----- docs/i18n/da/llm.txt | 13 ++++----- docs/i18n/de/llm.txt | 13 ++++----- docs/i18n/es/llm.txt | 13 ++++----- docs/i18n/fa/llm.txt | 13 ++++----- docs/i18n/fi/llm.txt | 13 ++++----- docs/i18n/fr/llm.txt | 13 ++++----- docs/i18n/gu/llm.txt | 13 ++++----- docs/i18n/he/llm.txt | 13 ++++----- docs/i18n/hi/llm.txt | 13 ++++----- docs/i18n/hu/llm.txt | 13 ++++----- docs/i18n/id/llm.txt | 13 ++++----- docs/i18n/in/llm.txt | 13 ++++----- docs/i18n/it/llm.txt | 13 ++++----- docs/i18n/ja/llm.txt | 13 ++++----- docs/i18n/ko/llm.txt | 13 ++++----- docs/i18n/mr/llm.txt | 13 ++++----- docs/i18n/ms/llm.txt | 13 ++++----- docs/i18n/nl/llm.txt | 13 ++++----- docs/i18n/no/llm.txt | 13 ++++----- docs/i18n/phi/llm.txt | 13 ++++----- docs/i18n/pl/llm.txt | 13 ++++----- docs/i18n/pt-BR/llm.txt | 13 ++++----- docs/i18n/pt/llm.txt | 13 ++++----- docs/i18n/ro/llm.txt | 13 ++++----- docs/i18n/ru/llm.txt | 13 ++++----- docs/i18n/sk/llm.txt | 13 ++++----- docs/i18n/sv/llm.txt | 13 ++++----- docs/i18n/sw/llm.txt | 13 ++++----- docs/i18n/ta/llm.txt | 13 ++++----- docs/i18n/te/llm.txt | 13 ++++----- docs/i18n/th/llm.txt | 13 ++++----- docs/i18n/tr/llm.txt | 13 ++++----- docs/i18n/uk-UA/llm.txt | 13 ++++----- docs/i18n/ur/llm.txt | 13 ++++----- docs/i18n/vi/llm.txt | 13 ++++----- docs/i18n/zh-CN/llm.txt | 13 ++++----- docs/i18n/zh-TW/llm.txt | 13 ++++----- llm.txt | 10 +++---- .../ResilienceConnectionsClient.tsx | 2 +- src/i18n/messages/ar.json | 24 ++++++++++------- src/i18n/messages/az.json | 24 ++++++++++------- src/i18n/messages/bg.json | 24 ++++++++++------- src/i18n/messages/bn.json | 24 ++++++++++------- src/i18n/messages/cs.json | 24 ++++++++++------- src/i18n/messages/da.json | 24 ++++++++++------- src/i18n/messages/de.json | 24 ++++++++++------- src/i18n/messages/en.json | 24 ++++++++++------- src/i18n/messages/es.json | 24 ++++++++++------- src/i18n/messages/fa.json | 24 ++++++++++------- src/i18n/messages/fi.json | 24 ++++++++++------- src/i18n/messages/fr.json | 24 ++++++++++------- src/i18n/messages/gu.json | 24 ++++++++++------- src/i18n/messages/he.json | 24 ++++++++++------- src/i18n/messages/hi.json | 24 ++++++++++------- src/i18n/messages/hu.json | 24 ++++++++++------- src/i18n/messages/id.json | 24 ++++++++++------- src/i18n/messages/in.json | 24 ++++++++++------- src/i18n/messages/it.json | 24 ++++++++++------- src/i18n/messages/ja.json | 24 ++++++++++------- src/i18n/messages/ko.json | 24 ++++++++++------- src/i18n/messages/mr.json | 24 ++++++++++------- src/i18n/messages/ms.json | 24 ++++++++++------- src/i18n/messages/nl.json | 24 ++++++++++------- src/i18n/messages/no.json | 24 ++++++++++------- src/i18n/messages/phi.json | 24 ++++++++++------- src/i18n/messages/pl.json | 24 ++++++++++------- src/i18n/messages/pt-BR.json | 24 ++++++++++------- src/i18n/messages/pt.json | 16 +++++------ src/i18n/messages/ro.json | 24 ++++++++++------- src/i18n/messages/ru.json | 24 ++++++++++------- src/i18n/messages/sk.json | 24 ++++++++++------- src/i18n/messages/sv.json | 24 ++++++++++------- src/i18n/messages/sw.json | 24 ++++++++++------- src/i18n/messages/ta.json | 24 ++++++++++------- src/i18n/messages/te.json | 24 ++++++++++------- src/i18n/messages/th.json | 24 ++++++++++------- src/i18n/messages/tr.json | 24 ++++++++++------- src/i18n/messages/uk-UA.json | 24 ++++++++++------- src/i18n/messages/ur.json | 24 ++++++++++------- src/i18n/messages/vi.json | 24 ++++++++++------- src/i18n/messages/zh-CN.json | 24 ++++++++++------- src/i18n/messages/zh-TW.json | 24 ++++++++++------- src/lib/db/AGENTS.md | 4 +-- src/lib/db/migrationRunner.ts | 9 +++++++ src/lib/db/migrationRunner/constants.ts | 11 +++++++- ...te.sql => 153_radar_local_model_state.sql} | 2 +- src/lib/db/radar.ts | 2 +- ...db-migrationrunner-constants-split.test.ts | 14 +++++++--- tests/unit/i18n-nest-dotted-keys.test.ts | 26 ++++++++++++++++++ tests/unit/mcp-tool-count-dedup-6854.test.ts | 4 +-- tests/unit/radar-local-state-db.test.ts | 27 ++++++++++++++++++- 103 files changed, 953 insertions(+), 751 deletions(-) rename src/lib/db/migrations/{143_radar_local_model_state.sql => 153_radar_local_model_state.sql} (94%) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index c4584a1499..0c75c91602 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -18,7 +18,7 @@ Vitest, the 60% coverage gate, and the production build all run in CI on this PR - [ ] `npm run lint` - [ ] Reconciled with the current active release base; focused checks rerun afterward - [ ] Production-code changes include a new or updated automated test in this PR -- [ ] SonarQube PR analysis is green or any remaining issues are explicitly documented below +- SonarQube is temporarily opt-in while the private project has no quota; it is not a PR gate. ## Tests Added Or Updated diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7ab706660f..079acbec3e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -998,7 +998,10 @@ jobs: name: SonarQube runs-on: ubuntu-latest needs: test-coverage - if: ${{ !cancelled() && needs.test-coverage.result == 'success' }} + # Temporarily opt-in: the private project currently has no Sonar quota. + # Re-enable without another code change by setting the repository Actions + # variable SONARQUBE_ENABLED=true after quota/project access is restored. + if: ${{ vars.SONARQUBE_ENABLED == 'true' && !cancelled() && needs.test-coverage.result == 'success' }} env: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }} @@ -1397,7 +1400,7 @@ jobs: echo "| i18n UI Coverage | $(status '${{ needs.i18n-ui-coverage.result }}') |" >> "$GITHUB_STEP_SUMMARY" echo "| i18n Glossary (zh-CN, ko) | $(status '${{ needs.i18n-glossary-zhcn.result }}') |" >> "$GITHUB_STEP_SUMMARY" echo "| PR Test Policy | $(status '${{ needs.pr-test-policy.result }}') |" >> "$GITHUB_STEP_SUMMARY" - echo "| SonarQube | $(status '${{ needs.sonarqube.result }}') |" >> "$GITHUB_STEP_SUMMARY" + echo "| SonarQube (opt-in; disabled without SONARQUBE_ENABLED=true) | $(status '${{ needs.sonarqube.result }}') |" >> "$GITHUB_STEP_SUMMARY" echo "" >> "$GITHUB_STEP_SUMMARY" echo "## 🏗️ Build" >> "$GITHUB_STEP_SUMMARY" diff --git a/AGENTS.md b/AGENTS.md index 9992c1b479..0c01d205f7 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -56,7 +56,7 @@ Repository map and Reference Documentation sections below. | Translators | `open-sse/translator/` | Format conversion (OpenAI↔Claude↔Gemini) | | Transformer | `open-sse/transformer/` | Responses API ↔ Chat Completions | | Services | `open-sse/services/` | Combo routing, rate limits, caching, etc | -| Database | `src/lib/db/` | SQLite domain modules (146 migrations) | +| Database | `src/lib/db/` | SQLite domain modules (148 migrations) | | Domain/Policy | `src/domain/` | Policy engine, cost rules, fallback logic | | MCP Server | `open-sse/mcp-server/` | 109 tools (44 canonical + memory/skill/GitHub/pool/gamification/plugin/Notion/Obsidian/local-corpus/RTK modules), 3 transports (stdio / SSE / Streamable HTTP), 33 scopes | | A2A Server | `src/lib/a2a/` | JSON-RPC 2.0 agent protocol | diff --git a/README.md b/README.md index c1f3be248f..de1062c633 100644 --- a/README.md +++ b/README.md @@ -1080,7 +1080,7 @@ same process on one port, so there is no separate CLI-only package today. RuntimeNode.js 22.x / 24.x LTS — >=22.22.2 <23 || >=24.0.0 <27 LanguageTypeScript 6.0 — 100% TypeScript across src/ and open-sse/ (zero any in core since v2.0) FrameworkNext.js 16 + React 19 + Tailwind CSS 4 - Databasebetter-sqlite3 (SQLite, WAL journaling) + LowDB (JSON legacy) — 95 domain modules, 145 migrations + Databasebetter-sqlite3 (SQLite, WAL journaling) + LowDB (JSON legacy) — 117 domain modules, 148 migrations MemorySQLite FTS5 full-text + int8-quantized vector embeddings, typed decay SchemasZod 4 — MCP tool I/O validation + API contracts ProtocolsMCP (stdio / HTTP / SSE) + A2A v0.3 (JSON-RPC 2.0 + SSE) diff --git a/docs/diagrams/comparison-table.svg b/docs/diagrams/comparison-table.svg index 38ac551df7..807851a3d3 100644 --- a/docs/diagrams/comparison-table.svg +++ b/docs/diagrams/comparison-table.svg @@ -1,4 +1,4 @@ - + Static-header comparison table where each capability row fades in top to bottom; the OmniRoute column is highlighted and shows a check or a leading value in every row, while competitors show a mix of checks, partials and crosses. @@ -57,7 +57,7 @@ Built-in MCP server (own tools) - 105 + 109 diff --git a/docs/diagrams/promise-pillars.svg b/docs/diagrams/promise-pillars.svg index 4f975d25fb..425dcd84db 100644 --- a/docs/diagrams/promise-pillars.svg +++ b/docs/diagrams/promise-pillars.svg @@ -1,4 +1,4 @@ - + Animated promise card: six pillar tiles fade in in reading order, then a soft colored border highlight sweeps from tile to tile in a continuous cycle. @@ -125,7 +125,7 @@ Production-grade - Circuit breakers, TLS stealth, MCP (105 + Circuit breakers, TLS stealth, MCP (109 tools), A2A, memory, guardrails, evals — 25,000+ tests. diff --git a/docs/frameworks/RADAR.md b/docs/frameworks/RADAR.md index c1c163ce9f..622a39e450 100644 --- a/docs/frameworks/RADAR.md +++ b/docs/frameworks/RADAR.md @@ -376,7 +376,7 @@ Four rules, in order of precedence: version does not bring it back. The editable fields and tombstones are persisted in -`radar_local_model_state` (migration `143_radar_local_model_state.sql`). The public DB +`radar_local_model_state` (migration `153_radar_local_model_state.sql`). The public DB adapter (`src/lib/db/radar.ts`) converts those rows into the `localOverrides` map and `tombstones` set used by `applyFeed()`; production `getRadarCatalog()` loads that state after the flag, cache, and schema gates pass. Only `displayName` and `enabled` are diff --git a/docs/i18n/ar/llm.txt b/docs/i18n/ar/llm.txt index 6dbf971fc1..6130cc20cc 100644 --- a/docs/i18n/ar/llm.txt +++ b/docs/i18n/ar/llm.txt @@ -4,9 +4,6 @@ --- - - - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -21,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 145 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 148 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -109,7 +106,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ └── streaming.ts # SSE streaming for A2A │ │ ├── acp/ # Agent Communication Protocol registry and manager │ │ ├── compliance/ # Compliance policy engine -│ │ ├── db/ # SQLite database layer (99 modules + migrations) +│ │ ├── db/ # SQLite database layer (117 modules + migrations) │ │ │ ├── core.ts # Database initialization, connection, schema │ │ │ ├── providers.ts # Provider connection CRUD │ │ │ ├── models.ts # Model catalog management @@ -131,7 +128,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── secrets.ts # Secrets management │ │ │ ├── stateReset.ts # State reset utilities │ │ │ ├── migrationRunner.ts # Schema migration runner -│ │ │ └── migrations/ # 117 versioned SQL migration files +│ │ │ └── migrations/ # 148 versioned SQL migration files │ │ ├── evals/ # Eval runner and scheduler │ │ ├── memory/ # Persistent conversational memory │ │ │ ├── extraction.ts # Memory extraction from conversations @@ -397,7 +394,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ProviderIcon component:** Unified icon system using `@lobehub/icons` (130+ SVG) with PNG fallback and generic icon fallback chain. Used on providers, dashboard, and agents pages. -9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 99 `src/lib/db/` modules with 117 SQL migrations. +9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 117 `src/lib/db/` modules with 148 SQL migrations. 10. **Upstream headers:** Custom headers merged in executors after default auth; same header name replaces executor value. Forbidden header names in `src/shared/constants/upstreamHeaders.ts`. @@ -441,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 145 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 148 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. diff --git a/docs/i18n/az/llm.txt b/docs/i18n/az/llm.txt index 405168adc4..6fb65413f9 100644 --- a/docs/i18n/az/llm.txt +++ b/docs/i18n/az/llm.txt @@ -4,9 +4,6 @@ --- - - - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -21,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 145 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 148 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -109,7 +106,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ └── streaming.ts # SSE streaming for A2A │ │ ├── acp/ # Agent Communication Protocol registry and manager │ │ ├── compliance/ # Compliance policy engine -│ │ ├── db/ # SQLite database layer (99 modules + migrations) +│ │ ├── db/ # SQLite database layer (117 modules + migrations) │ │ │ ├── core.ts # Database initialization, connection, schema │ │ │ ├── providers.ts # Provider connection CRUD │ │ │ ├── models.ts # Model catalog management @@ -131,7 +128,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── secrets.ts # Secrets management │ │ │ ├── stateReset.ts # State reset utilities │ │ │ ├── migrationRunner.ts # Schema migration runner -│ │ │ └── migrations/ # 117 versioned SQL migration files +│ │ │ └── migrations/ # 148 versioned SQL migration files │ │ ├── evals/ # Eval runner and scheduler │ │ ├── memory/ # Persistent conversational memory │ │ │ ├── extraction.ts # Memory extraction from conversations @@ -397,7 +394,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ProviderIcon component:** Unified icon system using `@lobehub/icons` (130+ SVG) with PNG fallback and generic icon fallback chain. Used on providers, dashboard, and agents pages. -9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 99 `src/lib/db/` modules with 117 SQL migrations. +9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 117 `src/lib/db/` modules with 148 SQL migrations. 10. **Upstream headers:** Custom headers merged in executors after default auth; same header name replaces executor value. Forbidden header names in `src/shared/constants/upstreamHeaders.ts`. @@ -441,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 145 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 148 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. diff --git a/docs/i18n/bg/llm.txt b/docs/i18n/bg/llm.txt index 405168adc4..6fb65413f9 100644 --- a/docs/i18n/bg/llm.txt +++ b/docs/i18n/bg/llm.txt @@ -4,9 +4,6 @@ --- - - - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -21,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 145 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 148 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -109,7 +106,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ └── streaming.ts # SSE streaming for A2A │ │ ├── acp/ # Agent Communication Protocol registry and manager │ │ ├── compliance/ # Compliance policy engine -│ │ ├── db/ # SQLite database layer (99 modules + migrations) +│ │ ├── db/ # SQLite database layer (117 modules + migrations) │ │ │ ├── core.ts # Database initialization, connection, schema │ │ │ ├── providers.ts # Provider connection CRUD │ │ │ ├── models.ts # Model catalog management @@ -131,7 +128,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── secrets.ts # Secrets management │ │ │ ├── stateReset.ts # State reset utilities │ │ │ ├── migrationRunner.ts # Schema migration runner -│ │ │ └── migrations/ # 117 versioned SQL migration files +│ │ │ └── migrations/ # 148 versioned SQL migration files │ │ ├── evals/ # Eval runner and scheduler │ │ ├── memory/ # Persistent conversational memory │ │ │ ├── extraction.ts # Memory extraction from conversations @@ -397,7 +394,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ProviderIcon component:** Unified icon system using `@lobehub/icons` (130+ SVG) with PNG fallback and generic icon fallback chain. Used on providers, dashboard, and agents pages. -9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 99 `src/lib/db/` modules with 117 SQL migrations. +9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 117 `src/lib/db/` modules with 148 SQL migrations. 10. **Upstream headers:** Custom headers merged in executors after default auth; same header name replaces executor value. Forbidden header names in `src/shared/constants/upstreamHeaders.ts`. @@ -441,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 145 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 148 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. diff --git a/docs/i18n/bn/llm.txt b/docs/i18n/bn/llm.txt index a8c0992170..d048e7bd75 100644 --- a/docs/i18n/bn/llm.txt +++ b/docs/i18n/bn/llm.txt @@ -4,9 +4,6 @@ --- - - - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -21,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 145 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 148 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -109,7 +106,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ └── streaming.ts # SSE streaming for A2A │ │ ├── acp/ # Agent Communication Protocol registry and manager │ │ ├── compliance/ # Compliance policy engine -│ │ ├── db/ # SQLite database layer (99 modules + migrations) +│ │ ├── db/ # SQLite database layer (117 modules + migrations) │ │ │ ├── core.ts # Database initialization, connection, schema │ │ │ ├── providers.ts # Provider connection CRUD │ │ │ ├── models.ts # Model catalog management @@ -131,7 +128,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── secrets.ts # Secrets management │ │ │ ├── stateReset.ts # State reset utilities │ │ │ ├── migrationRunner.ts # Schema migration runner -│ │ │ └── migrations/ # 117 versioned SQL migration files +│ │ │ └── migrations/ # 148 versioned SQL migration files │ │ ├── evals/ # Eval runner and scheduler │ │ ├── memory/ # Persistent conversational memory │ │ │ ├── extraction.ts # Memory extraction from conversations @@ -397,7 +394,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ProviderIcon component:** Unified icon system using `@lobehub/icons` (130+ SVG) with PNG fallback and generic icon fallback chain. Used on providers, dashboard, and agents pages. -9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 99 `src/lib/db/` modules with 117 SQL migrations. +9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 117 `src/lib/db/` modules with 148 SQL migrations. 10. **Upstream headers:** Custom headers merged in executors after default auth; same header name replaces executor value. Forbidden header names in `src/shared/constants/upstreamHeaders.ts`. @@ -441,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 145 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 148 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. diff --git a/docs/i18n/cs/llm.txt b/docs/i18n/cs/llm.txt index 6d9f9450ed..421ef7521d 100644 --- a/docs/i18n/cs/llm.txt +++ b/docs/i18n/cs/llm.txt @@ -4,9 +4,6 @@ --- - - - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -21,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 145 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 148 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -109,7 +106,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ └── streaming.ts # SSE streaming for A2A │ │ ├── acp/ # Agent Communication Protocol registry and manager │ │ ├── compliance/ # Compliance policy engine -│ │ ├── db/ # SQLite database layer (99 modules + migrations) +│ │ ├── db/ # SQLite database layer (117 modules + migrations) │ │ │ ├── core.ts # Database initialization, connection, schema │ │ │ ├── providers.ts # Provider connection CRUD │ │ │ ├── models.ts # Model catalog management @@ -131,7 +128,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── secrets.ts # Secrets management │ │ │ ├── stateReset.ts # State reset utilities │ │ │ ├── migrationRunner.ts # Schema migration runner -│ │ │ └── migrations/ # 117 versioned SQL migration files +│ │ │ └── migrations/ # 148 versioned SQL migration files │ │ ├── evals/ # Eval runner and scheduler │ │ ├── memory/ # Persistent conversational memory │ │ │ ├── extraction.ts # Memory extraction from conversations @@ -397,7 +394,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ProviderIcon component:** Unified icon system using `@lobehub/icons` (130+ SVG) with PNG fallback and generic icon fallback chain. Used on providers, dashboard, and agents pages. -9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 99 `src/lib/db/` modules with 117 SQL migrations. +9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 117 `src/lib/db/` modules with 148 SQL migrations. 10. **Upstream headers:** Custom headers merged in executors after default auth; same header name replaces executor value. Forbidden header names in `src/shared/constants/upstreamHeaders.ts`. @@ -441,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 145 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 148 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. diff --git a/docs/i18n/da/llm.txt b/docs/i18n/da/llm.txt index d749a51e22..b45b2775a0 100644 --- a/docs/i18n/da/llm.txt +++ b/docs/i18n/da/llm.txt @@ -4,9 +4,6 @@ --- - - - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -21,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 145 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 148 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -109,7 +106,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ └── streaming.ts # SSE streaming for A2A │ │ ├── acp/ # Agent Communication Protocol registry and manager │ │ ├── compliance/ # Compliance policy engine -│ │ ├── db/ # SQLite database layer (99 modules + migrations) +│ │ ├── db/ # SQLite database layer (117 modules + migrations) │ │ │ ├── core.ts # Database initialization, connection, schema │ │ │ ├── providers.ts # Provider connection CRUD │ │ │ ├── models.ts # Model catalog management @@ -131,7 +128,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── secrets.ts # Secrets management │ │ │ ├── stateReset.ts # State reset utilities │ │ │ ├── migrationRunner.ts # Schema migration runner -│ │ │ └── migrations/ # 117 versioned SQL migration files +│ │ │ └── migrations/ # 148 versioned SQL migration files │ │ ├── evals/ # Eval runner and scheduler │ │ ├── memory/ # Persistent conversational memory │ │ │ ├── extraction.ts # Memory extraction from conversations @@ -397,7 +394,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ProviderIcon component:** Unified icon system using `@lobehub/icons` (130+ SVG) with PNG fallback and generic icon fallback chain. Used on providers, dashboard, and agents pages. -9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 99 `src/lib/db/` modules with 117 SQL migrations. +9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 117 `src/lib/db/` modules with 148 SQL migrations. 10. **Upstream headers:** Custom headers merged in executors after default auth; same header name replaces executor value. Forbidden header names in `src/shared/constants/upstreamHeaders.ts`. @@ -441,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 145 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 148 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. diff --git a/docs/i18n/de/llm.txt b/docs/i18n/de/llm.txt index c0a8b44da4..06714767ce 100644 --- a/docs/i18n/de/llm.txt +++ b/docs/i18n/de/llm.txt @@ -4,9 +4,6 @@ --- - - - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -21,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 145 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 148 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -109,7 +106,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ └── streaming.ts # SSE streaming for A2A │ │ ├── acp/ # Agent Communication Protocol registry and manager │ │ ├── compliance/ # Compliance policy engine -│ │ ├── db/ # SQLite database layer (99 modules + migrations) +│ │ ├── db/ # SQLite database layer (117 modules + migrations) │ │ │ ├── core.ts # Database initialization, connection, schema │ │ │ ├── providers.ts # Provider connection CRUD │ │ │ ├── models.ts # Model catalog management @@ -131,7 +128,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── secrets.ts # Secrets management │ │ │ ├── stateReset.ts # State reset utilities │ │ │ ├── migrationRunner.ts # Schema migration runner -│ │ │ └── migrations/ # 117 versioned SQL migration files +│ │ │ └── migrations/ # 148 versioned SQL migration files │ │ ├── evals/ # Eval runner and scheduler │ │ ├── memory/ # Persistent conversational memory │ │ │ ├── extraction.ts # Memory extraction from conversations @@ -397,7 +394,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ProviderIcon component:** Unified icon system using `@lobehub/icons` (130+ SVG) with PNG fallback and generic icon fallback chain. Used on providers, dashboard, and agents pages. -9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 99 `src/lib/db/` modules with 117 SQL migrations. +9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 117 `src/lib/db/` modules with 148 SQL migrations. 10. **Upstream headers:** Custom headers merged in executors after default auth; same header name replaces executor value. Forbidden header names in `src/shared/constants/upstreamHeaders.ts`. @@ -441,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 145 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 148 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. diff --git a/docs/i18n/es/llm.txt b/docs/i18n/es/llm.txt index fc3ce9004d..27a5d958f7 100644 --- a/docs/i18n/es/llm.txt +++ b/docs/i18n/es/llm.txt @@ -4,9 +4,6 @@ --- - - - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -21,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 145 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 148 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -109,7 +106,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ └── streaming.ts # SSE streaming for A2A │ │ ├── acp/ # Agent Communication Protocol registry and manager │ │ ├── compliance/ # Compliance policy engine -│ │ ├── db/ # SQLite database layer (99 modules + migrations) +│ │ ├── db/ # SQLite database layer (117 modules + migrations) │ │ │ ├── core.ts # Database initialization, connection, schema │ │ │ ├── providers.ts # Provider connection CRUD │ │ │ ├── models.ts # Model catalog management @@ -131,7 +128,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── secrets.ts # Secrets management │ │ │ ├── stateReset.ts # State reset utilities │ │ │ ├── migrationRunner.ts # Schema migration runner -│ │ │ └── migrations/ # 117 versioned SQL migration files +│ │ │ └── migrations/ # 148 versioned SQL migration files │ │ ├── evals/ # Eval runner and scheduler │ │ ├── memory/ # Persistent conversational memory │ │ │ ├── extraction.ts # Memory extraction from conversations @@ -397,7 +394,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ProviderIcon component:** Unified icon system using `@lobehub/icons` (130+ SVG) with PNG fallback and generic icon fallback chain. Used on providers, dashboard, and agents pages. -9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 99 `src/lib/db/` modules with 117 SQL migrations. +9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 117 `src/lib/db/` modules with 148 SQL migrations. 10. **Upstream headers:** Custom headers merged in executors after default auth; same header name replaces executor value. Forbidden header names in `src/shared/constants/upstreamHeaders.ts`. @@ -441,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 145 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 148 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. diff --git a/docs/i18n/fa/llm.txt b/docs/i18n/fa/llm.txt index 18b5ce1fea..f48f59bc81 100644 --- a/docs/i18n/fa/llm.txt +++ b/docs/i18n/fa/llm.txt @@ -4,9 +4,6 @@ --- - - - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -21,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 145 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 148 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -109,7 +106,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ └── streaming.ts # SSE streaming for A2A │ │ ├── acp/ # Agent Communication Protocol registry and manager │ │ ├── compliance/ # Compliance policy engine -│ │ ├── db/ # SQLite database layer (99 modules + migrations) +│ │ ├── db/ # SQLite database layer (117 modules + migrations) │ │ │ ├── core.ts # Database initialization, connection, schema │ │ │ ├── providers.ts # Provider connection CRUD │ │ │ ├── models.ts # Model catalog management @@ -131,7 +128,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── secrets.ts # Secrets management │ │ │ ├── stateReset.ts # State reset utilities │ │ │ ├── migrationRunner.ts # Schema migration runner -│ │ │ └── migrations/ # 117 versioned SQL migration files +│ │ │ └── migrations/ # 148 versioned SQL migration files │ │ ├── evals/ # Eval runner and scheduler │ │ ├── memory/ # Persistent conversational memory │ │ │ ├── extraction.ts # Memory extraction from conversations @@ -397,7 +394,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ProviderIcon component:** Unified icon system using `@lobehub/icons` (130+ SVG) with PNG fallback and generic icon fallback chain. Used on providers, dashboard, and agents pages. -9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 99 `src/lib/db/` modules with 117 SQL migrations. +9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 117 `src/lib/db/` modules with 148 SQL migrations. 10. **Upstream headers:** Custom headers merged in executors after default auth; same header name replaces executor value. Forbidden header names in `src/shared/constants/upstreamHeaders.ts`. @@ -441,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 145 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 148 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. diff --git a/docs/i18n/fi/llm.txt b/docs/i18n/fi/llm.txt index 1b9f7928f7..50f0413f42 100644 --- a/docs/i18n/fi/llm.txt +++ b/docs/i18n/fi/llm.txt @@ -4,9 +4,6 @@ --- - - - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -21,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 145 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 148 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -109,7 +106,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ └── streaming.ts # SSE streaming for A2A │ │ ├── acp/ # Agent Communication Protocol registry and manager │ │ ├── compliance/ # Compliance policy engine -│ │ ├── db/ # SQLite database layer (99 modules + migrations) +│ │ ├── db/ # SQLite database layer (117 modules + migrations) │ │ │ ├── core.ts # Database initialization, connection, schema │ │ │ ├── providers.ts # Provider connection CRUD │ │ │ ├── models.ts # Model catalog management @@ -131,7 +128,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── secrets.ts # Secrets management │ │ │ ├── stateReset.ts # State reset utilities │ │ │ ├── migrationRunner.ts # Schema migration runner -│ │ │ └── migrations/ # 117 versioned SQL migration files +│ │ │ └── migrations/ # 148 versioned SQL migration files │ │ ├── evals/ # Eval runner and scheduler │ │ ├── memory/ # Persistent conversational memory │ │ │ ├── extraction.ts # Memory extraction from conversations @@ -397,7 +394,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ProviderIcon component:** Unified icon system using `@lobehub/icons` (130+ SVG) with PNG fallback and generic icon fallback chain. Used on providers, dashboard, and agents pages. -9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 99 `src/lib/db/` modules with 117 SQL migrations. +9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 117 `src/lib/db/` modules with 148 SQL migrations. 10. **Upstream headers:** Custom headers merged in executors after default auth; same header name replaces executor value. Forbidden header names in `src/shared/constants/upstreamHeaders.ts`. @@ -441,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 145 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 148 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. diff --git a/docs/i18n/fr/llm.txt b/docs/i18n/fr/llm.txt index 9c47df309b..27ae59649a 100644 --- a/docs/i18n/fr/llm.txt +++ b/docs/i18n/fr/llm.txt @@ -4,9 +4,6 @@ --- - - - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -21,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 145 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 148 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -109,7 +106,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ └── streaming.ts # SSE streaming for A2A │ │ ├── acp/ # Agent Communication Protocol registry and manager │ │ ├── compliance/ # Compliance policy engine -│ │ ├── db/ # SQLite database layer (99 modules + migrations) +│ │ ├── db/ # SQLite database layer (117 modules + migrations) │ │ │ ├── core.ts # Database initialization, connection, schema │ │ │ ├── providers.ts # Provider connection CRUD │ │ │ ├── models.ts # Model catalog management @@ -131,7 +128,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── secrets.ts # Secrets management │ │ │ ├── stateReset.ts # State reset utilities │ │ │ ├── migrationRunner.ts # Schema migration runner -│ │ │ └── migrations/ # 117 versioned SQL migration files +│ │ │ └── migrations/ # 148 versioned SQL migration files │ │ ├── evals/ # Eval runner and scheduler │ │ ├── memory/ # Persistent conversational memory │ │ │ ├── extraction.ts # Memory extraction from conversations @@ -397,7 +394,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ProviderIcon component:** Unified icon system using `@lobehub/icons` (130+ SVG) with PNG fallback and generic icon fallback chain. Used on providers, dashboard, and agents pages. -9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 99 `src/lib/db/` modules with 117 SQL migrations. +9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 117 `src/lib/db/` modules with 148 SQL migrations. 10. **Upstream headers:** Custom headers merged in executors after default auth; same header name replaces executor value. Forbidden header names in `src/shared/constants/upstreamHeaders.ts`. @@ -441,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 145 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 148 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. diff --git a/docs/i18n/gu/llm.txt b/docs/i18n/gu/llm.txt index 280f67d0a8..76b14403b6 100644 --- a/docs/i18n/gu/llm.txt +++ b/docs/i18n/gu/llm.txt @@ -4,9 +4,6 @@ --- - - - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -21,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 145 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 148 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -109,7 +106,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ └── streaming.ts # SSE streaming for A2A │ │ ├── acp/ # Agent Communication Protocol registry and manager │ │ ├── compliance/ # Compliance policy engine -│ │ ├── db/ # SQLite database layer (99 modules + migrations) +│ │ ├── db/ # SQLite database layer (117 modules + migrations) │ │ │ ├── core.ts # Database initialization, connection, schema │ │ │ ├── providers.ts # Provider connection CRUD │ │ │ ├── models.ts # Model catalog management @@ -131,7 +128,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── secrets.ts # Secrets management │ │ │ ├── stateReset.ts # State reset utilities │ │ │ ├── migrationRunner.ts # Schema migration runner -│ │ │ └── migrations/ # 117 versioned SQL migration files +│ │ │ └── migrations/ # 148 versioned SQL migration files │ │ ├── evals/ # Eval runner and scheduler │ │ ├── memory/ # Persistent conversational memory │ │ │ ├── extraction.ts # Memory extraction from conversations @@ -397,7 +394,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ProviderIcon component:** Unified icon system using `@lobehub/icons` (130+ SVG) with PNG fallback and generic icon fallback chain. Used on providers, dashboard, and agents pages. -9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 99 `src/lib/db/` modules with 117 SQL migrations. +9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 117 `src/lib/db/` modules with 148 SQL migrations. 10. **Upstream headers:** Custom headers merged in executors after default auth; same header name replaces executor value. Forbidden header names in `src/shared/constants/upstreamHeaders.ts`. @@ -441,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 145 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 148 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. diff --git a/docs/i18n/he/llm.txt b/docs/i18n/he/llm.txt index 9f52454218..b85abd3ee9 100644 --- a/docs/i18n/he/llm.txt +++ b/docs/i18n/he/llm.txt @@ -4,9 +4,6 @@ --- - - - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -21,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 145 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 148 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -109,7 +106,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ └── streaming.ts # SSE streaming for A2A │ │ ├── acp/ # Agent Communication Protocol registry and manager │ │ ├── compliance/ # Compliance policy engine -│ │ ├── db/ # SQLite database layer (99 modules + migrations) +│ │ ├── db/ # SQLite database layer (117 modules + migrations) │ │ │ ├── core.ts # Database initialization, connection, schema │ │ │ ├── providers.ts # Provider connection CRUD │ │ │ ├── models.ts # Model catalog management @@ -131,7 +128,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── secrets.ts # Secrets management │ │ │ ├── stateReset.ts # State reset utilities │ │ │ ├── migrationRunner.ts # Schema migration runner -│ │ │ └── migrations/ # 117 versioned SQL migration files +│ │ │ └── migrations/ # 148 versioned SQL migration files │ │ ├── evals/ # Eval runner and scheduler │ │ ├── memory/ # Persistent conversational memory │ │ │ ├── extraction.ts # Memory extraction from conversations @@ -397,7 +394,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ProviderIcon component:** Unified icon system using `@lobehub/icons` (130+ SVG) with PNG fallback and generic icon fallback chain. Used on providers, dashboard, and agents pages. -9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 99 `src/lib/db/` modules with 117 SQL migrations. +9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 117 `src/lib/db/` modules with 148 SQL migrations. 10. **Upstream headers:** Custom headers merged in executors after default auth; same header name replaces executor value. Forbidden header names in `src/shared/constants/upstreamHeaders.ts`. @@ -441,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 145 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 148 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. diff --git a/docs/i18n/hi/llm.txt b/docs/i18n/hi/llm.txt index 67b8a5ce78..12f6ca050c 100644 --- a/docs/i18n/hi/llm.txt +++ b/docs/i18n/hi/llm.txt @@ -4,9 +4,6 @@ --- - - - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -21,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 145 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 148 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -109,7 +106,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ └── streaming.ts # SSE streaming for A2A │ │ ├── acp/ # Agent Communication Protocol registry and manager │ │ ├── compliance/ # Compliance policy engine -│ │ ├── db/ # SQLite database layer (99 modules + migrations) +│ │ ├── db/ # SQLite database layer (117 modules + migrations) │ │ │ ├── core.ts # Database initialization, connection, schema │ │ │ ├── providers.ts # Provider connection CRUD │ │ │ ├── models.ts # Model catalog management @@ -131,7 +128,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── secrets.ts # Secrets management │ │ │ ├── stateReset.ts # State reset utilities │ │ │ ├── migrationRunner.ts # Schema migration runner -│ │ │ └── migrations/ # 117 versioned SQL migration files +│ │ │ └── migrations/ # 148 versioned SQL migration files │ │ ├── evals/ # Eval runner and scheduler │ │ ├── memory/ # Persistent conversational memory │ │ │ ├── extraction.ts # Memory extraction from conversations @@ -397,7 +394,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ProviderIcon component:** Unified icon system using `@lobehub/icons` (130+ SVG) with PNG fallback and generic icon fallback chain. Used on providers, dashboard, and agents pages. -9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 99 `src/lib/db/` modules with 117 SQL migrations. +9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 117 `src/lib/db/` modules with 148 SQL migrations. 10. **Upstream headers:** Custom headers merged in executors after default auth; same header name replaces executor value. Forbidden header names in `src/shared/constants/upstreamHeaders.ts`. @@ -441,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 145 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 148 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. diff --git a/docs/i18n/hu/llm.txt b/docs/i18n/hu/llm.txt index bd50d354e7..58b6d797b9 100644 --- a/docs/i18n/hu/llm.txt +++ b/docs/i18n/hu/llm.txt @@ -4,9 +4,6 @@ --- - - - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -21,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 145 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 148 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -109,7 +106,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ └── streaming.ts # SSE streaming for A2A │ │ ├── acp/ # Agent Communication Protocol registry and manager │ │ ├── compliance/ # Compliance policy engine -│ │ ├── db/ # SQLite database layer (99 modules + migrations) +│ │ ├── db/ # SQLite database layer (117 modules + migrations) │ │ │ ├── core.ts # Database initialization, connection, schema │ │ │ ├── providers.ts # Provider connection CRUD │ │ │ ├── models.ts # Model catalog management @@ -131,7 +128,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── secrets.ts # Secrets management │ │ │ ├── stateReset.ts # State reset utilities │ │ │ ├── migrationRunner.ts # Schema migration runner -│ │ │ └── migrations/ # 117 versioned SQL migration files +│ │ │ └── migrations/ # 148 versioned SQL migration files │ │ ├── evals/ # Eval runner and scheduler │ │ ├── memory/ # Persistent conversational memory │ │ │ ├── extraction.ts # Memory extraction from conversations @@ -397,7 +394,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ProviderIcon component:** Unified icon system using `@lobehub/icons` (130+ SVG) with PNG fallback and generic icon fallback chain. Used on providers, dashboard, and agents pages. -9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 99 `src/lib/db/` modules with 117 SQL migrations. +9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 117 `src/lib/db/` modules with 148 SQL migrations. 10. **Upstream headers:** Custom headers merged in executors after default auth; same header name replaces executor value. Forbidden header names in `src/shared/constants/upstreamHeaders.ts`. @@ -441,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 145 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 148 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. diff --git a/docs/i18n/id/llm.txt b/docs/i18n/id/llm.txt index 9e14654777..439eb9e4e6 100644 --- a/docs/i18n/id/llm.txt +++ b/docs/i18n/id/llm.txt @@ -4,9 +4,6 @@ --- - - - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -21,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 145 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 148 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -109,7 +106,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ └── streaming.ts # SSE streaming for A2A │ │ ├── acp/ # Agent Communication Protocol registry and manager │ │ ├── compliance/ # Compliance policy engine -│ │ ├── db/ # SQLite database layer (99 modules + migrations) +│ │ ├── db/ # SQLite database layer (117 modules + migrations) │ │ │ ├── core.ts # Database initialization, connection, schema │ │ │ ├── providers.ts # Provider connection CRUD │ │ │ ├── models.ts # Model catalog management @@ -131,7 +128,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── secrets.ts # Secrets management │ │ │ ├── stateReset.ts # State reset utilities │ │ │ ├── migrationRunner.ts # Schema migration runner -│ │ │ └── migrations/ # 117 versioned SQL migration files +│ │ │ └── migrations/ # 148 versioned SQL migration files │ │ ├── evals/ # Eval runner and scheduler │ │ ├── memory/ # Persistent conversational memory │ │ │ ├── extraction.ts # Memory extraction from conversations @@ -397,7 +394,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ProviderIcon component:** Unified icon system using `@lobehub/icons` (130+ SVG) with PNG fallback and generic icon fallback chain. Used on providers, dashboard, and agents pages. -9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 99 `src/lib/db/` modules with 117 SQL migrations. +9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 117 `src/lib/db/` modules with 148 SQL migrations. 10. **Upstream headers:** Custom headers merged in executors after default auth; same header name replaces executor value. Forbidden header names in `src/shared/constants/upstreamHeaders.ts`. @@ -441,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 145 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 148 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. diff --git a/docs/i18n/in/llm.txt b/docs/i18n/in/llm.txt index a8c5f7246e..f81c17a866 100644 --- a/docs/i18n/in/llm.txt +++ b/docs/i18n/in/llm.txt @@ -4,9 +4,6 @@ --- - - - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -21,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 145 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 148 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -109,7 +106,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ └── streaming.ts # SSE streaming for A2A │ │ ├── acp/ # Agent Communication Protocol registry and manager │ │ ├── compliance/ # Compliance policy engine -│ │ ├── db/ # SQLite database layer (99 modules + migrations) +│ │ ├── db/ # SQLite database layer (117 modules + migrations) │ │ │ ├── core.ts # Database initialization, connection, schema │ │ │ ├── providers.ts # Provider connection CRUD │ │ │ ├── models.ts # Model catalog management @@ -131,7 +128,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── secrets.ts # Secrets management │ │ │ ├── stateReset.ts # State reset utilities │ │ │ ├── migrationRunner.ts # Schema migration runner -│ │ │ └── migrations/ # 117 versioned SQL migration files +│ │ │ └── migrations/ # 148 versioned SQL migration files │ │ ├── evals/ # Eval runner and scheduler │ │ ├── memory/ # Persistent conversational memory │ │ │ ├── extraction.ts # Memory extraction from conversations @@ -397,7 +394,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ProviderIcon component:** Unified icon system using `@lobehub/icons` (130+ SVG) with PNG fallback and generic icon fallback chain. Used on providers, dashboard, and agents pages. -9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 99 `src/lib/db/` modules with 117 SQL migrations. +9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 117 `src/lib/db/` modules with 148 SQL migrations. 10. **Upstream headers:** Custom headers merged in executors after default auth; same header name replaces executor value. Forbidden header names in `src/shared/constants/upstreamHeaders.ts`. @@ -441,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 145 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 148 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. diff --git a/docs/i18n/it/llm.txt b/docs/i18n/it/llm.txt index eda2f0a11b..38d6a30c09 100644 --- a/docs/i18n/it/llm.txt +++ b/docs/i18n/it/llm.txt @@ -4,9 +4,6 @@ --- - - - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -21,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 145 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 148 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -109,7 +106,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ └── streaming.ts # SSE streaming for A2A │ │ ├── acp/ # Agent Communication Protocol registry and manager │ │ ├── compliance/ # Compliance policy engine -│ │ ├── db/ # SQLite database layer (99 modules + migrations) +│ │ ├── db/ # SQLite database layer (117 modules + migrations) │ │ │ ├── core.ts # Database initialization, connection, schema │ │ │ ├── providers.ts # Provider connection CRUD │ │ │ ├── models.ts # Model catalog management @@ -131,7 +128,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── secrets.ts # Secrets management │ │ │ ├── stateReset.ts # State reset utilities │ │ │ ├── migrationRunner.ts # Schema migration runner -│ │ │ └── migrations/ # 117 versioned SQL migration files +│ │ │ └── migrations/ # 148 versioned SQL migration files │ │ ├── evals/ # Eval runner and scheduler │ │ ├── memory/ # Persistent conversational memory │ │ │ ├── extraction.ts # Memory extraction from conversations @@ -397,7 +394,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ProviderIcon component:** Unified icon system using `@lobehub/icons` (130+ SVG) with PNG fallback and generic icon fallback chain. Used on providers, dashboard, and agents pages. -9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 99 `src/lib/db/` modules with 117 SQL migrations. +9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 117 `src/lib/db/` modules with 148 SQL migrations. 10. **Upstream headers:** Custom headers merged in executors after default auth; same header name replaces executor value. Forbidden header names in `src/shared/constants/upstreamHeaders.ts`. @@ -441,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 145 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 148 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. diff --git a/docs/i18n/ja/llm.txt b/docs/i18n/ja/llm.txt index 36ce0452eb..6186203949 100644 --- a/docs/i18n/ja/llm.txt +++ b/docs/i18n/ja/llm.txt @@ -4,9 +4,6 @@ --- - - - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -21,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 145 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 148 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -109,7 +106,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ └── streaming.ts # SSE streaming for A2A │ │ ├── acp/ # Agent Communication Protocol registry and manager │ │ ├── compliance/ # Compliance policy engine -│ │ ├── db/ # SQLite database layer (99 modules + migrations) +│ │ ├── db/ # SQLite database layer (117 modules + migrations) │ │ │ ├── core.ts # Database initialization, connection, schema │ │ │ ├── providers.ts # Provider connection CRUD │ │ │ ├── models.ts # Model catalog management @@ -131,7 +128,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── secrets.ts # Secrets management │ │ │ ├── stateReset.ts # State reset utilities │ │ │ ├── migrationRunner.ts # Schema migration runner -│ │ │ └── migrations/ # 117 versioned SQL migration files +│ │ │ └── migrations/ # 148 versioned SQL migration files │ │ ├── evals/ # Eval runner and scheduler │ │ ├── memory/ # Persistent conversational memory │ │ │ ├── extraction.ts # Memory extraction from conversations @@ -397,7 +394,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ProviderIcon component:** Unified icon system using `@lobehub/icons` (130+ SVG) with PNG fallback and generic icon fallback chain. Used on providers, dashboard, and agents pages. -9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 99 `src/lib/db/` modules with 117 SQL migrations. +9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 117 `src/lib/db/` modules with 148 SQL migrations. 10. **Upstream headers:** Custom headers merged in executors after default auth; same header name replaces executor value. Forbidden header names in `src/shared/constants/upstreamHeaders.ts`. @@ -441,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 145 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 148 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. diff --git a/docs/i18n/ko/llm.txt b/docs/i18n/ko/llm.txt index dd4e615ed3..f177b47369 100644 --- a/docs/i18n/ko/llm.txt +++ b/docs/i18n/ko/llm.txt @@ -4,9 +4,6 @@ --- - - - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -21,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 145 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 148 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -109,7 +106,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ └── streaming.ts # SSE streaming for A2A │ │ ├── acp/ # Agent Communication Protocol registry and manager │ │ ├── compliance/ # Compliance policy engine -│ │ ├── db/ # SQLite database layer (99 modules + migrations) +│ │ ├── db/ # SQLite database layer (117 modules + migrations) │ │ │ ├── core.ts # Database initialization, connection, schema │ │ │ ├── providers.ts # Provider connection CRUD │ │ │ ├── models.ts # Model catalog management @@ -131,7 +128,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── secrets.ts # Secrets management │ │ │ ├── stateReset.ts # State reset utilities │ │ │ ├── migrationRunner.ts # Schema migration runner -│ │ │ └── migrations/ # 117 versioned SQL migration files +│ │ │ └── migrations/ # 148 versioned SQL migration files │ │ ├── evals/ # Eval runner and scheduler │ │ ├── memory/ # Persistent conversational memory │ │ │ ├── extraction.ts # Memory extraction from conversations @@ -397,7 +394,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ProviderIcon component:** Unified icon system using `@lobehub/icons` (130+ SVG) with PNG fallback and generic icon fallback chain. Used on providers, dashboard, and agents pages. -9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 99 `src/lib/db/` modules with 117 SQL migrations. +9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 117 `src/lib/db/` modules with 148 SQL migrations. 10. **Upstream headers:** Custom headers merged in executors after default auth; same header name replaces executor value. Forbidden header names in `src/shared/constants/upstreamHeaders.ts`. @@ -441,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 145 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 148 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. diff --git a/docs/i18n/mr/llm.txt b/docs/i18n/mr/llm.txt index 0c7c910196..c4f3402f24 100644 --- a/docs/i18n/mr/llm.txt +++ b/docs/i18n/mr/llm.txt @@ -4,9 +4,6 @@ --- - - - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -21,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 145 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 148 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -109,7 +106,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ └── streaming.ts # SSE streaming for A2A │ │ ├── acp/ # Agent Communication Protocol registry and manager │ │ ├── compliance/ # Compliance policy engine -│ │ ├── db/ # SQLite database layer (99 modules + migrations) +│ │ ├── db/ # SQLite database layer (117 modules + migrations) │ │ │ ├── core.ts # Database initialization, connection, schema │ │ │ ├── providers.ts # Provider connection CRUD │ │ │ ├── models.ts # Model catalog management @@ -131,7 +128,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── secrets.ts # Secrets management │ │ │ ├── stateReset.ts # State reset utilities │ │ │ ├── migrationRunner.ts # Schema migration runner -│ │ │ └── migrations/ # 117 versioned SQL migration files +│ │ │ └── migrations/ # 148 versioned SQL migration files │ │ ├── evals/ # Eval runner and scheduler │ │ ├── memory/ # Persistent conversational memory │ │ │ ├── extraction.ts # Memory extraction from conversations @@ -397,7 +394,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ProviderIcon component:** Unified icon system using `@lobehub/icons` (130+ SVG) with PNG fallback and generic icon fallback chain. Used on providers, dashboard, and agents pages. -9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 99 `src/lib/db/` modules with 117 SQL migrations. +9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 117 `src/lib/db/` modules with 148 SQL migrations. 10. **Upstream headers:** Custom headers merged in executors after default auth; same header name replaces executor value. Forbidden header names in `src/shared/constants/upstreamHeaders.ts`. @@ -441,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 145 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 148 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. diff --git a/docs/i18n/ms/llm.txt b/docs/i18n/ms/llm.txt index a4444836c8..6b2fed4536 100644 --- a/docs/i18n/ms/llm.txt +++ b/docs/i18n/ms/llm.txt @@ -4,9 +4,6 @@ --- - - - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -21,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 145 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 148 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -109,7 +106,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ └── streaming.ts # SSE streaming for A2A │ │ ├── acp/ # Agent Communication Protocol registry and manager │ │ ├── compliance/ # Compliance policy engine -│ │ ├── db/ # SQLite database layer (99 modules + migrations) +│ │ ├── db/ # SQLite database layer (117 modules + migrations) │ │ │ ├── core.ts # Database initialization, connection, schema │ │ │ ├── providers.ts # Provider connection CRUD │ │ │ ├── models.ts # Model catalog management @@ -131,7 +128,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── secrets.ts # Secrets management │ │ │ ├── stateReset.ts # State reset utilities │ │ │ ├── migrationRunner.ts # Schema migration runner -│ │ │ └── migrations/ # 117 versioned SQL migration files +│ │ │ └── migrations/ # 148 versioned SQL migration files │ │ ├── evals/ # Eval runner and scheduler │ │ ├── memory/ # Persistent conversational memory │ │ │ ├── extraction.ts # Memory extraction from conversations @@ -397,7 +394,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ProviderIcon component:** Unified icon system using `@lobehub/icons` (130+ SVG) with PNG fallback and generic icon fallback chain. Used on providers, dashboard, and agents pages. -9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 99 `src/lib/db/` modules with 117 SQL migrations. +9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 117 `src/lib/db/` modules with 148 SQL migrations. 10. **Upstream headers:** Custom headers merged in executors after default auth; same header name replaces executor value. Forbidden header names in `src/shared/constants/upstreamHeaders.ts`. @@ -441,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 145 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 148 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. diff --git a/docs/i18n/nl/llm.txt b/docs/i18n/nl/llm.txt index 769d9694e4..64a4fe596e 100644 --- a/docs/i18n/nl/llm.txt +++ b/docs/i18n/nl/llm.txt @@ -4,9 +4,6 @@ --- - - - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -21,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 145 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 148 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -109,7 +106,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ └── streaming.ts # SSE streaming for A2A │ │ ├── acp/ # Agent Communication Protocol registry and manager │ │ ├── compliance/ # Compliance policy engine -│ │ ├── db/ # SQLite database layer (99 modules + migrations) +│ │ ├── db/ # SQLite database layer (117 modules + migrations) │ │ │ ├── core.ts # Database initialization, connection, schema │ │ │ ├── providers.ts # Provider connection CRUD │ │ │ ├── models.ts # Model catalog management @@ -131,7 +128,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── secrets.ts # Secrets management │ │ │ ├── stateReset.ts # State reset utilities │ │ │ ├── migrationRunner.ts # Schema migration runner -│ │ │ └── migrations/ # 117 versioned SQL migration files +│ │ │ └── migrations/ # 148 versioned SQL migration files │ │ ├── evals/ # Eval runner and scheduler │ │ ├── memory/ # Persistent conversational memory │ │ │ ├── extraction.ts # Memory extraction from conversations @@ -397,7 +394,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ProviderIcon component:** Unified icon system using `@lobehub/icons` (130+ SVG) with PNG fallback and generic icon fallback chain. Used on providers, dashboard, and agents pages. -9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 99 `src/lib/db/` modules with 117 SQL migrations. +9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 117 `src/lib/db/` modules with 148 SQL migrations. 10. **Upstream headers:** Custom headers merged in executors after default auth; same header name replaces executor value. Forbidden header names in `src/shared/constants/upstreamHeaders.ts`. @@ -441,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 145 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 148 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. diff --git a/docs/i18n/no/llm.txt b/docs/i18n/no/llm.txt index 26591c62aa..aa3b8de8c7 100644 --- a/docs/i18n/no/llm.txt +++ b/docs/i18n/no/llm.txt @@ -4,9 +4,6 @@ --- - - - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -21,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 145 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 148 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -109,7 +106,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ └── streaming.ts # SSE streaming for A2A │ │ ├── acp/ # Agent Communication Protocol registry and manager │ │ ├── compliance/ # Compliance policy engine -│ │ ├── db/ # SQLite database layer (99 modules + migrations) +│ │ ├── db/ # SQLite database layer (117 modules + migrations) │ │ │ ├── core.ts # Database initialization, connection, schema │ │ │ ├── providers.ts # Provider connection CRUD │ │ │ ├── models.ts # Model catalog management @@ -131,7 +128,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── secrets.ts # Secrets management │ │ │ ├── stateReset.ts # State reset utilities │ │ │ ├── migrationRunner.ts # Schema migration runner -│ │ │ └── migrations/ # 117 versioned SQL migration files +│ │ │ └── migrations/ # 148 versioned SQL migration files │ │ ├── evals/ # Eval runner and scheduler │ │ ├── memory/ # Persistent conversational memory │ │ │ ├── extraction.ts # Memory extraction from conversations @@ -397,7 +394,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ProviderIcon component:** Unified icon system using `@lobehub/icons` (130+ SVG) with PNG fallback and generic icon fallback chain. Used on providers, dashboard, and agents pages. -9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 99 `src/lib/db/` modules with 117 SQL migrations. +9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 117 `src/lib/db/` modules with 148 SQL migrations. 10. **Upstream headers:** Custom headers merged in executors after default auth; same header name replaces executor value. Forbidden header names in `src/shared/constants/upstreamHeaders.ts`. @@ -441,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 145 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 148 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. diff --git a/docs/i18n/phi/llm.txt b/docs/i18n/phi/llm.txt index bb41be4c75..b242edb94c 100644 --- a/docs/i18n/phi/llm.txt +++ b/docs/i18n/phi/llm.txt @@ -4,9 +4,6 @@ --- - - - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -21,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 145 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 148 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -109,7 +106,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ └── streaming.ts # SSE streaming for A2A │ │ ├── acp/ # Agent Communication Protocol registry and manager │ │ ├── compliance/ # Compliance policy engine -│ │ ├── db/ # SQLite database layer (99 modules + migrations) +│ │ ├── db/ # SQLite database layer (117 modules + migrations) │ │ │ ├── core.ts # Database initialization, connection, schema │ │ │ ├── providers.ts # Provider connection CRUD │ │ │ ├── models.ts # Model catalog management @@ -131,7 +128,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── secrets.ts # Secrets management │ │ │ ├── stateReset.ts # State reset utilities │ │ │ ├── migrationRunner.ts # Schema migration runner -│ │ │ └── migrations/ # 117 versioned SQL migration files +│ │ │ └── migrations/ # 148 versioned SQL migration files │ │ ├── evals/ # Eval runner and scheduler │ │ ├── memory/ # Persistent conversational memory │ │ │ ├── extraction.ts # Memory extraction from conversations @@ -397,7 +394,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ProviderIcon component:** Unified icon system using `@lobehub/icons` (130+ SVG) with PNG fallback and generic icon fallback chain. Used on providers, dashboard, and agents pages. -9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 99 `src/lib/db/` modules with 117 SQL migrations. +9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 117 `src/lib/db/` modules with 148 SQL migrations. 10. **Upstream headers:** Custom headers merged in executors after default auth; same header name replaces executor value. Forbidden header names in `src/shared/constants/upstreamHeaders.ts`. @@ -441,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 145 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 148 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. diff --git a/docs/i18n/pl/llm.txt b/docs/i18n/pl/llm.txt index f78a71616b..4b9501248c 100644 --- a/docs/i18n/pl/llm.txt +++ b/docs/i18n/pl/llm.txt @@ -4,9 +4,6 @@ --- - - - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -21,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 145 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 148 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -109,7 +106,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ └── streaming.ts # SSE streaming for A2A │ │ ├── acp/ # Agent Communication Protocol registry and manager │ │ ├── compliance/ # Compliance policy engine -│ │ ├── db/ # SQLite database layer (99 modules + migrations) +│ │ ├── db/ # SQLite database layer (117 modules + migrations) │ │ │ ├── core.ts # Database initialization, connection, schema │ │ │ ├── providers.ts # Provider connection CRUD │ │ │ ├── models.ts # Model catalog management @@ -131,7 +128,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── secrets.ts # Secrets management │ │ │ ├── stateReset.ts # State reset utilities │ │ │ ├── migrationRunner.ts # Schema migration runner -│ │ │ └── migrations/ # 117 versioned SQL migration files +│ │ │ └── migrations/ # 148 versioned SQL migration files │ │ ├── evals/ # Eval runner and scheduler │ │ ├── memory/ # Persistent conversational memory │ │ │ ├── extraction.ts # Memory extraction from conversations @@ -397,7 +394,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ProviderIcon component:** Unified icon system using `@lobehub/icons` (130+ SVG) with PNG fallback and generic icon fallback chain. Used on providers, dashboard, and agents pages. -9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 99 `src/lib/db/` modules with 117 SQL migrations. +9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 117 `src/lib/db/` modules with 148 SQL migrations. 10. **Upstream headers:** Custom headers merged in executors after default auth; same header name replaces executor value. Forbidden header names in `src/shared/constants/upstreamHeaders.ts`. @@ -441,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 145 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 148 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. diff --git a/docs/i18n/pt-BR/llm.txt b/docs/i18n/pt-BR/llm.txt index d8d0d4ccb1..1e23c38ac5 100644 --- a/docs/i18n/pt-BR/llm.txt +++ b/docs/i18n/pt-BR/llm.txt @@ -4,9 +4,6 @@ --- - - - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -21,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 145 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 148 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -109,7 +106,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ └── streaming.ts # SSE streaming for A2A │ │ ├── acp/ # Agent Communication Protocol registry and manager │ │ ├── compliance/ # Compliance policy engine -│ │ ├── db/ # SQLite database layer (99 modules + migrations) +│ │ ├── db/ # SQLite database layer (117 modules + migrations) │ │ │ ├── core.ts # Database initialization, connection, schema │ │ │ ├── providers.ts # Provider connection CRUD │ │ │ ├── models.ts # Model catalog management @@ -131,7 +128,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── secrets.ts # Secrets management │ │ │ ├── stateReset.ts # State reset utilities │ │ │ ├── migrationRunner.ts # Schema migration runner -│ │ │ └── migrations/ # 117 versioned SQL migration files +│ │ │ └── migrations/ # 148 versioned SQL migration files │ │ ├── evals/ # Eval runner and scheduler │ │ ├── memory/ # Persistent conversational memory │ │ │ ├── extraction.ts # Memory extraction from conversations @@ -397,7 +394,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ProviderIcon component:** Unified icon system using `@lobehub/icons` (130+ SVG) with PNG fallback and generic icon fallback chain. Used on providers, dashboard, and agents pages. -9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 99 `src/lib/db/` modules with 117 SQL migrations. +9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 117 `src/lib/db/` modules with 148 SQL migrations. 10. **Upstream headers:** Custom headers merged in executors after default auth; same header name replaces executor value. Forbidden header names in `src/shared/constants/upstreamHeaders.ts`. @@ -441,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 145 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 148 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. diff --git a/docs/i18n/pt/llm.txt b/docs/i18n/pt/llm.txt index 6645730180..f1465802c9 100644 --- a/docs/i18n/pt/llm.txt +++ b/docs/i18n/pt/llm.txt @@ -4,9 +4,6 @@ --- - - - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -21,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 145 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 148 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -109,7 +106,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ └── streaming.ts # SSE streaming for A2A │ │ ├── acp/ # Agent Communication Protocol registry and manager │ │ ├── compliance/ # Compliance policy engine -│ │ ├── db/ # SQLite database layer (99 modules + migrations) +│ │ ├── db/ # SQLite database layer (117 modules + migrations) │ │ │ ├── core.ts # Database initialization, connection, schema │ │ │ ├── providers.ts # Provider connection CRUD │ │ │ ├── models.ts # Model catalog management @@ -131,7 +128,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── secrets.ts # Secrets management │ │ │ ├── stateReset.ts # State reset utilities │ │ │ ├── migrationRunner.ts # Schema migration runner -│ │ │ └── migrations/ # 117 versioned SQL migration files +│ │ │ └── migrations/ # 148 versioned SQL migration files │ │ ├── evals/ # Eval runner and scheduler │ │ ├── memory/ # Persistent conversational memory │ │ │ ├── extraction.ts # Memory extraction from conversations @@ -397,7 +394,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ProviderIcon component:** Unified icon system using `@lobehub/icons` (130+ SVG) with PNG fallback and generic icon fallback chain. Used on providers, dashboard, and agents pages. -9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 99 `src/lib/db/` modules with 117 SQL migrations. +9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 117 `src/lib/db/` modules with 148 SQL migrations. 10. **Upstream headers:** Custom headers merged in executors after default auth; same header name replaces executor value. Forbidden header names in `src/shared/constants/upstreamHeaders.ts`. @@ -441,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 145 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 148 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. diff --git a/docs/i18n/ro/llm.txt b/docs/i18n/ro/llm.txt index d6246cbbec..f8eb097234 100644 --- a/docs/i18n/ro/llm.txt +++ b/docs/i18n/ro/llm.txt @@ -4,9 +4,6 @@ --- - - - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -21,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 145 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 148 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -109,7 +106,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ └── streaming.ts # SSE streaming for A2A │ │ ├── acp/ # Agent Communication Protocol registry and manager │ │ ├── compliance/ # Compliance policy engine -│ │ ├── db/ # SQLite database layer (99 modules + migrations) +│ │ ├── db/ # SQLite database layer (117 modules + migrations) │ │ │ ├── core.ts # Database initialization, connection, schema │ │ │ ├── providers.ts # Provider connection CRUD │ │ │ ├── models.ts # Model catalog management @@ -131,7 +128,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── secrets.ts # Secrets management │ │ │ ├── stateReset.ts # State reset utilities │ │ │ ├── migrationRunner.ts # Schema migration runner -│ │ │ └── migrations/ # 117 versioned SQL migration files +│ │ │ └── migrations/ # 148 versioned SQL migration files │ │ ├── evals/ # Eval runner and scheduler │ │ ├── memory/ # Persistent conversational memory │ │ │ ├── extraction.ts # Memory extraction from conversations @@ -397,7 +394,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ProviderIcon component:** Unified icon system using `@lobehub/icons` (130+ SVG) with PNG fallback and generic icon fallback chain. Used on providers, dashboard, and agents pages. -9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 99 `src/lib/db/` modules with 117 SQL migrations. +9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 117 `src/lib/db/` modules with 148 SQL migrations. 10. **Upstream headers:** Custom headers merged in executors after default auth; same header name replaces executor value. Forbidden header names in `src/shared/constants/upstreamHeaders.ts`. @@ -441,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 145 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 148 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. diff --git a/docs/i18n/ru/llm.txt b/docs/i18n/ru/llm.txt index 94ab1c502f..08a7a1bc90 100644 --- a/docs/i18n/ru/llm.txt +++ b/docs/i18n/ru/llm.txt @@ -4,9 +4,6 @@ --- - - - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -21,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 145 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 148 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -109,7 +106,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ └── streaming.ts # SSE streaming for A2A │ │ ├── acp/ # Agent Communication Protocol registry and manager │ │ ├── compliance/ # Compliance policy engine -│ │ ├── db/ # SQLite database layer (99 modules + migrations) +│ │ ├── db/ # SQLite database layer (117 modules + migrations) │ │ │ ├── core.ts # Database initialization, connection, schema │ │ │ ├── providers.ts # Provider connection CRUD │ │ │ ├── models.ts # Model catalog management @@ -131,7 +128,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── secrets.ts # Secrets management │ │ │ ├── stateReset.ts # State reset utilities │ │ │ ├── migrationRunner.ts # Schema migration runner -│ │ │ └── migrations/ # 117 versioned SQL migration files +│ │ │ └── migrations/ # 148 versioned SQL migration files │ │ ├── evals/ # Eval runner and scheduler │ │ ├── memory/ # Persistent conversational memory │ │ │ ├── extraction.ts # Memory extraction from conversations @@ -397,7 +394,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ProviderIcon component:** Unified icon system using `@lobehub/icons` (130+ SVG) with PNG fallback and generic icon fallback chain. Used on providers, dashboard, and agents pages. -9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 99 `src/lib/db/` modules with 117 SQL migrations. +9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 117 `src/lib/db/` modules with 148 SQL migrations. 10. **Upstream headers:** Custom headers merged in executors after default auth; same header name replaces executor value. Forbidden header names in `src/shared/constants/upstreamHeaders.ts`. @@ -441,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 145 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 148 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. diff --git a/docs/i18n/sk/llm.txt b/docs/i18n/sk/llm.txt index 8f0ed3facc..d072aeb8cf 100644 --- a/docs/i18n/sk/llm.txt +++ b/docs/i18n/sk/llm.txt @@ -4,9 +4,6 @@ --- - - - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -21,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 145 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 148 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -109,7 +106,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ └── streaming.ts # SSE streaming for A2A │ │ ├── acp/ # Agent Communication Protocol registry and manager │ │ ├── compliance/ # Compliance policy engine -│ │ ├── db/ # SQLite database layer (99 modules + migrations) +│ │ ├── db/ # SQLite database layer (117 modules + migrations) │ │ │ ├── core.ts # Database initialization, connection, schema │ │ │ ├── providers.ts # Provider connection CRUD │ │ │ ├── models.ts # Model catalog management @@ -131,7 +128,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── secrets.ts # Secrets management │ │ │ ├── stateReset.ts # State reset utilities │ │ │ ├── migrationRunner.ts # Schema migration runner -│ │ │ └── migrations/ # 117 versioned SQL migration files +│ │ │ └── migrations/ # 148 versioned SQL migration files │ │ ├── evals/ # Eval runner and scheduler │ │ ├── memory/ # Persistent conversational memory │ │ │ ├── extraction.ts # Memory extraction from conversations @@ -397,7 +394,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ProviderIcon component:** Unified icon system using `@lobehub/icons` (130+ SVG) with PNG fallback and generic icon fallback chain. Used on providers, dashboard, and agents pages. -9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 99 `src/lib/db/` modules with 117 SQL migrations. +9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 117 `src/lib/db/` modules with 148 SQL migrations. 10. **Upstream headers:** Custom headers merged in executors after default auth; same header name replaces executor value. Forbidden header names in `src/shared/constants/upstreamHeaders.ts`. @@ -441,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 145 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 148 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. diff --git a/docs/i18n/sv/llm.txt b/docs/i18n/sv/llm.txt index fe740a63ae..d034680ad1 100644 --- a/docs/i18n/sv/llm.txt +++ b/docs/i18n/sv/llm.txt @@ -4,9 +4,6 @@ --- - - - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -21,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 145 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 148 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -109,7 +106,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ └── streaming.ts # SSE streaming for A2A │ │ ├── acp/ # Agent Communication Protocol registry and manager │ │ ├── compliance/ # Compliance policy engine -│ │ ├── db/ # SQLite database layer (99 modules + migrations) +│ │ ├── db/ # SQLite database layer (117 modules + migrations) │ │ │ ├── core.ts # Database initialization, connection, schema │ │ │ ├── providers.ts # Provider connection CRUD │ │ │ ├── models.ts # Model catalog management @@ -131,7 +128,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── secrets.ts # Secrets management │ │ │ ├── stateReset.ts # State reset utilities │ │ │ ├── migrationRunner.ts # Schema migration runner -│ │ │ └── migrations/ # 117 versioned SQL migration files +│ │ │ └── migrations/ # 148 versioned SQL migration files │ │ ├── evals/ # Eval runner and scheduler │ │ ├── memory/ # Persistent conversational memory │ │ │ ├── extraction.ts # Memory extraction from conversations @@ -397,7 +394,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ProviderIcon component:** Unified icon system using `@lobehub/icons` (130+ SVG) with PNG fallback and generic icon fallback chain. Used on providers, dashboard, and agents pages. -9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 99 `src/lib/db/` modules with 117 SQL migrations. +9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 117 `src/lib/db/` modules with 148 SQL migrations. 10. **Upstream headers:** Custom headers merged in executors after default auth; same header name replaces executor value. Forbidden header names in `src/shared/constants/upstreamHeaders.ts`. @@ -441,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 145 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 148 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. diff --git a/docs/i18n/sw/llm.txt b/docs/i18n/sw/llm.txt index cdcf4ca22f..5a5c1f0646 100644 --- a/docs/i18n/sw/llm.txt +++ b/docs/i18n/sw/llm.txt @@ -4,9 +4,6 @@ --- - - - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -21,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 145 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 148 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -109,7 +106,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ └── streaming.ts # SSE streaming for A2A │ │ ├── acp/ # Agent Communication Protocol registry and manager │ │ ├── compliance/ # Compliance policy engine -│ │ ├── db/ # SQLite database layer (99 modules + migrations) +│ │ ├── db/ # SQLite database layer (117 modules + migrations) │ │ │ ├── core.ts # Database initialization, connection, schema │ │ │ ├── providers.ts # Provider connection CRUD │ │ │ ├── models.ts # Model catalog management @@ -131,7 +128,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── secrets.ts # Secrets management │ │ │ ├── stateReset.ts # State reset utilities │ │ │ ├── migrationRunner.ts # Schema migration runner -│ │ │ └── migrations/ # 117 versioned SQL migration files +│ │ │ └── migrations/ # 148 versioned SQL migration files │ │ ├── evals/ # Eval runner and scheduler │ │ ├── memory/ # Persistent conversational memory │ │ │ ├── extraction.ts # Memory extraction from conversations @@ -397,7 +394,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ProviderIcon component:** Unified icon system using `@lobehub/icons` (130+ SVG) with PNG fallback and generic icon fallback chain. Used on providers, dashboard, and agents pages. -9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 99 `src/lib/db/` modules with 117 SQL migrations. +9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 117 `src/lib/db/` modules with 148 SQL migrations. 10. **Upstream headers:** Custom headers merged in executors after default auth; same header name replaces executor value. Forbidden header names in `src/shared/constants/upstreamHeaders.ts`. @@ -441,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 145 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 148 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. diff --git a/docs/i18n/ta/llm.txt b/docs/i18n/ta/llm.txt index 4ac620a283..883e17025c 100644 --- a/docs/i18n/ta/llm.txt +++ b/docs/i18n/ta/llm.txt @@ -4,9 +4,6 @@ --- - - - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -21,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 145 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 148 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -109,7 +106,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ └── streaming.ts # SSE streaming for A2A │ │ ├── acp/ # Agent Communication Protocol registry and manager │ │ ├── compliance/ # Compliance policy engine -│ │ ├── db/ # SQLite database layer (99 modules + migrations) +│ │ ├── db/ # SQLite database layer (117 modules + migrations) │ │ │ ├── core.ts # Database initialization, connection, schema │ │ │ ├── providers.ts # Provider connection CRUD │ │ │ ├── models.ts # Model catalog management @@ -131,7 +128,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── secrets.ts # Secrets management │ │ │ ├── stateReset.ts # State reset utilities │ │ │ ├── migrationRunner.ts # Schema migration runner -│ │ │ └── migrations/ # 117 versioned SQL migration files +│ │ │ └── migrations/ # 148 versioned SQL migration files │ │ ├── evals/ # Eval runner and scheduler │ │ ├── memory/ # Persistent conversational memory │ │ │ ├── extraction.ts # Memory extraction from conversations @@ -397,7 +394,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ProviderIcon component:** Unified icon system using `@lobehub/icons` (130+ SVG) with PNG fallback and generic icon fallback chain. Used on providers, dashboard, and agents pages. -9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 99 `src/lib/db/` modules with 117 SQL migrations. +9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 117 `src/lib/db/` modules with 148 SQL migrations. 10. **Upstream headers:** Custom headers merged in executors after default auth; same header name replaces executor value. Forbidden header names in `src/shared/constants/upstreamHeaders.ts`. @@ -441,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 145 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 148 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. diff --git a/docs/i18n/te/llm.txt b/docs/i18n/te/llm.txt index 329c91af47..49b5859ace 100644 --- a/docs/i18n/te/llm.txt +++ b/docs/i18n/te/llm.txt @@ -4,9 +4,6 @@ --- - - - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -21,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 145 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 148 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -109,7 +106,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ └── streaming.ts # SSE streaming for A2A │ │ ├── acp/ # Agent Communication Protocol registry and manager │ │ ├── compliance/ # Compliance policy engine -│ │ ├── db/ # SQLite database layer (99 modules + migrations) +│ │ ├── db/ # SQLite database layer (117 modules + migrations) │ │ │ ├── core.ts # Database initialization, connection, schema │ │ │ ├── providers.ts # Provider connection CRUD │ │ │ ├── models.ts # Model catalog management @@ -131,7 +128,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── secrets.ts # Secrets management │ │ │ ├── stateReset.ts # State reset utilities │ │ │ ├── migrationRunner.ts # Schema migration runner -│ │ │ └── migrations/ # 117 versioned SQL migration files +│ │ │ └── migrations/ # 148 versioned SQL migration files │ │ ├── evals/ # Eval runner and scheduler │ │ ├── memory/ # Persistent conversational memory │ │ │ ├── extraction.ts # Memory extraction from conversations @@ -397,7 +394,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ProviderIcon component:** Unified icon system using `@lobehub/icons` (130+ SVG) with PNG fallback and generic icon fallback chain. Used on providers, dashboard, and agents pages. -9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 99 `src/lib/db/` modules with 117 SQL migrations. +9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 117 `src/lib/db/` modules with 148 SQL migrations. 10. **Upstream headers:** Custom headers merged in executors after default auth; same header name replaces executor value. Forbidden header names in `src/shared/constants/upstreamHeaders.ts`. @@ -441,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 145 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 148 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. diff --git a/docs/i18n/th/llm.txt b/docs/i18n/th/llm.txt index 2ec1f8d9ab..74fbcccbf5 100644 --- a/docs/i18n/th/llm.txt +++ b/docs/i18n/th/llm.txt @@ -4,9 +4,6 @@ --- - - - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -21,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 145 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 148 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -109,7 +106,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ └── streaming.ts # SSE streaming for A2A │ │ ├── acp/ # Agent Communication Protocol registry and manager │ │ ├── compliance/ # Compliance policy engine -│ │ ├── db/ # SQLite database layer (99 modules + migrations) +│ │ ├── db/ # SQLite database layer (117 modules + migrations) │ │ │ ├── core.ts # Database initialization, connection, schema │ │ │ ├── providers.ts # Provider connection CRUD │ │ │ ├── models.ts # Model catalog management @@ -131,7 +128,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── secrets.ts # Secrets management │ │ │ ├── stateReset.ts # State reset utilities │ │ │ ├── migrationRunner.ts # Schema migration runner -│ │ │ └── migrations/ # 117 versioned SQL migration files +│ │ │ └── migrations/ # 148 versioned SQL migration files │ │ ├── evals/ # Eval runner and scheduler │ │ ├── memory/ # Persistent conversational memory │ │ │ ├── extraction.ts # Memory extraction from conversations @@ -397,7 +394,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ProviderIcon component:** Unified icon system using `@lobehub/icons` (130+ SVG) with PNG fallback and generic icon fallback chain. Used on providers, dashboard, and agents pages. -9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 99 `src/lib/db/` modules with 117 SQL migrations. +9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 117 `src/lib/db/` modules with 148 SQL migrations. 10. **Upstream headers:** Custom headers merged in executors after default auth; same header name replaces executor value. Forbidden header names in `src/shared/constants/upstreamHeaders.ts`. @@ -441,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 145 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 148 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. diff --git a/docs/i18n/tr/llm.txt b/docs/i18n/tr/llm.txt index 6ce3de4093..1befc26130 100644 --- a/docs/i18n/tr/llm.txt +++ b/docs/i18n/tr/llm.txt @@ -4,9 +4,6 @@ --- - - - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -21,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 145 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 148 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -109,7 +106,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ └── streaming.ts # SSE streaming for A2A │ │ ├── acp/ # Agent Communication Protocol registry and manager │ │ ├── compliance/ # Compliance policy engine -│ │ ├── db/ # SQLite database layer (99 modules + migrations) +│ │ ├── db/ # SQLite database layer (117 modules + migrations) │ │ │ ├── core.ts # Database initialization, connection, schema │ │ │ ├── providers.ts # Provider connection CRUD │ │ │ ├── models.ts # Model catalog management @@ -131,7 +128,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── secrets.ts # Secrets management │ │ │ ├── stateReset.ts # State reset utilities │ │ │ ├── migrationRunner.ts # Schema migration runner -│ │ │ └── migrations/ # 117 versioned SQL migration files +│ │ │ └── migrations/ # 148 versioned SQL migration files │ │ ├── evals/ # Eval runner and scheduler │ │ ├── memory/ # Persistent conversational memory │ │ │ ├── extraction.ts # Memory extraction from conversations @@ -397,7 +394,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ProviderIcon component:** Unified icon system using `@lobehub/icons` (130+ SVG) with PNG fallback and generic icon fallback chain. Used on providers, dashboard, and agents pages. -9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 99 `src/lib/db/` modules with 117 SQL migrations. +9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 117 `src/lib/db/` modules with 148 SQL migrations. 10. **Upstream headers:** Custom headers merged in executors after default auth; same header name replaces executor value. Forbidden header names in `src/shared/constants/upstreamHeaders.ts`. @@ -441,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 145 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 148 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. diff --git a/docs/i18n/uk-UA/llm.txt b/docs/i18n/uk-UA/llm.txt index 9df2f77df2..59621a7324 100644 --- a/docs/i18n/uk-UA/llm.txt +++ b/docs/i18n/uk-UA/llm.txt @@ -4,9 +4,6 @@ --- - - - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -21,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 145 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 148 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -109,7 +106,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ └── streaming.ts # SSE streaming for A2A │ │ ├── acp/ # Agent Communication Protocol registry and manager │ │ ├── compliance/ # Compliance policy engine -│ │ ├── db/ # SQLite database layer (99 modules + migrations) +│ │ ├── db/ # SQLite database layer (117 modules + migrations) │ │ │ ├── core.ts # Database initialization, connection, schema │ │ │ ├── providers.ts # Provider connection CRUD │ │ │ ├── models.ts # Model catalog management @@ -131,7 +128,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── secrets.ts # Secrets management │ │ │ ├── stateReset.ts # State reset utilities │ │ │ ├── migrationRunner.ts # Schema migration runner -│ │ │ └── migrations/ # 117 versioned SQL migration files +│ │ │ └── migrations/ # 148 versioned SQL migration files │ │ ├── evals/ # Eval runner and scheduler │ │ ├── memory/ # Persistent conversational memory │ │ │ ├── extraction.ts # Memory extraction from conversations @@ -397,7 +394,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ProviderIcon component:** Unified icon system using `@lobehub/icons` (130+ SVG) with PNG fallback and generic icon fallback chain. Used on providers, dashboard, and agents pages. -9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 99 `src/lib/db/` modules with 117 SQL migrations. +9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 117 `src/lib/db/` modules with 148 SQL migrations. 10. **Upstream headers:** Custom headers merged in executors after default auth; same header name replaces executor value. Forbidden header names in `src/shared/constants/upstreamHeaders.ts`. @@ -441,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 145 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 148 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. diff --git a/docs/i18n/ur/llm.txt b/docs/i18n/ur/llm.txt index 9564625be8..93d3b8360c 100644 --- a/docs/i18n/ur/llm.txt +++ b/docs/i18n/ur/llm.txt @@ -4,9 +4,6 @@ --- - - - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -21,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 145 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 148 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -109,7 +106,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ └── streaming.ts # SSE streaming for A2A │ │ ├── acp/ # Agent Communication Protocol registry and manager │ │ ├── compliance/ # Compliance policy engine -│ │ ├── db/ # SQLite database layer (99 modules + migrations) +│ │ ├── db/ # SQLite database layer (117 modules + migrations) │ │ │ ├── core.ts # Database initialization, connection, schema │ │ │ ├── providers.ts # Provider connection CRUD │ │ │ ├── models.ts # Model catalog management @@ -131,7 +128,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── secrets.ts # Secrets management │ │ │ ├── stateReset.ts # State reset utilities │ │ │ ├── migrationRunner.ts # Schema migration runner -│ │ │ └── migrations/ # 117 versioned SQL migration files +│ │ │ └── migrations/ # 148 versioned SQL migration files │ │ ├── evals/ # Eval runner and scheduler │ │ ├── memory/ # Persistent conversational memory │ │ │ ├── extraction.ts # Memory extraction from conversations @@ -397,7 +394,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ProviderIcon component:** Unified icon system using `@lobehub/icons` (130+ SVG) with PNG fallback and generic icon fallback chain. Used on providers, dashboard, and agents pages. -9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 99 `src/lib/db/` modules with 117 SQL migrations. +9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 117 `src/lib/db/` modules with 148 SQL migrations. 10. **Upstream headers:** Custom headers merged in executors after default auth; same header name replaces executor value. Forbidden header names in `src/shared/constants/upstreamHeaders.ts`. @@ -441,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 145 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 148 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. diff --git a/docs/i18n/vi/llm.txt b/docs/i18n/vi/llm.txt index bddf9a846c..c119435f88 100644 --- a/docs/i18n/vi/llm.txt +++ b/docs/i18n/vi/llm.txt @@ -4,9 +4,6 @@ --- - - - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -21,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 145 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 148 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -109,7 +106,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ └── streaming.ts # SSE streaming for A2A │ │ ├── acp/ # Agent Communication Protocol registry and manager │ │ ├── compliance/ # Compliance policy engine -│ │ ├── db/ # SQLite database layer (99 modules + migrations) +│ │ ├── db/ # SQLite database layer (117 modules + migrations) │ │ │ ├── core.ts # Database initialization, connection, schema │ │ │ ├── providers.ts # Provider connection CRUD │ │ │ ├── models.ts # Model catalog management @@ -131,7 +128,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── secrets.ts # Secrets management │ │ │ ├── stateReset.ts # State reset utilities │ │ │ ├── migrationRunner.ts # Schema migration runner -│ │ │ └── migrations/ # 117 versioned SQL migration files +│ │ │ └── migrations/ # 148 versioned SQL migration files │ │ ├── evals/ # Eval runner and scheduler │ │ ├── memory/ # Persistent conversational memory │ │ │ ├── extraction.ts # Memory extraction from conversations @@ -397,7 +394,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ProviderIcon component:** Unified icon system using `@lobehub/icons` (130+ SVG) with PNG fallback and generic icon fallback chain. Used on providers, dashboard, and agents pages. -9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 99 `src/lib/db/` modules with 117 SQL migrations. +9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 117 `src/lib/db/` modules with 148 SQL migrations. 10. **Upstream headers:** Custom headers merged in executors after default auth; same header name replaces executor value. Forbidden header names in `src/shared/constants/upstreamHeaders.ts`. @@ -441,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 145 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 148 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. diff --git a/docs/i18n/zh-CN/llm.txt b/docs/i18n/zh-CN/llm.txt index 4b6c349ff9..69c73bd76d 100644 --- a/docs/i18n/zh-CN/llm.txt +++ b/docs/i18n/zh-CN/llm.txt @@ -4,9 +4,6 @@ --- - - - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -21,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 145 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 148 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -109,7 +106,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ └── streaming.ts # SSE streaming for A2A │ │ ├── acp/ # Agent Communication Protocol registry and manager │ │ ├── compliance/ # Compliance policy engine -│ │ ├── db/ # SQLite database layer (99 modules + migrations) +│ │ ├── db/ # SQLite database layer (117 modules + migrations) │ │ │ ├── core.ts # Database initialization, connection, schema │ │ │ ├── providers.ts # Provider connection CRUD │ │ │ ├── models.ts # Model catalog management @@ -131,7 +128,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── secrets.ts # Secrets management │ │ │ ├── stateReset.ts # State reset utilities │ │ │ ├── migrationRunner.ts # Schema migration runner -│ │ │ └── migrations/ # 117 versioned SQL migration files +│ │ │ └── migrations/ # 148 versioned SQL migration files │ │ ├── evals/ # Eval runner and scheduler │ │ ├── memory/ # Persistent conversational memory │ │ │ ├── extraction.ts # Memory extraction from conversations @@ -397,7 +394,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ProviderIcon component:** Unified icon system using `@lobehub/icons` (130+ SVG) with PNG fallback and generic icon fallback chain. Used on providers, dashboard, and agents pages. -9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 99 `src/lib/db/` modules with 117 SQL migrations. +9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 117 `src/lib/db/` modules with 148 SQL migrations. 10. **Upstream headers:** Custom headers merged in executors after default auth; same header name replaces executor value. Forbidden header names in `src/shared/constants/upstreamHeaders.ts`. @@ -441,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 145 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 148 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. diff --git a/docs/i18n/zh-TW/llm.txt b/docs/i18n/zh-TW/llm.txt index a402eedfc3..c96e129b34 100644 --- a/docs/i18n/zh-TW/llm.txt +++ b/docs/i18n/zh-TW/llm.txt @@ -4,9 +4,6 @@ --- - - - > OmniRoute is a free, open-source AI Gateway that acts as a universal API proxy for multi-provider LLMs. It provides smart routing, automatic fallback, load balancing, and format translation across 339 AI providers — all through a single OpenAI-compatible endpoint. Includes a built-in MCP Server (105 tools), A2A v0.3 protocol, Memory/Skills systems, Cloud Agents (codex, cursor, devin, jules), Guardrails framework, and an Electron desktop app. ## Overview @@ -21,7 +18,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 145 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 148 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -109,7 +106,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ └── streaming.ts # SSE streaming for A2A │ │ ├── acp/ # Agent Communication Protocol registry and manager │ │ ├── compliance/ # Compliance policy engine -│ │ ├── db/ # SQLite database layer (99 modules + migrations) +│ │ ├── db/ # SQLite database layer (117 modules + migrations) │ │ │ ├── core.ts # Database initialization, connection, schema │ │ │ ├── providers.ts # Provider connection CRUD │ │ │ ├── models.ts # Model catalog management @@ -131,7 +128,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── secrets.ts # Secrets management │ │ │ ├── stateReset.ts # State reset utilities │ │ │ ├── migrationRunner.ts # Schema migration runner -│ │ │ └── migrations/ # 117 versioned SQL migration files +│ │ │ └── migrations/ # 148 versioned SQL migration files │ │ ├── evals/ # Eval runner and scheduler │ │ ├── memory/ # Persistent conversational memory │ │ │ ├── extraction.ts # Memory extraction from conversations @@ -397,7 +394,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ProviderIcon component:** Unified icon system using `@lobehub/icons` (130+ SVG) with PNG fallback and generic icon fallback chain. Used on providers, dashboard, and agents pages. -9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 99 `src/lib/db/` modules with 117 SQL migrations. +9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 117 `src/lib/db/` modules with 148 SQL migrations. 10. **Upstream headers:** Custom headers merged in executors after default auth; same header name replaces executor value. Forbidden header names in `src/shared/constants/upstreamHeaders.ts`. @@ -441,7 +438,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 145 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 148 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. diff --git a/llm.txt b/llm.txt index 2d0d3ec260..07f1889c47 100644 --- a/llm.txt +++ b/llm.txt @@ -14,7 +14,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo - **Runtime:** Node.js `>=22.0.0 <23 || >=24.0.0 <27`, ES Modules (`"type": "module"`) - **Framework:** Next.js 16 (App Router) with TypeScript 6 -- **Database:** SQLite via better-sqlite3 (local, zero-config, 145 migrations) +- **Database:** SQLite via better-sqlite3 (local, zero-config, 148 migrations) - **State management:** Zustand (client), SQLite (server persistence) - **UI:** React 19, Tailwind CSS 4, Recharts for analytics, @lobehub/icons for 130+ provider SVG icons - **Auth:** OAuth 2.0 (PKCE) for providers, bcrypt for local user auth @@ -102,7 +102,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ └── streaming.ts # SSE streaming for A2A │ │ ├── acp/ # Agent Communication Protocol registry and manager │ │ ├── compliance/ # Compliance policy engine -│ │ ├── db/ # SQLite database layer (99 modules + migrations) +│ │ ├── db/ # SQLite database layer (117 modules + migrations) │ │ │ ├── core.ts # Database initialization, connection, schema │ │ │ ├── providers.ts # Provider connection CRUD │ │ │ ├── models.ts # Model catalog management @@ -124,7 +124,7 @@ OmniRoute solves the problem of managing multiple AI provider subscriptions, quo │ │ │ ├── secrets.ts # Secrets management │ │ │ ├── stateReset.ts # State reset utilities │ │ │ ├── migrationRunner.ts # Schema migration runner -│ │ │ └── migrations/ # 117 versioned SQL migration files +│ │ │ └── migrations/ # 148 versioned SQL migration files │ │ ├── evals/ # Eval runner and scheduler │ │ ├── memory/ # Persistent conversational memory │ │ │ ├── extraction.ts # Memory extraction from conversations @@ -390,7 +390,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 8. **ProviderIcon component:** Unified icon system using `@lobehub/icons` (130+ SVG) with PNG fallback and generic icon fallback chain. Used on providers, dashboard, and agents pages. -9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 99 `src/lib/db/` modules with 117 SQL migrations. +9. **DB architecture:** `localDb.ts` is a re-export layer only — real logic lives in 117 `src/lib/db/` modules with 148 SQL migrations. 10. **Upstream headers:** Custom headers merged in executors after default auth; same header name replaces executor value. Forbidden header names in `src/shared/constants/upstreamHeaders.ts`. @@ -434,7 +434,7 @@ diagnostics) plus **memory**, **skill**, **agentSkill**, **githubSkill**, **pool 4. **Environment variables:** All configuration is in `.env` (from `.env.example`). Key vars: `PORT`, `NEXT_PUBLIC_BASE_URL`, `API_KEY`, `ADMIN_PASSWORD`. -5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 145 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. +5. **Database layer:** Operations go through `src/lib/db/` modules (117 domain-specific files, 148 migrations). `localDb.ts` is re-exports only — add new functions to the proper `db/*.ts` module. 6. **Tests** use Node.js built-in test runner + Vitest. Run `npm test`. Vitest for MCP/autoCombo (`npm run test:vitest`). Playwright for E2E (`npm run test:e2e`). Coverage gate: ratchet vs `quality-baseline.json`, absolute floor 60% statements/lines/functions/branches. diff --git a/src/app/(dashboard)/dashboard/resilience/connections/components/ResilienceConnectionsClient.tsx b/src/app/(dashboard)/dashboard/resilience/connections/components/ResilienceConnectionsClient.tsx index 5468ab3dbd..74747a9889 100644 --- a/src/app/(dashboard)/dashboard/resilience/connections/components/ResilienceConnectionsClient.tsx +++ b/src/app/(dashboard)/dashboard/resilience/connections/components/ResilienceConnectionsClient.tsx @@ -185,7 +185,7 @@ export default function ResilienceConnectionsClient() { color: "var(--color-warning)", }} > - {t("degraded", { + {t("degraded.message", { sources: data.meta.degraded.map((s) => t(`degraded.source.${s}`)).join(", "), })} diff --git a/src/i18n/messages/ar.json b/src/i18n/messages/ar.json index 9c13963b87..d7d1861d66 100644 --- a/src/i18n/messages/ar.json +++ b/src/i18n/messages/ar.json @@ -13253,17 +13253,17 @@ "pollErrorLocalOnly": "هذه الصفحة متاحة فقط من localhost أو الشبكة المحلية (LOCAL_ONLY).", "pollErrorStopped": "توقف الاستطلاع: رفض الخادم الطلب (404/403).", "pollErrorTransient": "خطأ في جلب البيانات: إعادة المحاولة تلقائيًا.", - "degraded": "بيانات جزئية: مصادر غير متاحة: {sources}", - "degraded.source.database": "قاعدة البيانات", - "degraded.source.circuitBreaker": "قاطع الدائرة", - "degraded.source.modelLockouts": "حظر النماذج", - "degraded.source.count": "عدد الاتصالات" + "degraded": { + "message": "بيانات جزئية: مصادر غير متاحة: {sources}", + "source": { + "database": "قاعدة البيانات", + "circuitBreaker": "قاطع الدائرة", + "modelLockouts": "حظر النماذج", + "count": "عدد الاتصالات" + } + } }, "featureFlagCapabilityFilterEnabledDescription": "رفض الطلبات قبل الإرسال عندما يفتقر النموذج المستهدف إلى القدرات المطلوبة (الرؤية، الأدوات، المخرجات المنظمة، نافذة السياق). يحمي الطلبات المباشرة من مزود واحد التي تتجاوز فلتر توافق الطبقة المجمعة.", - "capabilityFilter.visionMismatch": "المزود لا يدعم الرؤية لطلب الصورة هذا", - "capabilityFilter.toolsMismatch": "المزود لا يدعم استدعاء الأداة", - "capabilityFilter.structuredOutputMismatch": "المزود لا يدعم الإخراج المنظم", - "capabilityFilter.contextWindowMismatch": "تجاوز الطلب نافذة سياق المزود", "publicSystem": { "notFound": { "title": "الصفحة غير موجودة", @@ -13676,5 +13676,11 @@ "noExpiry": "No announced expiry", "openOffer": "View offer", "trialDays": "{days, plural, one {# day} other {# days}}" + }, + "capabilityFilter": { + "visionMismatch": "المزود لا يدعم الرؤية لطلب الصورة هذا", + "toolsMismatch": "المزود لا يدعم استدعاء الأداة", + "structuredOutputMismatch": "المزود لا يدعم الإخراج المنظم", + "contextWindowMismatch": "تجاوز الطلب نافذة سياق المزود" } } diff --git a/src/i18n/messages/az.json b/src/i18n/messages/az.json index 02b70e9a57..779440beb1 100644 --- a/src/i18n/messages/az.json +++ b/src/i18n/messages/az.json @@ -13253,17 +13253,17 @@ "pollErrorLocalOnly": "Bu səhifə yalnız localhost və ya LAN-dan əlçatandır (LOCAL_ONLY).", "pollErrorStopped": "Sorğu dayandırıldı: server sorğunu rədd etdi (404/403).", "pollErrorTransient": "Məlumat alarkən xəta: avtomatik yenidən cəhd edilir.", - "degraded": "Qismən məlumat: əlçatmaz mənbələr: {sources}", - "degraded.source.database": "Verilənlər Bazası", - "degraded.source.circuitBreaker": "Dövrə Açarı", - "degraded.source.modelLockouts": "Model Blokları", - "degraded.source.count": "Bağlantı Sayı" + "degraded": { + "message": "Qismən məlumat: əlçatmaz mənbələr: {sources}", + "source": { + "database": "Verilənlər Bazası", + "circuitBreaker": "Dövrə Açarı", + "modelLockouts": "Model Blokları", + "count": "Bağlantı Sayı" + } + } }, "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.", - "capabilityFilter.visionMismatch": "Təchizatçı bu şəkil tələbi üçün görünüşü dəstəkləmir", - "capabilityFilter.toolsMismatch": "Təchizatçı alət çağırışını dəstəkləmir", - "capabilityFilter.structuredOutputMismatch": "Təchizatçı strukturlaşdırılmış çıxışı dəstəkləmir", - "capabilityFilter.contextWindowMismatch": "Sorğu təminatçının kontekst pəncərəsini aşır", "publicSystem": { "notFound": { "title": "Səhifə tapılmadı", @@ -13676,5 +13676,11 @@ "noExpiry": "No announced expiry", "openOffer": "View offer", "trialDays": "{days, plural, one {# day} other {# days}}" + }, + "capabilityFilter": { + "visionMismatch": "Təchizatçı bu şəkil tələbi üçün görünüşü dəstəkləmir", + "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" } } diff --git a/src/i18n/messages/bg.json b/src/i18n/messages/bg.json index 3c4097eb3d..9f895fd181 100644 --- a/src/i18n/messages/bg.json +++ b/src/i18n/messages/bg.json @@ -13253,17 +13253,17 @@ "pollErrorLocalOnly": "Тази страница е достъпна само от localhost или LAN (LOCAL_ONLY).", "pollErrorStopped": "Запитването е спряно: сървърът отхвърли заявката (404/403).", "pollErrorTransient": "Грешка при извличане на данни: автоматичен повторен опит.", - "degraded": "Частични данни: недостъпни източници: {sources}", - "degraded.source.database": "База Данни", - "degraded.source.circuitBreaker": "Прекъсвач", - "degraded.source.modelLockouts": "Заключвания на Модел", - "degraded.source.count": "Брой Връзки" + "degraded": { + "message": "Частични данни: недостъпни източници: {sources}", + "source": { + "database": "База Данни", + "circuitBreaker": "Прекъсвач", + "modelLockouts": "Заключвания на Модел", + "count": "Брой Връзки" + } + } }, "featureFlagCapabilityFilterEnabledDescription": "Отхвърлете заявките преди изпращане, когато целевият модел няма необходимите възможности (визия, инструменти, структурирани изходи, контекстен прозорец). Защитава директните заявки от един доставчик, които заобикалят филтъра за съвместимост на комбинирания слой.", - "capabilityFilter.visionMismatch": "Доставчикът не поддържа визуализация за тази заявка за изображение", - "capabilityFilter.toolsMismatch": "Доставчикът не поддържа извикване на инструменти", - "capabilityFilter.structuredOutputMismatch": "Доставчикът не поддържа структурирано изходно съдържание", - "capabilityFilter.contextWindowMismatch": "Заявката надвишава контекстния прозорец на доставчика", "publicSystem": { "notFound": { "title": "Страницата не е намерена", @@ -13676,5 +13676,11 @@ "noExpiry": "No announced expiry", "openOffer": "View offer", "trialDays": "{days, plural, one {# day} other {# days}}" + }, + "capabilityFilter": { + "visionMismatch": "Доставчикът не поддържа визуализация за тази заявка за изображение", + "toolsMismatch": "Доставчикът не поддържа извикване на инструменти", + "structuredOutputMismatch": "Доставчикът не поддържа структурирано изходно съдържание", + "contextWindowMismatch": "Заявката надвишава контекстния прозорец на доставчика" } } diff --git a/src/i18n/messages/bn.json b/src/i18n/messages/bn.json index 3146fb45e5..cd6238e007 100644 --- a/src/i18n/messages/bn.json +++ b/src/i18n/messages/bn.json @@ -13253,17 +13253,17 @@ "pollErrorLocalOnly": "এই পৃষ্ঠাটি শুধুমাত্র localhost বা LAN থেকে অ্যাক্সেসযোগ্য (LOCAL_ONLY)।", "pollErrorStopped": "পোলিং বন্ধ: সার্ভার অনুরোধ প্রত্যাখ্যান করেছে (404/403)।", "pollErrorTransient": "ডেটা আনতে ত্রুটি: স্বয়ংক্রিয়ভাবে পুনরায় চেষ্টা করা হচ্ছে।", - "degraded": "আংশিক ডেটা: অনুপলব্ধ উৎস: {sources}", - "degraded.source.database": "ডাটাবেস", - "degraded.source.circuitBreaker": "সার্কিট ব্রেকার", - "degraded.source.modelLockouts": "মডেল লকআউট", - "degraded.source.count": "সংযোগ সংখ্যা" + "degraded": { + "message": "আংশিক ডেটা: অনুপলব্ধ উৎস: {sources}", + "source": { + "database": "ডাটাবেস", + "circuitBreaker": "সার্কিট ব্রেকার", + "modelLockouts": "মডেল লকআউট", + "count": "সংযোগ সংখ্যা" + } + } }, "featureFlagCapabilityFilterEnabledDescription": "লক্ষ্য মডেলের প্রয়োজনীয় সক্ষমতা (দৃষ্টি, সরঞ্জাম, কাঠামোবদ্ধ আউটপুট, প্রসঙ্গ উইন্ডো) অনুপস্থিত থাকলে প্রেরণের আগে অনুরোধগুলি প্রত্যাখ্যান করুন। এটি কম্বো-লেয়ার সামঞ্জস্য ফিল্টারকে বাইপাস করা সরাসরি একক-প্রদানকারী অনুরোধগুলি রক্ষা করে।", - "capabilityFilter.visionMismatch": "এই চিত্রের অনুরোধের জন্য প্রদানকারী ভিশন সমর্থন করে না", - "capabilityFilter.toolsMismatch": "প্রদানকারী টুল কলিং সমর্থন করে না", - "capabilityFilter.structuredOutputMismatch": "প্রোভাইডার স্ট্রাকচারড আউটপুট সমর্থন করে না", - "capabilityFilter.contextWindowMismatch": "অনুরোধটি প্রদানকারীর প্রসঙ্গ উইন্ডো অতিক্রম করেছে", "publicSystem": { "notFound": { "title": "পৃষ্ঠা পাওয়া যায়নি", @@ -13676,5 +13676,11 @@ "noExpiry": "No announced expiry", "openOffer": "View offer", "trialDays": "{days, plural, one {# day} other {# days}}" + }, + "capabilityFilter": { + "visionMismatch": "এই চিত্রের অনুরোধের জন্য প্রদানকারী ভিশন সমর্থন করে না", + "toolsMismatch": "প্রদানকারী টুল কলিং সমর্থন করে না", + "structuredOutputMismatch": "প্রোভাইডার স্ট্রাকচারড আউটপুট সমর্থন করে না", + "contextWindowMismatch": "অনুরোধটি প্রদানকারীর প্রসঙ্গ উইন্ডো অতিক্রম করেছে" } } diff --git a/src/i18n/messages/cs.json b/src/i18n/messages/cs.json index 7daabeb40a..b263c87d85 100644 --- a/src/i18n/messages/cs.json +++ b/src/i18n/messages/cs.json @@ -13253,17 +13253,17 @@ "pollErrorLocalOnly": "Tato stránka je přístupná pouze z localhost nebo LAN (LOCAL_ONLY).", "pollErrorStopped": "Dotazování zastaveno: server odmítl požadavek (404/403).", "pollErrorTransient": "Chyba při načítání dat: automatické opakování.", - "degraded": "Částečná data: nedostupné zdroje: {sources}", - "degraded.source.database": "Databáze", - "degraded.source.circuitBreaker": "Jistič", - "degraded.source.modelLockouts": "Uzamčení Modelu", - "degraded.source.count": "Počet Připojení" + "degraded": { + "message": "Částečná data: nedostupné zdroje: {sources}", + "source": { + "database": "Databáze", + "circuitBreaker": "Jistič", + "modelLockouts": "Uzamčení Modelu", + "count": "Počet Připojení" + } + } }, "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.", - "capabilityFilter.visionMismatch": "Poskytovatel nepodporuje zobrazení pro tento požadavek na obrázek", - "capabilityFilter.toolsMismatch": "Poskytovatel nepodporuje volání nástroje", - "capabilityFilter.structuredOutputMismatch": "Poskytovatel nepodporuje strukturovaný výstup", - "capabilityFilter.contextWindowMismatch": "Žádost překračuje kontextové okno poskytovatele", "publicSystem": { "notFound": { "title": "Stránka nebyla nalezena", @@ -13676,5 +13676,11 @@ "noExpiry": "No announced expiry", "openOffer": "View offer", "trialDays": "{days, plural, one {# day} other {# days}}" + }, + "capabilityFilter": { + "visionMismatch": "Poskytovatel nepodporuje zobrazení pro tento požadavek na obrázek", + "toolsMismatch": "Poskytovatel nepodporuje volání nástroje", + "structuredOutputMismatch": "Poskytovatel nepodporuje strukturovaný výstup", + "contextWindowMismatch": "Žádost překračuje kontextové okno poskytovatele" } } diff --git a/src/i18n/messages/da.json b/src/i18n/messages/da.json index 153c7ae2d7..368251d4e9 100644 --- a/src/i18n/messages/da.json +++ b/src/i18n/messages/da.json @@ -13253,17 +13253,17 @@ "pollErrorLocalOnly": "Denne side er kun tilgængelig fra localhost eller LAN (LOCAL_ONLY).", "pollErrorStopped": "Polling stoppet: serveren afviste anmodningen (404/403).", "pollErrorTransient": "Fejl ved hentning af data: forsøger automatisk igen.", - "degraded": "Delvise data: utilgængelige kilder: {sources}", - "degraded.source.database": "Database", - "degraded.source.circuitBreaker": "Afbryder", - "degraded.source.modelLockouts": "Modellåsninger", - "degraded.source.count": "Antal Forbindelser" + "degraded": { + "message": "Delvise data: utilgængelige kilder: {sources}", + "source": { + "database": "Database", + "circuitBreaker": "Afbryder", + "modelLockouts": "Modellåsninger", + "count": "Antal Forbindelser" + } + } }, "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.", - "capabilityFilter.visionMismatch": "Udbyderen understøtter ikke vision for denne billedanmodning", - "capabilityFilter.toolsMismatch": "Udbyderen understøtter ikke værktøjsopkald.", - "capabilityFilter.structuredOutputMismatch": "Udbyderen understøtter ikke struktureret output", - "capabilityFilter.contextWindowMismatch": "Anmodningen overskrider udbyderens kontekstvindue", "publicSystem": { "notFound": { "title": "Siden blev ikke fundet", @@ -13676,5 +13676,11 @@ "noExpiry": "No announced expiry", "openOffer": "View offer", "trialDays": "{days, plural, one {# day} other {# days}}" + }, + "capabilityFilter": { + "visionMismatch": "Udbyderen understøtter ikke vision for denne billedanmodning", + "toolsMismatch": "Udbyderen understøtter ikke værktøjsopkald.", + "structuredOutputMismatch": "Udbyderen understøtter ikke struktureret output", + "contextWindowMismatch": "Anmodningen overskrider udbyderens kontekstvindue" } } diff --git a/src/i18n/messages/de.json b/src/i18n/messages/de.json index b55db4e3c3..3afacfec55 100644 --- a/src/i18n/messages/de.json +++ b/src/i18n/messages/de.json @@ -13253,17 +13253,17 @@ "pollErrorLocalOnly": "Diese Seite ist nur von localhost oder LAN aus zugänglich (LOCAL_ONLY).", "pollErrorStopped": "Abfrage gestoppt: Der Server hat die Anfrage abgelehnt (404/403).", "pollErrorTransient": "Fehler beim Abrufen der Daten: automatischer erneuter Versuch.", - "degraded": "Teildaten: nicht verfügbare Quellen: {sources}", - "degraded.source.database": "Datenbank", - "degraded.source.circuitBreaker": "Leistungsschalter", - "degraded.source.modelLockouts": "Modellsperren", - "degraded.source.count": "Verbindungsanzahl" + "degraded": { + "message": "Teildaten: nicht verfügbare Quellen: {sources}", + "source": { + "database": "Datenbank", + "circuitBreaker": "Leistungsschalter", + "modelLockouts": "Modellsperren", + "count": "Verbindungsanzahl" + } + } }, "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.", - "capabilityFilter.visionMismatch": "Der Anbieter unterstützt die Vision für diese Bildanfrage nicht", - "capabilityFilter.toolsMismatch": "Der Anbieter unterstützt keinen Toolaufruf", - "capabilityFilter.structuredOutputMismatch": "Der Anbieter unterstützt keine strukturierten Ausgaben", - "capabilityFilter.contextWindowMismatch": "Anfrage überschreitet das Kontextfenster des Anbieters", "publicSystem": { "notFound": { "title": "Seite nicht gefunden", @@ -13676,5 +13676,11 @@ "noExpiry": "Kein Ablaufdatum angegeben", "openOffer": "Angebot ansehen", "trialDays": "{days, plural, one {# Tag} other {# Tage}}" + }, + "capabilityFilter": { + "visionMismatch": "Der Anbieter unterstützt die Vision für diese Bildanfrage nicht", + "toolsMismatch": "Der Anbieter unterstützt keinen Toolaufruf", + "structuredOutputMismatch": "Der Anbieter unterstützt keine strukturierten Ausgaben", + "contextWindowMismatch": "Anfrage überschreitet das Kontextfenster des Anbieters" } } diff --git a/src/i18n/messages/en.json b/src/i18n/messages/en.json index dd74402ad9..ddb496c811 100644 --- a/src/i18n/messages/en.json +++ b/src/i18n/messages/en.json @@ -13278,17 +13278,17 @@ "pollErrorLocalOnly": "This page is only accessible from localhost or LAN (LOCAL_ONLY).", "pollErrorStopped": "Polling stopped: the server rejected the request (404/403).", "pollErrorTransient": "Error fetching data: retrying automatically.", - "degraded": "Partial data: unavailable sources: {sources}", - "degraded.source.database": "Database", - "degraded.source.circuitBreaker": "Circuit Breaker", - "degraded.source.modelLockouts": "Model Lockouts", - "degraded.source.count": "Connection Count" + "degraded": { + "message": "Partial data: unavailable sources: {sources}", + "source": { + "database": "Database", + "circuitBreaker": "Circuit Breaker", + "modelLockouts": "Model Lockouts", + "count": "Connection Count" + } + } }, "featureFlagCapabilityFilterEnabledDescription": "Reject requests before dispatch when the target model lacks required capabilities (vision, tools, structured output, context window). Protects direct single-provider requests that bypass the combo-layer compatibility filter.", - "capabilityFilter.visionMismatch": "Provider does not support vision for this image request", - "capabilityFilter.toolsMismatch": "Provider does not support tool calling", - "capabilityFilter.structuredOutputMismatch": "Provider does not support structured output", - "capabilityFilter.contextWindowMismatch": "Request exceeds provider context window", "publicSystem": { "notFound": { "title": "Page not found", @@ -13717,5 +13717,11 @@ "stable": "Stable", "shrinking": "Shrinking" } + }, + "capabilityFilter": { + "visionMismatch": "Provider does not support vision for this image request", + "toolsMismatch": "Provider does not support tool calling", + "structuredOutputMismatch": "Provider does not support structured output", + "contextWindowMismatch": "Request exceeds provider context window" } } diff --git a/src/i18n/messages/es.json b/src/i18n/messages/es.json index 6648811c3f..5339b11550 100644 --- a/src/i18n/messages/es.json +++ b/src/i18n/messages/es.json @@ -13253,17 +13253,17 @@ "pollErrorLocalOnly": "Esta página solo es accesible desde localhost o LAN (LOCAL_ONLY).", "pollErrorStopped": "Sondeo detenido: el servidor rechazó la solicitud (404/403).", "pollErrorTransient": "Error al obtener datos: reintentando automáticamente.", - "degraded": "Datos parciales: fuentes no disponibles: {sources}", - "degraded.source.database": "Base de Datos", - "degraded.source.circuitBreaker": "Disyuntor", - "degraded.source.modelLockouts": "Bloqueos de Modelo", - "degraded.source.count": "Cantidad de Conexiones" + "degraded": { + "message": "Datos parciales: fuentes no disponibles: {sources}", + "source": { + "database": "Base de Datos", + "circuitBreaker": "Disyuntor", + "modelLockouts": "Bloqueos de Modelo", + "count": "Cantidad de Conexiones" + } + } }, "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.", - "capabilityFilter.visionMismatch": "El proveedor no admite visión para esta solicitud de imagen", - "capabilityFilter.toolsMismatch": "El proveedor no admite la llamada a la herramienta", - "capabilityFilter.structuredOutputMismatch": "El proveedor no admite salida estructurada", - "capabilityFilter.contextWindowMismatch": "La solicitud excede la ventana de contexto del proveedor", "publicSystem": { "notFound": { "title": "Página no encontrada", @@ -13676,5 +13676,11 @@ "noExpiry": "No announced expiry", "openOffer": "View offer", "trialDays": "{days, plural, one {# day} other {# days}}" + }, + "capabilityFilter": { + "visionMismatch": "El proveedor no admite visión para esta solicitud de imagen", + "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" } } diff --git a/src/i18n/messages/fa.json b/src/i18n/messages/fa.json index 24fda79abb..70216bc759 100644 --- a/src/i18n/messages/fa.json +++ b/src/i18n/messages/fa.json @@ -13253,17 +13253,17 @@ "pollErrorLocalOnly": "این صفحه فقط از localhost یا LAN قابل دسترسی است (LOCAL_ONLY).", "pollErrorStopped": "نظرسنجی متوقف شد: سرور درخواست را رد کرد (404/403).", "pollErrorTransient": "خطا در دریافت داده: تلاش مجدد خودکار.", - "degraded": "داده ناقص: منابع در دسترس نیست: {sources}", - "degraded.source.database": "پایگاه داده", - "degraded.source.circuitBreaker": "قطع‌کننده مدار", - "degraded.source.modelLockouts": "قفل‌های مدل", - "degraded.source.count": "تعداد اتصالات" + "degraded": { + "message": "داده ناقص: منابع در دسترس نیست: {sources}", + "source": { + "database": "پایگاه داده", + "circuitBreaker": "قطع‌کننده مدار", + "modelLockouts": "قفل‌های مدل", + "count": "تعداد اتصالات" + } + } }, "featureFlagCapabilityFilterEnabledDescription": "درخواست‌ها را قبل از ارسال رد کنید زمانی که مدل هدف قابلیت‌های مورد نیاز (بینایی، ابزارها، خروجی ساختاریافته، پنجره زمینه) را ندارد. از درخواست‌های مستقیم تک‌تأمین‌کننده که فیلتر سازگاری لایه ترکیبی را دور می‌زنند، محافظت می‌کند.", - "capabilityFilter.visionMismatch": "ارائه‌دهنده برای این درخواست تصویر از بینایی پشتیبانی نمی‌کند", - "capabilityFilter.toolsMismatch": "ارائه‌دهنده از فراخوانی ابزار پشتیبانی نمی‌کند", - "capabilityFilter.structuredOutputMismatch": "ارائه‌دهنده خروجی ساختاریافته را پشتیبانی نمی‌کند", - "capabilityFilter.contextWindowMismatch": "درخواست از حد مجاز پنجره زمینه ارائه‌دهنده فراتر می‌رود", "publicSystem": { "notFound": { "title": "صفحه پیدا نشد", @@ -13676,5 +13676,11 @@ "noExpiry": "No announced expiry", "openOffer": "View offer", "trialDays": "{days, plural, one {# day} other {# days}}" + }, + "capabilityFilter": { + "visionMismatch": "ارائه‌دهنده برای این درخواست تصویر از بینایی پشتیبانی نمی‌کند", + "toolsMismatch": "ارائه‌دهنده از فراخوانی ابزار پشتیبانی نمی‌کند", + "structuredOutputMismatch": "ارائه‌دهنده خروجی ساختاریافته را پشتیبانی نمی‌کند", + "contextWindowMismatch": "درخواست از حد مجاز پنجره زمینه ارائه‌دهنده فراتر می‌رود" } } diff --git a/src/i18n/messages/fi.json b/src/i18n/messages/fi.json index 643851aa2d..05881d5351 100644 --- a/src/i18n/messages/fi.json +++ b/src/i18n/messages/fi.json @@ -13253,17 +13253,17 @@ "pollErrorLocalOnly": "Tämä sivu on käytettävissä vain localhostista tai LAN-verkosta (LOCAL_ONLY).", "pollErrorStopped": "Kysely pysäytetty: palvelin hylkäsi pyynnön (404/403).", "pollErrorTransient": "Virhe tietojen haussa: yritetään automaattisesti uudelleen.", - "degraded": "Osittaiset tiedot: käyttökelvottomat lähteet: {sources}", - "degraded.source.database": "Tietokanta", - "degraded.source.circuitBreaker": "Piirikatkaisija", - "degraded.source.modelLockouts": "Mallilukitukset", - "degraded.source.count": "Yhteyksien Määrä" + "degraded": { + "message": "Osittaiset tiedot: käyttökelvottomat lähteet: {sources}", + "source": { + "database": "Tietokanta", + "circuitBreaker": "Piirikatkaisija", + "modelLockouts": "Mallilukitukset", + "count": "Yhteyksien Määrä" + } + } }, "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.", - "capabilityFilter.visionMismatch": "Palveluntarjoaja ei tue näkymää tälle kuvapyynnölle", - "capabilityFilter.toolsMismatch": "Toimittaja ei tue työkalun kutsumista", - "capabilityFilter.structuredOutputMismatch": "Palveluntarjoaja ei tue jäsenneltyä tulostusta", - "capabilityFilter.contextWindowMismatch": "Pyyntö ylittää tarjoajan kontekstin ikkunan", "publicSystem": { "notFound": { "title": "Sivua ei löytynyt", @@ -13676,5 +13676,11 @@ "noExpiry": "No announced expiry", "openOffer": "View offer", "trialDays": "{days, plural, one {# day} other {# days}}" + }, + "capabilityFilter": { + "visionMismatch": "Palveluntarjoaja ei tue näkymää tälle kuvapyynnölle", + "toolsMismatch": "Toimittaja ei tue työkalun kutsumista", + "structuredOutputMismatch": "Palveluntarjoaja ei tue jäsenneltyä tulostusta", + "contextWindowMismatch": "Pyyntö ylittää tarjoajan kontekstin ikkunan" } } diff --git a/src/i18n/messages/fr.json b/src/i18n/messages/fr.json index 5638e173cb..24949943d9 100644 --- a/src/i18n/messages/fr.json +++ b/src/i18n/messages/fr.json @@ -13253,17 +13253,17 @@ "pollErrorLocalOnly": "Cette page n'est accessible que depuis localhost ou le LAN (LOCAL_ONLY).", "pollErrorStopped": "Sondage arrêté : le serveur a rejeté la requête (404/403).", "pollErrorTransient": "Erreur lors de la récupération des données : nouvelle tentative automatique.", - "degraded": "Données partielles : sources indisponibles : {sources}", - "degraded.source.database": "Base de Données", - "degraded.source.circuitBreaker": "Disjoncteur", - "degraded.source.modelLockouts": "Blocages de Modèle", - "degraded.source.count": "Nombre de Connexions" + "degraded": { + "message": "Données partielles : sources indisponibles : {sources}", + "source": { + "database": "Base de Données", + "circuitBreaker": "Disjoncteur", + "modelLockouts": "Blocages de Modèle", + "count": "Nombre de Connexions" + } + } }, "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.", - "capabilityFilter.visionMismatch": "Le fournisseur ne prend pas en charge la vision pour cette demande d'image", - "capabilityFilter.toolsMismatch": "Le fournisseur ne prend pas en charge l'appel d'outils", - "capabilityFilter.structuredOutputMismatch": "Le fournisseur ne prend pas en charge la sortie structurée", - "capabilityFilter.contextWindowMismatch": "La demande dépasse la fenêtre de contexte du fournisseur", "publicSystem": { "notFound": { "title": "Page introuvable", @@ -13676,5 +13676,11 @@ "noExpiry": "No announced expiry", "openOffer": "View offer", "trialDays": "{days, plural, one {# day} other {# days}}" + }, + "capabilityFilter": { + "visionMismatch": "Le fournisseur ne prend pas en charge la vision pour cette demande d'image", + "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" } } diff --git a/src/i18n/messages/gu.json b/src/i18n/messages/gu.json index b32dcced49..9b3b7a2783 100644 --- a/src/i18n/messages/gu.json +++ b/src/i18n/messages/gu.json @@ -13253,17 +13253,17 @@ "pollErrorLocalOnly": "આ પૃષ્ઠ ફક્ત localhost અથવા LAN પરથી જ ઍક્સેસિબલ છે (LOCAL_ONLY).", "pollErrorStopped": "પોલિંગ બંધ: સર્વરે વિનંતી નકારી (404/403).", "pollErrorTransient": "ડેટા મેળવવામાં ભૂલ: આપમેળે ફરી પ્રયાસ કરી રહ્યાં છીએ.", - "degraded": "આંશિક ડેટા: અનુપલબ્ધ સ્રોત: {sources}", - "degraded.source.database": "ડેટાબેઝ", - "degraded.source.circuitBreaker": "સર્કિટ બ્રેકર", - "degraded.source.modelLockouts": "મોડેલ લોકઆઉટ", - "degraded.source.count": "કનેક્શન ગણતરી" + "degraded": { + "message": "આંશિક ડેટા: અનુપલબ્ધ સ્રોત: {sources}", + "source": { + "database": "ડેટાબેઝ", + "circuitBreaker": "સર્કિટ બ્રેકર", + "modelLockouts": "મોડેલ લોકઆઉટ", + "count": "કનેક્શન ગણતરી" + } + } }, "featureFlagCapabilityFilterEnabledDescription": "જ્યારે લક્ષ્ય મોડેલમાં જરૂરી ક્ષમતાઓ (દૃષ્ટિ, સાધનો, રચિત આઉટપુટ, સંદર્ભ વિન્ડો) નથી ત્યારે વિતરણ પહેલાં વિનંતીઓને નકારી નાખો. કોમ્બો-લેયર સુસંગતતા ફિલ્ટરને બાયપાસ કરતી સીધી એકલ-પ્રદાતા વિનંતિઓને સુરક્ષિત કરે છે.", - "capabilityFilter.visionMismatch": "આ છબીની વિનંતી માટે પ્રદાતા દ્રષ્ટિનું સમર્થન નથી આપતું", - "capabilityFilter.toolsMismatch": "પ્રદાતા ટૂલ કોલિંગને સપોર્ટ કરતો નથી", - "capabilityFilter.structuredOutputMismatch": "પ્રદાતા સંરચિત આઉટપુટને સમર્થન આપતો નથી", - "capabilityFilter.contextWindowMismatch": "વિનંતી પ્રદાતા સંદર્ભ વિન્ડોને પાર કરે છે", "publicSystem": { "notFound": { "title": "પૃષ્ઠ મળ્યું નથી", @@ -13676,5 +13676,11 @@ "noExpiry": "No announced expiry", "openOffer": "View offer", "trialDays": "{days, plural, one {# day} other {# days}}" + }, + "capabilityFilter": { + "visionMismatch": "આ છબીની વિનંતી માટે પ્રદાતા દ્રષ્ટિનું સમર્થન નથી આપતું", + "toolsMismatch": "પ્રદાતા ટૂલ કોલિંગને સપોર્ટ કરતો નથી", + "structuredOutputMismatch": "પ્રદાતા સંરચિત આઉટપુટને સમર્થન આપતો નથી", + "contextWindowMismatch": "વિનંતી પ્રદાતા સંદર્ભ વિન્ડોને પાર કરે છે" } } diff --git a/src/i18n/messages/he.json b/src/i18n/messages/he.json index 0c56a8c43b..52c9136c72 100644 --- a/src/i18n/messages/he.json +++ b/src/i18n/messages/he.json @@ -13253,17 +13253,17 @@ "pollErrorLocalOnly": "דף זה נגיש רק מ-localhost או רשת מקומית (LOCAL_ONLY).", "pollErrorStopped": "הסקר הופסק: השרת דחה את הבקשה (404/403).", "pollErrorTransient": "שגיאה באחזור נתונים: ניסיון חוזר אוטומטי.", - "degraded": "נתונים חלקיים: מקורות לא זמינים: {sources}", - "degraded.source.database": "מסד נתונים", - "degraded.source.circuitBreaker": "נתיק מעגל", - "degraded.source.modelLockouts": "נעילות מודל", - "degraded.source.count": "מספר חיבורים" + "degraded": { + "message": "נתונים חלקיים: מקורות לא זמינים: {sources}", + "source": { + "database": "מסד נתונים", + "circuitBreaker": "נתיק מעגל", + "modelLockouts": "נעילות מודל", + "count": "מספר חיבורים" + } + } }, "featureFlagCapabilityFilterEnabledDescription": "דחה בקשות לפני שליחה כאשר המודל המטרה חסר יכולות נדרשות (חזון, כלים, פלט מובנה, חלון הקשר). מגן על בקשות ישירות מספק אחד שעוקפות את מסנן ההתאמה של שכבת הקומבו.", - "capabilityFilter.visionMismatch": "הספק אינו תומך בראייה עבור בקשה זו של תמונה", - "capabilityFilter.toolsMismatch": "הספק אינו תומך בקריאת כלים", - "capabilityFilter.structuredOutputMismatch": "הספק אינו תומך בפלט מובנה", - "capabilityFilter.contextWindowMismatch": "הבקשה חורגת מגבול ההקשר של הספק", "publicSystem": { "notFound": { "title": "העמוד לא נמצא", @@ -13676,5 +13676,11 @@ "noExpiry": "No announced expiry", "openOffer": "View offer", "trialDays": "{days, plural, one {# day} other {# days}}" + }, + "capabilityFilter": { + "visionMismatch": "הספק אינו תומך בראייה עבור בקשה זו של תמונה", + "toolsMismatch": "הספק אינו תומך בקריאת כלים", + "structuredOutputMismatch": "הספק אינו תומך בפלט מובנה", + "contextWindowMismatch": "הבקשה חורגת מגבול ההקשר של הספק" } } diff --git a/src/i18n/messages/hi.json b/src/i18n/messages/hi.json index b4bab75c2c..00dafc7a2b 100644 --- a/src/i18n/messages/hi.json +++ b/src/i18n/messages/hi.json @@ -13253,17 +13253,17 @@ "pollErrorLocalOnly": "यह पृष्ठ केवल localhost या LAN से सुलभ है (LOCAL_ONLY)।", "pollErrorStopped": "पोलिंग रुकी: सर्वर ने अनुरोध अस्वीकार किया (404/403)।", "pollErrorTransient": "डेटा प्राप्त करने में त्रुटि: स्वतः पुनः प्रयास।", - "degraded": "आंशिक डेटा: अनुपलब्ध स्रोत: {sources}", - "degraded.source.database": "डेटाबेस", - "degraded.source.circuitBreaker": "सर्किट ब्रेकर", - "degraded.source.modelLockouts": "मॉडल लॉकआउट", - "degraded.source.count": "कनेक्शन गणना" + "degraded": { + "message": "आंशिक डेटा: अनुपलब्ध स्रोत: {sources}", + "source": { + "database": "डेटाबेस", + "circuitBreaker": "सर्किट ब्रेकर", + "modelLockouts": "मॉडल लॉकआउट", + "count": "कनेक्शन गणना" + } + } }, "featureFlagCapabilityFilterEnabledDescription": "डिस्पैच से पहले अनुरोधों को अस्वीकार करें जब लक्षित मॉडल आवश्यक क्षमताओं (दृष्टि, उपकरण, संरचित आउटपुट, संदर्भ विंडो) से रहित हो। यह सीधे एकल-प्रदाता अनुरोधों की रक्षा करता है जो कॉम्बो-लेयर संगतता फ़िल्टर को बायपास करते हैं।", - "capabilityFilter.visionMismatch": "प्रदाता इस छवि अनुरोध के लिए दृष्टि का समर्थन नहीं करता", - "capabilityFilter.toolsMismatch": "प्रदाता टूल कॉलिंग का समर्थन नहीं करता", - "capabilityFilter.structuredOutputMismatch": "प्रदाता संरचित आउटपुट का समर्थन नहीं करता", - "capabilityFilter.contextWindowMismatch": "अनुरोध प्रदाता संदर्भ विंडो से अधिक है", "publicSystem": { "notFound": { "title": "पृष्ठ नहीं मिला", @@ -13676,5 +13676,11 @@ "noExpiry": "No announced expiry", "openOffer": "View offer", "trialDays": "{days, plural, one {# day} other {# days}}" + }, + "capabilityFilter": { + "visionMismatch": "प्रदाता इस छवि अनुरोध के लिए दृष्टि का समर्थन नहीं करता", + "toolsMismatch": "प्रदाता टूल कॉलिंग का समर्थन नहीं करता", + "structuredOutputMismatch": "प्रदाता संरचित आउटपुट का समर्थन नहीं करता", + "contextWindowMismatch": "अनुरोध प्रदाता संदर्भ विंडो से अधिक है" } } diff --git a/src/i18n/messages/hu.json b/src/i18n/messages/hu.json index 34d845d32e..03df029cf0 100644 --- a/src/i18n/messages/hu.json +++ b/src/i18n/messages/hu.json @@ -13253,17 +13253,17 @@ "pollErrorLocalOnly": "Ez az oldal csak localhostról vagy LAN-ról érhető el (LOCAL_ONLY).", "pollErrorStopped": "Lekérdezés leállítva: a szerver elutasította a kérést (404/403).", "pollErrorTransient": "Hiba az adatok lekérésekor: automatikus újrapróbálkozás.", - "degraded": "Részleges adatok: nem elérhető források: {sources}", - "degraded.source.database": "Adatbázis", - "degraded.source.circuitBreaker": "Megszakító", - "degraded.source.modelLockouts": "Modell Zárolások", - "degraded.source.count": "Kapcsolatok Száma" + "degraded": { + "message": "Részleges adatok: nem elérhető források: {sources}", + "source": { + "database": "Adatbázis", + "circuitBreaker": "Megszakító", + "modelLockouts": "Modell Zárolások", + "count": "Kapcsolatok Száma" + } + } }, "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.", - "capabilityFilter.visionMismatch": "A szolgáltató nem támogatja a látást ehhez a képkéréshez", - "capabilityFilter.toolsMismatch": "A szolgáltató nem támogatja az eszközhívást", - "capabilityFilter.structuredOutputMismatch": "A szolgáltató nem támogatja a strukturált kimenetet", - "capabilityFilter.contextWindowMismatch": "A kérés meghaladja a szolgáltató kontextusablakát", "publicSystem": { "notFound": { "title": "Az oldal nem található", @@ -13676,5 +13676,11 @@ "noExpiry": "No announced expiry", "openOffer": "View offer", "trialDays": "{days, plural, one {# day} other {# days}}" + }, + "capabilityFilter": { + "visionMismatch": "A szolgáltató nem támogatja a látást ehhez a képkéréshez", + "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" } } diff --git a/src/i18n/messages/id.json b/src/i18n/messages/id.json index 5824620a19..d54f936b21 100644 --- a/src/i18n/messages/id.json +++ b/src/i18n/messages/id.json @@ -13253,17 +13253,17 @@ "pollErrorLocalOnly": "Halaman ini hanya dapat diakses dari localhost atau LAN (LOCAL_ONLY).", "pollErrorStopped": "Polling dihentikan: server menolak permintaan (404/403).", "pollErrorTransient": "Kesalahan mengambil data: mencoba lagi secara otomatis.", - "degraded": "Data sebagian: sumber tidak tersedia: {sources}", - "degraded.source.database": "Basis Data", - "degraded.source.circuitBreaker": "Circuit Breaker", - "degraded.source.modelLockouts": "Penguncian Model", - "degraded.source.count": "Jumlah Koneksi" + "degraded": { + "message": "Data sebagian: sumber tidak tersedia: {sources}", + "source": { + "database": "Basis Data", + "circuitBreaker": "Circuit Breaker", + "modelLockouts": "Penguncian Model", + "count": "Jumlah Koneksi" + } + } }, "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.", - "capabilityFilter.visionMismatch": "Penyedia tidak mendukung visi untuk permintaan gambar ini", - "capabilityFilter.toolsMismatch": "Penyedia tidak mendukung pemanggilan alat", - "capabilityFilter.structuredOutputMismatch": "Penyedia tidak mendukung keluaran terstruktur", - "capabilityFilter.contextWindowMismatch": "Permintaan melebihi jendela konteks penyedia", "publicSystem": { "notFound": { "title": "Halaman tidak ditemukan", @@ -13676,5 +13676,11 @@ "noExpiry": "No announced expiry", "openOffer": "View offer", "trialDays": "{days, plural, one {# day} other {# days}}" + }, + "capabilityFilter": { + "visionMismatch": "Penyedia tidak mendukung visi untuk permintaan gambar ini", + "toolsMismatch": "Penyedia tidak mendukung pemanggilan alat", + "structuredOutputMismatch": "Penyedia tidak mendukung keluaran terstruktur", + "contextWindowMismatch": "Permintaan melebihi jendela konteks penyedia" } } diff --git a/src/i18n/messages/in.json b/src/i18n/messages/in.json index 5c497dfd92..9783bb0829 100644 --- a/src/i18n/messages/in.json +++ b/src/i18n/messages/in.json @@ -13253,17 +13253,17 @@ "pollErrorLocalOnly": "Halaman ini hanya dapat diakses dari localhost atau LAN (LOCAL_ONLY).", "pollErrorStopped": "Polling dihentikan: server menolak permintaan (404/403).", "pollErrorTransient": "Kesalahan mengambil data: mencoba lagi secara otomatis.", - "degraded": "Data sebagian: sumber tidak tersedia: {sources}", - "degraded.source.database": "Basis Data", - "degraded.source.circuitBreaker": "Circuit Breaker", - "degraded.source.modelLockouts": "Penguncian Model", - "degraded.source.count": "Jumlah Koneksi" + "degraded": { + "message": "Data sebagian: sumber tidak tersedia: {sources}", + "source": { + "database": "Basis Data", + "circuitBreaker": "Circuit Breaker", + "modelLockouts": "Penguncian Model", + "count": "Jumlah Koneksi" + } + } }, "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.", - "capabilityFilter.visionMismatch": "Penyedia tidak mendukung visi untuk permintaan gambar ini", - "capabilityFilter.toolsMismatch": "Penyedia tidak mendukung pemanggilan alat", - "capabilityFilter.structuredOutputMismatch": "Penyedia tidak mendukung keluaran terstruktur", - "capabilityFilter.contextWindowMismatch": "Permintaan melebihi jendela konteks penyedia", "publicSystem": { "notFound": { "title": "Halaman tidak ditemukan", @@ -13676,5 +13676,11 @@ "noExpiry": "No announced expiry", "openOffer": "View offer", "trialDays": "{days, plural, one {# day} other {# days}}" + }, + "capabilityFilter": { + "visionMismatch": "Penyedia tidak mendukung visi untuk permintaan gambar ini", + "toolsMismatch": "Penyedia tidak mendukung pemanggilan alat", + "structuredOutputMismatch": "Penyedia tidak mendukung keluaran terstruktur", + "contextWindowMismatch": "Permintaan melebihi jendela konteks penyedia" } } diff --git a/src/i18n/messages/it.json b/src/i18n/messages/it.json index 0931c4b320..014eb7b761 100644 --- a/src/i18n/messages/it.json +++ b/src/i18n/messages/it.json @@ -13253,17 +13253,17 @@ "pollErrorLocalOnly": "Questa pagina è accessibile solo da localhost o LAN (LOCAL_ONLY).", "pollErrorStopped": "Sondaggio interrotto: il server ha rifiutato la richiesta (404/403).", "pollErrorTransient": "Errore nel recupero dei dati: nuovo tentativo automatico.", - "degraded": "Dati parziali: fonti non disponibili: {sources}", - "degraded.source.database": "Database", - "degraded.source.circuitBreaker": "Interruttore", - "degraded.source.modelLockouts": "Blocchi Modello", - "degraded.source.count": "Conteggio Connessioni" + "degraded": { + "message": "Dati parziali: fonti non disponibili: {sources}", + "source": { + "database": "Database", + "circuitBreaker": "Interruttore", + "modelLockouts": "Blocchi Modello", + "count": "Conteggio Connessioni" + } + } }, "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.", - "capabilityFilter.visionMismatch": "Il fornitore non supporta la visione per questa richiesta di immagine", - "capabilityFilter.toolsMismatch": "Il provider non supporta la chiamata degli strumenti", - "capabilityFilter.structuredOutputMismatch": "Il provider non supporta l'output strutturato", - "capabilityFilter.contextWindowMismatch": "La richiesta supera la finestra di contesto del fornitore", "publicSystem": { "notFound": { "title": "Pagina non trovata", @@ -13676,5 +13676,11 @@ "noExpiry": "No announced expiry", "openOffer": "View offer", "trialDays": "{days, plural, one {# day} other {# days}}" + }, + "capabilityFilter": { + "visionMismatch": "Il fornitore non supporta la visione per questa richiesta di immagine", + "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" } } diff --git a/src/i18n/messages/ja.json b/src/i18n/messages/ja.json index 9792761e34..78a8af3994 100644 --- a/src/i18n/messages/ja.json +++ b/src/i18n/messages/ja.json @@ -13253,17 +13253,17 @@ "pollErrorLocalOnly": "このページはlocalhostまたはLANからのみアクセス可能です(LOCAL_ONLY)。", "pollErrorStopped": "ポーリング停止:サーバーがリクエストを拒否しました(404/403)。", "pollErrorTransient": "データ取得エラー:自動的に再試行します。", - "degraded": "部分データ:利用できないソース: {sources}", - "degraded.source.database": "データベース", - "degraded.source.circuitBreaker": "サーキットブレーカー", - "degraded.source.modelLockouts": "モデルロックアウト", - "degraded.source.count": "接続数" + "degraded": { + "message": "部分データ:利用できないソース: {sources}", + "source": { + "database": "データベース", + "circuitBreaker": "サーキットブレーカー", + "modelLockouts": "モデルロックアウト", + "count": "接続数" + } + } }, "featureFlagCapabilityFilterEnabledDescription": "ディスパッチ前にリクエストを拒否します。ターゲットモデルに必要な機能(ビジョン、ツール、構造化出力、コンテキストウィンドウ)が欠けている場合。コンボレイヤーの互換性フィルターをバイパスする直接の単一プロバイダーリクエストを保護します。", - "capabilityFilter.visionMismatch": "プロバイダーはこの画像リクエストのビジョンをサポートしていません", - "capabilityFilter.toolsMismatch": "プロバイダーはツール呼び出しをサポートしていません", - "capabilityFilter.structuredOutputMismatch": "プロバイダーは構造化出力をサポートしていません", - "capabilityFilter.contextWindowMismatch": "リクエストがプロバイダーのコンテキストウィンドウを超えています", "publicSystem": { "notFound": { "title": "ページが見つかりません", @@ -13676,5 +13676,11 @@ "noExpiry": "有効期限の記載なし", "openOffer": "オファーを見る", "trialDays": "{days} 日間" + }, + "capabilityFilter": { + "visionMismatch": "プロバイダーはこの画像リクエストのビジョンをサポートしていません", + "toolsMismatch": "プロバイダーはツール呼び出しをサポートしていません", + "structuredOutputMismatch": "プロバイダーは構造化出力をサポートしていません", + "contextWindowMismatch": "リクエストがプロバイダーのコンテキストウィンドウを超えています" } } diff --git a/src/i18n/messages/ko.json b/src/i18n/messages/ko.json index 793625c913..dff8af71a8 100644 --- a/src/i18n/messages/ko.json +++ b/src/i18n/messages/ko.json @@ -13253,17 +13253,17 @@ "pollErrorLocalOnly": "이 페이지는 localhost 또는 LAN에서만 접근 가능합니다(LOCAL_ONLY).", "pollErrorStopped": "폴링 중지됨: 서버가 요청을 거부했습니다(404/403).", "pollErrorTransient": "데이터 가져오기 오류: 자동으로 재시도합니다.", - "degraded": "부분 데이터: 사용할 수 없는 소스: {sources}", - "degraded.source.database": "데이터베이스", - "degraded.source.circuitBreaker": "회로 차단기", - "degraded.source.modelLockouts": "모델 잠금", - "degraded.source.count": "연결 수" + "degraded": { + "message": "부분 데이터: 사용할 수 없는 소스: {sources}", + "source": { + "database": "데이터베이스", + "circuitBreaker": "회로 차단기", + "modelLockouts": "모델 잠금", + "count": "연결 수" + } + } }, "featureFlagCapabilityFilterEnabledDescription": "대상 모델에 필수 기능(비전, 도구, 구조화된 출력, 컨텍스트 창)이 부족할 경우 요청을 발송 전에 거부합니다. 콤보 레이어 호환성 필터를 우회하는 직접 단일 공급자 요청을 보호합니다.", - "capabilityFilter.visionMismatch": "제공자가 이 이미지 요청에 대한 비전을 지원하지 않습니다.", - "capabilityFilter.toolsMismatch": "공급자가 도구 호출을 지원하지 않습니다.", - "capabilityFilter.structuredOutputMismatch": "제공자가 구조화된 출력을 지원하지 않습니다", - "capabilityFilter.contextWindowMismatch": "요청이 공급자 컨텍스트 창을 초과했습니다", "publicSystem": { "notFound": { "title": "페이지를 찾을 수 없습니다", @@ -13676,5 +13676,11 @@ "noExpiry": "No announced expiry", "openOffer": "View offer", "trialDays": "{days, plural, one {# day} other {# days}}" + }, + "capabilityFilter": { + "visionMismatch": "제공자가 이 이미지 요청에 대한 비전을 지원하지 않습니다.", + "toolsMismatch": "공급자가 도구 호출을 지원하지 않습니다.", + "structuredOutputMismatch": "제공자가 구조화된 출력을 지원하지 않습니다", + "contextWindowMismatch": "요청이 공급자 컨텍스트 창을 초과했습니다" } } diff --git a/src/i18n/messages/mr.json b/src/i18n/messages/mr.json index a6e059c479..2d9af21884 100644 --- a/src/i18n/messages/mr.json +++ b/src/i18n/messages/mr.json @@ -13253,17 +13253,17 @@ "pollErrorLocalOnly": "हे पान फक्त localhost किंवा LAN वरून प्रवेशयोग्य आहे (LOCAL_ONLY).", "pollErrorStopped": "पोलिंग थांबले: सर्व्हरने विनंती नाकारली (404/403).", "pollErrorTransient": "डेटा आणण्यात त्रुटी: आपोआप पुन्हा प्रयत्न करत आहे.", - "degraded": "आंशिक डेटा: अनुपलब्ध स्रोत: {sources}", - "degraded.source.database": "डेटाबेस", - "degraded.source.circuitBreaker": "सर्किट ब्रेकर", - "degraded.source.modelLockouts": "मॉडेल लॉकआउट", - "degraded.source.count": "कनेक्शन संख्या" + "degraded": { + "message": "आंशिक डेटा: अनुपलब्ध स्रोत: {sources}", + "source": { + "database": "डेटाबेस", + "circuitBreaker": "सर्किट ब्रेकर", + "modelLockouts": "मॉडेल लॉकआउट", + "count": "कनेक्शन संख्या" + } + } }, "featureFlagCapabilityFilterEnabledDescription": "डिस्पॅच करण्यापूर्वी विनंत्या नाकारल्या जातात जेव्हा लक्ष्य मॉडेल आवश्यक क्षमतांचा अभाव असतो (दृष्टी, साधने, संरचित आउटपुट, संदर्भ विंडो). कॉम्बो-लेयर सुसंगतता फिल्टरला बायपास करणाऱ्या थेट एकल-प्रदात्याच्या विनंत्यांचे संरक्षण करते.", - "capabilityFilter.visionMismatch": "या प्रतिमेच्या विनंतीसाठी प्रदाता दृश्याचे समर्थन करत नाही", - "capabilityFilter.toolsMismatch": "प्रदायक साधन कॉलिंगला समर्थन करत नाही", - "capabilityFilter.structuredOutputMismatch": "प्रदायक संरचित आउटपुटला समर्थन करत नाही", - "capabilityFilter.contextWindowMismatch": "विनंती प्रदाता संदर्भ विंडो ओलांडते", "publicSystem": { "notFound": { "title": "पृष्ठ सापडले नाही", @@ -13676,5 +13676,11 @@ "noExpiry": "No announced expiry", "openOffer": "View offer", "trialDays": "{days, plural, one {# day} other {# days}}" + }, + "capabilityFilter": { + "visionMismatch": "या प्रतिमेच्या विनंतीसाठी प्रदाता दृश्याचे समर्थन करत नाही", + "toolsMismatch": "प्रदायक साधन कॉलिंगला समर्थन करत नाही", + "structuredOutputMismatch": "प्रदायक संरचित आउटपुटला समर्थन करत नाही", + "contextWindowMismatch": "विनंती प्रदाता संदर्भ विंडो ओलांडते" } } diff --git a/src/i18n/messages/ms.json b/src/i18n/messages/ms.json index 9036fb2de5..446dc78fa5 100644 --- a/src/i18n/messages/ms.json +++ b/src/i18n/messages/ms.json @@ -13253,17 +13253,17 @@ "pollErrorLocalOnly": "Halaman ini hanya boleh diakses dari localhost atau LAN (LOCAL_ONLY).", "pollErrorStopped": "Polling dihentikan: pelayan menolak permintaan (404/403).", "pollErrorTransient": "Ralat mengambil data: cuba semula secara automatik.", - "degraded": "Data separa: sumber tidak tersedia: {sources}", - "degraded.source.database": "Pangkalan Data", - "degraded.source.circuitBreaker": "Circuit Breaker", - "degraded.source.modelLockouts": "Penguncian Model", - "degraded.source.count": "Bilangan Sambungan" + "degraded": { + "message": "Data separa: sumber tidak tersedia: {sources}", + "source": { + "database": "Pangkalan Data", + "circuitBreaker": "Circuit Breaker", + "modelLockouts": "Penguncian Model", + "count": "Bilangan Sambungan" + } + } }, "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.", - "capabilityFilter.visionMismatch": "Penyedia tidak menyokong penglihatan untuk permintaan imej ini", - "capabilityFilter.toolsMismatch": "Penyedia tidak menyokong panggilan alat", - "capabilityFilter.structuredOutputMismatch": "Penyedia tidak menyokong output berstruktur", - "capabilityFilter.contextWindowMismatch": "Permintaan melebihi tetingkap konteks penyedia", "publicSystem": { "notFound": { "title": "Halaman tidak ditemui", @@ -13676,5 +13676,11 @@ "noExpiry": "No announced expiry", "openOffer": "View offer", "trialDays": "{days, plural, one {# day} other {# days}}" + }, + "capabilityFilter": { + "visionMismatch": "Penyedia tidak menyokong penglihatan untuk permintaan imej ini", + "toolsMismatch": "Penyedia tidak menyokong panggilan alat", + "structuredOutputMismatch": "Penyedia tidak menyokong output berstruktur", + "contextWindowMismatch": "Permintaan melebihi tetingkap konteks penyedia" } } diff --git a/src/i18n/messages/nl.json b/src/i18n/messages/nl.json index 3e775c3914..ae5376ed9d 100644 --- a/src/i18n/messages/nl.json +++ b/src/i18n/messages/nl.json @@ -13253,17 +13253,17 @@ "pollErrorLocalOnly": "Deze pagina is alleen toegankelijk vanaf localhost of LAN (LOCAL_ONLY).", "pollErrorStopped": "Polling gestopt: de server heeft het verzoek geweigerd (404/403).", "pollErrorTransient": "Fout bij ophalen van gegevens: automatisch opnieuw proberen.", - "degraded": "Gedeeltelijke gegevens: niet-beschikbare bronnen: {sources}", - "degraded.source.database": "Database", - "degraded.source.circuitBreaker": "Circuit Breaker", - "degraded.source.modelLockouts": "Modelvergrendelingen", - "degraded.source.count": "Aantal Verbindingen" + "degraded": { + "message": "Gedeeltelijke gegevens: niet-beschikbare bronnen: {sources}", + "source": { + "database": "Database", + "circuitBreaker": "Circuit Breaker", + "modelLockouts": "Modelvergrendelingen", + "count": "Aantal Verbindingen" + } + } }, "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.", - "capabilityFilter.visionMismatch": "Provider ondersteunt geen visie voor dit afbeeldingsverzoek", - "capabilityFilter.toolsMismatch": "Provider ondersteunt het aanroepen van tools niet", - "capabilityFilter.structuredOutputMismatch": "Provider ondersteunt geen gestructureerde uitvoer", - "capabilityFilter.contextWindowMismatch": "Verzoek overschrijdt de contextvenster van de provider", "publicSystem": { "notFound": { "title": "Pagina niet gevonden", @@ -13676,5 +13676,11 @@ "noExpiry": "No announced expiry", "openOffer": "View offer", "trialDays": "{days, plural, one {# day} other {# days}}" + }, + "capabilityFilter": { + "visionMismatch": "Provider ondersteunt geen visie voor dit afbeeldingsverzoek", + "toolsMismatch": "Provider ondersteunt het aanroepen van tools niet", + "structuredOutputMismatch": "Provider ondersteunt geen gestructureerde uitvoer", + "contextWindowMismatch": "Verzoek overschrijdt de contextvenster van de provider" } } diff --git a/src/i18n/messages/no.json b/src/i18n/messages/no.json index e839e8b264..eaae3e602e 100644 --- a/src/i18n/messages/no.json +++ b/src/i18n/messages/no.json @@ -13253,17 +13253,17 @@ "pollErrorLocalOnly": "Denne siden er kun tilgjengelig fra localhost eller LAN (LOCAL_ONLY).", "pollErrorStopped": "Polling stoppet: serveren avviste forespørselen (404/403).", "pollErrorTransient": "Feil ved henting av data: prøver automatisk igjen.", - "degraded": "Delvise data: utilgjengelige kilder: {sources}", - "degraded.source.database": "Database", - "degraded.source.circuitBreaker": "Kretsbryter", - "degraded.source.modelLockouts": "Modelllåsinger", - "degraded.source.count": "Antall Tilkoblinger" + "degraded": { + "message": "Delvise data: utilgjengelige kilder: {sources}", + "source": { + "database": "Database", + "circuitBreaker": "Kretsbryter", + "modelLockouts": "Modelllåsinger", + "count": "Antall Tilkoblinger" + } + } }, "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.", - "capabilityFilter.visionMismatch": "Leverandøren støtter ikke visjon for denne bildeforespørselen", - "capabilityFilter.toolsMismatch": "Leverandøren støtter ikke verktøykall.", - "capabilityFilter.structuredOutputMismatch": "Leverandøren støtter ikke strukturert utdata", - "capabilityFilter.contextWindowMismatch": "Forespørselen overskrider leverandørens kontekstvindu", "publicSystem": { "notFound": { "title": "Siden ble ikke funnet", @@ -13676,5 +13676,11 @@ "noExpiry": "No announced expiry", "openOffer": "View offer", "trialDays": "{days, plural, one {# day} other {# days}}" + }, + "capabilityFilter": { + "visionMismatch": "Leverandøren støtter ikke visjon for denne bildeforespørselen", + "toolsMismatch": "Leverandøren støtter ikke verktøykall.", + "structuredOutputMismatch": "Leverandøren støtter ikke strukturert utdata", + "contextWindowMismatch": "Forespørselen overskrider leverandørens kontekstvindu" } } diff --git a/src/i18n/messages/phi.json b/src/i18n/messages/phi.json index b8e60dbeda..8d8815e12c 100644 --- a/src/i18n/messages/phi.json +++ b/src/i18n/messages/phi.json @@ -13253,17 +13253,17 @@ "pollErrorLocalOnly": "Ang pahinang ito ay maa-access lamang mula sa localhost o LAN (LOCAL_ONLY).", "pollErrorStopped": "Huminto ang polling: tinanggihan ng server ang kahilingan (404/403).", "pollErrorTransient": "Error sa pagkuha ng data: awtomatikong sinusubukan muli.", - "degraded": "Bahagyang data: hindi available na pinagmulan: {sources}", - "degraded.source.database": "Database", - "degraded.source.circuitBreaker": "Circuit Breaker", - "degraded.source.modelLockouts": "Mga Lockout ng Modelo", - "degraded.source.count": "Bilang ng Koneksyon" + "degraded": { + "message": "Bahagyang data: hindi available na pinagmulan: {sources}", + "source": { + "database": "Database", + "circuitBreaker": "Circuit Breaker", + "modelLockouts": "Mga Lockout ng Modelo", + "count": "Bilang ng Koneksyon" + } + } }, "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.", - "capabilityFilter.visionMismatch": "Hindi sinusuportahan ng provider ang vision para sa kahilingang ito ng larawan", - "capabilityFilter.toolsMismatch": "Hindi sinusuportahan ng provider ang pagtawag sa tool", - "capabilityFilter.structuredOutputMismatch": "Hindi sinusuportahan ng provider ang nakabalangkas na output", - "capabilityFilter.contextWindowMismatch": "Lumampas ang kahilingan sa konteksto ng tagapagbigay", "publicSystem": { "notFound": { "title": "Hindi matagpuan ang pahina", @@ -13676,5 +13676,11 @@ "noExpiry": "No announced expiry", "openOffer": "View offer", "trialDays": "{days, plural, one {# day} other {# days}}" + }, + "capabilityFilter": { + "visionMismatch": "Hindi sinusuportahan ng provider ang vision para sa kahilingang ito ng larawan", + "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" } } diff --git a/src/i18n/messages/pl.json b/src/i18n/messages/pl.json index feb232be1b..e520ecafe7 100644 --- a/src/i18n/messages/pl.json +++ b/src/i18n/messages/pl.json @@ -13253,17 +13253,17 @@ "pollErrorLocalOnly": "Ta strona jest dostępna tylko z localhost lub LAN (LOCAL_ONLY).", "pollErrorStopped": "Odpytywanie zatrzymane: serwer odrzucił żądanie (404/403).", "pollErrorTransient": "Błąd pobierania danych: automatyczne ponowienie.", - "degraded": "Dane częściowe: niedostępne źródła: {sources}", - "degraded.source.database": "Baza Danych", - "degraded.source.circuitBreaker": "Wyłącznik", - "degraded.source.modelLockouts": "Blokady Modelu", - "degraded.source.count": "Liczba Połączeń" + "degraded": { + "message": "Dane częściowe: niedostępne źródła: {sources}", + "source": { + "database": "Baza Danych", + "circuitBreaker": "Wyłącznik", + "modelLockouts": "Blokady Modelu", + "count": "Liczba Połączeń" + } + } }, "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.", - "capabilityFilter.visionMismatch": "Dostawca nie obsługuje wizji dla tego żądania obrazu", - "capabilityFilter.toolsMismatch": "Dostawca nie obsługuje wywoływania narzędzi", - "capabilityFilter.structuredOutputMismatch": "Dostawca nie obsługuje strukturalnego wyjścia", - "capabilityFilter.contextWindowMismatch": "Żądanie przekracza okno kontekstu dostawcy", "publicSystem": { "notFound": { "title": "Nie znaleziono strony", @@ -13676,5 +13676,11 @@ "noExpiry": "No announced expiry", "openOffer": "View offer", "trialDays": "{days, plural, one {# day} other {# days}}" + }, + "capabilityFilter": { + "visionMismatch": "Dostawca nie obsługuje wizji dla tego żądania obrazu", + "toolsMismatch": "Dostawca nie obsługuje wywoływania narzędzi", + "structuredOutputMismatch": "Dostawca nie obsługuje strukturalnego wyjścia", + "contextWindowMismatch": "Żądanie przekracza okno kontekstu dostawcy" } } diff --git a/src/i18n/messages/pt-BR.json b/src/i18n/messages/pt-BR.json index 290f699a4d..1959a617ae 100644 --- a/src/i18n/messages/pt-BR.json +++ b/src/i18n/messages/pt-BR.json @@ -13278,17 +13278,17 @@ "pollErrorLocalOnly": "Esta página só é acessível a partir de localhost ou LAN (LOCAL_ONLY).", "pollErrorStopped": "Sondagem interrompida: o servidor rejeitou a requisição (404/403).", "pollErrorTransient": "Erro ao buscar dados: repetindo automaticamente.", - "degraded": "Dados parciais: fontes indisponíveis: {sources}", - "degraded.source.database": "Banco de Dados", - "degraded.source.circuitBreaker": "Disjuntor", - "degraded.source.modelLockouts": "Bloqueios de Modelo", - "degraded.source.count": "Contagem de Conexões" + "degraded": { + "message": "Dados parciais: fontes indisponíveis: {sources}", + "source": { + "database": "Banco de Dados", + "circuitBreaker": "Disjuntor", + "modelLockouts": "Bloqueios de Modelo", + "count": "Contagem de Conexões" + } + } }, "featureFlagCapabilityFilterEnabledDescription": "Rejeitar requisições antes do despacho quando o modelo alvo nao possui as capacidades necessarias (visao, ferramentas, saída estruturada, janela de contexto). Protege requisições diretas que ignoram o filtro de compatibilidade do combo.", - "capabilityFilter.visionMismatch": "O provedor nao suporta visao para esta requisicao de imagem", - "capabilityFilter.toolsMismatch": "O provedor nao suporta chamada de ferramentas", - "capabilityFilter.structuredOutputMismatch": "O provedor nao suporta saida estruturada", - "capabilityFilter.contextWindowMismatch": "A requisicao excede a janela de contexto do provedor", "publicSystem": { "notFound": { "title": "Página não encontrada", @@ -13717,5 +13717,11 @@ "stable": "Estável", "shrinking": "Diminuindo" } + }, + "capabilityFilter": { + "visionMismatch": "O provedor nao suporta visao para esta requisicao de imagem", + "toolsMismatch": "O provedor nao suporta chamada de ferramentas", + "structuredOutputMismatch": "O provedor nao suporta saida estruturada", + "contextWindowMismatch": "A requisicao excede a janela de contexto do provedor" } } diff --git a/src/i18n/messages/pt.json b/src/i18n/messages/pt.json index d5ca78b425..b89d09e6ed 100644 --- a/src/i18n/messages/pt.json +++ b/src/i18n/messages/pt.json @@ -13260,17 +13260,9 @@ "modelLockouts": "Bloqueios de Modelo", "count": "Contagem de Ligações" } - }, - "degraded.source.database": "Database", - "degraded.source.circuitBreaker": "Circuit Breaker", - "degraded.source.modelLockouts": "Model Lockouts", - "degraded.source.count": "Connection Count" + } }, "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.", - "capabilityFilter.visionMismatch": "Provider does not support vision for this image request", - "capabilityFilter.toolsMismatch": "Provider does not support tool calling", - "capabilityFilter.structuredOutputMismatch": "Provider does not support structured output", - "capabilityFilter.contextWindowMismatch": "Request exceeds provider context window", "publicSystem": { "notFound": { "title": "Página não encontrada", @@ -13683,5 +13675,11 @@ "noExpiry": "Sem validade anunciada", "openOffer": "Ver oferta", "trialDays": "{days, plural, one {# dia} other {# dias}}" + }, + "capabilityFilter": { + "visionMismatch": "Provider does not support vision for this image request", + "toolsMismatch": "Provider does not support tool calling", + "structuredOutputMismatch": "Provider does not support structured output", + "contextWindowMismatch": "Request exceeds provider context window" } } diff --git a/src/i18n/messages/ro.json b/src/i18n/messages/ro.json index 2544431d99..8f9b3d874e 100644 --- a/src/i18n/messages/ro.json +++ b/src/i18n/messages/ro.json @@ -13253,17 +13253,17 @@ "pollErrorLocalOnly": "Această pagină este accesibilă doar din localhost sau LAN (LOCAL_ONLY).", "pollErrorStopped": "Interogare oprită: serverul a respins cererea (404/403).", "pollErrorTransient": "Eroare la preluarea datelor: reîncercare automată.", - "degraded": "Date parțiale: surse indisponibile: {sources}", - "degraded.source.database": "Bază de Date", - "degraded.source.circuitBreaker": "Întrerupător de Circuit", - "degraded.source.modelLockouts": "Blocaje Model", - "degraded.source.count": "Număr de Conexiuni" + "degraded": { + "message": "Date parțiale: surse indisponibile: {sources}", + "source": { + "database": "Bază de Date", + "circuitBreaker": "Întrerupător de Circuit", + "modelLockouts": "Blocaje Model", + "count": "Număr de Conexiuni" + } + } }, "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.", - "capabilityFilter.visionMismatch": "Furnizorul nu suportă viziunea pentru această cerere de imagine", - "capabilityFilter.toolsMismatch": "Furnizorul nu suportă apelarea instrumentului", - "capabilityFilter.structuredOutputMismatch": "Furnizorul nu suportă ieșirea structurată", - "capabilityFilter.contextWindowMismatch": "Cererea depășește fereastra de context a furnizorului", "publicSystem": { "notFound": { "title": "Pagina nu a fost găsită", @@ -13676,5 +13676,11 @@ "noExpiry": "No announced expiry", "openOffer": "View offer", "trialDays": "{days, plural, one {# day} other {# days}}" + }, + "capabilityFilter": { + "visionMismatch": "Furnizorul nu suportă viziunea pentru această cerere de imagine", + "toolsMismatch": "Furnizorul nu suportă apelarea instrumentului", + "structuredOutputMismatch": "Furnizorul nu suportă ieșirea structurată", + "contextWindowMismatch": "Cererea depășește fereastra de context a furnizorului" } } diff --git a/src/i18n/messages/ru.json b/src/i18n/messages/ru.json index bff342a65a..0af64de4ef 100644 --- a/src/i18n/messages/ru.json +++ b/src/i18n/messages/ru.json @@ -13253,17 +13253,17 @@ "pollErrorLocalOnly": "Эта страница доступна только с localhost или LAN (LOCAL_ONLY).", "pollErrorStopped": "Опрос остановлен: сервер отклонил запрос (404/403).", "pollErrorTransient": "Ошибка получения данных: автоматический повтор.", - "degraded": "Частичные данные: недоступные источники: {sources}", - "degraded.source.database": "База Данных", - "degraded.source.circuitBreaker": "Автомат Защиты", - "degraded.source.modelLockouts": "Блокировки Модели", - "degraded.source.count": "Количество Соединений" + "degraded": { + "message": "Частичные данные: недоступные источники: {sources}", + "source": { + "database": "База Данных", + "circuitBreaker": "Автомат Защиты", + "modelLockouts": "Блокировки Модели", + "count": "Количество Соединений" + } + } }, "featureFlagCapabilityFilterEnabledDescription": "Отклонять запросы перед отправкой, когда целевая модель не имеет необходимых возможностей (визуализация, инструменты, структурированный вывод, контекстное окно). Защищает прямые запросы от единственного поставщика, которые обходят фильтр совместимости комбинированного слоя.", - "capabilityFilter.visionMismatch": "Поставщик не поддерживает визуализацию для этого запроса изображения", - "capabilityFilter.toolsMismatch": "Провайдер не поддерживает вызов инструмента", - "capabilityFilter.structuredOutputMismatch": "Поставщик не поддерживает структурированный вывод", - "capabilityFilter.contextWindowMismatch": "Запрос превышает контекстное окно провайдера", "publicSystem": { "notFound": { "title": "Страница не найдена", @@ -13676,5 +13676,11 @@ "noExpiry": "No announced expiry", "openOffer": "View offer", "trialDays": "{days, plural, one {# day} other {# days}}" + }, + "capabilityFilter": { + "visionMismatch": "Поставщик не поддерживает визуализацию для этого запроса изображения", + "toolsMismatch": "Провайдер не поддерживает вызов инструмента", + "structuredOutputMismatch": "Поставщик не поддерживает структурированный вывод", + "contextWindowMismatch": "Запрос превышает контекстное окно провайдера" } } diff --git a/src/i18n/messages/sk.json b/src/i18n/messages/sk.json index 333ba6d1f7..fc330663cb 100644 --- a/src/i18n/messages/sk.json +++ b/src/i18n/messages/sk.json @@ -13253,17 +13253,17 @@ "pollErrorLocalOnly": "Táto stránka je prístupná iba z localhost alebo LAN (LOCAL_ONLY).", "pollErrorStopped": "Dopytovanie zastavené: server odmietol požiadavku (404/403).", "pollErrorTransient": "Chyba pri načítaní dát: automatické opakovanie.", - "degraded": "Čiastočné dáta: nedostupné zdroje: {sources}", - "degraded.source.database": "Databáza", - "degraded.source.circuitBreaker": "Istič", - "degraded.source.modelLockouts": "Uzamknutia Modelu", - "degraded.source.count": "Počet Pripojení" + "degraded": { + "message": "Čiastočné dáta: nedostupné zdroje: {sources}", + "source": { + "database": "Databáza", + "circuitBreaker": "Istič", + "modelLockouts": "Uzamknutia Modelu", + "count": "Počet Pripojení" + } + } }, "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.", - "capabilityFilter.visionMismatch": "Poskytovateľ nepodporuje víziu pre tento požiadavku na obrázok", - "capabilityFilter.toolsMismatch": "Poskytovateľ nepodporuje volanie nástroja", - "capabilityFilter.structuredOutputMismatch": "Poskytovateľ nepodporuje štruktúrovaný výstup", - "capabilityFilter.contextWindowMismatch": "Žiadosť presahuje kontextové okno poskytovateľa", "publicSystem": { "notFound": { "title": "Stránka nenájdená", @@ -13676,5 +13676,11 @@ "noExpiry": "No announced expiry", "openOffer": "View offer", "trialDays": "{days, plural, one {# day} other {# days}}" + }, + "capabilityFilter": { + "visionMismatch": "Poskytovateľ nepodporuje víziu pre tento požiadavku na obrázok", + "toolsMismatch": "Poskytovateľ nepodporuje volanie nástroja", + "structuredOutputMismatch": "Poskytovateľ nepodporuje štruktúrovaný výstup", + "contextWindowMismatch": "Žiadosť presahuje kontextové okno poskytovateľa" } } diff --git a/src/i18n/messages/sv.json b/src/i18n/messages/sv.json index a3bab5b1a7..da2ee3680a 100644 --- a/src/i18n/messages/sv.json +++ b/src/i18n/messages/sv.json @@ -13253,17 +13253,17 @@ "pollErrorLocalOnly": "Denna sida är endast åtkomlig från localhost eller LAN (LOCAL_ONLY).", "pollErrorStopped": "Pollning stoppad: servern avvisade förfrågan (404/403).", "pollErrorTransient": "Fel vid hämtning av data: försöker automatiskt igen.", - "degraded": "Partiell data: otillgängliga källor: {sources}", - "degraded.source.database": "Databas", - "degraded.source.circuitBreaker": "Kretsbrytare", - "degraded.source.modelLockouts": "Modellåsningar", - "degraded.source.count": "Antal Anslutningar" + "degraded": { + "message": "Partiell data: otillgängliga källor: {sources}", + "source": { + "database": "Databas", + "circuitBreaker": "Kretsbrytare", + "modelLockouts": "Modellåsningar", + "count": "Antal Anslutningar" + } + } }, "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.", - "capabilityFilter.visionMismatch": "Leverantören stöder inte vision för denna bildförfrågan", - "capabilityFilter.toolsMismatch": "Leverantören stöder inte verktygsanrop.", - "capabilityFilter.structuredOutputMismatch": "Leverantören stöder inte strukturerad utdata", - "capabilityFilter.contextWindowMismatch": "Begäran överskrider leverantörens kontextfönster", "publicSystem": { "notFound": { "title": "Sidan kunde inte hittas", @@ -13676,5 +13676,11 @@ "noExpiry": "No announced expiry", "openOffer": "View offer", "trialDays": "{days, plural, one {# day} other {# days}}" + }, + "capabilityFilter": { + "visionMismatch": "Leverantören stöder inte vision för denna bildförfrågan", + "toolsMismatch": "Leverantören stöder inte verktygsanrop.", + "structuredOutputMismatch": "Leverantören stöder inte strukturerad utdata", + "contextWindowMismatch": "Begäran överskrider leverantörens kontextfönster" } } diff --git a/src/i18n/messages/sw.json b/src/i18n/messages/sw.json index 4d7dd18138..b14a3ff73a 100644 --- a/src/i18n/messages/sw.json +++ b/src/i18n/messages/sw.json @@ -13253,17 +13253,17 @@ "pollErrorLocalOnly": "Ukurasa huu unafikiwa tu kutoka localhost au LAN (LOCAL_ONLY).", "pollErrorStopped": "Uchunguzi umesimamishwa: seva ilikataa ombi (404/403).", "pollErrorTransient": "Hitilafu katika kupata data: inajaribu tena kiotomatiki.", - "degraded": "Data isiyokamilika: vyanzo visivyopatikana: {sources}", - "degraded.source.database": "Hifadhidata", - "degraded.source.circuitBreaker": "Kivunja Mzunguko", - "degraded.source.modelLockouts": "Kufuli za Mfano", - "degraded.source.count": "Idadi ya Miunganisho" + "degraded": { + "message": "Data isiyokamilika: vyanzo visivyopatikana: {sources}", + "source": { + "database": "Hifadhidata", + "circuitBreaker": "Kivunja Mzunguko", + "modelLockouts": "Kufuli za Mfano", + "count": "Idadi ya Miunganisho" + } + } }, "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.", - "capabilityFilter.visionMismatch": "Mtoa huduma haitoi msaada wa kuona kwa ombi hili la picha", - "capabilityFilter.toolsMismatch": "Mtoa huduma haitoi msaada wa kuita zana", - "capabilityFilter.structuredOutputMismatch": "Mtoa huduma haitoi matokeo yaliyoandikwa kwa muundo", - "capabilityFilter.contextWindowMismatch": "Omba inazidi dirisha la muktadha wa mtoa huduma", "publicSystem": { "notFound": { "title": "Ukurasa haukupatikana", @@ -13676,5 +13676,11 @@ "noExpiry": "No announced expiry", "openOffer": "View offer", "trialDays": "{days, plural, one {# day} other {# days}}" + }, + "capabilityFilter": { + "visionMismatch": "Mtoa huduma haitoi msaada wa kuona kwa ombi hili la picha", + "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" } } diff --git a/src/i18n/messages/ta.json b/src/i18n/messages/ta.json index 518d7a087c..7ce8672eac 100644 --- a/src/i18n/messages/ta.json +++ b/src/i18n/messages/ta.json @@ -13253,17 +13253,17 @@ "pollErrorLocalOnly": "இந்தப் பக்கம் localhost அல்லது LAN இலிருந்து மட்டுமே அணுகக்கூடியது (LOCAL_ONLY).", "pollErrorStopped": "வாக்கெடுப்பு நிறுத்தப்பட்டது: சேவையகம் கோரிக்கையை நிராகரித்தது (404/403).", "pollErrorTransient": "தரவைப் பெறுவதில் பிழை: தானாக மீண்டும் முயற்சிக்கிறது.", - "degraded": "பகுதி தரவு: கிடைக்காத மூலங்கள்: {sources}", - "degraded.source.database": "தரவுத்தளம்", - "degraded.source.circuitBreaker": "சுற்று பிரேக்கர்", - "degraded.source.modelLockouts": "மாதிரி பூட்டுகள்", - "degraded.source.count": "இணைப்புகளின் எண்ணிக்கை" + "degraded": { + "message": "பகுதி தரவு: கிடைக்காத மூலங்கள்: {sources}", + "source": { + "database": "தரவுத்தளம்", + "circuitBreaker": "சுற்று பிரேக்கர்", + "modelLockouts": "மாதிரி பூட்டுகள்", + "count": "இணைப்புகளின் எண்ணிக்கை" + } + } }, "featureFlagCapabilityFilterEnabledDescription": "விருப்பமான மாதிரி தேவையான திறன்களை (காணல், கருவிகள், கட்டமைக்கப்பட்ட வெளியீடு, சூழல் ஜன்னல்) இன்றி இருந்தால், அனுப்புவதற்கு முன் கோரிக்கைகளை நிராகரிக்கவும். கம்போ-லேயர் ஒத்திசைவு வடிகட்டியை தவிர்க்கும் நேரடி ஒற்றை வழங்குநர் கோரிக்கைகளை பாதுகாக்கிறது.", - "capabilityFilter.visionMismatch": "இந்த படக் கோரிக்கைக்கு வழங்குநர் கண்ணோட்டத்தை ஆதரிக்கவில்லை", - "capabilityFilter.toolsMismatch": "சேவையாளர் கருவி அழைப்பை ஆதரிக்கவில்லை", - "capabilityFilter.structuredOutputMismatch": "சேவையாளர் கட்டமைக்கப்பட்ட வெளியீட்டை ஆதரிக்கவில்லை", - "capabilityFilter.contextWindowMismatch": "விண்ணப்பம் வழங்குநர் சூழல் ஜன்னலை மீறுகிறது", "publicSystem": { "notFound": { "title": "பக்கம் கிடைக்கவில்லை", @@ -13676,5 +13676,11 @@ "noExpiry": "No announced expiry", "openOffer": "View offer", "trialDays": "{days, plural, one {# day} other {# days}}" + }, + "capabilityFilter": { + "visionMismatch": "இந்த படக் கோரிக்கைக்கு வழங்குநர் கண்ணோட்டத்தை ஆதரிக்கவில்லை", + "toolsMismatch": "சேவையாளர் கருவி அழைப்பை ஆதரிக்கவில்லை", + "structuredOutputMismatch": "சேவையாளர் கட்டமைக்கப்பட்ட வெளியீட்டை ஆதரிக்கவில்லை", + "contextWindowMismatch": "விண்ணப்பம் வழங்குநர் சூழல் ஜன்னலை மீறுகிறது" } } diff --git a/src/i18n/messages/te.json b/src/i18n/messages/te.json index 035f4ed751..4bc4a50c71 100644 --- a/src/i18n/messages/te.json +++ b/src/i18n/messages/te.json @@ -13253,17 +13253,17 @@ "pollErrorLocalOnly": "ఈ పేజీ localhost లేదా LAN నుండి మాత్రమే యాక్సెస్ చేయబడుతుంది (LOCAL_ONLY).", "pollErrorStopped": "పోలింగ్ ఆగింది: సర్వర్ అభ్యర్థనను తిరస్కరించింది (404/403).", "pollErrorTransient": "డేటాను పొందడంలో లోపం: స్వయంచాలకంగా మళ్లీ ప్రయత్నిస్తోంది.", - "degraded": "పాక్షిక డేటా: అందుబాటులో లేని మూలాలు: {sources}", - "degraded.source.database": "డేటాబేస్", - "degraded.source.circuitBreaker": "సర్క్యూట్ బ్రేకర్", - "degraded.source.modelLockouts": "మోడల్ లాక్‌అవుట్‌లు", - "degraded.source.count": "కనెక్షన్ల సంఖ్య" + "degraded": { + "message": "పాక్షిక డేటా: అందుబాటులో లేని మూలాలు: {sources}", + "source": { + "database": "డేటాబేస్", + "circuitBreaker": "సర్క్యూట్ బ్రేకర్", + "modelLockouts": "మోడల్ లాక్‌అవుట్‌లు", + "count": "కనెక్షన్ల సంఖ్య" + } + } }, "featureFlagCapabilityFilterEnabledDescription": "ప్రయోజనాలు అవసరమైన సామర్థ్యాలు (దృష్టి, సాధనాలు, నిర్మిత అవుట్‌పుట్, సందర్భం విండో) లేని లక్ష్య మోడల్ ముందు పంపిణీకి అభ్యర్థనలను తిరస్కరించండి. కాంబో-లేయర్ అనుకూలత ఫిల్టర్‌ను దాటించే ప్రత్యక్ష సింగిల్-ప్రొవైడర్ అభ్యర్థనలను రక్షిస్తుంది.", - "capabilityFilter.visionMismatch": "ఈ చిత్రం అభ్యర్థనకు ప్రొవైడర్ దృష్టిని మద్దతు ఇవ్వడం లేదు", - "capabilityFilter.toolsMismatch": "ప్రొవైడర్ టూల్ కాలింగ్‌ను మద్దతు ఇవ్వదు", - "capabilityFilter.structuredOutputMismatch": "ప్రొవైడర్ నిర్మిత అవుట్‌పుట్‌ను మద్దతు ఇవ్వదు", - "capabilityFilter.contextWindowMismatch": "అనువర్తన ప్రదాత యొక్క సందర్భం కిటికీని మించు కోరింపు", "publicSystem": { "notFound": { "title": "పేజీ కనుగొనబడలేదు", @@ -13676,5 +13676,11 @@ "noExpiry": "No announced expiry", "openOffer": "View offer", "trialDays": "{days, plural, one {# day} other {# days}}" + }, + "capabilityFilter": { + "visionMismatch": "ఈ చిత్రం అభ్యర్థనకు ప్రొవైడర్ దృష్టిని మద్దతు ఇవ్వడం లేదు", + "toolsMismatch": "ప్రొవైడర్ టూల్ కాలింగ్‌ను మద్దతు ఇవ్వదు", + "structuredOutputMismatch": "ప్రొవైడర్ నిర్మిత అవుట్‌పుట్‌ను మద్దతు ఇవ్వదు", + "contextWindowMismatch": "అనువర్తన ప్రదాత యొక్క సందర్భం కిటికీని మించు కోరింపు" } } diff --git a/src/i18n/messages/th.json b/src/i18n/messages/th.json index 12a29efdf4..79ae61eecd 100644 --- a/src/i18n/messages/th.json +++ b/src/i18n/messages/th.json @@ -13253,17 +13253,17 @@ "pollErrorLocalOnly": "หน้านี้เข้าถึงได้เฉพาะจาก localhost หรือ LAN เท่านั้น (LOCAL_ONLY)", "pollErrorStopped": "หยุดการสำรวจ: เซิร์ฟเวอร์ปฏิเสธคำขอ (404/403)", "pollErrorTransient": "เกิดข้อผิดพลาดในการดึงข้อมูล: กำลังลองใหม่โดยอัตโนมัติ", - "degraded": "ข้อมูลบางส่วน: แหล่งข้อมูลที่ไม่พร้อมใช้งาน: {sources}", - "degraded.source.database": "ฐานข้อมูล", - "degraded.source.circuitBreaker": "เซอร์กิตเบรกเกอร์", - "degraded.source.modelLockouts": "การล็อกเอาต์โมเดล", - "degraded.source.count": "จำนวนการเชื่อมต่อ" + "degraded": { + "message": "ข้อมูลบางส่วน: แหล่งข้อมูลที่ไม่พร้อมใช้งาน: {sources}", + "source": { + "database": "ฐานข้อมูล", + "circuitBreaker": "เซอร์กิตเบรกเกอร์", + "modelLockouts": "การล็อกเอาต์โมเดล", + "count": "จำนวนการเชื่อมต่อ" + } + } }, "featureFlagCapabilityFilterEnabledDescription": "ปฏิเสธคำขอก่อนการส่งเมื่อโมเดลเป้าหมายขาดความสามารถที่จำเป็น (วิสัยทัศน์, เครื่องมือ, ผลลัพธ์ที่มีโครงสร้าง, หน้าต่างบริบท) ป้องกันคำขอจากผู้ให้บริการเดียวที่ข้ามตัวกรองความเข้ากันได้ของเลเยอร์รวม", - "capabilityFilter.visionMismatch": "ผู้ให้บริการไม่รองรับการมองเห็นสำหรับคำขอภาพนี้", - "capabilityFilter.toolsMismatch": "ผู้ให้บริการไม่รองรับการเรียกเครื่องมือ", - "capabilityFilter.structuredOutputMismatch": "ผู้ให้บริการไม่รองรับการส่งออกแบบมีโครงสร้าง", - "capabilityFilter.contextWindowMismatch": "คำขอเกินขอบเขตบริบทของผู้ให้บริการ", "publicSystem": { "notFound": { "title": "ไม่พบหน้า", @@ -13676,5 +13676,11 @@ "noExpiry": "No announced expiry", "openOffer": "View offer", "trialDays": "{days, plural, one {# day} other {# days}}" + }, + "capabilityFilter": { + "visionMismatch": "ผู้ให้บริการไม่รองรับการมองเห็นสำหรับคำขอภาพนี้", + "toolsMismatch": "ผู้ให้บริการไม่รองรับการเรียกเครื่องมือ", + "structuredOutputMismatch": "ผู้ให้บริการไม่รองรับการส่งออกแบบมีโครงสร้าง", + "contextWindowMismatch": "คำขอเกินขอบเขตบริบทของผู้ให้บริการ" } } diff --git a/src/i18n/messages/tr.json b/src/i18n/messages/tr.json index a09b1e9562..4c872a63b0 100644 --- a/src/i18n/messages/tr.json +++ b/src/i18n/messages/tr.json @@ -13253,17 +13253,17 @@ "pollErrorLocalOnly": "Bu sayfaya yalnızca localhost veya LAN üzerinden erişilebilir (LOCAL_ONLY).", "pollErrorStopped": "Yoklama durduruldu: sunucu isteği reddetti (404/403).", "pollErrorTransient": "Veri alınırken hata: otomatik olarak yeniden deneniyor.", - "degraded": "Kısmi veri: kullanılamayan kaynaklar: {sources}", - "degraded.source.database": "Veritabanı", - "degraded.source.circuitBreaker": "Devre Kesici", - "degraded.source.modelLockouts": "Model Kilitleri", - "degraded.source.count": "Bağlantı Sayısı" + "degraded": { + "message": "Kısmi veri: kullanılamayan kaynaklar: {sources}", + "source": { + "database": "Veritabanı", + "circuitBreaker": "Devre Kesici", + "modelLockouts": "Model Kilitleri", + "count": "Bağlantı Sayısı" + } + } }, "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.", - "capabilityFilter.visionMismatch": "Sağlayıcı, bu görüntü isteği için görsel desteği sağlamıyor.", - "capabilityFilter.toolsMismatch": "Sağlayıcı araç çağrısını desteklemiyor", - "capabilityFilter.structuredOutputMismatch": "Sağlayıcı yapılandırılmış çıktıyı desteklemiyor", - "capabilityFilter.contextWindowMismatch": "Talep sağlayıcı bağlam penceresini aşıyor", "publicSystem": { "notFound": { "title": "Sayfa bulunamadı", @@ -13676,5 +13676,11 @@ "noExpiry": "No announced expiry", "openOffer": "View offer", "trialDays": "{days, plural, one {# day} other {# days}}" + }, + "capabilityFilter": { + "visionMismatch": "Sağlayıcı, bu görüntü isteği için görsel desteği sağlamıyor.", + "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" } } diff --git a/src/i18n/messages/uk-UA.json b/src/i18n/messages/uk-UA.json index 2b0976d617..df703225fa 100644 --- a/src/i18n/messages/uk-UA.json +++ b/src/i18n/messages/uk-UA.json @@ -13253,17 +13253,17 @@ "pollErrorLocalOnly": "Ця сторінка доступна лише з localhost або LAN (LOCAL_ONLY).", "pollErrorStopped": "Опитування зупинено: сервер відхилив запит (404/403).", "pollErrorTransient": "Помилка отримання даних: автоматичний повтор.", - "degraded": "Часткові дані: недоступні джерела: {sources}", - "degraded.source.database": "База Даних", - "degraded.source.circuitBreaker": "Автоматичний Вимикач", - "degraded.source.modelLockouts": "Блокування Моделі", - "degraded.source.count": "Кількість З'єднань" + "degraded": { + "message": "Часткові дані: недоступні джерела: {sources}", + "source": { + "database": "База Даних", + "circuitBreaker": "Автоматичний Вимикач", + "modelLockouts": "Блокування Моделі", + "count": "Кількість З'єднань" + } + } }, "featureFlagCapabilityFilterEnabledDescription": "Відхиляйте запити перед відправкою, коли цільова модель не має необхідних можливостей (зір, інструменти, структурований вихід, контекстне вікно). Захищає прямі запити від одного постачальника, які обходять фільтр сумісності комбінаційного шару.", - "capabilityFilter.visionMismatch": "Постачальник не підтримує візуалізацію для цього запиту зображення", - "capabilityFilter.toolsMismatch": "Постачальник не підтримує виклик інструментів", - "capabilityFilter.structuredOutputMismatch": "Постачальник не підтримує структурований вивід", - "capabilityFilter.contextWindowMismatch": "Запит перевищує контекстне вікно постачальника", "publicSystem": { "notFound": { "title": "Сторінку не знайдено", @@ -13676,5 +13676,11 @@ "noExpiry": "No announced expiry", "openOffer": "View offer", "trialDays": "{days, plural, one {# day} other {# days}}" + }, + "capabilityFilter": { + "visionMismatch": "Постачальник не підтримує візуалізацію для цього запиту зображення", + "toolsMismatch": "Постачальник не підтримує виклик інструментів", + "structuredOutputMismatch": "Постачальник не підтримує структурований вивід", + "contextWindowMismatch": "Запит перевищує контекстне вікно постачальника" } } diff --git a/src/i18n/messages/ur.json b/src/i18n/messages/ur.json index 17d7952d2d..8ae6f22eb5 100644 --- a/src/i18n/messages/ur.json +++ b/src/i18n/messages/ur.json @@ -13253,17 +13253,17 @@ "pollErrorLocalOnly": "یہ صفحہ صرف localhost یا LAN سے قابل رسائی ہے (LOCAL_ONLY)۔", "pollErrorStopped": "پولنگ روک دی گئی: سرور نے درخواست مسترد کر دی (404/403)۔", "pollErrorTransient": "ڈیٹا حاصل کرنے میں خرابی: خودکار طور پر دوبارہ کوشش کی جا رہی ہے۔", - "degraded": "جزوی ڈیٹا: غیر دستیاب ذرائع: {sources}", - "degraded.source.database": "ڈیٹا بیس", - "degraded.source.circuitBreaker": "سرکٹ بریکر", - "degraded.source.modelLockouts": "ماڈل لاک آؤٹس", - "degraded.source.count": "کنکشنز کی تعداد" + "degraded": { + "message": "جزوی ڈیٹا: غیر دستیاب ذرائع: {sources}", + "source": { + "database": "ڈیٹا بیس", + "circuitBreaker": "سرکٹ بریکر", + "modelLockouts": "ماڈل لاک آؤٹس", + "count": "کنکشنز کی تعداد" + } + } }, "featureFlagCapabilityFilterEnabledDescription": "جب ہدف ماڈل میں ضروری صلاحیتیں (نظریات، ٹولز، منظم آؤٹ پٹ، سیاق و سباق کی کھڑکی) نہیں ہوتیں تو بھیجنے سے پہلے درخواستوں کو مسترد کریں۔ یہ براہ راست واحد فراہم کنندہ کی درخواستوں کی حفاظت کرتا ہے جو کمبو-لیئر کی ہم آہنگی کے فلٹر کو نظر انداز کرتی ہیں۔", - "capabilityFilter.visionMismatch": "فراہم کنندہ اس تصویر کی درخواست کے لیے بصیرت کی حمایت نہیں کرتا", - "capabilityFilter.toolsMismatch": "فراہم کنندہ ٹول کالنگ کی حمایت نہیں کرتا", - "capabilityFilter.structuredOutputMismatch": "پرووائیڈر ساختی آؤٹ پٹ کی حمایت نہیں کرتا", - "capabilityFilter.contextWindowMismatch": "درخواست فراہم کنندہ کے سیاق و سباق کی ونڈو سے تجاوز کر گئی ہے", "publicSystem": { "notFound": { "title": "صفحہ نہیں ملا", @@ -13676,5 +13676,11 @@ "noExpiry": "No announced expiry", "openOffer": "View offer", "trialDays": "{days, plural, one {# day} other {# days}}" + }, + "capabilityFilter": { + "visionMismatch": "فراہم کنندہ اس تصویر کی درخواست کے لیے بصیرت کی حمایت نہیں کرتا", + "toolsMismatch": "فراہم کنندہ ٹول کالنگ کی حمایت نہیں کرتا", + "structuredOutputMismatch": "پرووائیڈر ساختی آؤٹ پٹ کی حمایت نہیں کرتا", + "contextWindowMismatch": "درخواست فراہم کنندہ کے سیاق و سباق کی ونڈو سے تجاوز کر گئی ہے" } } diff --git a/src/i18n/messages/vi.json b/src/i18n/messages/vi.json index 89af6f2d10..7de10d9226 100644 --- a/src/i18n/messages/vi.json +++ b/src/i18n/messages/vi.json @@ -13259,17 +13259,17 @@ "pollErrorLocalOnly": "Trang này chỉ có thể truy cập từ localhost hoặc LAN (LOCAL_ONLY).", "pollErrorStopped": "Đã dừng thăm dò: máy chủ đã từ chối yêu cầu (404/403).", "pollErrorTransient": "Lỗi khi lấy dữ liệu: tự động thử lại.", - "degraded": "Dữ liệu một phần: nguồn không khả dụng: {sources}", - "degraded.source.database": "Cơ Sở Dữ Liệu", - "degraded.source.circuitBreaker": "Cầu Dao Mạch", - "degraded.source.modelLockouts": "Khóa Mô Hình", - "degraded.source.count": "Số Lượng Kết Nối" + "degraded": { + "message": "Dữ liệu một phần: nguồn không khả dụng: {sources}", + "source": { + "database": "Cơ Sở Dữ Liệu", + "circuitBreaker": "Cầu Dao Mạch", + "modelLockouts": "Khóa Mô Hình", + "count": "Số Lượng Kết Nối" + } + } }, "featureFlagCapabilityFilterEnabledDescription": "Từ chối yêu cầu trước khi gửi đi khi mô hình đích thiếu các khả năng bắt buộc (thị giác, công cụ, đầu ra có cấu trúc, cửa sổ ngữ cảnh). Bảo vệ các yêu cầu trực tiếp đến một nhà cung cấp khi chúng bỏ qua bộ lọc tương thích của combo.", - "capabilityFilter.visionMismatch": "Nhà cung cấp không hỗ trợ thị giác cho yêu cầu hình ảnh này", - "capabilityFilter.toolsMismatch": "Nhà cung cấp không hỗ trợ gọi công cụ", - "capabilityFilter.structuredOutputMismatch": "Nhà cung cấp không hỗ trợ đầu ra có cấu trúc", - "capabilityFilter.contextWindowMismatch": "Yêu cầu vượt quá cửa sổ ngữ cảnh của nhà cung cấp", "publicSystem": { "notFound": { "title": "Không tìm thấy trang", @@ -13715,5 +13715,11 @@ "noExpiry": "No announced expiry", "openOffer": "View offer", "trialDays": "{days, plural, one {# day} other {# days}}" + }, + "capabilityFilter": { + "visionMismatch": "Nhà cung cấp không hỗ trợ thị giác cho yêu cầu hình ảnh này", + "toolsMismatch": "Nhà cung cấp không hỗ trợ gọi công cụ", + "structuredOutputMismatch": "Nhà cung cấp không hỗ trợ đầu ra có cấu trúc", + "contextWindowMismatch": "Yêu cầu vượt quá cửa sổ ngữ cảnh của nhà cung cấp" } } diff --git a/src/i18n/messages/zh-CN.json b/src/i18n/messages/zh-CN.json index 7e3efff380..6576e401d7 100644 --- a/src/i18n/messages/zh-CN.json +++ b/src/i18n/messages/zh-CN.json @@ -13253,17 +13253,17 @@ "pollErrorLocalOnly": "此页面仅可从 localhost 或局域网访问 (LOCAL_ONLY)。", "pollErrorStopped": "轮询已停止:服务器拒绝了请求 (404/403)。", "pollErrorTransient": "获取数据出错:将自动重试。", - "degraded": "部分数据:不可用的数据源: {sources}", - "degraded.source.database": "数据库", - "degraded.source.circuitBreaker": "断路器", - "degraded.source.modelLockouts": "模型锁定", - "degraded.source.count": "连接数" + "degraded": { + "message": "部分数据:不可用的数据源: {sources}", + "source": { + "database": "数据库", + "circuitBreaker": "断路器", + "modelLockouts": "模型锁定", + "count": "连接数" + } + } }, "featureFlagCapabilityFilterEnabledDescription": "在目标模型缺少所需能力(视觉、工具、结构化输出、上下文窗口)时,拒绝调度前的请求。保护绕过组合层兼容性过滤器的直接单一提供者请求。", - "capabilityFilter.visionMismatch": "提供者不支持此图像请求的视觉效果", - "capabilityFilter.toolsMismatch": "提供者不支持工具调用", - "capabilityFilter.structuredOutputMismatch": "提供者不支持结构化输出", - "capabilityFilter.contextWindowMismatch": "请求超出提供者上下文窗口", "publicSystem": { "notFound": { "title": "页面未找到", @@ -13676,5 +13676,11 @@ "noExpiry": "No announced expiry", "openOffer": "View offer", "trialDays": "{days, plural, one {# day} other {# days}}" + }, + "capabilityFilter": { + "visionMismatch": "提供者不支持此图像请求的视觉效果", + "toolsMismatch": "提供者不支持工具调用", + "structuredOutputMismatch": "提供者不支持结构化输出", + "contextWindowMismatch": "请求超出提供者上下文窗口" } } diff --git a/src/i18n/messages/zh-TW.json b/src/i18n/messages/zh-TW.json index af12b66d02..ff2c28fc56 100644 --- a/src/i18n/messages/zh-TW.json +++ b/src/i18n/messages/zh-TW.json @@ -13253,17 +13253,17 @@ "pollErrorLocalOnly": "此頁面僅能從 localhost 或區域網路存取 (LOCAL_ONLY)。", "pollErrorStopped": "輪詢已停止:伺服器拒絕了請求 (404/403)。", "pollErrorTransient": "取得資料時發生錯誤:將自動重試。", - "degraded": "部分資料:無法使用的來源: {sources}", - "degraded.source.database": "資料庫", - "degraded.source.circuitBreaker": "斷路器", - "degraded.source.modelLockouts": "模型鎖定", - "degraded.source.count": "連線數" + "degraded": { + "message": "部分資料:無法使用的來源: {sources}", + "source": { + "database": "資料庫", + "circuitBreaker": "斷路器", + "modelLockouts": "模型鎖定", + "count": "連線數" + } + } }, "featureFlagCapabilityFilterEnabledDescription": "在目標模型缺乏所需功能(視覺、工具、結構化輸出、上下文窗口)時,拒絕發送前的請求。保護繞過組合層兼容性過濾器的直接單一提供者請求。", - "capabilityFilter.visionMismatch": "提供者不支援此影像請求的視覺效果", - "capabilityFilter.toolsMismatch": "提供者不支援工具呼叫", - "capabilityFilter.structuredOutputMismatch": "提供者不支援結構化輸出", - "capabilityFilter.contextWindowMismatch": "請求超出提供者上下文窗口", "publicSystem": { "notFound": { "title": "找不到頁面", @@ -13676,5 +13676,11 @@ "noExpiry": "No announced expiry", "openOffer": "View offer", "trialDays": "{days, plural, one {# day} other {# days}}" + }, + "capabilityFilter": { + "visionMismatch": "提供者不支援此影像請求的視覺效果", + "toolsMismatch": "提供者不支援工具呼叫", + "structuredOutputMismatch": "提供者不支援結構化輸出", + "contextWindowMismatch": "請求超出提供者上下文窗口" } } diff --git a/src/lib/db/AGENTS.md b/src/lib/db/AGENTS.md index 31f3b168ce..4b5a3eb545 100644 --- a/src/lib/db/AGENTS.md +++ b/src/lib/db/AGENTS.md @@ -2,7 +2,7 @@ **Purpose**: Domain-driven SQLite persistence. Each module owns a specific table set. Schema migrations are versioned and idempotent. No raw SQL in routes — all ops go through `src/lib/db/` modules. -Live count: `ls src/lib/db/*.ts | wc -l` (currently 115). Migrations: `ls src/lib/db/migrations/*.sql | wc -l` (currently 141). +Live count: `ls src/lib/db/*.ts | wc -l` (currently 117). Migrations: `ls src/lib/db/migrations/*.sql | wc -l` (currently 148). --- @@ -10,7 +10,7 @@ Live count: `ls src/lib/db/*.ts | wc -l` (currently 115). Migrations: `ls src/li - **`core.ts`** — `getDbInstance()` returns singleton `better-sqlite3` with WAL journaling. Exports `rowToCamel()` (snake_case → camelCase), `encryptConnectionFields()` for provider credentials at rest. `SCHEMA_SQL` defines **17 base tables** (verify: `grep -c "CREATE TABLE" src/lib/db/core.ts` minus 1 for `_omniroute_migrations`). - **`migrationRunner.ts`** — Applies versioned SQL files from `db/migrations/` inside transactions. Tracks applied migrations in `_omniroute_migrations`. Each migration is idempotent. -- **`db/migrations/`** — 141 SQL files (`001_initial_schema.sql` → `144_radar_offers_cache.sql`; numbering has intentional gaps). Each runs in a transaction, never fails partially. +- **`db/migrations/`** — 148 SQL files (`001_initial_schema.sql` → `153_radar_local_model_state.sql`; numbering has intentional gaps). Each runs in a transaction, never fails partially. - **`localDb.ts`** — Re-export layer only. Never add logic here. ## Key Domain Modules diff --git a/src/lib/db/migrationRunner.ts b/src/lib/db/migrationRunner.ts index 2214ce08f0..5afb6ef01e 100644 --- a/src/lib/db/migrationRunner.ts +++ b/src/lib/db/migrationRunner.ts @@ -487,6 +487,15 @@ function isSchemaAlreadyApplied( // but still burn a version-tracking slot mismatch — guard it the same // way as the other renumbers for consistency. return hasTable(db, "connection_runtime_state"); + case "143": + // A cumulative Radar checkout could have occupied version 143 before the + // canonical API-key cache migration landed. Once that legacy row is + // reconciled to 153, apply 143 only when its column is genuinely absent. + return hasColumn(db, "api_keys", "cache_default_mode"); + case "153": + // Retroactive guard for 143_radar_local_model_state -> 153. A database + // that already created the table must not execute or track it twice. + return hasTable(db, "radar_local_model_state"); default: return false; } diff --git a/src/lib/db/migrationRunner/constants.ts b/src/lib/db/migrationRunner/constants.ts index 0206669f20..3f467bed53 100644 --- a/src/lib/db/migrationRunner/constants.ts +++ b/src/lib/db/migrationRunner/constants.ts @@ -145,7 +145,7 @@ export const RENAMED_MIGRATION_COMPATIBILITY = [ toName: "windsurf_to_devin_desktop", }, { - // 143–145 are reserved for the stacked Radar migration series. + // 143 is the API-key cache mode; 144–145 are the stacked Radar caches. fromVersion: "143", fromName: "windsurf_to_devin_desktop", toVersion: "151", @@ -170,6 +170,15 @@ export const RENAMED_MIGRATION_COMPATIBILITY = [ toVersion: "146", toName: "job_registry", }, + { + // The cumulative Radar branch used 143 before 143_api_key_cache_default_mode + // landed on release/v3.8.50. Rehome already-applied Radar rows to the next + // free slot so the canonical API-key migration can still run. + fromVersion: "143", + fromName: "radar_local_model_state", + toVersion: "153", + toName: "radar_local_model_state", + }, ] as const; export const LEGACY_VERSION_SLOT_MIGRATIONS = [ diff --git a/src/lib/db/migrations/143_radar_local_model_state.sql b/src/lib/db/migrations/153_radar_local_model_state.sql similarity index 94% rename from src/lib/db/migrations/143_radar_local_model_state.sql rename to src/lib/db/migrations/153_radar_local_model_state.sql index eec63c86f4..6ed680f50f 100644 --- a/src/lib/db/migrations/143_radar_local_model_state.sql +++ b/src/lib/db/migrations/153_radar_local_model_state.sql @@ -1,4 +1,4 @@ --- 143_radar_local_model_state.sql +-- 153_radar_local_model_state.sql -- Operator-owned Radar catalog state. -- -- Overrides are intentionally limited to display_name and enabled. A diff --git a/src/lib/db/radar.ts b/src/lib/db/radar.ts index a9aee3b504..d29a57ba74 100644 --- a/src/lib/db/radar.ts +++ b/src/lib/db/radar.ts @@ -13,7 +13,7 @@ * (`GET /v1/referrals/latest` — a separate, always-current artifact from * the catalog feed, see `src/lib/radar/referralsSync.ts`). * - * Tables (migration 143): + * Tables (migration 153): * - radar_local_model_state: operator-owned display/enabled overrides and * deletion tombstones, keyed by provider + model ID. * diff --git a/tests/unit/db-migrationrunner-constants-split.test.ts b/tests/unit/db-migrationrunner-constants-split.test.ts index ef1dc9f873..5b0e374063 100644 --- a/tests/unit/db-migrationrunner-constants-split.test.ts +++ b/tests/unit/db-migrationrunner-constants-split.test.ts @@ -70,8 +70,8 @@ describe("migrationRunner/constants — exact small-table snapshots", () => { // ── large tables — count + shape + spot-checks (corruption guard) ───────────── describe("migrationRunner/constants — large-table integrity", () => { - it("RENAMED_MIGRATION_COMPATIBILITY has 26 well-formed entries", () => { - assert.equal(RENAMED_MIGRATION_COMPATIBILITY.length, 26); + it("RENAMED_MIGRATION_COMPATIBILITY has 27 well-formed entries", () => { + assert.equal(RENAMED_MIGRATION_COMPATIBILITY.length, 27); for (const e of RENAMED_MIGRATION_COMPATIBILITY) { assert.equal(typeof e.fromVersion, "string"); assert.equal(typeof e.fromName, "string"); @@ -115,18 +115,24 @@ describe("migrationRunner/constants — large-table integrity", () => { ); // 147 collided with 147_api_keys_model_access_mode — renumbered to 151 in #8228 assert.ok(devin.every((e) => e.toVersion === "151")); - assert.deepEqual(RENAMED_MIGRATION_COMPATIBILITY.at(-2), { + assert.deepEqual(RENAMED_MIGRATION_COMPATIBILITY.at(-3), { fromVersion: "134", fromName: "ccr_blocks", toVersion: "139", toName: "ccr_blocks", }); - assert.deepEqual(RENAMED_MIGRATION_COMPATIBILITY.at(-1), { + assert.deepEqual(RENAMED_MIGRATION_COMPATIBILITY.at(-2), { fromVersion: "139", fromName: "job_registry", toVersion: "146", toName: "job_registry", }); + assert.deepEqual(RENAMED_MIGRATION_COMPATIBILITY.at(-1), { + fromVersion: "143", + fromName: "radar_local_model_state", + toVersion: "153", + toName: "radar_local_model_state", + }); }); it("PHYSICAL_SCHEMA_SENTINELS has 15 well-formed entries incl. the newest 064", () => { diff --git a/tests/unit/i18n-nest-dotted-keys.test.ts b/tests/unit/i18n-nest-dotted-keys.test.ts index c4d1ab33a8..0a5be52fc5 100644 --- a/tests/unit/i18n-nest-dotted-keys.test.ts +++ b/tests/unit/i18n-nest-dotted-keys.test.ts @@ -1,5 +1,7 @@ import test from "node:test"; import assert from "node:assert/strict"; +import { readFileSync, readdirSync } from "node:fs"; +import { join } from "node:path"; // The shipped helper is `normalizeComplianceEventTypes` (#3185); it nests dotted // keys under `compliance.eventTypes` and is a no-op for messages without that path. @@ -47,3 +49,27 @@ test("nestDottedKeys ignores prototype-pollution segments", () => { assert.equal(out.safe, "y"); assert.equal(({} as any).polluted, undefined); }); + +test("all shipped locale catalogs are valid next-intl message trees after normalization", () => { + const messagesDir = join(process.cwd(), "src", "i18n", "messages"); + const invalidKeys: string[] = []; + + function visit(value: unknown, path: string): void { + if (value === null || typeof value !== "object" || Array.isArray(value)) return; + for (const [key, child] of Object.entries(value as Record)) { + const qualified = path ? `${path}.${key}` : key; + if (key.includes(".")) invalidKeys.push(qualified); + visit(child, qualified); + } + } + + for (const fileName of readdirSync(messagesDir).filter((name) => name.endsWith(".json"))) { + const raw = JSON.parse(readFileSync(join(messagesDir, fileName), "utf8")) as Record< + string, + unknown + >; + visit(nestDottedKeys(raw), fileName); + } + + assert.deepEqual(invalidKeys, []); +}); diff --git a/tests/unit/mcp-tool-count-dedup-6854.test.ts b/tests/unit/mcp-tool-count-dedup-6854.test.ts index aaa4d52477..50168f71e0 100644 --- a/tests/unit/mcp-tool-count-dedup-6854.test.ts +++ b/tests/unit/mcp-tool-count-dedup-6854.test.ts @@ -6,7 +6,7 @@ import assert from "node:assert/strict"; // (omniroute_agent_skills_list/get/coverage) are intentionally defined in BOTH // MCP_TOOLS (open-sse/mcp-server/schemas/tools.ts) and agentSkillTools // (open-sse/mcp-server/tools/agentSkillTools.ts), so the additive sum reported 121 -// while only 108 distinct tool names actually exist. countUniqueMcpTools +// while only 109 distinct tool names actually exist. countUniqueMcpTools // (open-sse/mcp-server/toolCount.ts) fixes this by unioning tool names from every // registered collection into a Set, so each user-visible tool is counted once. @@ -60,7 +60,7 @@ test("#6854: countUniqueMcpTools de-duplicates tools registered in multiple coll }; const total = countUniqueMcpTools(collections); - assert.equal(total, 108, "the published MCP inventory must match the registered tool set"); + assert.equal(total, 109, "the published MCP inventory must match the registered tool set"); // Independently compute the "true" unique count by unioning every collection's // tool names into a Set — this must equal countUniqueMcpTools's own result AND diff --git a/tests/unit/radar-local-state-db.test.ts b/tests/unit/radar-local-state-db.test.ts index fd30dd47d4..c6e2074d78 100644 --- a/tests/unit/radar-local-state-db.test.ts +++ b/tests/unit/radar-local-state-db.test.ts @@ -40,7 +40,7 @@ test.after(() => { delete process.env.RADAR_ENABLED; }); -test("migration 143 creates the closed local model state schema", () => { +test("migration 153 creates the closed local model state schema", () => { const db = core.getDbInstance(); const columns = db.prepare("PRAGMA table_info(radar_local_model_state)").all() as Array<{ name: string; @@ -52,6 +52,31 @@ test("migration 143 creates the closed local model state schema", () => { ); }); +test("legacy Radar migration 143 is rehomed before the canonical API-key migration runs", () => { + const db = core.getDbInstance(); + db.prepare("DELETE FROM _omniroute_migrations WHERE version IN ('143', '153')").run(); + db.prepare( + "INSERT INTO _omniroute_migrations (version, name) VALUES ('143', 'radar_local_model_state')" + ).run(); + + core.resetDbInstance(); + const reopened = core.getDbInstance(); + const rows = reopened + .prepare("SELECT version, name FROM _omniroute_migrations WHERE version IN ('143', '153')") + .all() as Array<{ version: string; name: string }>; + + assert.deepEqual(rows, [ + { version: "143", name: "api_key_cache_default_mode" }, + { version: "153", name: "radar_local_model_state" }, + ]); + assert.equal( + reopened + .prepare("SELECT COUNT(*) AS count FROM sqlite_master WHERE type = 'table' AND name = ?") + .get("radar_local_model_state")?.count, + 1 + ); +}); + test("local overrides round-trip, merge partial updates, and clear without stale fields", () => { assert.equal( setRadarLocalModelOverride(" groq ", " llama-3.3-70b-versatile ", {