* 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.
24 KiB
Stealth Guide (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
Autoritativ kilde:
open-sse/utils/tlsClient.ts,open-sse/services/{tlsClientBase,claudeTlsClient,perplexityTlsClient,grokTlsClient,notionTlsClient,lmarenaTlsClient,claudeCodeCCH,claudeCodeFingerprint,claudeCodeObfuscation,claudeCodeCompatible}.ts,open-sse/config/cliFingerprints.ts,src/mitm/Sist oppdatert: 2026-09-02 — v3.8.51 Målgruppe: Utviklere som vedlikeholder leverandørspesifikke stealth-integrasjoner.
OmniRoute integreres med leverandører hvis grenseinfrastruktur aktivt identifiserer uoffisielle klienter ved hjelp av fingeravtrykk (TLS JA3/JA4, rekkefølge på headere, JSON-strukturen i forespørselskroppen og integritetstokener). Denne siden dokumenterer stealth-grensesnittene OmniRoute eksponerer, og hvor de er implementert.
Juridisk og etisk merknad
Stealth-funksjoner finnes slik at OmniRoute kan fungere som et kompatibilitetslag mellom brukereide offisielle kontoer (Claude Code CLI, Codex, Antigravity, Cursor osv.) og OmniRoutes enhetlige API. De er ikke ment for å omgå svindeloppdagelse, dele påloggingsopplysninger eller bryte leverandørens tjenestevilkår. Vedlikeholderne forventer at operatører overholder vilkårene de godtok hos oppstrømsleverandøren da kontoene ble opprettet.
Lag for TLS-fingeravtrykk
open-sse/utils/tlsClient.ts — wreq-js (Chrome 124)
Vedvarende wreq-js-økter opprettes behovsstyrt per kontoomfang og løste proxy. Den prosessomfattende
TlsClient-poolen inneholder maksimalt 128 økter som utgir seg for å være Chrome 124 på macOS overfor
oppstrømstjenester bak Cloudflare. TlsClient.fetch() stanser med feil når den innebygde kjøretiden
ikke er tilgjengelig. En kallende funksjon kan eksplisitt velge en reserveløsning utenfor denne wrapperen.
- Øktprofil:
browser: "chrome_124", os: "macos" - Proxy-oppløsning (prioritet):
HTTPS_PROXY→HTTP_PROXY→ALL_PROXY(også med små bokstaver) - Tidsavbrudd:
TLS_CLIENT_TIMEOUT_MS(arves fraFETCH_TIMEOUT_MS, standardverdi 600000) wreq-jsResponse er fetch-kompatibel (headers,text(),json(),clone(),body).- Vakthund for første byte (
open-sse/utils/tlsFirstByteWatchdog.ts, #12656):TlsClient.fetch()fullføres så snart headere fra oppstrømstjenesten ankommer, såTLS_CLIENT_TIMEOUT_MSalene kan ikke sette en grense for en kropp som aldri leverer en første byte.guardTlsFirstByte()kjører kroppens førsteread()i et kappløp motTLS_FIRST_BYTE_WATCHDOG_MS(standardverdi10000;0deaktiverer den). En velfungerende kropp påvirkes ikke, mens en fastlåst kropp avbryter wreq-leseren og lar den eksisterende TLS-reservelogikken iproxyFetchgå videre til direkte-/proxy-dispatcheren (en forespørsel som ikke trygt kan spilles av på nytt, for eksempel en POST med en kropp, utløser fortsatt en feil i stedet for å bli forsøkt på nytt uten varsel).
Transport for leverandører med web-informasjonskapsler — wreq-js 3.2.0
open-sse/services/tlsClientBase.ts er den delte adapteren for de fem spesialiserte
transportene med web-informasjonskapsler nedenfor. Hver enkelt leverandør-wrapper velger en nettleser-/OS-profil. Adapteren
bruker den felles wreq-kjøretidslasteren og transportpoolen i open-sse/utils/tlsClient.ts, indeksert etter
profil + OS + løst proxy, mens hver forespørsel bruker cookieMode: "ephemeral". Kontoer og
forespørsler deler derfor tilkoblinger på transportnivå, men aldri en wreq-økt eller informasjonskapselbeholder.
| Leverandør | Profil | Emulert OS | Retningslinje for EOF i strøm |
|---|---|---|---|
| Claude | chrome_146 |
Linux | inkluder [DONE] |
| Perplexity | firefox_148 |
macOS | inkluder event: end_of_stream |
| Grok | chrome_146 |
Linux | ekskluder [DONE] |
| Notion | chrome_146 |
Windows | inkluder [DONE] |
| LMArena | chrome_146 |
Windows | ingen sentinel; lukk ved innebygd EOF |
- Strømming konsumerer den innebygde responsens
ReadableStreamdirekte; ingen midlertidig fil eller sideprosess opprettes. - Opptil 256 innledende byte inspiseres før en strøm eksponeres. SSE-leverandører bufrer feil som ikke er SSE;
Grok/LMArena tilordner Cloudflare-utfordringer til
403og HTML-mellomsider til502. - Tidsavbruddet for den innebygde forespørselen er fortsatt omsluttet av en absolutt, hard JS-tidsfrist. En fastlåsing ugyldiggjør og lukker bare den berørte profil-/OS-/proxy-transporten før neste forespørsel oppretter den på nytt.
- Prioriteten for proxy-oppløsning er
proxyUrlper kall → forespørselsavgrenset konto-/dashbordkontekst →HTTPS_PROXY/HTTP_PROXY/ALL_PROXY(inkludert varianter med små bokstaver). Oppløsningsfeil stanser med feil i stedet for å lekke en direkte tilkobling. LMArena foretar bevisst oppløsning motarena.ai. byteResponsereturnerer en innholdstypeangittdata:-URL uten UTF-8-korrupsjon.- Feilene er
TlsClientUnavailableError(pakken/tillegget er utilgjengelig),TlsClientHangError(tidsfristen er overskredet) ogWreqTransportCapacityError(feilkoden for delt øktkapasitet) når alle de 128 avgrensede profil-/OS-/proxy-plassene er aktive eller i ferd med å lukkes.
Den generiske TlsClient-økten ovenfor er fortsatt spesialisert for vedvarende, nettleserstøttet
informasjonskapseltilstand. Begge banene gjenbruker én bufret wreq-modullaster og livssykluskrok for prosessen. Poolene deres forblir
separate fordi levetiden til informasjonskapslene deres med hensikt er forskjellig.
Profilene støttes av den versjonslåste pakken, men faktisk WAF-aksept kan endres uavhengig av lokale kontrakttester. Valider endringer i fingeravtrykk mot en eksplisitt autorisert aktiv konto før det hevdes samsvar med en oppstrømsnettleser.
Claude Code Stealth-pakke
Når cliCompatMode er aktivert, omformer OmniRoute utgående Claude-forespørsler slik at de ikke kan skilles fra claude-cli-trafikk. Tre moduler samarbeider:
claudeCodeFingerprint.ts
Beregner det 3-tegns cc_version-fingeravtrykket som er innebygd i faktureringsheaderen:
SHA256(SALT + msg[4] + msg[7] + msg[20] + version)[:3]
FINGERPRINT_SALT = "59cf53e54c78"(hardkodet; samsvarer med den offisielle klienten)- Inndata: tegn på indeks 4, 7 og 20 i teksten i den første brukermeldingen + versjonsstrengen
- Utdata: 3-tegns heksadesimalt prefiks
claudeCodeCCH.ts (Client Content Hash)
Integritetskontroll på serversiden som den offisielle Claude Code CLI-en beregner via Bun/Zig. OmniRoute implementerer den på nytt med xxhash-wasm:
- Serialiser innholdet med plassholderen
cch=00000; xxhash64(bytes, seed) & 0xFFFFF- Heksadesimalverdi på 5 tegn med små bokstaver og nullutfylling
- Erstatt
cch=00000;med det beregnede tokenet
Konstanter:
- Seed:
0x6e52736ac806831e - Mønster:
/\bcch=([0-9a-f]{5});/
claudeCodeObfuscation.ts
Setter inn en Unicode-sammenføyer uten bredde (U+200D) etter det første tegnet i «sensitive» klientnavn, slik at oppstrømsfiltre ikke kan finne dem med grep. Standard ordliste:
opencode, open-code, cline, roo-cline, roo_cline, cursor, windsurf,
aider, continue.dev, copilot, avante, codecompanion
Brukes på: system-blokker, alt messages[].content og tools[].description / tools[].function.description. Kan overstyres av operatøren via setSensitiveWords().
claudeCodeCompatible.ts — anthropic-compatible-cc-*-leverandører
For tredjeparts Anthropic-reléer som bare godtar trafikk fra «ekte Claude Code»:
CLAUDE_CODE_COMPATIBLE_USER_AGENT = "claude-cli/2.1.258 (external, sdk-cli)"CLAUDE_CODE_COMPATIBLE_STAINLESS_PACKAGE_VERSION = "0.112.1"CLAUDE_CODE_COMPATIBLE_STAINLESS_RUNTIME_VERSION = "v26.3.0"anthropic-beta = "claude-code-20250219,interleaved-thinking-2025-05-14,effort-2025-11-24"som standard- Bryteren «Enable redact-thinking beta» per tilkobling legger til
redact-thinking-2026-02-12når en CC Compatible-oppstrømstjeneste spesifikt krever redigerte resonneringsstrømmer - Bryteren «Enable summarized thinking display» per tilkobling lagrer
providerSpecificData.requestDefaults.summarizeThinkingog legger tildisplay: "summarized"i CC Compatible-resonneringsforespørsler som ikke allerede har angitt en visningsmodus CONTEXT_1M_BETA_HEADER = "context-1m-2025-08-07"(Opus/Sonnet 4.x-familien)- Standardbane:
/v1/messages?beta=true
Beslektede moduler i samme pakke:
claudeCodeConstraints.ts— regler for temperatur + hurtigbufferkontrollclaudeCodeToolRemapper.ts— omtilordning av verktøynavnclaudeCodeExtraRemap.ts— ekstra normalisering av nyttelast
Antigravity Stealth
Antigravity-forespørsler bevarer innringerens tekst byte for byte. OmniRoute setter ikke inn tegn uten bredde i ledetekster og gir heller ikke verktøy nye navn eller injiserer dem for å etterligne en IDE-klient.
antigravityHeaderScrub.ts
Fjerner markører fra Stainless SDK (x-stainless-lang, x-stainless-package-version, x-stainless-os, x-stainless-arch, x-stainless-runtime, x-stainless-runtime-version, x-stainless-timeout, x-stainless-retry-count, x-stainless-helper-method) før videresending.
⚠️ Risiko: ANTIGRAVITY_CREDITS=always (høyrisikoområde for kontosperring)
ANTIGRAVITY_CREDITS=always (brukt av open-sse/executors/antigravity.ts) sender hver eneste forespørsel gjennom Antigravity AI Credit Overages (betalte Google-kreditter), i stedet for å la Googles gratiskvote begrense bruken. Dette er dokumentert som en funksjon, men det er den vanligste rapporterte typen ToS-brudd vi ser — flere Google Ultra-kontoer har blitt sperret med 403 / "service disabled for ToS violation" / insufficient_quota etter å ha kjørt i noen timer med =always.
Håndhevingen oppstrøms skjer på Googles side, og er ikke noe OmniRoute kan forhindre. Navnet på miljøvariabelen og den eksisterende dokumentasjonen får dette til å høres ut som en trygg innstilling å aktivere; det er det ikke.
Hvorfor dette utløser misbruksdeteksjon mer aggressivt enn bruk begrenset til gratiskvoten:
- Vedvarende automatisert forbruk på én enkelt Google-konto flagges annerledes enn når gratiskvoten nås og bruken stopper.
- Kredittoverforbruk har ingen øvre hastighetsgrense, så en feilkonfigurert klient kan bruke flere hundre USD på få minutter og se ut som videresalg av API-nøkler eller bottrafikk.
- Når flere OmniRoute-brukere belaster overforbrukskreditter parallelt fra samme eksterne IP-adresse, forsterkes signalet.
Anbefalt praksis:
- Behold standardinnstillingen
ANTIGRAVITY_CREDITS=off, med mindre operatøren eksplisitt godtar risikoen knyttet til betalte kreditter og kontohåndheving.retrysender først den normale forespørselen og injiserer kreditter maksimalt én gang etter en kvalifiserende kvotefeil av typen 429;alwaysinjiserer kreditter i den første forespørselen. - Fordel belastningen på flere leverandører via Auto-Combo (
model: "auto"ellerkr/glm/etc-combo) i stedet for å overbelaste én enkelt Antigravity-konto. - Angi RPM-grenser per tilkobling på redigeringssiden til Antigravity-leverandøren (Dashboard → Providers → Antigravity → tilkobling → hastighetsgrense). 30–60 RPM er en forsvarlig øvre grense for vedvarende bruk.
- Bruk stabil oppstrømsnettverkstilkobling kontrollert av operatøren, og unngå å dele én konto mellom urelaterte brukere eller arbeidsbelastninger.
- Ved sperring: send en klage via
support.google.com→ «Restore Workspace/Account access» med den nøyaktigequota_exceeded- /service disabled-responsen Google sendte. Gjenoppretting er ikke garantert.
Miljøreferansen dokumenterer konsekvensene for konto og kostnader for hver kredittmodus.
Berøringspunkter:
open-sse/executors/antigravity.ts— leserprocess.env.ANTIGRAVITY_CREDITSsrc/lib/oauth/providers/antigravity.ts— håndtering av legitimasjon- Opprinnelig hendelsesrapport: Discussion #1183
CLI-fingeravtrykksregister — open-sse/config/cliFingerprints.ts
Tabell per leverandør som låser nøyaktig rekkefølge på headere og JSON-felter i forespørselskroppen, registrert fra mitmproxy-sporinger av de offisielle CLI-verktøyene. For øyeblikket registrert: codex, claude, samt profiler utledet under kjøring i providerHeaderProfiles.ts for antigravity og github.
interface CliFingerprint {
headerOrder: string[]; // skiller mellom store og små bokstaver
bodyFieldOrder: string[]; // JSON-nøkler på toppnivå
userAgent?: string | (() => string);
extraHeaders?: Record<string, string>;
}
Aktiver eller deaktiver per leverandør via miljøvariabler (se nedenfor). Når dette er deaktivert, vises headere/nøkler i forespørselskroppen i den rekkefølgen Node/JSON oppga dem — enkelt å identifisere via fingeravtrykk.
MITM-proxy (Antigravity, Linux/macOS/Windows)
For CLI-verktøy der binærfilene ikke kan omdirigeres via OPENAI_BASE_URL, kjører OmniRoute en lokal TLS-terminerende proxy. Endepunktene ligger under src/app/api/cli-tools/antigravity-mitm/.
| Metode | Endepunkt | Formål |
|---|---|---|
| GET | /api/cli-tools/antigravity-mitm |
Status — kjører, pid, dnsConfigured, certExists |
| POST | /api/cli-tools/antigravity-mitm |
Start MITM (krever apiKey + sudoPassword) |
| DELETE | /api/cli-tools/antigravity-mitm |
Stopp MITM |
| GET | /api/cli-tools/antigravity-mitm/alias |
Vis modellaliaser |
| PUT | /api/cli-tools/antigravity-mitm/alias |
Lagre modellaliaser for et verktøy |
Avskåret målvert: daily-cloudcode-pa.googleapis.com (Antigravity sin oppstrømstjeneste).
Oppstartssekvens (src/mitm/manager.ts::startMitm)
- Generer et selvsignert sertifikat via
selfsigned(RSA-2048, SHA-256, 1 år) —cert/generate.ts - Installer sertifikatet i systemets klareringslager —
cert/install.ts - Legg til hosts-oppføringen
127.0.0.1 daily-cloudcode-pa.googleapis.com—dns/dnsConfig.ts - Start
src/mitm/server.cjsmedROUTER_API_KEY+MITM_LOCAL_PORT(standardverdi443) - Lagre PID i
<DATA_DIR>/mitm/.mitm.pid
Dynamisk oppdagelse av klareringslager på Linux — cert/install.ts
getLinuxCertConfig() går gjennom en prioritert liste og velger den første eksisterende katalogen:
| Distribusjonsfamilie | Katalog | Oppdateringskommando |
|---|---|---|
| Debian / Ubuntu | /usr/local/share/ca-certificates |
update-ca-certificates |
| Arch / CachyOS / Manjaro | /etc/ca-certificates/trust-source/anchors |
update-ca-trust |
| Fedora / RHEL / CentOS | /etc/pki/ca-trust/source/anchors |
update-ca-trust |
| openSUSE | /etc/pki/trust/anchors |
update-ca-certificates |
Sertifikatets filnavn: omniroute-mitm.crt. Fingeravtrykk sammenlignes via getCertFingerprint() (SHA-1 av DER).
I tillegg installerer updateNssDatabases() sertifikatet i NSS-databaser per bruker når certutil er tilgjengelig: ~/.pki/nssdb, ~/snap/chromium/.../nssdb, alle Firefox-profiler (inkludert snap), under kallenavnet OmniRoute MITM Root CA.
macOS / Windows
- macOS:
security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain - Windows: privilegert PowerShell →
certutil -addstore Root
Autentisering
Alle MITM-endepunkter krever administrasjonsautentisering (requireCliToolsAuth). Sudo-passordet bufres i modulens omfang (aldri globalThis) og slettes ved stopMitm().
User-Agent-overstyringer — miljøvariabler (.env.example del 12)
| Variabel | Standardverdi |
|---|---|
CLAUDE_USER_AGENT |
claude-cli/2.1.258 (external, cli) |
CODEX_USER_AGENT |
codex-cli/0.149.0 (Windows 10.0.26200; x64) |
GITHUB_USER_AGENT |
GitHubCopilotChat/0.54.0 |
ANTIGRAVITY_USER_AGENT |
antigravity/2.0.1 linux/arm64 google-api-nodejs-client/10.3.0 |
KIRO_USER_AGENT |
AWS-SDK-JS/3.0.0 kiro-ide/1.0.0 |
QODER_USER_AGENT |
Qoder-Cli |
CURSOR_USER_AGENT |
Cursor/3.4 |
Brukes av open-sse/executors/base.ts::buildHeaders() via dynamisk oppslag. Oppdater disse når leverandørene utgir nye CLI-versjoner — utdaterte UA-strenger begynner å bli avvist som utdaterte klienter.
Brytere for CLI-kompatibilitetsmodus (.env.example del 13)
| Variabel | Effekt |
|---|---|
CLI_COMPAT_CODEX=1 |
Codex-fingeravtrykk |
CLI_COMPAT_CLAUDE=1 |
claude-cli-fingeravtrykk |
CLI_COMPAT_GITHUB=1 |
GitHub Copilot Chat-fingeravtrykk |
CLI_COMPAT_ANTIGRAVITY=1 |
Antigravity-fingeravtrykk |
CLI_COMPAT_KIRO=1 |
Kiro |
CLI_COMPAT_CURSOR=1 |
Cursor |
CLI_COMPAT_KIMI_CODING=1 |
Kimi Coding |
CLI_COMPAT_KILOCODE=1 |
KiloCode |
CLI_COMPAT_CLINE=1 |
Cline |
CLI_COMPAT_ALL=1 |
Aktiver alle ovenfor |
Leverandørens IP-adresse bevares alltid — bryteren endrer bare forespørselens representasjon på forbindelsen, den bytter ikke utgående IP-adresse.
Rensing av innkommende headere
OmniRoute fjerner innkommende klientheadere før videresending, slik at en forespørsel som kommer fra Cursor, ikke lekker User-Agent: Cursor/X.Y.Z til en oppstrøms Claude-tjeneste. Se src/shared/constants/upstreamHeaders.ts for blokkeringslisten, som holdes synkronisert med Zod-skjemaene og enhetstestene.
Oppdatering av fingeravtrykk når en leverandør roterer dem
- Fang opp trafikk fra den offisielle CLI-en med
mitmproxy(TLS-avskjæring + dump) - Hent ut JA3/JA4 og den bokstavelige headerrekkefølgen
- Oppdater den relevante
CLI_FINGERPRINTS[...]-oppføringen - Oppdater den samsvarende standardverdien for
*_USER_AGENTi.env.example - Hvis selve TLS-håndtrykket er endret, oppdater den relevante leverandør-wrapperen eller
browser:-alternativet i wreq-js - Kjør de leverandørspesifikke TLS-testene og en manuell kanaritest mot leverandørens aktive tjeneste
- Lever dette i en patch-utgivelse; dokumenter det i
CHANGELOG.md
Tester
open-sse/services/__tests__/claudeTlsClient.test.ts— virkemåten til den delte TLS-wrapperentests/unit/anthropic-cache-fingerprint.test.ts— determinisme for fingeravtrykktests/unit/chatgpt-web-source-retirement.test.ts— den felles stealth-kilden for ChatGPT Web forblir fraværende, mens Codex Web fortsatt er til stede
Se også
- RESILIENCE_GUIDE.md — hva som skjer når en skjult bane får en
403 - TROUBLESHOOTING.md
- ENVIRONMENT.md — fullstendig referanse for miljøvariabler
- CLI-TOOLS.md — operatørvisning av MITM-arbeidsflyten