Files
OmniRoute/docs/i18n/da/docs/architecture/CODEBASE_DOCUMENTATION.md
Diego Rodrigues de Sa e Souza b637350680 fix(docs): re-sync the 65 documentation mirror sets; section-level docs pipeline; drift gate blocking (#13940)
1,104 mirrors rewritten over five passes of run-translation on the 22-source core set: the 14 sources edited since their translation, the 322 mirrors that were still English copies, and the frontmatter the old extractor leaked into the newer locales' bodies. The pipeline now caches per-`## `-section hashes and retranslates only changed sections, never reuses a section that is still English, rebuilds English-copy / leaked mirrors even when the source is unchanged, merges the state on save (parallel runs), and the drift gate (scoped to the core set) is blocking. Final audit: 0 stale, 0 English copies, 0 leaked frontmatter across 1,430 core mirrors.

⚠️ base-red inherited: #12732
2026-09-17 02:55:31 -03:00

81 KiB

OmniRoute Codebase Documentation (Dansk)

🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇪 de · 🇬🇷 el · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇪 ga · 🇮🇳 gu · 🇳🇬 ha · 🇮🇱 he · 🇮🇳 hi · 🇭🇷 hr · 🇭🇺 hu · 🇦🇲 hy · 🇮🇩 id · 🇳🇬 ig · 🇮🇹 it · 🇯🇵 ja · 🇬🇪 ka · 🇰🇭 km · 🇮🇳 kn · 🇰🇷 ko · 🇱🇹 lt · 🇱🇻 lv · 🇮🇳 ml · 🇮🇳 mr · 🇲🇾 ms · 🇲🇹 mt · 🇲🇲 my · 🇳🇵 ne · 🇳🇱 nl · 🇳🇴 no · 🇮🇳 or · 🇮🇳 pa · 🇵🇭 phi · 🇵🇱 pl · 🇵🇹 pt · 🇧🇷 pt-BR · 🇷🇴 ro · 🇷🇺 ru · 🇱🇰 si · 🇸🇰 sk · 🇸🇮 sl · 🇷🇸 sr · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW


Version: v3.8.51 Senest opdateret: 2026-06-28 Målgruppe: Ingeniører, der bidrager til OmniRoute eller bygger integrationer oven på det.

For arkitekturdiagrammer på højt niveau og begrundelserne bag hvert undersystem kan du læse ARCHITECTURE.md. For dybdegående beskrivelser af individuelle undersystemer (Auto Combo, MCP-server, A2A-server, Skills, Memory, Cloud Agents, Resilience, Compression osv.) henvises til deres dedikerede filer i denne docs/-mappe.

Denne fil beskriver hvad der findes i repositoriet i dag, så en ny ingeniør kan navigere i træet, forstå lagdelingen ved kørsel og vide, hvor kode skal tilføjes uden at opfinde nye moduler.


1. Teknologistak

Område Valg
Webframework Next.js 16 (App Router, selvstændigt output, ingen global middleware)
Sprog TypeScript 6.0+ — mål ES2022, module: esnext, moduleResolution: bundler, strict: false
Runtime Node.js >=22.22.2 <23 eller >=24.0.0 <27 (håndhævet via engines + SUPPORTED_NODE_RANGE)
Database SQLite via better-sqlite3 (singleton, WAL-journalføring)
Desktop Electron 41 + electron-builder 26.10 (separat workspace i electron/)
Tests Nodes indbyggede testkører (enheds-/integrationstest), Vitest (MCP, autoCombo, cache), Playwright (e2e + protocols-e2e)
Build Selvstændig Next.js-build via scripts/build/build-next-isolated.mjs
Lint/format Flad ESLint-konfiguration + Prettier (lint-staged via Husky pre-commit)
Modulsystem ESM overalt ("type": "module")
Workspaces npm-workspace — open-sse er det eneste under-workspace

Stialiaser (tsconfig.json):

  • @/*src/*
  • @omniroute/open-sseopen-sse/index.ts
  • @omniroute/open-sse/*open-sse/*

Standard-HTTP-port: 20128 (API'et og dashboardet deler samme proces). Datamappen angives af miljøvariablen DATA_DIR og er som standard ~/.omniroute/.


2. Repositoriets struktur

OmniRoute/
├── src/                  Next.js-applikation (App Router, biblioteker, domæne, server, delt kode)
├── open-sse/             Workspace til streamingmotoren (@omniroute/open-sse)
├── electron/             Desktop-wrapper (Electron 41-hovedproces + preload)
├── bin/                  CLI-indgangspunkter (omniroute, reset-password)
├── tests/                Enheds-, integrations-, e2e-, protocols-e2e-, oversætter- og sikkerhedstest samt fixtures
├── scripts/              Hjælpescripts til build, synkronisering, kontrol, migrering og kørsel
├── docs/                 Offentlig dokumentation (denne mappe)
├── public/               Statiske ressourcer, PWA-manifest, service worker
├── config/               Eksempler på runtime-konfiguration
├── images/               Marketing-/skærmbilledressourcer
├── _ideia/, _references/, _mono_repo/, _tasks/   Internt kladde-/planlægningsmateriale (distribueres ikke)
├── CLAUDE.md             Regler for repositoriet til Claude Code
├── AGENTS.md             Dybere arkitekturreference til agenter
├── package.json          v3.8.51, workspace-rod
└── tsconfig.json         Stialiaser + centrale compilerindstillinger

3. src/ — Next.js-applikation

src/
├── app/                  App Router-sider + API-ruter
├── lib/                  Kernebiblioteker (DB, godkendelse, OAuth, færdigheder, hukommelse, …)
├── domain/               Rent domænelag (politik, fallback, omkostninger, spærring, …)
├── server/               Moduler kun til serveren (godkendelse, CORS, autentificering)
├── shared/               Typer, konstanter, validering, kontrakter, hjælpefunktioner (sikre på tværs af grænser)
├── mitm/                 Man-in-the-middle-proxyhjælpere til CLI-integration
├── models/               Metadata/aliaser for lokale modeller
├── sse/                  Ældre SSE-handlere, der stadig ligger under src/ (ikke open-sse/)
├── store/                Tilstandslagre på klientsiden
├── middleware/           Hjælpefunktioner til middleware på ruteniveau (ikke global Next.js-middleware)
├── scripts/              Scripts i kildetræet, der kan importeres af applikationskode
├── types/                Globale og delte TS-typer
├── i18n/                 Sprogpakker
├── instrumentation.ts    Next.js-instrumenteringshook
├── instrumentation-node.ts
└── proxy.ts              Hjælper til proxy-bootstrap på topniveau

3.1 src/app/ — App Router

App Router eksponerer både dashboardets brugergrænseflade og det offentlige/administrative HTTP-API. Der er ingen global middleware — opfangning udføres pr. rute.

Segmenter på topniveau under src/app/:

Sti Formål
api/ Alle HTTP API-ruter (se opdelingen nedenfor)
a2a/ A2A JSON-RPC 2.0-slutpunkt (POST /a2a)
.well-known/agent.json/ Registreringsdokument for A2A Agent Card
(dashboard)/ Dashboardets brugergrænseflade (rutegruppe, intet URL-præfiks)
auth/, login/, forgot-password/, callback/ Godkendelsesforløb
landing/ Marketing-/landingsside
docs/ Integreret API-dokumentationsfremviser
status/, maintenance/, offline/ Driftssider
privacy/, terms/ Juridiske sider
400/, 401/, 403/, 408/, 429/, 500/, 502/, 503/ Statiske fejlsider
error.tsx, global-error.tsx, not-found.tsx, forbidden/, loading.tsx Frameworkets fejl-/indlæsningsgrænser
layout.tsx, page.tsx, globals.css, manifest.ts Rodskal

3.1.1 src/app/(dashboard)/dashboard/ — UI-sider

agents, analytics, api-manager, audit, auto-combo, batch, cache, changelog, cli-tools, cloud-agents, combos, compression, context, costs, endpoint, health, limits, logs, memory, onboarding, playground, providers, search-tools, settings, skills, system, translator, usage, webhooks, plus page.tsx, HomePageClient.tsx og BootstrapBanner.tsx i roden.

3.1.2 src/app/api/ — API-grupper på topniveau

src/app/api/
├── a2a/{status, tasks}
├── acp/
├── admin/
├── analytics/
├── assess/
├── auth/
├── batches/
├── cache/
├── cli-tools/
├── cloud/{codex-responses-ws}
├── combos/
├── compliance/
├── compression/
├── context/
├── db/, db-backups/
├── evals/
├── fallback/
├── files/
├── health/
├── init/
├── internal/{concurrency}
├── keys/
├── logs/
├── mcp/{audit, sse, status, stream, tools}
├── memory/{health, [id]/, route.ts}
├── model-combo-mappings/
├── models/
├── monitoring/
├── oauth/
├── openapi/
├── policies/
├── pricing/
├── provider-metrics/, provider-models/, provider-nodes/
├── providers/
├── rate-limit/, rate-limits/
├── resilience/
├── restart/, shutdown/
├── search/
├── sessions/
├── settings/
├── skills/{executions, [id], install, marketplace, route.ts, skillssh}
├── storage/
├── sync/, synced-available-models/
├── system/
├── tags/
├── telemetry/
├── token-health/
├── translator/
├── tunnels/
├── services/   Administration af integrerede tjenester (9router, cliproxy) — LOCAL_ONLY
├── upstream-proxy/
├── usage/
├── v1/         OpenAI-kompatibelt offentligt API
├── v1beta/     Gemini-lignende kompatibilitet
├── version-manager/
└── webhooks/

3.1.2a src/app/api/services/ — Administration af integrerede tjenester

Ruter til installation, start, stop og overvågning af 9Router og CLIProxyAPI. Alle stier er klassificeret som LOCAL_ONLY (kun loopback, fast regel nr. 17), fordi de kan kalde npm install og oprette underprocesser.

src/app/api/services/
├── 9router/
│   ├── _lib.ts             getOrInitSupervisor()-hjælpefunktion
│   ├── install/route.ts    POST — npm-installation via execFile
│   ├── start/route.ts      POST — supervisor.start()
│   ├── stop/route.ts       POST — supervisor.stop()
│   ├── restart/route.ts    POST — supervisor.restart()
│   ├── update/route.ts     POST — npm-installation af nyere version
│   ├── rotate-key/route.ts POST — generér ny API-nøgle + genstart
│   ├── status/route.ts     GET  — live- og DB-status + versionsmetadata
│   └── auto-start/route.ts POST — slå auto_start-flag til eller fra
├── cliproxy/
│   ├── _lib.ts             getOrInitSupervisor()-hjælpefunktion
│   ├── install/route.ts    POST — npm-installation
│   ├── start/route.ts      POST — supervisor.start()
│   ├── stop/route.ts       POST — supervisor.stop()
│   ├── restart/route.ts    POST — supervisor.restart()
│   ├── update/route.ts     POST — npm-installation af nyere version
│   ├── status/route.ts     GET  — live- og DB-status + versionsmetadata
│   └── auto-start/route.ts POST — slå auto_start-flag til eller fra
└── [name]/
    └── logs/route.ts       GET  — SSE-loghale (deles af alle tjenester)

Tilhørende dashboardgrænseflade: src/app/(dashboard)/dashboard/providers/services/ — side med to faner (CLIProxyAPI + 9Router). Reverse proxy til 9Routers integrerede brugergrænseflade: src/app/(dashboard)/dashboard/providers/services/[name]/embed/[[...path]]/route.ts

Dybdegående gennemgang: docs/frameworks/EMBEDDED-SERVICES.md

3.1.3 src/app/api/v1/ — OpenAI-kompatibelt offentligt API

v1/
├── accounts/[id]/                       kontoopslag
├── agents/tasks/[id]/, agents/tasks/    A2A-inspirerede opgaveslutpunkter
├── api/                                 interne API-hjælpefunktioner eksponeret under v1/api
├── audio/{speech, transcriptions}/      TTS + STT
├── batches/[id]/{cancel}, batches/      OpenAI Batches API
├── chat/completions/                    Chat Completions (det primære slutpunkt)
├── completions/                         ældre tekstfuldførelser
├── embeddings/                          indlejringer
├── files/[id]/, files/                  Files API
├── _helpers/                            delte route-hjælpefunktioner (ingen offentlig URL)
├── images/{edits, generations}/         billedgenerering + redigering
├── issues/                              hjælpeslutpunkter til triagering
├── management/{proxies}/                administrationsafgrænsede routes i v1
├── messages/{count_tokens}/             kompatibilitet med meddelelser i Anthropic-stil
├── models/                              modelliste (`route.ts`, `catalog.ts`)
├── moderations/                         moderering
├── music/                               musikgenerering
├── providers/[provider]/                handlinger pr. udbyder
├── quotas/{check}                       kvoteforespørgsler
├── registered-keys/                     administration af registrerede nøgler
├── rerank/                              omrangering
├── responses/[...path]/                 OpenAI Responses API (opsamlingsroute)
├── search/                              websøgning
├── videos/                              videogenerering
├── ws/                                  WebSocket-bro
└── route.ts                             indekshåndtering

Hver route-fil følger det samme mønster:

Route → CORS-preflight → Zod-validering af body → valgfri godkendelse
      → håndhævelse af API-nøglepolitik → delegering til handler (open-sse)

v1beta/ er kompatibilitetsgrænsefladen i Gemini-stil (et tyndt wrapper-lag, der oversætter til den samme open-sse/handlers/-pipeline).

3.2 src/lib/ — Kernebiblioteker

Importér altid data, synkronisering, OAuth, skills, hukommelse osv. gennem disse moduler. Tabellen grupperer de faktiske mapper og bemærkelsesværdige filer på øverste niveau.

Modul Formål
a2a/ A2A-protokolserver: taskManager.ts, streaming.ts, taskExecution.ts, routingLogger.ts, skills/ (6 færdigheder: omkostningsanalyse, tilstandsrapport, udbyderregistrering, kvotestyring, intelligent routing, visning af funktioner)
acp/ Agent-Control-Protocol: index.ts, manager.ts, registry.ts
api/ Interne API-hjælpefunktioner: requireManagementAuth.ts, requireCliToolsAuth.ts, errorResponse.ts
auth/ managementPassword.ts (nulstilling af adgangskode/hashning)
batches/ Tjeneste til OpenAI Batches API (service.ts)
catalog/ Synkronisering af OpenRouter-katalog (openrouterCatalog.ts)
cloudAgent/ Register over cloudagenter: api.ts, baseAgent.ts, db.ts, index.ts, registry.ts, types.ts, agents/{codex, devin, jules}.ts
combos/ Hjælpefunktioner til løsning af kombinationer
compliance/ Revision + udbyderrevision: index.ts, providerAudit.ts
config/ Sammenkobling af runtimekonfiguration
db/ SQLite-domænemoduler (se §3.2.1)
display/ UI-/visningshjælpefunktioner, der bruges af API-svar
embeddings/ Register over embeddingtjenester
env/ Indlæsning + introspektion af miljø
evals/ Evaluerings-runtime
guardrails/ piiMasker.ts, promptInjection.ts, visionBridge.ts, visionBridgeHelpers.ts, registry.ts, base.ts
jobs/ Baggrundsjob (autoUpdate.ts, …)
memory/ Vedvarende hukommelse: store.ts, cache.ts, retrieval.ts, summarization.ts, extraction.ts, injection.ts, qdrant.ts, settings.ts, verify.ts, schemas.ts, types.ts
monitoring/ observability.ts
oauth/ OAuth-/importmoduler til udbydere (22): agy, antigravity, claude, cline, codebuddy-cn, codex, cursor, devin-desktop, ghe-copilot, github, gitlab-duo, grok-cli-oauth, grok-cli, kilocode, kimi-coding, kiro, openference, qoder, trae, xai-oauth, zed-hosted, zed, samt services/, utils/ og constants/oauth.ts
plugins/ Indlæser til plugins (index.ts)
promptCache/ prefixAnalyzer.ts, index.ts
providerModels/ Livscyklusstyring af administrerede modeller: modelDiscovery.ts, managedModelImport.ts, managedAvailableModels.ts, cursorAgent.ts
providers/ Hjælpefunktioner til udbydere: catalog.ts, validation.ts, imageValidation.ts, claudeExtraUsage.ts, codexConnectionDefaults.ts, codexFastTier.ts, webCookieAuth.ts, managedAvailableModels.ts, requestDefaults.ts
resilience/ settings.ts — indstillinger for kredsløbsafbryder, nedkøling og spærring
runtime/ Registrering af runtimefunktioner
search/ executeWebSearch.ts
services/ Rammeværk til indlejrede tjenester: ServiceSupervisor.ts (generisk overvågning af underprocesser med operationslås, ringbuffer og tilstandskontrol), bootstrap.ts (registrering på procesniveau og automatisk start), registry.ts (værktøj → overvågningskort), apiKey.ts (AES-256-GCM-nøglelager), modelSync.ts (periodisk modelsynkronisering), ringBuffer.ts (5 MB cirkulær logbuffer), healthCheck.ts (HTTP-tilstandsforespørgsel), types.ts, embedWsProxy.ts (WebSocket-proxy), installers/{ninerouter,cliproxy}.ts. Se docs/frameworks/EMBEDDED-SERVICES.md
agentSkills/ Katalog + generator til agentfærdigheder: catalog.ts (getCatalog/getSkillById/filterCatalog/computeCoverage), generator.ts (generateAgentSkills → skriver skills/{id}/SKILL.md), openapiParser.ts (udtrækker REST-slutpunkter fra OpenAPI-specifikation), cliRegistryParser.ts (udtrækker CLI-underkommandoer fra bin/cli-registry), schemas.ts (Zod: AgentSkillSchema, SkillCoverageSchema, ListQuerySchema, GenerateBodySchema), types.ts (AgentSkill, SkillCoverage, SkillMarkdown, GeneratorReport). Bruges af REST-ruter (/api/agent-skills/*), MCP-værktøjer (omniroute_agent_skills_*) og A2A-færdigheden list-capabilities. Se AGENT-SKILLS.md.
skills/ Rammeværk til færdigheder: registry.ts, executor.ts, interception.ts, injection.ts, sandbox.ts, custom.ts, hybrid.ts, builtins.ts, a2a.ts, providerSettings.ts, schemas.ts, skillssh.ts, types.ts, samt builtin/browser.ts
spend/ batchWriter.ts (write-behind-buffer)
sync/ bundle.ts, tokens.ts (cloudsynkronisering)
system/ Hjælpefunktioner på systemniveau
translator/ Overordnet translatorsammenkobling (delegerer til open-sse/translator/)
usage/ Brugsregnskab: costCalculator.ts, tokenAccounting.ts, usageHistory.ts, aggregateHistory.ts, usageStats.ts, callLogs.ts, callLogArtifacts.ts, fetcher.ts, providerLimits.ts, migrations.ts
versionManager/ Automatisk opdatering + versionsmanifest
ws/ WebSocket-bro
zed-oauth/ OAuth-flow til Zed-editoren

Filer på øverste niveau i src/lib/:

  • Den gamle localDb.ts-barrelfil blev fjernet — forbrugere importerer specifikke src/lib/db/*-moduler direkte.
  • proxyHealth.ts, proxyLogger.ts, tokenHealthCheck.ts, localHealthCheck.ts
  • apiBridgeServer.ts, cacheLayer.ts, semanticCache.ts, settingsCache.ts
  • cloudSync.ts, initCloudSync.ts
  • cloudflaredTunnel.ts, ngrokTunnel.ts, tailscaleTunnel.ts
  • consoleInterceptor.ts, container.ts, gracefulShutdown.ts, idempotencyLayer.ts
  • ipUtils.ts, logEnv.ts, logPayloads.ts, logRotation.ts
  • modelAliasSeed.ts, modelCapabilities.ts, modelMetadataRegistry.ts, modelsDevSync.ts
  • piiSanitizer.ts, pricingSync.ts
  • apiKeyExposure.ts, cacheControlSettings.ts, dataPaths.ts, toolPolicy.ts
  • translatorEvents.ts, usageDb.ts, usageAnalytics.ts, webhookDispatcher.ts

3.2.1 src/lib/db/

Singleton-SQLite-database (getDbInstance() i core.ts, WAL-journalføring). Skriv aldrig rå SQL i routes eller handlers — gå gennem disse moduler.

Oversigt over databaseskemaet (udvalgte kernetabeller)

Kilde: diagrams/db-schema-overview.mmd

Domænemoduler (hvert modul ejer én eller flere tabeller): apiKeys.ts, backup.ts, batches.ts, cleanup.ts, cliToolState.ts, combos.ts, commandCodeAuth.ts, compression.ts, compressionAnalytics.ts, compressionCacheStats.ts, compressionCombos.ts, compressionScheduler.ts, contextHandoffs.ts, core.ts, creditBalance.ts, databaseSettings.ts, detailedLogs.ts, domainState.ts, encryption.ts, evals.ts, files.ts, healthCheck.ts, jsonMigration.ts, migrationRunner.ts, modelComboMappings.ts, models.ts, oneproxy.ts, prompts.ts, providers.ts, providerLimits.ts, proxies.ts, quotaSnapshots.ts, readCache.ts, reasoningCache.ts, registeredKeys.ts, secrets.ts, sessionAccountAffinity.ts, settings.ts, stateReset.ts, stats.ts, syncTokens.ts, tierConfig.ts, upstreamProxy.ts, versionManager.ts, webhooks.ts.

migrations/ indeholder 168 versionsstyrede .sql-filer (idempotente og transaktionelle) og køres af migrationRunner.ts ved opstart.

Tabeller oprettet på tværs af migreringerne (123 i alt):

a, account_key_limits, api_keys, batches, call_logs, combo_adaptation_state, combos, command_code_auth_sessions, compression_analytics, compression_cache_stats, compression_combo_assignments, compression_combos, context_handoffs, daily_usage_summary, db_meta, domain_budgets, domain_circuit_breakers, domain_cost_history, domain_fallback_chains, domain_lockout_state, eval_cases, eval_runs, eval_suites, files, hourly_usage_summary, key_value, mcp_tool_audit, memories, model_combo_mappings, provider_connections, provider_key_limits, provider_nodes, proxy_assignments, proxy_logs, proxy_registry, quota_snapshots, reasoning_cache, registered_keys, request_detail_logs, routing_decisions, semantic_cache, session_account_affinity, skill_executions, skills, sync_tokens, tier_assignments, tier_config, upstream_proxy_config, usage_history, version_manager, webhooks (samt virtuelle FTS5-tabeller til søgning i hukommelsen).

3.3 src/domain/ — Domænelag

Ren forretningslogik uden I/O. Importeres af routes og handlers.

Fil Formål
policyEngine.ts Overordnet policy-resolver
fallbackPolicy.ts Beslutningstræ for fallback
costRules.ts Regler for omkostningsberegning
lockoutPolicy.ts Beslutninger om modeludelukkelse
tagRouter.ts Tagbaseret routing
comboResolver.ts Combo-opløsning fra anmodning → målliste
connectionModelRules.ts Modelfiltre pr. forbindelse
modelAvailability.ts Kontrol af modeltilgængelighed
degradation.ts Overgange til reduceret tilstand
providerExpiration.ts Registrering af udløbne konti/nøgler
quotaCache.ts Cachelagrede kvotebeslutninger
responses.ts, omnirouteResponseMeta.ts Hjælpefunktioner til responsstruktur
configAudit.ts Revision af konfigurationsændringer
assessment/ Modelvurdering (i henhold til RFC, delvist implementeret)
types.ts Delte domænetyper

3.4 src/server/ — Kun server

Kan ikke importeres fra klientkomponenter.

server/
├── auth/loginGuard.ts
├── authz/
│   ├── classify.ts        Klassificerer routes som offentlige eller administrative
│   ├── assertAuth.ts      Hjælpefunktion til assertions
│   ├── context.ts         Authz-kontekst pr. anmodning
│   ├── headers.ts
│   ├── pipeline.ts        Authz-pipeline
│   ├── policies/          Konkrete policies
│   └── types.ts
└── cors/origins.ts        Tilladelsesliste over CORS-origins

3.5 src/shared/ — Sikker at dele

Opdelt i fokuserede undermapper:

  • constants/providers.ts (Zod-valideret udbyderkatalog), models.ts, modelSpecs.ts, modelCompat.ts, pricing.ts, cliTools.ts, cliCompatProviders.ts, routingStrategies.ts, comboConfigMode.ts, headers.ts, upstreamHeaders.ts (afvisningsliste), mcpScopes.ts, errorCodes.ts, publicApiRoutes.ts, batch.ts, batchEndpoints.ts, bodySize.ts, colors.ts, appConfig.ts, config.ts, sidebarVisibility.ts, visionBridgeDefaults.ts.
  • validation/schemas.ts (~80 Zod-skemaer), compressionConfigSchemas.ts, providerSchema.ts, settingsSchemas.ts, helpers.ts.
  • contracts/ — offentlige API-kontrakter, der udgives til npm.
  • types/ — delte TS-typer.
  • utils/circuitBreaker.ts, apiAuth.ts, apiKey.ts, apiKeyPolicy.ts, api.ts, classify429.ts, cliCompat.ts, clipboard.ts, cloud.ts, cn.ts, cors.ts, featureFlags.ts, fetchTimeout.ts, formatting.ts, inputSanitizer.ts, logger.ts, machine.ts, machineId.ts, maskEmail.ts, modelCatalogSearch.ts, nodeRuntimeSupport.ts, parseApiKeys.ts, providerHints.ts, providerModelAliases.ts, rateLimiter.ts, releaseNotes.ts, a11yAudit.ts samt dashboard-hooks/-komponenter under services/, network/, middleware/, schemas/, hooks/, components/.

4. open-sse/ — Workspace til streamingmotoren

Separat npm-workspace udgivet som @omniroute/open-sse. Håndterer behandling af anmodninger, eksekveringsmoduler, oversættere, tjenester, transformeren og MCP-serveren.

open-sse/
├── index.ts                Offentlige eksporter
├── package.json            Workspace-manifest
├── tsconfig.json
├── types.d.ts
├── config/                 Udbyderregistre, headerprofiler, identitet, …
├── handlers/               Anmodningshåndterere (chat, embeddings, lyd, billede, …)
├── executors/              108 udbyderspecifikke HTTP-eksekveringsmoduler
├── translator/             Formatkonvertering (OpenAI ↔ Claude ↔ Gemini ↔ Cursor ↔ Kiro)
├── transformer/            Streamtransformer mellem Responses API og Chat Completions
├── services/               Mere end 80 tjenestemoduler (kombinationer, fallback, kvoter, identitet, …)
├── utils/                  Streaminghjælpere, TLS-klient, AWS SigV4, proxy-fetch, …
└── mcp-server/             MCP-server (3 transporttyper, 33 scopes, 110 værktøjer)

4.1 open-sse/handlers/

Håndterer Formål
chatCore.ts Primær chatpipeline (cache, hastighedsbegrænsning, kombinationsrouting, videresendelse til eksekveringsmodul)
responsesHandler.ts Indgangspunkt for OpenAI Responses API
embeddings.ts Embeddings
imageGeneration.ts Billedgenerering
audioSpeech.ts Tekst-til-tale
audioTranscription.ts Tale-til-tekst
videoGeneration.ts Videogenerering
musicGeneration.ts Musikgenerering
rerank.ts Omrangering
moderations.ts Moderering
search.ts Websøgning
sseParser.ts Parser til SSE-hændelser
usageExtractor.ts Udtrækker tokenantal fra upstream-streams
responseSanitizer.ts Fjerner udbyderspecifik støj
responseTranslator.ts Forbindelseslag mellem udbydersvar og oversætterlaget

4.2 open-sse/executors/

108 udbydereksekveringsmoduler, som hver udvider BaseExecutor (base.ts):

antigravity, azure-openai, blackbox-web, cliproxyapi, chatgpt-web-codex, cloudflare-ai, codex, commandCode, cursor, default, devin-cli, muse-spark-web, nlpcloud, opencode, perplexity-web, petals, pollinations, qoder, vertex, devin-desktop, samt claudeIdentity.ts (delt identitetshjælper) og index.ts (register).

Bemærk: Udbydere, der ikke er angivet her, betjenes af default.ts via det generiske OpenAI-kompatible eksekveringsmodul. Det komplette udbyderkatalog (355 udbydere) findes i src/shared/constants/providers.ts.

4.3 open-sse/translator/

Hub-and-spoke-oversættelse (OpenAI er knudepunktet).

  • 9 anmodningsoversættere (translator/request/): antigravity-to-openai, claude-to-gemini, claude-to-openai, gemini-to-openai, openai-responses, openai-to-claude, openai-to-cursor, openai-to-gemini, openai-to-kiro.
  • 9 svaroversættere (translator/response/): claude-to-openai, cursor-to-openai, gemini-to-claude, gemini-to-openai, kiro-to-openai, openai-responses, openai-to-antigravity, openai-to-claude.
  • 9 hjælpere (translator/helpers/): claudeHelper, geminiHelper, geminiToolsSanitizer, maxTokensHelper, openaiHelper, responsesApiHelper, schemaCoercion, toolCallHelper, samt test af hjælpere.
  • Billedhjælpere (translator/image/sizeMapper.ts).
  • På øverste niveau: bootstrap.ts, formats.ts, registry.ts, index.ts.

4.4 open-sse/transformer/

  • responsesTransformer.tsTransformStream-baseret konverter mellem Responses API og Chat Completions (bruges af catch-all-ruten responses/).

4.5 open-sse/services/

Højdepunkter (den komplette liste findes under open-sse/services/):

Område Filer
Combo-routing combo.ts (19 strategier), comboConfig.ts, comboMetrics.ts, comboManifestMetrics.ts, comboAgentMiddleware.ts
Auto Combo-motor autoCombo/engine.ts, scoring.ts, taskFitness.ts, virtualFactory.ts, modePacks.ts, autoPrefix.ts, persistence.ts, providerDiversity.ts, providerRegistryAccessor.ts, routerStrategy.ts, selfHealing.ts, index.ts
Robusthed accountFallback.ts (nedkøling + spærring), errorClassifier.ts, emergencyFallback.ts, rateLimitManager.ts, rateLimitSemaphore.ts, accountSemaphore.ts, accountSelector.ts
Kvoter quotaMonitor.ts, quotaPreflight.ts, bailianQuotaFetcher.ts, codexQuotaFetcher.ts, deepseekQuotaFetcher.ts, openrouterQuotaFetcher.ts, openrouterFreeWindow.ts, crofUsageFetcher.ts, antigravityCredits.ts
Cachelagring reasoningCache.ts, searchCache.ts, signatureCache.ts, requestDedup.ts
Routingintelligens intentClassifier.ts, taskAwareRouter.ts, backgroundTaskDetector.ts, volumeDetector.ts, wildcardRouter.ts, workflowFSM.ts, specificityDetector.ts, specificityRules.ts, specificityTypes.ts
Modelhåndtering modelCapabilities.ts, modelDeprecation.ts, modelFamilyFallback.ts, modelStrip.ts, model.ts, provider.ts, providerRequestDefaults.ts, providerCostData.ts, payloadRules.ts
Komprimering compression/ — komplet integration af komprimeringsmotoren
Token + session tokenRefresh.ts, sessionManager.ts, apiKeyRotator.ts, contextManager.ts, contextHandoff.ts, systemPrompt.ts, roleNormalizer.ts, responsesInputSanitizer.ts, toolSchemaSanitizer.ts, toolLimitDetector.ts, thinkingBudget.ts
Niveau/manifest tierResolver.ts, tierConfig.ts, tierDefaults.json, tierTypes.ts, manifestAdapter.ts
IP/netværk ipFilter.ts, webSearchFallback.ts
Batchbehandlinger batchProcessor.ts
Forbrug usage.ts

4.6 open-sse/mcp-server/

  • 110 unikke værktøjer integreret i server.ts (45 kanoniske i schemas/tools.ts + hukommelses-, færdigheds-, GitHub-færdigheds-, pulje-, gamification-, plugin-, Notion-, Obsidian-, lokalkorpus- og komprimeringsmoduler — unionen optælles af countUniqueMcpTools).
  • 3 transporter: stdio, HTTP Streamable, SSE.
  • 33 scopes håndhæves under kørsel — basislisten findes i src/shared/constants/mcpScopes.ts, og det fulde sæt er unionen af de scopes, der er deklareret af hvert værktøjsmodul.
  • Revisionstabel: mcp_tool_audit (udfyldes af audit.ts).
  • Filer: server.ts, index.ts, httpTransport.ts, audit.ts, scopeEnforcement.ts, runtimeHeartbeat.ts, descriptionCompressor.ts, schemas/{tools, a2a, audit, index}.ts, tools/{advancedTools, compressionTools, memoryTools, skillTools}.ts, samt tests under __tests__/.
  • Se MCP-SERVER.md for det fulde værktøjskatalog.

4.7 open-sse/config/

Udbyderregistre (providerRegistry.ts, providerModels.ts, providerHeaderProfiles.ts), modelspecifikke registre pr. format (audioRegistry.ts, embeddingRegistry.ts, imageRegistry.ts, moderationRegistry.ts, musicRegistry.ts, rerankRegistry.ts, searchRegistry.ts, videoRegistry.ts), identitetshjælpere (codexIdentity.ts, codexInstructions.ts, anthropicHeaders.ts, antigravityUpstream.ts, antigravityModelAliases.ts, cliFingerprints.ts, toolCloaking.ts, defaultThinkingSignature.ts), legitimationshjælpere (credentialLoader.ts, codexClient.ts) og cloud- adaptere (azureAi.ts, bedrock.ts, datarobot.ts, glmProvider.ts, maritalk.ts, oci.ts, petals.ts, runway.ts, sap.ts, watsonx.ts, ollamaModels.ts, errorConfig.ts, constants.ts, registryUtils.ts).

4.8 open-sse/utils/

Streaming-primitiver og udbyderhjælpefunktioner: stream.ts, streamHandler.ts, streamHelpers.ts, streamPayloadCollector.ts, streamReadiness.ts, sseHeartbeat.ts, proxyFetch.ts, proxyDispatcher.ts, tlsClient.ts, networkProxy.ts, awsSigV4.ts, cacheControlPolicy.ts, cursorChecksum.ts, cursorAgentProtobuf.ts, cursorVersionDetector.ts, comfyuiClient.ts, kieTask.ts, bypassHandler.ts, aiSdkCompat.ts, thinkTagParser.ts, urlSanitize.ts, usageTracking.ts, requestLogger.ts, progressTracker.ts, cors.ts, error.ts, logger.ts, sleep.ts, ollamaTransform.ts.


5. electron/ — Desktop-wrapper

electron/
├── main.js                  Electrons hovedproces
├── preload.js               Preload-bro (contextIsolation aktiveret)
├── types.d.ts
├── package.json             electron-builder-konfiguration, version 3.8.51
├── README.md
├── assets/                  Buildressourcer (ikoner, rettigheder, …)
├── node_modules/            Dedikerede node_modules (better-sqlite3, electron-updater)
└── dist-electron/           Buildoutput (ikke committet)

Fem npm-scripts i workspacets rod: electron:dev, electron:build, electron:build:{win,mac,linux}, electron:smoke:packaged. Automatisk opdatering sker via electron-updater, som peger på GitHub-udgivelsesfeedet.


6. bin/ — CLI

bin/
├── omniroute.mjs           Primært CLI-entrypoint (Node ESM)
├── reset-password.mjs      Nulstil administrationsadgangskoden fra CLI
├── mcp-server.mjs          MCP-serverstarter (stdio)
├── nodeRuntimeSupport.mjs  Kontrol af Node-version
└── cli/
    ├── program.mjs         Commander-programbygger
    ├── runtime.mjs         withRuntime-hjælper (server-først/db-reserveløsning)
    ├── output.mjs          Outputformattering (json/jsonl/table/csv)
    ├── i18n.mjs            t()-hjælper med lokaliteter
    ├── api.mjs             Hjælper til API-fetch
    ├── data-dir.mjs
    ├── encryption.mjs
    ├── sqlite.mjs
    └── commands/
        ├── registry.mjs    Kommandoregistrering
        ├── setup.mjs
        ├── doctor.mjs
        ├── providers.mjs
        └── ...             (én fil pr. kommando/gruppe)

To binære programmer eksponeres i package.jsonbin:

  • omniroutebin/omniroute.mjs
  • omniroute-reset-passwordbin/reset-password.mjs

7. tests/

Mappe Type
tests/unit/ Enhedstests via Nodes indbyggede testkører (1821 filer samt undermapperne api/, auth/, authz/)
tests/integration/ Tests på tværs af moduler samt DB-tilstandstests
tests/e2e/ Playwright-UI-tests
tests/e2e/protocol-clients.test.ts MCP/A2A-protokol-e2e
tests/translator/ Translatorspecifikke tests
tests/security/ Sikkerhedsregressioner
tests/load/ Belastnings-/stresstests
tests/golden-set/ Referenceoutput til translatorregressioner
tests/helpers/, tests/fixtures/, tests/manual/ Hjælpefiler

Almindelige kommandoer:

Kommando Hvad den kører
npm run test:unit Alle tests/unit/*.test.ts via Nodes testkører (10 samtidige)
npm run test:vitest Vitest-testsuite (MCP, autoCombo, cache)
npm run test:e2e Playwright-UI-testsuite
npm run test:protocols:e2e MCP- og A2A-protokol-e2e
npm run test:coverage Dækningskrav (≥60 % linjer/instruktioner/funktioner/forgreninger)
node --import tsx/esm --test tests/unit/<file>.test.ts Kørsel af en enkelt fil

8. scripts/

Organiseret i 6 undermapper efter formål.

  • scripts/build/build-next-isolated.mjs, prepublish.ts, prepare-electron-standalone.mjs, pack-artifact-policy.ts, validate-pack-artifact.ts, postinstall.mjs, postinstallSupport.mjs, uninstall.mjs, bootstrap-env.mjs, runtime-env.mjs, native-binary-compat.mjs.
  • scripts/dev/run-next.mjs, run-next-playwright.mjs, run-standalone.mjs, standalone-server-ws.mjs, responses-ws-proxy.mjs, v1-ws-bridge.mjs, smoke-electron-packaged.mjs, run-playwright-tests.mjs, run-ecosystem-tests.mjs, run-protocol-clients-tests.mjs, sync-env.mjs, healthcheck.mjs, system-info.mjs.
  • scripts/check/check-cycles.mjs, check-docs-sync.mjs, check-docs-counts-sync.mjs, check-env-doc-sync.mjs, check-deprecated-versions.mjs, check-route-validation.mjs, check-t11-any-budget.mjs, check-pr-test-policy.mjs, check-supported-node-runtime.ts, test-report-summary.mjs.
  • scripts/docs/generate-docs-index.mjs, gen-provider-reference.ts.
  • scripts/i18n/generate-multilang.mjs, run-visual-qa.mjs, generate-qa-checklist.mjs, apply-priority-overrides.mjs, validate_translation.py, check_translations.py, i18n_autotranslate.py, untranslatable-keys.json.
  • scripts/ad-hoc/cursor-tap.cjs, sync-cursor-models.mjs, migrate-env.mjs, dbsetup.js.

9. Anmodningspipeline (oversigt)

Anmodningspipeline (/v1/chat/completions)

Kilde: diagrams/request-pipeline.mmd

Klientanmodning
  → /v1/chat/completions (route.ts)
     CORS-preflightkontrol
     Zod-validering (chatCompletionsSchema i shared/validation/schemas.ts)
     Godkendelse (extractApiKey + isValidApiKey ELLER requireManagementAuth)
     Politikmotor (src/server/authz/pipeline.ts)
     Sikkerhedsforanstaltninger (PII-maskering, promptinjektion, vision-bro)
  → handleChatCore() (open-sse/handlers/chatCore.ts)
     Cachekontrol (semantisk cache + læsecache)
     Hastighedsbegrænsning (rateLimitManager, accountSemaphore)
     Kombinationsrouting (hvis modellen fortolkes som en kombination)
       comboResolver → løkke pr. mål → handleSingleModel()
     translateRequest()  (open-sse/translator/request/*)
     getExecutor(providerId).execute()  (open-sse/executors/*)
       hent fra upstream → nyt forsøg/backoff via accountFallback
     translateResponse() (open-sse/translator/response/*)
     SSE-stream ELLER JSON-svar
     Hvis Responses API: TransformStream via open-sse/transformer/responsesTransformer.ts
  → Compliance-revision (src/lib/compliance/)
  → Svar til klienten

Kørselstilstand for robusthed (tre mekanismer)

Mekanisme Omfang Hvor
Circuit breaker for udbyder Hele udbyderen src/shared/utils/circuitBreaker.ts, gemt i domain_circuit_breakers
Nedkøling af forbindelse Én konto/nøgle markAccountUnavailable() i src/sse/services/auth.ts; anvendt af accountFallback.checkFallbackError()
Modelspærring Udbyder + forbindelse + model open-sse/services/accountFallback.ts, gemt i domain_lockout_state

Se RESILIENCE_GUIDE.md og det dedikerede afsnit i CLAUDE.md.


10. Sådan bidrager du

Tilføj en ny udbyder

  1. Registrer den i src/shared/constants/providers.ts (Zod-valideret ved indlæsning).
  2. Tilføj en executor i open-sse/executors/, hvis brugerdefineret logik er påkrævet (udvid BaseExecutor).
  3. Tilføj en translator i open-sse/translator/, hvis den ikke bruger OpenAI-formatet.
  4. Hvis den er OAuth-baseret, skal du tilføje konfiguration under src/lib/oauth/providers/ og src/lib/oauth/services/.
  5. Registrer modeller i open-sse/config/providerRegistry.ts (eller det formatspecifikke register under open-sse/config/).
  6. Skriv tests under tests/unit/.

Tilføj en ny API-rute

  1. Opret src/app/api/your-route/route.ts.
  2. Følg mønsteret: CORS → Zod-validering af body → godkendelse → delegering til handler.
  3. Ved en ny request-struktur: Tilføj Zod-skemaet i src/shared/validation/schemas.ts.
  4. Hvis den kun er til administration: Tilføj stien til src/shared/constants/publicApiRoutes.ts (afvisningsliste for den offentlige API-overflade).
  5. Tilføj tests under tests/unit/.
  6. Opdater docs/reference/API_REFERENCE.md og docs/openapi.yaml.

Tilføj et nyt DB-modul

  1. Opret src/lib/db/yourModule.ts, og importér getDbInstance() fra ./core.ts.
  2. Eksportér CRUD-funktioner for dit domæne.
  3. Ved nye tabeller: Tilføj en migration under src/lib/db/migrations/, nummereret fortløbende, idempotent og transaktionel.
  4. Importører bruger direkte imports fra @/lib/db/yourModule (ingen barrel — det gamle localDb.ts-lag med reeksport blev fjernet).
  5. Tilføj tests under tests/unit/.

Tilføj et nyt MCP-værktøj

  1. Tilføj værktøjsdefinitionen under open-sse/mcp-server/tools/ (eller udvid open-sse/mcp-server/schemas/tools.ts).
  2. Tildel de relevante scopes i src/shared/constants/mcpScopes.ts.
  3. Registrer værktøjet i open-sse/mcp-server/server.ts.
  4. Tilføj tests under open-sse/mcp-server/__tests__/.
  5. Opdater MCP-SERVER.md.

Tilføj en ny A2A-færdighed

Se A2A-SERVER.md § Tilføjelse af en ny færdighed. Færdigheder findes i src/lib/a2a/skills/ og registreres via A2A-opgavestyringen.


11. Konventioner

  • Kodestil: indrykning med 2 mellemrum, dobbelte anførselstegn, linjebredde på 100 tegn, semikoloner, efterstillede kommaer i es5-stil — håndhæves af Prettier via lint-staged.
  • Imports: eksterne → interne (@/, @omniroute/open-sse) → relative.
  • Navngivning: filer bruger camelCase eller kebab-case, komponenter bruger PascalCase, konstanter bruger UPPER_SNAKE.
  • ESLint: no-eval, no-implied-eval, no-new-func = error overalt; no-explicit-any = warn i open-sse/ og tests/, fejl andre steder.
  • TypeScript: strict: false (ældre praksis). Foretræk eksplicitte typer frem for inferens på tværs af modulgrænser.
  • Database: Skriv aldrig rå SQL i ruter eller handlers — gå altid gennem moduler i src/lib/db/. Brug aldrig barrel-imports — brug specifikke src/lib/db/*-moduler direkte.
  • Typning af DB-entiteter (#3512): En funktion, der skriver eller læser en DB-tabels rækkestruktur, skal modtage/returnere et navngivet TS-interface, som afspejler tabellens kolonner 1:1, ikke any eller en anonym inline-type på kaldestedet. Placer interfacet ved siden af funktionen (f.eks. export interface UsageEntry i src/lib/usage/usageHistory.ts over saveRequestUsage), behold individuelle felter som valgfrie/nullbare, når forskellige skrivere udfylder rækken trinvist, og foretræk unknown frem for any for et felt, hvis struktur varierer mellem kaldere (dokumenteret på feltet, f.eks. accepterer UsageEntry.tokens både råt udbyderformet forbrug og den normaliserede struktur). Når en fils antal af any når nul på denne måde, skal den føjes til check:any-budget:t11-tilladelseslisten (scripts/check/check-t11-any-budget.mjs, maxAny: 0), så den ikke kan få tilbagefald. Dette er en konvention for første del — den bredere oprydning af "ingen anonym any" udføres iterativt i resten af kodebasen.
  • Fejl: Brug try/catch med specifikke fejltyper, og log med pino-kontekst. Ignorér aldrig fejl lydløst i SSE-streams; brug afbrydelsessignaler til oprydning.
  • Sikkerhed: Brug aldrig eval() / new Function() / implicit eval. Validér alle input med Zod. Krypter legitimationsoplysninger i hvile (AES-256-GCM). Hold afvisningslisten i src/shared/constants/upstreamHeaders.ts afstemt med rensnings-/valideringslaget.
  • Commits: Conventional Commits — feat(scope): subject. Tilladte scopes: db, sse, oauth, dashboard, api, cli, docker, ci, mcp, a2a, memory, skills.
  • Branches: præfikserne feat/, fix/, refactor/, docs/, test/, chore/. Commit aldrig direkte til main.
  • Husky: pre-commit kører lint-staged + check:docs-sync + check:any-budget:t11; pre-push kører check:any-budget:t11 + check:tracked-artifacts (hurtige kontroller; ekskluderer test:unit).

12. Ufravigelige regler (fra CLAUDE.md)

  1. Commit aldrig hemmeligheder eller legitimationsoplysninger.
  2. Brug aldrig barrel-imports — brug specifikke src/lib/db/*-moduler direkte.
  3. Brug aldrig eval() / new Function() / implicit eval.
  4. Commit aldrig direkte til main.
  5. Skriv aldrig rå SQL i routes — gå altid gennem src/lib/db/-moduler.
  6. Ignorer aldrig fejl lydløst i SSE-streams.
  7. Validér altid input med Zod-skemaer.
  8. Inkludér altid tests, når produktionskode ændres.
  9. Kodedækningen skal forblive ≥ 60 % (statements, lines, functions, branches).

13. Se også