Files
OmniRoute/docs/i18n/no/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 (Norsk)

🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 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 · 🇮🇳 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


Versjon: v3.8.51 Sist oppdatert: 2026-06-28 Målgruppe: Utviklere som bidrar til OmniRoute eller bygger integrasjoner på toppen av det.

For overordnede arkitekturdiagrammer og begrunnelsen bak hvert delsystem, les ARCHITECTURE.md. For grundige gjennomganger av individuelle delsystemer (Auto Combo, MCP-server, A2A-server, Skills, Memory, Cloud Agents, Resilience, Compression osv.), se de dedikerte filene i denne docs/-mappen.

Denne filen beskriver hva som finnes i repositoriet i dag, slik at en ny utvikler kan navigere i trestrukturen, forstå lagdelingen ved kjøring og vite hvor kode skal legges til uten å opprette nye moduler.


1. Teknologistakk

Område Valg
Webrammeverk Next.js 16 (App Router, frittstående utdata, ingen global mellomvare)
Språk TypeScript 6.0+ — mål ES2022, module: esnext, moduleResolution: bundler, strict: false
Kjøremiljø Node.js >=22.22.2 <23 eller >=24.0.0 <27 (håndheves via engines + SUPPORTED_NODE_RANGE)
Database SQLite via better-sqlite3 (singleton, WAL-journalføring)
Skrivebord Electron 41 + electron-builder 26.10 (separat arbeidsområde i electron/)
Tester Nodes innebygde testkjører (enhets-/integrasjonstester), Vitest (MCP, autoCombo, cache), Playwright (e2e + protocols-e2e)
Bygging Frittstående Next.js via scripts/build/build-next-isolated.mjs
Lint/format Flat ESLint-konfigurasjon + Prettier (lint-staged via Husky før commit)
Modulsystem ESM overalt ("type": "module")
Arbeidsområder npm-arbeidsområde — open-sse er det eneste underarbeidsområdet

Stialiaser (tsconfig.json):

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

Standard HTTP-port: 20128 (API-et og kontrollpanelet deler samme prosess). Data- mappen angis med miljøvariabelen DATA_DIR, med ~/.omniroute/ som standard.


2. Repositoriets struktur

OmniRoute/
├── src/                  Next.js-applikasjon (App Router, biblioteker, domene, server, delt kode)
├── open-sse/             Arbeidsområde for strømmemotoren (@omniroute/open-sse)
├── electron/             Skrivebordsinnpakning (Electron 41-hovedprosess + preload)
├── bin/                  CLI-inngangspunkter (omniroute, reset-password)
├── tests/                Enhets-, integrasjons-, e2e-, protocols-e2e-, oversetter- og sikkerhetstester samt testdata
├── scripts/              Hjelpeskript for bygging, synkronisering, kontroller, migrering og kjøring
├── docs/                 Offentlig dokumentasjon (denne mappen)
├── public/               Statiske ressurser, PWA-manifest, service worker
├── config/               Eksempler på kjøretidskonfigurasjon
├── images/               Markedsførings-/skjermbilderessurser
├── _ideia/, _references/, _mono_repo/, _tasks/   Internt arbeids-/planleggingsmateriale (distribueres ikke)
├── CLAUDE.md             Regler for repositoriet for Claude Code
├── AGENTS.md             Grundigere arkitekturreferanse for agenter
├── package.json          v3.8.51, rot for arbeidsområdet
└── tsconfig.json         Stialiaser + sentrale kompilatoralternativer

3. src/ — Next.js-applikasjon

src/
├── app/                  App Router-sider + API-ruter
├── lib/                  Kjernebiblioteker (database, autentisering, OAuth, ferdigheter, minne, …)
├── domain/               Rent domenelag (policy, reserve, kostnad, låsing, …)
├── server/               Moduler kun for serveren (autorisasjon, CORS, autentisering)
├── shared/               Typer, konstanter, validering, kontrakter, verktøy (trygge på tvers av grenser)
├── mitm/                 Hjelpefunksjoner for mellommannsproxy til CLI-integrasjon
├── models/               Lokale modellmetadata / aliaser
├── sse/                  Eldre SSE-håndterere som fortsatt ligger under src/ (ikke open-sse/)
├── store/                Tilstandslagre på klientsiden
├── middleware/           Verktøy for mellomvare på rutenivå (ikke global Next.js-mellomvare)
├── scripts/              Skript i kodetreet som kan importeres av applikasjonskode
├── types/                Omgivende og delte TS-typer
├── i18n/                 Lokaliseringspakker
├── instrumentation.ts    Next.js-instrumenteringskrok
├── instrumentation-node.ts
└── proxy.ts              Hjelpefunksjon for oppstart av proxy på toppnivå

3.1 src/app/ — App Router

App Router eksponerer både kontrollpanelgrensesnittet og det offentlige HTTP-API-et samt administrasjons-API-et. Det finnes ingen global mellomvare — oppfanging utføres per rute.

Segmenter på toppnivå under src/app/:

Bane Formål
api/ Alle HTTP API-ruter (se oversikten nedenfor)
a2a/ A2A JSON-RPC 2.0-endepunkt (POST /a2a)
.well-known/agent.json/ Oppdagelsesdokument for A2A Agent Card
(dashboard)/ Kontrollpanelgrensesnitt (rutegruppe, uten URL-prefiks)
auth/, login/, forgot-password/, callback/ Autentiseringsflyter
landing/ Markedsførings-/landingsside
docs/ Innebygd visning av API-dokumentasjon
status/, maintenance/, offline/ Driftssider
privacy/, terms/ Juridiske sider
400/, 401/, 403/, 408/, 429/, 500/, 502/, 503/ Statiske feilsider
error.tsx, global-error.tsx, not-found.tsx, forbidden/, loading.tsx Rammeverksgrenser for feil/lasting
layout.tsx, page.tsx, globals.css, manifest.ts Rotskall

3.1.1 src/app/(dashboard)/dashboard/ — Grensesnittsider

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, samt page.tsx, HomePageClient.tsx og BootstrapBanner.tsx i roten.

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

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/   Administrasjon av innebygde tjenester (9router, cliproxy) — LOCAL_ONLY
├── upstream-proxy/
├── usage/
├── v1/         OpenAI-kompatibelt offentlig API
├── v1beta/     Gemini-lignende kompatibilitet
├── version-manager/
└── webhooks/

3.1.2a src/app/api/services/ — Administrasjon av innebygde tjenester

Ruter for installasjon, oppstart, avslutning og overvåking av 9Router og CLIProxyAPI. Alle baner er klassifisert som LOCAL_ONLY (kun tilbakekobling, fast regel nr. 17) fordi de kan kjøre npm install og opprette underprosesser.

src/app/api/services/
├── 9router/
│   ├── _lib.ts             getOrInitSupervisor()-hjelpefunksjon
│   ├── install/route.ts    POST — npm install 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 install av nyere versjon
│   ├── rotate-key/route.ts POST — generer ny API-nøkkel + start på nytt
│   ├── status/route.ts     GET  — direkte- + DB-status + versjonsmetadata
│   └── auto-start/route.ts POST — veksle auto_start-flagget
├── cliproxy/
│   ├── _lib.ts             getOrInitSupervisor()-hjelpefunksjon
│   ├── install/route.ts    POST — npm install
│   ├── start/route.ts      POST — supervisor.start()
│   ├── stop/route.ts       POST — supervisor.stop()
│   ├── restart/route.ts    POST — supervisor.restart()
│   ├── update/route.ts     POST — npm install av nyere versjon
│   ├── status/route.ts     GET  — direkte- + DB-status + versjonsmetadata
│   └── auto-start/route.ts POST — veksle auto_start-flagget
└── [name]/
    └── logs/route.ts       GET  — SSE-logghale (deles av alle tjenester)

Tilhørende brukergrensesnitt for kontrollpanelet: src/app/(dashboard)/dashboard/providers/services/ — side med to faner (CLIProxyAPI + 9Router). Omvendt proxy for 9Routers innebygde brukergrensesnitt: src/app/(dashboard)/dashboard/providers/services/[name]/embed/[[...path]]/route.ts

Fordypning: docs/frameworks/EMBEDDED-SERVICES.md

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

v1/
├── accounts/[id]/                       kontooppslag
├── agents/tasks/[id]/, agents/tasks/    A2A-inspirerte oppgaveendepunkter
├── api/                                 interne API-hjelpefunksjoner eksponert under v1/api
├── audio/{speech, transcriptions}/      TTS + STT
├── batches/[id]/{cancel}, batches/      OpenAI Batches API
├── chat/completions/                    Chat Completions (hovedendepunktet)
├── completions/                         eldre tekstfullføringer
├── embeddings/                          vektorrepresentasjoner
├── files/[id]/, files/                  Files API
├── _helpers/                            delte rutehjelpere (ingen offentlig URL)
├── images/{edits, generations}/         bildegenerering + redigering
├── issues/                              hjelpeendepunkter for kategorisering
├── management/{proxies}/                administrasjonsavgrensede ruter i v1
├── messages/{count_tokens}/             kompatibilitet med meldinger i Anthropic-stil
├── models/                              modelliste (`route.ts`, `catalog.ts`)
├── moderations/                         moderering
├── music/                               musikkgenerering
├── providers/[provider]/                operasjoner per leverandør
├── quotas/{check}                       kvotekontroller
├── registered-keys/                     administrasjon av registrerte nøkler
├── rerank/                              omrangering
├── responses/[...path]/                 OpenAI Responses API (oppsamlingsrute)
├── search/                              nettsøk
├── videos/                              videogenerering
├── ws/                                  WebSocket-bro
└── route.ts                             indekshåndterer

Hver rutefil følger samme mønster:

Rute → CORS-preflight → Zod-validering av innhold → valgfri autentisering
     → håndheving av API-nøkkelpolicy → delegering til håndterer (open-sse)

v1beta/ er det Gemini-kompatible grensesnittet (en tynn innpakning som oversetter til den samme open-sse/handlers/-behandlingskjeden).

3.2 src/lib/ — Kjernebiblioteker

Importer alltid data, synkronisering, OAuth, ferdigheter, minne osv. gjennom disse modulene. Tabellen grupperer de faktiske katalogene og nevneverdige filene på toppnivå.

Modul Formål
a2a/ A2A-protokollserver: taskManager.ts, streaming.ts, taskExecution.ts, routingLogger.ts, skills/ (6 ferdigheter: kostnadsanalyse, tilstandsrapport, leverandøroppdagelse, kvoteadministrasjon, smart ruting, oversikt over funksjoner)
acp/ Agent-Control-Protocol: index.ts, manager.ts, registry.ts
api/ Interne API-hjelpefunksjoner: requireManagementAuth.ts, requireCliToolsAuth.ts, errorResponse.ts
auth/ managementPassword.ts (tilbakestilling av passord / hashing)
batches/ Tjeneste for OpenAI Batches API (service.ts)
catalog/ Synkronisering av OpenRouter-katalogen (openrouterCatalog.ts)
cloudAgent/ Register for skyagenter: api.ts, baseAgent.ts, db.ts, index.ts, registry.ts, types.ts, agents/{codex, devin, jules}.ts
combos/ Hjelpefunksjoner for oppslag av kombinasjoner
compliance/ Revisjon + leverandørrevisjon: index.ts, providerAudit.ts
config/ Koblingskode for kjøretidskonfigurasjon
db/ SQLite-domenemoduler (se §3.2.1)
display/ Hjelpefunksjoner for brukergrensesnitt/visning som brukes av API-svar
embeddings/ Register for embedding-tjenester
env/ Innlasting + introspeksjon av miljøvariabler
evals/ Kjøretidsmiljø for evalueringer
guardrails/ piiMasker.ts, promptInjection.ts, visionBridge.ts, visionBridgeHelpers.ts, registry.ts, base.ts
jobs/ Bakgrunnsjobber (autoUpdate.ts, …)
memory/ Vedvarende minne: 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 for leverandører (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/ Programtilleggsinnlaster (index.ts)
promptCache/ prefixAnalyzer.ts, index.ts
providerModels/ Administrert livssyklus for modeller: modelDiscovery.ts, managedModelImport.ts, managedAvailableModels.ts, cursorAgent.ts
providers/ Hjelpefunksjoner for leverandører: catalog.ts, validation.ts, imageValidation.ts, claudeExtraUsage.ts, codexConnectionDefaults.ts, codexFastTier.ts, webCookieAuth.ts, managedAvailableModels.ts, requestDefaults.ts
resilience/ settings.ts — innstillinger for kretsbryter, nedkjølingsperiode og låsing
runtime/ Oppdagelse av kjøretidsfunksjoner
search/ executeWebSearch.ts
services/ Rammeverk for innebygde tjenester: ServiceSupervisor.ts (generisk overvåker for underprosesser med operasjonslås, ringbuffer og tilstandskontroll), bootstrap.ts (registrering på prosessnivå og automatisk oppstart), registry.ts (verktøy → overvåker-kart), apiKey.ts (AES-256-GCM-nøkkellager), modelSync.ts (periodisk modellsynkronisering), ringBuffer.ts (5 MB sirkulær loggbuffer), healthCheck.ts (HTTP-tilstandssjekk), types.ts, embedWsProxy.ts (WebSocket-proxy), installers/{ninerouter,cliproxy}.ts. Se docs/frameworks/EMBEDDED-SERVICES.md
agentSkills/ Katalog + generator for agentferdigheter: catalog.ts (getCatalog/getSkillById/filterCatalog/computeCoverage), generator.ts (generateAgentSkills → skriver skills/{id}/SKILL.md), openapiParser.ts (henter REST-endepunkter fra OpenAPI-spesifikasjonen), cliRegistryParser.ts (henter CLI-underkommandoer fra bin/cli-registry), schemas.ts (Zod: AgentSkillSchema, SkillCoverageSchema, ListQuerySchema, GenerateBodySchema), types.ts (AgentSkill, SkillCoverage, SkillMarkdown, GeneratorReport). Brukes av REST-ruter (/api/agent-skills/*), MCP-verktøy (omniroute_agent_skills_*) og A2A-ferdigheten list-capabilities. Se AGENT-SKILLS.md.
skills/ Rammeverk for ferdigheter: 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 (buffer for utsatt skriving)
sync/ bundle.ts, tokens.ts (Cloud Sync)
system/ Hjelpefunksjoner på systemnivå
translator/ Koblingskode for oversetter på toppnivå (delegerer til open-sse/translator/)
usage/ Bruksregnskap: costCalculator.ts, tokenAccounting.ts, usageHistory.ts, aggregateHistory.ts, usageStats.ts, callLogs.ts, callLogArtifacts.ts, fetcher.ts, providerLimits.ts, migrations.ts
versionManager/ Automatisk oppdatering + versjonsmanifest
ws/ WebSocket-bro
zed-oauth/ OAuth-flyt for Zed-redigeringsprogrammet

Filer på toppnivå i src/lib/:

  • Den gamle barrel-filen localDb.ts ble fjernet — konsumenter importerer spesifikke 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 aldri rå SQL i ruter eller handlere — gå gjennom disse modulene.

Oversikt over databaseskjemaet (utvalgte kjernetabeller)

Kilde: diagrams/db-schema-overview.mmd

Domenemoduler (hver av dem eier é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/ inneholder 168 versjonerte .sql-filer (idempotente, transaksjonelle) og kjøres av migrationRunner.ts ved oppstart.

Tabeller opprettet på tvers av migreringene (totalt 123):

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 (pluss virtuelle FTS5-tabeller for minnesøk).

3.3 src/domain/ — Domenelag

Ren forretningslogikk, ingen I/O. Importeres av ruter og handlere.

Fil Formål
policyEngine.ts Overordnet policyresolver
fallbackPolicy.ts Beslutningstre for reservealternativer
costRules.ts Regler for kostnadsberegning
lockoutPolicy.ts Beslutninger om modellutestenging
tagRouter.ts Taggbasert ruting
comboResolver.ts Kombinasjonsoppløsning fra forespørsel → målliste
connectionModelRules.ts Modellfiltre per tilkobling
modelAvailability.ts Kontroll av modelltilgjengelighet
degradation.ts Overganger til redusert modus
providerExpiration.ts Oppdagelse av utløpt konto/nøkkel
quotaCache.ts Bufrede kvotebeslutninger
responses.ts, omnirouteResponseMeta.ts Hjelpefunksjoner for responsformat
configAudit.ts Revisjon av konfigurasjonsendringer
assessment/ Modellvurdering (i henhold til RFC, delvis implementert)
types.ts Delte domenetyper

3.4 src/server/ — Kun for server

Kan ikke importeres fra klientkomponenter.

server/
├── auth/loginGuard.ts
├── authz/
│   ├── classify.ts        Klassifiserer ruter som offentlige eller administrasjonsruter
│   ├── assertAuth.ts      Hjelpefunksjon for validering
│   ├── context.ts         Autorisasjonskontekst per forespørsel
│   ├── headers.ts
│   ├── pipeline.ts        Autorisasjonskjede
│   ├── policies/          Konkrete policyer
│   └── types.ts
└── cors/origins.ts        Tillatelsesliste for CORS-opprinnelser

3.5 src/shared/ — Trygt å dele

Delt inn i fokuserte undermapper:

  • constants/providers.ts (Zod-validert leverandørkatalog), models.ts, modelSpecs.ts, modelCompat.ts, pricing.ts, cliTools.ts, cliCompatProviders.ts, routingStrategies.ts, comboConfigMode.ts, headers.ts, upstreamHeaders.ts (blokkeringsliste), 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-skjemaer), compressionConfigSchemas.ts, providerSchema.ts, settingsSchemas.ts, helpers.ts.
  • contracts/ — offentlige API-kontrakter publisert på 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 kontrollpanel-hooks/-komponenter under services/, network/, middleware/, schemas/, hooks/, components/.

4. open-sse/ — Arbeidsområde for strømmemotoren

Separat npm-arbeidsområde publisert som @omniroute/open-sse. Håndterer behandling av forespørsler, eksekverere, oversettere, tjenester, transformatoren og MCP-serveren.

open-sse/
├── index.ts                Offentlige eksporter
├── package.json            Arbeidsområdemanifest
├── tsconfig.json
├── types.d.ts
├── config/                 Leverandørregistre, headerprofiler, identitet, …
├── handlers/               Forespørselshåndterere (chat, embeddings, lyd, bilde, …)
├── executors/              108 leverandørspesifikke HTTP-eksekverere
├── translator/             Formatkonvertering (OpenAI ↔ Claude ↔ Gemini ↔ Cursor ↔ Kiro)
├── transformer/            Strømtransformator for Responses API ↔ Chat Completions
├── services/               Over 80 tjenestemoduler (kombinasjoner, reserve, kvoter, identitet, …)
├── utils/                  Strømmehjelpere, TLS-klient, AWS SigV4, proxyhenting, …
└── mcp-server/             MCP-server (3 transporter, 33 omfang, 110 verktøy)

4.1 open-sse/handlers/

Håndterer Formål
chatCore.ts Hovedflyt for chat (hurtigbuffer, hastighetsbegrensning, kombinasjonsruting, videresending til eksekverer)
responsesHandler.ts Inngangspunkt for OpenAI Responses API
embeddings.ts Embeddings
imageGeneration.ts Bildegenerering
audioSpeech.ts Tekst-til-tale
audioTranscription.ts Tale-til-tekst
videoGeneration.ts Videogenerering
musicGeneration.ts Musikkgenerering
rerank.ts Omrangering
moderations.ts Moderering
search.ts Nettsøk
sseParser.ts Parser for SSE-hendelser
usageExtractor.ts Trekker ut antall tokener fra oppstrømsstrømmer
responseSanitizer.ts Fjerner leverandørspesifikk støy
responseTranslator.ts Kobling mellom leverandørresponsen og oversetterlaget

4.2 open-sse/executors/

108 leverandøreksekverere, som alle utvider 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 identitetshjelper) og index.ts (register).

Merk: Leverandører som ikke er oppført her, betjenes av default.ts ved hjelp av den generiske OpenAI-kompatible eksekvereren. Den fullstendige leverandørkatalogen (355 leverandører) ligger i src/shared/constants/providers.ts.

4.3 open-sse/translator/

Nav-og-eike-oversettelse (OpenAI er navet).

  • 9 forespørselsoversettere (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 responsoversettere (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 hjelpere (translator/helpers/): claudeHelper, geminiHelper, geminiToolsSanitizer, maxTokensHelper, openaiHelper, responsesApiHelper, schemaCoercion, toolCallHelper, samt hjelpetester.
  • Bildehjelpere (translator/image/sizeMapper.ts).
  • Toppnivå: bootstrap.ts, formats.ts, registry.ts, index.ts.

4.4 open-sse/transformer/

  • responsesTransformer.tsTransformStream-basert konverterer for Responses API ↔ Chat Completions (brukes av oppsamlingsruten responses/).

4.5 open-sse/services/

Høydepunkter (fullstendig liste under open-sse/services/):

Område Filer
Kombinasjonsruting combo.ts (19 strategier), comboConfig.ts, comboMetrics.ts, comboManifestMetrics.ts, comboAgentMiddleware.ts
Automatisk kombinasjonsmotor 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
Robusthet accountFallback.ts (nedkjøling + sperring), 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
Hurtigbufring reasoningCache.ts, searchCache.ts, signatureCache.ts, requestDedup.ts
Intelligent ruting intentClassifier.ts, taskAwareRouter.ts, backgroundTaskDetector.ts, volumeDetector.ts, wildcardRouter.ts, workflowFSM.ts, specificityDetector.ts, specificityRules.ts, specificityTypes.ts
Modellhåndtering modelCapabilities.ts, modelDeprecation.ts, modelFamilyFallback.ts, modelStrip.ts, model.ts, provider.ts, providerRequestDefaults.ts, providerCostData.ts, payloadRules.ts
Komprimering compression/ — fullstendig kobling av komprimeringsmotoren
Token + økt tokenRefresh.ts, sessionManager.ts, apiKeyRotator.ts, contextManager.ts, contextHandoff.ts, systemPrompt.ts, roleNormalizer.ts, responsesInputSanitizer.ts, toolSchemaSanitizer.ts, toolLimitDetector.ts, thinkingBudget.ts
Nivå / manifest tierResolver.ts, tierConfig.ts, tierDefaults.json, tierTypes.ts, manifestAdapter.ts
IP / nettverk ipFilter.ts, webSearchFallback.ts
Bunker batchProcessor.ts
Bruk usage.ts

4.6 open-sse/mcp-server/

  • 110 unike verktøy koblet opp i server.ts (45 kanoniske i schemas/tools.ts + minne-, ferdighets-, GitHub-ferdighets-, pulje-, spillifiserings-, programtilleggs-, Notion-, Obsidian-, lokalkorpus- og komprimeringsmoduler — unionen telles av countUniqueMcpTools).
  • 3 transporter: stdio, HTTP Streamable, SSE.
  • 33 virkeområder håndheves under kjøring — grunnlisten finnes i src/shared/constants/mcpScopes.ts, og det fullstendige settet er unionen av virkeområdene som deklareres av hver verktøymodul.
  • Revisjonstabell: mcp_tool_audit (fylles ut av 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 tester under __tests__/.
  • Se MCP-SERVER.md for den fullstendige verktøykatalogen.

4.7 open-sse/config/

Leverandørregistre (providerRegistry.ts, providerModels.ts, providerHeaderProfiles.ts), modellregistre for hvert format (audioRegistry.ts, embeddingRegistry.ts, imageRegistry.ts, moderationRegistry.ts, musicRegistry.ts, rerankRegistry.ts, searchRegistry.ts, videoRegistry.ts), identitetshjelpere (codexIdentity.ts, codexInstructions.ts, anthropicHeaders.ts, antigravityUpstream.ts, antigravityModelAliases.ts, cliFingerprints.ts, toolCloaking.ts, defaultThinkingSignature.ts), legitimasjonshjelpere (credentialLoader.ts, codexClient.ts) og skyadaptere (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/

Strømmeprimitiver og leverandørhjelpere: 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/ — Skrivebordsinnpakning

electron/
├── main.js                  Electron-hovedprosess
├── preload.js               Forhåndslastingsbro (contextIsolation aktivert)
├── types.d.ts
├── package.json             electron-builder-konfigurasjon, versjon 3.8.51
├── README.md
├── assets/                  Byggeressurser (ikoner, rettigheter, …)
├── node_modules/            Dedikert node_modules (better-sqlite3, electron-updater)
└── dist-electron/           Byggresultat (ikke sjekket inn)

Fem npm-skript i roten av arbeidsområdet: electron:dev, electron:build, electron:build:{win,mac,linux}, electron:smoke:packaged. Automatisk oppdatering skjer via electron-updater, som peker til utgivelsesfeeden på GitHub.


6. bin/ — CLI

bin/
├── omniroute.mjs           Hovedinngangspunkt for CLI (Node ESM)
├── reset-password.mjs      Tilbakestill administrasjonspassordet fra CLI
├── mcp-server.mjs          MCP-serverstarter (stdio)
├── nodeRuntimeSupport.mjs  Kontroll av Node-versjon
└── cli/
    ├── program.mjs         Bygger for Commander-programmet
    ├── runtime.mjs         withRuntime-hjelper (server først/database som reserve)
    ├── output.mjs          Utdataformaterere (json/jsonl/table/csv)
    ├── i18n.mjs            t()-hjelper med nasjonale innstillinger
    ├── api.mjs             Hjelper for API-henting
    ├── data-dir.mjs
    ├── encryption.mjs
    ├── sqlite.mjs
    └── commands/
        ├── registry.mjs    Kommandoregistrering
        ├── setup.mjs
        ├── doctor.mjs
        ├── providers.mjs
        └── ...             (én fil per kommando/gruppe)

To binærfiler eksponeres i package.jsonbin:

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

7. tests/

Mappe Type
tests/unit/ Enhetstester via Nodes innebygde testkjører (1821 filer samt undermappene api/, auth/, authz/)
tests/integration/ Tester på tvers av moduler og databasetilstander
tests/e2e/ Playwright-tester av brukergrensesnittet
tests/e2e/protocol-clients.test.ts E2E for MCP/A2A-protokoller
tests/translator/ Oversetterspesifikke tester
tests/security/ Sikkerhetsregresjoner
tests/load/ Belastnings-/stresstester
tests/golden-set/ Referanseresultater for oversetterregresjoner
tests/helpers/, tests/fixtures/, tests/manual/ Støtte

Vanlige kommandoer:

Kommando Hva den kjører
npm run test:unit Alle tests/unit/*.test.ts via Nodes testkjører (10 samtidige kjøringer)
npm run test:vitest Vitest-testpakken (MCP, autoCombo, hurtigbuffer)
npm run test:e2e Playwright-testpakken for brukergrensesnittet
npm run test:protocols:e2e E2E for MCP- og A2A-protokollene
npm run test:coverage Dekningskrav (≥60 % linjer/uttrykk/funksjoner/grener)
node --import tsx/esm --test tests/unit/<file>.test.ts Kjøring av én enkelt fil

8. scripts/

Organisert i 6 undermapper etter 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. Forespørselspipeline (sammendrag)

Forespørselspipeline (/v1/chat/completions)

Kilde: diagrams/request-pipeline.mmd

Klientforespørsel
  → /v1/chat/completions (route.ts)
     CORS-preflightkontroll
     Zod-validering (chatCompletionsSchema i shared/validation/schemas.ts)
     Autentisering (extractApiKey + isValidApiKey ELLER requireManagementAuth)
     Regelmotor (src/server/authz/pipeline.ts)
     Sikkerhetsmekanismer (PII-maskering, promptinjeksjon, vision-bro)
  → handleChatCore() (open-sse/handlers/chatCore.ts)
     Hurtigbufferkontroll (semantisk hurtigbuffer + lesehurtigbuffer)
     Hastighetsbegrensning (rateLimitManager, accountSemaphore)
     Kombinasjonsruting (hvis modellen løses til en kombinasjon)
       comboResolver → løkke per mål → handleSingleModel()
     translateRequest()  (open-sse/translator/request/*)
     getExecutor(providerId).execute()  (open-sse/executors/*)
       hent fra oppstrøms → nytt forsøk/eksponentiell venting via accountFallback
     translateResponse() (open-sse/translator/response/*)
     SSE-strøm ELLER JSON-respons
     Hvis Responses API: TransformStream via open-sse/transformer/responsesTransformer.ts
  → Samsvarsrevisjon (src/lib/compliance/)
  → Respons til klienten

Kjøretidstilstand for robusthet (tre mekanismer)

Mekanisme Omfang Hvor
Kretsbryter for leverandør Hele leverandøren src/shared/utils/circuitBreaker.ts, lagret i domain_circuit_breakers
Nedkjølingsperiode for tilkobling Én konto/nøkkel markAccountUnavailable() i src/sse/services/auth.ts; brukes av accountFallback.checkFallbackError()
Modellutestengelse Leverandør + tilkobling + modell open-sse/services/accountFallback.ts, lagret i domain_lockout_state

Se RESILIENCE_GUIDE.md og den dedikerte delen i CLAUDE.md.


10. Slik bidrar du

Legg til en ny leverandør

  1. Registrer den i src/shared/constants/providers.ts (Zod-validert ved innlasting).
  2. Legg til en eksekverer i open-sse/executors/ hvis egendefinert logikk er nødvendig (utvid BaseExecutor).
  3. Legg til en oversetter i open-sse/translator/ hvis den ikke bruker OpenAI-formatet.
  4. Hvis den er OAuth-basert, legg til konfigurasjon under src/lib/oauth/providers/ og src/lib/oauth/services/.
  5. Registrer modeller i open-sse/config/providerRegistry.ts (eller det formatspesifikke registeret under open-sse/config/).
  6. Skriv tester under tests/unit/.

Legg til en ny API-rute

  1. Opprett src/app/api/your-route/route.ts.
  2. Følg mønsteret: CORS → Zod-validering av forespørselskroppen → autentisering → delegering til håndterer.
  3. Ved en ny forespørselsstruktur: legg til Zod-skjemaet i src/shared/validation/schemas.ts.
  4. Hvis den kun er for administrasjon: legg til banen i src/shared/constants/publicApiRoutes.ts (blokkeringsliste for den offentlige API-overflaten).
  5. Legg til tester under tests/unit/.
  6. Oppdater docs/reference/API_REFERENCE.md og docs/openapi.yaml.

Legg til en ny DB-modul

  1. Opprett src/lib/db/yourModule.ts og importer getDbInstance() fra ./core.ts.
  2. Eksporter CRUD-funksjoner for domenet ditt.
  3. Ved nye tabeller: legg til en migrering under src/lib/db/migrations/, nummerert sekvensielt, idempotent og transaksjonell.
  4. Importører bruker direkte import fra @/lib/db/yourModule (ingen samleeksport — det gamle reeksportlaget localDb.ts ble fjernet).
  5. Legg til tester under tests/unit/.

Legg til et nytt MCP-verktøy

  1. Legg til verktøydefinisjonen under open-sse/mcp-server/tools/ (eller utvid open-sse/mcp-server/schemas/tools.ts).
  2. Tilordne passende omfang i src/shared/constants/mcpScopes.ts.
  3. Registrer verktøyet i open-sse/mcp-server/server.ts.
  4. Legg til tester under open-sse/mcp-server/__tests__/.
  5. Oppdater MCP-SERVER.md.

Legg til en ny A2A-ferdighet

Se A2A-SERVER.md § Legge til en ny ferdighet. Ferdigheter ligger i src/lib/a2a/skills/ og registreres gjennom A2A-oppgavebehandleren.


11. Konvensjoner

  • Kodestil: innrykk med 2 mellomrom, doble anførselstegn, linjebredde på 100 tegn, semikolon, etterfølgende komma i es5-stil — håndheves av Prettier via lint-staged.
  • Importer: eksterne → interne (@/, @omniroute/open-sse) → relative.
  • Navngivning: filer bruker camelCase eller kebab-case, komponenter bruker PascalCase, konstanter bruker UPPER_SNAKE.
  • ESLint: no-eval, no-implied-eval, no-new-func = error overalt; no-explicit-any = warn i open-sse/ og tests/, ellers error.
  • TypeScript: strict: false (eldre praksis). Foretrekk eksplisitte typer fremfor inferens ved grenser mellom moduler.
  • Database: skriv aldri rå SQL i ruter eller håndterere — gå alltid gjennom modulene i src/lib/db/. Bruk aldri samleimport — bruk spesifikke src/lib/db/*-moduler direkte.
  • Typing av DB-entiteter (#3512): En funksjon som skriver eller leser radstrukturen til en DB-tabell, skal ta imot/returnere et navngitt TS-grensesnitt som gjenspeiler tabellens kolonner 1:1, ikke any eller en innebygd anonym type på kallstedet. Plasser grensesnittet ved siden av funksjonen (f.eks. export interface UsageEntry i src/lib/usage/usageHistory.ts over saveRequestUsage), behold enkeltfelt som valgfrie/nullbare når ulike skrivere fyller ut raden trinnvis, og foretrekk unknown fremfor any for et felt hvis struktur varierer mellom kallere (dokumentert på feltet, f.eks. at UsageEntry.tokens godtar både rå leverandørstrukturert bruk og den normaliserte strukturen). Når antallet any i en fil på denne måten når null, legger du den til i tillatelseslisten for check:any-budget:t11 (scripts/check/check-t11-any-budget.mjs, maxAny: 0), slik at dette ikke kan gå tilbake. Dette er en konvensjon for den første delen — den bredere oppryddingen av «ingen anonym any» utføres iterativt i resten av kodebasen.
  • Feil: bruk try/catch med spesifikke feiltyper, og logg med pino-kontekst. Aldri ignorer feil i SSE-strømmer uten varsel; bruk avbruddssignaler til opprydding.
  • Sikkerhet: bruk aldri eval() / new Function() / implisitt eval. Valider alle inndata med Zod. Krypter legitimasjon ved lagring (AES-256-GCM). Hold blokkeringslisten i src/shared/constants/upstreamHeaders.ts synkronisert med laget for rensing/validering.
  • Commits: Conventional Commits — feat(scope): subject. Tillatte omfang: db, sse, oauth, dashboard, api, cli, docker, ci, mcp, a2a, memory, skills.
  • Grener: prefiksene feat/, fix/, refactor/, docs/, test/, chore/. Aldri commit direkte til main.
  • Husky: før commit kjøres lint-staged + check:docs-sync + check:any-budget:t11; før push kjøres check:any-budget:t11 + check:tracked-artifacts (raske kontrollporter; utelater test:unit).

12. Ufravikelige regler (fra CLAUDE.md)

  1. Aldri legg inn hemmeligheter eller påloggingsopplysninger i versjonskontrollen.
  2. Aldri bruk samleimporter — bruk spesifikke src/lib/db/*-moduler direkte.
  3. Aldri bruk eval() / new Function() / implisitt eval.
  4. Aldri legg inn endringer direkte i main.
  5. Aldri skriv rå SQL i ruter — gå alltid gjennom modulene i src/lib/db/.
  6. Aldri ignorer feil i SSE-strømmer uten varsel.
  7. Valider alltid inndata med Zod-skjemaer.
  8. Inkluder alltid tester når produksjonskode endres.
  9. Testdekningen må være ≥ 60 % (setninger, linjer, funksjoner, grener).

13. Se også