* feat(docs): mirror every docs/ page in all 65 locales Extends the documentation mirrors from the 22-page core set (#13940) to every Markdown page under docs/: 152 sources x 65 locales = 9,880 mirrors (6,208 new), language bars rewritten for the full locale list, state adopted so the blocking drift gate now covers all 152 pages. run-translation.mjs: an oversized block made only of table rows or list items (PROVIDER_REFERENCE.md 244-row table, FREE_TIERS.md 71-item list) is cut at item boundaries and rejoined without a blank line — the single 16-40 KB request outlived the backend socket for verbose scripts. 48 older mirrors whose tables had lost rows were retranslated with --force. * docs(i18n): refresh mirrors for the sources the base changed since the branch cut Section-level retranslation of the 29 docs (and README.md) whose source or mirrors moved on release/v3.8.51 during the run, then state adoption; the drift gate is green again on the merged tree.
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-sse→open-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 specifikkesrc/lib/db/*-moduler direkte. proxyHealth.ts,proxyLogger.ts,tokenHealthCheck.ts,localHealthCheck.tsapiBridgeServer.ts,cacheLayer.ts,semanticCache.ts,settingsCache.tscloudSync.ts,initCloudSync.tscloudflaredTunnel.ts,ngrokTunnel.ts,tailscaleTunnel.tsconsoleInterceptor.ts,container.ts,gracefulShutdown.ts,idempotencyLayer.tsipUtils.ts,logEnv.ts,logPayloads.ts,logRotation.tsmodelAliasSeed.ts,modelCapabilities.ts,modelMetadataRegistry.ts,modelsDevSync.tspiiSanitizer.ts,pricingSync.tsapiKeyExposure.ts,cacheControlSettings.ts,dataPaths.ts,toolPolicy.tstranslatorEvents.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.
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.tssamt dashboard-hooks/-komponenter underservices/,network/,middleware/,schemas/,hooks/,components/.
4. open-sse/ — arbejdsområde til streamingmotoren
Separat npm-arbejdsområde udgivet som @omniroute/open-sse. Håndterer forespørgselsbehandling, eksekutorer, oversættere, tjenester, transformer og MCP-serveren.
open-sse/
├── index.ts Offentlige eksporter
├── package.json Arbejdsområdets manifest
├── tsconfig.json
├── types.d.ts
├── config/ Udbyderregistre, headerprofiler, identitet, …
├── handlers/ Forespørgselshåndterere (chat, embeddings, lyd, billeder, …)
├── executors/ 108 udbyderspecifikke HTTP-eksekutorer
├── translator/ Formatkonvertering (OpenAI ↔ Claude ↔ Gemini ↔ Cursor ↔ Kiro)
├── transformer/ Streamtransformer til Responses API ↔ Chat Completions
├── services/ 80+ tjenestemoduler (kombinationer, fallback, kvoter, identitet, …)
├── utils/ Streaminghjælpere, TLS-klient, AWS SigV4, proxy-fetch, …
└── mcp-server/ MCP-server (3 transporter, 33 scopes, 110 værktøjer)
4.1 open-sse/handlers/
| Håndterer | Formål |
|---|---|
chatCore.ts |
Primær chatpipeline (cache, hastighedsbegrænsning, kombinationsrouting, afsendelse til eksekutor) |
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 |
Genrangering |
moderations.ts |
Moderation |
search.ts |
Websøgning |
sseParser.ts |
SSE-hændelsesparser |
usageExtractor.ts |
Udtrækker antal tokens fra opstrøms-streams |
responseSanitizer.ts |
Fjerner udbyderspecifik støj |
responseTranslator.ts |
Forbindelsesled mellem udbydersvar og oversætterlaget |
4.2 open-sse/executors/
108 udbydereksekutorer, 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.tsved hjælp af den generiske OpenAI-kompatible eksekutor. Det komplette udbyderkatalog (355 udbydere) findes isrc/shared/constants/providers.ts.
4.3 open-sse/translator/
Hub-and-spoke-oversættelse (OpenAI er hubben).
- 9 forespørgselsoversæ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 tests af hjælpere. - Billedhjælpere (
translator/image/sizeMapper.ts). - Øverste niveau:
bootstrap.ts,formats.ts,registry.ts,index.ts.
4.4 open-sse/transformer/
responsesTransformer.ts—TransformStream-baseret konverter til Responses API ↔ Chat Completions (bruges af catch-all-rutenresponses/).
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ølingsperiode + spærring), errorClassifier.ts, requestRejectedStreak.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 |
| Caching | 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 ischemas/tools.ts+ hukommelses-, færdigheds-, GitHub-færdigheds-, pulje-, gamification-, plugin-, Notion-, Obsidian-, lokalkorpus- og komprimeringsmoduler — unionen optælles afcountUniqueMcpTools). - 3 transporter: stdio, HTTP Streamable, SSE.
- 33 scopes håndhæves under kørsel — grundlisten findes i
src/shared/constants/mcpScopes.ts, og det fulde sæt er unionen af de scopes, som hvert værktøjsmodul deklarerer. - Revisionstabel:
mcp_tool_audit(udfyldes afaudit.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 komplette værktøjskatalog.
4.7 open-sse/config/
Udbyderregistre (providerRegistry.ts, providerModels.ts,
providerHeaderProfiles.ts), modelregistre 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),
legitimationsoplysningshjæ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 provider-hjæ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.json → bin:
omniroute→bin/omniroute.mjsomniroute-reset-password→bin/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)
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
- Registrer den i
src/shared/constants/providers.ts(Zod-valideret ved indlæsning). - Tilføj en executor i
open-sse/executors/, hvis brugerdefineret logik er påkrævet (udvidBaseExecutor). - Tilføj en translator i
open-sse/translator/, hvis den ikke bruger OpenAI-formatet. - Hvis den er OAuth-baseret, skal du tilføje konfiguration under
src/lib/oauth/providers/ogsrc/lib/oauth/services/. - Registrer modeller i
open-sse/config/providerRegistry.ts(eller det formatspecifikke register underopen-sse/config/). - Skriv tests under
tests/unit/.
Tilføj en ny API-rute
- Opret
src/app/api/your-route/route.ts. - Følg mønsteret: CORS → Zod-validering af body → godkendelse → delegering til handler.
- Ved en ny request-struktur: Tilføj Zod-skemaet i
src/shared/validation/schemas.ts. - Hvis den kun er til administration: Tilføj stien til
src/shared/constants/publicApiRoutes.ts(afvisningsliste for den offentlige API-overflade). - Tilføj tests under
tests/unit/. - Opdater
docs/reference/API_REFERENCE.mdogdocs/openapi.yaml.
Tilføj et nyt DB-modul
- Opret
src/lib/db/yourModule.ts, og importérgetDbInstance()fra./core.ts. - Eksportér CRUD-funktioner for dit domæne.
- Ved nye tabeller: Tilføj en migration under
src/lib/db/migrations/, nummereret fortløbende, idempotent og transaktionel. - Importører bruger direkte imports fra
@/lib/db/yourModule(ingen barrel — det gamlelocalDb.ts-lag med reeksport blev fjernet). - Tilføj tests under
tests/unit/.
Tilføj et nyt MCP-værktøj
- Tilføj værktøjsdefinitionen under
open-sse/mcp-server/tools/(eller udvidopen-sse/mcp-server/schemas/tools.ts). - Tildel de relevante scopes i
src/shared/constants/mcpScopes.ts. - Registrer værktøjet i
open-sse/mcp-server/server.ts. - Tilføj tests under
open-sse/mcp-server/__tests__/. - 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 vialint-staged. - Imports: eksterne → interne (
@/,@omniroute/open-sse) → relative. - Navngivning: filer bruger
camelCaseellerkebab-case, komponenter brugerPascalCase, konstanter brugerUPPER_SNAKE. - ESLint:
no-eval,no-implied-eval,no-new-func=erroroveralt;no-explicit-any=warniopen-sse/ogtests/, 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 specifikkesrc/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
anyeller en anonym inline-type på kaldestedet. Placer interfacet ved siden af funktionen (f.eks.export interface UsageEntryisrc/lib/usage/usageHistory.tsoversaveRequestUsage), behold individuelle felter som valgfrie/nullbare, når forskellige skrivere udfylder rækken trinvist, og foretrækunknownfrem foranyfor et felt, hvis struktur varierer mellem kaldere (dokumenteret på feltet, f.eks. acceptererUsageEntry.tokensbåde råt udbyderformet forbrug og den normaliserede struktur). Når en fils antal afanynår nul på denne måde, skal den føjes tilcheck: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 anonymany" 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 isrc/shared/constants/upstreamHeaders.tsafstemt 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 tilmain. - Husky: pre-commit kører
lint-staged+check:docs-sync+check:any-budget:t11; pre-push kørercheck:any-budget:t11+check:tracked-artifacts(hurtige kontroller; ekskluderertest:unit).
12. Ufravigelige regler (fra CLAUDE.md)
- Commit aldrig hemmeligheder eller legitimationsoplysninger.
- Brug aldrig barrel-imports — brug specifikke
src/lib/db/*-moduler direkte. - Brug aldrig
eval()/new Function()/ implicit eval. - Commit aldrig direkte til
main. - Skriv aldrig rå SQL i routes — gå altid gennem
src/lib/db/-moduler. - Ignorer aldrig fejl lydløst i SSE-streams.
- Validér altid input med Zod-skemaer.
- Inkludér altid tests, når produktionskode ændres.
- Kodedækningen skal forblive ≥ 60 % (statements, lines, functions, branches).
13. Se også
- ARCHITECTURE.md — overordnet arkitektur og modulernes ansvarsområder.
- API_REFERENCE.md — reference til offentlige API'er og administrations-API'er.
- FEATURES.md — funktionsoversigt og højdepunkter i versionerne.
- RESILIENCE_GUIDE.md — detaljeret gennemgang af circuit breaker, cooldown og lockout.
- AUTO-COMBO.md — Auto Combo-scoringsmetoder og -strategier.
- MCP-SERVER.md — komplet katalog over MCP-værktøjer og transportsystemer.
- A2A-SERVER.md — A2A-protokolfærdigheder og discovery.
- COMPRESSION_GUIDE.md — RTK- og Caveman-komprimering.
- CLI-TOOLS.md — CLI-integrationer.
- ELECTRON_GUIDE.md (hvis den findes), DOCKER_GUIDE.md, FLY_IO_DEPLOYMENT_GUIDE.md, VM_DEPLOYMENT_GUIDE.md, TERMUX_GUIDE.md, PWA_GUIDE.md — udrulningsmål.
- TROUBLESHOOTING.md — almindelige driftsproblemer.
- CONTRIBUTING.md — arbejdsgang for bidragydere.
- CLAUDE.md — repository-regler for Claude Code (den autoritative kilde til mange af konventionerne ovenfor).
- AGENTS.md — mere dybdegående arkitekturreference, der bruges af agenter.