* 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 (Svenska)
🌐 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 · 🇳🇴 no · 🇮🇳 or · 🇮🇳 pa · 🇵🇭 phi · 🇵🇱 pl · 🇵🇹 pt · 🇧🇷 pt-BR · 🇷🇴 ro · 🇷🇺 ru · 🇱🇰 si · 🇸🇰 sk · 🇸🇮 sl · 🇷🇸 sr · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW
Sanningskälla:
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/Senast uppdaterad: 2026-09-02 — v3.8.51 Målgrupp: Utvecklare som underhåller leverantörsspecifika stealth-integrationer.
OmniRoute integreras med leverantörer vars edge-system aktivt skapar fingeravtryck av inofficiella klienter (TLS JA3/JA4, ordning på headers, JSON-brödtextens form, integritetstoken). Den här sidan dokumenterar de stealth-ytor som OmniRoute exponerar och var de är implementerade.
Juridiskt och etiskt meddelande
Stealth-funktionerna finns för att OmniRoute ska kunna fungera som ett kompatibilitetslager mellan användarägda officiella konton (Claude Code CLI, Codex, Antigravity, Cursor osv.) och OmniRoutes enhetliga API. De är inte avsedda för att kringgå bedrägeriidentifiering, dela autentiseringsuppgifter eller bryta mot leverantörernas användarvillkor. Underhållarna förväntar sig att operatörer följer de uppströmsvillkor som de godkände när kontona skapades.
Lager för TLS-fingeravtryck
open-sse/utils/tlsClient.ts — wreq-js (Chrome 124)
Beständiga wreq-js-sessioner skapas lat efter behov per kontoomfattning och matchad proxy. Den
processomfattande TlsClient-poolen innehåller högst 128 sessioner som utger sig för att vara
Chrome 124 på macOS för uppströmsservrar bakom Cloudflare. TlsClient.fetch() avbryter
felsäkert när den inbyggda exekveringsmiljön inte är tillgänglig; en anropare kan uttryckligen välja
en reservlösning utanför denna wrapper.
- Sessionsprofil:
browser: "chrome_124", os: "macos" - Proxyupplösning (prioritetsordning):
HTTPS_PROXY→HTTP_PROXY→ALL_PROXY(även gemener) - Tidsgräns:
TLS_CLIENT_TIMEOUT_MS(ärver frånFETCH_TIMEOUT_MS, standardvärde 600000) wreq-js-svaret är fetch-kompatibelt (headers,text(),json(),clone(),body).- Övervakning av första byte (
open-sse/utils/tlsFirstByteWatchdog.ts, #12656):TlsClient.fetch()slutförs så snart uppströms-headers anländer, vilket innebär att enbartTLS_CLIENT_TIMEOUT_MSinte kan begränsa en brödtext som aldrig ger någon första byte.guardTlsFirstByte()låter brödtextens förstaread()konkurrera motTLS_FIRST_BYTE_WATCHDOG_MS(standardvärde10000,0inaktiverar den); en fungerande brödtext påverkas inte, medan en blockerad brödtext avbryter wreq-läsaren och låter den befintliga TLS-reservlogiken iproxyFetchgå vidare till direkt-/proxydispatchern (en begäran som inte säkert kan spelas upp igen, till exempel en POST med brödtext, genererar fortfarande ett undantag i stället för att tyst göras om).
Transport för leverantörer med webb-cookies — wreq-js 3.2.0
open-sse/services/tlsClientBase.ts är den gemensamma adaptern för de fem specialiserade
webb-cookie-transporterna nedan. Varje tunn leverantörswrapper väljer en webbläsar-/OS-profil.
Adaptern använder den gemensamma wreq-laddaren för exekveringsmiljön och transportpoolen i
open-sse/utils/tlsClient.ts, med profil + OS + matchad proxy som nyckel, medan varje begäran
använder cookieMode: "ephemeral". Konton och begäranden delar därför anslutningar på
transportnivå, men aldrig en wreq-session eller cookie-behållare.
| Leverantör | Profil | Emulerat OS | Policy för strömmens EOF |
|---|---|---|---|
| Claude | chrome_146 |
Linux | inkludera [DONE] |
| Perplexity | firefox_148 |
macOS | inkludera event: end_of_stream |
| Grok | chrome_146 |
Linux | exkludera [DONE] |
| Notion | chrome_146 |
Windows | inkludera [DONE] |
| LMArena | chrome_146 |
Windows | ingen sentinel; stäng vid inbyggt EOF |
- Strömning använder det inbyggda svarets
ReadableStreamdirekt; ingen temporär fil eller sidoprocess skapas. - Upp till 256 inledande byte inspekteras innan en ström exponeras. SSE-leverantörer buffrar fel
som inte är SSE; Grok/LMArena mappar Cloudflare-utmaningar till
403och HTML-mellansidor till502. - Den inbyggda tidsgränsen för begäran omges fortfarande av en absolut hård JS-tidsgräns. Ett hängningstillstånd ogiltigförklarar och stänger endast den berörda profil-/OS-/proxytransporten innan den återskapas av nästa begäran.
- Prioritetsordningen för proxyupplösning är
proxyUrlper anrop → kontots/instrumentpanelens kontext för begäran →HTTPS_PROXY/HTTP_PROXY/ALL_PROXY(inklusive varianter med gemener). Upplösningsfel avbryter felsäkert i stället för att läcka en direktanslutning. LMArena gör avsiktligt upplösningen motarena.ai. byteResponsereturnerar en innehållstypaddata:-URL utan UTF-8-korruption.- Felen är
TlsClientUnavailableError(paket/tillägg är inte tillgängligt),TlsClientHangError(tidsgränsen överskreds) ochWreqTransportCapacityError(den gemensamma felkoden för sessionskapacitet) när samtliga 128 begränsade profil-/OS-/proxyplatser är aktiva eller håller på att stängas.
Den generiska TlsClient-sessionen ovan förblir specialiserad för beständigt webbläsarbaserat
cookie-tillstånd. Båda vägarna återanvänder en gemensam cachad wreq-modulladdare och hook för
processlivscykeln; deras pooler förblir separata eftersom deras cookie-livslängder avsiktligt
skiljer sig åt.
Profilerna stöds av det låsta paketet, men verklig WAF-acceptans kan förändras oberoende av lokala kontraktstester. Validera ändringar av fingeravtryck mot ett uttryckligen auktoriserat aktivt konto innan paritet med en uppströmswebbläsare hävdas.
Claude Code Stealth-paket
När cliCompatMode är aktiverat omformar OmniRoute utgående Claude-förfrågningar så att de inte går att skilja från claude-cli-trafik. Tre moduler samarbetar:
claudeCodeFingerprint.ts
Beräknar det 3 tecken långa cc_version-fingeravtrycket som bäddas in i faktureringshuvudet:
SHA256(SALT + msg[4] + msg[7] + msg[20] + version)[:3]
FINGERPRINT_SALT = "59cf53e54c78"(hårdkodat; matchar den officiella klienten)- Indata: tecknen vid index 4, 7 och 20 i texten i det första användarmeddelandet + versionssträngen
- Utdata: hexadecimalt prefix med 3 tecken
claudeCodeCCH.ts (Client Content Hash)
Integritetskontroll på serversidan som den officiella Claude Code CLI-klienten beräknar via Bun/Zig. OmniRoute implementerar den på nytt med xxhash-wasm:
- Serialisera innehållet med platshållaren
cch=00000; xxhash64(bytes, seed) & 0xFFFFF- Utfyllt med inledande nollor till 5 gemena hexadecimala tecken
- Ersätt
cch=00000;med den beräknade tokenen
Konstanter:
- Seed:
0x6e52736ac806831e - Mönster:
/\bcch=([0-9a-f]{5});/
claudeCodeObfuscation.ts
Infogar en Unicode-sammanfogare utan bredd (U+200D) efter det första tecknet i ”känsliga” klientnamn så att uppströmsfilter inte kan hitta dem med grep. Standardordlista:
opencode, open-code, cline, roo-cline, roo_cline, cursor, windsurf,
aider, continue.dev, copilot, avante, codecompanion
Tillämpas på: system-block, allt messages[].content samt tools[].description / tools[].function.description. Kan åsidosättas av operatören via setSensitiveWords().
claudeCodeCompatible.ts — anthropic-compatible-cc-*-leverantörer
För Anthropic-reläer från tredje part som endast accepterar ”äkta Claude Code”-trafik:
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- Växlingsknappen ”Enable redact-thinking beta” per anslutning lägger till
redact-thinking-2026-02-12när en CC Compatible-uppström specifikt kräver redigerade resonemangsströmmar - Växlingsknappen ”Enable summarized thinking display” per anslutning lagrar
providerSpecificData.requestDefaults.summarizeThinkingoch lägger tilldisplay: "summarized"i CC Compatible-resonemangsförfrågningar som inte redan har angett ett visningsläge CONTEXT_1M_BETA_HEADER = "context-1m-2025-08-07"(Opus/Sonnet 4.x-familjen)- Standardsökväg:
/v1/messages?beta=true
Närliggande moduler i samma paket:
claudeCodeConstraints.ts— regler för temperatur och cachekontrollclaudeCodeToolRemapper.ts— ommappning av verktygsnamnclaudeCodeExtraRemap.ts— extra normalisering av nyttolast
Antigravity Stealth
Antigravity-förfrågningar bevarar anroparens text byte för byte. OmniRoute infogar inte tecken utan bredd i promptar och byter inte namn på eller injicerar verktyg för att efterlikna en IDE-klient.
antigravityHeaderScrub.ts
Tar bort Stainless SDK-markörer (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öre vidarebefordran.
⚠️ Risk: ANTIGRAVITY_CREDITS=always (högriskområde för kontoavstängning)
ANTIGRAVITY_CREDITS=always (används av open-sse/executors/antigravity.ts) dirigerar varje förfrågan genom Antigravity AI Credit Overages (betalda Google-krediter) i stället för att låta Googles kostnadsfria kvot begränsa användningen. Detta är dokumenterat som en funktion, men det är den överlägset vanligaste rapporten om brott mot användarvillkoren som vi ser — flera Google Ultra-konton har stängts av med 403 / "service disabled for ToS violation" / insufficient_quota efter att ha körts i några timmar med =always.
Kontrollen uppströms sker på Googles sida och är inget som OmniRoute kan förhindra. Miljövariabelns namn och den befintliga dokumentationen får det att låta som en säker inställning att aktivera, men det är det inte.
Varför detta utlöser missbruksdetektering mer aggressivt än användning enbart inom gratiskvoten:
- Ihållande automatiserade utgifter på ett enda Google-konto flaggas annorlunda än när gratiskvoten nås och användningen stoppas.
- Kreditöverskridanden saknar hastighetstak, så en felkonfigurerad klient kan förbruka flera hundra USD på några minuter och se ut som återförsäljning av API-nycklar eller bottrafik.
- Signalen förstärks när flera OmniRoute-användare parallellt nyttjar överskridandekrediter från samma externa IP-adress.
Rekommenderat förhållningssätt:
- Behåll standardvärdet
ANTIGRAVITY_CREDITS=offom inte operatören uttryckligen accepterar riskerna med betalda krediter och kontoåtgärder.retryskickar den normala förfrågan först och injicerar krediter högst en gång efter ett berättigat kvotfel av typen 429;alwaysinjicerar krediter i den första förfrågan. - Fördela belastningen mellan leverantörer via Auto-Combo (
model: "auto"ellerkr/glm/etc-combo) i stället för att överbelasta ett enskilt Antigravity-konto. - Ange RPM-gränser per anslutning på Antigravity-leverantörens redigeringssida (Dashboard → Providers → Antigravity → anslutning → hastighetsgräns). 30–60 RPM är en försvarbar övre gräns för ihållande användning.
- Använd stabil uppströmsnätverkstrafik som kontrolleras av operatören och undvik att dela ett konto mellan orelaterade användare eller arbetsbelastningar.
- Vid avstängning: överklaga via
support.google.com→ ”Restore Workspace/Account access” och inkludera exakt den svarstext förquota_exceeded/service disabledsom Google skickade. Återställning kan inte garanteras.
Miljöreferensen dokumenterar konto- och kostnadskonsekvenserna för varje kreditläge.
Berörda punkter:
open-sse/executors/antigravity.ts— läserprocess.env.ANTIGRAVITY_CREDITSsrc/lib/oauth/providers/antigravity.ts— autentiseringsuppgifter och deras hantering- Ursprunglig incidentrapport: diskussion #1183
CLI-fingeravtrycksregister — open-sse/config/cliFingerprints.ts
Tabell per leverantör som låser den exakta ordningen på headers och fält i JSON-brödtexten, hämtad från mitmproxy-spårningar av de officiella CLI-verktygen. För närvarande registrerade: codex, claude, samt profiler som härleds vid körning i providerHeaderProfiles.ts för antigravity och github.
interface CliFingerprint {
headerOrder: string[]; // skiftlägeskänslig
bodyFieldOrder: string[]; // JSON-nycklar på toppnivå
userAgent?: string | (() => string);
extraHeaders?: Record<string, string>;
}
Aktivera eller inaktivera per leverantör via miljövariabler (se nedan). När detta är inaktiverat visas headers/brödtextnycklar i den ordning som Node/JSON gav dem — enkelt att skapa fingeravtryck från.
MITM-proxy (Antigravity, Linux/macOS/Windows)
För CLI-verktyg vars binärfiler inte kan omdirigeras via OPENAI_BASE_URL kör OmniRoute en lokal TLS-terminerande proxy. Slutpunkterna finns under src/app/api/cli-tools/antigravity-mitm/.
| Metod | Slutpunkt | Syfte |
|---|---|---|
| GET | /api/cli-tools/antigravity-mitm |
Status — körs, pid, dnsConfigured, certExists |
| POST | /api/cli-tools/antigravity-mitm |
Starta MITM (kräver apiKey + sudoPassword) |
| DELETE | /api/cli-tools/antigravity-mitm |
Stoppa MITM |
| GET | /api/cli-tools/antigravity-mitm/alias |
Lista modellalias |
| PUT | /api/cli-tools/antigravity-mitm/alias |
Spara modellalias för ett verktyg |
Målvärd som avlyssnas: daily-cloudcode-pa.googleapis.com (Antigravitys uppströmsserver).
Startsekvens (src/mitm/manager.ts::startMitm)
- Generera ett självsignerat certifikat via
selfsigned(RSA-2048, SHA-256, 1 år) —cert/generate.ts - Installera certifikatet i systemets betrodda certifikatarkiv —
cert/install.ts - Lägg till hosts-posten
127.0.0.1 daily-cloudcode-pa.googleapis.com—dns/dnsConfig.ts - Starta
src/mitm/server.cjsmedROUTER_API_KEY+MITM_LOCAL_PORT(standardvärde443) - Spara PID i
<DATA_DIR>/mitm/.mitm.pid
Dynamisk identifiering av betrodda certifikatarkiv i Linux — cert/install.ts
getLinuxCertConfig() går igenom en prioriteringslista och väljer den första befintliga katalogen:
| Distributionsfamilj | Katalog | Uppdateringskommando |
|---|---|---|
| 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 |
Certifikatets filnamn: omniroute-mitm.crt. Fingeravtrycksmatchning via getCertFingerprint() (SHA-1 av DER).
Dessutom installerar updateNssDatabases() certifikatet i NSS-databaser per användare när certutil är tillgängligt: ~/.pki/nssdb, ~/snap/chromium/.../nssdb, alla Firefox-profiler (inklusive snap), under smeknamnet OmniRoute MITM Root CA.
macOS / Windows
- macOS:
security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain - Windows: PowerShell med förhöjda behörigheter →
certutil -addstore Root
Autentisering
Alla MITM-slutpunkter kräver hanteringsautentisering (requireCliToolsAuth). Sudo-lösenordet cachelagras inom modulens omfång (aldrig i globalThis) och rensas vid stopMitm().
Åsidosättningar av User-Agent — miljövariabler (.env.example avsnitt 12)
| Variabel | Standardvärde |
|---|---|
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 |
Används av open-sse/executors/base.ts::buildHeaders() via dynamisk uppslagning. Uppdatera dessa när leverantörer släpper nya CLI-versioner — inaktuella UA-strängar börjar avvisas som föråldrade klienter.
Växlar för CLI-kompatibilitetsläge (.env.example avsnitt 13)
| Variabel | Effekt |
|---|---|
CLI_COMPAT_CODEX=1 |
Codex-fingeravtryck |
CLI_COMPAT_CLAUDE=1 |
claude-cli-fingeravtryck |
CLI_COMPAT_GITHUB=1 |
GitHub Copilot Chat-fingeravtryck |
CLI_COMPAT_ANTIGRAVITY=1 |
Antigravity-fingeravtryck |
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 |
Aktivera alla ovanstående |
Leverantörens IP-adress bevaras alltid — växeln ändrar endast begärans representation på protokollnivå; den byter inte utgående IP-adress.
Sanering av inkommande huvuden
OmniRoute rensar inkommande klienthuvuden före vidarebefordran, så att en begäran som kommer från Cursor inte läcker User-Agent: Cursor/X.Y.Z till en Claude-uppströmsserver. Se src/shared/constants/upstreamHeaders.ts för spärrlistan, som hålls synkroniserad med Zod-schemana och enhetstesterna.
Uppdatera fingeravtryck när en leverantör byter dem
- Samla in trafik från det officiella CLI-verktyget med
mitmproxy(TLS-avlyssning + dump) - Extrahera JA3/JA4 och den exakta ordningen på huvudena
- Uppdatera den relevanta posten i
CLI_FINGERPRINTS[...] - Uppdatera det matchande standardvärdet för
*_USER_AGENTi.env.example - Om själva TLS-handskakningen har ändrats, uppdatera den relevanta leverantörswrappern eller alternativet
browser:för wreq-js - Kör de leverantörsspecifika TLS-testerna och ett manuellt kanarietest mot den aktiva leverantören
- Leverera i en patchversion; dokumentera i
CHANGELOG.md
Tester
open-sse/services/__tests__/claudeTlsClient.test.ts— beteende för den delade TLS-wrapperntests/unit/anthropic-cache-fingerprint.test.ts— determinism för fingeravtrycktests/unit/chatgpt-web-source-retirement.test.ts— den gemensamma stealth-källan för ChatGPT Web förblir frånvarande medan Codex Web finns kvar
Se även
- RESILIENCE_GUIDE.md — vad som händer när en dold sökväg får en
403 - TROUBLESHOOTING.md
- ENVIRONMENT.md — fullständig referens för miljövariabler
- CLI-TOOLS.md — operatörsvy över MITM-arbetsflödet