* 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 (Nederlands)
🌐 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 · 🇳🇴 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
Waarheidsbron:
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/Laatst bijgewerkt: 2026-09-02 — v3.8.51 Doelgroep: Engineers die providerspecifieke stealth-integraties onderhouden.
OmniRoute integreert met providers waarvan de edge-infrastructuur actief niet-officiële clients fingerprint (TLS JA3/JA4, headervolgorde, vorm van de JSON-body, integriteitstokens). Deze pagina documenteert de stealth-oppervlakken die OmniRoute beschikbaar stelt en waar deze zijn geïmplementeerd.
Juridische en ethische kennisgeving
Stealth-functies bestaan zodat OmniRoute kan fungeren als compatibiliteitslaag tussen officiële accounts van gebruikers (Claude Code CLI, Codex, Antigravity, Cursor, enz.) en de uniforme API van OmniRoute. Ze zijn niet bedoeld om fraudedetectie te omzeilen, inloggegevens te delen of de servicevoorwaarden van providers te schenden. De beheerders verwachten dat operators zich houden aan de upstream-servicevoorwaarden waarmee ze bij het aanmaken van accounts hebben ingestemd.
TLS-fingerprintinglaag
open-sse/utils/tlsClient.ts — wreq-js (Chrome 124)
Permanente wreq-js-sessies worden per accountscope en opgeloste proxy lazy aangemaakt. De procesbrede TlsClient-pool bevat maximaal 128 sessies die zich voordoen als Chrome 124 op macOS voor upstreams achter Cloudflare. TlsClient.fetch() stopt veilig met een fout wanneer de native runtime niet beschikbaar is; een aanroeper kan buiten deze wrapper expliciet een fallback selecteren.
- Sessieprofiel:
browser: "chrome_124", os: "macos" - Proxyresolutie (prioriteit):
HTTPS_PROXY→HTTP_PROXY→ALL_PROXY(ook in kleine letters) - Time-out:
TLS_CLIENT_TIMEOUT_MS(overgenomen vanFETCH_TIMEOUT_MS, standaard 600000) - De
wreq-js-respons is compatibel met fetch (headers,text(),json(),clone(),body). - Watchdog voor de eerste byte (
open-sse/utils/tlsFirstByteWatchdog.ts, #12656):TlsClient.fetch()wordt voltooid zodra de upstreamheaders binnenkomen, waardoorTLS_CLIENT_TIMEOUT_MSalleen geen grens kan stellen aan een body die nooit een eerste byte oplevert.guardTlsFirstByte()laat de eersteread()van de body wedijveren metTLS_FIRST_BYTE_WATCHDOG_MS(standaard10000;0schakelt deze uit); een gezonde body blijft onaangetast, terwijl bij een vastgelopen body de wreq-reader wordt geannuleerd en de bestaande TLS-fallbacklogica vanproxyFetchkan terugvallen op de directe/proxydispatcher (een verzoek dat niet veilig opnieuw kan worden afgespeeld, bijvoorbeeld een POST met een body, genereert nog steeds een fout in plaats van stilzwijgend opnieuw te worden geprobeerd).
Transport voor webcookieproviders — wreq-js 3.2.0
open-sse/services/tlsClientBase.ts is de gedeelde adapter voor de vijf gespecialiseerde webcookietransporten hieronder. Elke dunne providerwrapper selecteert een browser-/OS-profiel. De adapter gebruikt de enkele wreq-runtimeloader en transportpool in open-sse/utils/tlsClient.ts, gesleuteld op profiel + OS + opgeloste proxy, terwijl elk verzoek cookieMode: "ephemeral" gebruikt. Accounts en verzoeken delen daardoor verbindingen op transportniveau, maar nooit een wreq-sessie of cookiejar.
| Provider | Profiel | Geëmuleerd OS | Beleid voor einde van stream |
|---|---|---|---|
| Claude | chrome_146 |
Linux | neem [DONE] op |
| Perplexity | firefox_148 |
macOS | neem event: end_of_stream op |
| Grok | chrome_146 |
Linux | sluit [DONE] uit |
| Notion | chrome_146 |
Windows | neem [DONE] op |
| LMArena | chrome_146 |
Windows | geen sentinel; sluit bij native EOF |
- Streaming verwerkt de native
ReadableStreamvan de respons rechtstreeks; er wordt geen tijdelijk bestand of sidecar aangemaakt. - Er worden maximaal 256 initiële bytes geïnspecteerd voordat een stream beschikbaar wordt gesteld. SSE-providers bufferen niet-SSE-fouten; Grok/LMArena zetten Cloudflare-challenges om naar
403en HTML-tussenpagina's naar502. - De native time-out van het verzoek blijft ingekapseld door een absolute harde JS-deadline. Een vastgelopen verzoek maakt alleen het betrokken transport voor profiel/OS/proxy ongeldig en sluit dit voordat het bij het volgende verzoek opnieuw wordt aangemaakt.
- De prioriteit voor proxyresolutie is per aanroep
proxyUrl→ verzoekgebonden account-/dashboardcontext →HTTPS_PROXY/HTTP_PROXY/ALL_PROXY(inclusief varianten in kleine letters). Resolutiefouten stoppen veilig met een fout in plaats van een directe verbinding te laten uitlekken. LMArena voert de resolutie bewust uit tegenarena.ai. byteResponseretourneert een op inhoudstype gebaseerdedata:-URL zonder UTF-8-corruptie.- Fouten zijn
TlsClientUnavailableError(package/add-on niet beschikbaar),TlsClientHangError(deadline overschreden) enWreqTransportCapacityError(de gedeelde foutcode voor sessiecapaciteit) wanneer alle 128 begrensde profiel-/OS-/proxyslots actief zijn of worden gesloten.
De generieke TlsClient-sessie hierboven blijft gespecialiseerd voor permanente, browsergestuurde cookiestatus. Beide paden hergebruiken één gecachte wreq-moduleloader en proceslevenscyclushook; hun pools blijven gescheiden omdat hun cookielevensduren bewust verschillen.
De profielen worden door het vastgezette package ondersteund, maar daadwerkelijke WAF-acceptatie kan onafhankelijk van lokale contracttests veranderen. Valideer wijzigingen in fingerprints met een expliciet geautoriseerd liveaccount voordat je pariteit met een upstreambrowser claimt.
Claude Code Stealth-bundel
Wanneer cliCompatMode is ingeschakeld, past OmniRoute uitgaande Claude-verzoeken zo aan dat ze niet te onderscheiden zijn van claude-cli-verkeer. Drie modules werken hierbij samen:
claudeCodeFingerprint.ts
Berekent de 3 tekens lange cc_version-vingerafdruk die in de factureringsheader is opgenomen:
SHA256(SALT + msg[4] + msg[7] + msg[20] + version)[:3]
FINGERPRINT_SALT = "59cf53e54c78"(hardcoded; komt overeen met de officiële client)- Invoer: tekens op index 4, 7 en 20 van de tekst van het eerste gebruikersbericht + versietekenreeks
- Uitvoer: hexadecimaal voorvoegsel van 3 tekens
claudeCodeCCH.ts (Client Content Hash)
Integriteitscontrole aan de serverzijde die de officiële Claude Code CLI via Bun/Zig berekent. OmniRoute implementeert deze opnieuw met xxhash-wasm:
- Serialiseer de body met de tijdelijke aanduiding
cch=00000; xxhash64(bytes, seed) & 0xFFFFF- Hexadecimale waarde van 5 kleine letters/tekens, links aangevuld met nullen
- Vervang
cch=00000;door het berekende token
Constanten:
- Seed:
0x6e52736ac806831e - Patroon:
/\bcch=([0-9a-f]{5});/
claudeCodeObfuscation.ts
Voegt een Unicode-zero-width joiner (U+200D) toe na het eerste teken van ‘gevoelige’ clientnamen, zodat upstreamfilters er niet met grep naar kunnen zoeken. Standaardwoordenlijst:
opencode, open-code, cline, roo-cline, roo_cline, cursor, windsurf,
aider, continue.dev, copilot, avante, codecompanion
Toegepast op: system-blokken, alle messages[].content en tools[].description / tools[].function.description. Kan door de operator worden overschreven via setSensitiveWords().
claudeCodeCompatible.ts — anthropic-compatible-cc-*-providers
Voor Anthropic-relays van derden die uitsluitend ‘echt Claude Code’-verkeer accepteren:
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"standaard- De schakelaar ‘Enable redact-thinking beta’ per verbinding voegt
redact-thinking-2026-02-12toe wanneer een CC Compatible-upstream specifiek geredigeerde redeneerstreams vereist - De schakelaar ‘Enable summarized thinking display’ per verbinding slaat
providerSpecificData.requestDefaults.summarizeThinkingop en voegtdisplay: "summarized"toe aan CC Compatible-redeneerverzoeken waarvoor nog geen weergavemodus was ingesteld CONTEXT_1M_BETA_HEADER = "context-1m-2025-08-07"(Opus/Sonnet 4.x-familie)- Standaardpad:
/v1/messages?beta=true
Gerelateerde modules in dezelfde bundel:
claudeCodeConstraints.ts— regels voor temperatuur en cachebeheerclaudeCodeToolRemapper.ts— hertoewijzing van toolnamenclaudeCodeExtraRemap.ts— aanvullende normalisatie van de payload
Antigravity Stealth
Antigravity-verzoeken behouden de tekst van de aanroeper byte voor byte. OmniRoute voegt geen zero-width-tekens toe aan prompts en hernoemt of injecteert geen tools om een IDE-client na te bootsen.
antigravityHeaderScrub.ts
Verwijdert Stainless SDK-markeringen (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) voordat het verzoek wordt doorgestuurd.
⚠️ Risico: ANTIGRAVITY_CREDITS=always (hoog risico op accountblokkering)
ANTIGRAVITY_CREDITS=always (gebruikt door open-sse/executors/antigravity.ts) routeert elk verzoek via Antigravity AI Credit Overages (betaalde Google-tegoeden), in plaats van de quota van Googles gratis abonnement als begrenzing te gebruiken. Dit is als functie gedocumenteerd, maar het is veruit de meest voorkomende melding van een ToS-schending die we zien — meerdere Google Ultra-accounts zijn geblokkeerd met 403 / "service disabled for ToS violation" / insufficient_quota nadat ze enkele uren met =always hadden gedraaid.
De upstreamhandhaving vindt plaats aan de kant van Google en kan niet door OmniRoute worden voorkomen. De naam van de omgevingsvariabele en de bestaande documentatie wekken de indruk dat dit een veilige instelling is om in te schakelen; dat is niet zo.
Waarom dit agressievere misbruikdetectie veroorzaakt dan uitsluitend gebruik van het gratis abonnement:
- Aanhoudende geautomatiseerde uitgaven op één Google-account worden anders gemarkeerd dan gebruik waarbij het gratis abonnement het quotum bereikt en vervolgens stopt.
- Overschrijdingen via tegoeden hebben geen snelheidslimiet, waardoor een verkeerd geconfigureerde client binnen enkele minuten voor honderden USD kan verbruiken en op doorverkoop van API-sleutels of botverkeer kan lijken.
- Wanneer meerdere OmniRoute-gebruikers parallel overschrijdingstegoeden gebruiken vanaf hetzelfde externe IP-adres, wordt het signaal versterkt.
Aanbevolen aanpak:
- Behoud de standaardinstelling
ANTIGRAVITY_CREDITS=off, tenzij de operator expliciet het risico van betaalde tegoeden en accounthandhaving accepteert.retryverzendt eerst het normale verzoek en injecteert na een in aanmerking komende quota-429 maximaal één keer tegoeden;alwaysinjecteert tegoeden bij het eerste verzoek. - Verdeel de belasting over providers via Auto-Combo (
model: "auto"ofkr/glm/etc-combo) in plaats van één Antigravity-account volledig te belasten. - Stel RPM-limieten per verbinding in op de bewerkingspagina van de Antigravity-provider (Dashboard → Providers → Antigravity → verbinding → snelheidslimiet). 30–60 RPM is een verdedigbare bovengrens voor langdurig gebruik.
- Gebruik stabiele upstreamnetwerken die door de operator worden beheerd en vermijd het delen van één account tussen niet-gerelateerde gebruikers of workloads.
- Bij blokkering: dien bezwaar in via
support.google.com→ ‘Restore Workspace/Account access’ en voeg de exactequota_exceeded- /service disabled-responsebody toe die Google heeft verzonden. Herstel is niet gegarandeerd.
De omgevingsreferentie documenteert de gevolgen voor het account en de uitgaven van elke tegoedmodus.
Raakvlakken:
open-sse/executors/antigravity.ts— leestprocess.env.ANTIGRAVITY_CREDITSsrc/lib/oauth/providers/antigravity.ts— verwerking van referenties- Oorspronkelijke incidentmelding: Discussion #1183
CLI-fingerprintregister — open-sse/config/cliFingerprints.ts
Tabel per provider waarin de exacte volgorde van headers en JSON-bodyvelden wordt vastgelegd, zoals vastgelegd in mitmproxy-traces van de officiële CLI's. Momenteel geregistreerd: codex, claude, plus tijdens runtime afgeleide profielen in providerHeaderProfiles.ts voor antigravity en github.
interface CliFingerprint {
headerOrder: string[]; // hoofdlettergevoelig
bodyFieldOrder: string[]; // JSON-sleutels op het hoogste niveau
userAgent?: string | (() => string);
extraHeaders?: Record<string, string>;
}
Per provider in- of uitschakelen via omgevingsvariabelen (zie hieronder). Wanneer dit is uitgeschakeld, verschijnen headers/body-sleutels in de volgorde waarin Node/JSON ze heeft aangeleverd — eenvoudig te fingerprinten.
MITM-proxy (Antigravity, Linux/macOS/Windows)
Voor CLI's waarvan de binaire bestanden niet via OPENAI_BASE_URL kunnen worden omgeleid, voert OmniRoute een lokale proxy uit die TLS beëindigt. Endpoints bevinden zich onder src/app/api/cli-tools/antigravity-mitm/.
| Methode | Endpoint | Doel |
|---|---|---|
| GET | /api/cli-tools/antigravity-mitm |
Status — actief, pid, dnsConfigured, certExists |
| POST | /api/cli-tools/antigravity-mitm |
MITM starten (vereist apiKey + sudoPassword) |
| DELETE | /api/cli-tools/antigravity-mitm |
MITM stoppen |
| GET | /api/cli-tools/antigravity-mitm/alias |
Modelaliassen weergeven |
| PUT | /api/cli-tools/antigravity-mitm/alias |
Modelaliassen voor een tool opslaan |
Onderschepte doelhost: daily-cloudcode-pa.googleapis.com (de upstream van Antigravity).
Opstartvolgorde (src/mitm/manager.ts::startMitm)
- Genereer een zelfondertekend certificaat via
selfsigned(RSA-2048, SHA-256, 1 jaar) —cert/generate.ts - Installeer het certificaat in het systeemvertrouwensarchief —
cert/install.ts - Voeg de hosts-vermelding
127.0.0.1 daily-cloudcode-pa.googleapis.comtoe —dns/dnsConfig.ts - Start
src/mitm/server.cjsmetROUTER_API_KEY+MITM_LOCAL_PORT(standaard443) - Sla de PID permanent op in
<DATA_DIR>/mitm/.mitm.pid
Dynamische detectie van het Linux-vertrouwensarchief — cert/install.ts
getLinuxCertConfig() doorloopt een prioriteitenlijst en selecteert de eerste bestaande map:
| Distributiefamilie | Map | Updateopdracht |
|---|---|---|
| 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 |
Certificaatbestandsnaam: omniroute-mitm.crt. Fingerprintvergelijking via getCertFingerprint() (SHA-1 van DER).
Daarnaast installeert updateNssDatabases() het certificaat in NSS-databases per gebruiker wanneer certutil beschikbaar is: ~/.pki/nssdb, ~/snap/chromium/.../nssdb, alle Firefox-profielen (inclusief snap), onder de bijnaam OmniRoute MITM Root CA.
macOS / Windows
- macOS:
security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain - Windows: PowerShell met verhoogde rechten →
certutil -addstore Root
Authenticatie
Alle MITM-endpoints vereisen beheerauthenticatie (requireCliToolsAuth). Het sudo-wachtwoord wordt binnen het modulebereik gecachet (nooit in globalThis) en gewist bij stopMitm().
User-Agent-overschrijvingen — omgevingsvariabelen (.env.example sectie 12)
| Variabele | Standaardwaarde |
|---|---|
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 |
Gebruikt door open-sse/executors/base.ts::buildHeaders() via dynamische opzoeking. Verhoog deze wanneer providers nieuwe CLI-versies uitbrengen — verouderde UA-tekenreeksen worden uiteindelijk geweigerd als verouderde clients.
Schakelaars voor CLI-compatibiliteitsmodus (.env.example sectie 13)
| Variabele | Effect |
|---|---|
CLI_COMPAT_CODEX=1 |
Codex-vingerafdruk |
CLI_COMPAT_CLAUDE=1 |
claude-cli-vingerafdruk |
CLI_COMPAT_GITHUB=1 |
GitHub Copilot Chat-vingerafdruk |
CLI_COMPAT_ANTIGRAVITY=1 |
Antigravity-vingerafdruk |
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 |
Schakel al het bovenstaande in |
Het IP-adres van de provider blijft altijd behouden — de schakelaar wijzigt alleen de representatie van de aanvraag op de verbinding en verandert niet het uitgaande IP-adres.
Opschoning van inkomende headers
OmniRoute verwijdert inkomende clientheaders voordat ze worden doorgestuurd, zodat een aanvraag die van Cursor afkomstig is niet User-Agent: Cursor/X.Y.Z lekt naar een upstream van Claude. Zie src/shared/constants/upstreamHeaders.ts voor de uitsluitingslijst, die synchroon wordt gehouden met de Zod-schema's en unittests.
Vingerafdrukken bijwerken wanneer een provider ze roteert
- Leg officieel CLI-verkeer vast met
mitmproxy(TLS-interceptie + dump) - Extraheer JA3/JA4 en de letterlijke headervolgorde
- Werk de relevante vermelding
CLI_FINGERPRINTS[...]bij - Verhoog de overeenkomende standaardwaarde
*_USER_AGENTin.env.example - Als de TLS-handshake zelf is gewijzigd, werk dan de relevante providerwrapper of de optie
browser:van wreq-js bij - Voer de providerspecifieke TLS-tests en een handmatige canarytest tegen de live provider uit
- Publiceer dit in een patchrelease; documenteer het in
CHANGELOG.md
Tests
open-sse/services/__tests__/claudeTlsClient.test.ts— gedrag van de gedeelde TLS-wrappertests/unit/anthropic-cache-fingerprint.test.ts— determinisme van vingerafdrukkentests/unit/chatgpt-web-source-retirement.test.ts— de gemeenschappelijke stealthbron van ChatGPT Web blijft afwezig, terwijl Codex Web aanwezig blijft
Zie ook
- RESILIENCE_GUIDE.md — wat er gebeurt wanneer een stealth-pad een
403ontvangt - TROUBLESHOOTING.md
- ENVIRONMENT.md — volledig overzicht van omgevingsvariabelen
- CLI-TOOLS.md — operatorweergave van de MITM-workflow