From 29bb9e879b45ec6e869bc42eca4c93647cd6b0c3 Mon Sep 17 00:00:00 2001 From: "openclaw-docs-i18n[bot]" Date: Mon, 20 Apr 2026 07:39:02 +0000 Subject: [PATCH] chore(i18n): refresh ar translations --- docs/ar/channels/telegram.md | 670 +++---- docs/ar/channels/troubleshooting.md | 145 +- docs/ar/concepts/qa-e2e-automation.md | 224 ++- docs/ar/gateway/configuration-reference.md | 1804 +++++++++--------- docs/ar/gateway/doctor.md | 596 +++--- docs/ar/gateway/index.md | 182 +- docs/ar/gateway/troubleshooting.md | 296 +-- docs/ar/help/faq.md | 1929 ++++++++++---------- docs/ar/help/testing.md | 916 +++++----- docs/ar/help/troubleshooting.md | 273 +-- docs/ar/tools/browser.md | 687 +++---- 11 files changed, 3940 insertions(+), 3782 deletions(-) diff --git a/docs/ar/channels/telegram.md b/docs/ar/channels/telegram.md index 4cfd1d474..a341ac1d5 100644 --- a/docs/ar/channels/telegram.md +++ b/docs/ar/channels/telegram.md @@ -1,44 +1,44 @@ --- read_when: - - تعمل على ميزات Telegram أو webhooks -summary: حالة دعم Telegram bot، والإمكانات، والتكوين + - العمل على ميزات Telegram أو Webhook +summary: حالة دعم بوت Telegram، والإمكانات، والإعدادات title: Telegram x-i18n: - generated_at: "2026-04-05T12:38:58Z" + generated_at: "2026-04-20T07:29:31Z" model: gpt-5.4 provider: openai - source_hash: 39fbf328375fbc5d08ec2e3eed58b19ee0afa102010ecbc02e074a310ced157e + source_hash: b9903fae98bca0c345aa86d5c29015539c375442524a34d26bd28181470b8477 source_path: channels/telegram.md workflow: 15 --- # Telegram (Bot API) -الحالة: جاهز للإنتاج لرسائل bot الخاصة والمجموعات عبر grammY. يكون long polling هو الوضع الافتراضي؛ ووضع webhook اختياري. +الحالة: جاهز للإنتاج للرسائل الخاصة (DMs) والمجموعات عبر grammY. الاستطلاع الطويل هو الوضع الافتراضي؛ ووضع Webhook اختياري. - - سياسة الرسائل الخاصة الافتراضية في Telegram هي pairing. + + سياسة الرسائل الخاصة الافتراضية في Telegram هي الإقران. - - أدلة تشخيص وإصلاح عبر القنوات. + + تشخيصات وخطط إصلاح عبر القنوات. - - أنماط وأمثلة كاملة لتكوين القنوات. + + أنماط وأمثلة كاملة لإعدادات القنوات. ## الإعداد السريع - - افتح Telegram وتحدث مع **@BotFather** (تأكد من أن اسم المستخدم هو `@BotFather` تمامًا). + + افتح Telegram وابدأ محادثة مع **@BotFather** (تأكد أن المعرّف هو بالضبط `@BotFather`). - نفّذ `/newbot`، واتبع التعليمات، واحفظ token. + شغّل `/newbot`، واتبع التعليمات، واحفظ الرمز. - + ```json5 { @@ -53,12 +53,12 @@ x-i18n: } ``` - الرجوع إلى متغيرات البيئة: `TELEGRAM_BOT_TOKEN=...` (للحساب الافتراضي فقط). - لا يستخدم Telegram الأمر `openclaw channels login telegram`؛ كوّن token في التكوين/البيئة، ثم ابدأ البوابة. + متغير البيئة الاحتياطي: `TELEGRAM_BOT_TOKEN=...` (للحساب الافتراضي فقط). + لا يستخدم Telegram الأمر `openclaw channels login telegram`؛ بل أعد إعداد الرمز في config/env، ثم شغّل Gateway. - + ```bash openclaw gateway @@ -66,7 +66,7 @@ openclaw pairing list telegram openclaw pairing approve telegram ``` - تنتهي صلاحية رموز pairing بعد ساعة واحدة. + تنتهي صلاحية رموز الإقران بعد ساعة واحدة. @@ -76,34 +76,34 @@ openclaw pairing approve telegram -ترتيب حل token يراعي الحسابات. عمليًا، تفوز قيم التكوين على الرجوع إلى البيئة، و`TELEGRAM_BOT_TOKEN` ينطبق فقط على الحساب الافتراضي. +ترتيب حلّ الرمز يراعي الحساب. عمليًا، تتغلب قيم config على الاحتياطي من env، ولا ينطبق `TELEGRAM_BOT_TOKEN` إلا على الحساب الافتراضي. -## إعدادات جانب Telegram +## إعدادات Telegram - تعمل bots Telegram افتراضيًا في **Privacy Mode**، ما يحد من رسائل المجموعات التي تتلقاها. + تستخدم بوتات Telegram افتراضيًا **وضع الخصوصية**، مما يقيّد الرسائل الجماعية التي تتلقاها. - إذا كان يجب أن يرى البوت كل رسائل المجموعة، فإما أن: + إذا كان يجب أن يرى البوت جميع رسائل المجموعة، فإما: - - تعطل وضع الخصوصية عبر `/setprivacy`، أو - - تجعل البوت مشرفًا على المجموعة. + - عطّل وضع الخصوصية عبر `/setprivacy`، أو + - اجعل البوت مشرفًا على المجموعة. - عند تبديل وضع الخصوصية، أزل البوت ثم أعد إضافته في كل مجموعة حتى يطبّق Telegram التغيير. + عند تبديل وضع الخصوصية، أزل البوت ثم أعد إضافته إلى كل مجموعة لكي يطبّق Telegram التغيير. - يتم التحكم في حالة المشرف من إعدادات مجموعة Telegram. + يتم التحكم في حالة المشرف ضمن إعدادات مجموعة Telegram. - تتلقى bots المشرفة جميع رسائل المجموعة، وهذا مفيد لسلوك المجموعات الدائم التشغيل. + تتلقى البوتات المشرفة جميع رسائل المجموعة، وهو ما يفيد في السلوك الجماعي الدائم التشغيل. - + - - `/setjoingroups` للسماح/منع الإضافة إلى المجموعات + - `/setjoingroups` للسماح بالإضافة إلى المجموعات أو منعها - `/setprivacy` لسلوك الرؤية داخل المجموعات @@ -113,31 +113,31 @@ openclaw pairing approve telegram - يتحكم `channels.telegram.dmPolicy` في الوصول إلى الرسائل الخاصة: + يتحكم `channels.telegram.dmPolicy` في الوصول إلى الرسائل المباشرة: - `pairing` (الافتراضي) - `allowlist` (يتطلب وجود معرّف مرسل واحد على الأقل في `allowFrom`) - - `open` (يتطلب أن تتضمن `allowFrom` القيمة `"*"`) + - `open` (يتطلب أن يتضمن `allowFrom` القيمة `"*"`) - `disabled` - يقبل `channels.telegram.allowFrom` معرّفات مستخدمي Telegram الرقمية. وتُقبل البادئات `telegram:` و`tg:` ويتم توحيدها. - يؤدي `dmPolicy: "allowlist"` مع `allowFrom` فارغة إلى حظر جميع الرسائل الخاصة ويتم رفضه عبر التحقق من صحة التكوين. - يقبل الإعداد التفاعلي إدخال `@username` ويحوّله إلى معرّفات رقمية. - إذا قمت بالترقية وكان التكوين لديك يحتوي على إدخالات allowlist بصيغة `@username`، فشغّل `openclaw doctor --fix` لتحويلها (بأفضل جهد؛ ويتطلب token Telegram bot). - إذا كنت تعتمد سابقًا على ملفات allowlist في pairing-store، فيمكن لـ `openclaw doctor --fix` استعادة الإدخالات إلى `channels.telegram.allowFrom` في تدفقات allowlist (على سبيل المثال عندما يكون `dmPolicy: "allowlist"` بلا معرّفات صريحة بعد). + يقبل `channels.telegram.allowFrom` معرّفات مستخدمي Telegram الرقمية. وتُقبل البادئات `telegram:` / `tg:` وتُطبّع. + يؤدي `dmPolicy: "allowlist"` مع `allowFrom` فارغ إلى حظر جميع الرسائل الخاصة، ويتم رفضه من خلال التحقق من صحة الإعدادات. + يطلب الإعداد معرّفات المستخدم الرقمية فقط. + إذا قمت بالترقية وكان الإعداد لديك يحتوي على إدخالات قائمة سماح من نوع `@username`، فشغّل `openclaw doctor --fix` لحلّها (بأفضل جهد؛ ويتطلب رمز بوت Telegram). + إذا كنت تعتمد سابقًا على ملفات قائمة السماح في مخزن الإقران، فيمكن للأمر `openclaw doctor --fix` استعادة الإدخالات إلى `channels.telegram.allowFrom` في تدفقات قائمة السماح (على سبيل المثال عندما لا يحتوي `dmPolicy: "allowlist"` بعد على أي معرّفات صريحة). - بالنسبة إلى bots ذات المالك الواحد، فضّل `dmPolicy: "allowlist"` مع معرّفات `allowFrom` رقمية صريحة للحفاظ على سياسة الوصول بشكل مستدام في التكوين (بدلًا من الاعتماد على موافقات pairing السابقة). + بالنسبة إلى البوتات ذات المالك الواحد، فضّل `dmPolicy: "allowlist"` مع معرّفات `allowFrom` رقمية وصريحة للحفاظ على ثبات سياسة الوصول داخل config (بدلًا من الاعتماد على موافقات الإقران السابقة). - التباس شائع: الموافقة على pairing في الرسائل الخاصة لا تعني أن "هذا المرسل مصرح له في كل مكان". - يمنح pairing الوصول إلى الرسائل الخاصة فقط. أما تفويض مرسل المجموعة فما زال يأتي من allowlists الصريحة في التكوين. - إذا أردت "أن أُصرَّح مرة واحدة وأن تعمل الرسائل الخاصة وأوامر المجموعة معًا"، فضع معرّف مستخدم Telegram الرقمي الخاص بك في `channels.telegram.allowFrom`. + التباس شائع: الموافقة على إقران الرسائل الخاصة لا تعني أن "هذا المرسل مخوّل في كل مكان". + يمنح الإقران الوصول إلى الرسائل الخاصة فقط. أما تخويل المرسل داخل المجموعات فيأتي من قوائم السماح الصريحة في config. + إذا كنت تريد "أن أصبح مخولًا مرة واحدة وتعمل الرسائل الخاصة وأوامر المجموعات معًا"، فضع معرّف مستخدم Telegram الرقمي الخاص بك في `channels.telegram.allowFrom`. ### العثور على معرّف مستخدم Telegram الخاص بك - الطريقة الأكثر أمانًا (من دون bot تابع لجهة خارجية): + طريقة أكثر أمانًا (من دون بوت تابع لجهة خارجية): 1. أرسل رسالة خاصة إلى البوت. - 2. نفّذ `openclaw logs --follow`. + 2. شغّل `openclaw logs --follow`. 3. اقرأ `from.id`. طريقة Bot API الرسمية: @@ -146,33 +146,33 @@ openclaw pairing approve telegram curl "https://api.telegram.org/bot/getUpdates" ``` - طريقة تابعة لجهة خارجية (خصوصية أقل): `@userinfobot` أو `@getidsbot`. + طريقة خارجية (أقل خصوصية): `@userinfobot` أو `@getidsbot`. - - يُطبَّق عنصران للتحكم معًا: + + يُطبَّق عنصران من عناصر التحكم معًا: - 1. **أي المجموعات مسموح بها** (`channels.telegram.groups`) - - بدون تكوين `groups`: - - مع `groupPolicy: "open"`: يمكن لأي مجموعة اجتياز فحوصات معرّف المجموعة - - مع `groupPolicy: "allowlist"` (الافتراضي): تُحظر المجموعات حتى تضيف إدخالات في `groups` (أو `"*"`) - - عند تكوين `groups`: تعمل كـ allowlist (معرّفات صريحة أو `"*"`) + 1. **ما المجموعات المسموح بها** (`channels.telegram.groups`) + - بدون إعداد `groups`: + - مع `groupPolicy: "open"`: يمكن لأي مجموعة تجاوز عمليات التحقق من معرّف المجموعة + - مع `groupPolicy: "allowlist"` (الافتراضي): تُحظر المجموعات إلى أن تضيف إدخالات إلى `groups` (أو `"*"`) + - عند إعداد `groups`: تعمل كقائمة سماح (معرّفات صريحة أو `"*"`) - 2. **أي المرسلين مسموح بهم داخل المجموعات** (`channels.telegram.groupPolicy`) + 2. **أي المرسلين مسموح لهم داخل المجموعات** (`channels.telegram.groupPolicy`) - `open` - `allowlist` (الافتراضي) - `disabled` - يُستخدم `groupAllowFrom` لتصفية مرسلي المجموعات. وإذا لم يُضبط، فسيعود Telegram إلى `allowFrom`. - يجب أن تكون إدخالات `groupAllowFrom` معرّفات مستخدمي Telegram رقمية (وتُوحَّد البادئات `telegram:` / `tg:`). - لا تضع معرّفات دردشات مجموعات Telegram أو المجموعات الفائقة في `groupAllowFrom`. فمعرّفات الدردشة السالبة يجب أن تكون ضمن `channels.telegram.groups`. - تُتجاهل الإدخالات غير الرقمية عند تفويض المرسل. - الحد الأمني (`2026.2.25+`): لا يرث تفويض مرسل المجموعة موافقات pairing-store الخاصة بالرسائل الخاصة. - يظل pairing خاصًا بالرسائل الخاصة فقط. وبالنسبة إلى المجموعات، اضبط `groupAllowFrom` أو `allowFrom` لكل مجموعة/موضوع. - إذا لم يُضبط `groupAllowFrom`، يعود Telegram إلى `allowFrom` في التكوين، وليس إلى pairing store. - النمط العملي للـ bots ذات المالك الواحد: اضبط معرّف المستخدم الخاص بك في `channels.telegram.allowFrom`، واترك `groupAllowFrom` غير مضبوط، واسمح للمجموعات المستهدفة ضمن `channels.telegram.groups`. - ملاحظة وقت التشغيل: إذا كان `channels.telegram` مفقودًا بالكامل، فستكون القيم الافتراضية وقت التشغيل fail-closed مع `groupPolicy="allowlist"` ما لم يتم ضبط `channels.defaults.groupPolicy` صراحةً. + يُستخدم `groupAllowFrom` لتصفية مرسلي المجموعات. وإذا لم يتم تعيينه، يعود Telegram إلى `allowFrom`. + يجب أن تكون إدخالات `groupAllowFrom` معرّفات مستخدمي Telegram رقمية (ويتم تطبيع البادئات `telegram:` / `tg:`). + لا تضع معرّفات دردشات مجموعات Telegram أو المجموعات الفائقة في `groupAllowFrom`. تنتمي معرّفات الدردشة السالبة إلى `channels.telegram.groups`. + يتم تجاهل الإدخالات غير الرقمية عند تخويل المرسل. + الحد الأمني (`2026.2.25+`): لا يرث تخويل مرسل المجموعة موافقات مخزن الإقران الخاصة بالرسائل المباشرة. + يظل الإقران خاصًا بالرسائل المباشرة فقط. بالنسبة إلى المجموعات، اضبط `groupAllowFrom` أو `allowFrom` على مستوى كل مجموعة/موضوع. + إذا لم يتم تعيين `groupAllowFrom`، يعود Telegram إلى `allowFrom` في config، وليس إلى مخزن الإقران. + النمط العملي للبوتات ذات المالك الواحد: اضبط معرّف المستخدم الخاص بك في `channels.telegram.allowFrom`، واترك `groupAllowFrom` غير معيّن، واسمح بالمجموعات المستهدفة ضمن `channels.telegram.groups`. + ملاحظة وقت التشغيل: إذا كان `channels.telegram` مفقودًا بالكامل، فإن القيم الافتراضية وقت التشغيل تكون مغلقة افتراضيًا مع `groupPolicy="allowlist"` ما لم يتم تعيين `channels.defaults.groupPolicy` صراحةً. مثال: السماح لأي عضو في مجموعة محددة واحدة: @@ -209,17 +209,17 @@ curl "https://api.telegram.org/bot/getUpdates" ``` - خطأ شائع: `groupAllowFrom` ليست allowlist لمجموعات Telegram. + خطأ شائع: `groupAllowFrom` ليس قائمة سماح لمجموعات Telegram. - - ضع معرّفات دردشات مجموعات Telegram أو المجموعات الفائقة السالبة مثل `-1001234567890` ضمن `channels.telegram.groups`. - - ضع معرّفات مستخدمي Telegram مثل `8734062810` ضمن `groupAllowFrom` عندما تريد تقييد الأشخاص داخل مجموعة مسموح بها الذين يمكنهم تشغيل البوت. + - ضع معرّفات مجموعات Telegram أو المجموعات الفائقة السالبة مثل `-1001234567890` تحت `channels.telegram.groups`. + - ضع معرّفات مستخدمي Telegram مثل `8734062810` تحت `groupAllowFrom` عندما تريد تقييد الأشخاص داخل مجموعة مسموح بها الذين يمكنهم تشغيل البوت. - استخدم `groupAllowFrom: ["*"]` فقط عندما تريد أن يتمكن أي عضو في مجموعة مسموح بها من التحدث إلى البوت. - - تتطلب الردود في المجموعات وجود إشارة افتراضيًا. + + تتطلب الردود في المجموعات الإشارة افتراضيًا. يمكن أن تأتي الإشارة من: @@ -233,9 +233,9 @@ curl "https://api.telegram.org/bot/getUpdates" - `/activation always` - `/activation mention` - تحدّث هذه الأوامر حالة الجلسة فقط. استخدم التكوين للاستمرارية. + تحدّث هذه الإعدادات حالة الجلسة فقط. استخدم config للاستمرارية. - مثال على تكوين دائم: + مثال على إعداد دائم: ```json5 { @@ -260,13 +260,13 @@ curl "https://api.telegram.org/bot/getUpdates" ## سلوك وقت التشغيل -- يملك Telegram عملية البوابة. -- التوجيه حتمي: ترد رسائل Telegram الواردة إلى Telegram (ولا يختار النموذج القنوات). -- تُوحَّد الرسائل الواردة داخل غلاف القنوات المشترك مع بيانات الرد الوصفية والعناصر النائبة للوسائط. -- تُعزل جلسات المجموعات بحسب معرّف المجموعة. وتُلحق موضوعات المنتدى `:topic:` للحفاظ على عزل الموضوعات. -- يمكن أن تحمل الرسائل الخاصة `message_thread_id`؛ ويقوم OpenClaw بتوجيهها باستخدام مفاتيح جلسة تراعي thread ويحافظ على معرّف thread في الردود. -- يستخدم long polling مشغّل grammY مع تسلسل لكل دردشة/لكل thread. ويستخدم تزامن sink العام للمشغّل `agents.defaults.maxConcurrent`. -- لا يحتوي Telegram Bot API على دعم لإيصالات القراءة (`sendReadReceipts` غير منطبق). +- Telegram مملوك لعملية Gateway. +- التوجيه حتمي: ترد الرسائل الواردة من Telegram إلى Telegram (النموذج لا يختار القنوات). +- تُطبَّع الرسائل الواردة إلى الغلاف المشترك للقناة مع بيانات الرد الوصفية وعناصر نائبة للوسائط. +- تُعزل جلسات المجموعات حسب معرّف المجموعة. وتضيف مواضيع المنتدى `:topic:` للحفاظ على عزل المواضيع. +- يمكن أن تحمل رسائل DM قيمة `message_thread_id`؛ ويوجهها OpenClaw باستخدام مفاتيح جلسات مدركة للخيوط ويحافظ على معرّف الخيط في الردود. +- يستخدم الاستطلاع الطويل grammY runner مع تسلسل لكل دردشة/خيط. وتستخدم موازاة sink الكلية في runner القيمة `agents.defaults.maxConcurrent`. +- لا يدعم Telegram Bot API إيصالات القراءة (`sendReadReceipts` لا ينطبق). ## مرجع الميزات @@ -274,27 +274,27 @@ curl "https://api.telegram.org/bot/getUpdates" يمكن لـ OpenClaw بث الردود الجزئية في الوقت الفعلي: - - الدردشات الخاصة: رسالة معاينة + `editMessageText` - - المجموعات/الموضوعات: رسالة معاينة + `editMessageText` + - الدردشات المباشرة: رسالة معاينة + `editMessageText` + - المجموعات/المواضيع: رسالة معاينة + `editMessageText` المتطلب: - - أن تكون `channels.telegram.streaming` إحدى القيم `off | partial | block | progress` (الافتراضي: `partial`) - - تُحوَّل `progress` إلى `partial` على Telegram (للتوافق مع التسمية عبر القنوات) - - تُحوَّل تلقائيًا قيم `channels.telegram.streamMode` القديمة وقيم `streaming` المنطقية + - تكون `channels.telegram.streaming` واحدة من `off | partial | block | progress` (الافتراضي: `partial`) + - تتحول `progress` إلى `partial` على Telegram (للتوافق مع التسمية عبر القنوات) + - يتم تعيين `channels.telegram.streamMode` القديم وقيم `streaming` المنطقية تلقائيًا بالنسبة إلى الردود النصية فقط: - - الرسائل الخاصة: يحتفظ OpenClaw برسالة المعاينة نفسها ويجري تعديلًا نهائيًا في المكان نفسه (من دون رسالة ثانية) - - المجموعة/الموضوع: يحتفظ OpenClaw برسالة المعاينة نفسها ويجري تعديلًا نهائيًا في المكان نفسه (من دون رسالة ثانية) + - الرسائل الخاصة: يحتفظ OpenClaw برسالة المعاينة نفسها ويجري تعديلًا نهائيًا في مكانها (من دون رسالة ثانية) + - المجموعة/الموضوع: يحتفظ OpenClaw برسالة المعاينة نفسها ويجري تعديلًا نهائيًا في مكانها (من دون رسالة ثانية) بالنسبة إلى الردود المعقدة (مثل حمولات الوسائط)، يعود OpenClaw إلى التسليم النهائي العادي ثم ينظف رسالة المعاينة. - بث المعاينة منفصل عن block streaming. عندما يتم تمكين block streaming صراحةً في Telegram، يتخطى OpenClaw بث المعاينة لتجنب البث المزدوج. + بث المعاينة منفصل عن بث الكتل. عندما يتم تمكين بث الكتل صراحةً لـ Telegram، يتجاوز OpenClaw بث المعاينة لتجنب البث المزدوج. - إذا كان نقل المسودة الأصلي غير متاح/مرفوض، يعود OpenClaw تلقائيًا إلى `sendMessage` + `editMessageText`. + إذا كان نقل المسودات الأصلي غير متاح/مرفوضًا، يعود OpenClaw تلقائيًا إلى `sendMessage` + `editMessageText`. - بث الاستدلال الخاص بـ Telegram: + بث الاستدلال الخاص بـ Telegram فقط: - `/reasoning stream` يرسل الاستدلال إلى المعاينة المباشرة أثناء التوليد - يُرسل الجواب النهائي من دون نص الاستدلال @@ -302,32 +302,32 @@ curl "https://api.telegram.org/bot/getUpdates" - يستخدم النص الصادر `parse_mode: "HTML"` في Telegram. + يستخدم النص الصادر في Telegram القيمة `parse_mode: "HTML"`. - - يُعرَض النص الشبيه بـ Markdown إلى HTML آمن لـ Telegram. - - يُهَرب HTML الخام من النموذج لتقليل حالات فشل التحليل في Telegram. - - إذا رفض Telegram HTML المحلل، يعيد OpenClaw المحاولة كنص عادي. + - يتم تحويل النص الشبيه بـ Markdown إلى HTML آمن لـ Telegram. + - يتم تهريب HTML الخام من النموذج لتقليل حالات فشل التحليل في Telegram. + - إذا رفض Telegram HTML المحلَّل، يعيد OpenClaw المحاولة كنص عادي. - تُفعَّل معاينات الروابط افتراضيًا ويمكن تعطيلها باستخدام `channels.telegram.linkPreview: false`. + تكون معاينات الروابط مفعّلة افتراضيًا، ويمكن تعطيلها باستخدام `channels.telegram.linkPreview: false`. - يتم تسجيل قائمة أوامر Telegram عند بدء التشغيل عبر `setMyCommands`. + تتم معالجة تسجيل قائمة أوامر Telegram عند بدء التشغيل باستخدام `setMyCommands`. الإعدادات الافتراضية للأوامر الأصلية: - `commands.native: "auto"` يفعّل الأوامر الأصلية لـ Telegram - أضف إدخالات أوامر مخصصة إلى القائمة: + أضف إدخالات مخصصة إلى قائمة الأوامر: ```json5 { channels: { telegram: { customCommands: [ - { command: "backup", description: "Git backup" }, - { command: "generate", description: "Create an image" }, + { command: "backup", description: "نسخ احتياطي Git" }, + { command: "generate", description: "إنشاء صورة" }, ], }, }, @@ -336,45 +336,45 @@ curl "https://api.telegram.org/bot/getUpdates" القواعد: - - تُوحَّد الأسماء (تُزال الشرطة المائلة `/` من البداية، وتحوَّل إلى أحرف صغيرة) - - النمط الصحيح: `a-z` و`0-9` و`_`، والطول `1..32` + - تُطبّع الأسماء (إزالة `/` في البداية، وتحويلها إلى أحرف صغيرة) + - النمط الصالح: `a-z` و`0-9` و`_`، والطول `1..32` - لا يمكن للأوامر المخصصة تجاوز الأوامر الأصلية - - تُتخطى التعارضات/التكرارات ويُسجل ذلك + - يتم تخطي التعارضات/التكرارات وتسجيلها ملاحظات: - - الأوامر المخصصة هي إدخالات في القائمة فقط؛ ولا تنفذ السلوك تلقائيًا - - يمكن أن تستمر أوامر plugin/Skills في العمل عند كتابتها حتى إذا لم تظهر في قائمة Telegram + - الأوامر المخصصة هي إدخالات قائمة فقط؛ ولا تنفّذ السلوك تلقائيًا + - لا تزال أوامر Plugin/Skills تعمل عند كتابتها حتى لو لم تظهر في قائمة Telegram - إذا عُطلت الأوامر الأصلية، فستزال الأوامر المضمنة. وقد تستمر أوامر custom/plugin في التسجيل إذا كانت مكوّنة. + إذا تم تعطيل الأوامر الأصلية، تتم إزالة الأوامر المضمنة. وقد تظل أوامر Plugin/الأوامر المخصصة تُسجَّل إذا كانت مهيأة. - حالات فشل إعداد شائعة: + حالات فشل شائعة أثناء الإعداد: - - فشل `setMyCommands failed` مع `BOT_COMMANDS_TOO_MUCH` يعني أن قائمة Telegram ما زالت زائدة بعد التقليص؛ قلّل أوامر plugin/Skills/الأوامر المخصصة أو عطّل `channels.telegram.commands.native`. - - فشل `setMyCommands failed` مع أخطاء الشبكة/fetch يعني عادةً أن DNS/HTTPS الصادر إلى `api.telegram.org` محجوب. + - تعني الرسالة `setMyCommands failed` مع `BOT_COMMANDS_TOO_MUCH` أن قائمة Telegram ما تزال تتجاوز الحد بعد التقليص؛ قلّل أوامر Plugin/Skills/الأوامر المخصصة أو عطّل `channels.telegram.commands.native`. + - تعني الرسالة `setMyCommands failed` مع أخطاء الشبكة/`fetch` عادةً أن DNS/HTTPS الصادر إلى `api.telegram.org` محظور. - ### أوامر إقران الأجهزة (`device-pair` plugin) + ### أوامر إقران الجهاز (`device-pair` Plugin) - عند تثبيت plugin `device-pair`: + عند تثبيت Plugin ‏`device-pair`: - 1. يولد `/pair` رمز الإعداد + 1. يولّد `/pair` رمز إعداد 2. الصق الرمز في تطبيق iOS - 3. يسرد `/pair pending` الطلبات المعلقة (بما في ذلك الدور/النطاقات) + 3. يعرض `/pair pending` الطلبات المعلّقة (بما في ذلك الدور/النطاقات) 4. وافق على الطلب: - - `/pair approve ` للموافقة الصريحة - - `/pair approve` عندما يكون هناك طلب معلق واحد فقط - - `/pair approve latest` للأحدث + - استخدم `/pair approve ` للموافقة الصريحة + - استخدم `/pair approve` عندما يكون هناك طلب معلّق واحد فقط + - استخدم `/pair approve latest` لأحدث طلب - يحمل رمز الإعداد bootstrap token قصير العمر. ويحافظ bootstrap handoff المضمن على token العقدة الأساسية عند `scopes: []`؛ وأي operator token يتم تسليمه يبقى محصورًا في `operator.approvals` و`operator.read` و`operator.talk.secrets` و`operator.write`. وتكون فحوصات نطاق bootstrap مسبوقة بالدور، لذلك فإن allowlist الخاصة بالمشغل لا تلبّي إلا طلبات المشغل؛ أما الأدوار غير المشغلة فما زالت تحتاج إلى scopes تحت بادئة دورها الخاص. + يحمل رمز الإعداد رمز bootstrap مميزًا قصير العمر. يحافظ تسليم bootstrap المضمّن على رمز Node الأساسي عند `scopes: []`؛ وأي رمز operator يتم تسليمه يبقى محصورًا ضمن `operator.approvals` و`operator.read` و`operator.talk.secrets` و`operator.write`. تعتمد عمليات التحقق من نطاق bootstrap على بادئة الدور، لذا فإن قائمة سماح operator هذه تلبّي طلبات operator فقط؛ أما الأدوار غير operator فلا تزال تحتاج إلى نطاقات تحت بادئة الدور الخاصة بها. - إذا أعاد جهاز المحاولة مع تفاصيل مصادقة متغيرة (مثل الدور/النطاقات/المفتاح العام)، فسيتم استبدال الطلب المعلق السابق وسيستخدم الطلب الجديد `requestId` مختلفًا. أعد تنفيذ `/pair pending` قبل الموافقة. + إذا أعاد جهاز المحاولة مع تفاصيل مصادقة متغيرة (مثل الدور/النطاقات/المفتاح العام)، يتم استبدال الطلب المعلّق السابق ويستخدم الطلب الجديد قيمة `requestId` مختلفة. أعد تشغيل `/pair pending` قبل الموافقة. - مزيد من التفاصيل: [الإقران](/channels/pairing#pair-via-telegram-recommended-for-ios). + مزيد من التفاصيل: [الإقران](/ar/channels/pairing#pair-via-telegram-recommended-for-ios). - كوّن نطاق لوحة المفاتيح المضمنة: + اضبط نطاق لوحة المفاتيح المضمنة: ```json5 { @@ -388,7 +388,7 @@ curl "https://api.telegram.org/bot/getUpdates" } ``` - تجاوز لكل حساب: + تجاوز على مستوى الحساب: ```json5 { @@ -414,7 +414,7 @@ curl "https://api.telegram.org/bot/getUpdates" - `all` - `allowlist` (الافتراضي) - تتحول `capabilities: ["inlineButtons"]` القديمة إلى `inlineButtons: "all"`. + تتحول الصيغة القديمة `capabilities: ["inlineButtons"]` إلى `inlineButtons: "all"`. مثال على إجراء رسالة: @@ -423,32 +423,32 @@ curl "https://api.telegram.org/bot/getUpdates" action: "send", channel: "telegram", to: "123456789", - message: "Choose an option:", + message: "اختر خيارًا:", buttons: [ [ - { text: "Yes", callback_data: "yes" }, - { text: "No", callback_data: "no" }, + { text: "نعم", callback_data: "yes" }, + { text: "لا", callback_data: "no" }, ], - [{ text: "Cancel", callback_data: "cancel" }], + [{ text: "إلغاء", callback_data: "cancel" }], ], } ``` - تُمرر نقرات callback إلى الوكيل كنص: + يتم تمرير نقرات callback إلى الوكيل كنص: `callback_data: ` - تتضمن إجراءات أداة Telegram ما يلي: + تشمل إجراءات أداة Telegram ما يلي: - - `sendMessage` (`to`, `content`, واختياريًا `mediaUrl` و`replyToMessageId` و`messageThreadId`) - - `react` (`chatId`, `messageId`, `emoji`) - - `deleteMessage` (`chatId`, `messageId`) - - `editMessage` (`chatId`, `messageId`, `content`) - - `createForumTopic` (`chatId`, `name`, واختياريًا `iconColor` و`iconCustomEmojiId`) + - `sendMessage` (`to` و`content` و`mediaUrl` اختياري و`replyToMessageId` و`messageThreadId`) + - `react` (`chatId` و`messageId` و`emoji`) + - `deleteMessage` (`chatId` و`messageId`) + - `editMessage` (`chatId` و`messageId` و`content`) + - `createForumTopic` (`chatId` و`name` و`iconColor` اختياري و`iconCustomEmojiId`) - تعرض إجراءات رسائل القنوات أسماء بديلة عملية (`send` و`react` و`delete` و`edit` و`sticker` و`sticker-search` و`topic-create`). + تكشف إجراءات رسائل القناة عن أسماء بديلة مريحة (`send` و`react` و`delete` و`edit` و`sticker` و`sticker-search` و`topic-create`). عناصر التحكم في التقييد: @@ -457,46 +457,46 @@ curl "https://api.telegram.org/bot/getUpdates" - `channels.telegram.actions.reactions` - `channels.telegram.actions.sticker` (الافتراضي: معطل) - ملاحظة: `edit` و`topic-create` مفعّلان افتراضيًا حاليًا ولا يملكان مفاتيح تبديل منفصلة ضمن `channels.telegram.actions.*`. - تستخدم الإرسالات وقت التشغيل snapshot النشط للتكوين/الأسرار (بدء التشغيل/إعادة التحميل)، لذلك لا تنفّذ مسارات الإجراء إعادة حل SecretRef مخصصة لكل إرسال. + ملاحظة: الخياران `edit` و`topic-create` مفعّلان حاليًا افتراضيًا ولا يملكان مفاتيح تبديل منفصلة ضمن `channels.telegram.actions.*`. + تستخدم عمليات الإرسال وقت التشغيل لقطة الإعدادات/الأسرار النشطة (بدء التشغيل/إعادة التحميل)، لذلك لا تنفّذ مسارات الإجراءات إعادة حلّ مخصصة لـ SecretRef لكل عملية إرسال. - دلالات إزالة التفاعل: [/tools/reactions](/tools/reactions) + دلالات إزالة التفاعل: [/tools/reactions](/ar/tools/reactions) - - يدعم Telegram وسوم ربط الردود الصريحة في المخرجات المولدة: + + يدعم Telegram وسوم ربط الردود بالخيوط صراحةً في المخرجات المُولَّدة: - - `[[reply_to_current]]` يرد على الرسالة المُشغِّلة - - `[[reply_to:]]` يرد على معرّف رسالة Telegram محدد + - `[[reply_to_current]]` للرد على الرسالة المحفِّزة + - `[[reply_to:]]` للرد على معرّف رسالة Telegram محدد - يتحكم `channels.telegram.replyToMode` في المعالجة: + يتحكم `channels.telegram.replyToMode` في طريقة المعالجة: - `off` (الافتراضي) - `first` - `all` - ملاحظة: `off` يعطّل ربط الردود الضمني. لكن ما زالت وسوم `[[reply_to_*]]` الصريحة محترمة. + ملاحظة: تؤدي القيمة `off` إلى تعطيل ربط الردود بالخيوط ضمنيًا. ومع ذلك، تظل الوسوم الصريحة `[[reply_to_*]]` محترمة. - - في المجموعات الفائقة من نوع المنتدى: + + المجموعات الفائقة الخاصة بالمنتدى: - - تُلحق مفاتيح جلسات الموضوعات بـ `:topic:` - - تستهدف الردود وإشارات الكتابة thread الخاص بالموضوع - - مسار تكوين الموضوع: + - تضيف مفاتيح جلسات المواضيع `:topic:` + - تستهدف الردود وإجراءات الكتابة خيط الموضوع + - مسار إعدادات الموضوع: `channels.telegram.groups..topics.` الحالة الخاصة للموضوع العام (`threadId=1`): - - تُرسل الرسائل من دون `message_thread_id` (يرفض Telegram `sendMessage(...thread_id=1)`) - - ما زالت إجراءات الكتابة تتضمن `message_thread_id` + - تتجاهل عمليات إرسال الرسائل `message_thread_id` (يرفض Telegram `sendMessage(...thread_id=1)`) + - ما تزال إجراءات الكتابة تتضمن `message_thread_id` وراثة الموضوعات: ترث إدخالات الموضوع إعدادات المجموعة ما لم يتم تجاوزها (`requireMention` و`allowFrom` و`skills` و`systemPrompt` و`enabled` و`groupPolicy`). - `agentId` خاص بالموضوع فقط ولا يرث من الإعدادات الافتراضية للمجموعة. + القيمة `agentId` خاصة بالموضوع فقط ولا تُورَّث من الإعدادات الافتراضية للمجموعة. - **توجيه الوكيل لكل موضوع**: يمكن لكل موضوع التوجيه إلى وكيل مختلف عبر ضبط `agentId` في تكوين الموضوع. وهذا يمنح كل موضوع مساحة عمل وذاكرة وجلسة معزولة خاصة به. مثال: + **توجيه الوكيل لكل موضوع**: يمكن لكل موضوع التوجيه إلى وكيل مختلف عبر تعيين `agentId` في إعدادات الموضوع. وهذا يمنح كل موضوع مساحة عمل وذاكرة وجلسة معزولة خاصة به. مثال: ```json5 { @@ -505,7 +505,7 @@ curl "https://api.telegram.org/bot/getUpdates" groups: { "-1001234567890": { topics: { - "1": { agentId: "main" }, // الموضوع العام → الوكيل الرئيسي + "1": { agentId: "main" }, // الموضوع العام → الوكيل main "3": { agentId: "zu" }, // موضوع التطوير → الوكيل zu "5": { agentId: "coder" } // مراجعة الشيفرة → الوكيل coder } @@ -516,9 +516,9 @@ curl "https://api.telegram.org/bot/getUpdates" } ``` - يمتلك كل موضوع عندئذٍ مفتاح جلسة خاصًا به: `agent:zu:telegram:group:-1001234567890:topic:3` + يصبح لكل موضوع بعد ذلك مفتاح جلسته الخاص: `agent:zu:telegram:group:-1001234567890:topic:3` - **ربط ACP دائم للموضوع**: يمكن لموضوعات المنتدى تثبيت جلسات harness الخاصة بـ ACP عبر عمليات ربط ACP مكتوبة على المستوى الأعلى: + **ربط ACP دائم للموضوع**: يمكن لموضوعات المنتدى تثبيت جلسات ACP harness عبر روابط ACP مكتوبة على المستوى الأعلى: - `bindings[]` مع `type: "acp"` و`match.channel: "telegram"` @@ -571,11 +571,11 @@ curl "https://api.telegram.org/bot/getUpdates" يقتصر هذا حاليًا على موضوعات المنتدى في المجموعات والمجموعات الفائقة. - **إنشاء ACP مرتبط بـ thread من الدردشة**: + **إنشاء ACP مرتبط بالخيط من الدردشة**: - يمكن للأمر `/acp spawn --thread here|auto` ربط موضوع Telegram الحالي بجلسة ACP جديدة. - - تُوجَّه رسائل الموضوع اللاحقة مباشرة إلى جلسة ACP المرتبطة (من دون الحاجة إلى `/acp steer`). - - يثبت OpenClaw رسالة تأكيد الإنشاء داخل الموضوع بعد نجاح الربط. + - تُوجَّه رسائل الموضوع اللاحقة مباشرةً إلى جلسة ACP المرتبطة (من دون الحاجة إلى `/acp steer`). + - يثبّت OpenClaw رسالة تأكيد الإنشاء داخل الموضوع بعد نجاح الربط. - يتطلب `channels.telegram.threadBindings.spawnAcpSessions=true`. يتضمن سياق القالب ما يلي: @@ -583,19 +583,19 @@ curl "https://api.telegram.org/bot/getUpdates" - `MessageThreadId` - `IsForum` - سلوك thread في الرسائل الخاصة: + سلوك خيوط الرسائل الخاصة: - - تحافظ الدردشات الخاصة التي تحتوي على `message_thread_id` على توجيه الرسائل الخاصة لكنها تستخدم مفاتيح جلسة/أهداف رد تراعي thread. + - تحتفظ الدردشات الخاصة التي تحتوي على `message_thread_id` بتوجيه الرسائل الخاصة، لكنها تستخدم مفاتيح جلسة وأهداف رد مدركة للخيوط. ### الرسائل الصوتية - يميز Telegram بين الملاحظات الصوتية وملفات الصوت. + يميّز Telegram بين الملاحظات الصوتية وملفات الصوت. - الافتراضي: سلوك ملف صوتي - - الوسم `[[audio_as_voice]]` في رد الوكيل لفرض الإرسال كملاحظة صوتية + - استخدم الوسم `[[audio_as_voice]]` في رد الوكيل لفرض الإرسال كملاحظة صوتية مثال على إجراء رسالة: @@ -611,7 +611,7 @@ curl "https://api.telegram.org/bot/getUpdates" ### رسائل الفيديو - يميز Telegram بين ملفات الفيديو وملاحظات الفيديو. + يميّز Telegram بين ملفات الفيديو وملاحظات الفيديو. مثال على إجراء رسالة: @@ -625,15 +625,15 @@ curl "https://api.telegram.org/bot/getUpdates" } ``` - لا تدعم ملاحظات الفيديو التعليقات التوضيحية؛ ويُرسل نص الرسالة المقدم بشكل منفصل. + لا تدعم ملاحظات الفيديو التسميات التوضيحية؛ ويتم إرسال نص الرسالة المقدم بشكل منفصل. ### الملصقات معالجة الملصقات الواردة: - - WEBP ثابت: يتم تنزيله ومعالجته (عنصر نائب ``) - - TGS متحرك: يتم تخطيه - - WEBM فيديو: يتم تخطيه + - ‏WEBP ثابت: يُنزَّل ويُعالَج (عنصر نائب ``) + - ‏TGS متحرك: يتم تخطيه + - ‏WEBM فيديو: يتم تخطيه حقول سياق الملصق: @@ -643,11 +643,11 @@ curl "https://api.telegram.org/bot/getUpdates" - `Sticker.fileUniqueId` - `Sticker.cachedDescription` - ملف cache الخاص بالملصقات: + ملف ذاكرة التخزين المؤقت للملصقات: - `~/.openclaw/telegram/sticker-cache.json` - تُوصف الملصقات مرة واحدة (عند الإمكان) وتُخزَّن في cache لتقليل استدعاءات الرؤية المتكررة. + يتم وصف الملصقات مرة واحدة (عندما يكون ذلك ممكنًا) وتُخزَّن مؤقتًا لتقليل استدعاءات الرؤية المتكررة. فعّل إجراءات الملصقات: @@ -674,7 +674,7 @@ curl "https://api.telegram.org/bot/getUpdates" } ``` - ابحث في الملصقات المخزنة في cache: + ابحث في الملصقات المخزنة مؤقتًا: ```json5 { @@ -690,51 +690,51 @@ curl "https://api.telegram.org/bot/getUpdates" تصل تفاعلات Telegram كتحديثات `message_reaction` (منفصلة عن حمولات الرسائل). - عند التمكين، يضع OpenClaw أحداث النظام التالية في قائمة الانتظار مثلًا: + عند تفعيلها، يضيف OpenClaw إلى قائمة الانتظار أحداث نظام مثل: - - `Telegram reaction added: 👍 by Alice (@alice) on msg 42` + - `تمت إضافة تفاعل Telegram: 👍 بواسطة Alice (@alice) على الرسالة 42` - التكوين: + الإعدادات: - - `channels.telegram.reactionNotifications`: `off | own | all` (الافتراضي: `own`) - - `channels.telegram.reactionLevel`: `off | ack | minimal | extensive` (الافتراضي: `minimal`) + - `channels.telegram.reactionNotifications`: ‏`off | own | all` (الافتراضي: `own`) + - `channels.telegram.reactionLevel`: ‏`off | ack | minimal | extensive` (الافتراضي: `minimal`) ملاحظات: - - تعني `own` تفاعلات المستخدمين على الرسائل التي أرسلها البوت فقط (بأفضل جهد عبر cache الرسائل المرسلة). - - ما زالت أحداث التفاعل تراعي عناصر التحكم في الوصول في Telegram (`dmPolicy` و`allowFrom` و`groupPolicy` و`groupAllowFrom`)؛ ويُسقَط المرسلون غير المصرح لهم. - - لا يوفّر Telegram معرّفات thread في تحديثات التفاعل. - - تُوجَّه المجموعات غير التابعة للمنتدى إلى جلسة دردشة المجموعة - - وتُوجَّه مجموعات المنتدى إلى جلسة الموضوع العام للمجموعة (`:topic:1`)، وليس إلى الموضوع الأصلي بالضبط + - تعني `own` تفاعلات المستخدم على الرسائل التي أرسلها البوت فقط (بأفضل جهد عبر ذاكرة تخزين مؤقت للرسائل المرسلة). + - ما تزال أحداث التفاعل تحترم ضوابط الوصول في Telegram (`dmPolicy` و`allowFrom` و`groupPolicy` و`groupAllowFrom`)؛ ويتم إسقاط المرسلين غير المخوَّلين. + - لا يوفر Telegram معرّفات الخيوط في تحديثات التفاعل. + - تُوجَّه المجموعات غير المنتدى إلى جلسة دردشة المجموعة + - تُوجَّه مجموعات المنتدى إلى جلسة الموضوع العام للمجموعة (`:topic:1`) وليس إلى الموضوع الأصلي الدقيق - تتضمن `allowed_updates` الخاصة بـ polling/webhook قيمة `message_reaction` تلقائيًا. + تتضمن `allowed_updates` لكل من polling/webhook القيمة `message_reaction` تلقائيًا. - يرسل `ackReaction` رمز emoji للتأكيد بينما يعالج OpenClaw رسالة واردة. + يرسل `ackReaction` رمزًا تعبيريًا للتأكيد بينما يعالج OpenClaw رسالة واردة. - ترتيب الحل: + ترتيب الحلّ: - `channels.telegram.accounts..ackReaction` - `channels.telegram.ackReaction` - `messages.ackReaction` - - الرجوع إلى emoji هوية الوكيل (`agents.list[].identity.emoji`، وإلا "👀") + - الرجوع إلى الرمز التعبيري لهوية الوكيل (`agents.list[].identity.emoji`، وإلا "👀") ملاحظات: - - يتوقع Telegram emoji موحدًا من Unicode (مثل "👀"). + - يتوقع Telegram رمزًا تعبيريًا Unicode (على سبيل المثال "👀"). - استخدم `""` لتعطيل التفاعل لقناة أو حساب. - - تكون كتابات تكوين القناة مفعلة افتراضيًا (`configWrites !== false`). + + تكون كتابات إعدادات القناة مفعّلة افتراضيًا (`configWrites !== false`). - تشمل الكتابات التي يطلقها Telegram ما يلي: + تشمل الكتابات التي يشغّلها Telegram ما يلي: - أحداث ترحيل المجموعات (`migrate_to_chat_id`) لتحديث `channels.telegram.groups` - - `/config set` و`/config unset` (يتطلب تمكين الأوامر) + - ‏`/config set` و`/config unset` (يتطلبان تمكين الأوامر) التعطيل: @@ -750,36 +750,36 @@ curl "https://api.telegram.org/bot/getUpdates" - - الافتراضي: long polling. + + الافتراضي: الاستطلاع الطويل. - وضع webhook: + وضع Webhook: - اضبط `channels.telegram.webhookUrl` - - اضبط `channels.telegram.webhookSecret` (مطلوب عند ضبط webhook URL) - - اختياريًا `channels.telegram.webhookPath` (الافتراضي `/telegram-webhook`) - - اختياريًا `channels.telegram.webhookHost` (الافتراضي `127.0.0.1`) - - اختياريًا `channels.telegram.webhookPort` (الافتراضي `8787`) + - اضبط `channels.telegram.webhookSecret` (مطلوب عند تعيين URL لـ Webhook) + - `channels.telegram.webhookPath` اختياري (الافتراضي `/telegram-webhook`) + - `channels.telegram.webhookHost` اختياري (الافتراضي `127.0.0.1`) + - `channels.telegram.webhookPort` اختياري (الافتراضي `8787`) - يرتبط مستمع webhook المحلي الافتراضي في `127.0.0.1:8787`. + يرتبط المستمع المحلي الافتراضي لوضع Webhook بالعنوان `127.0.0.1:8787`. - إذا كانت نقطة النهاية العامة لديك مختلفة، فضع reverse proxy في الأمام ووجّه `webhookUrl` إلى الرابط العام. - اضبط `webhookHost` (مثل `0.0.0.0`) عندما تحتاج عمدًا إلى ingress خارجي. + إذا كانت نقطة النهاية العامة لديك مختلفة، فضع reverse proxy أمامها ووجّه `webhookUrl` إلى الـ URL العام. + اضبط `webhookHost` (على سبيل المثال `0.0.0.0`) عندما تحتاج عمدًا إلى ingress خارجي. - القيمة الافتراضية لـ `channels.telegram.textChunkLimit` هي 4000. - يفضّل `channels.telegram.chunkMode="newline"` حدود الفقرات (الأسطر الفارغة) قبل التقسيم حسب الطول. - - يحدد `channels.telegram.mediaMaxMb` (الافتراضي 100) الحد الأقصى لحجم الوسائط الواردة والصادرة في Telegram. - - يتجاوز `channels.telegram.timeoutSeconds` مهلة عميل Telegram API (إذا لم يُضبط، تُطبَّق القيمة الافتراضية لـ grammY). - - يستخدم سجل سياق المجموعات `channels.telegram.historyLimit` أو `messages.groupChat.historyLimit` (الافتراضي 50)؛ و`0` يعطّل الميزة. - - يُمرَّر حاليًا سياق الرد/الاقتباس/إعادة التوجيه التكميلي كما تم استلامه. - - تعمل allowlists في Telegram أساسًا على تقييد من يمكنه تشغيل الوكيل، وليست حدًا كاملًا لتنقيح السياق التكميلي. + - يحدّد `channels.telegram.mediaMaxMb` (الافتراضي 100) الحجم الأقصى لوسائط Telegram الواردة والصادرة. + - يتجاوز `channels.telegram.timeoutSeconds` مهلة عميل Telegram API (إذا لم يتم تعيينه، تُطبَّق القيمة الافتراضية لـ grammY). + - يستخدم سجل سياق المجموعة `channels.telegram.historyLimit` أو `messages.groupChat.historyLimit` (الافتراضي 50)؛ وتعطّل القيمة `0` ذلك. + - يتم حاليًا تمرير السياق الإضافي للرد/الاقتباس/إعادة التوجيه كما تم استلامه. + - تتحكم قوائم السماح في Telegram أساسًا في من يمكنه تشغيل الوكيل، وليست حدًا كاملًا لتنقيح السياق الإضافي. - عناصر التحكم في سجل الرسائل الخاصة: - `channels.telegram.dmHistoryLimit` - `channels.telegram.dms[""].historyLimit` - - ينطبق تكوين `channels.telegram.retry` على مساعدات الإرسال الخاصة بـ Telegram (CLI/tools/actions) في أخطاء Telegram API الصادرة القابلة للاسترداد. + - يُطبَّق إعداد `channels.telegram.retry` على مساعدات الإرسال في Telegram ‏(CLI/tools/actions) لأخطاء API الصادرة القابلة للاسترداد. يمكن أن يكون هدف الإرسال في CLI معرّف دردشة رقميًا أو اسم مستخدم: @@ -798,79 +798,79 @@ openclaw message poll --channel telegram --target -1001234567890:topic:42 \ --poll-duration-seconds 300 --poll-public ``` - أعلام الاستطلاع الخاصة بـ Telegram فقط: + علامات الاستطلاع الخاصة بـ Telegram فقط: - - `--poll-duration-seconds` (من 5 إلى 600) + - `--poll-duration-seconds` ‏(5-600) - `--poll-anonymous` - `--poll-public` - - `--thread-id` لموضوعات المنتدى (أو استخدم هدف `:topic:`) + - `--thread-id` لموضوعات المنتدى (أو استخدم هدفًا من نوع `:topic:`) - يدعم إرسال Telegram أيضًا: + يدعم الإرسال في Telegram أيضًا: - `--buttons` للوحات المفاتيح المضمنة عندما يسمح `channels.telegram.capabilities.inlineButtons` بذلك - - `--force-document` لإرسال الصور وملفات GIF الصادرة كمستندات بدلًا من تحميلات الصور المضغوطة أو الوسائط المتحركة + - `--force-document` لإرسال الصور وملفات GIF الصادرة كمستندات بدلًا من رفعها كصور مضغوطة أو وسائط متحركة تقييد الإجراءات: - - يعطّل `channels.telegram.actions.sendMessage=false` رسائل Telegram الصادرة، بما في ذلك الاستطلاعات - - يعطّل `channels.telegram.actions.poll=false` إنشاء استطلاعات Telegram مع إبقاء الإرسالات العادية مفعلة + - يؤدي `channels.telegram.actions.sendMessage=false` إلى تعطيل رسائل Telegram الصادرة، بما في ذلك الاستطلاعات + - يؤدي `channels.telegram.actions.poll=false` إلى تعطيل إنشاء استطلاعات Telegram مع إبقاء الإرسال العادي مفعّلًا - يدعم Telegram موافقات exec في الرسائل الخاصة للموافِقين، ويمكنه اختياريًا نشر مطالبات الموافقة في الدردشة أو الموضوع الأصلي. + يدعم Telegram موافقات exec في الرسائل الخاصة للموافقين، ويمكنه اختياريًا نشر طلبات الموافقة في الدردشة أو الموضوع الأصلي. - مسار التكوين: + مسار الإعداد: - `channels.telegram.execApprovals.enabled` - - `channels.telegram.execApprovals.approvers` (اختياري؛ ويرجع إلى معرّفات المالك الرقمية المستنتجة من `allowFrom` و`defaultTo` المباشر عند الإمكان) - - `channels.telegram.execApprovals.target` (`dm` | `channel` | `both`، الافتراضي: `dm`) + - `channels.telegram.execApprovals.approvers` (اختياري؛ ويعود إلى معرّفات المالك الرقمية المستنتجة من `allowFrom` و`defaultTo` المباشر عندما يكون ذلك ممكنًا) + - `channels.telegram.execApprovals.target` ‏(`dm` | `channel` | `both`، الافتراضي: `dm`) - `agentFilter` و`sessionFilter` - يجب أن يكون الموافقون معرّفات مستخدمي Telegram رقمية. يفعّل Telegram موافقات exec الأصلية تلقائيًا عندما يكون `enabled` غير مضبوط أو `"auto"` ويمكن حل موافق واحد على الأقل، إما من `execApprovals.approvers` أو من تكوين المالك الرقمي للحساب (`allowFrom` و`defaultTo` للرسائل الخاصة المباشرة). اضبط `enabled: false` لتعطيل Telegram كعميل موافقات أصلي بشكل صريح. وإلا فستعود طلبات الموافقة إلى مسارات الموافقة الأخرى المكوّنة أو إلى سياسة الرجوع لموافقات exec. + يجب أن يكون الموافقون معرّفات مستخدمي Telegram رقمية. يفعّل Telegram موافقات exec الأصلية تلقائيًا عندما تكون `enabled` غير معيّنة أو تساوي `"auto"` ويمكن حلّ موافق واحد على الأقل، إما من `execApprovals.approvers` أو من إعداد المالك الرقمي للحساب (`allowFrom` و`defaultTo` للرسائل المباشرة). اضبط `enabled: false` لتعطيل Telegram كعميل موافقة أصلي بشكل صريح. وفي غير ذلك، تعود طلبات الموافقة إلى مسارات الموافقة الأخرى المهيأة أو إلى سياسة الرجوع لموافقات exec. - يعرض Telegram أيضًا أزرار الموافقة المشتركة المستخدمة بواسطة قنوات الدردشة الأخرى. ويضيف المهايئ الأصلي لـ Telegram أساسًا توجيه الرسائل الخاصة للموافقين، والتوزيع على القنوات/الموضوعات، وتلميحات الكتابة قبل التسليم. - عندما تكون هذه الأزرار موجودة، فهي واجهة الموافقة الأساسية؛ ويجب على OpenClaw - أن يضمّن أمر `/approve` اليدوي فقط عندما تقول نتيجة الأداة إن موافقات الدردشة غير متاحة - أو عندما تكون الموافقة اليدوية هي المسار الوحيد. + يعرض Telegram أيضًا أزرار الموافقة المشتركة التي تستخدمها قنوات الدردشة الأخرى. ويضيف مهايئ Telegram الأصلي أساسًا توجيه الرسائل الخاصة للموافقين، والتوزيع إلى القناة/الموضوع، وتلميحات الكتابة قبل التسليم. + عندما تكون هذه الأزرار موجودة، فهي تجربة الاستخدام الأساسية للموافقة؛ ويجب على OpenClaw + أن يضمّن أمر `/approve` يدويًا فقط عندما تشير نتيجة الأداة إلى أن + موافقات الدردشة غير متاحة أو أن الموافقة اليدوية هي المسار الوحيد. قواعد التسليم: - - يرسل `target: "dm"` مطالبات الموافقة فقط إلى الرسائل الخاصة للموافقين الذين تم حلهم - - يرسل `target: "channel"` المطالبة مرة أخرى إلى دردشة/موضوع Telegram الأصلي + - يرسل `target: "dm"` طلبات الموافقة فقط إلى الرسائل الخاصة للموافقين الذين تم حلّهم + - يرسل `target: "channel"` الطلب مرة أخرى إلى دردشة/موضوع Telegram الأصلي - يرسل `target: "both"` إلى الرسائل الخاصة للموافقين وإلى الدردشة/الموضوع الأصلي - لا يمكن الموافقة أو الرفض إلا للموافقين الذين تم حلهم. لا يمكن لغير الموافقين استخدام `/approve` ولا أزرار الموافقة في Telegram. + لا يمكن إلا للموافقين الذين تم حلّهم الموافقة أو الرفض. ولا يمكن لغير الموافقين استخدام `/approve` ولا استخدام أزرار الموافقة في Telegram. - سلوك حل الموافقة: + سلوك حلّ الموافقة: - - تُحل دائمًا معرّفات الموافقة المسبوقة بـ `plugin:` عبر موافقات plugin. - - تحاول معرّفات الموافقة الأخرى أولًا `exec.approval.resolve`. - - إذا كان Telegram مصرحًا له أيضًا بموافقات plugin وقالت البوابة - إن موافقة exec غير معروفة/منتهية الصلاحية، يعيد Telegram المحاولة مرة واحدة عبر + - تُحلّ المعرفات المسبوقة بـ `plugin:` دائمًا عبر موافقات Plugin. + - تجرّب معرّفات الموافقة الأخرى `exec.approval.resolve` أولًا. + - إذا كان Telegram مخوّلًا أيضًا لموافقات Plugin وكان Gateway يشير إلى + أن موافقة exec غير معروفة/منتهية الصلاحية، يعيد Telegram المحاولة مرة واحدة عبر `plugin.approval.resolve`. - - لا تسقط حالات الرفض/الأخطاء الحقيقية الخاصة بـ exec بصمت إلى حل - موافقات plugin. + - لا تنتقل حالات الرفض/الأخطاء الحقيقية لموافقة exec بصمت إلى حلّ + موافقة Plugin. - يُظهر التسليم إلى القناة نص الأمر في الدردشة، لذا فعّل `channel` أو `both` فقط في المجموعات/الموضوعات الموثوقة. عندما تصل المطالبة إلى موضوع منتدى، يحافظ OpenClaw على الموضوع لكل من مطالبة الموافقة والمتابعة بعد الموافقة. وتنتهي صلاحية موافقات exec بعد 30 دقيقة افتراضيًا. + يُظهر التسليم إلى القناة نص الأمر في الدردشة، لذا فعّل `channel` أو `both` فقط في المجموعات/الموضوعات الموثوقة. وعندما يصل الطلب إلى موضوع منتدى، يحافظ OpenClaw على الموضوع لكل من طلب الموافقة والمتابعة بعد الموافقة. تنتهي صلاحية موافقات exec بعد 30 دقيقة افتراضيًا. - تعتمد أزرار الموافقة المضمنة أيضًا على سماح `channels.telegram.capabilities.inlineButtons` بالسطح المستهدف (`dm` أو `group` أو `all`). + تعتمد أزرار الموافقة المضمنة أيضًا على سماح `channels.telegram.capabilities.inlineButtons` للسطح الهدف (`dm` أو `group` أو `all`). - مستندات ذات صلة: [موافقات Exec](/tools/exec-approvals) + وثائق ذات صلة: [موافقات Exec](/ar/tools/exec-approvals) ## عناصر التحكم في ردود الأخطاء -عندما يواجه الوكيل خطأ في التسليم أو خطأ من المزوّد، يمكن لـ Telegram إما الرد بنص الخطأ أو كتمه. يتحكم مفتاحا تكوين في هذا السلوك: +عندما يواجه الوكيل خطأ في التسليم أو المزوّد، يمكن لـ Telegram إما الرد بنص الخطأ أو كتمه. يتحكم مفتاحا إعداد في هذا السلوك: -| المفتاح | القيم | الافتراضي | الوصف | -| ----------------------------------- | ----------------- | --------- | ----------------------------------------------------------------------------------------- | -| `channels.telegram.errorPolicy` | `reply`, `silent` | `reply` | يرسل `reply` رسالة خطأ ودية إلى الدردشة. ويكتم `silent` ردود الأخطاء بالكامل. | -| `channels.telegram.errorCooldownMs` | number (ms) | `60000` | الحد الأدنى للوقت بين ردود الأخطاء على الدردشة نفسها. يمنع سيلان الأخطاء أثناء الانقطاعات. | +| المفتاح | القيم | الافتراضي | الوصف | +| ------------------------------------ | ----------------- | --------- | ------------------------------------------------------------------------------------------- | +| `channels.telegram.errorPolicy` | `reply`, `silent` | `reply` | ترسل `reply` رسالة خطأ ودية إلى الدردشة. وتكتم `silent` ردود الأخطاء بالكامل. | +| `channels.telegram.errorCooldownMs` | number (ms) | `60000` | الحد الأدنى للوقت بين ردود الأخطاء إلى الدردشة نفسها. يمنع إغراق الأخطاء أثناء الانقطاعات. | -تتوفر تجاوزات لكل حساب ولكل مجموعة ولكل موضوع (بنفس الوراثة الخاصة بمفاتيح تكوين Telegram الأخرى). +تتوفر تجاوزات على مستوى الحساب، والمجموعة، والموضوع (بنفس الوراثة المستخدمة لمفاتيح إعداد Telegram الأخرى). ```json5 { @@ -891,39 +891,39 @@ openclaw message poll --channel telegram --target -1001234567890:topic:42 \ ## استكشاف الأخطاء وإصلاحها - + - - إذا كان `requireMention=false`، فيجب أن يسمح وضع الخصوصية في Telegram بالرؤية الكاملة. - - BotFather: `/setprivacy` -> Disable + - إذا كانت `requireMention=false`، فيجب أن يسمح وضع الخصوصية في Telegram بالرؤية الكاملة. + - BotFather: ‏`/setprivacy` -> تعطيل - ثم أزل البوت وأعد إضافته إلى المجموعة - - يحذر `openclaw channels status` عندما يتوقع التكوين رسائل مجموعات من دون إشارة. - - يستطيع `openclaw channels status --probe` فحص معرّفات المجموعات الرقمية الصريحة؛ أما `"*"` فلا يمكن فحص العضوية لها. + - يحذّر `openclaw channels status` عندما تتوقع الإعدادات رسائل مجموعات غير مذكور فيها البوت. + - يمكن لـ `openclaw channels status --probe` التحقق من معرّفات مجموعات رقمية صريحة؛ ولا يمكن فحص العضوية للرمز العام `"*"`. - اختبار جلسة سريع: `/activation always`. - + - - عندما تكون `channels.telegram.groups` موجودة، يجب أن تكون المجموعة مدرجة (أو أن تتضمن `"*"`) - - تحقق من عضوية البوت في المجموعة - - راجع السجلات: `openclaw logs --follow` لمعرفة أسباب التخطي + - عندما يكون `channels.telegram.groups` موجودًا، يجب أن تكون المجموعة مدرجة (أو تتضمن `"*"`) + - تحقّق من عضوية البوت في المجموعة + - راجع السجلات: `openclaw logs --follow` لمعرفة أسباب التجاوز - + - - صرّح هوية المرسل الخاص بك (pairing و/أو `allowFrom` رقمية) - - ما زال تفويض الأوامر يطبّق حتى عندما تكون سياسة المجموعة `open` - - يعني `setMyCommands failed` مع `BOT_COMMANDS_TOO_MUCH` أن القائمة الأصلية تحتوي على عدد كبير جدًا من الإدخالات؛ قلّل أوامر plugin/Skills/الأوامر المخصصة أو عطّل القوائم الأصلية - - يشير `setMyCommands failed` مع أخطاء الشبكة/fetch عادةً إلى مشكلات في الوصول إلى DNS/HTTPS الخاص بـ `api.telegram.org` + - خوّل هوية المرسل لديك (الإقران و/أو `allowFrom` الرقمي) + - يظل تخويل الأوامر مطبّقًا حتى عندما تكون سياسة المجموعة `open` + - تعني الرسالة `setMyCommands failed` مع `BOT_COMMANDS_TOO_MUCH` أن القائمة الأصلية تحتوي على عدد كبير جدًا من الإدخالات؛ قلّل أوامر Plugin/Skills/الأوامر المخصصة أو عطّل القوائم الأصلية + - تشير الرسالة `setMyCommands failed` مع أخطاء الشبكة/`fetch` عادةً إلى مشكلات في الوصول عبر DNS/HTTPS إلى `api.telegram.org` - - يمكن أن يؤدي Node 22+ مع fetch/proxy مخصص إلى سلوك إجهاض فوري إذا لم تتطابق أنواع AbortSignal. - - تحل بعض المضيفات `api.telegram.org` إلى IPv6 أولًا؛ وقد يؤدي خروج IPv6 المعطوب إلى أعطال متقطعة في Telegram API. - - إذا تضمنت السجلات `TypeError: fetch failed` أو `Network request for 'getUpdates' failed!`، فإن OpenClaw يعيد الآن محاولة هذه الحالات كأخطاء شبكة قابلة للاسترداد. + - يمكن أن يؤدي Node 22+ مع fetch/proxy مخصص إلى سلوك إيقاف فوري إذا لم تتطابق أنواع AbortSignal. + - تحلّ بعض المضيفات `api.telegram.org` إلى IPv6 أولًا؛ وقد يتسبب خروج IPv6 المعطّل في إخفاقات متقطعة في Telegram API. + - إذا تضمنت السجلات `TypeError: fetch failed` أو `Network request for 'getUpdates' failed!`، يعيد OpenClaw الآن محاولة هذه الأخطاء بصفتها أخطاء شبكة قابلة للاسترداد. - على مضيفات VPS ذات الخروج/TLS المباشر غير المستقر، وجّه استدعاءات Telegram API عبر `channels.telegram.proxy`: ```yaml @@ -933,7 +933,7 @@ channels: ``` - يستخدم Node 22+ افتراضيًا `autoSelectFamily=true` (باستثناء WSL2) و`dnsResultOrder=ipv4first`. - - إذا كان مضيفك WSL2 أو يعمل صراحةً بشكل أفضل مع سلوك IPv4 فقط، فافرض اختيار family: + - إذا كان مضيفك WSL2 أو كان يعمل بشكل أفضل صراحةً بسلوك IPv4 فقط، فافرض اختيار العائلة: ```yaml channels: @@ -942,11 +942,11 @@ channels: autoSelectFamily: false ``` - - تُسمح بالفعل افتراضيًا إجابات نطاق القياس RFC 2544 (`198.18.0.0/15`) - لتنزيلات وسائط Telegram. وإذا كانت fake-IP موثوقة أو - transparent proxy تعيد كتابة `api.telegram.org` إلى عنوان آخر - خاص/داخلي/ذو استخدام خاص أثناء تنزيلات الوسائط، فيمكنك تفعيل - تجاوز Telegram فقط: + - إن استجابات نطاقات القياس RFC 2544 ‏(`198.18.0.0/15`) مسموح بها بالفعل + لتنزيلات وسائط Telegram افتراضيًا. إذا كان عنوان IP وهميًا موثوقًا أو + reverse proxy شفاف يعيد كتابة `api.telegram.org` إلى عنوان + خاص/داخلي/ذي استخدام خاص آخر أثناء تنزيلات الوسائط، فيمكنك + تفعيل تجاوز Telegram فقط: ```yaml channels: @@ -955,25 +955,25 @@ channels: dangerouslyAllowPrivateNetwork: true ``` - - يتوفر التفعيل نفسه لكل حساب في + - يتوفر نفس التفعيل الاختياري لكل حساب ضمن `channels.telegram.accounts..network.dangerouslyAllowPrivateNetwork`. - - إذا كان proxy لديك يحل مضيفات وسائط Telegram إلى `198.18.x.x`، فاترك - الخيار الخطير معطلًا أولًا. إذ تسمح وسائط Telegram بالفعل افتراضيًا - بنطاق القياس RFC 2544. + - إذا كان proxy لديك يحلّ مضيفات وسائط Telegram إلى `198.18.x.x`، فاترك + العلامة الخطيرة معطلة أولًا. تسمح وسائط Telegram بالفعل بنطاق القياس RFC 2544 + افتراضيًا. - يضعف `channels.telegram.network.dangerouslyAllowPrivateNetwork` وسائل حماية - Telegram media SSRF. استخدمه فقط في بيئات proxy موثوقة - يتحكم فيها المشغل، مثل توجيه fake-IP في Clash أو Mihomo أو Surge عندما - تولّد هذه الأدوات إجابات خاصة أو ذات استخدام خاص خارج - نطاق القياس RFC 2544 الافتراضي. اتركه معطلًا عند الوصول العادي العام إلى Telegram. + يضعف `channels.telegram.network.dangerouslyAllowPrivateNetwork` حماية SSRF + لوسائط Telegram. استخدمه فقط مع بيئات proxy موثوقة يتحكم فيها المشغّل + مثل Clash أو Mihomo أو Surge fake-IP routing عندما + تُنشئ إجابات خاصة أو ذات استخدام خاص خارج نطاق القياس RFC 2544. + اتركه معطلًا للوصول العادي إلى Telegram عبر الإنترنت العام. - - تجاوزات البيئة (مؤقتة): + - تجاوزات متغيرات البيئة (مؤقتة): - `OPENCLAW_TELEGRAM_DISABLE_AUTO_SELECT_FAMILY=1` - `OPENCLAW_TELEGRAM_ENABLE_AUTO_SELECT_FAMILY=1` - `OPENCLAW_TELEGRAM_DNS_RESULT_ORDER=ipv4first` - - تحقّق من إجابات DNS: + - تحقّق من استجابات DNS: ```bash dig +short api.telegram.org A @@ -983,97 +983,97 @@ dig +short api.telegram.org AAAA -مزيد من المساعدة: [استكشاف أخطاء القنوات وإصلاحها](/channels/troubleshooting). +مزيد من المساعدة: [استكشاف أخطاء القناة وإصلاحها](/ar/channels/troubleshooting). -## مؤشرات مرجع تكوين Telegram +## مؤشرات مرجع إعدادات Telegram المرجع الأساسي: -- `channels.telegram.enabled`: تمكين/تعطيل بدء تشغيل القناة. -- `channels.telegram.botToken`: bot token (BotFather). -- `channels.telegram.tokenFile`: قراءة token من مسار ملف عادي. تُرفض الروابط الرمزية. +- `channels.telegram.enabled`: تفعيل/تعطيل بدء تشغيل القناة. +- `channels.telegram.botToken`: رمز البوت (BotFather). +- `channels.telegram.tokenFile`: قراءة الرمز من مسار ملف عادي. تُرفض الروابط الرمزية. - `channels.telegram.dmPolicy`: ‏`pairing | allowlist | open | disabled` (الافتراضي: pairing). -- `channels.telegram.allowFrom`: allowlist الرسائل الخاصة (معرّفات مستخدمي Telegram الرقمية). تتطلب `allowlist` معرّف مرسل واحدًا على الأقل. وتتطلب `open` القيمة `"*"`. يمكن لـ `openclaw doctor --fix` تحويل إدخالات `@username` القديمة إلى معرّفات، كما يمكنه استعادة إدخالات allowlist من ملفات pairing-store في تدفقات ترحيل allowlist. -- `channels.telegram.actions.poll`: تمكين أو تعطيل إنشاء استطلاعات Telegram (مفعّل افتراضيًا؛ وما زال يتطلب `sendMessage`). -- `channels.telegram.defaultTo`: هدف Telegram الافتراضي الذي يستخدمه CLI مع `--deliver` عندما لا يكون `--reply-to` صريحًا. +- `channels.telegram.allowFrom`: قائمة السماح للرسائل الخاصة (معرّفات مستخدمي Telegram الرقمية). تتطلب `allowlist` وجود معرّف مرسل واحد على الأقل. وتتطلب `open` القيمة `"*"`. يمكن للأمر `openclaw doctor --fix` حلّ إدخالات `@username` القديمة إلى معرّفات، كما يمكنه استعادة إدخالات قائمة السماح من ملفات مخزن الإقران في تدفقات ترحيل قائمة السماح. +- `channels.telegram.actions.poll`: تفعيل أو تعطيل إنشاء استطلاعات Telegram (الافتراضي: مفعّل؛ وما يزال يتطلب `sendMessage`). +- `channels.telegram.defaultTo`: هدف Telegram الافتراضي الذي يستخدمه CLI مع `--deliver` عند عدم توفير `--reply-to` صريح. - `channels.telegram.groupPolicy`: ‏`open | allowlist | disabled` (الافتراضي: allowlist). -- `channels.telegram.groupAllowFrom`: allowlist مرسلي المجموعات (معرّفات مستخدمي Telegram الرقمية). يمكن لـ `openclaw doctor --fix` تحويل إدخالات `@username` القديمة إلى معرّفات. تُتجاهل الإدخالات غير الرقمية وقت التفويض. لا يستخدم تفويض المجموعات الرجوع إلى DM pairing-store (`2026.2.25+`). -- أولوية الحسابات المتعددة: - - عندما يتم تكوين معرّفي حسابين أو أكثر، اضبط `channels.telegram.defaultAccount` (أو ضمّن `channels.telegram.accounts.default`) لجعل التوجيه الافتراضي صريحًا. - - إذا لم يُضبط أي منهما، يعود OpenClaw إلى أول معرّف حساب مُوحَّد ويصدر `openclaw doctor` تحذيرًا. - - ينطبق `channels.telegram.accounts.default.allowFrom` و`channels.telegram.accounts.default.groupAllowFrom` على حساب `default` فقط. - - ترث الحسابات المسماة `channels.telegram.allowFrom` و`channels.telegram.groupAllowFrom` عندما تكون قيم مستوى الحساب غير مضبوطة. +- `channels.telegram.groupAllowFrom`: قائمة سماح مرسلي المجموعات (معرّفات مستخدمي Telegram الرقمية). يمكن للأمر `openclaw doctor --fix` حلّ إدخالات `@username` القديمة إلى معرّفات. تُتجاهل الإدخالات غير الرقمية وقت المصادقة. لا تستخدم مصادقة المجموعات الرجوع إلى مخزن إقران الرسائل الخاصة (`2026.2.25+`). +- أسبقية الحسابات المتعددة: + - عند إعداد معرّفي حسابين أو أكثر، اضبط `channels.telegram.defaultAccount` (أو أدرج `channels.telegram.accounts.default`) لجعل التوجيه الافتراضي صريحًا. + - إذا لم يتم تعيين أي منهما، يعود OpenClaw إلى أول معرّف حساب مُطبَّع ويحذّر `openclaw doctor`. + - ينطبق `channels.telegram.accounts.default.allowFrom` و`channels.telegram.accounts.default.groupAllowFrom` على الحساب `default` فقط. + - ترث الحسابات المسماة `channels.telegram.allowFrom` و`channels.telegram.groupAllowFrom` عندما لا تكون قيم مستوى الحساب معيّنة. - لا ترث الحسابات المسماة `channels.telegram.accounts.default.allowFrom` / `groupAllowFrom`. -- `channels.telegram.groups`: الإعدادات الافتراضية لكل مجموعة + allowlist (استخدم `"*"` للإعدادات العامة الافتراضية). - - `channels.telegram.groups..groupPolicy`: تجاوز لكل مجموعة لـ groupPolicy (`open | allowlist | disabled`). - - `channels.telegram.groups..requireMention`: تقييد الإشارات الافتراضي. - - `channels.telegram.groups..skills`: مرشح Skills (الحذف = كل Skills، والفارغ = لا شيء). - - `channels.telegram.groups..allowFrom`: تجاوز allowlist مرسلين لكل مجموعة. - - `channels.telegram.groups..systemPrompt`: system prompt إضافي للمجموعة. +- `channels.telegram.groups`: إعدادات افتراضية لكل مجموعة + قائمة سماح (استخدم `"*"` للإعدادات الافتراضية العامة). + - `channels.telegram.groups..groupPolicy`: تجاوز لكل مجموعة لـ groupPolicy ‏(`open | allowlist | disabled`). + - `channels.telegram.groups..requireMention`: التقييد الافتراضي للإشارة. + - `channels.telegram.groups..skills`: مرشح Skills ‏(الحذف = كل Skills، الفارغ = لا شيء). + - `channels.telegram.groups..allowFrom`: تجاوز قائمة سماح المرسلين لكل مجموعة. + - `channels.telegram.groups..systemPrompt`: مطالبة نظام إضافية للمجموعة. - `channels.telegram.groups..enabled`: تعطيل المجموعة عندما تكون `false`. - `channels.telegram.groups..topics..*`: تجاوزات لكل موضوع (حقول المجموعة + `agentId` الخاص بالموضوع فقط). - - `channels.telegram.groups..topics..agentId`: توجيه هذا الموضوع إلى وكيل محدد (يتجاوز توجيه مستوى المجموعة وbindings). -- `channels.telegram.groups..topics..groupPolicy`: تجاوز لكل موضوع لـ groupPolicy (`open | allowlist | disabled`). -- `channels.telegram.groups..topics..requireMention`: تجاوز تقييد الإشارات لكل موضوع. -- `bindings[]` على المستوى الأعلى مع `type: "acp"` ومعرّف الموضوع القياسي `chatId:topic:topicId` في `match.peer.id`: حقول ربط ACP الدائم للموضوع (راجع [وكلاء ACP](/tools/acp-agents#channel-specific-settings)). -- `channels.telegram.direct..topics..agentId`: توجيه موضوعات الرسائل الخاصة إلى وكيل محدد (السلوك نفسه مثل موضوعات المنتدى). -- `channels.telegram.execApprovals.enabled`: تمكين Telegram كعميل موافقات exec قائم على الدردشة لهذا الحساب. -- `channels.telegram.execApprovals.approvers`: معرّفات مستخدمي Telegram المسموح لهم بالموافقة على طلبات exec أو رفضها. اختياري عندما يعرّف `channels.telegram.allowFrom` أو `channels.telegram.defaultTo` المباشر المالك مسبقًا. -- `channels.telegram.execApprovals.target`: ‏`dm | channel | both` (الافتراضي: `dm`). يحافظ `channel` و`both` على موضوع Telegram الأصلي عند وجوده. -- `channels.telegram.execApprovals.agentFilter`: مرشح اختياري لمعرّف الوكيل لمطالبات الموافقة المعاد توجيهها. -- `channels.telegram.execApprovals.sessionFilter`: مرشح اختياري لمفتاح الجلسة (سلسلة فرعية أو regex) لمطالبات الموافقة المعاد توجيهها. -- `channels.telegram.accounts..execApprovals`: تجاوز لكل حساب لتوجيه موافقات exec وتفويض الموافقين في Telegram. + - `channels.telegram.groups..topics..agentId`: توجيه هذا الموضوع إلى وكيل محدد (يتجاوز التوجيه على مستوى المجموعة والربط). +- `channels.telegram.groups..topics..groupPolicy`: تجاوز لكل موضوع لـ groupPolicy ‏(`open | allowlist | disabled`). +- `channels.telegram.groups..topics..requireMention`: تجاوز تقييد الإشارة لكل موضوع. +- `bindings[]` على المستوى الأعلى مع `type: "acp"` ومعرّف الموضوع القياسي `chatId:topic:topicId` في `match.peer.id`: حقول ربط موضوع ACP الدائم (راجع [وكلاء ACP](/ar/tools/acp-agents#channel-specific-settings)). +- `channels.telegram.direct..topics..agentId`: توجيه موضوعات الرسائل الخاصة إلى وكيل محدد (نفس سلوك موضوعات المنتدى). +- `channels.telegram.execApprovals.enabled`: تفعيل Telegram كعميل موافقة exec قائم على الدردشة لهذا الحساب. +- `channels.telegram.execApprovals.approvers`: معرّفات مستخدمي Telegram المسموح لهم بالموافقة على طلبات exec أو رفضها. اختياري عندما يحدد `channels.telegram.allowFrom` أو `channels.telegram.defaultTo` المباشر المالك بالفعل. +- `channels.telegram.execApprovals.target`: ‏`dm | channel | both` (الافتراضي: `dm`). يحافظ `channel` و`both` على موضوع Telegram الأصلي عندما يكون موجودًا. +- `channels.telegram.execApprovals.agentFilter`: مرشح اختياري لمعرّف الوكيل لطلبات الموافقة المُعاد توجيهها. +- `channels.telegram.execApprovals.sessionFilter`: مرشح اختياري لمفتاح الجلسة (substring أو regex) لطلبات الموافقة المُعاد توجيهها. +- `channels.telegram.accounts..execApprovals`: تجاوز لكل حساب لتوجيه موافقات exec في Telegram وتخويل الموافقين. - `channels.telegram.capabilities.inlineButtons`: ‏`off | dm | group | all | allowlist` (الافتراضي: allowlist). - `channels.telegram.accounts..capabilities.inlineButtons`: تجاوز لكل حساب. -- `channels.telegram.commands.nativeSkills`: تمكين/تعطيل أوامر Skills الأصلية في Telegram. +- `channels.telegram.commands.nativeSkills`: تفعيل/تعطيل أوامر Skills الأصلية في Telegram. - `channels.telegram.replyToMode`: ‏`off | first | all` (الافتراضي: `off`). -- `channels.telegram.textChunkLimit`: حجم الأجزاء الصادرة (أحرف). -- `channels.telegram.chunkMode`: ‏`length` (الافتراضي) أو `newline` للتقسيم على الأسطر الفارغة (حدود الفقرات) قبل التقسيم بحسب الطول. +- `channels.telegram.textChunkLimit`: حجم التقسيم الصادر (أحرف). +- `channels.telegram.chunkMode`: ‏`length` (الافتراضي) أو `newline` للتقسيم على الأسطر الفارغة (حدود الفقرات) قبل التقسيم حسب الطول. - `channels.telegram.linkPreview`: تبديل معاينات الروابط للرسائل الصادرة (الافتراضي: true). -- `channels.telegram.streaming`: ‏`off | partial | block | progress` (معاينة البث المباشر؛ الافتراضي: `partial`؛ تتحول `progress` إلى `partial`؛ و`block` للتوافق مع وضع المعاينة القديم). يستخدم بث المعاينة في Telegram رسالة معاينة واحدة يتم تعديلها في مكانها. -- `channels.telegram.mediaMaxMb`: الحد الأقصى لوسائط Telegram الواردة/الصادرة (ميغابايت، الافتراضي: 100). -- `channels.telegram.retry`: سياسة إعادة المحاولة لمساعدات الإرسال في Telegram (CLI/tools/actions) عند أخطاء API الصادرة القابلة للاسترداد (المحاولات وminDelayMs وmaxDelayMs وjitter). -- `channels.telegram.network.autoSelectFamily`: تجاوز autoSelectFamily في Node (true=تمكين، false=تعطيل). يكون مفعّلًا افتراضيًا على Node 22+، مع تعطيل افتراضي في WSL2. -- `channels.telegram.network.dnsResultOrder`: تجاوز ترتيب نتائج DNS (`ipv4first` أو `verbatim`). يكون `ipv4first` افتراضيًا على Node 22+. -- `channels.telegram.network.dangerouslyAllowPrivateNetwork`: تفعيل خطير لبيئات fake-IP أو transparent-proxy الموثوقة حيث تُحل تنزيلات وسائط Telegram لـ `api.telegram.org` إلى عناوين خاصة/داخلية/ذات استخدام خاص خارج السماح الافتراضي لنطاق RFC 2544. -- `channels.telegram.proxy`: URL للـ proxy لاستدعاءات Bot API (SOCKS/HTTP). -- `channels.telegram.webhookUrl`: تمكين وضع webhook (يتطلب `channels.telegram.webhookSecret`). -- `channels.telegram.webhookSecret`: سر webhook (مطلوب عند ضبط webhookUrl). -- `channels.telegram.webhookPath`: مسار webhook المحلي (الافتراضي `/telegram-webhook`). -- `channels.telegram.webhookHost`: مضيف ربط webhook المحلي (الافتراضي `127.0.0.1`). -- `channels.telegram.webhookPort`: منفذ ربط webhook المحلي (الافتراضي `8787`). +- `channels.telegram.streaming`: ‏`off | partial | block | progress` (معاينة البث المباشر؛ الافتراضي: `partial`؛ تتحول `progress` إلى `partial`؛ و`block` لتوافق وضع المعاينة القديم). يستخدم بث المعاينة في Telegram رسالة معاينة واحدة يتم تعديلها في مكانها. +- `channels.telegram.mediaMaxMb`: الحد الأقصى لوسائط Telegram الواردة/الصادرة (MB، الافتراضي: 100). +- `channels.telegram.retry`: سياسة إعادة المحاولة لمساعدات الإرسال في Telegram ‏(CLI/tools/actions) عند أخطاء API الصادرة القابلة للاسترداد (attempts وminDelayMs وmaxDelayMs وjitter). +- `channels.telegram.network.autoSelectFamily`: تجاوز Node ‏autoSelectFamily ‏(true=تفعيل، false=تعطيل). يكون مفعّلًا افتراضيًا على Node 22+، مع تعطيله افتراضيًا على WSL2. +- `channels.telegram.network.dnsResultOrder`: تجاوز ترتيب نتائج DNS ‏(`ipv4first` أو `verbatim`). تكون القيمة الافتراضية `ipv4first` على Node 22+. +- `channels.telegram.network.dangerouslyAllowPrivateNetwork`: تفعيل اختياري خطير لبيئات fake-IP أو transparent-proxy الموثوقة حيث تُحل تنزيلات وسائط Telegram لـ `api.telegram.org` إلى عناوين خاصة/داخلية/ذات استخدام خاص خارج السماح الافتراضي لنطاق القياس RFC 2544. +- `channels.telegram.proxy`: URL للـ proxy لاستدعاءات Bot API ‏(SOCKS/HTTP). +- `channels.telegram.webhookUrl`: تفعيل وضع Webhook ‏(يتطلب `channels.telegram.webhookSecret`). +- `channels.telegram.webhookSecret`: سر Webhook ‏(مطلوب عند تعيين webhookUrl). +- `channels.telegram.webhookPath`: مسار Webhook المحلي (الافتراضي `/telegram-webhook`). +- `channels.telegram.webhookHost`: مضيف الربط المحلي لـ Webhook ‏(الافتراضي `127.0.0.1`). +- `channels.telegram.webhookPort`: منفذ الربط المحلي لـ Webhook ‏(الافتراضي `8787`). - `channels.telegram.actions.reactions`: تقييد تفاعلات أداة Telegram. -- `channels.telegram.actions.sendMessage`: تقييد إرسال رسائل أداة Telegram. -- `channels.telegram.actions.deleteMessage`: تقييد حذف رسائل أداة Telegram. -- `channels.telegram.actions.sticker`: تقييد إجراءات ملصقات Telegram — الإرسال والبحث (الافتراضي: false). -- `channels.telegram.reactionNotifications`: ‏`off | own | all` — التحكم في التفاعلات التي تطلق أحداث النظام (الافتراضي: `own` عندما لا تُضبط). -- `channels.telegram.reactionLevel`: ‏`off | ack | minimal | extensive` — التحكم في قدرة الوكيل على التفاعل (الافتراضي: `minimal` عندما لا تُضبط). -- `channels.telegram.errorPolicy`: ‏`reply | silent` — التحكم في سلوك ردود الأخطاء (الافتراضي: `reply`). وتُدعم تجاوزات لكل حساب/مجموعة/موضوع. -- `channels.telegram.errorCooldownMs`: الحد الأدنى بالميلي ثانية بين ردود الأخطاء للدردشة نفسها (الافتراضي: `60000`). يمنع سيلان الأخطاء أثناء الانقطاعات. +- `channels.telegram.actions.sendMessage`: تقييد إرسال الرسائل عبر أداة Telegram. +- `channels.telegram.actions.deleteMessage`: تقييد حذف الرسائل عبر أداة Telegram. +- `channels.telegram.actions.sticker`: تقييد إجراءات الملصقات في Telegram — الإرسال والبحث (الافتراضي: false). +- `channels.telegram.reactionNotifications`: ‏`off | own | all` — التحكم في أي التفاعلات تُطلق أحداث النظام (الافتراضي: `own` عند عدم التعيين). +- `channels.telegram.reactionLevel`: ‏`off | ack | minimal | extensive` — التحكم في قدرة الوكيل على التفاعل (الافتراضي: `minimal` عند عدم التعيين). +- `channels.telegram.errorPolicy`: ‏`reply | silent` — التحكم في سلوك الرد على الأخطاء (الافتراضي: `reply`). تُدعم التجاوزات لكل حساب/مجموعة/موضوع. +- `channels.telegram.errorCooldownMs`: الحد الأدنى بالمللي ثانية بين ردود الأخطاء على الدردشة نفسها (الافتراضي: `60000`). يمنع إغراق الأخطاء أثناء الانقطاعات. -- [مرجع التكوين - Telegram](/gateway/configuration-reference#telegram) +- [مرجع الإعدادات - Telegram](/ar/gateway/configuration-reference#telegram) -حقول Telegram عالية الأهمية: +حقول Telegram الخاصة عالية الإشارة: -- بدء التشغيل/المصادقة: `enabled` و`botToken` و`tokenFile` و`accounts.*` (`tokenFile` يجب أن يشير إلى ملف عادي؛ وتُرفض الروابط الرمزية) -- التحكم في الوصول: `dmPolicy` و`allowFrom` و`groupPolicy` و`groupAllowFrom` و`groups` و`groups.*.topics.*` و`bindings[]` على المستوى الأعلى (`type: "acp"`) +- بدء التشغيل/المصادقة: `enabled` و`botToken` و`tokenFile` و`accounts.*` ‏(`tokenFile` يجب أن يشير إلى ملف عادي؛ وتُرفض الروابط الرمزية) +- التحكم في الوصول: `dmPolicy` و`allowFrom` و`groupPolicy` و`groupAllowFrom` و`groups` و`groups.*.topics.*` و`bindings[]` على المستوى الأعلى ‏(`type: "acp"`) - موافقات exec: ‏`execApprovals` و`accounts.*.execApprovals` - الأوامر/القائمة: `commands.native` و`commands.nativeSkills` و`customCommands` -- threading/الردود: `replyToMode` -- البث: `streaming` (المعاينة) و`blockStreaming` +- الخيوط/الردود: `replyToMode` +- البث: `streaming` ‏(معاينة)، `blockStreaming` - التنسيق/التسليم: `textChunkLimit` و`chunkMode` و`linkPreview` و`responsePrefix` - الوسائط/الشبكة: `mediaMaxMb` و`timeoutSeconds` و`retry` و`network.autoSelectFamily` و`network.dangerouslyAllowPrivateNetwork` و`proxy` -- webhook: ‏`webhookUrl` و`webhookSecret` و`webhookPath` و`webhookHost` -- الإجراءات/القدرات: `capabilities.inlineButtons` و`actions.sendMessage|editMessage|deleteMessage|reactions|sticker` +- Webhook: ‏`webhookUrl` و`webhookSecret` و`webhookPath` و`webhookHost` +- الإجراءات/الإمكانات: `capabilities.inlineButtons` و`actions.sendMessage|editMessage|deleteMessage|reactions|sticker` - التفاعلات: `reactionNotifications` و`reactionLevel` - الأخطاء: `errorPolicy` و`errorCooldownMs` - الكتابات/السجل: `configWrites` و`historyLimit` و`dmHistoryLimit` و`dms.*.historyLimit` ## ذو صلة -- [الإقران](/channels/pairing) -- [المجموعات](/channels/groups) -- [الأمان](/gateway/security) -- [توجيه القنوات](/channels/channel-routing) -- [التوجيه متعدد الوكلاء](/concepts/multi-agent) -- [استكشاف الأخطاء وإصلاحها](/channels/troubleshooting) +- [الإقران](/ar/channels/pairing) +- [المجموعات](/ar/channels/groups) +- [الأمان](/ar/gateway/security) +- [توجيه القنوات](/ar/channels/channel-routing) +- [التوجيه متعدد الوكلاء](/ar/concepts/multi-agent) +- [استكشاف الأخطاء وإصلاحها](/ar/channels/troubleshooting) diff --git a/docs/ar/channels/troubleshooting.md b/docs/ar/channels/troubleshooting.md index f775408c1..083cef94b 100644 --- a/docs/ar/channels/troubleshooting.md +++ b/docs/ar/channels/troubleshooting.md @@ -1,19 +1,19 @@ --- read_when: - - يشير نقل القناة إلى أنه متصل لكن الردود تفشل - - تحتاج إلى فحوصات خاصة بالقناة قبل الرجوع إلى وثائق المزوّد المتعمقة -summary: استكشاف سريع لمشكلات القنوات مع مؤشرات أعطال وإصلاحات خاصة بكل قناة -title: استكشاف مشكلات القنوات وإصلاحها + - يشير نقل القناة إلى أنه متصل، لكن الردود تفشل + - تحتاج إلى عمليات تحقق خاصة بالقناة قبل التعمق في وثائق المزوّد +summary: استكشاف أخطاء مستوى القناة وإصلاحها بسرعة مع تواقيع الأعطال والإصلاحات الخاصة بكل قناة +title: استكشاف أخطاء القناة وإصلاحها x-i18n: - generated_at: "2026-04-05T12:36:55Z" + generated_at: "2026-04-20T07:29:33Z" model: gpt-5.4 provider: openai - source_hash: d45d8220505ea420d970b20bc66e65216c2d7024b5736db1936421ffc0676e1f + source_hash: 0aef31742cd5cc4af3fa3d3ea1acba51875ad4a1423c0e8c87372c3df31b0528 source_path: channels/troubleshooting.md workflow: 15 --- -# استكشاف مشكلات القنوات وإصلاحها +# استكشاف أخطاء القناة وإصلاحها استخدم هذه الصفحة عندما تتصل قناة ما لكن يكون السلوك غير صحيح. @@ -29,112 +29,113 @@ openclaw doctor openclaw channels status --probe ``` -الخط الأساسي السليم: +خط الأساس السليم: - `Runtime: running` -- `RPC probe: ok` +- `Connectivity probe: ok` +- `Capability: read-only` أو `write-capable` أو `admin-capable` - يُظهر فحص القناة أن النقل متصل، وحيثما كان ذلك مدعومًا، `works` أو `audit ok` ## WhatsApp -### مؤشرات أعطال WhatsApp +### تواقيع أعطال WhatsApp -| العرض | أسرع فحص | الإصلاح | -| ----------------------------- | -------------------------------------------------- | -------------------------------------------------------- | -| متصل لكن لا توجد ردود على الرسائل المباشرة | `openclaw pairing list whatsapp` | وافق على المرسل أو بدّل سياسة الرسائل المباشرة/قائمة السماح. | -| يتم تجاهل رسائل المجموعات | تحقّق من `requireMention` وأنماط الإشارة في الإعدادات | اذكر البوت أو خفف سياسة الإشارة لتلك المجموعة. | -| حلقات عشوائية من قطع الاتصال/إعادة تسجيل الدخول | `openclaw channels status --probe` + السجلات | سجّل الدخول مجددًا وتحقق من سلامة دليل بيانات الاعتماد. | +| العَرَض | أسرع فحص | الإصلاح | +| ------------------------------- | --------------------------------------------------- | --------------------------------------------------------------------- | +| متصل لكن لا توجد ردود في الرسائل الخاصة | `openclaw pairing list whatsapp` | وافق على المرسل أو بدّل سياسة الرسائل الخاصة/قائمة السماح. | +| يتم تجاهل رسائل المجموعات | تحقّق من `requireMention` وأنماط الإشارة في الإعدادات | اذكر البوت أو خفّف سياسة الإشارة لتلك المجموعة. | +| انقطاعات عشوائية/حلقات إعادة تسجيل الدخول | `openclaw channels status --probe` + السجلات | أعد تسجيل الدخول وتحقّق من أن دليل بيانات الاعتماد بحالة سليمة. | -الاستكشاف الكامل للمشكلات: [/channels/whatsapp#troubleshooting](/channels/whatsapp#troubleshooting) +الاستكشاف الكامل للأخطاء وإصلاحها: [/channels/whatsapp#troubleshooting](/ar/channels/whatsapp#troubleshooting) ## Telegram -### مؤشرات أعطال Telegram +### تواقيع أعطال Telegram -| العرض | أسرع فحص | الإصلاح | -| --------------------------------- | ---------------------------------------------- | ---------------------------------------------------------------------------- | -| `/start` لكن لا يوجد تدفق رد قابل للاستخدام | `openclaw pairing list telegram` | وافق على الاقتران أو غيّر سياسة الرسائل المباشرة. | -| البوت متصل لكن المجموعة تظل صامتة | تحقّق من متطلب الإشارة ووضع خصوصية البوت | عطّل وضع الخصوصية لرؤية رسائل المجموعة أو اذكر البوت. | -| فشل في الإرسال مع أخطاء شبكة | افحص السجلات بحثًا عن إخفاقات استدعاءات Telegram API | أصلح توجيه DNS/IPv6/proxy إلى `api.telegram.org`. | -| تم رفض `setMyCommands` عند بدء التشغيل | افحص السجلات بحثًا عن `BOT_COMMANDS_TOO_MUCH` | قلّل أوامر Telegram الأصلية أو أوامر plugin/Skills/الأوامر المخصصة أو عطّل القوائم الأصلية. | -| قمت بالترقية وأصبحت قائمة السماح تحظرك | `openclaw security audit` وقوائم السماح في الإعدادات | شغّل `openclaw doctor --fix` أو استبدل `@username` بمعرّفات المرسلين الرقمية. | +| العَرَض | أسرع فحص | الإصلاح | +| --------------------------------------- | --------------------------------------------- | ------------------------------------------------------------------------------------- | +| `/start` لكن لا يوجد مسار رد قابل للاستخدام | `openclaw pairing list telegram` | وافق على الاقتران أو غيّر سياسة الرسائل الخاصة. | +| البوت متصل لكن المجموعة تبقى صامتة | تحقّق من متطلب الإشارة ووضع خصوصية البوت | عطّل وضع الخصوصية لإتاحة رؤية المجموعة أو اذكر البوت. | +| فشل في الإرسال مع أخطاء شبكة | افحص السجلات بحثًا عن إخفاقات استدعاءات Telegram API | أصلح توجيه DNS/IPv6/الوكيل إلى `api.telegram.org`. | +| تم رفض `setMyCommands` عند بدء التشغيل | افحص السجلات بحثًا عن `BOT_COMMANDS_TOO_MUCH` | قلّل أوامر Telegram الأصلية الخاصة بالـ Plugin/Skills/المخصّصة أو عطّل القوائم الأصلية. | +| قمت بالترقية وأصبحت قائمة السماح تمنعك | `openclaw security audit` وقوائم السماح في الإعدادات | شغّل `openclaw doctor --fix` أو استبدل `@username` بمعرّفات المرسل الرقمية. | -الاستكشاف الكامل للمشكلات: [/channels/telegram#troubleshooting](/channels/telegram#troubleshooting) +الاستكشاف الكامل للأخطاء وإصلاحها: [/channels/telegram#troubleshooting](/ar/channels/telegram#troubleshooting) ## Discord -### مؤشرات أعطال Discord +### تواقيع أعطال Discord -| العرض | أسرع فحص | الإصلاح | -| ----------------------------- | ------------------------------------- | ----------------------------------------------------------- | -| البوت متصل لكن لا يرد في الخوادم | `openclaw channels status --probe` | اسمح بالخادم/القناة وتحقق من صلاحية محتوى الرسائل. | -| يتم تجاهل رسائل المجموعات | تحقّق من السجلات بحثًا عن إسقاطات بوابة الإشارات | اذكر البوت أو اضبط `requireMention: false` للخادم/القناة. | -| ردود الرسائل المباشرة مفقودة | `openclaw pairing list discord` | وافق على اقتران الرسائل المباشرة أو عدّل سياسة الرسائل المباشرة. | +| العَرَض | أسرع فحص | الإصلاح | +| ------------------------------- | --------------------------------- | --------------------------------------------------------------- | +| البوت متصل لكن لا توجد ردود في الخادم | `openclaw channels status --probe` | اسمح بالخادم/القناة وتحقّق من إذن محتوى الرسائل. | +| يتم تجاهل رسائل المجموعات | تحقّق من السجلات لعمليات إسقاط بسبب تقييد الإشارة | اذكر البوت أو اضبط `requireMention: false` للخادم/القناة. | +| ردود الرسائل الخاصة مفقودة | `openclaw pairing list discord` | وافق على اقتران الرسائل الخاصة أو عدّل سياسة الرسائل الخاصة. | -الاستكشاف الكامل للمشكلات: [/channels/discord#troubleshooting](/channels/discord#troubleshooting) +الاستكشاف الكامل للأخطاء وإصلاحها: [/channels/discord#troubleshooting](/ar/channels/discord#troubleshooting) ## Slack -### مؤشرات أعطال Slack +### تواقيع أعطال Slack -| العرض | أسرع فحص | الإصلاح | -| ------------------------------------ | ----------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | -| Socket mode متصل لكن لا توجد استجابات | `openclaw channels status --probe` | تحقّق من app token وbot token والنطاقات المطلوبة؛ وراقب `botTokenStatus` / `appTokenStatus = configured_unavailable` في الإعدادات المدعومة بـ SecretRef. | -| الرسائل المباشرة محظورة | `openclaw pairing list slack` | وافق على الاقتران أو خفف سياسة الرسائل المباشرة. | -| يتم تجاهل رسالة القناة | تحقّق من `groupPolicy` وقائمة السماح للقنوات | اسمح للقناة أو بدّل السياسة إلى `open`. | +| العَرَض | أسرع فحص | الإصلاح | +| --------------------------------------- | ---------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | +| Socket mode متصل لكن لا توجد استجابات | `openclaw channels status --probe` | تحقّق من app token وbot token والنطاقات المطلوبة؛ وراقب `botTokenStatus` / `appTokenStatus = configured_unavailable` في الإعدادات المعتمدة على SecretRef. | +| الرسائل الخاصة محجوبة | `openclaw pairing list slack` | وافق على الاقتران أو خفّف سياسة الرسائل الخاصة. | +| يتم تجاهل رسالة القناة | تحقّق من `groupPolicy` وقائمة سماح القناة | اسمح للقناة أو بدّل السياسة إلى `open`. | -الاستكشاف الكامل للمشكلات: [/channels/slack#troubleshooting](/channels/slack#troubleshooting) +الاستكشاف الكامل للأخطاء وإصلاحها: [/channels/slack#troubleshooting](/ar/channels/slack#troubleshooting) ## iMessage وBlueBubbles -### مؤشرات أعطال iMessage وBlueBubbles +### تواقيع أعطال iMessage وBlueBubbles -| العرض | أسرع فحص | الإصلاح | -| ------------------------------ | ------------------------------------------------------------------- | ------------------------------------------------------ | -| لا توجد أحداث واردة | تحقّق من إمكانية الوصول إلى webhook/server وأذونات التطبيق | أصلح عنوان URL الخاص بـ webhook أو حالة خادم BlueBubbles. | -| يمكن الإرسال لكن لا يوجد استقبال على macOS | تحقّق من أذونات الخصوصية في macOS لأتمتة Messages | امنح أذونات TCC مجددًا وأعد تشغيل عملية القناة. | -| مرسل الرسائل المباشرة محظور | `openclaw pairing list imessage` أو `openclaw pairing list bluebubbles` | وافق على الاقتران أو حدّث قائمة السماح. | +| العَرَض | أسرع فحص | الإصلاح | +| --------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------- | +| لا توجد أحداث واردة | تحقّق من إمكانية الوصول إلى Webhook/الخادم وأذونات التطبيق | أصلح عنوان Webhook URL أو حالة خادم BlueBubbles. | +| يمكن الإرسال لكن لا يوجد استقبال على macOS | تحقّق من أذونات الخصوصية في macOS لأتمتة Messages | امنح أذونات TCC من جديد وأعد تشغيل عملية القناة. | +| مرسل الرسائل الخاصة محجوب | `openclaw pairing list imessage` أو `openclaw pairing list bluebubbles` | وافق على الاقتران أو حدّث قائمة السماح. | -الاستكشاف الكامل للمشكلات: +الاستكشاف الكامل للأخطاء وإصلاحها: -- [/channels/imessage#troubleshooting](/channels/imessage#troubleshooting) -- [/channels/bluebubbles#troubleshooting](/channels/bluebubbles#troubleshooting) +- [/channels/imessage#troubleshooting](/ar/channels/imessage#troubleshooting) +- [/channels/bluebubbles#troubleshooting](/ar/channels/bluebubbles#troubleshooting) ## Signal -### مؤشرات أعطال Signal +### تواقيع أعطال Signal -| العرض | أسرع فحص | الإصلاح | -| ----------------------------- | -------------------------------------- | --------------------------------------------------------- | -| يمكن الوصول إلى daemon لكن البوت صامت | `openclaw channels status --probe` | تحقّق من عنوان URL الخاص بـ daemon/الحساب في `signal-cli` ووضع الاستقبال. | -| الرسائل المباشرة محظورة | `openclaw pairing list signal` | وافق على المرسل أو عدّل سياسة الرسائل المباشرة. | -| لا يتم تشغيل الردود في المجموعات | تحقّق من قائمة السماح للمجموعة وأنماط الإشارة | أضف المرسل/المجموعة أو خفف البوابة. | +| العَرَض | أسرع فحص | الإصلاح | +| ------------------------------- | --------------------------------- | ---------------------------------------------------------------- | +| يمكن الوصول إلى الخدمة لكن البوت صامت | `openclaw channels status --probe` | تحقّق من عنوان daemon الخاص بـ `signal-cli`/الحساب ووضع الاستقبال. | +| الرسائل الخاصة محجوبة | `openclaw pairing list signal` | وافق على المرسل أو عدّل سياسة الرسائل الخاصة. | +| لا يتم تشغيل ردود المجموعات | تحقّق من قائمة سماح المجموعة وأنماط الإشارة | أضف المرسل/المجموعة أو خفّف التقييد. | -الاستكشاف الكامل للمشكلات: [/channels/signal#troubleshooting](/channels/signal#troubleshooting) +الاستكشاف الكامل للأخطاء وإصلاحها: [/channels/signal#troubleshooting](/ar/channels/signal#troubleshooting) ## QQ Bot -### مؤشرات أعطال QQ Bot +### تواقيع أعطال QQ Bot -| العرض | أسرع فحص | الإصلاح | -| ----------------------------- | ----------------------------------------- | ----------------------------------------------------------------- | -| يرد البوت بعبارة "gone to Mars" | تحقّق من `appId` و`clientSecret` في الإعدادات | اضبط بيانات الاعتماد أو أعد تشغيل gateway. | -| لا توجد رسائل واردة | `openclaw channels status --probe` | تحقّق من بيانات الاعتماد في QQ Open Platform. | -| لم يتم تحويل الصوت إلى نص | تحقّق من إعدادات مزوّد STT | اضبط `channels.qqbot.stt` أو `tools.media.audio`. | -| الرسائل الاستباقية لا تصل | تحقّق من متطلبات التفاعل في منصة QQ | قد تحظر QQ الرسائل التي يبدأها البوت من دون تفاعل حديث. | +| العَرَض | أسرع فحص | الإصلاح | +| --------------------------------- | --------------------------------------------- | -------------------------------------------------------------------- | +| يرد البوت بعبارة "gone to Mars" | تحقّق من `appId` و`clientSecret` في الإعدادات | اضبط بيانات الاعتماد أو أعد تشغيل الـ Gateway. | +| لا توجد رسائل واردة | `openclaw channels status --probe` | تحقّق من بيانات الاعتماد على QQ Open Platform. | +| لا يتم تفريغ الصوت إلى نص | تحقّق من إعدادات مزوّد STT | اضبط `channels.qqbot.stt` أو `tools.media.audio`. | +| لا تصل الرسائل الاستباقية | تحقّق من متطلبات التفاعل في منصة QQ | قد تمنع QQ الرسائل التي يبدأها البوت من دون تفاعل حديث. | -الاستكشاف الكامل للمشكلات: [/channels/qqbot#troubleshooting](/channels/qqbot#troubleshooting) +الاستكشاف الكامل للأخطاء وإصلاحها: [/channels/qqbot#troubleshooting](/ar/channels/qqbot#troubleshooting) ## Matrix -### مؤشرات أعطال Matrix +### تواقيع أعطال Matrix -| العرض | أسرع فحص | الإصلاح | -| --------------------------------- | ---------------------------------------- | -------------------------------------------------------------------------- | -| تم تسجيل الدخول لكن يتم تجاهل رسائل الغرف | `openclaw channels status --probe` | تحقّق من `groupPolicy` وقائمة السماح للغرف وبوابة الإشارات. | -| لا تتم معالجة الرسائل المباشرة | `openclaw pairing list matrix` | وافق على المرسل أو عدّل سياسة الرسائل المباشرة. | -| الغرف المشفرة تفشل | `openclaw matrix verify status` | أعد التحقق من الجهاز، ثم افحص `openclaw matrix verify backup status`. | -| استعادة النسخة الاحتياطية معلقة/معطلة | `openclaw matrix verify backup status` | شغّل `openclaw matrix verify backup restore` أو أعد التشغيل باستخدام مفتاح استرداد. | -| يبدو bootstrap/cross-signing غير صحيح | `openclaw matrix verify bootstrap` | أصلح التخزين السري وcross-signing وحالة النسخ الاحتياطي في تمريرة واحدة. | +| العَرَض | أسرع فحص | الإصلاح | +| ----------------------------------------- | ----------------------------------- | -------------------------------------------------------------------------------- | +| تم تسجيل الدخول لكن يتم تجاهل رسائل الغرفة | `openclaw channels status --probe` | تحقّق من `groupPolicy` وقائمة سماح الغرف وتقييد الإشارة. | +| لا تتم معالجة الرسائل الخاصة | `openclaw pairing list matrix` | وافق على المرسل أو عدّل سياسة الرسائل الخاصة. | +| تفشل الغرف المشفّرة | `openclaw matrix verify status` | أعد التحقق من الجهاز، ثم افحص `openclaw matrix verify backup status`. | +| استعادة النسخة الاحتياطية معلّقة/معطّلة | `openclaw matrix verify backup status` | شغّل `openclaw matrix verify backup restore` أو أعد التشغيل باستخدام مفتاح استرداد. | +| يبدو التوقيع المتبادل/التهيئة الأولية غير صحيح | `openclaw matrix verify bootstrap` | أصلح تخزين الأسرار والتوقيع المتبادل وحالة النسخ الاحتياطي في تمريرة واحدة. | -الإعداد الكامل والإعدادات: [Matrix](/channels/matrix) +الإعداد والتهيئة الكاملان: [Matrix](/ar/channels/matrix) diff --git a/docs/ar/concepts/qa-e2e-automation.md b/docs/ar/concepts/qa-e2e-automation.md index a6a573e2f..07ff3acb0 100644 --- a/docs/ar/concepts/qa-e2e-automation.md +++ b/docs/ar/concepts/qa-e2e-automation.md @@ -2,32 +2,36 @@ read_when: - توسيع qa-lab أو qa-channel - إضافة سيناريوهات QA مدعومة من المستودع - - بناء أتمتة QA أعلى واقعية حول لوحة معلومات Gateway -summary: شكل أتمتة QA الخاصة لـ qa-lab وqa-channel والسيناريوهات المُهيأة مسبقًا وتقارير البروتوكول + - بناء أتمتة QA بدرجة واقعية أعلى حول لوحة معلومات Gateway +summary: شكل أتمتة QA الخاص لـ qa-lab وqa-channel والسيناريوهات المُهيأة مسبقًا وتقارير البروتوكول title: أتمتة QA الشاملة من البداية إلى النهاية x-i18n: - generated_at: "2026-04-18T07:14:55Z" + generated_at: "2026-04-20T07:29:35Z" model: gpt-5.4 provider: openai - source_hash: adf8c5f74e8fabdc8e9fd7ecd41afce8b60354c7dd24d92ac926d3c527927cd4 + source_hash: 34245ce871356caeab0d9e0eeeaa9fb4e408920a4a97ad27567fa365d8db17c7 source_path: concepts/qa-e2e-automation.md workflow: 15 --- # أتمتة QA الشاملة من البداية إلى النهاية -تهدف حزمة QA الخاصة إلى اختبار OpenClaw بطريقة أكثر واقعية وتشبه القنوات أكثر مما يمكن أن يفعله اختبار وحدة واحد. +تهدف حزمة QA الخاصة إلى اختبار OpenClaw بطريقة أكثر واقعية وتشبه القنوات +أكثر مما يمكن أن يقدمه اختبار وحدة واحد. -الأجزاء الحالية: +المكوّنات الحالية: -- `extensions/qa-channel`: قناة رسائل اصطناعية تتضمن أسطح الرسائل الخاصة، والقنوات، وسلاسل المحادثات، والتفاعلات، والتحرير، والحذف. -- `extensions/qa-lab`: واجهة مستخدم للتصحيح وناقل QA لمراقبة النص الحواري، وحقن الرسائل الواردة، وتصدير تقرير Markdown. -- `qa/`: أصول تهيئة مدعومة من المستودع لمهمة البداية وسيناريوهات QA الأساسية. +- `extensions/qa-channel`: قناة رسائل اصطناعية بأسطح DM والقناة والخيط + والتفاعل والتحرير والحذف. +- `extensions/qa-lab`: واجهة مستخدم للتصحيح وناقل QA لمراقبة النص الحواري، + وحقن الرسائل الواردة، وتصدير تقرير Markdown. +- `qa/`: أصول تمهيدية مدعومة من المستودع لمهمة البدء وسيناريوهات QA + الأساسية. -تدفق عمل مشغّل QA الحالي هو موقع QA مكوّن من لوحتين: +تدفّق عمل مشغّل QA الحالي هو موقع QA بلوحتين: - اليسار: لوحة معلومات Gateway ‏(Control UI) مع الوكيل. -- اليمين: QA Lab، يعرض نصًا حواريًا شبيهًا بـ Slack وخطة السيناريو. +- اليمين: QA Lab، يعرض النص الحواري الشبيه بـ Slack وخطة السيناريو. شغّله باستخدام: @@ -35,9 +39,12 @@ x-i18n: pnpm qa:lab:up ``` -يقوم ذلك ببناء موقع QA، وبدء مسار Gateway المدعوم بـ Docker، وكشف صفحة QA Lab حيث يمكن لمشغّل أو حلقة أتمتة إعطاء الوكيل مهمة QA، ومراقبة سلوك القناة الفعلي، وتسجيل ما نجح أو فشل أو ظل معطّلًا. +يقوم هذا ببناء موقع QA، وبدء مسار Gateway المدعوم بـ Docker، وإتاحة +صفحة QA Lab حيث يمكن لمشغّل أو لحلقة أتمتة أن يكلّف الوكيل بمهمة QA، +ويراقب سلوك القناة الحقيقي، ويسجّل ما نجح وما فشل وما بقي معطّلًا. -للحصول على تكرار أسرع لواجهة مستخدم QA Lab دون إعادة بناء صورة Docker في كل مرة، ابدأ الحزمة باستخدام حزمة QA Lab مثبّتة عبر bind mount: +للحصول على تكرار أسرع على واجهة QA Lab من دون إعادة بناء صورة Docker في كل مرة، +ابدأ الحزمة باستخدام حزمة QA Lab مركّبة عبر bind mount: ```bash pnpm openclaw qa docker-build-image @@ -46,115 +53,165 @@ pnpm qa:lab:up:fast pnpm qa:lab:watch ``` -يبقي `qa:lab:up:fast` خدمات Docker على صورة مبنية مسبقًا ويستخدم bind mount للمسار `extensions/qa-lab/web/dist` داخل حاوية `qa-lab`. ويعيد `qa:lab:watch` بناء تلك الحزمة عند التغيير، ويُعاد تحميل المتصفح تلقائيًا عندما تتغير بصمة أصول QA Lab. +يبقي `qa:lab:up:fast` خدمات Docker على صورة مبنية مسبقًا ويستخدم bind mount +لـ `extensions/qa-lab/web/dist` داخل حاوية `qa-lab`. ويعيد `qa:lab:watch` +بناء تلك الحزمة عند التغيير، ويُعاد تحميل المتصفح تلقائيًا عندما تتغير +بصمة أصول QA Lab. -لتشغيل مسار Matrix اختباري حقيقي على مستوى النقل، شغّل: +لتشغيل مسار اختبار Matrix واقعي النقل، شغّل: ```bash pnpm openclaw qa matrix ``` -يوفّر هذا المسار خادم Tuwunel homeserver مؤقتًا داخل Docker، ويسجّل مستخدمين مؤقتين للسائق، وSUT، والمراقب، وينشئ غرفة خاصة واحدة، ثم يشغّل Plugin Matrix الحقيقي داخل child خاص بـ QA gateway. يحافظ مسار النقل الحي على ضبط إعدادات child ضمن النقل الجاري اختباره، لذا يعمل Matrix بدون `qa-channel` في إعدادات child. ويكتب أصول التقارير المنظّمة وسجل stdout/stderr المجمّع في دليل إخراج Matrix QA المحدد. لالتقاط مخرجات البناء/التشغيل الخاصة بـ `scripts/run-node.mjs` الخارجية أيضًا، اضبط `OPENCLAW_RUN_NODE_OUTPUT_LOG=` إلى ملف سجل محلي داخل المستودع. +يوفّر هذا المسار خادم Tuwunel منزليًا مؤقتًا داخل Docker، ويسجّل +مستخدمين مؤقتين للسائق وSUT والمراقب، وينشئ غرفة خاصة واحدة، ثم يشغّل +Plugin ‏Matrix الحقيقي داخل عملية فرعية QA لـ Gateway. ويحافظ مسار النقل +الحي على ضبط العملية الفرعية محصورًا ضمن النقل قيد الاختبار، لذلك يعمل +Matrix من دون `qa-channel` في ضبط العملية الفرعية. ويكتب عناصر التقرير +المنظمة وسجل stdout/stderr الموحّد في دليل إخراج Matrix QA المحدد. +ولالتقاط خرج البناء/المشغّل الخارجي `scripts/run-node.mjs` أيضًا، اضبط +`OPENCLAW_RUN_NODE_OUTPUT_LOG=` إلى ملف سجل محلي في المستودع. -لتشغيل مسار Telegram اختباري حقيقي على مستوى النقل، شغّل: +لتشغيل مسار اختبار Telegram واقعي النقل، شغّل: ```bash pnpm openclaw qa telegram ``` -يستهدف هذا المسار مجموعة Telegram خاصة حقيقية واحدة بدلًا من توفير خادم مؤقت. ويتطلب `OPENCLAW_QA_TELEGRAM_GROUP_ID` و`OPENCLAW_QA_TELEGRAM_DRIVER_BOT_TOKEN` و`OPENCLAW_QA_TELEGRAM_SUT_BOT_TOKEN`، بالإضافة إلى روبوتين مختلفين في المجموعة الخاصة نفسها. يجب أن يملك روبوت SUT اسم مستخدم على Telegram، وتعمل المراقبة بين الروبوتات بأفضل شكل عندما يكون Bot-to-Bot Communication Mode مفعّلًا لكلا الروبوتين في `@BotFather`. +يستهدف هذا المسار مجموعة Telegram خاصة حقيقية واحدة بدلًا من توفير +خادم مؤقت. وهو يتطلب `OPENCLAW_QA_TELEGRAM_GROUP_ID`، +و`OPENCLAW_QA_TELEGRAM_DRIVER_BOT_TOKEN`، و +`OPENCLAW_QA_TELEGRAM_SUT_BOT_TOKEN`، بالإضافة إلى +روبوتين مختلفين داخل المجموعة الخاصة نفسها. يجب أن يمتلك روبوت SUT +اسم مستخدم على Telegram، وتعمل المراقبة من روبوت إلى روبوت بأفضل شكل +عندما يكون Bot-to-Bot Communication Mode مفعّلًا لكلا الروبوتين في +`@BotFather`. +ينهي الأمر التنفيذ برمز غير صفري عند فشل أي سيناريو. استخدم `--allow-failures` +عندما تريد العناصر الناتجة من دون رمز خروج فاشل. -تتشارك مسارات النقل الحي الآن عقدًا أصغر واحدًا بدلًا من أن يخترع كلٌّ منها شكله الخاص لقائمة السيناريوهات. +تتشارك مسارات النقل الحية الآن عقدًا أصغر واحدًا بدلًا من أن يخترع كل منها +شكل قائمة السيناريوهات الخاص به: -يبقى `qa-channel` مجموعة سلوك المنتج الاصطناعية الواسعة وليس جزءًا من مصفوفة تغطية النقل الحي. +يبقى `qa-channel` مجموعة السلوكيات الاصطناعية الواسعة على مستوى المنتج، +وليس جزءًا من مصفوفة تغطية النقل الحي. -| المسار | Canary | بوابة الإشارة | حظر قائمة السماح | رد من المستوى الأعلى | استئناف بعد إعادة التشغيل | متابعة السلسلة | عزل السلسلة | مراقبة التفاعل | أمر المساعدة | -| ------ | ------ | -------------- | ----------------- | --------------------- | -------------------------- | -------------- | ------------ | ---------------- | ------------ | -| Matrix | x | x | x | x | x | x | x | x | | -| Telegram | x | | | | | | | | x | +| المسار | Canary | بوابة الإشارة | حظر قائمة السماح | رد من المستوى الأعلى | استئناف بعد إعادة التشغيل | متابعة الخيط | عزل الخيط | مراقبة التفاعل | أمر المساعدة | +| ------ | ------ | -------------- | ----------------- | --------------------- | -------------------------- | ------------ | ---------- | --------------- | ------------ | +| Matrix | x | x | x | x | x | x | x | x | | +| Telegram | x | | | | | | | | x | -يحافظ هذا على `qa-channel` كمجموعة سلوك المنتج الواسعة بينما تتشارك Matrix وTelegram ووسائط النقل الحية المستقبلية قائمة تحقق صريحة واحدة لعقد النقل. +يبقي هذا `qa-channel` كمجموعة سلوكيات واسعة على مستوى المنتج بينما تتشارك +Matrix وTelegram ووسائل النقل الحية المستقبلية قائمة تحقق صريحة واحدة +لعقد النقل. -لتشغيل مسار Linux VM مؤقت دون إدخال Docker في مسار QA، شغّل: +لتشغيل مسار Linux VM مؤقت من دون إدخال Docker في مسار QA، شغّل: ```bash pnpm openclaw qa suite --runner multipass --scenario channel-chat-baseline ``` -يقوم هذا بتشغيل ضيف Multipass جديد، وتثبيت التبعيات، وبناء OpenClaw داخل الضيف، وتشغيل `qa suite`، ثم نسخ تقرير QA والملخص المعتادين مرة أخرى إلى `.artifacts/qa-e2e/...` على المضيف. -ويعيد استخدام سلوك اختيار السيناريو نفسه الذي تستخدمه `qa suite` على المضيف. -تنفذ تشغيلات الحزمة على المضيف وMultipass عدة سيناريوهات محددة بالتوازي مع عمّال Gateway معزولين افتراضيًا، حتى 64 عاملًا أو عدد السيناريوهات المحدد. استخدم `--concurrency ` لضبط عدد العمّال، أو `--concurrency 1` للتنفيذ التسلسلي. -تُمرَّر في التشغيلات الحية مدخلات مصادقة QA المدعومة والعملية للضيف: مفاتيح المزوّد المعتمدة على البيئة، ومسار إعدادات مزوّد QA الحي، و`CODEX_HOME` عند توفره. أبقِ `--output-dir` تحت جذر المستودع حتى يتمكن الضيف من الكتابة مرة أخرى عبر مساحة العمل المركبة. +يُقلع هذا ضيف Multipass جديدًا، ويثبّت التبعيات، ويبني OpenClaw داخل +الضيف، ويشغّل `qa suite`، ثم ينسخ تقرير QA العادي والملخص إلى +`.artifacts/qa-e2e/...` على المضيف. +ويعيد استخدام سلوك اختيار السيناريو نفسه الذي يستخدمه `qa suite` على المضيف. +تنفّذ عمليات suite على المضيف وMultipass عدة سيناريوهات محددة بالتوازي +مع عمّال Gateway معزولين افتراضيًا. يفترض `qa-channel` درجة تزامن +افتراضية قدرها 4، مع حد أعلى بعدد السيناريوهات المحددة. استخدم +`--concurrency ` لضبط عدد العمّال، أو `--concurrency 1` +للتنفيذ التسلسلي. +ينهي الأمر التنفيذ برمز غير صفري عند فشل أي سيناريو. استخدم `--allow-failures` +عندما تريد العناصر الناتجة من دون رمز خروج فاشل. +تقوم التشغيلات الحية بتمرير مدخلات مصادقة QA المدعومة والعملية للضيف: +مفاتيح المزوّدات المعتمدة على env، ومسار ضبط مزوّد QA الحي، و +`CODEX_HOME` عند وجوده. أبقِ `--output-dir` داخل جذر المستودع لكي يتمكن +الضيف من الكتابة عائدًا عبر مساحة العمل المركّبة. -## الأصول المهيأة مسبقًا والمدعومة من المستودع +## البذور المدعومة من المستودع -توجد أصول التهيئة في `qa/`: +توجد أصول البذور في `qa/`: - `qa/scenarios/index.md` - `qa/scenarios//*.md` -هذه موجودة عمدًا في git حتى تكون خطة QA مرئية للبشر وللوكيل معًا. +هذه الملفات موجودة عمدًا في git بحيث تكون خطة QA مرئية للبشر وللوكيل +على حد سواء. -يجب أن يظل `qa-lab` مشغّل Markdown عامًا. كل ملف Markdown للسيناريو هو مصدر الحقيقة لتشغيل اختبار واحد ويجب أن يحدد: +يجب أن يبقى `qa-lab` مشغّل Markdown عامًا. يجب أن يكون كل ملف Markdown +للسيناريو هو مصدر الحقيقة لتشغيل اختبار واحد، ويجب أن يعرّف: - بيانات تعريف السيناريو -- بيانات تعريف اختيارية للفئة، والقدرة، والمسار، والمخاطر +- بيانات تعريف اختيارية للفئة والقدرة والمسار والمخاطر - مراجع الوثائق والكود - متطلبات Plugin اختيارية -- تصحيحًا اختياريًا لإعدادات Gateway +- تصحيح ضبط Gateway اختياري - `qa-flow` القابل للتنفيذ -يُسمح لسطح التشغيل القابل لإعادة الاستخدام الذي يدعم `qa-flow` بأن يظل عامًا وعابرًا للاهتمامات. على سبيل المثال، يمكن لسيناريوهات Markdown دمج مساعدين من جانب النقل مع مساعدين من جانب المتصفح يقودون Control UI المضمّن عبر واجهة Gateway `browser.request` من دون إضافة مشغّل ذي حالات خاصة. +يُسمح لسطح وقت التشغيل القابل لإعادة الاستخدام الذي يدعم `qa-flow` بأن +يبقى عامًا وعابرًا للوظائف. على سبيل المثال، يمكن لسيناريوهات Markdown أن +تجمع بين أدوات جهة النقل وأدوات جهة المتصفح التي تقود Control UI المضمّن +عبر وصلة Gateway ‏`browser.request` من دون إضافة مشغّل بحالة خاصة. -يجب تجميع ملفات السيناريو حسب قدرة المنتج بدلًا من مجلد شجرة المصدر. أبقِ معرّفات السيناريو ثابتة عند نقل الملفات؛ واستخدم `docsRefs` و`codeRefs` لتتبّع التنفيذ. +يجب تجميع ملفات السيناريو حسب قدرة المنتج بدلًا من مجلد شجرة المصدر. +أبقِ معرّفات السيناريوهات ثابتة عند نقل الملفات؛ استخدم `docsRefs` و`codeRefs` +لتتبّع التنفيذ. يجب أن تبقى القائمة الأساسية واسعة بما يكفي لتغطية: -- محادثات الرسائل الخاصة والقنوات -- سلوك السلاسل +- محادثات DM والقناة +- سلوك الخيوط - دورة حياة إجراءات الرسائل - استدعاءات Cron - استرجاع الذاكرة -- تبديل النماذج -- تسليم المهام إلى وكلاء فرعيين +- تبديل النموذج +- تمرير العمل إلى الوكيل الفرعي - قراءة المستودع وقراءة الوثائق - مهمة بناء صغيرة مثل Lobster Invaders -## مسارات محاكاة المزوّد +## مسارات مزوّدات المحاكاة -تحتوي `qa suite` على مسارين محليين لمحاكاة المزوّد: +يحتوي `qa suite` على مسارين محليين لمزوّدات المحاكاة: -- `mock-openai` هو محاكي OpenClaw الواعي بالسيناريو. ويظل مسار المحاكاة الحتمي الافتراضي لـ QA المدعوم من المستودع وبوابات التكافؤ. -- `aimock` يشغّل خادم مزوّد مدعومًا بـ AIMock لتغطية تجريبية للبروتوكول، والملفات الثابتة، والتسجيل/إعادة التشغيل، والفوضى. وهو إضافة ولا يستبدل موزّع السيناريو `mock-openai`. +- `mock-openai` هو محاكي OpenClaw الواعي بالسيناريو. ويظل مسار المحاكاة + الحتمي الافتراضي لـ QA المدعوم من المستودع وبوابات التكافؤ. +- يبدأ `aimock` خادم مزوّد مدعومًا بـ AIMock لتغطية البروتوكول والتجهيزات + والتسجيل/إعادة التشغيل والفوضى بشكل تجريبي. وهو إضافة ولا يستبدل + مرسل السيناريوهات `mock-openai`. يوجد تنفيذ مسار المزوّد تحت `extensions/qa-lab/src/providers/`. -ويمتلك كل مزوّد إعداداته الافتراضية، وبدء خادمه المحلي، وإعدادات نموذج Gateway، واحتياجات تجهيز ملف تعريف المصادقة، وأعلام القدرات الحية/الوهمية الخاصة به. يجب أن يمر الكود المشترك للحزمة وGateway عبر سجل المزوّدين بدلًا من التفريع على أسماء المزوّدين. +ويمتلك كل مزوّد إعداداته الافتراضية، وبدء خادمه المحلي، وضبط نموذج Gateway، +واحتياجات تهيئة ملف تعريف المصادقة، وعلامات القدرات الحية/التمثيلية. +يجب أن يمر كود suite وGateway المشترك عبر سجل المزوّدات بدلًا من +التفرع بناءً على أسماء المزوّدات. -## محوّلات النقل +## مهايئات النقل -يمتلك `qa-lab` واجهة نقل عامة لسيناريوهات QA المكتوبة بـ Markdown. -ويُعد `qa-channel` أول محوّل على هذه الواجهة، لكن هدف التصميم أوسع: يجب أن تتمكن القنوات المستقبلية، الحقيقية أو الاصطناعية، من الاندماج في مشغّل الحزمة نفسه بدلًا من إضافة مشغّل QA خاص بالنقل. +يمتلك `qa-lab` وصلة نقل عامة لسيناريوهات QA في Markdown. +`qa-channel` هو أول مهايئ على تلك الوصلة، لكن هدف التصميم أوسع: +يجب أن تتمكن القنوات المستقبلية الحقيقية أو الاصطناعية من الاندماج في +مشغّل suite نفسه بدلًا من إضافة مشغّل QA خاص بالنقل. -على مستوى البنية، يكون التقسيم كالتالي: +على مستوى البنية، يكون التقسيم كما يلي: -- يمتلك `qa-lab` تنفيذ السيناريو العام، وتوازي العمّال، وكتابة الأصول، وإعداد التقارير. -- يمتلك محوّل النقل إعدادات Gateway، والجاهزية، ومراقبة الوارد والصادر، وإجراءات النقل، وحالة النقل الموحّدة. -- تحدد ملفات سيناريو Markdown تحت `qa/scenarios/` تشغيل الاختبار؛ ويقدم `qa-lab` سطح التشغيل القابل لإعادة الاستخدام الذي ينفذه. +- يمتلك `qa-lab` تنفيذ السيناريو العام، وتزامن العمّال، وكتابة العناصر الناتجة، وإعداد التقارير. +- يمتلك مهايئ النقل ضبط Gateway، والجاهزية، ومراقبة الوارد والصادر، وإجراءات النقل، وحالة النقل المطبّعة. +- تحدد ملفات سيناريوهات Markdown ضمن `qa/scenarios/` تشغيل الاختبار؛ ويوفر `qa-lab` سطح وقت التشغيل القابل لإعادة الاستخدام الذي ينفذه. -توجد إرشادات التبنّي للمشرفين الخاصة بمحوّلات القنوات الجديدة في -[الاختبار](/ar/help/testing#adding-a-channel-to-qa). +توجد إرشادات التبنّي الخاصة بالمشرفين لمهايئات القنوات الجديدة في +[Testing](/ar/help/testing#adding-a-channel-to-qa). ## إعداد التقارير -يصدّر `qa-lab` تقرير بروتوكول بصيغة Markdown من المخطط الزمني لناقل المراقبة. +يصدّر `qa-lab` تقرير بروتوكول بصيغة Markdown من الخط الزمني للناقل المُراقب. يجب أن يجيب التقرير عن: - ما الذي نجح - ما الذي فشل -- ما الذي ظل معطّلًا -- ما سيناريوهات المتابعة التي تستحق الإضافة +- ما الذي بقي معطّلًا +- ما سيناريوهات المتابعة الجديرة بالإضافة -لفحوصات الشخصية والأسلوب، شغّل السيناريو نفسه عبر عدة مراجع نماذج حية واكتب تقرير Markdown مُحكَّمًا: +لفحوصات الطابع والأسلوب، شغّل السيناريو نفسه عبر عدة مراجع نماذج حية +واكتب تقرير Markdown مُحكّمًا: ```bash pnpm openclaw qa character-eval \ @@ -173,22 +230,41 @@ pnpm openclaw qa character-eval \ --judge-concurrency 16 ``` -يشغّل هذا الأمر عمليات child محلية لـ QA gateway، وليس Docker. يجب أن تضبط سيناريوهات تقييم الشخصية الشخصيةَ عبر `SOUL.md`، ثم تنفذ أدوار مستخدم عادية مثل الدردشة، ومساعدة مساحة العمل، ومهام الملفات الصغيرة. ويجب ألا يُخبَر النموذج المرشح بأنه قيد التقييم. يحتفظ الأمر بكل نص حواري كامل، ويسجّل إحصاءات التشغيل الأساسية، ثم يطلب من نماذج التحكيم في الوضع السريع مع استدلال `xhigh` ترتيب التشغيلات حسب الطبيعية والطابع وروح الدعابة. -استخدم `--blind-judge-models` عند مقارنة المزوّدين: إذ يستمر موجه التحكيم في الحصول على كل نص حواري وحالة تشغيل، لكن تُستبدل مراجع المرشحين بتسميات محايدة مثل `candidate-01`؛ ثم يربط التقرير التصنيفات مرة أخرى بالمراجع الحقيقية بعد التحليل. -تستخدم تشغيلات المرشحين افتراضيًا مستوى تفكير `high`، مع `xhigh` لنماذج OpenAI التي تدعمه. يمكنك تجاوز مرشح محدد ضمنيًا باستخدام -`--model provider/model,thinking=`. ولا يزال `--thinking ` يضبط قيمة احتياطية عامة، ويُحتفظ بالنموذج الأقدم `--model-thinking ` من أجل التوافق. -تستخدم مراجع المرشحين الخاصة بـ OpenAI الوضع السريع افتراضيًا حتى تُستخدم المعالجة ذات الأولوية حيثما كان المزوّد يدعمها. أضف `,fast` أو `,no-fast` أو `,fast=false` ضمنيًا عندما يحتاج مرشح واحد أو حكم واحد إلى تجاوز. مرّر `--fast` فقط عندما تريد فرض الوضع السريع لكل نموذج مرشح. وتُسجَّل مدد المرشحين والحكام في التقرير لتحليل المقاييس، لكن موجهات التحكيم تنص صراحةً على عدم الترتيب حسب السرعة. -تستخدم تشغيلات نماذج المرشحين والحكام افتراضيًا توازيًا مقداره 16. خفّض -`--concurrency` أو `--judge-concurrency` عندما تجعل حدود المزوّد أو ضغط Gateway المحلي التشغيل مشوشًا أكثر من اللازم. -عند عدم تمرير أي `--model` للمرشح، يستخدم تقييم الشخصية افتراضيًا -`openai/gpt-5.4` و`openai/gpt-5.2` و`openai/gpt-5` و`anthropic/claude-opus-4-6` و`anthropic/claude-sonnet-4-6` و`zai/glm-5.1` و`moonshot/kimi-k2.5` و -`google/gemini-3.1-pro-preview`. -وعند عدم تمرير أي `--judge-model`، تكون النماذج الحاكمة الافتراضية هي +يشغّل هذا الأمر عمليات QA Gateway فرعية محلية، وليس Docker. يجب أن تضبط +سيناريوهات تقييم الطابع الشخصية من خلال `SOUL.md`، ثم تشغّل أدوار مستخدم +اعتيادية مثل الدردشة ومساعدة مساحة العمل ومهام الملفات الصغيرة. يجب ألّا +يُبلَّغ النموذج المرشح بأنه قيد التقييم. يحافظ الأمر على كل نص حواري كامل، +ويسجل إحصاءات التشغيل الأساسية، ثم يطلب من نماذج التحكيم في الوضع السريع +مع تفكير `xhigh` ترتيب التشغيلات حسب الطبيعية والانطباع العام والفكاهة. +استخدم `--blind-judge-models` عند مقارنة المزوّدات: يظل موجّه التحكيم +يتلقى كل نص حواري وحالة تشغيل، لكن مراجع المرشحين تُستبدل بوسوم محايدة +مثل `candidate-01`؛ ويعيد التقرير ربط الترتيب بالمراجع الحقيقية بعد +التحليل. +تستخدم تشغيلات المرشحين افتراضيًا تفكير `high`، مع `xhigh` لنماذج OpenAI +التي تدعمه. يمكنك تجاوز مرشح محدد ضمنيًا باستخدام +`--model provider/model,thinking=`. ولا يزال `--thinking ` +يضبط قيمة احتياطية عامة، كما يُحتفظ بالنموذج الأقدم +`--model-thinking ` من أجل التوافق. +تستخدم مراجع مرشحي OpenAI الوضع السريع افتراضيًا بحيث تُستخدم المعالجة ذات +الأولوية عندما يدعمها المزوّد. أضف `,fast` أو `,no-fast` أو `,fast=false` +ضمنيًا عندما يحتاج مرشح أو حكم واحد إلى تجاوز. مرّر `--fast` فقط عندما تريد +فرض الوضع السريع على كل نموذج مرشح. تُسجَّل مدد المرشحين والحكّام في التقرير +من أجل تحليل المقارنة المعيارية، لكن موجّهات الحكّام تنص صراحة على عدم +الترتيب حسب السرعة. +يستخدم كل من تشغيلات النماذج المرشحة والحكّام درجة تزامن 16 افتراضيًا. +خفّض `--concurrency` أو `--judge-concurrency` عندما تجعل حدود المزوّد أو ضغط +Gateway المحلي التشغيل شديد الضجيج. +عند عدم تمرير أي `--model` مرشح، يستخدم تقييم الطابع افتراضيًا +`openai/gpt-5.4` و`openai/gpt-5.2` و`openai/gpt-5` و`anthropic/claude-opus-4-6`، +و`anthropic/claude-sonnet-4-6`، و`zai/glm-5.1`، +و`moonshot/kimi-k2.5`، و +`google/gemini-3.1-pro-preview` عندما لا يتم تمرير `--model`. +وعند عدم تمرير أي `--judge-model`، تكون القيم الافتراضية للحكّام: `openai/gpt-5.4,thinking=xhigh,fast` و `anthropic/claude-opus-4-6,thinking=high`. ## الوثائق ذات الصلة -- [الاختبار](/ar/help/testing) -- [قناة QA](/ar/channels/qa-channel) -- [لوحة المعلومات](/web/dashboard) +- [Testing](/ar/help/testing) +- [QA Channel](/ar/channels/qa-channel) +- [Dashboard](/web/dashboard) diff --git a/docs/ar/gateway/configuration-reference.md b/docs/ar/gateway/configuration-reference.md index 7ab8415a5..4970ceb63 100644 --- a/docs/ar/gateway/configuration-reference.md +++ b/docs/ar/gateway/configuration-reference.md @@ -1,70 +1,70 @@ --- read_when: - - تحتاج إلى دلالات إعدادات دقيقة على مستوى الحقول أو إلى القيم الافتراضية. + - تحتاج إلى دلالات الإعدادات الدقيقة على مستوى الحقل أو إلى القيم الافتراضية. - أنت تتحقق من كتل إعدادات القناة أو النموذج أو Gateway أو الأداة. -summary: مرجع إعدادات Gateway لمفاتيح OpenClaw الأساسية والقيم الافتراضية والروابط إلى مراجع الأنظمة الفرعية المخصصة +summary: مرجع إعدادات Gateway لمفاتيح OpenClaw الأساسية، والقيم الافتراضية، وروابط إلى مراجع الأنظمة الفرعية المخصصة title: مرجع الإعدادات x-i18n: - generated_at: "2026-04-18T07:14:54Z" + generated_at: "2026-04-20T07:29:34Z" model: gpt-5.4 provider: openai - source_hash: 4b504c9c6b47d7a327a0acf6934561c9b2606c01cc8ebe5526ccde73033d759f + source_hash: 22b10f1f133374cd29ef4a5ec4fb9c9938eb51184ad82e1aa2e5f6f7af58585e source_path: gateway/configuration-reference.md workflow: 15 --- # مرجع الإعدادات -مرجع الإعدادات الأساسية لملف `~/.openclaw/openclaw.json`. للحصول على نظرة عامة موجّهة للمهام، راجع [الإعدادات](/ar/gateway/configuration). +مرجع إعدادات أساسي لملف `~/.openclaw/openclaw.json`. للحصول على نظرة عامة موجّهة بالمهام، راجع [Configuration](/ar/gateway/configuration). -تغطي هذه الصفحة أسطح إعدادات OpenClaw الرئيسية وتضع روابط خارجية عندما يكون لأحد الأنظمة الفرعية مرجع أعمق خاص به. وهي **لا** تحاول تضمين كل فهرس أوامر مملوك للقنوات/Plugin أو كل خيار تفصيلي عميق للذاكرة/QMD في صفحة واحدة. +تغطي هذه الصفحة أسطح إعدادات OpenClaw الرئيسية، وتضع روابط خارجية عندما يكون للنظام الفرعي مرجع أعمق خاص به. وهي **لا** تحاول تضمين كل فهرس أوامر مملوك للقنوات/الـ Plugin أو كل إعدادات الذاكرة/QMD المتعمقة في صفحة واحدة. -مصدر الحقيقة في الشيفرة: +مصدر الحقيقة البرمجي: -- يطبع `openclaw config schema` مخطط JSON Schema الفعلي المستخدم للتحقق وواجهة Control UI، مع دمج بيانات التعريف الخاصة بالحزم المضمّنة/Plugin/القنوات عند توفرها +- يعرض `openclaw config schema` مخطط JSON Schema الفعلي المستخدم للتحقق وواجهة المستخدم Control UI، مع دمج بيانات القنوات/الـ Plugin المضمّنة عند توفرها - يعيد `config.schema.lookup` عقدة مخطط واحدة محددة بالمسار لأدوات الاستكشاف التفصيلي -- يتحقق `pnpm config:docs:check` / `pnpm config:docs:gen` من تجزئة خط الأساس لوثائق الإعدادات مقارنةً بسطح المخطط الحالي +- يتحقق `pnpm config:docs:check` / `pnpm config:docs:gen` من تجزئة خط الأساس لوثائق الإعدادات مقابل سطح المخطط الحالي -المراجع التفصيلية المخصصة: +المراجع المتعمقة المخصصة: -- [مرجع إعدادات الذاكرة](/ar/reference/memory-config) لـ `agents.defaults.memorySearch.*` و`memory.qmd.*` و`memory.citations` وإعدادات Dreaming تحت `plugins.entries.memory-core.config.dreaming` -- [Slash Commands](/ar/tools/slash-commands) لفهرس الأوامر الحالي المضمن + المجمّع -- صفحات القنوات/Plugin المالكة لأسطح الأوامر الخاصة بكل قناة +- [مرجع إعدادات الذاكرة](/ar/reference/memory-config) لـ `agents.defaults.memorySearch.*` و`memory.qmd.*` و`memory.citations` وإعدادات Dreaming ضمن `plugins.entries.memory-core.config.dreaming` +- [أوامر الشرطة المائلة](/ar/tools/slash-commands) لفهرس الأوامر الحالي المضمن + المجمّع +- صفحات القنوات/الـ Plugin المالكة لأسطح الأوامر الخاصة بالقنوات -تنسيق الإعدادات هو **JSON5** (تُسمح التعليقات والفواصل اللاحقة). جميع الحقول اختيارية — يستخدم OpenClaw قيمًا افتراضية آمنة عند حذفها. +تنسيق الإعدادات هو **JSON5** (يُسمح بالتعليقات والفواصل اللاحقة). جميع الحقول اختيارية — يستخدم OpenClaw قيَمًا افتراضية آمنة عند حذفها. --- ## القنوات -تبدأ كل قناة تلقائيًا عند وجود قسم إعداداتها (ما لم يكن `enabled: false`). +تبدأ كل قناة تلقائيًا عندما يكون قسم إعداداتها موجودًا (ما لم يكن `enabled: false`). ### الوصول إلى الرسائل المباشرة والمجموعات تدعم جميع القنوات سياسات الرسائل المباشرة وسياسات المجموعات: | سياسة الرسائل المباشرة | السلوك | -| ------------------- | --------------------------------------------------------------- | +| ---------------------- | ------ | | `pairing` (الافتراضي) | يحصل المرسلون غير المعروفين على رمز اقتران لمرة واحدة؛ ويجب أن يوافق المالك | -| `allowlist` | فقط المرسلون الموجودون في `allowFrom` (أو مخزن السماح المقترن) | -| `open` | السماح بجميع الرسائل المباشرة الواردة (يتطلب `allowFrom: ["*"]`) | -| `disabled` | تجاهل جميع الرسائل المباشرة الواردة | +| `allowlist` | يُسمح فقط للمرسلين الموجودين في `allowFrom` (أو مخزن السماح المقترن) | +| `open` | السماح بجميع الرسائل المباشرة الواردة (يتطلب `allowFrom: ["*"]`) | +| `disabled` | تجاهل جميع الرسائل المباشرة الواردة | | سياسة المجموعات | السلوك | -| --------------------- | ------------------------------------------------------ | -| `allowlist` (الافتراضي) | فقط المجموعات المطابقة لقائمة السماح المُعدّة | -| `open` | تجاوز قوائم السماح الخاصة بالمجموعات (مع استمرار تطبيق اشتراط الإشارة) | -| `disabled` | حظر جميع رسائل المجموعات/الغرف | +| --------------- | ------ | +| `allowlist` (الافتراضي) | فقط المجموعات المطابقة لقائمة السماح المكوّنة | +| `open` | تجاوز قوائم السماح للمجموعات (مع استمرار تطبيق اشتراط الإشارة) | +| `disabled` | حظر جميع رسائل المجموعات/الغرف | -يضبط `channels.defaults.groupPolicy` القيمة الافتراضية عندما لا تكون `groupPolicy` الخاصة بالمزوّد معيّنة. -تنتهي صلاحية رموز الاقتران بعد ساعة واحدة. ويُحدَّد الحد الأقصى لطلبات اقتران الرسائل المباشرة المعلقة عند **3 لكل قناة**. -إذا كانت كتلة المزوّد مفقودة بالكامل (`channels.` غير موجودة)، فإن سياسة المجموعات أثناء التشغيل تعود إلى `allowlist` (إغلاق افتراضي) مع تحذير عند بدء التشغيل. +يضبط `channels.defaults.groupPolicy` القيمة الافتراضية عندما لا تكون قيمة `groupPolicy` الخاصة بالمزوّد معيّنة. +تنتهي صلاحية رموز الاقتران بعد ساعة واحدة. ويكون الحد الأقصى لطلبات اقتران الرسائل المباشرة المعلّقة هو **3 لكل قناة**. +إذا كانت كتلة المزوّد مفقودة بالكامل (`channels.` غير موجودة)، فسترجع سياسة المجموعات وقت التشغيل إلى `allowlist` (إغلاق آمن افتراضيًا) مع تحذير عند بدء التشغيل. ### تجاوزات نموذج القناة -استخدم `channels.modelByChannel` لتثبيت معرّفات قنوات محددة على نموذج معيّن. تقبل القيم `provider/model` أو الأسماء المستعارة للنماذج المهيأة. يُطبَّق تعيين القناة عندما لا تكون الجلسة تملك بالفعل تجاوزًا للنموذج (على سبيل المثال، تم تعيينه عبر `/model`). +استخدم `channels.modelByChannel` لتثبيت معرفات قنوات معيّنة على نموذج محدد. تقبل القيم `provider/model` أو الأسماء المستعارة للنماذج المكوّنة. يُطبّق تعيين القناة عندما لا تكون للجلسة بالفعل قيمة تجاوز للنموذج (على سبيل المثال، تم ضبطها عبر `/model`). ```json5 { @@ -85,9 +85,9 @@ x-i18n: } ``` -### الإعدادات الافتراضية للقنوات وHeartbeat +### القيم الافتراضية للقنوات وHeartbeat -استخدم `channels.defaults` للسلوك المشترك الخاص بسياسة المجموعات وHeartbeat عبر المزوّدين: +استخدم `channels.defaults` لسلوك سياسة المجموعات وHeartbeat المشترك عبر المزوّدين: ```json5 { @@ -105,15 +105,15 @@ x-i18n: } ``` -- `channels.defaults.groupPolicy`: سياسة المجموعات الاحتياطية عندما لا تكون `groupPolicy` على مستوى المزوّد معيّنة. -- `channels.defaults.contextVisibility`: وضع إظهار السياق التكميلي الافتراضي لجميع القنوات. القيم: `all` (الافتراضي، تضمين كل سياق الاقتباس/المواضيع/السجل)، و`allowlist` (تضمين السياق فقط من المرسلين الموجودين في قائمة السماح)، و`allowlist_quote` (مثل allowlist لكن مع الاحتفاظ بسياق الاقتباس/الرد الصريح). تجاوز لكل قناة: `channels..contextVisibility`. +- `channels.defaults.groupPolicy`: سياسة المجموعات الاحتياطية عندما لا تكون قيمة `groupPolicy` على مستوى المزوّد معيّنة. +- `channels.defaults.contextVisibility`: وضع رؤية السياق الإضافي الافتراضي لجميع القنوات. القيم: `all` (الافتراضي، تضمين كل سياق الاقتباس/الخيط/السجل)، و`allowlist` (تضمين السياق فقط من المرسلين الموجودين في قائمة السماح)، و`allowlist_quote` (مثل allowlist ولكن مع الاحتفاظ بسياق الاقتباس/الرد الصريح). التجاوز لكل قناة: `channels..contextVisibility`. - `channels.defaults.heartbeat.showOk`: تضمين حالات القنوات السليمة في مخرجات Heartbeat. -- `channels.defaults.heartbeat.showAlerts`: تضمين الحالات المتدهورة/حالات الخطأ في مخرجات Heartbeat. -- `channels.defaults.heartbeat.useIndicator`: عرض مخرجات Heartbeat بأسلوب مؤشرات مضغوط. +- `channels.defaults.heartbeat.showAlerts`: تضمين الحالات المتدهورة/التي بها أخطاء في مخرجات Heartbeat. +- `channels.defaults.heartbeat.useIndicator`: عرض مخرجات Heartbeat مدمجة على نمط المؤشر. ### WhatsApp -يعمل WhatsApp عبر قناة الويب الخاصة بـ Gateway ‏(Baileys Web). ويبدأ تلقائيًا عند وجود جلسة مرتبطة. +يعمل WhatsApp من خلال قناة الويب الخاصة بـ Gateway ‏(Baileys Web). ويبدأ تلقائيًا عند وجود جلسة مرتبطة. ```json5 { @@ -124,7 +124,7 @@ x-i18n: textChunkLimit: 4000, chunkMode: "length", // length | newline mediaMaxMb: 50, - sendReadReceipts: true, // علامتا الصح الزرقاوان (false في وضع الدردشة الذاتية) + sendReadReceipts: true, // blue ticks (false in self-chat mode) groups: { "*": { requireMention: true }, }, @@ -164,10 +164,10 @@ x-i18n: } ``` -- تستخدم الأوامر الصادرة الحساب `default` افتراضيًا إذا كان موجودًا؛ وإلا فسيُستخدم أول معرّف حساب مُهيأ (بعد الفرز). -- يتجاوز `channels.whatsapp.defaultAccount` الاختياري هذا اختيار الحساب الافتراضي الاحتياطي عندما يطابق معرّف حساب مُهيأ. +- تستخدم الأوامر الصادرة الحساب `default` افتراضيًا إذا كان موجودًا؛ وإلا فسيُستخدم أول معرّف حساب مكوَّن (بعد الفرز). +- يتجاوز `channels.whatsapp.defaultAccount` الاختياري اختيار الحساب الافتراضي الاحتياطي هذا عندما يطابق معرّف حساب مكوَّنًا. - ينقل `openclaw doctor` دليل مصادقة Baileys القديم أحادي الحساب إلى `whatsapp/default`. -- تجاوزات لكل حساب: `channels.whatsapp.accounts..sendReadReceipts` و`channels.whatsapp.accounts..dmPolicy` و`channels.whatsapp.accounts..allowFrom`. +- التجاوزات لكل حساب: `channels.whatsapp.accounts..sendReadReceipts` و`channels.whatsapp.accounts..dmPolicy` و`channels.whatsapp.accounts..allowFrom`. @@ -202,7 +202,7 @@ x-i18n: historyLimit: 50, replyToMode: "first", // off | first | all | batched linkPreview: true, - streaming: "partial", // off | partial | block | progress (الافتراضي: off؛ فعّله صراحةً لتجنب حدود معدل تعديل المعاينة) + streaming: "partial", // off | partial | block | progress (default: off; opt in explicitly to avoid preview-edit rate limits) actions: { reactions: true, sendMessage: true }, reactionNotifications: "own", // off | own | all mediaMaxMb: 100, @@ -226,11 +226,11 @@ x-i18n: ``` - رمز البوت: `channels.telegram.botToken` أو `channels.telegram.tokenFile` (ملف عادي فقط؛ تُرفض الروابط الرمزية)، مع `TELEGRAM_BOT_TOKEN` كقيمة احتياطية للحساب الافتراضي. -- يتجاوز `channels.telegram.defaultAccount` الاختياري اختيار الحساب الافتراضي عندما يطابق معرّف حساب مُهيأ. -- في إعدادات الحسابات المتعددة (معرّفا حساب أو أكثر)، عيّن افتراضيًا صريحًا (`channels.telegram.defaultAccount` أو `channels.telegram.accounts.default`) لتجنب التوجيه الاحتياطي؛ ويحذّر `openclaw doctor` عندما يكون هذا مفقودًا أو غير صالح. -- يؤدي `configWrites: false` إلى حظر عمليات كتابة الإعدادات التي يبدؤها Telegram (ترحيل معرّفات supergroup، و`/config set|unset`). -- تُهيّئ إدخالات `bindings[]` ذات المستوى الأعلى مع `type: "acp"` ارتباطات ACP دائمة لموضوعات المنتدى (استخدم الصيغة القانونية `chatId:topic:topicId` في `match.peer.id`). دلالات الحقول مشتركة في [ACP Agents](/ar/tools/acp-agents#channel-specific-settings). -- تستخدم معاينات البث في Telegram كلًا من `sendMessage` و`editMessageText` (وتعمل في الدردشات المباشرة والجماعية). +- يتجاوز `channels.telegram.defaultAccount` الاختياري اختيار الحساب الافتراضي عندما يطابق معرّف حساب مكوَّنًا. +- في إعدادات الحسابات المتعددة (معرّفا حسابين أو أكثر)، اضبط قيمة افتراضية صريحة (`channels.telegram.defaultAccount` أو `channels.telegram.accounts.default`) لتجنب التوجيه الاحتياطي؛ ويصدر `openclaw doctor` تحذيرًا عندما تكون هذه القيمة مفقودة أو غير صالحة. +- يحظر `configWrites: false` عمليات كتابة الإعدادات التي يبدأها Telegram ‏(عمليات ترحيل معرّف المجموعة الفائقة، وأوامر `/config set|unset`). +- تضبط إدخالات `bindings[]` ذات المستوى الأعلى مع `type: "acp"` ارتباطات ACP دائمة لموضوعات المنتدى (استخدم الصيغة القياسية `chatId:topic:topicId` في `match.peer.id`). دلالات الحقول مشتركة في [ACP Agents](/ar/tools/acp-agents#channel-specific-settings). +- تستخدم معاينات البث في Telegram ‏`sendMessage` + `editMessageText` (وتعمل في الدردشات المباشرة ودردشات المجموعات). - سياسة إعادة المحاولة: راجع [سياسة إعادة المحاولة](/ar/concepts/retry). ### Discord @@ -286,7 +286,7 @@ x-i18n: historyLimit: 20, textChunkLimit: 2000, chunkMode: "length", // length | newline - streaming: "off", // off | partial | block | progress (تُطابق progress مع partial على Discord) + streaming: "off", // off | partial | block | progress (progress maps to partial on Discord) maxLinesPerMessage: 17, ui: { components: { @@ -297,7 +297,7 @@ x-i18n: enabled: true, idleHours: 24, maxAgeHours: 0, - spawnSubagentSessions: false, // تفعيل اختياري لـ sessions_spawn({ thread: true }) + spawnSubagentSessions: false, // opt-in for sessions_spawn({ thread: true }) }, voice: { enabled: true, @@ -333,36 +333,36 @@ x-i18n: } ``` -- الرمز المميز: `channels.discord.token`، مع `DISCORD_BOT_TOKEN` كقيمة احتياطية للحساب الافتراضي. -- تستخدم الاستدعاءات الصادرة المباشرة التي توفّر `token` صريحًا لـ Discord ذلك الرمز المميز لهذا الاستدعاء؛ بينما تستمر إعدادات إعادة المحاولة/السياسة الخاصة بالحساب في الاعتماد على الحساب المحدد في اللقطة النشطة أثناء التشغيل. -- يتجاوز `channels.discord.defaultAccount` الاختياري اختيار الحساب الافتراضي عندما يطابق معرّف حساب مُهيأ. -- استخدم `user:` (رسالة مباشرة) أو `channel:` (قناة guild) كأهداف للتسليم؛ وتُرفض المعرّفات الرقمية المجردة. -- تكون الأسماء المختصرة لـ guild بأحرف صغيرة مع استبدال المسافات بـ `-`؛ وتستخدم مفاتيح القنوات الاسم المختصر (من دون `#`). ويُفضّل استخدام معرّفات guild. -- تُتجاهل الرسائل التي ينشئها البوت افتراضيًا. يفعّل `allowBots: true` قبولها؛ واستخدم `allowBots: "mentions"` لقبول رسائل البوت التي تذكر البوت فقط (مع استمرار تصفية رسائله الذاتية). -- يؤدي `channels.discord.guilds..ignoreOtherMentions` (وتجاوزات القنوات) إلى إسقاط الرسائل التي تذكر مستخدمًا آخر أو دورًا آخر ولكنها لا تذكر البوت (باستثناء @everyone/@here). -- يقسم `maxLinesPerMessage` (الافتراضي 17) الرسائل الطويلة عموديًا حتى عندما تكون أقل من 2000 حرف. -- يتحكم `channels.discord.threadBindings` في التوجيه المرتبط بسلاسل Discord: - - `enabled`: تجاوز Discord لميزات الجلسات المرتبطة بالسلاسل (`/focus` و`/unfocus` و`/agents` و`/session idle` و`/session max-age`، والتسليم/التوجيه المرتبط) - - `idleHours`: تجاوز Discord لإلغاء التركيز التلقائي بعد عدم النشاط، بالساعات (`0` للتعطيل) - - `maxAgeHours`: تجاوز Discord للحد الأقصى الصارم للعمر، بالساعات (`0` للتعطيل) - - `spawnSubagentSessions`: مفتاح تفعيل اختياري لإنشاء/ربط السلاسل تلقائيًا بواسطة `sessions_spawn({ thread: true })` -- تُهيّئ إدخالات `bindings[]` ذات المستوى الأعلى مع `type: "acp"` ارتباطات ACP دائمة للقنوات والسلاسل (استخدم معرّف القناة/السلسلة في `match.peer.id`). دلالات الحقول مشتركة في [ACP Agents](/ar/tools/acp-agents#channel-specific-settings). -- يضبط `channels.discord.ui.components.accentColor` لون التمييز لحاويات مكونات Discord v2. -- يفعّل `channels.discord.voice` محادثات القنوات الصوتية في Discord وتجاوزات الانضمام التلقائي وTTS الاختيارية. -- يُمرَّر `channels.discord.voice.daveEncryption` و`channels.discord.voice.decryptionFailureTolerance` إلى خيارات DAVE في `@discordjs/voice` (القيم الافتراضية `true` و`24`). -- يحاول OpenClaw أيضًا استعادة استقبال الصوت عبر مغادرة الجلسة الصوتية وإعادة الانضمام إليها بعد تكرار إخفاقات فك التشفير. -- يُعد `channels.discord.streaming` مفتاح وضع البث القانوني. وتُرحَّل تلقائيًا القيم القديمة `streamMode` وقيم `streaming` المنطقية. -- يربط `channels.discord.autoPresence` حالة التوفر أثناء التشغيل بحضور البوت (سليم => online، متدهور => idle، مستنفد => dnd)، ويسمح بتجاوزات اختيارية لنص الحالة. +- الرمز المميّز: `channels.discord.token`، مع `DISCORD_BOT_TOKEN` كقيمة احتياطية للحساب الافتراضي. +- تستخدم الاستدعاءات الصادرة المباشرة التي توفّر `token` صريحًا لـ Discord ذلك الرمز المميّز للاستدعاء؛ بينما تظل إعدادات إعادة المحاولة/السياسة الخاصة بالحساب مأخوذة من الحساب المحدد في اللقطة النشطة لوقت التشغيل. +- يتجاوز `channels.discord.defaultAccount` الاختياري اختيار الحساب الافتراضي عندما يطابق معرّف حساب مكوَّنًا. +- استخدم `user:` ‏(رسالة مباشرة) أو `channel:` ‏(قناة Guild) كأهداف للتسليم؛ وتُرفض المعرّفات الرقمية المجردة. +- تكون أسماء Guild المختصرة بأحرف صغيرة مع استبدال المسافات بـ `-`؛ وتستخدم مفاتيح القنوات الاسم المختصر (من دون `#`). ويُفضَّل استخدام معرّفات Guild. +- تُتجاهل الرسائل التي ينشئها البوت افتراضيًا. يفعّل `allowBots: true` قبولها؛ واستخدم `allowBots: "mentions"` لقبول رسائل البوت التي تذكر البوت فقط (مع استمرار تصفية رسائل البوت نفسه). +- يسقط `channels.discord.guilds..ignoreOtherMentions` (وكذلك تجاوزات القنوات) الرسائل التي تذكر مستخدمًا أو دورًا آخر ولكن لا تذكر البوت (باستثناء @everyone/@here). +- يقسم `maxLinesPerMessage` ‏(الافتراضي 17) الرسائل الطويلة عموديًا حتى عندما تكون أقل من 2000 حرف. +- يتحكم `channels.discord.threadBindings` في التوجيه المرتبط بخيوط Discord: + - `enabled`: تجاوز Discord لميزات الجلسات المرتبطة بالخيوط (`/focus` و`/unfocus` و`/agents` و`/session idle` و`/session max-age` والتسليم/التوجيه المرتبط) + - `idleHours`: تجاوز Discord لإلغاء التركيز التلقائي بسبب عدم النشاط بالساعات (`0` يعطّل ذلك) + - `maxAgeHours`: تجاوز Discord للحد الأقصى الصارم للعمر بالساعات (`0` يعطّل ذلك) + - `spawnSubagentSessions`: مفتاح اشتراك اختياري لإنشاء/ربط الخيوط تلقائيًا في `sessions_spawn({ thread: true })` +- تضبط إدخالات `bindings[]` ذات المستوى الأعلى مع `type: "acp"` ارتباطات ACP دائمة للقنوات والخيوط (استخدم معرّف القناة/الخيط في `match.peer.id`). دلالات الحقول مشتركة في [ACP Agents](/ar/tools/acp-agents#channel-specific-settings). +- يضبط `channels.discord.ui.components.accentColor` لون التمييز لحاويات Discord components v2. +- يفعّل `channels.discord.voice` محادثات قنوات Discord الصوتية بالإضافة إلى تجاوزات الانضمام التلقائي وTTS الاختيارية. +- يمرر `channels.discord.voice.daveEncryption` و`channels.discord.voice.decryptionFailureTolerance` مباشرةً إلى خيارات DAVE في `@discordjs/voice` (القيم الافتراضية هي `true` و`24`). +- يحاول OpenClaw أيضًا استعادة استقبال الصوت عبر مغادرة جلسة صوتية ثم إعادة الانضمام إليها بعد تكرار إخفاقات فك التشفير. +- إن `channels.discord.streaming` هو مفتاح وضع البث القياسي. ويتم ترحيل القيم القديمة `streamMode` والقيم المنطقية `streaming` تلقائيًا. +- يربط `channels.discord.autoPresence` توفر وقت التشغيل بحضور البوت (سليم => online، متدهور => idle، مستنزف => dnd) ويسمح بتجاوزات اختيارية لنص الحالة. - يعيد `channels.discord.dangerouslyAllowNameMatching` تفعيل المطابقة القابلة للتغيير للاسم/الوسم (وضع توافق طارئ). -- `channels.discord.execApprovals`: تسليم موافقات exec الأصلية في Discord وتفويض الموافقين. - - `enabled`: القيم `true` أو `false` أو `"auto"` (الافتراضي). في وضع auto، تُفعَّل موافقات exec عندما يمكن حلّ الموافقين من `approvers` أو `commands.ownerAllowFrom`. - - `approvers`: معرّفات مستخدمي Discord المسموح لهم بالموافقة على طلبات exec. ويُستخدم `commands.ownerAllowFrom` كقيمة احتياطية عند حذفه. +- `channels.discord.execApprovals`: تسليم موافقات exec الأصلية لـ Discord وتفويض الموافقين. + - `enabled`: ‏`true` أو `false` أو `"auto"` ‏(الافتراضي). في الوضع التلقائي، تتفعّل موافقات exec عندما يمكن حلّ الموافقين من `approvers` أو `commands.ownerAllowFrom`. + - `approvers`: معرّفات مستخدمي Discord المسموح لهم بالموافقة على طلبات exec. وتعود إلى `commands.ownerAllowFrom` عند حذفها. - `agentFilter`: قائمة سماح اختيارية لمعرّفات الوكلاء. احذفها لتمرير الموافقات لجميع الوكلاء. - - `sessionFilter`: أنماط مفاتيح جلسات اختيارية (سلسلة فرعية أو regex). - - `target`: مكان إرسال مطالبات الموافقة. ترسل `"dm"` (الافتراضي) إلى الرسائل المباشرة للموافقين، وترسل `"channel"` إلى القناة الأصلية، وترسل `"both"` إلى كليهما. وعندما يتضمن الهدف `"channel"`، لا تكون الأزرار قابلة للاستخدام إلا من قبل الموافقين الذين تم حلّهم. - - `cleanupAfterResolve`: عند تعيينه إلى `true`، يحذف رسائل الموافقة المباشرة بعد الموافقة أو الرفض أو انتهاء المهلة. + - `sessionFilter`: أنماط مفاتيح جلسات اختيارية (مطابقة جزئية أو regex). + - `target`: مكان إرسال مطالبات الموافقة. يرسل `"dm"` ‏(الافتراضي) إلى الرسائل المباشرة للموافقين، ويرسل `"channel"` إلى القناة الأصلية، ويرسل `"both"` إلى الاثنين معًا. وعندما يتضمن الهدف `"channel"`، لا تكون الأزرار قابلة للاستخدام إلا من قِبل الموافقين الذين جرى حلّهم. + - `cleanupAfterResolve`: عندما تكون قيمته `true`، يحذف الرسائل المباشرة للموافقة بعد الموافقة أو الرفض أو انتهاء المهلة. -**أوضاع إشعارات التفاعلات:** `off` (بدون)، `own` (رسائل البوت، الافتراضي)، `all` (كل الرسائل)، `allowlist` (من `guilds..users` على جميع الرسائل). +**أوضاع إشعارات التفاعلات:** `off` ‏(لا شيء)، `own` ‏(رسائل البوت، الافتراضي)، `all` ‏(كل الرسائل)، `allowlist` ‏(من `guilds..users` على جميع الرسائل). ### Google Chat @@ -393,11 +393,11 @@ x-i18n: } ``` -- JSON لحساب الخدمة: مضمّن (`serviceAccount`) أو مستند إلى ملف (`serviceAccountFile`). +- JSON الخاص بحساب الخدمة: مضمّن (`serviceAccount`) أو معتمد على ملف (`serviceAccountFile`). - كما أن SecretRef لحساب الخدمة مدعوم أيضًا (`serviceAccountRef`). - القيم الاحتياطية من البيئة: `GOOGLE_CHAT_SERVICE_ACCOUNT` أو `GOOGLE_CHAT_SERVICE_ACCOUNT_FILE`. - استخدم `spaces/` أو `users/` كأهداف للتسليم. -- يعيد `channels.googlechat.dangerouslyAllowNameMatching` تفعيل مطابقة كيان البريد الإلكتروني القابلة للتغيير (وضع توافق طارئ). +- يعيد `channels.googlechat.dangerouslyAllowNameMatching` تفعيل المطابقة القابلة للتغيير لعنوان البريد الإلكتروني الرئيسي (وضع توافق طارئ). ### Slack @@ -449,7 +449,7 @@ x-i18n: chunkMode: "length", streaming: { mode: "partial", // off | partial | block | progress - nativeTransport: true, // استخدم واجهة Slack الأصلية للبث عندما يكون mode=partial + nativeTransport: true, // use Slack native streaming API when mode=partial }, mediaMaxMb: 20, execApprovals: { @@ -464,30 +464,35 @@ x-i18n: } ``` -- يتطلب **وضع Socket** كلًا من `botToken` و`appToken` (`SLACK_BOT_TOKEN` + `SLACK_APP_TOKEN` كقيمة احتياطية من البيئة للحساب الافتراضي). -- يتطلب **وضع HTTP** `botToken` بالإضافة إلى `signingSecret` (على المستوى الجذري أو لكل حساب). -- تقبل `botToken` و`appToken` و`signingSecret` و`userToken` سلاسل نصية صريحة أو كائنات SecretRef. -- تعرض لقطات حساب Slack حقول المصدر/الحالة لكل اعتماد مثل `botTokenSource` و`botTokenStatus` و`appTokenStatus`، وفي وضع HTTP، `signingSecretStatus`. وتعني `configured_unavailable` أن الحساب مهيأ عبر SecretRef لكن مسار الأمر/التشغيل الحالي لم يتمكن من حل قيمة السر. -- يؤدي `configWrites: false` إلى حظر عمليات كتابة الإعدادات التي يبدؤها Slack. -- يتجاوز `channels.slack.defaultAccount` الاختياري اختيار الحساب الافتراضي عندما يطابق معرّف حساب مُهيأ. -- يُعد `channels.slack.streaming.mode` مفتاح وضع بث Slack القانوني. ويتحكم `channels.slack.streaming.nativeTransport` في وسيلة النقل الأصلية للبث في Slack. وتُرحَّل تلقائيًا القيم القديمة `streamMode` وقيم `streaming` المنطقية و`nativeStreaming`. -- استخدم `user:` (رسالة مباشرة) أو `channel:` كأهداف للتسليم. +- يتطلب **وضع Socket** كِلا `botToken` و`appToken` ‏(`SLACK_BOT_TOKEN` + `SLACK_APP_TOKEN` كقيمة احتياطية من البيئة للحساب الافتراضي). +- يتطلب **وضع HTTP** وجود `botToken` بالإضافة إلى `signingSecret` ‏(على المستوى الجذري أو لكل حساب). +- تقبل `botToken` و`appToken` و`signingSecret` و`userToken` سلاسل نصية صريحة + أو كائنات SecretRef. +- تكشف لقطات حسابات Slack عن حقول المصدر/الحالة لكل بيانات اعتماد مثل + `botTokenSource` و`botTokenStatus` و`appTokenStatus`، وفي وضع HTTP، + `signingSecretStatus`. وتعني `configured_unavailable` أن الحساب + مكوَّن عبر SecretRef لكن مسار الأمر/وقت التشغيل الحالي لم يتمكن + من حل قيمة السر. +- يحظر `configWrites: false` عمليات كتابة الإعدادات التي يبدأها Slack. +- يتجاوز `channels.slack.defaultAccount` الاختياري اختيار الحساب الافتراضي عندما يطابق معرّف حساب مكوَّنًا. +- إن `channels.slack.streaming.mode` هو مفتاح وضع البث القياسي في Slack. ويتحكم `channels.slack.streaming.nativeTransport` في ناقل البث الأصلي لـ Slack. ويتم ترحيل القيم القديمة `streamMode` والقيم المنطقية `streaming` و`nativeStreaming` تلقائيًا. +- استخدم `user:` ‏(رسالة مباشرة) أو `channel:` كأهداف للتسليم. -**أوضاع إشعارات التفاعلات:** `off` و`own` (الافتراضي) و`all` و`allowlist` (من `reactionAllowlist`). +**أوضاع إشعارات التفاعلات:** `off` و`own` ‏(الافتراضي) و`all` و`allowlist` ‏(من `reactionAllowlist`). -**عزل جلسات السلاسل:** يكون `thread.historyScope` لكل سلسلة على حدة (الافتراضي) أو مشتركًا عبر القناة. ويؤدي `thread.inheritParent` إلى نسخ سجل القناة الأم إلى السلاسل الجديدة. +**عزل جلسات الخيوط:** تكون `thread.historyScope` لكل خيط على حدة (الافتراضي) أو مشتركة عبر القناة. ويؤدي `thread.inheritParent` إلى نسخ سجل القناة الأصلية إلى الخيوط الجديدة. -- يتطلب البث الأصلي في Slack بالإضافة إلى حالة السلسلة بأسلوب Slack assistant "is typing..." هدف ردّ داخل سلسلة. وتبقى الرسائل المباشرة ذات المستوى الأعلى خارج السلاسل افتراضيًا، لذلك تستخدم `typingReaction` أو التسليم العادي بدلًا من المعاينة بأسلوب السلسلة. +- يتطلب البث الأصلي في Slack بالإضافة إلى حالة الخيط من نمط "is typing..." في Slack assistant هدف ردّ داخل خيط. تظل الرسائل المباشرة ذات المستوى الأعلى خارج الخيط افتراضيًا، لذا تستخدم `typingReaction` أو التسليم العادي بدلًا من المعاينة بأسلوب الخيط. - تضيف `typingReaction` تفاعلًا مؤقتًا إلى رسالة Slack الواردة أثناء تشغيل الرد، ثم تزيله عند الاكتمال. استخدم اختصار emoji في Slack مثل `"hourglass_flowing_sand"`. -- `channels.slack.execApprovals`: تسليم موافقات exec الأصلية في Slack وتفويض الموافقين. نفس مخطط Discord: `enabled` (`true`/`false`/`"auto"`)، و`approvers` (معرّفات مستخدمي Slack)، و`agentFilter`، و`sessionFilter`، و`target` (`"dm"` أو `"channel"` أو `"both"`). +- `channels.slack.execApprovals`: تسليم موافقات exec الأصلية لـ Slack وتفويض الموافقين. نفس مخطط Discord: ‏`enabled` ‏(`true`/`false`/`"auto"`)، و`approvers` ‏(معرّفات مستخدمي Slack)، و`agentFilter`، و`sessionFilter`، و`target` ‏(`"dm"` أو `"channel"` أو `"both"`). | مجموعة الإجراءات | الافتراضي | ملاحظات | -| ------------ | ------- | ---------------------- | -| reactions | مفعّل | التفاعل + سرد التفاعلات | -| messages | مفعّل | قراءة/إرسال/تعديل/حذف | -| pins | مفعّل | تثبيت/إلغاء تثبيت/سرد | -| memberInfo | مفعّل | معلومات العضو | -| emojiList | مفعّل | قائمة emoji المخصصة | +| ---------------- | --------- | ------- | +| reactions | مفعّل | التفاعل + سرد التفاعلات | +| messages | مفعّل | قراءة/إرسال/تعديل/حذف | +| pins | مفعّل | تثبيت/إلغاء تثبيت/سرد | +| memberInfo | مفعّل | معلومات العضو | +| emojiList | مفعّل | قائمة emoji المخصصة | ### Mattermost @@ -508,10 +513,10 @@ x-i18n: "team-channel-id": { requireMention: false }, }, commands: { - native: true, // تفعيل اختياري + native: true, // opt-in nativeSkills: true, callbackPath: "/api/channels/mattermost/command", - // عنوان URL صريح اختياري لعمليات النشر العامة/خلف وكيل عكسي + // Optional explicit URL for reverse-proxy/public deployments callbackUrl: "https://gateway.example.com/api/channels/mattermost/command", }, textChunkLimit: 4000, @@ -521,18 +526,23 @@ x-i18n: } ``` -أوضاع الدردشة: `oncall` (الرد عند @-mention، الافتراضي)، و`onmessage` (كل رسالة)، و`onchar` (الرسائل التي تبدأ ببادئة التشغيل). +أوضاع الدردشة: `oncall` ‏(الرد عند @-mention، وهو الافتراضي)، و`onmessage` ‏(كل رسالة)، و`onchar` ‏(الرسائل التي تبدأ ببادئة التفعيل). عند تفعيل الأوامر الأصلية في Mattermost: -- يجب أن يكون `commands.callbackPath` مسارًا (على سبيل المثال `/api/channels/mattermost/command`)، وليس عنوان URL كاملًا. +- يجب أن تكون `commands.callbackPath` مسارًا (مثل `/api/channels/mattermost/command`) وليس عنوان URL كاملًا. - يجب أن يشير `commands.callbackUrl` إلى نقطة نهاية Gateway الخاصة بـ OpenClaw وأن يكون قابلاً للوصول من خادم Mattermost. -- تُصادَق عمليات الاستدعاء العكسي الأصلية لـ slash بواسطة الرموز المميزة الخاصة بكل أمر التي يعيدها Mattermost أثناء تسجيل slash command. وإذا فشل التسجيل أو لم تُفعَّل أي أوامر، يرفض OpenClaw عمليات الاستدعاء العكسي بالرسالة `Unauthorized: invalid command token.` -- بالنسبة إلى مستضيفي الاستدعاء العكسي الخاصين/داخليي tailnet/الداخليين، قد يتطلب Mattermost أن يتضمن `ServiceSettings.AllowedUntrustedInternalConnections` مستضيف/نطاق الاستدعاء العكسي. استخدم قيم المستضيف/النطاق، وليس عناوين URL كاملة. -- `channels.mattermost.configWrites`: السماح أو الرفض لعمليات كتابة الإعدادات التي يبدؤها Mattermost. -- `channels.mattermost.requireMention`: طلب `@mention` قبل الرد في القنوات. -- `channels.mattermost.groups..requireMention`: تجاوز اشتراط الإشارة لكل قناة (`"*"` للافتراضي). -- يتجاوز `channels.mattermost.defaultAccount` الاختياري اختيار الحساب الافتراضي عندما يطابق معرّف حساب مُهيأ. +- تتم مصادقة استدعاءات slash الأصلية عبر الرموز المميّزة الخاصة بكل أمر التي يعيدها + Mattermost أثناء تسجيل أوامر slash. وإذا فشل التسجيل أو لم تُفعَّل أي + أوامر، فسيرفض OpenClaw الاستدعاءات بالرسالة + `Unauthorized: invalid command token.` +- بالنسبة لمضيفات الاستدعاء الخاصة/private/tailnet/internal، قد يتطلب Mattermost + أن يتضمن `ServiceSettings.AllowedUntrustedInternalConnections` المضيف/النطاق الخاص بالاستدعاء. + استخدم قيم المضيف/النطاق، وليس عناوين URL كاملة. +- يتيح `channels.mattermost.configWrites` عمليات كتابة الإعدادات التي يبدأها Mattermost أو يمنعها. +- يفرض `channels.mattermost.requireMention` وجود `@mention` قبل الرد في القنوات. +- `channels.mattermost.groups..requireMention`: تجاوز اشتراط الإشارة لكل قناة (`"*"` للقيمة الافتراضية). +- يتجاوز `channels.mattermost.defaultAccount` الاختياري اختيار الحساب الافتراضي عندما يطابق معرّف حساب مكوَّنًا. ### Signal @@ -541,7 +551,7 @@ x-i18n: channels: { signal: { enabled: true, - account: "+15555550123", // ربط حساب اختياري + account: "+15555550123", // optional account binding dmPolicy: "pairing", allowFrom: ["+15551234567", "uuid:123e4567-e89b-12d3-a456-426614174000"], configWrites: true, @@ -553,15 +563,15 @@ x-i18n: } ``` -**أوضاع إشعارات التفاعلات:** `off` و`own` (الافتراضي) و`all` و`allowlist` (من `reactionAllowlist`). +**أوضاع إشعارات التفاعلات:** `off` و`own` ‏(الافتراضي) و`all` و`allowlist` ‏(من `reactionAllowlist`). - `channels.signal.account`: تثبيت بدء تشغيل القناة على هوية حساب Signal محددة. -- `channels.signal.configWrites`: السماح أو الرفض لعمليات كتابة الإعدادات التي يبدؤها Signal. -- يتجاوز `channels.signal.defaultAccount` الاختياري اختيار الحساب الافتراضي عندما يطابق معرّف حساب مُهيأ. +- `channels.signal.configWrites`: السماح أو المنع لعمليات كتابة الإعدادات التي يبدأها Signal. +- يتجاوز `channels.signal.defaultAccount` الاختياري اختيار الحساب الافتراضي عندما يطابق معرّف حساب مكوَّنًا. ### BlueBubbles -يُعد BlueBubbles المسار الموصى به لـ iMessage (مدعومًا بواسطة Plugin، ويُضبط تحت `channels.bluebubbles`). +BlueBubbles هو المسار الموصى به لـ iMessage ‏(مدعوم عبر Plugin، ويُضبط ضمن `channels.bluebubbles`). ```json5 { @@ -570,20 +580,20 @@ x-i18n: enabled: true, dmPolicy: "pairing", // serverUrl, password, webhookPath, group controls, and advanced actions: - // راجع /channels/bluebubbles + // see /channels/bluebubbles }, }, } ``` - مسارات المفاتيح الأساسية المغطاة هنا: `channels.bluebubbles` و`channels.bluebubbles.dmPolicy`. -- يتجاوز `channels.bluebubbles.defaultAccount` الاختياري اختيار الحساب الافتراضي عندما يطابق معرّف حساب مُهيأ. -- يمكن لإدخالات `bindings[]` ذات المستوى الأعلى مع `type: "acp"` ربط محادثات BlueBubbles بجلسات ACP دائمة. استخدم مقبض BlueBubbles أو سلسلة الهدف (`chat_id:*` أو `chat_guid:*` أو `chat_identifier:*`) في `match.peer.id`. دلالات الحقول المشتركة: [ACP Agents](/ar/tools/acp-agents#channel-specific-settings). -- إعداد قناة BlueBubbles الكامل موثق في [BlueBubbles](/ar/channels/bluebubbles). +- يتجاوز `channels.bluebubbles.defaultAccount` الاختياري اختيار الحساب الافتراضي عندما يطابق معرّف حساب مكوَّنًا. +- يمكن لإدخالات `bindings[]` ذات المستوى الأعلى مع `type: "acp"` ربط محادثات BlueBubbles بجلسات ACP دائمة. استخدم معرّف BlueBubbles أو سلسلة الهدف (`chat_id:*` أو `chat_guid:*` أو `chat_identifier:*`) في `match.peer.id`. دلالات الحقول المشتركة: [ACP Agents](/ar/tools/acp-agents#channel-specific-settings). +- إعداد BlueBubbles الكامل للقناة موثق في [BlueBubbles](/ar/channels/bluebubbles). ### iMessage -يشغّل OpenClaw الأمر `imsg rpc` ‏(JSON-RPC عبر stdio). لا حاجة إلى daemon أو منفذ. +يقوم OpenClaw بتشغيل `imsg rpc` ‏(JSON-RPC عبر stdio). لا حاجة إلى daemon أو منفذ. ```json5 { @@ -607,17 +617,17 @@ x-i18n: } ``` -- يتجاوز `channels.imessage.defaultAccount` الاختياري اختيار الحساب الافتراضي عندما يطابق معرّف حساب مُهيأ. +- يتجاوز `channels.imessage.defaultAccount` الاختياري اختيار الحساب الافتراضي عندما يطابق معرّف حساب مكوَّنًا. -- يتطلب Full Disk Access إلى قاعدة بيانات Messages. -- يُفضل استخدام أهداف `chat_id:`. استخدم `imsg chats --limit 20` لسرد الدردشات. -- يمكن أن يشير `cliPath` إلى غلاف SSH؛ اضبط `remoteHost` (`host` أو `user@host`) لجلب المرفقات عبر SCP. -- يقيّد `attachmentRoots` و`remoteAttachmentRoots` مسارات المرفقات الواردة (الافتراضي: `/Users/*/Library/Messages/Attachments`). -- يستخدم SCP التحقق الصارم من مفتاح المستضيف، لذا تأكد من أن مفتاح مستضيف الترحيل موجود مسبقًا في `~/.ssh/known_hosts`. -- `channels.imessage.configWrites`: السماح أو الرفض لعمليات كتابة الإعدادات التي يبدؤها iMessage. -- يمكن لإدخالات `bindings[]` ذات المستوى الأعلى مع `type: "acp"` ربط محادثات iMessage بجلسات ACP دائمة. استخدم مقبضًا مُطبَّعًا أو هدف دردشة صريحًا (`chat_id:*` أو `chat_guid:*` أو `chat_identifier:*`) في `match.peer.id`. دلالات الحقول المشتركة: [ACP Agents](/ar/tools/acp-agents#channel-specific-settings). +- يتطلب Full Disk Access لقاعدة بيانات Messages. +- يُفضَّل استخدام أهداف `chat_id:`. استخدم `imsg chats --limit 20` لسرد الدردشات. +- يمكن أن يشير `cliPath` إلى SSH wrapper؛ اضبط `remoteHost` ‏(`host` أو `user@host`) لجلب المرفقات عبر SCP. +- تقيّد `attachmentRoots` و`remoteAttachmentRoots` مسارات المرفقات الواردة (الافتراضي: `/Users/*/Library/Messages/Attachments`). +- يستخدم SCP تحققًا صارمًا من مفتاح المضيف، لذا تأكد من أن مفتاح مضيف relay موجود بالفعل في `~/.ssh/known_hosts`. +- يتيح `channels.imessage.configWrites` عمليات كتابة الإعدادات التي يبدأها iMessage أو يمنعها. +- يمكن لإدخالات `bindings[]` ذات المستوى الأعلى مع `type: "acp"` ربط محادثات iMessage بجلسات ACP دائمة. استخدم معرّفًا موحّدًا أو هدف دردشة صريحًا (`chat_id:*` أو `chat_guid:*` أو `chat_identifier:*`) في `match.peer.id`. دلالات الحقول المشتركة: [ACP Agents](/ar/tools/acp-agents#channel-specific-settings). - + ```bash #!/usr/bin/env bash @@ -628,7 +638,7 @@ exec ssh -T gateway-host imsg "$@" ### Matrix -تأتي Matrix مدعومة بواسطة extension وتُضبط تحت `channels.matrix`. +Matrix مدعوم عبر extension ويُضبط ضمن `channels.matrix`. ```json5 { @@ -658,25 +668,25 @@ exec ssh -T gateway-host imsg "$@" } ``` -- تستخدم مصادقة الرمز `accessToken`؛ وتستخدم مصادقة كلمة المرور `userId` + `password`. -- يوجّه `channels.matrix.proxy` حركة HTTP الخاصة بـ Matrix عبر وكيل HTTP(S) صريح. ويمكن للحسابات المسماة تجاوزه باستخدام `channels.matrix.accounts..proxy`. -- يسمح `channels.matrix.network.dangerouslyAllowPrivateNetwork` بخوادم homeserver الخاصة/الداخلية. ويُعد كل من `proxy` وخيار الشبكة هذا عنصرَي تحكم مستقلين. +- تستخدم مصادقة الرمز المميّز `accessToken`؛ وتستخدم مصادقة كلمة المرور `userId` + `password`. +- يوجّه `channels.matrix.proxy` حركة HTTP الخاصة بـ Matrix عبر HTTP(S) proxy صريح. ويمكن للحسابات المسمّاة تجاوز ذلك عبر `channels.matrix.accounts..proxy`. +- يسمح `channels.matrix.network.dangerouslyAllowPrivateNetwork` بخوادم homeserver الخاصة/الداخلية. وكل من `proxy` وهذا التفعيل الشبكي المستقل عنصران منفصلان. - يحدد `channels.matrix.defaultAccount` الحساب المفضل في إعدادات الحسابات المتعددة. -- تكون القيمة الافتراضية لـ `channels.matrix.autoJoin` هي `off`، لذا تُتجاهل الغرف المدعوّة ودعوات الرسائل المباشرة الجديدة حتى تعيّن `autoJoin: "allowlist"` مع `autoJoinAllowlist` أو `autoJoin: "always"`. -- `channels.matrix.execApprovals`: تسليم موافقات exec الأصلية في Matrix وتفويض الموافقين. - - `enabled`: القيم `true` أو `false` أو `"auto"` (الافتراضي). في وضع auto، تُفعَّل موافقات exec عندما يمكن حلّ الموافقين من `approvers` أو `commands.ownerAllowFrom`. +- تكون القيمة الافتراضية لـ `channels.matrix.autoJoin` هي `off`، لذلك تُتجاهل الغرف المدعوّة والدعوات الجديدة بأسلوب الرسائل المباشرة إلى أن تضبط `autoJoin: "allowlist"` مع `autoJoinAllowlist` أو `autoJoin: "always"`. +- `channels.matrix.execApprovals`: تسليم موافقات exec الأصلية لـ Matrix وتفويض الموافقين. + - `enabled`: ‏`true` أو `false` أو `"auto"` ‏(الافتراضي). في الوضع التلقائي، تتفعّل موافقات exec عندما يمكن حلّ الموافقين من `approvers` أو `commands.ownerAllowFrom`. - `approvers`: معرّفات مستخدمي Matrix ‏(مثل `@owner:example.org`) المسموح لهم بالموافقة على طلبات exec. - `agentFilter`: قائمة سماح اختيارية لمعرّفات الوكلاء. احذفها لتمرير الموافقات لجميع الوكلاء. - - `sessionFilter`: أنماط مفاتيح جلسات اختيارية (سلسلة فرعية أو regex). - - `target`: مكان إرسال مطالبات الموافقة. `"dm"` (الافتراضي) أو `"channel"` (الغرفة الأصلية) أو `"both"`. - - تجاوزات لكل حساب: `channels.matrix.accounts..execApprovals`. -- يتحكم `channels.matrix.dm.sessionScope` في كيفية تجميع الرسائل المباشرة في Matrix ضمن الجلسات: يشارك `per-user` (الافتراضي) حسب النظير الموجّه، بينما يعزل `per-room` كل غرفة رسائل مباشرة على حدة. -- تستخدم مجسات الحالة في Matrix وعمليات بحث الدليل الحية سياسة الوكيل نفسها المستخدمة في حركة التشغيل. -- إعداد Matrix الكامل وقواعد الاستهداف وأمثلة الإعداد موثقة في [Matrix](/ar/channels/matrix). + - `sessionFilter`: أنماط مفاتيح جلسات اختيارية (مطابقة جزئية أو regex). + - `target`: مكان إرسال مطالبات الموافقة. `"dm"` ‏(الافتراضي) أو `"channel"` ‏(الغرفة الأصلية) أو `"both"`. + - التجاوزات لكل حساب: `channels.matrix.accounts..execApprovals`. +- يتحكم `channels.matrix.dm.sessionScope` في كيفية تجميع الرسائل المباشرة في Matrix داخل الجلسات: يشارك `per-user` ‏(الافتراضي) حسب النظير الموجّه، بينما يعزل `per-room` كل غرفة رسائل مباشرة على حدة. +- تستخدم مجسات الحالة في Matrix وعمليات البحث الحي في الدليل سياسة الـ proxy نفسها المستخدمة في حركة وقت التشغيل. +- إعداد Matrix الكامل، وقواعد الاستهداف، وأمثلة الإعداد موثقة في [Matrix](/ar/channels/matrix). ### Microsoft Teams -تأتي Microsoft Teams مدعومة بواسطة extension وتُضبط تحت `channels.msteams`. +Microsoft Teams مدعوم عبر extension ويُضبط ضمن `channels.msteams`. ```json5 { @@ -685,18 +695,18 @@ exec ssh -T gateway-host imsg "$@" enabled: true, configWrites: true, // appId, appPassword, tenantId, webhook, team/channel policies: - // راجع /channels/msteams + // see /channels/msteams }, }, } ``` - مسارات المفاتيح الأساسية المغطاة هنا: `channels.msteams` و`channels.msteams.configWrites`. -- إعداد Teams الكامل (بيانات الاعتماد وWebhook وسياسة الرسائل المباشرة/المجموعات والتجاوزات لكل فريق/قناة) موثق في [Microsoft Teams](/ar/channels/msteams). +- إعداد Teams الكامل (بيانات الاعتماد، وWebhook، وسياسة الرسائل المباشرة/المجموعات، والتجاوزات لكل فريق/قناة) موثق في [Microsoft Teams](/ar/channels/msteams). ### IRC -تأتي IRC مدعومة بواسطة extension وتُضبط تحت `channels.irc`. +IRC مدعوم عبر extension ويُضبط ضمن `channels.irc`. ```json5 { @@ -718,10 +728,10 @@ exec ssh -T gateway-host imsg "$@" ``` - مسارات المفاتيح الأساسية المغطاة هنا: `channels.irc` و`channels.irc.dmPolicy` و`channels.irc.configWrites` و`channels.irc.nickserv.*`. -- يتجاوز `channels.irc.defaultAccount` الاختياري اختيار الحساب الافتراضي عندما يطابق معرّف حساب مُهيأ. -- إعداد قناة IRC الكامل (المستضيف/المنفذ/TLS/القنوات/قوائم السماح/اشتراط الإشارة) موثق في [IRC](/ar/channels/irc). +- يتجاوز `channels.irc.defaultAccount` الاختياري اختيار الحساب الافتراضي عندما يطابق معرّف حساب مكوَّنًا. +- إعداد قناة IRC الكامل (المضيف/المنفذ/TLS/القنوات/قوائم السماح/اشتراط الإشارة) موثق في [IRC](/ar/channels/irc). -### تعدد الحسابات (كل القنوات) +### تعدد الحسابات (جميع القنوات) شغّل عدة حسابات لكل قناة (لكل منها `accountId` خاص بها): @@ -744,28 +754,28 @@ exec ssh -T gateway-host imsg "$@" } ``` -- يُستخدم `default` عند حذف `accountId` (في CLI والتوجيه). -- لا تنطبق الرموز المميزة من البيئة إلا على الحساب **default**. +- يُستخدم `default` عند حذف `accountId` ‏(CLI + التوجيه). +- لا تنطبق الرموز المميّزة من البيئة إلا على الحساب **default**. - تنطبق إعدادات القناة الأساسية على جميع الحسابات ما لم تُتجاوز لكل حساب. - استخدم `bindings[].match.accountId` لتوجيه كل حساب إلى وكيل مختلف. -- إذا أضفت حسابًا غير افتراضي عبر `openclaw channels add` (أو إعداد القناة) بينما لا تزال تستخدم إعداد قناة أحادي الحساب على المستوى الأعلى، فسيقوم OpenClaw أولًا بترقية قيم الحساب الأحادي على المستوى الأعلى والمحددة بنطاق الحساب إلى خريطة حسابات القناة لكي يستمر الحساب الأصلي في العمل. تنقلها معظم القنوات إلى `channels..accounts.default`؛ ويمكن لـ Matrix بدلًا من ذلك الحفاظ على هدف مسمّى/افتراضي مطابق موجود. -- تظل ارتباطات القناة فقط الحالية (من دون `accountId`) تطابق الحساب الافتراضي؛ وتبقى الارتباطات المحددة بنطاق الحساب اختيارية. -- يقوم `openclaw doctor --fix` أيضًا بإصلاح الأشكال المختلطة عبر نقل قيم الحساب الأحادي على المستوى الأعلى والمحددة بنطاق الحساب إلى الحساب المُرقّى المختار لتلك القناة. تستخدم معظم القنوات `accounts.default`؛ ويمكن لـ Matrix بدلًا من ذلك الحفاظ على هدف مسمّى/افتراضي مطابق موجود. +- إذا أضفت حسابًا غير افتراضي عبر `openclaw channels add` ‏(أو onboarding للقناة) بينما لا تزال على إعداد قناة أحادي الحساب على المستوى الأعلى، فإن OpenClaw يرقّي أولًا القيم أحادية الحساب ذات المستوى الأعلى والمحددة على نطاق الحساب إلى خريطة حسابات القناة حتى يستمر الحساب الأصلي في العمل. تنقل معظم القنوات هذه القيم إلى `channels..accounts.default`؛ ويمكن لـ Matrix بدلًا من ذلك الحفاظ على هدف مسمّى/افتراضي موجود ومطابق. +- تستمر الارتباطات الحالية الخاصة بالقناة فقط (من دون `accountId`) في مطابقة الحساب الافتراضي؛ وتظل الارتباطات ذات النطاق الحسابي اختيارية. +- يقوم `openclaw doctor --fix` أيضًا بإصلاح الأشكال المختلطة عبر نقل القيم أحادية الحساب ذات المستوى الأعلى والمحددة على نطاق الحساب إلى الحساب المُرقّى المختار لتلك القناة. تستخدم معظم القنوات `accounts.default`؛ ويمكن لـ Matrix بدلًا من ذلك الحفاظ على هدف مسمّى/افتراضي موجود ومطابق. ### قنوات extension الأخرى -تُضبط العديد من قنوات extension على شكل `channels.` وتُوثق في صفحات القنوات المخصصة لها (على سبيل المثال Feishu وMatrix وLINE وNostr وZalo وNextcloud Talk وSynology Chat وTwitch). -راجع فهرس القنوات الكامل: [القنوات](/ar/channels). +تُضبط العديد من قنوات extension على شكل `channels.` وهي موثقة في صفحات القنوات المخصصة لها (مثل Feishu وMatrix وLINE وNostr وZalo وNextcloud Talk وSynology Chat وTwitch). +راجع فهرس القنوات الكامل: [Channels](/ar/channels). -### اشتراط الإشارة في الدردشة الجماعية +### اشتراط الإشارة في دردشات المجموعات -تستخدم الرسائل الجماعية افتراضيًا **require mention** (إشارة في بيانات التعريف أو أنماط regex آمنة). ينطبق ذلك على دردشات المجموعات في WhatsApp وTelegram وDiscord وGoogle Chat وiMessage. +تكون رسائل المجموعات افتراضيًا **تتطلب إشارة** (إشارة ضمن البيانات الوصفية أو أنماط regex آمنة). وينطبق ذلك على دردشات مجموعات WhatsApp وTelegram وDiscord وGoogle Chat وiMessage. -**أنواع الإشارة:** +**أنواع الإشارات:** -- **الإشارات في بيانات التعريف**: إشارات @-mention الأصلية للمنصة. تُتجاهل في وضع الدردشة الذاتية في WhatsApp. -- **أنماط النص**: أنماط regex آمنة في `agents.list[].groupChat.mentionPatterns`. تُتجاهل الأنماط غير الصالحة والتكرار المتداخل غير الآمن. -- لا يُفرض اشتراط الإشارة إلا عندما يكون الاكتشاف ممكنًا (إشارات أصلية أو نمط واحد على الأقل). +- **إشارات البيانات الوصفية**: إشارات @ الأصلية للمنصة. يتم تجاهلها في وضع الدردشة الذاتية في WhatsApp. +- **أنماط النص**: أنماط regex آمنة في `agents.list[].groupChat.mentionPatterns`. يتم تجاهل الأنماط غير الصالحة والتكرار المتداخل غير الآمن. +- لا يُفرض اشتراط الإشارة إلا عندما يكون الاكتشاف ممكنًا (إشارات أصلية أو وجود نمط واحد على الأقل). ```json5 { @@ -778,7 +788,7 @@ exec ssh -T gateway-host imsg "$@" } ``` -يضبط `messages.groupChat.historyLimit` القيمة الافتراضية العامة. ويمكن للقنوات تجاوزها باستخدام `channels..historyLimit` (أو لكل حساب). عيّن القيمة `0` للتعطيل. +يضبط `messages.groupChat.historyLimit` القيمة الافتراضية العامة. ويمكن للقنوات تجاوز ذلك عبر `channels..historyLimit` ‏(أو لكل حساب). اضبط القيمة على `0` للتعطيل. #### حدود سجل الرسائل المباشرة @@ -795,13 +805,13 @@ exec ssh -T gateway-host imsg "$@" } ``` -آلية الحل: تجاوز لكل رسالة مباشرة → افتراضي المزوّد → بلا حد (يُحتفَظ بكل شيء). +آلية الحل: تجاوز لكل رسالة مباشرة → افتراضي المزوّد → بلا حد (الاحتفاظ بالجميع). المدعوم: `telegram` و`whatsapp` و`discord` و`slack` و`signal` و`imessage` و`msteams`. #### وضع الدردشة الذاتية -أدرج رقمك الخاص في `allowFrom` لتفعيل وضع الدردشة الذاتية (يتجاهل إشارات @ الأصلية، ويرد فقط على أنماط النص): +ضمّن رقمك الخاص في `allowFrom` لتفعيل وضع الدردشة الذاتية (يتجاهل إشارات @ الأصلية، ويرد فقط على أنماط النص): ```json5 { @@ -827,16 +837,16 @@ exec ssh -T gateway-host imsg "$@" ```json5 { commands: { - native: "auto", // سجّل الأوامر الأصلية عندما تكون مدعومة - nativeSkills: "auto", // سجّل أوامر Skills الأصلية عندما تكون مدعومة - text: true, // حلّل /commands في رسائل الدردشة - bash: false, // السماح بـ ! (الاسم البديل: /bash) + native: "auto", // register native commands when supported + nativeSkills: "auto", // register native skill commands when supported + text: true, // parse /commands in chat messages + bash: false, // allow ! (alias: /bash) bashForegroundMs: 2000, - config: false, // السماح بـ /config - mcp: false, // السماح بـ /mcp - plugins: false, // السماح بـ /plugins - debug: false, // السماح بـ /debug - restart: true, // السماح بـ /restart + أداة إعادة تشغيل gateway + config: false, // allow /config + mcp: false, // allow /mcp + plugins: false, // allow /plugins + debug: false, // allow /debug + restart: true, // allow /restart + gateway restart tool ownerAllowFrom: ["discord:123456789012345678"], ownerDisplay: "raw", // raw | hash ownerDisplaySecret: "${OWNER_ID_HASH_SECRET}", @@ -851,32 +861,32 @@ exec ssh -T gateway-host imsg "$@" -- تهيّئ هذه الكتلة أسطح الأوامر. لفهرس الأوامر الحالي المضمن + المجمّع، راجع [Slash Commands](/ar/tools/slash-commands). -- هذه الصفحة هي **مرجع لمفاتيح الإعدادات**، وليست فهرس الأوامر الكامل. الأوامر المملوكة للقنوات/Plugin مثل QQ Bot ‏`/bot-ping` و`/bot-help` و`/bot-logs`، وLINE ‏`/card`، وdevice-pair ‏`/pair`، وmemory ‏`/dreaming`، وphone-control ‏`/phone`، وTalk ‏`/voice` موثقة في صفحات القنوات/Plugin الخاصة بها بالإضافة إلى [Slash Commands](/ar/tools/slash-commands). -- يجب أن تكون الأوامر النصية رسائل **مستقلة** تبدأ بـ `/`. -- يؤدي `native: "auto"` إلى تشغيل الأوامر الأصلية لـ Discord/Telegram، ويترك Slack معطّلًا. -- يؤدي `nativeSkills: "auto"` إلى تشغيل أوامر Skills الأصلية لـ Discord/Telegram، ويترك Slack معطّلًا. -- تجاوز لكل قناة: `channels.discord.commands.native` ‏(قيمة منطقية أو `"auto"`). تؤدي القيمة `false` إلى مسح الأوامر المسجلة سابقًا. +- تهيّئ هذه الكتلة أسطح الأوامر. للحصول على فهرس الأوامر الحالي المضمن + المجمّع، راجع [Slash Commands](/ar/tools/slash-commands). +- هذه الصفحة هي **مرجع لمفاتيح الإعدادات**، وليست فهرس الأوامر الكامل. الأوامر المملوكة للقنوات/الـ Plugin مثل QQ Bot ‏`/bot-ping` و`/bot-help` و`/bot-logs`، وLINE ‏`/card`، وdevice-pair ‏`/pair`، وmemory ‏`/dreaming`، وphone-control ‏`/phone`، وTalk ‏`/voice` موثقة في صفحات القنوات/الـ Plugin الخاصة بها بالإضافة إلى [Slash Commands](/ar/tools/slash-commands). +- يجب أن تكون أوامر النص رسائل **مستقلة** تبدأ بـ `/`. +- يؤدي `native: "auto"` إلى تفعيل الأوامر الأصلية في Discord/Telegram، ويُبقي Slack معطلاً. +- يؤدي `nativeSkills: "auto"` إلى تفعيل أوامر Skills الأصلية في Discord/Telegram، ويُبقي Slack معطلاً. +- التجاوز لكل قناة: `channels.discord.commands.native` ‏(قيمة منطقية أو `"auto"`). تؤدي القيمة `false` إلى مسح الأوامر المسجلة سابقًا. - تجاوز تسجيل Skills الأصلية لكل قناة باستخدام `channels..commands.nativeSkills`. - يضيف `channels.telegram.customCommands` إدخالات إضافية إلى قائمة بوت Telegram. -- يفعّل `bash: true` الأمر `! ` لصدفة المستضيف. ويتطلب `tools.elevated.enabled` وأن يكون المرسل ضمن `tools.elevated.allowFrom.`. -- يفعّل `config: true` الأمر `/config` (لقراءة/كتابة `openclaw.json`). وبالنسبة إلى عملاء `chat.send` في Gateway، تتطلب عمليات الكتابة الدائمة عبر `/config set|unset` أيضًا `operator.admin`؛ بينما يبقى `/config show` للقراءة فقط متاحًا لعملاء operator العاديين ذوي نطاق الكتابة. -- يفعّل `mcp: true` الأمر `/mcp` لإعداد خادم MCP الذي يديره OpenClaw تحت `mcp.servers`. -- يفعّل `plugins: true` الأمر `/plugins` لاكتشاف Plugin وتثبيتها وعناصر التحكم في التفعيل/التعطيل. -- يتحكم `channels..configWrites` في تعديلات الإعدادات لكل قناة (الافتراضي: true). -- بالنسبة إلى القنوات متعددة الحسابات، يتحكم `channels..accounts..configWrites` أيضًا في عمليات الكتابة التي تستهدف ذلك الحساب (على سبيل المثال `/allowlist --config --account ` أو `/config set channels..accounts....`). -- يؤدي `restart: false` إلى تعطيل `/restart` وإجراءات أداة إعادة تشغيل gateway. الافتراضي: `true`. -- `ownerAllowFrom` هي قائمة السماح الصريحة للمالك الخاصة بالأوامر/الأدوات المخصصة للمالك فقط. وهي منفصلة عن `allowFrom`. +- يفعّل `bash: true` الأمر `! ` لصدفة المضيف. ويتطلب `tools.elevated.enabled` وأن يكون المرسل ضمن `tools.elevated.allowFrom.`. +- يفعّل `config: true` الأمر `/config` ‏(لقراءة/كتابة `openclaw.json`). وبالنسبة لعملاء Gateway ‏`chat.send`، تتطلب أيضًا كتابات `/config set|unset` الدائمة وجود `operator.admin`؛ بينما يظل `/config show` للقراءة فقط متاحًا لعملاء operator العاديين ذوي نطاق الكتابة. +- يفعّل `mcp: true` الأمر `/mcp` لإعدادات خادم MCP التي يديرها OpenClaw ضمن `mcp.servers`. +- يفعّل `plugins: true` الأمر `/plugins` لاكتشاف Plugin وتثبيته والتحكم في تمكينه/تعطيله. +- يضبط `channels..configWrites` السماح بتعديلات الإعدادات لكل قناة أو منعها (الافتراضي: true). +- بالنسبة إلى القنوات متعددة الحسابات، يضبط أيضًا `channels..accounts..configWrites` عمليات الكتابة التي تستهدف ذلك الحساب (مثل `/allowlist --config --account ` أو `/config set channels..accounts....`). +- يؤدي `restart: false` إلى تعطيل `/restart` وإجراءات أداة إعادة تشغيل Gateway. الافتراضي: `true`. +- يمثل `ownerAllowFrom` قائمة السماح الصريحة للمالك للأوامر/الأدوات الخاصة بالمالك فقط. وهو منفصل عن `allowFrom`. - يؤدي `ownerDisplay: "hash"` إلى تجزئة معرّفات المالك في system prompt. اضبط `ownerDisplaySecret` للتحكم في التجزئة. -- `allowFrom` يكون لكل مزوّد. وعند تعيينه، يصبح **مصدر التفويض الوحيد** (ويتم تجاهل قوائم السماح/الاقتران الخاصة بالقناة و`useAccessGroups`). -- يتيح `useAccessGroups: false` للأوامر تجاوز سياسات مجموعات الوصول عندما لا يكون `allowFrom` معيّنًا. +- يكون `allowFrom` لكل مزوّد. وعند ضبطه، فإنه يكون **المصدر الوحيد** للتخويل (ويتم تجاهل قوائم السماح/الاقتران الخاصة بالقناة و`useAccessGroups`). +- يسمح `useAccessGroups: false` للأوامر بتجاوز سياسات مجموعات الوصول عندما لا تكون `allowFrom` مضبوطة. - خريطة وثائق الأوامر: - الفهرس المضمن + المجمّع: [Slash Commands](/ar/tools/slash-commands) - - أسطح الأوامر الخاصة بكل قناة: [القنوات](/ar/channels) - - أوامر QQ Bot: [QQ Bot](/ar/channels/qqbot) + - أسطح الأوامر الخاصة بالقنوات: [Channels](/ar/channels) + - أوامر QQ Bot: ‏[QQ Bot](/ar/channels/qqbot) - أوامر الاقتران: [Pairing](/ar/channels/pairing) - - أمر البطاقة في LINE: [LINE](/ar/channels/line) - - Dreaming للذاكرة: [Dreaming](/ar/concepts/dreaming) + - أمر بطاقة LINE: ‏[LINE](/ar/channels/line) + - Dreaming الخاصة بالذاكرة: [Dreaming](/ar/concepts/dreaming) @@ -896,7 +906,7 @@ exec ssh -T gateway-host imsg "$@" ### `agents.defaults.repoRoot` -جذر المستودع الاختياري المعروض في سطر Runtime داخل system prompt. وإذا لم يُعيَّن، يكتشفه OpenClaw تلقائيًا عبر الصعود من مساحة العمل. +جذر مستودع اختياري يظهر في سطر Runtime ضمن system prompt. وإذا لم يُضبط، يكتشفه OpenClaw تلقائيًا بالصعود من مساحة العمل. ```json5 { @@ -906,7 +916,7 @@ exec ssh -T gateway-host imsg "$@" ### `agents.defaults.skills` -قائمة السماح الافتراضية الاختيارية لـ Skills للوكلاء الذين لا يعيّنون +قائمة سماح افتراضية اختيارية لـ Skills للوكلاء الذين لا يضبطون `agents.list[].skills`. ```json5 @@ -914,9 +924,9 @@ exec ssh -T gateway-host imsg "$@" agents: { defaults: { skills: ["github", "weather"] }, list: [ - { id: "writer" }, // يرث github وweather - { id: "docs", skills: ["docs-search"] }, // يستبدل القيم الافتراضية - { id: "locked-down", skills: [] }, // بدون Skills + { id: "writer" }, // inherits github, weather + { id: "docs", skills: ["docs-search"] }, // replaces defaults + { id: "locked-down", skills: [] }, // no skills ], }, } @@ -924,9 +934,9 @@ exec ssh -T gateway-host imsg "$@" - احذف `agents.defaults.skills` للحصول على Skills غير مقيّدة افتراضيًا. - احذف `agents.list[].skills` لوراثة القيم الافتراضية. -- عيّن `agents.list[].skills: []` لعدم استخدام أي Skills. -- تمثل قائمة `agents.list[].skills` غير الفارغة المجموعة النهائية لذلك الوكيل؛ - وهي لا تندمج مع القيم الافتراضية. +- اضبط `agents.list[].skills: []` لعدم وجود أي Skills. +- تكون القائمة غير الفارغة `agents.list[].skills` هي المجموعة النهائية لذلك الوكيل؛ + ولا تُدمج مع القيم الافتراضية. ### `agents.defaults.skipBootstrap` @@ -940,9 +950,9 @@ exec ssh -T gateway-host imsg "$@" ### `agents.defaults.contextInjection` -يتحكم في وقت حقن ملفات bootstrap الخاصة بمساحة العمل داخل system prompt. الافتراضي: `"always"`. +يتحكم في وقت حقن ملفات bootstrap الخاصة بمساحة العمل في system prompt. القيمة الافتراضية: `"always"`. -- `"continuation-skip"`: تتجاوز أدوار المتابعة الآمنة (بعد اكتمال استجابة المساعد) إعادة حقن bootstrap الخاص بمساحة العمل، مما يقلل حجم prompt. وتستمر تشغيلات Heartbeat وإعادات المحاولة بعد Compaction في إعادة بناء السياق. +- `"continuation-skip"`: تتخطى أدوار المتابعة الآمنة (بعد اكتمال رد المساعد) إعادة حقن bootstrap الخاصة بمساحة العمل، مما يقلل حجم prompt. وتظل تشغيلات Heartbeat ومحاولات إعادة التنفيذ بعد Compaction تعيد بناء السياق. ```json5 { @@ -962,7 +972,7 @@ exec ssh -T gateway-host imsg "$@" ### `agents.defaults.bootstrapTotalMaxChars` -الحد الأقصى لإجمالي الأحرف المحقونة عبر جميع ملفات bootstrap الخاصة بمساحة العمل. الافتراضي: `60000`. +الحد الأقصى الإجمالي لعدد الأحرف المحقونة عبر جميع ملفات bootstrap في مساحة العمل. الافتراضي: `60000`. ```json5 { @@ -972,12 +982,12 @@ exec ssh -T gateway-host imsg "$@" ### `agents.defaults.bootstrapPromptTruncationWarning` -يتحكم في نص التحذير المرئي للوكيل عند اقتطاع سياق bootstrap. +يتحكم في نص التحذير المرئي للوكيل عندما يُقتطع سياق bootstrap. الافتراضي: `"once"`. -- `"off"`: لا تحقن نص التحذير مطلقًا في system prompt. -- `"once"`: احقن التحذير مرة واحدة لكل توقيع اقتطاع فريد (موصى به). -- `"always"`: احقن التحذير في كل تشغيل عندما يوجد اقتطاع. +- `"off"`: لا يحقن نص تحذير في system prompt مطلقًا. +- `"once"`: يحقن التحذير مرة واحدة لكل توقيع اقتطاع فريد (موصى به). +- `"always"`: يحقن التحذير في كل تشغيل عند وجود اقتطاع. ```json5 { @@ -987,22 +997,22 @@ exec ssh -T gateway-host imsg "$@" ### خريطة ملكية ميزانية السياق -يحتوي OpenClaw على عدة ميزانيات كبيرة الحجم لـ prompt/السياق، وهي -مقسمة عمدًا حسب النظام الفرعي بدلًا من مرورها كلها عبر -مفتاح ضبط عام واحد. +يحتوي OpenClaw على عدة ميزانيات كبيرة الحجم للـ prompt/السياق، وهي +مقسّمة عمدًا حسب النظام الفرعي بدلًا من مرورها كلها عبر +مفتاح عام واحد. - `agents.defaults.bootstrapMaxChars` / `agents.defaults.bootstrapTotalMaxChars`: حقن bootstrap العادي لمساحة العمل. - `agents.defaults.startupContext.*`: - تمهيد بدء التشغيل لمرة واحدة لأوامر `/new` و`/reset`، + تمهيد بدء التشغيل لمرة واحدة في `/new` و`/reset`، بما في ذلك ملفات `memory/*.md` اليومية الحديثة. - `skills.limits.*`: قائمة Skills المدمجة المحقونة في system prompt. - `agents.defaults.contextLimits.*`: - مقتطفات التشغيل المحدودة والكتل المملوكة لوقت التشغيل والمحقونة. + مقتطفات وقت التشغيل المحدودة والكتل المحقونة المملوكة لوقت التشغيل. - `memory.qmd.limits.*`: - مقتطفات البحث في الذاكرة المفهرسة وتحجيم الحقن. + حجم مقتطفات بحث الذاكرة المفهرسة والحقن. استخدم التجاوز المطابق لكل وكيل فقط عندما يحتاج وكيل واحد إلى ميزانية مختلفة: @@ -1012,8 +1022,8 @@ exec ssh -T gateway-host imsg "$@" #### `agents.defaults.startupContext` -يتحكم في تمهيد بدء التشغيل لأول دور، والذي يُحقن في تشغيلات `/new` و`/reset` -العادية. +يتحكم في تمهيد سياق بدء التشغيل في الدور الأول المحقون عند تشغيل `/new` و`/reset` +من دون سياق سابق. ```json5 { @@ -1034,7 +1044,7 @@ exec ssh -T gateway-host imsg "$@" #### `agents.defaults.contextLimits` -إعدادات افتراضية مشتركة لأسطح سياق التشغيل المحدودة. +إعدادات افتراضية مشتركة لأسطح سياق وقت التشغيل المحدودة. ```json5 { @@ -1051,17 +1061,18 @@ exec ssh -T gateway-host imsg "$@" } ``` -- `memoryGetMaxChars`: الحد الافتراضي لمقتطف `memory_get` قبل إضافة - بيانات وصفية للاقتطاع وإشعار بالمتابعة. -- `memoryGetDefaultLines`: نافذة الأسطر الافتراضية لـ `memory_get` عند حذف `lines`. -- `toolResultMaxChars`: الحد الأقصى لنتائج الأدوات أثناء التشغيل والمستخدم للنتائج - المحفوظة ومعالجة الفائض. -- `postCompactionMaxChars`: الحد الأقصى لمقتطفات AGENTS.md المستخدمة أثناء - حقن التحديث بعد Compaction. +- `memoryGetMaxChars`: السقف الافتراضي لمقتطف `memory_get` قبل إضافة + بيانات وصفية للاقتطاع وإشعار الاستمرار. +- `memoryGetDefaultLines`: نافذة الأسطر الافتراضية لـ `memory_get` عندما تكون `lines` + غير محددة. +- `toolResultMaxChars`: السقف الحي لنتائج الأدوات المستخدم للنتائج المحفوظة + واستعادة التجاوز. +- `postCompactionMaxChars`: سقف مقتطف `AGENTS.md` المستخدم أثناء حقن + التحديث بعد Compaction. #### `agents.list[].contextLimits` -تجاوز لكل وكيل لمفاتيح `contextLimits` المشتركة. وترث الحقول المحذوفة +تجاوز لكل وكيل لمفاتيح `contextLimits` المشتركة. الحقول غير المحددة ترث من `agents.defaults.contextLimits`. ```json5 @@ -1088,8 +1099,8 @@ exec ssh -T gateway-host imsg "$@" #### `skills.limits.maxSkillsPromptChars` -الحد الأقصى العام لقائمة Skills المدمجة المحقونة في system prompt. هذا -لا يؤثر في قراءة ملفات `SKILL.md` عند الطلب. +السقف العام لقائمة Skills المدمجة المحقونة في system prompt. ولا +يؤثر هذا في قراءة ملفات `SKILL.md` عند الطلب. ```json5 { @@ -1122,11 +1133,11 @@ exec ssh -T gateway-host imsg "$@" ### `agents.defaults.imageMaxDimensionPx` -الحد الأقصى لحجم البكسل لأطول ضلع في الصورة ضمن كتل صور السجل/الأدوات قبل استدعاءات المزوّد. +الحد الأقصى لحجم البكسل لأطول ضلع في الصورة ضمن كتل الصور في السجل/الأدوات قبل استدعاءات المزوّد. الافتراضي: `1200`. -تقلل القيم المنخفضة عادةً من استخدام رموز الرؤية وحجم حمولة الطلب في التشغيلات التي تحتوي على الكثير من لقطات الشاشة. -وتحافظ القيم الأعلى على قدر أكبر من التفاصيل المرئية. +تؤدي القيم الأقل عادةً إلى تقليل استخدام vision-token وحجم حمولة الطلبات في التشغيلات الثقيلة باللقطات. +أما القيم الأعلى فتحافظ على مزيد من التفاصيل البصرية. ```json5 { @@ -1136,7 +1147,7 @@ exec ssh -T gateway-host imsg "$@" ### `agents.defaults.userTimezone` -المنطقة الزمنية لسياق system prompt (وليس الطوابع الزمنية للرسائل). وتعود إلى المنطقة الزمنية الخاصة بالمستضيف عند عدم التعيين. +المنطقة الزمنية لسياق system prompt (وليست للطوابع الزمنية للرسائل). وتعود إلى المنطقة الزمنية للمضيف عند عدم توفرها. ```json5 { @@ -1184,7 +1195,7 @@ exec ssh -T gateway-host imsg "$@" primary: "anthropic/claude-opus-4-6", fallbacks: ["openai/gpt-5.4-mini"], }, - params: { cacheRetention: "long" }, // معاملات المزوّد الافتراضية العامة + params: { cacheRetention: "long" }, // global default provider params embeddedHarness: { runtime: "auto", // auto | pi | registered harness id, e.g. codex fallback: "pi", // pi | none @@ -1203,49 +1214,49 @@ exec ssh -T gateway-host imsg "$@" } ``` -- `model`: يقبل إما سلسلة (`"provider/model"`) أو كائنًا (`{ primary, fallbacks }`). - - يضبط نموذج السلسلة النموذج الأساسي فقط. - - يضبط نموذج الكائن النموذج الأساسي بالإضافة إلى نماذج التحويل الاحتياطي المرتبة. -- `imageModel`: يقبل إما سلسلة (`"provider/model"`) أو كائنًا (`{ primary, fallbacks }`). - - يُستخدم في مسار أداة `image` كإعداد لنموذج الرؤية الخاص بها. - - ويُستخدم أيضًا كتوجيه احتياطي عندما لا يستطيع النموذج المحدد/الافتراضي قبول مدخلات الصور. -- `imageGenerationModel`: يقبل إما سلسلة (`"provider/model"`) أو كائنًا (`{ primary, fallbacks }`). - - يُستخدم في إمكانية توليد الصور المشتركة وأي سطح أداة/Plugin مستقبلي يولد صورًا. - - القيم النموذجية: `google/gemini-3.1-flash-image-preview` لتوليد صور Gemini الأصلي، أو `fal/fal-ai/flux/dev` لـ fal، أو `openai/gpt-image-1` لـ OpenAI Images. - - إذا اخترت مزودًا/نموذجًا مباشرةً، فاضبط أيضًا مصادقة المزوّد/مفتاح API المطابق (على سبيل المثال `GEMINI_API_KEY` أو `GOOGLE_API_KEY` لـ `google/*`، و`OPENAI_API_KEY` لـ `openai/*`، و`FAL_KEY` لـ `fal/*`). - - إذا لم يُعيَّن، يمكن لـ `image_generate` مع ذلك استنتاج افتراضي مزوّد مدعوم بالمصادقة. إذ يحاول أولًا المزوّد الافتراضي الحالي، ثم بقية مزوّدي توليد الصور المسجلين حسب ترتيب معرّف المزوّد. -- `musicGenerationModel`: يقبل إما سلسلة (`"provider/model"`) أو كائنًا (`{ primary, fallbacks }`). - - يُستخدم في إمكانية توليد الموسيقى المشتركة وفي الأداة المضمنة `music_generate`. - - القيم النموذجية: `google/lyria-3-clip-preview` أو `google/lyria-3-pro-preview` أو `minimax/music-2.5+`. - - إذا لم يُعيَّن، يمكن لـ `music_generate` مع ذلك استنتاج افتراضي مزوّد مدعوم بالمصادقة. إذ يحاول أولًا المزوّد الافتراضي الحالي، ثم بقية مزوّدي توليد الموسيقى المسجلين حسب ترتيب معرّف المزوّد. - - إذا اخترت مزودًا/نموذجًا مباشرةً، فاضبط أيضًا مصادقة المزوّد/مفتاح API المطابق. -- `videoGenerationModel`: يقبل إما سلسلة (`"provider/model"`) أو كائنًا (`{ primary, fallbacks }`). - - يُستخدم في إمكانية توليد الفيديو المشتركة وفي الأداة المضمنة `video_generate`. - - القيم النموذجية: `qwen/wan2.6-t2v` أو `qwen/wan2.6-i2v` أو `qwen/wan2.6-r2v` أو `qwen/wan2.6-r2v-flash` أو `qwen/wan2.7-r2v`. - - إذا لم يُعيَّن، يمكن لـ `video_generate` مع ذلك استنتاج افتراضي مزوّد مدعوم بالمصادقة. إذ يحاول أولًا المزوّد الافتراضي الحالي، ثم بقية مزوّدي توليد الفيديو المسجلين حسب ترتيب معرّف المزوّد. - - إذا اخترت مزودًا/نموذجًا مباشرةً، فاضبط أيضًا مصادقة المزوّد/مفتاح API المطابق. - - يدعم مزود توليد الفيديو المضمّن Qwen ما يصل إلى فيديو مخرج واحد، وصورة إدخال واحدة، و4 فيديوهات إدخال، ومدة 10 ثوانٍ، وخيارات على مستوى المزوّد مثل `size` و`aspectRatio` و`resolution` و`audio` و`watermark`. -- `pdfModel`: يقبل إما سلسلة (`"provider/model"`) أو كائنًا (`{ primary, fallbacks }`). - - يُستخدم بواسطة أداة `pdf` لتوجيه النموذج. - - إذا لم يُعيَّن، تعود أداة PDF إلى `imageModel`، ثم إلى النموذج المحلول للجلسة/الافتراضي. -- `pdfMaxBytesMb`: حد حجم PDF الافتراضي لأداة `pdf` عندما لا يُمرَّر `maxBytesMb` وقت الاستدعاء. -- `pdfMaxPages`: الحد الأقصى الافتراضي للصفحات التي ينظر فيها وضع الاستخراج الاحتياطي في أداة `pdf`. +- `model`: يقبل إما سلسلة نصية (`"provider/model"`) أو كائنًا (`{ primary, fallbacks }`). + - يضبط الشكل النصي النموذج الأساسي فقط. + - يضبط شكل الكائن النموذج الأساسي بالإضافة إلى نماذج التحويل الاحتياطي المرتبة. +- `imageModel`: يقبل إما سلسلة نصية (`"provider/model"`) أو كائنًا (`{ primary, fallbacks }`). + - يُستخدم من مسار أداة `image` بوصفه إعداد نموذج الرؤية الخاص بها. + - ويُستخدم أيضًا كتوجيه احتياطي عندما لا يستطيع النموذج المحدد/الافتراضي قبول إدخال الصور. +- `imageGenerationModel`: يقبل إما سلسلة نصية (`"provider/model"`) أو كائنًا (`{ primary, fallbacks }`). + - يُستخدم من قدرة توليد الصور المشتركة وأي سطح أداة/Plugin مستقبلي ينشئ صورًا. + - القيم الشائعة: `google/gemini-3.1-flash-image-preview` لتوليد صور Gemini الأصلي، أو `fal/fal-ai/flux/dev` لـ fal، أو `openai/gpt-image-1` لـ OpenAI Images. + - إذا اخترت مزودًا/نموذجًا مباشرةً، فاضبط أيضًا مصادقة/مفتاح API الخاص بالمزوّد المطابق (على سبيل المثال `GEMINI_API_KEY` أو `GOOGLE_API_KEY` لـ `google/*`، و`OPENAI_API_KEY` لـ `openai/*`، و`FAL_KEY` لـ `fal/*`). + - إذا حُذف، فلا يزال `image_generate` قادرًا على استنتاج قيمة مزوّد افتراضية مدعومة بالمصادقة. فهو يحاول أولًا المزوّد الافتراضي الحالي، ثم بقية مزوّدي توليد الصور المسجلين بترتيب معرّف المزوّد. +- `musicGenerationModel`: يقبل إما سلسلة نصية (`"provider/model"`) أو كائنًا (`{ primary, fallbacks }`). + - يُستخدم من قدرة توليد الموسيقى المشتركة ومن أداة `music_generate` المضمنة. + - القيم الشائعة: `google/lyria-3-clip-preview` أو `google/lyria-3-pro-preview` أو `minimax/music-2.5+`. + - إذا حُذف، فلا يزال `music_generate` قادرًا على استنتاج قيمة مزوّد افتراضية مدعومة بالمصادقة. فهو يحاول أولًا المزوّد الافتراضي الحالي، ثم بقية مزوّدي توليد الموسيقى المسجلين بترتيب معرّف المزوّد. + - إذا اخترت مزودًا/نموذجًا مباشرةً، فاضبط أيضًا مصادقة/مفتاح API الخاص بالمزوّد المطابق. +- `videoGenerationModel`: يقبل إما سلسلة نصية (`"provider/model"`) أو كائنًا (`{ primary, fallbacks }`). + - يُستخدم من قدرة توليد الفيديو المشتركة ومن أداة `video_generate` المضمنة. + - القيم الشائعة: `qwen/wan2.6-t2v` أو `qwen/wan2.6-i2v` أو `qwen/wan2.6-r2v` أو `qwen/wan2.6-r2v-flash` أو `qwen/wan2.7-r2v`. + - إذا حُذف، فلا يزال `video_generate` قادرًا على استنتاج قيمة مزوّد افتراضية مدعومة بالمصادقة. فهو يحاول أولًا المزوّد الافتراضي الحالي، ثم بقية مزوّدي توليد الفيديو المسجلين بترتيب معرّف المزوّد. + - إذا اخترت مزودًا/نموذجًا مباشرةً، فاضبط أيضًا مصادقة/مفتاح API الخاص بالمزوّد المطابق. + - يدعم مزوّد توليد الفيديو Qwen المضمن ما يصل إلى فيديو خرج واحد، وصورة إدخال واحدة، و4 فيديوهات إدخال، ومدة 10 ثوانٍ، وخيارات `size` و`aspectRatio` و`resolution` و`audio` و`watermark` على مستوى المزوّد. +- `pdfModel`: يقبل إما سلسلة نصية (`"provider/model"`) أو كائنًا (`{ primary, fallbacks }`). + - يُستخدم من أداة `pdf` لتوجيه النموذج. + - إذا حُذف، تعود أداة PDF إلى `imageModel`، ثم إلى نموذج الجلسة/النموذج الافتراضي المحلول. +- `pdfMaxBytesMb`: حد حجم PDF الافتراضي لأداة `pdf` عندما لا يتم تمرير `maxBytesMb` وقت الاستدعاء. +- `pdfMaxPages`: الحد الأقصى الافتراضي للصفحات التي تؤخذ في الاعتبار في وضع الاستخراج الاحتياطي في أداة `pdf`. - `verboseDefault`: مستوى verbose الافتراضي للوكلاء. القيم: `"off"` و`"on"` و`"full"`. الافتراضي: `"off"`. -- `elevatedDefault`: مستوى المخرجات المرتفعة الافتراضي للوكلاء. القيم: `"off"` و`"on"` و`"ask"` و`"full"`. الافتراضي: `"on"`. -- `model.primary`: التنسيق `provider/model` (مثل `openai/gpt-5.4`). إذا حذفت المزوّد، يحاول OpenClaw أولًا اسمًا مستعارًا، ثم تطابقًا فريدًا لمزوّد مهيأ لذلك المعرّف الدقيق للنموذج، وبعدها فقط يعود إلى المزوّد الافتراضي المهيأ (سلوك توافق قديم ومهجور، لذا يُفضّل استخدام `provider/model` الصريح). وإذا لم يعد ذلك المزوّد يوفّر النموذج الافتراضي المهيأ، يعود OpenClaw إلى أول مزوّد/نموذج مهيأ بدلًا من إظهار افتراضي قديم لمزوّد تمت إزالته. -- `models`: فهرس النماذج المهيأ وقائمة السماح الخاصة بـ `/model`. يمكن أن يتضمن كل إدخال `alias` (اختصارًا) و`params` (خاصة بالمزوّد، مثل `temperature` و`maxTokens` و`cacheRetention` و`context1m`). -- `params`: معاملات المزوّد الافتراضية العامة المطبقة على جميع النماذج. تُضبط في `agents.defaults.params` (مثل `{ cacheRetention: "long" }`). -- أولوية دمج `params` (في الإعدادات): يتم تجاوز `agents.defaults.params` (الأساس العام) بواسطة `agents.defaults.models["provider/model"].params` (لكل نموذج)، ثم يتجاوز `agents.list[].params` (لمعرّف الوكيل المطابق) بالمفتاح. راجع [Prompt Caching](/ar/reference/prompt-caching) للتفاصيل. -- `embeddedHarness`: سياسة وقت التشغيل المضمن منخفضة المستوى الافتراضية للوكيل. استخدم `runtime: "auto"` للسماح لـ harnesses الخاصة بـ Plugin المسجلة بادعاء النماذج المدعومة، أو `runtime: "pi"` لفرض harness المضمن PI، أو معرّف harness مسجل مثل `runtime: "codex"`. عيّن `fallback: "none"` لتعطيل الرجوع التلقائي إلى PI. -- تقوم كاتبات الإعدادات التي تعدّل هذه الحقول (مثل `/models set` و`/models set-image` وأوامر إضافة/إزالة الاحتياطي) بحفظ صيغة الكائن القانونية مع الحفاظ على قوائم fallback الموجودة متى أمكن. -- `maxConcurrent`: الحد الأقصى لتشغيلات الوكلاء المتوازية عبر الجلسات (مع بقاء كل جلسة متسلسلة داخليًا). الافتراضي: 4. +- `elevatedDefault`: مستوى المخرجات elevated الافتراضي للوكلاء. القيم: `"off"` و`"on"` و`"ask"` و`"full"`. الافتراضي: `"on"`. +- `model.primary`: التنسيق `provider/model` ‏(مثل `openai/gpt-5.4`). إذا حذفت المزوّد، فإن OpenClaw يحاول أولًا اسمًا مستعارًا، ثم مطابقة فريدة لمزوّد مكوَّن لذلك المعرّف الدقيق للنموذج، وبعد ذلك فقط يعود إلى المزوّد الافتراضي المكوَّن (سلوك توافق قديم ومُهمل، لذا يُفضَّل `provider/model` الصريح). وإذا لم يعد ذلك المزوّد يوفّر النموذج الافتراضي المكوَّن، فإن OpenClaw يعود إلى أول مزوّد/نموذج مكوَّن بدلًا من إظهار قيمة افتراضية قديمة لمزوّد تمت إزالته. +- `models`: فهرس النماذج المكوَّن وقائمة السماح للأمر `/model`. ويمكن أن يتضمن كل إدخال `alias` ‏(اختصار) و`params` ‏(خاصة بالمزوّد، مثل `temperature` و`maxTokens` و`cacheRetention` و`context1m`). +- `params`: معاملات المزوّد الافتراضية العامة المطبقة على جميع النماذج. تُضبط في `agents.defaults.params` ‏(مثل `{ cacheRetention: "long" }`). +- أسبقية دمج `params` ‏(الإعدادات): يتم تجاوز `agents.defaults.params` ‏(الأساس العام) بواسطة `agents.defaults.models["provider/model"].params` ‏(لكل نموذج)، ثم تتجاوز `agents.list[].params` ‏(معرّف الوكيل المطابق) حسب المفتاح. راجع [Prompt Caching](/ar/reference/prompt-caching) للحصول على التفاصيل. +- `embeddedHarness`: سياسة وقت تشغيل الوكيل المضمن منخفضة المستوى الافتراضية. استخدم `runtime: "auto"` لكي تطالب Plugin harnesses المسجّلة بالنماذج المدعومة، أو `runtime: "pi"` لفرض PI harness المضمن، أو معرّف harness مسجّل مثل `runtime: "codex"`. اضبط `fallback: "none"` لتعطيل الرجوع التلقائي إلى PI. +- تحفظ أدوات كتابة الإعدادات التي تعدّل هذه الحقول (مثل `/models set` و`/models set-image` وأوامر إضافة/إزالة الاحتياطي) شكل الكائن القياسي وتحافظ على قوائم الاحتياطي الحالية عندما يكون ذلك ممكنًا. +- `maxConcurrent`: الحد الأقصى لتشغيلات الوكلاء المتوازية عبر الجلسات (مع بقاء كل جلسة متسلسلة). الافتراضي: 4. ### `agents.defaults.embeddedHarness` يتحكم `embeddedHarness` في المنفّذ منخفض المستوى الذي يشغّل أدوار الوكيل المضمنة. -ينبغي لمعظم عمليات النشر الإبقاء على الإعداد الافتراضي `{ runtime: "auto", fallback: "pi" }`. -استخدمه عندما يوفّر Plugin موثوق harness أصليًا، مثل -harness خادم التطبيق Codex المضمّن. +ينبغي لمعظم البيئات إبقاء القيمة الافتراضية `{ runtime: "auto", fallback: "pi" }`. +استخدمه عندما يوفّر Plugin موثوق native harness، مثل +Codex app-server harness المضمن. ```json5 { @@ -1261,34 +1272,34 @@ harness خادم التطبيق Codex المضمّن. } ``` -- `runtime`: القيم `"auto"` أو `"pi"` أو معرّف harness مسجل لأحد Plugin. يسجل Plugin Codex المضمّن المعرف `codex`. -- `fallback`: القيم `"pi"` أو `"none"`. تبقي `"pi"` harness PI المضمن كاحتياطي توافق. وتؤدي `"none"` إلى فشل اختيار harness الخاص بـ Plugin عندما يكون مفقودًا أو غير مدعوم بدلًا من استخدام PI بصمت. -- تجاوزات البيئة: يتجاوز `OPENCLAW_AGENT_RUNTIME=` القيمة `runtime`؛ ويعطّل `OPENCLAW_AGENT_HARNESS_FALLBACK=none` الرجوع إلى PI لتلك العملية. -- لعمليات النشر الخاصة بـ Codex فقط، اضبط `model: "codex/gpt-5.4"` و`embeddedHarness.runtime: "codex"` و`embeddedHarness.fallback: "none"`. -- يتحكم هذا فقط في harness الدردشة المضمن. أما توليد الوسائط والرؤية وPDF والموسيقى والفيديو وTTS فما زالت تستخدم إعدادات المزوّد/النموذج الخاصة بها. +- `runtime`: ‏`"auto"` أو `"pi"` أو معرّف harness Plugin مسجّل. يسجل Plugin Codex المضمن `codex`. +- `fallback`: ‏`"pi"` أو `"none"`. تُبقي `"pi"` على PI harness المضمن كرجوع احتياطي للتوافق. أما `"none"` فتجعل اختيار Plugin harness المفقود أو غير المدعوم يفشل بدلًا من استخدام PI بصمت. +- تجاوزات البيئة: يتجاوز `OPENCLAW_AGENT_RUNTIME=` قيمة `runtime`؛ ويعطّل `OPENCLAW_AGENT_HARNESS_FALLBACK=none` الرجوع إلى PI لتلك العملية. +- بالنسبة إلى البيئات الخاصة بـ Codex فقط، اضبط `model: "codex/gpt-5.4"` و`embeddedHarness.runtime: "codex"` و`embeddedHarness.fallback: "none"`. +- يتحكم هذا في chat harness المضمن فقط. أما توليد الوسائط والرؤية وPDF والموسيقى والفيديو وTTS فلا تزال تستخدم إعدادات المزوّد/النموذج الخاصة بها. -**الاختصارات المستعارة المضمنة** (تنطبق فقط عندما يكون النموذج موجودًا في `agents.defaults.models`): +**اختصارات الأسماء المستعارة المضمنة** (لا تنطبق إلا عندما يكون النموذج موجودًا في `agents.defaults.models`): | الاسم المستعار | النموذج | -| ------------------- | -------------------------------------- | -| `opus` | `anthropic/claude-opus-4-6` | -| `sonnet` | `anthropic/claude-sonnet-4-6` | -| `gpt` | `openai/gpt-5.4` | -| `gpt-mini` | `openai/gpt-5.4-mini` | -| `gpt-nano` | `openai/gpt-5.4-nano` | -| `gemini` | `google/gemini-3.1-pro-preview` | -| `gemini-flash` | `google/gemini-3-flash-preview` | +| -------------- | ------- | +| `opus` | `anthropic/claude-opus-4-6` | +| `sonnet` | `anthropic/claude-sonnet-4-6` | +| `gpt` | `openai/gpt-5.4` | +| `gpt-mini` | `openai/gpt-5.4-mini` | +| `gpt-nano` | `openai/gpt-5.4-nano` | +| `gemini` | `google/gemini-3.1-pro-preview` | +| `gemini-flash` | `google/gemini-3-flash-preview` | | `gemini-flash-lite` | `google/gemini-3.1-flash-lite-preview` | -تفوز الأسماء المستعارة التي تضبطها أنت دائمًا على القيم الافتراضية. +تتغلب الأسماء المستعارة التي تضبطها أنت دائمًا على القيم الافتراضية. -تفعّل نماذج Z.AI GLM-4.x وضع التفكير تلقائيًا ما لم تعيّن `--thinking off` أو تعرّف `agents.defaults.models["zai/"].params.thinking` بنفسك. -وتفعّل نماذج Z.AI القيمة `tool_stream` افتراضيًا لبث استدعاءات الأدوات. عيّن `agents.defaults.models["zai/"].params.tool_stream` إلى `false` لتعطيلها. -وتستخدم نماذج Anthropic Claude 4.6 افتراضيًا التفكير `adaptive` عندما لا يكون هناك مستوى تفكير صريح محدد. +تفعّل نماذج Z.AI GLM-4.x وضع التفكير تلقائيًا ما لم تضبط `--thinking off` أو تعرّف `agents.defaults.models["zai/"].params.thinking` بنفسك. +وتفعّل نماذج Z.AI القيمة `tool_stream` افتراضيًا لبث استدعاءات الأدوات. اضبط `agents.defaults.models["zai/"].params.tool_stream` على `false` لتعطيل ذلك. +وتستخدم نماذج Anthropic Claude 4.6 قيمة التفكير الافتراضية `adaptive` عندما لا يكون هناك مستوى تفكير صريح محدد. ### `agents.defaults.cliBackends` -واجهات CLI خلفية اختيارية لتشغيلات الاحتياط النصية فقط (من دون استدعاءات أدوات). وهي مفيدة كنسخة احتياطية عند تعطل مزوّدي API. +واجهات CLI خلفية اختيارية للتشغيلات الاحتياطية النصية فقط (من دون استدعاءات أدوات). وهي مفيدة كنسخة احتياطية عند فشل مزوّدي API. ```json5 { @@ -1316,13 +1327,13 @@ harness خادم التطبيق Codex المضمّن. } ``` -- الواجهات الخلفية CLI موجهة للنص أولًا؛ وتكون الأدوات معطلة دائمًا. -- تُدعَم الجلسات عندما يكون `sessionArg` معيّنًا. -- يُدعَم تمرير الصور عندما يقبل `imageArg` مسارات الملفات. +- واجهات CLI الخلفية مخصّصة للنص أولًا؛ وتكون الأدوات معطلة دائمًا. +- تكون الجلسات مدعومة عندما تكون `sessionArg` مضبوطة. +- يكون تمرير الصور مدعومًا عندما تقبل `imageArg` مسارات الملفات. ### `agents.defaults.systemPromptOverride` -استبدل system prompt الكامل الذي يجمعه OpenClaw بسلسلة ثابتة. يُضبط على المستوى الافتراضي (`agents.defaults.systemPromptOverride`) أو لكل وكيل (`agents.list[].systemPromptOverride`). وتأخذ القيم لكل وكيل الأولوية؛ وتُتجاهل القيم الفارغة أو التي تحتوي على مسافات بيضاء فقط. وهذا مفيد لتجارب prompt المنضبطة. +يستبدل system prompt الكامل الذي يجمعه OpenClaw بسلسلة ثابتة. يُضبط على المستوى الافتراضي (`agents.defaults.systemPromptOverride`) أو لكل وكيل (`agents.list[].systemPromptOverride`). وتكون القيم لكل وكيل ذات أولوية أعلى؛ ويتم تجاهل القيمة الفارغة أو التي تحتوي على مسافات فقط. وهو مفيد لتجارب prompt المضبوطة. ```json5 { @@ -1343,16 +1354,16 @@ harness خادم التطبيق Codex المضمّن. agents: { defaults: { heartbeat: { - every: "30m", // 0m للتعطيل + every: "30m", // 0m disables model: "openai/gpt-5.4-mini", includeReasoning: false, - includeSystemPromptSection: true, // الافتراضي: true؛ false يحذف قسم Heartbeat من system prompt - lightContext: false, // الافتراضي: false؛ true يُبقي فقط HEARTBEAT.md من ملفات bootstrap الخاصة بمساحة العمل - isolatedSession: false, // الافتراضي: false؛ true يشغّل كل Heartbeat في جلسة جديدة (بلا سجل محادثة) + includeSystemPromptSection: true, // default: true; false omits the Heartbeat section from the system prompt + lightContext: false, // default: false; true keeps only HEARTBEAT.md from workspace bootstrap files + isolatedSession: false, // default: false; true runs each heartbeat in a fresh session (no conversation history) session: "main", to: "+15555550123", - directPolicy: "allow", // allow (الافتراضي) | block - target: "none", // الافتراضي: none | الخيارات: last | whatsapp | telegram | discord | ... + directPolicy: "allow", // allow (default) | block + target: "none", // default: none | options: last | whatsapp | telegram | discord | ... prompt: "Read HEARTBEAT.md if it exists...", ackMaxChars: 300, suppressToolErrorWarnings: false, @@ -1363,15 +1374,15 @@ harness خادم التطبيق Codex المضمّن. } ``` -- `every`: سلسلة مدة (ms/s/m/h). الافتراضي: `30m` (مصادقة مفتاح API) أو `1h` (مصادقة OAuth). عيّنها إلى `0m` للتعطيل. -- `includeSystemPromptSection`: عند تعيينها إلى false، تُحذف فقرة Heartbeat من system prompt ويُتخطى حقن `HEARTBEAT.md` في سياق bootstrap. الافتراضي: `true`. -- `suppressToolErrorWarnings`: عند تعيينه إلى true، ي suppress حمولة تحذيرات أخطاء الأدوات أثناء تشغيلات Heartbeat. -- `timeoutSeconds`: الحد الأقصى بالثواني المسموح به لدور وكيل Heartbeat قبل إيقافه. اتركه غير معيّن لاستخدام `agents.defaults.timeoutSeconds`. -- `directPolicy`: سياسة التسليم المباشر/للرسائل المباشرة. تسمح `allow` (الافتراضي) بالتسليم المباشر إلى الهدف. وتؤدي `block` إلى منع التسليم المباشر إلى الهدف وإخراج `reason=dm-blocked`. -- `lightContext`: عند تعيينه إلى true، تستخدم تشغيلات Heartbeat سياق bootstrap خفيفًا وتُبقي فقط `HEARTBEAT.md` من ملفات bootstrap الخاصة بمساحة العمل. -- `isolatedSession`: عند تعيينه إلى true، تعمل كل Heartbeat في جلسة جديدة من دون أي سجل محادثة سابق. وهو نفس نمط العزل في Cron مع `sessionTarget: "isolated"`. ويقلل تكلفة الرموز لكل Heartbeat من نحو ~100K إلى ~2-5K رمز. -- لكل وكيل: اضبط `agents.list[].heartbeat`. وعندما يعرّف أي وكيل `heartbeat`، تعمل **هؤلاء الوكلاء فقط** على تشغيل Heartbeat. -- تشغّل Heartbeat أدوار وكلاء كاملة — والفواصل الأقصر تستهلك مزيدًا من الرموز. +- `every`: سلسلة مدة (`ms`/`s`/`m`/`h`). الافتراضي: `30m` ‏(مصادقة مفتاح API) أو `1h` ‏(مصادقة OAuth). اضبطها على `0m` للتعطيل. +- `includeSystemPromptSection`: عند ضبطه على false، يحذف قسم Heartbeat من system prompt ويتخطى حقن `HEARTBEAT.md` في سياق bootstrap. الافتراضي: `true`. +- `suppressToolErrorWarnings`: عند ضبطه على true، يخفي حمولات تحذير أخطاء الأدوات أثناء تشغيلات Heartbeat. +- `timeoutSeconds`: الحد الأقصى للوقت بالثواني المسموح به لدور وكيل Heartbeat قبل إيقافه. اتركه غير محدد لاستخدام `agents.defaults.timeoutSeconds`. +- `directPolicy`: سياسة التسليم المباشر/الرسائل المباشرة. تسمح `allow` ‏(الافتراضي) بالتسليم إلى الهدف المباشر. وتمنع `block` التسليم إلى الهدف المباشر وتصدر `reason=dm-blocked`. +- `lightContext`: عند ضبطه على true، تستخدم تشغيلات Heartbeat سياق bootstrap خفيفًا وتحتفظ فقط بالملف `HEARTBEAT.md` من ملفات bootstrap الخاصة بمساحة العمل. +- `isolatedSession`: عند ضبطه على true، يعمل كل Heartbeat داخل جلسة جديدة من دون أي سجل محادثة سابق. وهو نمط العزل نفسه الخاص بـ Cron ‏`sessionTarget: "isolated"`. ويقلل تكلفة الرموز لكل Heartbeat من نحو 100 ألف إلى نحو 2–5 آلاف رمز. +- لكل وكيل: اضبط `agents.list[].heartbeat`. وعندما يعرّف أي وكيل `heartbeat`، **يعمل Heartbeat لهؤلاء الوكلاء فقط**. +- تشغّل Heartbeats أدوار وكلاء كاملة — وكلما كانت الفواصل أقصر زاد استهلاك الرموز. ### `agents.defaults.compaction` @@ -1381,14 +1392,14 @@ harness خادم التطبيق Codex المضمّن. defaults: { compaction: { mode: "safeguard", // default | safeguard - provider: "my-provider", // معرّف Plugin مزوّد Compaction مسجل (اختياري) + provider: "my-provider", // id of a registered compaction provider plugin (optional) timeoutSeconds: 900, reserveTokensFloor: 24000, identifierPolicy: "strict", // strict | off | custom - identifierInstructions: "Preserve deployment IDs, ticket IDs, and host:port pairs exactly.", // يُستخدم عندما يكون identifierPolicy=custom - postCompactionSections: ["Session Startup", "Red Lines"], // تؤدي [] إلى تعطيل إعادة الحقن - model: "openrouter/anthropic/claude-sonnet-4-6", // تجاوز اختياري للنموذج خاص بـ Compaction فقط - notifyUser: true, // أرسل إشعارًا موجزًا عند بدء Compaction (الافتراضي: false) + identifierInstructions: "Preserve deployment IDs, ticket IDs, and host:port pairs exactly.", // used when identifierPolicy=custom + postCompactionSections: ["Session Startup", "Red Lines"], // [] disables reinjection + model: "openrouter/anthropic/claude-sonnet-4-6", // optional compaction-only model override + notifyUser: true, // send a brief notice when compaction starts (default: false) memoryFlush: { enabled: true, softThresholdTokens: 6000, @@ -1401,19 +1412,19 @@ harness خادم التطبيق Codex المضمّن. } ``` -- `mode`: ‏`default` أو `safeguard` (تلخيص مجزأ للسجلات الطويلة). راجع [Compaction](/ar/concepts/compaction). -- `provider`: معرّف Plugin مزوّد Compaction مسجل. عند تعيينه، يُستدعى `summarize()` الخاص بالمزوّد بدلًا من التلخيص المضمن في LLM. ويعود إلى المضمن عند الفشل. ويؤدي تعيين مزوّد إلى فرض `mode: "safeguard"`. راجع [Compaction](/ar/concepts/compaction). -- `timeoutSeconds`: الحد الأقصى بالثواني المسموح به لعملية Compaction واحدة قبل أن يقوم OpenClaw بإيقافها. الافتراضي: `900`. -- `identifierPolicy`: ‏`strict` (الافتراضي) أو `off` أو `custom`. تضيف `strict` تلقائيًا إرشادات مضمنة للحفاظ على المعرّفات المعتمة أثناء تلخيص Compaction. -- `identifierInstructions`: نص اختياري مخصص للحفاظ على المعرّفات يُستخدم عندما يكون `identifierPolicy=custom`. -- `postCompactionSections`: أسماء أقسام H2/H3 اختيارية من AGENTS.md لإعادة حقنها بعد Compaction. القيمة الافتراضية `["Session Startup", "Red Lines"]`؛ عيّن `[]` لتعطيل إعادة الحقن. وعندما لا تكون معيّنة أو تكون معيّنة صراحةً إلى هذا الزوج الافتراضي، تُقبل أيضًا العناوين الأقدم `Every Session`/`Safety` كقيمة احتياطية قديمة. -- `model`: تجاوز اختياري `provider/model-id` لتلخيص Compaction فقط. استخدم هذا عندما يجب أن تبقي الجلسة الرئيسية نموذجًا معينًا بينما تعمل ملخصات Compaction على نموذج آخر؛ وعند عدم تعيينه، يستخدم Compaction النموذج الأساسي للجلسة. -- `notifyUser`: عند تعيينه إلى `true`، يرسل إشعارًا موجزًا إلى المستخدم عند بدء Compaction (على سبيل المثال: "Compacting context..."). وهو معطّل افتراضيًا لإبقاء Compaction صامتًا. -- `memoryFlush`: دور وكيلي صامت قبل Compaction التلقائي لتخزين الذكريات الدائمة. ويُتخطى عندما تكون مساحة العمل للقراءة فقط. +- `mode`: ‏`default` أو `safeguard` ‏(تلخيص مجزأ للسجلات الطويلة). راجع [Compaction](/ar/concepts/compaction). +- `provider`: معرّف Plugin مزوّد Compaction مسجّل. عند ضبطه، يُستدعى `summarize()` الخاص بالمزوّد بدلًا من التلخيص المضمن المعتمد على LLM. ويعود إلى المضمن عند الفشل. كما أن ضبط مزوّد يفرض `mode: "safeguard"`. راجع [Compaction](/ar/concepts/compaction). +- `timeoutSeconds`: الحد الأقصى بالثواني المسموح به لعملية Compaction واحدة قبل أن يوقفها OpenClaw. الافتراضي: `900`. +- `identifierPolicy`: ‏`strict` ‏(الافتراضي) أو `off` أو `custom`. تضيف القيمة `strict` إرشادات الاحتفاظ بالمعرّفات المعتمة المضمنة قبل تلخيص Compaction. +- `identifierInstructions`: نص مخصص اختياري للحفاظ على المعرّفات يُستخدم عندما تكون `identifierPolicy=custom`. +- `postCompactionSections`: أسماء أقسام H2/H3 اختيارية من `AGENTS.md` لإعادة حقنها بعد Compaction. القيمة الافتراضية هي `["Session Startup", "Red Lines"]`؛ اضبط `[]` لتعطيل إعادة الحقن. وعندما تكون غير مضبوطة أو مضبوطة صراحةً على ذلك الزوج الافتراضي، تُقبل أيضًا العناوين الأقدم `Every Session`/`Safety` كرجوع قديم. +- `model`: تجاوز اختياري بصيغة `provider/model-id` لتلخيص Compaction فقط. استخدمه عندما يجب أن تحتفظ الجلسة الرئيسية بنموذج معين لكن تعمل ملخصات Compaction على نموذج آخر؛ وعند عدم ضبطه، يستخدم Compaction النموذج الأساسي للجلسة. +- `notifyUser`: عندما تكون قيمته `true`، يرسل إشعارًا موجزًا إلى المستخدم عند بدء Compaction (مثل "جارٍ ضغط السياق..."). وهو معطل افتراضيًا لإبقاء Compaction صامتًا. +- `memoryFlush`: دور وكيلي صامت قبل Compaction التلقائي لتخزين الذكريات الدائمة. ويتم تخطيه عندما تكون مساحة العمل للقراءة فقط. ### `agents.defaults.contextPruning` -يقص **نتائج الأدوات القديمة** من السياق الموجود في الذاكرة قبل إرسالها إلى LLM. ولا **يعدّل** سجل الجلسة على القرص. +يقوم بتقليم **نتائج الأدوات القديمة** من السياق الموجود في الذاكرة قبل إرسالها إلى LLM. ولا **يعدّل** سجل الجلسة على القرص. ```json5 { @@ -1421,7 +1432,7 @@ harness خادم التطبيق Codex المضمّن. defaults: { contextPruning: { mode: "cache-ttl", // off | cache-ttl - ttl: "1h", // مدة (ms/s/m/h)، وحدة القياس الافتراضية: الدقائق + ttl: "1h", // duration (ms/s/m/h), default unit: minutes keepLastAssistants: 3, softTrimRatio: 0.3, hardClearRatio: 0.5, @@ -1437,25 +1448,25 @@ harness خادم التطبيق Codex المضمّن. -- يفعّل `mode: "cache-ttl"` عمليات القص. -- يتحكم `ttl` في عدد المرات التي يمكن فيها تشغيل القص مرة أخرى (بعد آخر لمسة cache). -- تقوم عملية القص أولًا باقتطاع نتائج الأدوات المتضخمة بشكل جزئي، ثم تمسح نتائج الأدوات الأقدم بالكامل إذا لزم الأمر. +- يفعّل `mode: "cache-ttl"` تمريرات التقليم. +- تتحكم `ttl` في عدد المرات التي يمكن بعدها تشغيل التقليم مجددًا (بعد آخر لمسة cache). +- يقوم التقليم أولًا باقتطاع نتائج الأدوات كبيرة الحجم اقتطاعًا مرنًا، ثم يمسح نتائج الأدوات الأقدم مسحًا صارمًا إذا لزم الأمر. -**الاقتطاع الجزئي** يحتفظ بالبداية + النهاية ويُدرج `...` في المنتصف. +**الاقتطاع المرن** يحتفظ بالبداية + النهاية ويُدرج `...` في المنتصف. -**المسح الكامل** يستبدل نتيجة الأداة بالكامل بالنص النائب. +**المسح الصارم** يستبدل نتيجة الأداة بالكامل بالعنصر النائب. ملاحظات: -- لا تُقتطع/تُمسح كتل الصور مطلقًا. -- تستند النِّسب إلى عدد الأحرف (تقريبيًا)، وليس إلى أعداد الرموز الدقيقة. -- إذا كان عدد رسائل المساعد أقل من `keepLastAssistants`، تُتخطى عملية القص. +- لا يتم أبدًا اقتطاع/مسح كتل الصور. +- النِّسب مبنية على الأحرف (تقريبية)، وليست على عدد الرموز الدقيق. +- إذا كان عدد رسائل المساعد أقل من `keepLastAssistants`، يتم تخطي التقليم. -راجع [Session Pruning](/ar/concepts/session-pruning) لتفاصيل السلوك. +راجع [Session Pruning](/ar/concepts/session-pruning) للحصول على تفاصيل السلوك. -### البث على شكل كتل +### بث الكتل ```json5 { @@ -1465,17 +1476,17 @@ harness خادم التطبيق Codex المضمّن. blockStreamingBreak: "text_end", // text_end | message_end blockStreamingChunk: { minChars: 800, maxChars: 1200 }, blockStreamingCoalesce: { idleMs: 1000 }, - humanDelay: { mode: "natural" }, // off | natural | custom (استخدم minMs/maxMs) + humanDelay: { mode: "natural" }, // off | natural | custom (use minMs/maxMs) }, }, } ``` -- تتطلب القنوات غير Telegram تعيين `*.blockStreaming: true` صراحةً لتفعيل الردود على شكل كتل. -- تجاوزات القنوات: `channels..blockStreamingCoalesce` (ومتغيرات كل حساب). تستخدم Signal/Slack/Discord/Google Chat افتراضيًا `minChars: 1500`. -- `humanDelay`: توقف عشوائي بين الردود على شكل كتل. تعني `natural` = ‏800–2500ms. تجاوز لكل وكيل: `agents.list[].humanDelay`. +- تتطلب القنوات غير Telegram ضبط `*.blockStreaming: true` صراحةً لتمكين ردود الكتل. +- تجاوزات القنوات: `channels..blockStreamingCoalesce` ‏(ومتغيراتها لكل حساب). وتستخدم Signal/Slack/Discord/Google Chat افتراضيًا `minChars: 1500`. +- `humanDelay`: توقف عشوائي بين ردود الكتل. تعني `natural` ‏800–2500ms. التجاوز لكل وكيل: `agents.list[].humanDelay`. -راجع [Streaming](/ar/concepts/streaming) لمعرفة تفاصيل السلوك والتقسيم. +راجع [Streaming](/ar/concepts/streaming) للحصول على تفاصيل السلوك + التجزئة. ### مؤشرات الكتابة @@ -1490,8 +1501,8 @@ harness خادم التطبيق Codex المضمّن. } ``` -- القيم الافتراضية: `instant` للدردشات المباشرة/الإشارات، و`message` للدردشات الجماعية غير المشار فيها. -- تجاوزات لكل جلسة: `session.typingMode` و`session.typingIntervalSeconds`. +- القيم الافتراضية: `instant` للدردشات المباشرة/الإشارات، و`message` لدردشات المجموعات غير المشار إليها. +- تجاوزات لكل جلسة: `session.typingMode`، `session.typingIntervalSeconds`. راجع [Typing Indicators](/ar/concepts/typing-indicators). @@ -1499,7 +1510,7 @@ harness خادم التطبيق Codex المضمّن. ### `agents.defaults.sandbox` -إعداد اختياري لـ sandbox للوكيل المضمن. راجع [Sandboxing](/ar/gateway/sandboxing) للحصول على الدليل الكامل. +آلية sandboxing اختيارية للوكيل المضمن. راجع [Sandboxing](/ar/gateway/sandboxing) للحصول على الدليل الكامل. ```json5 { @@ -1545,7 +1556,7 @@ harness خادم التطبيق Codex المضمّن. identityFile: "~/.ssh/id_ed25519", certificateFile: "~/.ssh/id_ed25519-cert.pub", knownHostsFile: "~/.ssh/known_hosts", - // كما أن SecretRefs / المحتويات المضمنة مدعومة أيضًا: + // SecretRefs / inline contents also supported: // identityData: { source: "env", provider: "default", id: "SSH_IDENTITY" }, // certificateData: { source: "env", provider: "default", id: "SSH_CERTIFICATE" }, // knownHostsData: { source: "env", provider: "default", id: "SSH_KNOWN_HOSTS" }, @@ -1599,41 +1610,41 @@ harness خادم التطبيق Codex المضمّن. **الواجهة الخلفية:** - `docker`: وقت تشغيل Docker محلي (الافتراضي) -- `ssh`: وقت تشغيل بعيد عام مدعوم بواسطة SSH +- `ssh`: وقت تشغيل بعيد عام مدعوم عبر SSH - `openshell`: وقت تشغيل OpenShell عند اختيار `backend: "openshell"`، تنتقل الإعدادات الخاصة بوقت التشغيل إلى `plugins.entries.openshell.config`. -**إعداد SSH backend:** +**إعداد الواجهة الخلفية SSH:** - `target`: هدف SSH بصيغة `user@host[:port]` - `command`: أمر عميل SSH ‏(الافتراضي: `ssh`) -- `workspaceRoot`: جذر بعيد مطلق يُستخدم لمساحات العمل لكل نطاق -- `identityFile` / `certificateFile` / `knownHostsFile`: ملفات محلية موجودة مسبقًا تُمرَّر إلى OpenSSH -- `identityData` / `certificateData` / `knownHostsData`: محتويات مضمنة أو SecretRefs يقوم OpenClaw بتحويلها إلى ملفات مؤقتة أثناء التشغيل -- `strictHostKeyChecking` / `updateHostKeys`: مفاتيح سياسة مفاتيح المستضيف في OpenSSH +- `workspaceRoot`: جذر بعيد مطلق يُستخدم لمساحات العمل حسب النطاق +- `identityFile` / `certificateFile` / `knownHostsFile`: ملفات محلية موجودة تُمرر إلى OpenSSH +- `identityData` / `certificateData` / `knownHostsData`: محتويات مضمّنة أو SecretRefs يقوم OpenClaw بتحويلها إلى ملفات مؤقتة وقت التشغيل +- `strictHostKeyChecking` / `updateHostKeys`: مفاتيح سياسة مضيف OpenSSH -**أولوية مصادقة SSH:** +**أسبقية مصادقة SSH:** -- `identityData` يتغلب على `identityFile` -- `certificateData` يتغلب على `certificateFile` -- `knownHostsData` يتغلب على `knownHostsFile` -- تُحل قيم `*Data` المدعومة بواسطة SecretRef من اللقطة النشطة لوقت تشغيل الأسرار قبل بدء جلسة sandbox +- تتغلب `identityData` على `identityFile` +- تتغلب `certificateData` على `certificateFile` +- تتغلب `knownHostsData` على `knownHostsFile` +- تُحل قيم `*Data` المدعومة بـ SecretRef من لقطة secrets النشطة لوقت التشغيل قبل بدء جلسة sandbox -**سلوك SSH backend:** +**سلوك الواجهة الخلفية SSH:** - يزرع مساحة العمل البعيدة مرة واحدة بعد الإنشاء أو إعادة الإنشاء -- ثم يُبقي مساحة عمل SSH البعيدة هي القانونية -- ويوجّه `exec` وأدوات الملفات ومسارات الوسائط عبر SSH -- ولا يزامن التغييرات البعيدة إلى المستضيف تلقائيًا -- ولا يدعم حاويات متصفح sandbox +- ثم يحافظ على مساحة عمل SSH البعيدة باعتبارها المصدر القياسي +- يوجّه `exec` وأدوات الملفات ومسارات الوسائط عبر SSH +- لا يزامن التغييرات البعيدة مرة أخرى إلى المضيف تلقائيًا +- لا يدعم حاويات متصفح sandbox -**وصول مساحة العمل:** +**الوصول إلى مساحة العمل:** -- `none`: مساحة عمل sandbox لكل نطاق تحت `~/.openclaw/sandboxes` -- `ro`: مساحة عمل sandbox عند `/workspace`، مع تركيب مساحة عمل الوكيل للقراءة فقط عند `/agent` -- `rw`: تركيب مساحة عمل الوكيل للقراءة/الكتابة عند `/workspace` +- `none`: مساحة عمل sandbox لكل نطاق ضمن `~/.openclaw/sandboxes` +- `ro`: مساحة عمل sandbox عند `/workspace`، ومساحة عمل الوكيل مُثبتة للقراءة فقط عند `/agent` +- `rw`: مساحة عمل الوكيل مُثبتة للقراءة والكتابة عند `/workspace` **النطاق:** @@ -1654,10 +1665,10 @@ harness خادم التطبيق Codex المضمّن. from: "openclaw", remoteWorkspaceDir: "/sandbox", remoteAgentWorkspaceDir: "/agent", - gateway: "lab", // اختياري - gatewayEndpoint: "https://lab.example", // اختياري - policy: "strict", // معرّف سياسة OpenShell اختياري - providers: ["openai"], // اختياري + gateway: "lab", // optional + gatewayEndpoint: "https://lab.example", // optional + policy: "strict", // optional OpenShell policy id + providers: ["openai"], // optional autoProviders: true, timeoutSeconds: 120, }, @@ -1669,30 +1680,30 @@ harness خادم التطبيق Codex المضمّن. **وضع OpenShell:** -- `mirror`: زرع البعيد من المحلي قبل التنفيذ، ثم المزامنة عكسيًا بعد التنفيذ؛ وتبقى مساحة العمل المحلية هي القانونية -- `remote`: زرع البعيد مرة واحدة عند إنشاء sandbox، ثم إبقاء مساحة العمل البعيدة هي القانونية +- `mirror`: زرع البعيد من المحلي قبل exec، ثم المزامنة العكسية بعد exec؛ وتظل مساحة العمل المحلية هي المصدر القياسي +- `remote`: زرع البعيد مرة واحدة عند إنشاء sandbox، ثم الحفاظ على مساحة العمل البعيدة باعتبارها المصدر القياسي -في وضع `remote`، لا تُزامَن تعديلات المستضيف المحلية التي تُجرى خارج OpenClaw إلى sandbox تلقائيًا بعد خطوة الزرع. -تكون وسيلة النقل عبر SSH إلى sandbox الخاص بـ OpenShell، لكن Plugin يملك دورة حياة sandbox والمزامنة العكسية الاختيارية. +في وضع `remote`، لا تُزامن التعديلات المحلية على المضيف التي تُجرى خارج OpenClaw إلى sandbox تلقائيًا بعد خطوة الزرع. +يكون النقل عبر SSH إلى OpenShell sandbox، لكن Plugin يملك دورة حياة sandbox والمزامنة الانعكاسية الاختيارية. -**`setupCommand`** يعمل مرة واحدة بعد إنشاء الحاوية (عبر `sh -lc`). ويحتاج إلى خروج شبكي، وجذر قابل للكتابة، ومستخدم root. +يعمل **`setupCommand`** مرة واحدة بعد إنشاء الحاوية (عبر `sh -lc`). ويتطلب خروجًا شبكيًا، وجذرًا قابلًا للكتابة، ومستخدم root. -**تستخدم الحاويات افتراضيًا `network: "none"`** — عيّنها إلى `"bridge"` (أو شبكة bridge مخصصة) إذا كان الوكيل يحتاج إلى وصول صادر. -تكون `"host"` محظورة. وتكون `"container:"` محظورة افتراضيًا ما لم تعيّن صراحةً +**تكون الحاويات افتراضيًا على `network: "none"`** — اضبطها على `"bridge"` (أو شبكة bridge مخصصة) إذا كان الوكيل يحتاج إلى وصول صادر. +ويُحظر `"host"`. كما يُحظر `"container:"` افتراضيًا ما لم تضبط صراحةً `sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true` (وضع طارئ). -**تُجهَّز المرفقات الواردة** ضمن `media/inbound/*` في مساحة العمل النشطة. +تُجهّز **المرفقات الواردة** داخل `media/inbound/*` في مساحة العمل النشطة. -**`docker.binds`** يركّب أدلة إضافية من المستضيف؛ ويتم دمج الروابط العامة وتلك الخاصة بكل وكيل. +يقوم **`docker.binds`** بتركيب أدلة مضيف إضافية؛ وتُدمج عمليات التركيب العامة وتلك الخاصة بكل وكيل. -**المتصفح داخل sandbox** (`sandbox.browser.enabled`): ‏Chromium + CDP داخل حاوية. يتم حقن عنوان noVNC URL في system prompt. ولا يتطلب `browser.enabled` في `openclaw.json`. +**متصفح sandbox** ‏(`sandbox.browser.enabled`): Chromium + CDP داخل حاوية. يتم حقن عنوان URL الخاص بـ noVNC في system prompt. ولا يتطلب `browser.enabled` في `openclaw.json`. يستخدم وصول المراقبة عبر noVNC مصادقة VNC افتراضيًا، ويصدر OpenClaw عنوان URL برمز مميز قصير العمر (بدلًا من كشف كلمة المرور في عنوان URL المشترك). -- يؤدي `allowHostControl: false` (الافتراضي) إلى حظر استهداف جلسات sandbox للمستعرض الموجود على المستضيف. -- تكون القيمة الافتراضية لـ `network` هي `openclaw-sandbox-browser` (شبكة bridge مخصصة). اضبطها على `bridge` فقط عندما تريد صراحةً اتصال bridge عامًا. -- يقيّد `cdpSourceRange` اختياريًا حركة CDP الواردة عند حافة الحاوية إلى نطاق CIDR ‏(على سبيل المثال `172.21.0.1/32`). -- يقوم `sandbox.browser.binds` بتركيب أدلة إضافية من المستضيف داخل حاوية متصفح sandbox فقط. وعند تعيينه (بما في ذلك `[]`)، فإنه يستبدل `docker.binds` لحاوية المتصفح. -- تُعرَّف افتراضيات التشغيل في `scripts/sandbox-browser-entrypoint.sh` وتُضبط لمستضيفي الحاويات: +- يؤدي `allowHostControl: false` ‏(الافتراضي) إلى حظر استهداف جلسات sandbox للمضيف المحلي. +- تكون القيمة الافتراضية لـ `network` هي `openclaw-sandbox-browser` ‏(شبكة bridge مخصصة). اضبطها على `bridge` فقط عندما تريد صراحةً اتصال bridge عامًا. +- يقيّد `cdpSourceRange` اختياريًا دخول CDP عند حافة الحاوية إلى نطاق CIDR (مثل `172.21.0.1/32`). +- يقوم `sandbox.browser.binds` بتركيب أدلة مضيف إضافية داخل حاوية متصفح sandbox فقط. وعند ضبطه (بما في ذلك `[]`) فإنه يستبدل `docker.binds` بالنسبة إلى حاوية المتصفح. +- تُعرَّف القيم الافتراضية للتشغيل في `scripts/sandbox-browser-entrypoint.sh` وتُضبط لتناسب مضيفات الحاويات: - `--remote-debugging-address=127.0.0.1` - `--remote-debugging-port=` - `--user-data-dir=${HOME}/.chrome` @@ -1712,28 +1723,28 @@ harness خادم التطبيق Codex المضمّن. - `--disable-extensions` (مفعّل افتراضيًا) - تكون `--disable-3d-apis` و`--disable-software-rasterizer` و`--disable-gpu` مفعّلة افتراضيًا، ويمكن تعطيلها عبر - `OPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0` إذا كان استخدام WebGL/‏3D يتطلب ذلك. - - يعيد `OPENCLAW_BROWSER_DISABLE_EXTENSIONS=0` تفعيل الإضافات إذا كان سير عملك + `OPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0` إذا كان استخدام WebGL/ثلاثي الأبعاد يتطلب ذلك. + - يعيد `OPENCLAW_BROWSER_DISABLE_EXTENSIONS=0` تفعيل الإضافات إذا كان سير العمل يعتمد عليها. - - يمكن تغيير `--renderer-process-limit=2` عبر - `OPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=`؛ اضبطه إلى `0` لاستخدام + - يمكن تغيير `--renderer-process-limit=2` باستخدام + `OPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=`؛ اضبطه على `0` لاستخدام حد العمليات الافتراضي في Chromium. - بالإضافة إلى `--no-sandbox` و`--disable-setuid-sandbox` عندما يكون `noSandbox` مفعّلًا. - تمثل القيم الافتراضية خط الأساس لصورة الحاوية؛ استخدم صورة متصفح مخصصة مع - entrypoint مخصص لتغيير افتراضيات الحاوية. + entrypoint مخصص لتغيير القيم الافتراضية للحاوية. -يقتصر عزل المتصفح و`sandbox.docker.binds` على Docker فقط. +يقتصر Browser sandboxing و`sandbox.docker.binds` على Docker فقط. أنشئ الصور: ```bash -scripts/sandbox-setup.sh # صورة sandbox الرئيسية -scripts/sandbox-browser-setup.sh # صورة المتصفح الاختيارية +scripts/sandbox-setup.sh # main sandbox image +scripts/sandbox-browser-setup.sh # optional browser image ``` -### `agents.list` (تجاوزات لكل وكيل) +### `agents.list` ‏(تجاوزات لكل وكيل) ```json5 { @@ -1745,13 +1756,13 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري name: "Main Agent", workspace: "~/.openclaw/workspace", agentDir: "~/.openclaw/agents/main/agent", - model: "anthropic/claude-opus-4-6", // أو { primary, fallbacks } - thinkingDefault: "high", // تجاوز مستوى التفكير الافتراضي لكل وكيل - reasoningDefault: "on", // تجاوز إظهار الاستدلال الافتراضي لكل وكيل - fastModeDefault: false, // تجاوز الوضع السريع الافتراضي لكل وكيل + model: "anthropic/claude-opus-4-6", // or { primary, fallbacks } + thinkingDefault: "high", // per-agent thinking level override + reasoningDefault: "on", // per-agent reasoning visibility override + fastModeDefault: false, // per-agent fast mode override embeddedHarness: { runtime: "auto", fallback: "pi" }, - params: { cacheRetention: "none" }, // يتجاوز قيم defaults.models.params المطابقة حسب المفتاح - skills: ["docs-search"], // يستبدل agents.defaults.skills عند التعيين + params: { cacheRetention: "none" }, // overrides matching defaults.models params by key + skills: ["docs-search"], // replaces agents.defaults.skills when set identity: { name: "Samantha", theme: "helpful sloth", @@ -1783,24 +1794,24 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري ``` - `id`: معرّف وكيل ثابت (مطلوب). -- `default`: عند تعيين عدة قيم، يفوز الأول (مع تسجيل تحذير). وإذا لم تُعيَّن أي قيمة، يكون أول إدخال في القائمة هو الافتراضي. -- `model`: يتجاوز نموذج السلسلة القيمة `primary` فقط؛ أما نموذج الكائن `{ primary, fallbacks }` فيتجاوز كليهما (`[]` يعطّل القيم الاحتياطية العامة). وتظل مهام Cron التي تتجاوز `primary` فقط ترث القيم الاحتياطية الافتراضية ما لم تعيّن `fallbacks: []`. -- `params`: معاملات البث لكل وكيل، وتُدمج فوق إدخال النموذج المحدد في `agents.defaults.models`. استخدم هذا لتجاوزات خاصة بالوكيل مثل `cacheRetention` أو `temperature` أو `maxTokens` من دون تكرار فهرس النماذج بالكامل. -- `skills`: قائمة سماح اختيارية لـ Skills لكل وكيل. إذا حُذفت، يرث الوكيل `agents.defaults.skills` عند تعيينها؛ وتستبدل القائمة الصريحة القيم الافتراضية بدلًا من دمجها، وتعني `[]` عدم وجود Skills. -- `thinkingDefault`: مستوى التفكير الافتراضي الاختياري لكل وكيل (`off | minimal | low | medium | high | xhigh | adaptive`). ويتجاوز `agents.defaults.thinkingDefault` لهذا الوكيل عندما لا يكون هناك تجاوز لكل رسالة أو جلسة. -- `reasoningDefault`: إظهار الاستدلال الافتراضي الاختياري لكل وكيل (`on | off | stream`). ويُطبَّق عندما لا يكون هناك تجاوز للاستدلال لكل رسالة أو جلسة. -- `fastModeDefault`: القيمة الافتراضية الاختيارية لكل وكيل للوضع السريع (`true | false`). وتُطبَّق عندما لا يكون هناك تجاوز للوضع السريع لكل رسالة أو جلسة. -- `embeddedHarness`: تجاوز اختياري لسياسة harness منخفضة المستوى لكل وكيل. استخدم `{ runtime: "codex", fallback: "none" }` لجعل أحد الوكلاء يعمل بـ Codex فقط بينما يحتفظ الآخرون بالقيمة الاحتياطية الافتراضية PI. -- `runtime`: واصف وقت تشغيل اختياري لكل وكيل. استخدم `type: "acp"` مع القيم الافتراضية `runtime.acp` ‏(`agent` و`backend` و`mode` و`cwd`) عندما يجب أن يستخدم الوكيل افتراضيًا جلسات ACP harness. -- `identity.avatar`: مسار نسبي إلى مساحة العمل، أو عنوان URL من نوع `http(s)`، أو معرّف URI من نوع `data:`. -- تستمد `identity` القيم الافتراضية: `ackReaction` من `emoji`، و`mentionPatterns` من `name`/`emoji`. -- `subagents.allowAgents`: قائمة سماح لمعرّفات الوكلاء لـ `sessions_spawn` ‏(`["*"]` = أي وكيل؛ الافتراضي: الوكيل نفسه فقط). -- حماية وراثة sandbox: إذا كانت جلسة الطالب داخل sandbox، فإن `sessions_spawn` يرفض الأهداف التي ستعمل خارج sandbox. -- `subagents.requireAgentId`: عند تعيينه إلى true، يحظر استدعاءات `sessions_spawn` التي تحذف `agentId` (يفرض اختيار ملف تعريف صريح؛ الافتراضي: false). +- `default`: عند ضبط أكثر من واحد، يفوز الأول (مع تسجيل تحذير). وإذا لم يُضبط أي منها، يكون أول إدخال في القائمة هو الافتراضي. +- `model`: يتجاوز الشكل النصي `primary` فقط؛ بينما يتجاوز شكل الكائن `{ primary, fallbacks }` كليهما (`[]` يعطّل الاحتياطيات العامة). وتظل وظائف Cron التي تتجاوز `primary` فقط ترث الاحتياطيات الافتراضية ما لم تضبط `fallbacks: []`. +- `params`: معاملات بث لكل وكيل تُدمج فوق إدخال النموذج المحدد في `agents.defaults.models`. استخدم هذا للتجاوزات الخاصة بالوكيل مثل `cacheRetention` أو `temperature` أو `maxTokens` من دون تكرار فهرس النماذج بالكامل. +- `skills`: قائمة سماح Skills اختيارية لكل وكيل. عند حذفها، يرث الوكيل `agents.defaults.skills` إذا كانت مضبوطة؛ وتحل القائمة الصريحة محل القيم الافتراضية بدلًا من دمجها، بينما تعني `[]` عدم وجود Skills. +- `thinkingDefault`: قيمة افتراضية اختيارية لمستوى التفكير لكل وكيل (`off | minimal | low | medium | high | xhigh | adaptive`). وتتجاوز `agents.defaults.thinkingDefault` لهذا الوكيل عندما لا يكون هناك تجاوز لكل رسالة أو جلسة. +- `reasoningDefault`: قيمة افتراضية اختيارية لعرض reasoning لكل وكيل (`on | off | stream`). وتُطبَّق عندما لا يكون هناك تجاوز reasoning لكل رسالة أو جلسة. +- `fastModeDefault`: قيمة افتراضية اختيارية للوضع السريع لكل وكيل (`true | false`). وتُطبَّق عندما لا يكون هناك تجاوز للوضع السريع لكل رسالة أو جلسة. +- `embeddedHarness`: تجاوز اختياري لسياسة harness منخفضة المستوى لكل وكيل. استخدم `{ runtime: "codex", fallback: "none" }` لجعل وكيل واحد خاصًا بـ Codex فقط بينما يحتفظ الوكلاء الآخرون بالرجوع الافتراضي إلى PI. +- `runtime`: واصف وقت تشغيل اختياري لكل وكيل. استخدم `type: "acp"` مع القيم الافتراضية في `runtime.acp` ‏(`agent` و`backend` و`mode` و`cwd`) عندما يجب أن يستخدم الوكيل جلسات ACP harness افتراضيًا. +- `identity.avatar`: مسار نسبي إلى مساحة العمل، أو عنوان URL من نوع `http(s)`، أو URI من نوع `data:`. +- يستمد `identity` قيمًا افتراضية: `ackReaction` من `emoji`، و`mentionPatterns` من `name`/`emoji`. +- `subagents.allowAgents`: قائمة سماح لمعرّفات الوكلاء لأجل `sessions_spawn` ‏(`["*"]` = أي وكيل؛ الافتراضي: الوكيل نفسه فقط). +- حاجز وراثة sandbox: إذا كانت جلسة الطالب ضمن sandbox، فإن `sessions_spawn` يرفض الأهداف التي ستعمل من دون sandbox. +- `subagents.requireAgentId`: عندما تكون القيمة true، يحظر استدعاءات `sessions_spawn` التي تحذف `agentId` (يفرض اختيار ملف تعريف صريح؛ الافتراضي: false). --- -## توجيه الوكلاء المتعددين +## التوجيه متعدد الوكلاء شغّل عدة وكلاء معزولين داخل Gateway واحد. راجع [Multi-Agent](/ar/concepts/multi-agent). @@ -1819,27 +1830,27 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري } ``` -### حقول المطابقة في Binding +### حقول مطابقة الارتباط -- `type` (اختياري): `route` للتوجيه العادي (وعند غياب النوع تكون القيمة الافتراضية route)، و`acp` لارتباطات المحادثات الدائمة الخاصة بـ ACP. -- `match.channel` (مطلوب) -- `match.accountId` (اختياري؛ `*` = أي حساب؛ والحذف = الحساب الافتراضي) -- `match.peer` (اختياري؛ `{ kind: direct|group|channel, id }`) -- `match.guildId` / `match.teamId` (اختياري؛ خاص بالقناة) -- `acp` (اختياري؛ فقط لإدخالات `type: "acp"`): ‏`{ mode, label, cwd, backend }` +- `type` ‏(اختياري): `route` للتوجيه العادي (النوع المفقود يعود افتراضيًا إلى route)، أو `acp` لارتباطات محادثات ACP الدائمة. +- `match.channel` ‏(مطلوب) +- `match.accountId` ‏(اختياري؛ `*` = أي حساب؛ المحذوف = الحساب الافتراضي) +- `match.peer` ‏(اختياري؛ `{ kind: direct|group|channel, id }`) +- `match.guildId` / `match.teamId` ‏(اختياري؛ خاص بالقناة) +- `acp` ‏(اختياري؛ فقط لـ `type: "acp"`): ‏`{ mode, label, cwd, backend }` **ترتيب المطابقة الحتمي:** 1. `match.peer` 2. `match.guildId` 3. `match.teamId` -4. `match.accountId` (مطابقة تامة، بلا peer/guild/team) -5. `match.accountId: "*"` (على مستوى القناة) +4. `match.accountId` ‏(مطابقة تامة، بلا peer/guild/team) +5. `match.accountId: "*"` ‏(على مستوى القناة) 6. الوكيل الافتراضي -داخل كل مستوى، يفوز أول إدخال مطابق في `bindings`. +ضمن كل طبقة، يفوز أول إدخال مطابق في `bindings`. -بالنسبة إلى إدخالات `type: "acp"`، يحل OpenClaw بالاعتماد على هوية المحادثة الدقيقة (`match.channel` + الحساب + `match.peer.id`) ولا يستخدم ترتيب مستويات route binding المذكور أعلاه. +وبالنسبة إلى الإدخالات من النوع `type: "acp"`، يحل OpenClaw المطابقة حسب هوية المحادثة الدقيقة (`match.channel` + الحساب + `match.peer.id`) ولا يستخدم ترتيب طبقات route أعلاه. ### ملفات الوصول لكل وكيل @@ -1936,7 +1947,7 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري -راجع [Multi-Agent Sandbox & Tools](/ar/tools/multi-agent-sandbox-tools) لمعرفة تفاصيل الأولوية. +راجع [Multi-Agent Sandbox & Tools](/ar/tools/multi-agent-sandbox-tools) للحصول على تفاصيل الأسبقية. --- @@ -1962,22 +1973,22 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري }, resetTriggers: ["/new", "/reset"], store: "~/.openclaw/agents/{agentId}/sessions/sessions.json", - parentForkMaxTokens: 100000, // تخطَّ fork السلسلة الأم فوق هذا العدد من الرموز (0 للتعطيل) + parentForkMaxTokens: 100000, // skip parent-thread fork above this token count (0 disables) maintenance: { mode: "warn", // warn | enforce pruneAfter: "30d", maxEntries: 500, rotateBytes: "10mb", - resetArchiveRetention: "30d", // مدة أو false - maxDiskBytes: "500mb", // ميزانية قصوى صلبة اختيارية - highWaterBytes: "400mb", // هدف تنظيف اختياري + resetArchiveRetention: "30d", // duration or false + maxDiskBytes: "500mb", // optional hard budget + highWaterBytes: "400mb", // optional cleanup target }, threadBindings: { enabled: true, - idleHours: 24, // القيمة الافتراضية لإلغاء التركيز التلقائي بعد عدم النشاط، بالساعات (`0` للتعطيل) - maxAgeHours: 0, // القيمة الافتراضية للحد الأقصى الصارم للعمر، بالساعات (`0` للتعطيل) + idleHours: 24, // default inactivity auto-unfocus in hours (`0` disables) + maxAgeHours: 0, // default hard max age in hours (`0` disables) }, - mainKey: "main", // قديم (يستخدم وقت التشغيل دائمًا "main") + mainKey: "main", // legacy (runtime always uses "main") agentToAgent: { maxPingPongTurns: 5 }, sendPolicy: { rules: [{ action: "deny", match: { channel: "discord", chatType: "group" } }], @@ -1989,35 +2000,35 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري -- **`scope`**: استراتيجية تجميع الجلسات الأساسية لسياقات الدردشة الجماعية. - - `per-sender` (الافتراضي): يحصل كل مرسل على جلسة معزولة ضمن سياق القناة. - - `global`: يشارك جميع المشاركين في سياق القناة جلسة واحدة (استخدمه فقط عندما يكون المقصود سياقًا مشتركًا). +- **`scope`**: استراتيجية تجميع الجلسات الأساسية لسياقات دردشات المجموعات. + - `per-sender` ‏(الافتراضي): يحصل كل مرسل على جلسة معزولة ضمن سياق القناة. + - `global`: يشترك جميع المشاركين في سياق القناة في جلسة واحدة (استخدمه فقط عندما يكون السياق المشترك مقصودًا). - **`dmScope`**: كيفية تجميع الرسائل المباشرة. - `main`: تشترك جميع الرسائل المباشرة في الجلسة الرئيسية. - - `per-peer`: العزل حسب معرّف المرسل عبر القنوات. - - `per-channel-peer`: العزل لكل قناة + مرسل (موصى به لصناديق الوارد متعددة المستخدمين). - - `per-account-channel-peer`: العزل لكل حساب + قناة + مرسل (موصى به لتعدد الحسابات). -- **`identityLinks`**: يربط المعرّفات القانونية بالنظراء ذوي بادئة المزوّد لمشاركة الجلسات عبر القنوات. -- **`reset`**: سياسة إعادة التعيين الأساسية. يعيد `daily` التعيين عند `atHour` بالتوقيت المحلي؛ ويعيد `idle` التعيين بعد `idleMinutes`. وعند ضبط كليهما، يفوز الذي تنتهي مدته أولًا. -- **`resetByType`**: تجاوزات حسب النوع (`direct` و`group` و`thread`). وتُقبل `dm` القديمة كاسم بديل لـ `direct`. -- **`parentForkMaxTokens`**: الحد الأقصى لـ `totalTokens` المسموح به في الجلسة الأم عند إنشاء جلسة سلسلة متفرعة (الافتراضي `100000`). - - إذا كانت قيمة `totalTokens` في الجلسة الأم أعلى من هذا الحد، يبدأ OpenClaw جلسة سلسلة جديدة بدلًا من وراثة سجل الجلسة الأم. - - عيّن القيمة `0` لتعطيل هذه الحماية والسماح دائمًا بالتفرع من الجلسة الأم. -- **`mainKey`**: حقل قديم. يستخدم وقت التشغيل دائمًا `"main"` كحاوية الدردشة المباشرة الرئيسية. -- **`agentToAgent.maxPingPongTurns`**: الحد الأقصى لعدد أدوار الرد المتبادل بين الوكلاء أثناء تبادلات وكيل إلى وكيل (عدد صحيح، النطاق: `0`–`5`). تؤدي `0` إلى تعطيل تسلسل ping-pong. -- **`sendPolicy`**: المطابقة حسب `channel`، و`chatType` ‏(`direct|group|channel`، مع الاسم البديل القديم `dm`)، أو `keyPrefix`، أو `rawKeyPrefix`. يفوز أول رفض. -- **`maintenance`**: عناصر التحكم في تنظيف مخزن الجلسات والاحتفاظ بها. - - `mode`: يؤدي `warn` إلى إصدار تحذيرات فقط؛ ويطبق `enforce` التنظيف. + - `per-peer`: عزل حسب معرّف المرسل عبر القنوات. + - `per-channel-peer`: عزل لكل قناة + مرسل (موصى به لصناديق الوارد متعددة المستخدمين). + - `per-account-channel-peer`: عزل لكل حساب + قناة + مرسل (موصى به لتعدد الحسابات). +- **`identityLinks`**: تعيين المعرّفات القياسية إلى أقران مسبوقين بالمزوّد لمشاركة الجلسات عبر القنوات. +- **`reset`**: سياسة إعادة التعيين الأساسية. يعيد `daily` التعيين عند `atHour` حسب التوقيت المحلي؛ ويعيد `idle` التعيين بعد `idleMinutes`. وعندما يكون الاثنان مضبوطيْن، يفوز الذي تنتهي صلاحيته أولًا. +- **`resetByType`**: تجاوزات لكل نوع (`direct` و`group` و`thread`). ويُقبل المفتاح القديم `dm` كاسم مستعار لـ `direct`. +- **`parentForkMaxTokens`**: الحد الأقصى لقيمة `totalTokens` في الجلسة الأصلية المسموح به عند إنشاء جلسة خيط متفرعة (الافتراضي `100000`). + - إذا كانت قيمة `totalTokens` في الأصل أعلى من هذا الحد، يبدأ OpenClaw جلسة خيط جديدة بدلًا من وراثة سجل المحادثة من الأصل. + - اضبطه على `0` لتعطيل هذا الحاجز والسماح دائمًا بالتفرع من الأصل. +- **`mainKey`**: حقل قديم. يستخدم وقت التشغيل دائمًا `"main"` لدلو الدردشة المباشرة الرئيسي. +- **`agentToAgent.maxPingPongTurns`**: الحد الأقصى لأدوار الرد المتبادل بين الوكلاء أثناء تبادلات وكيل-إلى-وكيل (عدد صحيح، النطاق: `0`–`5`). وتؤدي القيمة `0` إلى تعطيل تسلسل ping-pong. +- **`sendPolicy`**: المطابقة حسب `channel` أو `chatType` ‏(`direct|group|channel`، مع الاسم المستعار القديم `dm`) أو `keyPrefix` أو `rawKeyPrefix`. وأول قاعدة منع تفوز. +- **`maintenance`**: عناصر التحكم في تنظيف مخزن الجلسات + الاحتفاظ. + - `mode`: تؤدي `warn` إلى إصدار تحذيرات فقط؛ بينما تطبق `enforce` التنظيف. - `pruneAfter`: حد العمر للإدخالات القديمة (الافتراضي `30d`). - - `maxEntries`: الحد الأقصى لعدد الإدخالات في `sessions.json` (الافتراضي `500`). + - `maxEntries`: الحد الأقصى لعدد الإدخالات في `sessions.json` ‏(الافتراضي `500`). - `rotateBytes`: تدوير `sessions.json` عندما يتجاوز هذا الحجم (الافتراضي `10mb`). - - `resetArchiveRetention`: مدة الاحتفاظ بأرشيفات النصوص `*.reset.`. وتكون افتراضيًا مساوية لـ `pruneAfter`؛ اضبطها على `false` للتعطيل. - - `maxDiskBytes`: ميزانية قرص اختيارية لدليل الجلسات. في وضع `warn` تسجَّل تحذيرات؛ وفي وضع `enforce` تُزال أقدم الملفات/الجلسات أولًا. + - `resetArchiveRetention`: مدة الاحتفاظ بأرشيفات النصوص `*.reset.`. وتعود افتراضيًا إلى `pruneAfter`؛ اضبطها على `false` للتعطيل. + - `maxDiskBytes`: ميزانية قرص اختيارية لدليل الجلسات. في وضع `warn` تسجل تحذيرات؛ وفي وضع `enforce` تزيل أقدم العناصر/الجلسات أولًا. - `highWaterBytes`: هدف اختياري بعد تنظيف الميزانية. ويكون افتراضيًا `80%` من `maxDiskBytes`. -- **`threadBindings`**: القيم الافتراضية العامة لميزات الجلسات المرتبطة بالسلاسل. - - `enabled`: مفتاح افتراضي رئيسي (يمكن للمزوّدين تجاوزه؛ يستخدم Discord القيمة `channels.discord.threadBindings.enabled`) - - `idleHours`: القيمة الافتراضية لإلغاء التركيز التلقائي بعد عدم النشاط، بالساعات (`0` للتعطيل؛ ويمكن للمزوّدين تجاوزها) - - `maxAgeHours`: القيمة الافتراضية للحد الأقصى الصارم للعمر، بالساعات (`0` للتعطيل؛ ويمكن للمزوّدين تجاوزها) +- **`threadBindings`**: القيم الافتراضية العامة لميزات الجلسات المرتبطة بالخيوط. + - `enabled`: مفتاح افتراضي رئيسي (يمكن للمزوّدين تجاوزه؛ ويستخدم Discord القيمة `channels.discord.threadBindings.enabled`) + - `idleHours`: القيمة الافتراضية لإلغاء التركيز التلقائي بسبب عدم النشاط بالساعات (`0` يعطّل ذلك؛ ويمكن للمزوّدين تجاوزه) + - `maxAgeHours`: القيمة الافتراضية للحد الأقصى الصارم للعمر بالساعات (`0` يعطّل ذلك؛ ويمكن للمزوّدين تجاوزه) @@ -2028,7 +2039,7 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري ```json5 { messages: { - responsePrefix: "🦞", // أو "auto" + responsePrefix: "🦞", // or "auto" ackReaction: "👀", ackReactionScope: "group-mentions", // group-mentions | group-all | direct | all removeAckAfterReply: false, @@ -2043,7 +2054,7 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري }, }, inbound: { - debounceMs: 2000, // 0 للتعطيل + debounceMs: 2000, // 0 disables byChannel: { whatsapp: 5000, slack: 1500, @@ -2053,40 +2064,40 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري } ``` -### بادئة الاستجابة +### بادئة الرد -تجاوزات لكل قناة/حساب: `channels..responsePrefix` و`channels..accounts..responsePrefix`. +التجاوزات لكل قناة/حساب: `channels..responsePrefix` و`channels..accounts..responsePrefix`. -آلية الحل (الأكثر تحديدًا يفوز): الحساب → القناة → العام. تؤدي `""` إلى التعطيل وإيقاف التسلسل. وتشتق `"auto"` القيمة `[{identity.name}]`. +آلية الحل (الأكثر تحديدًا يفوز): الحساب ← القناة ← العام. تؤدي القيمة `""` إلى التعطيل وإيقاف التسلسل. وتشتق `"auto"` القيمة `[{identity.name}]`. **متغيرات القالب:** -| المتغير | الوصف | مثال | -| ----------------- | ---------------------- | --------------------------- | -| `{model}` | الاسم المختصر للنموذج | `claude-opus-4-6` | -| `{modelFull}` | معرّف النموذج الكامل | `anthropic/claude-opus-4-6` | -| `{provider}` | اسم المزوّد | `anthropic` | -| `{thinkingLevel}` | مستوى التفكير الحالي | `high`، `low`، `off` | -| `{identity.name}` | اسم هوية الوكيل | (مثل `"auto"`) | +| المتغير | الوصف | المثال | +| ------- | ------ | ------ | +| `{model}` | اسم النموذج المختصر | `claude-opus-4-6` | +| `{modelFull}` | معرّف النموذج الكامل | `anthropic/claude-opus-4-6` | +| `{provider}` | اسم المزوّد | `anthropic` | +| `{thinkingLevel}` | مستوى التفكير الحالي | `high` أو `low` أو `off` | +| `{identity.name}` | اسم هوية الوكيل | (نفس `"auto"`) | -المتغيرات غير حساسة لحالة الأحرف. وتُعد `{think}` اسمًا بديلًا لـ `{thinkingLevel}`. +المتغيرات غير حساسة لحالة الأحرف. و`{think}` هو اسم مستعار لـ `{thinkingLevel}`. -### تفاعل التأكيد +### تفاعل الإقرار -- تكون القيمة الافتراضية هي `identity.emoji` الخاصة بالوكيل النشط، وإلا `"👀"`. عيّن `""` للتعطيل. -- تجاوزات لكل قناة: `channels..ackReaction` و`channels..accounts..ackReaction`. -- ترتيب الحل: الحساب → القناة → `messages.ackReaction` → الاحتياط المستند إلى الهوية. -- النطاق: `group-mentions` (الافتراضي) و`group-all` و`direct` و`all`. -- يؤدي `removeAckAfterReply` إلى إزالة التأكيد بعد الرد في Slack وDiscord وTelegram. -- يفعّل `messages.statusReactions.enabled` تفاعلات الحالة خلال دورة الحياة في Slack وDiscord وTelegram. - وفي Slack وDiscord، يؤدي عدم التعيين إلى إبقاء تفاعلات الحالة مفعّلة عندما تكون تفاعلات التأكيد نشطة. - وفي Telegram، عيّنه صراحةً إلى `true` لتفعيل تفاعلات الحالة خلال دورة الحياة. +- يعود افتراضيًا إلى `identity.emoji` الخاص بالوكيل النشط، وإلا إلى `"👀"`. اضبط `""` للتعطيل. +- التجاوزات لكل قناة: `channels..ackReaction` و`channels..accounts..ackReaction`. +- ترتيب الحل: الحساب ← القناة ← `messages.ackReaction` ← الرجوع إلى الهوية. +- النطاق: `group-mentions` ‏(الافتراضي) و`group-all` و`direct` و`all`. +- يؤدي `removeAckAfterReply` إلى إزالة الإقرار بعد الرد في Slack وDiscord وTelegram. +- يفعّل `messages.statusReactions.enabled` تفاعلات حالة دورة الحياة في Slack وDiscord وTelegram. + وفي Slack وDiscord، يحافظ تركه غير مضبوط على بقاء تفاعلات الحالة مفعّلة عندما تكون تفاعلات الإقرار نشطة. + وفي Telegram، اضبطه صراحةً على `true` لتمكين تفاعلات حالة دورة الحياة. -### إزالة الارتداد للرسائل الواردة +### تأخير التجميع الوارد -تجمع الرسائل النصية السريعة من المرسل نفسه في دور وكيل واحد. وتؤدي الوسائط/المرفقات إلى التفريغ فورًا. وتتجاوز أوامر التحكم إزالة الارتداد. +يجمع الرسائل النصية السريعة من المرسل نفسه في دور وكيل واحد. ويتم تفريغ الوسائط/المرفقات فورًا. وتتجاوز أوامر التحكم آلية التأخير. -### TTS (تحويل النص إلى كلام) +### TTS ‏(تحويل النص إلى كلام) ```json5 { @@ -2127,18 +2138,18 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري } ``` -- يتحكم `auto` في وضع TTS التلقائي الافتراضي: `off` أو `always` أو `inbound` أو `tagged`. ويمكن أن يتجاوز `/tts on|off` التفضيلات المحلية، بينما يعرض `/tts status` الحالة الفعلية. +- يتحكم `auto` في وضع TTS التلقائي الافتراضي: `off` أو `always` أو `inbound` أو `tagged`. ويمكن للأمر `/tts on|off` تجاوز التفضيلات المحلية، بينما يعرض `/tts status` الحالة الفعلية. - يتجاوز `summaryModel` القيمة `agents.defaults.model.primary` للتلخيص التلقائي. -- يكون `modelOverrides` مفعّلًا افتراضيًا؛ وتكون القيمة الافتراضية لـ `modelOverrides.allowProvider` هي `false` (تفعيل اختياري). +- تكون `modelOverrides` مفعّلة افتراضيًا؛ وتكون القيمة الافتراضية لـ `modelOverrides.allowProvider` هي `false` ‏(اشتراك اختياري). - تعود مفاتيح API إلى `ELEVENLABS_API_KEY`/`XI_API_KEY` و`OPENAI_API_KEY`. -- يتجاوز `openai.baseUrl` نقطة نهاية OpenAI TTS. ترتيب الحل هو: الإعدادات، ثم `OPENAI_TTS_BASE_URL`، ثم `https://api.openai.com/v1`. -- عندما يشير `openai.baseUrl` إلى نقطة نهاية غير تابعة لـ OpenAI، يتعامل OpenClaw معها على أنها خادم TTS متوافق مع OpenAI ويخفف التحقق من النموذج/الصوت. +- يتجاوز `openai.baseUrl` نقطة نهاية OpenAI TTS. وترتيب الحل هو الإعدادات، ثم `OPENAI_TTS_BASE_URL`، ثم `https://api.openai.com/v1`. +- عندما يشير `openai.baseUrl` إلى نقطة نهاية غير تابعة لـ OpenAI، يتعامل OpenClaw معها بوصفها خادم TTS متوافقًا مع OpenAI ويخفف التحقق من النموذج/الصوت. --- ## Talk -الإعدادات الافتراضية لوضع Talk ‏(macOS/iOS/Android). +القيم الافتراضية لوضع Talk ‏(macOS/iOS/Android). ```json5 { @@ -2162,13 +2173,13 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري } ``` -- يجب أن يطابق `talk.provider` مفتاحًا في `talk.providers` عند إعداد عدة مزوّدين لـ Talk. -- مفاتيح Talk القديمة المسطحة (`talk.voiceId` و`talk.voiceAliases` و`talk.modelId` و`talk.outputFormat` و`talk.apiKey`) مخصصة للتوافق فقط، وتُرحَّل تلقائيًا إلى `talk.providers.`. +- يجب أن تطابق `talk.provider` مفتاحًا في `talk.providers` عند تهيئة عدة مزوّدي Talk. +- مفاتيح Talk القديمة المسطحة (`talk.voiceId` و`talk.voiceAliases` و`talk.modelId` و`talk.outputFormat` و`talk.apiKey`) مخصصة للتوافق فقط، ويتم ترحيلها تلقائيًا إلى `talk.providers.`. - تعود معرّفات الأصوات إلى `ELEVENLABS_VOICE_ID` أو `SAG_VOICE_ID`. -- يقبل `providers.*.apiKey` سلاسل نصية صريحة أو كائنات SecretRef. -- لا يُطبَّق الاحتياطي `ELEVENLABS_API_KEY` إلا عندما لا يكون مفتاح API الخاص بـ Talk مُعدًّا. -- يتيح `providers.*.voiceAliases` لتوجيهات Talk استخدام أسماء سهلة. -- يتحكم `silenceTimeoutMs` في مدة انتظار وضع Talk بعد صمت المستخدم قبل إرسال النص المفرغ. وعند عدم تعيينه، تُستخدم نافذة التوقف الافتراضية الخاصة بالمنصة (`700 ms على macOS وAndroid، و900 ms على iOS`). +- تقبل `providers.*.apiKey` سلاسل نصية صريحة أو كائنات SecretRef. +- ينطبق الرجوع إلى `ELEVENLABS_API_KEY` فقط عندما لا يكون أي مفتاح API لـ Talk مكوّنًا. +- تسمح `providers.*.voiceAliases` لتوجيهات Talk باستخدام أسماء ودية. +- تتحكم `silenceTimeoutMs` في مدة انتظار وضع Talk بعد صمت المستخدم قبل إرسال النص المفرغ. وعند عدم ضبطها، يتم الاحتفاظ بنافذة التوقف الافتراضية للمنصة (`700 ms على macOS وAndroid، و900 ms على iOS`). --- @@ -2178,35 +2189,35 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري يضبط `tools.profile` قائمة سماح أساسية قبل `tools.allow`/`tools.deny`: -تضبط عملية الإعداد المحلية الافتراضية للإعدادات المحلية الجديدة `tools.profile: "coding"` عندما لا يكون معينًا (وتُحفَظ ملفات التعريف الصريحة الحالية). +يضبط onboarding المحلي القيم الافتراضية للإعدادات المحلية الجديدة على `tools.profile: "coding"` عند عدم ضبطه (مع الحفاظ على ملفات التعريف الصريحة الحالية). | ملف التعريف | يتضمن | -| ----------- | ------------------------------------------------------------------------------------------------------------------------------- | -| `minimal` | `session_status` فقط | -| `coding` | `group:fs` و`group:runtime` و`group:web` و`group:sessions` و`group:memory` و`cron` و`image` و`image_generate` و`video_generate` | -| `messaging` | `group:messaging` و`sessions_list` و`sessions_history` و`sessions_send` و`session_status` | -| `full` | بلا قيود (مثل عدم التعيين) | +| ----------- | ----- | +| `minimal` | `session_status` فقط | +| `coding` | `group:fs` و`group:runtime` و`group:web` و`group:sessions` و`group:memory` و`cron` و`image` و`image_generate` و`video_generate` | +| `messaging` | `group:messaging` و`sessions_list` و`sessions_history` و`sessions_send` و`session_status` | +| `full` | بلا تقييد (مثل غير المضبوط) | ### مجموعات الأدوات | المجموعة | الأدوات | -| ------------------ | ----------------------------------------------------------------------------------------------------------------------- | -| `group:runtime` | `exec` و`process` و`code_execution` (`bash` مقبول كاسم بديل لـ `exec`) | -| `group:fs` | `read` و`write` و`edit` و`apply_patch` | -| `group:sessions` | `sessions_list` و`sessions_history` و`sessions_send` و`sessions_spawn` و`sessions_yield` و`subagents` و`session_status` | -| `group:memory` | `memory_search` و`memory_get` | -| `group:web` | `web_search` و`x_search` و`web_fetch` | -| `group:ui` | `browser` و`canvas` | -| `group:automation` | `cron` و`gateway` | -| `group:messaging` | `message` | -| `group:nodes` | `nodes` | -| `group:agents` | `agents_list` | -| `group:media` | `image` و`image_generate` و`video_generate` و`tts` | -| `group:openclaw` | جميع الأدوات المضمنة (باستثناء Plugin الخاصة بالمزوّد) | +| -------- | ------- | +| `group:runtime` | `exec` و`process` و`code_execution` ‏(`bash` مقبول كاسم مستعار لـ `exec`) | +| `group:fs` | `read` و`write` و`edit` و`apply_patch` | +| `group:sessions` | `sessions_list` و`sessions_history` و`sessions_send` و`sessions_spawn` و`sessions_yield` و`subagents` و`session_status` | +| `group:memory` | `memory_search` و`memory_get` | +| `group:web` | `web_search` و`x_search` و`web_fetch` | +| `group:ui` | `browser` و`canvas` | +| `group:automation` | `cron` و`gateway` | +| `group:messaging` | `message` | +| `group:nodes` | `nodes` | +| `group:agents` | `agents_list` | +| `group:media` | `image` و`image_generate` و`video_generate` و`tts` | +| `group:openclaw` | جميع الأدوات المضمنة (باستثناء Plugins المزوّدين) | ### `tools.allow` / `tools.deny` -سياسة السماح/المنع العامة للأدوات (المنع يفوز). غير حساسة لحالة الأحرف، وتدعم أحرف البدل `*`. وتُطبَّق حتى عندما يكون Docker sandbox معطّلًا. +سياسة السماح/المنع العامة للأدوات (المنع يفوز). غير حساسة لحالة الأحرف، وتدعم أحرف البدل `*`. وتُطبَّق حتى عندما يكون Docker sandbox معطلًا. ```json5 { @@ -2248,9 +2259,9 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري } ``` -- لا يمكن لتجاوز كل وكيل (`agents.list[].tools.elevated`) إلا أن يضيف مزيدًا من التقييد. -- يخزن `/elevated on|off|ask|full` الحالة لكل جلسة؛ وتُطبَّق التوجيهات المضمنة على رسالة واحدة فقط. -- يتجاوز `exec` المرتفع العزل في sandbox ويستخدم مسار الهروب المهيأ (`gateway` افتراضيًا، أو `node` عندما يكون هدف exec هو `node`). +- يمكن للتجاوز لكل وكيل (`agents.list[].tools.elevated`) أن يضيف مزيدًا من التقييد فقط. +- يخزن `/elevated on|off|ask|full` الحالة لكل جلسة؛ وتُطبّق التوجيهات المضمنة على رسالة واحدة. +- يتجاوز `exec` المرتفع آلية sandboxing ويستخدم مسار الهروب المكوَّن (`gateway` افتراضيًا، أو `node` عندما يكون هدف exec هو `node`). ### `tools.exec` @@ -2274,8 +2285,8 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري ### `tools.loopDetection` -تكون فحوصات أمان حلقات الأدوات **معطلة افتراضيًا**. عيّن `enabled: true` لتفعيل الاكتشاف. -يمكن تعريف الإعدادات عالميًا في `tools.loopDetection` وتجاوزها لكل وكيل في `agents.list[].tools.loopDetection`. +تكون فحوصات أمان حلقات الأدوات **معطلة افتراضيًا**. اضبط `enabled: true` لتفعيل الاكتشاف. +يمكن تعريف الإعدادات عموميًا في `tools.loopDetection` وتجاوزها لكل وكيل في `agents.list[].tools.loopDetection`. ```json5 { @@ -2296,14 +2307,14 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري } ``` -- `historySize`: الحد الأقصى لسجل استدعاءات الأدوات المحتفظ به لتحليل الحلقات. -- `warningThreshold`: حد نمط التكرار بلا تقدم لإصدار التحذيرات. -- `criticalThreshold`: حد تكرار أعلى لحظر الحلقات الحرجة. -- `globalCircuitBreakerThreshold`: حد إيقاف صارم لأي تشغيل بلا تقدم. -- `detectors.genericRepeat`: يحذر من الاستدعاءات المتكررة للأداة نفسها/المعاملات نفسها. -- `detectors.knownPollNoProgress`: يحذر/يحظر أدوات الاستطلاع المعروفة (`process.poll` و`command_status` وما إلى ذلك). -- `detectors.pingPong`: يحذر/يحظر أنماط الأزواج المتناوبة بلا تقدم. -- إذا كان `warningThreshold >= criticalThreshold` أو `criticalThreshold >= globalCircuitBreakerThreshold`، يفشل التحقق. +- `historySize`: الحد الأقصى لسجل استدعاءات الأدوات المحتفَظ به لتحليل الحلقات. +- `warningThreshold`: عتبة نمط التكرار بلا تقدم لإصدار التحذيرات. +- `criticalThreshold`: عتبة تكرار أعلى لحظر الحلقات الحرجة. +- `globalCircuitBreakerThreshold`: عتبة إيقاف صارمة لأي تشغيل بلا تقدم. +- `detectors.genericRepeat`: التحذير عند تكرار استدعاءات الأداة نفسها/المعاملات نفسها. +- `detectors.knownPollNoProgress`: التحذير/الحظر عند أدوات الاستطلاع المعروفة (`process.poll` و`command_status` وغيرهما). +- `detectors.pingPong`: التحذير/الحظر عند أنماط الأزواج المتناوبة بلا تقدم. +- إذا كانت `warningThreshold >= criticalThreshold` أو `criticalThreshold >= globalCircuitBreakerThreshold`، يفشل التحقق. ### `tools.web` @@ -2313,14 +2324,14 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري web: { search: { enabled: true, - apiKey: "brave_api_key", // أو BRAVE_API_KEY في البيئة + apiKey: "brave_api_key", // or BRAVE_API_KEY env maxResults: 5, timeoutSeconds: 30, cacheTtlMinutes: 15, }, fetch: { enabled: true, - provider: "firecrawl", // اختياري؛ احذفه للاكتشاف التلقائي + provider: "firecrawl", // optional; omit for auto-detect maxChars: 50000, maxCharsCap: 50000, maxResponseBytes: 2000000, @@ -2337,7 +2348,7 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري ### `tools.media` -يضبط فهم الوسائط الواردة (صورة/صوت/فيديو): +يهيّئ فهم الوسائط الواردة (الصورة/الصوت/الفيديو): ```json5 { @@ -2345,7 +2356,7 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري media: { concurrency: 2, asyncCompletion: { - directSend: false, // تفعيل اختياري: أرسل الموسيقى/الفيديو غير المتزامنين المكتملين مباشرة إلى القناة + directSend: false, // opt-in: send finished async music/video directly to the channel }, audio: { enabled: true, @@ -2371,30 +2382,31 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري -**إدخال المزوّد** (`type: "provider"` أو عند الحذف): +**إدخال المزوّد** (`type: "provider"` أو محذوف): -- `provider`: معرّف مزوّد API ‏(`openai` أو `anthropic` أو `google`/`gemini` أو `groq` وما إلى ذلك) +- `provider`: معرّف مزوّد API ‏(`openai` أو `anthropic` أو `google`/`gemini` أو `groq` أو غيرها) - `model`: تجاوز معرّف النموذج -- `profile` / `preferredProfile`: اختيار ملف تعريف من `auth-profiles.json` +- `profile` / `preferredProfile`: اختيار ملف التعريف من `auth-profiles.json` **إدخال CLI** (`type: "cli"`): -- `command`: الملف التنفيذي المطلوب تشغيله -- `args`: معاملات ذات قوالب (تدعم `{{MediaPath}}` و`{{Prompt}}` و`{{MaxChars}}` وما إلى ذلك) +- `command`: الملف التنفيذي المراد تشغيله +- `args`: معاملات مُقالبَة (تدعم `{{MediaPath}}` و`{{Prompt}}` و`{{MaxChars}}` وغيرها) -**حقول مشتركة:** +**الحقول المشتركة:** -- `capabilities`: قائمة اختيارية (`image` أو `audio` أو `video`). القيم الافتراضية: `openai`/`anthropic`/`minimax` ← صورة، و`google` ← صورة+صوت+فيديو، و`groq` ← صوت. +- `capabilities`: قائمة اختيارية (`image` و`audio` و`video`). القيم الافتراضية: `openai`/`anthropic`/`minimax` ← صورة، و`google` ← صورة+صوت+فيديو، و`groq` ← صوت. - `prompt` و`maxChars` و`maxBytes` و`timeoutSeconds` و`language`: تجاوزات لكل إدخال. -- تؤدي الإخفاقات إلى الرجوع إلى الإدخال التالي. +- تعود الإخفاقات إلى الإدخال التالي. -تتبع مصادقة المزوّد الترتيب القياسي: `auth-profiles.json` → متغيرات البيئة → `models.providers.*.apiKey`. +تتبع مصادقة المزوّد الترتيب القياسي: `auth-profiles.json` ← متغيرات البيئة ← `models.providers.*.apiKey`. **حقول الإكمال غير المتزامن:** -- `asyncCompletion.directSend`: عند تعيينه إلى `true`، تحاول مهام - `music_generate` و`video_generate` غير المتزامنة المكتملة التسليم المباشر إلى القناة أولًا. الافتراضي: `false` - (مسار wake/model-delivery القديم المعتمد على جلسة الطالب). +- `asyncCompletion.directSend`: عندما تكون قيمته `true`، تحاول المهام + المكتملة غير المتزامنة لـ `music_generate` + و`video_generate` التسليم المباشر إلى القناة أولًا. الافتراضي: `false` + (مسار الإيقاظ/تسليم النموذج القديم المعتمد على جلسة الطالب). @@ -2413,9 +2425,9 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري ### `tools.sessions` -يتحكم في الجلسات التي يمكن استهدافها بواسطة أدوات الجلسة (`sessions_list` و`sessions_history` و`sessions_send`). +يتحكم في الجلسات التي يمكن استهدافها بواسطة أدوات الجلسات (`sessions_list` و`sessions_history` و`sessions_send`). -الافتراضي: `tree` (الجلسة الحالية + الجلسات التي أنشأتها، مثل الوكلاء الفرعيين). +الافتراضي: `tree` ‏(الجلسة الحالية + الجلسات التي أنشأتها، مثل subagents). ```json5 { @@ -2431,10 +2443,10 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري ملاحظات: - `self`: مفتاح الجلسة الحالية فقط. -- `tree`: الجلسة الحالية + الجلسات التي أنشأتها الجلسة الحالية (الوكلاء الفرعيون). -- `agent`: أي جلسة تنتمي إلى معرّف الوكيل الحالي (وقد يشمل ذلك مستخدمين آخرين إذا كنت تستخدم جلسات per-sender تحت معرّف الوكيل نفسه). +- `tree`: الجلسة الحالية + الجلسات التي أنشأتها الجلسة الحالية (subagents). +- `agent`: أي جلسة تابعة لمعرّف الوكيل الحالي (وقد يشمل ذلك مستخدمين آخرين إذا كنت تشغّل جلسات per-sender تحت معرّف الوكيل نفسه). - `all`: أي جلسة. وما يزال الاستهداف عبر الوكلاء يتطلب `tools.agentToAgent`. -- تقييد sandbox: عندما تكون الجلسة الحالية داخل sandbox ويكون `agents.defaults.sandbox.sessionToolsVisibility="spawned"`، تُفرض القيمة `tree` على مستوى الرؤية حتى لو كان `tools.sessions.visibility="all"`. +- تقييد sandbox: عندما تكون الجلسة الحالية ضمن sandbox وتكون `agents.defaults.sandbox.sessionToolsVisibility="spawned"`، تُفرض الرؤية على `tree` حتى لو كانت `tools.sessions.visibility="all"`. ### `tools.sessions_spawn` @@ -2445,11 +2457,11 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري tools: { sessions_spawn: { attachments: { - enabled: false, // تفعيل اختياري: عيّنه إلى true للسماح بمرفقات ملفات مضمنة - maxTotalBytes: 5242880, // 5 MB إجمالًا عبر جميع الملفات + enabled: false, // opt-in: set true to allow inline file attachments + maxTotalBytes: 5242880, // 5 MB total across all files maxFiles: 50, - maxFileBytes: 1048576, // 1 MB لكل ملف - retainOnSessionKeep: false, // الاحتفاظ بالمرفقات عندما يكون cleanup="keep" + maxFileBytes: 1048576, // 1 MB per file + retainOnSessionKeep: false, // keep attachments when cleanup="keep" }, }, }, @@ -2458,22 +2470,22 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري ملاحظات: -- لا تُدعَم المرفقات إلا مع `runtime: "subagent"`. ويرفض وقت تشغيل ACP هذه المرفقات. -- تُحوَّل الملفات إلى مساحة عمل الابن في `.openclaw/attachments//` مع `.manifest.json`. -- يُحجَب محتوى المرفقات تلقائيًا من حفظ السجل. -- تُتحقق مدخلات Base64 باستخدام فحوص صارمة للأبجدية/الحشو وحارس حجم قبل فك الترميز. -- تكون صلاحيات الملفات `0700` للأدلة و`0600` للملفات. -- يتبع التنظيف سياسة `cleanup`: يزيل `delete` المرفقات دائمًا؛ بينما يحتفظ `keep` بها فقط عندما يكون `retainOnSessionKeep: true`. +- المرفقات مدعومة فقط مع `runtime: "subagent"`. ويرفض وقت تشغيل ACP هذه المرفقات. +- تُحوَّل الملفات إلى مساحة عمل الابن ضمن `.openclaw/attachments//` مع ملف `.manifest.json`. +- يتم تلقائيًا حجب محتوى المرفقات من حفظ السجل. +- يتم التحقق من مدخلات Base64 باستخدام فحوص صارمة للأبجدية/الحشو وحاجز حجم قبل فك الترميز. +- تكون أذونات الملفات `0700` للأدلة و`0600` للملفات. +- يتبع التنظيف سياسة `cleanup`: تؤدي `delete` دائمًا إلى إزالة المرفقات؛ بينما تحتفظ `keep` بها فقط عندما تكون `retainOnSessionKeep: true`. ### `tools.experimental` -أعلام الأدوات المضمنة التجريبية. تكون معطلة افتراضيًا ما لم تنطبق قاعدة تفعيل تلقائي صارمة لوضع GPT-5 الوكيلي. +أعلام الأدوات المضمنة التجريبية. تكون معطلة افتراضيًا ما لم تنطبق قاعدة تمكين تلقائي صارمة خاصة بوكلاء GPT-5. ```json5 { tools: { experimental: { - planTool: true, // تفعيل update_plan التجريبية + planTool: true, // enable experimental update_plan }, }, } @@ -2481,9 +2493,9 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري ملاحظات: -- `planTool`: يفعّل الأداة المهيكلة `update_plan` لتتبع العمل غير البسيط متعدد الخطوات. -- الافتراضي: `false` ما لم تكن `agents.defaults.embeddedPi.executionContract` (أو تجاوز لكل وكيل) مضبوطة على `"strict-agentic"` في تشغيل OpenAI أو OpenAI Codex من عائلة GPT-5. عيّنه إلى `true` لفرض تشغيل الأداة خارج ذلك النطاق، أو إلى `false` لإبقائها معطلة حتى في تشغيلات GPT-5 الصارمة الوكيلية. -- عند التفعيل، تضيف system prompt أيضًا إرشادات استخدام بحيث يستخدمها النموذج فقط للأعمال الكبيرة ويحافظ على خطوة واحدة فقط كحد أقصى في حالة `in_progress`. +- `planTool`: يفعّل الأداة المنظَّمة `update_plan` لتتبع الأعمال غير التافهة متعددة الخطوات. +- الافتراضي: `false` ما لم تكن `agents.defaults.embeddedPi.executionContract` (أو تجاوز لكل وكيل) مضبوطة على `"strict-agentic"` لتشغيل من عائلة OpenAI أو OpenAI Codex GPT-5. اضبطه على `true` لفرض تشغيل الأداة خارج هذا النطاق، أو على `false` لإبقائها معطلة حتى في تشغيلات GPT-5 الصارمة. +- عند التفعيل، يضيف system prompt أيضًا إرشادات استخدام بحيث يستخدمها النموذج فقط للأعمال الجوهرية ويحافظ على خطوة واحدة فقط كحد أقصى في حالة `in_progress`. ### `agents.defaults.subagents` @@ -2504,8 +2516,8 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري ``` - `model`: النموذج الافتراضي للوكلاء الفرعيين الذين تم إنشاؤهم. وإذا حُذف، يرث الوكلاء الفرعيون نموذج المستدعي. -- `allowAgents`: قائمة السماح الافتراضية لمعرّفات الوكلاء المستهدفة في `sessions_spawn` عندما لا يعيّن الوكيل الطالب قيمة `subagents.allowAgents` الخاصة به (`["*"]` = أي وكيل؛ الافتراضي: الوكيل نفسه فقط). -- `runTimeoutSeconds`: المهلة الافتراضية (بالثواني) لـ `sessions_spawn` عندما يحذف استدعاء الأداة `runTimeoutSeconds`. وتعني `0` عدم وجود مهلة. +- `allowAgents`: قائمة السماح الافتراضية لمعرّفات الوكلاء المستهدفين لأجل `sessions_spawn` عندما لا يضبط الوكيل الطالب `subagents.allowAgents` الخاص به (`["*"]` = أي وكيل؛ الافتراضي: الوكيل نفسه فقط). +- `runTimeoutSeconds`: المهلة الافتراضية (بالثواني) لـ `sessions_spawn` عندما يحذف استدعاء الأداة القيمة `runTimeoutSeconds`. وتعني القيمة `0` عدم وجود مهلة. - سياسة الأدوات لكل وكيل فرعي: `tools.subagents.tools.allow` / `tools.subagents.tools.deny`. --- @@ -2517,7 +2529,7 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري ```json5 { models: { - mode: "merge", // merge (الافتراضي) | replace + mode: "merge", // merge (default) | replace providers: { "custom-proxy": { baseUrl: "http://localhost:4000/v1", @@ -2542,47 +2554,47 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري ``` - استخدم `authHeader: true` + `headers` لاحتياجات المصادقة المخصصة. -- تجاوز جذر إعداد الوكيل باستخدام `OPENCLAW_AGENT_DIR` (أو `PI_CODING_AGENT_DIR`، وهو اسم قديم بديل لمتغير البيئة). -- أولوية الدمج لمعرّفات المزوّد المطابقة: +- تجاوز جذر إعدادات الوكيل باستخدام `OPENCLAW_AGENT_DIR` ‏(أو `PI_CODING_AGENT_DIR`، وهو اسم مستعار قديم لمتغير البيئة). +- أسبقية الدمج لمعرّفات المزوّدين المتطابقة: - تفوز قيم `baseUrl` غير الفارغة في `models.json` الخاصة بالوكيل. - - تفوز قيم `apiKey` غير الفارغة الخاصة بالوكيل فقط عندما لا يكون ذلك المزوّد مُدارًا بواسطة SecretRef في سياق الإعداد/ملف تعريف المصادقة الحالي. - - تُحدَّث قيم `apiKey` الخاصة بالمزوّد المُدار بواسطة SecretRef من علامات المصدر (`ENV_VAR_NAME` لإحالات البيئة، و`secretref-managed` لإحالات الملف/التنفيذ) بدلًا من حفظ الأسرار المحلولة. - - تُحدَّث قيم الرؤوس الخاصة بالمزوّد المُدار بواسطة SecretRef من علامات المصدر (`secretref-env:ENV_VAR_NAME` لإحالات البيئة، و`secretref-managed` لإحالات الملف/التنفيذ). - - تعود القيم الفارغة أو المفقودة لـ `apiKey`/`baseUrl` الخاصة بالوكيل إلى `models.providers` في الإعدادات. - - تستخدم القيم المطابقة `contextWindow`/`maxTokens` للنموذج القيمة الأعلى بين الإعداد الصريح وقيم الفهرس الضمنية. - - تحافظ القيم المطابقة `contextTokens` للنموذج على حد تشغيل صريح عندما يكون موجودًا؛ استخدمه لتقييد السياق الفعلي دون تغيير بيانات التعريف الأصلية للنموذج. - - استخدم `models.mode: "replace"` عندما تريد من الإعدادات إعادة كتابة `models.json` بالكامل. - - يكون حفظ العلامات معتمدًا على المصدر: تُكتب العلامات من لقطة إعداد المصدر النشطة (قبل الحل)، وليس من قيم الأسرار المحلولة أثناء التشغيل. + - تفوز قيم `apiKey` غير الفارغة في الوكيل فقط عندما لا يكون ذلك المزوّد مُدارًا عبر SecretRef في سياق الإعدادات/ملف تعريف المصادقة الحالي. + - تُحدَّث قيم `apiKey` للمزوّد المُدار عبر SecretRef من علامات المصدر (`ENV_VAR_NAME` لمراجع env، و`secretref-managed` لمراجع file/exec) بدلًا من حفظ الأسرار المحلولة. + - تُحدَّث قيم رؤوس المزوّد المُدار عبر SecretRef من علامات المصدر (`secretref-env:ENV_VAR_NAME` لمراجع env، و`secretref-managed` لمراجع file/exec). + - تعود قيم `apiKey`/`baseUrl` الفارغة أو المفقودة في الوكيل إلى `models.providers` في الإعدادات. + - تستخدم القيم `contextWindow`/`maxTokens` في النماذج المتطابقة القيمة الأعلى بين الإعدادات الصريحة وقيم الفهرس الضمنية. + - تحافظ القيمة `contextTokens` في النموذج المتطابق على حد وقت التشغيل الصريح عندما يكون موجودًا؛ واستخدمها لتقييد السياق الفعلي من دون تغيير بيانات النموذج الأصلية. + - استخدم `models.mode: "replace"` عندما تريد أن تعيد الإعدادات كتابة `models.json` بالكامل. + - يكون حفظ العلامات معتمدًا على المصدر: تُكتب العلامات من لقطة الإعدادات المصدرية النشطة (قبل الحل)، وليس من قيم الأسرار المحلولة وقت التشغيل. ### تفاصيل حقول المزوّد - `models.mode`: سلوك فهرس المزوّد (`merge` أو `replace`). -- `models.providers`: خريطة مزوّدين مخصصين مفهرسة بمعرّف المزوّد. -- `models.providers.*.api`: مهايئ الطلب (`openai-completions` أو `openai-responses` أو `anthropic-messages` أو `google-generative-ai` وما إلى ذلك). -- `models.providers.*.apiKey`: بيانات اعتماد المزوّد (يُفضّل SecretRef/الاستبدال من البيئة). +- `models.providers`: خريطة مزوّدين مخصصين مفاتيحها معرّفات المزوّدين. +- `models.providers.*.api`: محوّل الطلبات (`openai-completions` أو `openai-responses` أو `anthropic-messages` أو `google-generative-ai` أو غيرها). +- `models.providers.*.apiKey`: بيانات اعتماد المزوّد (ويُفضَّل SecretRef/الاستبدال من البيئة). - `models.providers.*.auth`: استراتيجية المصادقة (`api-key` أو `token` أو `oauth` أو `aws-sdk`). - `models.providers.*.injectNumCtxForOpenAICompat`: بالنسبة إلى Ollama + `openai-completions`، يحقن `options.num_ctx` في الطلبات (الافتراضي: `true`). -- `models.providers.*.authHeader`: يفرض نقل بيانات الاعتماد في رأس `Authorization` عند الحاجة. -- `models.providers.*.baseUrl`: عنوان URL الأساسي لواجهة API في المصدر. -- `models.providers.*.headers`: رؤوس ثابتة إضافية لتوجيه الوكيل/المستأجر. +- `models.providers.*.authHeader`: يفرض نقل بيانات الاعتماد داخل ترويسة `Authorization` عند الحاجة. +- `models.providers.*.baseUrl`: عنوان URL الأساسي لواجهة API الصاعدة. +- `models.providers.*.headers`: ترويسات ثابتة إضافية لتوجيه الـ proxy/المستأجر. - `models.providers.*.request`: تجاوزات النقل لطلبات HTTP الخاصة بمزوّد النموذج. - - `request.headers`: رؤوس إضافية (تُدمج مع القيم الافتراضية للمزوّد). وتقبل القيم SecretRef. - - `request.auth`: تجاوز استراتيجية المصادقة. الأوضاع: `"provider-default"` (استخدام المصادقة المضمنة الخاصة بالمزوّد)، و`"authorization-bearer"` (مع `token`)، و`"header"` (مع `headerName` و`value` و`prefix` الاختياري). - - `request.proxy`: تجاوز وكيل HTTP. الأوضاع: `"env-proxy"` (استخدام متغيرات البيئة `HTTP_PROXY`/`HTTPS_PROXY`)، و`"explicit-proxy"` (مع `url`). ويقبل كلا الوضعين كائنًا فرعيًا اختياريًا `tls`. - - `request.tls`: تجاوز TLS للاتصالات المباشرة. الحقول: `ca` و`cert` و`key` و`passphrase` (كلها تقبل SecretRef) و`serverName` و`insecureSkipVerify`. - - `request.allowPrivateNetwork`: عند تعيينه إلى `true`، يسمح باتصالات HTTPS إلى `baseUrl` عندما يُحل DNS إلى نطاقات خاصة أو CGNAT أو نطاقات مشابهة، عبر حارس جلب HTTP الخاص بالمزوّد (تفعيل اختياري للمشغّل لنقاط النهاية المتوافقة مع OpenAI والمستضافة ذاتيًا والموثوق بها). وتستخدم WebSocket الكائن `request` نفسه للرؤوس/TLS ولكن ليس بوابة SSRF الخاصة بالجلب. الافتراضي `false`. -- `models.providers.*.models`: إدخالات صريحة لفهرس نماذج المزوّد. + - `request.headers`: ترويسات إضافية (تُدمج مع القيم الافتراضية للمزوّد). وتقبل القيم SecretRef. + - `request.auth`: تجاوز استراتيجية المصادقة. الأوضاع: `"provider-default"` ‏(استخدام مصادقة المزوّد المضمنة)، و`"authorization-bearer"` ‏(مع `token`)، و`"header"` ‏(مع `headerName` و`value` و`prefix` الاختياري). + - `request.proxy`: تجاوز HTTP proxy. الأوضاع: `"env-proxy"` ‏(استخدام متغيرات البيئة `HTTP_PROXY`/`HTTPS_PROXY`)، و`"explicit-proxy"` ‏(مع `url`). ويقبل كلا الوضعين كائنًا فرعيًا اختياريًا `tls`. + - `request.tls`: تجاوز TLS للاتصالات المباشرة. الحقول: `ca` و`cert` و`key` و`passphrase` ‏(جميعها تقبل SecretRef)، و`serverName`، و`insecureSkipVerify`. + - `request.allowPrivateNetwork`: عندما تكون قيمته `true`، يسمح باتصالات HTTPS إلى `baseUrl` عندما يُحل DNS إلى نطاقات خاصة أو CGNAT أو نطاقات مشابهة، عبر حاجز جلب HTTP الخاص بالمزوّد (اشتراك اختياري للمشغّل من أجل نقاط نهاية OpenAI-compatible ذاتية الاستضافة الموثوقة). ويستخدم WebSocket الكائن `request` نفسه للترويسات/TLS ولكن ليس لحاجز SSRF الخاص بالجلب. الافتراضي `false`. +- `models.providers.*.models`: إدخالات فهرس نماذج صريحة خاصة بالمزوّد. - `models.providers.*.models.*.contextWindow`: بيانات تعريف نافذة السياق الأصلية للنموذج. -- `models.providers.*.models.*.contextTokens`: حد سياق اختياري أثناء التشغيل. استخدمه عندما تريد ميزانية سياق فعلية أصغر من `contextWindow` الأصلية للنموذج. -- `models.providers.*.models.*.compat.supportsDeveloperRole`: تلميح توافق اختياري. بالنسبة إلى `api: "openai-completions"` مع `baseUrl` غير فارغ وغير أصلي (المستضيف ليس `api.openai.com`)، يفرض OpenClaw هذه القيمة إلى `false` أثناء التشغيل. أما `baseUrl` الفارغ/المحذوف فيبقي سلوك OpenAI الافتراضي. -- `models.providers.*.models.*.compat.requiresStringContent`: تلميح توافق اختياري لنقاط نهاية الدردشة المتوافقة مع OpenAI والتي تقبل السلاسل فقط. وعندما تكون `true`، يقوم OpenClaw بتسطيح مصفوفات `messages[].content` النصية الخالصة إلى سلاسل عادية قبل إرسال الطلب. -- `plugins.entries.amazon-bedrock.config.discovery`: جذر إعدادات الاكتشاف التلقائي لـ Bedrock. +- `models.providers.*.models.*.contextTokens`: حد سياق اختياري لوقت التشغيل. استخدمه عندما تريد ميزانية سياق فعالة أصغر من `contextWindow` الأصلية للنموذج. +- `models.providers.*.models.*.compat.supportsDeveloperRole`: تلميح توافق اختياري. بالنسبة إلى `api: "openai-completions"` مع `baseUrl` غير أصلي وغير فارغ (مضيفه ليس `api.openai.com`)، يفرض OpenClaw هذه القيمة إلى `false` وقت التشغيل. أما `baseUrl` الفارغ/المحذوف فيبقي سلوك OpenAI الافتراضي. +- `models.providers.*.models.*.compat.requiresStringContent`: تلميح توافق اختياري لنقاط نهاية chat المتوافقة مع OpenAI التي تقبل السلاسل النصية فقط. عندما تكون قيمته `true`، يقوم OpenClaw بتسطيح مصفوفات `messages[].content` النصية الخالصة إلى سلاسل نصية عادية قبل إرسال الطلب. +- `plugins.entries.amazon-bedrock.config.discovery`: الجذر الخاص بإعدادات الاكتشاف التلقائي لـ Bedrock. - `plugins.entries.amazon-bedrock.config.discovery.enabled`: تشغيل/إيقاف الاكتشاف الضمني. -- `plugins.entries.amazon-bedrock.config.discovery.region`: منطقة AWS للاكتشاف. +- `plugins.entries.amazon-bedrock.config.discovery.region`: منطقة AWS الخاصة بالاكتشاف. - `plugins.entries.amazon-bedrock.config.discovery.providerFilter`: مرشح اختياري لمعرّف المزوّد من أجل اكتشاف موجّه. -- `plugins.entries.amazon-bedrock.config.discovery.refreshInterval`: فاصل الاستطلاع لتحديث الاكتشاف. +- `plugins.entries.amazon-bedrock.config.discovery.refreshInterval`: فترة الاستطلاع لتحديث الاكتشاف. - `plugins.entries.amazon-bedrock.config.discovery.defaultContextWindow`: نافذة السياق الاحتياطية للنماذج المكتشفة. -- `plugins.entries.amazon-bedrock.config.discovery.defaultMaxTokens`: الحد الاحتياطي الأقصى لرموز المخرجات للنماذج المكتشفة. +- `plugins.entries.amazon-bedrock.config.discovery.defaultMaxTokens`: الحد الأقصى الاحتياطي لرموز الخرج للنماذج المكتشفة. ### أمثلة على المزوّدين @@ -2620,7 +2632,7 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري } ``` -استخدم `cerebras/zai-glm-4.7` مع Cerebras؛ واستخدم `zai/glm-4.7` مع Z.AI مباشرةً. +استخدم `cerebras/zai-glm-4.7` مع Cerebras؛ واستخدم `zai/glm-4.7` للاتصال المباشر بـ Z.AI. @@ -2637,7 +2649,7 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري } ``` -عيّن `OPENCODE_API_KEY` (أو `OPENCODE_ZEN_API_KEY`). استخدم المراجع `opencode/...` لفهرس Zen أو المراجع `opencode-go/...` لفهرس Go. اختصار: `openclaw onboard --auth-choice opencode-zen` أو `openclaw onboard --auth-choice opencode-go`. +اضبط `OPENCODE_API_KEY` ‏(أو `OPENCODE_ZEN_API_KEY`). استخدم مراجع `opencode/...` لفهرس Zen أو مراجع `opencode-go/...` لفهرس Go. الاختصار: `openclaw onboard --auth-choice opencode-zen` أو `openclaw onboard --auth-choice opencode-go`. @@ -2654,11 +2666,11 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري } ``` -عيّن `ZAI_API_KEY`. وتُقبل `z.ai/*` و`z-ai/*` كأسماء مستعارة. اختصار: `openclaw onboard --auth-choice zai-api-key`. +اضبط `ZAI_API_KEY`. ويُقبل كل من `z.ai/*` و`z-ai/*` كأسماء مستعارة. الاختصار: `openclaw onboard --auth-choice zai-api-key`. - نقطة النهاية العامة: `https://api.z.ai/api/paas/v4` - نقطة نهاية البرمجة (الافتراضية): `https://api.z.ai/api/coding/paas/v4` -- بالنسبة إلى نقطة النهاية العامة، عرّف مزودًا مخصصًا مع تجاوز `baseUrl`. +- بالنسبة إلى نقطة النهاية العامة، عرّف مزوّدًا مخصصًا مع تجاوز `baseUrl`. @@ -2699,8 +2711,8 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري بالنسبة إلى نقطة النهاية في الصين: `baseUrl: "https://api.moonshot.cn/v1"` أو `openclaw onboard --auth-choice moonshot-api-key-cn`. -تعلن نقاط النهاية الأصلية لـ Moonshot عن توافق استخدام البث على النقل المشترك -`openai-completions`، ويعتمد OpenClaw في ذلك على قدرات نقطة النهاية +تعلن نقاط نهاية Moonshot الأصلية عن توافق استخدام البث على +النقل المشترك `openai-completions`، ويعتمد OpenClaw على قدرات نقطة النهاية هذه وليس على معرّف المزوّد المضمن وحده. @@ -2719,7 +2731,7 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري } ``` -متوافق مع Anthropic، ومزوّد مضمن. اختصار: `openclaw onboard --auth-choice kimi-code-api-key`. +متوافق مع Anthropic، ومزوّد مضمن. الاختصار: `openclaw onboard --auth-choice kimi-code-api-key`. @@ -2758,11 +2770,11 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري } ``` -يجب أن يحذف عنوان URL الأساسي `/v1` (لأن عميل Anthropic يضيفه). اختصار: `openclaw onboard --auth-choice synthetic-api-key`. +يجب أن يحذف `baseUrl` اللاحقة `/v1` ‏(لأن عميل Anthropic يضيفها). الاختصار: `openclaw onboard --auth-choice synthetic-api-key`. - + ```json5 { @@ -2798,20 +2810,20 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري } ``` -عيّن `MINIMAX_API_KEY`. الاختصارات: +اضبط `MINIMAX_API_KEY`. الاختصارات: `openclaw onboard --auth-choice minimax-global-api` أو `openclaw onboard --auth-choice minimax-cn-api`. يفترض فهرس النماذج القيمة M2.7 فقط. -في مسار البث المتوافق مع Anthropic، يعطّل OpenClaw التفكير في MiniMax -افتراضيًا ما لم تعيّن `thinking` بنفسك صراحةً. ويعيد `/fast on` أو -`params.fastMode: true` كتابة `MiniMax-M2.7` إلى +وعلى مسار البث المتوافق مع Anthropic، يعطّل OpenClaw التفكير في MiniMax +افتراضيًا ما لم تضبط `thinking` بنفسك صراحةً. ويؤدي `/fast on` أو +`params.fastMode: true` إلى إعادة كتابة `MiniMax-M2.7` إلى `MiniMax-M2.7-highspeed`. -راجع [Local Models](/ar/gateway/local-models). باختصار: شغّل نموذجًا محليًا كبيرًا عبر LM Studio Responses API على عتاد قوي؛ وأبقِ النماذج المستضافة مدمجة من أجل الاحتياط. +راجع [Local Models](/ar/gateway/local-models). باختصار: شغّل نموذجًا محليًا كبيرًا عبر LM Studio Responses API على عتاد قوي؛ وأبقِ النماذج المستضافة مدمجة من أجل الرجوع الاحتياطي. @@ -2832,7 +2844,7 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري }, entries: { "image-lab": { - apiKey: { source: "env", provider: "default", id: "GEMINI_API_KEY" }, // أو سلسلة نصية صريحة + apiKey: { source: "env", provider: "default", id: "GEMINI_API_KEY" }, // or plaintext string env: { GEMINI_API_KEY: "GEMINI_KEY_HERE" }, }, peekaboo: { enabled: true }, @@ -2843,13 +2855,13 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري ``` - `allowBundled`: قائمة سماح اختيارية لـ Skills المضمنة فقط (ولا تتأثر Skills المُدارة/الخاصة بمساحة العمل). -- `load.extraDirs`: جذور Skills مشتركة إضافية (أدنى أولوية). -- `install.preferBrew`: عند تعيينه إلى true، يفضّل أدوات التثبيت عبر Homebrew عندما يكون `brew` +- `load.extraDirs`: جذور Skills مشتركة إضافية (أدنى أسبقية). +- `install.preferBrew`: عندما تكون القيمة true، يفضّل أدوات التثبيت عبر Homebrew عندما يكون `brew` متاحًا قبل الرجوع إلى أنواع أدوات التثبيت الأخرى. -- `install.nodeManager`: تفضيل مُثبّت Node لمواصفات `metadata.openclaw.install` +- `install.nodeManager`: تفضيل مُدير Node لمواصفات `metadata.openclaw.install` (`npm` | `pnpm` | `yarn` | `bun`). -- يؤدي `entries..enabled: false` إلى تعطيل Skill حتى لو كانت مضمّنة/مثبّتة. -- `entries..apiKey`: عنصر مناسب لـ Skills التي تعرّف متغير بيئة أساسيًا (سلسلة نصية صريحة أو كائن SecretRef). +- يؤدي `entries..enabled: false` إلى تعطيل Skill حتى لو كانت مضمنة/مثبتة. +- `entries..apiKey`: وسيلة مريحة للـ Skills التي تعلن متغير env أساسيًا (سلسلة نصية صريحة أو كائن SecretRef). --- @@ -2878,46 +2890,46 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري ``` - يتم التحميل من `~/.openclaw/extensions` و`/.openclaw/extensions` بالإضافة إلى `plugins.load.paths`. -- يقبل الاكتشاف Plugin الأصلية لـ OpenClaw بالإضافة إلى حزم Codex المتوافقة وحزم Claude، بما في ذلك حزم Claude ذات التخطيط الافتراضي من دون manifest. -- **تتطلب تغييرات الإعدادات إعادة تشغيل gateway.** -- `allow`: قائمة سماح اختيارية (يتم تحميل Plugin المدرجة فقط). ويفوز `deny`. -- `plugins.entries..apiKey`: حقل مناسب لمفتاح API على مستوى Plugin (عندما يكون مدعومًا من Plugin). +- يقبل الاكتشاف Plugins OpenClaw الأصلية بالإضافة إلى حِزم Codex المتوافقة وحِزم Claude، بما في ذلك حِزم Claude ذات التخطيط الافتراضي من دون manifest. +- **تتطلب تغييرات الإعدادات إعادة تشغيل Gateway.** +- `allow`: قائمة سماح اختيارية (يتم تحميل Plugins المدرجة فقط). ويفوز `deny`. +- `plugins.entries..apiKey`: حقل مريح لمفتاح API على مستوى Plugin (عندما يكون مدعومًا من Plugin). - `plugins.entries..env`: خريطة متغيرات بيئة ضمن نطاق Plugin. -- `plugins.entries..hooks.allowPromptInjection`: عندما تكون القيمة `false`، يحظر core الحدث `before_prompt_build` ويتجاهل الحقول القديمة المعدّلة لـ prompt من `before_agent_start`، مع الحفاظ على `modelOverride` و`providerOverride` القديمين. وينطبق ذلك على hooks الأصلية لـ Plugin وعلى أدلة hooks التي توفّرها الحزم المدعومة. -- `plugins.entries..subagent.allowModelOverride`: وثّق هذه Plugin صراحةً لطلب تجاوزات `provider` و`model` لكل تشغيل بالنسبة إلى تشغيلات الوكلاء الفرعيين في الخلفية. -- `plugins.entries..subagent.allowedModels`: قائمة سماح اختيارية لأهداف `provider/model` القانونية الخاصة بتجاوزات الوكلاء الفرعيين الموثوق بها. استخدم `"*"` فقط عندما تريد عمدًا السماح بأي نموذج. -- `plugins.entries..config`: كائن إعدادات معرّف من Plugin (ويُتحقق منه بواسطة مخطط Plugin الأصلي لـ OpenClaw عندما يكون متاحًا). -- `plugins.entries.firecrawl.config.webFetch`: إعدادات مزوّد Firecrawl لجلب الويب. - - `apiKey`: مفتاح API لـ Firecrawl (يقبل SecretRef). ويعود احتياطيًا إلى `plugins.entries.firecrawl.config.webSearch.apiKey` أو `tools.web.fetch.firecrawl.apiKey` القديم أو متغير البيئة `FIRECRAWL_API_KEY`. - - `baseUrl`: عنوان URL الأساسي لـ Firecrawl API (الافتراضي: `https://api.firecrawl.dev`). +- `plugins.entries..hooks.allowPromptInjection`: عندما تكون قيمته `false`، يحظر core الخطاف `before_prompt_build` ويتجاهل الحقول القديمة المعدِّلة للـ prompt من `before_agent_start`، مع الحفاظ على `modelOverride` و`providerOverride` القديمين. وينطبق ذلك على خطافات Plugin الأصلية وأدلة الخطافات التي توفرها الحِزم المدعومة. +- `plugins.entries..subagent.allowModelOverride`: الثقة صراحةً بهذا Plugin لطلب تجاوزات `provider` و`model` لكل تشغيل من أجل تشغيلات الوكلاء الفرعيين في الخلفية. +- `plugins.entries..subagent.allowedModels`: قائمة سماح اختيارية لأهداف `provider/model` القياسية للتجاوزات الموثوقة للوكلاء الفرعيين. استخدم `"*"` فقط عندما تريد عمدًا السماح بأي نموذج. +- `plugins.entries..config`: كائن إعدادات يعرّفه Plugin (ويتم التحقق منه بمخطط Plugin الأصلي لـ OpenClaw عندما يكون متاحًا). +- `plugins.entries.firecrawl.config.webFetch`: إعدادات مزوّد الجلب الشبكي Firecrawl. + - `apiKey`: مفتاح API الخاص بـ Firecrawl ‏(يقبل SecretRef). ويعود إلى `plugins.entries.firecrawl.config.webSearch.apiKey`، أو القيمة القديمة `tools.web.fetch.firecrawl.apiKey`، أو متغير البيئة `FIRECRAWL_API_KEY`. + - `baseUrl`: عنوان URL الأساسي لواجهة Firecrawl API ‏(الافتراضي: `https://api.firecrawl.dev`). - `onlyMainContent`: استخراج المحتوى الرئيسي فقط من الصفحات (الافتراضي: `true`). - - `maxAgeMs`: الحد الأقصى لعمر cache بالميلي ثانية (الافتراضي: `172800000` / يومان). + - `maxAgeMs`: الحد الأقصى لعمر cache بالمللي ثانية (الافتراضي: `172800000` / يومان). - `timeoutSeconds`: مهلة طلب الكشط بالثواني (الافتراضي: `60`). -- `plugins.entries.xai.config.xSearch`: إعدادات xAI X Search ‏(بحث Grok على الويب). - - `enabled`: تفعيل مزوّد X Search. - - `model`: نموذج Grok المطلوب استخدامه للبحث (مثل `"grok-4-1-fast"`). -- `plugins.entries.memory-core.config.dreaming`: إعدادات Dreaming الخاصة بالذاكرة. راجع [Dreaming](/ar/concepts/dreaming) لمعرفة المراحل والحدود. +- `plugins.entries.xai.config.xSearch`: إعدادات xAI X Search ‏(بحث الويب في Grok). + - `enabled`: تمكين مزوّد X Search. + - `model`: نموذج Grok المستخدم للبحث (مثل `"grok-4-1-fast"`). +- `plugins.entries.memory-core.config.dreaming`: إعدادات Dreaming الخاصة بالذاكرة. راجع [Dreaming](/ar/concepts/dreaming) لمعرفة المراحل والعتبات. - `enabled`: مفتاح Dreaming الرئيسي (الافتراضي `false`). - - `frequency`: وتيرة Cron لكل عملية Dreaming كاملة (`"0 3 * * *"` افتراضيًا). - - سياسة المراحل والحدود هي تفاصيل تنفيذية (وليست مفاتيح إعدادات موجّهة للمستخدم). + - `frequency`: وتيرة Cron لكل جولة Dreaming كاملة (الافتراضي `"0 3 * * *"`). + - سياسة المراحل والعتبات هي تفاصيل تنفيذية (وليست مفاتيح إعدادات موجّهة للمستخدم). - يوجد إعداد الذاكرة الكامل في [مرجع إعدادات الذاكرة](/ar/reference/memory-config): - `agents.defaults.memorySearch.*` - `memory.backend` - `memory.citations` - `memory.qmd.*` - `plugins.entries.memory-core.config.dreaming` -- يمكن أيضًا لحزم Claude المفعّلة أن تساهم بقيم Pi افتراضية مضمنة من `settings.json`؛ ويطبّق OpenClaw هذه القيم كإعدادات وكيل منقّحة، وليس كتصحيحات خام لإعدادات OpenClaw. -- `plugins.slots.memory`: اختر معرّف Plugin الذاكرة النشطة، أو `"none"` لتعطيل Plugin الذاكرة. -- `plugins.slots.contextEngine`: اختر معرّف Plugin لمحرك السياق النشط؛ وتكون القيمة الافتراضية `"legacy"` ما لم تثبّت وتحدد محركًا آخر. -- `plugins.installs`: بيانات تعريف التثبيت التي يديرها CLI وتستخدمها `openclaw plugins update`. +- يمكن أيضًا لحِزم Claude الإضافية المفعّلة أن تسهم في القيم الافتراضية المضمنة لـ Pi من `settings.json`؛ ويطبّق OpenClaw هذه القيم كإعدادات وكيل منقحة، وليس كترقيعات خام لإعدادات OpenClaw. +- `plugins.slots.memory`: اختر معرّف Plugin الذاكرة النشط، أو `"none"` لتعطيل Plugins الذاكرة. +- `plugins.slots.contextEngine`: اختر معرّف Plugin محرك السياق النشط؛ ويكون الافتراضي `"legacy"` ما لم تثبّت وتحدد محركًا آخر. +- `plugins.installs`: بيانات تعريف التثبيت المُدارة عبر CLI التي يستخدمها `openclaw plugins update`. - تتضمن `source` و`spec` و`sourcePath` و`installPath` و`version` و`resolvedName` و`resolvedVersion` و`resolvedSpec` و`integrity` و`shasum` و`resolvedAt` و`installedAt`. - - تعامل مع `plugins.installs.*` على أنها حالة مُدارة؛ وفضّل أوامر CLI بدلًا من التعديلات اليدوية. + - تعامل مع `plugins.installs.*` باعتبارها حالة مُدارة؛ وفضّل أوامر CLI على التعديلات اليدوية. راجع [Plugins](/ar/tools/plugin). --- -## المتصفح +## Browser ```json5 { @@ -2926,8 +2938,8 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري evaluateEnabled: true, defaultProfile: "user", ssrfPolicy: { - // dangerouslyAllowPrivateNetwork: true, // فعّله فقط للوصول الموثوق إلى الشبكات الخاصة - // allowPrivateNetwork: true, // اسم بديل قديم + // dangerouslyAllowPrivateNetwork: true, // opt in only for trusted private-network access + // allowPrivateNetwork: true, // legacy alias // hostnameAllowlist: ["*.example.com", "example.com"], // allowedHostnames: ["localhost"], }, @@ -2954,32 +2966,33 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري ``` - يؤدي `evaluateEnabled: false` إلى تعطيل `act:evaluate` و`wait --fn`. -- يكون `ssrfPolicy.dangerouslyAllowPrivateNetwork` معطّلًا عندما لا يُعيَّن، لذلك يبقى تنقل المتصفح صارمًا افتراضيًا. -- عيّن `ssrfPolicy.dangerouslyAllowPrivateNetwork: true` فقط عندما تثق عمدًا في تنقل المتصفح عبر الشبكات الخاصة. -- في الوضع الصارم، تخضع نقاط نهاية ملفات تعريف CDP البعيدة (`profiles.*.cdpUrl`) لنفس حظر الشبكات الخاصة أثناء فحوصات الوصول/الاكتشاف. -- يظل `ssrfPolicy.allowPrivateNetwork` مدعومًا كاسم بديل قديم. +- يكون `ssrfPolicy.dangerouslyAllowPrivateNetwork` معطلًا عندما لا يُضبط، لذا تظل تنقلات Browser صارمة افتراضيًا. +- اضبط `ssrfPolicy.dangerouslyAllowPrivateNetwork: true` فقط عندما تثق عمدًا في تنقلات Browser داخل الشبكات الخاصة. +- في الوضع الصارم، تخضع أيضًا نقاط نهاية ملفات تعريف CDP البعيدة (`profiles.*.cdpUrl`) للحظر نفسه الخاص بالشبكات الخاصة أثناء فحوصات إمكانية الوصول/الاكتشاف. +- يظل `ssrfPolicy.allowPrivateNetwork` مدعومًا كاسم مستعار قديم. - في الوضع الصارم، استخدم `ssrfPolicy.hostnameAllowlist` و`ssrfPolicy.allowedHostnames` للاستثناءات الصريحة. -- تكون ملفات التعريف البعيدة بنمط الإرفاق فقط (start/stop/reset معطّلة). +- تكون ملفات التعريف البعيدة في وضع attach-only ‏(تعطيل البدء/الإيقاف/إعادة التعيين). - تقبل `profiles.*.cdpUrl` القيم `http://` و`https://` و`ws://` و`wss://`. - استخدم HTTP(S) عندما تريد أن يكتشف OpenClaw المسار `/json/version`؛ واستخدم WS(S) - عندما يوفّر لك مزوّدك عنوان DevTools WebSocket مباشرًا. -- تكون ملفات تعريف `existing-session` خاصة بالمستضيف فقط وتستخدم Chrome MCP بدلًا من CDP. -- يمكن لملفات تعريف `existing-session` تعيين `userDataDir` لاستهداف - ملف تعريف محدد لمتصفح مبني على Chromium مثل Brave أو Edge. + استخدم HTTP(S) عندما تريد من OpenClaw أن يكتشف `/json/version`؛ واستخدم WS(S) + عندما يوفّر لك مزوّدك عنوان URL مباشرًا لـ DevTools WebSocket. +- تستخدم ملفات تعريف `existing-session` قيمة Chrome MCP بدلًا من CDP ويمكنها الارتباط + بالمضيف المحدد أو من خلال Browser node متصل. +- يمكن لملفات تعريف `existing-session` ضبط `userDataDir` لاستهداف + ملف تعريف محدد لمتصفح قائم على Chromium مثل Brave أو Edge. - تحتفظ ملفات تعريف `existing-session` بحدود مسار Chrome MCP الحالية: - إجراءات موجّهة باللقطات/المراجع بدلًا من الاستهداف بمحددات CSS، وخطافات رفع ملف واحد، - ومن دون تجاوزات مهلة الحوارات، ومن دون `wait --load networkidle`، ومن دون - `responsebody` أو تصدير PDF أو اعتراض التنزيل أو الإجراءات الدفعية. -- تعيّن ملفات تعريف `openclaw` المحلية المُدارة تلقائيًا `cdpPort` و`cdpUrl`؛ ولا - تعيّن `cdpUrl` صراحةً إلا لـ CDP البعيد. -- ترتيب الاكتشاف التلقائي: المتصفح الافتراضي إذا كان مبنيًا على Chromium → Chrome → Brave → Edge → Chromium → Chrome Canary. + إجراءات تعتمد على snapshot/ref بدل الاستهداف بمحددات CSS، وربط رفع ملف واحد، + وعدم وجود تجاوزات لمهلة النوافذ الحوارية، وعدم وجود `wait --load networkidle`، وعدم وجود + `responsebody` أو تصدير PDF أو اعتراض التنزيلات أو الإجراءات الدفعية. +- تقوم ملفات التعريف المحلية المُدارة `openclaw` بتعيين `cdpPort` و`cdpUrl` تلقائيًا؛ ولا + تضبط `cdpUrl` صراحةً إلا لـ CDP البعيد. +- ترتيب الاكتشاف التلقائي: المتصفح الافتراضي إذا كان قائمًا على Chromium ← Chrome ← Brave ← Edge ← Chromium ← Chrome Canary. - خدمة التحكم: loopback فقط (المنفذ مشتق من `gateway.port`، والافتراضي `18791`). -- يضيف `extraArgs` رايات تشغيل إضافية إلى بدء Chromium المحلي (على سبيل المثال - `--disable-gpu` أو تحديد حجم النافذة أو رايات التصحيح). +- تضيف `extraArgs` أعلام تشغيل إضافية إلى بدء تشغيل Chromium المحلي (مثل + `--disable-gpu` أو تغيير حجم النافذة أو أعلام التصحيح). --- -## UI +## واجهة المستخدم ```json5 { @@ -2987,14 +3000,14 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري seamColor: "#FF4500", assistant: { name: "OpenClaw", - avatar: "CB", // emoji، أو نص قصير، أو عنوان URL لصورة، أو data URI + avatar: "CB", // emoji, short text, image URL, or data URI }, }, } ``` -- `seamColor`: لون التمييز لعناصر واجهة التطبيق الأصلية (مثل تلوين فقاعة Talk Mode، وما إلى ذلك). -- `assistant`: تجاوز هوية Control UI. ويعود احتياطيًا إلى هوية الوكيل النشط. +- `seamColor`: لون التمييز لواجهة التطبيق الأصلية (مثل تلوين فقاعة Talk Mode وغيرها). +- `assistant`: تجاوز هوية Control UI. ويعود إلى هوية الوكيل النشط عند عدم الضبط. --- @@ -3009,8 +3022,8 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري auth: { mode: "token", // none | token | password | trusted-proxy token: "your-token", - // password: "your-password", // أو OPENCLAW_GATEWAY_PASSWORD - // trustedProxy: { userHeader: "x-forwarded-user" }, // لوضع mode=trusted-proxy؛ راجع /gateway/trusted-proxy-auth + // password: "your-password", // or OPENCLAW_GATEWAY_PASSWORD + // trustedProxy: { userHeader: "x-forwarded-user" }, // for mode=trusted-proxy; see /gateway/trusted-proxy-auth allowTailscale: true, rateLimit: { maxAttempts: 10, @@ -3028,9 +3041,9 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري basePath: "/openclaw", // root: "dist/control-ui", // embedSandbox: "scripts", // strict | scripts | trusted - // allowExternalEmbedUrls: false, // خطير: السماح بعناوين embed خارجية مطلقة من نوع http(s) - // allowedOrigins: ["https://control.example.com"], // مطلوبة لواجهة Control UI غير loopback - // dangerouslyAllowHostHeaderOriginFallback: false, // وضع خطير للاعتماد على أصل Host-header + // allowExternalEmbedUrls: false, // dangerous: allow absolute external http(s) embed URLs + // allowedOrigins: ["https://control.example.com"], // required for non-loopback Control UI + // dangerouslyAllowHostHeaderOriginFallback: false, // dangerous Host-header origin fallback mode // allowInsecureAuth: false, // dangerouslyDisableDeviceAuth: false, }, @@ -3041,12 +3054,12 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري // password: "your-password", }, trustedProxies: ["10.0.0.1"], - // اختياري. الافتراضي false. + // Optional. Default false. allowRealIpFallback: false, tools: { - // عناصر رفض HTTP إضافية لـ /tools/invoke + // Additional /tools/invoke HTTP denies deny: ["browser"], - // إزالة أدوات من قائمة الرفض الافتراضية لـ HTTP + // Remove tools from the default HTTP deny list allow: ["gateway"], }, push: { @@ -3063,64 +3076,64 @@ scripts/sandbox-browser-setup.sh # صورة المتصفح الاختياري -- `mode`: ‏`local` (تشغيل gateway) أو `remote` (الاتصال بـ gateway بعيد). ويرفض Gateway البدء ما لم يكن `local`. -- `port`: منفذ متعدد الإرسال واحد لـ WS + HTTP. الأولوية: `--port` > `OPENCLAW_GATEWAY_PORT` > `gateway.port` > `18789`. -- `bind`: ‏`auto` أو `loopback` (الافتراضي) أو `lan` ‏(`0.0.0.0`) أو `tailnet` (عنوان IP لـ Tailscale فقط) أو `custom`. -- **الأسماء البديلة القديمة لـ bind**: استخدم قيم وضع bind في `gateway.bind` ‏(`auto` و`loopback` و`lan` و`tailnet` و`custom`)، وليس أسماء المستضيف البديلة (`0.0.0.0` و`127.0.0.1` و`localhost` و`::` و`::1`). -- **ملاحظة Docker**: يستمع bind الافتراضي `loopback` على `127.0.0.1` داخل الحاوية. ومع شبكات Docker bridge ‏(`-p 18789:18789`)، تصل الحركة إلى `eth0`، لذلك يصبح gateway غير قابل للوصول. استخدم `--network host`، أو عيّن `bind: "lan"` (أو `bind: "custom"` مع `customBindHost: "0.0.0.0"`) للاستماع على جميع الواجهات. -- **المصادقة**: مطلوبة افتراضيًا. تتطلب bind غير loopback مصادقة gateway. وعمليًا، يعني ذلك رمزًا مشتركًا/كلمة مرور مشتركة أو وكيلًا عكسيًا مدركًا للهوية مع `gateway.auth.mode: "trusted-proxy"`. ويولّد معالج الإعداد رمزًا افتراضيًا. -- إذا كان كل من `gateway.auth.token` و`gateway.auth.password` مهيأين (بما في ذلك SecretRefs)، فعيّن `gateway.auth.mode` صراحةً إلى `token` أو `password`. وتفشل تدفقات بدء التشغيل وتثبيت/إصلاح الخدمة عندما يكون كلاهما مهيأين ويكون mode غير معيّن. -- `gateway.auth.mode: "none"`: وضع صريح بلا مصادقة. استخدمه فقط مع إعدادات local loopback الموثوق بها؛ وهذا غير معروض عمدًا في مطالبات الإعداد. -- `gateway.auth.mode: "trusted-proxy"`: فوّض المصادقة إلى وكيل عكسي مدرك للهوية ووثّق رؤوس الهوية من `gateway.trustedProxies` (راجع [Trusted Proxy Auth](/ar/gateway/trusted-proxy-auth)). يتوقع هذا الوضع مصدر وكيل **غير loopback**؛ إذ لا تلبّي الوكلاء العكسية ذات loopback على المستضيف نفسه مصادقة trusted-proxy. -- `gateway.auth.allowTailscale`: عند تعيينه إلى `true`، يمكن لرؤوس هوية Tailscale Serve استيفاء مصادقة Control UI/WebSocket (بعد التحقق عبر `tailscale whois`). ولا تستخدم نقاط نهاية HTTP API مصادقة رؤوس Tailscale تلك؛ بل تتبع وضع مصادقة HTTP العادي الخاص بـ gateway بدلًا من ذلك. ويفترض هذا التدفق من دون رمز أن مستضيف gateway موثوق. وتكون القيمة الافتراضية `true` عندما يكون `tailscale.mode = "serve"`. -- `gateway.auth.rateLimit`: محدّد اختياري لمحاولات المصادقة الفاشلة. ويُطبَّق لكل IP عميل ولكل نطاق مصادقة (يُتتبَّع السر المشترك ورمز الجهاز مستقلين عن بعضهما). وتعيد المحاولات المحظورة `429` + `Retry-After`. - - في مسار Tailscale Serve غير المتزامن الخاص بـ Control UI، تُسلسل المحاولات الفاشلة لنفس `{scope, clientIp}` قبل كتابة الفشل. لذلك يمكن للمحاولات السيئة المتزامنة من العميل نفسه أن تفعّل المحدِّد عند الطلب الثاني بدلًا من أن يمر الاثنان على أنهما عدم تطابق عادي. - - تكون القيمة الافتراضية لـ `gateway.auth.rateLimit.exemptLoopback` هي `true`؛ عيّنها إلى `false` عندما تريد عمدًا تطبيق تحديد المعدل على حركة localhost أيضًا (لإعدادات الاختبار أو عمليات نشر الوكيل الصارمة). -- تُخفَّض دائمًا محاولات مصادقة WS ذات أصل المتصفح مع تعطيل إعفاء loopback (كإجراء دفاعي إضافي ضد الهجمات بالقوة الغاشمة على localhost انطلاقًا من المتصفح). -- على loopback، تُعزَل حالات القفل ذات الأصل من المتصفح بحسب قيمة `Origin` - المطَبَّعة، بحيث لا تؤدي الإخفاقات المتكررة من أصل localhost واحد تلقائيًا +- `mode`: ‏`local` ‏(تشغيل Gateway) أو `remote` ‏(الاتصال بـ Gateway بعيد). ويرفض Gateway البدء ما لم يكن الوضع `local`. +- `port`: منفذ مضاعف واحد لكل من WS + HTTP. الأسبقية: `--port` > `OPENCLAW_GATEWAY_PORT` > `gateway.port` > `18789`. +- `bind`: ‏`auto` أو `loopback` ‏(الافتراضي) أو `lan` ‏(`0.0.0.0`) أو `tailnet` ‏(عنوان IP الخاص بـ Tailscale فقط) أو `custom`. +- **الأسماء المستعارة القديمة للربط**: استخدم قيم وضع الربط في `gateway.bind` ‏(`auto` و`loopback` و`lan` و`tailnet` و`custom`) وليس الأسماء المستعارة للمضيف (`0.0.0.0` و`127.0.0.1` و`localhost` و`::` و`::1`). +- **ملاحظة Docker**: يؤدي الربط الافتراضي `loopback` إلى الاستماع على `127.0.0.1` داخل الحاوية. ومع Docker bridge networking ‏(`-p 18789:18789`)، تصل الحركة إلى `eth0`، ولذلك يصبح Gateway غير قابل للوصول. استخدم `--network host`، أو اضبط `bind: "lan"` ‏(أو `bind: "custom"` مع `customBindHost: "0.0.0.0"`) للاستماع على جميع الواجهات. +- **المصادقة**: مطلوبة افتراضيًا. تتطلب الارتباطات غير loopback مصادقة Gateway. وعمليًا، يعني ذلك رمزًا/كلمة مرور مشتركة أو reverse proxy واعيًا بالهوية مع `gateway.auth.mode: "trusted-proxy"`. ويولّد معالج onboarding رمزًا مميزًا افتراضيًا. +- إذا كان كل من `gateway.auth.token` و`gateway.auth.password` مكوّنين (بما في ذلك SecretRefs)، فاضبط `gateway.auth.mode` صراحةً على `token` أو `password`. وتفشل تدفقات بدء التشغيل وتثبيت/إصلاح الخدمة عندما يكون كلاهما مكوّنًا ويكون الوضع غير مضبوط. +- `gateway.auth.mode: "none"`: وضع صريح بلا مصادقة. استخدمه فقط مع إعدادات loopback محلية موثوقة؛ وهذا الخيار غير معروض عمدًا في مطالبات onboarding. +- `gateway.auth.mode: "trusted-proxy"`: فوّض المصادقة إلى reverse proxy واعٍ بالهوية واثق من ترويسات الهوية القادمة من `gateway.trustedProxies` ‏(راجع [Trusted Proxy Auth](/ar/gateway/trusted-proxy-auth)). ويتوقع هذا الوضع مصدر proxy **غير loopback**؛ ولا تستوفي reverse proxies المحلية على المضيف نفسه عبر loopback متطلبات trusted-proxy auth. +- `gateway.auth.allowTailscale`: عندما تكون قيمته `true`، يمكن لترويسات هوية Tailscale Serve أن تستوفي مصادقة Control UI/WebSocket ‏(بعد التحقق عبر `tailscale whois`). ولا تستخدم نقاط نهاية HTTP API هذه المصادقة الرأسية الخاصة بـ Tailscale؛ بل تتبع وضع مصادقة HTTP العادي الخاص بـ Gateway. ويفترض هذا التدفق من دون رمز مميز أن مضيف Gateway موثوق. ويكون افتراضيًا `true` عندما تكون `tailscale.mode = "serve"`. +- `gateway.auth.rateLimit`: محدِّد اختياري لإخفاقات المصادقة. ويُطبَّق لكل IP عميل ولكل نطاق مصادقة (يتم تتبع السر المشترك ورمز الجهاز بشكل مستقل). وتعيد المحاولات المحظورة القيمة `429` + `Retry-After`. + - في مسار Control UI غير المتزامن الخاص بـ Tailscale Serve، تُسلسَل المحاولات الفاشلة للقيمة نفسها `{scope, clientIp}` قبل كتابة الإخفاق. ولذلك يمكن للمحاولات السيئة المتزامنة من العميل نفسه أن تفعل المحدِّد في الطلب الثاني بدل أن يمر كلاهما كحالات عدم تطابق عادية. + - تكون القيمة الافتراضية لـ `gateway.auth.rateLimit.exemptLoopback` هي `true`؛ اضبطها على `false` عندما تريد عمدًا تطبيق التحديد على حركة localhost أيضًا (لاختبارات أو نشرات proxy صارمة). +- تخضع محاولات مصادقة WS ذات أصل Browser دائمًا للتقييد مع تعطيل إعفاء loopback (دفاعًا إضافيًا ضد هجمات brute force من Browser على localhost). +- على loopback، تُعزل حالات القفل تلك الناتجة عن أصول Browser حسب قيمة `Origin` + الموحّدة، بحيث لا تؤدي الإخفاقات المتكررة من أصل localhost واحد تلقائيًا إلى قفل أصل مختلف. -- `tailscale.mode`: ‏`serve` (tailnet فقط، مع bind loopback) أو `funnel` (عام، ويتطلب مصادقة). -- `controlUi.allowedOrigins`: قائمة سماح صريحة لأصول المتصفح من أجل اتصالات WebSocket بـ Gateway. وهي مطلوبة عندما يُتوقع وجود عملاء متصفح من أصول غير loopback. -- `controlUi.dangerouslyAllowHostHeaderOriginFallback`: وضع خطير يفعّل الرجوع إلى أصل Host-header لعمليات النشر التي تعتمد عمدًا على سياسة أصل Host-header. -- `remote.transport`: ‏`ssh` (الافتراضي) أو `direct` ‏(ws/wss). وبالنسبة إلى `direct`، يجب أن يكون `remote.url` من النوع `ws://` أو `wss://`. -- `OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1`: تجاوز طارئ من جهة العميل يسمح باستخدام `ws://` النصي الصريح مع عناوين IP موثوق بها على الشبكات الخاصة؛ وتبقى القيمة الافتراضية مقتصرة على loopback فقط بالنسبة إلى الاتصالات النصية الصريحة. -- `gateway.remote.token` / `.password`: حقول بيانات اعتماد للعميل البعيد. وهي لا تهيّئ مصادقة gateway بحد ذاتها. -- `gateway.push.apns.relay.baseUrl`: عنوان HTTPS الأساسي للوكيل الخارجي APNs relay الذي تستخدمه إصدارات iOS الرسمية/TestFlight بعد أن تنشر تسجيلات مدعومة بالوكيل إلى gateway. ويجب أن يطابق هذا العنوان عنوان relay المضمّن في نسخة iOS. -- `gateway.push.apns.relay.timeoutMs`: مهلة الإرسال من gateway إلى relay بالميلي ثانية. الافتراضي `10000`. -- تُفوَّض التسجيلات المدعومة بالوكيل إلى هوية gateway محددة. ويجلب تطبيق iOS المقترن `gateway.identity.get`، ويضمّن تلك الهوية في تسجيل relay، ويمرّر صلاحية إرسال ضمن نطاق التسجيل إلى gateway. ولا يمكن لـ gateway آخر إعادة استخدام ذلك التسجيل المخزَّن. -- `OPENCLAW_APNS_RELAY_BASE_URL` / `OPENCLAW_APNS_RELAY_TIMEOUT_MS`: تجاوزات بيئة مؤقتة لإعداد relay المذكور أعلاه. -- `OPENCLAW_APNS_RELAY_ALLOW_HTTP=true`: مخرج تطويري فقط لعناوين relay من نوع HTTP على loopback. ويجب أن تبقى عناوين relay الإنتاجية على HTTPS. -- `gateway.channelHealthCheckMinutes`: فترة مراقبة صحة القنوات بالدقائق. عيّن القيمة `0` لتعطيل إعادة التشغيل الخاصة بمراقبة الصحة عالميًا. الافتراضي: `5`. -- `gateway.channelStaleEventThresholdMinutes`: حد المقبس القديم بالدقائق. اجعل هذه القيمة أكبر من أو مساوية لـ `gateway.channelHealthCheckMinutes`. الافتراضي: `30`. -- `gateway.channelMaxRestartsPerHour`: الحد الأقصى لإعادات التشغيل بسبب مراقبة الصحة لكل قناة/حساب خلال ساعة متحركة. الافتراضي: `10`. -- `channels..healthMonitor.enabled`: تعطيل اختياري لكل قناة لإعادات التشغيل الخاصة بمراقبة الصحة مع إبقاء المراقب العام مفعّلًا. -- `channels..accounts..healthMonitor.enabled`: تجاوز لكل حساب في القنوات متعددة الحسابات. وعند تعيينه، تكون له الأولوية على التجاوز على مستوى القناة. -- يمكن لمسارات استدعاء gateway المحلية استخدام `gateway.remote.*` كاحتياطي فقط عندما لا تكون `gateway.auth.*` معيّنة. -- إذا كان `gateway.auth.token` / `gateway.auth.password` مهيأين صراحةً عبر SecretRef وكانا غير محلولين، يفشل الحل بإغلاق افتراضي (من دون تمويه عبر احتياطي بعيد). -- `trustedProxies`: عناوين IP للوكلاء العكسيين الذين ينهون TLS أو يحقنون رؤوس العميل المُحوَّلة. أدرج فقط الوكلاء الذين تتحكم بهم. وتظل إدخالات loopback صالحة لإعدادات الاكتشاف المحلي/الوكيل على المستضيف نفسه (مثل Tailscale Serve أو وكيل عكسي محلي)، لكنها **لا** تجعل طلبات loopback مؤهلة لـ `gateway.auth.mode: "trusted-proxy"`. -- `allowRealIpFallback`: عند تعيينه إلى `true`، يقبل gateway القيمة `X-Real-IP` إذا كانت `X-Forwarded-For` مفقودة. الافتراضي `false` لسلوك الإغلاق الافتراضي. -- `gateway.tools.deny`: أسماء أدوات إضافية محظورة لطلب HTTP `POST /tools/invoke` (تمتد فوق قائمة الرفض الافتراضية). -- `gateway.tools.allow`: إزالة أسماء أدوات من قائمة الرفض الافتراضية لـ HTTP. +- `tailscale.mode`: ‏`serve` ‏(tailnet فقط، مع ربط loopback) أو `funnel` ‏(عام، ويتطلب مصادقة). +- `controlUi.allowedOrigins`: قائمة سماح صريحة لأصول Browser من أجل اتصالات Gateway WebSocket. وهي مطلوبة عندما يُتوقع عملاء Browser من أصول غير loopback. +- `controlUi.dangerouslyAllowHostHeaderOriginFallback`: وضع خطير يفعّل الرجوع إلى أصل Host-header في النشرات التي تعتمد عمدًا على سياسة أصل Host-header. +- `remote.transport`: ‏`ssh` ‏(الافتراضي) أو `direct` ‏(ws/wss). وبالنسبة إلى `direct`، يجب أن تكون `remote.url` من النوع `ws://` أو `wss://`. +- `OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1`: تجاوز طارئ من جهة العميل يسمح باتصالات `ws://` النصية الواضحة إلى عناوين IP خاصة موثوقة؛ مع بقاء الافتراضي مقصورًا على loopback بالنسبة إلى النص الواضح. +- `gateway.remote.token` / `.password` هما حقلا بيانات اعتماد للعميل البعيد. وهما لا يهيئان مصادقة Gateway بحد ذاتهما. +- `gateway.push.apns.relay.baseUrl`: عنوان HTTPS الأساسي للـ APNs relay الخارجي الذي تستخدمه إصدارات iOS الرسمية/TestFlight بعد أن تنشر تسجيلات مدعومة بالـ relay إلى Gateway. ويجب أن يطابق هذا العنوان عنوان relay المضمّن في بناء iOS. +- `gateway.push.apns.relay.timeoutMs`: مهلة الإرسال من Gateway إلى relay بالمللي ثانية. والافتراضي `10000`. +- تُفوَّض التسجيلات المدعومة بالـ relay إلى هوية Gateway محددة. ويجلب تطبيق iOS المقترن القيمة `gateway.identity.get`، ويضمّن تلك الهوية في تسجيل relay، ويمرر صلاحية إرسال ضمن نطاق التسجيل إلى Gateway. ولا يمكن لـ Gateway آخر إعادة استخدام ذلك التسجيل المخزّن. +- `OPENCLAW_APNS_RELAY_BASE_URL` / `OPENCLAW_APNS_RELAY_TIMEOUT_MS`: تجاوزات بيئية مؤقتة لإعداد relay أعلاه. +- `OPENCLAW_APNS_RELAY_ALLOW_HTTP=true`: منفذ هروب مخصص للتطوير فقط لعناوين relay المحلية عبر HTTP على loopback. ويجب أن تظل عناوين relay الإنتاجية على HTTPS. +- `gateway.channelHealthCheckMinutes`: فترة مراقبة صحة القنوات بالدقائق. اضبطها على `0` لتعطيل إعادة تشغيل مراقب الصحة عالميًا. الافتراضي: `5`. +- `gateway.channelStaleEventThresholdMinutes`: عتبة المقبس الراكد بالدقائق. اجعلها أكبر من أو مساوية لـ `gateway.channelHealthCheckMinutes`. الافتراضي: `30`. +- `gateway.channelMaxRestartsPerHour`: الحد الأقصى لإعادات تشغيل مراقب الصحة لكل قناة/حساب خلال ساعة متحركة. الافتراضي: `10`. +- `channels..healthMonitor.enabled`: إلغاء اشتراك لكل قناة في إعادات تشغيل مراقب الصحة مع الإبقاء على المراقب العام مفعّلًا. +- `channels..accounts..healthMonitor.enabled`: تجاوز لكل حساب للقنوات متعددة الحسابات. وعند ضبطه، تكون له أولوية على التجاوز على مستوى القناة. +- يمكن لمسارات استدعاء Gateway المحلية استخدام `gateway.remote.*` كرجوع احتياطي فقط عندما تكون `gateway.auth.*` غير مضبوطة. +- إذا كانت `gateway.auth.token` / `gateway.auth.password` مكوّنة صراحةً عبر SecretRef وغير محلولة، يفشل الحل بإغلاق آمن (من دون أي رجوع احتياطي بعيد يخفي المشكلة). +- `trustedProxies`: عناوين IP الخاصة بالـ reverse proxy التي تنهي TLS أو تحقن ترويسات العميل المُمرَّر. أدرج فقط الـ proxies التي تتحكم بها. وتظل إدخالات loopback صالحة لإعدادات proxy على المضيف نفسه/اكتشاف محلي (مثل Tailscale Serve أو reverse proxy محلي)، لكنها **لا** تجعل طلبات loopback مؤهلة لـ `gateway.auth.mode: "trusted-proxy"`. +- `allowRealIpFallback`: عندما تكون قيمته `true`، يقبل Gateway الترويسة `X-Real-IP` إذا كانت `X-Forwarded-For` مفقودة. الافتراضي `false` لسلوك إغلاق آمن. +- `gateway.tools.deny`: أسماء أدوات إضافية محظورة لـ HTTP ‏`POST /tools/invoke` ‏(توسّع قائمة المنع الافتراضية). +- `gateway.tools.allow`: تزيل أسماء أدوات من قائمة المنع الافتراضية لـ HTTP. ### نقاط النهاية المتوافقة مع OpenAI -- Chat Completions: معطّلة افتراضيًا. فعّلها عبر `gateway.http.endpoints.chatCompletions.enabled: true`. +- Chat Completions: معطلة افتراضيًا. فعّلها باستخدام `gateway.http.endpoints.chatCompletions.enabled: true`. - Responses API: ‏`gateway.http.endpoints.responses.enabled`. -- تقوية إدخال URL في Responses: +- تقوية إدخال عناوين URL في Responses: - `gateway.http.endpoints.responses.maxUrlParts` - `gateway.http.endpoints.responses.files.urlAllowlist` - `gateway.http.endpoints.responses.images.urlAllowlist` - تُعامَل قوائم السماح الفارغة على أنها غير معيّنة؛ استخدم `gateway.http.endpoints.responses.files.allowUrl=false` - و/أو `gateway.http.endpoints.responses.images.allowUrl=false` لتعطيل جلب URL. -- رأس تقوية اختياري للاستجابة: - - `gateway.http.securityHeaders.strictTransportSecurity` (عيّنه فقط لأصول HTTPS التي تتحكم بها؛ راجع [Trusted Proxy Auth](/ar/gateway/trusted-proxy-auth#tls-termination-and-hsts)) + تُعامل قوائم السماح الفارغة كأنها غير مضبوطة؛ استخدم `gateway.http.endpoints.responses.files.allowUrl=false` + و/أو `gateway.http.endpoints.responses.images.allowUrl=false` لتعطيل جلب عناوين URL. +- ترويسة تقوية اختيارية للاستجابة: + - `gateway.http.securityHeaders.strictTransportSecurity` ‏(اضبطها فقط لأصول HTTPS التي تتحكم بها؛ راجع [Trusted Proxy Auth](/ar/gateway/trusted-proxy-auth#tls-termination-and-hsts)) -### العزل بين النسخ المتعددة +### العزل متعدد النسخ -شغّل عدة Gateways على مستضيف واحد مع منافذ وأدلة حالة فريدة: +شغّل عدة Gateways على مضيف واحد باستخدام منافذ وأدلة حالة فريدة: ```bash OPENCLAW_CONFIG_PATH=~/.openclaw/a.json \ @@ -3128,7 +3141,7 @@ OPENCLAW_STATE_DIR=~/.openclaw-a \ openclaw gateway --port 19001 ``` -رايات مناسبة: `--dev` (يستخدم `~/.openclaw-dev` + المنفذ `19001`)، و`--profile ` (يستخدم `~/.openclaw-`). +أعلام مريحة: `--dev` ‏(يستخدم `~/.openclaw-dev` + المنفذ `19001`)، و`--profile ` ‏(يستخدم `~/.openclaw-`). راجع [Multiple Gateways](/ar/gateway/multiple-gateways). @@ -3148,11 +3161,11 @@ openclaw gateway --port 19001 } ``` -- `enabled`: يفعّل إنهاء TLS عند مستمع gateway ‏(HTTPS/WSS) (الافتراضي: `false`). -- `autoGenerate`: يولّد تلقائيًا زوج cert/key محليًا موقّعًا ذاتيًا عندما لا تكون الملفات الصريحة مهيأة؛ للاستخدام local/dev فقط. +- `enabled`: يفعّل إنهاء TLS عند مستمع Gateway ‏(HTTPS/WSS) ‏(الافتراضي: `false`). +- `autoGenerate`: يولّد تلقائيًا زوج شهادة/مفتاح محليًا ذاتي التوقيع عندما لا تكون ملفات صريحة مكوّنة؛ للاستخدام المحلي/التطويري فقط. - `certPath`: مسار نظام الملفات إلى ملف شهادة TLS. -- `keyPath`: مسار نظام الملفات إلى ملف المفتاح الخاص لـ TLS؛ ويجب إبقاء الوصول إليه مقيّدًا. -- `caPath`: مسار اختياري إلى حزمة CA من أجل التحقق من العميل أو سلاسل الثقة المخصصة. +- `keyPath`: مسار نظام الملفات إلى ملف المفتاح الخاص لـ TLS؛ ويجب تقييد الأذونات عليه. +- `caPath`: مسار اختياري لحزمة CA للتحقق من العميل أو لسلاسل الثقة المخصصة. ### `gateway.reload` @@ -3168,13 +3181,13 @@ openclaw gateway --port 19001 } ``` -- `mode`: يتحكم في كيفية تطبيق تعديلات الإعدادات أثناء التشغيل. +- `mode`: يتحكم في كيفية تطبيق تعديلات الإعدادات وقت التشغيل. - `"off"`: تجاهل التعديلات الحية؛ وتتطلب التغييرات إعادة تشغيل صريحة. - - `"restart"`: أعد تشغيل عملية gateway دائمًا عند تغيير الإعدادات. - - `"hot"`: طبّق التغييرات داخل العملية من دون إعادة تشغيل. - - `"hybrid"` (الافتراضي): حاول أولًا إعادة التحميل الحية؛ وعُد إلى إعادة التشغيل إذا لزم الأمر. -- `debounceMs`: نافذة إزالة ارتداد بالميلي ثانية قبل تطبيق تغييرات الإعدادات (عدد صحيح غير سالب). -- `deferralTimeoutMs`: الحد الأقصى بالميلي ثانية لانتظار العمليات الجارية قبل فرض إعادة التشغيل (الافتراضي: `300000` = 5 دقائق). + - `"restart"`: إعادة تشغيل عملية Gateway دائمًا عند تغيير الإعدادات. + - `"hot"`: تطبيق التغييرات داخل العملية من دون إعادة تشغيل. + - `"hybrid"` ‏(الافتراضي): جرّب hot reload أولًا؛ ثم ارجع إلى إعادة التشغيل إذا لزم الأمر. +- `debounceMs`: نافذة debounce بالمللي ثانية قبل تطبيق تغييرات الإعدادات (عدد صحيح غير سالب). +- `deferralTimeoutMs`: الحد الأقصى للوقت بالمللي ثانية لانتظار العمليات الجارية قبل فرض إعادة التشغيل (الافتراضي: `300000` = 5 دقائق). --- @@ -3212,36 +3225,36 @@ openclaw gateway --port 19001 ``` المصادقة: `Authorization: Bearer ` أو `x-openclaw-token: `. -تُرفض رموز hook في سلسلة الاستعلام. +تُرفض رموز Hooks المميّزة في سلسلة الاستعلام. ملاحظات التحقق والسلامة: -- يتطلب `hooks.enabled=true` قيمة غير فارغة لـ `hooks.token`. +- يتطلب `hooks.enabled=true` قيمة `hooks.token` غير فارغة. - يجب أن تكون `hooks.token` **مختلفة** عن `gateway.auth.token`؛ ويُرفض إعادة استخدام رمز Gateway. -- لا يمكن أن يكون `hooks.path` مساويًا لـ `/`؛ استخدم مسارًا فرعيًا مخصصًا مثل `/hooks`. -- إذا كان `hooks.allowRequestSessionKey=true`، فقيد `hooks.allowedSessionKeyPrefixes` (مثل `["hook:"]`). +- لا يمكن أن تكون `hooks.path` مساوية لـ `/`؛ استخدم مسارًا فرعيًا مخصصًا مثل `/hooks`. +- إذا كانت `hooks.allowRequestSessionKey=true`، فقيّد `hooks.allowedSessionKeyPrefixes` (على سبيل المثال `["hook:"]`). **نقاط النهاية:** - `POST /hooks/wake` → ‏`{ text, mode?: "now"|"next-heartbeat" }` - `POST /hooks/agent` → ‏`{ message, name?, agentId?, sessionKey?, wakeMode?, deliver?, channel?, to?, model?, thinking?, timeoutSeconds? }` - - لا تُقبل `sessionKey` من حمولة الطلب إلا عندما يكون `hooks.allowRequestSessionKey=true` (الافتراضي: `false`). -- `POST /hooks/` → يُحل عبر `hooks.mappings` + - لا تُقبل `sessionKey` من حمولة الطلب إلا عندما تكون `hooks.allowRequestSessionKey=true` ‏(الافتراضي: `false`). +- `POST /hooks/` → تُحل عبر `hooks.mappings` -- يطابق `match.path` المسار الفرعي بعد `/hooks` (مثل `/hooks/gmail` ← `gmail`). -- يطابق `match.source` حقلًا من الحمولة بالنسبة إلى المسارات العامة. +- تطابق `match.path` المسار الفرعي بعد `/hooks` ‏(مثل `/hooks/gmail` ← `gmail`). +- تطابق `match.source` حقلاً من الحمولة للمسارات العامة. - تقرأ القوالب مثل `{{messages[0].subject}}` من الحمولة. -- يمكن لـ `transform` الإشارة إلى وحدة JS/TS تُرجع إجراء hook. - - يجب أن يكون `transform.module` مسارًا نسبيًا ويبقى ضمن `hooks.transformsDir` (وتُرفض المسارات المطلقة وعمليات العبور). -- يوجّه `agentId` إلى وكيل محدد؛ وتعود المعرّفات غير المعروفة إلى الوكيل الافتراضي. -- `allowedAgentIds`: يقيّد التوجيه الصريح (`*` أو الحذف = السماح للجميع، و`[]` = رفض الجميع). -- `defaultSessionKey`: مفتاح جلسة ثابت اختياري لتشغيلات hook agent التي لا تحتوي على `sessionKey` صريح. -- `allowRequestSessionKey`: يسمح لمستدعي `/hooks/agent` بتعيين `sessionKey` (الافتراضي: `false`). +- يمكن أن يشير `transform` إلى وحدة JS/TS تُرجع إجراء hook. + - يجب أن يكون `transform.module` مسارًا نسبيًا وأن يبقى ضمن `hooks.transformsDir` (وتُرفض المسارات المطلقة وعمليات التنقل عبر المسارات). +- يوجّه `agentId` إلى وكيل محدد؛ وتعود المعرّفات غير المعروفة إلى الافتراضي. +- `allowedAgentIds`: يقيّد التوجيه الصريح (`*` أو الحذف = السماح للجميع، و`[]` = المنع للجميع). +- `defaultSessionKey`: مفتاح جلسة ثابت اختياري لتشغيلات وكيل hook من دون `sessionKey` صريح. +- `allowRequestSessionKey`: السماح لمستدعي `/hooks/agent` بضبط `sessionKey` ‏(الافتراضي: `false`). - `allowedSessionKeyPrefixes`: قائمة سماح اختيارية للبادئات الخاصة بقيم `sessionKey` الصريحة (الطلب + التعيين)، مثل `["hook:"]`. -- يؤدي `deliver: true` إلى إرسال الرد النهائي إلى قناة؛ وتكون القيمة الافتراضية لـ `channel` هي `last`. -- يتجاوز `model` قيمة LLM لهذا التشغيل الخاص بـ hook (ويجب أن يكون مسموحًا به إذا كان فهرس النماذج معيّنًا). +- يؤدي `deliver: true` إلى إرسال الرد النهائي إلى قناة؛ ويكون `channel` افتراضيًا `last`. +- يتجاوز `model` قيمة LLM لهذا التشغيل الخاص بـ hook ‏(ويجب أن يكون مسموحًا به إذا كان فهرس النماذج مضبوطًا). @@ -3268,35 +3281,35 @@ openclaw gateway --port 19001 } ``` -- يبدأ Gateway تلقائيًا تشغيل `gog gmail watch serve` عند الإقلاع عندما يكون مهيأً. عيّن `OPENCLAW_SKIP_GMAIL_WATCHER=1` لتعطيله. -- لا تشغّل `gog gmail watch serve` منفصلًا إلى جانب Gateway. +- يبدأ Gateway تلقائيًا `gog gmail watch serve` عند الإقلاع عندما يكون مكوّنًا. اضبط `OPENCLAW_SKIP_GMAIL_WATCHER=1` للتعطيل. +- لا تشغّل نسخة منفصلة من `gog gmail watch serve` إلى جانب Gateway. --- -## مستضيف Canvas +## Canvas host ```json5 { canvasHost: { root: "~/.openclaw/workspace/canvas", liveReload: true, - // enabled: false, // أو OPENCLAW_SKIP_CANVAS_HOST=1 + // enabled: false, // or OPENCLAW_SKIP_CANVAS_HOST=1 }, } ``` -- يقدّم HTML/CSS/JS القابلة للتعديل من الوكيل وA2UI عبر HTTP تحت منفذ Gateway: +- يقدّم HTML/CSS/JS وA2UI القابلة للتحرير من الوكيل عبر HTTP تحت منفذ Gateway: - `http://:/__openclaw__/canvas/` - `http://:/__openclaw__/a2ui/` -- محلي فقط: أبقِ `gateway.bind: "loopback"` (الافتراضي). -- في bind غير loopback: تتطلب مسارات canvas مصادقة Gateway (token/password/trusted-proxy)، مثل بقية أسطح HTTP في Gateway. -- لا ترسل WebViews الخاصة بـ Node عادةً رؤوس مصادقة؛ وبعد إقران Node واتصالها، يعلن Gateway عناوين capability URL ضمن نطاق node للوصول إلى canvas/A2UI. -- ترتبط عناوين capability URL بجلسة WS النشطة الخاصة بـ node وتنتهي بسرعة. ولا يُستخدم احتياطي يعتمد على IP. -- يحقن عميل إعادة التحميل الحية في HTML المقدّم. -- ينشئ تلقائيًا ملف `index.html` ابتدائيًا عند الفراغ. -- كما يقدّم A2UI عند `/__openclaw__/a2ui/`. +- محلي فقط: أبقِ `gateway.bind: "loopback"` ‏(الافتراضي). +- الارتباطات غير loopback: تتطلب مسارات canvas مصادقة Gateway ‏(token/password/trusted-proxy)، مثل أسطح HTTP الأخرى الخاصة بـ Gateway. +- لا ترسل Node WebViews عادةً ترويسات المصادقة؛ وبعد اقتران node واتصاله، يعلن Gateway عناوين URL لقدرات ضمن نطاق node للوصول إلى canvas/A2UI. +- تكون عناوين URL الخاصة بالقدرات مرتبطة بجلسة WS النشطة الخاصة بـ node وتنتهي صلاحيتها بسرعة. ولا يُستخدم رجوع احتياطي قائم على IP. +- يحقن عميل live-reload داخل HTML المقدَّم. +- ينشئ تلقائيًا ملف `index.html` ابتدائيًا عندما يكون فارغًا. +- كما يقدّم A2UI على `/__openclaw__/a2ui/`. - تتطلب التغييرات إعادة تشغيل gateway. -- عطّل إعادة التحميل الحية بالنسبة إلى الأدلة الكبيرة أو أخطاء `EMFILE`. +- عطّل live reload للأدلة الكبيرة أو عند حدوث أخطاء `EMFILE`. --- @@ -3314,11 +3327,11 @@ openclaw gateway --port 19001 } ``` -- `minimal` (الافتراضي): يحذف `cliPath` + `sshPort` من سجلات TXT. +- `minimal` ‏(الافتراضي): يحذف `cliPath` + `sshPort` من سجلات TXT. - `full`: يتضمن `cliPath` + `sshPort`. -- يكون اسم المستضيف افتراضيًا `openclaw`. ويمكن تجاوزه عبر `OPENCLAW_MDNS_HOSTNAME`. +- يكون اسم المضيف افتراضيًا `openclaw`. وتجاوزه باستخدام `OPENCLAW_MDNS_HOSTNAME`. -### النطاق الواسع (DNS-SD) +### النطاق الواسع ‏(DNS-SD) ```json5 { @@ -3328,7 +3341,7 @@ openclaw gateway --port 19001 } ``` -يكتب منطقة unicast DNS-SD تحت `~/.openclaw/dns/`. وبالنسبة إلى الاكتشاف عبر الشبكات، اجمعه مع خادم DNS ‏(ويُوصى بـ CoreDNS) + ‏Tailscale split DNS. +يكتب منطقة DNS-SD أحادية الإرسال ضمن `~/.openclaw/dns/`. ولاكتشاف عبر الشبكات، اقترنه بخادم DNS ‏(يوصى بـ CoreDNS) + Tailscale split DNS. الإعداد: `openclaw dns setup --apply`. @@ -3336,7 +3349,7 @@ openclaw gateway --port 19001 ## البيئة -### `env` (متغيرات بيئة مضمنة) +### `env` ‏(متغيرات البيئة المضمنة) ```json5 { @@ -3353,12 +3366,12 @@ openclaw gateway --port 19001 } ``` -- لا تُطبَّق متغيرات البيئة المضمنة إلا إذا كانت بيئة العملية تفتقد المفتاح. -- ملفات `.env`: ملف `.env` في CWD + الملف `~/.openclaw/.env` (ولا يتجاوز أي منهما المتغيرات الموجودة). -- `shellEnv`: يستورد المفاتيح المتوقعة المفقودة من ملف تعريف صدفة تسجيل الدخول لديك. -- راجع [Environment](/ar/help/environment) لمعرفة الأولوية الكاملة. +- لا تُطبَّق متغيرات البيئة المضمنة إلا إذا كانت بيئة العملية تفتقد ذلك المفتاح. +- ملفات `.env`: ‏`.env` في CWD + ‏`~/.openclaw/.env` ‏(ولا يتجاوز أي منهما المتغيرات الموجودة). +- `shellEnv`: يستورد المفاتيح المتوقعة المفقودة من ملف تعريف صدفة تسجيل الدخول. +- راجع [Environment](/ar/help/environment) لمعرفة ترتيب الأسبقية الكامل. -### الاستبدال بمتغيرات البيئة +### استبدال متغيرات البيئة أشر إلى متغيرات البيئة في أي سلسلة إعدادات باستخدام `${VAR_NAME}`: @@ -3370,20 +3383,20 @@ openclaw gateway --port 19001 } ``` -- تُطابق الأسماء المكتوبة بأحرف كبيرة فقط: `[A-Z_][A-Z0-9_]*`. -- تؤدي المتغيرات المفقودة/الفارغة إلى خطأ عند تحميل الإعدادات. -- استخدم `$${VAR}` لتمثيل `${VAR}` حرفيًا. +- لا تتم مطابقة إلا الأسماء المكتوبة بأحرف كبيرة: `[A-Z_][A-Z0-9_]*`. +- تؤدي المتغيرات المفقودة/الفارغة إلى رمي خطأ عند تحميل الإعدادات. +- استخدم `$${VAR}` للهروب إلى `${VAR}` حرفيًا. - يعمل ذلك مع `$include`. --- ## الأسرار -تكون مراجع الأسرار إضافية: ما تزال القيم النصية الصريحة تعمل. +مراجع الأسرار إضافية: ما تزال القيم النصية الصريحة تعمل. ### `SecretRef` -استخدم شكل كائن واحد: +استخدم شكل كائن واحدًا: ```json5 { source: "env" | "file" | "exec", provider: "default", id: "..." } @@ -3392,24 +3405,24 @@ openclaw gateway --port 19001 التحقق: - نمط `provider`: ‏`^[a-z][a-z0-9_-]{0,63}$` -- نمط `id` عند `source: "env"`: ‏`^[A-Z][A-Z0-9_]{0,127}$` +- نمط `id` مع `source: "env"`: ‏`^[A-Z][A-Z0-9_]{0,127}$` - `source: "file"` مع `id`: مؤشر JSON مطلق (مثل `"/providers/openai/apiKey"`) -- نمط `id` عند `source: "exec"`: ‏`^[A-Za-z0-9][A-Za-z0-9._:/-]{0,255}$` -- يجب ألا تحتوي معرّفات `source: "exec"` على مقاطع مسار `.` أو `..` مفصولة بشرطة مائلة (مثل `a/../b` وهو مرفوض) +- نمط `id` مع `source: "exec"`: ‏`^[A-Za-z0-9][A-Za-z0-9._:/-]{0,255}$` +- يجب ألا تحتوي معرّفات `source: "exec"` على مقاطع مسار مفصولة بشرطات مائلة من نوع `.` أو `..` ‏(على سبيل المثال يُرفض `a/../b`) ### سطح بيانات الاعتماد المدعوم -- المصفوفة القانونية: [SecretRef Credential Surface](/ar/reference/secretref-credential-surface) +- المصفوفة القياسية: [سطح بيانات اعتماد SecretRef](/ar/reference/secretref-credential-surface) - تستهدف `secrets apply` مسارات بيانات الاعتماد المدعومة في `openclaw.json`. -- تُدرج مراجع `auth-profiles.json` في الحل أثناء التشغيل وفي تغطية التدقيق. +- تُدرج مراجع `auth-profiles.json` في حل وقت التشغيل وفي تغطية التدقيق. -### إعداد موفري الأسرار +### إعداد مزوّدي الأسرار ```json5 { secrets: { providers: { - default: { source: "env" }, // موفّر env صريح اختياري + default: { source: "env" }, // optional explicit env provider filemain: { source: "file", path: "~/.openclaw/secrets.json", @@ -3433,13 +3446,13 @@ openclaw gateway --port 19001 ملاحظات: -- يدعم موفّر `file` الوضعين `mode: "json"` و`mode: "singleValue"` (ويجب أن يكون `id` مساويًا لـ `"value"` في وضع singleValue). -- يتطلب موفّر `exec` مسار `command` مطلقًا ويستخدم حمولات البروتوكول على stdin/stdout. -- تُرفض مسارات الأوامر الرمزية افتراضيًا. عيّن `allowSymlinkCommand: true` للسماح بمسارات الروابط الرمزية مع التحقق من مسار الهدف المحلول. -- إذا كان `trustedDirs` معيّنًا، فيُطبَّق فحص الدليل الموثوق على مسار الهدف المحلول. -- تكون بيئة العملية الابنة لـ `exec` محدودة افتراضيًا؛ ومرّر المتغيرات المطلوبة صراحةً عبر `passEnv`. -- تُحل مراجع الأسرار وقت التفعيل إلى لقطة موجودة في الذاكرة، ثم تقرأ مسارات الطلب تلك اللقطة فقط. -- يُطبَّق ترشيح السطح النشط أثناء التفعيل: تؤدي المراجع غير المحلولة على الأسطح المفعّلة إلى فشل بدء التشغيل/إعادة التحميل، بينما تُتخطى الأسطح غير النشطة مع بيانات تشخيصية. +- يدعم مزوّد `file` الوضعين `mode: "json"` و`mode: "singleValue"` ‏(ويجب أن تكون `id` مساوية لـ `"value"` في وضع singleValue). +- يتطلب مزوّد `exec` مسار `command` مطلقًا ويستخدم حمولات بروتوكول على stdin/stdout. +- تُرفض مسارات أوامر الروابط الرمزية افتراضيًا. اضبط `allowSymlinkCommand: true` للسماح بمسارات الروابط الرمزية مع التحقق من المسار الهدف المحلول. +- إذا كانت `trustedDirs` مضبوطة، فإن فحص الدليل الموثوق يُطبَّق على المسار الهدف المحلول. +- تكون بيئة العملية الفرعية لـ `exec` محدودة افتراضيًا؛ مرّر المتغيرات المطلوبة صراحةً عبر `passEnv`. +- تُحل مراجع الأسرار وقت التفعيل إلى لقطة داخل الذاكرة، ثم لا تقرأ مسارات الطلب سوى تلك اللقطة. +- تُطبَّق تصفية السطح النشط أثناء التفعيل: تؤدي المراجع غير المحلولة على الأسطح المفعّلة إلى فشل البدء/إعادة التحميل، بينما تُتخطى الأسطح غير النشطة مع تشخيصات. --- @@ -3461,11 +3474,11 @@ openclaw gateway --port 19001 } ``` -- تُخزَّن ملفات التعريف لكل وكيل في `/auth-profiles.json`. -- يدعم `auth-profiles.json` مراجع على مستوى القيمة (`keyRef` للوضع `api_key`، و`tokenRef` للوضع `token`) لأنماط بيانات الاعتماد الثابتة. -- لا تدعم ملفات تعريف وضع OAuth ‏(`auth.profiles..mode = "oauth"`) بيانات اعتماد ملفات التعريف المدعومة بواسطة SecretRef. -- تأتي بيانات الاعتماد الثابتة أثناء التشغيل من لقطات محلولة في الذاكرة؛ وتُنظَّف إدخالات `auth.json` الثابتة القديمة عند اكتشافها. -- استيرادات OAuth القديمة من `~/.openclaw/credentials/oauth.json`. +- تُخزن الملفات التعريفية لكل وكيل في `/auth-profiles.json`. +- يدعم `auth-profiles.json` مراجع على مستوى القيمة (`keyRef` مع `api_key`، و`tokenRef` مع `token`) لأوضاع بيانات الاعتماد الثابتة. +- لا تدعم ملفات التعريف في وضع OAuth ‏(`auth.profiles..mode = "oauth"`) بيانات اعتماد ملفات التعريف المدعومة بـ SecretRef. +- تأتي بيانات الاعتماد الثابتة وقت التشغيل من لقطات محلولة داخل الذاكرة؛ وتُنظَّف إدخالات `auth.json` الثابتة القديمة عند اكتشافها. +- يتم استيراد OAuth القديم من `~/.openclaw/credentials/oauth.json`. - راجع [OAuth](/ar/concepts/oauth). - سلوك وقت تشغيل الأسرار وأدوات `audit/configure/apply`: ‏[Secrets Management](/ar/gateway/secrets). @@ -3489,21 +3502,22 @@ openclaw gateway --port 19001 } ``` -- `billingBackoffHours`: فترة التراجع الأساسية بالساعات عندما يفشل ملف التعريف بسبب أخطاء فوترة/رصيد غير كافٍ حقيقية - (الافتراضي: `5`). ويمكن أن تصل نصوص الفوترة الصريحة - إلى هنا حتى على استجابات `401`/`403`، لكن - مطابِقات النصوص الخاصة بكل مزوّد تظل محصورة بالمزوّد الذي يملكها (مثل OpenRouter - `Key limit exceeded`). وتبقى رسائل نافذة الاستخدام القابلة لإعادة المحاولة في HTTP `402` أو - رسائل حدود الإنفاق الخاصة بالمؤسسة/مساحة العمل ضمن مسار `rate_limit` +- `billingBackoffHours`: مدة التراجع الأساسية بالساعات عندما يفشل ملف تعريف بسبب + أخطاء فوترة/عدم كفاية رصيد حقيقية (الافتراضي: `5`). ويمكن أن + تقع نصوص الفوترة الصريحة هنا حتى في استجابات `401`/`403`، لكن + أدوات مطابقة النص الخاصة بكل مزوّد تبقى محصورة بالمزوّد الذي يملكها + (مثل OpenRouter ‏`Key limit exceeded`). وتبقى رسائل + نافذة الاستخدام القابلة لإعادة المحاولة أو حدود إنفاق المؤسسة/مساحة العمل في HTTP ‏`402` + ضمن مسار `rate_limit` بدلًا من ذلك. -- `billingBackoffHoursByProvider`: تجاوزات اختيارية حسب المزوّد لساعات تراجع الفوترة. -- `billingMaxHours`: الحد الأقصى بالساعات للنمو الأسي لتراجع الفوترة (الافتراضي: `24`). -- `authPermanentBackoffMinutes`: فترة التراجع الأساسية بالدقائق لإخفاقات `auth_permanent` عالية الثقة (الافتراضي: `10`). -- `authPermanentMaxMinutes`: الحد الأقصى بالدقائق لنمو تراجع `auth_permanent` (الافتراضي: `60`). -- `failureWindowHours`: النافذة المتحركة بالساعات المستخدمة لعدادات التراجع (الافتراضي: `24`). -- `overloadedProfileRotations`: الحد الأقصى لعمليات تدوير ملفات تعريف المصادقة للمزوّد نفسه في حالات الحمل الزائد قبل التحويل إلى fallback للنموذج (الافتراضي: `1`). وتدخل هنا أشكال انشغال المزوّد مثل `ModelNotReadyException`. -- `overloadedBackoffMs`: تأخير ثابت قبل إعادة محاولة تدوير ملف تعريف/مزوّد مثقل (الافتراضي: `0`). -- `rateLimitedProfileRotations`: الحد الأقصى لعمليات تدوير ملفات تعريف المصادقة للمزوّد نفسه في حالات تحديد المعدل قبل التحويل إلى fallback للنموذج (الافتراضي: `1`). وتتضمن سلة تحديد المعدل تلك نصوصًا بصياغة المزوّد مثل `Too many concurrent requests` و`ThrottlingException` و`concurrency limit reached` و`workers_ai ... quota limit exceeded` و`resource exhausted`. +- `billingBackoffHoursByProvider`: تجاوزات اختيارية لكل مزوّد لمدة التراجع الخاصة بالفوترة بالساعات. +- `billingMaxHours`: سقف بالساعات للنمو الأسي لتراجع الفوترة (الافتراضي: `24`). +- `authPermanentBackoffMinutes`: مدة التراجع الأساسية بالدقائق لإخفاقات `auth_permanent` عالية الثقة (الافتراضي: `10`). +- `authPermanentMaxMinutes`: سقف بالدقائق لنمو التراجع الخاص بـ `auth_permanent` ‏(الافتراضي: `60`). +- `failureWindowHours`: نافذة متحركة بالساعات تُستخدم لعدادات التراجع (الافتراضي: `24`). +- `overloadedProfileRotations`: الحد الأقصى لتدويرات ملفات التعريف ذات المزود نفسه لأخطاء الحمل الزائد قبل التحويل إلى نموذج احتياطي (الافتراضي: `1`). وتدخل هنا أشكال انشغال المزوّد مثل `ModelNotReadyException`. +- `overloadedBackoffMs`: تأخير ثابت قبل إعادة محاولة تدوير ملف تعريف/مزوّد محمّل زائدًا (الافتراضي: `0`). +- `rateLimitedProfileRotations`: الحد الأقصى لتدويرات ملفات التعريف ذات المزود نفسه لأخطاء حد المعدل قبل التحويل إلى نموذج احتياطي (الافتراضي: `1`). وتتضمن حزمة حد المعدل نصوصًا ذات شكل خاص بالمزوّد مثل `Too many concurrent requests` و`ThrottlingException` و`concurrency limit reached` و`workers_ai ... quota limit exceeded` و`resource exhausted`. --- @@ -3523,13 +3537,13 @@ openclaw gateway --port 19001 ``` - ملف السجل الافتراضي: `/tmp/openclaw/openclaw-YYYY-MM-DD.log`. -- عيّن `logging.file` للحصول على مسار ثابت. -- يرتفع `consoleLevel` إلى `debug` عند استخدام `--verbose`. -- `maxFileBytes`: الحد الأقصى لحجم ملف السجل بالبايت قبل كبح الكتابة (عدد صحيح موجب؛ الافتراضي: `524288000` = 500 MB). استخدم تدوير السجلات الخارجي لعمليات النشر الإنتاجية. +- اضبط `logging.file` لمسار ثابت. +- ترتفع `consoleLevel` إلى `debug` عند استخدام `--verbose`. +- `maxFileBytes`: الحد الأقصى لحجم ملف السجل بالبايت قبل منع الكتابة (عدد صحيح موجب؛ الافتراضي: `524288000` = ‏500 MB). استخدم تدوير سجلات خارجيًا في بيئات الإنتاج. --- -## التشخيصات +## التشخيص ```json5 { @@ -3562,20 +3576,20 @@ openclaw gateway --port 19001 } ``` -- `enabled`: المفتاح الرئيسي لمخرجات القياس (الافتراضي: `true`). -- `flags`: مصفوفة من سلاسل الرايات التي تفعّل مخرجات سجل موجّهة (وتدعم أحرف البدل مثل `"telegram.*"` أو `"*"`). -- `stuckSessionWarnMs`: حد العمر بالميلي ثانية لإصدار تحذيرات الجلسة العالقة بينما تبقى الجلسة في حالة معالجة. -- `otel.enabled`: يفعّل مسار تصدير OpenTelemetry (الافتراضي: `false`). -- `otel.endpoint`: عنوان URL للمجمّع من أجل تصدير OTel. -- `otel.protocol`: ‏`"http/protobuf"` (الافتراضي) أو `"grpc"`. -- `otel.headers`: رؤوس بيانات تعريف HTTP/gRPC إضافية تُرسل مع طلبات تصدير OTel. +- `enabled`: المفتاح الرئيسي لمخرجات القياس التشخيصي (الافتراضي: `true`). +- `flags`: مصفوفة من سلاسل الأعلام التي تفعّل مخرجات سجل مستهدفة (وتدعم أحرف البدل مثل `"telegram.*"` أو `"*"`). +- `stuckSessionWarnMs`: عتبة العمر بالمللي ثانية لإصدار تحذيرات الجلسات العالقة بينما تظل الجلسة في حالة المعالجة. +- `otel.enabled`: يفعّل مسار تصدير OpenTelemetry ‏(الافتراضي: `false`). +- `otel.endpoint`: عنوان URL الخاص بالمجمّع لتصدير OTel. +- `otel.protocol`: ‏`"http/protobuf"` ‏(الافتراضي) أو `"grpc"`. +- `otel.headers`: ترويسات بيانات وصفية إضافية لـ HTTP/gRPC تُرسل مع طلبات تصدير OTel. - `otel.serviceName`: اسم الخدمة لسمات المورد. -- `otel.traces` / `otel.metrics` / `otel.logs`: تفعيل تصدير الأثر أو المقاييس أو السجلات. -- `otel.sampleRate`: معدل أخذ عينات الأثر من `0` إلى `1`. -- `otel.flushIntervalMs`: فترة التفريغ الدورية للقياسات بالميلي ثانية. -- `cacheTrace.enabled`: تسجيل لقطات تتبع cache للتشغيلات المضمنة (الافتراضي: `false`). -- `cacheTrace.filePath`: مسار الإخراج لملف JSONL الخاص بتتبع cache (الافتراضي: `$OPENCLAW_STATE_DIR/logs/cache-trace.jsonl`). -- `cacheTrace.includeMessages` / `includePrompt` / `includeSystem`: تتحكم في ما يُضمَّن في مخرجات تتبع cache (وجميعها افتراضيًا: `true`). +- `otel.traces` / `otel.metrics` / `otel.logs`: تمكين تصدير التتبعات أو المقاييس أو السجلات. +- `otel.sampleRate`: معدل أخذ عينات التتبعات `0`–`1`. +- `otel.flushIntervalMs`: فترة التفريغ الدوري للقياس عن بُعد بالمللي ثانية. +- `cacheTrace.enabled`: يسجل لقطات تتبع cache للتشغيلات المضمنة (الافتراضي: `false`). +- `cacheTrace.filePath`: مسار الخرج لملف JSONL الخاص بتتبع cache ‏(الافتراضي: `$OPENCLAW_STATE_DIR/logs/cache-trace.jsonl`). +- `cacheTrace.includeMessages` / `includePrompt` / `includeSystem`: تتحكم فيما يُدرج في مخرجات تتبع cache ‏(وجميعها افتراضيًا: `true`). --- @@ -3598,11 +3612,11 @@ openclaw gateway --port 19001 ``` - `channel`: قناة الإصدار لتثبيتات npm/git — ‏`"stable"` أو `"beta"` أو `"dev"`. -- `checkOnStart`: التحقق من تحديثات npm عند بدء gateway (الافتراضي: `true`). -- `auto.enabled`: تفعيل التحديث التلقائي في الخلفية لتثبيتات الحزم (الافتراضي: `false`). -- `auto.stableDelayHours`: الحد الأدنى للتأخير بالساعات قبل التطبيق التلقائي لقناة stable (الافتراضي: `6`؛ الحد الأقصى: `168`). -- `auto.stableJitterHours`: نافذة توزيع إضافية بالساعات لتطبيقات قناة stable (الافتراضي: `12`؛ الحد الأقصى: `168`). -- `auto.betaCheckIntervalHours`: عدد المرات التي تُجرى فيها فحوص قناة beta بالساعات (الافتراضي: `1`؛ الحد الأقصى: `24`). +- `checkOnStart`: التحقق من تحديثات npm عند بدء تشغيل gateway ‏(الافتراضي: `true`). +- `auto.enabled`: تمكين التحديث التلقائي في الخلفية لتثبيتات الحزم (الافتراضي: `false`). +- `auto.stableDelayHours`: الحد الأدنى للتأخير بالساعات قبل التطبيق التلقائي لقناة stable ‏(الافتراضي: `6`؛ الحد الأقصى: `168`). +- `auto.stableJitterHours`: نافذة انتشار إضافية لتوزيع قناة stable بالساعات (الافتراضي: `12`؛ الحد الأقصى: `168`). +- `auto.betaCheckIntervalHours`: مدى تكرار عمليات التحقق لقناة beta بالساعات (الافتراضي: `1`؛ الحد الأقصى: `24`). --- @@ -3635,22 +3649,22 @@ openclaw gateway --port 19001 } ``` -- `enabled`: بوابة الميزات العامة لـ ACP (الافتراضي: `false`). -- `dispatch.enabled`: بوابة مستقلة لإرسال أدوار جلسات ACP (الافتراضي: `true`). عيّنها إلى `false` للإبقاء على أوامر ACP متاحة مع حظر التنفيذ. -- `backend`: معرّف الواجهة الخلفية الافتراضية لوقت تشغيل ACP (ويجب أن يطابق Plugin وقت تشغيل ACP مسجلة). -- `defaultAgent`: معرّف وكيل ACP الاحتياطي المستهدف عندما لا تحدد عمليات spawn هدفًا صريحًا. +- `enabled`: حاجز الميزة العام لـ ACP ‏(الافتراضي: `false`). +- `dispatch.enabled`: حاجز مستقل لتوزيع أدوار جلسات ACP ‏(الافتراضي: `true`). اضبطه على `false` للإبقاء على أوامر ACP متاحة مع حظر التنفيذ. +- `backend`: معرّف الواجهة الخلفية الافتراضية لوقت تشغيل ACP ‏(ويجب أن يطابق Plugin وقت تشغيل ACP مسجلًا). +- `defaultAgent`: معرّف وكيل ACP الاحتياطي المستهدف عندما لا تحدد عمليات الإنشاء هدفًا صريحًا. - `allowedAgents`: قائمة سماح لمعرّفات الوكلاء المسموح بها لجلسات وقت تشغيل ACP؛ وتعني القيمة الفارغة عدم وجود تقييد إضافي. - `maxConcurrentSessions`: الحد الأقصى لعدد جلسات ACP النشطة بالتوازي. -- `stream.coalesceIdleMs`: نافذة التفريغ عند الخمول بالميلي ثانية للنص المتدفق. -- `stream.maxChunkChars`: الحد الأقصى لحجم القطعة قبل تقسيم إسقاط الكتل المتدفقة. -- `stream.repeatSuppression`: كبح أسطر الحالة/الأدوات المتكررة لكل دور (الافتراضي: `true`). -- `stream.deliveryMode`: تؤدي `"live"` إلى البث التدريجي؛ بينما تقوم `"final_only"` بالتخزين المؤقت حتى أحداث نهاية الدور. -- `stream.hiddenBoundarySeparator`: الفاصل قبل النص المرئي بعد أحداث الأدوات المخفية (الافتراضي: `"paragraph"`). -- `stream.maxOutputChars`: الحد الأقصى لأحرف مخرجات المساعد المسقطة لكل دور ACP. -- `stream.maxSessionUpdateChars`: الحد الأقصى لأحرف أسطر الحالة/التحديث المسقطة الخاصة بـ ACP. -- `stream.tagVisibility`: سجل بأسماء الوسوم إلى تجاوزات إظهار منطقية للأحداث المتدفقة. -- `runtime.ttlMinutes`: قيمة TTL للخمول بالدقائق لعمّال جلسات ACP قبل أن يصبحوا مؤهلين للتنظيف. -- `runtime.installCommand`: أمر تثبيت اختياري يُشغَّل عند تهيئة بيئة وقت تشغيل ACP. +- `stream.coalesceIdleMs`: نافذة التفريغ عند الخمول بالمللي ثانية للنص المتدفق. +- `stream.maxChunkChars`: الحد الأقصى لحجم الكتلة قبل تقسيم إسقاط الكتل المتدفقة. +- `stream.repeatSuppression`: كبت أسطر الحالة/الأداة المتكررة لكل دور (الافتراضي: `true`). +- `stream.deliveryMode`: تؤدي `"live"` إلى بث تزايدي؛ بينما تؤدي `"final_only"` إلى التخزين المؤقت حتى أحداث نهاية الدور. +- `stream.hiddenBoundarySeparator`: الفاصل قبل النص المرئي بعد أحداث الأداة المخفية (الافتراضي: `"paragraph"`). +- `stream.maxOutputChars`: الحد الأقصى لأحرف خرج المساعد المسقطة لكل دور ACP. +- `stream.maxSessionUpdateChars`: الحد الأقصى للأحرف في أسطر حالة/تحديث ACP المسقطة. +- `stream.tagVisibility`: سجل بأسماء الوسوم إلى تجاوزات رؤية منطقية للأحداث المتدفقة. +- `runtime.ttlMinutes`: مدة TTL للخمول بالدقائق لعمال جلسات ACP قبل أن يصبحوا مؤهلين للتنظيف. +- `runtime.installCommand`: أمر تثبيت اختياري للتشغيل عند تهيئة بيئة وقت تشغيل ACP. --- @@ -3667,16 +3681,16 @@ openclaw gateway --port 19001 ``` - يتحكم `cli.banner.taglineMode` في نمط الشعار النصي: - - `"random"` (الافتراضي): شعارات نصية متداولة طريفة/موسمية. - - `"default"`: شعار نصي محايد ثابت (`All your chats, one OpenClaw.`). - - `"off"`: بدون نص شعار (مع بقاء عنوان/إصدار الشعار ظاهرين). -- لإخفاء الشعار بالكامل (وليس الشعارات النصية فقط)، عيّن متغير البيئة `OPENCLAW_HIDE_BANNER=1`. + - `"random"` ‏(الافتراضي): شعارات دوّارة طريفة/موسمية. + - `"default"`: شعار ثابت ومحايد (`All your chats, one OpenClaw.`). + - `"off"`: من دون نص شعار (مع استمرار عرض عنوان الشريط/الإصدار). +- لإخفاء الشريط بالكامل (وليس الشعارات فقط)، اضبط متغير البيئة `OPENCLAW_HIDE_BANNER=1`. --- -## Wizard +## المعالج -بيانات تعريف يكتبها تدفق الإعداد الموجّه في CLI ‏(`onboard` و`configure` و`doctor`): +بيانات تعريف يكتبها CLI أثناء تدفقات الإعداد الموجّهة (`onboard` و`configure` و`doctor`): ```json5 { @@ -3694,15 +3708,15 @@ openclaw gateway --port 19001 ## الهوية -راجع حقول الهوية في `agents.list` تحت [الإعدادات الافتراضية للوكلاء](#agent-defaults). +راجع حقول الهوية في `agents.list` ضمن [الإعدادات الافتراضية للوكلاء](#agent-defaults). --- -## Bridge (قديم، أُزيل) +## Bridge ‏(قديم، تمت إزالته) -لم تعد الإصدارات الحالية تتضمن TCP bridge. تتصل Nodes عبر Gateway WebSocket. ولم تعد مفاتيح `bridge.*` جزءًا من مخطط الإعدادات (ويفشل التحقق حتى إزالتها؛ ويمكن لـ `openclaw doctor --fix` إزالة المفاتيح غير المعروفة). +لم تعد الإصدارات الحالية تتضمن TCP bridge. وتتصل Nodes عبر Gateway WebSocket. لم تعد مفاتيح `bridge.*` جزءًا من مخطط الإعدادات (ويفشل التحقق إلى أن تُزال؛ ويمكن للأمر `openclaw doctor --fix` إزالة المفاتيح غير المعروفة). - + ```json { @@ -3729,22 +3743,22 @@ openclaw gateway --port 19001 cron: { enabled: true, maxConcurrentRuns: 2, - webhook: "https://example.invalid/legacy", // قيمة احتياطية قديمة ومهجورة للوظائف المخزنة ذات notify:true - webhookToken: "replace-with-dedicated-token", // رمز bearer اختياري لمصادقة Webhook الصادر - sessionRetention: "24h", // سلسلة مدة أو false + webhook: "https://example.invalid/legacy", // deprecated fallback for stored notify:true jobs + webhookToken: "replace-with-dedicated-token", // optional bearer token for outbound webhook auth + sessionRetention: "24h", // duration string or false runLog: { - maxBytes: "2mb", // الافتراضي 2_000_000 بايت - keepLines: 2000, // الافتراضي 2000 + maxBytes: "2mb", // default 2_000_000 bytes + keepLines: 2000, // default 2000 }, }, } ``` -- `sessionRetention`: المدة التي تُحفَظ خلالها جلسات تشغيل Cron المعزولة المكتملة قبل قصّها من `sessions.json`. كما تتحكم أيضًا في تنظيف أرشيفات نصوص Cron المحذوفة. الافتراضي: `24h`؛ عيّن `false` للتعطيل. -- `runLog.maxBytes`: الحد الأقصى للحجم لكل ملف سجل تشغيل (`cron/runs/.jsonl`) قبل القص. الافتراضي: `2_000_000` بايت. -- `runLog.keepLines`: أحدث الأسطر التي يُحتفَظ بها عند تفعيل قص سجل التشغيل. الافتراضي: `2000`. -- `webhookToken`: رمز bearer المستخدم في تسليم POST الخاص بـ Cron webhook ‏(`delivery.mode = "webhook"`)، وإذا حُذف فلن يُرسَل رأس مصادقة. -- `webhook`: عنوان URL احتياطي قديم ومهجور لـ webhook ‏(http/https) يُستخدم فقط للوظائف المخزنة التي ما زالت تحتوي على `notify: true`. +- `sessionRetention`: المدة التي تُحتفَظ خلالها بجلسات تشغيل Cron المعزولة المكتملة قبل تقليمها من `sessions.json`. كما تتحكم أيضًا في تنظيف نصوص Cron المؤرشفة المحذوفة. الافتراضي: `24h`؛ اضبط القيمة على `false` للتعطيل. +- `runLog.maxBytes`: الحد الأقصى لحجم كل ملف سجل تشغيل (`cron/runs/.jsonl`) قبل التقليم. الافتراضي: `2_000_000` بايت. +- `runLog.keepLines`: أحدث الأسطر التي يُحتفَظ بها عند تفعيل تقليم سجل التشغيل. الافتراضي: `2000`. +- `webhookToken`: رمز bearer المميز المستخدم في تسليم POST الخاص بـ Cron Webhook ‏(`delivery.mode = "webhook"`)، وإذا حُذف فلن تُرسَل أي ترويسة مصادقة. +- `webhook`: عنوان URL احتياطي قديم ومهمَل لـ Webhook ‏(http/https) يُستخدم فقط للوظائف المخزنة التي لا يزال فيها `notify: true`. ### `cron.retry` @@ -3760,11 +3774,11 @@ openclaw gateway --port 19001 } ``` -- `maxAttempts`: الحد الأقصى لإعادات المحاولة للوظائف أحادية التشغيل عند حدوث أخطاء عابرة (الافتراضي: `3`؛ النطاق: `0`–`10`). -- `backoffMs`: مصفوفة تأخيرات التراجع بالميلي ثانية لكل محاولة إعادة (الافتراضي: `[30000, 60000, 300000]`؛ من 1 إلى 10 إدخالات). -- `retryOn`: أنواع الأخطاء التي تؤدي إلى إعادة المحاولة — `"rate_limit"` و`"overloaded"` و`"network"` و`"timeout"` و`"server_error"`. احذفها لإعادة محاولة جميع الأنواع العابرة. +- `maxAttempts`: الحد الأقصى لإعادات المحاولة للوظائف أحادية التشغيل عند الأخطاء العابرة (الافتراضي: `3`؛ النطاق: `0`–`10`). +- `backoffMs`: مصفوفة تأخيرات التراجع بالمللي ثانية لكل محاولة إعادة (الافتراضي: `[30000, 60000, 300000]`؛ من 1 إلى 10 إدخالات). +- `retryOn`: أنواع الأخطاء التي تفعّل إعادة المحاولة — ‏`"rate_limit"` و`"overloaded"` و`"network"` و`"timeout"` و`"server_error"`. احذفها لإعادة المحاولة على جميع الأنواع العابرة. -ينطبق ذلك فقط على وظائف Cron أحادية التشغيل. أما الوظائف المتكررة فتستخدم معالجة فشل منفصلة. +ينطبق هذا فقط على وظائف Cron أحادية التشغيل. وتستخدم الوظائف المتكررة معالجة إخفاق منفصلة. ### `cron.failureAlert` @@ -3782,10 +3796,10 @@ openclaw gateway --port 19001 } ``` -- `enabled`: تفعيل تنبيهات فشل وظائف Cron (الافتراضي: `false`). +- `enabled`: تمكين تنبيهات الإخفاق لوظائف Cron ‏(الافتراضي: `false`). - `after`: عدد الإخفاقات المتتالية قبل إطلاق التنبيه (عدد صحيح موجب، الحد الأدنى: `1`). -- `cooldownMs`: الحد الأدنى بالميلي ثانية بين التنبيهات المتكررة للوظيفة نفسها (عدد صحيح غير سالب). -- `mode`: وضع التسليم — ترسل `"announce"` عبر رسالة قناة؛ بينما تنشر `"webhook"` إلى Webhook المهيأ. +- `cooldownMs`: الحد الأدنى بالمللي ثانية بين التنبيهات المتكررة للوظيفة نفسها (عدد صحيح غير سالب). +- `mode`: وضع التسليم — ترسل `"announce"` عبر رسالة قناة؛ بينما تنشر `"webhook"` إلى Webhook المكوَّن. - `accountId`: معرّف حساب أو قناة اختياري لتحديد نطاق تسليم التنبيه. ### `cron.failureDestination` @@ -3803,45 +3817,45 @@ openclaw gateway --port 19001 } ``` -- الوجهة الافتراضية لإشعارات فشل Cron عبر جميع الوظائف. -- `mode`: ‏`"announce"` أو `"webhook"`؛ وتكون القيمة الافتراضية `"announce"` عندما تتوفر بيانات هدف كافية. -- `channel`: تجاوز القناة لتسليم announce. وتعيد `"last"` استخدام آخر قناة تسليم معروفة. -- `to`: هدف announce صريح أو عنوان URL لـ Webhook. وهو مطلوب لوضع webhook. -- `accountId`: تجاوز اختياري للحساب من أجل التسليم. -- يتجاوز `delivery.failureDestination` لكل وظيفة هذا الافتراضي العام. -- عندما لا تكون هناك وجهة فشل عامة أو خاصة بالوظيفة، فإن الوظائف التي تُسلِّم أصلًا عبر `announce` تعود احتياطيًا إلى هدف announce الأساسي نفسه عند الفشل. -- لا يُدعم `delivery.failureDestination` إلا للوظائف ذات `sessionTarget="isolated"` ما لم يكن `delivery.mode` الأساسي للوظيفة هو `"webhook"`. +- الوجهة الافتراضية لإشعارات إخفاق Cron عبر جميع الوظائف. +- `mode`: ‏`"announce"` أو `"webhook"`؛ ويكون الافتراضي `"announce"` عند توفر بيانات هدف كافية. +- `channel`: تجاوز القناة لتسليم announce. وتؤدي `"last"` إلى إعادة استخدام آخر قناة تسليم معروفة. +- `to`: هدف announce صريح أو عنوان URL لـ Webhook. وهو مطلوب في وضع webhook. +- `accountId`: تجاوز حساب اختياري للتسليم. +- تتجاوز `delivery.failureDestination` لكل وظيفة هذا الافتراضي العام. +- عندما لا تكون هناك وجهة إخفاق عامة ولا لكل وظيفة، فإن الوظائف التي تُسلِّم أصلًا عبر `announce` تعود عند الإخفاق إلى ذلك الهدف الأساسي نفسه الخاص بـ announce. +- لا تكون `delivery.failureDestination` مدعومة إلا للوظائف ذات `sessionTarget="isolated"` ما لم يكن `delivery.mode` الأساسي للوظيفة هو `"webhook"`. -راجع [Cron Jobs](/ar/automation/cron-jobs). وتُتتبَّع عمليات تنفيذ Cron المعزولة كـ [background tasks](/ar/automation/tasks). +راجع [Cron Jobs](/ar/automation/cron-jobs). ويتم تتبع تنفيذات Cron المعزولة باعتبارها [مهام خلفية](/ar/automation/tasks). --- ## متغيرات قالب نموذج الوسائط -العناصر النائبة في القالب التي تُوسَّع في `tools.media.models[].args`: +العناصر النائبة للقالب الموسعة في `tools.media.models[].args`: | المتغير | الوصف | -| ------------------ | ------------------------------------------------- | -| `{{Body}}` | متن الرسالة الواردة بالكامل | -| `{{RawBody}}` | المتن الخام (من دون أغلفة السجل/المرسل) | -| `{{BodyStripped}}` | المتن بعد إزالة إشارات المجموعات منه | -| `{{From}}` | معرّف المرسل | -| `{{To}}` | معرّف الوجهة | -| `{{MessageSid}}` | معرّف رسالة القناة | -| `{{SessionId}}` | UUID الجلسة الحالية | -| `{{IsNewSession}}` | القيمة `"true"` عند إنشاء جلسة جديدة | -| `{{MediaUrl}}` | عنوان pseudo-URL للوسائط الواردة | -| `{{MediaPath}}` | مسار الوسائط المحلي | -| `{{MediaType}}` | نوع الوسائط (صورة/صوت/مستند/…) | -| `{{Transcript}}` | النص المفرغ للصوت | -| `{{Prompt}}` | prompt الوسائط المحلول لإدخالات CLI | -| `{{MaxChars}}` | الحد الأقصى المحلول لأحرف المخرجات لإدخالات CLI | -| `{{ChatType}}` | `"direct"` أو `"group"` | -| `{{GroupSubject}}` | موضوع المجموعة (بأفضل جهد) | -| `{{GroupMembers}}` | معاينة أعضاء المجموعة (بأفضل جهد) | -| `{{SenderName}}` | اسم العرض للمرسل (بأفضل جهد) | -| `{{SenderE164}}` | رقم هاتف المرسل (بأفضل جهد) | -| `{{Provider}}` | تلميح المزوّد (whatsapp أو telegram أو discord، إلخ.) | +| ------- | ------ | +| `{{Body}}` | متن الرسالة الواردة الكامل | +| `{{RawBody}}` | المتن الخام (من دون أغلفة السجل/المرسل) | +| `{{BodyStripped}}` | المتن بعد إزالة إشارات المجموعات | +| `{{From}}` | معرّف المرسل | +| `{{To}}` | معرّف الوجهة | +| `{{MessageSid}}` | معرّف رسالة القناة | +| `{{SessionId}}` | UUID الجلسة الحالية | +| `{{IsNewSession}}` | `"true"` عند إنشاء جلسة جديدة | +| `{{MediaUrl}}` | عنوان pseudo-URL للوسائط الواردة | +| `{{MediaPath}}` | المسار المحلي للوسائط | +| `{{MediaType}}` | نوع الوسائط (صورة/صوت/مستند/…) | +| `{{Transcript}}` | النص المفرغ للصوت | +| `{{Prompt}}` | Media prompt المحلول لإدخالات CLI | +| `{{MaxChars}}` | الحد الأقصى المحلول لأحرف الخرج لإدخالات CLI | +| `{{ChatType}}` | `"direct"` أو `"group"` | +| `{{GroupSubject}}` | موضوع المجموعة (قدر الإمكان) | +| `{{GroupMembers}}` | معاينة أعضاء المجموعة (قدر الإمكان) | +| `{{SenderName}}` | الاسم المعروض للمرسل (قدر الإمكان) | +| `{{SenderE164}}` | رقم هاتف المرسل (قدر الإمكان) | +| `{{Provider}}` | تلميح المزوّد (whatsapp، telegram، discord، إلخ) | --- @@ -3863,12 +3877,12 @@ openclaw gateway --port 19001 **سلوك الدمج:** - ملف واحد: يستبدل الكائن الحاوي. -- مصفوفة ملفات: تُدمَج عميقًا بالترتيب (واللاحق يتجاوز السابق). -- المفاتيح الشقيقة: تُدمَج بعد التضمينات (وتتجاوز القيم المضمَّنة). +- مصفوفة ملفات: تُدمج بعمق حسب الترتيب (اللاحق يتجاوز السابق). +- المفاتيح الشقيقة: تُدمج بعد التضمينات (فتتجاوز القيم المضمّنة). - التضمينات المتداخلة: حتى 10 مستويات عمق. -- المسارات: تُحل نسبةً إلى الملف المتضمِّن، لكن يجب أن تبقى داخل دليل الإعدادات ذي المستوى الأعلى (`dirname` الخاص بـ `openclaw.json`). وتُسمح الصيغ المطلقة/`../` فقط عندما تظل تُحل داخل ذلك الحد. +- المسارات: تُحل نسبةً إلى الملف المُضمِّن، لكن يجب أن تبقى داخل دليل الإعدادات الأعلى مستوى (`dirname` الخاص بـ `openclaw.json`). ويُسمح بالأشكال المطلقة/`../` فقط عندما تظل تُحل داخل ذلك الحد. - الأخطاء: رسائل واضحة للملفات المفقودة، وأخطاء التحليل، والتضمينات الدائرية. --- -_ذو صلة: [الإعدادات](/ar/gateway/configuration) · [أمثلة على الإعدادات](/ar/gateway/configuration-examples) · [Doctor](/ar/gateway/doctor)_ +_ذو صلة: [Configuration](/ar/gateway/configuration) · [Configuration Examples](/ar/gateway/configuration-examples) · [Doctor](/ar/gateway/doctor)_ diff --git a/docs/ar/gateway/doctor.md b/docs/ar/gateway/doctor.md index edee00f13..5e6a8c847 100644 --- a/docs/ar/gateway/doctor.md +++ b/docs/ar/gateway/doctor.md @@ -1,22 +1,22 @@ --- read_when: - - إضافة ترحيلات doctor أو تعديلها - - إدخال تغييرات جذرية على الإعدادات -summary: 'أمر Doctor: فحوصات السلامة، وترحيلات الإعدادات، وخطوات الإصلاح' + - إضافة أو تعديل ترحيلات doctor + - إدخال تغييرات جذرية على التهيئة +summary: 'أمر Doctor: فحوصات السلامة، وترحيلات التهيئة، وخطوات الإصلاح' title: Doctor x-i18n: - generated_at: "2026-04-09T01:29:20Z" + generated_at: "2026-04-20T07:29:54Z" model: gpt-5.4 provider: openai - source_hash: 75d321bd1ad0e16c29f2382e249c51edfc3a8d33b55bdceea39e7dbcd4901fce + source_hash: 61a5e01a306058c49be6095f7c8082d779a55d63cf3b5f4c4096173943faf51b source_path: gateway/doctor.md workflow: 15 --- # Doctor -يُعد `openclaw doctor` أداة الإصلاح + الترحيل في OpenClaw. فهو يصلح -الإعدادات/الحالة القديمة، ويفحص السلامة، ويوفر خطوات إصلاح عملية. +‏`openclaw doctor` هي أداة الإصلاح + الترحيل في OpenClaw. تقوم بإصلاح +التهيئة/الحالة القديمة، وتتحقق من السلامة، وتوفّر خطوات إصلاح عملية. ## البدء السريع @@ -30,34 +30,34 @@ openclaw doctor openclaw doctor --yes ``` -اقبل القيم الافتراضية من دون مطالبة (بما في ذلك خطوات إصلاح إعادة التشغيل/الخدمة/بيئة sandbox عند الاقتضاء). +اقبل القيم الافتراضية بدون مطالبة (بما في ذلك خطوات إصلاح إعادة التشغيل/الخدمة/العزل عند الاقتضاء). ```bash openclaw doctor --repair ``` -طبّق الإصلاحات الموصى بها من دون مطالبة (إصلاحات + عمليات إعادة تشغيل حيث يكون ذلك آمنًا). +طبّق الإصلاحات الموصى بها بدون مطالبة (الإصلاحات + إعادة التشغيل حيث يكون ذلك آمنًا). ```bash openclaw doctor --repair --force ``` -طبّق الإصلاحات القوية أيضًا (يستبدل إعدادات supervisor المخصصة). +طبّق أيضًا الإصلاحات القوية (يستبدل تهيئات المشرف المخصصة). ```bash openclaw doctor --non-interactive ``` -شغّل بدون مطالبات وطبّق فقط الترحيلات الآمنة (تطبيع الإعدادات + نقل الحالة على القرص). يتخطى إجراءات إعادة التشغيل/الخدمة/بيئة sandbox التي تتطلب تأكيدًا بشريًا. -تعمل ترحيلات الحالة القديمة تلقائيًا عند اكتشافها. +شغّل بدون مطالبات وطبّق فقط الترحيلات الآمنة (تطبيع التهيئة + نقل الحالة على القرص). يتخطى إجراءات إعادة التشغيل/الخدمة/العزل التي تتطلب تأكيدًا بشريًا. +تُشغَّل ترحيلات الحالة القديمة تلقائيًا عند اكتشافها. ```bash openclaw doctor --deep ``` -افحص خدمات النظام لاكتشاف تثبيتات Gateway إضافية (launchd/systemd/schtasks). +افحص خدمات النظام بحثًا عن تثبيتات Gateway إضافية (launchd/systemd/schtasks). -إذا أردت مراجعة التغييرات قبل الكتابة، فافتح ملف الإعدادات أولًا: +إذا أردت مراجعة التغييرات قبل الكتابة، افتح ملف التهيئة أولًا: ```bash cat ~/.openclaw/openclaw.json @@ -65,108 +65,106 @@ cat ~/.openclaw/openclaw.json ## ما الذي يفعله (ملخص) -- تحديث اختياري قبل التنفيذ لتثبيتات git (تفاعلي فقط). +- تحديث اختياري قبل التشغيل لتثبيتات git (في الوضع التفاعلي فقط). - فحص حداثة بروتوكول واجهة المستخدم (يعيد بناء Control UI عندما يكون مخطط البروتوكول أحدث). - فحص السلامة + مطالبة بإعادة التشغيل. -- ملخص حالة Skills (مؤهلة/مفقودة/محجوبة) وحالة الإضافات. -- تطبيع الإعدادات للقيم القديمة. -- ترحيل إعدادات Talk من الحقول المسطحة القديمة `talk.*` إلى `talk.provider` + `talk.providers.`. -- فحوصات ترحيل المتصفح لإعدادات إضافة Chrome القديمة وجهوزية Chrome MCP. -- تحذيرات تجاوز موفّر OpenCode (`models.providers.opencode` / `models.providers.opencode-go`). +- ملخص حالة Skills (مؤهلة/مفقودة/محجوبة) وحالة Plugin. +- تطبيع التهيئة للقيم القديمة. +- ترحيل تهيئة Talk من حقول `talk.*` المسطحة القديمة إلى `talk.provider` + `talk.providers.`. +- فحوصات ترحيل المتصفح لتهيئات Chrome extension القديمة وجاهزية Chrome MCP. +- تحذيرات تجاوز OpenCode provider (`models.providers.opencode` / `models.providers.opencode-go`). - تحذيرات حجب Codex OAuth (`models.providers.openai-codex`). -- فحص متطلبات OAuth TLS لملفات OpenAI Codex OAuth التعريفية. -- ترحيل الحالة القديمة على القرص (sessions/دليل agent/مصادقة WhatsApp). -- ترحيل مفتاح عقد بيان plugin القديم (`speechProviders`, `realtimeTranscriptionProviders`, `realtimeVoiceProviders`, `mediaUnderstandingProviders`, `imageGenerationProviders`, `videoGenerationProviders`, `webFetchProviders`, `webSearchProviders` → `contracts`). -- ترحيل مخزن cron القديم (`jobId`, `schedule.cron`, حقول delivery/payload العلوية، و`provider` داخل payload، ووظائف fallback للويب هوك البسيطة `notify: true`). -- فحص ملفات قفل الجلسات وتنظيف الأقفال القديمة. -- فحوصات سلامة الحالة والصلاحيات (الجلسات، والسجلات، ودليل الحالة). -- فحوصات صلاحيات ملف الإعدادات (`chmod 600`) عند التشغيل محليًا. -- سلامة مصادقة النماذج: يفحص انتهاء OAuth، ويمكنه تحديث الرموز الموشكة على الانتهاء، ويبلغ عن حالات التهدئة/التعطيل لملفات تعريف المصادقة. -- اكتشاف دليل مساحة عمل إضافي (`~/openclaw`). -- إصلاح صورة sandbox عند تفعيل العزل. -- ترحيل الخدمة القديمة واكتشاف Gateway إضافي. -- ترحيل الحالة القديمة لقناة Matrix (في وضع `--fix` / `--repair`). -- فحوصات وقت تشغيل Gateway (الخدمة مثبّتة ولكنها لا تعمل؛ تسمية launchd مخزنة مؤقتًا). -- تحذيرات حالة القنوات (يتم فحصها من Gateway الجاري تشغيله). -- تدقيق إعدادات supervisor (launchd/systemd/schtasks) مع إصلاح اختياري. -- فحوصات أفضل ممارسات وقت تشغيل Gateway (Node مقابل Bun، ومسارات مديري الإصدارات). -- تشخيص تعارض منفذ Gateway (الافتراضي `18789`). -- تحذيرات أمنية لسياسات الرسائل الخاصة المفتوحة. -- فحوصات مصادقة Gateway لوضع الرمز المحلي (يوفر إنشاء رمز عندما لا يوجد مصدر رمز؛ ولا يستبدل إعدادات SecretRef الخاصة بالرمز). +- فحص متطلبات OAuth TLS لملفات تعريف OpenAI Codex OAuth. +- ترحيل الحالة القديمة على القرص (الجلسات/دليل العامل/مصادقة WhatsApp). +- ترحيل مفتاح عقد Plugin manifest القديم (`speechProviders`, `realtimeTranscriptionProviders`, `realtimeVoiceProviders`, `mediaUnderstandingProviders`, `imageGenerationProviders`, `videoGenerationProviders`, `webFetchProviders`, `webSearchProviders` → `contracts`). +- ترحيل مخزن Cron القديم (`jobId`, `schedule.cron`, وحقول delivery/payload العلوية، و`provider` داخل payload، ووظائف Webhook الاحتياطية البسيطة `notify: true`). +- فحص ملفات قفل الجلسة وتنظيف الأقفال القديمة. +- فحوصات سلامة الحالة والصلاحيات (الجلسات، والنصوص المفرغة، ودليل الحالة). +- فحوصات صلاحيات ملف التهيئة (`chmod 600`) عند التشغيل محليًا. +- سلامة مصادقة النموذج: يتحقق من انتهاء OAuth، ويمكنه تحديث الرموز المميزة التي توشك على الانتهاء، ويعرض حالات التهدئة/التعطيل لملفات تعريف المصادقة. +- اكتشاف دليل workspace إضافي (`~/openclaw`). +- إصلاح صورة العزل عندما يكون sandboxing مفعّلًا. +- ترحيل الخدمة القديمة واكتشاف Gateways إضافية. +- ترحيل حالة Matrix channel القديمة (في وضع `--fix` / `--repair`). +- فحوصات وقت تشغيل Gateway (الخدمة مثبتة لكنها لا تعمل؛ تسمية launchd مخزنة مؤقتًا). +- تحذيرات حالة القنوات (يتم فحصها من Gateway العامل). +- تدقيق تهيئة المشرف (launchd/systemd/schtasks) مع إصلاح اختياري. +- فحوصات أفضل ممارسات وقت تشغيل Gateway (Node مقابل Bun، ومسارات مدير الإصدارات). +- تشخيصات تعارض منفذ Gateway (الافتراضي `18789`). +- تحذيرات أمنية لسياسات الرسائل المباشرة المفتوحة. +- فحوصات مصادقة Gateway لوضع الرمز المحلي (يعرض إنشاء رمز عند عدم وجود مصدر رمز؛ ولا يستبدل تهيئات token SecretRef). +- اكتشاف مشاكل إقران الأجهزة (طلبات الإقران الأولى المعلقة، وترقيات الدور/النطاق المعلقة، وانحراف cache رموز الأجهزة المحلية القديمة، وانحراف المصادقة في السجلات المقترنة). - فحص `systemd linger` على Linux. -- فحص حجم ملف تمهيد مساحة العمل (تحذيرات الاقتطاع/الاقتراب من الحد لملفات السياق). -- فحص حالة الإكمال الصدفي والتثبيت/الترقية التلقائيين. -- فحص جاهزية موفّر embedding للبحث في الذاكرة (نموذج محلي، أو مفتاح API بعيد، أو ملف QMD ثنائي). -- فحوصات تثبيت المصدر (عدم تطابق مساحة عمل pnpm، وغياب أصول UI، وغياب ملف tsx الثنائي). -- يكتب الإعدادات المحدّثة + بيانات تعريف المعالج. +- فحص حجم ملف bootstrap الخاص بـ workspace (تحذيرات القطع/الاقتراب من الحد الأقصى لملفات السياق). +- فحص حالة shell completion والتثبيت/الترقية التلقائية. +- فحص جاهزية موفّر embedding للبحث في الذاكرة (نموذج محلي، أو مفتاح API بعيد، أو ثنائي QMD). +- فحوصات تثبيت المصدر (عدم تطابق pnpm workspace، وأصول UI المفقودة، وملف tsx الثنائي المفقود). +- يكتب التهيئة المحدّثة + بيانات wizard الوصفية. -## الإكمال الرجعي وإعادة الضبط في Dreams UI +## الإكمال والتصفير في واجهة Dreams UI يتضمن مشهد Dreams في Control UI إجراءات **Backfill** و**Reset** و**Clear Grounded** -لسير العمل الخاص بالأحلام المرتكزة. تستخدم هذه الإجراءات -أساليب RPC على نمط doctor في Gateway، لكنها **ليست** جزءًا من إصلاح/ترحيل -CLI الخاص بـ `openclaw doctor`. +لسير عمل grounded dreaming. تستخدم هذه الإجراءات أساليب RPC بأسلوب doctor في +Gateway، لكنها **ليست** جزءًا من إصلاح/ترحيل CLI الخاص بـ `openclaw doctor`. ما الذي تفعله: -- يفحص **Backfill** ملفات `memory/YYYY-MM-DD.md` التاريخية في - مساحة العمل النشطة، ويشغّل مرور يوميات REM المرتكزة، ويكتب إدخالات - إكمال رجعي قابلة للعكس في `DREAMS.md`. -- يزيل **Reset** فقط إدخالات يوميات الإكمال الرجعي المعلَّمة من `DREAMS.md`. -- يزيل **Clear Grounded** فقط الإدخالات المرحلية قصيرة الأجل المرتكزة فقط - التي جاءت من إعادة تشغيل تاريخية ولم تراكم بعد استدعاءً حيًا أو - دعمًا يوميًا. +- يقوم **Backfill** بفحص ملفات `memory/YYYY-MM-DD.md` التاريخية في + workspace النشط، ويشغّل تمرير grounded REM diary، ويكتب إدخالات backfill + قابلة للعكس داخل `DREAMS.md`. +- يقوم **Reset** بإزالة إدخالات diary ذات backfill المعلّمة فقط من `DREAMS.md`. +- يقوم **Clear Grounded** بإزالة الإدخالات المرحلية grounded-only قصيرة الأمد فقط + التي جاءت من إعادة تشغيل تاريخية ولم تراكم بعد استدعاءً حيًا أو دعمًا يوميًا. -ما الذي لا تفعله بمفردها: +ما الذي **لا** تفعله بمفردها: - لا تعدّل `MEMORY.md` - لا تشغّل ترحيلات doctor الكاملة -- لا ترحّل المرشحين المرتكزين تلقائيًا إلى مخزن الترقية قصير الأجل الحي - ما لم تشغّل صراحةً مسار CLI المرحلي أولًا +- لا ترحّل المرشحين grounded تلقائيًا إلى مخزن الترقية الحي قصير الأمد + إلا إذا شغّلت مسار CLI المرحلي أولًا صراحةً -إذا أردت أن تؤثر إعادة التشغيل التاريخية المرتكزة في -مسار الترقية العميق المعتاد، فاستخدم مسار CLI بدلًا من ذلك: +إذا كنت تريد أن تؤثر إعادة التشغيل التاريخية grounded في مسار الترقية العميق +الاعتيادي، فاستخدم تدفق CLI بدلًا من ذلك: ```bash openclaw memory rem-backfill --path ./memory --stage-short-term ``` -يؤدي ذلك إلى ترحيل المرشحين الدائمين المرتكزين إلى مخزن الأحلام قصير الأجل -مع إبقاء `DREAMS.md` كسطح للمراجعة. +يؤدي ذلك إلى ترحيل المرشحين الدائمين grounded إلى مخزن dreaming قصير الأمد مع +الإبقاء على `DREAMS.md` كسطح مراجعة. ## السلوك المفصل والمبررات ### 0) تحديث اختياري (تثبيتات git) -إذا كان هذا checkout من git وكان doctor يعمل بشكل تفاعلي، فإنه يعرض +إذا كان هذا checkout من git وكان doctor يعمل تفاعليًا، فسيعرض التحديث (fetch/rebase/build) قبل تشغيل doctor. -### 1) تطبيع الإعدادات +### 1) تطبيع التهيئة -إذا كانت الإعدادات تحتوي على أشكال قيم قديمة (مثل `messages.ackReaction` -من دون تجاوز خاص بالقناة)، فإن doctor يطبّعها إلى +إذا كانت التهيئة تحتوي على أشكال قيم قديمة (على سبيل المثال `messages.ackReaction` +من دون تجاوز خاص بقناة)، فإن doctor يطبعها إلى المخطط الحالي. -ويشمل ذلك حقول Talk المسطحة القديمة. فالإعدادات العامة الحالية لـ Talk هي -`talk.provider` + `talk.providers.`. ويعيد doctor كتابة -الأشكال القديمة مثل +يشمل ذلك حقول Talk المسطحة القديمة. تهيئة Talk العامة الحالية هي +`talk.provider` + `talk.providers.`. يعيد doctor كتابة أشكال `talk.voiceId` / `talk.voiceAliases` / `talk.modelId` / `talk.outputFormat` / -`talk.apiKey` إلى خريطة الموفّر. +`talk.apiKey` القديمة إلى خريطة provider. -### 2) ترحيلات مفاتيح الإعدادات القديمة +### 2) ترحيلات مفاتيح التهيئة القديمة -عندما تحتوي الإعدادات على مفاتيح مهجورة، ترفض الأوامر الأخرى التشغيل وتطلب +عندما تحتوي التهيئة على مفاتيح مهملة، ترفض الأوامر الأخرى التشغيل وتطلب منك تشغيل `openclaw doctor`. -سيقوم Doctor بما يلي: +سيقوم doctor بما يلي: -- شرح المفاتيح القديمة التي تم العثور عليها. +- شرح المفاتيح القديمة التي عُثر عليها. - عرض الترحيل الذي طبّقه. - إعادة كتابة `~/.openclaw/openclaw.json` بالمخطط المحدّث. -كما أن Gateway يشغّل ترحيلات doctor تلقائيًا عند بدء التشغيل عندما يكتشف -تنسيق إعدادات قديمًا، بحيث يتم إصلاح الإعدادات القديمة من دون تدخل يدوي. -تتم معالجة ترحيلات مخزن وظائف Cron بواسطة `openclaw doctor --fix`. +يشغّل Gateway أيضًا ترحيلات doctor تلقائيًا عند بدء التشغيل عندما يكتشف +تنسيق تهيئة قديمًا، بحيث تُصلَح التهيئات القديمة دون تدخل يدوي. +تُعالَج ترحيلات مخزن وظائف Cron بواسطة `openclaw doctor --fix`. الترحيلات الحالية: @@ -175,9 +173,9 @@ openclaw memory rem-backfill --path ./memory --stage-short-term - `routing.groupChat.historyLimit` → `messages.groupChat.historyLimit` - `routing.groupChat.mentionPatterns` → `messages.groupChat.mentionPatterns` - `routing.queue` → `messages.queue` -- `routing.bindings` → `bindings` في المستوى الأعلى +- `routing.bindings` → `bindings` من المستوى الأعلى - `routing.agents`/`routing.defaultAgentId` → `agents.list` + `agents.list[].default` -- الحقول القديمة `talk.voiceId`/`talk.voiceAliases`/`talk.modelId`/`talk.outputFormat`/`talk.apiKey` → `talk.provider` + `talk.providers.` +- `talk.voiceId`/`talk.voiceAliases`/`talk.modelId`/`talk.outputFormat`/`talk.apiKey` القديمة → `talk.provider` + `talk.providers.` - `routing.agentToAgent` → `tools.agentToAgent` - `routing.transcribeAudio` → `tools.media.audio.models` - `messages.tts.` (`openai`/`elevenlabs`/`microsoft`/`edge`) → `messages.tts.providers.` @@ -190,7 +188,7 @@ openclaw memory rem-backfill --path ./memory --stage-short-term - `plugins.entries.voice-call.config.streaming.openaiApiKey|sttModel|silenceDurationMs|vadThreshold` → `plugins.entries.voice-call.config.streaming.providers.openai.*` - `bindings[].match.accountID` → `bindings[].match.accountId` -- بالنسبة إلى القنوات التي تحتوي على `accounts` مسماة ولكن لا تزال فيها قيم قنوات علوية لحساب واحد، انقل تلك القيم ذات النطاق الحسابي إلى الحساب المُرقّى المختار لتلك القناة (`accounts.default` لمعظم القنوات؛ ويمكن لـ Matrix الحفاظ على هدف مسمى/افتراضي مطابق موجود) +- بالنسبة إلى القنوات التي تحتوي على `accounts` مسماة مع بقاء قيم قناة أحادية الحساب على المستوى الأعلى، انقل هذه القيم ذات النطاق الحسابي إلى الحساب المُرقّى المختار لتلك القناة (`accounts.default` لمعظم القنوات؛ ويمكن لـ Matrix الاحتفاظ بهدف مسمى/افتراضي مطابق موجود) - `identity` → `agents.list[].identity` - `agent.*` → `agents.defaults` + `tools.*` (tools/elevated/exec/sandbox/subagents) - `agent.model`/`allowedModels`/`modelAliases`/`modelFallbacks`/`imageModelFallbacks` @@ -199,355 +197,383 @@ openclaw memory rem-backfill --path ./memory --stage-short-term - `browser.profiles.*.driver: "extension"` → `"existing-session"` - إزالة `browser.relayBindHost` (إعداد relay قديم للإضافة) -وتشمل تحذيرات Doctor أيضًا إرشادات الافتراضي للحسابات للقنوات متعددة الحسابات: +تتضمن تحذيرات doctor أيضًا إرشادات حول الحساب الافتراضي للقنوات متعددة الحسابات: -- إذا تم إعداد إدخالين أو أكثر في `channels..accounts` من دون `channels..defaultAccount` أو `accounts.default`، يحذر doctor من أن التوجيه الاحتياطي قد يختار حسابًا غير متوقع. -- إذا تم ضبط `channels..defaultAccount` على معرّف حساب غير معروف، يحذر doctor ويسرد معرّفات الحسابات المهيأة. +- إذا تم ضبط إدخالين أو أكثر في `channels..accounts` من دون `channels..defaultAccount` أو `accounts.default`، فسيحذر doctor من أن توجيه الرجوع يمكن أن يختار حسابًا غير متوقع. +- إذا تم ضبط `channels..defaultAccount` على معرّف حساب غير معروف، فسيحذر doctor ويعرض معرّفات الحسابات المضبوطة. -### 2b) تجاوزات موفّر OpenCode +### 2b) تجاوزات OpenCode provider -إذا أضفت يدويًا `models.providers.opencode` أو `opencode-zen` أو `opencode-go`، -فإن ذلك يتجاوز فهرس OpenCode المضمّن من `@mariozechner/pi-ai`. -وقد يفرض ذلك استخدام واجهة API خاطئة للنماذج أو يجعل التكاليف صفرًا. يحذر doctor حتى تتمكن -من إزالة التجاوز واستعادة توجيه API + التكاليف لكل نموذج. +إذا أضفت `models.providers.opencode` أو `opencode-zen` أو `opencode-go` +يدويًا، فهذا يتجاوز كتالوج OpenCode المدمج من `@mariozechner/pi-ai`. +قد يؤدي ذلك إلى فرض النماذج على API خاطئ أو تصفير التكاليف. يحذر doctor كي +تتمكن من إزالة هذا التجاوز واستعادة توجيه API والتكاليف لكل نموذج. -### 2c) ترحيل المتصفح وجهوزية Chrome MCP +### 2c) ترحيل المتصفح وجاهزية Chrome MCP -إذا كانت إعدادات المتصفح لا تزال تشير إلى مسار إضافة Chrome الذي أُزيل، فإن doctor -يطبعها إلى نموذج الربط الحالي لـ Chrome MCP المحلي على المضيف: +إذا كانت تهيئة المتصفح ما تزال تشير إلى مسار Chrome extension الذي أُزيل، فسيقوم doctor +بتطبيعها إلى نموذج الإرفاق المحلي بالمضيف الحالي لـ Chrome MCP: - `browser.profiles.*.driver: "extension"` تصبح `"existing-session"` - تتم إزالة `browser.relayBindHost` -كما يدقق doctor مسار Chrome MCP المحلي على المضيف عندما تستخدم -`defaultProfile: "user"` أو ملف تعريف `existing-session` مهيأ: +كما يدقق doctor مسار Chrome MCP المحلي على المضيف عندما تستخدم `defaultProfile: +"user"` أو ملف `existing-session` مضبوط: -- يفحص ما إذا كان Google Chrome مثبتًا على نفس المضيف لملفات التعريف - ذات الاتصال التلقائي الافتراضي -- يفحص إصدار Chrome المكتشف ويحذر عندما يكون أقل من Chrome 144 -- يذكّرك بتمكين التنقيح عن بُعد في صفحة فحص المتصفح (مثل +- يتحقق مما إذا كان Google Chrome مثبتًا على المضيف نفسه لملفات + التعريف ذات الاتصال التلقائي الافتراضي +- يتحقق من إصدار Chrome المكتشف ويحذر عندما يكون أقل من Chrome 144 +- يذكّرك بتمكين التصحيح عن بُعد في صفحة فحص المتصفح (مثل `chrome://inspect/#remote-debugging` أو `brave://inspect/#remote-debugging` أو `edge://inspect/#remote-debugging`) -لا يمكن لـ Doctor تمكين الإعداد من جهة Chrome نيابةً عنك. ولا يزال Chrome MCP المحلي على المضيف +لا يمكن لـ doctor تمكين إعداد Chrome هذا نيابةً عنك. لا يزال Chrome MCP المحلي يتطلب ما يلي: -- متصفحًا قائمًا على Chromium بإصدار 144+ على مضيف gateway/node -- أن يكون المتصفح قيد التشغيل محليًا -- تمكين التنقيح عن بُعد في ذلك المتصفح -- الموافقة على أول مطالبة موافقة على الربط في المتصفح +- متصفحًا مبنيًا على Chromium بإصدار 144+ على مضيف gateway/node +- تشغيل المتصفح محليًا +- تمكين التصحيح عن بُعد في ذلك المتصفح +- الموافقة على أول مطالبة موافقة على الإرفاق في المتصفح -الجهوزية هنا تتعلق فقط بمتطلبات الربط المحلي. ويحتفظ existing-session -بحدود مسار Chrome MCP الحالية؛ أما المسارات المتقدمة مثل `responsebody` وتصدير PDF -واعتراض التنزيلات والإجراءات الدفعية فما تزال تتطلب -متصفحًا مُدارًا أو ملف تعريف CDP خامًا. +الجاهزية هنا تتعلق فقط بمتطلبات الإرفاق المحلي. يحتفظ existing-session +بحدود مسارات Chrome MCP الحالية؛ وما تزال المسارات المتقدمة مثل `responsebody` وتصدير PDF +واعتراض التنزيل وإجراءات الدُفعات تتطلب متصفحًا مُدارًا +أو ملف CDP خامًا. -لا ينطبق هذا الفحص على تدفقات Docker أو sandbox أو remote-browser أو غيرها -من التدفقات عديمة الواجهة. فهي تواصل استخدام CDP الخام. +لا ينطبق هذا الفحص على تدفقات Docker أو sandbox أو remote-browser أو غيرها من +التدفقات عديمة الواجهة. فهذه تستمر في استخدام CDP الخام. ### 2d) متطلبات OAuth TLS -عند إعداد ملف تعريف OpenAI Codex OAuth، يفحص doctor نقطة نهاية -تفويض OpenAI للتحقق من أن حزمة TLS المحلية لـ Node/OpenSSL يمكنها -التحقق من سلسلة الشهادات. إذا فشل الفحص بخطأ شهادة (مثل -`UNABLE_TO_GET_ISSUER_CERT_LOCALLY` أو شهادة منتهية أو شهادة موقعة ذاتيًا)، -يطبع doctor إرشادات إصلاح خاصة بالمنصة. وعلى macOS مع Node من Homebrew، -يكون الإصلاح عادةً `brew postinstall ca-certificates`. ومع `--deep`، يعمل -الفحص حتى إذا كان Gateway سليمًا. +عند ضبط ملف تعريف OpenAI Codex OAuth، يجري doctor فحصًا لنقطة +تفويض OpenAI للتحقق من أن مكدس TLS المحلي الخاص بـ Node/OpenSSL يمكنه +التحقق من سلسلة الشهادات. إذا فشل الفحص بسبب خطأ شهادة (على سبيل المثال +`UNABLE_TO_GET_ISSUER_CERT_LOCALLY` أو شهادة منتهية الصلاحية أو شهادة موقعة ذاتيًا)، +فسيطبع doctor إرشادات إصلاح خاصة بالمنصة. على macOS مع Homebrew Node، يكون +الإصلاح عادةً `brew postinstall ca-certificates`. ومع `--deep`، يُشغَّل الفحص +حتى إذا كان Gateway سليمًا. -### 2c) تجاوزات موفّر Codex OAuth +### 2c) تجاوزات Codex OAuth provider -إذا كنت قد أضفت سابقًا إعدادات نقل OpenAI قديمة ضمن -`models.providers.openai-codex`، فقد تحجب مسار -موفّر Codex OAuth المضمّن الذي تستخدمه الإصدارات الأحدث تلقائيًا. ويحذر -doctor عندما يرى إعدادات النقل القديمة هذه إلى جانب Codex OAuth حتى -تتمكن من إزالة أو إعادة كتابة تجاوز النقل القديم واستعادة -سلوك التوجيه/الاحتياطيات المضمّن. وما تزال الوكلاء المخصصة والتجاوزات -المعتمدة على الرؤوس فقط مدعومة ولا تطلق هذا التحذير. +إذا كنت قد أضفت سابقًا إعدادات نقل OpenAI القديمة تحت +`models.providers.openai-codex`، فقد تحجب مسار Codex OAuth provider +المدمج الذي تستخدمه الإصدارات الأحدث تلقائيًا. يحذر doctor عندما يرى +إعدادات النقل القديمة تلك إلى جانب Codex OAuth حتى تتمكن من إزالة أو إعادة كتابة +تجاوز النقل القديم واستعادة سلوك التوجيه/الرجوع المدمج. +لا تزال الوكلاء المخصصة والتجاوزات المعتمدة على الترويسات فقط مدعومة ولا +تؤدي إلى هذا التحذير. ### 3) ترحيلات الحالة القديمة (تخطيط القرص) -يمكن لـ Doctor ترحيل التخطيطات القديمة على القرص إلى البنية الحالية: +يمكن لـ doctor ترحيل التخطيطات الأقدم على القرص إلى البنية الحالية: -- مخزن الجلسات + السجلات: +- مخزن الجلسات + النصوص المفرغة: - من `~/.openclaw/sessions/` إلى `~/.openclaw/agents//sessions/` -- دليل Agent: +- دليل العامل: - من `~/.openclaw/agent/` إلى `~/.openclaw/agents//agent/` - حالة مصادقة WhatsApp ‏(Baileys): - من `~/.openclaw/credentials/*.json` القديمة (باستثناء `oauth.json`) - إلى `~/.openclaw/credentials/whatsapp//...` (معرّف الحساب الافتراضي: `default`) -هذه الترحيلات تتم بأفضل جهد وهي idempotent؛ وسيُصدر doctor تحذيرات عندما -يترك أي مجلدات قديمة خلفه كنسخ احتياطية. كما أن Gateway/CLI يرحّل -الجلسات القديمة + دليل agent تلقائيًا عند بدء التشغيل بحيث تهبط -السجلات/المصادقة/النماذج في المسار الخاص بكل agent من دون تشغيل doctor يدويًا. -ويتم ترحيل مصادقة WhatsApp عمدًا فقط عبر `openclaw doctor`. كما أن تطبيع -Talk provider/provider-map يقارن الآن وفق المساواة البنيوية، لذا لم تعد -الاختلافات في ترتيب المفاتيح فقط تطلق تغييرات no-op متكررة مع -`doctor --fix`. +هذه الترحيلات تُنفّذ بأفضل جهد وهي قابلة للتكرار بأمان؛ وسيصدر doctor تحذيرات عندما +يترك أي مجلدات قديمة خلفه كنسخ احتياطية. كما يقوم Gateway/CLI أيضًا بترحيل +الجلسات القديمة + دليل العامل تلقائيًا عند بدء التشغيل بحيث تستقر السجلات/المصادقة/النماذج في +المسار الخاص بكل عامل من دون الحاجة إلى تشغيل doctor يدويًا. أما مصادقة WhatsApp +فمقصود أن تُرحّل فقط عبر `openclaw doctor`. كما أن تطبيع Talk provider/provider-map +يقارن الآن بالمساواة البنيوية، لذلك لم تعد الفروقات في ترتيب المفاتيح وحدها +تؤدي إلى تغييرات متكررة عديمة الأثر في `doctor --fix`. -### 3a) ترحيلات بيانات plugin القديمة +### 3a) ترحيلات plugin manifest القديمة -يفحص Doctor جميع بيانات plugin المثبتة لاكتشاف مفاتيح -القدرات العلوية المهجورة (`speechProviders`, `realtimeTranscriptionProviders`, +يفحص doctor جميع plugin manifests المثبتة بحثًا عن مفاتيح الإمكانات +العليا المهملة (`speechProviders`, `realtimeTranscriptionProviders`, `realtimeVoiceProviders`, `mediaUnderstandingProviders`, `imageGenerationProviders`, `videoGenerationProviders`, `webFetchProviders`, -`webSearchProviders`). وعند العثور عليها، يعرض نقلها إلى الكائن `contracts` -وإعادة كتابة ملف البيان في مكانه. هذا الترحيل idempotent؛ -فإذا كان المفتاح `contracts` يحتوي بالفعل على القيم نفسها، تتم إزالة -المفتاح القديم من دون تكرار البيانات. +`webSearchProviders`). وعند العثور عليها، يعرض نقلها إلى كائن `contracts` +وإعادة كتابة ملف manifest في مكانه. هذا الترحيل قابل للتكرار بأمان؛ +وإذا كان مفتاح `contracts` يحتوي بالفعل على القيم نفسها، فسيُزال المفتاح القديم +من دون تكرار البيانات. -### 3b) ترحيلات مخزن cron القديمة +### 3b) ترحيلات مخزن Cron القديمة -يفحص Doctor أيضًا مخزن وظائف cron (`~/.openclaw/cron/jobs.json` افتراضيًا، -أو `cron.store` عند تجاوزه) لاكتشاف أشكال الوظائف القديمة التي لا يزال -الجدول الزمني يقبلها للتوافق. +يفحص doctor أيضًا مخزن وظائف Cron (`~/.openclaw/cron/jobs.json` افتراضيًا، +أو `cron.store` عند تجاوزه) بحثًا عن أشكال الوظائف القديمة التي لا يزال +المجدول يقبلها للتوافق. -تشمل عمليات تنظيف cron الحالية ما يلي: +تشمل عمليات تنظيف Cron الحالية ما يلي: - `jobId` → `id` - `schedule.cron` → `schedule.expr` -- حقول payload العلوية (`message`, `model`, `thinking`, ...) → `payload` -- حقول delivery العلوية (`deliver`, `channel`, `to`, `provider`, ...) → `delivery` -- أسماء delivery المستعارة `provider` داخل payload → `delivery.channel` صريح -- وظائف fallback القديمة البسيطة للويب هوك `notify: true` → `delivery.mode="webhook"` صريح مع `delivery.to=cron.webhook` +- حقول payload ذات المستوى الأعلى (`message`, `model`, `thinking`, ...) → `payload` +- حقول delivery ذات المستوى الأعلى (`deliver`, `channel`, `to`, `provider`, ...) → `delivery` +- أسماء provider المستعارة الخاصة بتسليم payload → `delivery.channel` صريح +- وظائف Webhook الاحتياطية القديمة البسيطة `notify: true` → `delivery.mode="webhook"` صريح مع `delivery.to=cron.webhook` -لا يرحّل Doctor وظائف `notify: true` تلقائيًا إلا عندما يمكنه -فعل ذلك من دون تغيير السلوك. وإذا جمعت وظيفة بين fallback notify القديم و -وضع delivery غير webhook موجود، فإن doctor يحذر ويترك الوظيفة للمراجعة اليدوية. +لا يرحّل doctor وظائف `notify: true` تلقائيًا إلا عندما يمكنه فعل ذلك من دون +تغيير السلوك. إذا كانت الوظيفة تجمع بين الرجوع الاحتياطي القديم للإشعار ووضع +تسليم غير Webhook موجود بالفعل، فسيحذر doctor ويترك تلك الوظيفة للمراجعة اليدوية. -### 3c) تنظيف قفل الجلسة +### 3c) تنظيف أقفال الجلسات -يفحص Doctor كل دليل جلسات agent بحثًا عن ملفات قفل كتابة قديمة — وهي الملفات التي تُترك -وراءها عندما تخرج الجلسة بشكل غير طبيعي. ولكل ملف قفل يتم العثور عليه، يبلّغ بما يلي: +يفحص doctor كل دليل جلسات للعوامل بحثًا عن ملفات قفل كتابة قديمة — وهي ملفات تُترك +عندما تخرج الجلسة بشكل غير طبيعي. ولكل ملف قفل يعثر عليه فإنه يعرض: المسار، وPID، وما إذا كان PID لا يزال حيًا، وعمر القفل، وما إذا كان -يُعتبر قديمًا (PID ميت أو أقدم من 30 دقيقة). وفي وضع `--fix` / `--repair` -يزيل ملفات القفل القديمة تلقائيًا؛ وإلا فإنه يطبع ملاحظة ويطلب -منك إعادة التشغيل باستخدام `--fix`. +يُعد قديمًا (PID ميت أو أقدم من 30 دقيقة). وفي وضع `--fix` / `--repair` +يزيل ملفات القفل القديمة تلقائيًا؛ وإلا فإنه يطبع ملاحظة +ويطلب منك إعادة التشغيل مع `--fix`. ### 4) فحوصات سلامة الحالة (استمرارية الجلسة، والتوجيه، والسلامة) -دليل الحالة هو الجذع التشغيلي. وإذا اختفى، فستفقد -الجلسات وبيانات الاعتماد والسجلات والإعدادات (إلا إذا كانت لديك نسخ احتياطية في مكان آخر). +دليل الحالة هو جذع الدماغ التشغيلي. إذا اختفى، ستفقد +الجلسات، وبيانات الاعتماد، والسجلات، والتهيئة (ما لم تكن لديك نسخ احتياطية في مكان آخر). -يفحص Doctor ما يلي: +يتحقق doctor من: -- **غياب دليل الحالة**: يحذر من فقدان كارثي للحالة، ويطالب بإعادة إنشاء +- **غياب دليل الحالة**: يحذر من فقدان الحالة الكارثي، ويطالب بإعادة إنشاء الدليل، ويذكّرك بأنه لا يمكنه استعادة البيانات المفقودة. - **صلاحيات دليل الحالة**: يتحقق من قابلية الكتابة؛ ويعرض إصلاح الصلاحيات (ويصدر تلميح `chown` عند اكتشاف عدم تطابق المالك/المجموعة). -- **دليل حالة macOS المتزامن سحابيًا**: يحذر عندما تُحل الحالة ضمن iCloud Drive +- **دليل حالة macOS المتزامن سحابيًا**: يحذر عندما تشير الحالة إلى iCloud Drive (`~/Library/Mobile Documents/com~apple~CloudDocs/...`) أو - `~/Library/CloudStorage/...` لأن المسارات المدعومة بالمزامنة قد تتسبب في بطء الإدخال/الإخراج - وسباقات القفل/المزامنة. -- **دليل حالة Linux على SD أو eMMC**: يحذر عندما تُحل الحالة إلى مصدر تركيب `mmcblk*`، - لأن الإدخال/الإخراج العشوائي المعتمد على SD أو eMMC قد يكون أبطأ ويتعرض لاستهلاك أسرع - مع كتابات الجلسات وبيانات الاعتماد. -- **غياب دلائل الجلسات**: إن `sessions/` ودليل مخزن الجلسات - مطلوبان للحفاظ على السجل وتجنب أعطال `ENOENT`. -- **عدم تطابق السجلات**: يحذر عندما تحتوي إدخالات الجلسات الحديثة على ملفات - سجل مفقودة. -- **جلسة رئيسية “JSONL بسطر واحد”**: يعلّم الحالة عندما يحتوي السجل الرئيسي على - سطر واحد فقط (السجل لا يتراكم). -- **أدلة حالة متعددة**: يحذر عند وجود عدة مجلدات `~/.openclaw` عبر - أدلة منزلية أو عندما يشير `OPENCLAW_STATE_DIR` إلى مكان آخر (قد ينقسم السجل بين التثبيتات). + `~/Library/CloudStorage/...` لأن المسارات المدعومة بالمزامنة قد تسبب إدخال/إخراج أبطأ + وسباقات في القفل/المزامنة. +- **دليل حالة Linux على SD أو eMMC**: يحذر عندما تشير الحالة إلى مصدر + تركيب `mmcblk*`، لأن الإدخال/الإخراج العشوائي المعتمد على SD أو eMMC قد يكون أبطأ + ويؤدي إلى تآكل أسرع تحت كتابات الجلسات وبيانات الاعتماد. +- **غياب أدلة الجلسات**: إن `sessions/` ودليل مخزن الجلسات + مطلوبان للاحتفاظ بالسجل وتجنب أعطال `ENOENT`. +- **عدم تطابق النصوص المفرغة**: يحذر عندما تحتوي إدخالات الجلسات الحديثة على + ملفات نصوص مفرغة مفقودة. +- **الجلسة الرئيسية “JSONL بسطر واحد”**: يعلّم عندما يحتوي النص المفرغ الرئيسي على سطر واحد فقط + (أي أن السجل لا يتراكم). +- **أدلة حالة متعددة**: يحذر عندما توجد عدة مجلدات `~/.openclaw` عبر + الأدلة المنزلية أو عندما يشير `OPENCLAW_STATE_DIR` إلى مكان آخر (قد + ينقسم السجل بين التثبيتات). - **تذكير الوضع البعيد**: إذا كان `gateway.mode=remote`، يذكّرك doctor بتشغيله - على المضيف البعيد (لأن الحالة موجودة هناك). -- **صلاحيات ملف الإعدادات**: يحذر إذا كان `~/.openclaw/openclaw.json` - قابلاً للقراءة من المجموعة/العالم ويعرض تشديده إلى `600`. + على المضيف البعيد (فالحالة توجد هناك). +- **صلاحيات ملف التهيئة**: يحذر إذا كان `~/.openclaw/openclaw.json` + قابلًا للقراءة من المجموعة/العالم ويعرض تشديدها إلى `600`. -### 5) سلامة مصادقة النماذج (انتهاء OAuth) +### 5) سلامة مصادقة النموذج (انتهاء OAuth) -يفحص Doctor ملفات OAuth التعريفية في مخزن المصادقة، ويحذر عندما تكون -الرموز المميزة على وشك الانتهاء/منتهية، ويمكنه تحديثها عندما يكون ذلك آمنًا. وإذا كان -ملف تعريف OAuth/token الخاص بـ Anthropic قديمًا، فإنه يقترح -مفتاح Anthropic API أو مسار Anthropic setup-token. -ولا تظهر مطالبات التحديث إلا عند التشغيل بشكل تفاعلي (TTY)؛ أما `--non-interactive` +يفحص doctor ملفات OAuth التعريفية في مخزن المصادقة، ويحذر عندما تكون الرموز المميزة +قيد الانتهاء/منتهية، ويمكنه تحديثها عندما يكون ذلك آمنًا. إذا كان ملف +تعريف Anthropic OAuth/token قديمًا، فإنه يقترح مفتاح Anthropic API أو +مسار رمز إعداد Anthropic. +تظهر مطالبات التحديث فقط عند التشغيل التفاعلي (TTY)؛ أما `--non-interactive` فيتخطى محاولات التحديث. -وعندما يفشل تحديث OAuth فشلًا دائمًا (مثل `refresh_token_reused` أو -`invalid_grant` أو عندما يخبرك الموفّر بتسجيل الدخول مرة أخرى)، -فإن doctor يبلغ بأن إعادة المصادقة مطلوبة ويطبع -أمر `openclaw models auth login --provider ...` الدقيق المطلوب تشغيله. +عندما يفشل تحديث OAuth بشكل دائم (مثل `refresh_token_reused`، +أو `invalid_grant`، أو عندما يخبرك المزوّد بضرورة تسجيل الدخول مجددًا)، +فإن doctor يبلّغ بأن إعادة المصادقة مطلوبة ويطبع الأمر الدقيق +`openclaw models auth login --provider ...` الذي يجب تشغيله. -كما يبلغ Doctor أيضًا عن ملفات تعريف المصادقة غير القابلة للاستخدام مؤقتًا بسبب: +كما يعرض doctor أيضًا ملفات تعريف المصادقة غير القابلة للاستخدام مؤقتًا بسبب: - فترات تهدئة قصيرة (حدود المعدل/المهلات/إخفاقات المصادقة) - تعطيلات أطول (إخفاقات الفوترة/الرصيد) ### 6) التحقق من نموذج Hooks -إذا كان `hooks.gmail.model` مضبوطًا، فإن doctor يتحقق من مرجع النموذج -مقابل الفهرس وقائمة السماح ويحذر عندما لا يمكن حله أو يكون غير مسموح. +إذا كان `hooks.gmail.model` مضبوطًا، فإن doctor يتحقق من مرجع النموذج مقابل +الكتالوج وقائمة السماح ويحذر عندما لا يمكن حله أو يكون غير مسموح به. -### 7) إصلاح صورة sandbox +### 7) إصلاح صورة Sandbox -عند تفعيل العزل، يفحص doctor صور Docker ويعرض بناءها أو +عندما يكون sandboxing مفعّلًا، يتحقق doctor من صور Docker ويعرض بناءها أو التبديل إلى الأسماء القديمة إذا كانت الصورة الحالية مفقودة. -### 7b) تبعيات وقت تشغيل plugin المجمعة +### 7b) تبعيات وقت تشغيل Plugin المجمّعة -يتحقق Doctor من وجود تبعيات وقت التشغيل الخاصة بالـ plugin المجمعة (مثل -حزم وقت تشغيل Discord plugin) في جذر تثبيت OpenClaw. -وإذا كانت أي منها مفقودة، فإن doctor يبلغ عن الحزم ويثبتها في +يتحقق doctor من أن تبعيات وقت تشغيل Plugin المجمّعة (على سبيل المثال +حزم وقت تشغيل Discord plugin) موجودة في جذر تثبيت OpenClaw. +إذا كانت أي منها مفقودة، فسيعرض doctor الحزم ويثبتها في وضع `openclaw doctor --fix` / `openclaw doctor --repair`. ### 8) ترحيلات خدمة Gateway وتلميحات التنظيف -يكتشف Doctor خدمات Gateway القديمة (launchd/systemd/schtasks) و +يكتشف doctor خدمات Gateway القديمة (launchd/systemd/schtasks) و يعرض إزالتها وتثبيت خدمة OpenClaw باستخدام منفذ Gateway الحالي. -كما يمكنه أيضًا فحص خدمات إضافية شبيهة بـ Gateway وطباعة تلميحات للتنظيف. -وتُعتبر خدمات OpenClaw Gateway المسماة بحسب الملف التعريفي خدمات من الدرجة الأولى ولا -تُوسم بأنها "إضافية". +كما يمكنه أيضًا البحث عن خدمات إضافية شبيهة بـ Gateway وطباعة تلميحات للتنظيف. +وتُعد خدمات OpenClaw Gateway المسماة حسب الملف التعريفي من الدرجة الأولى ولا +تُعلَّم على أنها "إضافية". ### 8b) ترحيل Matrix عند بدء التشغيل -عندما يحتوي حساب قناة Matrix على ترحيل حالة قديم معلّق أو قابل للتنفيذ، +عندما يكون لدى حساب Matrix channel ترحيل حالة قديم معلّق أو قابل للتنفيذ، فإن doctor (في وضع `--fix` / `--repair`) ينشئ لقطة قبل الترحيل ثم -يشغّل خطوات الترحيل بأفضل جهد: ترحيل حالة Matrix القديمة وإعداد -الحالة المشفرة القديمة. وكلتا الخطوتين غير قاتلتين؛ تُسجّل الأخطاء ويستمر -بدء التشغيل. وفي وضع القراءة فقط (`openclaw doctor` بدون `--fix`) يتم -تخطي هذا الفحص بالكامل. +يشغّل خطوات الترحيل بأفضل جهد: ترحيل حالة Matrix القديمة وتجهيز +الحالة المشفرة القديمة. كلتا الخطوتين غير قاتلتين؛ تُسجّل الأخطاء ويستمر +بدء التشغيل. أما في وضع القراءة فقط (`openclaw doctor` بدون `--fix`) فيُتخطى هذا الفحص +بالكامل. -### 9) تحذيرات أمنية +### 8c) إقران الجهاز وانحراف المصادقة -يصدر Doctor تحذيرات عندما يكون موفّر مفتوحًا للرسائل الخاصة من دون قائمة سماح، أو -عندما تكون سياسة ما مهيأة بطريقة خطرة. +يفحص doctor الآن حالة إقران الجهاز كجزء من تمرير السلامة المعتاد. + +ما الذي يعرضه: + +- طلبات الإقران الأولى المعلقة +- ترقيات الدور المعلقة للأجهزة المقترنة بالفعل +- ترقيات النطاق المعلقة للأجهزة المقترنة بالفعل +- إصلاحات عدم تطابق المفتاح العام عندما يبقى معرّف الجهاز مطابقًا لكن + هوية الجهاز لم تعد تطابق السجل المعتمد +- السجلات المقترنة التي تفتقد رمزًا نشطًا لدور معتمد +- الرموز المقترنة التي تنحرف نطاقاتها خارج خط الأساس المعتمد للإقران +- إدخالات cache الرموز المحلية للجهاز الحالي التي تسبق + تدوير الرمز على جانب Gateway أو تحمل بيانات نطاق وصفية قديمة + +لا يوافق doctor تلقائيًا على طلبات الإقران ولا يدوّر رموز الأجهزة تلقائيًا. بل +يطبع الخطوات التالية الدقيقة بدلًا من ذلك: + +- فحص الطلبات المعلقة باستخدام `openclaw devices list` +- اعتماد الطلب المحدد باستخدام `openclaw devices approve ` +- تدوير رمز جديد باستخدام `openclaw devices rotate --device --role ` +- إزالة سجل قديم واعتماده من جديد باستخدام `openclaw devices remove ` + +هذا يغلق الثغرة الشائعة "مقترن بالفعل لكنه ما يزال يطلب الإقران": +فالآن يميّز doctor بين الإقران لأول مرة وبين ترقيات الدور/النطاق +المعلقة وبين انحراف الرمز/هوية الجهاز القديم. + +### 9) التحذيرات الأمنية + +يصدر doctor تحذيرات عندما يكون provider مفتوحًا للرسائل المباشرة من دون +قائمة سماح، أو عندما تُضبط سياسة بطريقة خطرة. ### 10) ‏systemd linger ‏(Linux) -إذا كان يعمل كخدمة مستخدم systemd، فإن doctor يضمن تمكين lingering حتى يبقى -Gateway حيًا بعد تسجيل الخروج. +إذا كان التشغيل كخدمة مستخدم systemd، فإن doctor يضمن تفعيل lingering لكي +يبقى Gateway قيد التشغيل بعد تسجيل الخروج. -### 11) حالة مساحة العمل (Skills، وplugins، والأدلة القديمة) +### 11) حالة Workspace ‏(Skills وPlugins والأدلة القديمة) -يطبع Doctor ملخصًا لحالة مساحة العمل الخاصة بالـ agent الافتراضي: +يطبع doctor ملخصًا عن حالة workspace للعامل الافتراضي: -- **حالة Skills**: يحسب Skills المؤهلة وتلك ذات المتطلبات المفقودة والمحجوبة بقائمة السماح. -- **أدلة مساحة العمل القديمة**: يحذر عند وجود `~/openclaw` أو أدلة مساحة عمل قديمة أخرى - إلى جانب مساحة العمل الحالية. -- **حالة Plugin**: يحسب الإضافات المحمّلة/المعطلة/التي بها أخطاء؛ ويسرد معرفات plugin عند وجود - أي أخطاء؛ ويبلغ عن قدرات bundle plugin. -- **تحذيرات توافق plugin**: يعلّم plugins التي تواجه مشكلات توافق مع +- **حالة Skills**: يحصي Skills المؤهلة، والتي تفتقد المتطلبات، والمحجوبة بقائمة السماح. +- **أدلة Workspace القديمة**: يحذر عند وجود `~/openclaw` أو أدلة workspace قديمة أخرى + إلى جانب workspace الحالي. +- **حالة Plugin**: يحصي Plugins المحمّلة/المعطلة/التي بها أخطاء؛ ويسرد معرّفات Plugins لأي + أخطاء؛ ويعرض قدرات bundle plugin. +- **تحذيرات توافق Plugin**: يعلّم Plugins التي لديها مشكلات توافق مع وقت التشغيل الحالي. -- **تشخيصات plugin**: يعرض أي تحذيرات أو أخطاء وقت التحميل تصدرها - سجلات plugin. +- **تشخيصات Plugin**: يعرض أي تحذيرات أو أخطاء وقت التحميل صادرة عن + سجل Plugin. -### 11b) حجم ملف التمهيد +### 11b) حجم ملف Bootstrap -يفحص Doctor ما إذا كانت ملفات تمهيد مساحة العمل (مثل `AGENTS.md` أو -`CLAUDE.md` أو غيرها من ملفات السياق المحقونة) قريبة من ميزانية -الأحرف المهيأة أو تجاوزتها. ويبلغ لكل ملف عن عدد الأحرف الخام مقابل المحقونة، ونسبة -الاقتطاع، وسبب الاقتطاع (`max/file` أو `max/total`)، وإجمالي الأحرف -المحقونة كنسبة من الميزانية الإجمالية. وعندما تكون الملفات مقتطعة أو قريبة من -الحد، فإن doctor يطبع نصائح لضبط `agents.defaults.bootstrapMaxChars` +يتحقق doctor مما إذا كانت ملفات bootstrap الخاصة بـ workspace (مثل `AGENTS.md`، +أو `CLAUDE.md`، أو ملفات السياق المحقونة الأخرى) قريبة من ميزانية +الأحرف المضبوطة أو تتجاوزها. ويعرض لكل ملف عدد الأحرف الخام مقابل المحقونة، ونسبة +الاقتطاع، وسبب الاقتطاع (`max/file` أو `max/total`)، وإجمالي الأحرف المحقونة +كنسبة من الميزانية الإجمالية. وعندما تكون الملفات مقتطعة أو قريبة من +الحد، يطبع doctor نصائح لضبط `agents.defaults.bootstrapMaxChars` و`agents.defaults.bootstrapTotalMaxChars`. -### 11c) الإكمال الصدفي +### 11c) Shell completion -يفحص Doctor ما إذا كان الإكمال باستخدام Tab مثبتًا للصدفة الحالية +يتحقق doctor مما إذا كان إكمال tab مثبتًا للصدفة الحالية (zsh أو bash أو fish أو PowerShell): - إذا كان ملف تعريف الصدفة يستخدم نمط إكمال ديناميكي بطيء (`source <(openclaw completion ...)`)، فإن doctor يرقّيه إلى - صيغة الملف المخبأ الأسرع. -- إذا كان الإكمال مهيأً في الملف التعريفي لكن ملف التخزين المؤقت مفقود، - فإن doctor يعيد إنشاء التخزين المؤقت تلقائيًا. -- إذا لم يكن هناك أي إكمال مهيأ على الإطلاق، فإن doctor يطلب تثبيته - (في الوضع التفاعلي فقط؛ ويتم تخطيه مع `--non-interactive`). + متغير الملف المخبأ الأسرع. +- إذا كان الإكمال مضبوطًا في ملف التعريف لكن ملف cache مفقودًا، + فإن doctor يعيد إنشاء cache تلقائيًا. +- إذا لم يكن هناك أي إعداد للإكمال إطلاقًا، فإن doctor يعرض تثبيته + (في الوضع التفاعلي فقط؛ ويُتخطى مع `--non-interactive`). -شغّل `openclaw completion --write-state` لإعادة إنشاء التخزين المؤقت يدويًا. +شغّل `openclaw completion --write-state` لإعادة إنشاء cache يدويًا. -### 12) فحوصات مصادقة Gateway (الرمز المحلي) +### 12) فحوصات مصادقة Gateway ‏(الرمز المحلي) -يفحص Doctor جاهزية مصادقة رمز Gateway المحلي. +يتحقق doctor من جاهزية مصادقة رمز Gateway المحلي. - إذا كان وضع الرمز يحتاج إلى رمز ولا يوجد مصدر رمز، فإن doctor يعرض إنشاء واحد. -- إذا كان `gateway.auth.token` مُدارًا بواسطة SecretRef لكنه غير متاح، فإن doctor يحذر ولا يستبدله بنص صريح. -- يفرض `openclaw doctor --generate-gateway-token` الإنشاء فقط عندما لا يكون هناك SecretRef مهيأ للرمز. +- إذا كانت `gateway.auth.token` مُدارة بواسطة SecretRef لكنها غير متاحة، فإن doctor يحذر ولا يستبدلها بنص عادي. +- يفرض `openclaw doctor --generate-gateway-token` الإنشاء فقط عندما لا يكون هناك SecretRef مضبوط للرمز. ### 12b) إصلاحات للقراءة فقط مع مراعاة SecretRef -تحتاج بعض مسارات الإصلاح إلى فحص بيانات الاعتماد المهيأة من دون إضعاف +تحتاج بعض تدفقات الإصلاح إلى فحص بيانات الاعتماد المضبوطة من دون إضعاف سلوك الفشل السريع في وقت التشغيل. -- يستخدم `openclaw doctor --fix` الآن نموذج الملخص نفسه الخاص بـ SecretRef للقراءة فقط كما في أوامر عائلة status لإصلاحات إعدادات مستهدفة. -- مثال: يحاول إصلاح `allowFrom` / `groupAllowFrom` `@username` في Telegram استخدام بيانات اعتماد البوت المهيأة عندما تكون متاحة. -- إذا كان رمز Telegram bot مهيأً عبر SecretRef لكنه غير متاح في مسار الأمر الحالي، فإن doctor يبلغ بأن بيانات الاعتماد مهيأة ولكنها غير متاحة ويتخطى الحل التلقائي بدلًا من الانهيار أو الإبلاغ خطأً عن أن الرمز مفقود. +- يستخدم `openclaw doctor --fix` الآن نموذج الملخص نفسه للقراءة فقط مع مراعاة SecretRef كما في أوامر عائلة status لإجراء إصلاحات تهيئة مستهدفة. +- مثال: يحاول إصلاح Telegram ‏`allowFrom` / `groupAllowFrom` الخاص بـ `@username` استخدام بيانات اعتماد البوت المضبوطة عند توفرها. +- إذا كان رمز Telegram bot مضبوطًا عبر SecretRef لكنه غير متاح في مسار الأمر الحالي، فإن doctor يبلّغ أن بيانات الاعتماد مضبوطة ولكن غير متاحة، ويتخطى الحل التلقائي بدلًا من التعطل أو الإبلاغ خطأً عن أن الرمز مفقود. ### 13) فحص سلامة Gateway + إعادة التشغيل -يشغّل Doctor فحص سلامة ويعرض إعادة تشغيل Gateway عندما يبدو +يشغّل doctor فحص سلامة ويعرض إعادة تشغيل Gateway عندما يبدو غير سليم. ### 13b) جاهزية البحث في الذاكرة -يفحص Doctor ما إذا كان موفّر embedding المهيأ للبحث في الذاكرة جاهزًا -للـ agent الافتراضي. ويعتمد السلوك على backend والموفّر المهيأين: +يتحقق doctor مما إذا كان embedding provider المضبوط للبحث في الذاكرة جاهزًا +للعامل الافتراضي. ويعتمد السلوك على الواجهة الخلفية وprovider المضبوطين: -- **QMD backend**: يفحص ما إذا كان الملف الثنائي `qmd` متاحًا وقابلًا للتشغيل. - وإذا لم يكن كذلك، يطبع إرشادات إصلاح بما في ذلك حزمة npm وخيار مسار ثنائي يدوي. -- **موفّر محلي صريح**: يفحص وجود ملف نموذج محلي أو عنوان URL معرّف - لنموذج بعيد/قابل للتنزيل. وإذا كان مفقودًا، يقترح التبديل إلى موفّر بعيد. -- **موفّر بعيد صريح** (`openai` و`voyage` وغيرها): يتحقق من وجود مفتاح API +- **الواجهة الخلفية QMD**: يفحص ما إذا كان الملف الثنائي `qmd` متاحًا وقابلًا للتشغيل. + وإذا لم يكن كذلك، فيطبع إرشادات إصلاح تشمل حزمة npm وخيار مسار ثنائي يدوي. +- **Local provider صريح**: يتحقق من وجود ملف نموذج محلي أو عنوان URL + معروف لنموذج بعيد/قابل للتنزيل. وإذا كان مفقودًا، يقترح التبديل إلى provider بعيد. +- **Remote provider صريح** (`openai` أو `voyage` أو غيرهما): يتحقق من وجود مفتاح API في البيئة أو مخزن المصادقة. ويطبع تلميحات إصلاح عملية إذا كان مفقودًا. -- **موفّر تلقائي**: يفحص توفر النموذج المحلي أولًا، ثم يحاول كل موفّر بعيد - وفق ترتيب الاختيار التلقائي. +- **Auto provider**: يتحقق أولًا من توفر النموذج المحلي، ثم يجرّب كل + remote providers وفق ترتيب الاختيار التلقائي. -وعندما تكون نتيجة فحص Gateway متاحة (كان Gateway سليمًا وقت -الفحص)، فإن doctor يطابق نتيجتها مع الإعدادات المرئية من CLI ويشير +عندما تتوفر نتيجة فحص من Gateway (أي كان Gateway سليمًا وقت +الفحص)، يقارن doctor نتيجتها مع التهيئة المرئية لـ CLI ويشير إلى أي اختلاف. استخدم `openclaw memory status --deep` للتحقق من جاهزية embedding وقت التشغيل. ### 14) تحذيرات حالة القنوات -إذا كان Gateway سليمًا، فإن doctor يشغّل فحص حالة القنوات ويبلغ -عن التحذيرات مع الإصلاحات المقترحة. +إذا كان Gateway سليمًا، يشغّل doctor فحص حالة القنوات ويعرض +التحذيرات مع الإصلاحات المقترحة. -### 15) تدقيق إعدادات supervisor + الإصلاح +### 15) تدقيق تهيئة المشرف + الإصلاح -يفحص Doctor إعدادات supervisor المثبّتة (launchd/systemd/schtasks) لاكتشاف -الافتراضيات المفقودة أو القديمة (مثل تبعيات systemd للشبكة عند الاتصال و +يفحص doctor تهيئة المشرف المثبتة (`launchd/systemd/schtasks`) بحثًا عن +القيم الافتراضية المفقودة أو القديمة (مثل تبعيات systemd الخاصة بـ network-online و تأخير إعادة التشغيل). وعندما يجد عدم تطابق، فإنه يوصي بالتحديث ويمكنه -إعادة كتابة ملف الخدمة/المهمة إلى الافتراضيات الحالية. +إعادة كتابة ملف الخدمة/المهمة إلى القيم الافتراضية الحالية. ملاحظات: -- يطلب `openclaw doctor` تأكيدًا قبل إعادة كتابة إعدادات supervisor. +- يطلب `openclaw doctor` التأكيد قبل إعادة كتابة تهيئة المشرف. - يقبل `openclaw doctor --yes` مطالبات الإصلاح الافتراضية. -- يطبّق `openclaw doctor --repair` الإصلاحات الموصى بها من دون مطالبات. -- يقوم `openclaw doctor --repair --force` باستبدال إعدادات supervisor المخصصة. -- إذا كانت مصادقة الرمز تتطلب رمزًا وكان `gateway.auth.token` مُدارًا بواسطة SecretRef، فإن تثبيت/إصلاح خدمة doctor يتحقق من SecretRef لكنه لا يحفظ قيم الرمز النصية الصريحة المحلولة في بيانات بيئة خدمة supervisor. -- إذا كانت مصادقة الرمز تتطلب رمزًا وكان SecretRef المهيأ للرمز غير محلول، فإن doctor يمنع مسار التثبيت/الإصلاح مع إرشادات عملية. -- إذا كان كل من `gateway.auth.token` و`gateway.auth.password` مهيأين وكان `gateway.auth.mode` غير مضبوط، فإن doctor يمنع التثبيت/الإصلاح حتى يتم ضبط الوضع صراحةً. -- بالنسبة إلى وحدات systemd الخاصة بمستخدمي Linux، تشمل فحوصات انجراف الرمز في doctor الآن كلا المصدرين `Environment=` و`EnvironmentFile=` عند مقارنة بيانات مصادقة الخدمة. +- يطبّق `openclaw doctor --repair` الإصلاحات الموصى بها بدون مطالبات. +- يستبدل `openclaw doctor --repair --force` تهيئات المشرف المخصصة. +- إذا كانت مصادقة الرمز تتطلب رمزًا وكانت `gateway.auth.token` مُدارة بواسطة SecretRef، فإن تثبيت/إصلاح خدمة doctor يتحقق من SecretRef لكنه لا يحفظ قيم الرمز العادي المحلولة في بيانات بيئة خدمة المشرف الوصفية. +- إذا كانت مصادقة الرمز تتطلب رمزًا وكان token SecretRef المضبوط غير محلول، فإن doctor يمنع مسار التثبيت/الإصلاح مع إرشادات عملية. +- إذا كان كل من `gateway.auth.token` و`gateway.auth.password` مضبوطين وكان `gateway.auth.mode` غير مضبوط، فإن doctor يمنع التثبيت/الإصلاح حتى يُضبط الوضع صراحةً. +- بالنسبة إلى وحدات user-systemd على Linux، تتضمن فحوصات انحراف الرمز في doctor الآن كلاً من مصدري `Environment=` و`EnvironmentFile=` عند مقارنة بيانات مصادقة الخدمة الوصفية. - يمكنك دائمًا فرض إعادة كتابة كاملة عبر `openclaw gateway install --force`. ### 16) تشخيصات وقت تشغيل Gateway + المنفذ -يفحص Doctor وقت تشغيل الخدمة (PID، وآخر حالة خروج) ويحذر عندما تكون -الخدمة مثبتة لكنها لا تعمل فعليًا. كما يفحص تعارضات -المنفذ على منفذ Gateway (الافتراضي `18789`) ويبلغ عن الأسباب المحتملة (Gateway يعمل بالفعل، +يفحص doctor وقت تشغيل الخدمة (PID، وآخر حالة خروج) ويحذر عندما تكون +الخدمة مثبتة لكنها لا تعمل فعليًا. كما يتحقق أيضًا من تعارضات المنفذ +على منفذ Gateway (الافتراضي `18789`) ويعرض الأسباب المحتملة (Gateway يعمل بالفعل، أو نفق SSH). ### 17) أفضل ممارسات وقت تشغيل Gateway -يحذر Doctor عندما تعمل خدمة Gateway على Bun أو على مسار Node مُدار بالإصدارات -(`nvm` أو `fnm` أو `volta` أو `asdf` وغيرها). تتطلب قنوات WhatsApp + Telegram -Node، وقد تتعطل مسارات مديري الإصدارات بعد الترقيات لأن الخدمة لا -تحمّل تهيئة الصدفة لديك. ويعرض doctor الترحيل إلى تثبيت Node نظامي عندما +يحذر doctor عندما تعمل خدمة Gateway على Bun أو على مسار Node مُدار بإدارة إصدارات +(`nvm` أو `fnm` أو `volta` أو `asdf` أو غيرها). تتطلب قنوات WhatsApp + Telegram ‏Node، +وقد تتعطل مسارات إدارة الإصدارات بعد الترقيات لأن الخدمة لا +تحمّل تهيئة الصدفة الخاصة بك. يعرض doctor الترحيل إلى تثبيت Node على مستوى النظام عندما يكون متاحًا (Homebrew/apt/choco). -### 18) كتابة الإعدادات + بيانات تعريف المعالج +### 18) كتابة التهيئة + بيانات wizard الوصفية -يحفظ Doctor أي تغييرات في الإعدادات ويضع بيانات تعريف المعالج لتسجيل +يحفظ doctor أي تغييرات في التهيئة ويضع وسم بيانات wizard الوصفية لتسجيل تشغيل doctor. -### 19) نصائح مساحة العمل (النسخ الاحتياطي + نظام الذاكرة) +### 19) نصائح Workspace ‏(النسخ الاحتياطي + نظام الذاكرة) -يقترح Doctor نظام ذاكرة لمساحة العمل عند غيابه ويطبع نصيحة للنسخ الاحتياطي -إذا لم تكن مساحة العمل تحت git بالفعل. +يقترح doctor نظام ذاكرة لـ workspace عند غيابه ويطبع نصيحة حول النسخ الاحتياطي +إذا لم يكن workspace تحت git بالفعل. -راجع [/concepts/agent-workspace](/ar/concepts/agent-workspace) للحصول على دليل كامل إلى -بنية مساحة العمل والنسخ الاحتياطي عبر git (يُوصى باستخدام GitHub أو GitLab خاص). +راجع [/concepts/agent-workspace](/ar/concepts/agent-workspace) للحصول على دليل كامل حول +بنية workspace والنسخ الاحتياطي عبر git (يوصى باستخدام GitHub أو GitLab خاص). diff --git a/docs/ar/gateway/index.md b/docs/ar/gateway/index.md index 42070831c..743cfce3b 100644 --- a/docs/ar/gateway/index.md +++ b/docs/ar/gateway/index.md @@ -4,30 +4,30 @@ read_when: summary: دليل التشغيل لخدمة Gateway ودورة حياتها وعملياتها title: دليل تشغيل Gateway x-i18n: - generated_at: "2026-04-07T07:17:46Z" + generated_at: "2026-04-20T07:29:32Z" model: gpt-5.4 provider: openai - source_hash: fd2c21036e88612861ef2195b8ff7205aca31386bb11558614ade8d1a54fdebd + source_hash: e1004cdd43b1db6794f3ca83da38dbdb231a1976329d9d6d851e2b02405278d8 source_path: gateway/index.md workflow: 15 --- # دليل تشغيل Gateway -استخدم هذه الصفحة لبدء التشغيل في اليوم الأول وعمليات التشغيل في اليوم الثاني لخدمة Gateway. +استخدم هذه الصفحة لبدء التشغيل في اليوم الأول وعمليات خدمة Gateway في اليوم الثاني. - - تشخيص يبدأ من الأعراض مع سلاسل أوامر دقيقة وتواقيع السجلات. + + تشخيص يبدأ من الأعراض مع تسلسلات أوامر دقيقة وتواقيع السجلات. - - دليل إعداد موجّه للمهام + مرجع إعدادات كامل. + + دليل إعداد موجّه حسب المهام + مرجع إعداد كامل. - عقد SecretRef وسلوك اللقطة في وقت التشغيل وعمليات الترحيل/إعادة التحميل. + عقد SecretRef، وسلوك اللقطة وقت التشغيل، وعمليات الترحيل/إعادة التحميل. - قواعد `secrets apply` الدقيقة للهدف/المسار وسلوك ملفات تعريف المصادقة المعتمدة على المراجع فقط. + قواعد الهدف/المسار الدقيقة لـ `secrets apply` وسلوك ملف تعريف المصادقة المعتمد على المراجع فقط. @@ -38,9 +38,9 @@ x-i18n: ```bash openclaw gateway --port 18789 -# debug/trace mirrored to stdio +# ينعكس debug/trace إلى stdio openclaw gateway --port 18789 --verbose -# force-kill listener on selected port, then start +# اقتل بالقوة المستمع على المنفذ المحدد، ثم ابدأ openclaw gateway --force ``` @@ -54,27 +54,27 @@ openclaw status openclaw logs --follow ``` -الأساس السليم: `Runtime: running` و`RPC probe: ok`. +خط الأساس السليم: `Runtime: running` و`Connectivity probe: ok` و`Capability: ...` المطابقة لما تتوقعه. استخدم `openclaw gateway status --require-rpc` عندما تحتاج إلى إثبات RPC بنطاق القراءة، وليس مجرد إمكانية الوصول. - + ```bash openclaw channels status --probe ``` -مع Gateway يمكن الوصول إليه، يشغّل هذا فحوصات مباشرة لكل حساب للقنوات وتدقيقات اختيارية. -إذا تعذر الوصول إلى Gateway، يعود CLI إلى ملخصات القنوات المعتمدة على الإعدادات فقط بدلًا -من مخرجات الفحص المباشر. +مع Gateway يمكن الوصول إليه، يشغّل هذا فحوصات قنوات مباشرة لكل حساب وتدقيقات اختيارية. +إذا تعذر الوصول إلى Gateway، يعود CLI إلى ملخصات القنوات المعتمدة على الإعداد فقط +بدلًا من مخرجات الفحص المباشر. -تراقب إعادة تحميل إعدادات Gateway مسار ملف الإعدادات النشط (المُحدَّد من افتراضيات الملف الشخصي/الحالة، أو `OPENCLAW_CONFIG_PATH` عند ضبطه). +تراقب إعادة تحميل إعداد Gateway مسار ملف الإعداد النشط (يُحل من الإعدادات الافتراضية للملف الشخصي/الحالة، أو `OPENCLAW_CONFIG_PATH` عند تعيينه). الوضع الافتراضي هو `gateway.reload.mode="hybrid"`. -بعد أول تحميل ناجح، تقدّم العملية الجارية اللقطة النشطة من الإعدادات الموجودة في الذاكرة؛ وتؤدي إعادة التحميل الناجحة إلى تبديل تلك اللقطة بشكل ذري. +بعد أول تحميل ناجح، تخدم العملية الجارية لقطة الإعداد النشطة داخل الذاكرة؛ وتبدّل إعادة التحميل الناجحة تلك اللقطة بشكل ذري. ## نموذج وقت التشغيل @@ -82,17 +82,17 @@ openclaw channels status --probe - عملية واحدة تعمل دائمًا للتوجيه ومستوى التحكم واتصالات القنوات. - منفذ واحد متعدد الإرسال من أجل: - WebSocket للتحكم/RPC - - واجهات HTTP API متوافقة مع OpenAI (`/v1/models` و`/v1/embeddings` و`/v1/chat/completions` و`/v1/responses` و`/tools/invoke`) - - Control UI وhooks + - واجهات HTTP البرمجية، متوافقة مع OpenAI (`/v1/models`, `/v1/embeddings`, `/v1/chat/completions`, `/v1/responses`, `/tools/invoke`) + - واجهة التحكم وHooks - وضع الربط الافتراضي: `loopback`. -- المصادقة مطلوبة افتراضيًا. تستخدم إعدادات السر المشترك +- تكون المصادقة مطلوبة افتراضيًا. تستخدم إعدادات السر المشترك `gateway.auth.token` / `gateway.auth.password` (أو `OPENCLAW_GATEWAY_TOKEN` / `OPENCLAW_GATEWAY_PASSWORD`)، ويمكن لإعدادات الوكيل العكسي غير المعتمدة على loopback استخدام `gateway.auth.mode: "trusted-proxy"`. ## نقاط النهاية المتوافقة مع OpenAI -أصبحت واجهة التوافق الأعلى أثرًا في OpenClaw الآن هي: +أصبحت أعلى واجهات التوافق ذات الأثر الأكبر في OpenClaw الآن: - `GET /v1/models` - `GET /v1/models/{id}` @@ -103,38 +103,38 @@ openclaw channels status --probe لماذا تهم هذه المجموعة: - تتحقق معظم تكاملات Open WebUI وLobeChat وLibreChat من `/v1/models` أولًا. -- تتوقع العديد من مسارات RAG والذاكرة وجود `/v1/embeddings`. -- تفضّل العملاء الأصليون للوكلاء بشكل متزايد `/v1/responses`. +- تتوقع كثير من مسارات RAG والذاكرة `/v1/embeddings`. +- يفضل العملاء الأصليون للوكلاء بشكل متزايد `/v1/responses`. ملاحظة تخطيطية: -- `/v1/models` موجّه للوكلاء أولًا: فهو يعيد `openclaw` و`openclaw/default` و`openclaw/`. -- `openclaw/default` هو الاسم المستعار الثابت الذي يطابق دائمًا الوكيل الافتراضي المكوّن. -- استخدم `x-openclaw-model` عندما تريد تجاوز مزوّد/نموذج الخلفية؛ وإلا يظل إعداد النموذج والتضمين العادي للوكيل المحدد هو المتحكم. +- `/v1/models` موجه للوكلاء أولًا: فهو يعيد `openclaw` و`openclaw/default` و`openclaw/`. +- `openclaw/default` هو الاسم المستعار المستقر الذي يرتبط دائمًا بالوكيل الافتراضي المضبوط. +- استخدم `x-openclaw-model` عندما تريد تجاوزًا لمزوّد/نموذج الواجهة الخلفية؛ وإلا فسيظل إعداد النموذج والتضمين العادي للوكيل المحدد هو المتحكم. -كل هذه النقاط تعمل على منفذ Gateway الرئيسي وتستخدم نفس حد مصادقة المشغّل الموثوق مثل بقية واجهة HTTP API الخاصة بـ Gateway. +كل هذه تعمل على منفذ Gateway الرئيسي وتستخدم نفس حد مصادقة المشغل الموثوق مثل بقية واجهة Gateway HTTP البرمجية. ### أسبقية المنفذ والربط -| الإعداد | ترتيب التحديد | -| ------------ | ------------------------------------------------------------ | +| الإعداد | ترتيب الحل | +| ------- | ----------- | | منفذ Gateway | `--port` → `OPENCLAW_GATEWAY_PORT` → `gateway.port` → `18789` | -| وضع الربط | CLI/override → `gateway.bind` → `loopback` | +| وضع الربط | CLI/override → `gateway.bind` → `loopback` | ### أوضاع إعادة التحميل السريع -| `gateway.reload.mode` | السلوك | -| --------------------- | ---------------------------------------- | -| `off` | لا توجد إعادة تحميل للإعدادات | -| `hot` | تطبيق التغييرات الآمنة للتحديث السريع فقط | -| `restart` | إعادة التشغيل عند التغييرات التي تتطلب إعادة تحميل | -| `hybrid` (الافتراضي) | تطبيق سريع عندما يكون آمنًا، وإعادة تشغيل عند الحاجة | +| `gateway.reload.mode` | السلوك | +| --------------------- | ------ | +| `off` | لا توجد إعادة تحميل للإعداد | +| `hot` | طبّق فقط التغييرات الآمنة للإعادة السريعة | +| `restart` | أعد التشغيل عند التغييرات التي تتطلب إعادة تحميل | +| `hybrid` (افتراضي) | تطبيق سريع عند الأمان، وإعادة تشغيل عند الحاجة | -## مجموعة أوامر المشغّل +## مجموعة أوامر المشغل ```bash openclaw gateway status -openclaw gateway status --deep # adds a system-level service scan +openclaw gateway status --deep # يضيف فحص خدمة على مستوى النظام openclaw gateway status --json openclaw gateway install openclaw gateway restart @@ -144,15 +144,15 @@ openclaw logs --follow openclaw doctor ``` -إن `gateway status --deep` مخصص لاكتشاف الخدمات الإضافية (وحدات LaunchDaemons/systemd system -وschtasks)، وليس لفحص سلامة RPC أعمق. +إن `gateway status --deep` مخصص لاكتشاف الخدمات الإضافية (وحدات +LaunchDaemons/systemd system/schtasks)، وليس لفحص سلامة RPC أعمق. -## عدة Gateways (على المضيف نفسه) +## عدة Gateways (على نفس المضيف) -يجب أن تشغّل معظم عمليات التثبيت Gateway واحدًا لكل جهاز. يمكن لـ Gateway واحد استضافة عدة +ينبغي أن تشغّل معظم عمليات التثبيت Gateway واحدة لكل جهاز. ويمكن لـ Gateway واحدة استضافة عدة وكلاء وقنوات. -تحتاج إلى عدة Gateways فقط عندما تريد العزل عمدًا أو روبوت إنقاذ. +أنت تحتاج إلى عدة Gateways فقط عندما تريد العزل عمدًا أو bot إنقاذ. فحوصات مفيدة: @@ -161,15 +161,15 @@ openclaw gateway status --deep openclaw gateway probe ``` -ما الذي يجب توقعه: +ما الذي يمكن توقعه: -- يمكن أن يبلّغ `gateway status --deep` عن `Other gateway-like services detected (best effort)` - ويعرض تلميحات تنظيف عندما تظل تثبيتات launchd/systemd/schtasks القديمة موجودة. -- يمكن أن يحذّر `gateway probe` من `multiple reachable gateways` عندما يستجيب أكثر من هدف +- قد يعرض `gateway status --deep` الرسالة `Other gateway-like services detected (best effort)` + ويطبع تلميحات تنظيف عندما تظل تثبيتات launchd/systemd/schtasks القديمة موجودة. +- قد يحذر `gateway probe` من `multiple reachable gateways` عندما يستجيب أكثر من هدف واحد. -- إذا كان ذلك مقصودًا، فاعزل المنافذ والإعدادات/الحالة وجذور مساحة العمل لكل Gateway. +- إذا كان ذلك مقصودًا، فاعزل المنافذ والإعداد والحالة وجذور مساحة العمل لكل Gateway. -إعداد مفصل: [/gateway/multiple-gateways](/ar/gateway/multiple-gateways). +الإعداد التفصيلي: [/gateway/multiple-gateways](/ar/gateway/multiple-gateways). ## الوصول عن بُعد @@ -180,19 +180,19 @@ openclaw gateway probe ssh -N -L 18789:127.0.0.1:18789 user@host ``` -ثم صِل العملاء محليًا بـ `ws://127.0.0.1:18789`. +ثم صِل العملاء محليًا إلى `ws://127.0.0.1:18789`. -لا تتجاوز أنفاق SSH مصادقة Gateway. في إعدادات السر المشترك، لا يزال يتعين على العملاء -إرسال `token`/`password` حتى عبر النفق. أما في الأوضاع التي تحمل هوية، -فلا يزال يتعين على الطلب استيفاء مسار المصادقة هذا. +لا تتجاوز أنفاق SSH مصادقة Gateway. بالنسبة إلى مصادقة السر المشترك، ما يزال على العملاء +إرسال `token`/`password` حتى عبر النفق. أما في الأوضاع المعتمدة على الهوية، +فما يزال على الطلب استيفاء مسار المصادقة ذلك. -راجع: [Gateway البعيد](/ar/gateway/remote) و[المصادقة](/ar/gateway/authentication) و[Tailscale](/ar/gateway/tailscale). +راجع: [Gateway عن بُعد](/ar/gateway/remote)، [المصادقة](/ar/gateway/authentication)، [Tailscale](/ar/gateway/tailscale). ## الإشراف ودورة حياة الخدمة -استخدم عمليات التشغيل الخاضعة للإشراف من أجل موثوقية شبيهة بالإنتاج. +استخدم التشغيل الخاضع للإشراف للحصول على موثوقية أقرب إلى الإنتاج. @@ -204,7 +204,7 @@ openclaw gateway restart openclaw gateway stop ``` -تسميات LaunchAgent هي `ai.openclaw.gateway` (الافتراضي) أو `ai.openclaw.` (ملف شخصي مسمّى). يقوم `openclaw doctor` بتدقيق انجراف إعدادات الخدمة وإصلاحه. +تسميات LaunchAgent هي `ai.openclaw.gateway` (الافتراضي) أو `ai.openclaw.` (ملف شخصي مسمّى). يقوم `openclaw doctor` بتدقيق انجراف إعداد الخدمة وإصلاحه. @@ -254,35 +254,35 @@ openclaw gateway restart openclaw gateway stop ``` -يستخدم بدء التشغيل المُدار الأصلي في Windows Scheduled Task باسم `OpenClaw Gateway` -(أو `OpenClaw Gateway ()` للملفات الشخصية المسمّاة). إذا تم رفض إنشاء -Scheduled Task، يعود OpenClaw إلى مشغّل داخل مجلد Startup لكل مستخدم +يستخدم بدء التشغيل المُدار الأصلي في Windows مهمة مجدولة باسم `OpenClaw Gateway` +(أو `OpenClaw Gateway ()` للملفات الشخصية المسماة). إذا تم رفض إنشاء +المهمة المجدولة، يعود OpenClaw إلى مُشغّل داخل مجلد Startup خاص بالمستخدم يشير إلى `gateway.cmd` داخل دليل الحالة. -استخدم وحدة نظام للمضيفات متعددة المستخدمين/الدائمة التشغيل. +استخدم وحدة نظام للمضيفات متعددة المستخدمين/العاملة دائمًا. ```bash sudo systemctl daemon-reload sudo systemctl enable --now openclaw-gateway[-].service ``` -استخدم نص الخدمة نفسه كما في وحدة المستخدم، ولكن ثبّته ضمن +استخدم نفس جسم الخدمة مثل وحدة المستخدم، ولكن ثبّته تحت `/etc/systemd/system/openclaw-gateway[-].service` واضبط -`ExecStart=` إذا كان ملف `openclaw` التنفيذي لديك موجودًا في مكان آخر. +`ExecStart=` إذا كان الملف التنفيذي `openclaw` لديك موجودًا في مكان آخر. ## عدة Gateways على مضيف واحد -يجب أن تشغّل معظم الإعدادات **Gateway** واحدًا. -استخدم عدة Gateways فقط للعزل/الاستمرارية الصارمة (على سبيل المثال ملف إنقاذ). +ينبغي أن تشغّل معظم الإعدادات **Gateway واحدة**. +استخدم عدة Gateways فقط للعزل/التكرار الصارم (مثل ملف شخصي للإنقاذ). -قائمة التحقق لكل نسخة: +قائمة التحقق لكل مثيل: - `gateway.port` فريد - `OPENCLAW_CONFIG_PATH` فريد @@ -298,7 +298,7 @@ OPENCLAW_CONFIG_PATH=~/.openclaw/b.json OPENCLAW_STATE_DIR=~/.openclaw-b opencla راجع: [عدة Gateways](/ar/gateway/multiple-gateways). -### المسار السريع لملف التطوير +### المسار السريع لملف dev الشخصي ```bash openclaw --dev setup @@ -306,25 +306,25 @@ openclaw --dev gateway --allow-unconfigured openclaw --dev status ``` -تتضمن القيم الافتراضية حالة/إعدادات معزولة ومنفذ Gateway أساسي `19001`. +تتضمن الإعدادات الافتراضية حالة/إعدادًا معزولين ومنفذ Gateway أساسي `19001`. -## مرجع سريع للبروتوكول (منظور المشغّل) +## مرجع سريع للبروتوكول (منظور المشغل) - يجب أن يكون أول إطار من العميل هو `connect`. - يعيد Gateway لقطة `hello-ok` (`presence` و`health` و`stateVersion` و`uptimeMs` والحدود/السياسة). -- `hello-ok.features.methods` / `events` هما قائمة اكتشاف متحفظة، وليسا +- إن `hello-ok.features.methods` / `events` هي قائمة اكتشاف محافظة، وليست تفريغًا مولدًا لكل مسار مساعد قابل للاستدعاء. - الطلبات: `req(method, params)` → `res(ok/payload|error)`. -- تشمل الأحداث الشائعة `connect.challenge` و`agent` و`chat` و - `session.message` و`session.tool` و`sessions.changed` و`presence` و`tick` و - `health` و`heartbeat` وأحداث دورة حياة الاقتران/الموافقة و`shutdown`. +- تتضمن الأحداث الشائعة `connect.challenge` و`agent` و`chat`، + و`session.message` و`session.tool` و`sessions.changed` و`presence` و`tick`، + و`health` و`heartbeat`، وأحداث دورة حياة الاقتران/الموافقة، و`shutdown`. -تشغيلات الوكيل تمر بمرحلتين: +تعمل تشغيلات الوكيل على مرحلتين: -1. إقرار قبول فوري (`status:"accepted"`) -2. استجابة إكمال نهائية (`status:"ok"|"error"`)، مع أحداث `agent` متدفقة بينهما. +1. إشعار قبول فوري (`status:"accepted"`) +2. استجابة إكمال نهائية (`status:"ok"|"error"`)، مع تدفق أحداث `agent` بينهما. -راجع وثائق البروتوكول الكاملة: [بروتوكول Gateway](/ar/gateway/protocol). +راجع مستندات البروتوكول الكاملة: [بروتوكول Gateway](/ar/gateway/protocol). ## الفحوصات التشغيلية @@ -341,26 +341,26 @@ openclaw channels status --probe openclaw health ``` -### استعادة الفجوات +### استرداد الفجوات -لا تُعاد الأحداث. عند وجود فجوات في التسلسل، حدّث الحالة (`health` و`system-presence`) قبل المتابعة. +لا تُعاد الأحداث. عند وجود فجوات في التسلسل، حدّث الحالة (`health`, `system-presence`) قبل المتابعة. ## تواقيع الأعطال الشائعة -| التوقيع | المشكلة المحتملة | -| ------------------------------------------------------------- | ---------------------------------------------------------------------------------- | -| `refusing to bind gateway ... without auth` | ربط غير loopback من دون مسار مصادقة صالح لـ Gateway | -| `another gateway instance is already listening` / `EADDRINUSE` | تعارض منفذ | -| `Gateway start blocked: set gateway.mode=local` | الإعداد مضبوط على الوضع البعيد، أو ختم الوضع المحلي مفقود من إعداد تالف | -| `unauthorized` during connect | عدم تطابق المصادقة بين العميل وGateway | +| التوقيع | المشكلة المحتملة | +| ------- | ---------------- | +| `refusing to bind gateway ... without auth` | ربط غير loopback من دون مسار مصادقة صالح لـ Gateway | +| `another gateway instance is already listening` / `EADDRINUSE` | تعارض منفذ | +| `Gateway start blocked: set gateway.mode=local` | الإعداد مضبوط على الوضع البعيد، أو أن ختم الوضع المحلي مفقود من إعداد تالف | +| `unauthorized` during connect | عدم تطابق المصادقة بين العميل وGateway | -للاطلاع على سلاسل تشخيص كاملة، استخدم [استكشاف أخطاء Gateway](/ar/gateway/troubleshooting). +للحصول على تسلسلات تشخيص كاملة، استخدم [استكشاف أخطاء Gateway وإصلاحها](/ar/gateway/troubleshooting). -## ضمانات السلامة +## ضمانات الأمان -- تفشل عملاء بروتوكول Gateway بسرعة عندما لا يكون Gateway متاحًا (من دون رجوع احتياطي ضمني إلى القناة المباشرة). +- يفشل عملاء بروتوكول Gateway بسرعة عند عدم توفر Gateway (من دون أي رجوع ضمني إلى قناة مباشرة). - تُرفض الإطارات الأولى غير الصالحة/غير `connect` ويُغلق الاتصال. -- يرسل الإغلاق السلس الحدث `shutdown` قبل إغلاق المقبس. +- يصدر الإيقاف السلس الحدث `shutdown` قبل إغلاق المقبس. --- @@ -368,7 +368,7 @@ openclaw health - [استكشاف الأخطاء وإصلاحها](/ar/gateway/troubleshooting) - [العملية الخلفية](/ar/gateway/background-process) -- [الإعدادات](/ar/gateway/configuration) -- [السلامة](/ar/gateway/health) +- [الإعداد](/ar/gateway/configuration) +- [الصحة](/ar/gateway/health) - [Doctor](/ar/gateway/doctor) - [المصادقة](/ar/gateway/authentication) diff --git a/docs/ar/gateway/troubleshooting.md b/docs/ar/gateway/troubleshooting.md index 16be6defe..e1136443c 100644 --- a/docs/ar/gateway/troubleshooting.md +++ b/docs/ar/gateway/troubleshooting.md @@ -1,21 +1,21 @@ --- read_when: - أحالَك مركز استكشاف الأخطاء وإصلاحها إلى هنا لإجراء تشخيص أعمق - - أنت بحاجة إلى أقسام دليل تشغيل قائمة على الأعراض ومستقرة تتضمن أوامر دقيقة -summary: دليل متعمق لاستكشاف الأخطاء وإصلاحها لـ gateway والقنوات والأتمتة والعُقد والمتصفح + - تحتاج إلى أقسام دليل إجرائي مستقرة قائمة على الأعراض مع أوامر دقيقة +summary: دليل استكشاف الأخطاء وإصلاحها المتعمق لـ Gateway والقنوات والأتمتة والعُقد والمتصفح title: استكشاف الأخطاء وإصلاحها x-i18n: - generated_at: "2026-04-11T02:45:06Z" + generated_at: "2026-04-20T07:29:33Z" model: gpt-5.4 provider: openai - source_hash: 7ef2faccba26ede307861504043a6415bc1f12dc64407771106f63ddc5b107f5 + source_hash: d93a82407dbb1314b91a809ff9433114e1e9a3b56d46547ef53a8196bac06260 source_path: gateway/troubleshooting.md workflow: 15 --- # استكشاف أخطاء Gateway وإصلاحها -هذه الصفحة هي دليل التشغيل المتعمق. +هذه الصفحة هي الدليل الإجرائي المتعمق. ابدأ من [/help/troubleshooting](/ar/help/troubleshooting) إذا كنت تريد مسار الفرز السريع أولًا. ## تسلسل الأوامر @@ -32,13 +32,14 @@ openclaw channels status --probe الإشارات الصحية المتوقعة: -- يعرض `openclaw gateway status` القيمتين `Runtime: running` و`RPC probe: ok`. -- يبلّغ `openclaw doctor` عن عدم وجود مشكلات إعداد/خدمة معيقة. -- يعرض `openclaw channels status --probe` حالة النقل المباشرة لكل حساب، ونتائج الفحص/التدقيق حيثما كان ذلك مدعومًا، مثل `works` أو `audit ok`. +- يعرض `openclaw gateway status` القيم `Runtime: running` و`Connectivity probe: ok` وسطر `Capability: ...`. +- يبلّغ `openclaw doctor` بعدم وجود مشكلات حظر في الإعدادات/الخدمة. +- يعرض `openclaw channels status --probe` حالة النقل الحية لكل حساب، وعند الدعم، + نتائج الفحص/التدقيق مثل `works` أو `audit ok`. -## Anthropic 429 يتطلب استخدامًا إضافيًا للسياق الطويل +## Anthropic 429: مطلوب استخدام إضافي للسياق الطويل -استخدم هذا القسم عندما تتضمن السجلات/الأخطاء: +استخدم هذا عندما تتضمن السجلات/الأخطاء: `HTTP 429: rate_limit_error: Extra usage is required for long context requests`. ```bash @@ -49,15 +50,15 @@ openclaw config get agents.defaults.models ابحث عن: -- أن نموذج Anthropic Opus/Sonnet المحدد يحتوي على `params.context1m: true`. -- أن بيانات اعتماد Anthropic الحالية غير مؤهلة لاستخدام السياق الطويل. -- أن الطلبات تفشل فقط في الجلسات الطويلة أو تشغيلات النماذج التي تحتاج إلى مسار 1M التجريبي. +- نموذج Anthropic Opus/Sonnet المحدد يحتوي على `params.context1m: true`. +- بيانات اعتماد Anthropic الحالية غير مؤهلة لاستخدام السياق الطويل. +- تفشل الطلبات فقط في الجلسات الطويلة/عمليات تشغيل النماذج التي تحتاج إلى مسار beta بحجم 1M. خيارات الإصلاح: 1. عطّل `context1m` لذلك النموذج للرجوع إلى نافذة السياق العادية. 2. استخدم بيانات اعتماد Anthropic مؤهلة لطلبات السياق الطويل، أو بدّل إلى مفتاح Anthropic API. -3. اضبط نماذج احتياطية حتى تستمر التشغيلات عندما تُرفض طلبات Anthropic للسياق الطويل. +3. اضبط نماذج احتياطية حتى تستمر عمليات التشغيل عند رفض طلبات Anthropic ذات السياق الطويل. ذو صلة: @@ -65,13 +66,13 @@ openclaw config get agents.defaults.models - [/reference/token-use](/ar/reference/token-use) - [/help/faq#why-am-i-seeing-http-429-ratelimiterror-from-anthropic](/ar/help/faq#why-am-i-seeing-http-429-ratelimiterror-from-anthropic) -## خلفية محلية متوافقة مع OpenAI تجتاز الفحوصات المباشرة لكن تشغيلات الوكيل تفشل +## الخلفية المحلية المتوافقة مع OpenAI تمرر الفحوصات المباشرة لكن تشغيلات الوكيل تفشل -استخدم هذا القسم عندما: +استخدم هذا عندما: - ينجح `curl ... /v1/models` - تنجح استدعاءات `/v1/chat/completions` المباشرة الصغيرة -- تفشل تشغيلات نماذج OpenClaw فقط أثناء أدوار الوكيل العادية +- تفشل عمليات تشغيل نموذج OpenClaw فقط أثناء أدوار الوكيل العادية ```bash curl http://127.0.0.1:1234/v1/models @@ -84,22 +85,31 @@ openclaw logs --follow ابحث عن: -- أن الاستدعاءات المباشرة الصغيرة تنجح، لكن تشغيلات OpenClaw تفشل فقط مع المطالبات الأكبر -- أخطاء في الخلفية بشأن توقّع `messages[].content` أن يكون سلسلة نصية -- تعطل الخلفية الذي يظهر فقط مع أعداد أكبر من رموز المطالبات أو مطالبات وقت تشغيل الوكيل الكاملة +- تنجح الاستدعاءات المباشرة الصغيرة، لكن تشغيلات OpenClaw تفشل فقط مع المطالبات الأكبر +- أخطاء في الخلفية حول توقّع `messages[].content` أن يكون سلسلة نصية +- تعطل الخلفية الذي يظهر فقط مع أعداد أكبر من رموز المطالبات أو مع مطالبات وقت تشغيل الوكيل الكاملة -الأنماط الشائعة: +السمات الشائعة: -- `messages[...].content: invalid type: sequence, expected a string` → الخلفية ترفض أجزاء محتوى Chat Completions المهيكلة. الإصلاح: اضبط `models.providers..models[].compat.requiresStringContent: true`. -- تنجح الطلبات المباشرة الصغيرة، لكن تشغيلات وكلاء OpenClaw تفشل مع تعطل الخلفية/النموذج (مثل Gemma على بعض إصدارات `inferrs`) → من المرجح أن نقل OpenClaw صحيح بالفعل؛ الخلفية هي التي تفشل مع شكل مطالبة وقت تشغيل الوكيل الأكبر. -- تتراجع الإخفاقات بعد تعطيل الأدوات لكنها لا تختفي → كانت مخططات الأدوات جزءًا من الضغط، لكن المشكلة المتبقية ما تزال في سعة النموذج/الخادم المصدر أو في خطأ بالخلفية. +- `messages[...].content: invalid type: sequence, expected a string` → الخلفية + ترفض أجزاء محتوى Chat Completions المهيكلة. الإصلاح: اضبط + `models.providers..models[].compat.requiresStringContent: true`. +- تنجح الطلبات المباشرة الصغيرة، لكن أدوار وكيل OpenClaw تفشل مع تعطل الخلفية/النموذج + (مثلًا Gemma على بعض إصدارات `inferrs`) → من المرجح أن نقل OpenClaw + صحيح بالفعل؛ المشكلة في الخلفية التي تفشل مع شكل مطالبة وقت تشغيل الوكيل الأكبر. +- تقل حالات الفشل بعد تعطيل الأدوات لكنها لا تختفي → كانت مخططات الأدوات + جزءًا من الضغط، لكن المشكلة المتبقية ما تزال في السعة أو في خطأ بالخلفية/الخادم upstream. خيارات الإصلاح: -1. اضبط `compat.requiresStringContent: true` للخلفيات التي لا تدعم إلا محتوى Chat Completions النصي. -2. اضبط `compat.supportsTools: false` للنماذج/الخلفيات التي لا تستطيع التعامل بشكل موثوق مع سطح مخطط أدوات OpenClaw. -3. خفّض ضغط المطالبات حيثما أمكن: bootstrap أصغر لمساحة العمل، وسجل جلسة أقصر، ونموذج محلي أخف، أو خلفية ذات دعم أقوى للسياق الطويل. -4. إذا استمرت الطلبات المباشرة الصغيرة في النجاح بينما ما تزال أدوار وكيل OpenClaw تتعطل داخل الخلفية، فاعتبر ذلك قيدًا في الخادم/النموذج المصدر وقدّم بلاغ إعادة إنتاج هناك مع شكل الحمولة المقبول. +1. اضبط `compat.requiresStringContent: true` للخلفيات التي تدعم Chat Completions النصية فقط. +2. اضبط `compat.supportsTools: false` للنماذج/الخلفيات التي لا تستطيع التعامل + بشكل موثوق مع سطح مخطط أدوات OpenClaw. +3. خفّض ضغط المطالبات حيثما أمكن: تهيئة مساحة عمل أصغر، سجل جلسة أقصر، + نموذج محلي أخف، أو خلفية ذات دعم أقوى للسياق الطويل. +4. إذا استمرت الطلبات المباشرة الصغيرة بالنجاح بينما ما تزال أدوار وكيل OpenClaw + تتعطل داخل الخلفية، فاعتبرها قيدًا في الخادم/النموذج upstream وقدّم + إعادة إنتاج هناك مع شكل الحمولة المقبول. ذو صلة: @@ -109,7 +119,7 @@ openclaw logs --follow ## لا توجد ردود -إذا كانت القنوات تعمل لكن لا يوجد أي رد، فتحقق من التوجيه والسياسة قبل إعادة توصيل أي شيء. +إذا كانت القنوات تعمل لكن لا يصل أي رد، فتحقق من التوجيه والسياسة قبل إعادة توصيل أي شيء. ```bash openclaw status @@ -121,15 +131,15 @@ openclaw logs --follow ابحث عن: -- اقتران معلّق لمرسلي الرسائل المباشرة. -- اشتراط الإشارة في المجموعات (`requireMention` و`mentionPatterns`). +- إقران معلّق لمرسلي الرسائل المباشرة. +- فرض الإشارة في المجموعات (`requireMention` و`mentionPatterns`). - عدم تطابق قائمة السماح للقناة/المجموعة. -الأنماط الشائعة: +السمات الشائعة: -- `drop guild message (mention required` → تم تجاهل رسالة المجموعة حتى تتم الإشارة. -- `pairing request` → يحتاج المرسل إلى الموافقة. -- `blocked` / `allowlist` → تمت تصفية المرسل/القناة بواسطة السياسة. +- `drop guild message (mention required` → تم تجاهل رسالة المجموعة إلى حين وجود إشارة. +- `pairing request` → يحتاج المرسل إلى موافقة. +- `blocked` / `allowlist` → تم تصفية المرسل/القناة بواسطة السياسة. ذو صلة: @@ -137,9 +147,9 @@ openclaw logs --follow - [/channels/pairing](/ar/channels/pairing) - [/channels/groups](/ar/channels/groups) -## اتصال Dashboard وControl UI +## اتصال واجهة التحكم Dashboard/Control UI -عندما يتعذر على dashboard أو Control UI الاتصال، تحقّق من عنوان URL ووضع المصادقة وافتراضات السياق الآمن. +عندما يتعذر على Dashboard/Control UI الاتصال، تحقّق من عنوان URL ووضع المصادقة وافتراضات السياق الآمن. ```bash openclaw gateway status @@ -151,36 +161,49 @@ openclaw gateway status --json ابحث عن: -- عنوان URL الصحيح للفحص وdashboard. -- عدم تطابق وضع/رمز المصادقة بين العميل وgateway. -- استخدام HTTP حيث تكون هوية الجهاز مطلوبة. +- عنوان URL الصحيح للفحص وDashboard. +- عدم تطابق وضع/رمز المصادقة بين العميل وGateway. +- استخدام HTTP عندما تكون هوية الجهاز مطلوبة. -الأنماط الشائعة: +السمات الشائعة: - `device identity required` → سياق غير آمن أو غياب مصادقة الجهاز. -- `origin not allowed` → قيمة `Origin` في المتصفح غير موجودة في `gateway.controlUi.allowedOrigins` (أو أنك تتصل من أصل متصفح غير loopback بدون قائمة سماح صريحة). -- `device nonce required` / `device nonce mismatch` → العميل لا يكمل تدفق مصادقة الجهاز القائم على التحدي (`connect.challenge` + `device.nonce`). -- `device signature invalid` / `device signature expired` → وقّع العميل الحمولة الخاطئة (أو استخدم طابعًا زمنيًا قديمًا) للمصافحة الحالية. -- `AUTH_TOKEN_MISMATCH` مع `canRetryWithDeviceToken=true` → يمكن للعميل تنفيذ إعادة محاولة موثوقة واحدة باستخدام رمز جهاز مخزن مؤقتًا. -- تعيد محاولة الرمز المخزن مؤقتًا استخدام مجموعة النطاقات المخزنة مع رمز الجهاز المقترن. أما المستدعون الذين يمررون `deviceToken` صريحًا أو `scopes` صريحة فيحتفظون بمجموعة النطاقات المطلوبة لديهم بدلًا من ذلك. -- خارج مسار إعادة المحاولة هذا، تكون أولوية مصادقة الاتصال: الرمز/كلمة المرور المشتركة الصريحة أولًا، ثم `deviceToken` الصريح، ثم رمز الجهاز المخزن، ثم رمز bootstrap. -- في مسار Control UI غير المتزامن عبر Tailscale Serve، تتم مَسلسلة المحاولات الفاشلة لنفس `{scope, ip}` قبل أن يسجل المحدِّد الفشل. لذلك قد تُظهر محاولتا إعادة سيئتان ومتزامنتان من العميل نفسه الرسالة `retry later` في المحاولة الثانية بدلًا من حالتي عدم تطابق عاديتين. -- `too many failed authentication attempts (retry later)` من عميل loopback ذي أصل متصفح → يتم حظر الإخفاقات المتكررة مؤقتًا من ذلك `Origin` المُطبَّع نفسه؛ ويستخدم أصل localhost آخر حاوية منفصلة. -- `unauthorized` متكرر بعد تلك إعادة المحاولة → انجراف في الرمز المشترك/رمز الجهاز؛ حدّث إعدادات الرمز وأعِد الموافقة على رمز الجهاز أو دوّره إذا لزم الأمر. -- `gateway connect failed:` → الهدف host/port/url غير صحيح. +- `origin not allowed` → قيمة `Origin` في المتصفح ليست ضمن `gateway.controlUi.allowedOrigins` + (أو أنك تتصل من أصل متصفح غير loopback بدون + قائمة سماح صريحة). +- `device nonce required` / `device nonce mismatch` → العميل لا يُكمل + تدفق مصادقة الجهاز القائم على التحدي (`connect.challenge` + `device.nonce`). +- `device signature invalid` / `device signature expired` → العميل وقّع الحمولة الخطأ + (أو استخدم طابعًا زمنيًا قديمًا) للمصافحة الحالية. +- `AUTH_TOKEN_MISMATCH` مع `canRetryWithDeviceToken=true` → يمكن للعميل إجراء إعادة محاولة موثوقة واحدة باستخدام رمز جهاز مخزّن مؤقتًا. +- تعيد محاولة الرمز المخزّن مؤقتًا استخدام مجموعة النطاقات المخزنة مع + رمز الجهاز المقترن. أما المستدعون الذين يمررون `deviceToken` صريحًا / `scopes` صريحة فيحتفظون + بمجموعة النطاقات المطلوبة الخاصة بهم بدلًا من ذلك. +- خارج مسار إعادة المحاولة هذا، تكون أولوية مصادقة الاتصال كالتالي: الرمز + المشترك/كلمة المرور الصريحان أولًا، ثم `deviceToken` الصريح، ثم رمز الجهاز المخزن، + ثم رمز bootstrap. +- في مسار Control UI غير المتزامن عبر Tailscale Serve، تُسلسَل المحاولات الفاشلة + لنفس `{scope, ip}` قبل أن يسجل المحدِّد الفشل. لذلك يمكن أن تُظهر محاولتا إعادة سيئتان متزامنتان من العميل نفسه + الرسالة `retry later` + في المحاولة الثانية بدلًا من ظهور حالتي عدم تطابق عاديتين. +- `too many failed authentication attempts (retry later)` من عميل loopback + ذي أصل متصفح → تُحظر مؤقتًا الإخفاقات المتكررة من نفس `Origin` بعد تطبيعه؛ + ويستخدم أصل localhost آخر حصة منفصلة. +- تكرار `unauthorized` بعد إعادة المحاولة تلك → انجراف في الرمز المشترك/رمز الجهاز؛ حدّث إعدادات الرمز وأعد اعتماد/تدوير رمز الجهاز عند الحاجة. +- `gateway connect failed:` → المضيف/المنفذ/عنوان URL الهدف غير صحيح. ### خريطة سريعة لتفاصيل رموز المصادقة استخدم `error.details.code` من استجابة `connect` الفاشلة لاختيار الإجراء التالي: -| رمز التفاصيل | المعنى | الإجراء الموصى به | -| --------------------------- | -------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `AUTH_TOKEN_MISSING` | لم يرسل العميل رمزًا مشتركًا مطلوبًا. | الصق/اضبط الرمز في العميل ثم أعد المحاولة. لمسارات dashboard: `openclaw config get gateway.auth.token` ثم الصقه في إعدادات Control UI. | -| `AUTH_TOKEN_MISMATCH` | الرمز المشترك لا يطابق رمز مصادقة gateway. | إذا كانت `canRetryWithDeviceToken=true`، اسمح بإعادة محاولة موثوقة واحدة. تعيد محاولات الرمز المخزن مؤقتًا استخدام النطاقات المعتمدة المخزنة؛ أما المستدعون الذين يمررون `deviceToken` أو `scopes` صريحة فيحتفظون بالنطاقات المطلوبة. إذا استمر الفشل، شغّل [قائمة التحقق من استرداد انجراف الرمز](/cli/devices#token-drift-recovery-checklist). | -| `AUTH_DEVICE_TOKEN_MISMATCH` | رمز كل جهاز المخزن مؤقتًا قديم أو ملغى. | دوّر رمز الجهاز أو أعد الموافقة عليه باستخدام [CLI الأجهزة](/cli/devices)، ثم أعد الاتصال. | -| `PAIRING_REQUIRED` | هوية الجهاز معروفة لكنها غير معتمدة لهذا الدور. | وافق على الطلب المعلّق: `openclaw devices list` ثم `openclaw devices approve `. | +| رمز التفاصيل | المعنى | الإجراء الموصى به | +| ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `AUTH_TOKEN_MISSING` | لم يرسل العميل رمزًا مشتركًا مطلوبًا. | الصق/اضبط الرمز في العميل ثم أعد المحاولة. لمسارات Dashboard: `openclaw config get gateway.auth.token` ثم الصقه في إعدادات Control UI. | +| `AUTH_TOKEN_MISMATCH` | لم يطابق الرمز المشترك رمز مصادقة Gateway. | إذا كانت `canRetryWithDeviceToken=true`، اسمح بإعادة محاولة موثوقة واحدة. تعيد محاولات الرمز المخزّن مؤقتًا استخدام النطاقات المعتمدة المخزنة؛ أما المستدعون الذين يمررون `deviceToken` / `scopes` صريحة فيحتفظون بالنطاقات المطلوبة. إذا استمر الفشل، شغّل [قائمة التحقق من استرداد انجراف الرمز](/cli/devices#token-drift-recovery-checklist). | +| `AUTH_DEVICE_TOKEN_MISMATCH` | رمز كل جهاز المخزّن مؤقتًا قديم أو أُلغي. | دوّر/أعد اعتماد رمز الجهاز باستخدام [CLI الأجهزة](/cli/devices)، ثم أعد الاتصال. | +| `PAIRING_REQUIRED` | تتطلب هوية الجهاز موافقة. تحقّق من `error.details.reason` لمعرفة `not-paired` أو `scope-upgrade` أو `role-upgrade` أو `metadata-upgrade`، واستخدم `requestId` / `remediationHint` عند توفرهما. | وافق على الطلب المعلّق: `openclaw devices list` ثم `openclaw devices approve `. تستخدم ترقيات النطاق/الدور المسار نفسه بعد مراجعة الوصول المطلوب. | -فحص ترحيل مصادقة الأجهزة v2: +فحص ترحيل مصادقة الجهاز v2: ```bash openclaw --version @@ -188,35 +211,37 @@ openclaw doctor openclaw gateway status ``` -إذا أظهرت السجلات أخطاء nonce/التوقيع، فحدّث العميل المتصل وتحقّق من أنه: +إذا أظهرت السجلات أخطاء nonce/signature، فحدّث العميل المتصل وتحقق من أنه: 1. ينتظر `connect.challenge` 2. يوقّع الحمولة المرتبطة بالتحدي -3. يرسل `connect.params.device.nonce` مع nonce التحدي نفسه +3. يرسل `connect.params.device.nonce` مع nonce التحدي نفسها إذا تم رفض `openclaw devices rotate` / `revoke` / `remove` بشكل غير متوقع: -- يمكن لجلسات رمز الجهاز المقترن إدارة **أجهزتها فقط** ما لم تكن جلسة المستدعي تملك أيضًا `operator.admin` -- لا يمكن لـ `openclaw devices rotate --scope ...` طلب نطاقات المشغّل إلا إذا كانت جلسة المستدعي تملك هذه النطاقات بالفعل +- يمكن لجلسات رموز الأجهزة المقترنة إدارة **جهازها فقط** + ما لم يكن لدى المستدعي أيضًا `operator.admin` +- لا يمكن لـ `openclaw devices rotate --scope ...` طلب نطاقات operator + إلا إذا كانت جلسة المستدعي تحملها بالفعل ذو صلة: - [/web/control-ui](/web/control-ui) -- [/gateway/configuration](/ar/gateway/configuration) (أوضاع مصادقة gateway) +- [/gateway/configuration](/ar/gateway/configuration) (أوضاع مصادقة Gateway) - [/gateway/trusted-proxy-auth](/ar/gateway/trusted-proxy-auth) - [/gateway/remote](/ar/gateway/remote) - [/cli/devices](/cli/devices) ## خدمة Gateway لا تعمل -استخدم هذا القسم عندما تكون الخدمة مثبّتة لكن العملية لا تظل قيد التشغيل. +استخدم هذا عندما تكون الخدمة مثبتة لكن العملية لا تبقى قيد التشغيل. ```bash openclaw gateway status openclaw status openclaw logs --follow openclaw doctor -openclaw gateway status --deep # يفحص أيضًا الخدمات على مستوى النظام +openclaw gateway status --deep # يفحص أيضًا خدمات النظام ``` ابحث عن: @@ -224,15 +249,15 @@ openclaw gateway status --deep # يفحص أيضًا الخدمات على م - `Runtime: stopped` مع تلميحات الخروج. - عدم تطابق إعدادات الخدمة (`Config (cli)` مقابل `Config (service)`). - تعارضات المنفذ/المستمع. -- عمليات تثبيت launchd/systemd/schtasks إضافية عند استخدام `--deep`. +- تثبيتات launchd/systemd/schtasks إضافية عند استخدام `--deep`. - تلميحات تنظيف `Other gateway-like services detected (best effort)`. -الأنماط الشائعة: +السمات الشائعة: -- `Gateway start blocked: set gateway.mode=local` أو `existing config is missing gateway.mode` → وضع gateway المحلي غير مفعّل، أو تم العبث بملف الإعداد وفقد قيمة `gateway.mode`. الإصلاح: اضبط `gateway.mode="local"` في إعداداتك، أو أعد تشغيل `openclaw onboard --mode local` / `openclaw setup` لإعادة ختم إعدادات الوضع المحلي المتوقعة. إذا كنت تشغّل OpenClaw عبر Podman، فمسار الإعدادات الافتراضي هو `~/.openclaw/openclaw.json`. -- `refusing to bind gateway ... without auth` → ربط غير loopback بدون مسار مصادقة صالح للـ gateway (رمز/كلمة مرور، أو trusted-proxy حيث يكون مضبوطًا). +- `Gateway start blocked: set gateway.mode=local` أو `existing config is missing gateway.mode` → لم يتم تمكين وضع Gateway المحلي، أو تم العبث بملف الإعدادات وفقد `gateway.mode`. الإصلاح: اضبط `gateway.mode="local"` في إعداداتك، أو أعد تشغيل `openclaw onboard --mode local` / `openclaw setup` لإعادة ختم إعدادات الوضع المحلي المتوقعة. إذا كنت تشغّل OpenClaw عبر Podman، فإن مسار الإعدادات الافتراضي هو `~/.openclaw/openclaw.json`. +- `refusing to bind gateway ... without auth` → ربط غير loopback من دون مسار مصادقة صالح لـ Gateway (رمز/كلمة مرور، أو trusted-proxy عند ضبطه). - `another gateway instance is already listening` / `EADDRINUSE` → تعارض منفذ. -- `Other gateway-like services detected (best effort)` → توجد وحدات launchd/systemd/schtasks قديمة أو متوازية. ينبغي لمعظم الإعدادات الاحتفاظ بـ gateway واحد لكل جهاز؛ وإذا كنت تحتاج فعلًا إلى أكثر من واحد، فاعزل المنافذ والإعدادات/الحالة/مساحة العمل. راجع [/gateway#multiple-gateways-same-host](/ar/gateway#multiple-gateways-same-host). +- `Other gateway-like services detected (best effort)` → توجد وحدات launchd/systemd/schtasks قديمة أو متوازية. في معظم الإعدادات يجب الإبقاء على Gateway واحد لكل جهاز؛ وإذا كنت تحتاج بالفعل إلى أكثر من واحد، فعليك عزل المنافذ + الإعدادات/الحالة/مساحة العمل. راجع [/gateway#multiple-gateways-same-host](/ar/gateway#multiple-gateways-same-host). ذو صلة: @@ -242,7 +267,7 @@ openclaw gateway status --deep # يفحص أيضًا الخدمات على م ## تحذيرات فحص Gateway -استخدم هذا القسم عندما يصل `openclaw gateway probe` إلى شيء ما، لكنه ما يزال يطبع كتلة تحذير. +استخدم هذا عندما يصل `openclaw gateway probe` إلى شيء ما، لكنه ما يزال يطبع كتلة تحذير. ```bash openclaw gateway probe @@ -253,14 +278,15 @@ openclaw gateway probe --ssh user@gateway-host ابحث عن: - `warnings[].code` و`primaryTargetId` في مخرجات JSON. -- ما إذا كان التحذير متعلقًا بالرجوع إلى SSH، أو بوجود عدة gateway، أو بنطاقات مفقودة، أو بمراجع مصادقة غير محلولة. +- ما إذا كان التحذير متعلقًا بالرجوع إلى SSH أو بوجود عدة Gateways أو بنطاقات مفقودة أو بمراجع مصادقة غير محلولة. -الأنماط الشائعة: +السمات الشائعة: -- `SSH tunnel failed to start; falling back to direct probes.` → فشل إعداد SSH، لكن الأمر ما يزال يحاول الفحص المباشر للأهداف المضبوطة/‏loopback. -- `multiple reachable gateways detected` → استجاب أكثر من هدف واحد. ويعني هذا عادةً إعدادًا مقصودًا لعدة gateway أو وجود مستمعات قديمة/مكررة. -- `Probe diagnostics are limited by gateway scopes (missing operator.read)` → نجح الاتصال، لكن تفاصيل RPC محدودة بالنطاقات؛ قم بإقران هوية الجهاز أو استخدم بيانات اعتماد تملك `operator.read`. -- نص تحذير SecretRef غير المحلول في `gateway.auth.*` / `gateway.remote.*` → لم تكن بيانات المصادقة متاحة في مسار هذا الأمر للهدف الذي فشل. +- `SSH tunnel failed to start; falling back to direct probes.` → فشل إعداد SSH، لكن الأمر ما يزال يحاول الأهداف المباشرة المضبوطة/الـ loopback. +- `multiple reachable gateways detected` → استجاب أكثر من هدف واحد. عادةً ما يعني هذا إعدادًا مقصودًا لعدة Gateways أو مستمعات قديمة/مكررة. +- `Read-probe diagnostics are limited by gateway scopes (missing operator.read)` → نجح الاتصال، لكن تفاصيل RPC محدودة بالنطاق؛ قم بإقران هوية الجهاز أو استخدم بيانات اعتماد تتضمن `operator.read`. +- `Capability: pairing-pending` أو `gateway closed (1008): pairing required` → استجاب Gateway، لكن هذا العميل ما يزال يحتاج إلى الإقران/الموافقة قبل الوصول التشغيلي العادي. +- نص تحذير SecretRef غير المحلول في `gateway.auth.*` / `gateway.remote.*` → لم تكن مادة المصادقة متاحة في مسار هذا الأمر للهدف الذي فشل. ذو صلة: @@ -283,14 +309,14 @@ openclaw config get channels ابحث عن: - سياسة الرسائل المباشرة (`pairing` أو `allowlist` أو `open` أو `disabled`). -- قائمة السماح للمجموعات ومتطلبات الإشارة. +- قائمة السماح للمجموعة ومتطلبات الإشارة. - أذونات/نطاقات API المفقودة الخاصة بالقناة. -الأنماط الشائعة: +السمات الشائعة: -- `mention required` → تم تجاهل الرسالة بسبب سياسة الإشارة في المجموعات. +- `mention required` → تم تجاهل الرسالة بسبب سياسة الإشارة في المجموعة. - آثار `pairing` / الموافقة المعلقة → لم تتم الموافقة على المرسل. -- `missing_scope`, `not_in_channel`, `Forbidden`, `401/403` → مشكلة في مصادقة/أذونات القناة. +- `missing_scope` أو `not_in_channel` أو `Forbidden` أو `401/403` → مشكلة في مصادقة/أذونات القناة. ذو صلة: @@ -301,7 +327,7 @@ openclaw config get channels ## تسليم Cron وHeartbeat -إذا لم يعمل cron أو heartbeat أو لم يتم التسليم، فتحقق أولًا من حالة المجدول، ثم من هدف التسليم. +إذا لم يعمل Cron أو Heartbeat أو لم يتم التسليم، فتحقق أولًا من حالة المجدول ثم من هدف التسليم. ```bash openclaw cron status @@ -313,19 +339,19 @@ openclaw logs --follow ابحث عن: -- أن cron مفعّل وأن وقت الاستيقاظ التالي موجود. +- أن يكون Cron ممكّنًا ووقت التنبيه التالي موجودًا. - حالة سجل تشغيل المهمة (`ok` أو `skipped` أو `error`). -- أسباب تخطي heartbeat (`quiet-hours` أو `requests-in-flight` أو `alerts-disabled` أو `empty-heartbeat-file` أو `no-tasks-due`). +- أسباب تخطي Heartbeat (`quiet-hours` أو `requests-in-flight` أو `alerts-disabled` أو `empty-heartbeat-file` أو `no-tasks-due`). -الأنماط الشائعة: +السمات الشائعة: -- `cron: scheduler disabled; jobs will not run automatically` → تم تعطيل cron. +- `cron: scheduler disabled; jobs will not run automatically` → تم تعطيل Cron. - `cron: timer tick failed` → فشل نبض المجدول؛ تحقق من أخطاء الملفات/السجلات/وقت التشغيل. - `heartbeat skipped` مع `reason=quiet-hours` → خارج نافذة الساعات النشطة. -- `heartbeat skipped` مع `reason=empty-heartbeat-file` → يوجد `HEARTBEAT.md` لكنه يحتوي فقط على أسطر فارغة / عناوين Markdown، لذلك يتجاوز OpenClaw استدعاء النموذج. +- `heartbeat skipped` مع `reason=empty-heartbeat-file` → يوجد `HEARTBEAT.md` لكنه يحتوي فقط على أسطر فارغة / عناوين Markdown، لذلك يتخطى OpenClaw استدعاء النموذج. - `heartbeat skipped` مع `reason=no-tasks-due` → يحتوي `HEARTBEAT.md` على كتلة `tasks:`، لكن لا توجد أي مهام مستحقة في هذه النبضة. -- `heartbeat: unknown accountId` → معرّف حساب غير صالح لهدف تسليم heartbeat. -- `heartbeat skipped` مع `reason=dm-blocked` → تم تحليل هدف heartbeat إلى وجهة بأسلوب الرسائل المباشرة بينما كان `agents.defaults.heartbeat.directPolicy` (أو التجاوز الخاص بكل وكيل) مضبوطًا على `block`. +- `heartbeat: unknown accountId` → معرّف حساب غير صالح لهدف تسليم Heartbeat. +- `heartbeat skipped` مع `reason=dm-blocked` → تم تحليل هدف Heartbeat إلى وجهة من نمط الرسائل المباشرة بينما تم ضبط `agents.defaults.heartbeat.directPolicy` (أو التجاوز الخاص بالوكيل) على `block`. ذو صلة: @@ -333,9 +359,9 @@ openclaw logs --follow - [/automation/cron-jobs](/ar/automation/cron-jobs) - [/gateway/heartbeat](/ar/gateway/heartbeat) -## أداة العقدة المقترنة تفشل +## فشل أداة Node المقترنة -إذا كانت العقدة مقترنة لكن الأدوات تفشل، فاعزل حالة الواجهة الأمامية والأذونات والموافقة. +إذا كانت Node مقترنة لكن الأدوات تفشل، فاعزل حالة الواجهة الأمامية والأذونات والموافقة. ```bash openclaw nodes status @@ -347,14 +373,14 @@ openclaw status ابحث عن: -- أن العقدة متصلة وتملك الإمكانات المتوقعة. +- أن تكون Node متصلة مع الإمكانات المتوقعة. - منح أذونات نظام التشغيل للكاميرا/الميكروفون/الموقع/الشاشة. - حالة موافقات التنفيذ وقائمة السماح. -الأنماط الشائعة: +السمات الشائعة: -- `NODE_BACKGROUND_UNAVAILABLE` → يجب أن يكون تطبيق العقدة في الواجهة الأمامية. -- `*_PERMISSION_REQUIRED` / `LOCATION_PERMISSION_REQUIRED` → أذونات نظام التشغيل مفقودة. +- `NODE_BACKGROUND_UNAVAILABLE` → يجب أن يكون تطبيق Node في الواجهة الأمامية. +- `*_PERMISSION_REQUIRED` / `LOCATION_PERMISSION_REQUIRED` → إذن نظام تشغيل مفقود. - `SYSTEM_RUN_DENIED: approval required` → موافقة التنفيذ معلقة. - `SYSTEM_RUN_DENIED: allowlist miss` → تم حظر الأمر بواسطة قائمة السماح. @@ -364,9 +390,9 @@ openclaw status - [/nodes/index](/ar/nodes/index) - [/tools/exec-approvals](/ar/tools/exec-approvals) -## أداة المتصفح تفشل +## فشل أداة المتصفح -استخدم هذا القسم عندما تفشل إجراءات أداة المتصفح رغم أن gateway نفسه سليم. +استخدم هذا عندما تفشل إجراءات أداة المتصفح رغم أن Gateway نفسه سليم. ```bash openclaw browser status @@ -378,30 +404,30 @@ openclaw doctor ابحث عن: -- ما إذا كانت `plugins.allow` مضبوطة وتتضمن `browser`. -- مسار ملف المتصفح التنفيذي صالح. +- ما إذا كان `plugins.allow` مضبوطًا ويتضمن `browser`. +- مسار تنفيذي متصفح صالح. - إمكانية الوصول إلى ملف تعريف CDP. -- توفر Chrome المحلي لملفات التعريف `existing-session` / `user`. +- توفر Chrome المحلي لملفات تعريف `existing-session` / `user`. -الأنماط الشائعة: +السمات الشائعة: -- `unknown command "browser"` أو `unknown command 'browser'` → تم استبعاد plugin المتصفح المضمّن بواسطة `plugins.allow`. -- غياب أداة المتصفح / عدم توفرها بينما `browser.enabled=true` → تستبعد `plugins.allow` القيمة `browser`، لذلك لم يتم تحميل plugin أصلًا. -- `Failed to start Chrome CDP on port` → فشل تشغيل عملية المتصفح. +- `unknown command "browser"` أو `unknown command 'browser'` → تم استبعاد Plugin المتصفح المضمّن بواسطة `plugins.allow`. +- أداة المتصفح مفقودة / غير متاحة بينما `browser.enabled=true` → يستبعد `plugins.allow` قيمة `browser`، لذلك لم يتم تحميل Plugin أصلًا. +- `Failed to start Chrome CDP on port` → فشلت عملية المتصفح في الإطلاق. - `browser.executablePath not found` → المسار المضبوط غير صالح. -- `browser.cdpUrl must be http(s) or ws(s)` → يستخدم عنوان CDP URL المضبوط مخططًا غير مدعوم مثل `file:` أو `ftp:`. -- `browser.cdpUrl has invalid port` → يحتوي CDP URL المضبوط على منفذ سيئ أو خارج النطاق. -- `No Chrome tabs found for profile="user"` → لا يحتوي ملف تعريف الإرفاق Chrome MCP على أي ألسنة Chrome محلية مفتوحة. -- `Remote CDP for profile "" is not reachable` → لا يمكن الوصول إلى نقطة نهاية CDP البعيدة المضبوطة من مضيف gateway. -- `Browser attachOnly is enabled ... not reachable` أو `Browser attachOnly is enabled and CDP websocket ... is not reachable` → لا يوجد هدف يمكن الوصول إليه لملف التعريف attach-only، أو أن نقطة نهاية HTTP استجابت لكن تعذر مع ذلك فتح CDP WebSocket. -- `Playwright is not available in this gateway build; '' is unsupported.` → يفتقر تثبيت gateway الحالي إلى حزمة Playwright الكاملة؛ ما يزال من الممكن عمل لقطات ARIA ولقطات الشاشة الأساسية للصفحة، لكن التنقل ولقطات AI ولقطات العناصر بمحددات CSS وتصدير PDF تبقى غير متاحة. +- `browser.cdpUrl must be http(s) or ws(s)` → يستخدم عنوان CDP المضبوط مخططًا غير مدعوم مثل `file:` أو `ftp:`. +- `browser.cdpUrl has invalid port` → يحتوي عنوان CDP المضبوط على منفذ سيئ أو خارج النطاق. +- `No Chrome tabs found for profile="user"` → لا توجد علامات تبويب Chrome محلية مفتوحة لملف تعريف إرفاق Chrome MCP. +- `Remote CDP for profile "" is not reachable` → لا يمكن الوصول إلى نقطة نهاية CDP البعيدة المضبوطة من مضيف Gateway. +- `Browser attachOnly is enabled ... not reachable` أو `Browser attachOnly is enabled and CDP websocket ... is not reachable` → لا يوجد هدف يمكن الوصول إليه لملف تعريف attach-only، أو أن نقطة نهاية HTTP استجابت لكن لم يكن بالإمكان فتح WebSocket الخاص بـ CDP. +- `Playwright is not available in this gateway build; '' is unsupported.` → يفتقر تثبيت Gateway الحالي إلى حزمة Playwright الكاملة؛ ما تزال لقطات ARIA ولقطات الشاشة الأساسية للصفحات تعمل، لكن التنقل ولقطات AI ولقطات عناصر CSS selector وتصدير PDF تبقى غير متاحة. - `fullPage is not supported for element screenshots` → مزج طلب لقطة الشاشة بين `--full-page` و`--ref` أو `--element`. -- `element screenshots are not supported for existing-session profiles; use ref from snapshot.` → يجب أن تستخدم استدعاءات لقطات الشاشة في Chrome MCP / `existing-session` التقاط الصفحة أو `--ref` من لقطة، وليس CSS `--element`. -- `existing-session file uploads do not support element selectors; use ref/inputRef.` → تحتاج خطافات رفع الملفات في Chrome MCP إلى مراجع لقطات، وليس محددات CSS. -- `existing-session file uploads currently support one file at a time.` → أرسل ملف رفع واحدًا لكل استدعاء في ملفات تعريف Chrome MCP. -- `existing-session dialog handling does not support timeoutMs.` → لا تدعم خطافات مربعات الحوار في ملفات تعريف Chrome MCP تجاوزات المهلة. +- `element screenshots are not supported for existing-session profiles; use ref from snapshot.` → يجب أن تستخدم استدعاءات لقطات شاشة Chrome MCP / `existing-session` التقاط الصفحة أو `--ref` من snapshot، وليس CSS `--element`. +- `existing-session file uploads do not support element selectors; use ref/inputRef.` → تحتاج Hooks رفع الملفات في Chrome MCP إلى مراجع snapshot، وليس محددات CSS. +- `existing-session file uploads currently support one file at a time.` → أرسل عملية رفع واحدة لكل استدعاء في ملفات تعريف Chrome MCP. +- `existing-session dialog handling does not support timeoutMs.` → لا تدعم Hooks مربعات الحوار في ملفات تعريف Chrome MCP تجاوزات المهلة. - `response body is not supported for existing-session profiles yet.` → ما يزال `responsebody` يتطلب متصفحًا مُدارًا أو ملف تعريف CDP خامًا. -- تجاوزات viewport / الوضع الداكن / اللغة / عدم الاتصال القديمة على ملفات التعريف attach-only أو CDP البعيدة → شغّل `openclaw browser stop --browser-profile ` لإغلاق جلسة التحكم النشطة وتحرير حالة محاكاة Playwright/CDP بدون إعادة تشغيل gateway بالكامل. +- بقاء تجاوزات viewport / dark-mode / locale / offline القديمة في ملفات تعريف attach-only أو CDP البعيدة → شغّل `openclaw browser stop --browser-profile ` لإغلاق جلسة التحكم النشطة وتحرير حالة محاكاة Playwright/CDP من دون إعادة تشغيل Gateway بالكامل. ذو صلة: @@ -410,7 +436,7 @@ openclaw doctor ## إذا قمت بالترقية وتعطل شيء فجأة -تكون معظم الأعطال بعد الترقية بسبب انجراف الإعدادات أو فرض افتراضات أكثر صرامة الآن. +معظم الأعطال بعد الترقية تكون بسبب انجراف الإعدادات أو فرض قيم افتراضية أكثر صرامة الآن. ### 1) تغيّر سلوك المصادقة وتجاوز عنوان URL @@ -421,17 +447,17 @@ openclaw config get gateway.remote.url openclaw config get gateway.auth.mode ``` -ما الذي يجب التحقق منه: +ما يجب التحقق منه: -- إذا كانت `gateway.mode=remote`، فقد تستهدف استدعاءات CLI جهة بعيدة بينما خدمتك المحلية تعمل بشكل جيد. -- لا تعود استدعاءات `--url` الصريحة إلى بيانات الاعتماد المخزنة. +- إذا كان `gateway.mode=remote`، فقد تستهدف استدعاءات CLI نظامًا بعيدًا بينما خدمتك المحلية تعمل بشكل جيد. +- لا تعود الاستدعاءات الصريحة `--url` إلى بيانات الاعتماد المخزنة. -الأنماط الشائعة: +السمات الشائعة: -- `gateway connect failed:` → هدف URL غير صحيح. -- `unauthorized` → يمكن الوصول إلى نقطة النهاية لكن المصادقة غير صحيحة. +- `gateway connect failed:` → عنوان URL الهدف غير صحيح. +- `unauthorized` → يمكن الوصول إلى نقطة النهاية لكن المصادقة خاطئة. -### 2) أصبحت ضوابط الربط والمصادقة أكثر صرامة +### 2) أصبحت قيود الربط والمصادقة أكثر صرامة ```bash openclaw config get gateway.bind @@ -441,17 +467,17 @@ openclaw gateway status openclaw logs --follow ``` -ما الذي يجب التحقق منه: +ما يجب التحقق منه: -- تحتاج عمليات الربط غير loopback (`lan` أو `tailnet` أو `custom`) إلى مسار مصادقة gateway صالح: مصادقة برمز/كلمة مرور مشتركة، أو نشر `trusted-proxy` غير loopback مضبوط بشكل صحيح. -- لا تستبدل المفاتيح القديمة مثل `gateway.token` القيمة `gateway.auth.token`. +- تتطلب عمليات الربط غير loopback (`lan` أو `tailnet` أو `custom`) مسار مصادقة صالحًا لـ Gateway: مصادقة برمز/كلمة مرور مشتركة، أو نشر `trusted-proxy` غير loopback مضبوطًا بشكل صحيح. +- لا تحل المفاتيح القديمة مثل `gateway.token` محل `gateway.auth.token`. -الأنماط الشائعة: +السمات الشائعة: -- `refusing to bind gateway ... without auth` → ربط غير loopback بدون مسار مصادقة gateway صالح. -- `RPC probe: failed` بينما وقت التشغيل يعمل → gateway يعمل لكن يتعذر الوصول إليه باستخدام المصادقة/عنوان URL الحاليين. +- `refusing to bind gateway ... without auth` → ربط غير loopback من دون مسار مصادقة صالح لـ Gateway. +- `Connectivity probe: failed` بينما وقت التشغيل يعمل → Gateway حي لكنه غير قابل للوصول باستخدام المصادقة/عنوان URL الحاليين. -### 3) تغيّرت حالة الاقتران وهوية الجهاز +### 3) تغيّرت حالة الإقران وهوية الجهاز ```bash openclaw devices list @@ -460,17 +486,17 @@ openclaw logs --follow openclaw doctor ``` -ما الذي يجب التحقق منه: +ما يجب التحقق منه: -- موافقات الأجهزة المعلقة لـ dashboard/‏nodes. -- موافقات اقتران الرسائل المباشرة المعلقة بعد تغييرات السياسة أو الهوية. +- موافقات الأجهزة المعلقة لـ Dashboard/Nodes. +- موافقات إقران الرسائل المباشرة المعلقة بعد تغييرات السياسة أو الهوية. -الأنماط الشائعة: +السمات الشائعة: - `device identity required` → لم يتم استيفاء مصادقة الجهاز. - `pairing required` → يجب الموافقة على المرسل/الجهاز. -إذا استمر عدم تطابق إعدادات الخدمة ووقت التشغيل بعد هذه الفحوصات، فأعد تثبيت بيانات تعريف الخدمة من دليل profile/state نفسه: +إذا استمر عدم تطابق إعدادات الخدمة ووقت التشغيل بعد عمليات التحقق، فأعد تثبيت بيانات تعريف الخدمة من الدليل نفسه الخاص بالملف الشخصي/الحالة: ```bash openclaw gateway install --force diff --git a/docs/ar/help/faq.md b/docs/ar/help/faq.md index 42da9ac35..ca6dd6ad6 100644 --- a/docs/ar/help/faq.md +++ b/docs/ar/help/faq.md @@ -1,23 +1,23 @@ --- read_when: - - الإجابة عن الأسئلة الشائعة المتعلقة بالإعداد أو التثبيت أو الإعداد الأولي أو دعم وقت التشغيل - - فرز المشكلات التي أبلغ عنها المستخدمون قبل إجراء تصحيح أعمق للأخطاء + - الإجابة عن الأسئلة الشائعة المتعلقة بالإعداد أو التثبيت أو التهيئة الأولية أو دعم وقت التشغيل + - فرز المشكلات التي يبلغ عنها المستخدمون قبل إجراء تصحيح أعمق للأخطاء summary: الأسئلة الشائعة حول إعداد OpenClaw وتكوينه واستخدامه title: الأسئلة الشائعة x-i18n: - generated_at: "2026-04-19T07:16:04Z" + generated_at: "2026-04-20T07:29:34Z" model: gpt-5.4 provider: openai - source_hash: f569fb0412797314a11c41a1bbfa14f5892d2d368544fa67800823a6457000e6 + source_hash: ae8efda399e34f59f22f6ea8ce218eaf7b872e4117d8596ec19c09891d70813b source_path: help/faq.md workflow: 15 --- # الأسئلة الشائعة -إجابات سريعة بالإضافة إلى استكشاف أخطاء أعمق لبيئات الإعداد الواقعية (التطوير المحلي، VPS، تعدد الوكلاء، OAuth/مفاتيح API، والتحويل التلقائي بين النماذج عند الفشل). لتشخيصات وقت التشغيل، راجع [استكشاف الأخطاء وإصلاحها](/ar/gateway/troubleshooting). وللاطلاع على مرجع التكوين الكامل، راجع [التكوين](/ar/gateway/configuration). +إجابات سريعة بالإضافة إلى استكشاف أخطاء أعمق لبيئات الإعداد الواقعية (التطوير المحلي، VPS، تعدد الوكلاء، OAuth/مفاتيح API، والتحويل الاحتياطي للنماذج). لتشخيصات وقت التشغيل، راجع [استكشاف الأخطاء وإصلاحها](/ar/gateway/troubleshooting). وللاطلاع على المرجع الكامل للإعدادات، راجع [الإعدادات](/ar/gateway/configuration). -## أول 60 ثانية إذا كان هناك شيء معطل +## أول 60 ثانية إذا كان هناك شيء معطّل 1. **الحالة السريعة (أول فحص)** @@ -25,9 +25,9 @@ x-i18n: openclaw status ``` - ملخص محلي سريع: نظام التشغيل + التحديث، إمكانية الوصول إلى Gateway/الخدمة، الوكلاء/الجلسات، تكوين المزوّد + مشكلات وقت التشغيل (عندما يكون Gateway قابلاً للوصول). + ملخص محلي سريع: نظام التشغيل + التحديث، إمكانية الوصول إلى Gateway/الخدمة، الوكلاء/الجلسات، وإعدادات الموفر + مشكلات وقت التشغيل (عندما يكون Gateway قابلاً للوصول). -2. **تقرير قابل للمشاركة (آمن للمشاركة)** +2. **تقرير قابل للمشاركة بأمان** ```bash openclaw status --all @@ -35,13 +35,13 @@ x-i18n: تشخيص للقراءة فقط مع ذيل السجل (مع إخفاء الرموز المميزة). -3. **حالة العملية الخدمية + المنفذ** +3. **حالة العملية الخلفية + المنفذ** ```bash openclaw gateway status ``` - يعرض وقت تشغيل المشرف مقابل إمكانية الوصول إلى RPC، وعنوان URL المستهدف للفحص، وأي تكوين يُرجَّح أن الخدمة استخدمته. + يعرض وقت تشغيل المشرف مقابل إمكانية الوصول إلى RPC، وعنوان URL المستهدف للفحص، وأي إعدادات يُحتمل أن الخدمة استخدمتها. 4. **فحوصات متعمقة** @@ -49,7 +49,7 @@ x-i18n: openclaw status --deep ``` - يُجري فحصًا حيًا لصحة Gateway، بما في ذلك فحوصات القنوات عندما تكون مدعومة + يُجري فحص صحة حيًّا لـ Gateway، بما في ذلك فحوصات القنوات عند توفر الدعم (يتطلب Gateway قابلاً للوصول). راجع [الصحة](/ar/gateway/health). 5. **تتبّع أحدث سجل** @@ -66,50 +66,50 @@ x-i18n: سجلات الملفات منفصلة عن سجلات الخدمة؛ راجع [التسجيل](/ar/logging) و[استكشاف الأخطاء وإصلاحها](/ar/gateway/troubleshooting). -6. **شغّل Doctor (الإصلاحات)** +6. **تشغيل الطبيب (الإصلاحات)** ```bash openclaw doctor ``` - يُصلح/يُرحّل التكوين/الحالة ويُجري فحوصات الصحة. راجع [Doctor](/ar/gateway/doctor). + يُصلح/يُرحّل الإعدادات والحالة ويُجري فحوصات الصحة. راجع [Doctor](/ar/gateway/doctor). -7. **لقطة لحالة Gateway** +7. **لقطة Gateway** ```bash openclaw health --json - openclaw health --verbose # يعرض عنوان URL المستهدف + مسار التكوين عند حدوث أخطاء + openclaw health --verbose # يعرض عنوان URL المستهدف + مسار الإعدادات عند حدوث أخطاء ``` - يطلب من Gateway قيد التشغيل لقطة كاملة للحالة (عبر WS فقط). راجع [الصحة](/ar/gateway/health). + يطلب من Gateway العامل لقطة كاملة (WS فقط). راجع [الصحة](/ar/gateway/health). -## البدء السريع والإعداد عند أول تشغيل +## البدء السريع وإعداد أول تشغيل - - استخدم وكيل AI محلي يمكنه **رؤية جهازك**. هذا أكثر فعالية بكثير من السؤال - في Discord، لأن معظم حالات "أنا عالق" تكون **مشكلات تكوين أو بيئة محلية** - لا يستطيع المساعدون عن بُعد فحصها. + + استخدم وكيلاً محليًا للذكاء الاصطناعي يمكنه **رؤية جهازك**. هذا أكثر فاعلية بكثير من السؤال + في Discord، لأن معظم حالات "أنا عالق" تكون **مشكلات إعدادات أو بيئة محلية** لا يستطيع + المساعدون عن بُعد فحصها. - **Claude Code**: [https://www.anthropic.com/claude-code/](https://www.anthropic.com/claude-code/) - **OpenAI Codex**: [https://openai.com/codex/](https://openai.com/codex/) تستطيع هذه الأدوات قراءة المستودع، وتشغيل الأوامر، وفحص السجلات، والمساعدة في إصلاح - الإعداد على مستوى جهازك (PATH، الخدمات، الأذونات، ملفات المصادقة). امنحها **النسخة المصدرية الكاملة** - عبر تثبيت hackable (git): + الإعداد على مستوى الجهاز لديك (PATH، والخدمات، والأذونات، وملفات المصادقة). امنحها + **نسخة المصدر الكاملة** عبر تثبيت git القابل للتعديل: ```bash curl -fsSL https://openclaw.ai/install.sh | bash -s -- --install-method git ``` - يثبّت هذا OpenClaw **من نسخة git محلية**، بحيث يمكن للوكيل قراءة الشيفرة + الوثائق - والاستدلال على الإصدار الدقيق الذي تستخدمه. يمكنك دائمًا العودة إلى الإصدار المستقر لاحقًا - عبر إعادة تشغيل المُثبّت من دون `--install-method git`. + يثبّت هذا OpenClaw **من نسخة git محلية**، بحيث يتمكن الوكيل من قراءة الشيفرة + الوثائق + والاستدلال على الإصدار الدقيق الذي تشغّله. ويمكنك دائمًا العودة إلى الإصدار المستقر لاحقًا + عبر إعادة تشغيل المثبّت بدون `--install-method git`. - نصيحة: اطلب من الوكيل **التخطيط للإصلاح والإشراف عليه** (خطوة بخطوة)، ثم تنفيذ - الأوامر الضرورية فقط. هذا يُبقي التغييرات صغيرة وأسهل للمراجعة. + نصيحة: اطلب من الوكيل **تخطيط الإصلاح والإشراف عليه** (خطوة بخطوة)، ثم تنفيذ + الأوامر الضرورية فقط. هذا يُبقي التغييرات صغيرة وأسهل في المراجعة. - إذا اكتشفت خللًا حقيقيًا أو إصلاحًا، فيُرجى فتح issue على GitHub أو إرسال PR: + إذا اكتشفت خطأً فعليًا أو إصلاحًا، يُرجى فتح issue على GitHub أو إرسال PR: [https://github.com/openclaw/openclaw/issues](https://github.com/openclaw/openclaw/issues) [https://github.com/openclaw/openclaw/pulls](https://github.com/openclaw/openclaw/pulls) @@ -123,28 +123,28 @@ x-i18n: ما الذي تفعله: - - `openclaw status`: لقطة سريعة لصحة Gateway/الوكيل + التكوين الأساسي. - - `openclaw models status`: يفحص مصادقة المزوّد + توفر النماذج. - - `openclaw doctor`: يتحقق من مشكلات التكوين/الحالة الشائعة ويُصلحها. + - `openclaw status`: لقطة سريعة لصحة Gateway/الوكيل + الإعدادات الأساسية. + - `openclaw models status`: يتحقق من مصادقة الموفر + توفر النماذج. + - `openclaw doctor`: يتحقق من مشكلات الإعدادات/الحالة الشائعة ويُصلحها. فحوصات CLI أخرى مفيدة: `openclaw status --all`, `openclaw logs --follow`, `openclaw gateway status`, `openclaw health --verbose`. - حلقة تصحيح سريعة: [أول 60 ثانية إذا كان هناك شيء معطل](#أول-60-ثانية-إذا-كان-هناك-شيء-معطل). - وثائق التثبيت: [التثبيت](/ar/install)، [علامات المُثبّت](/ar/install/installer)، [التحديث](/ar/install/updating). + حلقة تصحيح سريعة: [أول 60 ثانية إذا كان هناك شيء معطّل](#أول-60-ثانية-إذا-كان-هناك-شيء-معطّل). + وثائق التثبيت: [التثبيت](/ar/install)، [أعلام المثبّت](/ar/install/installer)، [التحديث](/ar/install/updating). - - أسباب تخطي Heartbeat الشائعة: + + أسباب شائعة لتخطي Heartbeat: - `quiet-hours`: خارج نافذة الساعات النشطة المكوّنة - `empty-heartbeat-file`: الملف `HEARTBEAT.md` موجود لكنه يحتوي فقط على هيكل فارغ/عناوين فقط - - `no-tasks-due`: وضع المهام في `HEARTBEAT.md` نشط ولكن لم يحن موعد أي من فترات المهام بعد - - `alerts-disabled`: كل إظهار Heartbeat معطّل (`showOk` و`showAlerts` و`useIndicator` كلها معطلة) + - `no-tasks-due`: وضع المهام في `HEARTBEAT.md` نشط لكن لم يحن موعد أي من فترات المهام بعد + - `alerts-disabled`: كل مؤشرات ظهور Heartbeat معطلة (`showOk` و`showAlerts` و`useIndicator` جميعها معطلة) - في وضع المهام، لا يتم تقديم الطوابع الزمنية للاستحقاق إلا بعد اكتمال - تشغيل Heartbeat فعلي. عمليات التشغيل المتخطاة لا تضع علامة على المهام على أنها مكتملة. + في وضع المهام، لا يتم تقديم الطوابع الزمنية المستحقة إلا بعد اكتمال + تشغيل Heartbeat فعلي. ولا تُعلِّم عمليات التشغيل المتخطاة المهام على أنها مكتملة. الوثائق: [Heartbeat](/ar/gateway/heartbeat)، [الأتمتة والمهام](/ar/automation). @@ -158,7 +158,7 @@ x-i18n: openclaw onboard --install-daemon ``` - يمكن للمعالج أيضًا بناء أصول واجهة المستخدم تلقائيًا. بعد الإعداد الأولي، عادةً ما تقوم بتشغيل Gateway على المنفذ **18789**. + يمكن للمعالج أيضًا بناء أصول واجهة المستخدم تلقائيًا. بعد الإعداد الأولي، عادةً ما تشغّل Gateway على المنفذ **18789**. من المصدر (للمساهمين/المطورين): @@ -176,10 +176,10 @@ x-i18n: - يفتح المعالج متصفحك بعنوان URL نظيف للوحة التحكم (من دون رمز مميز) مباشرةً بعد الإعداد الأولي، كما يطبع الرابط أيضًا في الملخص. أبقِ علامة التبويب تلك مفتوحة؛ وإذا لم تُفتح تلقائيًا، فانسخ/ألصق عنوان URL المطبوع على الجهاز نفسه. + يفتح المعالج متصفحك باستخدام عنوان URL نظيف للوحة التحكم (من دون رموز مميزة) مباشرةً بعد الإعداد الأولي ويطبع الرابط أيضًا في الملخص. أبقِ علامة التبويب هذه مفتوحة؛ وإذا لم تُفتح، فانسخ/ألصق عنوان URL المطبوع على الجهاز نفسه. - + **Localhost (الجهاز نفسه):** - افتح `http://127.0.0.1:18789/`. @@ -190,59 +190,60 @@ x-i18n: **ليس على localhost:** - - **Tailscale Serve** (موصى به): أبقِ الربط على loopback، وشغّل `openclaw gateway --tailscale serve`، ثم افتح `https:///`. إذا كانت `gateway.auth.allowTailscale` تساوي `true`، فإن ترويسات الهوية تفي بمصادقة Control UI/WebSocket (من دون لصق shared secret، مع افتراض موثوقية مضيف Gateway)؛ أما واجهات HTTP API فما تزال تتطلب مصادقة shared-secret إلا إذا استخدمت عمدًا `none` لإدخال خاص أو مصادقة HTTP عبر trusted-proxy. تتم مَسْلسلة محاولات مصادقة Serve المتزامنة السيئة من العميل نفسه قبل أن يسجل محدِّد المصادقة الفاشلة هذه المحاولات، لذلك قد تُظهر إعادة المحاولة السيئة الثانية بالفعل الرسالة `retry later`. - - **ربط Tailnet**: شغّل `openclaw gateway --bind tailnet --token ""` (أو كوّن مصادقة كلمة المرور)، وافتح `http://:18789/`، ثم ألصق shared secret المطابق في إعدادات لوحة التحكم. + - **Tailscale Serve** (موصى به): أبقِ الربط على loopback، وشغّل `openclaw gateway --tailscale serve`، وافتح `https:///`. إذا كانت قيمة `gateway.auth.allowTailscale` هي `true`، فإن رؤوس الهوية تلبّي مصادقة Control UI/WebSocket (من دون لصق shared secret، مع افتراض موثوقية مضيف Gateway)؛ بينما تظل واجهات HTTP API تتطلب مصادقة shared-secret إلا إذا استخدمت عمدًا `none` لـ private-ingress أو مصادقة HTTP عبر trusted-proxy. + تتم سلسلة محاولات مصادقة Serve غير الصالحة المتزامنة من العميل نفسه قبل أن يسجل محدِّد فشل المصادقة المحاولة، لذلك قد تُظهر المحاولة الثانية غير الصالحة بالفعل الرسالة `retry later`. + - **ربط Tailnet**: شغّل `openclaw gateway --bind tailnet --token ""` (أو كوّن مصادقة بكلمة مرور)، وافتح `http://:18789/`، ثم ألصق shared secret المطابق في إعدادات لوحة التحكم. - **وكيل عكسي مدرك للهوية**: أبقِ Gateway خلف trusted proxy غير مربوط بـ loopback، واضبط `gateway.auth.mode: "trusted-proxy"`، ثم افتح عنوان URL الخاص بالوكيل. - - **نفق SSH**: `ssh -N -L 18789:127.0.0.1:18789 user@host` ثم افتح `http://127.0.0.1:18789/`. تظل مصادقة shared-secret مطبقة عبر النفق؛ ألصق الرمز المميز أو كلمة المرور المكوّنة إذا طُلِب منك ذلك. + - **نفق SSH**: `ssh -N -L 18789:127.0.0.1:18789 user@host` ثم افتح `http://127.0.0.1:18789/`. تظل مصادقة shared-secret مطبقة عبر النفق؛ ألصق الرمز المميز أو كلمة المرور المكوّنة إذا طُلب ذلك. - راجع [لوحة التحكم](/web/dashboard) و[أسطح الويب](/web) لمعرفة أوضاع الربط وتفاصيل المصادقة. + راجع [لوحة التحكم](/web/dashboard) و[واجهات الويب](/web) للحصول على تفاصيل أوضاع الربط والمصادقة. - - إنهما يتحكمان في طبقتين مختلفتين: + + يتحكمان في طبقتين مختلفتين: - - `approvals.exec`: يمرر مطالبات الموافقة إلى وجهات الدردشة + - `approvals.exec`: يمرّر مطالبات الموافقة إلى وجهات الدردشة - `channels..execApprovals`: يجعل تلك القناة تعمل كعميل موافقة أصلي لموافقات exec - ما تزال سياسة exec الخاصة بالمضيف هي بوابة الموافقة الفعلية. يتحكم تكوين الدردشة فقط في مكان ظهور - مطالبات الموافقة وكيفية تمكّن الأشخاص من الرد عليها. + تظل سياسة exec الخاصة بالمضيف هي بوابة الموافقة الفعلية. يحدد إعداد الدردشة فقط مكان ظهور + مطالبات الموافقة وكيف يمكن للأشخاص الرد عليها. - في معظم الإعدادات **لا** تحتاج إلى كليهما: + في معظم البيئات، **لا** تحتاج إلى كليهما: - - إذا كانت الدردشة تدعم الأوامر والردود بالفعل، فإن `/approve` في الدردشة نفسها يعمل عبر المسار المشترك. - - إذا كانت هناك قناة أصلية مدعومة تستطيع استنتاج الموافقين بأمان، فإن OpenClaw يفعّل الآن تلقائيًا الموافقات الأصلية المعتمدة على الرسائل الخاصة أولًا عندما تكون `channels..execApprovals.enabled` غير معيّنة أو تساوي `"auto"`. - - عندما تتوفر بطاقات/أزرار الموافقة الأصلية، تكون واجهة المستخدم الأصلية تلك هي المسار الأساسي؛ ويجب ألا يضمّن الوكيل أمر `/approve` يدويًا إلا إذا كانت نتيجة الأداة تشير إلى أن موافقات الدردشة غير متاحة أو أن الموافقة اليدوية هي المسار الوحيد. + - إذا كانت الدردشة تدعم الأوامر والردود بالفعل، فإن `/approve` داخل الدردشة نفسها يعمل عبر المسار المشترك. + - إذا كانت قناة أصلية مدعومة يمكنها استنتاج الموافقين بأمان، فإن OpenClaw يفعّل الآن تلقائيًا الموافقات الأصلية بنمط DM-first عندما تكون `channels..execApprovals.enabled` غير معيّنة أو قيمتها `"auto"`. + - عندما تكون بطاقات/أزرار الموافقة الأصلية متاحة، تكون واجهة المستخدم الأصلية هي المسار الأساسي؛ ويجب ألا يضمّن الوكيل أمر `/approve` يدويًا إلا إذا كانت نتيجة الأداة تقول إن موافقات الدردشة غير متاحة أو أن الموافقة اليدوية هي المسار الوحيد. - استخدم `approvals.exec` فقط عندما يجب أيضًا تمرير المطالبات إلى دردشات أخرى أو غرف عمليات صريحة. - استخدم `channels..execApprovals.target: "channel"` أو `"both"` فقط عندما تريد صراحةً نشر مطالبات الموافقة مرة أخرى في الغرفة/الموضوع الأصلي. - - موافقات Plugin منفصلة مرة أخرى: فهي تستخدم `/approve` في الدردشة نفسها افتراضيًا، مع تمرير اختياري عبر `approvals.plugin`، وفقط بعض القنوات الأصلية تُبقي معالجة الموافقة الأصلية الخاصة بـ plugin فوق ذلك. + - موافقات Plugin منفصلة مرة أخرى: فهي تستخدم `/approve` داخل الدردشة نفسها افتراضيًا، مع تمرير اختياري عبر `approvals.plugin`، وفقط بعض القنوات الأصلية تُبقي معالجة plugin-approval-native فوق ذلك. - النسخة المختصرة: التمرير مخصص للتوجيه، وتكوين العميل الأصلي مخصص لتجربة استخدام أغنى خاصة بالقناة. + الخلاصة: التمرير مخصص للتوجيه، وإعداد العميل الأصلي مخصص لتجربة استخدام أغنى خاصة بالقناة. راجع [موافقات Exec](/ar/tools/exec-approvals). - - Node **>= 22** مطلوب. يُوصى باستخدام `pnpm`. لا يُوصى باستخدام Bun مع Gateway. + + Node **>= 22** مطلوب. يُوصى باستخدام `pnpm`. لا يُنصح باستخدام Bun مع Gateway. - نعم. Gateway خفيف - تشير الوثائق إلى أن **512MB-1GB من الذاكرة RAM** و**نواة واحدة** ونحو **500MB** - من المساحة التخزينية تكفي للاستخدام الشخصي، كما تشير إلى أن **Raspberry Pi 4 يمكنه تشغيله**. + نعم. إن Gateway خفيف - وتذكر الوثائق أن **512MB-1GB RAM** و**نواة واحدة** وحوالي **500MB** + من مساحة القرص تكفي للاستخدام الشخصي، كما تشير إلى أن **Raspberry Pi 4 يمكنه تشغيله**. - إذا كنت تريد هامشًا إضافيًا (للسجلات والوسائط والخدمات الأخرى)، فإن **2GB موصى بها**، لكنها - ليست حدًا أدنى صارمًا. + إذا كنت تريد مساحة إضافية (للسجلات أو الوسائط أو الخدمات الأخرى)، فإن **2GB موصى بها**، + لكنها ليست حدًا أدنى صارمًا. - نصيحة: يمكن لجهاز Pi/VPS صغير استضافة Gateway، ويمكنك إقران **nodes** على حاسوبك المحمول/هاتفك من أجل - الشاشة/الكاميرا/اللوحة المحلية أو تنفيذ الأوامر. راجع [Nodes](/ar/nodes). + نصيحة: يمكن لجهاز Pi/VPS صغير استضافة Gateway، ويمكنك إقران **nodes** على حاسوبك المحمول/هاتفك + لاستخدام الشاشة/الكاميرا/اللوحة محليًا أو لتنفيذ الأوامر. راجع [Nodes](/ar/nodes). - باختصار: نعم، يعمل، لكن توقّع بعض الزوايا الخشنة. + باختصار: يعمل، لكن توقّع بعض الحواف الخشنة. - - استخدم نظام تشغيل **64-bit** واحتفظ بإصدار Node >= 22. - - فضّل تثبيت **hackable (git)** حتى تتمكن من رؤية السجلات والتحديث بسرعة. + - استخدم نظام تشغيل **64-bit** واحتفظ بـ Node >= 22. + - فضّل **التثبيت القابل للتعديل (git)** حتى تتمكن من رؤية السجلات والتحديث بسرعة. - ابدأ من دون قنوات/Skills، ثم أضفها واحدة تلو الأخرى. - إذا واجهت مشكلات غريبة في الملفات الثنائية، فعادةً ما تكون مشكلة **توافق ARM**. @@ -250,10 +251,10 @@ x-i18n: - - تعتمد تلك الشاشة على إمكانية الوصول إلى Gateway ومصادقته. كما أن TUI يرسل أيضًا - "Wake up, my friend!" تلقائيًا عند أول اكتمال للإعداد. إذا رأيت هذا السطر **من دون رد** - وظلت الرموز المميزة عند 0، فهذا يعني أن الوكيل لم يعمل أبدًا. + + تعتمد هذه الشاشة على أن يكون Gateway قابلاً للوصول ومصادَقًا عليه. كما ترسل TUI أيضًا + عبارة "Wake up, my friend!" تلقائيًا عند أول فتح. إذا رأيت هذا السطر **من دون رد** + وبقيت الرموز عند 0، فهذا يعني أن الوكيل لم يعمل مطلقًا. 1. أعد تشغيل Gateway: @@ -269,56 +270,56 @@ x-i18n: openclaw logs --follow ``` - 3. إذا ظل عالقًا، فشغّل: + 3. إذا ظل معلقًا، فشغّل: ```bash openclaw doctor ``` إذا كان Gateway بعيدًا، فتأكد من أن اتصال النفق/Tailscale قائم وأن واجهة المستخدم - موجهة إلى Gateway الصحيح. راجع [الوصول عن بُعد](/ar/gateway/remote). + موجّهة إلى Gateway الصحيح. راجع [الوصول البعيد](/ar/gateway/remote). - - نعم. انسخ **دليل الحالة** و**مساحة العمل**، ثم شغّل Doctor مرة واحدة. يحافظ هذا - على الروبوت الخاص بك "كما هو تمامًا" (الذاكرة، وسجل الجلسات، والمصادقة، وحالة - القناة) طالما أنك تنسخ **كلا** الموقعين: + + نعم. انسخ **دليل الحالة** و**مساحة العمل**، ثم شغّل Doctor مرة واحدة. هذا + يُبقي الروبوت "كما هو تمامًا" (الذاكرة، وسجل الجلسة، والمصادقة، وحالة + القناة) ما دمت تنسخ **الموقعين** كليهما: 1. ثبّت OpenClaw على الجهاز الجديد. 2. انسخ `$OPENCLAW_STATE_DIR` (الافتراضي: `~/.openclaw`) من الجهاز القديم. 3. انسخ مساحة العمل الخاصة بك (الافتراضي: `~/.openclaw/workspace`). 4. شغّل `openclaw doctor` وأعد تشغيل خدمة Gateway. - يحافظ ذلك على التكوين، وملفات تعريف المصادقة، وبيانات اعتماد WhatsApp، والجلسات، والذاكرة. إذا كنت في + هذا يحافظ على الإعدادات، وملفات المصادقة، وبيانات اعتماد WhatsApp، والجلسات، والذاكرة. إذا كنت تستخدم الوضع البعيد، فتذكّر أن مضيف Gateway هو من يملك مخزن الجلسات ومساحة العمل. - **مهم:** إذا كنت تلتزم/تدفع مساحة العمل الخاصة بك فقط إلى GitHub، فأنت تنشئ نسخة - احتياطية من **الذاكرة + ملفات التمهيد**، ولكن **ليس** من سجل الجلسات أو المصادقة. هذه العناصر - موجودة ضمن `~/.openclaw/` (على سبيل المثال `~/.openclaw/agents//sessions/`). + **مهم:** إذا كنت فقط تُجري commit/push لمساحة العمل إلى GitHub، فأنت تنشئ + نسخة احتياطية من **الذاكرة + ملفات التمهيد**، لكن **ليس** من سجل الجلسات أو المصادقة. فهذه + موجودة تحت `~/.openclaw/` (على سبيل المثال `~/.openclaw/agents//sessions/`). - ذو صلة: [الترحيل](/ar/install/migrating)، [أين توجد الأشياء على القرص](#where-things-live-on-disk)، + ذو صلة: [الترحيل](/ar/install/migrating)، [مكان وجود الأشياء على القرص](#where-things-live-on-disk)، [مساحة عمل الوكيل](/ar/concepts/agent-workspace)، [Doctor](/ar/gateway/doctor)، [الوضع البعيد](/ar/gateway/remote). - - تحقق من سجل التغييرات على GitHub: + + تحقّق من سجل التغييرات على GitHub: [https://github.com/openclaw/openclaw/blob/main/CHANGELOG.md](https://github.com/openclaw/openclaw/blob/main/CHANGELOG.md) أحدث الإدخالات تكون في الأعلى. إذا كان القسم العلوي مميزًا بأنه **Unreleased**، فالقسم التالي المؤرخ - هو أحدث إصدار تم شحنه. تُجمَّع الإدخالات ضمن **Highlights** و**Changes** و + هو أحدث إصدار تم شحنه. وتُجمّع الإدخالات ضمن **Highlights** و**Changes** و **Fixes** (بالإضافة إلى أقسام الوثائق/الأقسام الأخرى عند الحاجة). - + تقوم بعض اتصالات Comcast/Xfinity بحظر `docs.openclaw.ai` بشكل غير صحيح عبر Xfinity - Advanced Security. عطّلها أو أضف `docs.openclaw.ai` إلى قائمة السماح، ثم أعد المحاولة. - يُرجى مساعدتنا في رفع الحظر عنه عبر الإبلاغ هنا: [https://spa.xfinity.com/check_url_status](https://spa.xfinity.com/check_url_status). + Advanced Security. عطّله أو أضف `docs.openclaw.ai` إلى قائمة السماح، ثم أعد المحاولة. + يُرجى مساعدتنا في رفع الحظر عنه بالإبلاغ هنا: [https://spa.xfinity.com/check_url_status](https://spa.xfinity.com/check_url_status). - إذا كنت لا تزال غير قادر على الوصول إلى الموقع، فالوثائق معكوسة على GitHub: + إذا كنت لا تزال غير قادر على الوصول إلى الموقع، فهناك نسخة معكوسة من الوثائق على GitHub: [https://github.com/openclaw/openclaw/tree/main/docs](https://github.com/openclaw/openclaw/tree/main/docs) @@ -329,21 +330,21 @@ x-i18n: - `latest` = stable - `beta` = إصدار مبكر للاختبار - عادةً، يصل الإصدار المستقر إلى **beta** أولًا، ثم تنقل خطوة - ترقية صريحة الإصدار نفسه إلى `latest`. ويمكن للمشرفين أيضًا - النشر مباشرة إلى `latest` عند الحاجة. لهذا السبب يمكن أن يشير beta وstable + عادةً ما يصل الإصدار المستقر إلى **beta** أولاً، ثم تنقل خطوة + ترقية صريحة هذا الإصدار نفسه إلى `latest`. ويمكن للمشرفين أيضًا + النشر مباشرةً إلى `latest` عند الحاجة. ولهذا السبب قد يشير beta وstable إلى **الإصدار نفسه** بعد الترقية. - لمعرفة ما الذي تغيّر: + اطّلع على ما تغيّر: [https://github.com/openclaw/openclaw/blob/main/CHANGELOG.md](https://github.com/openclaw/openclaw/blob/main/CHANGELOG.md) - للاطلاع على أوامر التثبيت المختصرة والفرق بين beta وdev، راجع الأكورديون أدناه. + للاطلاع على أوامر التثبيت المختصرة والفارق بين beta وdev، راجع الأكورديون أدناه. - - **Beta** هو npm dist-tag `beta` (وقد يطابق `latest` بعد الترقية). - **Dev** هو الرأس المتحرك للفرع `main` (git)؛ وعند نشره يستخدم npm dist-tag `dev`. + + **Beta** هو npm dist-tag باسم `beta` (وقد يطابق `latest` بعد الترقية). + أما **Dev** فهو الرأس المتحرك للفرع `main` (git)؛ وعند نشره، يستخدم npm dist-tag `dev`. أوامر مختصرة (macOS/Linux): @@ -355,15 +356,15 @@ x-i18n: curl -fsSL --proto '=https' --tlsv1.2 https://openclaw.ai/install.sh | bash -s -- --install-method git ``` - مُثبّت Windows (PowerShell): + مثبّت Windows (PowerShell): [https://openclaw.ai/install.ps1](https://openclaw.ai/install.ps1) - مزيد من التفاصيل: [قنوات التطوير](/ar/install/development-channels) و[علامات المُثبّت](/ar/install/installer). + مزيد من التفاصيل: [قنوات التطوير](/ar/install/development-channels) و[أعلام المثبّت](/ar/install/installer). - خياران: + يوجد خياران: 1. **قناة Dev (نسخة git محلية):** @@ -371,17 +372,17 @@ x-i18n: openclaw update --channel dev ``` - هذا يبدّل إلى الفرع `main` ويحدّث من المصدر. + يبدّل هذا إلى الفرع `main` ويحدّث من المصدر. - 2. **تثبيت Hackable (من موقع المُثبّت):** + 2. **تثبيت قابل للتعديل (من موقع المثبّت):** ```bash curl -fsSL https://openclaw.ai/install.sh | bash -s -- --install-method git ``` - يمنحك ذلك مستودعًا محليًا يمكنك تعديله، ثم تحديثه عبر git. + يمنحك هذا مستودعًا محليًا يمكنك تعديله، ثم تحديثه عبر git. - إذا كنت تفضل نسخة محلية نظيفة يدويًا، فاستخدم: + إذا كنت تفضّل نسخة نظيفة يدويًا، فاستخدم: ```bash git clone https://github.com/openclaw/openclaw.git @@ -398,28 +399,28 @@ x-i18n: دليل تقريبي: - - **التثبيت:** من 2 إلى 5 دقائق - - **الإعداد الأولي:** من 5 إلى 15 دقيقة بحسب عدد القنوات/النماذج التي تكوّنها + - **التثبيت:** 2-5 دقائق + - **الإعداد الأولي:** 5-15 دقيقة بحسب عدد القنوات/النماذج التي تقوم بتكوينها - إذا بدا أنه عالق، فاستخدم [المُثبّت عالق؟](#quick-start-and-first-run-setup) + إذا تعلّق، فاستخدم [تعطّل المثبّت](#quick-start-and-first-run-setup) وحلقة التصحيح السريعة في [أنا عالق](#quick-start-and-first-run-setup). - - أعد تشغيل المُثبّت مع **مخرجات تفصيلية**: + + أعد تشغيل المثبّت باستخدام **مخرجات مفصلة**: ```bash curl -fsSL https://openclaw.ai/install.sh | bash -s -- --verbose ``` - تثبيت Beta مع مخرجات تفصيلية: + تثبيت beta مع المخرجات المفصلة: ```bash curl -fsSL https://openclaw.ai/install.sh | bash -s -- --beta --verbose ``` - لتثبيت hackable (git): + من أجل تثبيت قابل للتعديل (git): ```bash curl -fsSL https://openclaw.ai/install.sh | bash -s -- --install-method git --verbose @@ -434,44 +435,44 @@ x-i18n: Set-PSDebug -Trace 0 ``` - مزيد من الخيارات: [علامات المُثبّت](/ar/install/installer). + مزيد من الخيارات: [أعلام المثبّت](/ar/install/installer). هناك مشكلتان شائعتان في Windows: - **1) خطأ npm spawn git / git غير موجود** + **1) خطأ npm spawn git / git not found** - - ثبّت **Git for Windows** وتأكد من أن `git` موجود في PATH. - - أغلق PowerShell وأعد فتحه، ثم أعد تشغيل المُثبّت. + - ثبّت **Git for Windows** وتأكد من أن `git` موجود على PATH لديك. + - أغلق PowerShell وأعد فتحه، ثم أعد تشغيل المثبّت. - **2) openclaw غير معروف بعد التثبيت** + **2) لا يتم التعرف على openclaw بعد التثبيت** - - مجلد npm global bin غير موجود في PATH. - - تحقق من المسار: + - مجلد npm global bin ليس موجودًا على PATH. + - تحقّق من المسار: ```powershell npm config get prefix ``` - - أضف ذلك الدليل إلى PATH الخاص بالمستخدم (لا حاجة إلى اللاحقة `\bin` في Windows؛ ففي معظم الأنظمة يكون `%AppData%\npm`). + - أضف ذلك الدليل إلى PATH الخاص بالمستخدم لديك (لا حاجة إلى اللاحقة `\bin` على Windows؛ ففي معظم الأنظمة يكون `%AppData%\npm`). - أغلق PowerShell وأعد فتحه بعد تحديث PATH. - إذا كنت تريد أكثر إعداد سلاسة على Windows، فاستخدم **WSL2** بدلًا من Windows الأصلي. + إذا كنت تريد أسلس إعداد على Windows، فاستخدم **WSL2** بدل Windows الأصلي. الوثائق: [Windows](/ar/platforms/windows). - - يكون السبب عادةً عدم تطابق صفحة ترميز وحدة التحكم في بيئات Windows الأصلية. + + يكون هذا عادةً بسبب عدم تطابق صفحة ترميز وحدة التحكم في بيئات Windows الأصلية. الأعراض: - - يُعرض خرج `system.run`/`exec` للنص الصيني على شكل محارف مشوهة - - يبدو الأمر نفسه صحيحًا في ملف تعريف طرفية آخر + - يعرض خرج `system.run`/`exec` النص الصيني بصورة مشوهة + - يبدو الأمر نفسه طبيعيًا في ملف تعريف طرفية آخر - حل بديل سريع في PowerShell: + حل سريع مؤقت في PowerShell: ```powershell chcp 65001 @@ -480,72 +481,72 @@ x-i18n: $OutputEncoding = [System.Text.UTF8Encoding]::new($false) ``` - ثم أعد تشغيل Gateway وأعد محاولة تنفيذ الأمر: + ثم أعد تشغيل Gateway وأعد محاولة الأمر: ```powershell openclaw gateway restart ``` - إذا كنت لا تزال قادرًا على إعادة ظهور هذه المشكلة في أحدث OpenClaw، فتابعها/أبلِغ عنها في: + إذا كنت لا تزال قادرًا على إعادة إنتاج هذه المشكلة على أحدث إصدار من OpenClaw، فتتبّعها/أبلِغ عنها في: - [Issue #30640](https://github.com/openclaw/openclaw/issues/30640) - استخدم **تثبيت hackable (git)** حتى تكون لديك الشيفرة المصدرية الكاملة والوثائق محليًا، ثم اسأل + استخدم **التثبيت القابل للتعديل (git)** حتى تكون لديك الشيفرة المصدرية الكاملة والوثائق محليًا، ثم اسأل الروبوت الخاص بك (أو Claude/Codex) _من ذلك المجلد_ حتى يتمكن من قراءة المستودع والإجابة بدقة. ```bash curl -fsSL https://openclaw.ai/install.sh | bash -s -- --install-method git ``` - مزيد من التفاصيل: [التثبيت](/ar/install) و[علامات المُثبّت](/ar/install/installer). + مزيد من التفاصيل: [التثبيت](/ar/install) و[أعلام المثبّت](/ar/install/installer). - + الإجابة المختصرة: اتبع دليل Linux، ثم شغّل الإعداد الأولي. - - المسار السريع لـ Linux + تثبيت الخدمة: [Linux](/ar/platforms/linux). + - المسار السريع في Linux + تثبيت الخدمة: [Linux](/ar/platforms/linux). - الشرح الكامل: [البدء](/ar/start/getting-started). - - المُثبّت + التحديثات: [التثبيت والتحديثات](/ar/install/updating). + - المثبّت + التحديثات: [التثبيت والتحديثات](/ar/install/updating). - - يعمل أي VPS بنظام Linux. ثبّت على الخادم، ثم استخدم SSH/Tailscale للوصول إلى Gateway. + + أي VPS يعمل بنظام Linux مناسب. ثبّت على الخادم، ثم استخدم SSH/Tailscale للوصول إلى Gateway. الأدلة: [exe.dev](/ar/install/exe-dev)، [Hetzner](/ar/install/hetzner)، [Fly.io](/ar/install/fly). - الوصول عن بُعد: [Gateway البعيد](/ar/gateway/remote). + الوصول البعيد: [Gateway remote](/ar/gateway/remote). - - نحتفظ **بمركز استضافة** يضم المزوّدين الشائعين. اختر أحدهم واتبع الدليل: + + نحتفظ **بمركز استضافة** يضم موفري الخدمة الشائعين. اختر واحدًا واتبع الدليل: - - [استضافة VPS](/ar/vps) (جميع المزوّدين في مكان واحد) + - [استضافة VPS](/ar/vps) (كل المزوّدين في مكان واحد) - [Fly.io](/ar/install/fly) - [Hetzner](/ar/install/hetzner) - [exe.dev](/ar/install/exe-dev) - كيفية عمله في السحابة: يتم تشغيل **Gateway على الخادم**، وتصل إليه - من حاسوبك المحمول/هاتفك عبر Control UI (أو Tailscale/SSH). وتوجد حالتك + مساحة عملك - على الخادم، لذا تعامل مع المضيف على أنه مصدر الحقيقة وخذ له نسخًا احتياطية. + كيف يعمل هذا في السحابة: يعمل **Gateway على الخادم**، وتصل إليه + من حاسوبك المحمول/هاتفك عبر Control UI (أو Tailscale/SSH). وتوجد حالتك + مساحة العمل + على الخادم، لذا تعامل مع المضيف على أنه مصدر الحقيقة وقم بعمل نسخة احتياطية له. - يمكنك إقران **nodes** (Mac/iOS/Android/headless) مع Gateway السحابي هذا للوصول إلى - الشاشة/الكاميرا/اللوحة المحلية أو تشغيل الأوامر على حاسوبك المحمول مع الإبقاء على + يمكنك إقران **nodes** (Mac/iOS/Android/headless) مع Gateway السحابي هذا للوصول + إلى الشاشة/الكاميرا/اللوحة محليًا أو تشغيل الأوامر على حاسوبك المحمول مع الإبقاء على Gateway في السحابة. - المركز: [المنصات](/ar/platforms). الوصول عن بُعد: [Gateway البعيد](/ar/gateway/remote). - Nodes: [Nodes](/ar/nodes)، [CLI لـ Nodes](/cli/nodes). + المركز: [المنصات](/ar/platforms). الوصول البعيد: [Gateway remote](/ar/gateway/remote). + Nodes: [Nodes](/ar/nodes)، [Nodes CLI](/cli/nodes). - الإجابة المختصرة: **ممكن، لكنه غير موصى به**. يمكن لتدفق التحديث أن يعيد تشغيل - Gateway (ما يؤدي إلى إسقاط الجلسة النشطة)، وقد يحتاج إلى نسخة git محلية نظيفة، - وقد يطلب تأكيدًا. والأكثر أمانًا: تشغيل التحديثات من صدفة الأوامر بصفتك المشغّل. + الإجابة المختصرة: **ممكن، لكنه غير موصى به**. إذ يمكن أن تؤدي عملية التحديث إلى إعادة تشغيل + Gateway (مما يقطع الجلسة النشطة)، وقد تحتاج إلى نسخة git محلية نظيفة، + وقد تطلب تأكيدًا. والأكثر أمانًا هو تشغيل التحديثات من shell بصفتك المشغّل. استخدم CLI: @@ -557,7 +558,7 @@ x-i18n: openclaw update --no-restart ``` - إذا كان لا بد من الأتمتة من وكيل: + إذا اضطررت إلى الأتمتة من وكيل: ```bash openclaw update --yes --no-restart @@ -569,37 +570,36 @@ x-i18n: - `openclaw onboard` هو مسار الإعداد الموصى به. في **الوضع المحلي**، يوجّهك خلال: + إن `openclaw onboard` هو مسار الإعداد الموصى به. في **الوضع المحلي**، فإنه يوجّهك خلال: - - **إعداد النموذج/المصادقة** (OAuth للمزوّد، مفاتيح API، Anthropic setup-token، بالإضافة إلى خيارات النماذج المحلية مثل LM Studio) + - **إعداد النموذج/المصادقة** (OAuth للموفر، ومفاتيح API، وsetup-token الخاص بـ Anthropic، بالإضافة إلى خيارات النماذج المحلية مثل LM Studio) - موقع **مساحة العمل** + ملفات التمهيد - **إعدادات Gateway** (الربط/المنفذ/المصادقة/tailscale) - - **القنوات** (WhatsApp وTelegram وDiscord وMattermost وSignal وiMessage، بالإضافة إلى Plugins القنوات المضمّنة مثل QQ Bot) - - **تثبيت العملية الخدمية** (LaunchAgent على macOS؛ ووحدة مستخدم systemd على Linux/WSL2) + - **القنوات** (WhatsApp وTelegram وDiscord وMattermost وSignal وiMessage، بالإضافة إلى إضافات القنوات المضمّنة مثل QQ Bot) + - **تثبيت العملية الخلفية** (LaunchAgent على macOS؛ ووحدة مستخدم systemd على Linux/WSL2) - **فحوصات الصحة** واختيار **Skills** - كما أنه يحذّر أيضًا إذا كان النموذج الذي قمت بتكوينه غير معروف أو يفتقد المصادقة. + كما يحذّر أيضًا إذا كان النموذج الذي قمت بتكوينه غير معروف أو إذا كانت المصادقة مفقودة. - لا. يمكنك تشغيل OpenClaw باستخدام **مفاتيح API** (Anthropic/OpenAI/وغيرها) أو باستخدام - **نماذج محلية فقط** بحيث تبقى بياناتك على جهازك. الاشتراكات (Claude - Pro/Max أو OpenAI Codex) هي وسائل اختيارية لمصادقة هؤلاء المزوّدين. + لا. يمكنك تشغيل OpenClaw باستخدام **مفاتيح API** (Anthropic/OpenAI/وغيرها) أو + باستخدام **نماذج محلية فقط** بحيث تبقى بياناتك على جهازك. وتُعد الاشتراكات (Claude + Pro/Max أو OpenAI Codex) طرقًا اختيارية للمصادقة مع هؤلاء المزوّدين. بالنسبة إلى Anthropic في OpenClaw، فالتقسيم العملي هو: - **مفتاح Anthropic API**: فوترة Anthropic API العادية - **مصادقة Claude CLI / اشتراك Claude داخل OpenClaw**: أخبرنا موظفو Anthropic - أن هذا الاستخدام مسموح به مرة أخرى، ويتعامل OpenClaw مع استخدام `claude -p` - على أنه معتمد لهذا التكامل ما لم تنشر Anthropic - سياسة جديدة + بأن هذا الاستخدام مسموح به مرة أخرى، ويتعامل OpenClaw مع استخدام `claude -p` + على أنه معتمد لهذا التكامل ما لم تنشر Anthropic سياسة جديدة - بالنسبة إلى مضيفي Gateway طويلة العمر، تبقى مفاتيح Anthropic API الإعداد - الأكثر قابلية للتنبؤ. كما أن OpenAI Codex OAuth مدعوم صراحةً للأدوات + بالنسبة إلى مضيفات Gateway طويلة العمر، تظل مفاتيح Anthropic API هي + الإعداد الأكثر قابلية للتنبؤ. كما أن OpenAI Codex OAuth مدعوم صراحةً للأدوات الخارجية مثل OpenClaw. - يدعم OpenClaw أيضًا خيارات أخرى مستضافة على نمط الاشتراك بما في ذلك + ويدعم OpenClaw أيضًا خيارات أخرى مستضافة بنمط الاشتراك، بما في ذلك **Qwen Cloud Coding Plan** و**MiniMax Coding Plan** و **Z.AI / GLM Coding Plan**. @@ -613,24 +613,24 @@ x-i18n: نعم. - أخبرنا موظفو Anthropic أن استخدام Claude CLI على نمط OpenClaw مسموح به مرة أخرى، لذلك + أخبرنا موظفو Anthropic أن استخدام Claude CLI بأسلوب OpenClaw مسموح به مرة أخرى، لذلك يتعامل OpenClaw مع مصادقة اشتراك Claude واستخدام `claude -p` على أنهما معتمدان لهذا التكامل ما لم تنشر Anthropic سياسة جديدة. وإذا كنت تريد الإعداد الأكثر قابلية للتنبؤ على جانب الخادم، فاستخدم مفتاح Anthropic API بدلًا من ذلك. - + نعم. - أخبرنا موظفو Anthropic أن هذا الاستخدام مسموح به مرة أخرى، لذلك يتعامل OpenClaw - مع إعادة استخدام Claude CLI واستخدام `claude -p` على أنهما معتمدان لهذا التكامل + أخبرنا موظفو Anthropic أن هذا الاستخدام مسموح به مرة أخرى، لذلك يتعامل OpenClaw مع + إعادة استخدام Claude CLI واستخدام `claude -p` على أنهما معتمدان لهذا التكامل ما لم تنشر Anthropic سياسة جديدة. - ما يزال Anthropic setup-token متاحًا كمسار رمز مميز مدعوم في OpenClaw، لكن OpenClaw يفضّل الآن إعادة استخدام Claude CLI و`claude -p` عند توفرهما. - أما لأحمال العمل الإنتاجية أو متعددة المستخدمين، فتبقى - مصادقة مفتاح Anthropic API الخيار الأكثر أمانًا وقابلية للتنبؤ. وإذا كنت تريد خيارات أخرى مستضافة - على نمط الاشتراك في OpenClaw، فراجع [OpenAI](/ar/providers/openai)، و[Qwen / Model + لا يزال setup-token الخاص بـ Anthropic متاحًا باعتباره مسار رمز مميز مدعومًا في OpenClaw، لكن OpenClaw يفضّل الآن إعادة استخدام Claude CLI و`claude -p` عند توفرهما. + أما لأعباء العمل الإنتاجية أو متعددة المستخدمين، فما تزال + مصادقة مفتاح Anthropic API هي الخيار الأكثر أمانًا وقابلية للتنبؤ. وإذا كنت تريد خيارات + مستضافة أخرى بنمط الاشتراك في OpenClaw، فراجع [OpenAI](/ar/providers/openai)، و[Qwen / Model Cloud](/ar/providers/qwen)، و[MiniMax](/ar/providers/minimax)، و[GLM Models](/ar/providers/glm). @@ -638,71 +638,71 @@ x-i18n: -هذا يعني أن **حصة Anthropic / حد المعدل** لديك قد استُنفِد خلال النافذة الحالية. إذا كنت +هذا يعني أن **حصة/حد المعدل لدى Anthropic** قد نُفدت في النافذة الحالية. إذا كنت تستخدم **Claude CLI**، فانتظر حتى تُعاد تهيئة النافذة أو قم بترقية خطتك. وإذا كنت تستخدم **مفتاح Anthropic API**، فتحقق من Anthropic Console -لمعرفة الاستخدام/الفوترة وارفع الحدود عند الحاجة. +للاطلاع على الاستخدام/الفوترة وارفع الحدود عند الحاجة. - إذا كانت الرسالة تحديدًا: + إذا كانت الرسالة تحديدًا هي: `Extra usage is required for long context requests`، فهذا يعني أن الطلب يحاول استخدام - النسخة التجريبية من سياق Anthropic ذي 1M (`context1m: true`). ولا يعمل ذلك إلا عندما تكون + الإصدار التجريبي لسياق Anthropic بحجم 1M (`context1m: true`). وهذا لا يعمل إلا عندما تكون بيانات اعتمادك مؤهلة لفوترة السياق الطويل (فوترة مفتاح API أو - مسار Claude-login في OpenClaw مع تمكين Extra Usage). + مسار تسجيل الدخول إلى Claude في OpenClaw مع تمكين Extra Usage). - نصيحة: اضبط **نموذجًا احتياطيًا** حتى يتمكن OpenClaw من مواصلة الرد بينما يكون أحد المزوّدين مقيّدًا بالمعدل. + نصيحة: اضبط **نموذجًا احتياطيًا** حتى يتمكن OpenClaw من مواصلة الرد بينما يكون أحد الموفّرين مقيّدًا بالمعدل. راجع [النماذج](/cli/models)، و[OAuth](/ar/concepts/oauth)، و [/gateway/troubleshooting#anthropic-429-extra-usage-required-for-long-context](/ar/gateway/troubleshooting#anthropic-429-extra-usage-required-for-long-context). - نعم. يحتوي OpenClaw على مزوّد **Amazon Bedrock (Converse)** مضمّن. عند وجود مؤشرات بيئة AWS، يمكن لـ OpenClaw اكتشاف كتالوج Bedrock للبث/النص تلقائيًا ودمجه كمزوّد ضمني باسم `amazon-bedrock`؛ وإلا فيمكنك تمكين `plugins.entries.amazon-bedrock.config.discovery.enabled` صراحةً أو إضافة إدخال مزوّد يدوي. راجع [Amazon Bedrock](/ar/providers/bedrock) و[مزودو النماذج](/ar/providers/models). وإذا كنت تفضّل تدفقًا مُدارًا للمفاتيح، فما يزال الوكيل المتوافق مع OpenAI أمام Bedrock خيارًا صالحًا. + نعم. يتضمن OpenClaw موفّر **Amazon Bedrock (Converse)** مضمّنًا. وعند وجود مؤشرات بيئة AWS، يمكن لـ OpenClaw اكتشاف كتالوج Bedrock للبث/النص تلقائيًا ودمجه كموفّر ضمني `amazon-bedrock`؛ وإلا يمكنك تمكين `plugins.entries.amazon-bedrock.config.discovery.enabled` صراحةً أو إضافة إدخال موفّر يدويًا. راجع [Amazon Bedrock](/ar/providers/bedrock) و[موفري النماذج](/ar/providers/models). وإذا كنت تفضّل تدفق مفتاح مُدار، فإن الوكيل المتوافق مع OpenAI أمام Bedrock يظل خيارًا صالحًا. - يدعم OpenClaw **OpenAI Code (Codex)** عبر OAuth (تسجيل الدخول إلى ChatGPT). يمكن للإعداد الأولي تشغيل تدفق OAuth وسيضبط النموذج الافتراضي إلى `openai-codex/gpt-5.4` عند الاقتضاء. راجع [مزودو النماذج](/ar/concepts/model-providers) و[الإعداد الأولي (CLI)](/ar/start/wizard). + يدعم OpenClaw **OpenAI Code (Codex)** عبر OAuth (تسجيل الدخول إلى ChatGPT). ويمكن للإعداد الأولي تشغيل تدفق OAuth كما سيضبط النموذج الافتراضي على `openai-codex/gpt-5.4` عند الاقتضاء. راجع [موفري النماذج](/ar/concepts/model-providers) و[الإعداد الأولي (CLI)](/ar/start/wizard). - يتعامل OpenClaw مع المسارين على نحو منفصل: + يتعامل OpenClaw مع المسارين بشكل منفصل: - `openai-codex/gpt-5.4` = OAuth الخاص بـ ChatGPT/Codex - - `openai/gpt-5.4` = OpenAI Platform API المباشر + - `openai/gpt-5.4` = واجهة OpenAI Platform API المباشرة - في OpenClaw، يتم توصيل تسجيل الدخول إلى ChatGPT/Codex بالمسار `openai-codex/*`، - وليس بمسار `openai/*` المباشر. إذا كنت تريد مسار API المباشر في - OpenClaw، فاضبط `OPENAI_API_KEY` (أو تكوين مزود OpenAI المكافئ). - وإذا كنت تريد تسجيل الدخول إلى ChatGPT/Codex في OpenClaw، فاستخدم `openai-codex/*`. + في OpenClaw، يكون تسجيل الدخول عبر ChatGPT/Codex موصولًا بمسار `openai-codex/*`، + وليس بمسار `openai/*` المباشر. وإذا كنت تريد مسار API المباشر في + OpenClaw، فاضبط `OPENAI_API_KEY` (أو إعداد موفّر OpenAI المكافئ). + وإذا كنت تريد تسجيل الدخول عبر ChatGPT/Codex في OpenClaw، فاستخدم `openai-codex/*`. - يستخدم `openai-codex/*` مسار Codex OAuth، وتدير OpenAI نوافذ الحصة القابلة للاستخدام فيه - وتعتمد على الخطة. وعمليًا، قد تختلف تلك الحدود عن - تجربة موقع/تطبيق ChatGPT، حتى عندما يكون كلاهما مرتبطًا بالحساب نفسه. + يستخدم `openai-codex/*` مسار OAuth الخاص بـ Codex، وتدير OpenAI نوافذ الحصة القابلة للاستخدام فيه + كما أنها تعتمد على الخطة. ومن الناحية العملية، قد تختلف هذه الحدود عن + تجربة موقع/تطبيق ChatGPT، حتى عندما يكون الاثنان مرتبطين بالحساب نفسه. - يمكن لـ OpenClaw عرض نوافذ الاستخدام/الحصة المرئية حاليًا للمزوّد في + يمكن لـ OpenClaw عرض نوافذ الاستخدام/الحصة المرئية حاليًا للموفّر في `openclaw models status`، لكنه لا يخترع ولا يطبّع استحقاقات ChatGPT على الويب - إلى وصول مباشر لـ API. وإذا كنت تريد مسار الفوترة/الحدود المباشر في OpenAI Platform، + إلى وصول مباشر إلى API. وإذا كنت تريد مسار الفوترة/الحدود المباشر في OpenAI Platform، فاستخدم `openai/*` مع مفتاح API. - + نعم. يدعم OpenClaw بالكامل **OAuth لاشتراك OpenAI Code (Codex)**. - تسمح OpenAI صراحةً باستخدام اشتراك OAuth في الأدوات/سير العمل الخارجية + وتسمح OpenAI صراحةً باستخدام OAuth الخاص بالاشتراك في الأدوات/سير العمل الخارجية مثل OpenClaw. ويمكن للإعداد الأولي تشغيل تدفق OAuth نيابةً عنك. - راجع [OAuth](/ar/concepts/oauth)، و[مزودو النماذج](/ar/concepts/model-providers)، و[الإعداد الأولي (CLI)](/ar/start/wizard). + راجع [OAuth](/ar/concepts/oauth)، و[موفري النماذج](/ar/concepts/model-providers)، و[الإعداد الأولي (CLI)](/ar/start/wizard). - - يستخدم Gemini CLI **تدفق مصادقة Plugin**، وليس client id أو secret داخل `openclaw.json`. + + يستخدم Gemini CLI **تدفق مصادقة Plugin**، وليس معرّف عميل أو سرًا في `openclaw.json`. الخطوات: - 1. ثبّت Gemini CLI محليًا بحيث يكون `gemini` موجودًا في `PATH` + 1. ثبّت Gemini CLI محليًا بحيث يكون `gemini` موجودًا على `PATH` - Homebrew: `brew install gemini-cli` - npm: `npm install -g @google/gemini-cli` 2. فعّل Plugin: `openclaw plugins enable google` @@ -710,35 +710,35 @@ x-i18n: 4. النموذج الافتراضي بعد تسجيل الدخول: `google-gemini-cli/gemini-3-flash-preview` 5. إذا فشلت الطلبات، فاضبط `GOOGLE_CLOUD_PROJECT` أو `GOOGLE_CLOUD_PROJECT_ID` على مضيف Gateway - يخزّن هذا رموز OAuth المميزة في ملفات تعريف المصادقة على مضيف Gateway. التفاصيل: [مزودو النماذج](/ar/concepts/model-providers). + يؤدي هذا إلى تخزين رموز OAuth في ملفات المصادقة على مضيف Gateway. التفاصيل: [موفري النماذج](/ar/concepts/model-providers). - - عادةً لا. يحتاج OpenClaw إلى سياق كبير + أمان قوي؛ فالبطاقات الصغيرة تقطع المحتوى وتسرّب. وإذا كان لا بد، فشغّل **أكبر** بنية نموذج يمكنك تشغيلها محليًا (LM Studio) وراجع [/gateway/local-models](/ar/gateway/local-models). النماذج الأصغر/المكمّمة تزيد من خطر حقن المطالبات - راجع [الأمان](/ar/gateway/security). + + غالبًا لا. يحتاج OpenClaw إلى سياق كبير + أمان قوي؛ فالبطاقات الصغيرة تقطع وتُسرّب. وإذا اضطررت، فشغّل **أكبر** بنية نموذج يمكنك تشغيلها محليًا (LM Studio) وراجع [/gateway/local-models](/ar/gateway/local-models). تزيد النماذج الأصغر/المكمّاة من مخاطر حقن المطالبات - راجع [الأمان](/ar/gateway/security). - - اختر نقاط نهاية مثبتة على منطقة معينة. يوفّر OpenRouter خيارات مستضافة في الولايات المتحدة لـ MiniMax وKimi وGLM؛ اختر النسخة المستضافة في الولايات المتحدة للحفاظ على البيانات داخل المنطقة. ولا يزال بإمكانك إدراج Anthropic/OpenAI إلى جانب هذه الخيارات باستخدام `models.mode: "merge"` بحيث تبقى النماذج الاحتياطية متاحة مع احترام المزوّد المقيّد بالمنطقة الذي اخترته. + + اختر نقاط نهاية مثبتة على منطقة معينة. يوفّر OpenRouter خيارات مستضافة في الولايات المتحدة لـ MiniMax وKimi وGLM؛ اختر النسخة المستضافة في الولايات المتحدة للحفاظ على البيانات داخل المنطقة. ولا يزال بإمكانك إدراج Anthropic/OpenAI إلى جانب هذه الخيارات باستخدام `models.mode: "merge"` بحيث تظل النماذج الاحتياطية متاحة مع احترام الموفّر المقيّد بالمنطقة الذي تختاره. - لا. يعمل OpenClaw على macOS أو Linux (وWindows عبر WSL2). جهاز Mac mini اختياري - فبعض الأشخاص - يشترونه كمضيف يعمل دائمًا، لكن VPS صغيرًا أو خادمًا منزليًا أو جهازًا من فئة Raspberry Pi يعمل أيضًا. + لا. يعمل OpenClaw على macOS أو Linux (وWindows عبر WSL2). ويُعد Mac mini اختياريًا - فبعض الأشخاص + يشترونه كمضيف يعمل دائمًا، لكن VPS صغيرًا أو خادمًا منزليًا أو جهازًا من فئة Raspberry Pi يمكنه القيام بذلك أيضًا. - أنت تحتاج إلى Mac فقط **للأدوات الحصرية لـ macOS**. وبالنسبة إلى iMessage، استخدم [BlueBubbles](/ar/channels/bluebubbles) (موصى به) - يعمل خادم BlueBubbles على أي Mac، بينما يمكن أن يعمل Gateway على Linux أو في مكان آخر. وإذا كنت تريد أدوات أخرى حصرية لـ macOS، فشغّل Gateway على Mac أو اقترن مع Node لنظام macOS. + تحتاج إلى جهاز Mac فقط **للأدوات الخاصة بـ macOS فقط**. بالنسبة إلى iMessage، استخدم [BlueBubbles](/ar/channels/bluebubbles) (موصى به) - يعمل خادم BlueBubbles على أي جهاز Mac، بينما يمكن لـ Gateway أن يعمل على Linux أو في مكان آخر. وإذا كنت تريد أدوات أخرى خاصة بـ macOS فقط، فشغّل Gateway على جهاز Mac أو اقترن مع Node يعمل على macOS. الوثائق: [BlueBubbles](/ar/channels/bluebubbles)، [Nodes](/ar/nodes)، [الوضع البعيد على Mac](/ar/platforms/mac/remote). - تحتاج إلى **أي جهاز macOS** مسجّل الدخول إلى Messages. ولا **يلزم** أن يكون Mac mini - - فأي Mac يعمل. **استخدم [BlueBubbles](/ar/channels/bluebubbles)** (موصى به) مع iMessage - يعمل خادم BlueBubbles على macOS، بينما يمكن أن يعمل Gateway على Linux أو في مكان آخر. + تحتاج إلى **أي جهاز macOS** مسجّل الدخول إلى Messages. ولا **يشترط** أن يكون Mac mini - + فأي جهاز Mac يصلح. **استخدم [BlueBubbles](/ar/channels/bluebubbles)** (موصى به) لـ iMessage - إذ يعمل خادم BlueBubbles على macOS، بينما يمكن لـ Gateway أن يعمل على Linux أو في مكان آخر. - إعدادات شائعة: + الإعدادات الشائعة: - - شغّل Gateway على Linux/VPS، وشغّل خادم BlueBubbles على أي Mac مسجّل الدخول إلى Messages. + - شغّل Gateway على Linux/VPS، وشغّل خادم BlueBubbles على أي جهاز Mac مسجّل الدخول إلى Messages. - شغّل كل شيء على جهاز Mac إذا كنت تريد أبسط إعداد على جهاز واحد. الوثائق: [BlueBubbles](/ar/channels/bluebubbles)، [Nodes](/ar/nodes)، @@ -746,61 +746,61 @@ x-i18n: - - نعم. يمكن لـ **Mac mini تشغيل Gateway**، ويمكن لـ MacBook Pro الاتصال به بوصفه - **Node** (جهازًا مرافقًا). لا تقوم Nodes بتشغيل Gateway - بل توفّر + + نعم. يمكن لـ **Mac mini تشغيل Gateway**، ويمكن لـ MacBook Pro الخاص بك الاتصال باعتباره + **Node** (جهازًا مرافقًا). لا تقوم Nodes بتشغيل Gateway - بل توفر إمكانات إضافية مثل الشاشة/الكاميرا/اللوحة و`system.run` على ذلك الجهاز. - نمط شائع: + النمط الشائع: - - Gateway على جهاز Mac mini (يعمل دائمًا). + - تشغيل Gateway على Mac mini (دائم التشغيل). - يشغّل MacBook Pro تطبيق macOS أو مضيف Node ويقترن مع Gateway. - استخدم `openclaw nodes status` / `openclaw nodes list` لرؤيته. - الوثائق: [Nodes](/ar/nodes)، [CLI لـ Nodes](/cli/nodes). + الوثائق: [Nodes](/ar/nodes)، [Nodes CLI](/cli/nodes). - لا يُوصى باستخدام Bun. نرى أخطاء وقت تشغيل، خاصةً مع WhatsApp وTelegram. - استخدم **Node** من أجل Gateways مستقرة. + لا يُوصى باستخدام Bun. فنحن نرى أخطاء في وقت التشغيل، خصوصًا مع WhatsApp وTelegram. + استخدم **Node** للحصول على Gateways مستقرة. - إذا كنت لا تزال ترغب في التجربة مع Bun، فافعل ذلك على Gateway غير إنتاجية + إذا كنت لا تزال تريد التجربة باستخدام Bun، فافعل ذلك على Gateway غير إنتاجية ومن دون WhatsApp/Telegram. - - `channels.telegram.allowFrom` هو **معرّف مستخدم Telegram البشري** (رقمي). وليس اسم مستخدم البوت. + + إن `channels.telegram.allowFrom` هو **معرّف مستخدم Telegram الخاص بالمرسل البشري** (رقمي). وليس اسم مستخدم الروبوت. - يقبل الإعداد الأولي إدخال `@username` ويحوّله إلى معرّف رقمي، لكن تفويض OpenClaw يستخدم المعرفات الرقمية فقط. + يطلب الإعداد أرقام معرّفات المستخدمين فقط. وإذا كانت لديك بالفعل إدخالات قديمة من نوع `@username` في الإعدادات، فيمكن أن يحاول `openclaw doctor --fix` حلها. - الطريقة الأكثر أمانًا (من دون بوت تابع لجهة خارجية): + الأكثر أمانًا (من دون روبوت طرف ثالث): - - أرسل رسالة خاصة إلى البوت، ثم شغّل `openclaw logs --follow` واقرأ `from.id`. + - أرسل رسالة مباشرة إلى الروبوت، ثم شغّل `openclaw logs --follow` واقرأ `from.id`. Bot API الرسمي: - - أرسل رسالة خاصة إلى البوت، ثم استدعِ `https://api.telegram.org/bot/getUpdates` واقرأ `message.from.id`. + - أرسل رسالة مباشرة إلى الروبوت، ثم اطلب `https://api.telegram.org/bot/getUpdates` واقرأ `message.from.id`. - جهة خارجية (خصوصية أقل): + طرف ثالث (خصوصية أقل): - - أرسل رسالة خاصة إلى `@userinfobot` أو `@getidsbot`. + - أرسل رسالة مباشرة إلى `@userinfobot` أو `@getidsbot`. راجع [/channels/telegram](/ar/channels/telegram#access-control-and-activation). - نعم، عبر **التوجيه متعدد الوكلاء**. اربط **الرسائل الخاصة** في WhatsApp لكل مرسل (النظير `kind: "direct"`، والمرسل E.164 مثل `+15551234567`) بـ `agentId` مختلف، بحيث يحصل كل شخص على مساحة العمل الخاصة به ومخزن الجلسات الخاص به. وتظل الردود صادرة من **حساب WhatsApp نفسه**، كما يبقى التحكم في الوصول إلى الرسائل الخاصة (`channels.whatsapp.dmPolicy` / `channels.whatsapp.allowFrom`) عامًا على مستوى حساب WhatsApp كله. راجع [التوجيه متعدد الوكلاء](/ar/concepts/multi-agent) و[WhatsApp](/ar/channels/whatsapp). + نعم، عبر **التوجيه متعدد الوكلاء**. اربط **الرسائل المباشرة** لكل مرسل على WhatsApp (النظير `kind: "direct"`، ومعرّف المرسل بصيغة E.164 مثل `+15551234567`) بـ `agentId` مختلف، بحيث يحصل كل شخص على مساحة العمل ومخزن الجلسات الخاصين به. وستظل الردود تصدر من **حساب WhatsApp نفسه**، كما أن التحكم في الوصول إلى الرسائل المباشرة (`channels.whatsapp.dmPolicy` / `channels.whatsapp.allowFrom`) يكون عامًا على مستوى حساب WhatsApp نفسه. راجع [التوجيه متعدد الوكلاء](/ar/concepts/multi-agent) و[WhatsApp](/ar/channels/whatsapp). - نعم. استخدم التوجيه متعدد الوكلاء: امنح كل وكيل نموذجه الافتراضي الخاص، ثم اربط المسارات الواردة (حساب المزوّد أو نظراء محددون) بكل وكيل. يوجد مثال للتكوين في [التوجيه متعدد الوكلاء](/ar/concepts/multi-agent). راجع أيضًا [النماذج](/ar/concepts/models) و[التكوين](/ar/gateway/configuration). + نعم. استخدم التوجيه متعدد الوكلاء: امنح كل وكيل نموذجه الافتراضي الخاص، ثم اربط المسارات الواردة (حساب الموفّر أو نظراء محددين) بكل وكيل. يوجد مثال على الإعدادات في [التوجيه متعدد الوكلاء](/ar/concepts/multi-agent). راجع أيضًا [النماذج](/ar/concepts/models) و[الإعدادات](/ar/gateway/configuration). - نعم. يدعم Homebrew نظام Linux (Linuxbrew). إعداد سريع: + نعم. يدعم Homebrew نظام Linux ‏(Linuxbrew). إعداد سريع: ```bash /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" @@ -809,25 +809,25 @@ x-i18n: brew install ``` - إذا كنت تشغّل OpenClaw عبر systemd، فتأكد من أن PATH الخاص بالخدمة يتضمن `/home/linuxbrew/.linuxbrew/bin` (أو بادئة brew الخاصة بك) حتى تُحل الأدوات المثبتة عبر `brew` في الصدف غير التفاعلية. - كما تُضيف الإصدارات الحديثة أيضًا أدلة صناديق المستخدم الشائعة مسبقًا في خدمات Linux systemd (على سبيل المثال `~/.local/bin` و`~/.npm-global/bin` و`~/.local/share/pnpm` و`~/.bun/bin`) وتحترم `PNPM_HOME` و`NPM_CONFIG_PREFIX` و`BUN_INSTALL` و`VOLTA_HOME` و`ASDF_DATA_DIR` و`NVM_DIR` و`FNM_DIR` عند ضبطها. + إذا كنت تشغّل OpenClaw عبر systemd، فتأكد من أن PATH الخاص بالخدمة يتضمن `/home/linuxbrew/.linuxbrew/bin` (أو بادئة brew لديك) حتى تُحل الأدوات المثبتة عبر `brew` في بيئات shell غير التفاعلية. + كما تضيف الإصدارات الحديثة أيضًا أدلة bin الشائعة للمستخدم مسبقًا في خدمات Linux systemd (على سبيل المثال `~/.local/bin` و`~/.npm-global/bin` و`~/.local/share/pnpm` و`~/.bun/bin`) وتراعي `PNPM_HOME` و`NPM_CONFIG_PREFIX` و`BUN_INSTALL` و`VOLTA_HOME` و`ASDF_DATA_DIR` و`NVM_DIR` و`FNM_DIR` عند ضبطها. - - - **تثبيت git القابل للتعديل:** نسخة مصدرية كاملة، قابلة للتعديل، وهي الأفضل للمساهمين. - تقوم بتشغيل عمليات البناء محليًا ويمكنك تعديل الشيفرة/الوثائق. - - **تثبيت npm:** تثبيت CLI عام، من دون مستودع، وهو الأفضل لمن يريد "تشغيله فقط". + + - **التثبيت القابل للتعديل (git):** نسخة مصدر كاملة، قابلة للتعديل، وهي الأفضل للمساهمين. + إذ تقوم بتشغيل البنيات محليًا ويمكنك تعديل الشيفرة/الوثائق. + - **npm install:** تثبيت CLI عام، من دون مستودع، وهو الأفضل لحالة "شغّله فقط". تأتي التحديثات من npm dist-tags. الوثائق: [البدء](/ar/start/getting-started)، [التحديث](/ar/install/updating). - - نعم. ثبّت النمط الآخر، ثم شغّل Doctor حتى تشير خدمة Gateway إلى نقطة الدخول الجديدة. - هذا **لا يحذف بياناتك** - بل يغيّر فقط تثبيت شيفرة OpenClaw. وتبقى حالتك - (`~/.openclaw`) ومساحة عملك (`~/.openclaw/workspace`) من دون تغيير. + + نعم. ثبّت النسخة الأخرى، ثم شغّل Doctor حتى تشير خدمة Gateway إلى نقطة الدخول الجديدة. + هذا **لا يحذف بياناتك** - فهو يغيّر فقط تثبيت شيفرة OpenClaw. أما حالتك + (`~/.openclaw`) ومساحة العمل (`~/.openclaw/workspace`) فتبقيان كما هما دون تغيير. من npm إلى git: @@ -848,68 +848,68 @@ x-i18n: openclaw gateway restart ``` - يكتشف Doctor عدم تطابق نقطة دخول خدمة Gateway ويعرض إعادة كتابة تكوين الخدمة ليتطابق مع التثبيت الحالي (استخدم `--repair` في الأتمتة). + يكتشف Doctor عدم تطابق نقطة دخول خدمة Gateway ويعرض إعادة كتابة إعدادات الخدمة لتتوافق مع التثبيت الحالي (استخدم `--repair` في الأتمتة). - نصائح النسخ الاحتياطي: راجع [استراتيجية النسخ الاحتياطي](#where-things-live-on-disk). + للحصول على نصائح حول النسخ الاحتياطي، راجع [استراتيجية النسخ الاحتياطي](#where-things-live-on-disk). - - الإجابة المختصرة: **إذا كنت تريد موثوقية على مدار الساعة طوال أيام الأسبوع، فاستخدم VPS**. وإذا كنت تريد - أقل قدر من الاحتكاك وكنت موافقًا على السكون/إعادة التشغيل، فشغّله محليًا. + + الإجابة المختصرة: **إذا كنت تريد اعتمادية على مدار الساعة طوال أيام الأسبوع، فاستخدم VPS**. أما إذا كنت تريد + أقل قدر من التعقيد وتقبل السكون/إعادة التشغيل، فشغّله محليًا. - **الحاسوب المحمول (Gateway محلية)** + **الحاسوب المحمول (Gateway محلي)** - - **الإيجابيات:** لا توجد تكلفة خادم، وصول مباشر إلى الملفات المحلية، نافذة متصفح مرئية. - - **السلبيات:** السكون/انقطاع الشبكة = انقطاعات اتصال، تحديثات/إعادات تشغيل نظام التشغيل تسبب انقطاعًا، ويجب أن يبقى الجهاز مستيقظًا. + - **الإيجابيات:** لا توجد تكلفة خادم، ووصول مباشر إلى الملفات المحلية، ونافذة متصفح مرئية مباشرة. + - **السلبيات:** السكون/انقطاع الشبكة = انقطاعات، وتحديثات/إعادات تشغيل نظام التشغيل تقاطع العمل، ويجب أن يظل الجهاز مستيقظًا. **VPS / السحابة** - - **الإيجابيات:** يعمل دائمًا، شبكة مستقرة، لا توجد مشكلات سكون الحاسوب المحمول، أسهل في الإبقاء عليه قيد التشغيل. - - **السلبيات:** غالبًا يعمل من دون واجهة (استخدم لقطات الشاشة)، وصول إلى الملفات عن بُعد فقط، ويجب عليك استخدام SSH للتحديثات. + - **الإيجابيات:** يعمل دائمًا، وشبكة مستقرة، ولا توجد مشكلات سكون الحاسوب المحمول، وأسهل في الاستمرار بالتشغيل. + - **السلبيات:** غالبًا يعمل دون واجهة مرئية (استخدم لقطات الشاشة)، ووصول إلى الملفات عن بُعد فقط، ويجب عليك استخدام SSH لإجراء التحديثات. - **ملاحظة خاصة بـ OpenClaw:** تعمل WhatsApp وTelegram وSlack وMattermost وDiscord جميعها بشكل جيد من VPS. والمفاضلة الحقيقية الوحيدة هي **متصفح headless** مقابل نافذة مرئية. راجع [المتصفح](/ar/tools/browser). + **ملاحظة خاصة بـ OpenClaw:** تعمل WhatsApp وTelegram وSlack وMattermost وDiscord جميعها بشكل جيد من VPS. والمقايضة الفعلية الوحيدة هي **متصفح headless** مقابل نافذة مرئية. راجع [Browser](/ar/tools/browser). - **الخيار الافتراضي الموصى به:** VPS إذا كنت قد واجهت سابقًا انقطاعات في Gateway. أما التشغيل المحلي فهو ممتاز عندما تكون تستخدم جهاز Mac بنشاط وتريد الوصول إلى الملفات المحلية أو أتمتة واجهة المستخدم مع متصفح مرئي. + **الافتراضي الموصى به:** VPS إذا كنت قد واجهت سابقًا انقطاعات في Gateway. أما التشغيل المحلي فهو ممتاز عندما تستخدم جهاز Mac بنشاط وتريد الوصول إلى الملفات المحلية أو أتمتة واجهة المستخدم من خلال متصفح مرئي. - - ليس مطلوبًا، لكنه **موصى به من أجل الموثوقية والعزل**. + + هذا ليس مطلوبًا، لكنه **موصى به من أجل الاعتمادية والعزل**. - - **مضيف مخصص (VPS/Mac mini/Pi):** يعمل دائمًا، انقطاعات أقل بسبب السكون/إعادة التشغيل، أذونات أنظف، وأسهل في الإبقاء عليه قيد التشغيل. - - **حاسوب محمول/مكتبي مشترك:** مناسب تمامًا للاختبار والاستخدام النشط، لكن توقّع توقفات عندما يدخل الجهاز في السكون أو يتلقى تحديثات. + - **مضيف مخصص (VPS/Mac mini/Pi):** يعمل دائمًا، وانقطاعات أقل بسبب السكون/إعادة التشغيل، وأذونات أنظف، وأسهل في الاستمرار بالتشغيل. + - **حاسوب محمول/مكتبي مشترك:** مناسب تمامًا للاختبار والاستخدام النشط، لكن توقّع توقفات عندما يدخل الجهاز في وضع السكون أو يتلقى تحديثات. - إذا كنت تريد أفضل ما في العالمين، فأبقِ Gateway على مضيف مخصص واقرن حاسوبك المحمول بوصفه **Node** من أجل أدوات الشاشة/الكاميرا/exec المحلية. راجع [Nodes](/ar/nodes). - وللاطلاع على إرشادات الأمان، اقرأ [الأمان](/ar/gateway/security). + إذا كنت تريد أفضل ما في العالمين، فأبقِ Gateway على مضيف مخصص واقرن حاسوبك المحمول باعتباره **Node** لاستخدام أدوات الشاشة/الكاميرا/exec المحلية. راجع [Nodes](/ar/nodes). + ولإرشادات الأمان، اقرأ [الأمان](/ar/gateway/security). - - OpenClaw خفيف. بالنسبة إلى Gateway أساسية + قناة دردشة واحدة: + + OpenClaw خفيف الوزن. بالنسبة إلى Gateway أساسي + قناة دردشة واحدة: - - **الحد الأدنى المطلق:** 1 vCPU، و1GB RAM، ونحو 500MB من مساحة القرص. - - **الموصى به:** 1-2 vCPU، و2GB RAM أو أكثر كهامش احتياطي (للسجلات، والوسائط، والقنوات المتعددة). يمكن أن تكون أدوات Node وأتمتة المتصفح شرهة للموارد. + - **الحد الأدنى المطلق:** وحدة vCPU واحدة، و1GB RAM، وحوالي 500MB من القرص. + - **الموصى به:** 1-2 vCPU، و2GB RAM أو أكثر لإتاحة هامش إضافي (للسجلات، والوسائط، والقنوات المتعددة). وقد تكون أدوات Node وأتمتة المتصفح شرهة للموارد. - نظام التشغيل: استخدم **Ubuntu LTS** (أو أي Debian/Ubuntu حديث). وقد جرى اختبار مسار التثبيت على Linux بشكل أفضل هناك. + نظام التشغيل: استخدم **Ubuntu LTS** (أو أي Debian/Ubuntu حديث). وقد تم اختبار مسار التثبيت على Linux بشكل أفضل هناك. الوثائق: [Linux](/ar/platforms/linux)، [استضافة VPS](/ar/vps). - نعم. تعامل مع الآلة الافتراضية كما تتعامل مع VPS: يجب أن تكون تعمل دائمًا، وقابلة للوصول، وأن تمتلك - ذاكرة RAM كافية لـ Gateway وأي قنوات تقوم بتمكينها. + نعم. تعامل مع الآلة الافتراضية كما تتعامل مع VPS: يجب أن تكون قيد التشغيل دائمًا، وقابلة للوصول، وتحتوي على قدر كافٍ + من RAM لـ Gateway وأي قنوات تفعّلها. - إرشادات أساسية: + الإرشادات الأساسية: - - **الحد الأدنى المطلق:** 1 vCPU و1GB RAM. + - **الحد الأدنى المطلق:** وحدة vCPU واحدة، و1GB RAM. - **الموصى به:** 2GB RAM أو أكثر إذا كنت تشغّل قنوات متعددة، أو أتمتة متصفح، أو أدوات وسائط. - - **نظام التشغيل:** Ubuntu LTS أو Debian/Ubuntu حديث آخر. + - **نظام التشغيل:** Ubuntu LTS أو أي Debian/Ubuntu حديث آخر. - إذا كنت على Windows، فإن **WSL2 هو أسهل إعداد على نمط الآلات الافتراضية** ويتمتع بأفضل توافق - مع الأدوات. راجع [Windows](/ar/platforms/windows)، [استضافة VPS](/ar/vps). - وإذا كنت تشغّل macOS داخل آلة افتراضية، فراجع [آلة macOS الافتراضية](/ar/install/macos-vm). + إذا كنت تستخدم Windows، فإن **WSL2 هو أسهل إعداد على نمط الآلة الافتراضية** ويملك أفضل + توافق مع الأدوات. راجع [Windows](/ar/platforms/windows)، [استضافة VPS](/ar/vps). + وإذا كنت تشغّل macOS داخل آلة افتراضية، فراجع [macOS VM](/ar/install/macos-vm). @@ -917,43 +917,43 @@ x-i18n: ## ما هو OpenClaw؟ - - OpenClaw هو مساعد AI شخصي تشغّله على أجهزتك الخاصة. يرد على أسطح المراسلة التي تستخدمها بالفعل (WhatsApp وTelegram وSlack وMattermost وDiscord وGoogle Chat وSignal وiMessage وWebChat وPlugins القنوات المضمّنة مثل QQ Bot) ويمكنه أيضًا تنفيذ الصوت + Canvas حي على المنصات المدعومة. ويمثل **Gateway** طبقة التحكم التي تعمل دائمًا؛ أما المساعد فهو المنتج. + + OpenClaw هو مساعد ذكاء اصطناعي شخصي تقوم بتشغيله على أجهزتك الخاصة. وهو يرد على أسطح المراسلة التي تستخدمها بالفعل (WhatsApp وTelegram وSlack وMattermost وDiscord وGoogle Chat وSignal وiMessage وWebChat وإضافات القنوات المضمنة مثل QQ Bot) ويمكنه أيضًا تنفيذ الصوت + Canvas مباشر على المنصات المدعومة. إن **Gateway** هو مستوى التحكم الذي يعمل دائمًا؛ والمساعد هو المنتج. - OpenClaw ليس "مجرد غلاف لـ Claude". بل هو **طبقة تحكم local-first** تتيح لك تشغيل + OpenClaw ليس "مجرد غلاف لـ Claude". إنه **مستوى تحكم محلي أولًا** يتيح لك تشغيل مساعد قادر على **أجهزتك الخاصة**، ويمكن الوصول إليه من تطبيقات الدردشة التي تستخدمها بالفعل، مع جلسات ذات حالة، وذاكرة، وأدوات - من دون تسليم التحكم في سير عملك إلى SaaS مستضاف. - أبرز المزايا: + أبرز النقاط: - - **أجهزتك، بياناتك:** شغّل Gateway حيثما تريد (Mac أو Linux أو VPS) واحتفظ - بمساحة العمل + سجل الجلسات محليًا. - - **قنوات حقيقية، وليست صندوق رمل ويب:** WhatsApp/Telegram/Slack/Discord/Signal/iMessage/etc، - بالإضافة إلى الصوت على الهاتف المحمول وCanvas على المنصات المدعومة. + - **أجهزتك، بياناتك:** شغّل Gateway أينما تريد (Mac أو Linux أو VPS) واحتفظ + بمساحة العمل + سجل الجلسات محليين. + - **قنوات حقيقية، لا صندوق رمل ويب:** WhatsApp/Telegram/Slack/Discord/Signal/iMessage/etc، + بالإضافة إلى الصوت عبر الجوال وCanvas على المنصات المدعومة. - **محايد تجاه النماذج:** استخدم Anthropic وOpenAI وMiniMax وOpenRouter وغيرها، مع توجيه - لكل وكيل والتحويل التلقائي عند الفشل. - - **خيار محلي فقط:** شغّل نماذج محلية حتى **تبقى كل البيانات على جهازك** إذا أردت. - - **توجيه متعدد الوكلاء:** افصل الوكلاء حسب القناة أو الحساب أو المهمة، بحيث يكون لكل منهم + وتحويل احتياطي لكل وكيل. + - **خيار محلي فقط:** شغّل نماذج محلية بحيث **يمكن أن تبقى كل البيانات على جهازك** إذا رغبت. + - **التوجيه متعدد الوكلاء:** وكلاء منفصلون لكل قناة أو حساب أو مهمة، ولكل منهم مساحة العمل والإعدادات الافتراضية الخاصة به. - - **مفتوح المصدر وقابل للتعديل:** افحصه، ووسّعه، واستضفه ذاتيًا من دون ارتهان لمورّد. + - **مفتوح المصدر وقابل للتعديل:** افحصه ووسّعه واستضفه ذاتيًا من دون ارتهان لمزوّد. - الوثائق: [Gateway](/ar/gateway)، [القنوات](/ar/channels)، [متعدد الوكلاء](/ar/concepts/multi-agent)، + الوثائق: [Gateway](/ar/gateway)، [القنوات](/ar/channels)، [تعدد الوكلاء](/ar/concepts/multi-agent)، [الذاكرة](/ar/concepts/memory). - - مشاريع أولى جيدة: + + مشروعات أولية جيدة: - أنشئ موقعًا إلكترونيًا (WordPress أو Shopify أو موقعًا ثابتًا بسيطًا). - - أنشئ نموذجًا أوليًا لتطبيق جوال (المخطط، الشاشات، خطة API). - - نظّم الملفات والمجلدات (التنظيف، التسمية، الوسم). + - أنشئ نموذجًا أوليًا لتطبيق جوال (المخطط، والشاشات، وخطة API). + - نظّم الملفات والمجلدات (التنظيف، والتسمية، والوسوم). - اربط Gmail وأتمت الملخصات أو المتابعات. - يمكنه التعامل مع مهام كبيرة، لكنه يعمل بأفضل شكل عندما تقسّمها إلى مراحل + يمكنه التعامل مع المهام الكبيرة، لكنه يعمل بأفضل صورة عندما تقسّمها إلى مراحل وتستخدم وكلاء فرعيين للعمل المتوازي. @@ -962,20 +962,20 @@ x-i18n: تبدو المكاسب اليومية عادةً على النحو التالي: - **إحاطات شخصية:** ملخصات للبريد الوارد، والتقويم، والأخبار التي تهمك. - - **البحث والصياغة:** بحث سريع، وملخصات، ومسودات أولية للرسائل الإلكترونية أو المستندات. - - **التذكيرات والمتابعات:** تنبيهات وقوائم تحقق مدفوعة بـ Cron أو Heartbeat. - - **أتمتة المتصفح:** ملء النماذج، وجمع البيانات، وتكرار مهام الويب. - - **التنسيق عبر الأجهزة:** أرسل مهمة من هاتفك، ودع Gateway تشغّلها على خادم، ثم استلم النتيجة مرة أخرى في الدردشة. + - **البحث والصياغة:** بحث سريع، وملخصات، ومسودات أولى للرسائل الإلكترونية أو المستندات. + - **التذكيرات والمتابعات:** تنبيهات وقوائم تحقق مدفوعة بواسطة Cron أو Heartbeat. + - **أتمتة المتصفح:** تعبئة النماذج، وجمع البيانات، وتكرار مهام الويب. + - **التنسيق بين الأجهزة:** أرسل مهمة من هاتفك، ودع Gateway يشغّلها على خادم، ثم استلم النتيجة مرة أخرى في الدردشة. - - نعم بالنسبة إلى **البحث، والتأهيل، والصياغة**. يمكنه فحص المواقع، وبناء قوائم مختصرة، - وتلخيص العملاء المحتملين، وكتابة مسودات للتواصل أو نصوص الإعلانات. + + نعم في **البحث، والتأهيل، والصياغة**. يمكنه فحص المواقع، وبناء قوائم مختصرة، + وتلخيص العملاء المحتملين، وكتابة مسودات للتواصل أو نصوص إعلانية. - أما بالنسبة إلى **حملات التواصل أو تشغيل الإعلانات**، فأبقِ إنسانًا ضمن الحلقة. تجنب - الرسائل غير المرغوب فيها، واتبع القوانين المحلية وسياسات المنصات، وراجع أي شيء قبل إرساله. - وأكثر الأنماط أمانًا هو أن يدع OpenClaw يصوغ وأنت توافق. + أما بالنسبة إلى **حملات التواصل أو الإعلانات**، فأبقِ إنسانًا في الحلقة. تجنب + الرسائل المزعجة، واتبع القوانين المحلية وسياسات المنصات، وراجع كل شيء قبل إرساله. + وأكثر الأنماط أمانًا هو أن يدع OpenClaw المسودة لك ثم توافق أنت عليها. الوثائق: [الأمان](/ar/gateway/security). @@ -983,18 +983,18 @@ x-i18n: OpenClaw هو **مساعد شخصي** وطبقة تنسيق، وليس بديلًا عن بيئة التطوير المتكاملة. استخدم - Claude Code أو Codex لأسرع حلقة برمجة مباشرة داخل مستودع. واستخدم OpenClaw عندما - تريد ذاكرة دائمة، ووصولًا عبر الأجهزة، وتنسيقًا للأدوات. + Claude Code أو Codex للحصول على أسرع دورة ترميز مباشرة داخل مستودع. واستخدم OpenClaw عندما تريد + ذاكرة مستمرة، ووصولًا عبر الأجهزة، وتنسيقًا للأدوات. المزايا: - - **ذاكرة + مساحة عمل دائمة** عبر الجلسات - - **وصول متعدد المنصات** (WhatsApp وTelegram وTUI وWebChat) - - **تنسيق الأدوات** (المتصفح، والملفات، والجدولة، وhooks) - - **Gateway تعمل دائمًا** (شغّلها على VPS وتفاعل معها من أي مكان) + - **ذاكرة + مساحة عمل مستمرتان** عبر الجلسات + - **وصول عبر منصات متعددة** (WhatsApp، Telegram، TUI، WebChat) + - **تنسيق الأدوات** (المتصفح، الملفات، الجدولة، hooks) + - **Gateway يعمل دائمًا** (شغّله على VPS وتفاعل معه من أي مكان) - **Nodes** للمتصفح/الشاشة/الكاميرا/exec المحلي - معرض: [https://openclaw.ai/showcase](https://openclaw.ai/showcase) + عرض توضيحي: [https://openclaw.ai/showcase](https://openclaw.ai/showcase) @@ -1003,68 +1003,68 @@ x-i18n: - استخدم التجاوزات المُدارة بدلًا من تعديل نسخة المستودع. ضع تغييراتك في `~/.openclaw/skills//SKILL.md` (أو أضف مجلدًا عبر `skills.load.extraDirs` في `~/.openclaw/openclaw.json`). ترتيب الأولوية هو `/skills` → `/.agents/skills` → `~/.agents/skills` → `~/.openclaw/skills` → المضمّنة → `skills.load.extraDirs`، لذلك تظل التجاوزات المُدارة متقدمة على Skills المضمّنة من دون لمس git. وإذا كنت تحتاج إلى تثبيت Skill على مستوى عام لكن لا تريد أن تكون مرئية إلا لبعض الوكلاء، فاحتفظ بالنسخة المشتركة في `~/.openclaw/skills` وتحكم في الرؤية عبر `agents.defaults.skills` و`agents.list[].skills`. ولا ينبغي أن تعيش التعديلات الجديرة بالرفع upstream إلا في المستودع وأن تخرج على شكل PRs. + استخدم عمليات التجاوز المُدارة بدلًا من تعديل نسخة المستودع. ضع تغييراتك في `~/.openclaw/skills//SKILL.md` (أو أضف مجلدًا عبر `skills.load.extraDirs` في `~/.openclaw/openclaw.json`). ترتيب الأولوية هو `/skills` ← `/.agents/skills` ← `~/.agents/skills` ← `~/.openclaw/skills` ← المضمّن ← `skills.load.extraDirs`، لذا فإن عمليات التجاوز المُدارة تظل تتقدم على Skills المضمّنة من دون لمس git. وإذا كنت تحتاج إلى تثبيت Skill على مستوى عام ولكن تكون مرئية فقط لبعض الوكلاء، فاحتفظ بالنسخة المشتركة في `~/.openclaw/skills` وتحكم في الظهور باستخدام `agents.defaults.skills` و`agents.list[].skills`. وينبغي ألا تعيش في المستودع وتُرسل كطلبات PR إلا التعديلات الجديرة بالرفع إلى المصدر الأصلي. - نعم. أضف أدلة إضافية عبر `skills.load.extraDirs` في `~/.openclaw/openclaw.json` (أدنى أولوية). ترتيب الأولوية الافتراضي هو `/skills` → `/.agents/skills` → `~/.agents/skills` → `~/.openclaw/skills` → المضمّنة → `skills.load.extraDirs`. يقوم `clawhub` بالتثبيت في `./skills` افتراضيًا، ويتعامل OpenClaw معها على أنها `/skills` في الجلسة التالية. وإذا كان ينبغي أن تكون Skill مرئية لبعض الوكلاء فقط، فاقرن ذلك مع `agents.defaults.skills` أو `agents.list[].skills`. + نعم. أضف أدلة إضافية عبر `skills.load.extraDirs` في `~/.openclaw/openclaw.json` (أدنى أولوية). ترتيب الأولوية الافتراضي هو `/skills` ← `/.agents/skills` ← `~/.agents/skills` ← `~/.openclaw/skills` ← المضمّن ← `skills.load.extraDirs`. يقوم `clawhub` بالتثبيت في `./skills` افتراضيًا، ويتعامل OpenClaw معه على أنه `/skills` في الجلسة التالية. وإذا كان ينبغي أن تكون Skill مرئية فقط لوكلاء محددين، فاقرن ذلك مع `agents.defaults.skills` أو `agents.list[].skills`. الأنماط المدعومة اليوم هي: - **وظائف Cron**: يمكن للوظائف المعزولة ضبط تجاوز `model` لكل وظيفة. - - **الوكلاء الفرعيون**: وجّه المهام إلى وكلاء منفصلين يملكون نماذج افتراضية مختلفة. - - **تبديل عند الطلب**: استخدم `/model` لتبديل نموذج الجلسة الحالية في أي وقت. + - **الوكلاء الفرعيون**: وجّه المهام إلى وكلاء منفصلين لديهم نماذج افتراضية مختلفة. + - **التبديل عند الطلب**: استخدم `/model` للتبديل بين نماذج الجلسة الحالية في أي وقت. - راجع [وظائف Cron](/ar/automation/cron-jobs)، [التوجيه متعدد الوكلاء](/ar/concepts/multi-agent)، و[أوامر الشرطة المائلة](/ar/tools/slash-commands). + راجع [وظائف Cron](/ar/automation/cron-jobs)، و[التوجيه متعدد الوكلاء](/ar/concepts/multi-agent)، و[أوامر الشرطة المائلة](/ar/tools/slash-commands). - - استخدم **الوكلاء الفرعيين** للمهام الطويلة أو المتوازية. يعمل الوكلاء الفرعيون في جلستهم الخاصة، + + استخدم **وكلاء فرعيين** للمهام الطويلة أو المتوازية. يعمل الوكلاء الفرعيون في جلستهم الخاصة، ويعيدون ملخصًا، ويحافظون على استجابة الدردشة الرئيسية. - اطلب من الروبوت "spawn a sub-agent for this task" أو استخدم `/subagents`. - استخدم `/status` في الدردشة لمعرفة ما الذي تفعله Gateway الآن (وما إذا كانت مشغولة). + اطلب من الروبوت "تشغيل وكيل فرعي لهذه المهمة" أو استخدم `/subagents`. + واستخدم `/status` في الدردشة لمعرفة ما الذي ينفذه Gateway الآن (وما إذا كان مشغولًا). - نصيحة تتعلق بالرموز: تستهلك المهام الطويلة والوكلاء الفرعيون كليهما الرموز. وإذا كانت التكلفة مصدر قلق، فاضبط + نصيحة خاصة بالرموز: تستهلك المهام الطويلة والوكلاء الفرعيون كلاهما رموزًا. وإذا كانت التكلفة مصدر قلق، فاضبط نموذجًا أرخص للوكلاء الفرعيين عبر `agents.defaults.subagents.model`. الوثائق: [الوكلاء الفرعيون](/ar/tools/subagents)، [المهام الخلفية](/ar/automation/tasks). - - استخدم ارتباطات السلاسل. يمكنك ربط سلسلة محادثة في Discord بوكيل فرعي أو هدف جلسة بحيث تبقى رسائل المتابعة في تلك السلسلة على الجلسة المرتبطة نفسها. + + استخدم ربط المحادثات. يمكنك ربط محادثة Discord بوكيل فرعي أو بهدف جلسة بحيث تبقى الرسائل اللاحقة في تلك المحادثة على الجلسة المرتبطة نفسها. التدفق الأساسي: - - أنشئها عبر `sessions_spawn` باستخدام `thread: true` (واختياريًا `mode: "session"` للمتابعة المستمرة). - - أو اربطها يدويًا باستخدام `/focus `. - - استخدم `/agents` لفحص حالة الارتباط. + - شغّل باستخدام `sessions_spawn` مع `thread: true` (واختياريًا `mode: "session"` للمتابعة المستمرة). + - أو اربط يدويًا باستخدام `/focus `. + - استخدم `/agents` لفحص حالة الربط. - استخدم `/session idle ` و`/session max-age ` للتحكم في إلغاء التركيز التلقائي. - - استخدم `/unfocus` لفصل السلسلة. + - استخدم `/unfocus` لفصل المحادثة. - التكوين المطلوب: + الإعدادات المطلوبة: - الإعدادات الافتراضية العامة: `session.threadBindings.enabled` و`session.threadBindings.idleHours` و`session.threadBindings.maxAgeHours`. - تجاوزات Discord: `channels.discord.threadBindings.enabled` و`channels.discord.threadBindings.idleHours` و`channels.discord.threadBindings.maxAgeHours`. - - الارتباط التلقائي عند الإنشاء: اضبط `channels.discord.threadBindings.spawnSubagentSessions: true`. + - الربط التلقائي عند التشغيل: اضبط `channels.discord.threadBindings.spawnSubagentSessions: true`. - الوثائق: [الوكلاء الفرعيون](/ar/tools/subagents)، [Discord](/ar/channels/discord)، [مرجع التكوين](/ar/gateway/configuration-reference)، [أوامر الشرطة المائلة](/ar/tools/slash-commands). + الوثائق: [الوكلاء الفرعيون](/ar/tools/subagents)، [Discord](/ar/channels/discord)، [مرجع الإعدادات](/ar/gateway/configuration-reference)، [أوامر الشرطة المائلة](/ar/tools/slash-commands). - - تحقّق أولًا من مسار الطالب الذي تم حله: + + تحقّق أولًا من مسار الطالب الذي تم حسمه: - - يفضّل تسليم الوكيل الفرعي في وضع الإكمال أي سلسلة محادثة أو مسار محادثة مرتبط عندما يكون أحدها موجودًا. - - إذا كان أصل الإكمال يحمل قناة فقط، يعود OpenClaw إلى المسار المخزن لجلسة الطالب (`lastChannel` / `lastTo` / `lastAccountId`) بحيث يظل التسليم المباشر ممكنًا. - - إذا لم يوجد لا مسار مرتبط ولا مسار مخزن قابل للاستخدام، فقد يفشل التسليم المباشر وتعود النتيجة بدلًا من ذلك إلى التسليم عبر الجلسة المدرجة في الطابور بدلًا من النشر الفوري في الدردشة. - - قد تستمر الأهداف غير الصالحة أو القديمة في فرض الرجوع إلى الطابور أو التسبب في فشل التسليم النهائي. - - إذا كان آخر رد مساعد مرئي للوكيل الابن هو الرمز الصامت الدقيق `NO_REPLY` / `no_reply`، أو `ANNOUNCE_SKIP` تمامًا، فإن OpenClaw يتعمد كتم الإعلان بدلًا من نشر تقدم أقدم غير صالح. - - إذا انتهت مهلة الوكيل الابن بعد استدعاءات أدوات فقط، فقد يختزل الإعلان ذلك إلى ملخص قصير للتقدم الجزئي بدلًا من إعادة تشغيل خرج الأدوات الخام. + - يفضّل تسليم الوكيل الفرعي في وضع الإكمال أي محادثة أو مسار محادثة مرتبط عندما يكون أحدهما موجودًا. + - إذا كان أصل الإكمال يحمل قناة فقط، فإن OpenClaw يعود إلى المسار المخزن لجلسة الطالب (`lastChannel` / `lastTo` / `lastAccountId`) بحيث يظل التسليم المباشر ممكنًا. + - إذا لم يوجد مسار مرتبط ولا مسار مخزن صالح للاستخدام، فقد يفشل التسليم المباشر وتعود النتيجة بدلًا من ذلك إلى تسليم الجلسة عبر الطابور بدلًا من النشر الفوري إلى الدردشة. + - يمكن أن تؤدي الأهداف غير الصالحة أو القديمة أيضًا إلى فرض الرجوع إلى الطابور أو فشل التسليم النهائي. + - إذا كان آخر رد مرئي من المساعد للطفل هو الرمز الصامت `NO_REPLY` / `no_reply` بالضبط، أو `ANNOUNCE_SKIP` بالضبط، فإن OpenClaw يتعمد كتم الإعلان بدلًا من نشر تقدم أقدم لم يعد صالحًا. + - إذا انتهت مهلة الطفل بعد مكالمات أدوات فقط، فقد يختزل الإعلان ذلك إلى ملخص قصير للتقدم الجزئي بدلًا من إعادة عرض خرج الأدوات الخام. التصحيح: @@ -1076,14 +1076,14 @@ x-i18n: - - تعمل Cron داخل عملية Gateway. إذا لم تكن Gateway تعمل باستمرار، + + تعمل Cron داخل عملية Gateway. إذا لم يكن Gateway يعمل باستمرار، فلن تعمل الوظائف المجدولة. - قائمة تحقق: + قائمة التحقق: - - أكّد أن Cron مفعلة (`cron.enabled`) وأن `OPENCLAW_SKIP_CRON` غير مضبوط. - - تحقّق من أن Gateway تعمل على مدار الساعة طوال أيام الأسبوع (من دون سكون/إعادة تشغيل). + - أكّد أن Cron مفعّل (`cron.enabled`) وأن `OPENCLAW_SKIP_CRON` غير مضبوط. + - تحقّق من أن Gateway يعمل على مدار الساعة طوال أيام الأسبوع (من دون سكون/إعادة تشغيل). - تحقّق من إعدادات المنطقة الزمنية للوظيفة (`--tz` مقابل المنطقة الزمنية للمضيف). التصحيح: @@ -1098,16 +1098,16 @@ x-i18n: - تحقّق من وضع التسليم أولًا: + تحقّق أولًا من وضع التسليم: - `--no-deliver` / `delivery.mode: "none"` يعني أنه لا يُتوقع وجود رسالة خارجية. - - غياب هدف إعلان (`channel` / `to`) أو عدم صحته يعني أن المشغل تخطّى التسليم الصادر. - - تعني إخفاقات مصادقة القناة (`unauthorized`, `Forbidden`) أن المشغل حاول التسليم لكن بيانات الاعتماد منعته. - - تُعامل النتيجة المعزولة الصامتة (`NO_REPLY` / `no_reply` فقط) على أنها غير قابلة للتسليم عمدًا، لذلك يكتم المشغل أيضًا تسليم الرجوع إلى الطابور. + - غياب هدف إعلان صالح أو وجود هدف غير صالح (`channel` / `to`) يعني أن المشغّل تخطى التسليم الصادر. + - تعني حالات فشل مصادقة القناة (`unauthorized` و`Forbidden`) أن المشغّل حاول التسليم لكن بيانات الاعتماد منعته. + - النتيجة المعزولة الصامتة (`NO_REPLY` / `no_reply` فقط) تُعامل على أنها غير قابلة للتسليم عمدًا، لذلك يكتم المشغّل أيضًا تسليم الرجوع إلى الطابور. - بالنسبة إلى وظائف Cron المعزولة، يملك المشغل التسليم النهائي. ومن المتوقع - أن يعيد الوكيل ملخصًا نصيًا عاديًا لكي يرسله المشغل. يُبقي `--no-deliver` - تلك النتيجة داخلية؛ ولا يسمح للوكيل بالإرسال مباشرةً باستخدام + بالنسبة إلى وظائف Cron المعزولة، فإن المشغّل يملك التسليم النهائي. ويُتوقع من الوكيل + أن يعيد ملخصًا نصيًا عاديًا ليقوم المشغّل بإرساله. إن `--no-deliver` يُبقي + هذه النتيجة داخلية؛ ولا يسمح للوكيل بالإرسال مباشرةً باستخدام أداة الرسائل بدلًا من ذلك. التصحيح: @@ -1124,20 +1124,20 @@ x-i18n: يكون هذا عادةً مسار تبديل النموذج الحي، وليس جدولة مكررة. - يمكن لـ Cron المعزولة حفظ عملية تسليم نموذج وقت التشغيل وإعادة المحاولة عندما - يطرح التشغيل النشط `LiveSessionModelSwitchError`. وتحافظ إعادة المحاولة على - المزوّد/النموذج الذي تم التبديل إليه، وإذا كان التبديل يحمل تجاوزًا جديدًا لملف تعريف المصادقة، - فإن Cron تحفظ ذلك أيضًا قبل إعادة المحاولة. + يمكن لـ Cron المعزولة أن تحتفظ بتحويل نموذج وقت التشغيل وتعيد المحاولة عندما + يرمي التشغيل النشط `LiveSessionModelSwitchError`. وتحتفظ إعادة المحاولة + بالموفّر/النموذج المُبدّل إليه، وإذا كان التبديل يحمل تجاوز ملف مصادقة جديدًا، + فإن Cron تحتفظ به أيضًا قبل إعادة المحاولة. قواعد الاختيار ذات الصلة: - - يتقدم أولًا تجاوز نموذج Gmail hook عند انطباقه. + - يفوز تجاوز نموذج hook في Gmail أولًا عند انطباقه. - ثم `model` لكل وظيفة. - - ثم أي تجاوز مخزن لنموذج جلسة Cron. + - ثم أي تجاوز نموذج مخزن لجلسة Cron. - ثم اختيار النموذج العادي للوكيل/الافتراضي. - حلقة إعادة المحاولة محدودة. فبعد المحاولة الأولية بالإضافة إلى محاولتَي تبديل، - تُجهض Cron بدلًا من التكرار إلى ما لا نهاية. + حلقة إعادة المحاولة محدودة. بعد المحاولة الأولية بالإضافة إلى محاولتي تبديل، + تُجهض Cron بدلًا من الدخول في حلقة لا نهائية. التصحيح: @@ -1146,13 +1146,13 @@ x-i18n: openclaw tasks show ``` - الوثائق: [وظائف Cron](/ar/automation/cron-jobs)، [CLI لـ cron](/cli/cron). + الوثائق: [وظائف Cron](/ar/automation/cron-jobs)، [Cron CLI](/cli/cron). - - استخدم أوامر `openclaw skills` الأصلية أو أسقط Skills داخل مساحة عملك. واجهة Skills على macOS غير متاحة على Linux. - تصفح Skills على [https://clawhub.ai](https://clawhub.ai). + + استخدم أوامر `openclaw skills` الأصلية أو أسقط Skills داخل مساحة العمل. لا تتوفر واجهة Skills الخاصة بـ macOS على Linux. + تصفّح Skills على [https://clawhub.ai](https://clawhub.ai). ```bash openclaw skills search "calendar" @@ -1165,19 +1165,19 @@ x-i18n: openclaw skills check ``` - تكتب عملية `openclaw skills install` الأصلية إلى دليل `skills/` + تقوم عملية التثبيت الأصلية `openclaw skills install` بالكتابة إلى دليل `skills/` في مساحة العمل النشطة. ثبّت CLI المنفصل `clawhub` فقط إذا كنت تريد نشر - Skills الخاصة بك أو مزامنتها. ولعمليات التثبيت المشتركة عبر الوكلاء، ضع Skill تحت + Skills الخاصة بك أو مزامنتها. ولأجل التثبيتات المشتركة عبر الوكلاء، ضع Skill تحت `~/.openclaw/skills` واستخدم `agents.defaults.skills` أو `agents.list[].skills` إذا كنت تريد تضييق نطاق الوكلاء الذين يمكنهم رؤيتها. - - نعم. استخدم المجدول الخاص بـ Gateway: + + نعم. استخدم مجدول Gateway: - **وظائف Cron** للمهام المجدولة أو المتكررة (تستمر عبر إعادة التشغيل). - - **Heartbeat** للفحوصات الدورية الخاصة بـ "الجلسة الرئيسية". + - **Heartbeat** من أجل فحوصات دورية "للجلسة الرئيسية". - **الوظائف المعزولة** للوكلاء المستقلين الذين ينشرون ملخصات أو يسلّمون إلى الدردشات. الوثائق: [وظائف Cron](/ar/automation/cron-jobs)، [الأتمتة والمهام](/ar/automation)، @@ -1185,19 +1185,19 @@ x-i18n: - - ليس مباشرةً. تُقيد Skills الخاصة بـ macOS بواسطة `metadata.openclaw.os` بالإضافة إلى الملفات الثنائية المطلوبة، ولا تظهر Skills في مطالبة النظام إلا عندما تكون مؤهلة على **مضيف Gateway**. وعلى Linux، لن تُحمَّل Skills الخاصة بـ `darwin` فقط (مثل `apple-notes` و`apple-reminders` و`things-mac`) ما لم تتجاوز هذا التقييد. + + ليس مباشرةً. يتم تقييد Skills الخاصة بـ macOS بواسطة `metadata.openclaw.os` بالإضافة إلى الملفات الثنائية المطلوبة، ولا تظهر Skills في مطالبة النظام إلا عندما تكون مؤهلة على **مضيف Gateway**. على Linux، لن تُحمّل Skills الخاصة بـ `darwin` فقط (مثل `apple-notes` و`apple-reminders` و`things-mac`) ما لم تتجاوز هذا التقييد. لديك ثلاثة أنماط مدعومة: **الخيار A - تشغيل Gateway على جهاز Mac (الأبسط).** - شغّل Gateway حيث توجد الملفات الثنائية الخاصة بـ macOS، ثم اتصل من Linux في [الوضع البعيد](#gateway-ports-already-running-and-remote-mode) أو عبر Tailscale. تُحمَّل Skills بشكل طبيعي لأن مضيف Gateway هو macOS. + شغّل Gateway حيث توجد الملفات الثنائية الخاصة بـ macOS، ثم اتصل من Linux في [الوضع البعيد](#gateway-ports-already-running-and-remote-mode) أو عبر Tailscale. تُحمّل Skills بشكل طبيعي لأن مضيف Gateway يعمل بنظام macOS. - **الخيار B - استخدام Node لنظام macOS (من دون SSH).** - شغّل Gateway على Linux، ثم اقترن مع Node لنظام macOS (تطبيق شريط القوائم)، واضبط **Node Run Commands** على "Always Ask" أو "Always Allow" على جهاز Mac. يمكن لـ OpenClaw اعتبار Skills الخاصة بـ macOS فقط مؤهلة عندما تكون الملفات الثنائية المطلوبة موجودة على الـ Node. ويشغّل الوكيل تلك Skills عبر أداة `nodes`. وإذا اخترت "Always Ask"، فإن الموافقة على "Always Allow" في المطالبة تضيف ذلك الأمر إلى قائمة السماح. + **الخيار B - استخدام Node يعمل على macOS (من دون SSH).** + شغّل Gateway على Linux، ثم اقترن مع Node يعمل على macOS (تطبيق شريط القوائم)، واضبط **Node Run Commands** على "Always Ask" أو "Always Allow" على جهاز Mac. يمكن لـ OpenClaw أن يتعامل مع Skills الخاصة بـ macOS فقط على أنها مؤهلة عندما تكون الملفات الثنائية المطلوبة موجودة على Node. ويشغّل الوكيل تلك Skills عبر أداة `nodes`. وإذا اخترت "Always Ask"، فإن الموافقة على "Always Allow" في المطالبة تضيف ذلك الأمر إلى قائمة السماح. **الخيار C - تمرير الملفات الثنائية الخاصة بـ macOS عبر SSH (متقدم).** - أبقِ Gateway على Linux، لكن اجعل الملفات الثنائية CLI المطلوبة تُحل إلى أغلفة SSH تعمل على جهاز Mac. ثم تجاوز Skill للسماح بـ Linux حتى تظل مؤهلة. + أبقِ Gateway على Linux، لكن اجعل الملفات الثنائية المطلوبة في CLI تُحل إلى أغلفة SSH تعمل على جهاز Mac. ثم تجاوز Skill للسماح بـ Linux حتى تظل مؤهلة. 1. أنشئ غلاف SSH للملف الثنائي (مثال: `memo` لـ Apple Notes): @@ -1207,13 +1207,13 @@ x-i18n: exec ssh -T user@mac-host /opt/homebrew/bin/memo "$@" ``` - 2. ضع الغلاف في `PATH` على مضيف Linux (على سبيل المثال `~/bin/memo`). - 3. تجاوز بيانات Skill الوصفية (مساحة العمل أو `~/.openclaw/skills`) للسماح بـ Linux: + 2. ضع الغلاف على `PATH` على مضيف Linux (على سبيل المثال `~/bin/memo`). + 3. تجاوز بيانات Skill الوصفية (في مساحة العمل أو `~/.openclaw/skills`) للسماح بـ Linux: ```markdown --- name: apple-notes - description: إدارة Apple Notes عبر CLI الخاص بـ memo على macOS. + description: إدارة Apple Notes عبر CLI `memo` على macOS. metadata: { "openclaw": { "os": ["darwin", "linux"], "requires": { "bins": ["memo"] } } } --- ``` @@ -1223,54 +1223,54 @@ x-i18n: - ليس مضمّنًا اليوم. + ليس مضمّنًا حاليًا. الخيارات: - - **Skill / Plugin مخصص:** الأفضل للوصول الموثوق إلى API (لكل من Notion وHeyGen واجهات API). - - **أتمتة المتصفح:** تعمل من دون شيفرة لكنها أبطأ وأكثر هشاشة. + - **Skill / Plugin مخصص:** الأفضل للوصول الموثوق إلى API (كل من Notion وHeyGen لديهما APIs). + - **أتمتة المتصفح:** تعمل من دون شيفرة، لكنها أبطأ وأكثر هشاشة. - إذا كنت تريد الاحتفاظ بالسياق لكل عميل (سير عمل الوكالات)، فنمط بسيط هو: + إذا كنت تريد الحفاظ على السياق لكل عميل (سير عمل الوكالة)، فهناك نمط بسيط: - صفحة Notion واحدة لكل عميل (السياق + التفضيلات + العمل النشط). - - اطلب من الوكيل جلب تلك الصفحة في بداية الجلسة. + - اطلب من الوكيل جلب تلك الصفحة عند بداية الجلسة. إذا كنت تريد تكاملًا أصليًا، فافتح طلب ميزة أو ابنِ Skill - تستهدف تلك الواجهات API. + تستهدف تلك APIs. - تثبيت Skills: + ثبّت Skills: ```bash openclaw skills install openclaw skills update --all ``` - تصل عمليات التثبيت الأصلية إلى دليل `skills/` في مساحة العمل النشطة. وبالنسبة إلى Skills المشتركة عبر الوكلاء، ضعها في `~/.openclaw/skills//SKILL.md`. وإذا كان ينبغي أن ترى بعض الوكلاء فقط عملية تثبيت مشتركة، فاضبط `agents.defaults.skills` أو `agents.list[].skills`. وتتوقع بعض Skills وجود ملفات ثنائية مثبتة عبر Homebrew؛ وعلى Linux فهذا يعني Linuxbrew (راجع إدخال الأسئلة الشائعة عن Homebrew Linux أعلاه). راجع [Skills](/ar/tools/skills)، و[تكوين Skills](/ar/tools/skills-config)، و[ClawHub](/ar/tools/clawhub). + تصل عمليات التثبيت الأصلية إلى دليل `skills/` في مساحة العمل النشطة. أما بالنسبة إلى Skills المشتركة عبر الوكلاء، فضعها في `~/.openclaw/skills//SKILL.md`. وإذا كان ينبغي أن ترى بعض الوكلاء فقط التثبيت المشترك، فاضبط `agents.defaults.skills` أو `agents.list[].skills`. وتتوقع بعض Skills وجود ملفات ثنائية مثبتة عبر Homebrew؛ وعلى Linux يعني هذا Linuxbrew (راجع إدخال الأسئلة الشائعة الخاص بـ Homebrew على Linux أعلاه). راجع [Skills](/ar/tools/skills)، و[إعداد Skills](/ar/tools/skills-config)، و[ClawHub](/ar/tools/clawhub). - - استخدم ملف تعريف المتصفح المضمّن `user`، الذي يرتبط عبر Chrome DevTools MCP: + + استخدم ملف Browser الشخصي المضمّن `user`، والذي يرتبط عبر Chrome DevTools MCP: ```bash openclaw browser --browser-profile user tabs openclaw browser --browser-profile user snapshot ``` - وإذا كنت تريد اسمًا مخصصًا، فأنشئ ملف تعريف MCP صريحًا: + إذا كنت تريد اسمًا مخصصًا، فأنشئ ملف MCP صريحًا: ```bash openclaw browser create-profile --name chrome-live --driver existing-session openclaw browser --browser-profile chrome-live tabs ``` - هذا المسار محلي بالنسبة إلى المضيف. وإذا كانت Gateway تعمل في مكان آخر، فإما أن تشغّل مضيف Node على الجهاز الذي يوجد عليه المتصفح أو أن تستخدم CDP عن بُعد بدلًا من ذلك. + يمكن لهذا المسار استخدام متصفح المضيف المحلي أو Browser Node متصل. وإذا كان Gateway يعمل في مكان آخر، فإمّا أن تشغّل مضيف Node على جهاز المتصفح أو تستخدم CDP بعيدًا بدلًا من ذلك. - القيود الحالية على `existing-session` / `user`: + الحدود الحالية لـ `existing-session` / `user`: - - الإجراءات تعتمد على `ref`، وليس على محددات CSS + - الإجراءات تعتمد على المرجع، وليس على محددات CSS - تتطلب عمليات الرفع `ref` / `inputRef` وتدعم حاليًا ملفًا واحدًا في كل مرة - - ما تزال `responsebody` وتصدير PDF واعتراض التنزيلات والإجراءات المجمعة تتطلب متصفحًا مُدارًا أو ملف تعريف CDP خام + - ما تزال `responsebody` وتصدير PDF واعتراض التنزيلات والإجراءات الدفعية تتطلب متصفحًا مُدارًا أو ملف CDP خام @@ -1279,113 +1279,113 @@ x-i18n: - نعم. راجع [العزل](/ar/gateway/sandboxing). ولإعدادات Docker الخاصة (Gateway كاملة داخل Docker أو صور العزل)، راجع [Docker](/ar/install/docker). + نعم. راجع [العزل](/ar/gateway/sandboxing). وللإعداد الخاص بـ Docker (Gateway كامل داخل Docker أو صور العزل)، راجع [Docker](/ar/install/docker). - - الصورة الافتراضية تضع الأمان أولًا وتعمل بصفتها المستخدم `node`، لذلك فهي لا - تتضمن حزم النظام، أو Homebrew، أو المتصفحات المضمّنة. ومن أجل إعداد أكثر اكتمالًا: + + تعتمد الصورة الافتراضية نهج الأمان أولًا وتعمل تحت المستخدم `node`، لذلك فهي لا + تتضمن حزم النظام أو Homebrew أو المتصفحات المضمّنة. وللحصول على إعداد أكثر اكتمالًا: - - اجعل `/home/node` دائمًا باستخدام `OPENCLAW_HOME_VOLUME` حتى تبقى الذاكرات المؤقتة. - - ضمّن تبعيات النظام في الصورة باستخدام `OPENCLAW_DOCKER_APT_PACKAGES`. - - ثبّت متصفحات Playwright عبر CLI المضمّنة: + - اجعل `/home/node` مستمرًا باستخدام `OPENCLAW_HOME_VOLUME` حتى تبقى الذاكرات المؤقتة. + - ضمّن تبعيات النظام داخل الصورة باستخدام `OPENCLAW_DOCKER_APT_PACKAGES`. + - ثبّت متصفحات Playwright عبر CLI المضمّن: `node /app/node_modules/playwright-core/cli.js install chromium` - - اضبط `PLAYWRIGHT_BROWSERS_PATH` وتأكد من أن المسار محفوظ بشكل دائم. + - اضبط `PLAYWRIGHT_BROWSERS_PATH` وتأكد من أن المسار مستمر. - الوثائق: [Docker](/ar/install/docker)، [المتصفح](/ar/tools/browser). + الوثائق: [Docker](/ar/install/docker)، [Browser](/ar/tools/browser). - - نعم - إذا كانت الحركة الخاصة لديك هي **الرسائل الخاصة** وكانت الحركة العامة لديك هي **المجموعات**. + + نعم - إذا كانت حركة المرور الخاصة بك هي **الرسائل المباشرة** وكانت الحركة العامة هي **المجموعات**. - استخدم `agents.defaults.sandbox.mode: "non-main"` بحيث تعمل جلسات المجموعة/القناة (المفاتيح غير الرئيسية) داخل Docker، بينما تبقى جلسة الرسائل الخاصة الرئيسية على المضيف. ثم قيّد الأدوات المتاحة في الجلسات المعزولة عبر `tools.sandbox.tools`. + استخدم `agents.defaults.sandbox.mode: "non-main"` بحيث تعمل جلسات المجموعات/القنوات (المفاتيح غير الرئيسية) داخل Docker، بينما تظل جلسة الرسائل المباشرة الرئيسية على المضيف. ثم قيّد الأدوات المتاحة في الجلسات المعزولة عبر `tools.sandbox.tools`. - شرح الإعداد + مثال التكوين: [المجموعات: رسائل خاصة شخصية + مجموعات عامة](/ar/channels/groups#pattern-personal-dms-public-groups-single-agent) + شرح الإعداد + مثال على الإعدادات: [المجموعات: رسائل مباشرة شخصية + مجموعات عامة](/ar/channels/groups#pattern-personal-dms-public-groups-single-agent) - مرجع التكوين الأساسي: [تكوين Gateway](/ar/gateway/configuration-reference#agentsdefaultssandbox) + مرجع الإعدادات الأساسي: [إعدادات Gateway](/ar/gateway/configuration-reference#agentsdefaultssandbox) - - اضبط `agents.defaults.sandbox.docker.binds` إلى `["host:path:mode"]` (مثل `"/home/user/src:/src:ro"`). تندمج الارتباطات العامة + ارتباطات كل وكيل؛ ويتم تجاهل ارتباطات كل وكيل عندما تكون `scope: "shared"`. استخدم `:ro` لأي شيء حساس وتذكّر أن الارتباطات تتجاوز جدران نظام ملفات sandbox. + + اضبط `agents.defaults.sandbox.docker.binds` على `["host:path:mode"]` (مثل `"/home/user/src:/src:ro"`). يتم دمج الارتباطات العامة وارتباطات كل وكيل؛ ويتم تجاهل ارتباطات كل وكيل عندما تكون `scope: "shared"`. استخدم `:ro` لأي شيء حساس، وتذكر أن الارتباطات تتجاوز جدران نظام ملفات العزل. - يتحقق OpenClaw من مصادر الربط وفقًا لكل من المسار المُطبّع والمسار القانوني الذي يُحل عبر أعمق سلف موجود. وهذا يعني أن محاولات الهروب عبر والد رمزي ما تزال تُغلَق بشكل آمن حتى عندما لا يكون الجزء الأخير من المسار موجودًا بعد، كما أن فحوصات الجذر المسموح به تظل مطبقة بعد حل الروابط الرمزية. + يقوم OpenClaw بالتحقق من مصادر bind مقابل كل من المسار المُطبَّع والمسار القانوني الذي يتم حله عبر أعمق أصل موجود. وهذا يعني أن محاولات الإفلات عبر أصل symlink تظل مغلقة افتراضيًا حتى عندما لا يكون الجزء الأخير من المسار موجودًا بعد، كما أن فحوصات الجذر المسموح به تظل مطبقة بعد حل symlink. - راجع [العزل](/ar/gateway/sandboxing#custom-bind-mounts) و[Sandbox مقابل سياسة الأداة مقابل Elevated](/ar/gateway/sandbox-vs-tool-policy-vs-elevated#bind-mounts-security-quick-check) للاطلاع على أمثلة وملاحظات السلامة. + راجع [العزل](/ar/gateway/sandboxing#custom-bind-mounts) و[العزل مقابل سياسة الأداة مقابل Elevated](/ar/gateway/sandbox-vs-tool-policy-vs-elevated#bind-mounts-security-quick-check) للاطلاع على أمثلة وملاحظات الأمان. - ذاكرة OpenClaw هي مجرد ملفات Markdown داخل مساحة عمل الوكيل: + ذاكرة OpenClaw هي ببساطة ملفات Markdown في مساحة عمل الوكيل: - ملاحظات يومية في `memory/YYYY-MM-DD.md` - ملاحظات منسقة طويلة الأمد في `MEMORY.md` (للجلسات الرئيسية/الخاصة فقط) - يشغّل OpenClaw أيضًا **تفريغًا صامتًا للذاكرة قبل Compaction** لتذكير النموذج + كما يشغّل OpenClaw **تفريغًا صامتًا للذاكرة قبل Compaction** لتذكير النموذج بكتابة ملاحظات دائمة قبل Compaction التلقائي. ولا يعمل هذا إلا عندما تكون مساحة العمل - قابلة للكتابة (تتخطاه بيئات sandbox للقراءة فقط). راجع [الذاكرة](/ar/concepts/memory). + قابلة للكتابة (أما البيئات المعزولة للقراءة فقط فتتخطاه). راجع [الذاكرة](/ar/concepts/memory). - - اطلب من الروبوت **أن يكتب الحقيقة في الذاكرة**. تنتمي الملاحظات طويلة الأمد إلى `MEMORY.md`، + + اطلب من الروبوت **كتابة الحقيقة في الذاكرة**. يجب أن تذهب الملاحظات طويلة الأمد إلى `MEMORY.md`، بينما يذهب السياق قصير الأمد إلى `memory/YYYY-MM-DD.md`. ما يزال هذا مجالًا نعمل على تحسينه. ومن المفيد تذكير النموذج بتخزين الذكريات؛ - فهو سيعرف ما يجب فعله. وإذا استمر في النسيان، فتحقق من أن Gateway تستخدم - مساحة العمل نفسها في كل تشغيل. + فهو سيعرف ما الذي يجب فعله. وإذا استمر في النسيان، فتحقق من أن Gateway يستخدم مساحة العمل نفسها + في كل تشغيل. الوثائق: [الذاكرة](/ar/concepts/memory)، [مساحة عمل الوكيل](/ar/concepts/agent-workspace). - تعيش ملفات الذاكرة على القرص وتستمر حتى تحذفها. الحد هنا هو - التخزين لديك، وليس النموذج. أما **سياق الجلسة** فما يزال محدودًا بنافذة سياق - النموذج، لذلك قد تخضع المحادثات الطويلة إلى Compaction أو الاقتطاع. ولهذا السبب - يوجد البحث في الذاكرة - إذ يعيد فقط الأجزاء ذات الصلة إلى السياق. + تعيش ملفات الذاكرة على القرص وتستمر إلى أن تحذفها. والحد هنا هو + مساحة التخزين لديك، وليس النموذج. أما **سياق الجلسة** فلا يزال محدودًا بنافذة سياق + النموذج، لذلك قد يتم ضغط المحادثات الطويلة أو اقتطاعها. ولهذا السبب + يوجد البحث في الذاكرة - فهو يعيد فقط الأجزاء ذات الصلة إلى السياق. الوثائق: [الذاكرة](/ar/concepts/memory)، [السياق](/ar/concepts/context). - فقط إذا كنت تستخدم **OpenAI embeddings**. تغطي مصادقة Codex OAuth الدردشة/الإكمالات - ولا **تمنح** وصولًا إلى embeddings، لذلك فإن **تسجيل الدخول باستخدام Codex (OAuth أو - تسجيل دخول Codex CLI)** لا يساعد في البحث الدلالي في الذاكرة. وما تزال embeddings الخاصة بـ OpenAI + فقط إذا كنت تستخدم **تضمينات OpenAI**. تغطي Codex OAuth الدردشة/الإكمالات و + **لا** تمنح وصولًا إلى التضمينات، لذا فإن **تسجيل الدخول باستخدام Codex (OAuth أو + تسجيل دخول Codex CLI)** لا يساعد في البحث الدلالي في الذاكرة. ولا تزال تضمينات OpenAI تحتاج إلى مفتاح API حقيقي (`OPENAI_API_KEY` أو `models.providers.openai.apiKey`). - إذا لم تضبط مزودًا صراحةً، فإن OpenClaw يختار مزودًا تلقائيًا عندما - يتمكن من حل مفتاح API (ملفات تعريف المصادقة، أو `models.providers.*.apiKey`، أو متغيرات البيئة). + إذا لم تضبط موفّرًا صراحةً، فسيختار OpenClaw موفّرًا تلقائيًا عندما + يتمكن من حل مفتاح API (ملفات المصادقة، أو `models.providers.*.apiKey`، أو متغيرات البيئة). وهو يفضّل OpenAI إذا أمكن حل مفتاح OpenAI، وإلا Gemini إذا أمكن حل مفتاح Gemini، - ثم Voyage، ثم Mistral. وإذا لم يكن أي مفتاح بعيد متاحًا، فإن البحث في الذاكرة - يبقى معطلًا حتى تقوم بتكوينه. وإذا كان لديك مسار نموذج محلي + ثم Voyage، ثم Mistral. وإذا لم يكن أي مفتاح بعيد متاحًا، فسيظل البحث في + الذاكرة معطّلًا حتى تقوم بتكوينه. وإذا كان لديك مسار نموذج محلي مضبوط وموجود، فإن OpenClaw - يفضّل `local`. ويدعم Ollama عندما تضبط صراحةً + يفضّل `local`. كما أن Ollama مدعوم عندما تضبط صراحةً `memorySearch.provider = "ollama"`. - وإذا كنت تفضّل البقاء محليًا، فاضبط `memorySearch.provider = "local"` (واختياريًا - `memorySearch.fallback = "none"`). وإذا كنت تريد Gemini embeddings، فاضبط + إذا كنت تفضّل البقاء محليًا، فاضبط `memorySearch.provider = "local"` (واختياريًا + `memorySearch.fallback = "none"`). وإذا كنت تريد تضمينات Gemini، فاضبط `memorySearch.provider = "gemini"` ووفّر `GEMINI_API_KEY` (أو - `memorySearch.remote.apiKey`). نحن ندعم نماذج embedding الخاصة بـ **OpenAI وGemini وVoyage وMistral وOllama أو local** - - راجع [الذاكرة](/ar/concepts/memory) لتفاصيل الإعداد. + `memorySearch.remote.apiKey`). نحن ندعم نماذج التضمين من **OpenAI وGemini وVoyage وMistral وOllama أو local** + - راجع [الذاكرة](/ar/concepts/memory) للحصول على تفاصيل الإعداد. -## أين توجد الأشياء على القرص +## مكان وجود الأشياء على القرص لا - **حالة OpenClaw محلية**، لكن **الخدمات الخارجية ما تزال ترى ما ترسله إليها**. - - **محلي افتراضيًا:** تعيش الجلسات، وملفات الذاكرة، والتكوين، ومساحة العمل على مضيف Gateway + - **محلي افتراضيًا:** تعيش الجلسات وملفات الذاكرة والإعدادات ومساحة العمل على مضيف Gateway (`~/.openclaw` + دليل مساحة العمل لديك). - - **بعيد بحكم الضرورة:** تُرسَل الرسائل التي ترسلها إلى مزودي النماذج (Anthropic/OpenAI/إلخ) إلى - واجهات API الخاصة بهم، كما تخزن منصات الدردشة (WhatsApp/Telegram/Slack/إلخ) بيانات الرسائل على + - **بعيد بالضرورة:** الرسائل التي ترسلها إلى موفري النماذج (Anthropic/OpenAI/إلخ) تذهب إلى + APIs الخاصة بهم، كما أن منصات الدردشة (WhatsApp/Telegram/Slack/إلخ) تخزن بيانات الرسائل على خوادمها. - - **أنت تتحكم في النطاق:** يؤدي استخدام النماذج المحلية إلى إبقاء المطالبات على جهازك، لكن + - **أنت تتحكم في الأثر:** يؤدي استخدام النماذج المحلية إلى إبقاء المطالبات على جهازك، لكن حركة القنوات ما تزال تمر عبر خوادم القناة. ذو صلة: [مساحة عمل الوكيل](/ar/concepts/agent-workspace)، [الذاكرة](/ar/concepts/memory). @@ -1395,21 +1395,21 @@ x-i18n: كل شيء يعيش تحت `$OPENCLAW_STATE_DIR` (الافتراضي: `~/.openclaw`): - | المسار | الغرض | + | المسار | الغرض | | --------------------------------------------------------------- | ------------------------------------------------------------------ | - | `$OPENCLAW_STATE_DIR/openclaw.json` | التكوين الرئيسي (JSON5) | - | `$OPENCLAW_STATE_DIR/credentials/oauth.json` | استيراد OAuth القديم (يُنسخ إلى ملفات تعريف المصادقة عند أول استخدام) | - | `$OPENCLAW_STATE_DIR/agents//agent/auth-profiles.json` | ملفات تعريف المصادقة (OAuth، ومفاتيح API، و`keyRef`/`tokenRef` الاختيارية) | - | `$OPENCLAW_STATE_DIR/secrets.json` | حمولة سرية اختيارية مدعومة بملف لمزوّدي `file` من SecretRef | - | `$OPENCLAW_STATE_DIR/agents//agent/auth.json` | ملف توافق قديم (تُنظف منه إدخالات `api_key` الثابتة) | - | `$OPENCLAW_STATE_DIR/credentials/` | حالة المزوّد (مثل `whatsapp//creds.json`) | - | `$OPENCLAW_STATE_DIR/agents/` | حالة كل وكيل (agentDir + sessions) | - | `$OPENCLAW_STATE_DIR/agents//sessions/` | سجل المحادثات والحالة (لكل وكيل) | - | `$OPENCLAW_STATE_DIR/agents//sessions/sessions.json` | بيانات الجلسات الوصفية (لكل وكيل) | + | `$OPENCLAW_STATE_DIR/openclaw.json` | الإعداد الرئيسي (JSON5) | + | `$OPENCLAW_STATE_DIR/credentials/oauth.json` | استيراد OAuth قديم (يُنسخ إلى ملفات المصادقة عند أول استخدام) | + | `$OPENCLAW_STATE_DIR/agents//agent/auth-profiles.json` | ملفات المصادقة (OAuth، ومفاتيح API، و`keyRef`/`tokenRef` الاختياريان) | + | `$OPENCLAW_STATE_DIR/secrets.json` | حمولة سرية اختيارية معتمدة على الملف لموفري `file` في SecretRef | + | `$OPENCLAW_STATE_DIR/agents//agent/auth.json` | ملف توافق قديم (تُزال منه إدخالات `api_key` الثابتة) | + | `$OPENCLAW_STATE_DIR/credentials/` | حالة الموفّر (مثل `whatsapp//creds.json`) | + | `$OPENCLAW_STATE_DIR/agents/` | حالة كل وكيل (agentDir + الجلسات) | + | `$OPENCLAW_STATE_DIR/agents//sessions/` | سجل المحادثات والحالة (لكل وكيل) | + | `$OPENCLAW_STATE_DIR/agents//sessions/sessions.json` | بيانات الجلسة الوصفية (لكل وكيل) | المسار القديم لوكيل واحد: `~/.openclaw/agent/*` (يُرحَّل بواسطة `openclaw doctor`). - أما **مساحة العمل** الخاصة بك (`AGENTS.md`، وملفات الذاكرة، وSkills، وغيرها) فهي منفصلة ويجري تكوينها عبر `agents.defaults.workspace` (الافتراضي: `~/.openclaw/workspace`). + أما **مساحة العمل** لديك (`AGENTS.md` وملفات الذاكرة وSkills وما إلى ذلك) فهي منفصلة ويجري تكوينها عبر `agents.defaults.workspace` (الافتراضي: `~/.openclaw/workspace`). @@ -1417,12 +1417,12 @@ x-i18n: تعيش هذه الملفات في **مساحة عمل الوكيل**، وليس في `~/.openclaw`. - **مساحة العمل (لكل وكيل)**: `AGENTS.md` و`SOUL.md` و`IDENTITY.md` و`USER.md`، - و`MEMORY.md` (أو المسار الاحتياطي القديم `memory.md` عند غياب `MEMORY.md`)، - و`memory/YYYY-MM-DD.md`، و`HEARTBEAT.md` الاختياري. - - **دليل الحالة (`~/.openclaw`)**: التكوين، وحالة القناة/المزوّد، وملفات تعريف المصادقة، والجلسات، والسجلات، + و`MEMORY.md` (أو المسار القديم الاحتياطي `memory.md` عندما لا يكون `MEMORY.md` موجودًا)، + و`memory/YYYY-MM-DD.md`، و`HEARTBEAT.md` اختياري. + - **دليل الحالة (`~/.openclaw`)**: الإعدادات، وحالة القناة/الموفّر، وملفات المصادقة، والجلسات، والسجلات، وSkills المشتركة (`~/.openclaw/skills`). - مساحة العمل الافتراضية هي `~/.openclaw/workspace`، ويمكن تكوينها عبر: + مساحة العمل الافتراضية هي `~/.openclaw/workspace`، ويمكن ضبطها عبر: ```json5 { @@ -1430,9 +1430,9 @@ x-i18n: } ``` - إذا كان الروبوت "ينسى" بعد إعادة التشغيل، فتأكد من أن Gateway تستخدم - مساحة العمل نفسها في كل تشغيل (وتذكر: يستخدم الوضع البعيد **مساحة عمل مضيف Gateway**، - وليس حاسوبك المحمول المحلي). + إذا كان الروبوت "ينسى" بعد إعادة التشغيل، فتأكد من أن Gateway يستخدم نفس + مساحة العمل في كل تشغيل (وتذكّر: يستخدم الوضع البعيد مساحة عمل **مضيف Gateway** + وليس مساحة عمل حاسوبك المحمول المحلي). نصيحة: إذا كنت تريد سلوكًا أو تفضيلًا دائمًا، فاطلب من الروبوت **كتابته في AGENTS.md أو MEMORY.md** بدلًا من الاعتماد على سجل الدردشة. @@ -1442,32 +1442,32 @@ x-i18n: - ضع **مساحة عمل الوكيل** الخاصة بك في مستودع git **خاص** وخذ نسخة احتياطية منها في مكان - خاص (مثل GitHub الخاص). يلتقط هذا الذاكرة + ملفات AGENTS/SOUL/USER - ويسمح لك باستعادة "عقل" المساعد لاحقًا. + ضع **مساحة عمل الوكيل** في مستودع git **خاص** واحتفظ بنسخة احتياطية منها في مكان + خاص (مثل GitHub الخاص). فهذا يلتقط ملفات الذاكرة وAGENTS/SOUL/USER + ويتيح لك استعادة "عقل" المساعد لاحقًا. - **لا** تُدرج أي شيء تحت `~/.openclaw` في الالتزامات (بيانات الاعتماد، أو الجلسات، أو الرموز المميزة، أو الحمولات السرية المشفرة). - وإذا كنت تحتاج إلى استعادة كاملة، فخذ نسخة احتياطية من كل من مساحة العمل ودليل الحالة - بشكل منفصل (راجع سؤال الترحيل أعلاه). + **لا** تُجرِ commit لأي شيء تحت `~/.openclaw` (بيانات الاعتماد، أو الجلسات، أو الرموز المميزة، أو الحمولات السرية المشفرة). + وإذا كنت تحتاج إلى استعادة كاملة، فانسخ مساحة العمل ودليل الحالة + احتياطيًا بشكل منفصل (راجع سؤال الترحيل أعلاه). الوثائق: [مساحة عمل الوكيل](/ar/concepts/agent-workspace). - راجع الدليل المخصص: [إزالة التثبيت](/ar/install/uninstall). + راجع الدليل المخصص: [إلغاء التثبيت](/ar/install/uninstall). - نعم. مساحة العمل هي **cwd الافتراضي** ومرساة الذاكرة، وليست sandbox صلبة. + نعم. إن مساحة العمل هي **cwd الافتراضي** ومرساة الذاكرة، وليست عزلًا صارمًا. تُحل المسارات النسبية داخل مساحة العمل، لكن يمكن للمسارات المطلقة الوصول إلى - مواقع أخرى على المضيف ما لم يكن العزل مفعّلًا. وإذا كنت تحتاج إلى عزل، فاستخدم - [`agents.defaults.sandbox`](/ar/gateway/sandboxing) أو إعدادات sandbox لكل وكيل. وإذا كنت - تريد أن يكون المستودع هو دليل العمل الافتراضي، فوجه `workspace` - الخاص بذلك الوكيل إلى جذر المستودع. ومستودع OpenClaw ليس سوى شيفرة مصدرية؛ أبقِ - مساحة العمل منفصلة ما لم تكن تريد عمدًا أن يعمل الوكيل داخلها. + مواقع أخرى على المضيف ما لم يكن العزل مفعّلًا. وإذا كنت بحاجة إلى عزل، فاستخدم + [`agents.defaults.sandbox`](/ar/gateway/sandboxing) أو إعدادات العزل لكل وكيل. وإذا كنت + تريد أن يكون المستودع هو دليل العمل الافتراضي، فوجّه + `workspace` لذلك الوكيل إلى جذر المستودع. إن مستودع OpenClaw هو مجرد + شيفرة مصدرية؛ لذا أبقِ مساحة العمل منفصلة ما لم تكن تريد عمدًا أن يعمل الوكيل بداخله. - مثال (المستودع باعتباره cwd الافتراضي): + مثال (المستودع كـ cwd افتراضي): ```json5 { @@ -1486,25 +1486,25 @@ x-i18n: -## أساسيات التكوين +## أساسيات الإعدادات - - يقرأ OpenClaw تكوين **JSON5** اختياريًا من `$OPENCLAW_CONFIG_PATH` (الافتراضي: `~/.openclaw/openclaw.json`): + + يقرأ OpenClaw ملف إعدادات اختياريًا بصيغة **JSON5** من `$OPENCLAW_CONFIG_PATH` (الافتراضي: `~/.openclaw/openclaw.json`): ``` $OPENCLAW_CONFIG_PATH ``` - إذا كان الملف مفقودًا، فإنه يستخدم إعدادات افتراضية آمنة إلى حد ما (بما في ذلك مساحة عمل افتراضية هي `~/.openclaw/workspace`). + وإذا كان الملف مفقودًا، فإنه يستخدم إعدادات افتراضية آمنة إلى حد ما (بما في ذلك مساحة عمل افتراضية هي `~/.openclaw/workspace`). - - تتطلب عمليات الربط غير loopback **مسار مصادقة صالحًا لـ Gateway**. وعمليًا يعني ذلك: + + تتطلب أوضاع الربط غير loopback **مسار مصادقة صالح لـ Gateway**. وعمليًا يعني ذلك: - مصادقة shared-secret: رمز مميز أو كلمة مرور - - `gateway.auth.mode: "trusted-proxy"` خلف وكيل عكسي مدرك للهوية غير loopback ومكوّن على نحو صحيح + - `gateway.auth.mode: "trusted-proxy"` خلف وكيل عكسي مدرك للهوية ومكوَّن بشكل صحيح وغير مربوط بـ loopback ```json5 { @@ -1520,32 +1520,32 @@ x-i18n: ملاحظات: - - لا يقوم `gateway.remote.token` / `.password` **بمفردهما** بتمكين مصادقة Gateway المحلية. - - يمكن لمسارات الاستدعاء المحلية استخدام `gateway.remote.*` كاحتياطي فقط عندما لا يكون `gateway.auth.*` مضبوطًا. + - لا يؤدي `gateway.remote.token` / `.password` إلى تمكين مصادقة Gateway المحلية بمفردهما. + - يمكن لمسارات الاستدعاء المحلية استخدام `gateway.remote.*` كخيار احتياطي فقط عندما لا يكون `gateway.auth.*` مضبوطًا. - بالنسبة إلى مصادقة كلمة المرور، اضبط `gateway.auth.mode: "password"` مع `gateway.auth.password` (أو `OPENCLAW_GATEWAY_PASSWORD`) بدلًا من ذلك. - - إذا جرى تكوين `gateway.auth.token` / `gateway.auth.password` صراحةً عبر SecretRef وتعذر حله، فإن الحل يفشل بشكل مغلق (من دون تمويه احتياطي بعيد). - - تُصادق إعدادات shared-secret الخاصة بـ Control UI عبر `connect.params.auth.token` أو `connect.params.auth.password` (المخزَّنين في إعدادات التطبيق/واجهة المستخدم). أما الأوضاع الحاملة للهوية مثل Tailscale Serve أو `trusted-proxy` فتستخدم ترويسات الطلب بدلًا من ذلك. تجنب وضع shared secrets داخل عناوين URL. - - مع `gateway.auth.mode: "trusted-proxy"`، فإن الوكلاء العكسيين loopback على المضيف نفسه **لا** يلبون مصادقة trusted-proxy. يجب أن يكون trusted proxy مصدرًا غير loopback ومكوّنًا. + - إذا تم تكوين `gateway.auth.token` / `gateway.auth.password` صراحةً عبر SecretRef وتعذر حلهما، فإن الحل يفشل بشكل مغلق افتراضيًا (من دون إخفاء احتياطي بعيد). + - تُجري إعدادات shared-secret في Control UI المصادقة عبر `connect.params.auth.token` أو `connect.params.auth.password` (المخزَّنين في إعدادات التطبيق/واجهة المستخدم). أما الأوضاع المعتمدة على الهوية مثل Tailscale Serve أو `trusted-proxy` فتستخدم رؤوس الطلبات بدلًا من ذلك. تجنب وضع shared secrets داخل عناوين URL. + - مع `gateway.auth.mode: "trusted-proxy"`، فإن الوكلاء العكسية على المضيف نفسه والمربوطة بـ loopback ما تزال **لا** تفي بمصادقة trusted-proxy. يجب أن يكون trusted proxy مصدرًا غير loopback ومكوَّنًا. - - يفرض OpenClaw مصادقة Gateway افتراضيًا، بما في ذلك loopback. وفي المسار الافتراضي المعتاد، يعني ذلك مصادقة الرمز المميز: إذا لم يُكوَّن مسار مصادقة صريح، فإن بدء تشغيل Gateway يحل إلى وضع الرمز المميز ويولّد واحدًا تلقائيًا، ويحفظه في `gateway.auth.token`، لذلك **يجب على عملاء WS المحليين المصادقة**. وهذا يمنع العمليات المحلية الأخرى من استدعاء Gateway. + + يفرض OpenClaw مصادقة Gateway افتراضيًا، بما في ذلك loopback. وفي المسار الافتراضي المعتاد، يعني ذلك مصادقة الرمز المميز: فإذا لم يتم تكوين مسار مصادقة صريح، فإن بدء تشغيل Gateway يحل إلى وضع الرمز المميز ويولّد واحدًا تلقائيًا ويحفظه في `gateway.auth.token`، لذلك **يجب على عملاء WS المحليين إجراء المصادقة**. وهذا يمنع العمليات المحلية الأخرى من استدعاء Gateway. - وإذا كنت تفضّل مسار مصادقة مختلفًا، فيمكنك اختيار وضع كلمة المرور صراحةً (أو `trusted-proxy` بالنسبة إلى الوكلاء العكسية غير loopback والمدركة للهوية). وإذا كنت **حقًا** تريد loopback مفتوحة، فاضبط `gateway.auth.mode: "none"` صراحةً في التكوين. ويمكن لـ Doctor إنشاء رمز مميز لك في أي وقت: `openclaw doctor --generate-gateway-token`. + إذا كنت تفضّل مسار مصادقة مختلفًا، فيمكنك اختيار وضع كلمة المرور صراحةً (أو `trusted-proxy` للوكلاء العكسية غير loopback والمدركة للهوية). وإذا كنت **حقًا** تريد loopback مفتوحًا، فاضبط `gateway.auth.mode: "none"` صراحةً في إعداداتك. ويمكن لـ Doctor أن يولّد رمزًا مميزًا لك في أي وقت: `openclaw doctor --generate-gateway-token`. - - تراقب Gateway التكوين وتدعم إعادة التحميل السريع: + + يراقب Gateway الإعدادات ويدعم إعادة التحميل السريع: - - `gateway.reload.mode: "hybrid"` (الافتراضي): تطبيق التغييرات الآمنة فورًا، وإعادة التشغيل للتغييرات الحرجة - - كما أن `hot` و`restart` و`off` مدعومة أيضًا + - `gateway.reload.mode: "hybrid"` (الافتراضي): يطبّق التغييرات الآمنة فورًا، ويعيد التشغيل للتغييرات الحرجة + - كما أن الأوضاع `hot` و`restart` و`off` مدعومة أيضًا - اضبط `cli.banner.taglineMode` في التكوين: + اضبط `cli.banner.taglineMode` في الإعدادات: ```json5 { @@ -1557,23 +1557,23 @@ x-i18n: } ``` - - `off`: يُخفي نص العبارة التعريفية لكنه يُبقي سطر عنوان الشعار/الإصدار. + - `off`: يخفي نص العبارة التعريفية لكنه يُبقي سطر عنوان الشعار/الإصدار. - `default`: يستخدم `All your chats, one OpenClaw.` في كل مرة. - `random`: عبارات تعريفية طريفة/موسمية متناوبة (السلوك الافتراضي). - إذا كنت لا تريد أي شعار إطلاقًا، فاضبط متغير البيئة `OPENCLAW_HIDE_BANNER=1`. - + يعمل `web_fetch` من دون مفتاح API. أما `web_search` فيعتمد على - المزوّد الذي اخترته: + الموفّر الذي اخترته: - - يتطلب المزوّدون المدعومون بواجهات API مثل Brave وExa وFirecrawl وGemini وGrok وKimi وMiniMax Search وPerplexity وTavily إعداد مفتاح API المعتاد لديهم. - - لا يحتاج Ollama Web Search إلى مفتاح، لكنه يستخدم مضيف Ollama المكوّن لديك ويتطلب `ollama signin`. + - يتطلب الموفّرون المعتمدون على API مثل Brave وExa وFirecrawl وGemini وGrok وKimi وMiniMax Search وPerplexity وTavily إعداد مفتاح API المعتاد. + - لا يحتاج Ollama Web Search إلى مفتاح، لكنه يستخدم مضيف Ollama الذي قمت بتكوينه ويتطلب `ollama signin`. - لا يحتاج DuckDuckGo إلى مفتاح، لكنه تكامل غير رسمي قائم على HTML. - - SearXNG مجاني الاستعمال/مستضاف ذاتيًا؛ اضبط `SEARXNG_BASE_URL` أو `plugins.entries.searxng.config.webSearch.baseUrl`. + - SearXNG لا يحتاج إلى مفتاح/ويمكن استضافته ذاتيًا؛ اضبط `SEARXNG_BASE_URL` أو `plugins.entries.searxng.config.webSearch.baseUrl`. - **الموصى به:** شغّل `openclaw configure --section web` واختر مزودًا. + **الموصى به:** شغّل `openclaw configure --section web` واختر موفّرًا. بدائل متغيرات البيئة: - Brave: `BRAVE_API_KEY` @@ -1616,59 +1616,59 @@ x-i18n: } ``` - يوجد الآن التكوين الخاص بالبحث في الويب لكل مزود تحت `plugins.entries..config.webSearch.*`. - وما تزال مسارات المزوّد القديمة `tools.web.search.*` تُحمَّل مؤقتًا من أجل التوافق، لكن لا ينبغي استخدامها في التكوينات الجديدة. - يوجد تكوين الرجوع الاحتياطي الخاص بجلب الويب لـ Firecrawl تحت `plugins.entries.firecrawl.config.webFetch.*`. + أصبح إعداد البحث في الويب الخاص بكل موفّر موجودًا الآن تحت `plugins.entries..config.webSearch.*`. + وما تزال مسارات الموفّر القديمة `tools.web.search.*` تُحمَّل مؤقتًا من أجل التوافق، لكن لا ينبغي استخدامها في الإعدادات الجديدة. + يوجد إعداد الرجوع إلى Firecrawl لجلب الويب تحت `plugins.entries.firecrawl.config.webFetch.*`. ملاحظات: - إذا كنت تستخدم قوائم السماح، فأضف `web_search`/`web_fetch`/`x_search` أو `group:web`. - - يكون `web_fetch` مفعّلًا افتراضيًا (ما لم يُعطّل صراحةً). - - إذا تم حذف `tools.web.fetch.provider`، يكتشف OpenClaw تلقائيًا أول مزود رجوع احتياطي جاهز للجلب من بيانات الاعتماد المتاحة. والمزوّد المضمّن اليوم هو Firecrawl. - - تقرأ العمليات الخدمية متغيرات البيئة من `~/.openclaw/.env` (أو من بيئة الخدمة). + - يكون `web_fetch` مفعّلًا افتراضيًا (ما لم يتم تعطيله صراحةً). + - إذا لم يتم تحديد `tools.web.fetch.provider`، فإن OpenClaw يكتشف تلقائيًا أول موفّر رجوع جاهز للجلب من بيانات الاعتماد المتاحة. والموفّر المضمّن اليوم هو Firecrawl. + - تقرأ العمليات الخلفية متغيرات البيئة من `~/.openclaw/.env` (أو من بيئة الخدمة). الوثائق: [أدوات الويب](/ar/tools/web). - - يستبدل `config.apply` **التكوين بالكامل**. وإذا أرسلت كائنًا جزئيًا، فسيُزال - كل شيء آخر. + + يستبدل `config.apply` **الإعدادات بالكامل**. وإذا أرسلت كائنًا جزئيًا، فسيُزال كل شيء + آخر. الاستعادة: - - استعده من نسخة احتياطية (git أو نسخة من `~/.openclaw/openclaw.json`). - - إذا لم تكن لديك نسخة احتياطية، فأعد تشغيل `openclaw doctor` ثم أعد تكوين القنوات/النماذج. - - إذا كان هذا غير متوقع، فافتح بلاغ خلل وضمّن آخر تكوين معروف لديك أو أي نسخة احتياطية. - - يمكن لوكيل برمجة محلي في كثير من الأحيان إعادة بناء تكوين عامل من السجلات أو السجل السابق. + - استعدها من نسخة احتياطية (git أو نسخة من `~/.openclaw/openclaw.json`). + - إذا لم تكن لديك نسخة احتياطية، فأعد تشغيل `openclaw doctor` وأعد تكوين القنوات/النماذج. + - إذا كان هذا غير متوقع، فافتح بلاغ خطأ وأدرج آخر إعدادات معروفة لديك أو أي نسخة احتياطية. + - يمكن لوكيل برمجي محلي في كثير من الأحيان إعادة بناء إعدادات عاملة من السجلات أو السجل. - لتجنب ذلك: + تجنّبه: - استخدم `openclaw config set` للتغييرات الصغيرة. - استخدم `openclaw configure` للتعديلات التفاعلية. - استخدم `config.schema.lookup` أولًا عندما لا تكون متأكدًا من المسار الدقيق أو شكل الحقل؛ فهو يعيد عقدة مخطط سطحية بالإضافة إلى ملخصات الأبناء المباشرين للتعمق. - - استخدم `config.patch` لتعديلات RPC الجزئية؛ وأبقِ `config.apply` لاستبدال التكوين الكامل فقط. - - إذا كنت تستخدم أداة `gateway` المخصصة للمالك فقط من تشغيل وكيل، فستظل ترفض الكتابة إلى `tools.exec.ask` / `tools.exec.security` (بما في ذلك الأسماء المستعارة القديمة `tools.bash.*` التي تُطبّع إلى مسارات exec المحمية نفسها). + - استخدم `config.patch` لتعديلات RPC الجزئية؛ وأبقِ `config.apply` لاستبدال الإعدادات الكاملة فقط. + - إذا كنت تستخدم أداة `gateway` المخصصة للمالك فقط من تشغيل وكيل، فستظل ترفض الكتابة إلى `tools.exec.ask` / `tools.exec.security` (بما في ذلك الأسماء المستعارة القديمة `tools.bash.*` التي تُطبَّع إلى مسارات exec المحمية نفسها). - الوثائق: [التكوين](/cli/config)، [التهيئة](/cli/configure)، [Doctor](/ar/gateway/doctor). + الوثائق: [الإعدادات](/cli/config)، [Configure](/cli/configure)، [Doctor](/ar/gateway/doctor). - - النمط الشائع هو **Gateway واحدة** (مثل Raspberry Pi) بالإضافة إلى **Nodes** و**وكلاء**: + + النمط الشائع هو **Gateway واحد** (مثل Raspberry Pi) بالإضافة إلى **Nodes** و**وكلاء**: - - **Gateway (مركزية):** تملك القنوات (Signal/WhatsApp)، والتوجيه، والجلسات. - - **Nodes (الأجهزة):** تتصل أجهزة Mac/iOS/Android كملحقات وتكشف الأدوات المحلية (`system.run` و`canvas` و`camera`). - - **الوكلاء (العمال):** عقول/مساحات عمل منفصلة لأدوار خاصة (مثل "عمليات Hetzner" و"البيانات الشخصية"). - - **الوكلاء الفرعيون:** ينشئون عملًا في الخلفية من وكيل رئيسي عندما تريد العمل المتوازي. - - **TUI:** يتصل بـ Gateway ويبدّل بين الوكلاء/الجلسات. + - **Gateway (مركزي):** يملك القنوات (Signal/WhatsApp)، والتوجيه، والجلسات. + - **Nodes (الأجهزة):** تتصل أجهزة Mac/iOS/Android كأجهزة طرفية وتكشف الأدوات المحلية (`system.run` و`canvas` و`camera`). + - **Agents (العمال):** عقول/مساحات عمل منفصلة لأدوار متخصصة (مثل "عمليات Hetzner" أو "البيانات الشخصية"). + - **الوكلاء الفرعيون:** شغّل عملاً في الخلفية من وكيل رئيسي عندما تريد التوازي. + - **TUI:** اتصل بـ Gateway وبدّل بين الوكلاء/الجلسات. - الوثائق: [Nodes](/ar/nodes)، [الوصول عن بُعد](/ar/gateway/remote)، [التوجيه متعدد الوكلاء](/ar/concepts/multi-agent)، [الوكلاء الفرعيون](/ar/tools/subagents)، [TUI](/web/tui). + الوثائق: [Nodes](/ar/nodes)، [الوصول البعيد](/ar/gateway/remote)، [التوجيه متعدد الوكلاء](/ar/concepts/multi-agent)، [الوكلاء الفرعيون](/ar/tools/subagents)، [TUI](/web/tui). - نعم. هذا خيار تكوين: + نعم. إنه خيار ضمن الإعدادات: ```json5 { @@ -1681,19 +1681,19 @@ x-i18n: } ``` - القيمة الافتراضية هي `false` (مع واجهة مرئية). ويكون وضع headless أكثر عرضة لتفعيل فحوصات مكافحة الروبوتات في بعض المواقع. راجع [المتصفح](/ar/tools/browser). + القيمة الافتراضية هي `false` (مع واجهة مرئية). ومن المرجح أكثر أن يثير وضع headless فحوصات مكافحة الروبوت في بعض المواقع. راجع [Browser](/ar/tools/browser). - يستخدم وضع headless **محرك Chromium نفسه** ويعمل مع معظم الأتمتة (النماذج، والنقرات، والكشط، وتسجيلات الدخول). الفروق الرئيسية: + يستخدم وضع headless **محرك Chromium نفسه** ويعمل مع معظم عمليات الأتمتة (النماذج، والنقرات، والكشط، وتسجيلات الدخول). والاختلافات الرئيسية هي: - - لا توجد نافذة متصفح مرئية (استخدم لقطات الشاشة إذا كنت بحاجة إلى عناصر مرئية). - - تكون بعض المواقع أكثر تشددًا تجاه الأتمتة في وضع headless (CAPTCHA، ومكافحة الروبوتات). - على سبيل المثال، غالبًا ما يحظر X/Twitter جلسات headless. + - لا توجد نافذة متصفح مرئية (استخدم لقطات الشاشة إذا كنت تحتاج إلى عناصر مرئية). + - بعض المواقع أكثر تشددًا بشأن الأتمتة في وضع headless (CAPTCHAs، ومكافحة الروبوت). + على سبيل المثال، غالبًا ما يحظر X/Twitter الجلسات headless. - اضبط `browser.executablePath` إلى الملف الثنائي الخاص بـ Brave لديك (أو أي متصفح قائم على Chromium) ثم أعد تشغيل Gateway. - راجع أمثلة التكوين الكاملة في [المتصفح](/ar/tools/browser#use-brave-or-another-chromium-based-browser). + اضبط `browser.executablePath` على الملف الثنائي لـ Brave لديك (أو أي متصفح آخر قائم على Chromium) ثم أعد تشغيل Gateway. + راجع أمثلة الإعدادات الكاملة في [Browser](/ar/tools/browser#use-brave-or-another-chromium-based-browser). @@ -1701,26 +1701,26 @@ x-i18n: - تتم معالجة رسائل Telegram بواسطة **Gateway**. تشغّل Gateway الوكيل - ثم تستدعي Nodes عبر **Gateway WebSocket** فقط عندما تكون هناك حاجة إلى أداة Node: + تتعامل **Gateway** مع رسائل Telegram. وتشغّل Gateway الوكيل + ثم فقط تستدعي Nodes عبر **Gateway WebSocket** عندما تكون هناك حاجة إلى أداة Node: Telegram → Gateway → Agent → `node.*` → Node → Gateway → Telegram - لا ترى Nodes حركة المزوّد الواردة؛ فهي لا تتلقى إلا استدعاءات RPC الخاصة بـ Node. + لا ترى Nodes حركة المرور الواردة من الموفّر؛ فهي تستقبل فقط استدعاءات RPC الخاصة بـ Node. - - الإجابة المختصرة: **اقرن جهازك بوصفه Node**. تعمل Gateway في مكان آخر، لكنها تستطيع - استدعاء أدوات `node.*` (الشاشة، والكاميرا، والنظام) على جهازك المحلي عبر Gateway WebSocket. + + الإجابة المختصرة: **اقرن حاسوبك باعتباره Node**. يعمل Gateway في مكان آخر، لكنه يستطيع + استدعاء أدوات `node.*` (الشاشة، الكاميرا، النظام) على جهازك المحلي عبر Gateway WebSocket. - إعداد نموذجي: + الإعداد النموذجي: 1. شغّل Gateway على المضيف الذي يعمل دائمًا (VPS/خادم منزلي). - 2. ضع مضيف Gateway + جهازك على tailnet نفسها. + 2. ضع مضيف Gateway + حاسوبك على نفس Tailnet. 3. تأكد من أن Gateway WS قابلة للوصول (ربط tailnet أو نفق SSH). - 4. افتح تطبيق macOS محليًا واتصل في وضع **Remote over SSH** - (أو tailnet مباشرةً) حتى يتمكن من التسجيل بوصفه Node. + 4. افتح تطبيق macOS محليًا واتصل في وضع **Remote over SSH** (أو عبر tailnet مباشر) + حتى يتمكن من التسجيل باعتباره Node. 5. وافق على Node في Gateway: ```bash @@ -1728,9 +1728,9 @@ x-i18n: openclaw devices approve ``` - لا حاجة إلى جسر TCP منفصل؛ إذ تتصل Nodes عبر Gateway WebSocket. + لا يلزم أي جسر TCP منفصل؛ إذ تتصل Nodes عبر Gateway WebSocket. - تذكير أمني: يسمح إقران Node لنظام macOS بتنفيذ `system.run` على ذلك الجهاز. لا + تذكير أمني: إن إقران Node يعمل على macOS يتيح `system.run` على ذلك الجهاز. لا تقرن إلا الأجهزة التي تثق بها، وراجع [الأمان](/ar/gateway/security). الوثائق: [Nodes](/ar/nodes)، [بروتوكول Gateway](/ar/gateway/protocol)، [الوضع البعيد على macOS](/ar/platforms/mac/remote)، [الأمان](/ar/gateway/security). @@ -1738,19 +1738,19 @@ x-i18n: - تحقق من الأساسيات: + تحقّق من الأساسيات: - - Gateway تعمل: `openclaw gateway status` + - تعمل Gateway: `openclaw gateway status` - صحة Gateway: `openclaw status` - صحة القناة: `openclaw channels status` - ثم تحقق من المصادقة والتوجيه: + ثم تحقّق من المصادقة والتوجيه: - - إذا كنت تستخدم Tailscale Serve، فتأكد من ضبط `gateway.auth.allowTailscale` بشكل صحيح. + - إذا كنت تستخدم Tailscale Serve، فتأكد من أن `gateway.auth.allowTailscale` مضبوط بشكل صحيح. - إذا كنت تتصل عبر نفق SSH، فأكّد أن النفق المحلي قائم ويشير إلى المنفذ الصحيح. - - أكّد أن قوائم السماح الخاصة بك (الرسائل الخاصة أو المجموعة) تتضمن حسابك. + - أكّد أن قوائم السماح لديك (DM أو المجموعة) تتضمن حسابك. - الوثائق: [Tailscale](/ar/gateway/tailscale)، [الوصول عن بُعد](/ar/gateway/remote)، [القنوات](/ar/channels). + الوثائق: [Tailscale](/ar/gateway/tailscale)، [الوصول البعيد](/ar/gateway/remote)، [القنوات](/ar/channels). @@ -1758,77 +1758,77 @@ x-i18n: نعم. لا يوجد جسر "روبوت إلى روبوت" مضمّن، لكن يمكنك توصيل ذلك بعدة طرق موثوقة: - **الأبسط:** استخدم قناة دردشة عادية يمكن لكلا الروبوتين الوصول إليها (Telegram/Slack/WhatsApp). - اجعل الروبوت A يرسل رسالة إلى الروبوت B، ثم دع الروبوت B يرد كالمعتاد. + **الأبسط:** استخدم قناة دردشة عادية يستطيع الروبوتان الوصول إليها (Telegram/Slack/WhatsApp). + واجعل الروبوت A يرسل رسالة إلى الروبوت B، ثم دع الروبوت B يرد كالمعتاد. - **جسر CLI (عام):** شغّل نصًا يستدعي Gateway الأخرى باستخدام + **جسر CLI (عام):** شغّل برنامجًا نصيًا يستدعي Gateway الأخرى باستخدام `openclaw agent --message ... --deliver`، مستهدفًا دردشة يستمع فيها الروبوت الآخر. - وإذا كان أحد الروبوتين موجودًا على VPS بعيدة، فوجه CLI لديك إلى تلك Gateway البعيدة - عبر SSH/Tailscale (راجع [الوصول عن بُعد](/ar/gateway/remote)). + وإذا كان أحد الروبوتين يعمل على VPS بعيد، فوجّه CLI لديك إلى Gateway البعيدة تلك + عبر SSH/Tailscale (راجع [الوصول البعيد](/ar/gateway/remote)). - نمط مثال (شغّله من جهاز يمكنه الوصول إلى Gateway المستهدفة): + نمط مثالي (شغّله من جهاز يمكنه الوصول إلى Gateway المستهدفة): ```bash openclaw agent --message "Hello from local bot" --deliver --channel telegram --reply-to ``` نصيحة: أضف حاجزًا وقائيًا حتى لا يدخل الروبوتان في حلقة لا نهائية (الرد عند الإشارة فقط، أو - قوائم سماح القنوات، أو قاعدة "لا ترد على رسائل الروبوتات"). + قوائم سماح القنوات، أو قاعدة "لا ترد على رسائل الروبوت"). - الوثائق: [الوصول عن بُعد](/ar/gateway/remote)، [CLI الخاص بالوكيل](/cli/agent)، [إرسال الوكيل](/ar/tools/agent-send). + الوثائق: [الوصول البعيد](/ar/gateway/remote)، [Agent CLI](/cli/agent)، [إرسال الوكيل](/ar/tools/agent-send). - - لا. يمكن لـ Gateway واحدة استضافة عدة وكلاء، لكل منهم مساحة عمله الخاصة، وإعداداته الافتراضية للنموذج، - وتوجيهه الخاص. هذا هو الإعداد المعتاد، وهو أرخص بكثير وأبسط من تشغيل + + لا. يمكن لـ Gateway واحدة استضافة وكلاء متعددين، لكل واحد منهم مساحة العمل، والنماذج الافتراضية، + والتوجيه الخاص به. وهذا هو الإعداد الطبيعي، كما أنه أرخص بكثير وأبسط من تشغيل VPS واحدة لكل وكيل. - استخدم VPS منفصلة فقط عندما تحتاج إلى عزل صارم (حدود أمان) أو - تكوينات مختلفة جدًا لا تريد مشاركتها. وإلا، فاحتفظ بـ Gateway واحدة + استخدم VPSات منفصلة فقط عندما تحتاج إلى عزل صارم (حدود أمنية) أو + إعدادات مختلفة جدًا لا تريد مشاركتها. وخلاف ذلك، فأبقِ Gateway واحدة واستخدم عدة وكلاء أو وكلاء فرعيين. نعم - تُعد Nodes الطريقة الأساسية للوصول إلى حاسوبك المحمول من Gateway بعيدة، وهي - تفتح أكثر من مجرد وصول إلى الصدفة. تعمل Gateway على macOS/Linux (وWindows عبر WSL2) وهي - خفيفة، لذا فإن إعدادًا شائعًا هو - مضيف يعمل دائمًا بالإضافة إلى حاسوبك المحمول بوصفه Node. + تتيح أكثر من مجرد وصول إلى shell. تعمل Gateway على macOS/Linux (وWindows عبر WSL2)، وهي + خفيفة الوزن (يكفي VPS صغير أو جهاز من فئة Raspberry Pi؛ و4 GB RAM أكثر من كافية)، لذا فإن + الإعداد الشائع هو مضيف يعمل دائمًا بالإضافة إلى حاسوبك المحمول باعتباره Node. - - **لا حاجة إلى SSH وارد.** تتصل Nodes خارجيًا بـ Gateway WebSocket وتستخدم إقران الأجهزة. - - **عناصر تحكم أكثر أمانًا في التنفيذ.** يُحاط `system.run` بقوائم سماح/موافقات Nodes على ذلك الحاسوب المحمول. - - **المزيد من أدوات الأجهزة.** تكشف Nodes عن `canvas` و`camera` و`screen` بالإضافة إلى `system.run`. - - **أتمتة متصفح محلية.** أبقِ Gateway على VPS، لكن شغّل Chrome محليًا عبر مضيف Node على الحاسوب المحمول، أو اتصل بـ Chrome المحلي على المضيف عبر Chrome MCP. + - **لا حاجة إلى SSH وارد.** تتصل Nodes إلى الخارج مع Gateway WebSocket وتستخدم اقتران الأجهزة. + - **ضوابط تنفيذ أكثر أمانًا.** يتم تقييد `system.run` بواسطة قوائم السماح/الموافقات الخاصة بـ Node على ذلك الحاسوب المحمول. + - **مزيد من أدوات الجهاز.** تكشف Nodes عن `canvas` و`camera` و`screen` بالإضافة إلى `system.run`. + - **أتمتة متصفح محلية.** أبقِ Gateway على VPS، لكن شغّل Chrome محليًا عبر مضيف Node على الحاسوب المحمول، أو اربط Chrome المحلي على المضيف عبر Chrome MCP. - لا بأس باستخدام SSH للوصول العارض إلى الصدفة، لكن Nodes أبسط لسير عمل الوكلاء المستمر + إن SSH مناسب للوصول المؤقت إلى shell، لكن Nodes أبسط لسير عمل الوكلاء المستمر وأتمتة الأجهزة. - الوثائق: [Nodes](/ar/nodes)، [CLI لـ Nodes](/cli/nodes)، [المتصفح](/ar/tools/browser). + الوثائق: [Nodes](/ar/nodes)، [Nodes CLI](/cli/nodes)، [Browser](/ar/tools/browser). - - لا. يجب تشغيل **Gateway واحدة** فقط لكل مضيف ما لم تكن تشغّل عمدًا ملفات تعريف معزولة (راجع [Gateways متعددة](/ar/gateway/multiple-gateways)). تُعد Nodes أجهزة طرفية تتصل - بـ Gateway (Nodes لـ iOS/Android، أو "وضع Node" على macOS في تطبيق شريط القوائم). وبالنسبة إلى - مضيفي Nodes بلا واجهة والتحكم عبر CLI، راجع [CLI الخاص بمضيف Node](/cli/node). + + لا. يجب تشغيل **Gateway واحدة** فقط لكل مضيف ما لم تكن تشغّل عمدًا ملفات تعريف معزولة (راجع [Gateways متعددة](/ar/gateway/multiple-gateways)). إن Nodes أجهزة طرفية تتصل + بـ Gateway (مثل Nodes الخاصة بـ iOS/Android، أو "وضع Node" على macOS داخل تطبيق شريط القوائم). وبالنسبة إلى + مضيفات Node بدون واجهة وتحكم CLI، راجع [Node host CLI](/cli/node). - يلزم إجراء إعادة تشغيل كاملة عند تغيير `gateway` أو `discovery` أو `canvasHost`. + يتطلب الأمر إعادة تشغيل كاملة عند تغيير `gateway` أو `discovery` أو `canvasHost`. - + نعم. - - `config.schema.lookup`: فحص شجرة فرعية واحدة من التكوين مع عقدة المخطط السطحية الخاصة بها، وتلميح واجهة المستخدم المطابق، وملخصات الأبناء المباشرين قبل الكتابة - - `config.get`: جلب اللقطة الحالية + hash - - `config.patch`: تحديث جزئي آمن (المفضل لمعظم تعديلات RPC)؛ يعيد التحميل السريع عند الإمكان ويعيد التشغيل عند الحاجة - - `config.apply`: يتحقق من الصحة + يستبدل التكوين الكامل؛ يعيد التحميل السريع عند الإمكان ويعيد التشغيل عند الحاجة - - ما تزال أداة وقت التشغيل `gateway` المخصصة للمالك فقط ترفض إعادة كتابة `tools.exec.ask` / `tools.exec.security`؛ وتُطبّع الأسماء المستعارة القديمة `tools.bash.*` إلى مسارات exec المحمية نفسها + - `config.schema.lookup`: افحص شجرة فرعية واحدة من الإعدادات مع عقدة المخطط السطحية الخاصة بها، وتلميح واجهة المستخدم المطابق، وملخصات الأبناء المباشرين قبل الكتابة + - `config.get`: اجلب اللقطة الحالية + hash + - `config.patch`: تحديث جزئي آمن (المفضل لمعظم تعديلات RPC)؛ يعيد التحميل السريع عندما يكون ذلك ممكنًا ويعيد التشغيل عند الحاجة + - `config.apply`: يتحقق من صحة الإعدادات الكاملة ويستبدلها؛ يعيد التحميل السريع عندما يكون ذلك ممكنًا ويعيد التشغيل عند الحاجة + - ما تزال أداة وقت التشغيل `gateway` المخصصة للمالك فقط ترفض إعادة كتابة `tools.exec.ask` / `tools.exec.security`؛ كما أن الأسماء المستعارة القديمة `tools.bash.*` تُطبّع إلى مسارات exec المحمية نفسها - + ```json5 { agents: { defaults: { workspace: "~/.openclaw/workspace" } }, @@ -1836,25 +1836,25 @@ x-i18n: } ``` - يضبط هذا مساحة العمل الخاصة بك ويقيّد من يمكنه تشغيل الروبوت. + يؤدي هذا إلى ضبط مساحة العمل لديك وتقييد من يمكنه تشغيل الروبوت. - + الخطوات الدنيا: - 1. **ثبّت + سجّل الدخول على VPS** + 1. **ثبّت وسجّل الدخول على VPS** ```bash curl -fsSL https://tailscale.com/install.sh | sh sudo tailscale up ``` - 2. **ثبّت + سجّل الدخول على جهاز Mac** - - استخدم تطبيق Tailscale وسجّل الدخول إلى tailnet نفسها. + 2. **ثبّت وسجّل الدخول على جهاز Mac لديك** + - استخدم تطبيق Tailscale وسجّل الدخول إلى Tailnet نفسها. 3. **فعّل MagicDNS (موصى به)** - - في وحدة تحكم إدارة Tailscale، فعّل MagicDNS حتى يكون لـ VPS اسم ثابت. - 4. **استخدم اسم مضيف tailnet** + - في وحدة تحكم إدارة Tailscale، فعّل MagicDNS حتى يحصل VPS على اسم ثابت. + 4. **استخدم اسم مضيف Tailnet** - SSH: `ssh user@your-vps.tailnet-xxxx.ts.net` - Gateway WS: `ws://your-vps.tailnet-xxxx.ts.net:18789` @@ -1864,7 +1864,7 @@ x-i18n: openclaw gateway --tailscale serve ``` - هذا يُبقي Gateway مربوطة بـ loopback ويكشف HTTPS عبر Tailscale. راجع [Tailscale](/ar/gateway/tailscale). + يؤدي هذا إلى إبقاء Gateway مربوطة على loopback وكشف HTTPS عبر Tailscale. راجع [Tailscale](/ar/gateway/tailscale). @@ -1873,9 +1873,9 @@ x-i18n: الإعداد الموصى به: - 1. **تأكد من أن VPS + جهاز Mac على tailnet نفسها**. - 2. **استخدم تطبيق macOS في الوضع البعيد** (يمكن أن يكون هدف SSH هو اسم مضيف tailnet). - سيقوم التطبيق بإنشاء نفق لمنفذ Gateway والاتصال بوصفه Node. + 1. **تأكد من أن VPS + Mac موجودان على Tailnet نفسها**. + 2. **استخدم تطبيق macOS في الوضع البعيد** (يمكن أن يكون هدف SSH هو اسم مضيف Tailnet). + سيقوم التطبيق بإنشاء نفق لمنفذ Gateway والاتصال باعتباره Node. 3. **وافق على Node** على Gateway: ```bash @@ -1883,18 +1883,18 @@ x-i18n: openclaw devices approve ``` - الوثائق: [بروتوكول Gateway](/ar/gateway/protocol)، [الاكتشاف](/ar/gateway/discovery)، [الوضع البعيد على macOS](/ar/platforms/mac/remote). + الوثائق: [بروتوكول Gateway](/ar/gateway/protocol)، [Discovery](/ar/gateway/discovery)، [الوضع البعيد على macOS](/ar/platforms/mac/remote). - - إذا كنت تحتاج فقط إلى **أدوات محلية** (الشاشة/الكاميرا/exec) على الحاسوب المحمول الثاني، فأضفه بوصفه - **Node**. يُبقي هذا على Gateway واحدة ويتجنب ازدواجية التكوين. أدوات Nodes المحلية + + إذا كنت تحتاج فقط إلى **أدوات محلية** (الشاشة/الكاميرا/exec) على الحاسوب المحمول الثاني، فأضفه باعتباره + **Node**. فهذا يُبقي Gateway واحدة ويتجنب تكرار الإعدادات. أدوات Node المحلية حاليًا خاصة بـ macOS فقط، لكننا نخطط لتوسيعها إلى أنظمة تشغيل أخرى. - ثبّت Gateway ثانية فقط عندما تحتاج إلى **عزل صارم** أو إلى روبوتين منفصلين تمامًا. + لا تثبّت Gateway ثانية إلا عندما تحتاج إلى **عزل صارم** أو إلى روبوتين منفصلين تمامًا. - الوثائق: [Nodes](/ar/nodes)، [CLI لـ Nodes](/cli/nodes)، [Gateways متعددة](/ar/gateway/multiple-gateways). + الوثائق: [Nodes](/ar/nodes)، [Nodes CLI](/cli/nodes)، [Gateways متعددة](/ar/gateway/multiple-gateways). @@ -1903,14 +1903,14 @@ x-i18n: - يقرأ OpenClaw متغيرات البيئة من العملية الأم (الصدفة، أو launchd/systemd، أو CI، إلخ) ويحمّل أيضًا: + يقرأ OpenClaw متغيرات البيئة من العملية الأصلية (shell، أو launchd/systemd، أو CI، إلخ) ويحمّل أيضًا: - `.env` من دليل العمل الحالي - - ملف `.env` احتياطي عام من `~/.openclaw/.env` (أي `$OPENCLAW_STATE_DIR/.env`) + - ملف `.env` احتياطيًا عامًا من `~/.openclaw/.env` (ويُعرف أيضًا باسم `$OPENCLAW_STATE_DIR/.env`) - لا يقوم أي من ملفي `.env` بتجاوز متغيرات البيئة الموجودة. + لا يقوم أي من ملفي `.env` بتجاوز متغيرات البيئة الموجودة مسبقًا. - يمكنك أيضًا تعريف متغيرات بيئة مضمنة في التكوين (تُطبَّق فقط إذا كانت مفقودة من بيئة العملية): + يمكنك أيضًا تعريف متغيرات بيئة مضمنة في الإعدادات (تُطبّق فقط إذا كانت مفقودة من بيئة العملية): ```json5 { @@ -1921,15 +1921,15 @@ x-i18n: } ``` - راجع [/environment](/ar/help/environment) لمعرفة الأولوية الكاملة والمصادر. + راجع [/environment](/ar/help/environment) للاطلاع على ترتيب الأولوية الكامل والمصادر. - - هناك حلان شائعان: + + هناك إصلاحان شائعان: - 1. ضع المفاتيح المفقودة في `~/.openclaw/.env` حتى يتم التقاطها حتى عندما لا ترث الخدمة بيئة الصدفة الخاصة بك. - 2. فعّل استيراد الصدفة (خيار اختياري للراحة): + 1. ضع المفاتيح المفقودة في `~/.openclaw/.env` حتى يتم التقاطها حتى عندما لا ترث الخدمة بيئة shell الخاصة بك. + 2. فعّل استيراد shell (تسهيل اختياري): ```json5 { @@ -1942,18 +1942,18 @@ x-i18n: } ``` - يشغّل هذا صدفة تسجيل الدخول لديك ويستورد فقط المفاتيح المتوقعة المفقودة (من دون تجاوز أي شيء مطلقًا). مقابلات متغيرات البيئة: - `OPENCLAW_LOAD_SHELL_ENV=1`, `OPENCLAW_SHELL_ENV_TIMEOUT_MS=15000`. + يؤدي هذا إلى تشغيل shell تسجيل الدخول لديك واستيراد المفاتيح المتوقعة المفقودة فقط (من دون تجاوز أي شيء مطلقًا). مكافئات متغيرات البيئة: + `OPENCLAW_LOAD_SHELL_ENV=1` و`OPENCLAW_SHELL_ENV_TIMEOUT_MS=15000`. - - يبلّغ `openclaw models status` عما إذا كان **استيراد بيئة الصدفة** مفعّلًا. لا تعني عبارة "Shell env: off" - أن متغيرات البيئة لديك مفقودة - بل تعني فقط أن OpenClaw لن يحمّل - صدفة تسجيل الدخول لديك تلقائيًا. + + يوضح `openclaw models status` ما إذا كان **استيراد بيئة shell** مفعّلًا. إن ظهور "Shell env: off" + **لا** يعني أن متغيرات البيئة لديك مفقودة - بل يعني فقط أن OpenClaw لن يحمّل + shell تسجيل الدخول لديك تلقائيًا. - إذا كانت Gateway تعمل بوصفها خدمة (launchd/systemd)، فلن ترث صدفة - البيئة الخاصة بك. أصلح ذلك بإحدى هذه الطرق: + إذا كانت Gateway تعمل كخدمة (launchd/systemd)، فلن ترث + بيئة shell الخاصة بك. أصلح ذلك بإحدى الطرق التالية: 1. ضع الرمز المميز في `~/.openclaw/.env`: @@ -1961,8 +1961,8 @@ x-i18n: COPILOT_GITHUB_TOKEN=... ``` - 2. أو فعّل استيراد الصدفة (`env.shellEnv.enabled: true`). - 3. أو أضفه إلى كتلة `env` في التكوين لديك (يُطبّق فقط إذا كان مفقودًا). + 2. أو فعّل استيراد shell (`env.shellEnv.enabled: true`). + 3. أو أضفه إلى كتلة `env` في إعداداتك (يُطبَّق فقط إذا كان مفقودًا). ثم أعد تشغيل Gateway وتحقق مرة أخرى: @@ -1976,18 +1976,18 @@ x-i18n: -## الجلسات والدردشات المتعددة +## الجلسات والمحادثات المتعددة - أرسل `/new` أو `/reset` بوصفها رسالة مستقلة. راجع [إدارة الجلسات](/ar/concepts/session). + أرسل `/new` أو `/reset` كرسالة مستقلة. راجع [إدارة الجلسات](/ar/concepts/session). - - يمكن أن تنتهي صلاحية الجلسات بعد `session.idleMinutes`، لكن هذا **معطل افتراضيًا** (القيمة الافتراضية **0**). - اضبطه على قيمة موجبة لتمكين انتهاء الصلاحية عند الخمول. وعند التمكين، فإن الرسالة **التالية** - بعد فترة الخمول تبدأ معرف جلسة جديدًا لمفتاح الدردشة هذا. - ولا يحذف هذا النصوص المسجلة - بل يبدأ جلسة جديدة فقط. + + يمكن أن تنتهي صلاحية الجلسات بعد `session.idleMinutes`، لكن هذا **معطّل افتراضيًا** (القيمة الافتراضية **0**). + اضبطه على قيمة موجبة لتمكين انتهاء الصلاحية بسبب الخمول. وعند تفعيله، تبدأ **الرسالة التالية** + بعد فترة الخمول معرف جلسة جديدًا لمفتاح الدردشة ذلك. + ولا يؤدي هذا إلى حذف النصوص - بل يبدأ جلسة جديدة فقط. ```json5 { @@ -1999,34 +1999,34 @@ x-i18n: - + نعم، عبر **التوجيه متعدد الوكلاء** و**الوكلاء الفرعيين**. يمكنك إنشاء وكيل - منسق واحد والعديد من وكلاء العمال مع مساحات عملهم ونماذجهم الخاصة. + منسق واحد وعدة وكلاء عاملين لكل منهم مساحة العمل والنماذج الخاصة به. - ومع ذلك، فمن الأفضل النظر إلى هذا على أنه **تجربة ممتعة**. فهو يستهلك قدرًا كبيرًا من الرموز وغالبًا - ما يكون أقل كفاءة من استخدام روبوت واحد مع جلسات منفصلة. النموذج المعتاد الذي - نتصوره هو روبوت واحد تتحدث إليه، مع جلسات مختلفة للعمل المتوازي. ويمكن لهذا - الروبوت أيضًا إنشاء وكلاء فرعيين عند الحاجة. + ومع ذلك، فمن الأفضل النظر إلى هذا على أنه **تجربة ممتعة**. فهو يستهلك رموزًا كثيرًا + وغالبًا ما يكون أقل كفاءة من استخدام روبوت واحد مع جلسات منفصلة. أما النموذج المعتاد الذي + نتصوره فهو روبوت واحد تتحدث إليه، مع جلسات مختلفة للعمل المتوازي. كما يمكن لذلك + الروبوت أيضًا تشغيل وكلاء فرعيين عند الحاجة. - الوثائق: [التوجيه متعدد الوكلاء](/ar/concepts/multi-agent)، [الوكلاء الفرعيون](/ar/tools/subagents)، [CLI الخاص بالوكلاء](/cli/agents). + الوثائق: [التوجيه متعدد الوكلاء](/ar/concepts/multi-agent)، [الوكلاء الفرعيون](/ar/tools/subagents)، [Agents CLI](/cli/agents). - - سياق الجلسة محدود بنافذة النموذج. يمكن للدردشات الطويلة، أو مخرجات الأدوات الكبيرة، أو كثرة + + إن سياق الجلسة محدود بنافذة النموذج. ويمكن للمحادثات الطويلة، أو مخرجات الأدوات الكبيرة، أو كثرة الملفات أن تؤدي إلى Compaction أو الاقتطاع. ما الذي يساعد: - اطلب من الروبوت تلخيص الحالة الحالية وكتابتها في ملف. - - استخدم `/compact` قبل المهام الطويلة، و`/new` عند تبديل المواضيع. + - استخدم `/compact` قبل المهام الطويلة، و`/new` عند تبديل الموضوعات. - احتفظ بالسياق المهم في مساحة العمل واطلب من الروبوت قراءته مرة أخرى. - - استخدم الوكلاء الفرعيين للمهام الطويلة أو المتوازية حتى تبقى الدردشة الرئيسية أصغر. - - اختر نموذجًا بنافذة سياق أكبر إذا كان هذا يحدث كثيرًا. + - استخدم وكلاء فرعيين للأعمال الطويلة أو المتوازية حتى تظل الدردشة الرئيسية أصغر. + - اختر نموذجًا يملك نافذة سياق أكبر إذا كان هذا يحدث كثيرًا. - + استخدم أمر إعادة التعيين: ```bash @@ -2047,16 +2047,16 @@ x-i18n: ملاحظات: - - يقدّم الإعداد الأولي أيضًا خيار **إعادة التعيين** إذا اكتشف تكوينًا موجودًا. راجع [الإعداد الأولي (CLI)](/ar/start/wizard). - - إذا كنت قد استخدمت ملفات تعريف (`--profile` / `OPENCLAW_PROFILE`)، فأعد تعيين كل دليل حالة (الافتراضي هو `~/.openclaw-`). - - إعادة تعيين التطوير: `openclaw gateway --dev --reset` (خاص بالتطوير فقط؛ يمسح تكوين التطوير + بيانات الاعتماد + الجلسات + مساحة العمل). + - يقدّم الإعداد الأولي أيضًا خيار **Reset** إذا اكتشف إعدادات موجودة. راجع [الإعداد الأولي (CLI)](/ar/start/wizard). + - إذا كنت قد استخدمت ملفات تعريف (`--profile` / `OPENCLAW_PROFILE`)، فأعد تعيين كل دليل حالة (القيم الافتراضية هي `~/.openclaw-`). + - إعادة التعيين في وضع التطوير: `openclaw gateway --dev --reset` (خاص بالتطوير فقط؛ يمسح إعدادات التطوير + بيانات الاعتماد + الجلسات + مساحة العمل). استخدم أحد هذه الخيارات: - - **Compaction** (يُبقي المحادثة لكنه يختصر الأدوار الأقدم): + - **Compaction** (يُبقي المحادثة لكنه يلخص الأدوار الأقدم): ``` /compact @@ -2064,7 +2064,7 @@ x-i18n: أو `/compact ` لتوجيه الملخص. - - **إعادة التعيين** (معرّف جلسة جديد لمفتاح الدردشة نفسه): + - **إعادة التعيين** (معرف جلسة جديد لمفتاح الدردشة نفسه): ``` /new @@ -2073,24 +2073,24 @@ x-i18n: إذا استمر حدوث ذلك: - - فعّل أو اضبط **تقليم الجلسة** (`agents.defaults.contextPruning`) لقص مخرجات الأدوات القديمة. - - استخدم نموذجًا بنافذة سياق أكبر. + - فعّل أو اضبط **تشذيب الجلسة** (`agents.defaults.contextPruning`) لقص مخرجات الأدوات القديمة. + - استخدم نموذجًا يملك نافذة سياق أكبر. - الوثائق: [Compaction](/ar/concepts/compaction)، [تقليم الجلسة](/ar/concepts/session-pruning)، [إدارة الجلسات](/ar/concepts/session). + الوثائق: [Compaction](/ar/concepts/compaction)، [تشذيب الجلسة](/ar/concepts/session-pruning)، [إدارة الجلسات](/ar/concepts/session). - هذا خطأ تحقق من صحة المزوّد: أصدر النموذج كتلة `tool_use` من دون - `input` المطلوبة. ويعني هذا عادةً أن سجل الجلسة قديم أو تالف (غالبًا بعد سلاسل طويلة + هذا خطأ تحقق من صحة لدى الموفّر: أصدر النموذج كتلة `tool_use` من دون + `input` المطلوب. وعادةً ما يعني ذلك أن سجل الجلسة قديم أو تالف (غالبًا بعد سلاسل طويلة أو تغيير في الأداة/المخطط). - الحل: ابدأ جلسة جديدة باستخدام `/new` (رسالة مستقلة). + الحل: ابدأ جلسة جديدة باستخدام `/new` (كقيمة رسالة مستقلة). - تعمل Heartbeats كل **30 دقيقة** افتراضيًا (**ساعة واحدة** عند استخدام مصادقة OAuth). اضبطها أو عطّلها: + تعمل Heartbeats كل **30m** افتراضيًا (**1h** عند استخدام مصادقة OAuth). اضبطها أو عطّلها: ```json5 { @@ -2104,19 +2104,19 @@ x-i18n: } ``` - إذا كان `HEARTBEAT.md` موجودًا لكنه فارغ فعليًا (أسطر فارغة فقط وعناوين - Markdown مثل `# Heading`)، فإن OpenClaw تتخطى تشغيل Heartbeat لتوفير استدعاءات API. - وإذا كان الملف مفقودًا، فإن Heartbeat ما تزال تعمل ويقرر النموذج ما يجب فعله. + إذا كان `HEARTBEAT.md` موجودًا لكنه فارغ فعليًا (أسطر فارغة فقط وعناوين markdown + مثل `# Heading`)، فإن OpenClaw يتخطى تشغيل Heartbeat لتوفير استدعاءات API. + وإذا كان الملف مفقودًا، فإن Heartbeat ما تزال تعمل ويقرر النموذج ما الذي يجب فعله. - تستخدم تجاوزات كل وكيل `agents.list[].heartbeat`. الوثائق: [Heartbeat](/ar/gateway/heartbeat). + تستخدم التجاوزات لكل وكيل `agents.list[].heartbeat`. الوثائق: [Heartbeat](/ar/gateway/heartbeat). - لا. يعمل OpenClaw على **حسابك الشخصي**، لذلك إذا كنت موجودًا في المجموعة، يمكن لـ OpenClaw رؤيتها. - افتراضيًا، تُحظر الردود في المجموعات إلى أن تسمح للمرسلين (`groupPolicy: "allowlist"`). + لا. يعمل OpenClaw على **حسابك الخاص**، لذا إذا كنت في المجموعة، يمكن لـ OpenClaw رؤيتها. + وبشكل افتراضي، يتم حظر الردود في المجموعات إلى أن تسمح للمرسلين (`groupPolicy: "allowlist"`). - إذا كنت تريد أن تتمكن **أنت فقط** من تشغيل الردود في المجموعة: + إذا كنت تريد أن تتمكن **أنت فقط** من تشغيل الردود في المجموعات: ```json5 { @@ -2132,7 +2132,7 @@ x-i18n: - الخيار 1 (الأسرع): تتبّع السجلات وأرسل رسالة اختبار في المجموعة: + الخيار 1 (الأسرع): تتبع السجلات وأرسل رسالة اختبار في المجموعة: ```bash openclaw logs --follow --json @@ -2141,67 +2141,67 @@ x-i18n: ابحث عن `chatId` (أو `from`) الذي ينتهي بـ `@g.us`، مثل: `1234567890-1234567890@g.us`. - الخيار 2 (إذا كان مضبوطًا/في قائمة السماح بالفعل): اعرض المجموعات من التكوين: + الخيار 2 (إذا كان مكوّنًا/موجودًا في قائمة السماح بالفعل): اعرض المجموعات من الإعدادات: ```bash openclaw directory groups list --channel whatsapp ``` - الوثائق: [WhatsApp](/ar/channels/whatsapp)، [الدليل](/cli/directory)، [السجلات](/cli/logs). + الوثائق: [WhatsApp](/ar/channels/whatsapp)، [Directory](/cli/directory)، [Logs](/cli/logs). هناك سببان شائعان: - - تفعيل الإشارة مفعّل (افتراضيًا). يجب أن تقوم بعمل @mention للروبوت (أو مطابقة `mentionPatterns`). - - لقد قمت بتكوين `channels.whatsapp.groups` من دون `"*"` والمجموعة ليست ضمن قائمة السماح. + - تفعيل الإشارة مفعّل (الافتراضي). يجب أن تقوم بعمل @mention للروبوت (أو تطابق `mentionPatterns`). + - لقد قمت بتكوين `channels.whatsapp.groups` من دون `"*"` ولم تتم إضافة المجموعة إلى قائمة السماح. راجع [المجموعات](/ar/channels/groups) و[رسائل المجموعات](/ar/channels/group-messages). - - تُدمج الدردشات المباشرة في الجلسة الرئيسية افتراضيًا. أما المجموعات/القنوات فلها مفاتيح جلسات خاصة بها، كما أن مواضيع Telegram / سلاسل Discord هي جلسات منفصلة. راجع [المجموعات](/ar/channels/groups) و[رسائل المجموعات](/ar/channels/group-messages). + + تُدمج الدردشات المباشرة في الجلسة الرئيسية افتراضيًا. أما المجموعات/القنوات فلها مفاتيح جلسات خاصة بها، كما أن موضوعات Telegram / محادثات Discord هي جلسات منفصلة. راجع [المجموعات](/ar/channels/groups) و[رسائل المجموعات](/ar/channels/group-messages). - لا توجد حدود صارمة. العشرات (بل حتى المئات) لا بأس بها، ولكن انتبه إلى: + لا توجد حدود صارمة. العشرات (بل حتى المئات) مقبولة، لكن انتبه إلى: - - **نمو القرص:** تعيش الجلسات + النصوص المسجلة تحت `~/.openclaw/agents//sessions/`. - - **تكلفة الرموز:** يعني المزيد من الوكلاء مزيدًا من استخدام النماذج المتزامن. - - **أعباء التشغيل:** ملفات تعريف المصادقة، ومساحات العمل، وتوجيه القنوات لكل وكيل. + - **نمو القرص:** تعيش الجلسات + النصوص تحت `~/.openclaw/agents//sessions/`. + - **تكلفة الرموز:** زيادة عدد الوكلاء تعني زيادة استخدام النماذج بشكل متزامن. + - **العبء التشغيلي:** ملفات المصادقة، ومساحات العمل، وتوجيه القنوات لكل وكيل. نصائح: - - احتفظ **بمساحة عمل نشطة** واحدة لكل وكيل (`agents.defaults.workspace`). - - قلّم الجلسات القديمة (احذف JSONL أو مدخلات التخزين) إذا نما القرص. - - استخدم `openclaw doctor` لاكتشاف مساحات العمل الشاردة وعدم تطابق ملفات التعريف. + - احتفظ بمساحة عمل **نشطة** واحدة لكل وكيل (`agents.defaults.workspace`). + - قم بتشذيب الجلسات القديمة (احذف JSONL أو إدخالات التخزين) إذا نما استخدام القرص. + - استخدم `openclaw doctor` لاكتشاف مساحات العمل الشاردة وعدم تطابق الملفات الشخصية. - - نعم. استخدم **التوجيه متعدد الوكلاء** لتشغيل عدة وكلاء معزولين وتوجيه الرسائل الواردة بحسب - القناة/الحساب/النظير. Slack مدعوم بوصفه قناة ويمكن ربطه بوكلاء محددين. + + نعم. استخدم **التوجيه متعدد الوكلاء** لتشغيل عدة وكلاء معزولين وتوجيه الرسائل الواردة حسب + القناة/الحساب/النظير. Slack مدعوم كقناة ويمكن ربطه بوكلاء محددين. - إن الوصول إلى المتصفح قوي، لكنه ليس "افعل أي شيء يمكن للإنسان فعله" - فما تزال أنظمة مكافحة الروبوتات وCAPTCHA وMFA - قادرة على حظر الأتمتة. ولأكثر تحكم موثوق في المتصفح، استخدم Chrome MCP المحلي على المضيف، + إن الوصول إلى المتصفح قوي، لكنه ليس "افعل كل ما يستطيع الإنسان فعله" - فمكافحة الروبوت، وCAPTCHA، وMFA + لا تزال قادرة على حظر الأتمتة. وللحصول على أكثر تحكم موثوق في المتصفح، استخدم Chrome MCP المحلي على المضيف، أو استخدم CDP على الجهاز الذي يشغّل المتصفح فعليًا. إعداد أفضل الممارسات: - مضيف Gateway يعمل دائمًا (VPS/Mac mini). - وكيل واحد لكل دور (bindings). - - قناة أو قنوات Slack مرتبطة بتلك الوكلاء. + - قناة (أو قنوات) Slack مرتبطة بهؤلاء الوكلاء. - متصفح محلي عبر Chrome MCP أو Node عند الحاجة. الوثائق: [التوجيه متعدد الوكلاء](/ar/concepts/multi-agent)، [Slack](/ar/channels/slack)، - [المتصفح](/ar/tools/browser)، [Nodes](/ar/nodes). + [Browser](/ar/tools/browser)، [Nodes](/ar/nodes). -## النماذج: الإعدادات الافتراضية، والاختيار، والأسماء المستعارة، والتبديل +## النماذج: القيم الافتراضية، والاختيار، والأسماء المستعارة، والتبديل @@ -2211,51 +2211,50 @@ x-i18n: agents.defaults.model.primary ``` - يُشار إلى النماذج بصيغة `provider/model` (مثال: `openai/gpt-5.4`). وإذا حذفت اسم المزوّد، فإن OpenClaw تحاول أولًا اسمًا مستعارًا، ثم تطابقًا فريدًا لمزوّد مُكوَّن لذلك المعرّف الدقيق للنموذج، وبعد ذلك فقط تعود إلى المزوّد الافتراضي المكوَّن باعتباره مسار توافق قديمًا. وإذا لم يعد ذلك المزوّد يوفّر النموذج الافتراضي المكوَّن، فإن OpenClaw تعود إلى أول مزود/نموذج مُكوَّن بدلًا من إظهار افتراضي قديم تابع لمزوّد تمت إزالته. ومع ذلك، ينبغي لك **ضبط `provider/model` صراحةً**. + تتم الإشارة إلى النماذج بصيغة `provider/model` (مثال: `openai/gpt-5.4`). وإذا حذفت الموفّر، فسيحاول OpenClaw أولًا مطابقة اسم مستعار، ثم مطابقة فريدة بين الموفّرين المكوَّنين لذلك المعرّف الدقيق للنموذج، وبعد ذلك فقط يعود إلى الموفّر الافتراضي المكوَّن كمسار توافق قديم ومهجور. وإذا لم يعد ذلك الموفّر يكشف النموذج الافتراضي المكوَّن، فإن OpenClaw يعود إلى أول موفّر/نموذج مكوَّن بدلًا من إظهار افتراضي قديم من موفّر تمت إزالته. ومع ذلك، يجب عليك **ضبط `provider/model` صراحةً**. - - **الإعداد الافتراضي الموصى به:** استخدم أقوى نموذج من أحدث جيل متاح في مجموعة مزوديك. - **للوكلاء الممكَّنين بالأدوات أو المدخلات غير الموثوقة:** أعطِ أولوية لقوة النموذج على التكلفة. + + **الافتراضي الموصى به:** استخدم أقوى نموذج من أحدث جيل متاح في مجموعة الموفّرين لديك. + **للوكلاء المفعّلة بالأدوات أو المدخلات غير الموثوقة:** أعطِ أولوية لقوة النموذج على التكلفة. **للدردشة الروتينية/منخفضة المخاطر:** استخدم نماذج احتياطية أرخص ووجّه حسب دور الوكيل. - لدى MiniMax وثائقه الخاصة: [MiniMax](/ar/providers/minimax) و + لدى MiniMax وثائقها الخاصة: [MiniMax](/ar/providers/minimax) و [النماذج المحلية](/ar/gateway/local-models). - القاعدة العامة: استخدم **أفضل نموذج يمكنك تحمله** للأعمال عالية المخاطر، واستخدم نموذجًا أرخص - للدردشة الروتينية أو الملخصات. يمكنك توجيه النماذج لكل وكيل واستخدام الوكلاء الفرعيين من أجل - موازاة المهام الطويلة (كل وكيل فرعي يستهلك رموزًا). راجع [النماذج](/ar/concepts/models) و + القاعدة العامة: استخدم **أفضل نموذج يمكنك تحمّل تكلفته** للأعمال عالية المخاطر، ونموذجًا أرخص + للدردشة الروتينية أو الملخصات. ويمكنك توجيه النماذج لكل وكيل واستخدام وكلاء فرعيين من أجل + الموازاة في المهام الطويلة (كل وكيل فرعي يستهلك رموزًا). راجع [النماذج](/ar/concepts/models) و [الوكلاء الفرعيون](/ar/tools/subagents). - تحذير قوي: النماذج الأضعف/المفرطة في التكميم أكثر عرضة لحقن + تحذير قوي: النماذج الأضعف/المبالغ في تكميمها أكثر عرضة لحقن المطالبات والسلوك غير الآمن. راجع [الأمان](/ar/gateway/security). مزيد من السياق: [النماذج](/ar/concepts/models). - - استخدم **أوامر النماذج** أو عدّل حقول **النموذج** فقط. تجنب استبدال التكوين الكامل. + + استخدم **أوامر النموذج** أو عدّل حقول **النموذج** فقط. تجنب استبدال الإعدادات بالكامل. الخيارات الآمنة: - `/model` في الدردشة (سريع، لكل جلسة) - - `openclaw models set ...` (يحدّث تكوين النموذج فقط) + - `openclaw models set ...` (يحدّث إعدادات النموذج فقط) - `openclaw configure --section model` (تفاعلي) - عدّل `agents.defaults.model` في `~/.openclaw/openclaw.json` - تجنب `config.apply` مع كائن جزئي ما لم تكن تنوي استبدال التكوين كله. - وبالنسبة إلى تعديلات RPC، افحص أولًا باستخدام `config.schema.lookup` وفضّل `config.patch`. - توفّر لك حمولة lookup المسار المُطبّع، ووثائق/قيود المخطط السطحية، وملخصات الأبناء المباشرين + تجنب `config.apply` مع كائن جزئي ما لم تكن تقصد استبدال الإعدادات كلها. + بالنسبة إلى تعديلات RPC، افحص أولًا باستخدام `config.schema.lookup` وفضّل `config.patch`. إذ تمنحك حمولة lookup المسار المُطبّع، ووثائق/قيود المخطط السطحية، وملخصات الأبناء المباشرين للتحديثات الجزئية. - وإذا كنت قد استبدلت التكوين بالفعل، فاستعده من نسخة احتياطية أو أعد تشغيل `openclaw doctor` للإصلاح. + وإذا كنت قد كتبت فوق الإعدادات، فاستعدها من نسخة احتياطية أو أعد تشغيل `openclaw doctor` للإصلاح. - الوثائق: [النماذج](/ar/concepts/models)، [التهيئة](/cli/configure)، [التكوين](/cli/config)، [Doctor](/ar/gateway/doctor). + الوثائق: [النماذج](/ar/concepts/models)، [Configure](/cli/configure)، [الإعدادات](/cli/config)، [Doctor](/ar/gateway/doctor). - + نعم. يُعد Ollama أسهل مسار للنماذج المحلية. أسرع إعداد: @@ -2268,28 +2267,28 @@ x-i18n: ملاحظات: - - يمنحك `Cloud + Local` نماذج سحابية بالإضافة إلى نماذج Ollama المحلية - - لا تحتاج النماذج السحابية مثل `kimi-k2.5:cloud` إلى سحب محلي + - يمنحك `Cloud + Local` النماذج السحابية بالإضافة إلى نماذج Ollama المحلية + - النماذج السحابية مثل `kimi-k2.5:cloud` لا تحتاج إلى سحب محلي - للتبديل اليدوي، استخدم `openclaw models list` و`openclaw models set ollama/` - ملاحظة أمنية: النماذج الأصغر أو المكممة بشكل كبير أكثر عرضة لحقن - المطالبات. نوصي بشدة باستخدام **نماذج كبيرة** لأي روبوت يمكنه استخدام الأدوات. - وإذا كنت لا تزال تريد نماذج صغيرة، ففعّل العزل وقوائم سماح صارمة للأدوات. + ملاحظة أمنية: النماذج الأصغر أو المكمّاة بشكل كبير أكثر عرضة لحقن + المطالبات. ونحن نوصي بشدة باستخدام **نماذج كبيرة** لأي روبوت يمكنه استخدام الأدوات. + وإذا كنت لا تزال تريد نماذج صغيرة، ففعّل العزل وقوائم السماح الصارمة للأدوات. الوثائق: [Ollama](/ar/providers/ollama)، [النماذج المحلية](/ar/gateway/local-models)، - [مزودو النماذج](/ar/concepts/model-providers)، [الأمان](/ar/gateway/security)، + [موفرو النماذج](/ar/concepts/model-providers)، [الأمان](/ar/gateway/security)، [العزل](/ar/gateway/sandboxing). - - - قد تختلف هذه البيئات وقد تتغير بمرور الوقت؛ لا توجد توصية ثابتة لمزوّد بعينه. + + - قد تختلف هذه البيئات وقد تتغير بمرور الوقت؛ ولا توجد توصية ثابتة بشأن الموفّر. - تحقّق من إعداد وقت التشغيل الحالي على كل Gateway باستخدام `openclaw models status`. - - بالنسبة إلى الوكلاء الحساسين أمنيًا/الممكّنين بالأدوات، استخدم أقوى نموذج من أحدث جيل متاح. + - بالنسبة إلى الوكلاء الحسّاسين أمنيًا/المفعّلين بالأدوات، استخدم أقوى نموذج من أحدث جيل متاح. - استخدم الأمر `/model` بوصفه رسالة مستقلة: + استخدم الأمر `/model` كرسالة مستقلة: ``` /model sonnet @@ -2301,56 +2300,56 @@ x-i18n: /model gemini-flash-lite ``` - هذه هي الأسماء المستعارة المضمّنة. ويمكن إضافة أسماء مستعارة مخصصة عبر `agents.defaults.models`. + هذه هي الأسماء المستعارة المضمنة. ويمكن إضافة أسماء مستعارة مخصصة عبر `agents.defaults.models`. يمكنك عرض النماذج المتاحة باستخدام `/model` أو `/model list` أو `/model status`. - يعرض `/model` (و`/model list`) أداة اختيار مدمجة ومرقمة. اختر بالرقم: + يعرض `/model` (وكذلك `/model list`) منتقيًا مضغوطًا ومرقّمًا. اختر حسب الرقم: ``` /model 3 ``` - يمكنك أيضًا فرض ملف تعريف مصادقة محدد للمزوّد (لكل جلسة): + يمكنك أيضًا فرض ملف مصادقة معيّن للموفّر (لكل جلسة): ``` /model opus@anthropic:default /model opus@anthropic:work ``` - نصيحة: يعرض `/model status` الوكيل النشط، وملف `auth-profiles.json` المستخدم، وملف تعريف المصادقة الذي ستتم تجربته بعد ذلك. - كما يعرض نقطة نهاية المزوّد المكوّنة (`baseUrl`) ووضع API (`api`) عند توفرهما. + نصيحة: يعرض `/model status` الوكيل النشط، وملف `auth-profiles.json` المستخدم، وملف المصادقة الذي ستجري محاولته بعد ذلك. + كما يعرض نقطة نهاية الموفّر المكوَّنة (`baseUrl`) ووضع API (`api`) عند توفرهما. - **كيف أُلغي تثبيت ملف تعريف ثبّتُّه باستخدام @profile؟** + **كيف ألغي تثبيت ملف شخصي قمت بتثبيته باستخدام @profile؟** - أعد تشغيل `/model` **من دون** اللاحقة `@profile`: + أعد تشغيل `/model` **من دون** لاحقة `@profile`: ``` /model anthropic/claude-opus-4-6 ``` - إذا كنت تريد العودة إلى الافتراضي، فاختره من `/model` (أو أرسل `/model `). - استخدم `/model status` للتأكد من ملف تعريف المصادقة النشط. + إذا كنت تريد الرجوع إلى الإعداد الافتراضي، فاختره من `/model` (أو أرسل `/model `). + استخدم `/model status` لتأكيد أي ملف مصادقة نشط. - نعم. اضبط أحدهما كافتراضي وبدّل عند الحاجة: + نعم. اضبط أحدهما كافتراضي وبدّل حسب الحاجة: - **تبديل سريع (لكل جلسة):** `/model gpt-5.4` للمهام اليومية، و`/model openai-codex/gpt-5.4` للبرمجة باستخدام Codex OAuth. - - **افتراضي + تبديل:** اضبط `agents.defaults.model.primary` إلى `openai/gpt-5.4`، ثم بدّل إلى `openai-codex/gpt-5.4` عند البرمجة (أو العكس). + - **افتراضي + تبديل:** اضبط `agents.defaults.model.primary` على `openai/gpt-5.4`، ثم بدّل إلى `openai-codex/gpt-5.4` عند البرمجة (أو بالعكس). - **الوكلاء الفرعيون:** وجّه مهام البرمجة إلى وكلاء فرعيين لديهم نموذج افتراضي مختلف. راجع [النماذج](/ar/concepts/models) و[أوامر الشرطة المائلة](/ar/tools/slash-commands). - - استخدم إما تبديلًا لكل جلسة أو إعدادًا افتراضيًا في التكوين: + + استخدم إما مفتاح تبديل للجلسة أو افتراضيًا في الإعدادات: - **لكل جلسة:** أرسل `/fast on` بينما تستخدم الجلسة `openai/gpt-5.4` أو `openai-codex/gpt-5.4`. - - **افتراضي لكل نموذج:** اضبط `agents.defaults.models["openai/gpt-5.4"].params.fastMode` إلى `true`. - - **Codex OAuth أيضًا:** إذا كنت تستخدم أيضًا `openai-codex/gpt-5.4`، فاضبط العلم نفسه هناك. + - **افتراضي لكل نموذج:** اضبط `agents.defaults.models["openai/gpt-5.4"].params.fastMode` على `true`. + - **Codex OAuth أيضًا:** إذا كنت تستخدم أيضًا `openai-codex/gpt-5.4`، فاضبط العلامة نفسها هناك. مثال: @@ -2375,37 +2374,37 @@ x-i18n: } ``` - بالنسبة إلى OpenAI، يُطابِق الوضع السريع `service_tier = "priority"` في طلبات Responses الأصلية المدعومة. وتتفوق تجاوزات `/fast` الخاصة بالجلسة على إعدادات التكوين الافتراضية. + بالنسبة إلى OpenAI، فإن الوضع السريع يُطابق `service_tier = "priority"` في طلبات Responses الأصلية المدعومة. كما أن تجاوزات `/fast` على مستوى الجلسة تتغلب على القيم الافتراضية في الإعدادات. راجع [التفكير والوضع السريع](/ar/tools/thinking) و[الوضع السريع في OpenAI](/ar/providers/openai#openai-fast-mode). - إذا كان `agents.defaults.models` مضبوطًا، فإنه يصبح **قائمة السماح** لـ `/model` ولأي - تجاوزات جلسة. ويؤدي اختيار نموذج غير موجود في تلك القائمة إلى إرجاع: + إذا كان `agents.defaults.models` مضبوطًا، فإنه يصبح **قائمة السماح** لأمر `/model` وأي + تجاوزات على مستوى الجلسة. وسيؤدي اختيار نموذج غير موجود في تلك القائمة إلى إرجاع: ``` Model "provider/model" is not allowed. Use /model to list available models. ``` - ويُعاد هذا الخطأ **بدلًا من** رد عادي. الحل: أضف النموذج إلى + يتم إرجاع هذا الخطأ **بدلًا من** رد عادي. الحل: أضف النموذج إلى `agents.defaults.models`، أو أزل قائمة السماح، أو اختر نموذجًا من `/model list`. - هذا يعني أن **المزوّد غير مكوّن** (لم يُعثر على تكوين لمزوّد MiniMax أو على ملف - تعريف مصادقة)، لذلك لا يمكن حل النموذج. + هذا يعني أن **الموفّر غير مكوَّن** (لم يتم العثور على إعدادات موفّر MiniMax أو + ملف مصادقة)، لذلك لا يمكن حل النموذج. - قائمة تحقق للإصلاح: + قائمة التحقق من الإصلاح: - 1. حدّث إلى إصدار OpenClaw حديث (أو شغّل من المصدر `main`)، ثم أعد تشغيل Gateway. + 1. قم بالترقية إلى إصدار OpenClaw حالي (أو شغّله من المصدر `main`)، ثم أعد تشغيل Gateway. 2. تأكد من تكوين MiniMax (عبر المعالج أو JSON)، أو من وجود مصادقة MiniMax - في env/ملفات تعريف المصادقة بحيث يمكن حقن المزوّد المطابق - (`MINIMAX_API_KEY` لـ `minimax`، و`MINIMAX_OAUTH_TOKEN` أو مصادقة MiniMax - OAuth المخزنة لـ `minimax-portal`). - 3. استخدم معرّف النموذج الدقيق (مع حساسية حالة الأحرف) لمسار المصادقة لديك: + في env/ملفات المصادقة حتى يمكن حقن الموفّر المطابق + (`MINIMAX_API_KEY` لـ `minimax`، أو `MINIMAX_OAUTH_TOKEN` أو MiniMax + OAuth المخزَّن لـ `minimax-portal`). + 3. استخدم معرّف النموذج الدقيق (حساس لحالة الأحرف) لمسار المصادقة لديك: `minimax/MiniMax-M2.7` أو `minimax/MiniMax-M2.7-highspeed` لإعداد مفتاح API، أو `minimax-portal/MiniMax-M2.7` / `minimax-portal/MiniMax-M2.7-highspeed` لإعداد OAuth. @@ -2423,7 +2422,7 @@ x-i18n: نعم. استخدم **MiniMax كافتراضي** وبدّل النماذج **لكل جلسة** عند الحاجة. - تستخدم النماذج الاحتياطية من أجل **الأخطاء**، وليس من أجل "المهام الصعبة"، لذا استخدم `/model` أو وكيلًا منفصلًا. + إن النماذج الاحتياطية مخصصة **للأخطاء**، لا "للمهام الصعبة"، لذا استخدم `/model` أو وكيلًا منفصلًا. **الخيار A: التبديل لكل جلسة** @@ -2450,8 +2449,8 @@ x-i18n: **الخيار B: وكلاء منفصلون** - - الوكيل A افتراضيه: MiniMax - - الوكيل B افتراضيه: OpenAI + - وكيل A الافتراضي: MiniMax + - وكيل B الافتراضي: OpenAI - وجّه حسب الوكيل أو استخدم `/agent` للتبديل الوثائق: [النماذج](/ar/concepts/models)، [التوجيه متعدد الوكلاء](/ar/concepts/multi-agent)، [MiniMax](/ar/providers/minimax)، [OpenAI](/ar/providers/openai). @@ -2459,18 +2458,18 @@ x-i18n: - نعم. يشحن OpenClaw بعض الاختصارات الافتراضية (ولا تُطبَّق إلا عندما يكون النموذج موجودًا في `agents.defaults.models`): + نعم. يوفّر OpenClaw بعض الأسماء المختصرة الافتراضية (ولا تُطبَّق إلا عندما يكون النموذج موجودًا في `agents.defaults.models`): - - `opus` → `anthropic/claude-opus-4-6` - - `sonnet` → `anthropic/claude-sonnet-4-6` - - `gpt` → `openai/gpt-5.4` - - `gpt-mini` → `openai/gpt-5.4-mini` - - `gpt-nano` → `openai/gpt-5.4-nano` - - `gemini` → `google/gemini-3.1-pro-preview` - - `gemini-flash` → `google/gemini-3-flash-preview` - - `gemini-flash-lite` → `google/gemini-3.1-flash-lite-preview` + - `opus` ← `anthropic/claude-opus-4-6` + - `sonnet` ← `anthropic/claude-sonnet-4-6` + - `gpt` ← `openai/gpt-5.4` + - `gpt-mini` ← `openai/gpt-5.4-mini` + - `gpt-nano` ← `openai/gpt-5.4-nano` + - `gemini` ← `google/gemini-3.1-pro-preview` + - `gemini-flash` ← `google/gemini-3-flash-preview` + - `gemini-flash-lite` ← `google/gemini-3.1-flash-lite-preview` - إذا ضبطت اسمًا مستعارًا خاصًا بك بالاسم نفسه، فقيمتك هي التي تسود. + إذا ضبطت اسمًا مستعارًا خاصًا بك يحمل الاسم نفسه، فستفوز قيمتك. @@ -2492,12 +2491,12 @@ x-i18n: } ``` - بعد ذلك، يحل `/model sonnet` (أو `/` عندما يكون مدعومًا) إلى معرّف ذلك النموذج. + وبعد ذلك، فإن `/model sonnet` (أو `/` عند وجود دعم) يُحل إلى معرّف ذلك النموذج. - - OpenRouter (الدفع حسب الرمز؛ نماذج كثيرة): + + OpenRouter (الدفع حسب الرمز؛ نماذج عديدة): ```json5 { @@ -2525,11 +2524,11 @@ x-i18n: } ``` - إذا أشرت إلى `provider/model` لكن مفتاح المزوّد المطلوب مفقود، فستحصل على خطأ مصادقة وقت التشغيل (مثل `No API key found for provider "zai"`). + إذا أشرت إلى `provider/model` لكن مفتاح الموفّر المطلوب مفقود، فستحصل على خطأ مصادقة في وقت التشغيل (مثل `No API key found for provider "zai"`). - **لم يُعثر على مفتاح API للمزوّد بعد إضافة وكيل جديد** + **لم يتم العثور على مفتاح API للموفّر بعد إضافة وكيل جديد** - يعني هذا عادةً أن **الوكيل الجديد** لديه مخزن مصادقة فارغ. المصادقة تكون لكل وكيل + يعني هذا عادةً أن **الوكلاء الجدد** لديهم مخزن مصادقة فارغ. فالمصادقة تكون لكل وكيل وتُخزَّن في: ``` @@ -2541,117 +2540,117 @@ x-i18n: - شغّل `openclaw agents add ` وقم بتكوين المصادقة أثناء المعالج. - أو انسخ `auth-profiles.json` من `agentDir` الخاص بالوكيل الرئيسي إلى `agentDir` الخاص بالوكيل الجديد. - **لا** تعِد استخدام `agentDir` عبر وكلاء متعددين؛ فهذا يسبب تصادمات في المصادقة/الجلسات. + **لا** تعِد استخدام `agentDir` عبر الوكلاء؛ فهذا يسبب تصادمات في المصادقة/الجلسات. -## التحويل التلقائي بين النماذج و"فشلت كل النماذج" +## التحويل الاحتياطي للنموذج و"فشلت جميع النماذج" - - يحدث التحويل التلقائي عند الفشل على مرحلتين: + + يحدث التحويل الاحتياطي على مرحلتين: - 1. **تدوير ملفات تعريف المصادقة** داخل المزوّد نفسه. - 2. **النموذج الاحتياطي** إلى النموذج التالي في `agents.defaults.model.fallbacks`. + 1. **تدوير ملف المصادقة** داخل الموفّر نفسه. + 2. **الرجوع إلى النموذج** التالي في `agents.defaults.model.fallbacks`. - تُطبَّق فترات تهدئة على ملفات التعريف الفاشلة (تراجع أسي)، بحيث يمكن لـ OpenClaw الاستمرار في الرد حتى عندما يكون أحد المزوّدين مقيّدًا بالمعدل أو متعطلًا مؤقتًا. + تُطبّق فترات تهدئة على الملفات التي تفشل (تراجع أُسّي)، بحيث يمكن لـ OpenClaw مواصلة الرد حتى عندما يكون الموفّر مقيّدًا بالمعدل أو يفشل مؤقتًا. - تتضمن سلة حدود المعدل أكثر من مجرد استجابات `429` العادية. إذ تتعامل OpenClaw - أيضًا مع رسائل مثل `Too many concurrent requests`، + تشمل سلة حد المعدل أكثر من مجرد استجابات `429` العادية. يعامل OpenClaw + أيضًا رسائل مثل `Too many concurrent requests`، و`ThrottlingException`، و`concurrency limit reached`، و`workers_ai ... quota limit exceeded`، و`resource exhausted`، وحدود - نوافذ الاستخدام الدورية (`weekly/monthly limit reached`) على أنها - حدود معدلات تستحق التحويل التلقائي عند الفشل. + نوافذ الاستخدام الدورية (`weekly/monthly limit reached`) على أنها حدود + معدل تستحق التحويل الاحتياطي. بعض الاستجابات التي تبدو متعلقة بالفوترة ليست `402`، وبعض استجابات HTTP `402` - تبقى أيضًا ضمن سلة الحالات المؤقتة. وإذا أعاد مزوّد - نص فوترة صريحًا على `401` أو `403`، فلا يزال بإمكان OpenClaw إبقاؤه في - مسار الفوترة، لكن مطابِقات النصوص الخاصة بالمزوّد تبقى محصورة في - المزوّد الذي يملكها (مثل OpenRouter `Key limit exceeded`). وإذا بدت رسالة `402` - بدلًا من ذلك كحد قابل لإعادة المحاولة متعلق بنافذة استخدام أو + تبقى أيضًا ضمن تلك السلة المؤقتة. وإذا أعاد موفّر ما + نصًا صريحًا متعلقًا بالفوترة على `401` أو `403`، فلا يزال بإمكان OpenClaw إبقاؤه في + مسار الفوترة، لكن مطابِقات النصوص الخاصة بكل موفّر تبقى محصورة في + الموفّر الذي يملكها (على سبيل المثال OpenRouter `Key limit exceeded`). وإذا بدا نص + رسالة `402` بدلًا من ذلك كأنه متعلق بنافذة استخدام قابلة لإعادة المحاولة أو بحد إنفاق مؤسسة/مساحة عمل (`daily limit reached, resets tomorrow`، - `organization spending limit exceeded`)، فإن OpenClaw تتعامل معها على أنها - `rate_limit`، وليس تعطيل فوترة طويل الأمد. + `organization spending limit exceeded`) فإن OpenClaw يتعامل معه على أنه + `rate_limit` وليس تعطيل فوترة طويلًا. - تختلف أخطاء تجاوز السياق عن ذلك: فالتواقيع مثل + تختلف أخطاء تجاوز السياق: فالتواقيع مثل `request_too_large`، و`input exceeds the maximum number of tokens`، و`input token count exceeds the maximum number of input tokens`، و`input is too long for the model`، أو `ollama error: context length - exceeded` تبقى على مسار Compaction/إعادة المحاولة بدلًا من - التقدم إلى النموذج الاحتياطي. + exceeded` تبقى على مسار Compaction/إعادة المحاولة بدلًا من التقدّم إلى + الرجوع إلى نموذج احتياطي. - النصوص العامة لأخطاء الخادم أضيق عمدًا من "أي شيء يحتوي على - unknown/error". إذ تتعامل OpenClaw مع الأشكال العابرة الخاصة بالمزوّد - مثل صيغة Anthropic المجردة `An unknown error occurred`، وصيغة OpenRouter المجردة - `Provider returned error`، وأخطاء سبب الإيقاف مثل `Unhandled stop reason: - error`، وحمولات JSON `api_error` ذات نصوص الخادم العابرة + إن نص الخطأ العام الخاص بالخادم أضيق عمدًا من "أي شيء يحتوي على + unknown/error". يعامل OpenClaw بالفعل الأشكال المؤقتة المحصورة بالموفّر + مثل رسالة Anthropic المجردة `An unknown error occurred`، ورسالة OpenRouter المجردة + `Provider returned error`، وأخطاء سبب التوقف مثل `Unhandled stop reason: + error`، وحمولات JSON `api_error` ذات النص المؤقت الخاص بالخادم (`internal server error`، و`unknown error, 520`، و`upstream error`، و`backend - error`)، وأخطاء انشغال المزوّد مثل `ModelNotReadyException` على أنها - إشارات مهلة/تحميل زائد تستحق التحويل التلقائي عند الفشل عندما يتطابق - سياق المزوّد. - أما نص الرجوع الاحتياطي الداخلي العام مثل `LLM request failed with an unknown - error.` فيبقى محافظًا ولا يفعّل التحويل إلى نموذج احتياطي بمفرده. + error`) وأخطاء انشغال الموفّر مثل `ModelNotReadyException` على أنها + إشارات تستحق التحويل الاحتياطي بسبب انتهاء المهلة/التحميل الزائد عندما + يتطابق سياق الموفّر. + أما نص الرجوع الداخلي العام مثل `LLM request failed with an unknown + error.` فيبقى متحفظًا ولا يؤدي بمفرده إلى الرجوع إلى نموذج احتياطي. - - يعني هذا أن النظام حاول استخدام معرّف ملف تعريف المصادقة `anthropic:default`، لكنه لم يتمكن من العثور على بيانات اعتماد له في مخزن المصادقة المتوقع. + + يعني هذا أن النظام حاول استخدام معرّف ملف المصادقة `anthropic:default`، لكنه لم يتمكن من العثور على بيانات اعتماد له في مخزن المصادقة المتوقع. - **قائمة تحقق للإصلاح:** + **قائمة التحقق من الإصلاح:** - - **أكد مكان وجود ملفات تعريف المصادقة** (المسارات الجديدة مقابل القديمة) + - **أكد مكان وجود ملفات المصادقة** (المسارات الجديدة مقابل القديمة) - الحالي: `~/.openclaw/agents//agent/auth-profiles.json` - - القديم: `~/.openclaw/agent/*` (يُرحَّل بواسطة `openclaw doctor`) + - القديم: `~/.openclaw/agent/*` (يُرحّل بواسطة `openclaw doctor`) - **أكد أن متغير البيئة لديك محمّل بواسطة Gateway** - - إذا ضبطت `ANTHROPIC_API_KEY` في صدفتك لكنك تشغّل Gateway عبر systemd/launchd، فقد لا يرثه. ضعه في `~/.openclaw/.env` أو فعّل `env.shellEnv`. + - إذا كنت قد ضبطت `ANTHROPIC_API_KEY` في shell لكنك تشغّل Gateway عبر systemd/launchd، فقد لا ترثه. ضعه في `~/.openclaw/.env` أو فعّل `env.shellEnv`. - **تأكد من أنك تعدّل الوكيل الصحيح** - - تعني إعدادات الوكلاء المتعددين أنه قد تكون هناك عدة ملفات `auth-profiles.json`. + - تعني إعدادات تعدد الوكلاء أنه قد تكون هناك عدة ملفات `auth-profiles.json`. - **تحقق سريعًا من حالة النموذج/المصادقة** - - استخدم `openclaw models status` لرؤية النماذج المكوّنة وما إذا كان المزوّدون مصادقين. + - استخدم `openclaw models status` لمعرفة النماذج المكوّنة وما إذا كان الموفّرون قد تمت مصادقتهم. - **قائمة تحقق للإصلاح لعبارة "No credentials found for profile anthropic"** + **قائمة التحقق من الإصلاح لعبارة "No credentials found for profile anthropic"** - يعني هذا أن التشغيل مثبّت على ملف تعريف مصادقة Anthropic، لكن Gateway - لا تستطيع العثور عليه في مخزن المصادقة لديها. + يعني هذا أن التشغيل مثبت على ملف مصادقة Anthropic، لكن Gateway + لا تستطيع العثور عليه في مخزن المصادقة الخاص بها. - **استخدم Claude CLI** - شغّل `openclaw models auth login --provider anthropic --method cli --set-default` على مضيف Gateway. - **إذا كنت تريد استخدام مفتاح API بدلًا من ذلك** - ضع `ANTHROPIC_API_KEY` في `~/.openclaw/.env` على **مضيف Gateway**. - - امسح أي ترتيب مثبّت يفرض ملف تعريف مفقودًا: + - أزل أي ترتيب مثبت يفرض ملفًا مفقودًا: ```bash openclaw models auth order clear --provider anthropic ``` - **أكد أنك تشغّل الأوامر على مضيف Gateway** - - في الوضع البعيد، تعيش ملفات تعريف المصادقة على جهاز Gateway، وليس على حاسوبك المحمول. + - في الوضع البعيد، تعيش ملفات المصادقة على جهاز Gateway، وليس على حاسوبك المحمول. - - إذا كان تكوين النموذج لديك يتضمن Google Gemini كنموذج احتياطي (أو إذا بدّلت إلى اختصار Gemini)، فستحاول OpenClaw استخدامه أثناء التحويل إلى النموذج الاحتياطي. وإذا لم تكن قد كوّنت بيانات اعتماد Google، فسترى `No API key found for provider "google"`. + + إذا كان إعداد النموذج لديك يتضمن Google Gemini كنموذج احتياطي (أو إذا كنت قد بدّلت إلى اسم Gemini مختصر)، فسيحاول OpenClaw استخدامه أثناء الرجوع إلى نموذج احتياطي. وإذا لم تكن قد قمت بتكوين بيانات اعتماد Google، فسترى `No API key found for provider "google"`. - الحل: إما أن توفّر مصادقة Google، أو تزيل/تتجنب نماذج Google في `agents.defaults.model.fallbacks` / الأسماء المستعارة حتى لا يتجه التحويل الاحتياطي إليها. + الحل: إما أن توفّر مصادقة Google، أو أن تزيل/تتجنب نماذج Google في `agents.defaults.model.fallbacks` / الأسماء المستعارة حتى لا يوجّه الرجوع إليها. **LLM request rejected: thinking signature required (Google Antigravity)** - السبب: يحتوي سجل الجلسة على **كتل thinking بلا تواقيع** (غالبًا من - تدفق متوقف/جزئي). يتطلب Google Antigravity وجود تواقيع لكتل thinking. + السبب: يحتوي سجل الجلسة على **كتل thinking من دون تواقيع** (وغالبًا يكون ذلك من + بث متوقف/جزئي). تتطلب Google Antigravity تواقيع لكتل thinking. - الحل: تقوم OpenClaw الآن بإزالة كتل thinking غير الموقّعة من Google Antigravity Claude. وإذا استمرت المشكلة في الظهور، فابدأ **جلسة جديدة** أو اضبط `/thinking off` لهذا الوكيل. + الحل: يقوم OpenClaw الآن بإزالة كتل thinking غير الموقعة لـ Google Antigravity Claude. وإذا استمرت في الظهور، فابدأ **جلسة جديدة** أو اضبط `/thinking off` لذلك الوكيل. -## ملفات تعريف المصادقة: ما هي وكيفية إدارتها +## ملفات المصادقة: ما هي وكيفية إدارتها ذو صلة: [/concepts/oauth](/ar/concepts/oauth) (تدفقات OAuth، وتخزين الرموز المميزة، وأنماط الحسابات المتعددة) - - ملف تعريف المصادقة هو سجل بيانات اعتماد مسمّى (OAuth أو مفتاح API) مرتبط بمزوّد. تعيش ملفات التعريف في: + + ملف المصادقة هو سجل بيانات اعتماد مسمّى (OAuth أو مفتاح API) مرتبط بموفّر. وتوجد الملفات في: ``` ~/.openclaw/agents//agent/auth-profiles.json @@ -2659,41 +2658,41 @@ x-i18n: - - تستخدم OpenClaw معرّفات مسبوقة بالمزوّد مثل: + + يستخدم OpenClaw معرّفات مسبوقة بالموفّر مثل: - - `anthropic:default` (شائع عند عدم وجود هوية بريد إلكتروني) + - `anthropic:default` (شائع عندما لا توجد هوية بريد إلكتروني) - `anthropic:` لهويات OAuth - - المعرّفات المخصصة التي تختارها (مثل `anthropic:work`) + - معرّفات مخصصة تختارها أنت (مثل `anthropic:work`) - - نعم. يدعم التكوين بيانات وصفية اختيارية لملفات التعريف وترتيبًا لكل مزوّد (`auth.order.`). وهذا **لا** يخزن الأسرار؛ بل يربط المعرّفات بالمزوّد/الوضع ويضبط ترتيب التدوير. + + نعم. تدعم الإعدادات بيانات وصفية اختيارية للملفات وترتيبًا لكل موفّر (`auth.order.`). هذا **لا** يخزن الأسرار؛ بل يربط المعرّفات بالموفّر/الوضع ويضبط ترتيب التدوير. - قد تتخطى OpenClaw مؤقتًا ملف تعريف إذا كان في **فترة تهدئة** قصيرة (حدود معدل/مهل/إخفاقات مصادقة) أو في حالة **تعطيل** أطول (فوترة/رصيد غير كافٍ). لفحص هذا، شغّل `openclaw models status --json` وتحقق من `auth.unusableProfiles`. الضبط: `auth.cooldowns.billingBackoffHours*`. + قد يتخطى OpenClaw ملفًا ما مؤقتًا إذا كان ضمن **فترة تهدئة** قصيرة (حدود معدل/انتهاء مهلة/إخفاقات مصادقة) أو ضمن حالة **تعطيل** أطول (فوترة/رصيد غير كافٍ). ولمعاينة هذا، شغّل `openclaw models status --json` وتحقق من `auth.unusableProfiles`. الضبط: `auth.cooldowns.billingBackoffHours*`. - يمكن أن تكون فترات التهدئة الخاصة بحدود المعدل محصورة بنموذج معين. فقد يكون ملف تعريف في فترة تهدئة - لنموذج واحد بينما يظل قابلًا للاستخدام لنموذج شقيق على المزوّد نفسه، - في حين أن نوافذ الفوترة/التعطيل ما تزال تحجب ملف التعريف كله. + يمكن أن تكون فترات التهدئة الخاصة بحد المعدل محصورة بنموذج معيّن. فالملف الذي يكون في فترة تهدئة + لنموذج واحد قد يظل صالحًا لنموذج شقيق على الموفّر نفسه، + بينما تظل نوافذ الفوترة/التعطيل تمنع الملف كله. - يمكنك أيضًا ضبط تجاوز ترتيب **لكل وكيل** (مخزن في `auth-state.json` الخاص بذلك الوكيل) عبر CLI: + يمكنك أيضًا ضبط ترتيب تجاوز **لكل وكيل** (مخزّن في `auth-state.json` لذلك الوكيل) عبر CLI: ```bash - # تكون القيمة الافتراضية هي الوكيل الافتراضي المكوّن (احذف --agent) + # يستخدم الوكيل الافتراضي المكوَّن افتراضيًا (احذف --agent) openclaw models auth order get --provider anthropic - # ثبّت التدوير على ملف تعريف واحد (جرّب هذا فقط) + # ثبّت التدوير على ملف واحد (جرّب هذا الملف فقط) openclaw models auth order set --provider anthropic anthropic:default - # أو اضبط ترتيبًا صريحًا (رجوع احتياطي داخل المزوّد) + # أو اضبط ترتيبًا صريحًا (رجوع داخل الموفّر) openclaw models auth order set --provider anthropic anthropic:work anthropic:default # امسح التجاوز (الرجوع إلى config auth.order / round-robin) openclaw models auth order clear --provider anthropic ``` - لاستهداف وكيل محدد: + ولاستهداف وكيل معين: ```bash openclaw models auth order set --provider anthropic --agent main anthropic:default @@ -2705,27 +2704,27 @@ x-i18n: openclaw models status --probe ``` - إذا حُذف ملف تعريف مخزن من الترتيب الصريح، فسيبلغ probe - عن `excluded_by_auth_order` لذلك الملف بدلًا من تجربته بصمت. + إذا تم حذف ملف مخزن من الترتيب الصريح، فإن probe يعرض + `excluded_by_auth_order` لذلك الملف بدلًا من تجربته بصمت. - يدعم OpenClaw كليهما: + يدعم OpenClaw كلا الأمرين: - - **OAuth** يستفيد غالبًا من وصول الاشتراك (عند الاقتضاء). + - **OAuth** يستفيد غالبًا من وصول الاشتراك (حيثما كان ذلك منطبقًا). - **مفاتيح API** تستخدم فوترة الدفع حسب الرمز. - يدعم المعالج صراحةً Anthropic Claude CLI، وOpenAI Codex OAuth، ومفاتيح API. + يدعم المعالج صراحةً Anthropic Claude CLI وOpenAI Codex OAuth ومفاتيح API. -## Gateway: المنافذ، و"قيد التشغيل بالفعل"، والوضع البعيد +## Gateway: المنافذ و"قيد التشغيل بالفعل" والوضع البعيد - يتحكم `gateway.port` في المنفذ المتعدد الوحيد لـ WebSocket + HTTP (Control UI، وhooks، وما إلى ذلك). + يتحكم `gateway.port` في المنفذ المفرد الموحّد لكل من WebSocket + HTTP (Control UI، وhooks، وما إلى ذلك). ترتيب الأولوية: @@ -2735,19 +2734,19 @@ x-i18n: - - لأن "running" هو منظور **المشرف** (launchd/systemd/schtasks). أما RPC probe فهو قيام CLI فعليًا بالاتصال بـ Gateway WebSocket واستدعاء `status`. + + لأن "running" هو عرض **المشرف** (launchd/systemd/schtasks). أما Connectivity probe فهو CLI الذي يتصل فعليًا بـ Gateway WebSocket. - استخدم `openclaw gateway status` وصدّق هذه الأسطر: + استخدم `openclaw gateway status` وثق بهذه الأسطر: - `Probe target:` (عنوان URL الذي استخدمه probe فعليًا) - - `Listening:` (ما هو مربوط فعليًا على المنفذ) - - `Last gateway error:` (السبب الجذري الشائع عندما تكون العملية حية لكن المنفذ لا يستمع) + - `Listening:` (ما هو مربوط بالفعل على المنفذ) + - `Last gateway error:` (السبب الجذري الشائع عندما تكون العملية حيّة لكن المنفذ لا يستمع) - أنت تعدّل ملف تكوين واحدًا بينما تقوم الخدمة بتشغيل ملف آخر (غالبًا بسبب عدم تطابق `--profile` / `OPENCLAW_STATE_DIR`). + أنت تعدّل ملف إعدادات واحدًا بينما تعمل الخدمة على ملف آخر (وغالبًا يكون ذلك بسبب عدم تطابق `--profile` / `OPENCLAW_STATE_DIR`). الحل: @@ -2755,19 +2754,19 @@ x-i18n: openclaw gateway install --force ``` - شغّل ذلك من `--profile` / البيئة نفسها التي تريد أن تستخدمها الخدمة. + شغّل ذلك من البيئة/قيمة `--profile` نفسها التي تريد أن تستخدمها الخدمة. - - يفرض OpenClaw قفلًا في وقت التشغيل من خلال ربط مستمع WebSocket فورًا عند بدء التشغيل (الافتراضي `ws://127.0.0.1:18789`). وإذا فشل الربط بسبب `EADDRINUSE`، فإنه يطرح `GatewayLockError` مشيرًا إلى أن نسخة أخرى تستمع بالفعل. + + يفرض OpenClaw قفل وقت تشغيل عبر ربط مستمع WebSocket فورًا عند بدء التشغيل (الافتراضي `ws://127.0.0.1:18789`). وإذا فشل الربط مع `EADDRINUSE`، فإنه يرمي `GatewayLockError` مشيرًا إلى أن نسخة أخرى تستمع بالفعل. - الحل: أوقف النسخة الأخرى، أو حرّر المنفذ، أو شغّل باستخدام `openclaw gateway --port `. + الحل: أوقف النسخة الأخرى، أو حرر المنفذ، أو شغّل باستخدام `openclaw gateway --port `. - اضبط `gateway.mode: "remote"` ووجّه إلى عنوان URL بعيد لـ WebSocket، مع بيانات اعتماد بعيدة shared-secret اختيارية: + اضبط `gateway.mode: "remote"` ووجّه إلى عنوان URL بعيد لـ WebSocket، مع إمكانية إضافة بيانات اعتماد بعيدة من نوع shared-secret: ```json5 { @@ -2784,59 +2783,59 @@ x-i18n: ملاحظات: - - لا يبدأ `openclaw gateway` إلا عندما تكون `gateway.mode` مساوية لـ `local` (أو عند تمرير علم التجاوز). - - يراقب تطبيق macOS ملف التكوين ويبدّل الأوضاع مباشرةً عند تغير هذه القيم. - - إن `gateway.remote.token` / `.password` هي بيانات اعتماد بعيدة على جانب العميل فقط؛ ولا تمكّن مصادقة Gateway المحلية بمفردها. + - لا يبدأ `openclaw gateway` إلا عندما تكون `gateway.mode` هي `local` (أو إذا مرّرت علامة تجاوز). + - يراقب تطبيق macOS ملف الإعدادات ويبدّل الأوضاع مباشرةً عند تغيّر هذه القيم. + - إن `gateway.remote.token` / `.password` هما بيانات اعتماد بعيدة من جهة العميل فقط؛ ولا يفعّلان مصادقة Gateway المحلية بمفردهما. - + لا يتطابق مسار مصادقة Gateway لديك مع طريقة المصادقة في واجهة المستخدم. حقائق (من الشيفرة): - - تحتفظ Control UI بالرمز المميز في `sessionStorage` لجلسة علامة تبويب المتصفح الحالية وعنوان URL المحدد لـ Gateway، لذلك تستمر تحديثات علامة التبويب نفسها في العمل من دون استعادة استمرارية رمز localStorage طويلة الأمد. - - عند `AUTH_TOKEN_MISMATCH`، يمكن للعملاء الموثوقين محاولة إعادة واحدة محدودة باستخدام رمز جهاز مخزن مؤقتًا عندما تعيد Gateway تلميحات إعادة المحاولة (`canRetryWithDeviceToken=true`, `recommendedNextStep=retry_with_device_token`). - - تعيد إعادة المحاولة بهذا الرمز المخزن الآن استخدام النطاقات المعتمدة المخزنة مع رمز الجهاز. أما مستدعيات `deviceToken` الصريحة / `scopes` الصريحة فتحتفظ بمجموعة النطاقات المطلوبة بدلًا من وراثة النطاقات المخزنة. - - خارج مسار إعادة المحاولة هذا، يكون ترتيب أولوية مصادقة الاتصال هو: رمز/كلمة مرور مشتركان صريحان أولًا، ثم `deviceToken` صريح، ثم رمز جهاز مخزن، ثم رمز bootstrap. - - تكون فحوصات نطاق رمز bootstrap مسبوقة بالدور. ولا تلبّي قائمة السماح المضمّنة لمشغلي bootstrap سوى طلبات المشغل؛ أما أدوار node أو غيرها من الأدوار غير المشغِّلة فما تزال تحتاج إلى نطاقات تحت بادئة دورها الخاصة. + - تحتفظ Control UI بالرمز المميز في `sessionStorage` لجلسة علامة التبويب الحالية وعنوان URL المحدد لـ Gateway، لذا تستمر عمليات التحديث داخل علامة التبويب نفسها في العمل من دون استعادة استمرارية تخزين رمز طويل الأمد في localStorage. + - عند `AUTH_TOKEN_MISMATCH`، يمكن للعملاء الموثوقين محاولة إعادة محاولة واحدة محدودة باستخدام رمز جهاز مخزّن عندما تعيد Gateway تلميحات إعادة محاولة (`canRetryWithDeviceToken=true`, `recommendedNextStep=retry_with_device_token`). + - تستخدم إعادة المحاولة بالرمز المخزّن الآن النطاقات المعتمدة المخزّنة مع رمز الجهاز. أما المستدعون الصريحون عبر `deviceToken` / `scopes` الصريحة فيحتفظون بمجموعة النطاقات المطلوبة الخاصة بهم بدلًا من وراثة النطاقات المخزّنة. + - خارج مسار إعادة المحاولة هذا، يكون ترتيب أولوية مصادقة الاتصال على النحو التالي: shared token/password الصريح أولًا، ثم `deviceToken` الصريح، ثم رمز الجهاز المخزّن، ثم bootstrap token. + - تكون فحوصات نطاق bootstrap token مسبوقة بالدور. فقائمة السماح المضمنة الخاصة بمشغل bootstrap تلبّي فقط طلبات المشغل؛ أما الأدوار الأخرى مثل node أو غيرها من الأدوار غير الخاصة بالمشغل فلا تزال تحتاج إلى نطاقات تحت بادئة الدور الخاصة بها. الحل: - - الأسرع: `openclaw dashboard` (يطبع + ينسخ عنوان URL الخاص بلوحة التحكم، ويحاول فتحه؛ ويعرض تلميح SSH إذا كان headless). + - الأسرع: `openclaw dashboard` (يطبع ويَنسخ عنوان URL للوحة التحكم، ويحاول فتحه؛ ويعرض تلميح SSH إذا كان الوضع headless). - إذا لم يكن لديك رمز مميز بعد: `openclaw doctor --generate-gateway-token`. - - إذا كان بعيدًا، فأنشئ نفقًا أولًا: `ssh -N -L 18789:127.0.0.1:18789 user@host` ثم افتح `http://127.0.0.1:18789/`. + - إذا كان بعيدًا، فأنشئ النفق أولًا: `ssh -N -L 18789:127.0.0.1:18789 user@host` ثم افتح `http://127.0.0.1:18789/`. - وضع shared-secret: اضبط `gateway.auth.token` / `OPENCLAW_GATEWAY_TOKEN` أو `gateway.auth.password` / `OPENCLAW_GATEWAY_PASSWORD`، ثم ألصق السر المطابق في إعدادات Control UI. - - وضع Tailscale Serve: تأكد من تمكين `gateway.auth.allowTailscale` وأنك تفتح عنوان URL الخاص بـ Serve، وليس عنوان loopback/tailnet خامًا يتجاوز ترويسات هوية Tailscale. - - وضع trusted-proxy: تأكد من أنك تمر عبر الوكيل غير loopback والمدرك للهوية والمكوّن، وليس عبر وكيل loopback على المضيف نفسه أو عنوان URL خام لـ Gateway. + - وضع Tailscale Serve: تأكد من أن `gateway.auth.allowTailscale` مفعّل وأنك تفتح عنوان Serve URL، وليس عنوان loopback/tailnet خامًا يتجاوز رؤوس هوية Tailscale. + - وضع trusted-proxy: تأكد من أنك تمر عبر الوكيل المدرك للهوية وغير loopback الذي تم تكوينه، وليس عبر وكيل loopback على المضيف نفسه أو عنوان URL الخام الخاص بـ Gateway. - إذا استمر عدم التطابق بعد إعادة المحاولة الواحدة، فقم بتدوير/إعادة اعتماد رمز الجهاز المقترن: - `openclaw devices list` - `openclaw devices rotate --device --role operator` - - إذا كانت مكالمة rotate تقول إنها رُفضت، فتحقق من أمرين: - - يمكن لجلسات الأجهزة المقترنة تدوير **جهازها الخاص فقط** ما لم تكن لديها أيضًا `operator.admin` + - إذا كان استدعاء التدوير هذا يقول إنه تم رفضه، فتحقق من شيئين: + - يمكن لجلسات الأجهزة المقترنة تدوير **جهازها الخاص فقط** ما لم يكن لديها أيضًا `operator.admin` - لا يمكن لقيم `--scope` الصريحة أن تتجاوز نطاقات المشغل الحالية لدى المستدعي - - ما زلت عالقًا؟ شغّل `openclaw status --all` واتبع [استكشاف الأخطاء وإصلاحها](/ar/gateway/troubleshooting). راجع [لوحة التحكم](/web/dashboard) لتفاصيل المصادقة. + - ما زلت عالقًا؟ شغّل `openclaw status --all` واتبع [استكشاف الأخطاء وإصلاحها](/ar/gateway/troubleshooting). راجع [لوحة التحكم](/web/dashboard) لمعرفة تفاصيل المصادقة. - - يختار ربط `tailnet` عنوان IP من Tailscale من واجهات الشبكة لديك (100.64.0.0/10). وإذا لم يكن الجهاز على Tailscale (أو كانت الواجهة متوقفة)، فلن يوجد شيء يمكن الربط إليه. + + يختار ربط `tailnet` عنوان IP من Tailscale من واجهات الشبكة لديك (100.64.0.0/10). وإذا لم يكن الجهاز على Tailscale (أو إذا كانت الواجهة متوقفة)، فلن يوجد شيء يمكن الربط عليه. الحل: - - شغّل Tailscale على ذلك المضيف (حتى يحصل على عنوان 100.x)، أو + - ابدأ Tailscale على ذلك المضيف (حتى يحصل على عنوان 100.x)، أو - بدّل إلى `gateway.bind: "loopback"` / `"lan"`. - ملاحظة: `tailnet` صريح. يفضّل `auto` ‏loopback؛ استخدم `gateway.bind: "tailnet"` عندما تريد ربطًا خاصًا بـ tailnet فقط. + ملاحظة: `tailnet` صريح. يفضّل `auto` وضع loopback؛ استخدم `gateway.bind: "tailnet"` عندما تريد ربطًا مخصصًا لـ tailnet فقط. - - عادةً لا - يمكن لـ Gateway واحدة تشغيل عدة قنوات مراسلة ووكلاء. استخدم Gateways متعددة فقط عندما تحتاج إلى التكرار (مثل: روبوت إنقاذ) أو إلى عزل صارم. + + عادةً لا - إذ يمكن لـ Gateway واحدة تشغيل قنوات مراسلة ووكلاء متعددين. استخدم Gateways متعددة فقط عندما تحتاج إلى ازدواجية (مثل: روبوت إنقاذ) أو عزل صارم. نعم، لكن يجب عليك عزل: - - `OPENCLAW_CONFIG_PATH` (تكوين لكل نسخة) + - `OPENCLAW_CONFIG_PATH` (إعدادات لكل نسخة) - `OPENCLAW_STATE_DIR` (حالة لكل نسخة) - `agents.defaults.workspace` (عزل مساحة العمل) - `gateway.port` (منافذ فريدة) @@ -2844,32 +2843,32 @@ x-i18n: إعداد سريع (موصى به): - استخدم `openclaw --profile ...` لكل نسخة (ينشئ تلقائيًا `~/.openclaw-`). - - اضبط `gateway.port` فريدًا في تكوين كل ملف تعريف (أو مرّر `--port` للتشغيل اليدوي). + - اضبط `gateway.port` فريدًا في إعدادات كل ملف تعريف (أو مرّر `--port` للتشغيل اليدوي). - ثبّت خدمة لكل ملف تعريف: `openclaw --profile gateway install`. - تضيف ملفات التعريف أيضًا لاحقات إلى أسماء الخدمات (`ai.openclaw.`؛ والإرث `com.openclaw.*`، و`openclaw-gateway-.service`، و`OpenClaw Gateway ()`). + كما تضيف ملفات التعريف لاحقات إلى أسماء الخدمات (`ai.openclaw.`؛ والأنماط القديمة `com.openclaw.*` و`openclaw-gateway-.service` و`OpenClaw Gateway ()`). الدليل الكامل: [Gateways متعددة](/ar/gateway/multiple-gateways). - - إن Gateway هي **خادم WebSocket**، وهي تتوقع أن تكون أول رسالة على الإطلاق - إطار `connect`. وإذا تلقت أي شيء آخر، فإنها تغلق الاتصال - باستخدام **الرمز 1008** (مخالفة للسياسة). + + إن Gateway هو **خادم WebSocket**، ويتوقع أن تكون أول رسالة + على الإطلاق هي إطار `connect`. وإذا استقبل أي شيء آخر، فإنه يغلق الاتصال + بالرمز **1008** (مخالفة للسياسة). الأسباب الشائعة: - - فتحت عنوان URL لـ **HTTP** في متصفح (`http://...`) بدلًا من عميل WS. + - فتحت عنوان URL الخاص بـ **HTTP** في متصفح (`http://...`) بدلًا من عميل WS. - استخدمت المنفذ أو المسار الخطأ. - - قام وكيل أو نفق بإزالة ترويسات المصادقة أو أرسل طلبًا ليس خاصًا بـ Gateway. + - قام وكيل أو نفق بإزالة رؤوس المصادقة أو أرسل طلبًا ليس طلب Gateway. - إصلاحات سريعة: + حلول سريعة: - 1. استخدم عنوان URL لـ WS: `ws://:18789` (أو `wss://...` إذا كان HTTPS). + 1. استخدم عنوان WS URL: `ws://:18789` (أو `wss://...` إذا كان HTTPS). 2. لا تفتح منفذ WS في علامة تبويب متصفح عادية. - 3. إذا كانت المصادقة مفعلة، فضمّن الرمز المميز/كلمة المرور في إطار `connect`. + 3. إذا كانت المصادقة مفعلة، فأدرج الرمز المميز/كلمة المرور في إطار `connect`. - إذا كنت تستخدم CLI أو TUI، فيجب أن يبدو عنوان URL كما يلي: + إذا كنت تستخدم CLI أو TUI، فيجب أن يبدو عنوان URL بالشكل التالي: ``` openclaw tui --url ws://:18789 --token @@ -2890,9 +2889,9 @@ x-i18n: /tmp/openclaw/openclaw-YYYY-MM-DD.log ``` - يمكنك ضبط مسار ثابت عبر `logging.file`. ويُتحكم في مستوى سجل الملف عبر `logging.level`. أما درجة تفصيل وحدة التحكم فتُتحكم فيها عبر `--verbose` و`logging.consoleLevel`. + يمكنك ضبط مسار ثابت عبر `logging.file`. ويتم التحكم في مستوى سجل الملفات عبر `logging.level`. أما درجة تفصيل وحدة التحكم فيتحكم بها `--verbose` و`logging.consoleLevel`. - أسرع طريقة لتتبّع السجل: + أسرع طريقة لعرض آخر السجلات: ```bash openclaw logs --follow @@ -2900,28 +2899,28 @@ x-i18n: سجلات الخدمة/المشرف (عندما تعمل Gateway عبر launchd/systemd): - - macOS: ‏`$OPENCLAW_STATE_DIR/logs/gateway.log` و`gateway.err.log` (الافتراضي: `~/.openclaw/logs/...`؛ وتستخدم ملفات التعريف `~/.openclaw-/logs/...`) - - Linux: ‏`journalctl --user -u openclaw-gateway[-].service -n 200 --no-pager` - - Windows: ‏`schtasks /Query /TN "OpenClaw Gateway ()" /V /FO LIST` + - macOS: `$OPENCLAW_STATE_DIR/logs/gateway.log` و`gateway.err.log` (الافتراضي: `~/.openclaw/logs/...`؛ وتستخدم ملفات التعريف `~/.openclaw-/logs/...`) + - Linux: `journalctl --user -u openclaw-gateway[-].service -n 200 --no-pager` + - Windows: `schtasks /Query /TN "OpenClaw Gateway ()" /V /FO LIST` راجع [استكشاف الأخطاء وإصلاحها](/ar/gateway/troubleshooting) للمزيد. - استخدم أدوات Gateway المساعدة: + استخدم أدوات المساعدة الخاصة بـ gateway: ```bash openclaw gateway status openclaw gateway restart ``` - إذا كنت تشغّل Gateway يدويًا، فإن `openclaw gateway --force` يمكنه استعادة المنفذ. راجع [Gateway](/ar/gateway). + إذا كنت تشغّل Gateway يدويًا، فيمكن لـ `openclaw gateway --force` استعادة المنفذ. راجع [Gateway](/ar/gateway). - هناك **وضعان للتثبيت على Windows**: + توجد **طريقتا تثبيت على Windows**: **1) WSL2 (موصى به):** تعمل Gateway داخل Linux. @@ -2933,13 +2932,13 @@ x-i18n: openclaw gateway restart ``` - إذا لم تكن قد ثبّت الخدمة مطلقًا، فابدأها في الواجهة الأمامية: + إذا لم تكن قد ثبّتت الخدمة مطلقًا، فابدأها في الواجهة الأمامية: ```bash openclaw gateway run ``` - **2) Windows الأصلي (غير موصى به):** تعمل Gateway مباشرةً في Windows. + **2) Windows الأصلي (غير موصى به):** تعمل Gateway مباشرة في Windows. افتح PowerShell وشغّل: @@ -2948,7 +2947,7 @@ x-i18n: openclaw gateway restart ``` - إذا كنت تشغّلها يدويًا (من دون خدمة)، فاستخدم: + إذا كنت تشغّله يدويًا (من دون خدمة)، فاستخدم: ```powershell openclaw gateway run @@ -2958,8 +2957,8 @@ x-i18n: - - ابدأ بمسح سريع للحالة الصحية: + + ابدأ بفحص سريع للصحة: ```bash openclaw status @@ -2970,36 +2969,36 @@ x-i18n: الأسباب الشائعة: - - لم تُحمَّل مصادقة النموذج على **مضيف Gateway** (تحقق من `models status`). - - يقف اقتران القناة/قائمة السماح في وجه الردود (تحقق من تكوين القناة + السجلات). + - لم يتم تحميل مصادقة النموذج على **مضيف Gateway** (تحقق من `models status`). + - يقود الاقتران/قائمة السماح الخاصة بالقناة إلى حظر الردود (تحقق من إعدادات القناة + السجلات). - WebChat/لوحة التحكم مفتوحة من دون الرمز المميز الصحيح. إذا كنت في الوضع البعيد، فتأكد من أن اتصال النفق/Tailscale قائم وأن Gateway WebSocket قابلة للوصول. - الوثائق: [القنوات](/ar/channels)، [استكشاف الأخطاء وإصلاحها](/ar/gateway/troubleshooting)، [الوصول عن بُعد](/ar/gateway/remote). + الوثائق: [القنوات](/ar/channels)، [استكشاف الأخطاء وإصلاحها](/ar/gateway/troubleshooting)، [الوصول البعيد](/ar/gateway/remote). - يعني هذا عادةً أن واجهة المستخدم فقدت اتصال WebSocket. تحقق من: + يعني هذا عادةً أن واجهة المستخدم فقدت اتصال WebSocket. تحقّق مما يلي: - 1. هل تعمل Gateway؟ `openclaw gateway status` + 1. هل Gateway تعمل؟ `openclaw gateway status` 2. هل Gateway سليمة؟ `openclaw status` - 3. هل تمتلك واجهة المستخدم الرمز المميز الصحيح؟ `openclaw dashboard` - 4. إذا كانت بعيدة، فهل وصلة النفق/Tailscale قائمة؟ + 3. هل تملك واجهة المستخدم الرمز المميز الصحيح؟ `openclaw dashboard` + 4. إذا كان الوضع بعيدًا، فهل رابط النفق/Tailscale قائم؟ - ثم تتبّع السجلات: + ثم اعرض آخر السجلات: ```bash openclaw logs --follow ``` - الوثائق: [لوحة التحكم](/web/dashboard)، [الوصول عن بُعد](/ar/gateway/remote)، [استكشاف الأخطاء وإصلاحها](/ar/gateway/troubleshooting). + الوثائق: [لوحة التحكم](/web/dashboard)، [الوصول البعيد](/ar/gateway/remote)، [استكشاف الأخطاء وإصلاحها](/ar/gateway/troubleshooting). - + ابدأ بالسجلات وحالة القناة: ```bash @@ -3009,17 +3008,17 @@ x-i18n: ثم طابق الخطأ: - - `BOT_COMMANDS_TOO_MUCH`: تحتوي قائمة Telegram على عدد كبير جدًا من الإدخالات. تقوم OpenClaw بالفعل بالاقتصاص إلى حد Telegram وتعيد المحاولة بعدد أقل من الأوامر، لكن بعض إدخالات القائمة ما تزال بحاجة إلى الإسقاط. قلّل أوامر Plugin/Skill/الأوامر المخصصة، أو عطّل `channels.telegram.commands.native` إذا لم تكن بحاجة إلى القائمة. - - `TypeError: fetch failed`، أو `Network request for 'setMyCommands' failed!`، أو أخطاء شبكة مشابهة: إذا كنت على VPS أو خلف وكيل، فتأكد من أن HTTPS الصادر مسموح وأن DNS يعمل لـ `api.telegram.org`. + - `BOT_COMMANDS_TOO_MUCH`: تحتوي قائمة Telegram على عدد كبير جدًا من الإدخالات. يقوم OpenClaw بالفعل بقصها إلى حد Telegram ثم يعيد المحاولة بعدد أقل من الأوامر، لكن بعض إدخالات القائمة ما تزال بحاجة إلى إزالة. قلّل من أوامر Plugin/Skill/الأوامر المخصصة، أو عطّل `channels.telegram.commands.native` إذا لم تكن بحاجة إلى القائمة. + - `TypeError: fetch failed` أو `Network request for 'setMyCommands' failed!` أو أخطاء شبكة مشابهة: إذا كنت على VPS أو خلف وكيل، فتأكد من أن HTTPS الصادر مسموح وأن DNS يعمل مع `api.telegram.org`. إذا كانت Gateway بعيدة، فتأكد من أنك تنظر إلى السجلات على مضيف Gateway. - الوثائق: [Telegram](/ar/channels/telegram)، [استكشاف أخطاء القنوات](/ar/channels/troubleshooting). + الوثائق: [Telegram](/ar/channels/telegram)، [استكشاف أخطاء القنوات وإصلاحها](/ar/channels/troubleshooting). - - أكد أولًا أن Gateway قابلة للوصول وأن الوكيل يمكنه التشغيل: + + تأكد أولًا من أن Gateway قابلة للوصول وأن الوكيل قادر على العمل: ```bash openclaw status @@ -3027,8 +3026,8 @@ x-i18n: openclaw logs --follow ``` - في TUI، استخدم `/status` لمعرفة الحالة الحالية. وإذا كنت تتوقع وصول الردود في قناة دردشة، - فتأكد من تمكين التسليم (`/deliver on`). + في TUI، استخدم `/status` لمعرفة الحالة الحالية. وإذا كنت تتوقع ردودًا في قناة دردشة، + فتأكد من أن التسليم مفعّل (`/deliver on`). الوثائق: [TUI](/web/tui)، [أوامر الشرطة المائلة](/ar/tools/slash-commands). @@ -3042,10 +3041,10 @@ x-i18n: openclaw gateway start ``` - يوقف/يبدأ هذا **الخدمة الخاضعة للإشراف** (launchd على macOS، وsystemd على Linux). - استخدم هذا عندما تعمل Gateway في الخلفية كعملية خدمية. + يؤدي هذا إلى إيقاف/بدء **الخدمة الخاضعة للإشراف** (launchd على macOS، وsystemd على Linux). + استخدم هذا عندما تعمل Gateway في الخلفية كعملية daemon. - إذا كنت تشغّلها في الواجهة الأمامية، فأوقفها باستخدام Ctrl-C، ثم: + إذا كنت تشغّله في الواجهة الأمامية، فأوقفه باستخدام Ctrl-C، ثم: ```bash openclaw gateway run @@ -3059,7 +3058,7 @@ x-i18n: - `openclaw gateway restart`: يعيد تشغيل **الخدمة الخلفية** (launchd/systemd). - `openclaw gateway`: يشغّل Gateway **في الواجهة الأمامية** لهذه الجلسة الطرفية. - إذا كنت قد ثبّت الخدمة، فاستخدم أوامر Gateway. واستخدم `openclaw gateway` عندما + إذا كنت قد ثبّت الخدمة، فاستخدم أوامر gateway. واستخدم `openclaw gateway` عندما تريد تشغيلًا لمرة واحدة في الواجهة الأمامية. @@ -3072,7 +3071,7 @@ x-i18n: ## الوسائط والمرفقات - + يجب أن تتضمن المرفقات الصادرة من الوكيل سطر `MEDIA:` (في سطر مستقل). راجع [إعداد مساعد OpenClaw](/ar/start/openclaw) و[إرسال الوكيل](/ar/tools/agent-send). الإرسال عبر CLI: @@ -3081,12 +3080,12 @@ x-i18n: openclaw message send --target +15555550123 --message "Here you go" --media /path/to/file.png ``` - تحقق أيضًا من: + تحقّق أيضًا من: - - أن القناة المستهدفة تدعم الوسائط الصادرة وليست محجوبة بقوائم السماح. - - أن الملف ضمن حدود الحجم الخاصة بالمزوّد (تُعاد تحجيم الصور إلى حد أقصى 2048px). - - يقيّد `tools.fs.workspaceOnly=true` عمليات الإرسال عبر المسار المحلي بحدود مساحة العمل، وtemp/media-store، والملفات التي تم التحقق منها ضمن sandbox. - - يسمح `tools.fs.workspaceOnly=false` لـ `MEDIA:` بإرسال الملفات المحلية على المضيف التي يستطيع الوكيل قراءتها بالفعل، ولكن فقط للوسائط بالإضافة إلى أنواع المستندات الآمنة (الصور، والصوت، والفيديو، وPDF، ومستندات Office). وما تزال الملفات النصية العادية والملفات الشبيهة بالأسرار محجوبة. + - أن القناة المستهدفة تدعم الوسائط الصادرة وليست محجوبة بواسطة قوائم السماح. + - أن الملف ضمن حدود الحجم الخاصة بالموفّر (تتم إعادة تحجيم الصور إلى حد أقصى 2048px). + - إن `tools.fs.workspaceOnly=true` يُبقي عمليات الإرسال بالمسار المحلي محصورة في مساحة العمل، وtemp/media-store، والملفات التي تم التحقق من صلاحيتها داخل العزل. + - إن `tools.fs.workspaceOnly=false` يسمح لـ `MEDIA:` بإرسال الملفات المحلية على المضيف التي يستطيع الوكيل قراءتها بالفعل، لكن فقط للوسائط بالإضافة إلى أنواع المستندات الآمنة (الصور، والصوت، والفيديو، وPDF، ومستندات Office). أما النص العادي والملفات الشبيهة بالأسرار فما تزال محجوبة. راجع [الصور](/ar/nodes/images). @@ -3096,45 +3095,45 @@ x-i18n: ## الأمان والتحكم في الوصول - - تعامل مع الرسائل الخاصة الواردة بوصفها مدخلات غير موثوقة. صُممت الإعدادات الافتراضية لتقليل المخاطر: + + تعامل مع الرسائل المباشرة الواردة على أنها مدخلات غير موثوقة. وقد صُممت القيم الافتراضية لتقليل المخاطر: - - السلوك الافتراضي على القنوات القادرة على الرسائل الخاصة هو **الاقتران**: + - السلوك الافتراضي في القنوات القادرة على DM هو **الاقتران**: - يتلقى المرسلون غير المعروفين رمز اقتران؛ ولا يعالج الروبوت رسالتهم. - وافق باستخدام: `openclaw pairing approve --channel [--account ] ` - - تُحدد الطلبات المعلقة بحد أقصى **3 لكل قناة**؛ تحقق من `openclaw pairing list --channel [--account ]` إذا لم يصل الرمز. - - يتطلب فتح الرسائل الخاصة علنًا موافقة صريحة (`dmPolicy: "open"` وقائمة السماح `"*"`). + - يتم تحديد الطلبات المعلقة عند **3 لكل قناة**؛ تحقّق من `openclaw pairing list --channel [--account ]` إذا لم يصل الرمز. + - يتطلب فتح DM للعامة موافقة صريحة (`dmPolicy: "open"` وقائمة سماح `"*"`). - شغّل `openclaw doctor` لإظهار سياسات الرسائل الخاصة المحفوفة بالمخاطر. + شغّل `openclaw doctor` لإظهار سياسات DM التي تنطوي على مخاطر. - - لا. يتعلق حقن المطالبات بـ **المحتوى غير الموثوق**، وليس فقط بمن يستطيع إرسال رسالة خاصة إلى الروبوت. - فإذا كان مساعدك يقرأ محتوى خارجيًا (بحث/جلب الويب، وصفحات المتصفح، ورسائل البريد الإلكتروني، - والمستندات، والمرفقات، والسجلات الملصقة)، فقد يتضمن ذلك المحتوى تعليمات تحاول + + لا. إن حقن المطالبات يتعلق **بالمحتوى غير الموثوق**، وليس فقط بمن يمكنه مراسلة الروبوت مباشرة. + فإذا كان مساعدك يقرأ محتوى خارجيًا (بحث/جلب الويب، وصفحات المتصفح، والرسائل الإلكترونية، + والمستندات، والمرفقات، والسجلات الملصقة)، فقد يتضمن هذا المحتوى تعليمات تحاول اختطاف النموذج. ويمكن أن يحدث هذا حتى لو كنت **أنت المرسل الوحيد**. - يكمن الخطر الأكبر عند تمكين الأدوات: إذ يمكن خداع النموذج لكي - يسرّب السياق أو يستدعي الأدوات نيابةً عنك. قلّل مساحة الضرر عبر: + يكمن الخطر الأكبر عند تفعيل الأدوات: إذ يمكن خداع النموذج + لتسريب السياق أو استدعاء الأدوات نيابةً عنك. وقلّل نطاق الضرر عبر: - - استخدام وكيل "قارئ" للقراءة فقط أو معطَّل الأدوات لتلخيص المحتوى غير الموثوق - - إبقاء `web_search` / `web_fetch` / `browser` معطّلة للوكلاء الممكَّنين بالأدوات - - معاملة النص المفكوك من الملفات/المستندات على أنه غير موثوق أيضًا: يقوم OpenResponses - `input_file` واستخراج نص المرفقات الوسائطية كلاهما بتغليف النص المستخرج داخل - علامات حدود صريحة للمحتوى الخارجي بدلًا من تمرير نص الملف الخام + - استخدام وكيل "قارئ" للقراءة فقط أو معطّل الأدوات لتلخيص المحتوى غير الموثوق + - إبقاء `web_search` / `web_fetch` / `browser` معطلة للوكلاء المفعّلين بالأدوات + - معاملة النصوص المفككة من الملفات/المستندات على أنها غير موثوقة أيضًا: إذ يقوم كل من + `input_file` في OpenResponses واستخراج مرفقات الوسائط بتغليف النص المستخرج داخل + علامات حدود واضحة للمحتوى الخارجي بدلًا من تمرير نص الملف الخام - العزل وقوائم السماح الصارمة للأدوات التفاصيل: [الأمان](/ar/gateway/security). - - نعم، في معظم الإعدادات. إن عزل الروبوت بحسابات وأرقام هواتف منفصلة - يقلل مساحة الضرر إذا حدث خطأ ما. كما يجعل ذلك تدوير - بيانات الاعتماد أو إلغاء الوصول أسهل من دون التأثير على حساباتك الشخصية. + + نعم، في معظم البيئات. إن عزل الروبوت بحسابات وأرقام هواتف منفصلة + يقلل نطاق الضرر إذا حدث خطأ ما. كما يجعل هذا من الأسهل تدوير + بيانات الاعتماد أو إلغاء الوصول دون التأثير في حساباتك الشخصية. - ابدأ على نطاق صغير. امنح الوصول فقط إلى الأدوات والحسابات التي تحتاجها فعلًا، ثم وسّع + ابدأ بشكل صغير. امنح الوصول فقط إلى الأدوات والحسابات التي تحتاجها فعليًا، ثم وسّع لاحقًا إذا لزم الأمر. الوثائق: [الأمان](/ar/gateway/security)، [الاقتران](/ar/channels/pairing). @@ -3142,11 +3141,11 @@ x-i18n: - نحن **لا** نوصي بالاستقلالية الكاملة على رسائلك الشخصية. النمط الأكثر أمانًا هو: + نحن **لا** نوصي بالاستقلالية الكاملة على رسائلك الشخصية. والنمط الأكثر أمانًا هو: - - أبقِ الرسائل الخاصة في **وضع الاقتران** أو ضمن قائمة سماح محكمة. - - استخدم **رقمًا أو حسابًا منفصلًا** إذا كنت تريد منه المراسلة نيابةً عنك. - - دعه يصوغ، ثم **وافق قبل الإرسال**. + - أبقِ الرسائل المباشرة في **وضع الاقتران** أو ضمن قائمة سماح محكمة. + - استخدم **رقمًا أو حسابًا منفصلًا** إذا كنت تريده أن يرسل نيابةً عنك. + - دعه يصوغ الرسالة، ثم **وافق قبل الإرسال**. إذا كنت تريد التجربة، فافعل ذلك على حساب مخصص وأبقِه معزولًا. راجع [الأمان](/ar/gateway/security). @@ -3154,29 +3153,29 @@ x-i18n: - نعم، **إذا** كان الوكيل مخصصًا للدردشة فقط وكانت المدخلات موثوقة. الفئات الأصغر - أكثر عرضة لاختطاف التعليمات، لذا تجنبها للوكلاء الممكَّنين بالأدوات - أو عند قراءة محتوى غير موثوق. وإذا كان لا بد من استخدام نموذج أصغر، فأحكم - الأدوات وشغّله داخل sandbox. راجع [الأمان](/ar/gateway/security). + نعم، **إذا** كان الوكيل للدردشة فقط وكانت المدخلات موثوقة. فالطبقات الأصغر + أكثر عرضة لاختطاف التعليمات، لذا تجنبها للوكلاء المفعّلين بالأدوات + أو عند قراءة محتوى غير موثوق. وإذا اضطررت إلى استخدام نموذج أصغر، فقيّد + الأدوات وشغّله داخل عزل. راجع [الأمان](/ar/gateway/security). - - تُرسل رموز الاقتران **فقط** عندما يرسل مرسل غير معروف رسالة إلى الروبوت ويكون - `dmPolicy: "pairing"` مفعّلًا. لا يؤدي `/start` وحده إلى إنشاء رمز. + + تُرسَل رموز الاقتران **فقط** عندما يرسل مرسل غير معروف رسالة إلى الروبوت ويكون + `dmPolicy: "pairing"` مفعّلًا. ولا يؤدي `/start` بمفرده إلى توليد رمز. - تحقق من الطلبات المعلقة: + تحقّق من الطلبات المعلقة: ```bash openclaw pairing list telegram ``` - إذا كنت تريد وصولًا فوريًا، فأضف معرّف المرسل إلى قائمة السماح أو اضبط `dmPolicy: "open"` + إذا كنت تريد وصولًا فوريًا، فأضف معرّف المرسل لديك إلى قائمة السماح أو اضبط `dmPolicy: "open"` لذلك الحساب. - لا. سياسة الرسائل الخاصة الافتراضية في WhatsApp هي **الاقتران**. يتلقى المرسلون غير المعروفين رمز اقتران فقط ولا **تُعالَج** رسالتهم. لا يرد OpenClaw إلا على الدردشات التي يتلقاها أو على عمليات الإرسال الصريحة التي تقوم أنت بتشغيلها. + لا. إن سياسة DM الافتراضية في WhatsApp هي **الاقتران**. يحصل المرسلون غير المعروفين فقط على رمز اقتران ولا **تُعالج** رسالتهم. ولا يرد OpenClaw إلا على الدردشات التي يستقبلها أو على الإرسالات الصريحة التي تشغّلها أنت. وافق على الاقتران باستخدام: @@ -3190,7 +3189,7 @@ x-i18n: openclaw pairing list whatsapp ``` - مطالبة رقم الهاتف في المعالج: تُستخدم لضبط **قائمة السماح/المالك** الخاصة بك بحيث تكون رسائلك الخاصة المرسلة من حسابك مسموحًا بها. ولا تُستخدم للإرسال التلقائي. وإذا كنت تشغّل على رقم WhatsApp الشخصي لديك، فاستخدم ذلك الرقم وفعّل `channels.whatsapp.selfChatMode`. + مطالبة رقم الهاتف في المعالج: تُستخدم لضبط **قائمة السماح/المالك** الخاصة بك بحيث يُسمح برسائلك المباشرة. ولا تُستخدم للإرسال التلقائي. وإذا كنت تشغّله على رقم WhatsApp الشخصي لديك، فاستخدم ذلك الرقم وفعّل `channels.whatsapp.selfChatMode`. @@ -3199,10 +3198,10 @@ x-i18n: - لا تظهر معظم الرسائل الداخلية أو رسائل الأدوات إلا عندما يكون **verbose** أو **trace** أو **reasoning** مفعّلًا + لا تظهر معظم الرسائل الداخلية أو رسائل الأدوات إلا عند تفعيل **verbose** أو **trace** أو **reasoning** لتلك الجلسة. - أصلح ذلك في الدردشة التي ترى فيها المشكلة: + أصلح ذلك في الدردشة التي ترى فيها هذه الرسائل: ``` /verbose off @@ -3210,16 +3209,16 @@ x-i18n: /reasoning off ``` - إذا ظلت مزعجة، فتحقق من إعدادات الجلسة في Control UI واضبط verbose + إذا ظلت مزعجة، فتحقّق من إعدادات الجلسة في Control UI واضبط verbose على **inherit**. وتأكد أيضًا من أنك لا تستخدم ملف تعريف روبوت مع `verboseDefault` مضبوط - على `on` في التكوين. + على `on` في الإعدادات. الوثائق: [التفكير وverbose](/ar/tools/thinking)، [الأمان](/ar/gateway/security#reasoning-verbose-output-in-groups). - أرسل أيًا مما يلي **بوصفه رسالة مستقلة** (من دون شرطة مائلة): + أرسل أيًا مما يلي **كرسالة مستقلة** (من دون slash): ``` stop @@ -3243,25 +3242,25 @@ x-i18n: interrupt ``` - هذه محفزات إيقاف، وليست أوامر بشرطة مائلة. + هذه مُشغّلات إيقاف، وليست أوامر slash. - بالنسبة إلى العمليات الخلفية (من أداة exec)، يمكنك أن تطلب من الوكيل تشغيل: + بالنسبة إلى العمليات في الخلفية (من أداة exec)، يمكنك أن تطلب من الوكيل تشغيل: ``` process action:kill sessionId:XXX ``` - لمحة عامة عن الأوامر ذات الشرطة المائلة: راجع [أوامر الشرطة المائلة](/ar/tools/slash-commands). + نظرة عامة على أوامر slash: راجع [أوامر الشرطة المائلة](/ar/tools/slash-commands). - يجب إرسال معظم الأوامر بوصفها رسالة **مستقلة** تبدأ بـ `/`، لكن بعض الاختصارات القليلة (مثل `/status`) تعمل أيضًا ضمن الرسالة للمرسلين الموجودين في قائمة السماح. + يجب إرسال معظم الأوامر كرسالة **مستقلة** تبدأ بـ `/`، لكن بعض الاختصارات (مثل `/status`) تعمل أيضًا ضمن السطر للمرسلين الموجودين في قائمة السماح. - يمنع OpenClaw المراسلة **عبر المزوّدات** افتراضيًا. فإذا كانت أداة استدعاء مرتبطة - بـ Telegram، فلن ترسل إلى Discord ما لم تسمح بذلك صراحةً. + يحظر OpenClaw المراسلة **عبر الموفّرين المختلفين** افتراضيًا. فإذا كان استدعاء أداة مرتبطًا + بـ Telegram، فلن يرسل إلى Discord ما لم تسمح بذلك صراحةً. - فعّل المراسلة عبر المزوّدات لهذا الوكيل: + فعّل المراسلة عبر الموفّرين المختلفين لهذا الوكيل: ```json5 { @@ -3276,18 +3275,18 @@ x-i18n: } ``` - أعد تشغيل Gateway بعد تعديل التكوين. + أعد تشغيل Gateway بعد تعديل الإعدادات. - - يتحكم وضع الطابور في كيفية تفاعل الرسائل الجديدة مع تشغيل جارٍ. استخدم `/queue` لتغيير الأوضاع: + + يتحكم وضع الطابور في كيفية تفاعل الرسائل الجديدة مع تشغيل ما يزال قيد التنفيذ. استخدم `/queue` لتغيير الأوضاع: - `steer` - تعيد الرسائل الجديدة توجيه المهمة الحالية - - `followup` - تشغيل الرسائل واحدة تلو الأخرى - - `collect` - تجميع الرسائل والرد مرة واحدة (الافتراضي) - - `steer-backlog` - إعادة التوجيه الآن، ثم معالجة التراكم - - `interrupt` - إيقاف التشغيل الحالي وبدء تشغيل جديد + - `followup` - تشغّل الرسائل واحدة تلو الأخرى + - `collect` - يجمع الرسائل ويرد مرة واحدة (الافتراضي) + - `steer-backlog` - يعيد التوجيه الآن، ثم يعالج الأعمال المتراكمة + - `interrupt` - يوقف التشغيل الحالي ويبدأ من جديد يمكنك إضافة خيارات مثل `debounce:2s cap:25 drop:summarize` لأوضاع المتابعة. @@ -3298,7 +3297,7 @@ x-i18n: - في OpenClaw، تكون بيانات الاعتماد واختيار النموذج أمرين منفصلين. يؤدي ضبط `ANTHROPIC_API_KEY` (أو تخزين مفتاح Anthropic API في ملفات تعريف المصادقة) إلى تمكين المصادقة، لكن النموذج الافتراضي الفعلي هو أي نموذج تقوم بتكوينه في `agents.defaults.model.primary` (مثل `anthropic/claude-sonnet-4-6` أو `anthropic/claude-opus-4-6`). وإذا رأيت `No credentials found for profile "anthropic:default"`، فهذا يعني أن Gateway لم تتمكن من العثور على بيانات اعتماد Anthropic في ملف `auth-profiles.json` المتوقع للوكيل الذي يعمل. + في OpenClaw، تُعد بيانات الاعتماد واختيار النموذج أمرين منفصلين. إن ضبط `ANTHROPIC_API_KEY` (أو تخزين مفتاح Anthropic API في ملفات المصادقة) يفعّل المصادقة، لكن النموذج الافتراضي الفعلي هو ما تضبطه أنت في `agents.defaults.model.primary` (على سبيل المثال، `anthropic/claude-sonnet-4-6` أو `anthropic/claude-opus-4-6`). وإذا رأيت `No credentials found for profile "anthropic:default"`، فهذا يعني أن Gateway لم تتمكن من العثور على بيانات اعتماد Anthropic في `auth-profiles.json` المتوقع للوكيل الذي يعمل. diff --git a/docs/ar/help/testing.md b/docs/ar/help/testing.md index 3195be4ef..c4161699e 100644 --- a/docs/ar/help/testing.md +++ b/docs/ar/help/testing.md @@ -1,15 +1,15 @@ --- read_when: - تشغيل الاختبارات محليًا أو في CI - - إضافة اختبارات انحدار لأخطاء النموذج/المزوّد + - إضافة اختبارات منع التراجع لأخطاء النموذج/المزوّد - تصحيح سلوك Gateway + الوكيل summary: 'مجموعة الاختبار: أجنحة unit/e2e/live، ومشغّلات Docker، وما الذي يغطيه كل اختبار' title: الاختبار x-i18n: - generated_at: "2026-04-18T07:14:52Z" + generated_at: "2026-04-20T07:30:08Z" model: gpt-5.4 provider: openai - source_hash: 7cdd2048ba58e606fd68703977c2b33000abdb1826b6589ce25a35c53468726a + source_hash: 88457038e2e2c7940d0348762d0ece187111a8c61fa9bad54b39eade4217ddbc source_path: help/testing.md workflow: 15 --- @@ -18,104 +18,104 @@ x-i18n: يحتوي OpenClaw على ثلاثة أجنحة Vitest (unit/integration وe2e وlive) ومجموعة صغيرة من مشغّلات Docker. -هذا المستند هو دليل «كيف نختبر»: +هذا المستند هو دليل "كيف نختبر": - ما الذي يغطيه كل جناح (وما الذي لا يغطيه عمدًا) -- ما الأوامر التي يجب تشغيلها لسير العمل الشائع (محليًا، قبل الدفع، تصحيح الأخطاء) -- كيف تكتشف الاختبارات الحية بيانات الاعتماد وتحدد النماذج/المزوّدين -- كيفية إضافة اختبارات انحدار لمشكلات النموذج/المزوّد في العالم الحقيقي +- ما الأوامر التي يجب تشغيلها لسيناريوهات العمل الشائعة (محليًا، قبل الدفع، التصحيح) +- كيف تكتشف اختبارات live بيانات الاعتماد وتختار النماذج/المزوّدين +- كيفية إضافة اختبارات منع التراجع للمشكلات الواقعية الخاصة بالنماذج/المزوّدين ## البدء السريع في معظم الأيام: - البوابة الكاملة (متوقعة قبل الدفع): `pnpm build && pnpm check && pnpm test` -- تشغيل أسرع كامل الأجنحة محليًا على جهاز ذي موارد جيدة: `pnpm test:max` +- تشغيل أسرع للجناح الكامل محليًا على جهاز واسع الموارد: `pnpm test:max` - حلقة مراقبة Vitest مباشرة: `pnpm test:watch` -- استهداف الملفات مباشرة يوجّه الآن أيضًا مسارات الإضافات/القنوات: `pnpm test extensions/discord/src/monitor/message-handler.preflight.test.ts` -- فضّل التشغيلات المستهدفة أولًا عندما تكون تعمل على فشل واحد. -- موقع QA مدعوم بـ Docker: `pnpm qa:lab:up` -- مسار QA مدعوم بـ Linux VM: `pnpm openclaw qa suite --runner multipass --scenario channel-chat-baseline` +- استهداف ملف مباشر يوجّه الآن أيضًا مسارات الامتدادات/القنوات: `pnpm test extensions/discord/src/monitor/message-handler.preflight.test.ts` +- فضّل التشغيلات الموجّهة أولًا عندما تعمل على تكرار حل إخفاق واحد. +- موقع QA المدعوم بـ Docker: `pnpm qa:lab:up` +- مسار QA المدعوم بآلة Linux افتراضية: `pnpm openclaw qa suite --runner multipass --scenario channel-chat-baseline` عندما تلمس الاختبارات أو تريد ثقة إضافية: - بوابة التغطية: `pnpm test:coverage` - جناح E2E: `pnpm test:e2e` -عند تصحيح مزوّدين/نماذج حقيقية (يتطلب بيانات اعتماد حقيقية): +عند تصحيح المزوّدين/النماذج الحقيقية (يتطلب بيانات اعتماد حقيقية): -- الجناح الحي (فحوصات النماذج + Gateway للأدوات/الصور): `pnpm test:live` -- استهدف ملفًا حيًا واحدًا بهدوء: `pnpm test:live -- src/agents/models.profiles.live.test.ts` +- جناح Live (مجسّات النماذج + أدوات Gateway/الصور): `pnpm test:live` +- استهداف ملف live واحد بهدوء: `pnpm test:live -- src/agents/models.profiles.live.test.ts` -نصيحة: عندما تحتاج فقط إلى حالة فاشلة واحدة، ففضّل تضييق الاختبارات الحية عبر متغيرات البيئة allowlist الموصوفة أدناه. +نصيحة: عندما تحتاج فقط إلى حالة فشل واحدة، فالأفضل تضييق اختبارات live باستخدام متغيرات بيئة قائمة السماح الموضّحة أدناه. ## المشغّلات الخاصة بـ QA توجد هذه الأوامر بجانب أجنحة الاختبار الرئيسية عندما تحتاج إلى واقعية qa-lab: - `pnpm openclaw qa suite` - - يشغّل سيناريوهات QA المعتمدة على المستودع مباشرة على المضيف. - - يشغّل عدة سيناريوهات محددة بالتوازي افتراضيًا مع عمّال Gateway معزولين، حتى 64 عاملًا أو عدد السيناريوهات المحدد. استخدم `--concurrency ` لضبط عدد العمّال، أو `--concurrency 1` للمسار التسلسلي الأقدم. + - يشغّل سيناريوهات QA المدعومة من المستودع مباشرة على المضيف. + - يشغّل عدة سيناريوهات محددة بالتوازي افتراضيًا مع عمّال Gateway معزولين. تستخدم `qa-channel` مستوى تزامن افتراضيًا قدره 4 (ضمن حدود عدد السيناريوهات المحددة). استخدم `--concurrency ` لضبط عدد العمّال، أو `--concurrency 1` للمسار التسلسلي الأقدم. + - يخرج برمز غير صفري عند فشل أي سيناريو. استخدم `--allow-failures` عندما تريد الحصول على المخرجات دون رمز خروج فاشل. - يدعم أوضاع المزوّد `live-frontier` و`mock-openai` و`aimock`. - يبدأ `aimock` خادم مزوّد محليًا مدعومًا بـ AIMock لتغطية تجريبية للتركيبات الثابتة ومحاكاة البروتوكول دون استبدال مسار `mock-openai` الواعي بالسيناريوهات. + يبدأ `aimock` خادم مزوّد محليًا مدعومًا بـ AIMock لتغطية تجريبية للتركيبات والـ protocol mock دون استبدال مسار `mock-openai` المعتمد على السيناريوهات. - `pnpm openclaw qa suite --runner multipass` - - يشغّل جناح QA نفسه داخل Linux VM مؤقتة عبر Multipass. - - يحافظ على سلوك اختيار السيناريو نفسه الذي يقدمه `qa suite` على المضيف. - - يعيد استخدام علامات اختيار المزوّد/النموذج نفسها التي يستخدمها `qa suite`. - - التشغيلات الحية تمرّر مدخلات مصادقة QA المدعومة والعملية للضيف: - مفاتيح المزوّد المعتمدة على env، ومسار إعداد مزوّد QA الحي، و`CODEX_HOME` عند وجوده. - - يجب أن تبقى أدلة المخرجات ضمن جذر المستودع حتى يتمكن الضيف من الكتابة مرة أخرى عبر مساحة العمل الموصولة. + - يشغّل جناح QA نفسه داخل آلة Linux افتراضية مؤقتة عبر Multipass. + - يحافظ على سلوك اختيار السيناريوهات نفسه كما في `qa suite` على المضيف. + - يعيد استخدام علامات اختيار المزوّد/النموذج نفسها كما في `qa suite`. + - في التشغيلات الحية، يمرّر مدخلات مصادقة QA المدعومة والعملية للضيف: + مفاتيح المزوّد المعتمدة على البيئة، ومسار إعداد مزوّد QA الحي، و`CODEX_HOME` عند توفره. + - يجب أن تبقى أدلة المخرجات تحت جذر المستودع حتى يتمكن الضيف من الكتابة إليها عبر مساحة العمل المركّبة. - يكتب تقرير QA والملخص المعتادين بالإضافة إلى سجلات Multipass تحت `.artifacts/qa-e2e/...`. - `pnpm qa:lab:up` - - يبدأ موقع QA المدعوم بـ Docker لعمل QA بأسلوب المشغّل. + - يبدأ موقع QA المدعوم بـ Docker لعمل QA على نمط المشغّل. - `pnpm openclaw qa aimock` - - يبدأ فقط خادم مزوّد AIMock المحلي لاختبار Smoke مباشر للبروتوكول. + - يبدأ فقط خادم مزوّد AIMock المحلي لاختبار smoke مباشر للبروتوكول. - `pnpm openclaw qa matrix` - - يشغّل مسار QA الحي لـ Matrix مقابل خادم Tuwunel منزلي مؤقت ومدعوم بـ Docker. - - هذا المضيف QA مخصص حاليًا للمستودع/التطوير فقط. تثبيتات OpenClaw المعبأة لا تشحن `qa-lab`، لذلك لا تعرض `openclaw qa`. - - نسخ المستودع تستخدم المشغّل المضمّن مباشرة؛ لا حاجة إلى خطوة تثبيت Plugin منفصلة. - - يوفّر ثلاثة مستخدمين مؤقتين لـ Matrix (`driver` و`sut` و`observer`) بالإضافة إلى غرفة خاصة واحدة، ثم يبدأ عملية فرعية لـ QA gateway مع Plugin Matrix الحقيقي باعتباره نقل SUT. - - يستخدم صورة Tuwunel المستقرة المثبتة `ghcr.io/matrix-construct/tuwunel:v1.5.1` افتراضيًا. استبدلها باستخدام `OPENCLAW_QA_MATRIX_TUWUNEL_IMAGE` عندما تحتاج إلى اختبار صورة مختلفة. - - لا يوفّر Matrix علامات مشتركة لمصادر بيانات الاعتماد لأن المسار يوفّر مستخدمين مؤقتين محليًا. - - يكتب تقرير QA لـ Matrix، والملخص، وartifact للأحداث المرصودة، وسجل مخرجات stdout/stderr المدمج تحت `.artifacts/qa-e2e/...`. + - يشغّل مسار Matrix QA الحي مقابل خادم Tuwunel منزلي مؤقت ومدعوم بـ Docker. + - مضيف QA هذا خاص بالمستودع/التطوير فقط حاليًا. لا تتضمن تثبيتات OpenClaw المعبأة `qa-lab`، ولذلك لا توفّر `openclaw qa`. + - تقوم نسخ المستودع بتحميل المشغّل المضمّن مباشرة؛ لا حاجة إلى خطوة منفصلة لتثبيت Plugin. + - يوفّر ثلاثة مستخدمين مؤقتين لـ Matrix (`driver` و`sut` و`observer`) بالإضافة إلى غرفة خاصة واحدة، ثم يبدأ عملية فرعية لـ QA Gateway مع Plugin Matrix الحقيقي باعتباره نقل SUT. + - يستخدم صورة Tuwunel المستقرة المثبتة `ghcr.io/matrix-construct/tuwunel:v1.5.1` افتراضيًا. تجاوزها باستخدام `OPENCLAW_QA_MATRIX_TUWUNEL_IMAGE` عندما تحتاج إلى اختبار صورة مختلفة. + - لا يكشف Matrix عن علامات مشتركة لمصادر بيانات الاعتماد لأن هذا المسار يوفّر مستخدمين مؤقتين محليًا. + - يكتب تقرير Matrix QA وملخصًا وملف observed-events وسجل خرج موحّد stdout/stderr تحت `.artifacts/qa-e2e/...`. - `pnpm openclaw qa telegram` - - يشغّل مسار QA الحي لـ Telegram مقابل مجموعة خاصة حقيقية باستخدام رمزي bot الخاصين بـ driver وSUT من env. - - يتطلب `OPENCLAW_QA_TELEGRAM_GROUP_ID` و`OPENCLAW_QA_TELEGRAM_DRIVER_BOT_TOKEN` و`OPENCLAW_QA_TELEGRAM_SUT_BOT_TOKEN`. يجب أن يكون معرّف المجموعة هو معرّف دردشة Telegram الرقمي. - - يدعم `--credential-source convex` لبيانات الاعتماد المشتركة المجمّعة. استخدم وضع env افتراضيًا، أو اضبط `OPENCLAW_QA_CREDENTIAL_SOURCE=convex` للاشتراك في التأجير المجمّع. - - يتطلب botين مختلفين في المجموعة الخاصة نفسها، مع قيام bot الخاص بـ SUT بعرض اسم مستخدم Telegram. - - للحصول على مراقبة مستقرة بين bot وآخر، فعّل وضع Bot-to-Bot Communication Mode في `@BotFather` لكلا botين وتأكد من أن bot الخاص بـ driver يستطيع مراقبة حركة bot في المجموعة. - - يكتب تقرير QA لـ Telegram، والملخص، وartifact للرسائل المرصودة تحت `.artifacts/qa-e2e/...`. + - يشغّل مسار Telegram QA الحي مقابل مجموعة خاصة حقيقية باستخدام رموز bot الخاصة بالسائق وSUT من البيئة. + - يتطلب `OPENCLAW_QA_TELEGRAM_GROUP_ID` و`OPENCLAW_QA_TELEGRAM_DRIVER_BOT_TOKEN` و`OPENCLAW_QA_TELEGRAM_SUT_BOT_TOKEN`. يجب أن يكون معرّف المجموعة هو معرّف دردشة Telegram رقميًا. + - يدعم `--credential-source convex` لبيانات الاعتماد المشتركة المجمّعة. استخدم وضع env افتراضيًا، أو اضبط `OPENCLAW_QA_CREDENTIAL_SOURCE=convex` لاستخدام الحجوزات المجمّعة. + - يخرج برمز غير صفري عند فشل أي سيناريو. استخدم `--allow-failures` عندما تريد الحصول على المخرجات دون رمز خروج فاشل. + - يتطلب botين مختلفين في المجموعة الخاصة نفسها، على أن يكشف bot الخاص بـ SUT عن اسم مستخدم Telegram. + - لضمان مراقبة ثابتة بين bot وآخر، فعّل Bot-to-Bot Communication Mode في `@BotFather` لكلا botين، وتأكد من أن bot السائق يمكنه مراقبة حركة bot داخل المجموعة. + - يكتب تقرير Telegram QA وملخصًا وملف observed-messages تحت `.artifacts/qa-e2e/...`. -تتشارك مسارات النقل الحية عقدًا قياسيًا واحدًا حتى لا تنحرف وسائل النقل الجديدة: +تشترك مسارات النقل الحية في عقد قياسي واحد حتى لا تنحرف وسائل النقل الجديدة: -يبقى `qa-channel` جناح QA التركيبي الواسع وليس جزءًا من مصفوفة تغطية -النقل الحي. +تظل `qa-channel` جناح QA الاصطناعي الواسع، وليست جزءًا من مصفوفة تغطية النقل الحي. -| المسار | Canary | تقييد الإشارة | حظر allowlist | الرد الأعلى مستوى | الاستئناف بعد إعادة التشغيل | متابعة الخيط | عزل الخيط | مراقبة التفاعل | أمر المساعدة | -| -------- | ------ | -------------- | --------------- | --------------- | -------------- | ---------------- | ---------------- | -------------------- | ------------ | -| Matrix | x | x | x | x | x | x | x | x | | -| Telegram | x | | | | | | | | x | +| المسار | Canary | تقييد الإشارة | حظر قائمة السماح | رد من المستوى الأعلى | استئناف بعد إعادة التشغيل | متابعة السلسلة | عزل السلسلة | مراقبة التفاعلات | أمر المساعدة | +| ------ | ------ | -------------- | ---------------- | -------------------- | -------------------------- | -------------- | ------------ | ---------------- | ------------ | +| Matrix | x | x | x | x | x | x | x | x | | +| Telegram | x | | | | | | | | x | -### بيانات اعتماد Telegram المشتركة عبر Convex (v1) +### بيانات اعتماد Telegram المشتركة عبر Convex (الإصدار 1) -عند تفعيل `--credential-source convex` (أو `OPENCLAW_QA_CREDENTIAL_SOURCE=convex`) لأمر -`openclaw qa telegram`، يحصل QA lab على تأجير حصري من تجمّع مدعوم بـ Convex، ويرسل Heartbeat -لهذا التأجير أثناء تشغيل المسار، ويطلق التأجير عند الإيقاف. +عند تفعيل `--credential-source convex` (أو `OPENCLAW_QA_CREDENTIAL_SOURCE=convex`) لـ +`openclaw qa telegram`، يحصل QA lab على حجز حصري من مجموعة مدعومة بـ Convex، ويرسل Heartbeat لهذا الحجز أثناء تشغيل المسار، ويحرّر الحجز عند الإغلاق. -هيكل مشروع Convex المرجعي: +الهيكل المرجعي لمشروع Convex: - `qa/convex-credential-broker/` متغيرات البيئة المطلوبة: -- `OPENCLAW_QA_CONVEX_SITE_URL` (على سبيل المثال `https://your-deployment.convex.site`) +- `OPENCLAW_QA_CONVEX_SITE_URL` (مثل `https://your-deployment.convex.site`) - سر واحد للدور المحدد: - - `OPENCLAW_QA_CONVEX_SECRET_MAINTAINER` من أجل `maintainer` - - `OPENCLAW_QA_CONVEX_SECRET_CI` من أجل `ci` + - `OPENCLAW_QA_CONVEX_SECRET_MAINTAINER` للدور `maintainer` + - `OPENCLAW_QA_CONVEX_SECRET_CI` للدور `ci` - اختيار دور بيانات الاعتماد: - CLI: `--credential-role maintainer|ci` - - env الافتراضي: `OPENCLAW_QA_CREDENTIAL_ROLE` (الافتراضي هو `maintainer`) + - الافتراضي من البيئة: `OPENCLAW_QA_CREDENTIAL_ROLE` (القيمة الافتراضية `ci` في CI، و`maintainer` بخلاف ذلك) متغيرات البيئة الاختيارية: @@ -125,11 +125,11 @@ x-i18n: - `OPENCLAW_QA_CREDENTIAL_HTTP_TIMEOUT_MS` (الافتراضي `15000`) - `OPENCLAW_QA_CONVEX_ENDPOINT_PREFIX` (الافتراضي `/qa-credentials/v1`) - `OPENCLAW_QA_CREDENTIAL_OWNER_ID` (معرّف تتبع اختياري) -- `OPENCLAW_QA_ALLOW_INSECURE_HTTP=1` يسمح بعناوين Convex من نوع `http://` على loopback للتطوير المحلي فقط. +- يتيح `OPENCLAW_QA_ALLOW_INSECURE_HTTP=1` عناوين Convex من نوع loopback `http://` لأغراض التطوير المحلي فقط. -يجب أن يستخدم `OPENCLAW_QA_CONVEX_SITE_URL` الصيغة `https://` في التشغيل العادي. +يجب أن يستخدم `OPENCLAW_QA_CONVEX_SITE_URL` البروتوكول `https://` في التشغيل العادي. -أوامر الإدارة الخاصة بالمشرفين (إضافة/إزالة/عرض التجمّع) تتطلب +تتطلب أوامر الإدارة الخاصة بالمشرف (إضافة/إزالة/سرد المجموعة) `OPENCLAW_QA_CONVEX_SECRET_MAINTAINER` تحديدًا. مساعدات CLI للمشرفين: @@ -142,84 +142,83 @@ pnpm openclaw qa credentials remove --credential-id استخدم `--json` للحصول على مخرجات قابلة للقراءة آليًا في السكربتات وأدوات CI. -عقد نقاط النهاية الافتراضي (`OPENCLAW_QA_CONVEX_SITE_URL` + `/qa-credentials/v1`): +عقد نقطة النهاية الافتراضي (`OPENCLAW_QA_CONVEX_SITE_URL` + `/qa-credentials/v1`): - `POST /acquire` - الطلب: `{ kind, ownerId, actorRole, leaseTtlMs, heartbeatIntervalMs }` - النجاح: `{ status: "ok", credentialId, leaseToken, payload, leaseTtlMs?, heartbeatIntervalMs? }` - - الاستنفاد/القابل لإعادة المحاولة: `{ status: "error", code: "POOL_EXHAUSTED" | "NO_CREDENTIAL_AVAILABLE", ... }` + - حالات النفاد/القابلة لإعادة المحاولة: `{ status: "error", code: "POOL_EXHAUSTED" | "NO_CREDENTIAL_AVAILABLE", ... }` - `POST /heartbeat` - الطلب: `{ kind, ownerId, actorRole, credentialId, leaseToken, leaseTtlMs }` - - النجاح: `{ status: "ok" }` (أو `2xx` فارغة) + - النجاح: `{ status: "ok" }` (أو `2xx` فارغ) - `POST /release` - الطلب: `{ kind, ownerId, actorRole, credentialId, leaseToken }` - - النجاح: `{ status: "ok" }` (أو `2xx` فارغة) -- `POST /admin/add` (سر maintainer فقط) + - النجاح: `{ status: "ok" }` (أو `2xx` فارغ) +- `POST /admin/add` (سر المشرف فقط) - الطلب: `{ kind, actorId, payload, note?, status? }` - النجاح: `{ status: "ok", credential }` -- `POST /admin/remove` (سر maintainer فقط) +- `POST /admin/remove` (سر المشرف فقط) - الطلب: `{ credentialId, actorId }` - النجاح: `{ status: "ok", changed, credential }` - - حماية التأجير النشط: `{ status: "error", code: "LEASE_ACTIVE", ... }` -- `POST /admin/list` (سر maintainer فقط) + - حماية الحجز النشط: `{ status: "error", code: "LEASE_ACTIVE", ... }` +- `POST /admin/list` (سر المشرف فقط) - الطلب: `{ kind?, status?, includePayload?, limit? }` - النجاح: `{ status: "ok", credentials, count }` شكل الحمولة لنوع Telegram: - `{ groupId: string, driverToken: string, sutToken: string }` -- يجب أن يكون `groupId` سلسلة معرّف دردشة Telegram رقمي. +- يجب أن يكون `groupId` سلسلة تمثل معرّف دردشة Telegram رقميًا. - يتحقق `admin/add` من هذا الشكل عند `kind: "telegram"` ويرفض الحمولات غير الصحيحة. ### إضافة قناة إلى QA -إضافة قناة إلى نظام QA المعتمد على Markdown تتطلب أمرين فقط بالضبط: +تتطلب إضافة قناة إلى نظام QA المعتمد على Markdown أمرين فقط بالضبط: -1. مكيّف نقل للقناة. +1. محوّل نقل للقناة. 2. حزمة سيناريوهات تمارس عقد القناة. -لا تضف جذر أوامر QA جديدًا على المستوى الأعلى عندما يكون بإمكان المضيف المشترك `qa-lab` -امتلاك هذا التدفق. +لا تضف جذر أمر QA جديدًا من المستوى الأعلى عندما يكون بإمكان مضيف `qa-lab` المشترك امتلاك هذا التدفق. -يمتلك `qa-lab` آليات المضيف المشتركة: +يمتلك `qa-lab` آليات الاستضافة المشتركة: - جذر الأمر `openclaw qa` - بدء الجناح وإنهاؤه -- توازي العمّال -- كتابة الـ artifacts -- إنشاء التقارير +- تزامن العمّال +- كتابة المخرجات +- توليد التقارير - تنفيذ السيناريوهات -- أسماء التوافق البديلة لسيناريوهات `qa-channel` الأقدم +- الأسماء البديلة التوافقية لسيناريوهات `qa-channel` الأقدم -تمتلك إضافات المشغّل عقد النقل: +تمتلك Plugins المشغّلات عقد النقل: - كيف يتم تركيب `openclaw qa ` تحت الجذر المشترك `qa` -- كيف تتم تهيئة Gateway من أجل هذا النقل +- كيف تتم تهيئة Gateway لهذا النقل - كيف يتم التحقق من الجاهزية -- كيف يتم حقن الأحداث الواردة -- كيف تتم مراقبة الرسائل الصادرة -- كيف يتم عرض النصوص المنسوخة transcript وحالة النقل المطبّعة -- كيف يتم تنفيذ الإجراءات المدعومة بالنقل -- كيف تتم معالجة إعادة الضبط أو التنظيف الخاصة بالنقل +- كيف تُحقن الأحداث الواردة +- كيف تُرصد الرسائل الصادرة +- كيف تُكشف النصوص وسجل حالة النقل المطبع +- كيف تُنفذ الإجراءات المدعومة بالنقل +- كيف تتم إعادة الضبط أو التنظيف الخاص بالنقل -الحد الأدنى المطلوب لاعتماد قناة جديدة هو: +الحد الأدنى لاعتماد قناة جديدة هو: -1. إبقاء `qa-lab` مالكًا للجذر المشترك `qa`. -2. تنفيذ مشغّل النقل على واجهة المضيف المشتركة `qa-lab`. +1. الإبقاء على `qa-lab` مالكًا للجذر المشترك `qa`. +2. تنفيذ مشغّل النقل على واجهة الاستضافة المشتركة `qa-lab`. 3. إبقاء الآليات الخاصة بالنقل داخل Plugin المشغّل أو حزمة القناة. -4. تركيب المشغّل على هيئة `openclaw qa ` بدلًا من تسجيل أمر جذر منافس. - يجب أن تعلن إضافات المشغّل عن `qaRunners` في `openclaw.plugin.json` وأن تصدّر مصفوفة `qaRunnerCliRegistrations` مطابقة من `runtime-api.ts`. - اجعل `runtime-api.ts` خفيفًا؛ يجب أن يبقى تنفيذ CLI والمشغّل الكسول خلف نقاط دخول منفصلة. -5. تأليف أو تكييف سيناريوهات Markdown تحت أدلة `qa/scenarios/` الموضوعية. +4. تركيب المشغّل بوصفه `openclaw qa ` بدلًا من تسجيل جذر أمر منافس. + يجب أن تعلن Plugins المشغّلات `qaRunners` في `openclaw.plugin.json` وأن تصدّر مصفوفة `qaRunnerCliRegistrations` مطابقة من `runtime-api.ts`. + أبقِ `runtime-api.ts` خفيفًا؛ يجب أن تبقى عمليات CLI والمشغّل الكسولة خلف نقاط دخول منفصلة. +5. كتابة أو تكييف سيناريوهات Markdown ضمن أدلة `qa/scenarios/` ذات الطابع المناسب. 6. استخدام مساعدات السيناريو العامة للسيناريوهات الجديدة. -7. إبقاء أسماء التوافق البديلة الحالية عاملة ما لم يكن المستودع ينفّذ ترحيلًا مقصودًا. +7. الإبقاء على الأسماء البديلة التوافقية الحالية ما لم يكن المستودع ينفّذ ترحيلًا مقصودًا. قاعدة القرار صارمة: - إذا كان يمكن التعبير عن السلوك مرة واحدة في `qa-lab`، فضعه في `qa-lab`. -- إذا كان السلوك يعتمد على نقل قناة واحدة، فأبقِه في Plugin المشغّل أو حزمة Plugin تلك. -- إذا كان السيناريو يحتاج إلى قدرة جديدة يمكن أن تستخدمها أكثر من قناة واحدة، فأضف مساعدًا عامًا بدلًا من فرع خاص بقناة داخل `suite.ts`. -- إذا كان السلوك ذا معنى لنقل واحد فقط، فأبقِ السيناريو خاصًا بذلك النقل وصرّح بذلك بوضوح في عقد السيناريو. +- إذا كان السلوك يعتمد على نقل قناة واحدة، فأبقِه داخل Plugin ذلك المشغّل أو حزمة Plugin. +- إذا احتاج سيناريو ما إلى قدرة جديدة يمكن لأكثر من قناة استخدامها، فأضف مساعدًا عامًا بدلًا من فرع خاص بقناة داخل `suite.ts`. +- إذا كان السلوك ذا معنى فقط لنقل واحد، فأبقِ السيناريو خاصًا بذلك النقل واجعل ذلك صريحًا في عقد السيناريو. أسماء المساعدات العامة المفضلة للسيناريوهات الجديدة هي: @@ -236,7 +235,7 @@ pnpm openclaw qa credentials remove --credential-id - `formatTransportTranscript` - `resetTransport` -تبقى أسماء التوافق البديلة متاحة للسيناريوهات الحالية، بما في ذلك: +تظل الأسماء البديلة التوافقية متاحة للسيناريوهات الحالية، بما في ذلك: - `waitForQaChannelReady` - `waitForOutboundMessage` @@ -245,101 +244,101 @@ pnpm openclaw qa credentials remove --credential-id - `resetBus` يجب أن تستخدم الأعمال الجديدة الخاصة بالقنوات أسماء المساعدات العامة. -توجد أسماء التوافق البديلة لتجنب ترحيل شامل في يوم واحد، لا لتكون النموذج -لتأليف السيناريوهات الجديدة. +توجد الأسماء البديلة التوافقية لتجنّب ترحيل شامل دفعة واحدة، وليس بوصفها +النموذج الذي ينبغي اتباعه عند تأليف السيناريوهات الجديدة. ## أجنحة الاختبار (ما الذي يعمل وأين) -اعتبر الأجنحة على أنها «زيادة في الواقعية» (وزيادة في عدم الاستقرار/التكلفة): +فكّر في الأجنحة على أنها "زيادة في الواقعية" (وزيادة في القابلية للتذبذب/التكلفة): ### Unit / integration (الافتراضي) - الأمر: `pnpm test` -- الإعداد: عشر تشغيلات shard متسلسلة (`vitest.full-*.config.ts`) عبر مشاريع Vitest المحددة الحالية -- الملفات: مخزونات core/unit تحت `src/**/*.test.ts` و`packages/**/*.test.ts` و`test/**/*.test.ts` واختبارات node المدرجة ضمن allowlist في `ui` والمغطاة بواسطة `vitest.unit.config.ts` +- الإعداد: عشر تشغيلات شظايا متسلسلة (`vitest.full-*.config.ts`) فوق مشاريع Vitest المحددة الحالية +- الملفات: قوائم unit الأساسية تحت `src/**/*.test.ts` و`packages/**/*.test.ts` و`test/**/*.test.ts`، واختبارات `ui` الخاصة بـ node المسموح بها والمشمولة بواسطة `vitest.unit.config.ts` - النطاق: - اختبارات unit خالصة - - اختبارات تكامل داخل العملية (مصادقة gateway، التوجيه، الأدوات، التحليل، الإعداد) - - اختبارات انحدار حتمية للأخطاء المعروفة + - اختبارات integration داخل العملية (مصادقة Gateway، التوجيه، الأدوات، التحليل، الإعدادات) + - اختبارات منع تراجع حتمية للأخطاء المعروفة - التوقعات: - تعمل في CI - لا تتطلب مفاتيح حقيقية - يجب أن تكون سريعة ومستقرة -- ملاحظة حول المشاريع: - - أصبح `pnpm test` غير المستهدف يشغّل الآن أحد عشر إعداد shard أصغر (`core-unit-src` و`core-unit-security` و`core-unit-ui` و`core-unit-support` و`core-support-boundary` و`core-contracts` و`core-bundled` و`core-runtime` و`agentic` و`auto-reply` و`extensions`) بدلًا من عملية root-project أصلية ضخمة واحدة. هذا يقلّل ذروة RSS على الأجهزة المزدحمة ويمنع أعمال auto-reply/extension من تجويع الأجنحة غير ذات الصلة. - - لا يزال `pnpm test --watch` يستخدم مخطط المشاريع الأصلي في الجذر `vitest.config.ts`، لأن حلقة watch متعددة الـ shard ليست عملية. - - يوجّه `pnpm test` و`pnpm test:watch` و`pnpm test:perf:imports` أهداف الملفات/الأدلة الصريحة عبر المسارات المحددة أولًا، لذلك فإن `pnpm test extensions/discord/src/monitor/message-handler.preflight.test.ts` يتجنب تكلفة بدء تشغيل مشروع الجذر الكامل. - - يوسّع `pnpm test:changed` مسارات git المتغيرة إلى المسارات المحددة نفسها عندما يلمس الفرق فقط ملفات المصدر/الاختبار القابلة للتوجيه؛ أما تعديلات config/setup فتعود إلى إعادة التشغيل الواسعة لمشروع الجذر. - - تُوجَّه اختبارات unit الخفيفة من حيث الاستيراد من الوكلاء والأوامر والإضافات ومساعدات auto-reply و`plugin-sdk` ومناطق الأدوات الخالصة المشابهة عبر مسار `unit-fast`، الذي يتخطى `test/setup-openclaw-runtime.ts`؛ وتبقى الملفات ذات الحالة/الثقيلة وقت التشغيل على المسارات الحالية. - - كذلك تربط بعض ملفات المصدر المساعدة المختارة في `plugin-sdk` و`commands` تشغيلات وضع changed باختبارات شقيقة صريحة في تلك المسارات الخفيفة، بحيث تتجنب تعديلات المساعدات إعادة تشغيل الجناح الثقيل الكامل لذلك الدليل. - - أصبح لدى `auto-reply` الآن ثلاث حاويات مخصصة: مساعدات core العليا، واختبارات التكامل العليا `reply.*`، والشجرة الفرعية `src/auto-reply/reply/**`. وهذا يبقي أعمال حزمة reply الأثقل بعيدًا عن اختبارات status/chunk/token الرخيصة. -- ملاحظة حول المشغّل المضمن: - - عندما تغيّر مدخلات اكتشاف message-tool أو سياق تشغيل Compaction، +- ملاحظة المشاريع: + - أصبح `pnpm test` غير الموجّه يشغّل الآن أحد عشر إعداد شظايا أصغر (`core-unit-src` و`core-unit-security` و`core-unit-ui` و`core-unit-support` و`core-support-boundary` و`core-contracts` و`core-bundled` و`core-runtime` و`agentic` و`auto-reply` و`extensions`) بدلًا من عملية جذر أصلية ضخمة واحدة. هذا يقلّل ذروة RSS على الأجهزة المزدحمة ويتجنب أن تتسبب أعمال auto-reply/extension في تجويع الأجنحة غير المرتبطة. + - يظل `pnpm test --watch` يستخدم مخطط المشاريع الأصلي للجذر في `vitest.config.ts`، لأن حلقة مراقبة متعددة الشظايا ليست عملية. + - تمرّر `pnpm test` و`pnpm test:watch` و`pnpm test:perf:imports` أهداف الملفات/الأدلة الصريحة عبر المسارات المحددة أولًا، لذلك يتجنب `pnpm test extensions/discord/src/monitor/message-handler.preflight.test.ts` تكلفة بدء تشغيل مشروع الجذر الكامل. + - يقوم `pnpm test:changed` بتوسيع مسارات git المتغيرة إلى المسارات المحددة نفسها عندما يلمس الفرق فقط ملفات المصدر/الاختبار القابلة للتوجيه؛ أما تعديلات الإعداد/التهيئة فتعيد اللجوء إلى إعادة تشغيل مشروع الجذر الواسعة. + - يتم توجيه اختبارات unit الخفيفة من ناحية الاستيراد من الوكلاء، والأوامر، وPlugins، ومساعدات auto-reply، و`plugin-sdk`، والمناطق النفعية الخالصة المشابهة عبر المسار `unit-fast`، الذي يتجاوز `test/setup-openclaw-runtime.ts`؛ أما الملفات الثقيلة من ناحية الحالة/وقت التشغيل فتبقى على المسارات الحالية. + - تقوم بعض ملفات المصدر المساعدة المحددة في `plugin-sdk` و`commands` أيضًا بربط التشغيلات في وضع التغييرات باختبارات شقيقة صريحة ضمن تلك المسارات الخفيفة، بحيث تتجنب تعديلات المساعدات إعادة تشغيل الجناح الثقيل الكامل لذلك الدليل. + - أصبح لدى `auto-reply` الآن ثلاث حزم مخصصة: مساعدات core من المستوى الأعلى، واختبارات التكامل `reply.*` من المستوى الأعلى، والشجرة الفرعية `src/auto-reply/reply/**`. هذا يبقي أصعب أعمال reply harness بعيدًا عن اختبارات الحالة/التجزئة/الرمز الأرخص. +- ملاحظة المشغّل المضمّن: + - عندما تغيّر مدخلات اكتشاف أدوات الرسائل أو سياق وقت تشغيل Compaction، حافظ على مستويي التغطية معًا. - - أضف اختبارات انحدار مركزة للمساعدات لحدود التوجيه/التطبيع الخالصة. - - واحرص أيضًا على بقاء أجنحة تكامل المشغّل المضمن سليمة: + - أضف اختبارات منع تراجع مركّزة للمساعدات عند حدود التوجيه/التطبيع الخالصة. + - وحافظ أيضًا على سلامة أجنحة تكامل المشغّل المضمّن: `src/agents/pi-embedded-runner/compact.hooks.test.ts`، `src/agents/pi-embedded-runner/run.overflow-compaction.test.ts`، و `src/agents/pi-embedded-runner/run.overflow-compaction.loop.test.ts`. - تتحقق هذه الأجنحة من أن المعرّفات المحددة وسلوك Compaction لا يزالان يمران - عبر المسارات الحقيقية `run.ts` / `compact.ts`؛ ولا تكفي اختبارات المساعدات - وحدها كبديل لهذه مسارات التكامل. -- ملاحظة حول الـ pool: - - أصبح الإعداد الأساسي لـ Vitest يستخدم `threads` افتراضيًا. - - كما يثبت إعداد Vitest المشترك `isolate: false` ويستخدم المشغّل غير المعزول عبر مشاريع الجذر وتهيئات e2e وlive. - - يحتفظ مسار UI في الجذر بإعداد `jsdom` والمحسّن الخاص به، لكنه يعمل الآن على المشغّل المشترك غير المعزول أيضًا. - - يرث كل shard في `pnpm test` افتراضيات `threads` + `isolate: false` نفسها من إعداد Vitest المشترك. - - يضيف مشغّل `scripts/run-vitest.mjs` المشترك الآن أيضًا `--no-maglev` لعمليات Node الفرعية الخاصة بـ Vitest افتراضيًا لتقليل churn في ترجمة V8 أثناء التشغيلات المحلية الكبيرة. اضبط `OPENCLAW_VITEST_ENABLE_MAGLEV=1` إذا كنت بحاجة إلى المقارنة مع سلوك V8 الافتراضي. -- ملاحظة حول التكرار المحلي السريع: - - يوجّه `pnpm test:changed` عبر المسارات المحددة عندما تطابق المسارات المتغيرة جناحًا أصغر بوضوح. - - يحتفظ `pnpm test:max` و`pnpm test:changed:max` بسلوك التوجيه نفسه، فقط مع حد أعلى أكبر للعمّال. - - أصبح التوسيع التلقائي لعدد العمّال محليًا محافظًا عمدًا الآن ويتراجع أيضًا عندما يكون متوسط حمل المضيف مرتفعًا بالفعل، بحيث تسبب عدة تشغيلات Vitest متزامنة ضررًا أقل افتراضيًا. - - يعلّم إعداد Vitest الأساسي ملفات المشاريع/الإعدادات على أنها `forceRerunTriggers` حتى تظل إعادة التشغيل في وضع changed صحيحة عندما تتغير توصيلات الاختبار. - - يبقي الإعداد `OPENCLAW_VITEST_FS_MODULE_CACHE` مفعّلًا على المضيفات المدعومة؛ اضبط `OPENCLAW_VITEST_FS_MODULE_CACHE_PATH=/abs/path` إذا أردت موقع cache صريحًا واحدًا لإجراء profiling مباشر. -- ملاحظة حول تصحيح الأداء: + عبر المسارات الحقيقية `run.ts` / `compact.ts`؛ اختبارات المساعدات وحدها ليست + بديلًا كافيًا لهذه مسارات التكامل. +- ملاحظة التجميعة: + - أصبح إعداد Vitest الأساسي يستخدم `threads` افتراضيًا. + - كما يثبّت إعداد Vitest المشترك `isolate: false` ويستخدم المشغّل غير المعزول عبر مشاريع الجذر وتهيئات e2e وlive. + - يحتفظ مسار UI في الجذر بإعداد `jsdom` والمُحسّن الخاص به، لكنه يعمل الآن أيضًا على المشغّل المشترك غير المعزول. + - ترث كل شظية من `pnpm test` القيم الافتراضية نفسها `threads` + `isolate: false` من إعداد Vitest المشترك. + - يضيف مشغّل `scripts/run-vitest.mjs` المشترك الآن أيضًا `--no-maglev` افتراضيًا لعمليات Node الفرعية الخاصة بـ Vitest لتقليل تذبذب تجميع V8 أثناء التشغيلات المحلية الكبيرة. اضبط `OPENCLAW_VITEST_ENABLE_MAGLEV=1` إذا كنت تحتاج إلى المقارنة مع سلوك V8 الافتراضي. +- ملاحظة التكرار المحلي السريع: + - يوجّه `pnpm test:changed` عبر المسارات المحددة عندما ترتبط المسارات المتغيرة بجناح أصغر بشكل واضح. + - يحتفظ `pnpm test:max` و`pnpm test:changed:max` بسلوك التوجيه نفسه، لكن مع حد أعلى أكبر للعمّال. + - أصبح التحجيم التلقائي للعمّال محليًا محافظًا عمدًا الآن، كما يتراجع أيضًا عندما يكون متوسط حمل المضيف مرتفعًا أصلًا، بحيث تُحدث تشغيلات Vitest المتزامنة المتعددة ضررًا أقل افتراضيًا. + - يضع إعداد Vitest الأساسي ملفات المشاريع/الإعدادات بوصفها `forceRerunTriggers` بحيث تبقى إعادة التشغيل في وضع التغييرات صحيحة عندما يتغير توصيل الاختبارات. + - يحافظ الإعداد على تفعيل `OPENCLAW_VITEST_FS_MODULE_CACHE` على المضيفين المدعومين؛ اضبط `OPENCLAW_VITEST_FS_MODULE_CACHE_PATH=/abs/path` إذا كنت تريد موقع ذاكرة تخزين مؤقت واحدًا صريحًا لإجراء تحليل مباشر. +- ملاحظة تصحيح الأداء: - يفعّل `pnpm test:perf:imports` تقارير مدة الاستيراد في Vitest بالإضافة إلى مخرجات تفصيل الاستيراد. - - يحدد `pnpm test:perf:imports:changed` عرض profiling نفسه للملفات المتغيرة منذ `origin/main`. -- يقارن `pnpm test:perf:changed:bench -- --ref ` بين `test:changed` الموجّه ومسار root-project الأصلي لذلك الفرق الملتزم ويطبع زمن التنفيذ بالإضافة إلى أقصى RSS على macOS. -- يقيس `pnpm test:perf:changed:bench -- --worktree` الشجرة المتسخة الحالية عبر توجيه قائمة الملفات المتغيرة من خلال `scripts/test-projects.mjs` وإعداد Vitest في الجذر. - - يكتب `pnpm test:perf:profile:main` ملف CPU profile للخيط الرئيسي لكلفة بدء تشغيل Vitest/Vite والتحويل. - - يكتب `pnpm test:perf:profile:runner` ملفات CPU+heap profile للمشغّل لجناح unit مع تعطيل التوازي على مستوى الملفات. + - يقيّد `pnpm test:perf:imports:changed` عرض التحليل نفسه على الملفات المتغيرة منذ `origin/main`. +- يقارن `pnpm test:perf:changed:bench -- --ref ` بين `test:changed` الموجّه ومسار مشروع الجذر الأصلي لذلك الفرق الملتزم ويطبع الزمن الفعلي بالإضافة إلى macOS max RSS. +- يقوم `pnpm test:perf:changed:bench -- --worktree` بقياس أداء الشجرة المتسخة الحالية عبر تمرير قائمة الملفات المتغيرة من خلال `scripts/test-projects.mjs` وتهيئة Vitest للجذر. + - يكتب `pnpm test:perf:profile:main` ملف تعريف CPU للخيط الرئيسي لتكاليف بدء تشغيل Vitest/Vite والتحويل. + - يكتب `pnpm test:perf:profile:runner` ملفات تعريف CPU+heap للمشغّل لجناح unit مع تعطيل التوازي على مستوى الملفات. -### E2E (gateway smoke) +### E2E (اختبار smoke للـ Gateway) - الأمر: `pnpm test:e2e` - الإعداد: `vitest.e2e.config.ts` -- الملفات: `src/**/*.e2e.test.ts`، `test/**/*.e2e.test.ts` -- افتراضيات وقت التشغيل: +- الملفات: `src/**/*.e2e.test.ts` و`test/**/*.e2e.test.ts` +- الإعدادات الافتراضية لوقت التشغيل: - يستخدم Vitest `threads` مع `isolate: false`، بما يطابق بقية المستودع. - يستخدم عمّالًا تكيفيين (CI: حتى 2، محليًا: 1 افتراضيًا). - - يعمل في الوضع الصامت افتراضيًا لتقليل حمل إدخال/إخراج الطرفية. -- بدائل مفيدة: + - يعمل في الوضع الصامت افتراضيًا لتقليل كلفة إدخال/إخراج وحدة التحكم. +- تجاوزات مفيدة: - `OPENCLAW_E2E_WORKERS=` لفرض عدد العمّال (بحد أقصى 16). - - `OPENCLAW_E2E_VERBOSE=1` لإعادة تفعيل مخرجات الطرفية التفصيلية. + - `OPENCLAW_E2E_VERBOSE=1` لإعادة تفعيل خرج وحدة التحكم المفصّل. - النطاق: - - سلوك Gateway من طرف إلى طرف مع عدة مثيلات - - أسطح WebSocket/HTTP، وإقران Node، والشبكات الأثقل + - سلوك end-to-end للـ Gateway متعدد المثيلات + - أسطح WebSocket/HTTP، واقتران العقد، والشبكات الأثقل - التوقعات: - - يعمل في CI (عند تفعيله في خط الأنابيب) + - يعمل في CI (عندما يكون مفعّلًا في خط المعالجة) - لا يتطلب مفاتيح حقيقية - يحتوي على أجزاء متحركة أكثر من اختبارات unit (وقد يكون أبطأ) -### E2E: OpenShell backend smoke +### E2E: اختبار smoke للخلفية OpenShell - الأمر: `pnpm test:e2e:openshell` - الملف: `test/openshell-sandbox.e2e.test.ts` - النطاق: - - يبدأ OpenShell gateway معزولًا على المضيف عبر Docker + - يبدأ Gateway OpenShell معزولًا على المضيف عبر Docker - ينشئ sandbox من Dockerfile محلي مؤقت - - يمارس OpenShell backend في OpenClaw عبر `sandbox ssh-config` حقيقي + تنفيذ SSH - - يتحقق من سلوك نظام الملفات canonical البعيد عبر جسر sandbox fs + - يمارس خلفية OpenShell في OpenClaw عبر `sandbox ssh-config` الحقيقي + تنفيذ SSH + - يتحقق من سلوك نظام الملفات canonical البعيد عبر جسر نظام ملفات sandbox - التوقعات: - - تفعيل اختياري فقط؛ ليس جزءًا من التشغيل الافتراضي `pnpm test:e2e` - - يتطلب CLI محليًا لـ `openshell` بالإضافة إلى Docker daemon عامل - - يستخدم `HOME` / `XDG_CONFIG_HOME` معزولين، ثم يدمّر test gateway وsandbox -- بدائل مفيدة: + - اختياري فقط؛ ليس جزءًا من تشغيل `pnpm test:e2e` الافتراضي + - يتطلب CLI محليًا لـ `openshell` بالإضافة إلى daemon Docker عامل + - يستخدم `HOME` / `XDG_CONFIG_HOME` معزولين، ثم يدمّر Gateway الاختبار وsandbox +- تجاوزات مفيدة: - `OPENCLAW_E2E_OPENSHELL=1` لتفعيل الاختبار عند تشغيل جناح e2e الأوسع يدويًا - - `OPENCLAW_E2E_OPENSHELL_COMMAND=/path/to/openshell` للإشارة إلى ملف CLI binary غير افتراضي أو wrapper script + - `OPENCLAW_E2E_OPENSHELL_COMMAND=/path/to/openshell` للإشارة إلى ملف CLI ثنائي غير افتراضي أو نص wrapper ### Live (مزوّدون حقيقيون + نماذج حقيقية) @@ -348,30 +347,30 @@ pnpm openclaw qa credentials remove --credential-id - الملفات: `src/**/*.live.test.ts` - الافتراضي: **مفعّل** بواسطة `pnpm test:live` (يضبط `OPENCLAW_LIVE_TEST=1`) - النطاق: - - «هل يعمل هذا المزوّد/النموذج فعليًا _اليوم_ باستخدام بيانات اعتماد حقيقية؟» - - التقاط تغييرات تنسيق المزوّد، وخصوصيات استدعاء الأدوات، ومشكلات المصادقة، وسلوك حدود المعدل + - "هل يعمل هذا المزوّد/النموذج بالفعل _اليوم_ باستخدام بيانات اعتماد حقيقية؟" + - التقاط تغيّرات تنسيق المزوّد، وخصوصيات استدعاء الأدوات، ومشكلات المصادقة، وسلوك حدود المعدل - التوقعات: - - غير مستقر في CI بطبيعته (شبكات حقيقية، وسياسات مزوّد حقيقية، وحصص، وانقطاعات) + - غير مستقر بطبيعته في CI (شبكات حقيقية، وسياسات مزوّدين حقيقية، وحصص، وانقطاعات) - يكلّف مالًا / يستهلك حدود المعدل - - يُفضّل تشغيل مجموعات فرعية مضيقة بدلًا من «كل شيء» -- تستورد التشغيلات الحية `~/.profile` لالتقاط مفاتيح API الناقصة. -- افتراضيًا، لا تزال التشغيلات الحية تعزل `HOME` وتنسخ مواد config/auth إلى test home مؤقت حتى لا تتمكن تركيبات unit الثابتة من تعديل `~/.openclaw` الحقيقي لديك. -- اضبط `OPENCLAW_LIVE_USE_REAL_HOME=1` فقط عندما تحتاج عمدًا إلى أن تستخدم الاختبارات الحية دليل المنزل الحقيقي لديك. -- أصبح `pnpm test:live` افتراضيًا يعمل في وضع أهدأ: فهو يحتفظ بمخرجات التقدم `[live] ...`، لكنه يخفي إشعار `~/.profile` الإضافي ويكتم سجلات bootstrap الخاصة بـ gateway وضجيج Bonjour. اضبط `OPENCLAW_LIVE_TEST_QUIET=0` إذا أردت سجلات البدء الكاملة مجددًا. -- تدوير مفاتيح API (خاص بالمزوّد): اضبط `*_API_KEYS` باستخدام صيغة الفاصلة/الفاصلة المنقوطة أو `*_API_KEY_1` و`*_API_KEY_2` (على سبيل المثال `OPENAI_API_KEYS` و`ANTHROPIC_API_KEYS` و`GEMINI_API_KEYS`) أو استخدم override لكل live عبر `OPENCLAW_LIVE_*_KEY`؛ تعيد الاختبارات المحاولة عند استجابات rate limit. -- مخرجات التقدم/Heartbeat: - - تصدر الأجنحة الحية الآن أسطر التقدم إلى stderr بحيث يظهر أن استدعاءات المزوّد الطويلة نشطة حتى عندما يكون التقاط الطرفية في Vitest هادئًا. - - يعطّل `vitest.live.config.ts` اعتراض الطرفية في Vitest بحيث تتدفق أسطر تقدم المزوّد/gateway فورًا أثناء التشغيلات الحية. - - اضبط Heartbeat للنموذج المباشر باستخدام `OPENCLAW_LIVE_HEARTBEAT_MS`. - - اضبط Heartbeat الخاص بـ gateway/probe باستخدام `OPENCLAW_LIVE_GATEWAY_HEARTBEAT_MS`. + - يُفضّل تشغيل مجموعات فرعية مضيقة بدلًا من "كل شيء" +- تستورد تشغيلات live الملف `~/.profile` لاكتشاف مفاتيح API المفقودة. +- افتراضيًا، لا تزال تشغيلات live تعزل `HOME` وتنسخ مواد الإعداد/المصادقة إلى منزل اختبار مؤقت حتى لا تتمكن تركيبات unit من تعديل `~/.openclaw` الحقيقي لديك. +- اضبط `OPENCLAW_LIVE_USE_REAL_HOME=1` فقط عندما تحتاج عمدًا إلى أن تستخدم اختبارات live دليل المنزل الحقيقي لديك. +- يستخدم `pnpm test:live` الآن وضعًا أكثر هدوءًا افتراضيًا: فهو يحتفظ بمخرجات التقدم `[live] ...`، لكنه يخفي إشعار `~/.profile` الإضافي ويكتم سجلات تمهيد Gateway وضوضاء Bonjour. اضبط `OPENCLAW_LIVE_TEST_QUIET=0` إذا كنت تريد استعادة سجلات بدء التشغيل الكاملة. +- تدوير مفاتيح API (خاص بكل مزوّد): اضبط `*_API_KEYS` بتنسيق فاصلة/فاصلة منقوطة أو `*_API_KEY_1` و`*_API_KEY_2` (مثل `OPENAI_API_KEYS` و`ANTHROPIC_API_KEYS` و`GEMINI_API_KEYS`) أو تجاوزًا لكل live عبر `OPENCLAW_LIVE_*_KEY`؛ تعيد الاختبارات المحاولة عند الاستجابات المرتبطة بحد المعدل. +- مخرجات التقدّم/الـ Heartbeat: + - تصدر أجنحة live الآن أسطر التقدّم إلى stderr بحيث تظهر استدعاءات المزوّد الطويلة وكأنها نشطة بوضوح حتى عندما يكون التقاط وحدة تحكم Vitest هادئًا. + - يعطّل `vitest.live.config.ts` اعتراض Vitest لوحدة التحكم بحيث تُبث أسطر تقدّم المزوّد/الـ Gateway فورًا أثناء تشغيلات live. + - اضبط Heartbeat النموذج المباشر باستخدام `OPENCLAW_LIVE_HEARTBEAT_MS`. + - اضبط Heartbeat الـ Gateway/المجسّ باستخدام `OPENCLAW_LIVE_GATEWAY_HEARTBEAT_MS`. -## ما الجناح الذي يجب أن أشغّله؟ +## أي جناح يجب أن أشغّل؟ استخدم جدول القرار هذا: -- عند تعديل المنطق/الاختبارات: شغّل `pnpm test` (و`pnpm test:coverage` إذا غيّرت الكثير) -- عند لمس شبكات gateway / بروتوكول WS / الإقران: أضف `pnpm test:e2e` -- عند تصحيح «تعطل bot الخاص بي» / الأعطال الخاصة بالمزوّد / استدعاء الأدوات: شغّل `pnpm test:live` بعد تضييقه +- تعديل المنطق/الاختبارات: شغّل `pnpm test` (و`pnpm test:coverage` إذا غيّرت الكثير) +- لمس شبكات Gateway / بروتوكول WS / الاقتران: أضف `pnpm test:e2e` +- تصحيح "البوت الخاص بي متعطل" / الإخفاقات الخاصة بالمزوّد / استدعاء الأدوات: شغّل `pnpm test:live` على مجموعة فرعية مضيقة ## Live: مسح قدرات Android Node @@ -380,109 +379,109 @@ pnpm openclaw qa credentials remove --credential-id - الهدف: استدعاء **كل أمر مُعلن عنه حاليًا** من Android Node متصل والتحقق من سلوك عقد الأمر. - النطاق: - إعداد مسبق/يدوي (لا يقوم الجناح بتثبيت التطبيق أو تشغيله أو إقرانه). - - التحقق من `node.invoke` في Gateway أمرًا بأمر لـ Android Node المحدد. + - تحقق `node.invoke` على مستوى Gateway لكل أمر بالنسبة إلى Android Node المحدد. - الإعداد المسبق المطلوب: - - أن يكون تطبيق Android متصلًا ومقترنًا بالفعل مع gateway. + - تطبيق Android متصل ومقترن بالفعل مع Gateway. - إبقاء التطبيق في الواجهة الأمامية. - منح الأذونات/موافقة الالتقاط للقدرات التي تتوقع نجاحها. -- بدائل الهدف الاختيارية: +- تجاوزات الهدف الاختيارية: - `OPENCLAW_ANDROID_NODE_ID` أو `OPENCLAW_ANDROID_NODE_NAME`. - `OPENCLAW_ANDROID_GATEWAY_URL` / `OPENCLAW_ANDROID_GATEWAY_TOKEN` / `OPENCLAW_ANDROID_GATEWAY_PASSWORD`. -- تفاصيل إعداد Android الكاملة: [تطبيق Android](/ar/platforms/android) +- تفاصيل إعداد Android الكاملة: [Android App](/ar/platforms/android) -## Live: فحص Smoke للنموذج (مفاتيح profile) +## Live: اختبار smoke للنموذج (مفاتيح profile) -تنقسم الاختبارات الحية إلى طبقتين حتى نتمكن من عزل الإخفاقات: +تنقسم اختبارات live إلى طبقتين حتى نتمكن من عزل الإخفاقات: -- «النموذج المباشر» يخبرنا ما إذا كان المزوّد/النموذج قادرًا على الاستجابة أصلًا باستخدام المفتاح المعطى. -- «فحص Smoke للـ Gateway» يخبرنا ما إذا كان خط gateway+agent الكامل يعمل لهذا النموذج (الجلسات، السجل، الأدوات، سياسة sandbox، إلخ). +- يخبرنا "النموذج المباشر" ما إذا كان المزوّد/النموذج قادرًا على الإجابة أصلًا باستخدام المفتاح المحدد. +- يخبرنا "اختبار smoke للـ Gateway" ما إذا كان مسار Gateway+الوكيل الكامل يعمل لهذا النموذج (الجلسات، والسجل، والأدوات، وسياسة sandbox، وما إلى ذلك). -### الطبقة 1: إكمال النموذج المباشر (بدون gateway) +### الطبقة 1: إكمال النموذج المباشر (من دون Gateway) - الاختبار: `src/agents/models.profiles.live.test.ts` - الهدف: - تعداد النماذج المكتشفة - استخدام `getApiKeyForModel` لاختيار النماذج التي لديك بيانات اعتماد لها - - تشغيل إكمال صغير لكل نموذج (واختبارات انحدار مستهدفة عند الحاجة) + - تشغيل إكمال صغير لكل نموذج (واختبارات منع تراجع موجهة عند الحاجة) - كيفية التفعيل: - `pnpm test:live` (أو `OPENCLAW_LIVE_TEST=1` إذا كنت تستدعي Vitest مباشرة) -- اضبط `OPENCLAW_LIVE_MODELS=modern` (أو `all`، وهو اسم بديل لـ modern) لتشغيل هذا الجناح فعليًا؛ وإلا فسيتخطاه للحفاظ على تركيز `pnpm test:live` على فحص Gateway smoke +- اضبط `OPENCLAW_LIVE_MODELS=modern` (أو `all`، وهو اسم بديل لـ modern) لتشغيل هذا الجناح فعليًا؛ وإلا فسيتم تخطيه للإبقاء على تركيز `pnpm test:live` على اختبار smoke للـ Gateway - كيفية اختيار النماذج: - - `OPENCLAW_LIVE_MODELS=modern` لتشغيل allowlist الحديث (Opus/Sonnet 4.6+، وGPT-5.x + Codex، وGemini 3، وGLM 4.7، وMiniMax M2.7، وGrok 4) - - `OPENCLAW_LIVE_MODELS=all` هو اسم بديل لـ allowlist الحديث - - أو `OPENCLAW_LIVE_MODELS="openai/gpt-5.4,anthropic/claude-opus-4-6,..."` (allowlist مفصول بفواصل) + - `OPENCLAW_LIVE_MODELS=modern` لتشغيل قائمة السماح الحديثة (Opus/Sonnet 4.6+، وGPT-5.x + Codex، وGemini 3، وGLM 4.7، وMiniMax M2.7، وGrok 4) + - `OPENCLAW_LIVE_MODELS=all` هو اسم بديل لقائمة السماح الحديثة + - أو `OPENCLAW_LIVE_MODELS="openai/gpt-5.4,anthropic/claude-opus-4-6,..."` (قائمة سماح مفصولة بفواصل) - تستخدم عمليات المسح modern/all افتراضيًا حدًا منسقًا عالي الإشارة؛ اضبط `OPENCLAW_LIVE_MAX_MODELS=0` لإجراء مسح حديث شامل أو قيمة موجبة لحد أصغر. - كيفية اختيار المزوّدين: - - `OPENCLAW_LIVE_PROVIDERS="google,google-antigravity,google-gemini-cli"` (allowlist مفصول بفواصل) + - `OPENCLAW_LIVE_PROVIDERS="google,google-antigravity,google-gemini-cli"` (قائمة سماح مفصولة بفواصل) - من أين تأتي المفاتيح: - - افتراضيًا: مخزن profile وبدائل env - - اضبط `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` لفرض **مخزن profile** فقط + - افتراضيًا: مخزن profiles وبدائل البيئة + - اضبط `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` لفرض **مخزن profiles** فقط - سبب وجود هذا: - - يفصل بين «واجهة API الخاصة بالمزوّد معطلة / المفتاح غير صالح» و«مسار gateway agent معطل» - - يحتوي اختبارات انحدار صغيرة ومعزولة (مثال: OpenAI Responses/Codex Responses reasoning replay + تدفقات tool-call) + - يفصل بين "واجهة API الخاصة بالمزوّد معطلة / المفتاح غير صالح" و"مسار وكيل الـ Gateway معطل" + - يحتوي على اختبارات منع تراجع صغيرة ومعزولة (مثال: OpenAI Responses/Codex Responses reasoning replay + تدفقات استدعاء الأدوات) -### الطبقة 2: Gateway + فحص Smoke لوكيل dev (ما الذي يفعله "@openclaw" فعليًا) +### الطبقة 2: اختبار smoke للـ Gateway + وكيل dev (ما الذي يفعله "@openclaw" فعليًا) - الاختبار: `src/gateway/gateway-models.profiles.live.test.ts` - الهدف: - - تشغيل gateway داخل العملية - - إنشاء/ترقيع جلسة `agent:dev:*` (مع override للنموذج في كل تشغيل) - - تكرار models-with-keys والتحقق من: - - استجابة «ذات معنى» (بدون أدوات) - - نجاح استدعاء أداة حقيقي (فحص `read`) - - فحوصات أدوات إضافية اختيارية (فحص `exec+read`) - - استمرار عمل مسارات انحدار OpenAI (tool-call-only → follow-up) -- تفاصيل الفحص (حتى تتمكن من شرح الإخفاقات بسرعة): - - فحص `read`: يكتب الاختبار ملف nonce في مساحة العمل ويطلب من الوكيل `read` له وإرجاع nonce. - - فحص `exec+read`: يطلب الاختبار من الوكيل كتابة nonce عبر `exec` في ملف مؤقت، ثم `read` له مجددًا. - - فحص الصورة: يرفق الاختبار ملف PNG مولدًا (قطة + رمز عشوائي) ويتوقع من النموذج إرجاع `cat `. + - تشغيل Gateway داخل العملية + - إنشاء/ترقيع جلسة `agent:dev:*` (مع تجاوز النموذج لكل تشغيل) + - تكرار النماذج التي لها مفاتيح والتحقق من: + - استجابة "ذات معنى" (من دون أدوات) + - نجاح استدعاء أداة حقيقي (مجس `read`) + - مجسّات أدوات إضافية اختيارية (مجس `exec+read`) + - استمرار عمل مسارات منع التراجع الخاصة بـ OpenAI (استدعاء أداة فقط → متابعة) +- تفاصيل المجسّات (حتى تتمكن من شرح الإخفاقات بسرعة): + - مجس `read`: يكتب الاختبار ملف nonce في مساحة العمل ويطلب من الوكيل أن يقرأه باستخدام `read` ثم يعيد nonce. + - مجس `exec+read`: يطلب الاختبار من الوكيل استخدام `exec` لكتابة nonce في ملف مؤقت، ثم قراءته مجددًا. + - مجس الصور: يرفق الاختبار صورة PNG مولدة (قطة + رمز عشوائي) ويتوقع أن يعيد النموذج `cat `. - مرجع التنفيذ: `src/gateway/gateway-models.profiles.live.test.ts` و`src/gateway/live-image-probe.ts`. - كيفية التفعيل: - `pnpm test:live` (أو `OPENCLAW_LIVE_TEST=1` إذا كنت تستدعي Vitest مباشرة) - كيفية اختيار النماذج: - - الافتراضي: allowlist الحديث (Opus/Sonnet 4.6+، وGPT-5.x + Codex، وGemini 3، وGLM 4.7، وMiniMax M2.7، وGrok 4) - - `OPENCLAW_LIVE_GATEWAY_MODELS=all` هو اسم بديل لـ allowlist الحديث + - الافتراضي: قائمة السماح الحديثة (Opus/Sonnet 4.6+، وGPT-5.x + Codex، وGemini 3، وGLM 4.7، وMiniMax M2.7، وGrok 4) + - `OPENCLAW_LIVE_GATEWAY_MODELS=all` هو اسم بديل لقائمة السماح الحديثة - أو اضبط `OPENCLAW_LIVE_GATEWAY_MODELS="provider/model"` (أو قائمة مفصولة بفواصل) للتضييق - - تستخدم عمليات مسح gateway modern/all افتراضيًا حدًا منسقًا عالي الإشارة؛ اضبط `OPENCLAW_LIVE_GATEWAY_MAX_MODELS=0` لإجراء مسح حديث شامل أو قيمة موجبة لحد أصغر. -- كيفية اختيار المزوّدين (تجنب «كل شيء عبر OpenRouter»): - - `OPENCLAW_LIVE_GATEWAY_PROVIDERS="google,google-antigravity,google-gemini-cli,openai,anthropic,zai,minimax"` (allowlist مفصول بفواصل) -- فحوصات الأدوات + الصور مفعلة دائمًا في هذا الاختبار الحي: - - فحص `read` + فحص `exec+read` (إجهاد الأدوات) - - يعمل فحص الصورة عندما يعلن النموذج دعم إدخال الصور + - تستخدم عمليات مسح Gateway modern/all افتراضيًا حدًا منسقًا عالي الإشارة؛ اضبط `OPENCLAW_LIVE_GATEWAY_MAX_MODELS=0` لإجراء مسح حديث شامل أو قيمة موجبة لحد أصغر. +- كيفية اختيار المزوّدين (تجنب "كل شيء في OpenRouter"): + - `OPENCLAW_LIVE_GATEWAY_PROVIDERS="google,google-antigravity,google-gemini-cli,openai,anthropic,zai,minimax"` (قائمة سماح مفصولة بفواصل) +- تكون مجسّات الأدوات + الصور مفعّلة دائمًا في هذا الاختبار الحي: + - مجس `read` + مجس `exec+read` (ضغط على الأدوات) + - يعمل مجس الصور عندما يعلن النموذج دعم إدخال الصور - التدفق (على مستوى عالٍ): - - يولد الاختبار ملف PNG صغيرًا يحتوي على “CAT” + رمز عشوائي (`src/gateway/live-image-probe.ts`) - - يرسله عبر `agent` `attachments: [{ mimeType: "image/png", content: "" }]` + - يولّد الاختبار صورة PNG صغيرة تحتوي على “CAT” + رمز عشوائي (`src/gateway/live-image-probe.ts`) + - يرسلها عبر `agent` `attachments: [{ mimeType: "image/png", content: "" }]` - يحلل Gateway المرفقات إلى `images[]` (`src/gateway/server-methods/agent.ts` + `src/gateway/chat-attachments.ts`) - - يمرر الوكيل المضمن رسالة مستخدم متعددة الوسائط إلى النموذج - - التحقق: تحتوي الاستجابة على `cat` + الرمز (سماحية OCR: تُسمح الأخطاء الطفيفة) + - يمرّر الوكيل المضمّن رسالة مستخدم متعددة الوسائط إلى النموذج + - التحقق: يحتوي الرد على `cat` + الرمز (سماحية OCR: يُسمح بأخطاء طفيفة) -نصيحة: لمعرفة ما الذي يمكنك اختباره على جهازك (ومعرفات `provider/model` الدقيقة)، شغّل: +نصيحة: لمعرفة ما يمكنك اختباره على جهازك (ومعرّفات `provider/model` الدقيقة)، شغّل: ```bash openclaw models list openclaw models list --json ``` -## Live: فحص Smoke للواجهة الخلفية CLI (Claude أو Codex أو Gemini أو غيرها من CLI المحلية) +## Live: اختبار smoke لخلفية CLI ‏(Claude أو Codex أو Gemini أو CLIs محلية أخرى) - الاختبار: `src/gateway/gateway-cli-backend.live.test.ts` -- الهدف: التحقق من مسار Gateway + الوكيل باستخدام واجهة خلفية CLI محلية، دون المساس بإعدادك الافتراضي. -- توجد افتراضيات فحص Smoke الخاصة بكل واجهة خلفية مع تعريف `cli-backend.ts` الذي تملكه الإضافة المعنية. +- الهدف: التحقق من مسار Gateway + الوكيل باستخدام خلفية CLI محلية، من دون لمس إعدادك الافتراضي. +- توجد إعدادات smoke الافتراضية الخاصة بكل خلفية داخل تعريف `cli-backend.ts` التابع للامتداد المالك. - التفعيل: - `pnpm test:live` (أو `OPENCLAW_LIVE_TEST=1` إذا كنت تستدعي Vitest مباشرة) - `OPENCLAW_LIVE_CLI_BACKEND=1` -- الافتراضيات: +- الإعدادات الافتراضية: - المزوّد/النموذج الافتراضي: `claude-cli/claude-sonnet-4-6` - - يأتي سلوك الأمر/الوسائط/الصور من metadata الخاصة بـ Plugin الواجهة الخلفية CLI المالكة. -- التبديلات الاختيارية: + - يأتي سلوك الأمر/المعاملات/الصور من بيانات تعريف Plugin الخلفية CLI المالكة. +- التجاوزات (اختيارية): - `OPENCLAW_LIVE_CLI_BACKEND_MODEL="codex-cli/gpt-5.4"` - `OPENCLAW_LIVE_CLI_BACKEND_COMMAND="/full/path/to/codex"` - `OPENCLAW_LIVE_CLI_BACKEND_ARGS='["exec","--json","--color","never","--sandbox","read-only","--skip-git-repo-check"]'` - - `OPENCLAW_LIVE_CLI_BACKEND_IMAGE_PROBE=1` لإرسال مرفق صورة حقيقي (تُحقن المسارات في prompt). - - `OPENCLAW_LIVE_CLI_BACKEND_IMAGE_ARG="--image"` لتمرير مسارات ملفات الصور بوصفها وسائط CLI بدلًا من حقنها في prompt. - - `OPENCLAW_LIVE_CLI_BACKEND_IMAGE_MODE="repeat"` (أو `"list"`) للتحكم في كيفية تمرير وسائط الصور عند ضبط `IMAGE_ARG`. + - `OPENCLAW_LIVE_CLI_BACKEND_IMAGE_PROBE=1` لإرسال مرفق صورة حقيقي (تُحقن المسارات في الموجّه). + - `OPENCLAW_LIVE_CLI_BACKEND_IMAGE_ARG="--image"` لتمرير مسارات ملفات الصور كمعاملات CLI بدلًا من حقنها في الموجّه. + - `OPENCLAW_LIVE_CLI_BACKEND_IMAGE_MODE="repeat"` (أو `"list"`) للتحكم في كيفية تمرير معاملات الصور عند ضبط `IMAGE_ARG`. - `OPENCLAW_LIVE_CLI_BACKEND_RESUME_PROBE=1` لإرسال دورة ثانية والتحقق من تدفق الاستئناف. - - `OPENCLAW_LIVE_CLI_BACKEND_MODEL_SWITCH_PROBE=0` لتعطيل فحص الاستمرارية الافتراضي للجلسة نفسها من Claude Sonnet إلى Opus (اضبطه إلى `1` لفرض تفعيله عندما يدعم النموذج المحدد هدف تبديل). + - `OPENCLAW_LIVE_CLI_BACKEND_MODEL_SWITCH_PROBE=0` لتعطيل مجس الاستمرارية الافتراضي داخل الجلسة نفسها من Claude Sonnet إلى Opus (اضبطه على `1` لفرض تفعيله عندما يدعم النموذج المحدد هدف تبديل). مثال: @@ -510,37 +509,37 @@ pnpm test:docker:live-cli-backend:gemini ملاحظات: - يوجد مشغّل Docker في `scripts/test-live-cli-backend-docker.sh`. -- يشغّل فحص Smoke للواجهة الخلفية CLI الحي داخل صورة Docker الخاصة بالمستودع باعتبار المستخدم غير الجذر `node`. -- يحل metadata الخاصة بفحص Smoke من الإضافة المالكة، ثم يثبّت حزمة Linux CLI المطابقة (`@anthropic-ai/claude-code` أو `@openai/codex` أو `@google/gemini-cli`) في prefix قابل للكتابة ومخزن مؤقتًا عند `OPENCLAW_DOCKER_CLI_TOOLS_DIR` (الافتراضي: `~/.cache/openclaw/docker-cli-tools`). -- يتطلب `pnpm test:docker:live-cli-backend:claude-subscription` مصادقة OAuth محمولة لاشتراك Claude Code عبر أحد الخيارين `~/.claude/.credentials.json` مع `claudeAiOauth.subscriptionType` أو `CLAUDE_CODE_OAUTH_TOKEN` من `claude setup-token`. وهو يثبت أولًا نجاح `claude -p` المباشر في Docker، ثم يشغّل دورتين للواجهة الخلفية CLI في Gateway من دون الاحتفاظ بمتغيرات بيئة مفتاح Anthropic API. يعطّل هذا المسار الخاص بالاشتراك فحوصات Claude MCP/tool والصور افتراضيًا لأن Claude يوجّه حاليًا استخدام التطبيقات الخارجية عبر فوترة استخدام إضافي بدلًا من حدود خطة الاشتراك المعتادة. -- أصبح فحص Smoke للواجهة الخلفية CLI الحي الآن يمارس التدفق الكامل نفسه من طرف إلى طرف لكل من Claude وCodex وGemini: دورة نصية، ثم دورة تصنيف صورة، ثم استدعاء أداة MCP `cron` يتم التحقق منه عبر Gateway CLI. -- يقوم فحص Smoke الافتراضي لـ Claude أيضًا بترقيع الجلسة من Sonnet إلى Opus ويتحقق من أن الجلسة المستأنفة لا تزال تتذكر ملاحظة سابقة. +- يشغّل اختبار smoke لخلفية CLI الحي داخل صورة Docker الخاصة بالمستودع كمستخدم `node` غير الجذر. +- يحلّل بيانات تعريف smoke الخاصة بـ CLI من الامتداد المالك، ثم يثبت حزمة Linux CLI المطابقة (`@anthropic-ai/claude-code` أو `@openai/codex` أو `@google/gemini-cli`) في بادئة قابلة للكتابة ومخزنة مؤقتًا عند `OPENCLAW_DOCKER_CLI_TOOLS_DIR` (الافتراضي: `~/.cache/openclaw/docker-cli-tools`). +- يتطلب `pnpm test:docker:live-cli-backend:claude-subscription` مصادقة OAuth محمولة لاشتراك Claude Code عبر أحد الخيارين: `~/.claude/.credentials.json` مع `claudeAiOauth.subscriptionType` أو `CLAUDE_CODE_OAUTH_TOKEN` من `claude setup-token`. يثبت أولًا نجاح `claude -p` مباشرة داخل Docker، ثم يشغّل دورتين لخلفية CLI في Gateway من دون الحفاظ على متغيرات بيئة مفاتيح API الخاصة بـ Anthropic. يعطّل هذا المسار الخاص بالاشتراك افتراضيًا مجسّات Claude MCP/الأدوات والصور لأن Claude يوجّه حاليًا استخدام تطبيقات الطرف الثالث عبر فوترة استخدام إضافي بدلًا من حدود خطة الاشتراك العادية. +- يمارس اختبار smoke لخلفية CLI الحي الآن التدفق end-to-end نفسه لكل من Claude وCodex وGemini: دورة نصية، ثم دورة تصنيف صور، ثم استدعاء أداة MCP `cron` يتم التحقق منه عبر CLI الخاصة بالـ Gateway. +- يقوم اختبار smoke الافتراضي لـ Claude أيضًا بترقيع الجلسة من Sonnet إلى Opus ويتحقق من أن الجلسة المستأنفة لا تزال تتذكر ملاحظة سابقة. -## Live: فحص Smoke لربط ACP (`/acp spawn ... --bind here`) +## Live: اختبار smoke لربط ACP ‏(`/acp spawn ... --bind here`) - الاختبار: `src/gateway/gateway-acp-bind.live.test.ts` -- الهدف: التحقق من تدفق ربط المحادثة ACP الحقيقي باستخدام وكيل ACP حي: +- الهدف: التحقق من تدفق ربط المحادثة الحقيقي في ACP باستخدام وكيل ACP حي: - إرسال `/acp spawn --bind here` - - ربط محادثة قناة رسائل تركيبية في مكانها + - ربط محادثة قناة رسائل اصطناعية في مكانها - إرسال متابعة عادية على نفس المحادثة - التحقق من أن المتابعة تصل إلى transcript جلسة ACP المرتبطة - التفعيل: - `pnpm test:live src/gateway/gateway-acp-bind.live.test.ts` - `OPENCLAW_LIVE_ACP_BIND=1` -- الافتراضيات: +- الإعدادات الافتراضية: - وكلاء ACP في Docker: `claude,codex,gemini` - - وكيل ACP لتشغيل `pnpm test:live ...` المباشر: `claude` - - القناة التركيبية: سياق محادثة بأسلوب Slack DM - - الواجهة الخلفية لـ ACP: `acpx` -- التبديلات: + - وكيل ACP لأمر `pnpm test:live ...` المباشر: `claude` + - القناة الاصطناعية: سياق محادثة على نمط الرسائل الخاصة في Slack + - خلفية ACP: `acpx` +- التجاوزات: - `OPENCLAW_LIVE_ACP_BIND_AGENT=claude` - `OPENCLAW_LIVE_ACP_BIND_AGENT=codex` - `OPENCLAW_LIVE_ACP_BIND_AGENT=gemini` - `OPENCLAW_LIVE_ACP_BIND_AGENTS=claude,codex,gemini` - `OPENCLAW_LIVE_ACP_BIND_AGENT_COMMAND='npx -y @agentclientprotocol/claude-agent-acp@'` - ملاحظات: - - يستخدم هذا المسار سطح Gateway `chat.send` مع حقول originating-route تركيبية مخصصة للمشرف فقط حتى تتمكن الاختبارات من إرفاق سياق قناة الرسائل من دون التظاهر بالتسليم الخارجي. - - عندما لا يتم ضبط `OPENCLAW_LIVE_ACP_BIND_AGENT_COMMAND`، يستخدم الاختبار سجل الوكلاء المضمن في Plugin `acpx` لاختيار وكيل harness ACP المحدد. + - يستخدم هذا المسار سطح `chat.send` في الـ Gateway مع حقول synthetic originating-route إدارية فقط، بحيث يمكن للاختبارات إرفاق سياق قناة الرسائل من دون الادعاء بأنها تسلّم خارجيًا. + - عندما لا يكون `OPENCLAW_LIVE_ACP_BIND_AGENT_COMMAND` مضبوطًا، يستخدم الاختبار سجل الوكلاء المضمّن في Plugin `acpx` للوكلاء المحددين في harness الخاصة بـ ACP. مثال: @@ -567,31 +566,30 @@ pnpm test:docker:live-acp-bind:gemini ملاحظات Docker: - يوجد مشغّل Docker في `scripts/test-live-acp-bind-docker.sh`. -- افتراضيًا، يشغّل فحص Smoke لربط ACP مقابل جميع وكلاء CLI الأحياء المدعومين بالتسلسل: `claude` ثم `codex` ثم `gemini`. +- افتراضيًا، يشغّل اختبار smoke الخاص بربط ACP مقابل جميع وكلاء CLI الحيين المدعومين بالتتابع: `claude` ثم `codex` ثم `gemini`. - استخدم `OPENCLAW_LIVE_ACP_BIND_AGENTS=claude` أو `OPENCLAW_LIVE_ACP_BIND_AGENTS=codex` أو `OPENCLAW_LIVE_ACP_BIND_AGENTS=gemini` لتضييق المصفوفة. -- يقوم بتحميل `~/.profile`، وتجهيز مواد مصادقة CLI المطابقة داخل الحاوية، وتثبيت `acpx` في npm prefix قابل للكتابة، ثم يثبّت CLI الحي المطلوب (`@anthropic-ai/claude-code` أو `@openai/codex` أو `@google/gemini-cli`) إذا كان مفقودًا. -- داخل Docker، يضبط المشغّل `OPENCLAW_LIVE_ACP_BIND_ACPX_COMMAND=$HOME/.npm-global/bin/acpx` حتى يحتفظ acpx بمتغيرات بيئة المزوّد من profile المحمّل متاحةً لـ harness CLI الفرعي. +- يستورد `~/.profile`، ويجهّز مواد مصادقة CLI المطابقة داخل الحاوية، ويثبت `acpx` في بادئة npm قابلة للكتابة، ثم يثبت CLI الحي المطلوب (`@anthropic-ai/claude-code` أو `@openai/codex` أو `@google/gemini-cli`) إذا كان مفقودًا. +- داخل Docker، يضبط المشغّل `OPENCLAW_LIVE_ACP_BIND_ACPX_COMMAND=$HOME/.npm-global/bin/acpx` بحيث يحتفظ acpx بمتغيرات بيئة المزوّد من profile المستورد متاحة لـ CLI الفرعية في harness. -## Live: فحص Smoke لحزمة Codex app-server +## Live: اختبار smoke لـ Codex app-server harness -- الهدف: التحقق من Codex harness المملوك للإضافة عبر الطريقة - العادية `agent` في gateway: - - تحميل Plugin `codex` المضمّن +- الهدف: التحقق من harness الخاص بـ Codex والمملوك للـ Plugin عبر + طريقة `agent` العادية في الـ Gateway: + - تحميل Plugin المضمّن `codex` - اختيار `OPENCLAW_AGENT_RUNTIME=codex` - - إرسال أول دورة وكيل عبر gateway إلى `codex/gpt-5.4` - - إرسال دورة ثانية إلى جلسة OpenClaw نفسها والتحقق من أن - thread الخاص بـ app-server يمكنه الاستئناف - - تشغيل `/codex status` و`/codex models` عبر مسار - أوامر gateway نفسه + - إرسال أول دورة وكيل عبر Gateway إلى `codex/gpt-5.4` + - إرسال دورة ثانية إلى جلسة OpenClaw نفسها والتحقق من أن سلسلة + app-server يمكنها الاستئناف + - تشغيل `/codex status` و`/codex models` عبر مسار أوامر Gateway نفسه - الاختبار: `src/gateway/gateway-codex-harness.live.test.ts` - التفعيل: `OPENCLAW_LIVE_CODEX_HARNESS=1` - النموذج الافتراضي: `codex/gpt-5.4` -- فحص صورة اختياري: `OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=1` -- فحص MCP/tool اختياري: `OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=1` -- يضبط فحص Smoke هذا `OPENCLAW_AGENT_HARNESS_FALLBACK=none` حتى لا يتمكن - Codex harness المعطل من النجاح عبر الرجوع الصامت إلى PI. -- المصادقة: `OPENAI_API_KEY` من shell/profile، بالإضافة إلى نسخ اختيارية من - `~/.codex/auth.json` و`~/.codex/config.toml` +- مجس صور اختياري: `OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=1` +- مجس MCP/أداة اختياري: `OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=1` +- يضبط اختبار smoke القيمة `OPENCLAW_AGENT_HARNESS_FALLBACK=none` حتى لا + ينجح harness Codex المعطّل عبر الرجوع بصمت إلى PI. +- المصادقة: `OPENAI_API_KEY` من shell/profile، بالإضافة إلى نسخ اختيارية + من `~/.codex/auth.json` و`~/.codex/config.toml` وصفة محلية: @@ -614,113 +612,111 @@ pnpm test:docker:live-codex-harness ملاحظات Docker: - يوجد مشغّل Docker في `scripts/test-live-codex-harness-docker.sh`. -- يقوم بتحميل `~/.profile` الموصّل، ويمرّر `OPENAI_API_KEY`، وينسخ ملفات - مصادقة Codex CLI عند وجودها، ويثبّت `@openai/codex` في npm prefix - موصول وقابل للكتابة، ويجهّز شجرة المصدر، ثم يشغّل فقط الاختبار الحي - لـ Codex-harness. -- يفعّل Docker فحوصات الصورة وMCP/tool افتراضيًا. اضبط +- يقوم باستيراد `~/.profile` المركّب، ويمرّر `OPENAI_API_KEY`، وينسخ ملفات + مصادقة Codex CLI عند توفرها، ويثبت `@openai/codex` في بادئة npm مركّبة + قابلة للكتابة، ويجهّز شجرة المصدر، ثم يشغّل فقط اختبار Codex-harness الحي. +- يفعّل Docker مجسّات الصور وMCP/الأدوات افتراضيًا. اضبط `OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=0` أو - `OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=0` عندما تحتاج إلى تشغيل تصحيح - أضيق. -- يصدّر Docker أيضًا `OPENCLAW_AGENT_HARNESS_FALLBACK=none`، بما يطابق إعداد - الاختبار الحي بحيث لا يمكن لـ `openai-codex/*` أو fallback إلى PI - إخفاء اختبار انحدار في Codex harness. + `OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=0` عندما تحتاج إلى تشغيل تصحيح أضيق. +- يصدّر Docker أيضًا `OPENCLAW_AGENT_HARNESS_FALLBACK=none`، بما يطابق + إعداد الاختبار الحي بحيث لا يتمكن fallback إلى `openai-codex/*` أو PI من + إخفاء اختبار منع تراجع في Codex harness. -### الوصفات الحية الموصى بها +### وصفات live الموصى بها -تعد allowlist الضيقة والصريحة الأسرع والأقل عرضة لعدم الاستقرار: +قوائم السماح الضيقة والصريحة هي الأسرع والأقل تذبذبًا: -- نموذج واحد، مباشر (بدون gateway): +- نموذج واحد، مباشر (من دون Gateway): - `OPENCLAW_LIVE_MODELS="openai/gpt-5.4" pnpm test:live src/agents/models.profiles.live.test.ts` -- نموذج واحد، فحص Gateway smoke: +- نموذج واحد، اختبار smoke للـ Gateway: - `OPENCLAW_LIVE_GATEWAY_MODELS="openai/gpt-5.4" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts` - استدعاء الأدوات عبر عدة مزوّدين: - `OPENCLAW_LIVE_GATEWAY_MODELS="openai/gpt-5.4,anthropic/claude-opus-4-6,google/gemini-3-flash-preview,zai/glm-4.7,minimax/MiniMax-M2.7" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts` -- التركيز على Google (مفتاح Gemini API + Antigravity): - - Gemini (مفتاح API): `OPENCLAW_LIVE_GATEWAY_MODELS="google/gemini-3-flash-preview" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts` - - Antigravity (OAuth): `OPENCLAW_LIVE_GATEWAY_MODELS="google-antigravity/claude-opus-4-6-thinking,google-antigravity/gemini-3-pro-high" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts` +- التركيز على Google ‏(مفتاح Gemini API + Antigravity): + - Gemini ‏(مفتاح API): `OPENCLAW_LIVE_GATEWAY_MODELS="google/gemini-3-flash-preview" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts` + - Antigravity ‏(OAuth): `OPENCLAW_LIVE_GATEWAY_MODELS="google-antigravity/claude-opus-4-6-thinking,google-antigravity/gemini-3-pro-high" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts` ملاحظات: -- `google/...` يستخدم Gemini API (مفتاح API). -- `google-antigravity/...` يستخدم جسر Antigravity OAuth (نقطة نهاية وكيل بأسلوب Cloud Code Assist). -- `google-gemini-cli/...` يستخدم Gemini CLI المحلي على جهازك (مصادقة منفصلة وخصائص أدوات مختلفة). +- يستخدم `google/...` واجهة Gemini API ‏(مفتاح API). +- يستخدم `google-antigravity/...` جسر Antigravity OAuth ‏(نقطة نهاية وكيل على نمط Cloud Code Assist). +- يستخدم `google-gemini-cli/...` Gemini CLI المحلية على جهازك (مع مصادقة منفصلة وخصوصيات مختلفة للأدوات). - Gemini API مقابل Gemini CLI: - - API: يستدعي OpenClaw واجهة Gemini API المستضافة من Google عبر HTTP (بمصادقة مفتاح API / profile)؛ وهذا ما يقصده معظم المستخدمين عندما يقولون “Gemini”. - - CLI: يستدعي OpenClaw ملف `gemini` المحلي؛ وله مصادقته الخاصة وقد يتصرف بشكل مختلف (البث، ودعم الأدوات، واختلاف الإصدارات). + - API: يستدعي OpenClaw واجهة Gemini API المستضافة من Google عبر HTTP ‏(مصادقة مفتاح API / profile)؛ وهذا ما يقصده معظم المستخدمين عند قول "Gemini". + - CLI: يقوم OpenClaw باستدعاء ملف `gemini` ثنائي محلي؛ وله مصادقة خاصة به وقد يتصرف بشكل مختلف (الدفق/دعم الأدوات/اختلاف الإصدارات). ## Live: مصفوفة النماذج (ما الذي نغطيه) -لا توجد «قائمة نماذج CI» ثابتة (لأن live اختياري)، لكن هذه هي النماذج **الموصى بها** للتغطية بانتظام على جهاز تطوير يملك مفاتيح. +لا توجد "قائمة نماذج CI" ثابتة (لأن live اختيارية)، لكن هذه هي النماذج **الموصى بها** للتغطية بانتظام على جهاز تطوير تتوفر فيه المفاتيح. -### مجموعة الفحص الحديثة (استدعاء الأدوات + الصورة) +### مجموعة smoke الحديثة (استدعاء الأدوات + الصور) -هذا هو تشغيل «النماذج الشائعة» الذي نتوقع أن يظل يعمل: +هذا هو تشغيل "النماذج الشائعة" الذي نتوقع استمرار عمله: -- OpenAI (غير Codex): `openai/gpt-5.4` (اختياري: `openai/gpt-5.4-mini`) +- OpenAI ‏(غير Codex): `openai/gpt-5.4` (اختياري: `openai/gpt-5.4-mini`) - OpenAI Codex: `openai-codex/gpt-5.4` - Anthropic: `anthropic/claude-opus-4-6` (أو `anthropic/claude-sonnet-4-6`) -- Google (Gemini API): ‏`google/gemini-3.1-pro-preview` و`google/gemini-3-flash-preview` (تجنب نماذج Gemini 2.x الأقدم) -- Google (Antigravity): ‏`google-antigravity/claude-opus-4-6-thinking` و`google-antigravity/gemini-3-flash` -- Z.AI (GLM): ‏`zai/glm-4.7` -- MiniMax: ‏`minimax/MiniMax-M2.7` +- Google ‏(Gemini API): ‏`google/gemini-3.1-pro-preview` و`google/gemini-3-flash-preview` (تجنب نماذج Gemini 2.x الأقدم) +- Google ‏(Antigravity): ‏`google-antigravity/claude-opus-4-6-thinking` و`google-antigravity/gemini-3-flash` +- Z.AI ‏(GLM): `zai/glm-4.7` +- MiniMax: `minimax/MiniMax-M2.7` -شغّل فحص Gateway smoke مع الأدوات + الصورة: +شغّل اختبار smoke للـ Gateway مع الأدوات + الصور: `OPENCLAW_LIVE_GATEWAY_MODELS="openai/gpt-5.4,openai-codex/gpt-5.4,anthropic/claude-opus-4-6,google/gemini-3.1-pro-preview,google/gemini-3-flash-preview,google-antigravity/claude-opus-4-6-thinking,google-antigravity/gemini-3-flash,zai/glm-4.7,minimax/MiniMax-M2.7" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts` -### الأساس: استدعاء الأدوات (Read + Exec اختياري) +### خط الأساس: استدعاء الأدوات (Read + Exec اختياري) اختر واحدًا على الأقل لكل عائلة مزوّدين: - OpenAI: `openai/gpt-5.4` (أو `openai/gpt-5.4-mini`) - Anthropic: `anthropic/claude-opus-4-6` (أو `anthropic/claude-sonnet-4-6`) - Google: `google/gemini-3-flash-preview` (أو `google/gemini-3.1-pro-preview`) -- Z.AI (GLM): ‏`zai/glm-4.7` -- MiniMax: ‏`minimax/MiniMax-M2.7` +- Z.AI ‏(GLM): `zai/glm-4.7` +- MiniMax: `minimax/MiniMax-M2.7` تغطية إضافية اختيارية (من الجيد توفرها): -- xAI: ‏`xai/grok-4` (أو أحدث إصدار متاح) -- Mistral: ‏`mistral/`… (اختر نموذجًا واحدًا قادرًا على “tools” لديك) -- Cerebras: ‏`cerebras/`… (إذا كان لديك وصول) -- LM Studio: ‏`lmstudio/`… (محلي؛ يعتمد استدعاء الأدوات على وضع API) +- xAI: `xai/grok-4` (أو أحدث إصدار متاح) +- Mistral: `mistral/`… (اختر نموذجًا واحدًا يدعم "الأدوات" لديك) +- Cerebras: `cerebras/`… (إذا كان لديك وصول) +- LM Studio: `lmstudio/`… (محلي؛ يعتمد استدعاء الأدوات على وضع API) -### Vision: إرسال صورة (مرفق ← رسالة متعددة الوسائط) +### الرؤية: إرسال صورة (مرفق ← رسالة متعددة الوسائط) -ضمّن نموذجًا واحدًا على الأقل قادرًا على التعامل مع الصور داخل `OPENCLAW_LIVE_GATEWAY_MODELS` (مثل Claude/Gemini/OpenAI بالإصدارات القادرة على Vision، إلخ) لتمرير فحص الصورة. +أدرج نموذجًا واحدًا على الأقل يدعم الصور داخل `OPENCLAW_LIVE_GATEWAY_MODELS` ‏(Claude/Gemini/OpenAI ذات المتغيرات القادرة على الرؤية، إلخ) لممارسة مجس الصور. ### المجمّعات / بوابات بديلة -إذا كانت لديك مفاتيح مفعلة، فنحن ندعم أيضًا الاختبار عبر: +إذا كانت لديك مفاتيح مفعّلة، فنحن ندعم أيضًا الاختبار عبر: -- OpenRouter: ‏`openrouter/...` (مئات النماذج؛ استخدم `openclaw models scan` للعثور على مرشحين قادرين على الأدوات+الصور) -- OpenCode: ‏`opencode/...` من أجل Zen و`opencode-go/...` من أجل Go (المصادقة عبر `OPENCODE_API_KEY` / `OPENCODE_ZEN_API_KEY`) +- OpenRouter: ‏`openrouter/...` ‏(مئات النماذج؛ استخدم `openclaw models scan` للعثور على مرشحين يدعمون الأدوات+الصور) +- OpenCode: ‏`opencode/...` لـ Zen و`opencode-go/...` لـ Go ‏(المصادقة عبر `OPENCODE_API_KEY` / `OPENCODE_ZEN_API_KEY`) -مزيد من المزوّدين الذين يمكنك تضمينهم في مصفوفة live (إذا كانت لديك بيانات اعتماد/إعدادات): +مزوّدون إضافيون يمكنك تضمينهم في مصفوفة live ‏(إذا كانت لديك بيانات اعتماد/إعدادات): -- مضمّنة: `openai` و`openai-codex` و`anthropic` و`google` و`google-vertex` و`google-antigravity` و`google-gemini-cli` و`zai` و`openrouter` و`opencode` و`opencode-go` و`xai` و`groq` و`cerebras` و`mistral` و`github-copilot` -- عبر `models.providers` (نقاط نهاية مخصصة): `minimax` (سحابي/API)، بالإضافة إلى أي proxy متوافق مع OpenAI/Anthropic (مثل LM Studio وvLLM وLiteLLM، إلخ) +- مضمّنون: `openai` و`openai-codex` و`anthropic` و`google` و`google-vertex` و`google-antigravity` و`google-gemini-cli` و`zai` و`openrouter` و`opencode` و`opencode-go` و`xai` و`groq` و`cerebras` و`mistral` و`github-copilot` +- عبر `models.providers` ‏(نقاط نهاية مخصصة): `minimax` ‏(سحابي/API)، بالإضافة إلى أي وكيل متوافق مع OpenAI/Anthropic ‏(LM Studio أو vLLM أو LiteLLM، إلخ) -نصيحة: لا تحاول ترميز «كل النماذج» بشكل ثابت في المستندات. القائمة الموثوقة هي ما يعيده `discoverModels(...)` على جهازك + أي مفاتيح متاحة. +نصيحة: لا تحاول تثبيت "كل النماذج" بشكل صلب في الوثائق. القائمة المرجعية هي أي شيء تعيده `discoverModels(...)` على جهازك + أي مفاتيح متاحة. -## بيانات الاعتماد (لا تُضمَّن في commit أبدًا) +## بيانات الاعتماد (لا تُثبت أبدًا) -تكتشف الاختبارات الحية بيانات الاعتماد بالطريقة نفسها التي تعمل بها CLI. والنتائج العملية لذلك: +تكتشف اختبارات live بيانات الاعتماد بالطريقة نفسها التي يعمل بها CLI. الدلالات العملية: -- إذا كانت CLI تعمل، فيجب أن تعثر الاختبارات الحية على المفاتيح نفسها. -- إذا قال اختبار حي «لا توجد بيانات اعتماد»، فقم بتصحيح المشكلة بالطريقة نفسها التي ستصحح بها `openclaw models list` / اختيار النموذج. +- إذا كان CLI يعمل، فيجب أن تعثر اختبارات live على المفاتيح نفسها. +- إذا قال اختبار live "لا توجد بيانات اعتماد"، فقم بالتصحيح بالطريقة نفسها التي ستصحح بها `openclaw models list` / اختيار النموذج. -- ملفات auth profiles لكل وكيل: `~/.openclaw/agents//agent/auth-profiles.json` (وهذا ما تعنيه «profile keys» في الاختبارات الحية) +- Profiles المصادقة لكل وكيل: `~/.openclaw/agents//agent/auth-profiles.json` (هذا هو المقصود بـ "مفاتيح profile" في اختبارات live) - الإعداد: `~/.openclaw/openclaw.json` (أو `OPENCLAW_CONFIG_PATH`) -- دليل الحالة القديم: `~/.openclaw/credentials/` (يُنسخ إلى المنزل الحي المجهز عند وجوده، لكنه ليس مخزن مفاتيح profile الرئيسي) -- تقوم تشغيلات live المحلية بنسخ الإعداد النشط وملفات `auth-profiles.json` لكل وكيل و`credentials/` القديمة وأدلة مصادقة CLI الخارجية المدعومة إلى منزل اختبار مؤقت افتراضيًا؛ وتتخطى المنازل الحية المجهزة `workspace/` و`sandboxes/`، وتُزال تجاوزات المسار في `agents.*.workspace` و`agentDir` حتى تبقى الفحوصات بعيدة عن مساحة العمل الحقيقية على المضيف. +- دليل الحالة القديم: `~/.openclaw/credentials/` (يتم نسخه إلى home الحي المجهّز عند توفره، لكنه ليس مخزن مفاتيح profile الرئيسي) +- تقوم تشغيلات live المحلية افتراضيًا بنسخ الإعداد النشط وملفات `auth-profiles.json` لكل وكيل و`credentials/` القديمة وأدلة مصادقة CLI الخارجية المدعومة إلى home اختبار مؤقت؛ وتتجاوز homes الحية المجهّزة `workspace/` و`sandboxes/`، كما تُجرّد تجاوزات المسار `agents.*.workspace` و`agentDir` بحيث تبقى المجسّات بعيدة عن مساحة العمل الحقيقية على المضيف. -إذا كنت تريد الاعتماد على مفاتيح env (على سبيل المثال المصدّرة في `~/.profile`)، فشغّل الاختبارات المحلية بعد `source ~/.profile`، أو استخدم مشغّلات Docker أدناه (يمكنها وصل `~/.profile` داخل الحاوية). +إذا كنت تريد الاعتماد على مفاتيح البيئة (مثل المفاتيح المصدّرة في `~/.profile`)، فشغّل الاختبارات المحلية بعد `source ~/.profile`، أو استخدم مشغّلات Docker أدناه (يمكنها تركيب `~/.profile` داخل الحاوية). -## Deepgram live (نسخ الصوت إلى نص) +## Deepgram live ‏(تفريغ الصوت إلى نص) - الاختبار: `src/media-understanding/providers/deepgram/audio.live.test.ts` - التفعيل: `DEEPGRAM_API_KEY=... DEEPGRAM_LIVE_TEST=1 pnpm test:live src/media-understanding/providers/deepgram/audio.live.test.ts` @@ -736,21 +732,21 @@ pnpm test:docker:live-codex-harness - الاختبار: `extensions/comfy/comfy.live.test.ts` - التفعيل: `OPENCLAW_LIVE_TEST=1 COMFY_LIVE_TEST=1 pnpm test:live -- extensions/comfy/comfy.live.test.ts` - النطاق: - - يمارس مسارات الصورة والفيديو و`music_generate` المضمّنة الخاصة بـ comfy + - يمارس مسارات comfy المضمّنة للصور والفيديو و`music_generate` - يتخطى كل قدرة ما لم يتم ضبط `models.providers.comfy.` - - مفيد بعد تعديل إرسال سير العمل في comfy أو polling أو التنزيلات أو تسجيل Plugin + - مفيد بعد تغيير إرسال سير عمل comfy أو الاستطلاع أو التنزيلات أو تسجيل Plugin ## Image generation live - الاختبار: `src/image-generation/runtime.live.test.ts` - الأمر: `pnpm test:live src/image-generation/runtime.live.test.ts` -- الـ harness: `pnpm test:live:media image` +- Harness: `pnpm test:live:media image` - النطاق: - - يعدّد كل Plugin مزوّد image-generation مسجل - - يحمّل متغيرات بيئة المزوّد الناقصة من shell تسجيل الدخول لديك (`~/.profile`) قبل الفحص - - يستخدم مفاتيح API الحية/من env قبل auth profiles المخزنة افتراضيًا، حتى لا تحجب مفاتيح الاختبار القديمة في `auth-profiles.json` بيانات اعتماد shell الحقيقية - - يتخطى المزوّدين الذين لا يملكون مصادقة/‏profile/نموذجًا صالحًا - - يشغّل متغيرات image-generation القياسية عبر قدرة وقت التشغيل المشتركة: + - يعدّد كل Plugins مزوّدات توليد الصور المسجّلة + - يحمّل متغيرات بيئة المزوّد المفقودة من shell تسجيل الدخول لديك (`~/.profile`) قبل إجراء المجسّات + - يستخدم مفاتيح API الحية/المعتمدة على البيئة قبل profiles المصادقة المخزنة افتراضيًا، بحيث لا تخفي مفاتيح الاختبار القديمة في `auth-profiles.json` بيانات اعتماد shell الحقيقية + - يتخطى المزوّدين الذين لا توجد لديهم مصادقة/ profile / نموذج قابل للاستخدام + - يشغّل متغيرات توليد الصور القياسية عبر قدرة وقت التشغيل المشتركة: - `google:flash-generate` - `google:pro-generate` - `google:pro-edit` @@ -758,79 +754,79 @@ pnpm test:docker:live-codex-harness - المزوّدون المضمّنون الحاليون المشمولون: - `openai` - `google` -- التضييق الاختياري: +- تضييق اختياري: - `OPENCLAW_LIVE_IMAGE_GENERATION_PROVIDERS="openai,google"` - `OPENCLAW_LIVE_IMAGE_GENERATION_MODELS="openai/gpt-image-1,google/gemini-3.1-flash-image-preview"` - `OPENCLAW_LIVE_IMAGE_GENERATION_CASES="google:flash-generate,google:pro-edit"` -- سلوك المصادقة الاختياري: - - `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` لفرض مصادقة مخزن profile وتجاهل overrides المعتمدة على env فقط +- سلوك مصادقة اختياري: + - `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` لفرض مصادقة مخزن profiles وتجاهل التجاوزات المعتمدة على البيئة فقط ## Music generation live - الاختبار: `extensions/music-generation-providers.live.test.ts` - التفعيل: `OPENCLAW_LIVE_TEST=1 pnpm test:live -- extensions/music-generation-providers.live.test.ts` -- الـ harness: `pnpm test:live:media music` +- Harness: `pnpm test:live:media music` - النطاق: - - يمارس مسار مزوّد music-generation المضمّن المشترك + - يمارس مسار مزوّدات توليد الموسيقى المضمّن المشترك - يغطي حاليًا Google وMiniMax - - يحمّل متغيرات بيئة المزوّد من shell تسجيل الدخول لديك (`~/.profile`) قبل الفحص - - يستخدم مفاتيح API الحية/من env قبل auth profiles المخزنة افتراضيًا، حتى لا تحجب مفاتيح الاختبار القديمة في `auth-profiles.json` بيانات اعتماد shell الحقيقية - - يتخطى المزوّدين الذين لا يملكون مصادقة/‏profile/نموذجًا صالحًا - - يشغّل وضعي وقت التشغيل المعلنين كليهما عند توفرهما: - - `generate` مع إدخال يعتمد على prompt فقط + - يحمّل متغيرات بيئة المزوّد من shell تسجيل الدخول لديك (`~/.profile`) قبل إجراء المجسّات + - يستخدم مفاتيح API الحية/المعتمدة على البيئة قبل profiles المصادقة المخزنة افتراضيًا، بحيث لا تخفي مفاتيح الاختبار القديمة في `auth-profiles.json` بيانات اعتماد shell الحقيقية + - يتخطى المزوّدين الذين لا توجد لديهم مصادقة/ profile / نموذج قابل للاستخدام + - يشغّل وضعي وقت التشغيل المعلنين عند توفرهما: + - `generate` مع إدخال يعتمد على الموجّه فقط - `edit` عندما يعلن المزوّد `capabilities.edit.enabled` - - التغطية الحالية في المسار المشترك: + - التغطية الحالية للمسار المشترك: - `google`: ‏`generate`، `edit` - `minimax`: ‏`generate` - - `comfy`: ملف Comfy حي منفصل، وليس هذا المسح المشترك -- التضييق الاختياري: + - `comfy`: ملف Comfy live منفصل، وليس هذا المسح المشترك +- تضييق اختياري: - `OPENCLAW_LIVE_MUSIC_GENERATION_PROVIDERS="google,minimax"` - `OPENCLAW_LIVE_MUSIC_GENERATION_MODELS="google/lyria-3-clip-preview,minimax/music-2.5+"` -- سلوك المصادقة الاختياري: - - `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` لفرض مصادقة مخزن profile وتجاهل overrides المعتمدة على env فقط +- سلوك مصادقة اختياري: + - `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` لفرض مصادقة مخزن profiles وتجاهل التجاوزات المعتمدة على البيئة فقط ## Video generation live - الاختبار: `extensions/video-generation-providers.live.test.ts` - التفعيل: `OPENCLAW_LIVE_TEST=1 pnpm test:live -- extensions/video-generation-providers.live.test.ts` -- الـ harness: `pnpm test:live:media video` +- Harness: `pnpm test:live:media video` - النطاق: - - يمارس مسار مزوّد video-generation المضمّن المشترك - - يستخدم افتراضيًا مسار فحص smoke آمنًا للإصدارات: مزوّدات غير FAL، وطلب text-to-video واحد لكل مزوّد، وprompt لوبستر لمدة ثانية واحدة، وحد عملية لكل مزوّد من `OPENCLAW_LIVE_VIDEO_GENERATION_TIMEOUT_MS` (الافتراضي `180000`) - - يتخطى FAL افتراضيًا لأن زمن الانتظار في طابور المزوّد قد يهيمن على وقت الإصدار؛ مرّر `--video-providers fal` أو `OPENCLAW_LIVE_VIDEO_GENERATION_PROVIDERS="fal"` لتشغيله صراحةً - - يحمّل متغيرات بيئة المزوّد من shell تسجيل الدخول لديك (`~/.profile`) قبل الفحص - - يستخدم مفاتيح API الحية/من env قبل auth profiles المخزنة افتراضيًا، حتى لا تحجب مفاتيح الاختبار القديمة في `auth-profiles.json` بيانات اعتماد shell الحقيقية - - يتخطى المزوّدين الذين لا يملكون مصادقة/‏profile/نموذجًا صالحًا + - يمارس مسار مزوّدات توليد الفيديو المضمّن المشترك + - يستخدم افتراضيًا مسار smoke آمنًا للإصدار: مزوّدات غير FAL، وطلب text-to-video واحد لكل مزوّد، وموجّه lobster لمدة ثانية واحدة، وحدًّا أقصى لكل عملية لكل مزوّد من `OPENCLAW_LIVE_VIDEO_GENERATION_TIMEOUT_MS` ‏(`180000` افتراضيًا) + - يتخطى FAL افتراضيًا لأن زمن انتظار الطابور لدى المزوّد قد يهيمن على زمن الإصدار؛ مرّر `--video-providers fal` أو `OPENCLAW_LIVE_VIDEO_GENERATION_PROVIDERS="fal"` لتشغيله صراحة + - يحمّل متغيرات بيئة المزوّد من shell تسجيل الدخول لديك (`~/.profile`) قبل إجراء المجسّات + - يستخدم مفاتيح API الحية/المعتمدة على البيئة قبل profiles المصادقة المخزنة افتراضيًا، بحيث لا تخفي مفاتيح الاختبار القديمة في `auth-profiles.json` بيانات اعتماد shell الحقيقية + - يتخطى المزوّدين الذين لا توجد لديهم مصادقة/ profile / نموذج قابل للاستخدام - يشغّل `generate` فقط افتراضيًا - اضبط `OPENCLAW_LIVE_VIDEO_GENERATION_FULL_MODES=1` لتشغيل أوضاع التحويل المعلنة أيضًا عند توفرها: - - `imageToVideo` عندما يعلن المزوّد `capabilities.imageToVideo.enabled` ويقبل المزوّد/النموذج المحدد إدخال الصور المحلية المعتمد على buffer في المسح المشترك - - `videoToVideo` عندما يعلن المزوّد `capabilities.videoToVideo.enabled` ويقبل المزوّد/النموذج المحدد إدخال الفيديو المحلي المعتمد على buffer في المسح المشترك - - مزوّدو `imageToVideo` المعلن عنهم حاليًا لكن المتخطَّون في المسح المشترك: - - `vydra` لأن `veo3` المضمّن نصي فقط و`kling` المضمّن يتطلب URL صورة بعيدًا - - تغطية Vydra الخاصة بالمزوّد: + - `imageToVideo` عندما يعلن المزوّد `capabilities.imageToVideo.enabled` ويقبل المزوّد/النموذج المحدد إدخال الصور المحلية المدعوم بالمخزن المؤقت في المسح المشترك + - `videoToVideo` عندما يعلن المزوّد `capabilities.videoToVideo.enabled` ويقبل المزوّد/النموذج المحدد إدخال الفيديو المحلي المدعوم بالمخزن المؤقت في المسح المشترك + - المزوّدون المعلَنون حاليًا لكن المتخطَّون لـ `imageToVideo` في المسح المشترك: + - `vydra` لأن `veo3` المضمّن نصي فقط و`kling` المضمّن يتطلب عنوان URL لصورة بعيدة + - التغطية الخاصة بالمزوّد Vydra: - `OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_VYDRA_VIDEO=1 pnpm test:live -- extensions/vydra/vydra.live.test.ts` - - يشغّل هذا الملف `veo3` من text-to-video بالإضافة إلى مسار `kling` يستخدم افتراضيًا تركيبة URL صورة بعيدة + - يشغّل هذا الملف `veo3` لـ text-to-video بالإضافة إلى مسار `kling` يستخدم افتراضيًا fixture لعنوان URL صورة بعيدة - التغطية الحية الحالية لـ `videoToVideo`: - `runway` فقط عندما يكون النموذج المحدد هو `runway/gen4_aleph` - - مزوّدو `videoToVideo` المعلن عنهم حاليًا لكن المتخطَّون في المسح المشترك: - - `alibaba` و`qwen` و`xai` لأن هذه المسارات تتطلب حاليًا URLs مرجعية بعيدة من نوع `http(s)` / MP4 - - `google` لأن مسار Gemini/Veo المشترك الحالي يستخدم إدخالًا محليًا معتمدًا على buffer وهذا المسار غير مقبول في المسح المشترك - - `openai` لأن المسار المشترك الحالي يفتقر إلى ضمانات وصول خاصة بالمؤسسة لـ video inpaint/remix -- التضييق الاختياري: + - المزوّدون المعلَنون حاليًا لكن المتخطَّون لـ `videoToVideo` في المسح المشترك: + - `alibaba` و`qwen` و`xai` لأن هذه المسارات تتطلب حاليًا عناوين URL مرجعية بعيدة `http(s)` / MP4 + - `google` لأن مسار Gemini/Veo المشترك الحالي يستخدم إدخالًا محليًا مدعومًا بالمخزن المؤقت وهذا المسار غير مقبول في المسح المشترك + - `openai` لأن المسار المشترك الحالي يفتقر إلى ضمانات وصول خاصة بالمؤسسة لعمليات video inpaint/remix +- تضييق اختياري: - `OPENCLAW_LIVE_VIDEO_GENERATION_PROVIDERS="google,openai,runway"` - `OPENCLAW_LIVE_VIDEO_GENERATION_MODELS="google/veo-3.1-fast-generate-preview,openai/sora-2,runway/gen4_aleph"` - `OPENCLAW_LIVE_VIDEO_GENERATION_SKIP_PROVIDERS=""` لتضمين كل مزوّد في المسح الافتراضي، بما في ذلك FAL - - `OPENCLAW_LIVE_VIDEO_GENERATION_TIMEOUT_MS=60000` لتقليل الحد الأقصى لعملية كل مزوّد من أجل تشغيل smoke صارم -- سلوك المصادقة الاختياري: - - `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` لفرض مصادقة مخزن profile وتجاهل overrides المعتمدة على env فقط + - `OPENCLAW_LIVE_VIDEO_GENERATION_TIMEOUT_MS=60000` لتقليل الحد الأقصى لكل عملية مزوّد من أجل تشغيل smoke صارم +- سلوك مصادقة اختياري: + - `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` لفرض مصادقة مخزن profiles وتجاهل التجاوزات المعتمدة على البيئة فقط ## Media live harness - الأمر: `pnpm test:live:media` - الغرض: - - يشغّل أجنحة live المشتركة الخاصة بالصور والموسيقى والفيديو عبر نقطة دخول أصلية واحدة للمستودع - - يحمّل تلقائيًا متغيرات بيئة المزوّد الناقصة من `~/.profile` - - يضيّق تلقائيًا كل جناح إلى المزوّدين الذين لديهم حاليًا مصادقة صالحة افتراضيًا + - يشغّل أجنحة live المشتركة للصور والموسيقى والفيديو عبر نقطة دخول أصلية واحدة للمستودع + - يحمّل تلقائيًا متغيرات بيئة المزوّد المفقودة من `~/.profile` + - يضيّق تلقائيًا كل جناح إلى المزوّدين الذين لديهم مصادقة قابلة للاستخدام حاليًا افتراضيًا - يعيد استخدام `scripts/test-live.mjs`، بحيث يبقى سلوك Heartbeat والوضع الهادئ متسقًا - أمثلة: - `pnpm test:live:media` @@ -838,147 +834,147 @@ pnpm test:docker:live-codex-harness - `pnpm test:live:media video --video-providers openai,runway --all-providers` - `pnpm test:live:media music --quiet` -## مشغّلات Docker (فحوصات اختيارية من نوع "يعمل على Linux") +## مشغّلات Docker (فحوصات "يعمل على Linux" الاختيارية) تنقسم مشغّلات Docker هذه إلى فئتين: -- مشغّلات live-model: ‏`test:docker:live-models` و`test:docker:live-gateway` يشغّلان فقط ملف live المطابق الخاص بمفاتيح profile داخل صورة Docker الخاصة بالمستودع (`src/agents/models.profiles.live.test.ts` و`src/gateway/gateway-models.profiles.live.test.ts`)، مع وصل دليل config ومساحة العمل المحليين لديك (ومع تحميل `~/.profile` إن كان موصولًا). نقاط الدخول المحلية المطابقة هي `test:live:models-profiles` و`test:live:gateway-profiles`. -- تستخدم مشغّلات Docker الحية افتراضيًا حد smoke أصغر حتى يبقى المسح الكامل عبر Docker عمليًا: +- مشغّلات النماذج الحية: `test:docker:live-models` و`test:docker:live-gateway` تشغّلان فقط ملف live المطابق لمفاتيح profile داخل صورة Docker الخاصة بالمستودع (`src/agents/models.profiles.live.test.ts` و`src/gateway/gateway-models.profiles.live.test.ts`)، مع تركيب دليل الإعداد المحلي ومساحة العمل لديك (واستيراد `~/.profile` إذا كان مركّبًا). نقاط الدخول المحلية المطابقة هي `test:live:models-profiles` و`test:live:gateway-profiles`. +- تستخدم مشغّلات Docker الحية افتراضيًا حد smoke أصغر بحيث يبقى المسح الكامل داخل Docker عمليًا: يستخدم `test:docker:live-models` افتراضيًا `OPENCLAW_LIVE_MAX_MODELS=12`، ويستخدم `test:docker:live-gateway` افتراضيًا `OPENCLAW_LIVE_GATEWAY_SMOKE=1`، و`OPENCLAW_LIVE_GATEWAY_MAX_MODELS=8`، و`OPENCLAW_LIVE_GATEWAY_STEP_TIMEOUT_MS=45000`، و - `OPENCLAW_LIVE_GATEWAY_MODEL_TIMEOUT_MS=90000`. تجاوز متغيرات البيئة هذه عندما - تريد صراحةً المسح الشامل الأكبر. -- يقوم `test:docker:all` ببناء صورة Docker الحية مرة واحدة عبر `test:docker:live-build`، ثم يعيد استخدامها للمسارين الحيين عبر Docker. -- مشغّلات smoke للحاويات: ‏`test:docker:openwebui` و`test:docker:onboard` و`test:docker:gateway-network` و`test:docker:mcp-channels` و`test:docker:plugins` تقلع حاوية واحدة أو أكثر حقيقية وتتحقق من مسارات تكامل أعلى مستوى. + `OPENCLAW_LIVE_GATEWAY_MODEL_TIMEOUT_MS=90000`. تجاوز متغيرات البيئة تلك عندما + تريد صراحةً إجراء المسح الأشمل الأكبر. +- يبني `test:docker:all` صورة Docker الحية مرة واحدة عبر `test:docker:live-build`، ثم يعيد استخدامها لمساري Docker الحيين. +- مشغّلات smoke للحاويات: `test:docker:openwebui` و`test:docker:onboard` و`test:docker:gateway-network` و`test:docker:mcp-channels` و`test:docker:plugins` تقوم بتشغيل حاوية أو أكثر فعلية وتتحقق من مسارات تكامل أعلى مستوى. -تقوم مشغّلات Docker الخاصة بـ live-model أيضًا بوصل منازل مصادقة CLI المطلوبة فقط (أو جميع المنازل المدعومة عندما لا يكون التشغيل مضيقًا)، ثم تنسخها إلى منزل الحاوية قبل التشغيل حتى تتمكن OAuth الخاصة بـ CLI الخارجي من تحديث الرموز دون تعديل مخزن المصادقة على المضيف: +تقوم مشغّلات Docker للنماذج الحية أيضًا بعمل bind-mount فقط لـ homes مصادقة CLI المطلوبة (أو كلها المدعومة عندما لا يكون التشغيل مضيقًا)، ثم تنسخها إلى home الحاوية قبل التشغيل بحيث يمكن لـ OAuth الخاص بـ CLI الخارجي تحديث الرموز من دون تعديل مخزن المصادقة على المضيف: -- النماذج المباشرة: `pnpm test:docker:live-models` (السكريبت: `scripts/test-live-models-docker.sh`) -- ACP bind smoke: `pnpm test:docker:live-acp-bind` (السكريبت: `scripts/test-live-acp-bind-docker.sh`) -- CLI backend smoke: `pnpm test:docker:live-cli-backend` (السكريبت: `scripts/test-live-cli-backend-docker.sh`) -- Codex app-server harness smoke: `pnpm test:docker:live-codex-harness` (السكريبت: `scripts/test-live-codex-harness-docker.sh`) -- Gateway + وكيل dev: `pnpm test:docker:live-gateway` (السكريبت: `scripts/test-live-gateway-models-docker.sh`) -- Open WebUI live smoke: `pnpm test:docker:openwebui` (السكريبت: `scripts/e2e/openwebui-docker.sh`) -- معالج onboarding (TTY، بناء كامل): `pnpm test:docker:onboard` (السكريبت: `scripts/e2e/onboard-docker.sh`) -- شبكات Gateway (حاويتان، مصادقة WS + health): `pnpm test:docker:gateway-network` (السكريبت: `scripts/e2e/gateway-network-docker.sh`) -- جسر قناة MCP (Gateway مبدوء مسبقًا + جسر stdio + smoke خام لإطار إشعار Claude): `pnpm test:docker:mcp-channels` (السكريبت: `scripts/e2e/mcp-channels-docker.sh`) -- Plugins (install smoke + الاسم البديل `/plugin` + دلالات إعادة تشغيل Claude-bundle): `pnpm test:docker:plugins` (السكريبت: `scripts/e2e/plugins-docker.sh`) +- النماذج المباشرة: `pnpm test:docker:live-models` ‏(السكربت: `scripts/test-live-models-docker.sh`) +- اختبار smoke لربط ACP: `pnpm test:docker:live-acp-bind` ‏(السكربت: `scripts/test-live-acp-bind-docker.sh`) +- اختبار smoke لخلفية CLI: `pnpm test:docker:live-cli-backend` ‏(السكربت: `scripts/test-live-cli-backend-docker.sh`) +- اختبار smoke لـ Codex app-server harness: `pnpm test:docker:live-codex-harness` ‏(السكربت: `scripts/test-live-codex-harness-docker.sh`) +- Gateway + وكيل dev: `pnpm test:docker:live-gateway` ‏(السكربت: `scripts/test-live-gateway-models-docker.sh`) +- اختبار smoke حي لـ Open WebUI: `pnpm test:docker:openwebui` ‏(السكربت: `scripts/e2e/openwebui-docker.sh`) +- معالج Onboarding ‏(TTY، البناء الكامل): `pnpm test:docker:onboard` ‏(السكربت: `scripts/e2e/onboard-docker.sh`) +- شبكات Gateway ‏(حاويتان، مصادقة WS + السلامة): `pnpm test:docker:gateway-network` ‏(السكربت: `scripts/e2e/gateway-network-docker.sh`) +- جسر قناة MCP ‏(Gateway مزروع + جسر stdio + اختبار smoke خام لإطارات إشعارات Claude): `pnpm test:docker:mcp-channels` ‏(السكربت: `scripts/e2e/mcp-channels-docker.sh`) +- Plugins ‏(اختبار smoke للتثبيت + الاسم البديل `/plugin` + دلالات إعادة تشغيل Claude-bundle): `pnpm test:docker:plugins` ‏(السكربت: `scripts/e2e/plugins-docker.sh`) -تقوم مشغّلات Docker الخاصة بـ live-model أيضًا بوصل نسخة checkout الحالية للقراءة فقط -وتجهيزها داخل workdir مؤقت داخل الحاوية. هذا يُبقي صورة وقت التشغيل -نحيفة، مع الاستمرار في تشغيل Vitest على المصدر/الإعداد المحلي المطابق تمامًا. -تتخطى خطوة التجهيز الذاكرات المؤقتة المحلية الكبيرة فقط ومخرجات بناء التطبيق مثل -`.pnpm-store` و`.worktrees` و`__openclaw_vitest__` وأدلة `.build` المحلية للتطبيق أو -مخرجات Gradle، حتى لا تقضي تشغيلات Docker الحية دقائق في نسخ -artifacts خاصة بالجهاز. -كما أنها تضبط `OPENCLAW_SKIP_CHANNELS=1` حتى لا تبدأ فحوصات Gateway الحية -عمّال قنوات حقيقية مثل Telegram/Discord وغيرها داخل الحاوية. -لا يزال `test:docker:live-models` يشغّل `pnpm test:live`، لذلك مرّر -`OPENCLAW_LIVE_GATEWAY_*` أيضًا عندما تحتاج إلى تضييق أو استبعاد تغطية Gateway +تقوم مشغّلات Docker للنماذج الحية أيضًا بعمل bind-mount للإصدار الحالي read-only من +نسخة العمل لديك وتجهّزه داخل دليل عمل مؤقت داخل الحاوية. هذا يبقي صورة وقت التشغيل +نحيفة بينما يظل يشغّل Vitest على المصدر/الإعداد المحليين الدقيقين لديك. +تتخطى خطوة التجهيز الذاكرات المؤقتة المحلية الكبيرة فقط ومخرجات بناء التطبيقات مثل +`.pnpm-store` و`.worktrees` و`__openclaw_vitest__` ومجلدات `.build` المحلية للتطبيق أو +مجلدات إخراج Gradle، حتى لا تقضي تشغيلات Docker live دقائق في نسخ +الملفات الخاصة بالجهاز. +كما أنها تضبط `OPENCLAW_SKIP_CHANNELS=1` بحيث لا تبدأ مجسّات Gateway الحية +عمّال قنوات Telegram/Discord/... حقيقية داخل الحاوية. +لا يزال `test:docker:live-models` يشغّل `pnpm test:live`، لذا مرّر أيضًا +`OPENCLAW_LIVE_GATEWAY_*` عندما تحتاج إلى تضييق أو استبعاد تغطية Gateway الحية من مسار Docker هذا. -يُعد `test:docker:openwebui` فحص توافق أعلى مستوى: فهو يبدأ -حاوية OpenClaw gateway مع تفعيل نقاط نهاية HTTP المتوافقة مع OpenAI، -ويبدأ حاوية Open WebUI مثبتة مقابل ذلك gateway، ويسجل الدخول من خلال -Open WebUI، ويتحقق من أن `/api/models` يعرض `openclaw/default`، ثم يرسل -طلب دردشة حقيقيًا عبر proxy ‏`/api/chat/completions` في Open WebUI. +يُعد `test:docker:openwebui` اختبار smoke أعلى مستوى للتوافق: فهو يبدأ +حاوية Gateway لـ OpenClaw مع تفعيل نقاط النهاية HTTP المتوافقة مع OpenAI، +ويبدأ حاوية Open WebUI مثبتة مقابل ذلك الـ Gateway، ويسجّل الدخول عبر +Open WebUI، ويتحقق من أن `/api/models` يكشف `openclaw/default`، ثم يرسل +طلب دردشة حقيقيًا عبر وكيل `/api/chat/completions` في Open WebUI. قد يكون التشغيل الأول أبطأ بشكل ملحوظ لأن Docker قد يحتاج إلى سحب -صورة Open WebUI وقد يحتاج Open WebUI إلى إكمال إعداد البدء البارد الخاص به. -يتوقع هذا المسار مفتاح نموذج حي صالحًا، ويُعد `OPENCLAW_PROFILE_FILE` -(الافتراضي `~/.profile`) الطريقة الأساسية لتوفيره في تشغيلات Docker. +صورة Open WebUI وقد تحتاج Open WebUI إلى إكمال إعداد البدء البارد الخاص بها. +يتوقع هذا المسار مفتاح نموذج حي قابلًا للاستخدام، ويُعد `OPENCLAW_PROFILE_FILE` +‏(`~/.profile` افتراضيًا) الوسيلة الأساسية لتوفيره في تشغيلات Docker. تطبع التشغيلات الناجحة حمولة JSON صغيرة مثل `{ "ok": true, "model": "openclaw/default", ... }`. -يعد `test:docker:mcp-channels` حتميًا عمدًا ولا يحتاج إلى -حساب Telegram أو Discord أو iMessage حقيقي. فهو يقلع حاوية Gateway -مبدوءة مسبقًا، ثم يبدأ حاوية ثانية تشغّل `openclaw mcp serve`، ثم -يتحقق من اكتشاف المحادثات الموجّهة، وقراءة transcript، وmetadata الخاصة بالمرفقات، -وسلوك طابور الأحداث الحية، وتوجيه الإرسال الصادر، وإشعارات القنوات + -الأذونات بأسلوب Claude عبر جسر MCP الحقيقي المعتمد على stdio. وتفحص عملية -التحقق من الإشعارات إطارات MCP الخام على stdio مباشرةً حتى يتحقق smoke مما -يبثه الجسر فعلًا، لا فقط مما تعرضه مجموعة SDK عميل معينة بالمصادفة. +يُعد `test:docker:mcp-channels` حتميًا عمدًا ولا يحتاج إلى +حساب Telegram أو Discord أو iMessage حقيقي. فهو يشغّل حاوية Gateway +مزروعة، ويبدأ حاوية ثانية تشغّل `openclaw mcp serve`، ثم +يتحقق من اكتشاف المحادثات الموجّهة، وقراءة النصوص، وبيانات تعريف المرفقات، +وسلوك طابور الأحداث الحي، وتوجيه الإرسال الصادر، وإشعارات القناة + +الأذونات على نمط Claude عبر جسر stdio MCP الحقيقي. ويفحص تحقق الإشعارات +إطارات stdio MCP الخام مباشرةً بحيث يتحقق smoke مما يصدره الجسر +فعليًا، وليس فقط مما قد تكشفه مجموعة أدوات SDK لعميل محدد. -فحص Smoke يدوي لخيط ACP باللغة الطبيعية (ليس في CI): +اختبار smoke يدوي لخيط ACP بلغة طبيعية (ليس ضمن CI): - `bun scripts/dev/discord-acp-plain-language-smoke.ts --channel ...` -- احتفظ بهذا السكريبت من أجل سير عمل اختبار الانحدار/تصحيح الأخطاء. قد يلزم مجددًا للتحقق من توجيه خيوط ACP، لذلك لا تحذفه. +- احتفظ بهذا السكربت لسير عمل اختبارات منع التراجع/التصحيح. قد تكون هناك حاجة إليه مرة أخرى للتحقق من توجيه خيوط ACP، لذا لا تحذفه. -متغيرات البيئة المفيدة: +متغيرات بيئة مفيدة: -- `OPENCLAW_CONFIG_DIR=...` (الافتراضي: `~/.openclaw`) يُوصَل إلى `/home/node/.openclaw` -- `OPENCLAW_WORKSPACE_DIR=...` (الافتراضي: `~/.openclaw/workspace`) يُوصَل إلى `/home/node/.openclaw/workspace` -- `OPENCLAW_PROFILE_FILE=...` (الافتراضي: `~/.profile`) يُوصَل إلى `/home/node/.profile` ويُحمّل قبل تشغيل الاختبارات -- `OPENCLAW_DOCKER_PROFILE_ENV_ONLY=1` للتحقق من متغيرات البيئة المحمّلة فقط من `OPENCLAW_PROFILE_FILE`، باستخدام أدلة config/workspace مؤقتة ومن دون أي وصل لمصادقة CLI خارجية -- `OPENCLAW_DOCKER_CLI_TOOLS_DIR=...` (الافتراضي: `~/.cache/openclaw/docker-cli-tools`) يُوصَل إلى `/home/node/.npm-global` لتثبيتات CLI المخزنة مؤقتًا داخل Docker -- تُوصَل أدلة/ملفات مصادقة CLI الخارجية تحت `$HOME` للقراءة فقط ضمن `/host-auth...`، ثم تُنسخ إلى `/home/node/...` قبل بدء الاختبارات +- `OPENCLAW_CONFIG_DIR=...` ‏(الافتراضي: `~/.openclaw`) يتم تركيبه إلى `/home/node/.openclaw` +- `OPENCLAW_WORKSPACE_DIR=...` ‏(الافتراضي: `~/.openclaw/workspace`) يتم تركيبه إلى `/home/node/.openclaw/workspace` +- `OPENCLAW_PROFILE_FILE=...` ‏(الافتراضي: `~/.profile`) يتم تركيبه إلى `/home/node/.profile` ويتم استيراده قبل تشغيل الاختبارات +- `OPENCLAW_DOCKER_PROFILE_ENV_ONLY=1` للتحقق من متغيرات البيئة فقط المستوردة من `OPENCLAW_PROFILE_FILE`، باستخدام أدلة إعداد/مساحة عمل مؤقتة ودون أي تركيبات مصادقة CLI خارجية +- `OPENCLAW_DOCKER_CLI_TOOLS_DIR=...` ‏(الافتراضي: `~/.cache/openclaw/docker-cli-tools`) يتم تركيبه إلى `/home/node/.npm-global` من أجل تثبيتات CLI المخزنة مؤقتًا داخل Docker +- تُركّب أدلة/ملفات مصادقة CLI الخارجية تحت `$HOME` للقراءة فقط تحت `/host-auth...`، ثم تُنسخ إلى `/home/node/...` قبل بدء الاختبارات - الأدلة الافتراضية: `.minimax` - الملفات الافتراضية: `~/.codex/auth.json` و`~/.codex/config.toml` و`.claude.json` و`~/.claude/.credentials.json` و`~/.claude/settings.json` و`~/.claude/settings.local.json` - - التشغيلات المضيقة حسب المزوّد توصل فقط الأدلة/الملفات اللازمة المستنتجة من `OPENCLAW_LIVE_PROVIDERS` / `OPENCLAW_LIVE_GATEWAY_PROVIDERS` - - يمكنك التجاوز يدويًا باستخدام `OPENCLAW_DOCKER_AUTH_DIRS=all` أو `OPENCLAW_DOCKER_AUTH_DIRS=none` أو قائمة مفصولة بفواصل مثل `OPENCLAW_DOCKER_AUTH_DIRS=.claude,.codex` + - تقوم التشغيلات المضيقة للمزوّد بتركيب الأدلة/الملفات المطلوبة فقط كما يُستنتج من `OPENCLAW_LIVE_PROVIDERS` / `OPENCLAW_LIVE_GATEWAY_PROVIDERS` + - يمكن التجاوز يدويًا باستخدام `OPENCLAW_DOCKER_AUTH_DIRS=all` أو `OPENCLAW_DOCKER_AUTH_DIRS=none` أو قائمة مفصولة بفواصل مثل `OPENCLAW_DOCKER_AUTH_DIRS=.claude,.codex` - `OPENCLAW_LIVE_GATEWAY_MODELS=...` / `OPENCLAW_LIVE_MODELS=...` لتضييق التشغيل - `OPENCLAW_LIVE_GATEWAY_PROVIDERS=...` / `OPENCLAW_LIVE_PROVIDERS=...` لتصفية المزوّدين داخل الحاوية -- `OPENCLAW_SKIP_DOCKER_BUILD=1` لإعادة استخدام صورة `openclaw:local-live` موجودة لتشغيلات الإعادة التي لا تحتاج إلى إعادة بناء -- `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` لضمان أن بيانات الاعتماد تأتي من مخزن profile (وليس من env) -- `OPENCLAW_OPENWEBUI_MODEL=...` لاختيار النموذج الذي يعرِضه gateway لفحص Open WebUI smoke -- `OPENCLAW_OPENWEBUI_PROMPT=...` لتجاوز prompt التحقق من nonce المستخدم بواسطة Open WebUI smoke +- `OPENCLAW_SKIP_DOCKER_BUILD=1` لإعادة استخدام صورة `openclaw:local-live` موجودة للتشغيلات المتكررة التي لا تحتاج إلى إعادة بناء +- `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` لضمان أن تأتي بيانات الاعتماد من مخزن profiles ‏(وليس من البيئة) +- `OPENCLAW_OPENWEBUI_MODEL=...` لاختيار النموذج الذي يكشفه الـ Gateway لاختبار Open WebUI smoke +- `OPENCLAW_OPENWEBUI_PROMPT=...` لتجاوز موجّه التحقق من nonce المستخدم في اختبار Open WebUI smoke - `OPENWEBUI_IMAGE=...` لتجاوز وسم صورة Open WebUI المثبت -## التحقق من سلامة المستندات +## التحقق من سلامة الوثائق -شغّل فحوصات المستندات بعد تعديلها: `pnpm check:docs`. -وشغّل التحقق الكامل لروابط Mintlify عندما تحتاج أيضًا إلى فحص العناوين داخل الصفحة: `pnpm docs:check-links:anchors`. +شغّل فحوصات الوثائق بعد تعديل المستندات: `pnpm check:docs`. +شغّل التحقق الكامل من روابط Mintlify عندما تحتاج أيضًا إلى فحوصات العناوين داخل الصفحة: `pnpm docs:check-links:anchors`. -## اختبار الانحدار دون اتصال (آمن لـ CI) +## اختبار منع التراجع دون اتصال (آمن لـ CI) -هذه اختبارات انحدار لـ «مسار حقيقي» دون مزوّدين حقيقيين: +هذه اختبارات منع تراجع لـ "مسار حقيقي" من دون مزوّدين حقيقيين: -- استدعاء أدوات Gateway (‏OpenAI وهمي، Gateway + حلقة وكيل حقيقية): `src/gateway/gateway.test.ts` (الحالة: "runs a mock OpenAI tool call end-to-end via gateway agent loop") -- معالج Gateway (‏WS `wizard.start`/`wizard.next`، يكتب config + auth مع فرضهما): `src/gateway/gateway.test.ts` (الحالة: "runs wizard over ws and writes auth token config") +- استدعاء أدوات الـ Gateway ‏(mock OpenAI، وGateway حقيقي + حلقة وكيل): `src/gateway/gateway.test.ts` ‏(الحالة: "runs a mock OpenAI tool call end-to-end via gateway agent loop") +- معالج Gateway ‏(‏WS `wizard.start`/`wizard.next`، ويفرض كتابة config + auth): `src/gateway/gateway.test.ts` ‏(الحالة: "runs wizard over ws and writes auth token config") ## تقييمات موثوقية الوكيل (Skills) -لدينا بالفعل بعض الاختبارات الآمنة لـ CI التي تتصرف مثل «تقييمات موثوقية الوكيل»: +لدينا بالفعل بعض الاختبارات الآمنة لـ CI التي تتصرف مثل "تقييمات موثوقية الوكيل": - استدعاء أدوات وهمية عبر Gateway الحقيقي + حلقة الوكيل (`src/gateway/gateway.test.ts`). -- تدفقات المعالج الكاملة من طرف إلى طرف التي تتحقق من توصيل الجلسة وتأثيرات config (`src/gateway/gateway.test.ts`). +- تدفقات المعالج end-to-end التي تتحقق من توصيل الجلسة وتأثيرات الإعداد (`src/gateway/gateway.test.ts`). -ما الذي لا يزال مفقودًا بالنسبة إلى Skills (راجع [Skills](/ar/tools/skills)): +ما الذي لا يزال مفقودًا بالنسبة إلى Skills ‏(راجع [Skills](/ar/tools/skills)): -- **اتخاذ القرار:** عندما تُدرج Skills في prompt، هل يختار الوكيل Skill الصحيحة (أو يتجنب غير ذات الصلة)؟ -- **الامتثال:** هل يقرأ الوكيل `SKILL.md` قبل الاستخدام ويتبع الخطوات/الوسائط المطلوبة؟ +- **اتخاذ القرار:** عندما تُدرج Skills في الموجّه، هل يختار الوكيل Skill الصحيحة (أو يتجنب غير ذات الصلة)؟ +- **الامتثال:** هل يقرأ الوكيل `SKILL.md` قبل الاستخدام ويتبع الخطوات/المعاملات المطلوبة؟ - **عقود سير العمل:** سيناريوهات متعددة الأدوار تتحقق من ترتيب الأدوات، واستمرار سجل الجلسة، وحدود sandbox. يجب أن تظل التقييمات المستقبلية حتمية أولًا: -- مشغّل سيناريوهات يستخدم مزوّدين وهميين للتحقق من استدعاءات الأدوات + ترتيبها، وقراءة ملفات Skill، وتوصيل الجلسات. -- جناح صغير من السيناريوهات المركزة على Skills (الاستخدام مقابل التجنب، والبوابات، وحقن prompt). -- تقييمات حية اختيارية (opt-in، ومقيدة عبر env) فقط بعد وضع الجناح الآمن لـ CI. +- مشغّل سيناريوهات يستخدم مزوّدين وهميين للتحقق من استدعاءات الأدوات + ترتيبها، وقراءة ملفات Skill، وتوصيل الجلسة. +- جناح صغير من السيناريوهات المركزة على Skills ‏(الاستخدام مقابل التجنب، والبوابات، وحقن الموجّه). +- تقييمات live اختيارية (اختيارية ومحكومة بمتغيرات البيئة) فقط بعد وضع الجناح الآمن لـ CI في مكانه. -## اختبارات العقد (شكل Plugin والقناة) +## اختبارات العقود (شكل Plugin والقناة) -تتحقق اختبارات العقد من أن كل Plugin وقناة مسجلين يطابقان -عقد الواجهة الخاص بهما. فهي تكرر عبر جميع Plugins المكتشفة وتشغّل مجموعة من +تتحقق اختبارات العقود من أن كل Plugin وقناة مسجلين يلتزمان +بعقد الواجهة الخاص بهما. فهي تكرّر عبر جميع Plugins المكتشفة وتشغّل مجموعة من التحققات الخاصة بالشكل والسلوك. يتخطى مسار unit الافتراضي `pnpm test` -عمدًا هذه الملفات المشتركة الخاصة بالواجهات وفحوص smoke؛ شغّل أوامر العقد صراحةً -عندما تلمس أسطح القنوات أو المزوّدين المشتركة. +عمدًا هذه الملفات المشتركة الخاصة بالواجهات وملفات smoke؛ شغّل أوامر العقود +صراحةً عندما تلمس أسطح القنوات أو المزوّدين المشتركة. ### الأوامر -- جميع العقود: `pnpm test:contracts` +- كل العقود: `pnpm test:contracts` - عقود القنوات فقط: `pnpm test:contracts:channels` -- عقود المزوّدات فقط: `pnpm test:contracts:plugins` +- عقود المزوّدين فقط: `pnpm test:contracts:plugins` ### عقود القنوات تقع في `src/channels/plugins/contracts/*.contract.test.ts`: -- **plugin** - شكل Plugin الأساسي (id، الاسم، القدرات) +- **plugin** - الشكل الأساسي للـ Plugin ‏(المعرّف، الاسم، القدرات) - **setup** - عقد معالج الإعداد - **session-binding** - سلوك ربط الجلسة - **outbound-payload** - بنية حمولة الرسالة -- **inbound** - التعامل مع الرسائل الواردة +- **inbound** - معالجة الرسائل الواردة - **actions** - معالجات إجراءات القناة -- **threading** - التعامل مع معرّف الخيط +- **threading** - معالجة معرّف السلسلة - **directory** - واجهة API للدليل/القائمة - **group-policy** - فرض سياسة المجموعة @@ -986,16 +982,16 @@ Open WebUI، ويتحقق من أن `/api/models` يعرض `openclaw/default`، تقع في `src/plugins/contracts/*.contract.test.ts`. -- **status** - فحوصات حالة القناة +- **status** - مجسّات حالة القناة - **registry** - شكل سجل Plugin -### عقود المزوّد +### عقود المزوّدين تقع في `src/plugins/contracts/*.contract.test.ts`: - **auth** - عقد تدفق المصادقة - **auth-choice** - اختيار/تحديد المصادقة -- **catalog** - واجهة API لفهرس النماذج +- **catalog** - API فهرس النماذج - **discovery** - اكتشاف Plugin - **loader** - تحميل Plugin - **runtime** - وقت تشغيل المزوّد @@ -1004,21 +1000,21 @@ Open WebUI، ويتحقق من أن `/api/models` يعرض `openclaw/default`، ### متى يجب تشغيلها -- بعد تغيير صادرات `plugin-sdk` أو المسارات الفرعية الخاصة بها -- بعد إضافة Plugin قناة أو مزوّد أو تعديل أحدهما -- بعد إعادة هيكلة تسجيل Plugin أو اكتشافه +- بعد تغيير عمليات التصدير أو المسارات الفرعية في plugin-sdk +- بعد إضافة أو تعديل Plugin قناة أو مزوّد +- بعد إعادة هيكلة تسجيل Plugin أو اكتشافها -تعمل اختبارات العقد في CI ولا تتطلب مفاتيح API حقيقية. +تعمل اختبارات العقود في CI ولا تتطلب مفاتيح API حقيقية. -## إضافة اختبارات الانحدار (إرشادات) +## إضافة اختبارات منع التراجع (إرشادات) -عندما تصلح مشكلة في مزوّد/نموذج اكتُشفت في live: +عندما تصلح مشكلة في مزوّد/نموذج تم اكتشافها في live: -- أضف اختبار انحدار آمنًا لـ CI إن أمكن (مزوّد وهمي/بديل stub، أو التقط تحويل شكل الطلب الدقيق) -- إذا كانت المشكلة حية فقط بطبيعتها (حدود المعدل، سياسات المصادقة)، فأبقِ الاختبار الحي ضيقًا واختياريًا عبر متغيرات env +- أضف اختبار منع تراجع آمنًا لـ CI إن أمكن (مزوّد mock/stub، أو التقط تحويل شكل الطلب الدقيق) +- إذا كانت بطبيعتها live-only ‏(حدود المعدل، سياسات المصادقة)، فأبقِ الاختبار الحي ضيقًا واختياريًا عبر متغيرات البيئة - فضّل استهداف أصغر طبقة تلتقط الخطأ: - خطأ في تحويل/إعادة تشغيل طلب المزوّد → اختبار النماذج المباشرة - - خطأ في مسار الجلسة/السجل/الأدوات في gateway → اختبار Gateway live smoke أو اختبار Gateway وهمي آمن لـ CI + - خطأ في مسار Gateway الخاص بالجلسة/السجل/الأدوات → اختبار smoke حي للـ Gateway أو اختبار mock آمن لـ CI خاص بالـ Gateway - حاجز حماية لاجتياز SecretRef: - - يقوم `src/secrets/exec-secret-ref-id-parity.test.ts` باشتقاق هدف نموذجي واحد لكل فئة SecretRef من metadata السجل (`listSecretTargetRegistryEntries()`)، ثم يتحقق من رفض معرّفات exec الخاصة بمقاطع الاجتياز. - - إذا أضفت عائلة أهداف SecretRef جديدة من نوع `includeInPlan` في `src/secrets/target-registry-data.ts`، فحدّث `classifyTargetClass` في ذلك الاختبار. يفشل الاختبار عمدًا عند وجود معرّفات أهداف غير مصنفة حتى لا يمكن تخطي الفئات الجديدة بصمت. + - يستخدم `src/secrets/exec-secret-ref-id-parity.test.ts` قيمة مستهدفة مُعيّنة واحدة لكل فئة SecretRef من بيانات تعريف السجل (`listSecretTargetRegistryEntries()`)، ثم يتحقق من رفض معرّفات exec الخاصة بمقاطع الاجتياز. + - إذا أضفت عائلة أهداف SecretRef جديدة من نوع `includeInPlan` في `src/secrets/target-registry-data.ts`، فحدّث `classifyTargetClass` في ذلك الاختبار. يفشل الاختبار عمدًا عند وجود معرّفات أهداف غير مصنفة حتى لا يتم تجاوز الفئات الجديدة بصمت. diff --git a/docs/ar/help/troubleshooting.md b/docs/ar/help/troubleshooting.md index c49f9d40d..0c7be54e6 100644 --- a/docs/ar/help/troubleshooting.md +++ b/docs/ar/help/troubleshooting.md @@ -1,14 +1,14 @@ --- read_when: - - OpenClaw لا يعمل وتحتاج إلى أسرع طريق إلى الحل + - لا يعمل OpenClaw وتحتاج إلى أسرع طريق إلى الإصلاح - تريد مسار فرز أولي قبل التعمق في أدلة التشغيل التفصيلية summary: مركز استكشاف الأخطاء وإصلاحها في OpenClaw بدءًا من الأعراض title: استكشاف الأخطاء وإصلاحها العام x-i18n: - generated_at: "2026-04-11T02:45:31Z" + generated_at: "2026-04-20T07:30:23Z" model: gpt-5.4 provider: openai - source_hash: 16b38920dbfdc8d4a79bbb5d6fab2c67c9f218a97c36bb4695310d7db9c4614a + source_hash: cc5d8c9f804084985c672c5a003ce866e8142ab99fe81abb7a0d38e22aea4b88 source_path: help/troubleshooting.md workflow: 15 --- @@ -19,7 +19,7 @@ x-i18n: ## أول 60 ثانية -شغّل هذا التسلسل بالترتيب نفسه تمامًا: +شغّل هذا التسلسل بالضبط وبالترتيب: ```bash openclaw status @@ -33,45 +33,47 @@ openclaw logs --follow المخرجات الجيدة في سطر واحد: -- `openclaw status` → يعرض القنوات المكوّنة من دون أخطاء مصادقة واضحة. +- `openclaw status` → يعرض القنوات المضبوطة ولا توجد أخطاء مصادقة واضحة. - `openclaw status --all` → التقرير الكامل موجود وقابل للمشاركة. -- `openclaw gateway probe` → يمكن الوصول إلى هدف gateway المتوقع (`Reachable: yes`). تشير `RPC: limited - missing scope: operator.read` إلى تشخيصات متدهورة، وليس إلى فشل في الاتصال. -- `openclaw gateway status` → `Runtime: running` و`RPC probe: ok`. -- `openclaw doctor` → لا توجد أخطاء حظر في الإعدادات/الخدمة. -- `openclaw channels status --probe` → عندما يكون الوصول إلى gateway ممكنًا، يعرض حالة النقل المباشرة لكل حساب بالإضافة إلى نتائج الفحص/التدقيق مثل `works` أو `audit ok`؛ وإذا تعذر الوصول إلى gateway، يعود الأمر إلى ملخصات تعتمد على الإعدادات فقط. -- `openclaw logs --follow` → نشاط مستقر، ولا توجد أخطاء قاتلة متكررة. +- `openclaw gateway probe` → يمكن الوصول إلى هدف Gateway المتوقع (`Reachable: yes`). يوضّح `Capability: ...` مستوى المصادقة الذي أمكن للفحص إثباته، و`Read probe: limited - missing scope: operator.read` يعني تشخيصًا متدهورًا وليس فشلًا في الاتصال. +- `openclaw gateway status` → `Runtime: running` و`Connectivity probe: ok` وسطر `Capability: ...` منطقي. استخدم `--require-rpc` إذا كنت تحتاج أيضًا إلى إثبات RPC بنطاق القراءة. +- `openclaw doctor` → لا توجد أخطاء إعداد/خدمة مانعة. +- `openclaw channels status --probe` → يعرض Gateway القابل للوصول حالة نقل مباشرة لكل حساب + بالإضافة إلى نتائج الفحص/التدقيق مثل `works` أو `audit ok`؛ وإذا تعذر + الوصول إلى Gateway، يعود الأمر إلى ملخصات تعتمد على الإعداد فقط. +- `openclaw logs --follow` → نشاط مستمر، من دون أخطاء قاتلة متكررة. -## ‏429 لسياق Anthropic الطويل +## 429 من Anthropic للسياق الطويل إذا رأيت: -`HTTP 429: rate_limit_error: Extra usage is required for long context requests` +`HTTP 429: rate_limit_error: Extra usage is required for long context requests`, فانتقل إلى [/gateway/troubleshooting#anthropic-429-extra-usage-required-for-long-context](/ar/gateway/troubleshooting#anthropic-429-extra-usage-required-for-long-context). -## تعمل الواجهة الخلفية المحلية المتوافقة مع OpenAI مباشرة لكنها تفشل في OpenClaw +## تعمل الواجهة الخلفية المحلية المتوافقة مع OpenAI مباشرة ولكنها تفشل في OpenClaw -إذا كانت الواجهة الخلفية المحلية أو المستضافة ذاتيًا على `/v1` تستجيب لطلبات الفحص المباشرة الصغيرة على -`/v1/chat/completions` لكنها تفشل مع `openclaw infer model run` أو أثناء دورات -الوكيل العادية: +إذا كانت الواجهة الخلفية المحلية أو المستضافة ذاتيًا `/v1` تستجيب لفحوصات +`/v1/chat/completions` المباشرة الصغيرة لكنها تفشل عند `openclaw infer model run` أو +في دورات الوكيل العادية: -1. إذا كانت رسالة الخطأ تشير إلى أن `messages[].content` يجب أن تكون سلسلة نصية، فاضبط +1. إذا ذكرت الرسالة أن `messages[].content` يجب أن يكون سلسلة نصية، فاضبط `models.providers..models[].compat.requiresStringContent: true`. -2. إذا استمرت الواجهة الخلفية في الفشل فقط أثناء دورات وكيل OpenClaw، فاضبط - `models.providers..models[].compat.supportsTools: false` وأعد المحاولة. -3. إذا كانت الاستدعاءات المباشرة الصغيرة لا تزال تعمل لكن موجّهات OpenClaw الأكبر تتسبب في تعطل - الواجهة الخلفية، فتعامل مع المشكلة المتبقية على أنها قيد في النموذج/الخادم من المصدر - وتابع في دليل التشغيل التفصيلي: +2. إذا استمرت الواجهة الخلفية في الفشل فقط في دورات وكيل OpenClaw، فاضبط + `models.providers..models[].compat.supportsTools: false` ثم أعد المحاولة. +3. إذا كانت الاستدعاءات المباشرة الصغيرة ما تزال تعمل ولكن المطالبات الأكبر في OpenClaw تتسبب في تعطل + الواجهة الخلفية، فاعتبر المشكلة المتبقية قيدًا في النموذج/الخادم من المصدر + وتابع في دليل التشغيل المتعمق: [/gateway/troubleshooting#local-openai-compatible-backend-passes-direct-probes-but-agent-runs-fail](/ar/gateway/troubleshooting#local-openai-compatible-backend-passes-direct-probes-but-agent-runs-fail) -## فشل تثبيت plugin بسبب غياب openclaw extensions +## يفشل تثبيت Plugin بسبب فقدان openclaw extensions -إذا فشل التثبيت مع `package.json missing openclaw.extensions`، فهذا يعني أن حزمة plugin +إذا فشل التثبيت مع `package.json missing openclaw.extensions`، فهذا يعني أن حزمة Plugin تستخدم بنية قديمة لم يعد OpenClaw يقبلها. -أصلح ذلك في حزمة plugin: +الإصلاح في حزمة Plugin: 1. أضف `openclaw.extensions` إلى `package.json`. 2. وجّه الإدخالات إلى ملفات وقت التشغيل المبنية (عادةً `./dist/index.js`). -3. أعد نشر plugin ثم شغّل `openclaw plugins install ` مرة أخرى. +3. أعد نشر Plugin ثم شغّل `openclaw plugins install ` مرة أخرى. مثال: @@ -85,28 +87,28 @@ openclaw logs --follow } ``` -مرجع: [بنية plugins](/ar/plugins/architecture) +المرجع: [معمارية Plugin](/ar/plugins/architecture) -## شجرة القرارات +## شجرة القرار ```mermaid flowchart TD - A[OpenClaw is not working] --> B{What breaks first} - B --> C[No replies] - B --> D[Dashboard or Control UI will not connect] - B --> E[Gateway will not start or service not running] - B --> F[Channel connects but messages do not flow] - B --> G[Cron or heartbeat did not fire or did not deliver] - B --> H[Node is paired but camera canvas screen exec fails] - B --> I[Browser tool fails] + A[OpenClaw لا يعمل] --> B{ما الذي يتعطل أولًا} + B --> C[لا توجد ردود] + B --> D[لوحة المعلومات أو واجهة التحكم لا تتصل] + B --> E[Gateway لا يبدأ أو أن الخدمة غير قيد التشغيل] + B --> F[القناة تتصل لكن الرسائل لا تتدفق] + B --> G[Cron أو Heartbeat لم يُشغَّلا أو لم يُسلَّما] + B --> H[تم إقران Node لكن أداة camera canvas screen exec تفشل] + B --> I[أداة المتصفح تفشل] - C --> C1[/No replies section/] - D --> D1[/Control UI section/] - E --> E1[/Gateway section/] - F --> F1[/Channel flow section/] - G --> G1[/Automation section/] - H --> H1[/Node tools section/] - I --> I1[/Browser section/] + C --> C1[/قسم عدم وجود ردود/] + D --> D1[/قسم واجهة التحكم/] + E --> E1[/قسم Gateway/] + F --> F1[/قسم تدفق القناة/] + G --> G1[/قسم الأتمتة/] + H --> H1[/قسم أدوات Node/] + I --> I1[/قسم المتصفح/] ``` @@ -122,17 +124,18 @@ flowchart TD تبدو المخرجات الجيدة كالتالي: - `Runtime: running` - - `RPC probe: ok` - - تعرض قناتك اتصال النقل، وعند الدعم، `works` أو `audit ok` في `channels status --probe` - - يظهر المرسِل على أنه معتمد (أو أن سياسة الرسائل الخاصة DM مفتوحة/ضمن قائمة السماح) + - `Connectivity probe: ok` + - `Capability: read-only` أو `write-capable` أو `admin-capable` + - تعرض قناتك اتصال النقل، وحيثما كان ذلك مدعومًا، `works` أو `audit ok` في `channels status --probe` + - يظهر المرسل على أنه تمت الموافقة عليه (أو أن سياسة الرسائل المباشرة DM مفتوحة/قائمة سماح) - التواقيع الشائعة في السجل: + تواقيع السجلات الشائعة: - - `drop guild message (mention required` → منع حظر الإشارة معالجة الرسالة في Discord. - - `pairing request` → المرسِل غير معتمد وينتظر الموافقة على الاقتران عبر DM. - - `blocked` / `allowlist` في سجلات القناة → تم ترشيح المرسِل أو الغرفة أو المجموعة. + - `drop guild message (mention required` → منعت بوابة الإشارة معالجة الرسالة في Discord. + - `pairing request` → المرسل غير معتمد وينتظر موافقة إقران DM. + - `blocked` / `allowlist` في سجلات القناة → تمت تصفية المرسل أو الغرفة أو المجموعة. - الصفحات التفصيلية: + الصفحات المتعمقة: - [/gateway/troubleshooting#no-replies](/ar/gateway/troubleshooting#no-replies) - [/channels/troubleshooting](/ar/channels/troubleshooting) @@ -140,7 +143,7 @@ flowchart TD - + ```bash openclaw status openclaw gateway status @@ -151,27 +154,28 @@ flowchart TD تبدو المخرجات الجيدة كالتالي: - - يظهر `Dashboard: http://...` في `openclaw gateway status` - - `RPC probe: ok` + - يتم عرض `Dashboard: http://...` في `openclaw gateway status` + - `Connectivity probe: ok` + - `Capability: read-only` أو `write-capable` أو `admin-capable` - لا توجد حلقة مصادقة في السجلات - التواقيع الشائعة في السجل: + تواقيع السجلات الشائعة: - - `device identity required` → لا يمكن لـ HTTP/سياق غير آمن إكمال مصادقة الجهاز. - - `origin not allowed` → إن `Origin` الخاص بالمتصفح غير مسموح له لهدف gateway الخاص بـ Control UI. - - `AUTH_TOKEN_MISMATCH` مع تلميحات إعادة المحاولة (`canRetryWithDeviceToken=true`) → قد يحدث تلقائيًا retry واحد موثوق باستخدام رمز الجهاز. - - تعيد إعادة المحاولة باستخدام الرمز المخزّن استخدام مجموعة النطاقات المخزنة مؤقتًا والمحفوظة مع + - `device identity required` → لا يستطيع سياق HTTP/غير الآمن إكمال مصادقة الجهاز. + - `origin not allowed` → `Origin` الخاص بالمتصفح غير مسموح له لهدف Gateway + الخاص بواجهة التحكم. + - `AUTH_TOKEN_MISMATCH` مع تلميحات إعادة المحاولة (`canRetryWithDeviceToken=true`) → قد تحدث إعادة محاولة واحدة تلقائيًا باستخدام رمز جهاز موثوق. + - تعيد محاولة الرمز المخبأ تلك استخدام مجموعة النطاقات المخزنة مؤقتًا مع رمز الجهاز المقترن. أما المستدعون الذين يستخدمون `deviceToken` صريحًا / `scopes` صريحة فيحتفظون - بمجموعة النطاقات المطلوبة الخاصة بهم بدلًا من ذلك. - - في مسار Control UI غير المتزامن لـ Tailscale Serve، تتم سلسلة المحاولات الفاشلة لنفس - `{scope, ip}` قبل أن يسجّل المحدِّد الفشل، لذلك قد تُظهر إعادة محاولة ثانية سيئة ومتزامنة بالفعل + بمجموعة النطاقات المطلوبة الخاصة بهم. + - في مسار واجهة التحكم غير المتزامن عبر Tailscale Serve، تُسلسل المحاولات الفاشلة لنفس + `{scope, ip}` قبل أن يسجل المحدِّد الفشل، لذلك قد تُظهر إعادة محاولة سيئة ثانية متزامنة بالفعل `retry later`. - - `too many failed authentication attempts (retry later)` من - مصدر متصفح localhost → يتم قفل الإخفاقات المتكررة من `Origin` نفسه مؤقتًا؛ ويستخدم Origin آخر على localhost مجموعة منفصلة. - - `unauthorized` متكرر بعد إعادة المحاولة تلك → رمز/كلمة مرور خاطئة، أو عدم تطابق في وضع المصادقة، أو رمز جهاز مقترن قديم. - - `gateway connect failed:` → تستهدف الواجهة عنوان URL/منفذًا خاطئًا أو أن gateway غير قابل للوصول. + - `too many failed authentication attempts (retry later)` من origin متصفح محلي localhost → تُقفل الإخفاقات المتكررة من `Origin` نفسه مؤقتًا؛ بينما يستخدم origin محلي آخر حاوية منفصلة. + - تكرار `unauthorized` بعد تلك إعادة المحاولة → token/password خاطئ، أو عدم تطابق وضع المصادقة، أو رمز جهاز مقترن قديم. + - `gateway connect failed:` → تستهدف الواجهة عنوان URL/منفذًا خاطئًا أو Gateway غير قابل للوصول. - الصفحات التفصيلية: + الصفحات المتعمقة: - [/gateway/troubleshooting#dashboard-control-ui-connectivity](/ar/gateway/troubleshooting#dashboard-control-ui-connectivity) - [/web/control-ui](/web/control-ui) @@ -179,7 +183,7 @@ flowchart TD - + ```bash openclaw status openclaw gateway status @@ -192,15 +196,16 @@ flowchart TD - `Service: ... (loaded)` - `Runtime: running` - - `RPC probe: ok` + - `Connectivity probe: ok` + - `Capability: read-only` أو `write-capable` أو `admin-capable` - التواقيع الشائعة في السجل: + تواقيع السجلات الشائعة: - - `Gateway start blocked: set gateway.mode=local` أو `existing config is missing gateway.mode` → وضع gateway هو remote، أو أن ملف الإعدادات يفتقد علامة الوضع المحلي ويجب إصلاحه. - - `refusing to bind gateway ... without auth` → ربط غير loopback من دون مسار مصادقة صالح لـ gateway (رمز/كلمة مرور، أو trusted-proxy حيثما تم تكوينه). + - `Gateway start blocked: set gateway.mode=local` أو `existing config is missing gateway.mode` → وضع Gateway هو remote، أو أن ملف الإعداد يفتقد ختم الوضع المحلي ويجب إصلاحه. + - `refusing to bind gateway ... without auth` → ربط غير loopback من دون مسار مصادقة صالح لـ Gateway (token/password، أو trusted-proxy حيث يكون مضبوطًا). - `another gateway instance is already listening` أو `EADDRINUSE` → المنفذ مستخدم بالفعل. - الصفحات التفصيلية: + الصفحات المتعمقة: - [/gateway/troubleshooting#gateway-service-not-running](/ar/gateway/troubleshooting#gateway-service-not-running) - [/gateway/background-process](/ar/gateway/background-process) @@ -208,7 +213,7 @@ flowchart TD - + ```bash openclaw status openclaw gateway status @@ -220,23 +225,23 @@ flowchart TD تبدو المخرجات الجيدة كالتالي: - نقل القناة متصل. - - تنجح فحوصات الاقتران/قائمة السماح. - - يتم اكتشاف الإشارات حيث يكون ذلك مطلوبًا. + - تنجح فحوصات الإقران/قائمة السماح. + - يتم اكتشاف الإشارات حيث تكون مطلوبة. - التواقيع الشائعة في السجل: + تواقيع السجلات الشائعة: - - `mention required` → منع حظر الإشارة المعالجة في المجموعة. - - `pairing` / `pending` → مرسِل DM غير معتمد بعد. - - `not_in_channel`, `missing_scope`, `Forbidden`, `401/403` → مشكلة في رمز أذونات القناة. + - `mention required` → منعت بوابة الإشارة في المجموعة المعالجة. + - `pairing` / `pending` → مرسل DM لم تتم الموافقة عليه بعد. + - `not_in_channel`, `missing_scope`, `Forbidden`, `401/403` → مشكلة في رمز صلاحيات القناة. - الصفحات التفصيلية: + الصفحات المتعمقة: - [/gateway/troubleshooting#channel-connected-messages-not-flowing](/ar/gateway/troubleshooting#channel-connected-messages-not-flowing) - [/channels/troubleshooting](/ar/channels/troubleshooting) - + ```bash openclaw status openclaw gateway status @@ -248,21 +253,21 @@ flowchart TD تبدو المخرجات الجيدة كالتالي: - - يعرض `cron.status` أنه مفعّل مع وقت استيقاظ تالٍ. + - يعرض `cron.status` أنه مفعّل مع وقت الاستيقاظ التالي. - يعرض `cron runs` إدخالات `ok` حديثة. - - heartbeat مفعّل وليس خارج الساعات النشطة. + - Heartbeat مفعّل وليس خارج الساعات النشطة. - التواقيع الشائعة في السجل: + تواقيع السجلات الشائعة: - - `cron: scheduler disabled; jobs will not run automatically` → cron معطّل. - - `heartbeat skipped` مع `reason=quiet-hours` → خارج الساعات النشطة المكوّنة. - - `heartbeat skipped` مع `reason=empty-heartbeat-file` → الملف `HEARTBEAT.md` موجود لكنه يحتوي فقط على هيكل فارغ/عناوين فقط. - - `heartbeat skipped` مع `reason=no-tasks-due` → وضع مهام `HEARTBEAT.md` نشط، لكن لم يحن موعد أي من فواصل المهام بعد. - - `heartbeat skipped` مع `reason=alerts-disabled` → تم تعطيل كل ظهور heartbeat (`showOk` و`showAlerts` و`useIndicator` كلها متوقفة). - - `requests-in-flight` → المسار الرئيسي مشغول؛ تم تأجيل إيقاظ heartbeat. - - `unknown accountId` → حساب هدف تسليم heartbeat غير موجود. + - `cron: scheduler disabled; jobs will not run automatically` → Cron معطّل. + - `heartbeat skipped` مع `reason=quiet-hours` → خارج الساعات النشطة المضبوطة. + - `heartbeat skipped` مع `reason=empty-heartbeat-file` → يوجد `HEARTBEAT.md` لكنه يحتوي فقط على هيكل فارغ/عناوين فقط. + - `heartbeat skipped` مع `reason=no-tasks-due` → وضع مهام `HEARTBEAT.md` نشط لكن لم يحن موعد أي من فواصل المهام بعد. + - `heartbeat skipped` مع `reason=alerts-disabled` → كل إظهار Heartbeat معطّل (`showOk` و`showAlerts` و`useIndicator` كلها متوقفة). + - `requests-in-flight` → المسار الرئيسي مشغول؛ تم تأجيل استيقاظ Heartbeat. + - `unknown accountId` → حساب هدف تسليم Heartbeat غير موجود. - الصفحات التفصيلية: + الصفحات المتعمقة: - [/gateway/troubleshooting#cron-and-heartbeat-delivery](/ar/gateway/troubleshooting#cron-and-heartbeat-delivery) - [/automation/cron-jobs#troubleshooting](/ar/automation/cron-jobs#troubleshooting) @@ -270,7 +275,7 @@ flowchart TD - + ```bash openclaw status openclaw gateway status @@ -281,18 +286,18 @@ flowchart TD تبدو المخرجات الجيدة كالتالي: - - تظهر Node على أنها متصلة ومقترنة بالدور `node`. - - توجد الإمكانية للأمر الذي تستدعيه. - - حالة الإذن ممنوحة للأداة. + - Node مدرجة على أنها متصلة ومقترنة للدور `node`. + - توجد Capability للأمر الذي تستدعيه. + - حالة الصلاحية ممنوحة للأداة. - التواقيع الشائعة في السجل: + تواقيع السجلات الشائعة: - - `NODE_BACKGROUND_UNAVAILABLE` → أحضر تطبيق node إلى الواجهة. - - `*_PERMISSION_REQUIRED` → تم رفض إذن نظام التشغيل أو أنه مفقود. - - `SYSTEM_RUN_DENIED: approval required` → الموافقة على exec معلقة. - - `SYSTEM_RUN_DENIED: allowlist miss` → الأمر غير موجود في قائمة السماح الخاصة بـ exec. + - `NODE_BACKGROUND_UNAVAILABLE` → اجلب تطبيق Node إلى الواجهة. + - `*_PERMISSION_REQUIRED` → تم رفض صلاحية نظام التشغيل أو أنها مفقودة. + - `SYSTEM_RUN_DENIED: approval required` → الموافقة على exec لا تزال معلقة. + - `SYSTEM_RUN_DENIED: allowlist miss` → الأمر ليس ضمن قائمة سماح exec. - الصفحات التفصيلية: + الصفحات المتعمقة: - [/gateway/troubleshooting#node-paired-tool-fails](/ar/gateway/troubleshooting#node-paired-tool-fails) - [/nodes/troubleshooting](/ar/nodes/troubleshooting) @@ -300,7 +305,7 @@ flowchart TD - + ```bash openclaw config get tools.exec.host openclaw config get tools.exec.security @@ -310,14 +315,14 @@ flowchart TD ما الذي تغيّر: - - إذا لم يتم تعيين `tools.exec.host`، فالقيمة الافتراضية هي `auto`. - - يَحل `host=auto` إلى `sandbox` عندما يكون وقت تشغيل sandbox نشطًا، وإلى `gateway` بخلاف ذلك. - - إن `host=auto` مخصص للتوجيه فقط؛ أما سلوك "YOLO" من دون مطالبة فيأتي من `security=full` مع `ask=off` على gateway/node. - - في `gateway` و`node`، إذا لم يتم تعيين `tools.exec.security` فالقيمة الافتراضية هي `full`. - - وإذا لم يتم تعيين `tools.exec.ask` فالقيمة الافتراضية هي `off`. - - النتيجة: إذا كنت ترى طلبات موافقة، فهذا يعني أن بعض السياسات المحلية على المضيف أو الخاصة بكل جلسة قد شددت exec بعيدًا عن الإعدادات الافتراضية الحالية. + - إذا كانت `tools.exec.host` غير مضبوطة، فالقيمة الافتراضية هي `auto`. + - تحل `host=auto` إلى `sandbox` عندما يكون وقت تشغيل sandbox نشطًا، وإلى `gateway` بخلاف ذلك. + - `host=auto` مخصص للتوجيه فقط؛ أما سلوك "YOLO" من دون مطالبة فيأتي من `security=full` مع `ask=off` على gateway/node. + - في `gateway` و`node`، تكون القيمة الافتراضية لـ `tools.exec.security` عند عدم ضبطها هي `full`. + - تكون القيمة الافتراضية لـ `tools.exec.ask` عند عدم ضبطها هي `off`. + - النتيجة: إذا كنت ترى طلبات موافقة، فهذا يعني أن بعض السياسات المحلية للمضيف أو الخاصة بالجلسة قد شددت exec بعيدًا عن الإعدادات الافتراضية الحالية. - لاستعادة السلوك الافتراضي الحالي من دون موافقة: + لاستعادة السلوك الحالي الافتراضي من دون موافقة: ```bash openclaw config set tools.exec.host gateway @@ -328,17 +333,17 @@ flowchart TD بدائل أكثر أمانًا: - - عيّن فقط `tools.exec.host=gateway` إذا كنت تريد فقط توجيهًا ثابتًا على المضيف. - - استخدم `security=allowlist` مع `ask=on-miss` إذا كنت تريد exec على المضيف ولكنك لا تزال تريد المراجعة عند عدم التطابق مع قائمة السماح. - - فعّل وضع sandbox إذا كنت تريد أن يعود `host=auto` إلى `sandbox`. + - اضبط فقط `tools.exec.host=gateway` إذا كنت تريد فقط توجيهًا ثابتًا للمضيف. + - استخدم `security=allowlist` مع `ask=on-miss` إذا كنت تريد exec على المضيف ولكنك ما زلت تريد المراجعة عند الإخفاق في قائمة السماح. + - فعّل وضع sandbox إذا كنت تريد أن تُحل `host=auto` مرة أخرى إلى `sandbox`. - التواقيع الشائعة في السجل: + تواقيع السجلات الشائعة: - `Approval required.` → الأمر ينتظر `/approve ...`. - - `SYSTEM_RUN_DENIED: approval required` → موافقة exec على مضيف node معلقة. + - `SYSTEM_RUN_DENIED: approval required` → موافقة exec على مضيف Node معلقة. - `exec host=sandbox requires a sandbox runtime for this session` → تم اختيار sandbox ضمنيًا/صراحةً لكن وضع sandbox متوقف. - الصفحات التفصيلية: + الصفحات المتعمقة: - [/tools/exec](/ar/tools/exec) - [/tools/exec-approvals](/ar/tools/exec-approvals) @@ -346,7 +351,7 @@ flowchart TD - + ```bash openclaw status openclaw gateway status @@ -357,22 +362,22 @@ flowchart TD تبدو المخرجات الجيدة كالتالي: - - تعرض حالة Browser `running: true` مع Browser/profile محدد. + - تعرض حالة المتصفح `running: true` ومتصفحًا/ملفًا شخصيًا محددًا. - يبدأ `openclaw`، أو يمكن لـ `user` رؤية علامات تبويب Chrome المحلية. - التواقيع الشائعة في السجل: + تواقيع السجلات الشائعة: - - `unknown command "browser"` أو `unknown command 'browser'` → تم تعيين `plugins.allow` ولا يتضمن `browser`. - - `Failed to start Chrome CDP on port` → فشل تشغيل Browser المحلي. - - `browser.executablePath not found` → مسار الملف التنفيذي المكوَّن غير صحيح. - - `browser.cdpUrl must be http(s) or ws(s)` → يستخدم عنوان CDP URL المكوَّن مخططًا غير مدعوم. - - `browser.cdpUrl has invalid port` → يحتوي عنوان CDP URL المكوَّن على منفذ غير صالح أو خارج النطاق. - - `No Chrome tabs found for profile="user"` → لا يحتوي profile الإرفاق Chrome MCP على علامات تبويب Chrome محلية مفتوحة. - - `Remote CDP for profile "" is not reachable` → لا يمكن الوصول إلى نقطة نهاية CDP البعيدة المكوَّنة من هذا المضيف. - - `Browser attachOnly is enabled ... not reachable` أو `Browser attachOnly is enabled and CDP websocket ... is not reachable` → لا يملك profile ذو `attach-only` هدف CDP مباشرًا. - - تجاوزات قديمة لـ viewport / dark-mode / locale / offline على profiles ذات `attach-only` أو CDP البعيد → شغّل `openclaw browser stop --browser-profile ` لإغلاق جلسة التحكم النشطة وتحرير حالة المحاكاة من دون إعادة تشغيل gateway. + - `unknown command "browser"` أو `unknown command 'browser'` → تم ضبط `plugins.allow` ولا يتضمن `browser`. + - `Failed to start Chrome CDP on port` → فشل تشغيل المتصفح المحلي. + - `browser.executablePath not found` → مسار الملف التنفيذي المضبوط غير صحيح. + - `browser.cdpUrl must be http(s) or ws(s)` → يستخدم عنوان CDP المضبوط مخططًا غير مدعوم. + - `browser.cdpUrl has invalid port` → يحتوي عنوان CDP المضبوط على منفذ سيئ أو خارج النطاق. + - `No Chrome tabs found for profile="user"` → لا يحتوي ملف الإرفاق Chrome MCP على علامات تبويب Chrome محلية مفتوحة. + - `Remote CDP for profile "" is not reachable` → لا يمكن الوصول إلى نقطة نهاية CDP البعيدة المضبوطة من هذا المضيف. + - `Browser attachOnly is enabled ... not reachable` أو `Browser attachOnly is enabled and CDP websocket ... is not reachable` → لا يحتوي ملف attach-only على هدف CDP مباشر. + - تجاوزات viewport / الوضع الداكن / locale / عدم الاتصال القديمة على ملفات attach-only أو CDP البعيدة → شغّل `openclaw browser stop --browser-profile ` لإغلاق جلسة التحكم النشطة وتحرير حالة المحاكاة من دون إعادة تشغيل Gateway. - الصفحات التفصيلية: + الصفحات المتعمقة: - [/gateway/troubleshooting#browser-tool-fails](/ar/gateway/troubleshooting#browser-tool-fails) - [/tools/browser#missing-browser-command-or-tool](/ar/tools/browser#missing-browser-command-or-tool) @@ -385,8 +390,8 @@ flowchart TD ## ذو صلة -- [الأسئلة الشائعة](/ar/help/faq) — الأسئلة المتداولة -- [استكشاف أخطاء Gateway وإصلاحها](/ar/gateway/troubleshooting) — المشكلات الخاصة بـ gateway -- [Doctor](/ar/gateway/doctor) — فحوصات السلامة والإصلاحات المؤتمتة +- [الأسئلة الشائعة](/ar/help/faq) — الأسئلة المتكررة +- [استكشاف أخطاء Gateway وإصلاحها](/ar/gateway/troubleshooting) — المشكلات الخاصة بـ Gateway +- [Doctor](/ar/gateway/doctor) — فحوصات السلامة والإصلاحات الآلية - [استكشاف أخطاء القنوات وإصلاحها](/ar/channels/troubleshooting) — مشكلات اتصال القنوات -- [استكشاف أخطاء الأتمتة وإصلاحها](/ar/automation/cron-jobs#troubleshooting) — مشكلات cron وheartbeat +- [استكشاف أخطاء الأتمتة وإصلاحها](/ar/automation/cron-jobs#troubleshooting) — مشكلات Cron وHeartbeat diff --git a/docs/ar/tools/browser.md b/docs/ar/tools/browser.md index f9fb84e1e..761f42334 100644 --- a/docs/ar/tools/browser.md +++ b/docs/ar/tools/browser.md @@ -1,43 +1,43 @@ --- read_when: - - إضافة أتمتة متصفح يتحكم بها الوكيل - - تصحيح سبب تداخل openclaw مع Chrome الخاص بك + - إضافة أتمتة المتصفح التي يتحكم بها الوكيل + - تصحيح سبب تدخّل openclaw في Chrome الخاص بك - تنفيذ إعدادات المتصفح + دورة الحياة في تطبيق macOS -summary: خدمة التحكم المتكاملة في المتصفح + أوامر الإجراءات -title: المتصفح (تحت إدارة OpenClaw) +summary: خدمة تحكم متكاملة للمتصفح + أوامر الإجراءات +title: المتصفح (بإدارة OpenClaw) x-i18n: - generated_at: "2026-04-14T13:04:27Z" + generated_at: "2026-04-20T07:30:39Z" model: gpt-5.4 provider: openai - source_hash: ae9ef725f544d4236d229f498c7187871c69bd18d31069b30a7e67fac53166a2 + source_hash: 3f7d37b34ba48dc7c38f8c2e77f8bb97af987eac6a874ebfc921f950fb59de4b source_path: tools/browser.md workflow: 15 --- -# المتصفح (تحت إدارة openclaw) +# المتصفح (بإدارة openclaw) -يمكن لـ OpenClaw تشغيل **ملف تعريف مخصص لـ Chrome/Brave/Edge/Chromium** يتحكم فيه الوكيل. -وهو معزول عن متصفحك الشخصي وتتم إدارته عبر خدمة تحكم محلية صغيرة -داخل Gateway (حلقة محلية فقط). +يمكن لـ OpenClaw تشغيل **ملف تعريف Chrome/Brave/Edge/Chromium مخصص** يتحكم فيه الوكيل. +وهو معزول عن متصفحك الشخصي وتتم إدارته من خلال خدمة تحكم محلية صغيرة +داخل Gateway ‏(loopback فقط). -عرض المبتدئين: +عرض للمبتدئين: -- فكّر فيه على أنه **متصفح منفصل مخصص للوكيل فقط**. -- ملف تعريف `openclaw` **لا** يلمس ملف تعريف متصفحك الشخصي. +- فكّر فيه باعتباره **متصفحًا منفصلًا مخصصًا للوكيل فقط**. +- ملف التعريف `openclaw` **لا** يلمس ملف تعريف متصفحك الشخصي. - يمكن للوكيل **فتح علامات التبويب وقراءة الصفحات والنقر والكتابة** ضمن مسار آمن. -- يرتبط ملف تعريف `user` المدمج بجلسة Chrome الحقيقية المسجل الدخول إليها عبر Chrome MCP. +- يرتبط ملف التعريف المدمج `user` بجلسة Chrome الحقيقية المسجّل دخولك إليها عبر Chrome MCP. -## ما الذي ستحصل عليه +## ما الذي تحصل عليه -- ملف تعريف متصفح منفصل باسم **openclaw** (بلمسة برتقالية افتراضيًا). -- تحكم حتمي بعلامات التبويب (إدراج/فتح/تركيز/إغلاق). -- إجراءات الوكيل (النقر/الكتابة/السحب/التحديد)، واللقطات، ولقطات الشاشة، وملفات PDF. -- دعم اختياري لملفات تعريف متعددة (`openclaw` و`work` و`remote` و...). +- ملف تعريف متصفح منفصل باسم **openclaw** ‏(بتمييز برتقالي افتراضيًا). +- تحكم حتمي بعلامات التبويب (عرض/فتح/تركيز/إغلاق). +- إجراءات الوكيل (نقر/كتابة/سحب/تحديد) ولقطات snapshots ولقطات شاشة وملفات PDF. +- دعم اختياري لعدة ملفات تعريف (`openclaw` و`work` و`remote` و...). -هذا المتصفح **ليس** متصفحك اليومي. إنه مساحة آمنة ومعزولة +هذا المتصفح **ليس** متصفحك اليومي. بل هو سطح آمن ومعزول لأتمتة الوكيل والتحقق. -## البدء السريع +## بدء سريع ```bash openclaw browser --browser-profile openclaw status @@ -49,13 +49,13 @@ openclaw browser --browser-profile openclaw snapshot إذا ظهرت لك رسالة “Browser disabled”، فقم بتمكينه في الإعدادات (انظر أدناه) ثم أعد تشغيل Gateway. -إذا كان `openclaw browser` مفقودًا بالكامل، أو إذا قال الوكيل إن أداة المتصفح -غير متاحة، فانتقل إلى [أمر أو أداة المتصفح المفقودة](/ar/tools/browser#missing-browser-command-or-tool). +إذا كان `openclaw browser` غير موجود بالكامل، أو قال الوكيل إن أداة المتصفح +غير متاحة، فانتقل إلى [أمر أو أداة المتصفح مفقود](/ar/tools/browser#missing-browser-command-or-tool). -## التحكم في Plugin +## التحكم عبر Plugin -أداة `browser` الافتراضية أصبحت الآن Plugin مدمجًا ويأتي مفعّلًا -افتراضيًا. وهذا يعني أنه يمكنك تعطيله أو استبداله دون إزالة بقية +أصبحت أداة `browser` الافتراضية الآن Plugin مضمّنًا يأتي مفعّلًا +افتراضيًا. وهذا يعني أنه يمكنك تعطيله أو استبداله من دون إزالة بقية نظام Plugin في OpenClaw: ```json5 @@ -70,33 +70,33 @@ Gateway. } ``` -قم بتعطيل Plugin المدمج قبل تثبيت Plugin آخر يوفّر -اسم الأداة `browser` نفسه. تتطلب تجربة المتصفح الافتراضية كلا الأمرين: +عطّل Plugin المضمّن قبل تثبيت Plugin آخر يوفّر +اسم أداة `browser` نفسه. تتطلب تجربة المتصفح الافتراضية كِلا الأمرين: -- `plugins.entries.browser.enabled` غير معطّل +- ألّا يكون `plugins.entries.browser.enabled` معطّلًا - `browser.enabled=true` -إذا عطّلت الـ Plugin فقط، فإن CLI المتصفح المدمج (`openclaw browser`) -وطريقة gateway (`browser.request`) وأداة الوكيل وخدمة التحكم الافتراضية في المتصفح -ستختفي كلها معًا. ستبقى إعدادات `browser.*` كما هي -ليعيد Plugin بديل استخدامها. +إذا عطّلت Plugin فقط، فسيختفي معًا CLI المضمّن للمتصفح (`openclaw browser`) +وطريقة gateway ‏(`browser.request`) وأداة الوكيل وخدمة التحكم +الافتراضية بالمتصفح. وستبقى إعدادات `browser.*` سليمة لكي يعيد +Plugin بديل استخدامها. -يمتلك Plugin المتصفح المدمج الآن أيضًا تنفيذ وقت تشغيل المتصفح. -ويحتفظ Core فقط بمساعدات Plugin SDK المشتركة بالإضافة إلى عمليات إعادة تصدير -توافقية لمسارات الاستيراد الداخلية الأقدم. عمليًا، تؤدي إزالة -حزمة Plugin المتصفح أو استبدالها إلى إزالة مجموعة ميزات المتصفح بدلًا -من ترك وقت تشغيل ثانٍ يملكه Core. +يمتلك Plugin المتصفح المضمّن الآن أيضًا تنفيذ وقت تشغيل المتصفح. +ولا يحتفظ core إلا بمساعدات Plugin SDK المشتركة بالإضافة إلى +إعادات التصدير التوافقية لمسارات الاستيراد الداخلية الأقدم. عمليًا، +فإن إزالة حزمة Plugin المتصفح أو استبدالها يزيل مجموعة ميزات المتصفح +بدلًا من ترك وقت تشغيل ثانٍ مملوكًا لـ core. لا تزال تغييرات إعدادات المتصفح تتطلب إعادة تشغيل Gateway حتى يتمكن Plugin -المدمج من إعادة تسجيل خدمة المتصفح الخاصة به باستخدام الإعدادات الجديدة. +المضمّن من إعادة تسجيل خدمة المتصفح الخاصة به باستخدام الإعدادات الجديدة. -## أمر أو أداة المتصفح المفقودة +## أمر أو أداة المتصفح مفقود إذا أصبح `openclaw browser` فجأة أمرًا غير معروف بعد الترقية، أو -أبلغ الوكيل أن أداة المتصفح مفقودة، فالسبب الأكثر شيوعًا هو وجود -قائمة `plugins.allow` مقيّدة لا تتضمن `browser`. +أبلغ الوكيل بأن أداة المتصفح مفقودة، فالسبب الأكثر شيوعًا هو وجود قائمة +`plugins.allow` مقيِّدة لا تتضمن `browser`. -مثال على إعدادات معطّلة: +مثال على إعداد معطوب: ```json5 { @@ -118,31 +118,30 @@ Gateway. ملاحظات مهمة: -- `browser.enabled=true` ليس كافيًا وحده عندما يتم تعيين `plugins.allow`. -- `plugins.entries.browser.enabled=true` ليس كافيًا وحده أيضًا عندما يتم تعيين `plugins.allow`. -- `tools.alsoAllow: ["browser"]` **لا** يحمّل Plugin المتصفح المدمج. بل يضبط فقط سياسة الأدوات بعد أن يكون Plugin قد تم تحميله بالفعل. -- إذا لم تكن بحاجة إلى قائمة سماح مقيّدة للـ Plugin، فإن إزالة `plugins.allow` تعيد أيضًا سلوك المتصفح المدمج الافتراضي. +- لا يكفي `browser.enabled=true` وحده عندما يكون `plugins.allow` مضبوطًا. +- ولا يكفي `plugins.entries.browser.enabled=true` وحده عندما يكون `plugins.allow` مضبوطًا. +- لا يقوم `tools.alsoAllow: ["browser"]` **بتحميل** Plugin المتصفح المضمّن. فهو يضبط فقط سياسة الأدوات بعد أن يكون Plugin قد تم تحميله بالفعل. +- إذا لم تكن بحاجة إلى قائمة سماح مقيِّدة لـ Plugin، فإن إزالة `plugins.allow` تعيد أيضًا سلوك المتصفح المضمّن الافتراضي. الأعراض المعتادة: -- `openclaw browser` أمر غير معروف. -- `browser.request` مفقود. -- يبلّغ الوكيل أن أداة المتصفح غير متاحة أو مفقودة. +- يكون `openclaw browser` أمرًا غير معروف. +- يكون `browser.request` مفقودًا. +- يبلّغ الوكيل بأن أداة المتصفح غير متاحة أو مفقودة. ## ملفات التعريف: `openclaw` مقابل `user` -- `openclaw`: متصفح مُدار ومعزول (لا يتطلب أي إضافة). -- `user`: ملف تعريف إرفاق Chrome MCP مدمج لجلسة **Chrome الحقيقية المسجل الدخول إليها** - الخاصة بك. +- `openclaw`: متصفح مُدار ومعزول (لا يتطلب امتدادًا). +- `user`: ملف تعريف إرفاق Chrome MCP مدمج لجلسة **Chrome الحقيقية المسجّل دخولك إليها**. -بالنسبة لاستدعاءات أداة متصفح الوكيل: +بالنسبة لاستدعاءات أداة المتصفح من الوكيل: - الافتراضي: استخدم متصفح `openclaw` المعزول. -- فضّل `profile="user"` عندما تكون الجلسات الحالية المسجل الدخول إليها مهمة ويكون المستخدم - موجودًا أمام الجهاز للنقر/الموافقة على أي مطالبة إرفاق. +- فضّل `profile="user"` عندما تكون الجلسات الحالية المسجّل دخولها مهمة وكان المستخدم + موجودًا أمام الكمبيوتر للنقر/الموافقة على أي مطالبة إرفاق. - `profile` هو التجاوز الصريح عندما تريد وضع متصفح محددًا. -عيّن `browser.defaultProfile: "openclaw"` إذا كنت تريد الوضع المُدار افتراضيًا. +اضبط `browser.defaultProfile: "openclaw"` إذا كنت تريد الوضع المُدار افتراضيًا. ## الإعدادات @@ -153,7 +152,7 @@ Gateway. browser: { enabled: true, // الافتراضي: true ssrfPolicy: { - // dangerouslyAllowPrivateNetwork: true, // فعّل هذا فقط عند الاشتراك المقصود في الوصول إلى شبكة خاصة موثوقة + // dangerouslyAllowPrivateNetwork: true, // فعّل ذلك فقط عند الاشتراك المقصود في الوصول إلى شبكة خاصة موثوقة // allowPrivateNetwork: true, // اسم بديل قديم // hostnameAllowlist: ["*.example.com", "example.com"], // allowedHostnames: ["localhost"], @@ -189,31 +188,31 @@ Gateway. ملاحظات: -- ترتبط خدمة التحكم في المتصفح بحلقة محلية على منفذ مشتق من `gateway.port` +- ترتبط خدمة التحكم بالمتصفح على loopback بمنفذ مشتق من `gateway.port` (الافتراضي: `18791`، أي gateway + 2). -- إذا تجاوزت منفذ Gateway (`gateway.port` أو `OPENCLAW_GATEWAY_PORT`)، - فإن منافذ المتصفح المشتقة تتغيّر للحفاظ على بقائها ضمن "العائلة" نفسها. -- يستخدم `cdpUrl` منفذ CDP المحلي المُدار افتراضيًا عند عدم تعيينه. -- ينطبق `remoteCdpTimeoutMs` على فحوصات الوصول إلى CDP البعيد (غير الخاص بالحلقة المحلية). -- ينطبق `remoteCdpHandshakeTimeoutMs` على فحوصات الوصول إلى WebSocket لـ CDP البعيد. -- تتم حماية التنقل/فتح علامة تبويب في المتصفح من SSRF قبل التنقل، وتُعاد محاولة التحقق بأفضل جهد على عنوان URL النهائي من نوع `http(s)` بعد التنقل. -- في وضع SSRF الصارم، يتم أيضًا التحقق من اكتشاف/فحص نقطة نهاية CDP البعيدة (`cdpUrl`، بما في ذلك عمليات البحث `/json/version`). -- يكون `browser.ssrfPolicy.dangerouslyAllowPrivateNetwork` معطّلًا افتراضيًا. اضبطه على `true` فقط عندما تثق عمدًا في الوصول إلى المتصفح عبر شبكة خاصة. +- إذا قمت بتجاوز منفذ Gateway ‏(`gateway.port` أو `OPENCLAW_GATEWAY_PORT`)، + فإن منافذ المتصفح المشتقة تتحرك لتبقى ضمن “العائلة” نفسها. +- يستخدم `cdpUrl` افتراضيًا منفذ CDP المحلي المُدار عندما لا يكون مضبوطًا. +- ينطبق `remoteCdpTimeoutMs` على فحوصات إمكانية الوصول إلى CDP البعيد (غير loopback). +- ينطبق `remoteCdpHandshakeTimeoutMs` على فحوصات إمكانية الوصول إلى WebSocket الخاصة بـ CDP البعيد. +- تكون عملية الانتقال/فتح علامة التبويب في المتصفح محمية من SSRF قبل الانتقال، ويُعاد فحصها بأفضل جهد على عنوان URL النهائي من نوع `http(s)` بعد الانتقال. +- في وضع SSRF الصارم، يتم أيضًا فحص اكتشاف/استقصاء نقطة نهاية CDP البعيدة (`cdpUrl`، بما في ذلك عمليات البحث `/json/version`). +- يكون `browser.ssrfPolicy.dangerouslyAllowPrivateNetwork` معطّلًا افتراضيًا. اضبطه إلى `true` فقط عندما تكون تثق عمدًا في وصول المتصفح إلى شبكة خاصة. - لا يزال `browser.ssrfPolicy.allowPrivateNetwork` مدعومًا كاسم بديل قديم من أجل التوافق. -- `attachOnly: true` يعني "لا تُشغّل متصفحًا محليًا أبدًا؛ ارتبط فقط إذا كان يعمل بالفعل." +- تعني `attachOnly: true` أنه “لا تشغّل أبدًا متصفحًا محليًا؛ فقط ارتبط به إذا كان يعمل بالفعل.” - يقوم `color` و`color` لكل ملف تعريف بتلوين واجهة المتصفح حتى تتمكن من معرفة ملف التعريف النشط. -- ملف التعريف الافتراضي هو `openclaw` (متصفح OpenClaw مستقل تحت الإدارة). استخدم `defaultProfile: "user"` للاشتراك في متصفح المستخدم المسجل الدخول إليه. -- ترتيب الاكتشاف التلقائي: متصفح النظام الافتراضي إذا كان مستندًا إلى Chromium؛ وإلا Chrome ← Brave ← Edge ← Chromium ← Chrome Canary. -- تقوم ملفات تعريف `openclaw` المحلية بتعيين `cdpPort`/`cdpUrl` تلقائيًا — اضبط هذه القيم فقط لـ CDP البعيد. +- ملف التعريف الافتراضي هو `openclaw` ‏(متصفح مستقل مُدار من OpenClaw). استخدم `defaultProfile: "user"` للاشتراك في متصفح المستخدم المسجّل دخوله. +- ترتيب الاكتشاف التلقائي: متصفح النظام الافتراضي إذا كان قائمًا على Chromium؛ وإلا Chrome ← Brave ← Edge ← Chromium ← Chrome Canary. +- تقوم ملفات تعريف `openclaw` المحلية بتعيين `cdpPort`/`cdpUrl` تلقائيًا — اضبطهما فقط لـ CDP البعيد. - يستخدم `driver: "existing-session"` Chrome DevTools MCP بدلًا من CDP الخام. لا - تقم بتعيين `cdpUrl` لهذا المشغل. -- عيّن `browser.profiles..userDataDir` عندما ينبغي لملف تعريف existing-session + تضبط `cdpUrl` لهذا المشغّل. +- اضبط `browser.profiles..userDataDir` عندما يجب على ملف تعريف existing-session الارتباط بملف تعريف مستخدم Chromium غير افتراضي مثل Brave أو Edge. -## استخدام Brave (أو أي متصفح آخر مستند إلى Chromium) +## استخدام Brave ‏(أو متصفح آخر قائم على Chromium) -إذا كان متصفح **النظام الافتراضي** لديك مستندًا إلى Chromium (Chrome/Brave/Edge/إلخ)، -فإن OpenClaw يستخدمه تلقائيًا. عيّن `browser.executablePath` لتجاوز +إذا كان متصفحك **الافتراضي على النظام** قائمًا على Chromium ‏(Chrome/Brave/Edge/etc)، +فإن OpenClaw يستخدمه تلقائيًا. اضبط `browser.executablePath` لتجاوز الاكتشاف التلقائي: مثال CLI: @@ -245,52 +244,52 @@ openclaw config set browser.executablePath "/usr/bin/google-chrome" } ``` -## التحكم المحلي مقابل التحكم البعيد +## التحكم المحلي مقابل البعيد -- **التحكم المحلي (الافتراضي):** يبدأ Gateway خدمة التحكم عبر الحلقة المحلية ويمكنه تشغيل متصفح محلي. -- **التحكم البعيد (مضيف node):** شغّل مضيف node على الجهاز الذي يحتوي على المتصفح؛ وسيقوم Gateway بتمرير إجراءات المتصفح إليه. -- **CDP البعيد:** عيّن `browser.profiles..cdpUrl` (أو `browser.cdpUrl`) من أجل - الارتباط بمتصفح بعيد مستند إلى Chromium. في هذه الحالة، لن يقوم OpenClaw بتشغيل متصفح محلي. +- **التحكم المحلي (الافتراضي):** يبدأ Gateway خدمة التحكم عبر loopback ويمكنه تشغيل متصفح محلي. +- **التحكم البعيد (مضيف Node):** شغّل مضيف Node على الجهاز الذي يحتوي على المتصفح؛ وسيقوم Gateway بتمرير إجراءات المتصفح إليه. +- **CDP البعيد:** اضبط `browser.profiles..cdpUrl` (أو `browser.cdpUrl`) من أجل + الارتباط بمتصفح بعيد قائم على Chromium. في هذه الحالة، لن يقوم OpenClaw بتشغيل متصفح محلي. يختلف سلوك الإيقاف حسب وضع ملف التعريف: - ملفات التعريف المحلية المُدارة: يقوم `openclaw browser stop` بإيقاف عملية المتصفح التي شغّلها OpenClaw -- ملفات تعريف attach-only وCDP البعيدة: يقوم `openclaw browser stop` بإغلاق جلسة - التحكم النشطة وتحرير تجاوزات محاكاة Playwright/CDP (منفذ العرض، - ونظام الألوان، واللغة المحلية، والمنطقة الزمنية، ووضع عدم الاتصال، وحالات مشابهة)، حتى - لو لم يتم تشغيل أي عملية متصفح بواسطة OpenClaw +- ملفات التعريف attach-only وCDP البعيد: يقوم `openclaw browser stop` بإغلاق + جلسة التحكم النشطة وتحرير تجاوزات محاكاة Playwright/CDP ‏(منفذ العرض، + ونظام الألوان، واللغة المحلية، والمنطقة الزمنية، ووضع عدم الاتصال، وحالة مشابهة)، حتى + مع عدم تشغيل OpenClaw لأي عملية متصفح -يمكن أن تتضمن عناوين URL الخاصة بـ CDP البعيد مصادقة: +يمكن أن تتضمن عناوين URL الخاصة بـ CDP البعيد المصادقة: -- رموز استعلام (مثل `https://provider.example?token=`) -- مصادقة HTTP Basic (مثل `https://user:pass@provider.example`) +- رموز استعلام query ‏(مثل `https://provider.example?token=`) +- مصادقة HTTP Basic ‏(مثل `https://user:pass@provider.example`) يحافظ OpenClaw على المصادقة عند استدعاء نقاط النهاية `/json/*` وعند الاتصال -بـ CDP WebSocket. فضّل استخدام متغيرات البيئة أو مديري الأسرار للرموز -بدلًا من تضمينها في ملفات الإعدادات. +بـ WebSocket الخاص بـ CDP. فضّل متغيرات البيئة أو مديري الأسرار للرموز +بدلًا من تثبيتها في ملفات الإعدادات. -## وكيل متصفح Node (إعداد صفري افتراضي) +## وكيل متصفح Node ‏(افتراضي بلا إعدادات) -إذا كنت تشغّل **مضيف node** على الجهاز الذي يحتوي على متصفحك، يمكن لـ OpenClaw -توجيه استدعاءات أداة المتصفح تلقائيًا إلى ذلك الـ Node بدون أي إعدادات متصفح إضافية. -هذا هو المسار الافتراضي لـ Gateways البعيدة. +إذا كنت تشغّل **مضيف Node** على الجهاز الذي يحتوي على متصفحك، فيمكن لـ OpenClaw +توجيه استدعاءات أداة المتصفح تلقائيًا إلى تلك العقدة من دون أي إعدادات متصفح إضافية. +وهذا هو المسار الافتراضي لـ Gatewayات البعيدة. ملاحظات: -- يعرّض مضيف node خادم التحكم المحلي في المتصفح الخاص به عبر **أمر وكيل**. -- تأتي ملفات التعريف من إعدادات `browser.profiles` الخاصة بالعقدة نفسها (مثل المحلي). -- `nodeHost.browserProxy.allowProfiles` اختياري. اتركه فارغًا للحصول على السلوك القديم/الافتراضي: ستظل جميع ملفات التعريف المضبوطة قابلة للوصول عبر الوكيل، بما في ذلك مسارات إنشاء/حذف ملفات التعريف. -- إذا قمت بتعيين `nodeHost.browserProxy.allowProfiles`، فسيتعامل OpenClaw معه على أنه حدّ أقل الامتيازات: لا يمكن استهداف سوى ملفات التعريف الموجودة في قائمة السماح، وتُحظر مسارات إنشاء/حذف ملفات التعريف الدائمة على سطح الوكيل. +- يكشف مضيف Node خادم التحكم المحلي بالمتصفح من خلال **أمر proxy**. +- تأتي ملفات التعريف من إعدادات `browser.profiles` الخاصة بالعقدة نفسها (مثل المحلية). +- `nodeHost.browserProxy.allowProfiles` اختياري. اتركه فارغًا للحصول على السلوك القديم/الافتراضي: تظل جميع ملفات التعريف المضبوطة قابلة للوصول عبر proxy، بما في ذلك مسارات إنشاء/حذف ملفات التعريف. +- إذا قمت بضبط `nodeHost.browserProxy.allowProfiles`، فسيتعامل OpenClaw معه كحدّ امتيازات دنيا: لا يمكن استهداف إلا ملفات التعريف الموجودة في قائمة السماح، كما تُحظر مسارات إنشاء/حذف ملفات التعريف الدائمة على سطح proxy. - عطّله إذا كنت لا تريده: - على العقدة: `nodeHost.browserProxy.enabled=false` - - على الـ gateway: `gateway.nodes.browser.mode="off"` + - على gateway: ‏`gateway.nodes.browser.mode="off"` -## Browserless (CDP بعيد مستضاف) +## Browserless ‏(CDP بعيد مستضاف) -[Browserless](https://browserless.io) هي خدمة Chromium مستضافة تعرض -عناوين URL لاتصال CDP عبر HTTPS وWebSocket. يمكن لـ OpenClaw استخدام أي من الشكلين، لكن -بالنسبة لملف تعريف متصفح بعيد فإن أبسط خيار هو عنوان WebSocket المباشر +[Browserless](https://browserless.io) هي خدمة Chromium مستضافة تكشف +عناوين اتصال CDP عبر HTTPS وWebSocket. يمكن لـ OpenClaw استخدام أي من الشكلين، لكن +بالنسبة إلى ملف تعريف متصفح بعيد فإن أبسط خيار هو عنوان WebSocket المباشر من وثائق الاتصال الخاصة بـ Browserless. مثال: @@ -315,29 +314,44 @@ openclaw config set browser.executablePath "/usr/bin/google-chrome" ملاحظات: - استبدل `` برمز Browserless الحقيقي الخاص بك. -- اختر نقطة نهاية المنطقة التي تطابق حساب Browserless الخاص بك (انظر وثائقهم). -- إذا منحك Browserless عنوان URL أساسيًا من نوع HTTPS، فيمكنك إما تحويله إلى - `wss://` لاتصال CDP مباشر أو الاحتفاظ بعنوان HTTPS ودع OpenClaw - يكتشف `/json/version`. +- اختر نقطة نهاية المنطقة المطابقة لحساب Browserless الخاص بك (راجع وثائقهم). +- إذا منحك Browserless عنوان HTTPS أساسيًا، فيمكنك إما تحويله إلى + `wss://` لاتصال CDP مباشر أو إبقاء عنوان HTTPS والسماح لـ OpenClaw + باكتشاف `/json/version`. -## مزودو WebSocket CDP المباشر +## مزوّدو CDP عبر WebSocket مباشر -تكشف بعض خدمات المتصفح المستضافة عن نقطة نهاية **WebSocket مباشرة** -بدلًا من اكتشاف CDP القياسي المعتمد على HTTP (`/json/version`). يدعم OpenClaw كلا الخيارين: +تكشف بعض خدمات المتصفح المستضافة نقطة نهاية **WebSocket مباشرة** بدلًا من +الاكتشاف القياسي لـ CDP القائم على HTTP ‏(`/json/version`). يقبل OpenClaw ثلاثة +أشكال لعناوين CDP URL ويختار استراتيجية الاتصال الصحيحة تلقائيًا: -- **نقاط نهاية HTTP(S)** — يستدعي OpenClaw ‎`/json/version` لاكتشاف - عنوان WebSocket الخاص بالمصحح، ثم يتصل به. -- **نقاط نهاية WebSocket** (`ws://` / `wss://`) — يتصل OpenClaw مباشرة، - متجاوزًا ‎`/json/version`. استخدم هذا لخدمات مثل - [Browserless](https://browserless.io)، - [Browserbase](https://www.browserbase.com)، أو أي مزود يزوّدك - بعنوان URL لـ WebSocket. +- **اكتشاف HTTP(S)** — ‏`http://host[:port]` أو `https://host[:port]`. + يستدعي OpenClaw ‏`/json/version` لاكتشاف عنوان WebSocket debugger URL، ثم + يتصل. لا توجد آلية احتياطية عبر WebSocket. +- **نقاط نهاية WebSocket المباشرة** — ‏`ws://host[:port]/devtools//` أو + `wss://...` مع مسار `/devtools/browser|page|worker|shared_worker|service_worker/`. + يتصل OpenClaw مباشرة عبر مصافحة WebSocket ويتجاوز + `/json/version` بالكامل. +- **جذور WebSocket العارية** — ‏`ws://host[:port]` أو `wss://host[:port]` من دون + مسار `/devtools/...` ‏(مثل [Browserless](https://browserless.io)، + و[Browserbase](https://www.browserbase.com)). يحاول OpenClaw أولًا + اكتشاف HTTP ‏`/json/version` + (مع تطبيع scheme إلى `http`/`https`)؛ + وإذا أعاد الاكتشاف قيمة `webSocketDebuggerUrl` فسيتم استخدامها، وإلا فإن OpenClaw + يعود إلى مصافحة WebSocket مباشرة عند الجذر العاري. وهذا يغطي + كلًا من منافذ التصحيح البعيد بأسلوب Chrome والمزوّدين الذين يعملون عبر WebSocket فقط. + +إن توجيه `ws://host:port` / `wss://host:port` العادي من دون مسار `/devtools/...` +إلى نسخة Chrome محلية مدعوم عبر آلية الاحتياط التي تبدأ بالاكتشاف — +إذ لا يقبل Chrome ترقيات WebSocket إلا على المسار المحدد لكل متصفح +أو لكل هدف الذي يُرجعه `/json/version`، لذلك فإن مصافحة الجذر العاري وحدها +ستفشل. ### Browserbase -[Browserbase](https://www.browserbase.com) هي منصة سحابية لتشغيل -المتصفحات بدون واجهة مع دعم مدمج لحل CAPTCHA ووضع التخفي -ووكلاء سكنيين. +[Browserbase](https://www.browserbase.com) منصة سحابية لتشغيل +متصفحات headless مع حل CAPTCHA مدمج ووضع التخفّي ووسائط residential +proxy. ```json5 { @@ -358,63 +372,63 @@ openclaw config set browser.executablePath "/usr/bin/google-chrome" ملاحظات: -- [سجّل](https://www.browserbase.com/sign-up) ثم انسخ **مفتاح API** - الخاص بك من [لوحة Overview](https://www.browserbase.com/overview). +- [سجّل](https://www.browserbase.com/sign-up) وانسخ **مفتاح API** + من [لوحة Overview](https://www.browserbase.com/overview). - استبدل `` بمفتاح Browserbase API الحقيقي الخاص بك. -- ينشئ Browserbase جلسة متصفح تلقائيًا عند الاتصال عبر WebSocket، لذلك - لا حاجة إلى خطوة إنشاء جلسة يدويًا. +- ينشئ Browserbase جلسة متصفح تلقائيًا عند اتصال WebSocket، لذلك لا + توجد حاجة إلى خطوة إنشاء جلسة يدويًا. - تتيح الخطة المجانية جلسة متزامنة واحدة وساعة متصفح واحدة شهريًا. راجع [الأسعار](https://www.browserbase.com/pricing) لمعرفة حدود الخطط المدفوعة. -- راجع [وثائق Browserbase](https://docs.browserbase.com) للاطلاع على - مرجع API الكامل، وأدلة SDK، وأمثلة التكامل. +- راجع [وثائق Browserbase](https://docs.browserbase.com) للحصول على مرجع API + الكامل وأدلة SDK وأمثلة التكامل. ## الأمان الأفكار الأساسية: -- التحكم في المتصفح يقتصر على الحلقة المحلية فقط؛ ويجري الوصول عبر مصادقة Gateway أو اقتران العقدة. -- تستخدم واجهة HTTP المستقلة للمتصفح على الحلقة المحلية **مصادقة secret مشترك فقط**: - مصادقة bearer لرمز gateway، أو `x-openclaw-password`، أو HTTP Basic auth مع +- التحكم بالمتصفح يقتصر على loopback فقط؛ ويتم الوصول عبر مصادقة Gateway أو إقران العقدة. +- تستخدم واجهة HTTP المستقلة للمتصفح عبر loopback **مصادقة shared-secret فقط**: + مصادقة bearer لرمز gateway، أو `x-openclaw-password`، أو مصادقة HTTP Basic باستخدام كلمة مرور gateway المضبوطة. -- ترويسات هوية Tailscale Serve و`gateway.auth.mode: "trusted-proxy"` **لا** - تقوم بمصادقة واجهة المتصفح المستقلة هذه على الحلقة المحلية. -- إذا كان التحكم في المتصفح مفعّلًا ولم يتم إعداد مصادقة secret مشترك، فإن OpenClaw +- لا تقوم رؤوس هوية Tailscale Serve ووضع `gateway.auth.mode: "trusted-proxy"` + **بالمصادقة** على واجهة loopback المستقلة هذه الخاصة بالمتصفح. +- إذا كان التحكم بالمتصفح مفعّلًا ولم يتم ضبط أي مصادقة shared-secret، فإن OpenClaw ينشئ `gateway.auth.token` تلقائيًا عند بدء التشغيل ويحفظه في الإعدادات. -- لا ينشئ OpenClaw هذا الرمز تلقائيًا عندما يكون `gateway.auth.mode` - مضبوطًا بالفعل على `password` أو `none` أو `trusted-proxy`. -- أبقِ Gateway وأي مضيفي عقد على شبكة خاصة (Tailscale)؛ وتجنب تعريضها للعامة. -- تعامل مع عناوين URL/الرموز الخاصة بـ CDP البعيد على أنها أسرار؛ وفضّل متغيرات البيئة أو مدير الأسرار. +- لا يقوم OpenClaw **بإنشاء** هذا الرمز تلقائيًا عندما يكون `gateway.auth.mode` + مضبوطًا مسبقًا على `password` أو `none` أو `trusted-proxy`. +- أبقِ Gateway وأي مضيفات Node على شبكة خاصة (Tailscale)؛ وتجنب كشفها للعامة. +- تعامل مع عناوين URL/الرموز الخاصة بـ CDP البعيد باعتبارها أسرارًا؛ وفضّل متغيرات env أو مدير أسرار. نصائح CDP البعيد: -- فضّل نقاط النهاية المشفرة (HTTPS أو WSS) والرموز قصيرة العمر حيثما أمكن. -- تجنب تضمين الرموز طويلة العمر مباشرةً في ملفات الإعدادات. +- فضّل نقاط النهاية المشفّرة (HTTPS أو WSS) والرموز قصيرة العمر قدر الإمكان. +- تجنّب تضمين الرموز طويلة العمر مباشرة في ملفات الإعدادات. -## ملفات التعريف (متصفحات متعددة) +## الملفات الشخصية (متصفحات متعددة) -يدعم OpenClaw ملفات تعريف متعددة مسماة (إعدادات توجيه). يمكن أن تكون ملفات التعريف: +يدعم OpenClaw عدة ملفات تعريف مسماة (إعدادات توجيه). يمكن أن تكون ملفات التعريف: -- **تحت إدارة openclaw**: مثيل متصفح مستقل مستند إلى Chromium له دليل بيانات مستخدم خاص + منفذ CDP -- **بعيد**: عنوان CDP URL صريح (متصفح مستند إلى Chromium يعمل في مكان آخر) -- **جلسة موجودة**: ملف Chrome الحالي الخاص بك عبر الاتصال التلقائي لـ Chrome DevTools MCP +- **openclaw-managed**: نسخة متصفح مخصصة قائمة على Chromium مع دليل بيانات مستخدم خاص بها + منفذ CDP +- **بعيد**: عنوان CDP URL صريح (متصفح قائم على Chromium يعمل في مكان آخر) +- **جلسة موجودة**: ملف تعريف Chrome الحالي لديك عبر الاتصال التلقائي بـ Chrome DevTools MCP الإعدادات الافتراضية: - يتم إنشاء ملف التعريف `openclaw` تلقائيًا إذا كان مفقودًا. -- ملف التعريف `user` مدمج لإرفاق جلسة موجودة عبر Chrome MCP. -- ملفات تعريف الجلسات الموجودة اختيارية بخلاف `user`؛ أنشئها باستخدام `--driver existing-session`. +- ملف التعريف `user` مدمج لإرفاق جلسة Chrome MCP الحالية. +- تكون ملفات تعريف existing-session اختيارية بالإضافة إلى `user`؛ أنشئها باستخدام `--driver existing-session`. - يتم تخصيص منافذ CDP المحلية من **18800–18899** افتراضيًا. - يؤدي حذف ملف تعريف إلى نقل دليل بياناته المحلي إلى سلة المهملات. -تقبل جميع نقاط نهاية التحكم `?profile=`؛ ويستخدم CLI الخيار `--browser-profile`. +تقبل كل نقاط نهاية التحكم `?profile=`؛ ويستخدم CLI الخيار `--browser-profile`. -## الجلسة الموجودة عبر Chrome DevTools MCP +## existing-session عبر Chrome DevTools MCP -يمكن لـ OpenClaw أيضًا الارتباط بملف تعريف متصفح مستند إلى Chromium قيد التشغيل من خلال -خادم Chrome DevTools MCP الرسمي. يتيح ذلك إعادة استخدام علامات التبويب وحالة تسجيل الدخول -المفتوحة بالفعل في ملف تعريف المتصفح هذا. +يمكن لـ OpenClaw أيضًا الارتباط بملف تعريف متصفح قائم على Chromium يعمل بالفعل عبر +خادم Chrome DevTools MCP الرسمي. ويعيد هذا استخدام علامات التبويب وحالة تسجيل الدخول +المفتوحة بالفعل في ملف تعريف المتصفح ذاك. -مراجع رسمية للخلفية والإعداد: +مراجع الخلفية والإعداد الرسمية: - [Chrome for Developers: Use Chrome DevTools MCP with your browser session](https://developer.chrome.com/blog/chrome-devtools-mcp-debug-your-browser-session) - [Chrome DevTools MCP README](https://github.com/ChromeDevTools/chrome-devtools-mcp) @@ -423,12 +437,12 @@ openclaw config set browser.executablePath "/usr/bin/google-chrome" - `user` -اختياري: أنشئ ملف تعريف existing-session مخصصًا إذا كنت تريد +اختياري: أنشئ ملف تعريف existing-session مخصصًا خاصًا بك إذا أردت اسمًا أو لونًا أو دليل بيانات متصفح مختلفًا. السلوك الافتراضي: -- يستخدم ملف التعريف `user` المدمج الاتصال التلقائي لـ Chrome MCP، والذي يستهدف +- يستخدم ملف التعريف المدمج `user` الاتصال التلقائي بـ Chrome MCP، والذي يستهدف ملف تعريف Google Chrome المحلي الافتراضي. استخدم `userDataDir` مع Brave أو Edge أو Chromium أو ملف تعريف Chrome غير افتراضي: @@ -450,17 +464,17 @@ openclaw config set browser.executablePath "/usr/bin/google-chrome" ثم في المتصفح المطابق: -1. افتح صفحة الفحص الخاصة بذلك المتصفح لتصحيح الأخطاء عن بُعد. -2. فعّل تصحيح الأخطاء عن بُعد. +1. افتح صفحة inspect الخاصة بذلك المتصفح للتصحيح البعيد. +2. فعّل التصحيح البعيد. 3. أبقِ المتصفح قيد التشغيل ووافق على مطالبة الاتصال عندما يرتبط OpenClaw. -صفحات الفحص الشائعة: +صفحات inspect الشائعة: -- Chrome: `chrome://inspect/#remote-debugging` -- Brave: `brave://inspect/#remote-debugging` -- Edge: `edge://inspect/#remote-debugging` +- Chrome: ‏`chrome://inspect/#remote-debugging` +- Brave: ‏`brave://inspect/#remote-debugging` +- Edge: ‏`edge://inspect/#remote-debugging` -اختبار دخاني للارتباط المباشر: +اختبار smoke للإرفاق الحي: ```bash openclaw browser --browser-profile user start @@ -471,68 +485,68 @@ openclaw browser --browser-profile user snapshot --format ai شكل النجاح: -- يُظهر `status` القيمة `driver: existing-session` -- يُظهر `status` القيمة `transport: chrome-mcp` -- يُظهر `status` القيمة `running: true` +- يعرض `status` القيمة `driver: existing-session` +- يعرض `status` القيمة `transport: chrome-mcp` +- يعرض `status` القيمة `running: true` - يعرض `tabs` علامات التبويب المفتوحة بالفعل في متصفحك -- يُرجع `snapshot` مراجع من علامة التبويب المباشرة المحددة +- يعيد `snapshot` مراجع من علامة التبويب الحية المحددة -ما الذي يجب التحقق منه إذا لم ينجح الارتباط: +ما الذي يجب التحقق منه إذا لم ينجح الإرفاق: -- أن يكون إصدار المتصفح المستهدف المستند إلى Chromium هو `144+` -- أن يكون تصحيح الأخطاء عن بُعد مفعّلًا في صفحة الفحص الخاصة بذلك المتصفح -- أن يكون المتصفح قد عرض مطالبة موافقة الارتباط وقمت بقبولها -- يقوم `openclaw doctor` بترحيل إعدادات المتصفح القديمة المستندة إلى الإضافات ويتحقق من - أن Chrome مثبت محليًا لملفات تعريف الاتصال التلقائي الافتراضية، لكنه لا يستطيع - تفعيل تصحيح الأخطاء عن بُعد من جهة المتصفح نيابةً عنك +- أن يكون إصدار المتصفح المستهدف القائم على Chromium هو `144+` +- أن يكون التصحيح البعيد مفعّلًا في صفحة inspect الخاصة بذلك المتصفح +- أن يكون المتصفح قد عرض مطالبة موافقة الإرفاق وأنك قبلتها +- يقوم `openclaw doctor` بترحيل إعدادات المتصفح القديمة المعتمدة على الامتدادات ويتحقق من + أن Chrome مثبت محليًا لملفات التعريف الافتراضية ذات الاتصال التلقائي، لكنه لا يستطيع + تفعيل التصحيح البعيد من جهة المتصفح نيابةً عنك استخدام الوكيل: -- استخدم `profile="user"` عندما تحتاج إلى حالة المتصفح المسجل دخول المستخدم فيه. -- إذا كنت تستخدم ملف تعريف existing-session مخصصًا، فمرر اسم ملف التعريف الصريح هذا. -- اختر هذا الوضع فقط عندما يكون المستخدم أمام الجهاز للموافقة على - مطالبة الارتباط. -- يمكن لـ Gateway أو مضيف العقدة تشغيل `npx chrome-devtools-mcp@latest --autoConnect` +- استخدم `profile="user"` عندما تحتاج إلى حالة متصفح المستخدم المسجّل دخوله. +- إذا استخدمت ملف تعريف existing-session مخصصًا، فمرّر اسم ملف التعريف الصريح هذا. +- اختر هذا الوضع فقط عندما يكون المستخدم موجودًا أمام الكمبيوتر للموافقة على + مطالبة الإرفاق. +- يمكن لـ Gateway أو مضيف Node تشغيل `npx chrome-devtools-mcp@latest --autoConnect` ملاحظات: -- هذا المسار أعلى خطورة من ملف التعريف `openclaw` المعزول لأنه يمكنه - العمل داخل جلسة المتصفح المسجل الدخول إليها الخاصة بك. -- لا يقوم OpenClaw بتشغيل المتصفح لهذا المشغل؛ بل يرتبط - بجلسة موجودة فقط. -- يستخدم OpenClaw تدفق `--autoConnect` الرسمي من Chrome DevTools MCP هنا. إذا - تم تعيين `userDataDir`، فإن OpenClaw يمرره لاستهداف - دليل بيانات مستخدم Chromium الصريح هذا. -- تدعم لقطات الشاشة في existing-session التقاط الصفحة ولقطات العناصر باستخدام `--ref` - من مخرجات اللقطة، لكن ليس محددات CSS `--element`. -- تعمل لقطات شاشة الصفحة في existing-session بدون Playwright عبر Chrome MCP. - كما تعمل لقطات عناصر `--ref` هناك أيضًا، لكن لا يمكن دمج `--full-page` - مع `--ref` أو `--element`. -- لا تزال إجراءات existing-session أكثر محدودية من - مسار المتصفح المُدار: +- يُعد هذا المسار أعلى خطورة من ملف التعريف المعزول `openclaw` لأنه يمكنه + العمل داخل جلسة المتصفح المسجّل دخولك إليها. +- لا يقوم OpenClaw بتشغيل المتصفح لهذا المشغّل؛ بل يرتبط فقط بجلسة + موجودة. +- يستخدم OpenClaw هنا تدفق `--autoConnect` الرسمي لـ Chrome DevTools MCP. إذا + تم ضبط `userDataDir`، فإن OpenClaw يمرّره لاستهداف دليل بيانات مستخدم + Chromium الصريح هذا. +- تدعم لقطات الشاشة في existing-session التقاط الصفحة وعمليات الالتقاط بالعناصر عبر `--ref` + من snapshots، لكنها لا تدعم محددات CSS عبر `--element`. +- تعمل لقطات شاشة الصفحة في existing-session من دون Playwright عبر Chrome MCP. + كما تعمل لقطات شاشة العناصر المعتمدة على المرجع (`--ref`) هناك أيضًا، لكن لا يمكن + الجمع بين `--full-page` و`--ref` أو `--element`. +- لا تزال إجراءات existing-session أكثر محدودية من مسار المتصفح المُدار: - تتطلب `click` و`type` و`hover` و`scrollIntoView` و`drag` و`select` مراجع snapshot بدلًا من محددات CSS - - `click` يقتصر على الزر الأيسر فقط (من دون تجاوزات للأزرار أو المعدّلات) - - `type` لا يدعم `slowly=true`؛ استخدم `fill` أو `press` - - `press` لا يدعم `delayMs` + - تدعم `click` الزر الأيسر فقط (من دون تجاوزات للأزرار أو modifiers) + - لا تدعم `type` الخيار `slowly=true`؛ استخدم `fill` أو `press` + - لا تدعم `press` القيمة `delayMs` - لا تدعم `hover` و`scrollIntoView` و`drag` و`select` و`fill` و`evaluate` تجاوزات المهلة لكل استدعاء - يدعم `select` حاليًا قيمة واحدة فقط -- يدعم `wait --url` في existing-session الأنماط المطابقة التامة والجزئية وglob - مثل بقية مشغلات المتصفح. أمّا `wait --load networkidle` فغير مدعوم بعد. -- تتطلب خطافات الرفع في existing-session `ref` أو `inputRef`، وتدعم ملفًا واحدًا في كل مرة، - ولا تدعم الاستهداف عبر CSS `element`. -- لا تدعم خطافات الحوارات في existing-session تجاوزات المهلة. +- يدعم `wait --url` في existing-session أنماط المطابقة التامة والجزئية وglob + مثل مشغّلات المتصفح الأخرى. ولا يدعم `wait --load networkidle` بعد. +- تتطلب hooks الرفع في existing-session القيمة `ref` أو `inputRef`، وتدعم ملفًا واحدًا + في كل مرة، ولا تدعم الاستهداف عبر CSS باستخدام `element`. +- لا تدعم hooks مربعات الحوار في existing-session تجاوزات المهلة. - لا تزال بعض الميزات تتطلب مسار المتصفح المُدار، بما في ذلك - الإجراءات المجمعة، وتصدير PDF، واعتراض التنزيلات، و`responsebody`. -- إن existing-session محلي على المضيف. إذا كان Chrome موجودًا على جهاز آخر أو - ضمن مساحة اسم شبكة مختلفة، فاستخدم CDP البعيد أو مضيف عقدة بدلًا من ذلك. + الإجراءات الدفعية وتصدير PDF واعتراض التنزيل و`responsebody`. +- يمكن لـ existing-session الارتباط على المضيف المحدد أو من خلال + عقدة متصفح متصلة. إذا كان Chrome موجودًا في مكان آخر ولم تكن هناك عقدة متصفح متصلة، فاستخدم + CDP البعيد أو مضيف Node بدلًا من ذلك. ## ضمانات العزل - **دليل بيانات مستخدم مخصص**: لا يلمس أبدًا ملف تعريف متصفحك الشخصي. -- **منافذ مخصصة**: يتجنب `9222` لمنع التعارض مع سير عمل التطوير. -- **تحكم حتمي بعلامات التبويب**: استهدف علامات التبويب عبر `targetId`، وليس “آخر علامة تبويب”. +- **منافذ مخصصة**: يتجنب `9222` لمنع التعارضات مع تدفقات العمل التطويرية. +- **تحكم حتمي بعلامات التبويب**: يستهدف علامات التبويب عبر `targetId`، وليس “آخر علامة تبويب”. ## اختيار المتصفح @@ -544,49 +558,49 @@ openclaw browser --browser-profile user snapshot --format ai 4. Chromium 5. Chrome Canary -يمكنك التجاوز باستخدام `browser.executablePath`. +يمكنك التجاوز عبر `browser.executablePath`. المنصات: - macOS: يتحقق من `/Applications` و`~/Applications`. -- Linux: يبحث عن `google-chrome` و`brave` و`microsoft-edge` و`chromium` وما إلى ذلك. +- Linux: يبحث عن `google-chrome` و`brave` و`microsoft-edge` و`chromium` وغيرها. - Windows: يتحقق من مواقع التثبيت الشائعة. -## Control API (اختياري) +## واجهة Control API ‏(اختياري) -لأغراض التكامل المحلي فقط، يوفّر Gateway واجهة HTTP صغيرة على الحلقة المحلية: +للتكاملات المحلية فقط، يكشف Gateway واجهة HTTP صغيرة عبر loopback: - الحالة/البدء/الإيقاف: `GET /` و`POST /start` و`POST /stop` - علامات التبويب: `GET /tabs` و`POST /tabs/open` و`POST /tabs/focus` و`DELETE /tabs/:targetId` -- اللقطة/لقطة الشاشة: `GET /snapshot` و`POST /screenshot` +- snapshot/لقطة الشاشة: `GET /snapshot` و`POST /screenshot` - الإجراءات: `POST /navigate` و`POST /act` -- الخطافات: `POST /hooks/file-chooser` و`POST /hooks/dialog` +- Hooks: ‏`POST /hooks/file-chooser` و`POST /hooks/dialog` - التنزيلات: `POST /download` و`POST /wait/download` -- تصحيح الأخطاء: `GET /console` و`POST /pdf` -- تصحيح الأخطاء: `GET /errors` و`GET /requests` و`POST /trace/start` و`POST /trace/stop` و`POST /highlight` +- التصحيح: `GET /console` و`POST /pdf` +- التصحيح: `GET /errors` و`GET /requests` و`POST /trace/start` و`POST /trace/stop` و`POST /highlight` - الشبكة: `POST /response/body` - الحالة: `GET /cookies` و`POST /cookies/set` و`POST /cookies/clear` - الحالة: `GET /storage/:kind` و`POST /storage/:kind/set` و`POST /storage/:kind/clear` - الإعدادات: `POST /set/offline` و`POST /set/headers` و`POST /set/credentials` و`POST /set/geolocation` و`POST /set/media` و`POST /set/timezone` و`POST /set/locale` و`POST /set/device` -تقبل جميع نقاط النهاية `?profile=`. +تقبل كل نقاط النهاية `?profile=`. -إذا كانت مصادقة gateway ذات secret المشترك مهيأة، فإن مسارات HTTP الخاصة بالمتصفح تتطلب المصادقة أيضًا: +إذا تم ضبط مصادقة gateway بنمط shared-secret، فإن مسارات HTTP الخاصة بالمتصفح تتطلب المصادقة أيضًا: - `Authorization: Bearer ` -- `x-openclaw-password: ` أو HTTP Basic auth باستخدام كلمة المرور هذه +- `x-openclaw-password: ` أو مصادقة HTTP Basic باستخدام كلمة المرور تلك ملاحظات: -- واجهة المتصفح المستقلة هذه على الحلقة المحلية **لا** تستخدم trusted-proxy أو - ترويسات هوية Tailscale Serve. -- إذا كانت قيمة `gateway.auth.mode` هي `none` أو `trusted-proxy`، فإن مسارات المتصفح - هذه على الحلقة المحلية لا ترث أوضاع الهوية تلك؛ أبقِها مقتصرة على الحلقة المحلية فقط. +- لا تستهلك واجهة loopback المستقلة هذه الخاصة بالمتصفح رؤوس + trusted-proxy أو هوية Tailscale Serve. +- إذا كان `gateway.auth.mode` هو `none` أو `trusted-proxy`، فإن مسارات متصفح loopback + هذه لا ترث أوضاع الهوية تلك؛ لذا أبقها مقتصرة على loopback فقط. -### عقد أخطاء `/act` +### عقد الخطأ لـ `/act` -يستخدم `POST /act` استجابة خطأ مهيكلة لأخطاء التحقق على مستوى المسار -وأعطال السياسة: +يستخدم `POST /act` استجابة خطأ مهيكلة لفشل التحقق والسياسات +على مستوى المسار: ```json { "error": "", "code": "ACT_*" } @@ -594,27 +608,27 @@ openclaw browser --browser-profile user snapshot --format ai قيم `code` الحالية: -- `ACT_KIND_REQUIRED` (HTTP 400): القيمة `kind` مفقودة أو غير معروفة. -- `ACT_INVALID_REQUEST` (HTTP 400): فشل تطبيع حمولة الإجراء أو التحقق منها. -- `ACT_SELECTOR_UNSUPPORTED` (HTTP 400): تم استخدام `selector` مع نوع إجراء غير مدعوم. -- `ACT_EVALUATE_DISABLED` (HTTP 403): تم تعطيل `evaluate` (أو `wait --fn`) عبر الإعدادات. -- `ACT_TARGET_ID_MISMATCH` (HTTP 403): يوجد تعارض بين `targetId` الأعلى مستوى أو المجمّع وهدف الطلب. -- `ACT_EXISTING_SESSION_UNSUPPORTED` (HTTP 501): الإجراء غير مدعوم لملفات تعريف existing-session. +- `ACT_KIND_REQUIRED` ‏(HTTP 400): القيمة `kind` مفقودة أو غير معروفة. +- `ACT_INVALID_REQUEST` ‏(HTTP 400): فشلت تهيئة أو التحقق من حمولة الإجراء. +- `ACT_SELECTOR_UNSUPPORTED` ‏(HTTP 400): تم استخدام `selector` مع نوع إجراء غير مدعوم. +- `ACT_EVALUATE_DISABLED` ‏(HTTP 403): تم تعطيل `evaluate` ‏(أو `wait --fn`) عبر الإعدادات. +- `ACT_TARGET_ID_MISMATCH` ‏(HTTP 403): يتعارض `targetId` على المستوى الأعلى أو ضمن الدُفعات مع هدف الطلب. +- `ACT_EXISTING_SESSION_UNSUPPORTED` ‏(HTTP 501): الإجراء غير مدعوم لملفات تعريف existing-session. -قد تُرجع أعطال وقت التشغيل الأخرى أيضًا `{ "error": "" }` من دون +قد تُرجع إخفاقات وقت التشغيل الأخرى أيضًا `{ "error": "" }` من دون حقل `code`. ### متطلب Playwright -تتطلب بعض الميزات (navigate/act/AI snapshot/role snapshot ولقطات العناصر، +تتطلب بعض الميزات (navigate/act/AI snapshot/role snapshot ولقطات شاشة العناصر وPDF) وجود Playwright. إذا لم يكن Playwright مثبتًا، فستُرجع نقاط النهاية تلك خطأ 501 واضحًا. -ما الذي لا يزال يعمل بدون Playwright: +ما الذي يظل يعمل من دون Playwright: -- لقطات ARIA +- لقطات ARIA snapshots - لقطات شاشة الصفحة لمتصفح `openclaw` المُدار عندما يكون WebSocket - CDP لكل علامة تبويب متاحًا + لـ CDP لكل علامة تبويب متاحًا - لقطات شاشة الصفحة لملفات تعريف `existing-session` / Chrome MCP - لقطات الشاشة المعتمدة على `--ref` في `existing-session` من مخرجات snapshot @@ -623,28 +637,28 @@ openclaw browser --browser-profile user snapshot --format ai - `navigate` - `act` - AI snapshots / role snapshots -- لقطات عناصر محددات CSS (`--element`) +- لقطات شاشة العناصر بمحددات CSS ‏(`--element`) - تصدير PDF الكامل للمتصفح -ترفض لقطات العناصر أيضًا `--full-page`؛ إذ يعيد المسار الرسالة `fullPage is -not supported for element screenshots`. +كما ترفض لقطات شاشة العناصر أيضًا الخيار `--full-page`؛ إذ تُرجع المسارات الرسالة +`fullPage is not supported for element screenshots`. -إذا ظهرت لك الرسالة `Playwright is not available in this gateway build`، فقم بتثبيت -حزمة Playwright الكاملة (وليس `playwright-core`) ثم أعد تشغيل gateway، أو أعد تثبيت +إذا رأيت الرسالة `Playwright is not available in this gateway build`، فقم بتثبيت +حزمة Playwright الكاملة (وليس `playwright-core`) وأعد تشغيل gateway، أو أعد تثبيت OpenClaw مع دعم المتصفح. #### تثبيت Playwright في Docker -إذا كان Gateway يعمل في Docker، فتجنب `npx playwright` (تعارضات تجاوز npm). -استخدم CLI المدمج بدلًا من ذلك: +إذا كان Gateway يعمل داخل Docker، فتجنب `npx playwright` ‏(تعارضات npm override). +استخدم CLI المضمّن بدلًا من ذلك: ```bash docker compose run --rm openclaw-cli \ node /app/node_modules/playwright-core/cli.js install chromium ``` -للاحتفاظ بتنزيلات المتصفح، عيّن `PLAYWRIGHT_BROWSERS_PATH` (على سبيل المثال، -`/home/node/.cache/ms-playwright`) وتأكد من حفظ `/home/node` عبر +للاحتفاظ بتنزيلات المتصفح، اضبط `PLAYWRIGHT_BROWSERS_PATH` ‏(على سبيل المثال، +`/home/node/.cache/ms-playwright`) وتأكد من أن `/home/node` يُحتفظ به عبر `OPENCLAW_HOME_VOLUME` أو bind mount. راجع [Docker](/ar/install/docker). ## كيف يعمل (داخليًا) @@ -652,18 +666,18 @@ docker compose run --rm openclaw-cli \ التدفق عالي المستوى: - يقبل **خادم تحكم** صغير طلبات HTTP. -- ويتصل بالمتصفحات المستندة إلى Chromium (Chrome/Brave/Edge/Chromium) عبر **CDP**. -- وللإجراءات المتقدمة (النقر/الكتابة/اللقطة/PDF)، يستخدم **Playwright** فوق +- ويتصل بالمتصفحات القائمة على Chromium ‏(Chrome/Brave/Edge/Chromium) عبر **CDP**. +- وبالنسبة إلى الإجراءات المتقدمة (click/type/snapshot/PDF)، فإنه يستخدم **Playwright** فوق CDP. -- وعندما لا يكون Playwright موجودًا، لا تتوفر سوى العمليات التي لا تعتمد على Playwright. +- وعندما يكون Playwright غير متاح، لا تتوفر إلا العمليات التي لا تعتمد على Playwright. -يبقي هذا التصميم الوكيل على واجهة مستقرة وحتمية مع السماح -لك بتبديل المتصفحات وملفات التعريف المحلية/البعيدة. +يحافظ هذا التصميم على الوكيل على واجهة مستقرة وحتمية مع السماح +لك بالتبديل بين المتصفحات المحلية/البعيدة وملفات التعريف. ## مرجع CLI السريع -تقبل جميع الأوامر `--browser-profile ` لاستهداف ملف تعريف محدد. -وتقبل جميع الأوامر أيضًا `--json` للحصول على مخرجات قابلة للقراءة آليًا (حِمولات مستقرة). +تقبل كل الأوامر `--browser-profile ` لاستهداف ملف تعريف محدد. +وتقبل كل الأوامر أيضًا `--json` للحصول على مخرجات قابلة للقراءة آليًا (حِمولات مستقرة). الأساسيات: @@ -694,9 +708,9 @@ docker compose run --rm openclaw-cli \ - `openclaw browser snapshot --frame "iframe#main" --interactive` - `openclaw browser console --level error` -ملاحظة دورة الحياة: +ملاحظة حول دورة الحياة: -- بالنسبة إلى ملفات تعريف attach-only وCDP البعيدة، يظل `openclaw browser stop` هو +- بالنسبة إلى ملفات تعريف attach-only وCDP البعيد، يظل `openclaw browser stop` هو أمر التنظيف الصحيح بعد الاختبارات. فهو يغلق جلسة التحكم النشطة ويمسح تجاوزات المحاكاة المؤقتة بدلًا من إنهاء المتصفح الأساسي. @@ -750,60 +764,60 @@ docker compose run --rm openclaw-cli \ ملاحظات: -- `upload` و`dialog` هما استدعاءان من نوع **arming**؛ شغّلهما قبل النقر/الضغط - الذي يفعّل أداة الاختيار/الحوار. -- تكون مسارات مخرجات التنزيل والتتبع مقيّدة بجذور مؤقتة خاصة بـ OpenClaw: - - التتبعات: `/tmp/openclaw` (الاحتياطي: `${os.tmpdir()}/openclaw`) - - التنزيلات: `/tmp/openclaw/downloads` (الاحتياطي: `${os.tmpdir()}/openclaw/downloads`) -- تكون مسارات الرفع مقيّدة بجذر رفع مؤقت خاص بـ OpenClaw: - - الرفوعات: `/tmp/openclaw/uploads` (الاحتياطي: `${os.tmpdir()}/openclaw/uploads`) -- يمكن لـ `upload` أيضًا تعيين مدخلات الملفات مباشرة عبر `--input-ref` أو `--element`. +- إن `upload` و`dialog` استدعاءات **تسليح**؛ شغّلهما قبل عملية النقر/الضغط + التي تؤدي إلى تشغيل أداة اختيار الملفات/مربع الحوار. +- تكون مسارات خرج التنزيل وtrace مقيّدة بجذور OpenClaw المؤقتة: + - traces: ‏`/tmp/openclaw` ‏(الاحتياطي: `${os.tmpdir()}/openclaw`) + - downloads: ‏`/tmp/openclaw/downloads` ‏(الاحتياطي: `${os.tmpdir()}/openclaw/downloads`) +- تكون مسارات الرفع مقيّدة بجذر رفع مؤقت لـ OpenClaw: + - uploads: ‏`/tmp/openclaw/uploads` ‏(الاحتياطي: `${os.tmpdir()}/openclaw/uploads`) +- يمكن لـ `upload` أيضًا ضبط مدخلات الملفات مباشرة عبر `--input-ref` أو `--element`. - `snapshot`: - - `--format ai` (الافتراضي عند تثبيت Playwright): يعيد لقطة AI بمراجع رقمية (`aria-ref=""`). - - `--format aria`: يعيد شجرة إمكانية الوصول (من دون مراجع؛ للفحص فقط). - - `--efficient` (أو `--mode efficient`): إعداد مسبق مضغوط لـ role snapshot (تفاعلي + مضغوط + عمق + قيمة maxChars أقل). - - الافتراضي في الإعدادات (للأداة/CLI فقط): عيّن `browser.snapshotDefaults.mode: "efficient"` لاستخدام اللقطات الفعالة عندما لا يمرر المستدعي وضعًا (راجع [إعدادات Gateway](/ar/gateway/configuration-reference#browser)). - - خيارات role snapshot (`--interactive` و`--compact` و`--depth` و`--selector`) تفرض لقطة قائمة على الدور مع مراجع مثل `ref=e12`. - - يقيّد `--frame "