* 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.
29 KiB
Stealth Guide (العربية)
🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇦🇿 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 · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW
مصدر الحقيقة:
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/آخر تحديث: 2026-09-02 — v3.8.51 الجمهور المستهدف: المهندسون المسؤولون عن صيانة عمليات التكامل التخفيّة الخاصة بكل مزوّد.
يتكامل OmniRoute مع مزوّدين تعمل واجهاتهم الطرفية على أخذ بصمات نشطة للعملاء غير الرسميين (TLS JA3/JA4، وترتيب الترويسات، وبنية جسم JSON، ورموز التكامل). توثّق هذه الصفحة أسطح التخفي التي يتيحها OmniRoute ومواضع تنفيذها.
إشعار قانوني وأخلاقي
توجد ميزات التخفي لكي يتمكن OmniRoute من العمل كطبقة توافق بين الحسابات الرسمية المملوكة للمستخدمين (Claude Code CLI، وCodex، وAntigravity، وCursor، وغيرها) وواجهة API الموحّدة لـ OmniRoute. وهي ليست مخصّصة للتحايل على اكتشاف الاحتيال، أو مشاركة بيانات الاعتماد، أو انتهاك شروط خدمة المزوّد. يتوقع المشرفون من المشغّلين الالتزام بشروط خدمة الجهات المنبع التي وافقوا عليها عند إنشاء الحسابات.
طبقة أخذ بصمات TLS
open-sse/utils/tlsClient.ts — wreq-js (Chrome 124)
تُنشأ جلسات wreq-js الدائمة عند الحاجة لكل نطاق حساب ووكيل محلول. يحتفظ
TlsClient على مستوى العملية بمجمّع لا يتجاوز 128 جلسة تنتحل هوية Chrome 124 على macOS لدى
الجهات المنبع الواقعة خلف Cloudflare. يفشل TlsClient.fetch() بشكل مغلق عندما تكون بيئة التشغيل
الأصلية غير متاحة؛ ويمكن للجهة المستدعية اختيار مسار احتياطي صراحةً خارج هذا الغلاف.
- ملف تعريف الجلسة:
browser: "chrome_124", os: "macos" - حلّ الوكيل (حسب الأولوية):
HTTPS_PROXY←HTTP_PROXY←ALL_PROXY(وكذلك الصيغ ذات الأحرف الصغيرة) - المهلة:
TLS_CLIENT_TIMEOUT_MS(ترث منFETCH_TIMEOUT_MS، والقيمة الافتراضية 600000) - استجابة
wreq-jsمتوافقة مع fetch (headers، وtext()، وjson()، وclone()، وbody). - مراقب البايت الأول (
open-sse/utils/tlsFirstByteWatchdog.ts، #12656): يُحلّTlsClient.fetch()بمجرد وصول ترويسات الجهة المنبع، ولذلك لا يستطيعTLS_CLIENT_TIMEOUT_MSوحده فرض حد زمني على جسم لا يُنتج بايته الأول أبدًا. يجعلguardTlsFirstByte()أول استدعاءread()للجسم يتسابق معTLS_FIRST_BYTE_WATCHDOG_MS(القيمة الافتراضية10000، وتعطّله القيمة0)؛ ولا يتأثر الجسم السليم، بينما يؤدي الجسم المتوقف إلى إلغاء قارئ wreq ويسمح لمنطق الرجوع الاحتياطي الحالي لـ TLS فيproxyFetchبالانتقال إلى موزّع الاتصال المباشر/عبر الوكيل (أما الطلب غير الآمن لإعادة الإرسال، مثل طلب POST ذي جسم، فسيظل يرمي خطأً بدل إعادة محاولته بصمت).
نقل مزوّدي ملفات تعريف ارتباط الويب — wreq-js 3.2.0
يمثّل open-sse/services/tlsClientBase.ts المحوّل المشترك لوسائل نقل ملفات تعريف ارتباط الويب
الخمس المتخصصة أدناه. يختار كل غلاف رفيع خاص بمزوّد ملف تعريف متصفح/نظام تشغيل. يستخدم المحوّل
محمّل بيئة تشغيل wreq الوحيد ومجمّع النقل في open-sse/utils/tlsClient.ts، مع الفهرسة حسب
ملف التعريف + نظام التشغيل + الوكيل المحلول، بينما يستخدم كل طلب cookieMode: "ephemeral".
ولذلك تشترك الحسابات والطلبات في اتصالات مستوى النقل، لكنها لا تشترك مطلقًا في جلسة wreq أو
مخزن ملفات تعريف ارتباط.
| المزوّد | ملف التعريف | نظام التشغيل المحاكى | سياسة نهاية تدفق EOF |
|---|---|---|---|
| Claude | chrome_146 |
Linux | تضمين [DONE] |
| Perplexity | firefox_148 |
macOS | تضمين event: end_of_stream |
| Grok | chrome_146 |
Linux | استبعاد [DONE] |
| Notion | chrome_146 |
Windows | تضمين [DONE] |
| LMArena | chrome_146 |
Windows | بلا علامة حارسة؛ الإغلاق عند EOF أصلي |
- يستهلك البث
ReadableStreamللاستجابة الأصلية مباشرةً؛ ولا يُنشأ أي ملف مؤقت أو عملية جانبية. - يُفحص ما يصل إلى 256 بايت أولية قبل إتاحة التدفق. يخزّن مزوّدو SSE الأخطاء غير التابعة لـ SSE
مؤقتًا؛ ويحوّل Grok/LMArena تحديات Cloudflare إلى
403وصفحات HTML الاعتراضية إلى502. - تظل مهلة الطلب الأصلية مغلّفة بموعد نهائي مطلق صارم في JS. يؤدي التعليق إلى إبطال وإغلاق وسيلة النقل المتأثرة فقط لملف التعريف/نظام التشغيل/الوكيل، قبل أن يعيد الطلب التالي إنشاءها.
- تكون أولوية حلّ الوكيل كالتالي:
proxyUrlالخاص بكل استدعاء ← سياق الحساب/لوحة المعلومات الخاص بالطلب ←HTTPS_PROXY/HTTP_PROXY/ALL_PROXY(بما في ذلك الصيغ ذات الأحرف الصغيرة). تفشل أخطاء الحلّ بشكل مغلق بدل تسريب اتصال مباشر. يتعمّد LMArena إجراء الحلّ مقابلarena.ai. - يعيد
byteResponseعنوان URL من نوعdata:محددًا بنوع المحتوى من دون إفساد UTF-8. - الأخطاء هي
TlsClientUnavailableError(عدم توفر الحزمة/الملحق)، وTlsClientHangError(تجاوز الموعد النهائي)، وWreqTransportCapacityError(رمز خطأ سعة الجلسات المشتركة) عندما تكون جميع خانات ملف التعريف/نظام التشغيل/الوكيل المحدودة البالغ عددها 128 نشطة أو قيد الإغلاق.
تظل جلسة TlsClient العامة أعلاه متخصصة في حالة ملفات تعريف الارتباط الدائمة المدعومة بالمتصفح.
يعيد المساران استخدام محمّل واحد مخزّن مؤقتًا لوحدة wreq وخطاف دورة حياة العملية؛ وتظل مجمّعاتهما
منفصلة لأن مدد صلاحية ملفات تعريف الارتباط فيهما مختلفة عمدًا.
تدعم الحزمة المثبّتة ملفات التعريف، لكن قبول WAF الفعلي قد يتغير بصورة مستقلة عن اختبارات العقود المحلية. تحقّق من تغييرات البصمة باستخدام حساب فعلي مصرّح به صراحةً قبل الادعاء بتحقيق التكافؤ مع متصفح الجهة المنبع.
حزمة التخفي لـ Claude Code
عندما يكون cliCompatMode مفعّلًا، يعيد OmniRoute تشكيل طلبات Claude الصادرة بحيث لا يمكن تمييزها عن حركة مرور claude-cli. تتعاون ثلاث وحدات:
claudeCodeFingerprint.ts
تحسب بصمة cc_version المكوّنة من 3 أحرف والمضمّنة في ترويسة الفوترة:
SHA256(SALT + msg[4] + msg[7] + msg[20] + version)[:3]
FINGERPRINT_SALT = "59cf53e54c78"(مضمّنة مباشرةً؛ تطابق العميل الرسمي)- المدخلات: الأحرف الموجودة عند الفهارس 4 و7 و20 من نص رسالة المستخدم الأولى + سلسلة الإصدار
- المخرجات: بادئة سداسية عشرية مكوّنة من 3 أحرف
claudeCodeCCH.ts (تجزئة محتوى العميل)
فحص تكامل من جانب الخادم يحسبه عميل Claude Code CLI الرسمي عبر Bun/Zig. يعيد OmniRoute تنفيذه باستخدام xxhash-wasm:
- إجراء تسلسل للنص مع العنصر النائب
cch=00000; xxhash64(bytes, seed) & 0xFFFFF- قيمة سداسية عشرية صغيرة الأحرف مكوّنة من 5 أحرف ومكمّلة بأصفار
- استبدال
cch=00000;بالرمز المحسوب
الثوابت:
- البذرة:
0x6e52736ac806831e - النمط:
/\bcch=([0-9a-f]{5});/
claudeCodeObfuscation.ts
تُدرج واصلًا بعرض صفري من Unicode (U+200D) بعد الحرف الأول من أسماء العملاء «الحساسة» حتى لا تتمكن مرشحات المنبع من العثور عليها باستخدام grep. قائمة الكلمات الافتراضية:
opencode, open-code, cline, roo-cline, roo_cline, cursor, windsurf,
aider, continue.dev, copilot, avante, codecompanion
يُطبّق على: كتل system، وكل messages[].content، وtools[].description / tools[].function.description. يمكن للمشغّل تجاوز القائمة عبر setSensitiveWords().
claudeCodeCompatible.ts — موفّرو anthropic-compatible-cc-*
لخدمات ترحيل Anthropic التابعة لجهات خارجية التي لا تقبل سوى حركة مرور «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" - يضيف مفتاح التبديل «Enable redact-thinking beta» الخاص بكل اتصال القيمة
redact-thinking-2026-02-12عندما يتطلب منبع متوافق مع CC تحديدًا تدفقات تفكير منقّحة - يخزّن مفتاح التبديل «Enable summarized thinking display» الخاص بكل اتصال القيمة
providerSpecificData.requestDefaults.summarizeThinking، ويضيفdisplay: "summarized"إلى طلبات التفكير المتوافقة مع CC التي لم تحدد وضع عرض مسبقًا CONTEXT_1M_BETA_HEADER = "context-1m-2025-08-07"(عائلة Opus/Sonnet 4.x)- المسار الافتراضي:
/v1/messages?beta=true
الوحدات الشقيقة ضمن الحزمة نفسها:
claudeCodeConstraints.ts— قواعد درجة الحرارة والتحكم في ذاكرة التخزين المؤقتclaudeCodeToolRemapper.ts— إعادة تعيين أسماء الأدواتclaudeCodeExtraRemap.ts— تسوية إضافية للحمولة
التخفي في Antigravity
تحافظ طلبات Antigravity على نص المستدعي بايتًا ببايت. لا يُدرج OmniRoute أحرفًا بعرض صفري في المطالبات، ولا يعيد تسمية الأدوات أو يحقنها لتقليد عميل IDE.
antigravityHeaderScrub.ts
يزيل علامات 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) قبل إعادة التوجيه.
⚠️ مخاطرة: ANTIGRAVITY_CREDITS=always (بؤرة لحظر الحسابات)
توجّه القيمة ANTIGRAVITY_CREDITS=always (التي يستهلكها open-sse/executors/antigravity.ts) كل طلب عبر تجاوزات رصيد Antigravity AI (أرصدة Google مدفوعة) بدلًا من السماح لحصة المستوى المجاني من Google بالتحكم في الطلبات. هذا موثّق بوصفه ميزة، لكنه البلاغ الأكثر شيوعًا على الإطلاق بشأن انتهاك شروط الخدمة الذي نراه — فقد حُظرت عدة حسابات Google Ultra مع ظهور 403 / "service disabled for ToS violation" / insufficient_quota بعد التشغيل لبضع ساعات باستخدام =always.
يتم الإنفاذ في المنبع من جانب Google، وليس أمرًا يستطيع OmniRoute منعه. يجعل اسم متغير البيئة والمستندات الحالية الأمر يبدو كأنه إعداد آمن يمكن تفعيله؛ لكنه ليس كذلك.
لماذا يستدعي هذا اكتشاف إساءة الاستخدام بصورة أكثر صرامة من استخدام المستوى المجاني فقط:
- يُصنّف الإنفاق الآلي المستمر على حساب Google واحد بصورة مختلفة عن بلوغ حصة المستوى المجاني ثم التوقف.
- لا يوجد سقف لمعدل تجاوزات الرصيد، لذا يمكن لعميل ذي إعدادات خاطئة استهلاك عدة مئات من الدولارات خلال دقائق، والظهور كما لو كان يعيد بيع مفتاح API أو يولّد حركة مرور آلية.
- يؤدي استخدام عدة مستخدمين لـ OmniRoute أرصدة التجاوز بالتوازي من عنوان IP خارجي واحد إلى تضخيم الإشارة.
الوضعية الموصى بها:
- أبقِ القيمة الافتراضية
ANTIGRAVITY_CREDITS=offما لم يقبل المشغّل صراحةً مخاطر الرصيد المدفوع وإنفاذ الإجراءات على الحساب. ترسلretryالطلب العادي أولًا ولا تحقن الأرصدة أكثر من مرة واحدة بعد استجابة حصة مؤهلة بالحالة 429؛ بينما تحقنalwaysالأرصدة في الطلب الأول. - وزّع الحمل بين الموفّرين عبر Auto-Combo (
model: "auto"أو توليفةkr/glm/etc) بدلًا من إشباع حساب Antigravity واحد. - اضبط حدود RPM لكل اتصال في صفحة تعديل موفّر Antigravity (Dashboard → Providers → Antigravity → الاتصال → حد المعدل). يُعد 30–60 RPM حدًا أعلى يمكن الدفاع عنه للاستخدام المستمر.
- استخدم شبكة منبع مستقرة يتحكم بها المشغّل وتجنّب مشاركة حساب واحد بين مستخدمين أو أعباء عمل غير مترابطة.
- في حال الحظر: قدّم اعتراضًا عبر
support.google.com← «Restore Workspace/Account access»، مع نص استجابةquota_exceeded/service disabledالدقيق الذي أرسلته Google. استعادة الحساب غير مضمونة.
يوثّق مرجع البيئة الآثار المترتبة على الحساب والإنفاق لكل وضع من أوضاع الأرصدة.
نقاط التماس:
open-sse/executors/antigravity.ts— يقرأprocess.env.ANTIGRAVITY_CREDITSsrc/lib/oauth/providers/antigravity.ts— توصيل بيانات الاعتماد- تقرير الحادثة الأصلي: المناقشة #1183
سجل بصمات CLI — open-sse/config/cliFingerprints.ts
جدول خاص بكل مزوّد يثبّت الترتيب الدقيق للترويسات وترتيب حقول جسم JSON، كما جرى التقاطهما من سجلات mitmproxy الخاصة بأدوات CLI الرسمية. الأدوات المسجّلة حاليًا: codex وclaude، بالإضافة إلى ملفات التعريف المشتقة في وقت التشغيل ضمن providerHeaderProfiles.ts لكل من antigravity وgithub.
interface CliFingerprint {
headerOrder: string[]; // حساس لحالة الأحرف
bodyFieldOrder: string[]; // مفاتيح JSON ذات المستوى الأعلى
userAgent?: string | (() => string);
extraHeaders?: Record<string, string>;
}
يمكن التبديل لكل مزوّد عبر متغيرات البيئة (انظر أدناه). عند التعطيل، تظهر الترويسات/مفاتيح الجسم بأي ترتيب يوفّره Node/JSON — ما يجعل اكتشاف البصمة سهلًا.
وكيل MITM (Antigravity، وLinux/macOS/Windows)
بالنسبة إلى أدوات CLI التي لا يمكن إعادة توجيه ملفاتها التنفيذية عبر OPENAI_BASE_URL، يشغّل OmniRoute وكيلًا محليًا ينهي اتصال TLS. توجد نقاط النهاية ضمن src/app/api/cli-tools/antigravity-mitm/.
| الطريقة | نقطة النهاية | الغرض |
|---|---|---|
| GET | /api/cli-tools/antigravity-mitm |
الحالة — التشغيل، pid، dnsConfigured، certExists |
| POST | /api/cli-tools/antigravity-mitm |
بدء MITM (يتطلب apiKey + sudoPassword) |
| DELETE | /api/cli-tools/antigravity-mitm |
إيقاف MITM |
| GET | /api/cli-tools/antigravity-mitm/alias |
عرض الأسماء البديلة للنماذج |
| PUT | /api/cli-tools/antigravity-mitm/alias |
حفظ الأسماء البديلة للنماذج لأداة |
المضيف المستهدف اعتراضه: daily-cloudcode-pa.googleapis.com (الخادم الرئيسي لـ Antigravity).
تسلسل البدء (src/mitm/manager.ts::startMitm)
- إنشاء شهادة موقّعة ذاتيًا عبر
selfsigned(RSA-2048، SHA-256، سنة واحدة) —cert/generate.ts - تثبيت الشهادة في مخزن الثقة الخاص بالنظام —
cert/install.ts - إضافة إدخال المضيفين
127.0.0.1 daily-cloudcode-pa.googleapis.com—dns/dnsConfig.ts - تشغيل
src/mitm/server.cjsمعROUTER_API_KEY+MITM_LOCAL_PORT(القيمة الافتراضية443) - حفظ PID في
<DATA_DIR>/mitm/.mitm.pid
الاكتشاف الديناميكي لمخزن الثقة في Linux — cert/install.ts
تمرّ الدالة getLinuxCertConfig() عبر قائمة أولويات وتختار أول دليل موجود:
| عائلة التوزيعة | الدليل | أمر التحديث |
|---|---|---|
| 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 |
اسم ملف الشهادة: omniroute-mitm.crt. تتم مطابقة البصمة عبر getCertFingerprint() (SHA-1 لبيانات DER).
بالإضافة إلى ذلك، تثبّت updateNssDatabases() الشهادة في قواعد بيانات NSS الخاصة بكل مستخدم عندما تكون certutil متاحة: ~/.pki/nssdb، و~/snap/chromium/.../nssdb، وجميع ملفات تعريف Firefox (بما فيها snap)، تحت الاسم المستعار OmniRoute MITM Root CA.
macOS / Windows
- macOS:
security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain - Windows: PowerShell بصلاحيات مرتفعة →
certutil -addstore Root
المصادقة
تتطلب جميع نقاط نهاية MITM مصادقة إدارية (requireCliToolsAuth). تُخزّن كلمة مرور sudo مؤقتًا ضمن نطاق الوحدة (وليس في globalThis مطلقًا)، وتُمسح عند استدعاء stopMitm().
تجاوزات وكيل المستخدم — متغيرات البيئة (القسم 12 من .env.example)
| المتغير | القيمة الافتراضية |
|---|---|
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 |
تُستخدم بواسطة open-sse/executors/base.ts::buildHeaders() عبر البحث الديناميكي. حدّث هذه القيم عندما يصدر المزوّدون إصدارات CLI جديدة — إذ تبدأ سلاسل UA القديمة بالتعرّض للرفض باعتبارها عملاء قديمين.
مفاتيح تبديل وضع توافق CLI (القسم 13 من .env.example)
| المتغير | التأثير |
|---|---|
CLI_COMPAT_CODEX=1 |
بصمة Codex |
CLI_COMPAT_CLAUDE=1 |
بصمة claude-cli |
CLI_COMPAT_GITHUB=1 |
بصمة GitHub Copilot Chat |
CLI_COMPAT_ANTIGRAVITY=1 |
بصمة Antigravity |
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 |
تمكين كل ما سبق |
يُحتفَظ بعنوان IP الخاص بالمزوّد دائمًا — إذ لا يفعل مفتاح التبديل سوى إعادة تشكيل البصمة الشبكية للطلب، ولا يغيّر عنوان IP للخروج.
تنقية الترويسات الواردة
ينقّي OmniRoute ترويسات العميل الواردة قبل تمريرها، بحيث لا يؤدي وصول طلب من Cursor إلى تسريب User-Agent: Cursor/X.Y.Z إلى خدمة Claude علوية. راجع src/shared/constants/upstreamHeaders.ts للاطلاع على قائمة الحظر، التي تُحافَظ على مزامنتها بدقة مع مخططات Zod واختبارات الوحدات.
تحديث البصمات عندما يغيّرها المزوّد
- التقط حركة مرور CLI الرسمية باستخدام
mitmproxy(اعتراض TLS + تفريغ) - استخرج JA3/JA4 والترتيب الحرفي للترويسات
- حدّث إدخال
CLI_FINGERPRINTS[...]ذي الصلة - حدّث القيمة الافتراضية المطابقة لـ
*_USER_AGENTفي.env.example - إذا تغيّرت مصافحة TLS نفسها، فحدّث غلاف المزوّد ذي الصلة أو خيار
browser:في wreq-js - شغّل اختبارات TLS الخاصة بالمزوّد واختبار كناري يدويًا مقابل المزوّد الفعلي
- انشر ضمن إصدار تصحيحي؛ ووثّق ذلك في
CHANGELOG.md
الاختبارات
open-sse/services/__tests__/claudeTlsClient.test.ts— سلوك غلاف TLS المشتركtests/unit/anthropic-cache-fingerprint.test.ts— حتمية البصمةtests/unit/chatgpt-web-source-retirement.test.ts— يظل مصدر التخفي المشترك لـ ChatGPT Web غائبًا، بينما يظل Codex Web موجودًا
انظر أيضًا
- RESILIENCE_GUIDE.md — ما الذي يحدث عندما يحصل مسار خفي على استجابة
403 - TROUBLESHOOTING.md
- ENVIRONMENT.md — مرجع كامل لمتغيرات البيئة
- CLI-TOOLS.md — منظور المشغّل لسير عمل MITM