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
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/ — 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.tsvia det generiske OpenAI-kompatible eksekveringsmodul. Det komplette udbyderkatalog (355 udbydere) findes isrc/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.ts—TransformStream-baseret konverter mellem Responses API og 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ø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 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 — 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 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 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.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.