chore(i18n): refresh ar translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-05-04 18:26:37 +00:00
parent 65c9aa7b6e
commit 2d2cb8ef74
11 changed files with 1240 additions and 1233 deletions

View File

@ -1,47 +1,47 @@
---
read_when:
- إعداد Zalo Personal لـ OpenClaw
- استكشاف أخطاء تسجيل الدخول إلى Zalo Personal أو تدفق الرسائل وإصلاحها
summary: دعم الحساب الشخصي في Zalo عبر zca-js الأصلية (تسجيل الدخول باستخدام QR)، والقدرات، والتكوين
- تصحيح أخطاء تسجيل الدخول أو تدفق الرسائل في Zalo Personal
summary: دعم حساب Zalo الشخصي عبر zca-js الأصلي (تسجيل الدخول برمز QR)، والإمكانات، والتكوين
title: Zalo الشخصي
x-i18n:
generated_at: "2026-05-02T22:17:25Z"
generated_at: "2026-05-04T18:23:41Z"
model: gpt-5.5
provider: openai
source_hash: 0096775e0017e504130f2e19e05ab8114eadb873a9e11f79ea8f0dd91297567f
source_hash: 0f6d27f0ca502e6426abe21d609efd0a168a0b6b0fafe8d52d59f1a717da1ed5
source_path: channels/zalouser.md
workflow: 16
---
الحالة: تجريبية. يتيح هذا التكامل أتمتة **حساب Zalo شخصي** عبر `zca-js` الأصلي داخل OpenClaw.
Status: تجريبي. يقوم هذا التكامل بأتمتة **حساب Zalo شخصي** عبر `zca-js` الأصلي داخل OpenClaw.
<Warning>
هذا تكامل غير رسمي وقد يؤدي إلى تعليق الحساب أو حظره. استخدمه على مسؤوليتك الخاصة.
</Warning>
## Plugin مضمّن
## Plugin المضمّن
يتوفر Zalo Personal بوصفه Plugin مضمّنًا في إصدارات OpenClaw الحالية، لذلك لا تحتاج البُنى
المعبأة العادية إلى تثبيت منفصل.
يتوفر Zalo Personal بوصفه Plugin مضمّنًا في إصدارات OpenClaw الحالية، لذلك لا تحتاج
البُنى المعبأة العادية إلى تثبيت منفصل.
إذا كنت تستخدم بنية أقدم أو تثبيتًا مخصصًا يستثني Zalo Personal،
إذا كنت تستخدم بنية أقدم أو تثبيتًا مخصصًا يستبعد Zalo Personal،
فثبّت حزمة npm مباشرة:
- التثبيت عبر CLI: `openclaw plugins install @openclaw/zalouser`
- إصدار مثبت: `openclaw plugins install @openclaw/zalouser@2026.5.2`
- إصدار مثبّت: `openclaw plugins install @openclaw/zalouser@2026.5.2`
- أو من نسخة مصدر محلية: `openclaw plugins install ./path/to/local/zalouser-plugin`
- التفاصيل: [Plugins](/ar/tools/plugin)
لا يلزم وجود ملف CLI ثنائي خارجي لـ `zca`/`openzca`.
## الإعداد السريع (للمبتدئين)
## إعداد سريع (للمبتدئين)
1. تأكد من توفر Plugin Zalo Personal.
- إصدارات OpenClaw المعبأة الحالية تضمنه بالفعل.
1. تأكد من توفر Plugin الخاص بـ Zalo Personal.
- تتضمن إصدارات OpenClaw المعبأة الحالية هذا المكوّن مسبقًا.
- يمكن للتثبيتات الأقدم/المخصصة إضافته يدويًا باستخدام الأوامر أعلاه.
2. سجّل الدخول (QR، على جهاز Gateway):
- `openclaw channels login --channel zalouser`
- امسح رمز QR باستخدام تطبيق Zalo للجوّال.
- امسح رمز QR باستخدام تطبيق Zalo للهواتف المحمولة.
3. فعّل القناة:
```json5
@ -55,19 +55,19 @@ x-i18n:
}
```
4. أعد تشغيل Gateway (أو أكمل الإعداد).
5. يكون الوصول عبر الرسائل المباشرة مضبوطًا افتراضيًا على الاقتران؛ وافق على رمز الاقتران عند أول تواصل.
4. أعد تشغيل Gateway (أو أنهِ الإعداد).
5. يكون الوصول عبر الرسائل المباشرة افتراضيًا بنمط الاقتران؛ وافق على رمز الاقتران عند أول تواصل.
## ما هو
- يعمل بالكامل داخل العملية عبر `zca-js`.
- يستخدم مستمعي أحداث أصليين لتلقي الرسائل الواردة.
- يستخدم مستمعي أحداث أصليين لاستقبال الرسائل الواردة.
- يرسل الردود مباشرة عبر JS API (نص/وسائط/رابط).
- مصمم لحالات استخدام “الحساب الشخصي” عندما لا تكون Zalo Bot API متاحة.
- مصمم لحالات استخدام "الحساب الشخصي" عندما لا تكون Zalo Bot API متاحة.
## التسمية
معرّف القناة هو `zalouser` لتوضيح أن هذا يؤتمت **حساب مستخدم Zalo شخصيًا** (غير رسمي). نُبقي `zalo` محجوزًا لتكامل رسمي محتمل مع Zalo API في المستقبل.
معرّف القناة هو `zalouser` لتوضيح أن هذا يؤتمت **حساب مستخدم Zalo شخصيًا** (غير رسمي). نحتفظ بـ `zalo` لتكامل رسمي محتمل مستقبلًا مع Zalo API.
## العثور على المعرّفات (الدليل)
@ -79,36 +79,38 @@ openclaw directory peers list --channel zalouser --query "name"
openclaw directory groups list --channel zalouser --query "work"
```
## الحدود
## القيود
- يُقسّم النص الصادر إلى أجزاء بحجم يقارب 2000 حرف (حدود عميل Zalo).
- يتم تقسيم النص الصادر إلى أجزاء بحجم يقارب 2000 حرف (قيود عميل Zalo).
- يكون البث محظورًا افتراضيًا.
## التحكم في الوصول (الرسائل المباشرة)
يدعم `channels.zalouser.dmPolicy`: `pairing | allowlist | open | disabled` (الافتراضي: `pairing`).
يقبل `channels.zalouser.allowFrom` معرّفات المستخدمين أو الأسماء. أثناء الإعداد، تُحل الأسماء إلى معرّفات باستخدام بحث جهات الاتصال داخل عملية Plugin.
يجب أن يستخدم `channels.zalouser.allowFrom` معرّفات مستخدمي Zalo ثابتة. أثناء الإعداد التفاعلي، يمكن تحويل الأسماء المُدخلة إلى معرّفات باستخدام بحث جهات الاتصال داخل العملية الخاص بـ Plugin.
اعتمد عبر:
إذا بقي اسم خام في الإعدادات، فسيتم تحويله عند بدء التشغيل فقط عند تفعيل `channels.zalouser.dangerouslyAllowNameMatching: true`. بدون هذا الاشتراك الصريح، تكون فحوصات المرسل وقت التشغيل معتمدة على المعرّفات فقط ويتم تجاهل الأسماء الخام للتفويض.
وافق عبر:
- `openclaw pairing list zalouser`
- `openclaw pairing approve zalouser <code>`
## وصول المجموعات (اختياري)
## الوصول إلى المجموعات (اختياري)
- الافتراضي: `channels.zalouser.groupPolicy = "open"` (المجموعات مسموحة). استخدم `channels.defaults.groupPolicy` لتجاوز القيمة الافتراضية عندما تكون غير مضبوطة.
- الافتراضي: `channels.zalouser.groupPolicy = "open"` (المجموعات مسموحة). استخدم `channels.defaults.groupPolicy` لتجاوز الافتراضي عندما يكون غير مضبوط.
- قيّد الوصول إلى قائمة سماح باستخدام:
- `channels.zalouser.groupPolicy = "allowlist"`
- `channels.zalouser.groups`نبغي أن تكون المفاتيح معرّفات مجموعات مستقرة؛ تُحل الأسماء إلى معرّفات عند بدء التشغيل عندما يكون ذلك ممكنًا)
- `channels.zalouser.groupAllowFrom` (يتحكم في أي مرسلين داخل المجموعات المسموح بها يمكنهم تشغيل البوت)
- احظر كل المجموعات: `channels.zalouser.groupPolicy = "disabled"`.
- يمكن لمعالج التكوين طلب قوائم سماح للمجموعات.
- عند بدء التشغيل، يحل OpenClaw أسماء المجموعات/المستخدمين في قوائم السماح إلى معرّفات ويسجل الربط.
- تكون مطابقة قائمة سماح المجموعات معتمدة على المعرّف فقط افتراضيًا. تُتجاهل الأسماء غير المحلولة للمصادقة ما لم يتم تفعيل `channels.zalouser.dangerouslyAllowNameMatching: true`.
- `channels.zalouser.dangerouslyAllowNameMatching: true` هو وضع توافق لكسر الحاجز يعيد تفعيل المطابقة القابلة للتغيير بأسماء المجموعات.
- إذا لم يكن `groupAllowFrom` مضبوطًا، يعود وقت التشغيل إلى `allowFrom` لفحوص مرسل المجموعة.
- تنطبق فحوص المرسل على رسائل المجموعة العادية وأوامر التحكم معًا (مثل `/new` و`/reset`).
- `channels.zalouser.groups`جب أن تكون المفاتيح معرّفات مجموعات ثابتة؛ يتم تحويل الأسماء إلى معرّفات عند بدء التشغيل فقط عند تفعيل `channels.zalouser.dangerouslyAllowNameMatching: true`)
- `channels.zalouser.groupAllowFrom` (يتحكم في المرسلين داخل المجموعات المسموح بها الذين يمكنهم تشغيل الروبوت)
- حظر كل المجموعات: `channels.zalouser.groupPolicy = "disabled"`.
- يمكن لمعالج الإعداد أن يطلب قوائم سماح للمجموعات.
- عند بدء التشغيل، يحوّل OpenClaw أسماء المجموعات/المستخدمين في قوائم السماح إلى معرّفات ويسجل الربط فقط عند تفعيل `channels.zalouser.dangerouslyAllowNameMatching: true`.
- تكون مطابقة قائمة سماح المجموعات معتمدة على المعرّفات فقط افتراضيًا. يتم تجاهل الأسماء غير المحلولة للمصادقة ما لم يتم تفعيل `channels.zalouser.dangerouslyAllowNameMatching: true`.
- `channels.zalouser.dangerouslyAllowNameMatching: true` هو وضع توافق للحالات الطارئة يعيد تفعيل حل الأسماء القابلة للتغيير عند بدء التشغيل ومطابقة أسماء المجموعات وقت التشغيل.
- إذا لم يتم ضبط `groupAllowFrom`، يعود وقت التشغيل إلى `allowFrom` لفحوصات مرسل المجموعة.
- تنطبق فحوصات المرسل على رسائل المجموعة العادية وأوامر التحكم على حد سواء (مثل `/new` و`/reset`).
مثال:
@ -130,11 +132,11 @@ openclaw directory groups list --channel zalouser --query "work"
### بوابة الإشارة في المجموعات
- يتحكم `channels.zalouser.groups.<group>.requireMention` فيما إذا كانت ردود المجموعة تتطلب إشارة.
- ترتيب الحل: معرّف/اسم المجموعة المطابق تمامًا -> اسم المجموعة المختصر المُطبّع -> `*` -> الافتراضي (`true`).
- ينطبق هذا على المجموعات المدرجة في قائمة السماح ووضع المجموعات المفتوح معًا.
- يُعد اقتباس رسالة بوت إشارة ضمنية لتفعيل المجموعة.
- ترتيب الحل: معرّف/اسم المجموعة المطابق تمامًا -> slug المجموعة المطبّع -> `*` -> الافتراضي (`true`).
- ينطبق هذا على المجموعات الموجودة في قائمة السماح ووضع المجموعات المفتوح.
- يُعد اقتباس رسالة الروبوت إشارة ضمنية لتفعيل المجموعة.
- يمكن لأوامر التحكم المصرح بها (مثل `/new`) تجاوز بوابة الإشارة.
- عندما تُتخطى رسالة مجموعة لأن الإشارة مطلوبة، يخزنها OpenClaw كسجل مجموعة معلّق ويضمّنها في رسالة المجموعة التالية التي تتم معالجتها.
- عندما يتم تخطي رسالة مجموعة لأن الإشارة مطلوبة، يخزنها OpenClaw كسجل مجموعة معلّق ويضمّنها في رسالة المجموعة التالية التي تتم معالجتها.
- يكون حد سجل المجموعة افتراضيًا `messages.groupChat.historyLimit` (الاحتياطي `50`). يمكنك تجاوزه لكل حساب باستخدام `channels.zalouser.historyLimit`.
مثال:
@ -155,7 +157,7 @@ openclaw directory groups list --channel zalouser --query "work"
## تعدد الحسابات
تُربط الحسابات بملفات تعريف `zalouser` في حالة OpenClaw. مثال:
ترتبط الحسابات بملفات تعريف `zalouser` في حالة OpenClaw. مثال:
```json5
{
@ -174,31 +176,31 @@ openclaw directory groups list --channel zalouser --query "work"
## الكتابة، والتفاعلات، وإقرارات التسليم
- يرسل OpenClaw حدث كتابة قبل إرسال الرد (وفق أفضل جهد).
- إجراء تفاعل الرسالة `react` مدعوم لـ `zalouser` في إجراءات القناة.
- استخدم `remove: true` لإزالة رمز تعبيري محدد لتفاعل من رسالة.
- إجراء تفاعل الرسائل `react` مدعوم لـ `zalouser` في إجراءات القناة.
- استخدم `remove: true` لإزالة رمز تعبيري محدد للتفاعل من رسالة.
- دلالات التفاعل: [التفاعلات](/ar/tools/reactions)
- بالنسبة للرسائل الواردة التي تتضمن بيانات تعريف للأحداث، يرسل OpenClaw إقرارات تم التسليم + تمت المشاهدة (وفق أفضل جهد).
- بالنسبة للرسائل الواردة التي تتضمن بيانات وصفية للأحداث، يرسل OpenClaw إقرارات تم التسليم + تمت المشاهدة (وفق أفضل جهد).
## استكشاف الأخطاء وإصلاحها
**تسجيل الدخول لا يثبت:**
**تسجيل الدخول لا يستمر:**
- `openclaw channels status --probe`
- أعد تسجيل الدخول: `openclaw channels logout --channel zalouser && openclaw channels login --channel zalouser`
- إعادة تسجيل الدخول: `openclaw channels logout --channel zalouser && openclaw channels login --channel zalouser`
**لم يُحل اسم قائمة السماح/المجموعة:**
**لم يتم حل اسم قائمة السماح/المجموعة:**
- استخدم المعرّفات الرقمية في `allowFrom`/`groupAllowFrom`/`groups`، أو أسماء الأصدقاء/المجموعات المطابقة تمامًا.
- استخدم المعرّفات الرقمية في `allowFrom`/`groupAllowFrom` ومعرّفات المجموعات الثابتة في `groups`. إذا كنت تحتاج عمدًا إلى أسماء الأصدقاء/المجموعات المطابقة تمامًا، ففعّل `channels.zalouser.dangerouslyAllowNameMatching: true`.
**تمت الترقية من إعداد قديم قائم على CLI:**
**تمت الترقية من إعداد قديم يعتمد على CLI:**
- أزِل أي افتراضات قديمة حول عملية `zca` خارجية.
- أزل أي افتراضات قديمة حول عملية `zca` خارجية.
- تعمل القناة الآن بالكامل داخل OpenClaw دون ملفات CLI ثنائية خارجية.
## ذات صلة
## ذو صلة
- [نظرة عامة على القنوات](/ar/channels) — كل القنوات المدعومة
- [الاقتران](/ar/channels/pairing) — مصادقة الرسائل المباشرة وتدفق الاقتران
- [المجموعات](/ar/channels/groups) — سلوك دردشة المجموعات وبوابة الإشارة
- [توجيه القنوات](/ar/channels/channel-routing) — توجيه الجلسات للرسائل
- [الأمان](/ar/gateway/security) — نموذج الوصول والتحصين
- [الأمان](/ar/gateway/security) — نموذج الوصول والتقوية

View File

@ -5,10 +5,10 @@ read_when:
summary: مرجع CLI لـ `openclaw daemon` (اسم مستعار قديم لإدارة خدمة Gateway)
title: البرنامج الخفي
x-i18n:
generated_at: "2026-05-02T22:17:38Z"
generated_at: "2026-05-04T18:23:44Z"
model: gpt-5.5
provider: openai
source_hash: 3f11b75bf2781e69f6f59b23364f06cf359f9f24407f25f19b9d2186f7158512
source_hash: f84e11fc50bdf38da518a8fcf415ae461a2688c2299f996eee384357c0d04a05
source_path: cli/daemon.md
workflow: 16
---
@ -17,7 +17,7 @@ x-i18n:
اسم مستعار قديم لأوامر إدارة خدمة Gateway.
يُطابق `openclaw daemon ...` واجهة التحكم في الخدمة نفسها مثل أوامر خدمة `openclaw gateway ...`.
يُطابِق `openclaw daemon ...` واجهة التحكم بالخدمة نفسها التي تستخدمها أوامر خدمة `openclaw gateway ...`.
## الاستخدام
@ -43,29 +43,30 @@ openclaw daemon uninstall
- `status`: `--url`, `--token`, `--password`, `--timeout`, `--no-probe`, `--require-rpc`, `--deep`, `--json`
- `install`: `--port`, `--runtime <node|bun>`, `--token`, `--force`, `--json`
- `restart`: `--force`, `--wait <duration>`, `--json`
- `restart`: `--safe`, `--force`, `--wait <duration>`, `--json`
- دورة الحياة (`uninstall|start|stop`): `--json`
ملاحظات:
- يحلّ `status` مراجع SecretRef للمصادقة المكوّنة من أجل مصادقة الفحص عندما يكون ذلك ممكنًا.
- إذا تعذّر حلّ SecretRef مطلوب للمصادقة في مسار هذا الأمر، فإن `daemon status --json` يبلّغ عن `rpc.authWarning` عند فشل اتصال الفحص أو المصادقة؛ مرّر `--token`/`--password` صراحةً أو حلّ مصدر السر أولًا.
- إذا نجح الفحص، تُكبت تحذيرات مراجع المصادقة غير المحلولة لتجنّب النتائج الإيجابية الكاذبة.
- يضيف `status --deep` فحصًا على مستوى النظام للخدمة بأفضل جهد. عندما يجد خدمات أخرى شبيهة بـ Gateway، تطبع المخرجات البشرية تلميحات للتنظيف وتحذّر من أن التوصية المعتادة لا تزال تشغيل Gateway واحد لكل جهاز.
- في تثبيتات Linux systemd، تشمل فحوصات انحراف الرمز المميز في `status` مصدري الوحدة `Environment=` و`EnvironmentFile=`.
- تحلّ فحوصات الانحراف مراجع SecretRef الخاصة بـ `gateway.auth.token` باستخدام بيئة التشغيل المدمجة، بيئة أمر الخدمة أولًا ثم بيئة العملية كخيار احتياطي.
- إذا لم تكن مصادقة الرمز المميز نشطة فعليًا، سواء بسبب `gateway.auth.mode` صريح بقيمة `password`/`none`/`trusted-proxy`، أو بسبب عدم ضبط الوضع عندما يمكن أن تكون كلمة المرور هي الفائزة ولا يمكن لأي مرشح رمز مميز أن يفوز، تتخطى فحوصات انحراف الرمز المميز حلّ رمز الإعدادات.
- يحلّ `status` مراجع SecretRefs للمصادقة المهيأة من أجل مصادقة الفحص عندما يكون ذلك ممكنًا.
- إذا تعذّر حلّ مرجع SecretRef مطلوب للمصادقة في مسار هذا الأمر، فإن `daemon status --json` يُبلغ عن `rpc.authWarning` عند فشل اتصال الفحص أو مصادقته؛ مرّر `--token`/`--password` صراحةً أو حلّ مصدر السر أولًا.
- إذا نجح الفحص، تُخفى تحذيرات مراجع المصادقة غير المحلولة لتجنب النتائج الإيجابية الكاذبة.
- يضيف `status --deep` فحصًا بأفضل جهد على مستوى النظام للخدمات. عندما يجد خدمات أخرى شبيهة بالبوابة، يطبع الإخراج الموجّه للبشر تلميحات تنظيف ويحذّر بأن وجود بوابة واحدة لكل جهاز لا يزال التوصية العادية.
- في تثبيتات Linux systemd، تشمل فحوصات انحراف الرمز المميز كلاً من مصدري الوحدة `Environment=` و`EnvironmentFile=`.
- تحلّ فحوصات الانحراف مراجع SecretRefs الخاصة بـ `gateway.auth.token` باستخدام بيئة تشغيل مدمجة (بيئة أمر الخدمة أولًا، ثم بيئة العملية كخيار احتياطي).
- إذا لم تكن مصادقة الرمز المميز نشطة فعليًا (`gateway.auth.mode` صريح بقيمة `password`/`none`/`trusted-proxy`، أو الوضع غير مضبوط حيث يمكن أن تفوز كلمة المرور ولا يمكن لأي مرشح رمز مميز أن يفوز)، تتجاوز فحوصات انحراف الرمز المميز حلّ رمز التهيئة.
- عندما تتطلب مصادقة الرمز المميز رمزًا ويكون `gateway.auth.token` مُدارًا عبر SecretRef، يتحقق `install` من أن SecretRef قابل للحل لكنه لا يحفظ الرمز المحلول في بيانات تعريف بيئة الخدمة.
- إذا كانت مصادقة الرمز المميز تتطلب رمزًا وكان SecretRef المكوّن للرمز غير محلول، يفشل التثبيت بإغلاق آمن.
- إذا كان كل من `gateway.auth.token` و`gateway.auth.password` مكوّنين وكان `gateway.auth.mode` غير مضبوط، يُحظر التثبيت حتى يُضبط الوضع صراحةً.
- على macOS، يحافظ `install` على ملفات LaunchAgent plists مملوكة للمالك فقط، ويحمّل قيم بيئة الخدمة المُدارة عبر ملف ومغلّف مملوكين للمالك فقط بدلًا من تسلسل مفاتيح API أو مراجع بيئة ملف تعريف المصادقة في `EnvironmentVariables`.
- إذا كنت تشغّل عدة Gateway عمدًا على مضيف واحد، فاعزل المنافذ والإعدادات/الحالة ومساحات العمل؛ راجع [/gateway#multiple-gateways-same-host](/ar/gateway#multiple-gateways-same-host).
- إذا كانت مصادقة الرمز المميز تتطلب رمزًا وكان SecretRef للرمز المهيأ غير محلول، يفشل التثبيت بإغلاق آمن.
- إذا كان كل من `gateway.auth.token` و`gateway.auth.password` مهيأين وكان `gateway.auth.mode` غير مضبوط، يُحظر التثبيت حتى يُضبط الوضع صراحةً.
- على macOS، يُبقي `install` ملفات LaunchAgent plists مملوكة للمالك فقط، ويحمّل قيم بيئة الخدمة المُدارة عبر ملف ومغلّف مملوكين للمالك فقط بدلًا من تسلسل مفاتيح API أو مراجع بيئة ملف تعريف المصادقة إلى `EnvironmentVariables`.
- إذا كنت تشغّل عمدًا عدة بوابات على مضيف واحد، فاعزل المنافذ والتهيئة والحالة ومساحات العمل؛ راجع [/gateway#multiple-gateways-same-host](/ar/gateway#multiple-gateways-same-host).
- يطلب `restart --safe` من Gateway العامل إجراء فحص مسبق للعمل النشط وجدولة إعادة تشغيل واحدة مدمجة بعد انتهاء العمل النشط. يحافظ `restart` العادي على سلوك مدير الخدمة الحالي؛ ويبقى `--force` مسار التجاوز الفوري.
## المفضّل
## يُفضَّل
استخدم [`openclaw gateway`](/ar/cli/gateway) للاطلاع على الوثائق والأمثلة الحالية.
## ذات صلة
## ذو صلة
- [مرجع CLI](/ar/cli)
- [دليل تشغيل Gateway](/ar/gateway)

View File

@ -1,21 +1,21 @@
---
read_when:
- تشغيل Gateway عبر CLI (للتطوير أو الخوادم)
- تشغيل Gateway من CLI (للتطوير أو الخوادم)
- تصحيح أخطاء مصادقة Gateway وأوضاع الربط والاتصال
- اكتشاف بوابات Gateway عبر Bonjour (DNS-SD المحلي والواسع النطاق)
- اكتشاف Gateway عبر Bonjour (DNS-SD المحلي + DNS-SD واسع النطاق)
sidebarTitle: Gateway
summary: OpenClaw Gateway CLI (`openclaw gateway`) — تشغيل بوابات Gateway والاستعلام عنها واكتشافها
title: Gateway
x-i18n:
generated_at: "2026-05-02T22:17:43Z"
generated_at: "2026-05-04T18:23:56Z"
model: gpt-5.5
provider: openai
source_hash: f7f948a8f0ee6e065afa02f354e690ad5cc4f71bdb8b8674f1b0396c439ab242
source_hash: 310867c59148577f2e8ce6f708da6bce936e09243ce7fbe5daeb453c6b3b370d
source_path: cli/gateway.md
workflow: 16
---
Gateway هو خادم WebSocket الخاص بـ OpenClaw (القنوات، العُقد، الجلسات، الخطافات). الأوامر الفرعية في هذه الصفحة تقع ضمن `openclaw gateway …`.
Gateway هو خادم WebSocket الخاص بـ OpenClaw (القنوات، العقد، الجلسات، الخطافات). توجد الأوامر الفرعية في هذه الصفحة ضمن `openclaw gateway …`.
<CardGroup cols={3}>
<Card title="اكتشاف Bonjour" href="/ar/gateway/bonjour">
@ -37,7 +37,7 @@ Gateway هو خادم WebSocket الخاص بـ OpenClaw (القنوات، ال
openclaw gateway
```
الاسم المستعار للتشغيل في المقدمة:
اسم مستعار للتشغيل في المقدمة:
```bash
openclaw gateway run
@ -46,11 +46,11 @@ openclaw gateway run
<AccordionGroup>
<Accordion title="سلوك بدء التشغيل">
- افتراضيًا، يرفض Gateway البدء ما لم يتم تعيين `gateway.mode=local` في `~/.openclaw/openclaw.json`. استخدم `--allow-unconfigured` للتشغيلات المخصصة/التطويرية.
- من المتوقع أن يكتب `openclaw onboard --mode local` و`openclaw setup` القيمة `gateway.mode=local`. إذا كان الملف موجودًا لكن `gateway.mode` مفقود، فتعامل مع ذلك كملف تكوين معطوب أو مستبدل وأصلحه بدل افتراض الوضع المحلي ضمنيًا.
- إذا كان الملف موجودًا و`gateway.mode` مفقودًا، يتعامل Gateway مع ذلك كضرر مريب في التكوين ويرفض "تخمين المحلي" نيابةً عنك.
- يتم حظر الربط خارج loopback من دون مصادقة (حاجز أمان).
- يشغّل `SIGUSR1` إعادة تشغيل داخل العملية عند التصريح بذلك (`commands.restart` مفعّل افتراضيًا؛ عيّن `commands.restart: false` لحظر إعادة التشغيل اليدوية، مع بقاء تطبيق/تحديث أداة Gateway/التكوين مسموحًا به).
- توقف معالجات `SIGINT`/`SIGTERM` عملية Gateway، لكنها لا تستعيد أي حالة طرفية مخصصة. إذا كنت تغلف CLI باستخدام TUI أو إدخال raw-mode، فأعد الطرفية إلى حالتها قبل الخروج.
- من المتوقع أن يكتب `openclaw onboard --mode local` و`openclaw setup` القيمة `gateway.mode=local`. إذا كان الملف موجودًا لكن `gateway.mode` مفقود، فتعامل مع ذلك كتكوين معطوب أو مستبدل وأصلحه بدلًا من افتراض الوضع المحلي ضمنيًا.
- إذا كان الملف موجودًا و`gateway.mode` مفقودًا، يتعامل Gateway مع ذلك كضرر مريب في التكوين ويرفض أن "يخمن المحلي" نيابةً عنك.
- الارتباط بما يتجاوز loopback دون مصادقة محظور (حاجز أمان).
- يطلق `SIGUSR1` إعادة تشغيل داخل العملية عند التفويض (`commands.restart` مفعّل افتراضيًا؛ عيّن `commands.restart: false` لمنع إعادة التشغيل اليدوية، بينما تظل أداة/تكوين Gateway وعمليات التطبيق/التحديث مسموحة).
- توقف معالجات `SIGINT`/`SIGTERM` عملية Gateway، لكنها لا تستعيد أي حالة طرفية مخصصة. إذا غلّفت CLI بواجهة TUI أو إدخال raw-mode، فأعد الطرفية إلى حالتها قبل الخروج.
</Accordion>
</AccordionGroup>
@ -61,13 +61,13 @@ openclaw gateway run
منفذ WebSocket (تأتي القيمة الافتراضية من التكوين/البيئة؛ عادةً `18789`).
</ParamField>
<ParamField path="--bind <loopback|lan|tailnet|auto|custom>" type="string">
وضع ربط المستمع.
وضع ارتباط المستمع.
</ParamField>
<ParamField path="--auth <token|password>" type="string">
تجاوز وضع المصادقة.
</ParamField>
<ParamField path="--token <token>" type="string">
تجاوز الرمز المميز (يضبط أيضًا `OPENCLAW_GATEWAY_TOKEN` للعملية).
تجاوز الرمز المميز (ويعيّن أيضًا `OPENCLAW_GATEWAY_TOKEN` للعملية).
</ParamField>
<ParamField path="--password <password>" type="string">
تجاوز كلمة المرور.
@ -79,16 +79,16 @@ openclaw gateway run
كشف Gateway عبر Tailscale.
</ParamField>
<ParamField path="--tailscale-reset-on-exit" type="boolean">
إعادة تعيين تكوين serve/funnel في Tailscale عند إيقاف التشغيل.
إعادة ضبط تكوين serve/funnel في Tailscale عند الإيقاف.
</ParamField>
<ParamField path="--allow-unconfigured" type="boolean">
السماح ببدء Gateway من دون `gateway.mode=local` في التكوين. يتجاوز حاجز بدء التشغيل للتمهيد المخصص/التطويري فقط؛ ولا يكتب ملف التكوين أو يصلحه.
السماح ببدء Gateway دون `gateway.mode=local` في التكوين. يتجاوز حاجز بدء التشغيل للتمهيد المخصص/التطويري فقط؛ ولا يكتب ملف التكوين أو يصلحه.
</ParamField>
<ParamField path="--dev" type="boolean">
إنشاء تكوين تطوير + مساحة عمل إذا كانا مفقودين (يتجاوز BOOTSTRAP.md).
إنشاء تكوين تطوير + مساحة عمل إذا كانا مفقودين (يتخطى BOOTSTRAP.md).
</ParamField>
<ParamField path="--reset" type="boolean">
إعادة تعيين تكوين التطوير + بيانات الاعتماد + الجلسات + مساحة العمل (يتطلب `--dev`).
إعادة ضبط تكوين التطوير + بيانات الاعتماد + الجلسات + مساحة العمل (يتطلب `--dev`).
</ParamField>
<ParamField path="--force" type="boolean">
إنهاء أي مستمع موجود على المنفذ المحدد قبل البدء.
@ -97,30 +97,40 @@ openclaw gateway run
سجلات تفصيلية.
</ParamField>
<ParamField path="--cli-backend-logs" type="boolean">
عرض سجلات الواجهة الخلفية لـ CLI فقط في وحدة التحكم (وتفعيل stdout/stderr).
عرض سجلات خلفية CLI فقط في وحدة التحكم (وتفعيل stdout/stderr).
</ParamField>
<ParamField path="--ws-log <auto|full|compact>" type="string" default="auto">
نمط سجل WebSocket.
نمط سجل Websocket.
</ParamField>
<ParamField path="--compact" type="boolean">
اسم مستعار لـ `--ws-log compact`.
</ParamField>
<ParamField path="--raw-stream" type="boolean">
تسجيل أحداث بث النموذج الخام إلى jsonl.
تسجيل أحداث تدفق النموذج الخام إلى jsonl.
</ParamField>
<ParamField path="--raw-stream-path <path>" type="string">
مسار jsonl للبث الخام.
مسار jsonl للتدفق الخام.
</ParamField>
## إعادة تشغيل Gateway
```bash
openclaw gateway restart
openclaw gateway restart --safe
openclaw gateway restart --force
```
يطلب `openclaw gateway restart --safe` من Gateway الجاري تنفيذ فحص مسبق لعمل OpenClaw النشط قبل إعادة التشغيل. إذا كانت عمليات مصطفة، أو تسليم ردود، أو تشغيلات مضمنة، أو تشغيلات مهام نشطة، يبلّغ Gateway عن العوائق، ويدمج طلبات إعادة التشغيل الآمنة المكررة، ويعيد التشغيل بمجرد انتهاء العمل النشط. يحافظ `restart` العادي على سلوك مدير الخدمة الحالي للتوافق. استخدم `--force` فقط عندما تريد صراحةً مسار التجاوز الفوري.
<Warning>
يمكن أن تظهر `--password` المضمنة في قوائم العمليات المحلية. فضّل `--password-file` أو متغيرات البيئة أو `gateway.auth.password` المدعوم بـ SecretRef.
يمكن أن تظهر `--password` المضمنة في قوائم العمليات المحلية. فضّل `--password-file` أو البيئة أو `gateway.auth.password` المدعوم بـ SecretRef.
</Warning>
### توصيف بدء التشغيل
### تحليل أداء بدء التشغيل
- عيّن `OPENCLAW_GATEWAY_STARTUP_TRACE=1` لتسجيل توقيتات المراحل أثناء بدء Gateway، بما في ذلك تأخير `eventLoopMax` لكل مرحلة وتوقيتات جداول بحث Plugin للفهرس المثبت، وسجل البيان، وتخطيط بدء التشغيل، وعمل خريطة المالكين.
- عيّن `OPENCLAW_DIAGNOSTICS=timeline` مع `OPENCLAW_DIAGNOSTICS_TIMELINE_PATH=<path>` لكتابة مخطط زمني لتشخيصات بدء التشغيل بصيغة JSONL بأفضل جهد لأطر QA الخارجية. يمكنك أيضًا تفعيل العلامة باستخدام `diagnostics.flags: ["timeline"]` في التكوين؛ ولا يزال المسار مقدمًا عبر البيئة. أضف `OPENCLAW_DIAGNOSTICS_EVENT_LOOP=1` لتضمين عينات حلقة الأحداث.
- شغّل `pnpm test:startup:gateway -- --runs 5 --warmup 1` لقياس أداء بدء Gateway. يسجل الاختبار المعياري أول مخرجات العملية، و`/healthz`، و`/readyz`، وتوقيتات تتبع بدء التشغيل، وتأخير حلقة الأحداث، وتفاصيل توقيت جدول بحث Plugin.
- عيّن `OPENCLAW_GATEWAY_STARTUP_TRACE=1` لتسجيل توقيتات المراحل أثناء بدء تشغيل Gateway، بما في ذلك تأخير `eventLoopMax` لكل مرحلة وتوقيتات جدول بحث Plugin للفهرس المثبت، وسجل البيان، وتخطيط بدء التشغيل، وعمل owner-map.
- عيّن `OPENCLAW_DIAGNOSTICS=timeline` مع `OPENCLAW_DIAGNOSTICS_TIMELINE_PATH=<path>` لكتابة مخطط زمني لتشخيصات بدء التشغيل بصيغة JSONL بأفضل جهد لأدوات اختبار QA الخارجية. يمكنك أيضًا تفعيل العلامة باستخدام `diagnostics.flags: ["timeline"]` في التكوين؛ يظل المسار مقدمًا عبر البيئة. أضف `OPENCLAW_DIAGNOSTICS_EVENT_LOOP=1` لتضمين عينات حلقة الأحداث.
- شغّل `pnpm test:startup:gateway -- --runs 5 --warmup 1` لقياس أداء بدء تشغيل Gateway. يسجل القياس أول مخرجات العملية، و`/healthz`، و`/readyz`، وتوقيتات تتبع بدء التشغيل، وتأخير حلقة الأحداث، وتفاصيل توقيت جدول بحث Plugin.
## الاستعلام عن Gateway قيد التشغيل
@ -129,12 +139,12 @@ openclaw gateway run
<Tabs>
<Tab title="أوضاع الإخراج">
- الافتراضي: قابل للقراءة البشرية (ملون في TTY).
- `--json`: JSON قابل للقراءة آليًا (بلا تنسيق/مؤشر تحميل).
- `--json`: JSON قابل للقراءة آليًا (دون تنسيق/مؤشر دوران).
- `--no-color` (أو `NO_COLOR=1`): تعطيل ANSI مع الحفاظ على التخطيط البشري.
</Tab>
<Tab title="الخيارات المشتركة">
- `--url <url>`: عنوان URL الخاص بـ WebSocket لـ Gateway.
- `--url <url>`: عنوان URL لـ WebSocket الخاص بـ Gateway.
- `--token <token>`: رمز Gateway المميز.
- `--password <password>`: كلمة مرور Gateway.
- `--timeout <ms>`: المهلة/الميزانية (تختلف حسب الأمر).
@ -144,7 +154,7 @@ openclaw gateway run
</Tabs>
<Note>
عند تعيين `--url`، لا يعود CLI إلى التكوين أو بيانات اعتماد البيئة. مرّر `--token` أو `--password` صراحةً. غياب بيانات الاعتماد الصريحة خطأ.
عند تعيين `--url`، لا تعود CLI إلى بيانات اعتماد التكوين أو البيئة. مرّر `--token` أو `--password` صراحةً. غياب بيانات الاعتماد الصريحة خطأ.
</Note>
### `gateway health`
@ -153,7 +163,7 @@ openclaw gateway run
openclaw gateway health --url ws://127.0.0.1:18789
```
نقطة نهاية HTTP `/healthz` هي فحص حيوية: تعود بمجرد أن يصبح الخادم قادرًا على الرد عبر HTTP. نقطة نهاية HTTP `/readyz` أكثر صرامة وتبقى حمراء بينما لا تزال ملحقات Plugin الجانبية لبدء التشغيل أو القنوات أو الخطافات المكوّنة تستقر. تتضمن استجابات الجاهزية التفصيلية المحلية أو المصادق عليها كتلة تشخيص `eventLoop` مع تأخير حلقة الأحداث، واستخدام حلقة الأحداث، ونسبة أنوية CPU، وعلامة `degraded`.
نقطة نهاية HTTP `/healthz` هي فحص حيوية: تعود بمجرد أن يتمكن الخادم من الرد على HTTP. نقطة نهاية HTTP `/readyz` أكثر صرامة وتبقى حمراء بينما لا تزال ملحقات Plugin الجانبية عند بدء التشغيل، أو القنوات، أو الخطافات المكوّنة في طور الاستقرار. تتضمن استجابات الجاهزية المحلية أو المصادق عليها المفصلة كتلة تشخيص `eventLoop` مع تأخير حلقة الأحداث، واستخدام حلقة الأحداث، ونسبة أنوية CPU، وعلامة `degraded`.
### `gateway usage-cost`
@ -166,12 +176,12 @@ openclaw gateway usage-cost --json
```
<ParamField path="--days <days>" type="number" default="30">
عدد الأيام المراد تضمينها.
عدد الأيام المطلوب تضمينها.
</ParamField>
### `gateway stability`
جلب مسجل الاستقرار التشخيصي الحديث من Gateway قيد التشغيل.
جلب مسجل الاستقرار التشخيصي الأخير من Gateway قيد التشغيل.
```bash
openclaw gateway stability
@ -182,19 +192,19 @@ openclaw gateway stability --json
```
<ParamField path="--limit <limit>" type="number" default="25">
الحد الأقصى لعدد الأحداث الحديثة المراد تضمينها (الحد الأقصى `1000`).
الحد الأقصى لعدد الأحداث الأخيرة المطلوب تضمينها (الحد الأقصى `1000`).
</ParamField>
<ParamField path="--type <type>" type="string">
التصفية حسب نوع الحدث التشخيصي، مثل `payload.large` أو `diagnostic.memory.pressure`.
</ParamField>
<ParamField path="--since-seq <seq>" type="number">
تضمين الأحداث بعد رقم تسلسل تشخيصي فقط.
تضمين الأحداث التي تأتي بعد رقم تسلسل تشخيصي فقط.
</ParamField>
<ParamField path="--bundle [path]" type="string">
قراءة حزمة استقرار محفوظة بدل استدعاء Gateway قيد التشغيل. استخدم `--bundle latest` (أو فقط `--bundle`) لأحدث حزمة ضمن دليل الحالة، أو مرّر مسار JSON للحزمة مباشرةً.
قراءة حزمة استقرار محفوظة بدلًا من استدعاء Gateway قيد التشغيل. استخدم `--bundle latest` (أو فقط `--bundle`) لأحدث حزمة تحت دليل الحالة، أو مرّر مسار JSON لحزمة مباشرةً.
</ParamField>
<ParamField path="--export" type="boolean">
كتابة ملف zip قابل للمشاركة لتشخيصات الدعم بدل طباعة تفاصيل الاستقرار.
كتابة ملف zip لتشخيصات دعم قابلة للمشاركة بدلًا من طباعة تفاصيل الاستقرار.
</ParamField>
<ParamField path="--output <path>" type="string">
مسار الإخراج لـ `--export`.
@ -202,15 +212,15 @@ openclaw gateway stability --json
<AccordionGroup>
<Accordion title="الخصوصية وسلوك الحزمة">
- تحتفظ السجلات ببيانات وصفية تشغيلية: أسماء الأحداث، والأعداد، وأحجام البايتات، وقراءات الذاكرة، وحالة قائمة الانتظار/الجلسة، وأسماء القنوات/Plugin، وملخصات الجلسات المنقحة. لا تحتفظ بنص المحادثة، أو أجسام Webhook، أو مخرجات الأدوات، أو أجسام الطلبات أو الاستجابات الخام، أو الرموز المميزة، أو ملفات تعريف الارتباط، أو القيم السرية، أو أسماء المضيفين، أو معرّفات الجلسات الخام. عيّن `diagnostics.enabled: false` لتعطيل المسجل بالكامل.
- عند مخارج Gateway الفادحة، ومهل إيقاف التشغيل، وفشل بدء التشغيل بعد إعادة التشغيل، يكتب OpenClaw لقطة التشخيص نفسها إلى `~/.openclaw/logs/stability/openclaw-stability-*.json` عندما يحتوي المسجل على أحداث. افحص أحدث حزمة باستخدام `openclaw gateway stability --bundle latest`؛ تنطبق أيضًا `--limit` و`--type` و`--since-seq` على مخرجات الحزمة.
- تحتفظ السجلات ببيانات تعريف تشغيلية: أسماء الأحداث، الأعداد، أحجام البايت، قراءات الذاكرة، حالة الطابور/الجلسة، أسماء القنوات/Plugin، وملخصات جلسات منقحة. لا تحتفظ بنص الدردشة، أو أجسام Webhook، أو مخرجات الأدوات، أو أجسام الطلب أو الاستجابة الخام، أو الرموز المميزة، أو ملفات تعريف الارتباط، أو القيم السرية، أو أسماء المضيفين، أو معرفات الجلسات الخام. عيّن `diagnostics.enabled: false` لتعطيل المسجل بالكامل.
- عند مخارج Gateway القاتلة، ومهلات الإيقاف، وفشل بدء التشغيل بعد إعادة التشغيل، يكتب OpenClaw اللقطة التشخيصية نفسها إلى `~/.openclaw/logs/stability/openclaw-stability-*.json` عندما يحتوي المسجل على أحداث. افحص أحدث حزمة باستخدام `openclaw gateway stability --bundle latest`؛ تنطبق `--limit` و`--type` و`--since-seq` أيضًا على إخراج الحزمة.
</Accordion>
</AccordionGroup>
### `gateway diagnostics export`
اكتب ملف zip محليًا للتشخيصات مصممًا لإرفاقه بتقارير الأخطاء. للاطلاع على نموذج الخصوصية ومحتويات الحزمة، راجع [تصدير التشخيصات](/ar/gateway/diagnostics).
اكتب ملف zip لتشخيصات محلية مصمم لإرفاقه بتقارير الأخطاء. لنموذج الخصوصية ومحتويات الحزمة، راجع [تصدير التشخيصات](/ar/gateway/diagnostics).
```bash
openclaw gateway diagnostics export
@ -219,22 +229,22 @@ openclaw gateway diagnostics export --json
```
<ParamField path="--output <path>" type="string">
مسار ملف zip للإخراج. القيمة الافتراضية هي تصدير دعم ضمن دليل الحالة.
مسار ملف zip الناتج. يكون الافتراضي تصدير دعم تحت دليل الحالة.
</ParamField>
<ParamField path="--log-lines <count>" type="number" default="5000">
الحد الأقصى لأسطر السجل المنقحة المراد تضمينها.
الحد الأقصى لأسطر السجل المنقحة المطلوب تضمينها.
</ParamField>
<ParamField path="--log-bytes <bytes>" type="number" default="1000000">
الحد الأقصى لبايتات السجل المراد فحصها.
الحد الأقصى لبايتات السجل المطلوب فحصها.
</ParamField>
<ParamField path="--url <url>" type="string">
عنوان URL الخاص بـ WebSocket لـ Gateway من أجل لقطة الصحة.
عنوان URL لـ WebSocket الخاص بـ Gateway للقطة الصحة.
</ParamField>
<ParamField path="--token <token>" type="string">
رمز Gateway المميز من أجل لقطة الصحة.
رمز Gateway المميز للقطة الصحة.
</ParamField>
<ParamField path="--password <password>" type="string">
كلمة مرور Gateway من أجل لقطة الصحة.
كلمة مرور Gateway للقطة الصحة.
</ParamField>
<ParamField path="--timeout <ms>" type="number" default="3000">
مهلة لقطة الحالة/الصحة.
@ -243,16 +253,16 @@ openclaw gateway diagnostics export --json
تخطي البحث عن حزمة الاستقرار المحفوظة.
</ParamField>
<ParamField path="--json" type="boolean">
طباعة المسار المكتوب والحجم والبيان بصيغة JSON.
طباعة المسار المكتوب، والحجم، والبيان كـ JSON.
</ParamField>
يحتوي التصدير على بيان، وملخص Markdown، وشكل التكوين، وتفاصيل التكوين المنقحة، وملخصات السجلات المنقحة، ولقطات حالة/صحة Gateway المنقحة، وأحدث حزمة استقرار عند وجود واحدة.
يحتوي التصدير على بيان، وملخص Markdown، وشكل التكوين، وتفاصيل تكوين منقحة، وملخصات سجلات منقحة، ولقطات حالة/صحة Gateway منقحة، وأحدث حزمة استقرار عندما تكون موجودة.
الغرض منه أن يكون قابلًا للمشاركة. يحتفظ بتفاصيل تشغيلية تساعد في تصحيح الأخطاء، مثل حقول سجلات OpenClaw الآمنة، وأسماء الأنظمة الفرعية، ورموز الحالة، والمدد، والأوضاع المكوّنة، والمنافذ، ومعرّفات Plugin، ومعرّفات المزوّدين، وإعدادات الميزات غير السرية، ورسائل السجلات التشغيلية المنقحة. يحذف أو ينقح نص المحادثة، وأجسام Webhook، ومخرجات الأدوات، وبيانات الاعتماد، وملفات تعريف الارتباط، ومعرّفات الحساب/الرسالة، ونص المطالبات/التعليمات، وأسماء المضيفين، والقيم السرية. عندما تبدو رسالة بنمط LogTape كنص حمولة مستخدم/محادثة/أداة، يحتفظ التصدير فقط بأن رسالة حُذفت بالإضافة إلى عدد بايتاتها.
الغرض منه أن يكون قابلًا للمشاركة. يحتفظ بتفاصيل تشغيلية تساعد في التصحيح، مثل حقول سجل OpenClaw الآمنة، وأسماء الأنظمة الفرعية، ورموز الحالة، والمدد، والأوضاع المكوّنة، والمنافذ، ومعرفات Plugin، ومعرفات المزوّدين، وإعدادات الميزات غير السرية، ورسائل السجل التشغيلية المنقحة. يحذف أو ينقح نص الدردشة، وأجسام Webhook، ومخرجات الأدوات، وبيانات الاعتماد، وملفات تعريف الارتباط، ومعرفات الحساب/الرسالة، ونص الموجه/التعليمات، وأسماء المضيفين، والقيم السرية. عندما تبدو رسالة بنمط LogTape كنص حمولة مستخدم/دردشة/أداة، يحتفظ التصدير فقط بأن رسالة حُذفت بالإضافة إلى عدد بايتاتها.
### `gateway status`
يعرض `gateway status` خدمة Gateway (launchd/systemd/schtasks) بالإضافة إلى فحص اختياري لقدرة الاتصال/المصادقة.
يعرض `gateway status` خدمة Gateway (launchd/systemd/schtasks) بالإضافة إلى فحص اختياري لقدرة الاتصال/المصادقة.
```bash
openclaw gateway status
@ -261,7 +271,7 @@ openclaw gateway status --require-rpc
```
<ParamField path="--url <url>" type="string">
إضافة هدف فحص صريح. لا تزال الوجهة البعيدة المكوّنة + localhost تُفحصان.
أضِف هدف فحص صريحًا. سيظل الفحص يشمل البعيد المُعدّ وlocalhost.
</ParamField>
<ParamField path="--token <token>" type="string">
مصادقة الرمز المميز للفحص.
@ -273,32 +283,32 @@ openclaw gateway status --require-rpc
مهلة الفحص.
</ParamField>
<ParamField path="--no-probe" type="boolean">
تخطي فحص الاتصال (عرض الخدمة فقط).
تخطَّ فحص الاتصال (عرض الخدمة فقط).
</ParamField>
<ParamField path="--deep" type="boolean">
فحص الخدمات على مستوى النظام أيضًا.
افحص الخدمات على مستوى النظام أيضًا.
</ParamField>
<ParamField path="--require-rpc" type="boolean">
ترقية فحص الاتصال الافتراضي إلى فحص قراءة والخروج بقيمة غير صفرية عند فشل فحص القراءة هذا. لا يمكن دمجه مع `--no-probe`.
رقِّ فحص الاتصال الافتراضي إلى فحص قراءة واخرج برمز غير صفري عند فشل فحص القراءة ذاك. لا يمكن دمجه مع `--no-probe`.
</ParamField>
<AccordionGroup>
<Accordion title="دلالات الحالة">
- يظل `gateway status` متاحًا للتشخيص حتى عندما يكون إعداد CLI المحلي مفقودًا أو غير صالح.
- يثبت `gateway status` الافتراضي حالة الخدمة، واتصال WebSocket، وإمكانية المصادقة المرئية وقت المصافحة. ولا يثبت عمليات القراءة/الكتابة/الإدارة.
- مجسات التشخيص غير معدِّلة لمصادقة الجهاز لأول مرة: فهي تعيد استخدام رمز جهاز مخزن مؤقتًا موجودًا عند توفره، لكنها لا تنشئ هوية جهاز CLI جديدة أو سجل إقران جهاز للقراءة فقط لمجرد فحص الحالة.
- يحل `gateway status` مراجع SecretRefs للمصادقة المكوّنة لمصادقة المجس متى أمكن.
- إذا تعذر حل SecretRef مطلوب للمصادقة في مسار هذا الأمر، فسيبلغ `gateway status --json` عن `rpc.authWarning` عندما يفشل اتصال المجس/المصادقة؛ مرر `--token`/`--password` صراحة أو حل مصدر السر أولًا.
- إذا نجح المجس، تُخفى تحذيرات مراجع المصادقة غير المحلولة لتجنب النتائج الإيجابية الكاذبة.
- استخدم `--require-rpc` في السكربتات والأتمتة عندما لا تكون خدمة تستمع كافية وتحتاج أيضًا إلى أن تكون استدعاءات RPC بنطاق القراءة سليمة.
- يضيف `--deep` فحصًا بأفضل جهد لتثبيتات launchd/systemd/schtasks الإضافية. عند اكتشاف عدة خدمات شبيهة بـ Gateway، تطبع المخرجات البشرية تلميحات تنظيف وتحذر من أن معظم الإعدادات يجب أن تشغل Gateway واحدًا لكل جهاز.
- تتضمن المخرجات البشرية مسار سجل الملف المحلول بالإضافة إلى لقطة لمسارات/صلاحية إعدادات CLI مقابل الخدمة للمساعدة في تشخيص انجراف الملف الشخصي أو دليل الحالة.
- يثبت `gateway status` الافتراضي حالة الخدمة، واتصال WebSocket، وإمكانات المصادقة المرئية وقت المصافحة. ولا يثبت عمليات القراءة/الكتابة/الإدارة.
- فحوص التشخيص غير مُغيِّرة لمصادقة الجهاز لأول مرة: فهي تعيد استخدام رمز جهاز مخزّن مؤقتًا موجودًا عند توفره، لكنها لا تنشئ هوية جهاز CLI جديدة أو سجل إقران جهاز للقراءة فقط لمجرد التحقق من الحالة.
- يحل `gateway status` مراجع SecretRefs للمصادقة المُعدّة من أجل مصادقة الفحص عند الإمكان.
- إذا تعذّر حل SecretRef مطلوب للمصادقة في مسار هذا الأمر، يبلّغ `gateway status --json` عن `rpc.authWarning` عندما يفشل اتصال/مصادقة الفحص؛ مرّر `--token`/`--password` صراحةً أو حل مصدر السر أولًا.
- إذا نجح الفحص، تُخفى تحذيرات مرجع المصادقة غير المحلول لتجنب الإيجابيات الكاذبة.
- استخدم `--require-rpc` في السكربتات والأتمتة عندما لا تكفي خدمة منصتة وتحتاج أيضًا إلى سلامة استدعاءات RPC بنطاق القراءة.
- يضيف `--deep` فحصًا بأفضل جهد لتثبيتات launchd/systemd/schtasks الإضافية. عند اكتشاف عدة خدمات شبيهة بالـGateway، يطبع الخرج البشري تلميحات تنظيف ويحذّر من أن معظم الإعدادات يجب أن تشغّل Gateway واحدًا لكل جهاز.
- يتضمن الخرج البشري مسار سجل الملف المحلول إضافةً إلى لقطة لمسارات/صلاحية إعداد CLI مقابل الخدمة للمساعدة في تشخيص انحراف الملف الشخصي أو دليل الحالة.
</Accordion>
<Accordion title="فحوصات انجراف مصادقة systemd على Linux">
- في تثبيتات systemd على Linux، تقرأ فحوصات انجراف مصادقة الخدمة كلًا من قيم `Environment=` و`EnvironmentFile=` من الوحدة (بما في ذلك `%h`، والمسارات المقتبسة، والملفات المتعددة، وملفات `-` الاختيارية).
- تحل فحوصات الانجراف مراجع SecretRefs لـ `gateway.auth.token` باستخدام بيئة التشغيل المدمجة (بيئة أمر الخدمة أولًا، ثم بيئة العملية كخيار احتياطي).
- إذا لم تكن مصادقة الرمز نشطة فعليًا (وضع `gateway.auth.mode` الصريح هو `password`/`none`/`trusted-proxy`، أو الوضع غير معين حيث يمكن لكلمة المرور أن تفوز ولا يوجد مرشح رمز يمكنه الفوز)، تتخطى فحوصات انجراف الرمز حل رمز الإعدادات.
<Accordion title="فحوص انحراف مصادقة systemd على Linux">
- في تثبيتات systemd على Linux، تقرأ فحوص انحراف مصادقة الخدمة قيم `Environment=` و`EnvironmentFile=` من الوحدة (بما في ذلك `%h`، والمسارات المقتبسة، والملفات المتعددة، وملفات `-` الاختيارية).
- تحل فحوص الانحراف SecretRefs الخاصة بـ`gateway.auth.token` باستخدام بيئة التشغيل المدمجة (بيئة أمر الخدمة أولًا، ثم بيئة العملية كبديل).
- إذا لم تكن مصادقة الرمز المميز فعالة عمليًا (تعيين `gateway.auth.mode` صراحةً إلى `password`/`none`/`trusted-proxy`، أو عدم تعيين الوضع حيث يمكن لكلمة المرور أن تسود ولا يمكن لأي مرشح رمز مميز أن يسود)، تتخطى فحوص انحراف الرمز حل رمز الإعداد.
</Accordion>
</AccordionGroup>
@ -307,17 +317,17 @@ openclaw gateway status --require-rpc
`gateway probe` هو أمر "تصحيح كل شيء". يفحص دائمًا:
- Gateway البعيد المكوّن لديك (إذا كان معينًا)، و
- localhost (loopback) **حتى إذا كان البعيد مكوّنًا**.
- Gateway البعيد المُعدّ لديك (إذا كان مضبوطًا)، و
- localhost (loopback) **حتى إذا كان البعيد مُعدًا**.
إذا مررت `--url`، يضاف ذلك الهدف الصريح قبل الاثنين. تسمي المخرجات البشرية الأهداف كالآتي:
إذا مررت `--url`، يُضاف ذلك الهدف الصريح قبل كليهما. يضع الخرج البشري تسميات للأهداف كالتالي:
- `URL (explicit)`
- `Remote (configured)` أو `Remote (configured, inactive)`
- `Local loopback`
<Note>
إذا أمكن الوصول إلى عدة Gateways، فإنه يطبعها كلها. تُدعم Gateways المتعددة عند استخدام ملفات شخصية/منافذ معزولة (مثل بوت إنقاذ)، لكن معظم التثبيتات لا تزال تشغل Gateway واحدًا.
إذا كان يمكن الوصول إلى عدة Gateways، فسيطبعها كلها. تدعم Gateways المتعددة عند استخدام ملفات تعريف/منافذ معزولة (مثل روبوت إنقاذ)، لكن معظم التثبيتات لا تزال تشغّل Gateway واحدًا.
</Note>
```bash
@ -327,51 +337,51 @@ openclaw gateway probe --json
<AccordionGroup>
<Accordion title="التفسير">
- يعني `Reachable: yes` أن هدفًا واحدًا على الأقل قبل اتصال WebSocket.
- يبلغ `Capability: read-only|write-capable|admin-capable|pairing-pending|connect-only` عما استطاع المجس إثباته بشأن المصادقة. وهو منفصل عن قابلية الوصول.
- يعني `Read probe: ok` أن استدعاءات RPC التفصيلية بنطاق القراءة (`health`/`status`/`system-presence`/`config.get`) نجحت أيضًا.
- يعني `Read probe: limited - missing scope: operator.read` أن الاتصال نجح لكن RPC بنطاق القراءة محدود. يُبلغ عن ذلك كقابلية وصول **متدهورة**، وليس فشلًا كاملًا.
- يعني `Read probe: failed` بعد `Connect: ok` أن Gateway قبل اتصال WebSocket، لكن تشخيصات القراءة اللاحقة انتهت مهلتها أو فشلت. وهذا أيضًا قابلية وصول **متدهورة**، وليس Gateway غير قابل للوصول.
- مثل `gateway status`، يعيد المجس استخدام مصادقة الجهاز المخزنة مؤقتًا الموجودة لكنه لا ينشئ هوية جهاز لأول مرة أو حالة إقران.
- يكون رمز الخروج غير صفري فقط عندما لا يكون أي هدف مفحوص قابلًا للوصول.
- تعني `Reachable: yes` أن هدفًا واحدًا على الأقل قبل اتصال WebSocket.
- يبلّغ `Capability: read-only|write-capable|admin-capable|pairing-pending|connect-only` عما استطاع الفحص إثباته بخصوص المصادقة. وهو منفصل عن قابلية الوصول.
- تعني `Read probe: ok` أن استدعاءات RPC التفصيلية بنطاق القراءة (`health`/`status`/`system-presence`/`config.get`) نجحت أيضًا.
- تعني `Read probe: limited - missing scope: operator.read` أن الاتصال نجح لكن RPC بنطاق القراءة محدود. يُبلّغ عن ذلك كقابلية وصول **متدهورة**، وليس فشلًا كاملًا.
- تعني `Read probe: failed` بعد `Connect: ok` أن Gateway قبل اتصال WebSocket، لكن تشخيصات القراءة اللاحقة انتهت مهلتها أو فشلت. وهذه أيضًا قابلية وصول **متدهورة**، وليست Gateway غير قابل للوصول.
- مثل `gateway status`، يعيد الفحص استخدام مصادقة الجهاز المخزنة مؤقتًا الموجودة، لكنه لا ينشئ هوية جهاز لأول مرة أو حالة إقران.
- يكون رمز الخروج غير صفري فقط عندما لا يمكن الوصول إلى أي هدف مفحوص.
</Accordion>
<Accordion title="مخرجات JSON">
<Accordion title="خرج JSON">
المستوى الأعلى:
- `ok`: هدف واحد على الأقل قابل للوصول.
- `degraded`: هدف واحد على الأقل قبل اتصالًا لكنه لم يكمل تشخيصات RPC التفصيلية الكاملة.
- `capability`: أفضل إمكانية شوهدت عبر الأهداف القابلة للوصول (`read_only`، `write_capable`، `admin_capable`، `pairing_pending`، `connected_no_operator_scope`، أو `unknown`).
- `primaryTargetId`: أفضل هدف للتعامل معه باعتباره الفائز النشط بهذا الترتيب: URL الصريح، نفق SSH، البعيد المكوّن، ثم local loopback.
- `warnings[]`: سجلات تحذير بأفضل جهد مع `code` و`message` و`targetIds` الاختيارية.
- `network`: تلميحات URL لـ local loopback/tailnet مشتقة من الإعدادات الحالية وشبكة المضيف.
- `discovery.timeoutMs` و`discovery.count`: ميزانية/عدد نتائج الاكتشاف الفعلي المستخدم في تمريرة المجس هذه.
- `ok`: يمكن الوصول إلى هدف واحد على الأقل.
- `degraded`: قبل هدف واحد على الأقل اتصالًا لكنه لم يُكمل تشخيصات RPC التفصيلية الكاملة.
- `capability`: أفضل إمكانية شوهدت عبر الأهداف القابلة للوصول (`read_only` أو `write_capable` أو `admin_capable` أو `pairing_pending` أو `connected_no_operator_scope` أو `unknown`).
- `primaryTargetId`: أفضل هدف للتعامل معه كالفائز النشط بهذا الترتيب: URL الصريح، ثم نفق SSH، ثم البعيد المُعدّ، ثم local loopback.
- `warnings[]`: سجلات تحذير بأفضل جهد تحتوي على `code` و`message` و`targetIds` الاختيارية.
- `network`: تلميحات URL لـlocal loopback/tailnet مشتقة من الإعداد الحالي وشبكات المضيف.
- `discovery.timeoutMs` و`discovery.count`: ميزانية/عدد نتائج الاكتشاف الفعليان المستخدمان في مرور الفحص هذا.
لكل هدف (`targets[].connect`):
- `ok`: قابلية الوصول بعد الاتصال + تصنيف التدهور.
- `rpcOk`: نجاح RPC التفصيلي الكامل.
- `scopeLimited`: فشل RPC التفصيلي بسبب فقدان نطاق المشغل.
- `scopeLimited`: فشل RPC التفصيلي بسبب نقص نطاق المشغل.
لكل هدف (`targets[].auth`):
- `role`: دور المصادقة المبلغ عنه في `hello-ok` عند توفره.
- `scopes`: النطاقات الممنوحة المبلغ عنها في `hello-ok` عند توفرها.
- `role`: دور المصادقة المبلّغ عنه في `hello-ok` عند توفره.
- `scopes`: النطاقات الممنوحة المبلّغ عنها في `hello-ok` عند توفرها.
- `capability`: تصنيف إمكانية المصادقة المعروض لذلك الهدف.
</Accordion>
<Accordion title="رموز التحذير الشائعة">
- `ssh_tunnel_failed`: فشل إعداد نفق SSH؛ عاد الأمر إلى المجسات المباشرة.
- `multiple_gateways`: كان أكثر من هدف واحد قابلًا للوصول؛ هذا غير معتاد إلا إذا كنت تشغل ملفات شخصية معزولة عمدًا، مثل بوت إنقاذ.
- `auth_secretref_unresolved`: تعذر حل SecretRef مصادقة مكوّن لهدف فاشل.
- `probe_scope_limited`: نجح اتصال WebSocket، لكن مجس القراءة كان محدودًا بسبب فقدان `operator.read`.
- `ssh_tunnel_failed`: فشل إعداد نفق SSH؛ عاد الأمر إلى الفحوص المباشرة.
- `multiple_gateways`: كان يمكن الوصول إلى أكثر من هدف واحد؛ وهذا غير معتاد ما لم تكن تشغّل ملفات تعريف معزولة عمدًا، مثل روبوت إنقاذ.
- `auth_secretref_unresolved`: تعذّر حل SecretRef مُعدّ للمصادقة لهدف فاشل.
- `probe_scope_limited`: نجح اتصال WebSocket، لكن فحص القراءة كان محدودًا بسبب نقص `operator.read`.
</Accordion>
</AccordionGroup>
#### البعيد عبر SSH (تكافؤ تطبيق Mac)
يستخدم وضع "Remote over SSH" في تطبيق macOS إعادة توجيه منفذ محليًا بحيث يصبح Gateway البعيد (الذي قد يكون مربوطًا بالحلقة الراجعة فقط) قابلًا للوصول عند `ws://127.0.0.1:<port>`.
يستخدم وضع "Remote over SSH" في تطبيق macOS إعادة توجيه منفذ محليًا بحيث يصبح Gateway البعيد (الذي قد يكون مربوطًا بـloopback فقط) قابلًا للوصول على `ws://127.0.0.1:<port>`.
مكافئ CLI:
@ -380,16 +390,16 @@ openclaw gateway probe --ssh user@gateway-host
```
<ParamField path="--ssh <target>" type="string">
`user@host` أو `user@host:port` (القيمة الافتراضية للمنفذ هي `22`).
`user@host` أو `user@host:port` (المنفذ الافتراضي هو `22`).
</ParamField>
<ParamField path="--ssh-identity <path>" type="string">
ملف الهوية.
</ParamField>
<ParamField path="--ssh-auto" type="boolean">
اختر أول مضيف Gateway مكتشف كهدف SSH من نقطة نهاية الاكتشاف المحلولة (`local.` بالإضافة إلى نطاق واسع النطاق المكوّن، إن وجد). تُتجاهل تلميحات TXT فقط.
اختر أول مضيف Gateway مكتشف كهدف SSH من نقطة نهاية الاكتشاف المحلولة (`local.` بالإضافة إلى نطاق المنطقة الواسعة المُعدّ، إن وجد). يتم تجاهل تلميحات TXT فقط.
</ParamField>
الإعدادات (اختيارية، تُستخدم كقيم افتراضية):
الإعداد (اختياري، يُستخدم كافتراضات):
- `gateway.remote.sshTarget`
- `gateway.remote.sshIdentity`
@ -407,10 +417,10 @@ openclaw gateway call logs.tail --params '{"sinceMs": 60000}'
سلسلة كائن JSON للمعاملات.
</ParamField>
<ParamField path="--url <url>" type="string">
URL WebSocket لـ Gateway.
عنوان URL لـWebSocket الخاص بـGateway.
</ParamField>
<ParamField path="--token <token>" type="string">
رمز Gateway.
رمز Gateway المميز.
</ParamField>
<ParamField path="--password <password>" type="string">
كلمة مرور Gateway.
@ -419,14 +429,14 @@ openclaw gateway call logs.tail --params '{"sinceMs": 60000}'
ميزانية المهلة.
</ParamField>
<ParamField path="--expect-final" type="boolean">
أساسًا لاستدعاءات RPC بأسلوب الوكيل التي تبث أحداثًا وسيطة قبل حمولة نهائية.
أساسًا لاستدعاءات RPC بأسلوب الوكلاء التي تبث أحداثًا وسيطة قبل حمولة نهائية.
</ParamField>
<ParamField path="--json" type="boolean">
مخرجات JSON قابلة للقراءة آليًا.
خرج JSON قابل للقراءة آليًا.
</ParamField>
<Note>
يجب أن يكون `--params` JSON صالحًا.
يجب أن تكون `--params` بصيغة JSON صالحة.
</Note>
## إدارة خدمة Gateway
@ -439,9 +449,11 @@ openclaw gateway restart
openclaw gateway uninstall
```
### التثبيت باستخدام مغلف
### التثبيت باستخدام غلاف
استخدم `--wrapper` عندما يجب أن تبدأ الخدمة المُدارة عبر ملف تنفيذي آخر، مثل حشوة مدير أسرار أو مساعد تشغيل كمستخدم آخر. يتلقى المغلف وسائط Gateway العادية ويكون مسؤولًا في النهاية عن تنفيذ `openclaw` أو Node بهذه الوسائط.
استخدم `--wrapper` عندما يجب أن تبدأ الخدمة المُدارة عبر ملف تنفيذي آخر، مثل
وسيط مدير أسرار أو مساعد تشغيل باسم مستخدم آخر. يتلقى الغلاف وسائط Gateway العادية ويكون
مسؤولًا عن تنفيذ `openclaw` أو Node في النهاية بتلك الوسائط.
```bash
cat > ~/.local/bin/openclaw-doppler <<'EOF'
@ -455,14 +467,16 @@ openclaw gateway install --wrapper ~/.local/bin/openclaw-doppler --force
openclaw gateway restart
```
يمكنك أيضًا تعيين المغلف عبر البيئة. يتحقق `gateway install` من أن المسار ملف تنفيذي، ويكتب المغلف في `ProgramArguments` للخدمة، ويثبت `OPENCLAW_WRAPPER` في بيئة الخدمة لإعادة التثبيت القسرية والتحديثات وإصلاحات doctor لاحقًا.
يمكنك أيضًا ضبط الغلاف عبر البيئة. يتحقق `gateway install` من أن المسار
ملف تنفيذي، ويكتب الغلاف في `ProgramArguments` الخاصة بالخدمة، ويثبّت
`OPENCLAW_WRAPPER` في بيئة الخدمة لإعادة التثبيت القسرية والتحديثات وإصلاحات الطبيب اللاحقة.
```bash
OPENCLAW_WRAPPER="$HOME/.local/bin/openclaw-doppler" openclaw gateway install --force
openclaw doctor
```
لإزالة مغلف مثبت، امسح `OPENCLAW_WRAPPER` أثناء إعادة التثبيت:
لإزالة غلاف مثبّت، امسح `OPENCLAW_WRAPPER` أثناء إعادة التثبيت:
```bash
OPENCLAW_WRAPPER= openclaw gateway install --force
@ -478,40 +492,40 @@ openclaw gateway restart
</Accordion>
<Accordion title="سلوك دورة الحياة">
- استخدم `gateway restart` لإعادة تشغيل خدمة مُدارة. لا تسلسل `gateway stop` و`gateway start` كبديل لإعادة التشغيل؛ على macOS، يعطل `gateway stop` عمدًا LaunchAgent قبل إيقافه.
- يتجاوز `gateway restart --wait 30s` ميزانية تصريف إعادة التشغيل المكوّنة لتلك الإعادة. الأرقام المجردة بالميلي ثانية؛ وتُقبل وحدات مثل `s` و`m` و`h`. ينتظر `--wait 0` إلى أجل غير مسمى.
- يتخطى `gateway restart --force` تصريف العمل النشط ويعيد التشغيل فورًا. استخدمه عندما يكون المشغل قد فحص بالفعل معيقات المهام المدرجة ويريد عودة Gateway الآن.
- استخدم `gateway restart` لإعادة تشغيل خدمة مُدارة. لا تسلسل `gateway stop` و`gateway start` كبديل لإعادة التشغيل؛ على macOS، يعطّل `gateway stop` عن قصد LaunchAgent قبل إيقافه.
- يتجاوز `gateway restart --wait 30s` ميزانية انتظار إعادة التشغيل المُعدّة لتلك الإعادة. الأرقام المجردة تُعد بالمللي ثانية؛ وتُقبل وحدات مثل `s` و`m` و`h`. ينتظر `--wait 0` إلى أجل غير مسمى.
- يتخطى `gateway restart --force` انتظار العمل النشط ويعيد التشغيل فورًا. استخدمه عندما يكون المشغل قد فحص بالفعل عوائق المهام المدرجة ويريد عودة Gateway الآن.
- تقبل أوامر دورة الحياة `--json` للسكربتات.
</Accordion>
<Accordion title="المصادقة وSecretRefs وقت التثبيت">
- عندما تتطلب مصادقة الرمز رمزًا ويكون `gateway.auth.token` مُدارًا بواسطة SecretRef، يتحقق `gateway install` من إمكانية حل SecretRef لكنه لا يثبت الرمز المحلول في بيانات بيئة الخدمة.
- إذا كانت مصادقة الرمز تتطلب رمزًا وكان SecretRef للرمز المكوّن غير محلول، يفشل التثبيت بشكل مغلق بدلًا من تثبيت نص عادي احتياطي.
- لمصادقة كلمة المرور على `gateway run`، فضّل `OPENCLAW_GATEWAY_PASSWORD` أو `--password-file` أو `gateway.auth.password` مدعومًا بـ SecretRef بدلًا من `--password` مضمنة.
- في وضع المصادقة المستنتج، لا تخفف `OPENCLAW_GATEWAY_PASSWORD` الموجودة في الصدفة فقط متطلبات رمز التثبيت؛ استخدم إعدادات دائمة (`gateway.auth.password` أو `env` في الإعدادات) عند تثبيت خدمة مُدارة.
- إذا كان كل من `gateway.auth.token` و`gateway.auth.password` مكوّنين وكان `gateway.auth.mode` غير معين، يُحظر التثبيت حتى يتم تعيين الوضع صراحة.
- عندما تتطلب مصادقة الرمز المميز رمزًا وتكون `gateway.auth.token` مُدارة عبر SecretRef، يتحقق `gateway install` من إمكانية حل SecretRef لكنه لا يثبت الرمز المحلول في بيانات بيئة الخدمة الوصفية.
- إذا كانت مصادقة الرمز المميز تتطلب رمزًا وكان SecretRef الخاص بالرمز المُعدّ غير محلول، يفشل التثبيت بشكل مغلق بدلًا من تثبيت نص عادي بديل.
- لمصادقة كلمة المرور على `gateway run`، فضّل `OPENCLAW_GATEWAY_PASSWORD` أو `--password-file` أو `gateway.auth.password` المدعوم بـSecretRef على `--password` المضمّن.
- في وضع المصادقة المستنتج، لا تخفف `OPENCLAW_GATEWAY_PASSWORD` الخاصة بالصدفة فقط متطلبات رمز التثبيت؛ استخدم إعدادًا دائمًا (`gateway.auth.password` أو `env` في الإعداد) عند تثبيت خدمة مُدارة.
- إذا كان كل من `gateway.auth.token` و`gateway.auth.password` مُعدّين وكان `gateway.auth.mode` غير مضبوط، يُحظر التثبيت حتى يُضبط الوضع صراحةً.
</Accordion>
</AccordionGroup>
## اكتشاف Gateways (Bonjour)
يفحص `gateway discover` منارات Gateway (`_openclaw-gw._tcp`).
يفحص `gateway discover` منارات Gateway (`_openclaw-gw._tcp`).
- DNS-SD متعدد البث: `local.`
- DNS-SD أحادي البث (Bonjour واسع النطاق): اختر نطاقًا (مثال: `openclaw.internal.`) وأعد DNS منقسمًا + خادم DNS؛ راجع [Bonjour](/ar/gateway/bonjour).
- DNS-SD أحادي البث (Wide-Area Bonjour): اختر نطاقًا (مثال: `openclaw.internal.`) وأعدّ DNS مقسّمًا + خادم DNS؛ راجع [Bonjour](/ar/gateway/bonjour).
تعلن المنارة فقط Gateways التي تم تمكين اكتشاف Bonjour فيها (افتراضيًا).
تعلن المنارة فقط بوابات Gateway التي فُعّل فيها اكتشاف Bonjour (افتراضيًا).
تتضمن سجلات الاكتشاف واسع النطاق (TXT):
- `role` (تلميح دور Gateway)
- `transport` (تلميح النقل، مثل `gateway`)
- `gatewayPort` (منفذ WebSocket، عادةً `18789`)
- `sshPort` (اختياري؛ يعيّن العملاء أهداف SSH افتراضيًا إلى `22` عند غيابه)
- `sshPort` (اختياري؛ يضبط العملاء أهداف SSH افتراضيًا إلى `22` عند غيابه)
- `tailnetDns` (اسم مضيف MagicDNS، عند توفره)
- `gatewayTls` / `gatewayTlsSha256` (TLS ممكّن + بصمة الشهادة)
- `cliPath` (تلميح تثبيت بعيد مكتوب إلى المنطقة واسعة النطاق)
- `gatewayTls` / `gatewayTlsSha256` (TLS مفعّل + بصمة الشهادة)
- `cliPath` (تلميح التثبيت البعيد المكتوب إلى منطقة النطاق الواسع)
### `gateway discover`
@ -520,10 +534,10 @@ openclaw gateway discover
```
<ParamField path="--timeout <ms>" type="number" default="2000">
مهلة لكل أمر (browse/resolve).
مهلة لكل أمر (تصفح/حل).
</ParamField>
<ParamField path="--json" type="boolean">
إخراج قابل للقراءة آليًا (يعطّل أيضًا التنسيق ومؤشر التحميل).
إخراج قابل للقراءة آليًا (يعطّل أيضًا التنسيق/مؤشر التحميل).
</ParamField>
أمثلة:
@ -534,9 +548,9 @@ openclaw gateway discover --json | jq '.beacons[].wsUrl'
```
<Note>
- تفحص CLI النطاق `local.` بالإضافة إلى نطاق المنطقة الواسعة المُكوَّن عند تمكينه.
- يُشتق `wsUrl` في إخراج JSON من نقطة نهاية الخدمة التي جرى حلّها، وليس من تلميحات TXT فقط مثل `lanHost` أو `tailnetDns`.
- في `local.` mDNS، لا يُبث `sshPort` و`cliPath` إلا عندما تكون قيمة `discovery.mdns.mode` هي `full`. لا يزال DNS-SD للمنطقة الواسعة يكتب `cliPath`؛ ويظل `sshPort` اختياريًا هناك أيضًا.
- يفحص CLI النطاق `local.` بالإضافة إلى نطاق النطاق الواسع المضبوط عند تفعيله.
- يُشتق `wsUrl` في إخراج JSON من نقطة نهاية الخدمة التي تم حلها، وليس من تلميحات TXT فقط مثل `lanHost` أو `tailnetDns`.
- على mDNS في `local.`، لا يُبث `sshPort` و`cliPath` إلا عندما تكون `discovery.mdns.mode` هي `full`. لا يزال DNS-SD واسع النطاق يكتب `cliPath`؛ ويبقى `sshPort` اختياريًا هناك أيضًا.
</Note>

View File

@ -2,20 +2,20 @@
read_when:
- تريد تغيير النماذج الافتراضية أو عرض حالة مصادقة المزوّد
- تريد فحص النماذج/المزوّدين المتاحين وتصحيح أخطاء ملفات تعريف المصادقة
summary: مرجع CLI لـ `openclaw models` (status/list/set/scan، الأسماء المستعارة، آليات الرجوع الاحتياطي، المصادقة)
summary: مرجع CLI لـ `openclaw models` (status/list/set/scan، الأسماء المستعارة، البدائل الاحتياطية، المصادقة)
title: النماذج
x-i18n:
generated_at: "2026-05-01T07:37:56Z"
generated_at: "2026-05-04T18:23:45Z"
model: gpt-5.5
provider: openai
source_hash: 538d3e4808329737fdc044dc6e14e5c7c78052e75d8a8b3b257b1ebd821c84d1
source_hash: dc7842f02e29aa0ac2ae88f3d42bba71f1890a58ab22d818dbee0585bc562fea
source_path: cli/models.md
workflow: 16
---
# `openclaw models`
اكتشاف النماذج وفحصها وتكوينها (النموذج الافتراضي، الاحتياطيات، ملفات تعريف المصادقة).
اكتشاف النماذج، وفحصها، وتكوينها (النموذج الافتراضي، والبدائل الاحتياطية، وملفات تعريف المصادقة).
ذات صلة:
@ -32,80 +32,43 @@ openclaw models set <model-or-alias>
openclaw models scan
```
يعرض `openclaw models status` القيم المحلولة للافتراضي/الاحتياطيات إضافة إلى نظرة عامة على المصادقة.
عندما تكون لقطات استخدام المزوّدين متاحة، يتضمن قسم حالة OAuth/مفتاح API
نوافذ استخدام المزوّدين ولقطات الحصص.
مزوّدو نوافذ الاستخدام الحاليون: Anthropic، وGitHub Copilot، وGemini CLI، وOpenAI
Codex، وMiniMax، وXiaomi، وz.ai. تأتي مصادقة الاستخدام من خطافات خاصة بكل مزوّد
عندما تكون متاحة؛ وإلا يعود OpenClaw إلى بيانات اعتماد OAuth/مفتاح API
المطابقة من ملفات تعريف المصادقة أو البيئة أو التكوين.
في خرج `--json`، تكون `auth.providers` هي النظرة العامة للمزوّد
الواعية بالبيئة/التكوين/المخزن، بينما تكون `auth.oauth` هي صحة ملف تعريف مخزن المصادقة فقط.
أضف `--probe` لتشغيل فحوصات مصادقة حية على كل ملف تعريف مزوّد مكوّن.
الفحوصات طلبات حقيقية (قد تستهلك الرموز وتطلق حدود المعدل).
استخدم `--agent <id>` لفحص حالة النموذج/المصادقة لوكيل مكوّن. عند حذفه،
يستخدم الأمر `OPENCLAW_AGENT_DIR`/`PI_CODING_AGENT_DIR` إذا كان مضبوطا، وإلا يستخدم
الوكيل الافتراضي المكوّن.
يمكن أن تأتي صفوف الفحص من ملفات تعريف المصادقة أو بيانات اعتماد البيئة أو `models.json`.
يعرض `openclaw models status` القيم المحلولة للنموذج الافتراضي/البدائل الاحتياطية إضافة إلى نظرة عامة على المصادقة.
عندما تكون لقطات استخدام المزوّد متاحة، يتضمن قسم حالة OAuth/مفتاح API نوافذ استخدام المزوّد ولقطات الحصة.
مزوّدو نوافذ الاستخدام الحاليون: Anthropic، وGitHub Copilot، وGemini CLI، وOpenAI Codex، وMiniMax، وXiaomi، وz.ai. تأتي مصادقة الاستخدام من خطافات خاصة بالمزوّد عندما تكون متاحة؛ وإلا يعود OpenClaw إلى مطابقة بيانات اعتماد OAuth/مفتاح API من ملفات تعريف المصادقة أو البيئة أو التكوين.
في مخرجات `--json`، يكون `auth.providers` هو النظرة العامة للمزوّد المدركة للبيئة/التكوين/المخزن، بينما يكون `auth.oauth` لصحة ملف تعريف مخزن المصادقة فقط.
أضف `--probe` لتشغيل مجسات مصادقة مباشرة مقابل كل ملف تعريف مزوّد مكوّن.
المجسات هي طلبات حقيقية (قد تستهلك رموزًا وتؤدي إلى حدود معدل).
استخدم `--agent <id>` لفحص حالة النموذج/المصادقة لوكيل مكوّن. عند حذفه، يستخدم الأمر `OPENCLAW_AGENT_DIR`/`PI_CODING_AGENT_DIR` إذا كانا مضبوطين، وإلا يستخدم الوكيل الافتراضي المكوّن.
يمكن أن تأتي صفوف المجسات من ملفات تعريف المصادقة، أو بيانات اعتماد البيئة، أو `models.json`.
ملاحظات:
- يقبل `models set <model-or-alias>` الصيغة `provider/model` أو اسما مستعارا.
- `models list` للقراءة فقط: يقرأ التكوين وملفات تعريف المصادقة وحالة الفهرس
الحالية وصفوف الفهرس المملوكة للمزوّد، لكنه لا يعيد كتابة
`models.json`.
- عمود `Auth` على مستوى المزوّد وللقراءة فقط. يتم حسابه من بيانات تعريف ملف
تعريف المصادقة المحلي، وعلامات البيئة، ومفاتيح المزوّد المكوّنة، وعلامات المزوّد المحلي،
وعلامات بيئة/ملف تعريف AWS Bedrock، وبيانات تعريف المصادقة الاصطناعية في Plugin؛
ولا يحمّل وقت تشغيل المزوّد، ولا يقرأ أسرار keychain، ولا يستدعي واجهات API
الخاصة بالمزوّدين، ولا يثبت جاهزية التنفيذ الدقيقة لكل نموذج.
- يمكن أن يتضمن `models list --all --provider <id>` صفوف فهرس ثابتة مملوكة للمزوّد
من بيانات Plugin أو بيانات تعريف فهرس المزوّدين المضمّنين حتى عندما لا تكون
قد صادقت مع ذلك المزوّد بعد. تظل تلك الصفوف تظهر على أنها غير متاحة
حتى يتم تكوين المصادقة المطابقة.
- يحافظ `models list` على استجابة مستوى التحكم أثناء بطء اكتشاف فهرس المزوّدين.
تعود العروض الافتراضية والمكوّنة إلى صفوف النماذج المكوّنة أو الاصطناعية
بعد انتظار قصير وتترك الاكتشاف ينتهي في الخلفية. استخدم `--all` عندما تحتاج
إلى الفهرس المكتشف الكامل والدقيق وتكون مستعدا لانتظار اكتشاف المزوّد.
- يدمج `models list --all` الواسع صفوف فهرس البيان فوق صفوف السجل
من دون تحميل خطافات الإكمال وقت تشغيل المزوّد. تستخدم المسارات السريعة لبيانات البيان
المصفاة حسب المزوّد المزوّدين المعلّمين `static` فقط؛ ويبقى المزوّدون المعلّمون
`refreshable` مدعومين بالسجل/الذاكرة المؤقتة وتضاف صفوف البيان كإضافات، بينما
يبقى المزوّدون المعلّمون `runtime` على اكتشاف السجل/وقت التشغيل.
- يحافظ `models list` على فصل بيانات تعريف النموذج الأصلية عن حدود وقت التشغيل. في خرج الجدول،
يعرض `Ctx` القيمة `contextTokens/contextWindow` عندما يختلف حد وقت التشغيل الفعلي
عن نافذة السياق الأصلية؛ وتتضمن صفوف JSON القيمة `contextTokens`
عندما يعرّض المزوّد ذلك الحد.
- يرشح `models list --provider <id>` حسب معرّف المزوّد، مثل `moonshot` أو
`openai-codex`. ولا يقبل تسميات العرض من منتقيات المزوّد التفاعلية،
مثل `Moonshot AI`.
- يتم تحليل مراجع النماذج بالتقسيم عند أول `/`. إذا كان معرّف النموذج يتضمن `/` (على نمط OpenRouter)، فأدرج بادئة المزوّد (مثال: `openrouter/moonshotai/kimi-k2`).
- إذا حذفت المزوّد، يحل OpenClaw الإدخال كاسم مستعار أولا، ثم
كمطابقة فريدة لمزوّد مكوّن لذلك المعرّف الدقيق للنموذج، وبعد ذلك فقط
يعود إلى المزوّد الافتراضي المكوّن مع تحذير إيقاف. إذا لم يعد ذلك المزوّد
يعرّض النموذج الافتراضي المكوّن، يعود OpenClaw إلى أول مزوّد/نموذج مكوّن
بدلا من إظهار افتراضي قديم لمزوّد محذوف.
- قد يعرض `models status` القيمة `marker(<value>)` في خرج المصادقة للعناصر النائبة غير السرية (على سبيل المثال `OPENAI_API_KEY`، و`secretref-managed`، و`minimax-oauth`، و`oauth:chutes`، و`ollama-local`) بدلا من إخفائها كأسرار.
- يقبل `models set <model-or-alias>` الصيغة `provider/model` أو اسمًا مستعارًا.
- `models list` للقراءة فقط: يقرأ التكوين، وملفات تعريف المصادقة، وحالة الكتالوج الحالية، وصفوف الكتالوج المملوكة للمزوّد، لكنه لا يعيد كتابة `models.json`.
- عمود `Auth` على مستوى المزوّد وللقراءة فقط. يُحسب من بيانات تعريف ملف تعريف المصادقة المحلي، وعلامات البيئة، ومفاتيح المزوّد المكوّنة، وعلامات المزوّد المحلي، وعلامات بيئة/ملف تعريف AWS Bedrock، وبيانات تعريف المصادقة الاصطناعية للـ Plugin؛ ولا يحمّل وقت تشغيل المزوّد، أو يقرأ أسرار سلسلة المفاتيح، أو يستدعي واجهات API للمزوّد، أو يثبت جاهزية التنفيذ الدقيقة لكل نموذج.
- يمكن أن يتضمن `models list --all --provider <id>` صفوف كتالوج ثابتة مملوكة للمزوّد من بيانات Plugin أو بيانات تعريف كتالوج المزوّد المضمّنة حتى عندما لا تكون قد صادقت مع ذلك المزوّد بعد. ستظل هذه الصفوف تظهر على أنها غير متاحة حتى يتم تكوين المصادقة المطابقة.
- يحافظ `models list` على استجابة مستوى التحكم أثناء بطء اكتشاف كتالوج المزوّد. تعود العروض الافتراضية والمكوّنة إلى صفوف النماذج المكوّنة أو الاصطناعية بعد انتظار قصير وتترك الاكتشاف يكتمل في الخلفية. استخدم `--all` عندما تحتاج إلى الكتالوج المكتشف الكامل والدقيق وتكون مستعدًا لانتظار اكتشاف المزوّد.
- يدمج `models list --all` الواسع صفوف كتالوج البيان فوق صفوف السجل دون تحميل خطافات ملحق وقت تشغيل المزوّد. تستخدم المسارات السريعة للبيان المفلترة حسب المزوّد المزوّدين الموسومين `static` فقط؛ بينما تبقى المزوّدات الموسومة `refreshable` مدعومة بالسجل/التخزين المؤقت وتلحق صفوف البيان كملحقات، وتبقى المزوّدات الموسومة `runtime` على اكتشاف السجل/وقت التشغيل.
- يحافظ `models list` على تمييز بيانات تعريف النموذج الأصلية عن حدود وقت التشغيل. في مخرجات الجدول، يعرض `Ctx` القيمة `contextTokens/contextWindow` عندما يختلف حد وقت التشغيل الفعّال عن نافذة السياق الأصلية؛ وتتضمن صفوف JSON القيمة `contextTokens` عندما يعرّض المزوّد ذلك الحد.
- يفلتر `models list --provider <id>` حسب معرّف المزوّد، مثل `moonshot` أو `openai-codex`. ولا يقبل تسميات العرض من ملتقطات المزوّد التفاعلية، مثل `Moonshot AI`.
- تُحلّل مراجع النماذج بالتقسيم عند أول `/`. إذا كان معرّف النموذج يتضمن `/` (نمط OpenRouter)، فأدرج بادئة المزوّد (مثال: `openrouter/moonshotai/kimi-k2`).
- إذا حذفت المزوّد، يحل OpenClaw الإدخال كاسم مستعار أولًا، ثم كمطابقة فريدة لمزوّد مكوّن لمعرّف النموذج الدقيق ذاك، وعندها فقط يعود إلى المزوّد الافتراضي المكوّن مع تحذير إهمال. إذا لم يعد ذلك المزوّد يعرّض النموذج الافتراضي المكوّن، يعود OpenClaw إلى أول مزوّد/نموذج مكوّن بدلًا من إظهار قيمة افتراضية قديمة لمزوّد مُزال.
- قد يعرض `models status` القيمة `marker(<value>)` في مخرجات المصادقة للعناصر النائبة غير السرية (مثل `OPENAI_API_KEY`، و`secretref-managed`، و`minimax-oauth`، و`oauth:chutes`، و`ollama-local`) بدلًا من حجبها كأسرار.
### فحص النماذج
يقرأ `models scan` فهرس OpenRouter العام `:free` ويرتب المرشحين
للاستخدام الاحتياطي. الفهرس نفسه عام، لذلك لا تحتاج الفحوصات المعتمدة على بيانات التعريف فقط
إلى مفتاح OpenRouter.
يقرأ `models scan` كتالوج OpenRouter العام `:free` ويرتّب المرشحين لاستخدامهم كبدائل احتياطية. الكتالوج نفسه عام، لذلك لا تحتاج الفحوصات الخاصة بالبيانات الوصفية فقط إلى مفتاح OpenRouter.
يحاول OpenClaw افتراضيا فحص دعم الأدوات والصور باستدعاءات نماذج حية.
إذا لم يتم تكوين مفتاح OpenRouter، يعود الأمر إلى خرج بيانات التعريف فقط
ويوضح أن نماذج `:free` لا تزال تتطلب `OPENROUTER_API_KEY`
للفحوصات والاستدلال.
يحاول OpenClaw افتراضيًا فحص دعم الأدوات والصور باستدعاءات نماذج مباشرة. إذا لم يكن هناك مفتاح OpenRouter مكوّن، يعود الأمر إلى مخرجات البيانات الوصفية فقط ويوضح أن نماذج `:free` لا تزال تتطلب `OPENROUTER_API_KEY` للمجسات والاستدلال.
الخيارات:
- `--no-probe` (بيانات التعريف فقط؛ بلا بحث في التكوين/الأسرار)
- `--no-probe` (بيانات وصفية فقط؛ دون بحث في التكوين/الأسرار)
- `--min-params <b>`
- `--max-age-days <days>`
- `--provider <name>`
- `--max-candidates <n>`
- `--timeout <ms>` (طلب الفهرس ومهلة كل فحص)
- `--timeout <ms>` (طلب الكتالوج ومهلة كل مجس)
- `--concurrency <n>`
- `--yes`
- `--no-input`
@ -113,8 +76,7 @@ Codex، وMiniMax، وXiaomi، وz.ai. تأتي مصادقة الاستخدام
- `--set-image`
- `--json`
يتطلب `--set-default` و`--set-image` فحوصات حية؛ نتائج الفحص المعتمدة على بيانات التعريف فقط
معلوماتية ولا تطبق على التكوين.
يتطلب `--set-default` و`--set-image` مجسات مباشرة؛ نتائج الفحص الخاصة بالبيانات الوصفية فقط معلوماتية ولا تُطبّق على التكوين.
### حالة النماذج
@ -122,20 +84,18 @@ Codex، وMiniMax، وXiaomi، وz.ai. تأتي مصادقة الاستخدام
- `--json`
- `--plain`
- `--check` (يخرج 1=منتهي/مفقود، 2=قارب الانتهاء)
- `--probe` (فحص حي لملفات تعريف المصادقة المكوّنة)
- `--check` (الخروج 1=منتهي/مفقود، 2=وشيك الانتهاء)
- `--probe` (مجس مباشر لملفات تعريف المصادقة المكوّنة)
- `--probe-provider <name>` (فحص مزوّد واحد)
- `--probe-profile <id>` (معرّفات ملفات تعريف مكررة أو مفصولة بفواصل)
- `--probe-timeout <ms>`
- `--probe-concurrency <n>`
- `--probe-max-tokens <n>`
- `--agent <id>` (معرّف وكيل مكوّن؛ يتجاوز `OPENCLAW_AGENT_DIR`/`PI_CODING_AGENT_DIR`)
- `--agent <id>` (معرّف الوكيل المكوّن؛ يتجاوز `OPENCLAW_AGENT_DIR`/`PI_CODING_AGENT_DIR`)
يبقي `--json` stdout مخصصا لحمولة JSON. يتم توجيه تشخيصات ملف تعريف المصادقة
والمزوّد وبدء التشغيل إلى stderr بحيث يمكن للسكربتات تمرير stdout مباشرة
إلى أدوات مثل `jq`.
يحافظ `--json` على stdout مخصصًا لحمولة JSON. تُوجّه تشخيصات ملف تعريف المصادقة والمزوّد وبدء التشغيل إلى stderr حتى تتمكن السكربتات من تمرير stdout مباشرة إلى أدوات مثل `jq`.
حاويات حالة الفحص:
حاويات حالة المجس:
- `ok`
- `auth`
@ -146,17 +106,13 @@ Codex، وMiniMax، وXiaomi، وz.ai. تأتي مصادقة الاستخدام
- `unknown`
- `no_model`
حالات تفاصيل الفحص/رموز السبب المتوقعة:
حالات تفاصيل المجس/رمز السبب المتوقعة:
- `excluded_by_auth_order`: يوجد ملف تعريف مخزن، لكن `auth.order.<provider>` الصريح
حذفه، لذلك يبلغ الفحص عن الاستبعاد بدلا من
تجربته.
- `missing_credential`، و`invalid_expires`، و`expired`، و`unresolved_ref`:
ملف التعريف موجود لكنه غير مؤهل/غير قابل للحل.
- `no_model`: توجد مصادقة للمزوّد، لكن OpenClaw لم يتمكن من حل مرشح نموذج
قابل للفحص لذلك المزوّد.
- `excluded_by_auth_order`: يوجد ملف تعريف مخزن، لكن `auth.order.<provider>` الصريح حذفه، لذلك يبلّغ المجس عن الاستبعاد بدلًا من تجربته.
- `missing_credential`، و`invalid_expires`، و`expired`، و`unresolved_ref`: ملف التعريف موجود لكنه غير مؤهل/غير قابل للحل.
- `no_model`: توجد مصادقة مزوّد، لكن OpenClaw لم يستطع حل مرشح نموذج قابل للفحص لذلك المزوّد.
## الأسماء المستعارة + الاحتياطيات
## الأسماء المستعارة + البدائل الاحتياطية
```bash
openclaw models aliases list
@ -167,45 +123,38 @@ openclaw models fallbacks list
```bash
openclaw models auth add
openclaw models auth list [--provider <id>] [--json]
openclaw models auth login --provider <id>
openclaw models auth setup-token --provider <id>
openclaw models auth paste-token
```
`models auth add` هو مساعد المصادقة التفاعلي. يمكنه تشغيل تدفق مصادقة مزوّد
(OAuth/مفتاح API) أو إرشادك إلى لصق الرمز يدويا، بحسب
المزوّد الذي تختاره.
`models auth add` هو مساعد المصادقة التفاعلي. يمكنه تشغيل تدفق مصادقة مزوّد (OAuth/مفتاح API) أو إرشادك إلى لصق الرمز يدويًا، حسب المزوّد الذي تختاره.
يشغل `models auth login` تدفق مصادقة Plugin المزوّد (OAuth/مفتاح API). استخدم
`openclaw plugins list` لمعرفة المزوّدين المثبتين.
استخدم `openclaw models auth --agent <id> <subcommand>` لكتابة نتائج المصادقة إلى
مخزن وكيل مكوّن محدد. يتم احترام علم `--agent` الأصلي بواسطة
`add`، و`login`، و`setup-token`، و`paste-token`، و`login-github-copilot`.
يعرض `models auth list` ملفات تعريف المصادقة المحفوظة للوكيل المحدد دون طباعة الرمز أو مفتاح API أو مادة سر OAuth. استخدم `--provider <id>` للتصفية إلى مزوّد واحد، مثل `openai-codex`، و`--json` للبرمجة النصية.
يشغّل `models auth login` تدفق مصادقة Plugin خاص بالمزوّد (OAuth/مفتاح API). استخدم `openclaw plugins list` لمعرفة المزوّدين المثبتين.
استخدم `openclaw models auth --agent <id> <subcommand>` لكتابة نتائج المصادقة إلى مخزن وكيل مكوّن محدد. تُحترم راية الأصل `--agent` بواسطة `add` و`list` و`login` و`setup-token` و`paste-token` و`login-github-copilot`.
أمثلة:
```bash
openclaw models auth login --provider openai-codex --set-default
openclaw models auth list --provider openai-codex
```
ملاحظات:
- يظل `setup-token` و`paste-token` أمرين عامين للرموز للمزوّدين
الذين يعرّضون طرق مصادقة بالرموز.
- يتطلب `setup-token` واجهة TTY تفاعلية ويشغل طريقة مصادقة الرمز الخاصة بالمزوّد
(مع الرجوع افتراضيا إلى طريقة `setup-token` لذلك المزوّد عندما يعرّض
واحدة).
- يقبل `paste-token` سلسلة رمز تم إنشاؤها في مكان آخر أو من الأتمتة.
- يتطلب `paste-token` الخيار `--provider`، ويطلب قيمة الرمز، ويكتبها
إلى معرّف ملف التعريف الافتراضي `<provider>:manual` ما لم تمرر
`--profile-id`.
- يخزن `paste-token --expires-in <duration>` انتهاء صلاحية مطلقا للرمز من
مدة نسبية مثل `365d` أو `12h`.
- ملاحظة Anthropic: أخبرنا موظفو Anthropic أن استخدام Claude CLI بأسلوب OpenClaw مسموح به مرة أخرى، لذلك يتعامل OpenClaw مع إعادة استخدام Claude CLI واستخدام `claude -p` على أنهما معتمدان لهذا التكامل ما لم تنشر Anthropic سياسة جديدة.
- يظل Anthropic `setup-token` / `paste-token` متاحين كمسار رمز مدعوم في OpenClaw، لكن OpenClaw يفضل الآن إعادة استخدام Claude CLI و`claude -p` عندما يكونان متاحين.
- يبقى `setup-token` و`paste-token` أمرين عامين للرموز للمزوّدين الذين يعرّضون طرق مصادقة بالرمز.
- يتطلب `setup-token` واجهة TTY تفاعلية ويشغّل طريقة مصادقة الرمز الخاصة بالمزوّد (ويستخدم افتراضيًا طريقة `setup-token` لذلك المزوّد عندما يعرّض واحدة).
- يقبل `paste-token` سلسلة رمز مُولّدة في مكان آخر أو من الأتمتة.
- يتطلب `paste-token` الخيار `--provider`، ويطلب قيمة الرمز، ويكتبها إلى معرّف ملف التعريف الافتراضي `<provider>:manual` ما لم تمرر `--profile-id`.
- يخزن `paste-token --expires-in <duration>` انتهاء صلاحية رمز مطلقًا من مدة نسبية مثل `365d` أو `12h`.
- ملاحظة Anthropic: أخبرنا موظفو Anthropic أن استخدام Claude CLI بنمط OpenClaw مسموح به مجددًا، لذلك يتعامل OpenClaw مع إعادة استخدام Claude CLI واستخدام `claude -p` على أنهما معتمدان لهذا التكامل ما لم تنشر Anthropic سياسة جديدة.
- يظل `setup-token` / `paste-token` الخاصان بـ Anthropic متاحين كمسار رمز مدعوم في OpenClaw، لكن OpenClaw يفضّل الآن إعادة استخدام Claude CLI و`claude -p` عند توفرهما.
## ذات صلة
- [مرجع CLI](/ar/cli)
- [اختيار النموذج](/ar/concepts/model-providers)
- [انتقال النموذج عند الفشل](/ar/concepts/model-failover)
- [تجاوز فشل النموذج](/ar/concepts/model-failover)

View File

@ -1,35 +1,36 @@
---
read_when:
- تحتاج إلى التحقق من صحة توجيه الوكيل المُدار من قِبل المشغّل قبل النشر
- تحتاج إلى التقاط حركة مرور نقل OpenClaw محليًا لتصحيح الأخطاء
- تريد فحص جلسات وكيل تصحيح الأخطاء أو الكتل الثنائية أو الإعدادات المسبقة للاستعلامات المضمنة
summary: مرجع CLI لـ `openclaw proxy`، بما في ذلك التحقق من الوكيل المُدار بواسطة المشغّل وفاحص التقاط وكيل التصحيح المحلي
- يجب عليك التحقق من توجيه الوكيل المُدار من قِبل المشغّل قبل النشر
- تحتاج إلى التقاط حركة نقل OpenClaw محليًا لتصحيح الأخطاء.
- تريد فحص جلسات وكيل تصحيح الأخطاء أو الكائنات الثنائية الكبيرة أو الإعدادات المسبقة المضمّنة للاستعلامات
summary: مرجع CLI لـ `openclaw proxy`، بما في ذلك التحقق من الوكيل المُدار بواسطة المشغّل ومفتش التقاط وكيل التصحيح المحلي
title: الوكيل
x-i18n:
generated_at: "2026-05-04T07:03:06Z"
generated_at: "2026-05-04T18:23:55Z"
model: gpt-5.5
provider: openai
source_hash: 9589bedafb97c31bcb6536a04307cd0c6550e1f307693bd4401785d79f34a1eb
source_hash: 092c4e946dcab5e78e37d6fc77bb067b7a649368f8571fa127e462a85fa14ce5
source_path: cli/proxy.md
workflow: 16
---
# `openclaw proxy`
تحقّق من توجيه الوكيل المُدار بواسطة المشغّل، أو شغّل وكيل التصحيح المحلي الصريح
تحقق من توجيه الوكيل المُدار من المشغّل، أو شغّل وكيل التصحيح المحلي الصريح
وافحص حركة المرور الملتقطة.
استخدم `validate` لإجراء فحص مسبق لوكيل إعادة توجيه مُدار بواسطة المشغّل قبل تفعيل
استخدم `validate` لإجراء فحص تمهيدي لوكيل توجيه أمامي مُدار من المشغّل قبل تمكين
توجيه وكيل OpenClaw. الأوامر الأخرى هي أدوات تصحيح للتحقيق على مستوى النقل:
يمكنها بدء وكيل محلي، وتشغيل أمر فرعي مع تمكين الالتقاط، وسرد جلسات الالتقاط، والاستعلام
عن أنماط حركة المرور الشائعة، وقراءة الكائنات الثنائية الملتقطة، وحذف بيانات الالتقاط المحلية.
يمكنها بدء وكيل محلي، وتشغيل أمر فرعي مع تمكين الالتقاط، وسرد جلسات الالتقاط،
والاستعلام عن أنماط حركة المرور الشائعة، وقراءة الكتل الملتقطة، ومسح بيانات
الالتقاط المحلية.
## الأوامر
```bash
openclaw proxy start [--host <host>] [--port <port>]
openclaw proxy run [--host <host>] [--port <port>] -- <cmd...>
openclaw proxy validate [--json] [--proxy-url <url>] [--allowed-url <url>] [--denied-url <url>] [--timeout-ms <ms>]
openclaw proxy validate [--json] [--proxy-url <url>] [--allowed-url <url>] [--denied-url <url>] [--apns-reachable] [--apns-authority <url>] [--timeout-ms <ms>]
openclaw proxy coverage
openclaw proxy sessions [--limit <count>]
openclaw proxy query --preset <name> [--session <id>]
@ -39,27 +40,32 @@ openclaw proxy purge
## التحقق
يتحقق `openclaw proxy validate` من عنوان URL الفعلي للوكيل المُدار بواسطة المشغّل من
يفحص `openclaw proxy validate` عنوان URL الفعّال للوكيل المُدار من المشغّل من
`--proxy-url` أو الإعدادات أو `OPENCLAW_PROXY_URL`. يبلّغ عن مشكلة في الإعدادات عندما
لا يكون أي وكيل مفعّلًا ومُعدًّا؛ استخدم `--proxy-url` لفحص مسبق لمرة واحدة
قبل تغيير الإعدادات. افتراضيًا، يتحقق من نجاح الوصول إلى وجهة عامة
عبر الوكيل، ومن أن الوكيل لا يستطيع الوصول إلى مؤشر حلقة رجوع مؤقت.
الوجهات المرفوضة المخصصة تتبع مبدأ الإخفاق المغلق: تفشل استجابات HTTP وإخفاقات
النقل الملتبسة ما لم تتمكن من التحقق بشكل منفصل من إشارة رفض خاصة بعملية النشر.
لا يكون أي وكيل ممكّنًا ومُعدًا؛ استخدم `--proxy-url` لإجراء فحص تمهيدي لمرة واحدة
قبل تغيير الإعدادات. افتراضيًا، يتحقق من نجاح وجهة عامة عبر الوكيل ومن أن الوكيل
لا يمكنه الوصول إلى مؤشر اختبار loopback مؤقت. الوجهات المرفوضة المخصصة تفشل
بشكل مغلق: تفشل استجابات HTTP وإخفاقات النقل الملتبسة ما لم تتمكن من التحقق
من إشارة رفض خاصة بالنشر بشكل منفصل. أضف `--apns-reachable` لفتح نفق APNs
HTTP/2 CONNECT عبر الوكيل أيضًا والتأكد من أن بيئة اختبار APNs تستجيب؛ يستخدم
الفحص رمز موفّر غير صالح عمدًا، لذلك تُعد استجابة APNs `403 InvalidProviderToken`
إشارة نجاح للوصول.
الخيارات:
- `--json`: اطبع JSON قابلًا للقراءة آليًا.
- `--proxy-url <url>`: تحقّق من عنوان URL هذا للوكيل بدلًا من الإعدادات أو البيئة.
- `--allowed-url <url>`: أضف وجهة يُتوقع نجاحها عبر الوكيل. كرر ذلك لفحص وجهات متعددة.
- `--denied-url <url>`: أضف وجهة يُتوقع أن يحظرها الوكيل. كرر ذلك لفحص وجهات متعددة.
- `--proxy-url <url>`: تحقق من عنوان URL هذا للوكيل بدلًا من الإعدادات أو البيئة.
- `--allowed-url <url>`: أضف وجهة يُتوقع أن تنجح عبر الوكيل. كررها لفحص وجهات متعددة.
- `--denied-url <url>`: أضف وجهة يُتوقع أن يحظرها الوكيل. كررها لفحص وجهات متعددة.
- `--apns-reachable`: تحقق أيضًا من إمكانية الوصول إلى APNs HTTP/2 في بيئة الاختبار عبر الوكيل.
- `--apns-authority <url>`: سلطة APNs المراد فحصها باستخدام `--apns-reachable` (`https://api.sandbox.push.apple.com` افتراضيًا؛ الإنتاج هو `https://api.push.apple.com`).
- `--timeout-ms <ms>`: مهلة كل طلب بالمللي ثانية.
راجع [وكيل الشبكة](/ar/security/network-proxy) للحصول على إرشادات النشر ودلالات الرفض.
## إعدادات الاستعلام المسبقة
يقبل `openclaw proxy query --preset <name>` ما يلي:
يقبل `openclaw proxy query --preset <name>`:
- `double-sends`
- `retry-storms`
@ -72,8 +78,8 @@ openclaw proxy purge
- يستخدم `start` القيمة `127.0.0.1` افتراضيًا ما لم يتم تعيين `--host`.
- يبدأ `run` وكيل تصحيح محليًا ثم يشغّل الأمر بعد `--`.
- يفتح توجيه المنبع المباشر في وكيل التصحيح مقابس منبع لأغراض التشخيص. عندما يكون وضع الوكيل المُدار في OpenClaw نشطًا، يكون التوجيه المباشر لطلبات الوكيل وأنفاق CONNECT معطلًا افتراضيًا؛ عيّن `OPENCLAW_DEBUG_PROXY_ALLOW_DIRECT_CONNECT_WITH_MANAGED_PROXY=1` فقط للتشخيص المحلي المعتمد.
- يخرج `validate` برمز 1 عندما تفشل إعدادات الوكيل أو فحوصات الوجهة.
- يفتح تمرير المنبع المباشر لوكيل التصحيح مقابس منبع لأغراض التشخيص. عندما يكون وضع الوكيل المُدار من OpenClaw نشطًا، يُعطّل التمرير المباشر لطلبات الوكيل وأنفاق CONNECT افتراضيًا؛ عيّن `OPENCLAW_DEBUG_PROXY_ALLOW_DIRECT_CONNECT_WITH_MANAGED_PROXY=1` فقط لتشخيصات محلية معتمدة.
- يخرج `validate` بالرمز 1 عند فشل إعدادات الوكيل أو فحوصات الوجهة.
- الالتقاطات هي بيانات تصحيح محلية؛ استخدم `openclaw proxy purge` عند الانتهاء.
## ذات صلة

View File

@ -1,46 +1,46 @@
---
read_when:
- تريد آلية احتياطية موثوقة عند فشل مزوّدي واجهات برمجة التطبيقات
- أنت تشغّل Codex CLI أو أدوات CLI محلية أخرى للذكاء الاصطناعي وتريد إعادة استخدامها
- تريد فهم جسر الاسترجاع الحلقي لـ MCP للوصول إلى أدوات الواجهة الخلفية في CLI
summary: 'واجهات CLI الخلفية: رجوع احتياطي إلى CLI محلية للذكاء الاصطناعي مع جسر أدوات MCP اختياري'
title: خلفيات CLI
- تريد بديلاً احتياطياً موثوقاً عندما يفشل مزوّدو واجهات برمجة التطبيقات
- تشغّل Codex CLI أو أدوات CLI محلية أخرى للذكاء الاصطناعي وتريد إعادة استخدامها
- تريد فهم جسر الحلقة الراجعة الخاص بـ MCP للوصول إلى أدوات الواجهة الخلفية عبر CLI
summary: 'واجهات CLI الخلفية: بديل احتياطي لـ CLI الذكاء الاصطناعي المحلي مع جسر أدوات MCP اختياري'
title: واجهات CLI الخلفية
x-i18n:
generated_at: "2026-05-02T20:45:30Z"
generated_at: "2026-05-04T18:23:58Z"
model: gpt-5.5
provider: openai
source_hash: f343469d6a42dc6146196355dc2ba3feed045515c3d8446941b90971aadc9a16
source_hash: 55534c48c5e226857b9320fd369416583e5c2efc80eabd4746f939afdd027dc1
source_path: gateway/cli-backends.md
workflow: 16
---
يمكن لـ OpenClaw تشغيل **واجهات CLI محلية للذكاء الاصطناعي** بوصفها **خيارًا احتياطيًا نصيًا فقط** عندما تكون مزودات API متوقفة،
أو محدودة المعدل، أو تتصرف مؤقتًا بشكل غير سليم. هذا محافظ عن قصد:
OpenClaw can run **local AI CLIs** as a **text-only fallback** when API providers are down,
rate-limited, or temporarily misbehaving. This is intentionally conservative:
- **لا تُحقن أدوات OpenClaw مباشرة**، لكن الخلفيات التي تحتوي على `bundleMcp: true`
يمكنها تلقي أدوات Gateway عبر جسر MCP حلقي.
- **بث JSONL** لواجهات CLI التي تدعمه.
- **الجلسات مدعومة** (لذلك تبقى الجولات اللاحقة مترابطة).
- **يمكن تمرير الصور** إذا كانت واجهة CLI تقبل مسارات الصور.
- **OpenClaw tools are not injected directly**, but backends with `bundleMcp: true`
can receive gateway tools via a loopback MCP bridge.
- **JSONL streaming** for CLIs that support it.
- **Sessions are supported** (so follow-up turns stay coherent).
- **Images can be passed through** if the CLI accepts image paths.
صُمم هذا بوصفه **شبكة أمان** لا مسارًا أساسيًا. استخدمه عندما تريد
ردودًا نصية "تعمل دائمًا" دون الاعتماد على واجهات API خارجية.
This is designed as a **safety net** rather than a primary path. Use it when you
want “always works” text responses without relying on external APIs.
إذا كنت تريد وقت تشغيل كاملًا للحاضنة مع عناصر تحكم جلسة ACP، ومهام خلفية،
وربط الخيط/المحادثة، وجلسات ترميز خارجية مستمرة، فاستخدم
[وكلاء ACP](/ar/tools/acp-agents) بدلًا من ذلك. خلفيات CLI ليست ACP.
If you want a full harness runtime with ACP session controls, background tasks,
thread/conversation binding, and persistent external coding sessions, use
[ACP Agents](/ar/tools/acp-agents) instead. CLI backends are not ACP.
## بداية سريعة مناسبة للمبتدئين
## Beginner-friendly quick start
يمكنك استخدام Codex CLI **دون أي إعدادات** (يسجل Plugin OpenAI المضمن
خلفية افتراضية):
You can use Codex CLI **without any config** (the bundled OpenAI plugin
registers a default backend):
```bash
openclaw agent --message "hi" --model codex-cli/gpt-5.5
```
إذا كان Gateway لديك يعمل ضمن launchd/systemd وكان PATH في حده الأدنى، فأضف
مسار الأمر فقط:
If your gateway runs under launchd/systemd and PATH is minimal, add just the
command path:
```json5
{
@ -56,16 +56,16 @@ openclaw agent --message "hi" --model codex-cli/gpt-5.5
}
```
هذا كل شيء. لا حاجة إلى مفاتيح ولا إعدادات مصادقة إضافية تتجاوز واجهة CLI نفسها.
Thats it. No keys, no extra auth config needed beyond the CLI itself.
إذا كنت تستخدم خلفية CLI مضمنة بوصفها **مزود الرسائل الأساسي** على
مضيف Gateway، فإن OpenClaw يحمّل الآن تلقائيًا Plugin المضمن المالك عندما تشير إعداداتك
صراحةً إلى تلك الخلفية في مرجع نموذج أو ضمن
If you use a bundled CLI backend as the **primary message provider** on a
gateway host, OpenClaw now auto-loads the owning bundled plugin when your config
explicitly references that backend in a model ref or under
`agents.defaults.cliBackends`.
## استخدامها كخيار احتياطي
## Using it as a fallback
أضف خلفية CLI إلى قائمة الخيارات الاحتياطية بحيث لا تعمل إلا عند فشل النماذج الأساسية:
Add a CLI backend to your fallback list so it only runs when primary models fail:
```json5
{
@ -84,28 +84,28 @@ openclaw agent --message "hi" --model codex-cli/gpt-5.5
}
```
ملاحظات:
Notes:
- إذا كنت تستخدم `agents.defaults.models` (قائمة سماح)، فيجب أن تضمّن نماذج خلفية CLI لديك هناك أيضًا.
- إذا فشل المزود الأساسي (مصادقة، حدود معدل، مهل انتهاء)، فسيحاول OpenClaw
استخدام خلفية CLI بعده.
- If you use `agents.defaults.models` (allowlist), you must include your CLI backend models there too.
- If the primary provider fails (auth, rate limits, timeouts), OpenClaw will
try the CLI backend next.
## نظرة عامة على الإعدادات
## Configuration overview
توجد جميع خلفيات CLI ضمن:
All CLI backends live under:
```
agents.defaults.cliBackends
```
يكون كل إدخال مقيّدًا بواسطة **معرّف مزود** (مثل `codex-cli` أو `my-cli`).
يصبح معرّف المزود هو الجانب الأيسر من مرجع النموذج لديك:
Each entry is keyed by a **provider id** (e.g. `codex-cli`, `my-cli`).
The provider id becomes the left side of your model ref:
```
<provider>/<model>
```
### مثال على الإعدادات
### Example configuration
```json5
{
@ -145,48 +145,54 @@ agents.defaults.cliBackends
}
```
## كيف يعمل
## How it works
1. **يحدد خلفية** بناءً على بادئة المزود (`codex-cli/...`).
2. **يبني مطالبة نظام** باستخدام مطالبة OpenClaw نفسها + سياق مساحة العمل.
3. **ينفّذ واجهة CLI** مع معرّف جلسة (إذا كان مدعومًا) كي يبقى السجل متسقًا.
تحتفظ خلفية `claude-cli` المضمنة بعملية Claude stdio حية لكل
جلسة OpenClaw وترسل الجولات اللاحقة عبر stream-json stdin.
4. **يفسر المخرجات** (JSON أو نص عادي) ويعيد النص النهائي.
5. **يحتفظ بمعرّفات الجلسات** لكل خلفية، بحيث تعيد الجولات اللاحقة استخدام جلسة CLI نفسها.
1. **Selects a backend** based on the provider prefix (`codex-cli/...`).
2. **Builds a system prompt** using the same OpenClaw prompt + workspace context.
3. **Executes the CLI** with a session id (if supported) so history stays consistent.
The bundled `claude-cli` backend keeps a Claude stdio process alive per
OpenClaw session and sends follow-up turns over stream-json stdin.
4. **Parses output** (JSON or plain text) and returns the final text.
5. **Persists session ids** per backend, so follow-ups reuse the same CLI session.
<Note>
خلفية Anthropic `claude-cli` المضمنة مدعومة مرة أخرى. أخبرنا موظفو Anthropic
أن استخدام Claude CLI على طريقة OpenClaw مسموح به مجددًا، لذلك يتعامل OpenClaw مع
استخدام `claude -p` بوصفه معتمدًا لهذا التكامل ما لم تنشر Anthropic
سياسة جديدة.
The bundled Anthropic `claude-cli` backend is supported again. Anthropic staff
told us OpenClaw-style Claude CLI usage is allowed again, so OpenClaw treats
`claude -p` usage as sanctioned for this integration unless Anthropic publishes
a new policy.
</Note>
تمرر خلفية OpenAI `codex-cli` المضمنة مطالبة نظام OpenClaw عبر
تجاوز إعداد `model_instructions_file` في Codex (`-c
model_instructions_file="..."`). لا يوفّر Codex علمًا على نمط Claude مثل
`--append-system-prompt`، لذلك يكتب OpenClaw المطالبة المجمعة إلى
ملف مؤقت لكل جلسة Codex CLI جديدة.
The bundled OpenAI `codex-cli` backend passes OpenClaw's system prompt through
Codex's `model_instructions_file` config override (`-c
model_instructions_file="..."`). Codex does not expose a Claude-style
`--append-system-prompt` flag, so OpenClaw writes the assembled prompt to a
temporary file for each fresh Codex CLI session.
تتلقى خلفية Anthropic `claude-cli` المضمنة لقطة Skills الخاصة بـ OpenClaw
بطريقتين: كتالوج Skills المضغوط في OpenClaw ضمن مطالبة النظام الملحقة، و
Plugin مؤقت لـ Claude Code يمرر باستخدام `--plugin-dir`. يحتوي Plugin
فقط على Skills المؤهلة لذلك الوكيل/الجلسة، لذلك يرى محلل Skills الأصلي في Claude Code
المجموعة المصفاة نفسها التي كان OpenClaw سيعلن عنها في
المطالبة. لا تزال تجاوزات مفاتيح env/API الخاصة بالمهارة يطبقها OpenClaw على
بيئة العملية الابنة للتشغيل.
The bundled Anthropic `claude-cli` backend receives the OpenClaw skills snapshot
two ways: the compact OpenClaw skills catalog in the appended system prompt, and
a temporary Claude Code plugin passed with `--plugin-dir`. The plugin contains
only the eligible skills for that agent/session, so Claude Code's native skill
resolver sees the same filtered set that OpenClaw would otherwise advertise in
the prompt. Skill env/API key overrides are still applied by OpenClaw to the
child process environment for the run.
تملك Claude CLI أيضًا وضع أذونات غير تفاعلي خاصًا بها. يربط OpenClaw ذلك
بسياسة التنفيذ الموجودة بدلًا من إضافة إعدادات خاصة بـ Claude: عندما تكون
سياسة التنفيذ المطلوبة الفعالة هي YOLO (`tools.exec.security: "full"` و
`tools.exec.ask: "off"`)، يضيف OpenClaw `--permission-mode bypassPermissions`.
تتجاوز إعدادات `agents.list[].tools.exec` لكل وكيل إعدادات `tools.exec` العامة لذلك
الوكيل. لفرض وضع Claude مختلف، عيّن وسائط خلفية خامًا صريحة
مثل `--permission-mode default` أو `--permission-mode acceptEdits` ضمن
`agents.defaults.cliBackends.claude-cli.args` و`resumeArgs` المطابقة.
Claude CLI also has its own noninteractive permission mode. OpenClaw maps that
to the existing exec policy instead of adding Claude-specific config: when the
effective requested exec policy is YOLO (`tools.exec.security: "full"` and
`tools.exec.ask: "off"`), OpenClaw adds `--permission-mode bypassPermissions`.
Per-agent `agents.list[].tools.exec` settings override global `tools.exec` for
that agent. To force a different Claude mode, set explicit raw backend args
such as `--permission-mode default` or `--permission-mode acceptEdits` under
`agents.defaults.cliBackends.claude-cli.args` and matching `resumeArgs`.
قبل أن يتمكن OpenClaw من استخدام الواجهة الخلفية المضمّنة `claude-cli`، يجب أن يكون Claude Code نفسه
قد سجّل الدخول بالفعل على المضيف نفسه:
The bundled Anthropic `claude-cli` backend also maps OpenClaw `/think` levels
to Claude Code's native `--effort` flag for non-off levels. `minimal` and
`low` map to `low`, `adaptive` and `medium` map to `medium`, and `high`,
`xhigh`, and `max` map directly. Other CLI backends need their owning plugin to
declare an equivalent argv mapper before `/think` can affect the spawned CLI.
Before OpenClaw can use the bundled `claude-cli` backend, Claude Code itself
must already be logged in on the same host:
```bash
claude auth login
@ -194,99 +200,102 @@ claude auth status --text
openclaw models auth login --provider anthropic --method cli --set-default
```
استخدم `agents.defaults.cliBackends.claude-cli.command` فقط عندما لا يكون الملف الثنائي `claude`
موجودًا بالفعل على `PATH`.
Use `agents.defaults.cliBackends.claude-cli.command` only when the `claude`
binary is not already on `PATH`.
## الجلسات
## Sessions
- إذا كان CLI يدعم الجلسات، فاضبط `sessionArg` (مثل `--session-id`) أو
`sessionArgs` (العنصر النائب `{sessionId}`) عندما يجب إدراج المعرّف
في عدة رايات.
- إذا كان CLI يستخدم **أمرًا فرعيًا للاستئناف** برايات مختلفة، فاضبط
`resumeArgs` (يحل محل `args` عند الاستئناف) واختياريًا `resumeOutput`
(للاستئنافات غير JSON).
- If the CLI supports sessions, set `sessionArg` (e.g. `--session-id`) or
`sessionArgs` (placeholder `{sessionId}`) when the ID needs to be inserted
into multiple flags.
- If the CLI uses a **resume subcommand** with different flags, set
`resumeArgs` (replaces `args` when resuming) and optionally `resumeOutput`
(for non-JSON resumes).
- `sessionMode`:
- `always`: أرسل معرّف جلسة دائمًا (UUID جديد إذا لم يكن هناك معرّف مخزّن).
- `existing`: أرسل معرّف جلسة فقط إذا كان قد خُزّن سابقًا.
- `none`: لا ترسل معرّف جلسة أبدًا.
- يستخدم `claude-cli` افتراضيًا `liveSession: "claude-stdio"` و`output: "jsonl"`،
و`input: "stdin"` بحيث تعيد الأدوار اللاحقة استخدام عملية Claude الحية أثناء
نشاطها. أصبح stdio الدافئ هو الوضع الافتراضي الآن، بما في ذلك للتكوينات المخصصة
التي تحذف حقول النقل. إذا أُعيد تشغيل Gateway أو خرجت العملية الخاملة،
يستأنف OpenClaw من معرّف جلسة Claude المخزّن. تُتحقق معرّفات الجلسات المخزّنة
مقابل نص مشروع موجود وقابل للقراءة قبل الاستئناف، لذلك تُمسح الارتباطات الوهمية
باستخدام `reason=transcript-missing` بدلًا من بدء جلسة Claude CLI جديدة بصمت
تحت `--resume`.
- تحتفظ جلسات Claude الحية بحراس محدودة لمخرجات JSONL. تسمح القيم الافتراضية بما يصل إلى
8 ميبيبايت و20,000 سطر JSONL خام لكل دور. يمكن لأدوار Claude كثيفة الأدوات رفعها
لكل واجهة خلفية باستخدام
- `always`: always send a session id (new UUID if none stored).
- `existing`: only send a session id if one was stored before.
- `none`: never send a session id.
- `claude-cli` defaults to `liveSession: "claude-stdio"`, `output: "jsonl"`,
and `input: "stdin"` so follow-up turns reuse the live Claude process while
it is active. Warm stdio is the default now, including for custom configs
that omit transport fields. If the Gateway restarts or the idle process
exits, OpenClaw resumes from the stored Claude session id. Stored session
ids are verified against an existing readable project transcript before
resume, so phantom bindings are cleared with `reason=transcript-missing`
instead of silently starting a fresh Claude CLI session under `--resume`.
- Claude live sessions keep bounded JSONL output guards. Defaults allow up to
8 MiB and 20,000 raw JSONL lines per turn. Tool-heavy Claude turns can raise
them per backend with
`agents.defaults.cliBackends.claude-cli.reliability.outputLimits.maxTurnRawChars`
و`maxTurnLines`؛ يقيّد OpenClaw هذه الإعدادات إلى 64 ميبيبايت و100,000
سطر.
- جلسات CLI المخزّنة هي استمرارية مملوكة للمزوّد. لا يقطعها إعادة ضبط الجلسة
اليومية الضمنية؛ لكن `/reset` وسياسات `session.reset` الصريحة تفعل ذلك.
and `maxTurnLines`; OpenClaw clamps those settings to 64 MiB and 100,000
lines.
- Stored CLI sessions are provider-owned continuity. The implicit daily session
reset does not cut them; `/reset` and explicit `session.reset` policies still
do.
ملاحظات التسلسل:
Serialization notes:
- يحافظ `serialize: true` على ترتيب عمليات التشغيل في المسار نفسه.
- تسلسل معظم أدوات CLI على مسار مزوّد واحد.
- يُسقط OpenClaw إعادة استخدام جلسة CLI المخزّنة عندما تتغير هوية المصادقة المحددة،
بما في ذلك تغيّر معرّف ملف المصادقة، أو مفتاح API ثابت، أو رمز ثابت، أو هوية حساب
OAuth عندما يكشفها CLI. لا تقطع تدويرات رموز وصول OAuth ورموز التحديث جلسة CLI
المخزّنة. إذا لم يكشف CLI عن معرّف حساب OAuth مستقر، يترك OpenClaw لذلك CLI
فرض أذونات الاستئناف.
- `serialize: true` keeps same-lane runs ordered.
- Most CLIs serialize on one provider lane.
- OpenClaw drops stored CLI session reuse when the selected auth identity changes,
including a changed auth profile id, static API key, static token, or OAuth
account identity when the CLI exposes one. OAuth access and refresh token
rotation does not cut the stored CLI session. If a CLI does not expose a
stable OAuth account id, OpenClaw lets that CLI enforce resume permissions.
## تمهيد احتياطي من جلسات claude-cli
## Fallback prelude from claude-cli sessions
عندما تفشل محاولة `claude-cli` وتنتقل إلى مرشح غير CLI في
[`agents.defaults.model.fallbacks`](/ar/concepts/model-failover)، يزرع OpenClaw
المحاولة التالية بتمهيد سياقي مستخرج من نص JSONL المحلي الخاص بـ Claude Code
في `~/.claude/projects/`. بدون هذه البذرة، سيبدأ المزوّد الاحتياطي باردًا لأن نص
جلسة OpenClaw نفسه فارغ لعمليات تشغيل `claude-cli`.
When a `claude-cli` attempt fails over to a non-CLI candidate in
[`agents.defaults.model.fallbacks`](/ar/concepts/model-failover), OpenClaw seeds
the next attempt with a context prelude harvested from Claude Code's local
JSONL transcript at `~/.claude/projects/`. Without this seed, the fallback
provider would start cold because OpenClaw's own session transcript is empty
for `claude-cli` runs.
- يفضّل التمهيد أحدث ملخص `/compact` أو علامة `compact_boundary`،
ثم يضيف أحدث الأدوار بعد الحد حتى ميزانية الأحرف. تُسقط الأدوار قبل الحد لأن
الملخص يمثلها بالفعل.
- تُدمج كتل الأدوات في تلميحات مضغوطة من نوع `(tool call: name)` و
`(tool result: …)` للحفاظ على صدق ميزانية الموجّه. يُوسم الملخص
بـ `(truncated)` إذا تجاوز الحد.
- تعتمد التحويلات الاحتياطية من `claude-cli` إلى `claude-cli` لدى المزوّد نفسه على
`--resume` الخاص بـ Claude وتتخطى التمهيد.
- تعيد البذرة استخدام تحقق مسار ملف جلسة Claude الموجود، لذلك لا يمكن قراءة
مسارات عشوائية.
- The prelude prefers the latest `/compact` summary or `compact_boundary`
marker, then appends the most recent post-boundary turns up to a char
budget. Pre-boundary turns are dropped because the summary already represents
them.
- Tool blocks are coalesced to compact `(tool call: name)` and
`(tool result: …)` hints to keep the prompt budget honest. The summary is
labeled `(truncated)` if it overflows.
- Same-provider `claude-cli` to `claude-cli` fallbacks rely on Claude's own
`--resume` and skip the prelude.
- The seed reuses the existing Claude session-file path validation, so
arbitrary paths cannot be read.
## الصور (تمرير مباشر)
## Images (pass-through)
إذا كان CLI يقبل مسارات الصور، فاضبط `imageArg`:
If your CLI accepts image paths, set `imageArg`:
```json5
imageArg: "--image",
imageMode: "repeat"
```
سيكتب OpenClaw الصور المشفرة base64 إلى ملفات مؤقتة. إذا ضُبط `imageArg`،
تُمرر تلك المسارات كوسيطات CLI. إذا كان `imageArg` مفقودًا، يلحق OpenClaw
مسارات الملفات بالموجّه (حقن المسار)، وهذا كافٍ لأدوات CLI التي تحمّل تلقائيًا
الملفات المحلية من المسارات النصية العادية.
OpenClaw will write base64 images to temp files. If `imageArg` is set, those
paths are passed as CLI args. If `imageArg` is missing, OpenClaw appends the
file paths to the prompt (path injection), which is enough for CLIs that auto-
load local files from plain paths.
## المدخلات / المخرجات
## Inputs / outputs
- يحاول `output: "json"` (الافتراضي) تحليل JSON واستخراج النص + معرّف الجلسة.
- بالنسبة إلى مخرجات Gemini CLI بصيغة JSON، يقرأ OpenClaw نص الرد من `response` و
الاستخدام من `stats` عندما تكون `usage` مفقودة أو فارغة.
- يحلل `output: "jsonl"` تدفقات JSONL (على سبيل المثال Codex CLI `--json`) ويستخرج رسالة الوكيل النهائية إضافة إلى معرّفات الجلسة
عند وجودها.
- يعامل `output: "text"` stdout على أنه الاستجابة النهائية.
- `output: "json"` (default) tries to parse JSON and extract text + session id.
- For Gemini CLI JSON output, OpenClaw reads reply text from `response` and
usage from `stats` when `usage` is missing or empty.
- `output: "jsonl"` parses JSONL streams (for example Codex CLI `--json`) and extracts the final agent message plus session
identifiers when present.
- `output: "text"` treats stdout as the final response.
أوضاع الإدخال:
Input modes:
- يمرر `input: "arg"` (الافتراضي) الموجّه كآخر وسيطة CLI.
- يرسل `input: "stdin"` الموجّه عبر stdin.
- إذا كان الموجّه طويلًا جدًا وكان `maxPromptArgChars` مضبوطًا، يُستخدم stdin.
- `input: "arg"` (default) passes the prompt as the last CLI arg.
- `input: "stdin"` sends the prompt via stdin.
- If the prompt is very long and `maxPromptArgChars` is set, stdin is used.
## القيم الافتراضية (مملوكة للـ Plugin)
## Defaults (plugin-owned)
يسجل Plugin OpenAI المضمّن أيضًا قيمة افتراضية لـ `codex-cli`:
The bundled OpenAI plugin also registers a default for `codex-cli`:
- `command: "codex"`
- `args: ["exec","--json","--color","never","--sandbox","workspace-write","--skip-git-repo-check"]`
@ -297,7 +306,7 @@ imageMode: "repeat"
- `imageArg: "--image"`
- `sessionMode: "existing"`
يسجل Plugin Google المضمّن أيضًا قيمة افتراضية لـ `google-gemini-cli`:
The bundled Google plugin also registers a default for `google-gemini-cli`:
- `command: "gemini"`
- `args: ["--output-format", "json", "--prompt", "{prompt}"]`
@ -308,32 +317,32 @@ imageMode: "repeat"
- `sessionMode: "existing"`
- `sessionIdFields: ["session_id", "sessionId"]`
المتطلب السابق: يجب تثبيت Gemini CLI المحلي وإتاحته باسم
`gemini` على `PATH` (`brew install gemini-cli` أو
Prerequisite: the local Gemini CLI must be installed and available as
`gemini` on `PATH` (`brew install gemini-cli` or
`npm install -g @google/gemini-cli`).
ملاحظات JSON الخاصة بـ Gemini CLI:
Gemini CLI JSON notes:
- يُقرأ نص الرد من حقل JSON المسمى `response`.
- يعود الاستخدام إلى `stats` عندما تكون `usage` غائبة أو فارغة.
- يجري تطبيع `stats.cached` إلى `cacheRead` في OpenClaw.
- إذا كان `stats.input` مفقودًا، يستنتج OpenClaw رموز الإدخال من
- يُقرأ نص الرد من حقل `response` في JSON.
- يتراجع الاستخدام إلى `stats` عندما يكون `usage` غائبًا أو فارغًا.
- تتم تسوية `stats.cached` إلى `cacheRead` في OpenClaw.
- إذا كان `stats.input` مفقودًا، يشتق OpenClaw رموز الإدخال من
`stats.input_tokens - stats.cached`.
لا تتجاوز إلا عند الحاجة (الشائع: مسار `command` مطلق).
تجاوز ذلك فقط عند الحاجة (الشائع: مسار `command` مطلق).
## القيم الافتراضية المملوكة للـ Plugin
## الإعدادات الافتراضية المملوكة للـ Plugin
أصبحت القيم الافتراضية لواجهات CLI الخلفية الآن جزءًا من سطح Plugin:
أصبحت الإعدادات الافتراضية لخلفية CLI الآن جزءًا من سطح الـ Plugin:
- تسجّل Plugins هذه الواجهات باستخدام `api.registerCliBackend(...)`.
- يصبح `id` الخاص بالواجهة الخلفية بادئة المزوّد في مراجع النماذج.
- تظل إعدادات المستخدم في `agents.defaults.cliBackends.<id>` تتجاوز القيمة الافتراضية للـ Plugin.
- يبقى تنظيف الإعدادات الخاصة بالواجهة الخلفية مملوكًا للـ Plugin عبر الخطاف الاختياري
`normalizeConfig`.
- تسجّلها الـ Plugins باستخدام `api.registerCliBackend(...)`.
- يصبح `id` الخاص بالخلفية بادئة المزوّد في مراجع النموذج.
- ما يزال إعداد المستخدم في `agents.defaults.cliBackends.<id>` يتجاوز الإعداد الافتراضي للـ Plugin.
- يبقى تنظيف الإعدادات الخاصة بالخلفية مملوكًا للـ Plugin عبر خطاف
`normalizeConfig` الاختياري.
يمكن للـ Plugins التي تحتاج إلى طبقات توافق صغيرة للمطالبات/الرسائل أن تعلن عن
تحويلات نصية ثنائية الاتجاه من دون استبدال مزوّد أو واجهة CLI خلفية:
يمكن للـ Plugins التي تحتاج إلى رقع توافق صغيرة للمطالبات/الرسائل أن تعلن
تحويلات نصية ثنائية الاتجاه دون استبدال مزوّد أو خلفية CLI:
```typescript
api.registerTextTransforms({
@ -350,63 +359,62 @@ api.registerTextTransforms({
});
```
يعيد `input` كتابة مطالبة النظام ومطالبة المستخدم الممرّرتين إلى CLI. يعيد `output`
كتابة دلتا المساعد المتدفقة والنص النهائي المحلّل قبل أن يتعامل OpenClaw مع
يعيد `input` كتابة مطالبة النظام ومطالبة المستخدم الممررتين إلى CLI. يعيد `output`
كتابة فروقات المساعد المتدفقة والنص النهائي المحلل قبل أن يتعامل OpenClaw مع
علامات التحكم الخاصة به وتسليم القناة.
بالنسبة إلى واجهات CLI التي تصدر JSONL متوافقًا مع Claude Code stream-json، اضبط
`jsonlDialect: "claude-stream-json"` في إعدادات تلك الواجهة الخلفية.
بالنسبة إلى واجهات CLI التي تُصدر JSONL متوافقًا مع Claude Code stream-json، عيّن
`jsonlDialect: "claude-stream-json"` في إعدادات تلك الخلفية.
## طبقات MCP المضمّنة
## تراكبات MCP المضمّنة
لا تتلقى واجهات CLI الخلفية استدعاءات أدوات OpenClaw مباشرة، لكن يمكن للواجهة الخلفية
اختيار استخدام طبقة إعداد MCP مولّدة عبر `bundleMcp: true`.
لا تتلقى خلفيات CLI استدعاءات أدوات OpenClaw مباشرة، لكن يمكن للخلفية
الاشتراك في تراكب إعداد MCP مولّد باستخدام `bundleMcp: true`.
السلوك المضمّن الحالي:
- `claude-cli`: ملف إعداد MCP صارم مولّد
- `codex-cli`: تجاوزات إعداد مضمنة لـ `mcp_servers`؛ يتم تعليم خادم
OpenClaw loopback المولّد بوضع موافقة الأدوات لكل خادم في Codex
- `codex-cli`: تجاوزات إعداد مضمّنة لـ `mcp_servers`؛ يُعلّم خادم OpenClaw المحلي المولّد بوضع موافقة الأدوات لكل خادم في Codex
حتى لا تتوقف استدعاءات MCP بسبب مطالبات الموافقة المحلية
- `google-gemini-cli`: ملف إعدادات نظام Gemini مولّد
عند تمكين MCP المضمّن، يقوم OpenClaw بما يلي:
عند تفعيل MCP المضمّن، يقوم OpenClaw بما يلي:
- يشغّل خادم HTTP MCP loopback يعرّض أدوات Gateway لعملية CLI
- يصادق على الجسر باستخدام رمز مميز لكل جلسة (`OPENCLAW_MCP_TOKEN`)
- يقيّد الوصول إلى الأدوات بسياق الجلسة والحساب والقناة الحالي
- يشغّل خادم HTTP MCP محليًا يعرض أدوات Gateway لعملية CLI
- يصادق الجسر باستخدام رمز مميز لكل جلسة (`OPENCLAW_MCP_TOKEN`)
- يقيّد الوصول إلى الأدوات بنطاق الجلسة والحساب وسياق القناة الحالي
- يحمّل خوادم bundle-MCP المفعّلة لمساحة العمل الحالية
- يدمجها مع أي شكل قائم لإعدادات/تكوين MCP الخاص بالواجهة الخلفية
- يعيد كتابة إعداد التشغيل باستخدام وضع التكامل المملوك للواجهة الخلفية من الامتداد المالك
- يدمجها مع أي شكل إعداد/ضبط MCP موجود للخلفية
- يعيد كتابة إعداد التشغيل باستخدام نمط التكامل المملوك للخلفية من الامتداد المالك
إذا لم تكن أي خوادم MCP مفعّلة، فسيظل OpenClaw يحقن إعدادًا صارمًا عندما تختار
واجهة خلفية استخدام MCP المضمّن حتى تبقى عمليات التشغيل في الخلفية معزولة.
إذا لم تكن أي خوادم MCP مفعّلة، يظل OpenClaw يحقن إعدادًا صارمًا عندما
تشترك خلفية في MCP المضمّن حتى تبقى عمليات التشغيل الخلفية معزولة.
تُخزَّن أوقات تشغيل MCP المضمّنة محددة الجلسة مؤقتًا لإعادة استخدامها داخل الجلسة، ثم
تُزال بعد `mcp.sessionIdleTtlMs` مللي ثانية من وقت الخمول (الافتراضي 10
دقائق؛ اضبط `0` للتعطيل). تطلب عمليات التشغيل المضمّنة أحادية الاستخدام مثل فحوصات المصادقة،
وتوليد المعرّفات، واستدعاء Active Memory التنظيف عند نهاية التشغيل حتى لا تبقى
عمليات stdio الفرعية وتدفّقات Streamable HTTP/SSE بعد انتهاء التشغيل.
تُخزّن أوقات تشغيل MCP المضمّنة ذات نطاق الجلسة مؤقتًا لإعادة استخدامها ضمن الجلسة، ثم
تُحصد بعد `mcp.sessionIdleTtlMs` مللي ثانية من الخمول (الافتراضي 10
دقائق؛ عيّن `0` للتعطيل). تطلب عمليات التشغيل المضمّنة لمرة واحدة مثل مجسات المصادقة،
وتوليد slug، واستدعاء active-memory التنظيف عند نهاية التشغيل حتى لا تستمر
عمليات stdio الفرعية وتدفقات Streamable HTTP/SSE بعد انتهاء التشغيل.
## القيود
- **لا توجد استدعاءات مباشرة لأدوات OpenClaw.** لا يحقن OpenClaw استدعاءات الأدوات في
بروتوكول واجهة CLI الخلفية. لا ترى الواجهات الخلفية أدوات Gateway إلا عندما تختار
بروتوكول خلفية CLI. لا ترى الخلفيات أدوات Gateway إلا عندما تشترك في
`bundleMcp: true`.
- **البث خاص بالواجهة الخلفية.** تبث بعض الواجهات الخلفية JSONL؛ بينما تقوم أخرى بالتخزين المؤقت
- **البث خاص بكل خلفية.** تبث بعض الخلفيات JSONL؛ وتخزّن أخرى مؤقتًا
حتى الخروج.
- **المخرجات المهيكلة** تعتمد على تنسيق JSON الخاص بـ CLI.
- **جلسات Codex CLI** تُستأنف عبر المخرجات النصية (لا JSONL)، وهو أقل
هيكلة من التشغيل الأولي باستخدام `--json`. تظل جلسات OpenClaw تعمل
- **المخرجات المنظّمة** تعتمد على تنسيق JSON الخاص بواجهة CLI.
- **جلسات Codex CLI** تستأنف عبر إخراج نصي (بدون JSONL)، وهذا أقل
تنظيمًا من تشغيل `--json` الأولي. ما تزال جلسات OpenClaw تعمل
بشكل طبيعي.
## استكشاف الأخطاء وإصلاحها
- **لم يتم العثور على CLI**: اضبط `command` على مسار كامل.
- **اسم النموذج غير صحيح**: استخدم `modelAliases` لربط `provider/model` → نموذج CLI.
- **لا توجد استمرارية للجلسة**: تأكد من ضبط `sessionArg` وأن `sessionMode` ليس
`none` (لا يستطيع Codex CLI حاليًا الاستئناف مع مخرجات JSON).
- **تم تجاهل الصور**: اضبط `imageArg` (وتحقق من أن CLI يدعم مسارات الملفات).
- **لم يتم العثور على CLI**: عيّن `command` إلى مسار كامل.
- **اسم نموذج خاطئ**: استخدم `modelAliases` لربط `provider/model` → نموذج CLI.
- **لا توجد استمرارية للجلسة**: تأكد من تعيين `sessionArg` وأن `sessionMode` ليس
`none` (لا يستطيع Codex CLI حاليًا الاستئناف بإخراج JSON).
- **تم تجاهل الصور**: عيّن `imageArg` (وتحقق من أن CLI يدعم مسارات الملفات).
## ذو صلة

View File

@ -1,35 +1,35 @@
---
read_when:
- تشغيل مصفوفة النماذج الحية / الواجهة الخلفية لـ CLI / ACP / اختبارات الدخان لموفّر الوسائط
- استكشاف أخطاء حل بيانات اعتماد الاختبارات المباشرة وإصلاحها
- إضافة اختبار مباشر جديد خاص بموفّر
- تشغيل اختبارات سلامة أولية مباشرة لمصفوفة النماذج / الواجهة الخلفية لـ CLI / ACP / موفّر الوسائط
- استكشاف أخطاء حلّ بيانات اعتماد الاختبارات الحية وإصلاحها
- إضافة اختبار مباشر جديد خاص بمزوّد خدمة
sidebarTitle: Live tests
summary: 'الاختبارات الحية (التي تتعامل مع الشبكة): مصفوفة النماذج، واجهات CLI الخلفية، ACP، موفرو الوسائط، بيانات الاعتماد'
title: 'الاختبار: مجموعات الاختبار الحية'
summary: 'اختبارات مباشرة (تتصل بالشبكة): مصفوفة النماذج، واجهات CLI الخلفية، ACP، موفرو الوسائط، بيانات الاعتماد'
title: 'الاختبار: مجموعات الاختبار المباشرة'
x-i18n:
generated_at: "2026-05-03T07:33:11Z"
generated_at: "2026-05-04T18:23:57Z"
model: gpt-5.5
provider: openai
source_hash: 4057d8875fa3404108e89e4381c1dd14e96abbc2af13c4934fc6c0dbf878fc00
source_hash: 03b8ca6348137a55c8d5f67c9c166a130a75a744f6a433cb00496756b29d7016
source_path: help/testing-live.md
workflow: 16
---
للبدء السريع، ومشغلات ضمان الجودة، ومجموعات اختبارات الوحدة/التكامل، وتدفقات Docker، راجع
[الاختبار](/ar/help/testing). تغطي هذه الصفحة مجموعات الاختبار **الحية** (التي تلامس الشبكة):
مصفوفة النماذج، وخلفيات CLI، وACP، واختبارات موفري الوسائط الحية، بالإضافة إلى
للبداية السريعة، ومشغلات QA، ومجموعات اختبارات الوحدة/التكامل، وتدفقات Docker، راجع
[الاختبار](/ar/help/testing). تغطي هذه الصفحة مجموعات الاختبار **المباشرة** (التي تلامس الشبكة):
مصفوفة النماذج، وخلفيات CLI، وACP، واختبارات موفري الوسائط المباشرة، بالإضافة إلى
التعامل مع بيانات الاعتماد.
## حي: أوامر فحص الدخان للملف المحلي
## مباشر: أوامر اختبار دخان الملفات الشخصية المحلية
حمّل `~/.profile` قبل الفحوصات الحية الارتجالية حتى تتطابق مفاتيح الموفرين ومسارات الأدوات
المحلية مع صدفتك:
استورد `~/.profile` قبل الفحوصات المباشرة المخصصة حتى تتطابق مفاتيح الموفرين ومسارات الأدوات المحلية
مع صدفتك:
```bash
source ~/.profile
```
فحص دخان آمن للوسائط:
اختبار دخان آمن للوسائط:
```bash
pnpm openclaw infer tts convert --local --json \
@ -37,28 +37,28 @@ pnpm openclaw infer tts convert --local --json \
--output /tmp/openclaw-live-smoke.mp3
```
فحص دخان آمن لجاهزية المكالمات الصوتية:
اختبار دخان آمن لجاهزية مكالمة صوتية:
```bash
pnpm openclaw voicecall setup --json
pnpm openclaw voicecall smoke --to "+15555550123"
```
`voicecall smoke` تشغيل تجريبي جاف ما لم يكن `--yes` موجودًا أيضًا. استخدم `--yes` فقط
`voicecall smoke` تشغيل تجريبي ما لم يكن `--yes` موجودًا أيضًا. استخدم `--yes` فقط
عندما تريد عمدًا إجراء مكالمة إشعار حقيقية. بالنسبة إلى Twilio وTelnyx و
Plivo، يتطلب فحص الجاهزية الناجح عنوان URL عامًا لـ Webhook؛ ويتم رفض بدائل
local loopback/الخاصة المحلية حسب التصميم.
Plivo، يتطلب فحص الجاهزية الناجح عنوان Webhook URL عامًا؛ يتم رفض بدائل
local loopback/الخاصة محليًا حسب التصميم.
## حي: مسح قدرات Node Android
## مباشر: مسح قدرات Node Android
- الاختبار: `src/gateway/android-node.capabilities.live.test.ts`
- السكربت: `pnpm android:test:integration`
- الهدف: استدعاء **كل أمر مُعلن عنه حاليًا** بواسطة Node Android متصل والتحقق من سلوك عقد الأمر.
- الهدف: استدعاء **كل أمر معلن حاليًا** بواسطة Node Android متصلة والتحقق من سلوك عقد الأمر.
- النطاق:
- إعداد مسبق/يدوي (لا تثبت المجموعة التطبيق أو تشغله أو تقرنه).
- تحقق Gateway `node.invoke` لكل أمر على حدة لـ Node Android المحدد.
- إعداد مسبق/يدوي مشروط (لا تقوم المجموعة بتثبيت/تشغيل/إقران التطبيق).
- تحقق Gateway `node.invoke` أمرًا بأمر لـ Node Android المحددة.
- الإعداد المسبق المطلوب:
- تطبيق Android متصل ومقترن بالفعل بـ Gateway.
- تطبيق Android متصل ومقترن بالفعل مع Gateway.
- إبقاء التطبيق في المقدمة.
- منح الأذونات/موافقة الالتقاط للقدرات التي تتوقع نجاحها.
- تجاوزات الهدف الاختيارية:
@ -66,73 +66,73 @@ local loopback/الخاصة المحلية حسب التصميم.
- `OPENCLAW_ANDROID_GATEWAY_URL` / `OPENCLAW_ANDROID_GATEWAY_TOKEN` / `OPENCLAW_ANDROID_GATEWAY_PASSWORD`.
- تفاصيل إعداد Android الكاملة: [تطبيق Android](/ar/platforms/android)
## حي: فحص دخان النماذج (مفاتيح الملف الشخصي)
## مباشر: اختبار دخان النماذج (مفاتيح الملفات الشخصية)
تنقسم الاختبارات الحية إلى طبقتين حتى نتمكن من عزل الإخفاقات:
تنقسم الاختبارات المباشرة إلى طبقتين حتى نتمكن من عزل حالات الفشل:
- "النموذج المباشر" يخبرنا أن الموفر/النموذج يستطيع الإجابة أصلًا باستخدام المفتاح المحدد.
- "فحص دخان Gateway" يخبرنا أن مسار Gateway+الوكيل الكامل يعمل لذلك النموذج (الجلسات، السجل، الأدوات، سياسة صندوق العزل، إلخ).
- "النموذج المباشر" يخبرنا ما إذا كان الموفر/النموذج يستطيع الإجابة أصلًا باستخدام المفتاح المعطى.
- "اختبار دخان Gateway" يخبرنا ما إذا كان مسار Gateway+الوكيل الكامل يعمل لذلك النموذج (الجلسات، السجل، الأدوات، سياسة صندوق العزل، وما إلى ذلك).
### الطبقة 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`، كاسم مستعار للحديثة) لتشغيل هذه المجموعة فعليًا؛ وإلا فستتخطاها لإبقاء `pnpm test:live` مركزًا على فحص دخان Gateway
- اضبط `OPENCLAW_LIVE_MODELS=modern` (أو `all`، وهو اسم بديل لـ modern) لتشغيل هذه المجموعة فعليًا؛ وإلا فإنها تتخطى للحفاظ على تركيز `pnpm test:live` على اختبار دخان Gateway
- كيفية اختيار النماذج:
- `OPENCLAW_LIVE_MODELS=modern` لتشغيل قائمة السماح الحديثة (Opus/Sonnet 4.6+، GPT-5.2 + Codex، Gemini 3، DeepSeek V4، GLM 4.7، MiniMax M2.7، Grok 4.3)
- `OPENCLAW_LIVE_MODELS=all` اسم مستعار لقائمة السماح الحديثة
- `OPENCLAW_LIVE_MODELS=all` هو اسم بديل لقائمة السماح الحديثة
- أو `OPENCLAW_LIVE_MODELS="openai/gpt-5.5,openai-codex/gpt-5.5,anthropic/claude-opus-4-6,..."` (قائمة سماح مفصولة بفواصل)
- افتراضيًا، تستخدم مسوحات الحديثة/الكل حدًا منتقى عالي الإشارة؛ اضبط `OPENCLAW_LIVE_MAX_MODELS=0` لمسح حديث شامل أو رقمًا موجبًا لحد أصغر.
- تستخدم المسوحات الشاملة `OPENCLAW_LIVE_TEST_TIMEOUT_MS` كمهلة اختبار النموذج المباشر بالكامل. الافتراضي: 60 دقيقة.
- تعمل مجسات النموذج المباشر بتوازٍ من 20 مسارًا افتراضيًا؛ اضبط `OPENCLAW_LIVE_MODEL_CONCURRENCY` للتجاوز.
- تعتمد عمليات المسح الحديثة/الكل حدًا افتراضيًا منسقًا عالي الإشارة؛ اضبط `OPENCLAW_LIVE_MAX_MODELS=0` لمسح حديث شامل أو رقمًا موجبًا لحد أصغر.
- تستخدم عمليات المسح الشاملة `OPENCLAW_LIVE_TEST_TIMEOUT_MS` لمهلة اختبار النموذج المباشر بالكامل. الافتراضي: 60 دقيقة.
- تعمل مجسات النموذج المباشر بتوازٍ من 20 مهمة افتراضيًا؛ اضبط `OPENCLAW_LIVE_MODEL_CONCURRENCY` للتجاوز.
- كيفية اختيار الموفرين:
- `OPENCLAW_LIVE_PROVIDERS="google,google-antigravity,google-gemini-cli"` (قائمة سماح مفصولة بفواصل)
- من أين تأتي المفاتيح:
- افتراضيًا: مخزن الملف الشخصي وبدائل البيئة
- اضبط `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` لفرض **مخزن الملف الشخصي** فقط
- سبب وجود هذا:
- يفصل "واجهة API للموفر معطلة / المفتاح غير صالح" عن "مسار وكيل Gateway معطل"
- يحتوي انحدارات صغيرة ومعزولة (مثال: إعادة تشغيل استدلال OpenAI Responses/Codex Responses + تدفقات استدعاء الأدوات)
- افتراضيًا: مخزن الملفات الشخصية وبدائل البيئة
- اضبط `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` لفرض **مخزن الملفات الشخصية** فقط
- لماذا يوجد هذا:
- يفصل بين "واجهة API الخاصة بالموفر معطلة / المفتاح غير صالح" و"مسار وكيل Gateway معطل"
- يحتوي على انحدارات صغيرة ومعزولة (مثال: إعادة تشغيل الاستدلال في OpenAI Responses/Codex Responses + تدفقات استدعاء الأدوات)
### الطبقة 2: فحص دخان Gateway + وكيل التطوير (ما يفعله "@openclaw" فعليًا)
### الطبقة 2: اختبار دخان Gateway + وكيل التطوير (ما يفعله "@openclaw" فعليًا)
- الاختبار: `src/gateway/gateway-models.profiles.live.test.ts`
- الهدف:
- تشغيل Gateway داخل العملية
- إنشاء/ترقيع جلسة `agent:dev:*` (تجاوز النموذج لكل تشغيل)
- التكرار عبر النماذج ذات المفاتيح والتحقق من:
- استجابة "ذات معنى" (دون أدوات)
- عمل استدعاء أداة حقيقي (مسبار قراءة)
- مجسات أدوات إضافية اختيارية (مسبار تنفيذ+قراءة)
- تكرار النماذج ذات المفاتيح والتحقق من:
- استجابة "ذات معنى" (بدون أدوات)
- عمل استدعاء أداة حقيقي (مجس قراءة)
- مجسات أدوات إضافية اختيارية (مجس تنفيذ+قراءة)
- استمرار عمل مسارات انحدار OpenAI (استدعاء أداة فقط → متابعة)
- تفاصيل المجسات (حتى تتمكن من شرح الإخفاقات بسرعة):
- مسبار `read`: يكتب الاختبار ملف nonce في مساحة العمل ويطلب من الوكيل `read` قراءته وترديد nonce مرة أخرى.
- مسبار `exec+read`: يطلب الاختبار من الوكيل استخدام `exec` لكتابة nonce في ملف مؤقت، ثم `read` لقراءته مرة أخرى.
- مسبار الصورة: يرفق الاختبار صورة PNG مولدة (cat + رمز عشوائي) ويتوقع من النموذج إرجاع `cat <CODE>`.
- تفاصيل المجسات (حتى تتمكن من شرح حالات الفشل بسرعة):
- مجس `read`: يكتب الاختبار ملف nonce في مساحة العمل ويطلب من الوكيل `read` قراءته وإرجاع nonce.
- مجس `exec+read`: يطلب الاختبار من الوكيل كتابة nonce باستخدام `exec` في ملف مؤقت، ثم `read` قراءته مرة أخرى.
- مجس الصورة: يرفق الاختبار ملف PNG مولدًا (قطة + رمز عشوائي) ويتوقع من النموذج إرجاع `cat <CODE>`.
- مرجع التنفيذ: `src/gateway/gateway-models.profiles.live.test.ts` و`src/gateway/live-image-probe.ts`.
- كيفية التفعيل:
- `pnpm test:live` (أو `OPENCLAW_LIVE_TEST=1` إذا كنت تستدعي Vitest مباشرة)
- كيفية اختيار النماذج:
- الافتراضي: قائمة السماح الحديثة (Opus/Sonnet 4.6+، GPT-5.2 + Codex، Gemini 3، DeepSeek V4، GLM 4.7، MiniMax M2.7، Grok 4.3)
- `OPENCLAW_LIVE_GATEWAY_MODELS=all` اسم مستعار لقائمة السماح الحديثة
- `OPENCLAW_LIVE_GATEWAY_MODELS=all` هو اسم بديل لقائمة السماح الحديثة
- أو اضبط `OPENCLAW_LIVE_GATEWAY_MODELS="provider/model"` (أو قائمة مفصولة بفواصل) للتضييق
- افتراضيًا، تستخدم مسوحات Gateway الحديثة/الكل حدًا منتقى عالي الإشارة؛ اضبط `OPENCLAW_LIVE_GATEWAY_MAX_MODELS=0` لمسح حديث شامل أو رقمًا موجبًا لحد أصغر.
- كيفية اختيار الموفرين (تجنب "كل شيء عبر OpenRouter"):
- تعتمد عمليات مسح Gateway الحديثة/الكل حدًا افتراضيًا منسقًا عالي الإشارة؛ اضبط `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`)
- مجسات الأدوات + الصور مفعلة دائمًا في هذا الاختبار المباشر:
- مجس `read` + مجس `exec+read` (ضغط الأدوات)
- يعمل مجس الصورة عندما يعلن النموذج دعم إدخال الصور
- التدفق (مستوى عالٍ):
- يولد الاختبار ملف PNG صغيرًا يحتوي على "CAT" + رمز عشوائي (`src/gateway/live-image-probe.ts`)
- يرسله عبر `agent` `attachments: [{ mimeType: "image/png", content: "<base64>" }]`
- يحلل Gateway المرفقات إلى `images[]` (`src/gateway/server-methods/agent.ts` + `src/gateway/chat-attachments.ts`)
- يمرر الوكيل المضمن رسالة مستخدم متعددة الوسائط إلى النموذج
- التأكيد: يحتوي الرد على `cat` + الرمز (تسامح OCR: يُسمح بأخطاء طفيفة)
- التحقق: يحتوي الرد على `cat` + الرمز (تحمل OCR: مسموح بأخطاء طفيفة)
<Tip>
لمعرفة ما يمكنك اختباره على جهازك (ومعرفات `provider/model` الدقيقة)، شغّل:
@ -144,27 +144,27 @@ openclaw models list --json
</Tip>
## حي: فحص دخان خلفية CLI (Claude أو Codex أو Gemini أو غيرها من CLIs المحلية)
## مباشر: اختبار دخان خلفية CLI (Claude أو Codex أو Gemini أو CLIs محلية أخرى)
- الاختبار: `src/gateway/gateway-cli-backend.live.test.ts`
- الهدف: التحقق من مسار Gateway + الوكيل باستخدام خلفية CLI محلية، دون لمس إعداداتك الافتراضية.
- تعيش افتراضيات فحص الدخان الخاصة بالخلفية مع تعريف `cli-backend.ts` الخاص بالـ Plugin المالك.
- الهدف: التحقق من مسار Gateway + الوكيل باستخدام خلفية CLI محلية، دون لمس تكوينك الافتراضي.
- تعيش افتراضيات اختبار الدخان الخاصة بكل خلفية مع تعريف `cli-backend.ts` الخاص بالامتداد المالك.
- التفعيل:
- `pnpm test:live` (أو `OPENCLAW_LIVE_TEST=1` إذا كنت تستدعي Vitest مباشرة)
- `OPENCLAW_LIVE_CLI_BACKEND=1`
- الافتراضيات:
- الموفر/النموذج الافتراضي: `claude-cli/claude-sonnet-4-6`
- يأتي سلوك الأمر/الوسائط/الصورة من بيانات تعريف Plugin خلفية CLI المالكة.
- يأتي سلوك الأمر/الوسائط/الصورة من بيانات Plugin الخلفية المالكة لـ CLI.
- التجاوزات (اختيارية):
- `OPENCLAW_LIVE_CLI_BACKEND_MODEL="codex-cli/gpt-5.5"`
- `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` لإرسال مرفق صورة حقيقي (تُحقن المسارات في الموجه). تعطل وصفات Docker هذا افتراضيًا ما لم يُطلب صراحة.
- `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=1` للاشتراك في مسبار استمرارية الجلسة نفسها Claude Sonnet -> Opus عندما يدعم النموذج المحدد هدف تبديل. تعطل وصفات Docker هذا افتراضيًا من أجل موثوقية التجميع.
- `OPENCLAW_LIVE_CLI_BACKEND_MCP_PROBE=1` للاشتراك في مسبار MCP/الأدوات عبر local loopback. تعطل وصفات Docker هذا افتراضيًا ما لم يُطلب صراحة.
- `OPENCLAW_LIVE_CLI_BACKEND_IMAGE_MODE="repeat"` (أو `"list"`) للتحكم في كيفية تمرير وسائط الصور عند تعيين `IMAGE_ARG`.
- `OPENCLAW_LIVE_CLI_BACKEND_RESUME_PROBE=1` لإرسال دور ثانٍ والتحقق من تدفق الاستئناف.
- `OPENCLAW_LIVE_CLI_BACKEND_MODEL_SWITCH_PROBE=1` للاشتراك في مجس استمرارية الجلسة نفسها من Claude Sonnet -> Opus عندما يدعم النموذج المحدد هدف تبديل. تعطل وصفات Docker هذا افتراضيًا من أجل موثوقية التجميع.
- `OPENCLAW_LIVE_CLI_BACKEND_MCP_PROBE=1` للاشتراك في مجس MCP/الأداة عبر local loopback. تعطل وصفات Docker هذا افتراضيًا ما لم يُطلب صراحة.
مثال:
@ -174,17 +174,17 @@ OPENCLAW_LIVE_CLI_BACKEND=1 \
pnpm test:live src/gateway/gateway-cli-backend.live.test.ts
```
فحص دخان رخيص لإعداد Gemini MCP:
اختبار دخان رخيص لتكوين Gemini MCP:
```bash
OPENCLAW_LIVE_TEST=1 \
pnpm test:live src/agents/cli-runner/bundle-mcp.gemini.live.test.ts
```
هذا لا يطلب من Gemini توليد استجابة. يكتب إعدادات النظام نفسها
التي يعطيها OpenClaw لـ Gemini، ثم يشغل `gemini --debug mcp list` لإثبات أن خادم
`transport: "streamable-http"` المحفوظ يُطبّع إلى هيئة HTTP MCP الخاصة بـ Gemini
ويمكنه الاتصال بخادم MCP محلي يعمل عبر streamable-HTTP.
هذا لا يطلب من Gemini توليد استجابة. يكتب إعدادات النظام نفسها التي
يعطيها OpenClaw إلى Gemini، ثم يشغل `gemini --debug mcp list` لإثبات أن خادم
`transport: "streamable-http"` المحفوظ يتم تطبيعه إلى شكل MCP HTTP الخاص بـ Gemini
ويمكنه الاتصال بخادم MCP محلي قابل للبث عبر HTTP.
وصفة Docker:
@ -204,26 +204,35 @@ pnpm test:docker:live-cli-backend:gemini
ملاحظات:
- يوجد مشغل Docker في `scripts/test-live-cli-backend-docker.sh`.
- يشغل فحص دخان خلفية CLI الحي داخل صورة Docker للمستودع كمستخدم `node` غير جذر.
- يحل بيانات تعريف فحص دخان CLI من Plugin المالك، ثم يثبت حزمة CLI المناسبة لـ Linux (`@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 يوجه حاليًا استخدام تطبيقات الطرف الثالث عبر فوترة استخدام إضافية بدلًا من حدود خطة الاشتراك العادية.
- يمارس فحص دخان خلفية CLI الحي الآن التدفق نفسه من البداية إلى النهاية لـ Claude وCodex وGemini: دورة نصية، ودورة تصنيف صورة، ثم استدعاء أداة MCP `cron` متحقق منه عبر CLI Gateway.
- يقوم فحص دخان Claude الافتراضي أيضًا بترقيع الجلسة من Sonnet إلى Opus ويتحقق من أن الجلسة المستأنفة ما زالت تتذكر ملاحظة سابقة.
- يشغل اختبار دخان خلفية CLI المباشر داخل صورة Docker الخاصة بالمستودع كمستخدم `node` غير جذري.
- يحل بيانات اختبار دخان 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` اشتراك Claude Code OAuth قابلًا للنقل عبر إما `~/.claude/.credentials.json` مع `claudeAiOauth.subscriptionType` أو `CLAUDE_CODE_OAUTH_TOKEN` من `claude setup-token`. يثبت أولًا تشغيل `claude -p` المباشر في Docker، ثم يشغل دورتين لخلفية Gateway CLI دون الحفاظ على متغيرات بيئة مفتاح Anthropic API. يعطل مسار الاشتراك هذا مجسات Claude MCP/الأداة والصورة افتراضيًا لأن Claude يوجه حاليًا استخدام تطبيقات الجهات الخارجية عبر فوترة استخدام إضافي بدلًا من حدود خطة الاشتراك العادية.
- يختبر اختبار دخان خلفية CLI المباشر الآن التدفق الكامل نفسه لـ Claude وCodex وGemini: دور نصي، ثم دور تصنيف صورة، ثم استدعاء أداة MCP `cron` يتم التحقق منه عبر Gateway CLI.
- يرقع اختبار الدخان الافتراضي لـ Claude أيضًا الجلسة من Sonnet إلى Opus ويتحقق من أن الجلسة المستأنفة لا تزال تتذكر ملاحظة سابقة.
## حي: فحص دخان ربط ACP (`/acp spawn ... --bind here`)
## مباشر: قابلية وصول وكيل APNs HTTP/2
- الاختبار: `src/infra/push-apns-http2.live.test.ts`
- الهدف: إنشاء نفق عبر وكيل HTTP CONNECT محلي إلى نقطة نهاية APNs الخاصة بصندوق عزل Apple، وإرسال طلب تحقق APNs HTTP/2، والتحقق من عودة استجابة Apple الحقيقية `403 InvalidProviderToken` عبر مسار الوكيل.
- التفعيل:
- `OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_APNS_REACHABILITY=1 pnpm test:live src/infra/push-apns-http2.live.test.ts`
- مهلة اختيارية:
- `OPENCLAW_LIVE_APNS_TIMEOUT_MS=30000`
## مباشر: اختبار دخان ربط ACP (`/acp spawn ... --bind here`)
- الاختبار: `src/gateway/gateway-acp-bind.live.test.ts`
- الهدف: التحقق من تدفق ربط محادثة ACP الحقيقي باستخدام وكيل ACP مباشر:
- أرسل `/acp spawn <agent> --bind here`
- اربط محادثة قناة رسائل اصطناعية في مكانها
- أرسل متابعة عادية في المحادثة نفسها
- تحقق من أن المتابعة تصل إلى نص جلسة ACP المرتبطة
- الهدف: التحقق من تدفق ربط محادثة ACP الحقيقي مع وكيل ACP حي:
- إرسال `/acp spawn <agent> --bind here`
- ربط محادثة قناة رسائل اصطناعية في مكانها
- إرسال متابعة عادية في المحادثة نفسها
- التحقق من وصول المتابعة إلى نص جلسة 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`
- وكيل ACP للتشغيل المباشر `pnpm test:live ...`: `claude`
- القناة الاصطناعية: سياق محادثة بنمط رسالة مباشرة في Slack
- خلفية ACP: `acpx`
- التجاوزات:
@ -240,9 +249,9 @@ pnpm test:docker:live-cli-backend:gemini
- `OPENCLAW_LIVE_ACP_BIND_REQUIRE_CRON=1`
- `OPENCLAW_LIVE_ACP_BIND_PARENT_MODEL=openai/gpt-5.5`
- ملاحظات:
- يستخدم هذا المسار سطح Gateway `chat.send` مع حقول مسار منشأ اصطناعية مخصّصة للمشرفين فقط، بحيث يمكن للاختبارات إرفاق سياق قناة الرسائل من دون التظاهر بالتسليم خارجياً.
- عند عدم ضبط `OPENCLAW_LIVE_ACP_BIND_AGENT_COMMAND`، يستخدم الاختبار سجل الوكلاء المدمج في Plugin `acpx` المضمن لوكيل حزمة اختبار ACP المحدد.
- إنشاء MCP الخاص بـ Cron للجلسة المرتبطة يكون بأفضل جهد افتراضياً، لأن حزم اختبار ACP الخارجية يمكن أن تلغي استدعاءات MCP بعد نجاح إثبات الربط/الصورة؛ اضبط `OPENCLAW_LIVE_ACP_BIND_REQUIRE_CRON=1` لجعل فحص Cron اللاحق للربط صارماً.
- يستخدم هذا المسار سطح Gateway `chat.send` مع حقول مسار منشأ اصطناعية مخصصة للمسؤول فقط، بحيث يمكن للاختبارات إرفاق سياق قناة الرسائل من دون التظاهر بالتسليم خارجيًا.
- عندما لا يكون `OPENCLAW_LIVE_ACP_BIND_AGENT_COMMAND` معينًا، يستخدم الاختبار سجل الوكلاء المدمج في Plugin `acpx` المضمن لوكيل ACP المختار للتسخير.
- إنشاء MCP الخاص بـ Cron للجلسة المرتبطة هو أفضل جهد افتراضيًا لأن تسخيرات ACP الخارجية يمكن أن تلغي استدعاءات MCP بعد نجاح إثبات الربط/الصورة؛ عيّن `OPENCLAW_LIVE_ACP_BIND_REQUIRE_CRON=1` لجعل فحص Cron بعد الربط صارمًا.
مثال:
@ -270,37 +279,37 @@ pnpm test:docker:live-acp-bind:opencode
ملاحظات Docker:
- مشغّل Docker موجود في `scripts/test-live-acp-bind-docker.sh`.
- افتراضياً، يشغّل فحص ACP bind smoke على وكلاء CLI المباشرين المجمّعين بالتسلسل: `claude`، ثم `codex`، ثم `gemini`.
- استخدم `OPENCLAW_LIVE_ACP_BIND_AGENTS=claude` أو `OPENCLAW_LIVE_ACP_BIND_AGENTS=codex` أو `OPENCLAW_LIVE_ACP_BIND_AGENTS=droid` أو `OPENCLAW_LIVE_ACP_BIND_AGENTS=gemini` أو `OPENCLAW_LIVE_ACP_BIND_AGENTS=opencode` لتضييق المصفوفة.
- يحمّل `~/.profile`، ويجهّز مادة مصادقة CLI المطابقة داخل الحاوية، ثم يثبت CLI المباشر المطلوب (`@anthropic-ai/claude-code` أو `@openai/codex` أو Factory Droid عبر `https://app.factory.ai/cli` أو `@google/gemini-cli` أو `opencode-ai`) إذا كان مفقوداً. خلفية ACP نفسها هي حزمة `acpx/runtime` المدمجة من Plugin `acpx` الرسمي.
- متغير Docker الخاص بـ Droid يجهّز `~/.factory` للإعدادات، ويمرر `FACTORY_API_KEY`، ويتطلب مفتاح API هذا لأن مصادقة Factory OAuth/keyring المحلية غير قابلة للنقل إلى الحاوية. يستخدم إدخال السجل المدمج في ACPX وهو `droid exec --output-format acp`.
- متغير Docker الخاص بـ OpenCode هو مسار انحدار صارم لوكيل واحد. يكتب نموذجاً افتراضياً مؤقتاً في `OPENCODE_CONFIG_CONTENT` من `OPENCLAW_LIVE_ACP_BIND_OPENCODE_MODEL` (الافتراضي `opencode/kimi-k2.6`) بعد تحميل `~/.profile`، ويتطلب `pnpm test:docker:live-acp-bind:opencode` نص مساعد مرتبط بدلاً من قبول التخطي العام بعد الربط.
- استدعاءات CLI المباشرة لـ `acpx` ليست إلا مساراً يدوياً/تحايلياً لمقارنة السلوك خارج Gateway. يفحص ACP bind smoke في Docker خلفية وقت تشغيل `acpx` المدمجة في OpenClaw.
- مشغل Docker موجود في `scripts/test-live-acp-bind-docker.sh`.
- افتراضيًا، يشغل فحص ACP bind السريع ضد وكلاء CLI الحيين التجميعيين بالتتابع: `claude`، ثم `codex`، ثم `gemini`.
- استخدم `OPENCLAW_LIVE_ACP_BIND_AGENTS=claude`، أو `OPENCLAW_LIVE_ACP_BIND_AGENTS=codex`، أو `OPENCLAW_LIVE_ACP_BIND_AGENTS=droid`، أو `OPENCLAW_LIVE_ACP_BIND_AGENTS=gemini`، أو `OPENCLAW_LIVE_ACP_BIND_AGENTS=opencode` لتضييق المصفوفة.
- يحمّل `~/.profile`، ويرحل مواد مصادقة CLI المطابقة إلى الحاوية، ثم يثبت CLI الحي المطلوب (`@anthropic-ai/claude-code` أو `@openai/codex` أو Factory Droid عبر `https://app.factory.ai/cli` أو `@google/gemini-cli` أو `opencode-ai`) إذا كانت مفقودة. خلفية ACP نفسها هي حزمة `acpx/runtime` المضمنة من Plugin `acpx` الرسمي.
- متغير Docker الخاص بـ Droid يرحل `~/.factory` للإعدادات، ويمرر `FACTORY_API_KEY`، ويتطلب مفتاح API هذا لأن مصادقة Factory المحلية عبر OAuth/حافظة المفاتيح غير قابلة للنقل إلى الحاوية. يستخدم إدخال السجل المدمج في ACPX وهو `droid exec --output-format acp`.
- متغير Docker الخاص بـ OpenCode هو مسار انحدار صارم لوكيل واحد. يكتب نموذجًا افتراضيًا مؤقتًا في `OPENCODE_CONFIG_CONTENT` من `OPENCLAW_LIVE_ACP_BIND_OPENCODE_MODEL` (الافتراضي `opencode/kimi-k2.6`) بعد تحميل `~/.profile`، ويتطلب `pnpm test:docker:live-acp-bind:opencode` نص مساعد مرتبط بدلًا من قبول التجاوز العام بعد الربط.
- استدعاءات CLI المباشرة لـ `acpx` ليست سوى مسار يدوي/التفاف للمقارنة بين السلوك خارج Gateway. يفحص فحص ACP bind السريع في Docker خلفية وقت تشغيل `acpx` المضمنة في OpenClaw.
## مباشر: فحص smoke لحزمة اختبار خادم تطبيق Codex
## حي: فحص سريع لتسخير خادم تطبيق Codex
- الهدف: التحقق من حزمة اختبار Codex المملوكة للـ Plugin عبر طريقة Gateway العادية
- الهدف: التحقق من التسخير المملوك من Plugin لـ Codex عبر طريقة Gateway العادية
`agent`:
- تحميل Plugin `codex` المضمن
- تحديد `OPENCLAW_AGENT_RUNTIME=codex`
- إرسال أول دورة وكيل Gateway إلى `openai/gpt-5.5` مع فرض حزمة اختبار Codex
- تحميل Plugin المضمن `codex`
- اختيار `OPENCLAW_AGENT_RUNTIME=codex`
- إرسال أول دورة وكيل Gateway إلى `openai/gpt-5.5` مع فرض تسخير Codex
- إرسال دورة ثانية إلى جلسة OpenClaw نفسها والتحقق من أن خيط خادم التطبيق
يمكنه الاستئناف
- تشغيل `/codex status` و`/codex models` عبر مسار أمر Gateway نفسه
- اختيارياً، تشغيل فحصين لقشرة مصعّدين راجعهما Guardian: أمر حميد
ينبغي أن تتم الموافقة عليه ورفع سر وهمي ينبغي رفضه كي يطلب الوكيل رداً
- تشغيل `/codex status` و`/codex models` عبر مسار أوامر Gateway نفسه
- اختياريًا تشغيل فحصين مصعدين للصدفة بمراجعة Guardian: أمر حميد
ينبغي أن تتم الموافقة عليه ورفع سر مزيف ينبغي
رفضه بحيث يسأل الوكيل مجددًا
- الاختبار: `src/gateway/gateway-codex-harness.live.test.ts`
- التفعيل: `OPENCLAW_LIVE_CODEX_HARNESS=1`
- النموذج الافتراضي: `openai/gpt-5.5`
- فحص الصورة الاختياري: `OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=1`
- فحص MCP/الأداة الاختياري: `OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=1`
- فحص Guardian الاختياري: `OPENCLAW_LIVE_CODEX_HARNESS_GUARDIAN_PROBE=1`
- يستخدم فحص smoke `agentRuntime.id: "codex"` حتى لا تتمكن حزمة اختبار Codex المعطلة
من النجاح عبر الرجوع الصامت إلى PI.
- المصادقة: مصادقة خادم تطبيق Codex من تسجيل دخول اشتراك Codex المحلي. يمكن لفحوص smoke في Docker
أيضاً توفير `OPENAI_API_KEY` لفحوص غير Codex عند الاقتضاء،
إضافة إلى نسخ اختيارية من `~/.codex/auth.json` و`~/.codex/config.toml`.
- فحص صورة اختياري: `OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=1`
- فحص MCP/أداة اختياري: `OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=1`
- فحص Guardian اختياري: `OPENCLAW_LIVE_CODEX_HARNESS_GUARDIAN_PROBE=1`
- يستخدم الفحص السريع `agentRuntime.id: "codex"` حتى لا يستطيع تسخير Codex المعطل
النجاح عبر الرجوع الصامت إلى PI.
- المصادقة: مصادقة خادم تطبيق Codex من تسجيل الدخول المحلي لاشتراك Codex. يمكن لفحوصات Docker السريعة أيضًا توفير `OPENAI_API_KEY` للفحوصات غير الخاصة بـ Codex عند الاقتضاء،
بالإضافة إلى `~/.codex/auth.json` و`~/.codex/config.toml` المنسوخين اختياريًا.
وصفة محلية:
@ -323,55 +332,55 @@ pnpm test:docker:live-codex-harness
ملاحظات Docker:
- مشغّل Docker موجود في `scripts/test-live-codex-harness-docker.sh`.
- يحمّل `~/.profile` المركّب، ويمرر `OPENAI_API_KEY`، وينسخ ملفات مصادقة Codex CLI
- مشغل Docker موجود في `scripts/test-live-codex-harness-docker.sh`.
- يحمّل `~/.profile` المركب، ويمرر `OPENAI_API_KEY`، وينسخ ملفات مصادقة Codex CLI
عند وجودها، ويثبت `@openai/codex` في بادئة npm مركبة قابلة للكتابة،
ويجهّز شجرة المصدر، ثم يشغّل اختبار Codex-harness المباشر فقط.
- يفعّل Docker فحوص الصورة وMCP/الأداة وGuardian افتراضياً. اضبط
ويرحل شجرة المصدر، ثم يشغل اختبار Codex-harness الحي فقط.
- يفعّل Docker فحوصات الصورة وMCP/الأداة وGuardian افتراضيًا. عيّن
`OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=0` أو
`OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=0` أو
`OPENCLAW_LIVE_CODEX_HARNESS_GUARDIAN_PROBE=0` عندما تحتاج إلى تشغيل تصحيح أضيق.
- يستخدم Docker إعداد وقت تشغيل Codex الصريح نفسه، لذلك لا يمكن للأسماء المستعارة القديمة أو الرجوع إلى PI
إخفاء انحدار في حزمة اختبار Codex.
- يستخدم Docker إعداد وقت تشغيل Codex الصريح نفسه، لذلك لا يمكن للأسماء المستعارة القديمة أو
الرجوع إلى PI إخفاء انحدار في تسخير Codex.
### وصفات مباشرة موصى بها
### وصفات حية موصى بها
قوائم السماح الضيقة والصريحة هي الأسرع والأقل عرضة للتقطع:
قوائم السماح الضيقة والصريحة هي الأسرع والأقل عرضة للتذبذب:
- نموذج واحد، مباشر (من دون Gateway):
- نموذج واحد، مباشر (بلا Gateway):
- `OPENCLAW_LIVE_MODELS="openai/gpt-5.5" pnpm test:live src/agents/models.profiles.live.test.ts`
- نموذج واحد، فحص smoke عبر Gateway:
- نموذج واحد، فحص Gateway سريع:
- `OPENCLAW_LIVE_GATEWAY_MODELS="openai/gpt-5.5" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts`
- استدعاء الأدوات عبر عدة مزودين:
- استدعاء الأدوات عبر عدة موفرين:
- `OPENCLAW_LIVE_GATEWAY_MODELS="openai/gpt-5.5,openai-codex/gpt-5.5,anthropic/claude-opus-4-6,google/gemini-3-flash-preview,deepseek/deepseek-v4-flash,zai/glm-5.1,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`
- فحص smoke للتفكير التكيفي في Google:
- إذا كانت المفاتيح المحلية في ملف تعريف القشرة: `source ~/.profile`
- فحص سريع للتفكير التكيفي في Google:
- إذا كانت المفاتيح المحلية موجودة في ملف تعريف الصدفة: `source ~/.profile`
- الافتراضي الديناميكي لـ Gemini 3: `pnpm openclaw qa manual --provider-mode live-frontier --model google/gemini-3.1-pro-preview --alt-model google/gemini-3.1-pro-preview --message '/think adaptive Reply exactly: GEMINI_ADAPTIVE_OK' --timeout-ms 180000`
- ميزانية Gemini 2.5 الديناميكية: `pnpm openclaw qa manual --provider-mode live-frontier --model google/gemini-2.5-flash --alt-model google/gemini-2.5-flash --message '/think adaptive Reply exactly: GEMINI25_ADAPTIVE_OK' --timeout-ms 180000`
ملاحظات:
- يستخدم `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 / مصادقة ملف تعريف)؛ وهذا ما يعنيه معظم المستخدمين بـ “Gemini”.
- CLI: ينفّذ OpenClaw ملف `gemini` المحلي عبر القشرة؛ وله مصادقته الخاصة وقد يتصرف بشكل مختلف (دعم البث/الأدوات/اختلاف الإصدارات).
- يستخدم `google/...` واجهة Gemini API (مفتاح API).
- يستخدم `google-antigravity/...` جسر OAuth الخاص بـ Antigravity (نقطة نهاية وكيل بنمط Cloud Code Assist).
- يستخدم `google-gemini-cli/...` Gemini CLI المحلي على جهازك (مصادقة منفصلة + خصوصيات أدوات).
- مقارنة Gemini API مع Gemini CLI:
- API: يستدعي OpenClaw واجهة Gemini API المستضافة لدى Google عبر HTTP (مفتاح API / مصادقة ملف تعريف)؛ هذا ما يقصده معظم المستخدمين بـ “Gemini”.
- CLI: يشغل OpenClaw ملفًا ثنائيًا محليًا باسم `gemini` عبر الصدفة؛ لديه مصادقته الخاصة ويمكن أن يتصرف بشكل مختلف (دعم البث/الأدوات/اختلاف الإصدارات).
## مباشر: مصفوفة النماذج (ما نغطيه)
## حي: مصفوفة النماذج (ما نغطيه)
لا توجد “قائمة نماذج CI” ثابتة (التشغيل المباشر اختياري)، لكن هذه هي النماذج **الموصى بها** للتغطية المنتظمة على جهاز تطوير يحتوي على المفاتيح.
لا توجد "قائمة نماذج CI" ثابتة (الحي اختياري)، لكن هذه هي النماذج **الموصى بها** لتغطيتها بانتظام على جهاز تطوير لديه مفاتيح.
### مجموعة smoke حديثة (استدعاء أدوات + صورة)
### مجموعة الفحص السريع الحديثة (استدعاء الأدوات + صورة)
هذا هو تشغيل “النماذج الشائعة” الذي نتوقع أن يظل يعمل:
هذا هو تشغيل "النماذج الشائعة" الذي نتوقع إبقاءه عاملًا:
- OpenAI (غير Codex): `openai/gpt-5.5`
- OpenAI Codex OAuth: `openai-codex/gpt-5.5`
@ -382,12 +391,12 @@ pnpm test:docker:live-codex-harness
- Z.AI (GLM): `zai/glm-5.1`
- MiniMax: `minimax/MiniMax-M2.7`
شغّل فحص smoke عبر Gateway مع الأدوات + الصورة:
شغّل فحص Gateway السريع مع الأدوات + الصورة:
`OPENCLAW_LIVE_GATEWAY_MODELS="openai/gpt-5.5,openai-codex/gpt-5.5,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,deepseek/deepseek-v4-flash,zai/glm-5.1,minimax/MiniMax-M2.7" pnpm test:live src/gateway/gateway-models.profiles.live.test.ts`
### الأساس: استدعاء الأدوات (Read + Exec اختياري)
### الأساس: استدعاء الأدوات (قراءة + تنفيذ اختياري)
اختر نموذجاً واحداً على الأقل لكل عائلة مزودين:
اختر واحدًا على الأقل لكل عائلة موفرين:
- OpenAI: `openai/gpt-5.5`
- Anthropic: `anthropic/claude-opus-4-6` (أو `anthropic/claude-sonnet-4-6`)
@ -396,78 +405,78 @@ pnpm test:docker:live-codex-harness
- Z.AI (GLM): `zai/glm-5.1`
- MiniMax: `minimax/MiniMax-M2.7`
تغطية إضافية اختيارية (مفيدة):
تغطية إضافية اختيارية (جيدة إن توفرت):
- xAI: `xai/grok-4.3` (أو أحدث متاح)
- Mistral: `mistral/`… (اختر نموذجاً واحداً يدعم “tools” ومفعّلاً لديك)
- xAI: `xai/grok-4.3` (أو الأحدث المتاح)
- Mistral: `mistral/`… (اختر نموذجًا واحدًا قادرًا على "الأدوات" ومفعلًا لديك)
- Cerebras: `cerebras/`… (إذا كان لديك وصول)
- LM Studio: `lmstudio/`… (محلي؛ يعتمد استدعاء الأدوات على وضع API)
### الرؤية: إرسال صورة (مرفق → رسالة متعددة الوسائط)
ضمّن نموذجاً واحداً على الأقل يدعم الصور في `OPENCLAW_LIVE_GATEWAY_MODELS` (متغيرات Claude/Gemini/OpenAI الداعمة للرؤية، إلخ) لتشغيل فحص الصورة.
أدرج نموذجًا واحدًا على الأقل قادرًا على الصور في `OPENCLAW_LIVE_GATEWAY_MODELS` (متغيرات Claude/Gemini/OpenAI القادرة على الرؤية، إلخ) لتشغيل فحص الصورة.
### المجمّعات / البوابات البديلة
### المجمعات / البوابات البديلة
إذا كانت لديك مفاتيح مفعّلة، ندعم أيضاً الاختبار عبر:
إذا كانت لديك مفاتيح مفعلة، فنحن ندعم أيضًا الاختبار عبر:
- OpenRouter: `openrouter/...` (مئات النماذج؛ استخدم `openclaw models scan` للعثور على مرشحين يدعمون الأدوات+الصورة)
- OpenRouter: `openrouter/...` (مئات النماذج؛ استخدم `openclaw models scan` للعثور على مرشحين قادرين على الأدوات+الصور)
- OpenCode: `opencode/...` لـ Zen و`opencode-go/...` لـ Go (المصادقة عبر `OPENCODE_API_KEY` / `OPENCODE_ZEN_API_KEY`)
مزودون إضافيون يمكنك تضمينهم في المصفوفة المباشرة (إذا كانت لديك بيانات اعتماد/إعدادات):
موفرون إضافيون يمكنك تضمينهم في المصفوفة الحية (إذا كانت لديك بيانات اعتماد/إعدادات):
- المدمجون: `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، إلخ)
- مدمج: `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، إلخ)
<Tip>
لا تثبّت "all models" بشكل صريح في المستندات. القائمة المرجعية هي كل ما تُرجعه `discoverModels(...)` على جهازك إضافة إلى أي مفاتيح متاحة.
لا ترمز "كل النماذج" صراحة في الوثائق. القائمة الموثوقة هي كل ما يعيده `discoverModels(...)` على جهازك بالإضافة إلى أي مفاتيح متاحة.
</Tip>
## بيانات الاعتماد (لا تلتزم بها أبداً)
## بيانات الاعتماد (لا تلتزم بها أبدًا)
تكتشف الاختبارات المباشرة بيانات الاعتماد بالطريقة نفسها التي يستخدمها CLI. الآثار العملية:
تكتشف الاختبارات الحية بيانات الاعتماد بالطريقة نفسها التي يستخدمها CLI. الآثار العملية:
- إذا كان CLI يعمل، فينبغي للاختبارات الحية أن تعثر على المفاتيح نفسها.
- إذا قال اختبار حي "no creds"، فصحّح ذلك بالطريقة نفسها التي تصحّح بها `openclaw models list` / اختيار النموذج.
- إذا كان CLI يعمل، فينبغي أن تعثر الاختبارات المباشرة على المفاتيح نفسها.
- إذا قال اختبار مباشر “no creds”، فصحّح المشكلة بالطريقة نفسها التي تصحّح بها `openclaw models list` / اختيار النموذج.
- ملفات تعريف المصادقة لكل وكيل: `~/.openclaw/agents/<agentId>/agent/auth-profiles.json` (هذا ما تعنيه "مفاتيح ملف التعريف" في الاختبارات الحية)
- الإعدادات: `~/.openclaw/openclaw.json` (أو `OPENCLAW_CONFIG_PATH`)
- مجلد الحالة القديم: `~/.openclaw/credentials/` (يُنسخ إلى المنزل الحي المرحلي عند وجوده، لكنه ليس مخزن مفاتيح ملف التعريف الرئيسي)
- تنسخ عمليات التشغيل الحية المحلية الإعدادات النشطة، وملفات `auth-profiles.json` لكل وكيل، و`credentials/` القديمة، ومجلدات مصادقة CLI الخارجية المدعومة إلى منزل اختبار مؤقت افتراضيًا؛ وتتخطى المنازل الحية المرحلية `workspace/` و`sandboxes/`، وتُزال تجاوزات مسارات `agents.*.workspace` / `agentDir` حتى تبقى عمليات الفحص بعيدة عن مساحة عمل مضيفك الحقيقية.
- ملفات تعريف المصادقة لكل وكيل: `~/.openclaw/agents/<agentId>/agent/auth-profiles.json` (هذا ما تعنيه “profile keys” في الاختبارات المباشرة)
- الإعداد: `~/.openclaw/openclaw.json` (أو `OPENCLAW_CONFIG_PATH`)
- دليل الحالة القديم: `~/.openclaw/credentials/` (يُنسخ إلى الصفحة الرئيسية المباشرة المرحلية عند وجوده، لكنه ليس مخزن مفاتيح الملف الشخصي الرئيسي)
- تنسخ التشغيلات المحلية المباشرة افتراضياً الإعداد النشط، وملفات `auth-profiles.json` لكل وكيل، و`credentials/` القديمة، وأدلة مصادقة CLI الخارجية المدعومة إلى صفحة رئيسية مؤقتة للاختبار؛ وتتخطى الصفحات الرئيسية المباشرة المرحلية `workspace/` و`sandboxes/`، وتُزال تجاوزات مسار `agents.*.workspace` / `agentDir` حتى تبقى عمليات الفحص بعيدة عن مساحة عمل المضيف الحقيقية لديك.
إذا أردت الاعتماد على مفاتيح البيئة (مثلًا المصدّرة في `~/.profile`)، فشغّل الاختبارات المحلية بعد `source ~/.profile`، أو استخدم مشغلات Docker أدناه (يمكنها وصل `~/.profile` داخل الحاوية).
إذا أردت الاعتماد على مفاتيح البيئة (مثلاً المصدّرة في `~/.profile`)، فشغّل الاختبارات المحلية بعد `source ~/.profile`، أو استخدم مشغلات Docker أدناه (يمكنها وصل `~/.profile` داخل الحاوية).
## Deepgram حي (نسخ الصوت)
## Deepgram مباشر (نسخ صوتي)
- الاختبار: `extensions/deepgram/audio.live.test.ts`
- التفعيل: `DEEPGRAM_API_KEY=... DEEPGRAM_LIVE_TEST=1 pnpm test:live extensions/deepgram/audio.live.test.ts`
## خطة ترميز BytePlus حية
## خطة ترميز BytePlus مباشرة
- الاختبار: `extensions/byteplus/live.test.ts`
- التفعيل: `BYTEPLUS_API_KEY=... BYTEPLUS_LIVE_TEST=1 pnpm test:live extensions/byteplus/live.test.ts`
- تجاوز النموذج اختياريًا: `BYTEPLUS_CODING_MODEL=ark-code-latest`
- تجاوز النموذج الاختياري: `BYTEPLUS_CODING_MODEL=ark-code-latest`
## وسائط سير عمل ComfyUI الحية
## وسائط سير عمل ComfyUI مباشرة
- الاختبار: `extensions/comfy/comfy.live.test.ts`
- التفعيل: `OPENCLAW_LIVE_TEST=1 COMFY_LIVE_TEST=1 pnpm test:live -- extensions/comfy/comfy.live.test.ts`
- النطاق:
- يختبر مسارات comfy المضمّنة للصور والفيديو و`music_generate`
- يتخطى كل قدرة ما لم تكن `plugins.entries.comfy.config.<capability>` مهيأة
- مفيد بعد تغيير إرسال سير عمل comfy، أو الاستقصاء، أو التنزيلات، أو تسجيل Plugin
- يختبر مسارات الصور والفيديو و`music_generate` المضمّنة في comfy
- يتخطى كل إمكانية ما لم يكن `plugins.entries.comfy.config.<capability>` مُعداً
- مفيد بعد تغيير إرسال سير عمل comfy أو الاستقصاء أو التنزيلات أو تسجيل Plugin
## توليد الصور الحي
## توليد الصور مباشرة
- الاختبار: `test/image-generation.runtime.live.test.ts`
- الأمر: `pnpm test:live test/image-generation.runtime.live.test.ts`
- أداة الاختبار: `pnpm test:live:media image`
- حزمة الاختبار: `pnpm test:live:media image`
- النطاق:
- يحصي كل Plugin مزوّد مسجل لتوليد الصور
- يحصي كل Plugin مسجل لمزوّد توليد الصور
- يحمّل متغيرات بيئة المزوّد الناقصة من صدفة تسجيل الدخول لديك (`~/.profile`) قبل الفحص
- يستخدم مفاتيح API الحية/البيئية قبل ملفات تعريف المصادقة المخزنة افتراضيًا، حتى لا تحجب مفاتيح الاختبار القديمة في `auth-profiles.json` بيانات اعتماد الصدفة الحقيقية
- يتخطى المزوّدين الذين لا يملكون مصادقة/ملف تعريف/نموذجًا قابلًا للاستخدام
- يشغّل كل مزوّد مهيأ عبر وقت تشغيل توليد الصور المشترك:
- يستخدم مفاتيح API المباشرة/البيئية قبل ملفات تعريف المصادقة المخزنة افتراضياً، حتى لا تحجب مفاتيح الاختبار القديمة في `auth-profiles.json` بيانات اعتماد الصدفة الحقيقية
- يتخطى المزوّدين الذين لا يملكون مصادقة/ملف تعريف/نموذجاً قابلاً للاستخدام
- يشغّل كل مزوّد مُعد عبر وقت تشغيل توليد الصور المشترك:
- `<provider>:generate`
- `<provider>:edit` عندما يعلن المزوّد دعم التحرير
- المزوّدون المضمّنون الحاليون المشمولون:
@ -479,15 +488,15 @@ pnpm test:docker:live-codex-harness
- `openrouter`
- `vydra`
- `xai`
- تضييق اختياري:
- التضييق الاختياري:
- `OPENCLAW_LIVE_IMAGE_GENERATION_PROVIDERS="openai,google,openrouter,xai"`
- `OPENCLAW_LIVE_IMAGE_GENERATION_PROVIDERS="deepinfra"`
- `OPENCLAW_LIVE_IMAGE_GENERATION_MODELS="openai/gpt-image-2,google/gemini-3.1-flash-image-preview,openrouter/google/gemini-3.1-flash-image-preview,xai/grok-imagine-image"`
- `OPENCLAW_LIVE_IMAGE_GENERATION_CASES="google:flash-generate,google:pro-edit,openrouter:generate,xai:default-generate,xai:default-edit"`
- سلوك مصادقة اختياري:
- `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` لفرض المصادقة عبر مخزن ملفات التعريف وتجاهل التجاوزات المعتمدة على البيئة فقط
- سلوك المصادقة الاختياري:
- `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` لفرض مصادقة مخزن الملفات الشخصية وتجاهل التجاوزات المعتمدة على البيئة فقط
لمسار CLI المشحون، أضف فحص `infer` سريعًا بعد نجاح الاختبار الحي للمزوّد/وقت التشغيل:
لمسار CLI المشحون، أضف فحص `infer` سريعاً بعد نجاح اختبار المزوّد/وقت التشغيل المباشر:
```bash
OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_INFER_CLI_TEST=1 pnpm test:live -- test/image-generation.infer-cli.live.test.ts
@ -499,81 +508,81 @@ openclaw infer image generate \
--json
```
يغطي هذا تحليل وسائط CLI، وحل الإعدادات/الوكيل الافتراضي، وتفعيل Plugin المضمّن، ووقت تشغيل توليد الصور المشترك، وطلب المزوّد الحي. من المتوقع أن تكون اعتماديات Plugin موجودة قبل تحميل وقت التشغيل.
يغطي هذا تحليل وسيطات CLI، وحل إعداد/الوكيل الافتراضي، وتفعيل Plugin المضمّن، ووقت تشغيل توليد الصور المشترك، وطلب المزوّد المباشر. يُتوقع أن تكون اعتماديات Plugin موجودة قبل تحميل وقت التشغيل.
## توليد الموسيقى الحي
## توليد الموسيقى مباشرة
- الاختبار: `extensions/music-generation-providers.live.test.ts`
- التفعيل: `OPENCLAW_LIVE_TEST=1 pnpm test:live -- extensions/music-generation-providers.live.test.ts`
- أداة الاختبار: `pnpm test:live:media music`
- حزمة الاختبار: `pnpm test:live:media music`
- النطاق:
- يختبر مسار مزوّد توليد الموسيقى المضمّن المشترك
- يغطي حاليًا Google وMiniMax
- يغطي حالياً Google وMiniMax
- يحمّل متغيرات بيئة المزوّد من صدفة تسجيل الدخول لديك (`~/.profile`) قبل الفحص
- يستخدم مفاتيح API الحية/البيئية قبل ملفات تعريف المصادقة المخزنة افتراضيًا، حتى لا تحجب مفاتيح الاختبار القديمة في `auth-profiles.json` بيانات اعتماد الصدفة الحقيقية
- يتخطى المزوّدين الذين لا يملكون مصادقة/ملف تعريف/نموذجًا قابلًا للاستخدام
- يشغّل نمطي وقت التشغيل المعلنين عند توفرهما:
- `generate` مع إدخال قائم على الموجّه فقط
- يستخدم مفاتيح API المباشرة/البيئية قبل ملفات تعريف المصادقة المخزنة افتراضياً، حتى لا تحجب مفاتيح الاختبار القديمة في `auth-profiles.json` بيانات اعتماد الصدفة الحقيقية
- يتخطى المزوّدين الذين لا يملكون مصادقة/ملف تعريف/نموذجاً قابلاً للاستخدام
- يشغّل وضعي وقت التشغيل المعلنين عند توفرهما:
- `generate` مع إدخال مطالبة فقط
- `edit` عندما يعلن المزوّد `capabilities.edit.enabled`
- تغطية المسار المشترك الحالية:
- `google`: `generate`، `edit`
- `google`: `generate`, `edit`
- `minimax`: `generate`
- `comfy`: ملف Comfy حي منفصل، وليس هذا الفحص المشترك
- تضييق اختياري:
- `comfy`: ملف Comfy المباشر منفصل، وليس ضمن هذا الفحص المشترك
- التضييق الاختياري:
- `OPENCLAW_LIVE_MUSIC_GENERATION_PROVIDERS="google,minimax"`
- `OPENCLAW_LIVE_MUSIC_GENERATION_MODELS="google/lyria-3-clip-preview,minimax/music-2.6"`
- سلوك مصادقة اختياري:
- `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` لفرض المصادقة عبر مخزن ملفات التعريف وتجاهل التجاوزات المعتمدة على البيئة فقط
- سلوك المصادقة الاختياري:
- `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` لفرض مصادقة مخزن الملفات الشخصية وتجاهل التجاوزات المعتمدة على البيئة فقط
## توليد الفيديو الحي
## توليد الفيديو مباشرة
- الاختبار: `extensions/video-generation-providers.live.test.ts`
- التفعيل: `OPENCLAW_LIVE_TEST=1 pnpm test:live -- extensions/video-generation-providers.live.test.ts`
- أداة الاختبار: `pnpm test:live:media video`
- حزمة الاختبار: `pnpm test:live:media video`
- النطاق:
- يختبر مسار مزوّد توليد الفيديو المضمّن المشترك
- يعتمد افتراضيًا مسار الفحص السريع الآمن للإصدار: مزوّدون غير FAL، وطلب نص إلى فيديو واحد لكل مزوّد، وموجّه لوبستر مدته ثانية واحدة، وحد عملية لكل مزوّد من `OPENCLAW_LIVE_VIDEO_GENERATION_TIMEOUT_MS` (`180000` افتراضيًا)
- يتخطى FAL افتراضيًا لأن زمن انتظار طابور المزوّد قد يهيمن على وقت الإصدار؛ مرّر `--video-providers fal` أو `OPENCLAW_LIVE_VIDEO_GENERATION_PROVIDERS="fal"` لتشغيله صراحةً
- يعتمد افتراضياً مسار الفحص السريع الآمن للإصدار: مزوّدون غير FAL، وطلب نص إلى فيديو واحد لكل مزوّد، ومطالبة جراد بحر مدتها ثانية واحدة، وحد عملية لكل مزوّد من `OPENCLAW_LIVE_VIDEO_GENERATION_TIMEOUT_MS` (`180000` افتراضياً)
- يتخطى FAL افتراضياً لأن زمن انتظار الطابور من جهة المزوّد قد يهيمن على وقت الإصدار؛ مرر `--video-providers fal` أو `OPENCLAW_LIVE_VIDEO_GENERATION_PROVIDERS="fal"` لتشغيله صراحة
- يحمّل متغيرات بيئة المزوّد من صدفة تسجيل الدخول لديك (`~/.profile`) قبل الفحص
- يستخدم مفاتيح API الحية/البيئية قبل ملفات تعريف المصادقة المخزنة افتراضيًا، حتى لا تحجب مفاتيح الاختبار القديمة في `auth-profiles.json` بيانات اعتماد الصدفة الحقيقية
- يتخطى المزوّدين الذين لا يملكون مصادقة/ملف تعريف/نموذجًا قابلًا للاستخدام
- يشغّل `generate` فقط افتراضيًا
- عيّن `OPENCLAW_LIVE_VIDEO_GENERATION_FULL_MODES=1` لتشغيل أوضاع التحويل المعلنة أيضًا عند توفرها:
- `imageToVideo` عندما يعلن المزوّد `capabilities.imageToVideo.enabled` ويقبل المزوّد/النموذج المختار إدخال صورة محلية مدعومًا بمخزن مؤقت في الفحص المشترك
- `videoToVideo` عندما يعلن المزوّد `capabilities.videoToVideo.enabled` ويقبل المزوّد/النموذج المختار إدخال فيديو محلي مدعومًا بمخزن مؤقت في الفحص المشترك
- مزوّدو `imageToVideo` المعلنون لكن المتخطون حاليًا في الفحص المشترك:
- يستخدم مفاتيح API المباشرة/البيئية قبل ملفات تعريف المصادقة المخزنة افتراضياً، حتى لا تحجب مفاتيح الاختبار القديمة في `auth-profiles.json` بيانات اعتماد الصدفة الحقيقية
- يتخطى المزوّدين الذين لا يملكون مصادقة/ملف تعريف/نموذجاً قابلاً للاستخدام
- يشغّل `generate` فقط افتراضياً
- عيّن `OPENCLAW_LIVE_VIDEO_GENERATION_FULL_MODES=1` لتشغيل أوضاع التحويل المعلنة أيضاً عند توفرها:
- `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` للنص إلى الفيديو بالإضافة إلى مسار `kling` يستخدم مثبت عنوان URL لصورة بعيدة افتراضيًا
- تغطية `videoToVideo` الحية الحالية:
- `runway` فقط عندما يكون النموذج المختار هو `runway/gen4_aleph`
- مزوّدو `videoToVideo` المعلنون لكن المتخطون حاليًا في الفحص المشترك:
- `alibaba`، `qwen`، `xai` لأن هذه المسارات تتطلب حاليًا عناوين URL مرجعية بعيدة من نوع `http(s)` / MP4
- `google` لأن مسار Gemini/Veo المشترك الحالي يستخدم إدخالًا محليًا مدعومًا بمخزن مؤقت، وهذا المسار غير مقبول في الفحص المشترك
- `openai` لأن المسار المشترك الحالي يفتقر إلى ضمانات الوصول الخاصة بالمؤسسة إلى ترميم/إعادة مزج الفيديو
- تضييق اختياري:
- يشغّل ذلك الملف مسار `veo3` من نص إلى فيديو إضافة إلى مسار `kling` يستخدم مثبت عنوان URL لصورة بعيدة افتراضياً
- تغطية `videoToVideo` المباشرة الحالية:
- `runway` فقط عندما يكون النموذج المحدد هو `runway/gen4_aleph`
- مزوّدو `videoToVideo` المعلنون لكن المتخطون حالياً في الفحص المشترك:
- `alibaba`, `qwen`, `xai` لأن تلك المسارات تتطلب حالياً عناوين URL مرجعية بعيدة من نوع `http(s)` / MP4
- `google` لأن مسار Gemini/Veo المشترك الحالي يستخدم إدخالاً محلياً مدعوماً بمخزن مؤقت، وذلك المسار غير مقبول في الفحص المشترك
- `openai` لأن المسار المشترك الحالي يفتقر إلى ضمانات وصول خاصة بالمؤسسة لتلوين/إعادة مزج الفيديو
- التضييق الاختياري:
- `OPENCLAW_LIVE_VIDEO_GENERATION_PROVIDERS="deepinfra,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` لتقليل حد كل عملية مزوّد لفحص سريع مكثف
- سلوك مصادقة اختياري:
- `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` لفرض المصادقة عبر مخزن ملفات التعريف وتجاهل التجاوزات المعتمدة على البيئة فقط
- `OPENCLAW_LIVE_VIDEO_GENERATION_SKIP_PROVIDERS=""` لإدراج كل مزوّد في الفحص الافتراضي، بما في ذلك FAL
- `OPENCLAW_LIVE_VIDEO_GENERATION_TIMEOUT_MS=60000` لتقليل حد كل عملية مزوّد لتشغيل فحص سريع قوي
- سلوك المصادقة الاختياري:
- `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` لفرض مصادقة مخزن الملفات الشخصية وتجاهل التجاوزات المعتمدة على البيئة فقط
## أداة اختبار الوسائط الحية
## حزمة اختبار الوسائط المباشرة
- الأمر: `pnpm test:live:media`
- الغرض:
- تشغّل مجموعات الاختبارات الحية المشتركة للصور والموسيقى والفيديو عبر نقطة دخول أصلية في المستودع
- تحمّل تلقائيًا متغيرات بيئة المزوّد الناقصة من `~/.profile`
- تضيّق تلقائيًا كل مجموعة إلى المزوّدين الذين يملكون حاليًا مصادقة قابلة للاستخدام افتراضيًا
- تعيد استخدام `scripts/test-live.mjs`، لذلك يبقى سلوك Heartbeat والوضع الهادئ متسقًا
- يشغّل مجموعات الاختبارات المباشرة المشتركة للصور والموسيقى والفيديو عبر نقطة دخول أصلية واحدة في المستودع
- يحمّل تلقائياً متغيرات بيئة المزوّد الناقصة من `~/.profile`
- يضيّق تلقائياً كل مجموعة افتراضياً إلى المزوّدين الذين لديهم حالياً مصادقة قابلة للاستخدام
- يعيد استخدام `scripts/test-live.mjs`، لذا يبقى سلوك Heartbeat والوضع الهادئ متسقاً
- أمثلة:
- `pnpm test:live:media`
- `pnpm test:live:media image video --providers openai,google,minimax`
- `pnpm test:live:media video --video-providers openai,runway --all-providers`
- `pnpm test:live:media music --quiet`
## ذات صلة
## ذو صلة
- [الاختبار](/ar/help/testing) — مجموعات اختبارات الوحدة والتكامل وQA وDocker

View File

@ -1,30 +1,30 @@
---
read_when:
- أنت تبني Plugin يحتاج إلى before_tool_call أو before_agent_reply أو خطافات الرسائل أو خطافات دورة الحياة
- تحتاج إلى حظر استدعاءات الأدوات من Plugin أو إعادة كتابتها أو طلب الموافقة عليها
- أنت تفاضل بين الخطافات الداخلية وخطافات Plugin
- تحتاج إلى حظر استدعاءات الأدوات الصادرة من Plugin أو إعادة كتابتها أو طلب الموافقة عليها
- تختار بين الخطافات الداخلية وخطافات Plugin
summary: 'خطافات Plugin: اعتراض أحداث دورة حياة الوكيل والأداة والرسالة والجلسة وGateway'
title: خطافات Plugin
x-i18n:
generated_at: "2026-05-03T21:39:00Z"
generated_at: "2026-05-04T18:23:59Z"
model: gpt-5.5
provider: openai
source_hash: 2c4ed060f1b89917e1f2f46d2da9448cd562edbcd6ce03bc9b1a83da3ed9a591
source_hash: 37c7273036463c87e478db5678822b676c89447caee65f2f3f47a45194d1e37b
source_path: plugins/hooks.md
workflow: 16
---
خطافات Plugin هي نقاط تمديد داخل العملية من أجل Plugins في OpenClaw. استخدمها
عندما يحتاج Plugin إلى فحص تشغيلات الوكيل أو تغييرها، أو استدعاءات الأدوات، أو تدفق الرسائل،
خطافات Plugin هي نقاط توسعة داخل العملية لـ Plugins الخاصة بـ OpenClaw. استخدمها
عندما يحتاج Plugin إلى فحص أو تغيير تشغيلات الوكلاء، أو استدعاءات الأدوات، أو تدفق الرسائل،
أو دورة حياة الجلسة، أو توجيه الوكلاء الفرعيين، أو عمليات التثبيت، أو بدء تشغيل Gateway.
استخدم [الخطافات الداخلية](/ar/automation/hooks) بدلا من ذلك عندما تريد سكربت
`HOOK.md` صغيرا يثبته المشغل لأحداث الأوامر وGateway مثل
`HOOK.md` صغيرا مثبَّتا بواسطة المشغّل لأحداث الأوامر وGateway مثل
`/new` أو `/reset` أو `/stop` أو `agent:bootstrap` أو `gateway:startup`.
## البدء السريع
سجل خطافات Plugin المكتوبة باستخدام `api.on(...)` من نقطة دخول Plugin لديك:
سجّل خطافات Plugin المكتوبة الأنواع باستخدام `api.on(...)` من نقطة إدخال Plugin لديك:
```typescript
import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";
@ -56,18 +56,18 @@ export default definePluginEntry({
});
```
تعمل معالجات الخطافات بالتتابع وفق `priority` تنازلي. أما الخطافات ذات الأولوية نفسها
فتحتفظ بترتيب التسجيل.
تعمل معالجات الخطافات تسلسليا بترتيب `priority` تنازلي. وتحافظ الخطافات ذات
الأولوية نفسها على ترتيب التسجيل.
يقبل `api.on(name, handler, opts?)` ما يلي:
- `priority` — ترتيب المعالج (الأعلى يعمل أولا).
- `timeoutMs` — ميزانية اختيارية لكل خطاف. عند ضبطها، يوقف مشغل الخطافات ذلك
المعالج بعد انقضاء الميزانية ويتابع مع التالي، بدلا من ترك الإعداد البطيء أو عمل
الاستدعاء يستهلك مهلة النموذج التي ضبطها المستدعي. احذفها لاستخدام مهلة الملاحظة/القرار
الافتراضية التي يطبقها مشغل الخطافات عموما.
- `priority` — ترتيب المعالجات (الأعلى يعمل أولا).
- `timeoutMs` — ميزانية اختيارية لكل خطاف. عند ضبطها، يوقف مشغّل الخطافات ذلك
المعالج بعد انقضاء الميزانية ويواصل مع التالي، بدلا من السماح لأعمال الإعداد
أو الاسترجاع البطيئة باستهلاك مهلة النموذج المضبوطة لدى المستدعي. احذفها لاستخدام
مهلة الملاحظة/القرار الافتراضية التي يطبقها مشغّل الخطافات بشكل عام.
يمكن للمشغلين أيضا ضبط ميزانيات الخطافات من دون تعديل كود Plugin:
يمكن للمشغّلين أيضا ضبط ميزانيات الخطافات من دون تعديل كود Plugin:
```json
{
@ -87,58 +87,58 @@ export default definePluginEntry({
}
```
يتجاوز `hooks.timeouts.<hookName>` قيمة `hooks.timeoutMs`، التي تتجاوز قيمة
يتجاوز `hooks.timeouts.<hookName>` قيمة `hooks.timeoutMs`، والتي تتجاوز قيمة
`api.on(..., { timeoutMs })` التي كتبها Plugin. يجب أن تكون كل قيمة مضبوطة
عددا صحيحا موجبا لا يتجاوز 600000 مللي ثانية. فضل التجاوزات لكل خطاف
للخطافات المعروفة ببطئها حتى لا يحصل Plugin واحد على ميزانية أطول في كل مكان.
عددا صحيحا موجبا لا يزيد على 600000 مللي ثانية. فضّل التجاوزات لكل خطاف
للخطافات البطيئة المعروفة حتى لا يحصل Plugin واحد على ميزانية أطول في كل مكان.
يتلقى كل خطاف `event.context.pluginConfig`، وهي الإعدادات المحلولة للـ
Plugin الذي سجل ذلك المعالج. استخدمها لقرارات الخطافات التي تحتاج إلى خيارات
Plugin الحالية؛ يحقنها OpenClaw لكل معالج من دون تغيير كائن الحدث المشترك
الذي تراه Plugins الأخرى.
يتلقى كل خطاف `event.context.pluginConfig`، وهي الإعدادات المحلولة لـ Plugin
الذي سجّل ذلك المعالج. استخدمها لقرارات الخطافات التي تحتاج إلى خيارات Plugin
الحالية؛ يحقنها OpenClaw لكل معالج من دون تغيير كائن الحدث المشترك الذي تراه
Plugins الأخرى.
## كتالوج الخطافات
تجمع الخطافات حسب السطح الذي تمدده. الأسماء المكتوبة بـ **خط عريض** تقبل
نتيجة قرار (حظر، أو إلغاء، أو تجاوز، أو طلب موافقة)؛ أما البقية فللملاحظة فقط.
تُجمّع الخطافات حسب السطح الذي توسّعه. تقبل الأسماء المكتوبة **بخط عريض** نتيجة
قرار (حظر، إلغاء، تجاوز، أو طلب موافقة)؛ أما الباقي فهي للملاحظة فقط.
**دورة الوكيل**
**دور الوكيل**
- `before_model_resolve` — تجاوز المزود أو النموذج قبل تحميل رسائل الجلسة
- `agent_turn_prepare` — استهلاك حقن دور Plugin المصطفة وإضافة سياق في الدور نفسه قبل خطافات الموجه
- `before_prompt_build` — إضافة سياق ديناميكي أو نص موجه نظام قبل استدعاء النموذج
- `before_agent_start` — مرحلة مدمجة للتوافق فقط؛ فضل الخطافين أعلاه
- **`before_agent_reply`** — اختصار دورة النموذج برد اصطناعي أو صمت
- **`before_agent_finalize`** — فحص الإجابة النهائية الطبيعية وطلب مرور نموذج إضافي واحد
- `before_model_resolve` — تجاوز المزوّد أو النموذج قبل تحميل رسائل الجلسة
- `agent_turn_prepare` — استهلاك حقن أدوار Plugin الموجودة في الطابور وإضافة سياق الدور نفسه قبل خطافات الموجّه
- `before_prompt_build` — إضافة سياق ديناميكي أو نص موجّه نظام قبل استدعاء النموذج
- `before_agent_start` — مرحلة مدمجة للتوافق فقط؛ فضّل الخطافين أعلاه
- **`before_agent_reply`** — اختصار دور النموذج برد اصطناعي أو صمت
- **`before_agent_finalize`** — فحص الإجابة النهائية الطبيعية وطلب تمريرة نموذج إضافية واحدة
- `agent_end` — ملاحظة الرسائل النهائية، وحالة النجاح، ومدة التشغيل
- `heartbeat_prompt_contribution` — إضافة سياق مخصص لـ Heartbeat فقط من أجل Plugins المراقبة الخلفية ودورة الحياة
- `heartbeat_prompt_contribution` — إضافة سياق مخصص لـ Heartbeat فقط لـ Plugins المراقبة الخلفية ودورة الحياة
**ملاحظة المحادثة**
- `model_call_started` / `model_call_ended` — ملاحظة بيانات تعريف استدعاء المزود/النموذج المنقحة، والتوقيت، والنتيجة، وتجزئات معرف الطلب المحدودة من دون محتوى الموجه أو الاستجابة
- `llm_input` — ملاحظة إدخال المزود (موجه النظام، الموجه، السجل)
- `llm_output` — ملاحظة خرج المزود
- `model_call_started` / `model_call_ended` — ملاحظة بيانات تعريف استدعاء المزوّد/النموذج بعد تنقيتها، والتوقيت، والنتيجة، وتجزئات معرّفات الطلب المحدودة من دون محتوى الموجّه أو الاستجابة
- `llm_input` — ملاحظة دخل المزوّد (موجّه النظام، الموجّه، السجل)
- `llm_output` — ملاحظة خرج المزوّد
**الأدوات**
- **`before_tool_call`** — إعادة كتابة معاملات الأداة، أو حظر التنفيذ، أو طلب موافقة
- **`before_tool_call`** — إعادة كتابة معاملات الأداة، أو حظر التنفيذ، أو طلب الموافقة
- `after_tool_call` — ملاحظة نتائج الأدوات، والأخطاء، والمدة
- **`tool_result_persist`** — إعادة كتابة رسالة المساعد الناتجة من نتيجة أداة
- **`before_message_write`** — فحص كتابة رسالة قيد التقدم أو حظرها (نادر)
- **`before_message_write`** — فحص أو حظر كتابة رسالة قيد التنفيذ (نادر)
**الرسائل والتسليم**
- **`inbound_claim`** — المطالبة برسالة واردة قبل توجيه الوكيل (ردود اصطناعية)
- `message_received` — ملاحظة المحتوى الوارد، والمرسل، وسلسلة المحادثة، وبيانات التعريف
- `message_received` — ملاحظة المحتوى الوارد، والمرسل، والسلسلة، وبيانات التعريف
- **`message_sending`** — إعادة كتابة المحتوى الصادر أو إلغاء التسليم
- `message_sent` — ملاحظة نجاح التسليم الصادر أو فشله
- **`before_dispatch`** — فحص إرسال صادر أو إعادة كتابته قبل التسليم إلى القناة
- `message_sent` — ملاحظة نجاح أو فشل التسليم الصادر
- **`before_dispatch`** — فحص أو إعادة كتابة إرسال صادر قبل تسليمه إلى القناة
- **`reply_dispatch`** — المشاركة في مسار إرسال الرد النهائي
**الجلسات وCompaction**
- `session_start` / `session_end` — تتبع حدود دورة حياة الجلسة
- `before_compaction` / `after_compaction` — ملاحظة دورات Compaction أو التعليق عليها
- `before_compaction` / `after_compaction` — ملاحظة دورات Compaction أو إضافة تعليقات توضيحية إليها
- `before_reset` — ملاحظة أحداث إعادة ضبط الجلسة (`/reset`، عمليات إعادة الضبط البرمجية)
**الوكلاء الفرعيون**
@ -148,7 +148,7 @@ Plugin الحالية؛ يحقنها OpenClaw لكل معالج من دون تغ
**دورة الحياة**
- `gateway_start` / `gateway_stop` — بدء أو إيقاف الخدمات المملوكة لـ Plugin مع Gateway
- `cron_changed` — ملاحظة تغييرات دورة حياة Cron المملوكة لـ Gateway (أضيفت، حدثت، أزيلت، بدأت، انتهت، جدولت)
- `cron_changed` — ملاحظة تغييرات دورة حياة Cron المملوكة للبوابة (أضيف، حُدّث، أزيل، بدأ، انتهى، جُدول)
- **`before_install`** — فحص عمليات مسح تثبيت Skills أو Plugin وحظرها اختياريا
## سياسة استدعاء الأدوات
@ -157,10 +157,10 @@ Plugin الحالية؛ يحقنها OpenClaw لكل معالج من دون تغ
- `event.toolName`
- `event.params`
- `event.runId` اختياري
- `event.toolCallId` اختياري
- حقول سياق مثل `ctx.agentId` و`ctx.sessionKey` و`ctx.sessionId`،
و`ctx.runId` و`ctx.jobId` (تضبط في التشغيلات المدفوعة بـ Cron)، و`ctx.trace` التشخيصي
- `event.runId` الاختياري
- `event.toolCallId` الاختياري
- حقول السياق مثل `ctx.agentId` و`ctx.sessionKey` و`ctx.sessionId`،
و`ctx.runId` و`ctx.jobId` (يُضبط في التشغيلات المدفوعة بـ Cron)، والتشخيص `ctx.trace`
يمكنه إرجاع:
@ -186,88 +186,103 @@ type BeforeToolCallResult = {
القواعد:
- `block: true` نهائي ويتخطى المعالجات ذات الأولوية الأدنى.
- يعامل `block: false` كما لو أنه لا يوجد قرار.
- يعيد `params` كتابة معاملات الأداة للتنفيذ.
- يُعامل `block: false` كأنه لا يوجد قرار.
- تعيد `params` كتابة معاملات الأداة للتنفيذ.
- يوقف `requireApproval` تشغيل الوكيل مؤقتا ويطلب من المستخدم عبر موافقات Plugin.
يمكن لأمر `/approve` الموافقة على موافقات exec وموافقات Plugin معا.
- لا يزال بإمكان `block: true` من أولوية أدنى الحظر بعد أن يطلب خطاف أعلى أولوية
يستطيع الأمر `/approve` الموافقة على موافقات exec وPlugin معا.
- لا يزال بإمكان `block: true` ذي أولوية أدنى الحظر بعد أن يطلب خطاف ذو أولوية أعلى
الموافقة.
- يتلقى `onResolution` قرار الموافقة المحلول — `allow-once`،
أو `allow-always`، أو `deny`، أو `timeout`، أو `cancelled`.
- يتلقى `onResolution` قرار الموافقة المحلول — `allow-once` أو
`allow-always` أو `deny` أو `timeout` أو `cancelled`.
يمكن لـ Plugins المضمنة التي تحتاج إلى سياسة على مستوى المضيف تسجيل سياسات أدوات موثوقة
يمكن لـ Plugins المضمّنة التي تحتاج إلى سياسة على مستوى المضيف تسجيل سياسات أدوات موثوقة
باستخدام `api.registerTrustedToolPolicy(...)`. تعمل هذه قبل خطافات
`before_tool_call` العادية وقبل قرارات Plugin الخارجية. استخدمها فقط
للبوابات الموثوقة من المضيف مثل سياسة مساحة العمل، أو فرض الميزانية، أو
سلامة سير العمل المحجوزة. يجب أن تستخدم Plugins الخارجية خطافات `before_tool_call`
العادية.
سلامة سير العمل المحجوزة. يجب على Plugins الخارجية استخدام خطافات
`before_tool_call` العادية.
### استمرارية نتيجة الأداة
### استمرار نتائج الأدوات
يمكن أن تتضمن نتائج الأدوات `details` منظمة لعرض واجهة المستخدم، أو التشخيصات،
أو توجيه الوسائط، أو بيانات التعريف المملوكة لـ Plugin. عامل `details` كبيانات تعريف وقت تشغيل،
وليس كمحتوى موجه:
يمكن أن تتضمن نتائج الأدوات `details` منظّمة لعرض الواجهة، أو التشخيصات،
أو توجيه الوسائط، أو بيانات التعريف المملوكة لـ Plugin. تعامل مع `details`
على أنها بيانات تعريف وقت التشغيل، وليست محتوى موجّه:
- يزيل OpenClaw `toolResult.details` قبل إعادة التشغيل لدى المزود ومدخلات Compaction
- يزيل OpenClaw `toolResult.details` قبل إعادة تشغيل المزوّد ودخل Compaction
حتى لا تصبح بيانات التعريف سياق نموذج.
- تحتفظ إدخالات الجلسة المستمرة بـ `details` محدودة فقط. تستبدل التفاصيل الضخمة
بملخص موجز و`persistedDetailsTruncated: true`.
- يعمل `tool_result_persist` و`before_message_write` قبل حد الاستمرارية
النهائي. يجب أن تبقي الخطافات `details` المرجعة صغيرة مع ذلك، وأن تتجنب
وضع نص ذي صلة بالموجه فقط في `details`؛ ضع خرج الأداة المرئي للنموذج
في `content`.
- تحتفظ إدخالات الجلسة المستمرة بـ `details` المحدودة فقط. تُستبدل التفاصيل
كبيرة الحجم بملخص مضغوط و`persistedDetailsTruncated: true`.
- يعمل `tool_result_persist` و`before_message_write` قبل سقف الاستمرار النهائي.
ومع ذلك، يجب أن تبقي الخطافات `details` المعادة صغيرة وأن تتجنب وضع نص مهم
للموجّه داخل `details` فقط؛ ضع خرج الأداة المرئي للنموذج في `content`.
## خطافات الموجه والنموذج
## خطافات الموجّه والنموذج
استخدم الخطافات الخاصة بالمرحلة لـ Plugins الجديدة:
استخدم الخطافات الخاصة بكل مرحلة لـ Plugins الجديدة:
- `before_model_resolve`: يتلقى الموجه الحالي وبيانات تعريف المرفقات فقط.
- `before_model_resolve`: يتلقى الموجّه الحالي وبيانات تعريف المرفقات فقط.
أرجع `providerOverride` أو `modelOverride`.
- `agent_turn_prepare`: يتلقى الموجه الحالي، ورسائل الجلسة المحضرة،
وأي حقن مصطفة لمرة واحدة بالضبط جرى تصريفها لهذه الجلسة. أرجع
- `agent_turn_prepare`: يتلقى الموجّه الحالي، ورسائل الجلسة المحضّرة،
وأي حقن موضوعة في الطابور لمرة واحدة بالضبط جرى تفريغها لهذه الجلسة. أرجع
`prependContext` أو `appendContext`.
- `before_prompt_build`: يتلقى الموجه الحالي ورسائل الجلسة.
أرجع `prependContext` أو `appendContext` أو `systemPrompt`،
أو `prependSystemContext`، أو `appendSystemContext`.
- `heartbeat_prompt_contribution`: يعمل فقط لدورات Heartbeat ويرجع
- `before_prompt_build`: يتلقى الموجّه الحالي ورسائل الجلسة.
أرجع `prependContext` أو `appendContext` أو `systemPrompt`
أو `prependSystemContext` أو `appendSystemContext`.
- `heartbeat_prompt_contribution`: يعمل فقط لأدوار Heartbeat ويعيد
`prependContext` أو `appendContext`. وهو مخصص للمراقبات الخلفية
التي تحتاج إلى تلخيص الحالة الحالية من دون تغيير الدورات التي يبدأها المستخدم.
التي تحتاج إلى تلخيص الحالة الحالية من دون تغيير الأدوار التي يبدأها المستخدم.
يبقى `before_agent_start` للتوافق. فضل الخطافات الصريحة أعلاه
يبقى `before_agent_start` للتوافق. فضّل الخطافات الصريحة أعلاه
حتى لا يعتمد Plugin لديك على مرحلة مدمجة قديمة.
يتضمن `before_agent_start` و`agent_end` قيمة `event.runId` عندما يستطيع OpenClaw
تحديد التشغيل النشط. تتوفر القيمة نفسها أيضا في `ctx.runId`.
تعرض التشغيلات المدفوعة بـ Cron أيضا `ctx.jobId` (معرف مهمة Cron الأصلية) حتى
تستطيع خطافات Plugin حصر المقاييس، أو الآثار الجانبية، أو الحالة ضمن مهمة مجدولة
معينة.
تحديد التشغيل النشط. وتتوفر القيمة نفسها أيضا في `ctx.runId`.
تعرض التشغيلات المدفوعة بـ Cron أيضا `ctx.jobId` (معرّف مهمة Cron الأصلية) حتى
تستطيع خطافات Plugin حصر المقاييس، أو الآثار الجانبية، أو الحالة في مهمة مجدولة
محددة.
بالنسبة للتشغيلات الناشئة من قناة، يكون `ctx.messageProvider` هو سطح المزود مثل
`discord` أو `telegram`، بينما يكون `ctx.channelId` معرف هدف المحادثة
بالنسبة للتشغيلات الناشئة من قناة، يكون `ctx.messageProvider` هو سطح المزوّد مثل
`discord` أو `telegram`، بينما يكون `ctx.channelId` معرّف هدف المحادثة
عندما يستطيع OpenClaw اشتقاقه من مفتاح الجلسة أو بيانات تعريف التسليم.
`agent_end` خطاف ملاحظة ويعمل بنمط أطلق وانس بعد الدور. يطبق مشغل
الخطافات مهلة قدرها 30 ثانية حتى لا يترك Plugin عالق أو نقطة نهاية تضمين
وعد الخطاف معلقا إلى الأبد. تسجل المهلة ويتابع OpenClaw؛ ولا تلغي عمل
الشبكة المملوك لـ Plugin إلا إذا استخدم Plugin أيضا إشارة إيقاف خاصة به.
`agent_end` هو خطاف ملاحظة ويعمل بنمط الإطلاق والنسيان بعد الدور. يطبق
مشغّل الخطافات مهلة 30 ثانية حتى لا يترك Plugin عالق أو نقطة نهاية تضمين
وعد الخطاف معلقا إلى الأبد. تُسجّل المهلة ويواصل OpenClaw؛ ولا تلغي عمل الشبكة
المملوك لـ Plugin إلا إذا استخدم Plugin أيضا إشارة إلغاء خاصة به.
استخدم `model_call_started` و`model_call_ended` لقياسات استدعاء المزود
التي يجب ألا تتلقى الموجهات الخام، أو السجل، أو الاستجابات، أو الرؤوس، أو أجسام الطلبات،
أو معرفات طلبات المزود. تتضمن هذه الخطافات بيانات تعريف مستقرة مثل
`runId` و`callId` و`provider` و`model` و`api`/`transport` الاختياريين، و
`durationMs`/`outcome` النهائيين، و`upstreamRequestIdHash` عندما يستطيع OpenClaw اشتقاق
تجزئة محدودة لمعرف طلب المزود.
استخدم `model_call_started` و`model_call_ended` لقياسات استدعاء المزوّد
التي يجب ألا تتلقى الموجّهات الخام، أو السجل، أو الاستجابات، أو الرؤوس، أو أجسام
الطلبات، أو معرّفات طلبات المزوّد. تتضمن هذه الخطافات بيانات تعريف مستقرة مثل
`runId` و`callId` و`provider` و`model` و`api`/`transport` الاختياريين،
و`durationMs`/`outcome` النهائيين، و`upstreamRequestIdHash` عندما يستطيع
OpenClaw اشتقاق تجزئة محدودة لمعرّف طلب المزوّد.
يعمل `before_agent_finalize` فقط عندما يكون إطار الاختبار على وشك قبول إجابة
مساعد نهائية طبيعية. ليس هذا مسار إلغاء `/stop` ولا يعمل
عندما يوقف المستخدم دورا. أرجع `{ action: "revise", reason }` لطلب
مرور نموذج إضافي واحد من إطار الاختبار قبل الإنهاء، أو `{ action:
يعمل `before_agent_finalize` فقط عندما يكون الحامل على وشك قبول إجابة مساعد
نهائية طبيعية. وهو ليس مسار إلغاء `/stop` ولا يعمل عندما يجهض المستخدم دورا.
أرجع `{ action: "revise", reason }` لطلب تمريرة نموذج إضافية واحدة من الحامل
قبل الإنهاء، أو `{ action:
"finalize", reason? }` لفرض الإنهاء، أو احذف النتيجة للمتابعة.
ترحل خطافات `Stop` الأصلية في Codex إلى هذا الخطاف كقرارات
`before_agent_finalize` في OpenClaw.
تُرحّل خطافات Codex الأصلية `Stop` إلى هذا الخطاف كقرارات OpenClaw
`before_agent_finalize`.
يجب أن تضبط Plugins غير المضمنة التي تحتاج إلى `llm_input` أو `llm_output`،
أو `before_agent_finalize`، أو `agent_end` ما يلي:
عند إرجاع `action: "revise"`، يمكن لـ Plugins تضمين بيانات تعريف `retry` لجعل
تمريرة النموذج الإضافية محدودة وآمنة لإعادة التشغيل:
```typescript
type BeforeAgentFinalizeRetry = {
instruction: string;
idempotencyKey?: string;
maxAttempts?: number;
};
```
تُضاف `instruction` إلى سبب المراجعة المرسل إلى الحامل.
تتيح `idempotencyKey` للمضيف عدّ إعادة المحاولات لطلب Plugin نفسه عبر قرارات
إنهاء متكافئة، ويحد `maxAttempts` عدد التمريرات الإضافية التي سيسمح بها المضيف
قبل المتابعة بالإجابة النهائية الطبيعية.
يجب على Plugins غير المضمّنة التي تحتاج إلى `llm_input` أو `llm_output`
أو `before_agent_finalize` أو `agent_end` ضبط ما يلي:
```json
{
@ -283,112 +298,111 @@ type BeforeToolCallResult = {
}
```
يمكن تعطيل الخطافات التي تغير الموجه وحقن الدور التالي الدائم لكل Plugin
يمكن تعطيل الخطافات التي تغيّر الموجّه والحقن الدائمة للدور التالي لكل Plugin
باستخدام `plugins.entries.<id>.hooks.allowPromptInjection=false`.
### امتدادات الجلسة وحقن الدور التالي
يمكن لـ Plugins سير العمل استمرار حالة جلسة صغيرة متوافقة مع JSON باستخدام
يمكن لـ Workflow plugins الاحتفاظ بحالة جلسة صغيرة متوافقة مع JSON باستخدام
`api.registerSessionExtension(...)` وتحديثها عبر طريقة Gateway
`sessions.pluginPatch`. تعرض صفوف الجلسات حالة الامتداد المسجلة عبر
`pluginExtensions`، ما يتيح لـ Control UI والعملاء الآخرين عرض
الحالة المملوكة لـ Plugin من دون معرفة تفاصيل Plugin الداخلية.
`pluginExtensions`، مما يتيح لـ Control UI والعملاء الآخرين عرض الحالة التي
يمتلكها الـ plugin من دون معرفة تفاصيله الداخلية.
استخدم `api.enqueueNextTurnInjection(...)` عندما يحتاج Plugin إلى سياق دائم
للوصول إلى دورة النموذج التالية مرة واحدة بالضبط. يفرغ OpenClaw عمليات الحقن
المصطفة قبل خطافات المطالبة، ويسقط عمليات الحقن منتهية الصلاحية، ويزيل
التكرار حسب `idempotencyKey` لكل Plugin. هذه هي نقطة التكامل المناسبة
لاستئنافات الموافقة، وملخصات السياسات، وفروق مراقبة الخلفية، واستمرارات
الأوامر التي ينبغي أن تكون مرئية للنموذج في الدورة التالية لكنها لا ينبغي أن
تصبح نص مطالبة نظام دائمًا.
استخدم `api.enqueueNextTurnInjection(...)` عندما يحتاج plugin إلى سياق دائم
يصل إلى دورة النموذج التالية مرة واحدة بالضبط. يفرغ OpenClaw الإدخالات
المجدولة قبل prompt hooks، ويتجاهل الإدخالات المنتهية الصلاحية، ويزيل
التكرارات بحسب `idempotencyKey` لكل plugin. هذا هو الحد الفاصل الصحيح
لاستئنافات الموافقة، وملخصات السياسات، وفروقات مراقبة الخلفية، ومتابعات
الأوامر التي يجب أن تكون مرئية للنموذج في الدورة التالية لكنها لا ينبغي أن
تصبح نصًا دائمًا في system prompt.
دلالات التنظيف جزء من العقد. تتلقى عمليات تنظيف امتداد الجلسة واستدعاءات
تنظيف دورة حياة وقت التشغيل `reset` أو `delete` أو `disable` أو `restart`.
يزيل المضيف حالة امتداد الجلسة الدائمة الخاصة بالـ Plugin المالك وعمليات
الحقن المعلقة للدورة التالية عند إعادة الضبط/الحذف/التعطيل؛ أما إعادة التشغيل
فتبقي حالة الجلسة الدائمة بينما تتيح استدعاءات التنظيف للـ Plugins تحرير مهام
المجدول، وسياق التشغيل، والموارد الأخرى خارج النطاق للجيل القديم من وقت
التشغيل.
دلالات التنظيف جزء من العقد. تتلقى دوال تنظيف امتداد الجلسة وتنظيف دورة حياة
وقت التشغيل `reset` أو `delete` أو `disable` أو `restart`. يزيل المضيف حالة
امتداد الجلسة الدائمة التي يملكها الـ plugin والإدخالات المعلقة للدورة التالية
عند reset/delete/disable؛ أما restart فيُبقي حالة الجلسة الدائمة بينما تتيح
دوال التنظيف للـ plugins تحرير مهام المجدول، وسياق التشغيل، والموارد الأخرى
الخارجة عن المسار لجيل وقت التشغيل القديم.
## خطافات الرسائل
استخدم خطافات الرسائل للتوجيه على مستوى القناة وسياسة التسليم:
استخدم خطافات الرسائل لسياسة التوجيه والتسليم على مستوى القناة:
- `message_received`: راقب المحتوى الوارد، والمرسل، و`threadId`، و`messageId`،
و`senderId`، وارتباط التشغيل/الجلسة الاختياري، والبيانات الوصفية.
- `message_sending`: أعد كتابة `content` أو أرجع `{ cancel: true }`.
- `message_sent`: راقب النجاح أو الفشل النهائي.
- `message_received`: مراقبة المحتوى الوارد، والمرسل، و`threadId`، و`messageId`،
و`senderId`، والربط الاختياري بالتشغيل/الجلسة، والبيانات الوصفية.
- `message_sending`: إعادة كتابة `content` أو إرجاع `{ cancel: true }`.
- `message_sent`: مراقبة النجاح أو الفشل النهائي.
بالنسبة إلى ردود TTS الصوتية فقط، قد يحتوي `content` على النص المنطوق المخفي
حتى عندما لا تحتوي حمولة القناة على نص/تعليق مرئي. إعادة كتابة ذلك
`content` تحدّث النص المرئي للخطاف فقط؛ ولا يتم عرضه كتعليق وسائط.
حتى عندما لا تحتوي حمولة القناة على نص/تعليق مرئي. تؤدي إعادة كتابة ذلك
`content` إلى تحديث النص الظاهر للخطاف فقط؛ ولا يتم عرضه كتعليق وسائط.
تعرض سياقات خطافات الرسائل حقول ارتباط مستقرة عند توفرها:
`ctx.sessionKey` و`ctx.runId` و`ctx.messageId` و`ctx.senderId` و`ctx.trace` و
`ctx.traceId` و`ctx.spanId` و`ctx.parentSpanId` و`ctx.callDepth`. فضّل هذه
الحقول من الدرجة الأولى قبل قراءة البيانات الوصفية القديمة.
تعرض سياقات خطافات الرسائل حقول ربط مستقرة عند توفرها:
`ctx.sessionKey` و`ctx.runId` و`ctx.messageId` و`ctx.senderId` و`ctx.trace`
و`ctx.traceId` و`ctx.spanId` و`ctx.parentSpanId` و`ctx.callDepth`. فضّل
هذه الحقول المباشرة قبل قراءة البيانات الوصفية القديمة.
فضّل حقلي `threadId` و`replyToId` المطبوعين قبل استخدام البيانات الوصفية
فضّل حقلي `threadId` و`replyToId` المكتوبين قبل استخدام البيانات الوصفية
الخاصة بالقناة.
قواعد القرار:
- `message_sending` مع `cancel: true` نهائي.
- `message_sending` مع `cancel: false` يُعامل كعدم وجود قرار.
- يستمر `content` المعاد كتابته إلى الخطافات ذات الأولوية الأقل ما لم يلغِ
خطاف لاحق التسليم.
- `message_sending` مع `cancel: false` يُعامل كأنه بلا قرار.
- يستمر `content` المعاد كتابته إلى الخطافات الأقل أولوية ما لم يلغِ خطاف
لاحق التسليم.
## خطافات التثبيت
يعمل `before_install` بعد الفحص المدمج لتثبيت Skills وPlugin. أرجع نتائج
يعمل `before_install` بعد الفحص المدمج لتثبيت Skills وplugin. أرجع نتائج
إضافية أو `{ block: true, blockReason }` لإيقاف التثبيت.
`block: true` نهائي. `block: false` يُعامل كعدم وجود قرار.
`block: true` نهائي. يُعامل `block: false` كأنه بلا قرار.
## دورة حياة Gateway
استخدم `gateway_start` لخدمات Plugin التي تحتاج إلى حالة مملوكة من Gateway.
يعرض السياق `ctx.config` و`ctx.workspaceDir` و`ctx.getCron?.()` لفحص cron
وتحديثاته. استخدم `gateway_stop` لتنظيف الموارد طويلة التشغيل.
استخدم `gateway_start` لخدمات plugin التي تحتاج إلى حالة يملكها Gateway. يعرض
السياق `ctx.config` و`ctx.workspaceDir` و`ctx.getCron?.()` لفحص cron وتحديثاته.
استخدم `gateway_stop` لتنظيف الموارد طويلة التشغيل.
لا تعتمد على خطاف `gateway:startup` الداخلي لخدمات وقت التشغيل المملوكة
للـ Plugin.
لا تعتمد على خطاف `gateway:startup` الداخلي لخدمات وقت التشغيل التي يملكها
plugin.
يُطلق `cron_changed` لأحداث دورة حياة cron المملوكة من Gateway مع حمولة حدث
مطبوعة تغطي أسباب `added` و`updated` و`removed` و`started` و`finished` و
`scheduled`. يحمل الحدث لقطة `PluginHookGatewayCronJob` (بما في ذلك
`state.nextRunAtMs` و`state.lastRunStatus` و`state.lastError` عند وجودها) مع
`PluginHookGatewayCronDeliveryStatus` بقيمة `not-requested` | `delivered` |
`not-delivered` | `unknown`. ما زالت أحداث الإزالة تحمل لقطة المهمة المحذوفة
حتى تتمكن المجدولات الخارجية من مطابقة الحالة. استخدم `ctx.getCron?.()` و
`ctx.config` من سياق وقت التشغيل عند مزامنة مجدولات الإيقاظ الخارجية، وأبقِ
OpenClaw مصدر الحقيقة لفحوصات الاستحقاق والتنفيذ.
يُطلق `cron_changed` لأحداث دورة حياة cron التي يملكها gateway مع حمولة حدث
مكتوبة تغطي أسباب `added` و`updated` و`removed` و`started` و`finished`
و`scheduled`. يحمل الحدث لقطة `PluginHookGatewayCronJob` (بما في ذلك
`state.nextRunAtMs` و`state.lastRunStatus` و`state.lastError` عند وجودها)
إضافة إلى `PluginHookGatewayCronDeliveryStatus` بقيمة `not-requested` |
`delivered` | `not-delivered` | `unknown`. لا تزال أحداث الإزالة تحمل لقطة
المهمة المحذوفة حتى تتمكن المجدولات الخارجية من مطابقة الحالة. استخدم
`ctx.getCron?.()` و`ctx.config` من سياق وقت التشغيل عند مزامنة مجدولات
الإيقاظ الخارجية، وأبقِ OpenClaw مصدر الحقيقة لفحوصات الاستحقاق والتنفيذ.
## الإهمالات القادمة
هناك بعض الأسطح القريبة من الخطافات مهملة لكنها ما زالت مدعومة. انتقل قبل
الإصدار الرئيسي التالي:
بعض الأسطح القريبة من الخطافات مهملة لكنها لا تزال مدعومة. انتقل قبل الإصدار
الرئيسي التالي:
- **مظاريف القنوات النصية العادية** في معالجات `inbound_claim` و`message_received`.
اقرأ `BodyForAgent` وكتل سياق المستخدم المهيكلة بدلًا من تحليل نص المظروف
- **مغلفات القنوات بنص عادي** في معالجات `inbound_claim` و`message_received`.
اقرأ `BodyForAgent` وكتل سياق المستخدم المنظمة بدلًا من تحليل نص المغلف
المسطح. راجع
[مظاريف القنوات النصية العادية → BodyForAgent](/ar/plugins/sdk-migration#active-deprecations).
- يبقى **`before_agent_start`** للتوافق. ينبغي للـ Plugins الجديدة استخدام
`before_model_resolve` و`before_prompt_build` بدلًا من المرحلة المجمعة.
- يستخدم **`onResolution` في `before_tool_call`** الآن اتحاد
`PluginApprovalResolution` المطبوع (`allow-once` / `allow-always` / `deny` /
`timeout` / `cancelled`) بدلًا من `string` حر الشكل.
[مغلفات القنوات بنص عادي → BodyForAgent](/ar/plugins/sdk-migration#active-deprecations).
- **`before_agent_start`** باقٍ للتوافق. ينبغي للـ plugins الجديدة استخدام
`before_model_resolve` و`before_prompt_build` بدلًا من المرحلة المدمجة.
- **`onResolution` في `before_tool_call`** يستخدم الآن اتحاد
`PluginApprovalResolution` المكتوب (`allow-once` / `allow-always` / `deny` /
`timeout` / `cancelled`) بدلًا من `string` حر الصياغة.
للحصول على القائمة الكاملة — تسجيل قدرة الذاكرة، وملف تعريف تفكير المزوّد،
ومزوّدي المصادقة الخارجيين، وأنواع اكتشاف المزوّدين، وموصلات وقت تشغيل
المهام، وإعادة تسمية `command-auth` إلى `command-status` — راجع
للاطلاع على القائمة الكاملة — تسجيل قدرة الذاكرة، وملف تفكير المزوّد،
ومزوّدي المصادقة الخارجيين، وأنواع اكتشاف المزوّد، وموصلات وقت تشغيل المهام،
وإعادة تسمية `command-auth` إلى `command-status` — راجع
[ترحيل Plugin SDK → الإهمالات النشطة](/ar/plugins/sdk-migration#active-deprecations).
## ذو صلة
- [ترحيل Plugin SDK](/ar/plugins/sdk-migration) — الإهمالات النشطة والجدول الزمني للإزالة
- [بناء Plugins](/ar/plugins/building-plugins)
- [بناء plugins](/ar/plugins/building-plugins)
- [نظرة عامة على Plugin SDK](/ar/plugins/sdk-overview)
- [نقاط دخول Plugin](/ar/plugins/sdk-entrypoints)
- [الخطافات الداخلية](/ar/automation/hooks)
- [البنية الداخلية لمعمارية Plugin](/ar/plugins/architecture-internals)
- [تفاصيل بنية Plugin الداخلية](/ar/plugins/architecture-internals)

View File

@ -1,36 +1,36 @@
---
read_when:
- تحتاج إلى معرفة المسار الفرعي في SDK الذي يجب الاستيراد منه
- تريد مرجعًا لجميع أساليب التسجيل في OpenClawPluginApi
- أنت تبحث عن تصدير محدد في SDK
- يجب أن تعرف المسار الفرعي في SDK الذي ستستورد منه
- تريد مرجعًا لجميع طرق التسجيل في OpenClawPluginApi
- أنت تبحث عن تصدير محدد من SDK
sidebarTitle: Plugin SDK overview
summary: خريطة الاستيراد، ومرجع واجهة برمجة تطبيقات التسجيل، وبنية حزمة تطوير البرمجيات
summary: خريطة الاستيراد، ومرجع API التسجيل، وبنية SDK
title: نظرة عامة على Plugin SDK
x-i18n:
generated_at: "2026-05-02T07:38:54Z"
generated_at: "2026-05-04T18:24:45Z"
model: gpt-5.5
provider: openai
source_hash: be5fa531e603fb6d87f84e3193ebd61be1431b57b8f284871ae15f34ca93fc69
source_hash: 8187e7d4cfb9d6fb19bbdebfbaea0bb4d98fa5cea4742d0f82a765ae5bc60127
source_path: plugins/sdk-overview.md
workflow: 16
---
SDK الخاص بالـ Plugin هو العقد المطبوع بين Plugins والنواة. هذه الصفحة هي
مرجع **ما يجب استيراده** و**ما يمكنك تسجيله**.
SDK الخاص بـ Plugin هو العقد المطبوع بين Plugins والنواة. هذه الصفحة هي
المرجع لـ **ما يجب استيراده** و**ما يمكنك تسجيله**.
<Note>
هذه الصفحة مخصصة لمؤلفي Plugins الذين يستخدمون `openclaw/plugin-sdk/*` داخل
OpenClaw. بالنسبة للتطبيقات الخارجية، والسكربتات، ولوحات المعلومات، ومهام CI، وامتدادات IDE
هذه الصفحة مخصصة لمؤلفي Plugin الذين يستخدمون `openclaw/plugin-sdk/*` داخل
OpenClaw. بالنسبة للتطبيقات الخارجية والسكربتات ولوحات المعلومات ومهام CI وامتدادات IDE
التي تريد تشغيل الوكلاء عبر Gateway، استخدم
[SDK تطبيق OpenClaw](/ar/concepts/openclaw-sdk) وحزمة `@openclaw/sdk`
بدلا من ذلك.
</Note>
<Tip>
هل تبحث عن دليل إرشادي بدلا من ذلك؟ ابدأ بـ [بناء Plugins](/ar/plugins/building-plugins)، واستخدم [Plugins القنوات](/ar/plugins/sdk-channel-plugins) لـ Plugins القنوات، و[Plugins المزوّدين](/ar/plugins/sdk-provider-plugins) لـ Plugins المزوّدين، و[خطافات Plugin](/ar/plugins/hooks) لـ Plugins خطافات الأدوات أو دورة الحياة.
هل تبحث عن دليل إرشادي بدلا من ذلك؟ ابدأ بـ [بناء Plugins](/ar/plugins/building-plugins)، واستخدم [Channel plugins](/ar/plugins/sdk-channel-plugins) لـ channel plugins، و[Provider plugins](/ar/plugins/sdk-provider-plugins) لـ provider plugins، و[Plugin hooks](/ar/plugins/hooks) لـ tool أو lifecycle hook plugins.
</Tip>
## عرف الاستيراد
## اصطلاح الاستيراد
استورد دائما من مسار فرعي محدد:
@ -39,160 +39,160 @@ import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";
import { defineChannelPluginEntry } from "openclaw/plugin-sdk/channel-core";
```
كل مسار فرعي هو وحدة صغيرة ومستقلة بذاتها. يحافظ ذلك على سرعة بدء التشغيل
ويمنع مشكلات الاعتماد الدائري. بالنسبة لمساعدات إدخال/بناء الخاصة بالقنوات،
فضّل `openclaw/plugin-sdk/channel-core`؛ واحتفظ بـ `openclaw/plugin-sdk/core` من أجل
السطح الأوسع والمساعدات المشتركة مثل
كل مسار فرعي هو وحدة صغيرة ومستقلة بذاتها. هذا يحافظ على سرعة بدء التشغيل
ويمنع مشكلات الاعتمادية الدائرية. بالنسبة لمساعدات الإدخال/البناء الخاصة بالقنوات،
فضّل `openclaw/plugin-sdk/channel-core`؛ واحتفظ بـ `openclaw/plugin-sdk/core` للسطح
الأوسع والمساعدات المشتركة مثل
`buildChannelConfigSchema`.
بالنسبة لإعدادات القناة، انشر JSON Schema المملوك للقناة عبر
بالنسبة لإعداد القناة، انشر JSON Schema المملوك للقناة عبر
`openclaw.plugin.json#channelConfigs`. المسار الفرعي `plugin-sdk/channel-config-schema`
مخصص لأساسيات المخطط المشتركة والباني العام. تستخدم Plugins المضمنة في OpenClaw
`plugin-sdk/bundled-channel-config-schema` لمخططات القنوات المضمنة المحتفظ بها.
تبقى صادرات التوافق المهملة على
`plugin-sdk/channel-config-schema-legacy`؛ ولا يمثل أي من مساري مخططات القنوات المضمنة
`plugin-sdk/channel-config-schema-legacy`؛ ولا يمثل أي من مساري المخططات المضمنة
نمطا لـ Plugins الجديدة.
<Warning>
لا تستورد واجهات التسهيل ذات العلامة الخاصة بالمزوّدين أو القنوات (على سبيل المثال
`openclaw/plugin-sdk/slack`، و`.../discord`، و`.../signal`، و`.../whatsapp`).
تؤلف Plugins المضمنة مسارات SDK الفرعية العامة داخل حزم `api.ts` /
`runtime-api.ts` المحلية الخاصة بها؛ يجب على مستهلكي النواة إما استخدام تلك الحزم المحلية للـ Plugin
أو إضافة عقد SDK عام ضيق عندما تكون الحاجة عابرة للقنوات حقا.
لا تستورد مسارات الراحة ذات العلامات الخاصة بالمزود أو القناة (على سبيل المثال
`openclaw/plugin-sdk/slack`، أو `.../discord`، أو `.../signal`، أو `.../whatsapp`).
تجمع Plugins المضمنة مسارات SDK الفرعية العامة داخل براميل `api.ts` /
`runtime-api.ts` الخاصة بها؛ ويجب على مستهلكي النواة إما استخدام تلك البراميل المحلية
للـ Plugin أو إضافة عقد SDK عام ضيق عندما تكون الحاجة عابرة للقنوات فعلا.
ما زالت مجموعة صغيرة من واجهات مساعدات Plugins المضمنة تظهر في خريطة التصدير المولدة
عندما يكون لديها استخدام مالك متتبع. وهي موجودة لصيانة Plugins المضمنة فقط
ولا يوصى بها كمسارات استيراد لـ Plugins الطرف الثالث الجديدة.
ما يزال يظهر عدد صغير من مسارات مساعدات Plugins المضمنة في خريطة التصدير
المولدة عندما يكون لها استخدام مالك متتبع. وهي موجودة لصيانة Plugins المضمنة فقط
ولا يوصى بها كمسارات استيراد لـ Plugins جديدة من أطراف ثالثة.
يتم أيضا الاحتفاظ بـ `openclaw/plugin-sdk/discord` و`openclaw/plugin-sdk/telegram-account`
كواجهات توافق مهملة لاستخدام المالك المتتبع. لا
تنسخ مسارات الاستيراد هذه إلى Plugins جديدة؛ استخدم مساعدات وقت التشغيل المحقونة
ومسارات SDK العامة الخاصة بالقنوات بدلا من ذلك.
يُحتفظ أيضا بـ `openclaw/plugin-sdk/discord` و`openclaw/plugin-sdk/telegram-account`
كواجهات توافق مهملة لاستخدام مالك متتبع. لا تنسخ مسارات الاستيراد هذه إلى
Plugins جديدة؛ استخدم مساعدات وقت التشغيل المحقونة ومسارات SDK العامة للقنوات
بدلا من ذلك.
</Warning>
## مرجع المسارات الفرعية
يتم عرض SDK الخاص بالـ Plugin كمجموعة من المسارات الفرعية الضيقة المجمعة حسب المجال (إدخال Plugin،
والقناة، والمزوّد، والمصادقة، ووقت التشغيل، والقدرات، والذاكرة، ومساعدات Plugins المضمنة
المحجوزة). للاطلاع على الفهرس الكامل، مجمعا ومربوطا، راجع
[مسارات SDK الخاصة بالـ Plugin الفرعية](/ar/plugins/sdk-subpaths).
يُعرض Plugin SDK كمجموعة من المسارات الفرعية الضيقة المجمعة حسب المجال (إدخال
Plugin، والقناة، والمزود، والمصادقة، ووقت التشغيل، والإمكانات، والذاكرة، ومساعدات
Plugins المضمنة المحجوزة). للاطلاع على الفهرس الكامل، مجمعا ومربوطا، راجع
[المسارات الفرعية لـ Plugin SDK](/ar/plugins/sdk-subpaths).
توجد القائمة المولدة لأكثر من 200 مسار فرعي في `scripts/lib/plugin-sdk-entrypoints.json`.
توجد القائمة المولدة التي تضم أكثر من 200 مسار فرعي في `scripts/lib/plugin-sdk-entrypoints.json`.
## API التسجيل
تتلقى دالة رد النداء `register(api)` كائن `OpenClawPluginApi` يحتوي على هذه
يتلقى رد النداء `register(api)` كائن `OpenClawPluginApi` بهذه
الطرق:
### تسجيل القدرات
### تسجيل الإمكانات
| الطريقة | ما تسجله |
| الطريقة | ما تسجله |
| ------------------------------------------------ | ------------------------------------- |
| `api.registerProvider(...)` | استدلال نصي (LLM) |
| `api.registerAgentHarness(...)` | منفذ وكيل منخفض المستوى تجريبي |
| `api.registerCliBackend(...)` | خلفية استدلال CLI محلية |
| `api.registerProvider(...)` | استدلال نصي (LLM) |
| `api.registerAgentHarness(...)` | منفذ وكيل منخفض المستوى وتجريبي |
| `api.registerCliBackend(...)` | خلفية استدلال CLI محلية |
| `api.registerChannel(...)` | قناة مراسلة |
| `api.registerSpeechProvider(...)` | تركيب تحويل النص إلى كلام / STT |
| `api.registerRealtimeTranscriptionProvider(...)` | نسخ فوري متدفق |
| `api.registerRealtimeVoiceProvider(...)` | جلسات صوت فورية ثنائية الاتجاه |
| `api.registerMediaUnderstandingProvider(...)` | تحليل الصور/الصوت/الفيديو |
| `api.registerSpeechProvider(...)` | تحويل النص إلى كلام / تركيب STT |
| `api.registerRealtimeTranscriptionProvider(...)` | تفريغ فوري متدفق |
| `api.registerRealtimeVoiceProvider(...)` | جلسات صوتية فورية مزدوجة الاتجاه |
| `api.registerMediaUnderstandingProvider(...)` | تحليل الصور/الصوت/الفيديو |
| `api.registerImageGenerationProvider(...)` | توليد الصور |
| `api.registerMusicGenerationProvider(...)` | توليد الموسيقى |
| `api.registerVideoGenerationProvider(...)` | توليد الفيديو |
| `api.registerWebFetchProvider(...)` | مزوّد جلب الويب / الكشط |
| `api.registerWebSearchProvider(...)` | بحث الويب |
| `api.registerWebFetchProvider(...)` | مزود جلب / كشط ويب |
| `api.registerWebSearchProvider(...)` | بحث ويب |
### الأدوات والأوامر
| الطريقة | ما تسجله |
| ------------------------------- | --------------------------------------------- |
| `api.registerTool(tool, opts?)` | أداة وكيل (مطلوبة أو `{ optional: true }`) |
| `api.registerCommand(def)` | أمر مخصص (يتجاوز LLM) |
| الطريقة | ما تسجله |
| ------------------------------- | ----------------------------------------------- |
| `api.registerTool(tool, opts?)` | أداة وكيل (مطلوبة أو `{ optional: true }`) |
| `api.registerCommand(def)` | أمر مخصص (يتجاوز LLM) |
يمكن لأوامر Plugin تعيين `agentPromptGuidance` عندما يحتاج الوكيل إلى تلميح توجيه قصير
مملوك للأمر. أبق ذلك النص متعلقا بالأمر نفسه؛ لا تضف
سياسة خاصة بمزوّد أو Plugin إلى بُناة الموجهات في النواة.
يمكن لأوامر Plugin ضبط `agentPromptGuidance` عندما يحتاج الوكيل إلى تلميح توجيه
قصير مملوك للأمر. أبق هذا النص عن الأمر نفسه؛ ولا تضف سياسة خاصة بمزود أو Plugin
إلى بناة الموجهات في النواة.
### البنية التحتية
| الطريقة | ما تسجله |
| ---------------------------------------------- | ------------------------------------------ |
| `api.registerHook(events, handler, opts?)` | خطاف حدث |
| `api.registerHttpRoute(params)` | نقطة نهاية HTTP في Gateway |
| `api.registerGatewayMethod(name, handler)` | طريقة RPC في Gateway |
| `api.registerGatewayDiscoveryService(service)` | معلن اكتشاف Gateway محلي |
| `api.registerCli(registrar, opts?)` | أمر فرعي في CLI |
| `api.registerService(service)` | خدمة خلفية |
| `api.registerInteractiveHandler(registration)` | معالج تفاعلي |
| `api.registerAgentToolResultMiddleware(...)` | وسيط نتائج أدوات وقت التشغيل |
| `api.registerMemoryPromptSupplement(builder)` | قسم موجه إضافي مجاور للذاكرة |
| `api.registerMemoryCorpusSupplement(adapter)` | مجموعة إضافية للبحث/القراءة في الذاكرة |
| الطريقة | ما تسجله |
| ---------------------------------------------- | ------------------------------------- |
| `api.registerHook(events, handler, opts?)` | خطاف حدث |
| `api.registerHttpRoute(params)` | نقطة نهاية HTTP في Gateway |
| `api.registerGatewayMethod(name, handler)` | طريقة RPC في Gateway |
| `api.registerGatewayDiscoveryService(service)` | معلن اكتشاف Gateway محلي |
| `api.registerCli(registrar, opts?)` | أمر فرعي CLI |
| `api.registerService(service)` | خدمة خلفية |
| `api.registerInteractiveHandler(registration)` | معالج تفاعلي |
| `api.registerAgentToolResultMiddleware(...)` | وسيط نتيجة الأداة في وقت التشغيل |
| `api.registerMemoryPromptSupplement(builder)` | قسم موجه إضافي مجاور للذاكرة |
| `api.registerMemoryCorpusSupplement(adapter)` | متن بحث/قراءة ذاكرة إضافي |
### خطافات المضيف لـ Plugins سير العمل
### خطافات المضيف لـ workflow plugins
خطافات المضيف هي واجهات SDK لـ Plugins التي تحتاج إلى المشاركة في دورة حياة المضيف
بدلا من مجرد إضافة مزوّد، أو قناة، أو أداة. إنها
عقود عامة؛ يمكن لوضع الخطة استخدامها، وكذلك سير عمل الموافقات،
وبوابات سياسة مساحة العمل، والمراقبات الخلفية، ومعالجات الإعداد، وPlugins مرافقة لواجهة المستخدم.
خطافات المضيف هي مسارات SDK الخاصة بـ Plugins التي تحتاج إلى المشاركة في دورة حياة
المضيف بدلا من مجرد إضافة مزود أو قناة أو أداة. إنها عقود عامة؛ يمكن لـ Plan Mode
استخدامها، وكذلك مهام سير الموافقة، وبوابات سياسة مساحة العمل، والمراقبات الخلفية،
ومعالجات الإعداد، وPlugins المرافقة للواجهة.
| الطريقة | العقد الذي تملكه |
| ------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ |
| `api.registerSessionExtension(...)` | حالة جلسة مملوكة للـ Plugin ومتوافقة مع JSON ومعروضة عبر جلسات Gateway |
| `api.enqueueNextTurnInjection(...)` | سياق دائم ينفذ مرة واحدة بالضبط ويُحقن في دورة الوكيل التالية لجلسة واحدة |
| `api.registerTrustedToolPolicy(...)` | سياسة أدوات ما قبل Plugin مضمّنة/موثوقة يمكنها حظر معاملات الأدوات أو إعادة كتابتها |
| `api.registerToolMetadata(...)` | بيانات وصفية لعرض فهرس الأدوات دون تغيير تنفيذ الأداة |
| `api.registerCommand(...)` | أوامر Plugin ذات نطاق؛ يمكن لنتائج الأمر تعيين `continueAgent: true`؛ تدعم أوامر Discord الأصلية `descriptionLocalizations` |
| `api.registerControlUiDescriptor(...)` | واصفات مساهمة واجهة التحكم لأسطح الجلسة أو الأداة أو التشغيل أو الإعدادات |
| `api.registerRuntimeLifecycle(...)` | دوال تنظيف لموارد وقت التشغيل المملوكة للـ Plugin في مسارات إعادة الضبط/الحذف/إعادة التحميل |
| `api.registerAgentEventSubscription(...)` | اشتراكات أحداث منقاة لحالة سير العمل والمراقبات |
| `api.setRunContext(...)` / `getRunContext(...)` / `clearRunContext(...)` | حالة مؤقتة لكل تشغيل خاصة بالـ Plugin تُمسح عند انتهاء دورة حياة التشغيل الطرفية |
| `api.registerSessionSchedulerJob(...)` | سجلات مهام مجدول الجلسة المملوكة للـ Plugin مع تنظيف حتمي |
| الطريقة | العقد الذي تملكه |
| ------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------- |
| `api.registerSessionExtension(...)` | حالة جلسة مملوكة لـ Plugin ومتوافقة مع JSON ومعروضة عبر جلسات Gateway |
| `api.enqueueNextTurnInjection(...)` | سياق دائم لمرة واحدة بالضبط يحقن في دور الوكيل التالي لجلسة واحدة |
| `api.registerTrustedToolPolicy(...)` | سياسة أداة قبل Plugin مضمّنة/موثوقة يمكنها حظر معلمات الأداة أو إعادة كتابتها |
| `api.registerToolMetadata(...)` | بيانات وصفية لعرض فهرس الأدوات دون تغيير تنفيذ الأداة |
| `api.registerCommand(...)` | أوامر Plugin محددة النطاق؛ يمكن لنتائج الأمر ضبط `continueAgent: true`؛ وتدعم أوامر Discord الأصلية `descriptionLocalizations` |
| `api.registerControlUiDescriptor(...)` | واصفات مساهمة Control UI لأسطح الجلسة أو الأداة أو التشغيل أو الإعدادات |
| `api.registerRuntimeLifecycle(...)` | ردود نداء تنظيف لموارد وقت التشغيل المملوكة لـ Plugin في مسارات إعادة الضبط/الحذف/إعادة التحميل |
| `api.registerAgentEventSubscription(...)` | اشتراكات أحداث منقحة لحالة workflow والمراقبات |
| `api.setRunContext(...)` / `getRunContext(...)` / `clearRunContext(...)` | حالة مؤقتة لكل تشغيل خاصة بـ Plugin تُمسح عند دورة حياة التشغيل النهائية |
| `api.registerSessionSchedulerJob(...)` | سجلات مهمة مجدول الجلسة المملوكة لـ Plugin مع تنظيف حتمي |
تقسم العقود السلطة عمدا:
تقسم العقود الصلاحيات عمدا:
- يمكن لـ Plugins الخارجية امتلاك امتدادات الجلسة، وواصفات واجهة المستخدم، والأوامر، والبيانات الوصفية للأدوات، وحقن الدورة التالية، والخطافات العادية.
- تعمل سياسات الأدوات الموثوقة قبل خطافات `before_tool_call` العادية، وهي مخصصة للمضمنة فقط لأنها تشارك في سياسة أمان المضيف.
- ملكية الأوامر المحجوزة مخصصة للمضمنة فقط. يجب أن تستخدم Plugins الخارجية أسماء أوامرها أو ألقابها الخاصة.
- يعطل `allowPromptInjection=false` الخطافات التي تعدل الموجهات، بما في ذلك
- يمكن لـ Plugins الخارجية امتلاك امتدادات الجلسة، وواصفات الواجهة، والأوامر، وبيانات
تعريف الأدوات، وحقن الدور التالي، والخطافات العادية.
- تعمل سياسات الأدوات الموثوقة قبل خطافات `before_tool_call` العادية وهي
مضمّنة فقط لأنها تشارك في سياسة سلامة المضيف.
- ملكية الأوامر المحجوزة مضمّنة فقط. يجب أن تستخدم Plugins الخارجية أسماء أوامرها
أو ألقابها الخاصة.
- يعطل `allowPromptInjection=false` الخطافات التي تعدل الموجه، بما في ذلك
`agent_turn_prepare`، و`before_prompt_build`، و`heartbeat_prompt_contribution`،
وحقول الموجه من `before_agent_start` القديم، و
`enqueueNextTurnInjection`.
أمثلة على مستهلكين غير وضع الخطة:
أمثلة على مستهلكين غير Plan:
| نمط Plugin | الخطافات المستخدمة |
| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| سير عمل موافقة | امتداد الجلسة، متابعة الأمر، حقن الدورة التالية، واصف واجهة المستخدم |
| بوابة سياسة الميزانية/مساحة العمل | سياسة الأدوات الموثوقة، البيانات الوصفية للأدوات، إسقاط الجلسة |
| مراقب دورة حياة خلفي | تنظيف دورة حياة وقت التشغيل، اشتراك أحداث الوكيل، ملكية/تنظيف مجدول الجلسة، مساهمة موجه Heartbeat، واصف واجهة المستخدم |
| معالج إعداد أو تهيئة | امتداد الجلسة، أوامر ذات نطاق، واصف واجهة التحكم |
| نموذج Plugin | الخطافات المستخدمة |
| ---------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
| workflow الموافقة | امتداد الجلسة، متابعة الأمر، حقن الدور التالي، واصف الواجهة |
| بوابة سياسة الميزانية/مساحة العمل | سياسة أداة موثوقة، بيانات تعريف الأداة، إسقاط الجلسة |
| مراقب دورة حياة خلفي | تنظيف دورة حياة وقت التشغيل، اشتراك حدث الوكيل، ملكية/تنظيف مجدول الجلسة، مساهمة موجه Heartbeat، واصف الواجهة |
| معالج إعداد أو onboarding | امتداد الجلسة، أوامر محددة النطاق، واصف Control UI |
<Note>
تبقى مساحات أسماء الإدارة الأساسية المحجوزة (`config.*`، و`exec.approvals.*`، و`wizard.*`،
و`update.*`) دائما `operator.admin`، حتى إذا حاول Plugin تعيين
نطاق طريقة Gateway أضيق. فضّل البادئات الخاصة بالـ Plugin للطرق
المملوكة للـ Plugin.
تبقى مساحات أسماء إدارة النواة المحجوزة (`config.*`، و`exec.approvals.*`، و`wizard.*`،
و`update.*`) دائما `operator.admin`، حتى إذا حاول Plugin تعيين نطاق طريقة Gateway
أضيق. فضّل بادئات خاصة بـ Plugin للطرق المملوكة لـ Plugin.
</Note>
<Accordion title="متى تستخدم وسيط نتائج الأدوات">
<Accordion title="متى تستخدم وسيط نتيجة الأداة">
يمكن لـ Plugins المضمنة استخدام `api.registerAgentToolResultMiddleware(...)` عندما
تحتاج إلى إعادة كتابة نتيجة أداة بعد التنفيذ وقبل أن يعيد وقت التشغيل
تغذية تلك النتيجة إلى النموذج. هذه هي الواجهة الموثوقة والمحايدة تجاه وقت التشغيل
لمختزلات الإخراج غير المتزامنة مثل tokenjuice.
تحتاج إلى إعادة كتابة نتيجة أداة بعد التنفيذ وقبل أن يعيد وقت التشغيل تغذية
تلك النتيجة إلى النموذج. هذا هو المسار الموثوق والمحايد لوقت التشغيل
لمخفضات الإخراج غير المتزامنة مثل tokenjuice.
يجب أن تعلن Plugins المضمنة عن `contracts.agentToolResultMiddleware` لكل
وقت تشغيل مستهدف، على سبيل المثال `["pi", "codex"]`. لا يمكن لـ Plugins الخارجية
تسجيل هذا الوسيط؛ أبق خطافات OpenClaw Plugin العادية للأعمال
التي لا تحتاج إلى توقيت نتائج الأدوات قبل النموذج. تمت إزالة مسار تسجيل
مصنع الامتداد المضمن القديم الخاص بـ Pi فقط.
تسجيل هذا الوسيط؛ أبق خطافات OpenClaw Plugin العادية للعمل الذي لا يحتاج إلى
توقيت نتيجة الأداة قبل النموذج. تمت إزالة مسار تسجيل مصنع الامتداد المضمن
القديم الخاص بـ Pi فقط.
</Accordion>
### تسجيل اكتشاف Gateway
`api.registerGatewayDiscoveryService(...)` تتيح لـ Plugin الإعلان عن Gateway النشط
عبر ناقل اكتشاف محلي مثل mDNS/Bonjour. يستدعي OpenClaw الخدمة أثناء بدء تشغيل
Gateway عندما يكون الاكتشاف المحلي مفعلا، ويمرر منافذ Gateway الحالية وبيانات تلميح TXT غير السرية،
ويستدعي معالج `stop` الذي تم إرجاعه أثناء إيقاف Gateway.
`api.registerGatewayDiscoveryService(...)` يتيح لـ Plugin الإعلان عن Gateway النشط
على نقل اكتشاف محلي مثل mDNS/Bonjour. يستدعي OpenClaw هذه الخدمة أثناء بدء تشغيل Gateway عندما يكون الاكتشاف المحلي مفعلا، ويمرر منافذ Gateway الحالية وبيانات تلميح TXT غير السرية، ويستدعي معالج `stop` المُعاد أثناء إيقاف تشغيل Gateway.
```typescript
api.registerGatewayDiscoveryService({
@ -208,21 +208,19 @@ api.registerGatewayDiscoveryService({
});
```
يجب ألا تتعامل Plugins اكتشاف Gateway مع قيم TXT المعلنة كأسرار أو
مصادقة. الاكتشاف تلميح توجيه؛ ولا تزال مصادقة Gateway وتثبيت TLS
مسؤولين عن الثقة.
يجب ألا تتعامل Plugins اكتشاف Gateway مع قيم TXT المُعلنة على أنها أسرار أو
مصادقة. الاكتشاف تلميح توجيه؛ ولا تزال مصادقة Gateway وتثبيت TLS هما المسؤولين عن الثقة.
### بيانات تعريف تسجيل CLI
### بيانات تسجيل CLI الوصفية
`api.registerCli(registrar, opts?)` تقبل نوعين من بيانات التعريف العلوية:
`api.registerCli(registrar, opts?)` يقبل نوعين من البيانات الوصفية العليا:
- `commands`: جذور أوامر صريحة يملكها المسجل
- `commands`: جذور أوامر صريحة يملكها المسجِّل
- `descriptors`: واصفات أوامر وقت التحليل المستخدمة لمساعدة CLI الجذرية،
والتوجيه، وتسجيل CLI الخاص بـ Plugin بالتحميل الكسول
والتوجيه، وتسجيل CLI الخاص بـ Plugin بتحميل كسول
إذا كنت تريد أن يبقى أمر Plugin محملا كسولا في مسار CLI الجذري العادي،
فوفر `descriptors` تغطي كل جذر أمر علوي يعرّضه ذلك
المسجل.
إذا كنت تريد أن يبقى أمر Plugin محملا بكسل في مسار CLI الجذري العادي،
فوفّر `descriptors` تغطي كل جذر أمر علوي يكشفه ذلك المسجِّل.
```typescript
api.registerCli(
@ -242,96 +240,96 @@ api.registerCli(
);
```
استخدم `commands` وحدها فقط عندما لا تحتاج إلى تسجيل CLI جذري كسول.
يبقى مسار التوافق الشره هذا مدعوما، لكنه لا يثبت
عناصر نائبة مدعومة بالواصفات للتحميل الكسول وقت التحليل.
استخدم `commands` وحده فقط عندما لا تحتاج إلى تسجيل CLI جذري بتحميل كسول.
يبقى مسار التوافق المتحمس هذا مدعوما، لكنه لا يثبّت عناصر نائبة مدعومة بالواصفات للتحميل الكسول وقت التحليل.
### تسجيل خلفية CLI
`api.registerCliBackend(...)` تتيح لـ Plugin امتلاك الإعداد الافتراضي لخلفية
`api.registerCliBackend(...)` يتيح لـ Plugin امتلاك الإعداد الافتراضي لخلفية
CLI محلية للذكاء الاصطناعي مثل `codex-cli`.
- يصبح `id` الخاص بالخلفية بادئة المزود في مراجع النماذج مثل `codex-cli/gpt-5`.
- يصبح `id` الخاص بالخلفية بادئة المزوّد في مراجع النماذج مثل `codex-cli/gpt-5`.
- يستخدم `config` الخاص بالخلفية الشكل نفسه مثل `agents.defaults.cliBackends.<id>`.
- يظل إعداد المستخدم هو الفائز. يدمج OpenClaw `agents.defaults.cliBackends.<id>` فوق
الإعداد الافتراضي لـ Plugin قبل تشغيل CLI.
- يظل إعداد المستخدم هو الغالب. يدمج OpenClaw `agents.defaults.cliBackends.<id>` فوق
الإعداد الافتراضي الخاص بـ Plugin قبل تشغيل CLI.
- استخدم `normalizeConfig` عندما تحتاج الخلفية إلى إعادة كتابة توافقية بعد الدمج
(على سبيل المثال، تطبيع أشكال الرايات القديمة).
(على سبيل المثال تطبيع أشكال الرايات القديمة).
- استخدم `resolveExecutionArgs` لإعادة كتابة argv ضمن نطاق الطلب عندما تكون تابعة
للّهجة CLI، مثل ربط مستويات التفكير في OpenClaw براية جهد أصلية.
### الخانات الحصرية
### الفتحات الحصرية
| الطريقة | ما تسجله |
| ------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `api.registerContextEngine(id, factory)` | محرك السياق (نشط واحد في كل مرة). يتلقى استدعاء `assemble()` قيمتي `availableTools` و`citationsMode` حتى يتمكن المحرك من تخصيص إضافات الموجه. |
| `api.registerMemoryCapability(capability)` | قدرة ذاكرة موحدة |
| `api.registerMemoryPromptSection(builder)` | باني قسم موجه الذاكرة |
| `api.registerMemoryFlushPlan(resolver)` | حال مخطط تفريغ الذاكرة |
| `api.registerMemoryRuntime(runtime)` | محول وقت تشغيل الذاكرة |
| الطريقة | ما تسجله |
| ------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `api.registerContextEngine(id, factory)` | محرك سياق (واحد نشط في كل مرة). يتلقى استدعاء `assemble()` حقلي `availableTools` و`citationsMode` حتى يتمكن المحرك من تخصيص إضافات الموجّه. |
| `api.registerMemoryCapability(capability)` | قدرة ذاكرة موحدة |
| `api.registerMemoryPromptSection(builder)` | باني قسم موجّه الذاكرة |
| `api.registerMemoryFlushPlan(resolver)` | محلّل خطة تفريغ الذاكرة |
| `api.registerMemoryRuntime(runtime)` | محوّل تشغيل الذاكرة |
### محولات تضمين الذاكرة
### محوّلات تضمين الذاكرة
| الطريقة | ما تسجله |
| ---------------------------------------------- | ---------------------------------------------- |
| `api.registerMemoryEmbeddingProvider(adapter)` | محول تضمين الذاكرة لـ Plugin النشط |
| الطريقة | ما تسجله |
| ---------------------------------------------- | ------------------------------------- |
| `api.registerMemoryEmbeddingProvider(adapter)` | محوّل تضمين ذاكرة لـ Plugin النشط |
- `registerMemoryCapability` هي API الحصرية المفضلة لـ Plugin الذاكرة.
- قد تعرض `registerMemoryCapability` أيضا `publicArtifacts.listArtifacts(...)`
حتى تتمكن Plugins المرافقة من استهلاك آثار الذاكرة المصدرة عبر
`openclaw/plugin-sdk/memory-host-core` بدلا من الوصول إلى التخطيط الخاص
بـ Plugin ذاكرة محدد.
- `registerMemoryCapability` هو API الذاكرة الحصري المفضّل لـ Plugin.
- قد يكشف `registerMemoryCapability` أيضا `publicArtifacts.listArtifacts(...)`
حتى تتمكن Plugins المرافقة من استهلاك عناصر الذاكرة المُصدّرة عبر
`openclaw/plugin-sdk/memory-host-core` بدلا من الوصول إلى التخطيط الخاص لـ Plugin ذاكرة محدد.
- `registerMemoryPromptSection` و`registerMemoryFlushPlan` و
`registerMemoryRuntime` هي APIs حصرية متوافقة مع القديم لـ Plugin الذاكرة.
`registerMemoryRuntime` هي واجهات API حصرية متوافقة مع الإرث لـ Plugin الذاكرة.
- يمكن لـ `MemoryFlushPlan.model` تثبيت دورة التفريغ على مرجع `provider/model`
دقيق، مثل `ollama/qwen3:8b`، دون وراثة سلسلة الاحتياط النشطة.
- تتيح `registerMemoryEmbeddingProvider` لـ Plugin الذاكرة النشط تسجيل
معرف محول تضمين واحد أو أكثر (على سبيل المثال `openai` أو `gemini` أو معرف
مخصص يعرّفه Plugin).
- يتم حل إعداد المستخدم مثل `agents.defaults.memorySearch.provider` و
`agents.defaults.memorySearch.fallback` مقابل معرفات المحولات المسجلة هذه.
دقيق، مثل `ollama/qwen3:8b`، من دون وراثة سلسلة الاحتياط النشطة.
- يتيح `registerMemoryEmbeddingProvider` لـ Plugin الذاكرة النشط تسجيل معرّف
واحد أو أكثر لمحوّل التضمين (على سبيل المثال `openai` أو `gemini` أو معرّف مخصص
معرّف من Plugin).
- تُحل إعدادات المستخدم مثل `agents.defaults.memorySearch.provider` و
`agents.defaults.memorySearch.fallback` مقابل معرّفات المحوّلات المسجلة هذه.
### الأحداث ودورة الحياة
| الطريقة | ما تفعله |
| -------------------------------------------- | ----------------------------- |
| `api.on(hookName, handler, opts?)` | خطاف دورة حياة مضبوط النوع |
| `api.onConversationBindingResolved(handler)` | استدعاء ربط المحادثة |
| الطريقة | ما تفعله |
| -------------------------------------------- | --------------------------- |
| `api.on(hookName, handler, opts?)` | خطاف دورة حياة مضبوط النوع |
| `api.onConversationBindingResolved(handler)` | استدعاء عكسي لربط المحادثة |
راجع [خطافات Plugin](/ar/plugins/hooks) للحصول على أمثلة، وأسماء الخطافات الشائعة، ودلالات الحراسة.
### دلالات قرار الخطاف
- `before_tool_call`: إرجاع `{ block: true }` نهائي. بمجرد أن يعيّنه أي معالج، يتم تخطي المعالجات الأقل أولوية.
- `before_tool_call`: إرجاع `{ block: false }` يعامل كعدم وجود قرار (مثل حذف `block`)، وليس كتجاوز.
- `before_install`: إرجاع `{ block: true }` نهائي. بمجرد أن يعيّنه أي معالج، يتم تخطي المعالجات الأقل أولوية.
- `before_install`: إرجاع `{ block: false }` يعامل كعدم وجود قرار (مثل حذف `block`)، وليس كتجاوز.
- `reply_dispatch`: إرجاع `{ handled: true, ... }` نهائي. بمجرد أن يطالب أي معالج بالإرسال، يتم تخطي المعالجات الأقل أولوية ومسار إرسال النموذج الافتراضي.
- `message_sending`: إرجاع `{ cancel: true }` نهائي. بمجرد أن يعيّنه أي معالج، يتم تخطي المعالجات الأقل أولوية.
- `message_sending`: إرجاع `{ cancel: false }` يعامل كعدم وجود قرار (مثل حذف `cancel`)، وليس كتجاوز.
- `message_received`: استخدم حقل `threadId` مضبوط النوع عندما تحتاج إلى توجيه السلاسل/المواضيع الواردة. أبق `metadata` للإضافات الخاصة بالقناة.
- `before_tool_call`: إرجاع `{ block: true }` نهائي. بعد أن يعيّنه أي معالج، تُتخطى المعالجات ذات الأولوية الأدنى.
- `before_tool_call`: يُعامل إرجاع `{ block: false }` على أنه لا قرار (مثل حذف `block`)، وليس كتجاوز.
- `before_install`: إرجاع `{ block: true }` نهائي. بعد أن يعيّنه أي معالج، تُتخطى المعالجات ذات الأولوية الأدنى.
- `before_install`: يُعامل إرجاع `{ block: false }` على أنه لا قرار (مثل حذف `block`)، وليس كتجاوز.
- `reply_dispatch`: إرجاع `{ handled: true, ... }` نهائي. بعد أن يطالب أي معالج بالإرسال، تُتخطى المعالجات ذات الأولوية الأدنى ومسار إرسال النموذج الافتراضي.
- `message_sending`: إرجاع `{ cancel: true }` نهائي. بعد أن يعيّنه أي معالج، تُتخطى المعالجات ذات الأولوية الأدنى.
- `message_sending`: يُعامل إرجاع `{ cancel: false }` على أنه لا قرار (مثل حذف `cancel`)، وليس كتجاوز.
- `message_received`: استخدم الحقل مضبوط النوع `threadId` عندما تحتاج إلى توجيه سلسلة/موضوع وارد. أبقِ `metadata` للإضافات الخاصة بالقناة.
- `message_sending`: استخدم حقول التوجيه مضبوطة النوع `replyToId` / `threadId` قبل الرجوع إلى `metadata` الخاصة بالقناة.
- `gateway_start`: استخدم `ctx.config` و`ctx.workspaceDir` و`ctx.getCron?.()` لحالة بدء التشغيل المملوكة لـ Gateway بدلا من الاعتماد على خطافات `gateway:startup` الداخلية.
- `cron_changed`: راقب تغييرات دورة حياة Cron المملوكة لـ Gateway. استخدم `event.job?.state?.nextRunAtMs` و`ctx.getCron?.()` عند مزامنة مجدولات الإيقاظ الخارجية، وأبق OpenClaw مصدر الحقيقة لفحوصات الاستحقاق والتنفيذ.
- `cron_changed`: راقب تغييرات دورة حياة Cron المملوكة لـ Gateway. استخدم `event.job?.state?.nextRunAtMs` و`ctx.getCron?.()` عند مزامنة مجدولات الإيقاظ الخارجية، وأبقِ OpenClaw مصدر الحقيقة لفحوصات الاستحقاق والتنفيذ.
### حقول كائن API
| الحقل | النوع | الوصف |
| ------------------------ | ------------------------- | ------------------------------------------------------------------------------------------- |
| `api.id` | `string` | معرف Plugin |
| `api.name` | `string` | اسم العرض |
| `api.version` | `string?` | إصدار Plugin (اختياري) |
| `api.description` | `string?` | وصف Plugin (اختياري) |
| `api.source` | `string` | مسار مصدر Plugin |
| `api.rootDir` | `string?` | دليل جذر Plugin (اختياري) |
| `api.config` | `OpenClawConfig` | لقطة الإعداد الحالية (لقطة وقت التشغيل النشطة في الذاكرة عند توفرها) |
| `api.pluginConfig` | `Record<string, unknown>` | إعداد خاص بـ Plugin من `plugins.entries.<id>.config` |
| `api.runtime` | `PluginRuntime` | [مساعدات وقت التشغيل](/ar/plugins/sdk-runtime) |
| `api.logger` | `PluginLogger` | مسجل محدود النطاق (`debug`, `info`, `warn`, `error`) |
| `api.registrationMode` | `PluginRegistrationMode` | وضع التحميل الحالي؛ `"setup-runtime"` هي نافذة بدء التشغيل/الإعداد الخفيفة السابقة للدخول الكامل |
| `api.resolvePath(input)` | `(string) => string` | حل المسار نسبة إلى جذر Plugin |
| الحقل | النوع | الوصف |
| ------------------------ | ------------------------- | --------------------------------------------------------------------------------------------------- |
| `api.id` | `string` | معرّف Plugin |
| `api.name` | `string` | اسم العرض |
| `api.version` | `string?` | إصدار Plugin (اختياري) |
| `api.description` | `string?` | وصف Plugin (اختياري) |
| `api.source` | `string` | مسار مصدر Plugin |
| `api.rootDir` | `string?` | دليل جذر Plugin (اختياري) |
| `api.config` | `OpenClawConfig` | لقطة الإعداد الحالية (لقطة تشغيل نشطة في الذاكرة عند توفرها) |
| `api.pluginConfig` | `Record<string, unknown>` | إعداد خاص بـ Plugin من `plugins.entries.<id>.config` |
| `api.runtime` | `PluginRuntime` | [مساعدات التشغيل](/ar/plugins/sdk-runtime) |
| `api.logger` | `PluginLogger` | مسجّل محدود النطاق (`debug` و`info` و`warn` و`error`) |
| `api.registrationMode` | `PluginRegistrationMode` | وضع التحميل الحالي؛ `"setup-runtime"` هو نافذة بدء/إعداد خفيفة قبل الإدخال الكامل |
| `api.resolvePath(input)` | `(string) => string` | حل المسار نسبة إلى جذر Plugin |
## اصطلاح الوحدة الداخلية
## اصطلاح الوحدات الداخلية
داخل Plugin الخاص بك، استخدم ملفات barrel محلية للاستيرادات الداخلية:
داخل Plugin الخاص بك، استخدم ملفات تجميع محلية للاستيرادات الداخلية:
```
my-plugin/
@ -342,35 +340,34 @@ my-plugin/
```
<Warning>
لا تستورد أبدا Plugin الخاص بك عبر `openclaw/plugin-sdk/<your-plugin>`
لا تستورد Plugin الخاص بك أبدا عبر `openclaw/plugin-sdk/<your-plugin>`
من كود الإنتاج. وجّه الاستيرادات الداخلية عبر `./api.ts` أو
`./runtime-api.ts`. مسار SDK هو العقد الخارجي فقط.
</Warning>
تفضل الأسطح العامة لـ Plugin المضمن المحملة عبر الواجهة (`api.ts` و`runtime-api.ts` و
`index.ts` و`setup-entry.ts` وملفات الدخول العامة المشابهة)
لقطة إعداد وقت التشغيل النشطة عندما يكون OpenClaw قيد التشغيل بالفعل. إذا لم تكن هناك لقطة وقت تشغيل
بعد، فإنها تعود إلى ملف الإعداد المحلول على القرص.
ينبغي تحميل واجهات Plugins المضمنة المعبأة من خلال محملات واجهات Plugins في OpenClaw؛
فالاستيرادات المباشرة من `dist/extensions/...` تتجاوز فحوصات manifest
والتابع الجانبي لوقت التشغيل التي تستخدمها التثبيتات المعبأة للكود المملوك لـ Plugin.
تفضّل الأسطح العامة لـ Plugin المضمن المحمّلة عبر الواجهة (`api.ts` و`runtime-api.ts`
و`index.ts` و`setup-entry.ts` وملفات الإدخال العامة المشابهة) لقطة إعداد التشغيل
النشطة عندما يكون OpenClaw قيد التشغيل بالفعل. إذا لم توجد لقطة تشغيل بعد،
فإنها ترجع إلى ملف الإعداد المحلول على القرص. يجب تحميل واجهات Plugin المضمن
المعبأة عبر محمّلات واجهات Plugins في OpenClaw؛ فالاستيرادات المباشرة من
`dist/extensions/...` تتجاوز فحوصات البيان ومرافق التشغيل الجانبية التي تستخدمها
التثبيتات المعبأة للكود المملوك لـ Plugin.
يمكن لـ Plugins المزودين كشف barrel عقد ضيق محلي لـ Plugin عندما يكون
المساعد مقصودا أن يكون خاصا بالمزود ولا ينتمي بعد إلى مسار فرعي عام من SDK.
أمثلة مضمنة:
يمكن لـ Plugins المزوّدين كشف ملف تجميع عقد ضيق ومحلي لـ Plugin عندما يكون
مساعد ما خاصا بالمزوّد عمدا ولا ينتمي بعد إلى مسار SDK فرعي عام. أمثلة مضمنة:
- **Anthropic**: نقطة `api.ts` / `contract-api.ts` العامة لمساعدات
beta-header و`service_tier` الخاصة بتدفق Claude.
- **`@openclaw/openai-provider`**: يصدر `api.ts` بناة المزود،
ومساعدات النموذج الافتراضي، وبناة مزود الوقت الحقيقي.
- **`@openclaw/openrouter-provider`**: يصدر `api.ts` باني المزود
بالإضافة إلى مساعدات الإعداد الأولي/التكوين.
- **Anthropic**: حد `api.ts` / `contract-api.ts` عام لمساعدات Claude
الخاصة برأس بيتا وتدفق `service_tier`.
- **`@openclaw/openai-provider`**: يصدّر `api.ts` بُناة المزوّدين،
ومساعدات النموذج الافتراضي، وبُناة مزوّد الوقت الحقيقي.
- **`@openclaw/openrouter-provider`**: يصدّر `api.ts` باني المزوّد
بالإضافة إلى مساعدات الإعداد الأولي/الإعداد.
<Warning>
ينبغي أيضا لكود إنتاج Extension تجنب استيرادات `openclaw/plugin-sdk/<other-plugin>`.
إذا كان المساعد مشتركا حقا، فارفعه إلى مسار فرعي محايد من SDK
يجب أن يتجنب كود إنتاج الإضافة أيضا استيرادات `openclaw/plugin-sdk/<other-plugin>`.
إذا كان المساعد مشتركا فعلا، فارفعه إلى مسار SDK فرعي حيادي
مثل `openclaw/plugin-sdk/speech` أو `.../provider-model-shared` أو سطح آخر
موجه إلى القدرة بدلا من ربط Pluginين معا.
موجه للقدرات بدلا من ربط Pluginين معا.
</Warning>
## ذو صلة
@ -383,15 +380,15 @@ my-plugin/
مرجع كامل لمساحة الأسماء `api.runtime`.
</Card>
<Card title="الإعداد والتكوين" icon="sliders" href="/ar/plugins/sdk-setup">
التحزيم والبيانات التعريفية ومخططات التكوين.
التحزيم، والبيانات التعريفية، ومخططات التكوين.
</Card>
<Card title="الاختبار" icon="vial" href="/ar/plugins/sdk-testing">
أدوات الاختبار وقواعد التدقيق.
أدوات الاختبار وقواعد الفحص.
</Card>
<Card title="ترحيل SDK" icon="arrows-turn-right" href="/ar/plugins/sdk-migration">
الترحيل من الأسطح المهملة.
الترحيل من الواجهات المهملة.
</Card>
<Card title="داخليات Plugin" icon="diagram-project" href="/ar/plugins/architecture">
البنية العميقة ونموذج القدرات.
<Card title="الأجزاء الداخلية للـ Plugin" icon="diagram-project" href="/ar/plugins/architecture">
بنية معمارية عميقة ونموذج القدرات.
</Card>
</CardGroup>

View File

@ -1,40 +1,40 @@
---
read_when:
- تريد دفاعًا معمّقًا ضد هجمات SSRF وإعادة ربط DNS
- تكوين وكيل أمامي خارجي لحركة مرور وقت تشغيل OpenClaw
summary: كيفية توجيه حركة مرور HTTP وWebSocket الخاصة بوقت تشغيل OpenClaw عبر وكيل ترشيح مُدار من قِبل المشغّل
- تريد تطبيق مبدأ الدفاع في العمق ضد هجمات SSRF وهجمات إعادة ربط DNS
- تكوين وكيل أمامي خارجي لحركة مرور وقت التشغيل في OpenClaw
summary: كيفية توجيه حركة مرور HTTP وWebSocket لوقت تشغيل OpenClaw عبر وكيل ترشيح يديره المشغّل
title: وكيل الشبكة
x-i18n:
generated_at: "2026-05-04T07:10:29Z"
generated_at: "2026-05-04T18:24:50Z"
model: gpt-5.5
provider: openai
source_hash: fc7140c5ced0e7454a6f85d1ea8f3256bbd28cc0cb42eeafe8e5e6439b90e3f0
source_hash: eedbf3bac14800c34c7ca2e3b6879dac360a88d51b5b7449ddf41a4dd471648b
source_path: security/network-proxy.md
workflow: 16
---
# وكيل الشبكة
يمكن لـ OpenClaw توجيه حركة مرور HTTP وWebSocket في وقت التشغيل عبر وكيل أمامي يديره المشغّل. هذا دفاع اختياري معمّق لعمليات النشر التي تريد تحكمًا مركزيًا في الخروج، وحماية أقوى من SSRF، وقابلية أفضل لتدقيق الشبكة.
يمكن لـ OpenClaw توجيه حركة مرور HTTP و WebSocket في وقت التشغيل عبر وكيل أمامي يديره المشغّل. هذا دفاع اختياري متدرج لعمليات النشر التي تريد تحكمًا مركزيًا في الخروج، وحماية أقوى من SSRF، وقابلية أفضل لتدقيق الشبكة.
لا يرفق OpenClaw وكيلًا ولا ينزّله ولا يبدأه ولا يهيئه ولا يصادقه. أنت تشغّل تقنية الوكيل التي تناسب بيئتك، ويوجّه OpenClaw عملاء HTTP وWebSocket المحليين للعملية عبرها.
لا يشحن OpenClaw وكيلاً، ولا ينزّله، ولا يبدأه، ولا يهيئه، ولا يصادقه. أنت تشغّل تقنية الوكيل التي تناسب بيئتك، وOpenClaw يوجّه عملاء HTTP و WebSocket المحليين المعتادين للعملية عبرها.
## لماذا تستخدم وكيلًا؟
## لماذا تستخدم وكيلاً؟
يمنح الوكيل المشغّلين نقطة تحكم شبكية واحدة لحركة مرور HTTP وWebSocket الصادرة. يمكن أن يكون ذلك مفيدًا حتى خارج تقوية SSRF:
يعطي الوكيل المشغّلين نقطة تحكم شبكية واحدة لحركة HTTP و WebSocket الصادرة. ويمكن أن يكون ذلك مفيدًا حتى خارج تقوية الحماية من SSRF:
- سياسة مركزية: الحفاظ على سياسة خروج واحدة بدل الاعتماد على أن يطبق كل موضع استدعاء HTTP في التطبيق قواعد الشبكة بشكل صحيح.
- فحوصات وقت الاتصال: تقييم الوجهة بعد حل DNS ومباشرة قبل أن يفتح الوكيل الاتصال الصاعد.
- دفاع ضد إعادة ربط DNS: تقليل الفجوة بين فحص DNS على مستوى التطبيق والاتصال الصادر الفعلي.
- تغطية JavaScript أوسع: توجيه عملاء `fetch` و`node:http` و`node:https` وWebSocket وaxios وgot وnode-fetch والعملاء المشابهين عبر المسار نفسه.
- قابلية التدقيق: تسجيل الوجهات المسموح بها والمرفوضة عند حد الخروج.
- تحكم تشغيلي: فرض قواعد الوجهات، أو تجزئة الشبكة، أو حدود المعدل، أو قوائم السماح الصادرة دون إعادة بناء OpenClaw.
- سياسة مركزية: حافظ على سياسة خروج واحدة بدلاً من الاعتماد على أن يضبط كل موضع يستدعي HTTP في التطبيق قواعد الشبكة بشكل صحيح.
- فحوصات وقت الاتصال: قيّم الوجهة بعد حل DNS ومباشرة قبل أن يفتح الوكيل الاتصال بالجهة العلوية.
- دفاع ضد إعادة ربط DNS: قلّل الفجوة بين فحص DNS على مستوى التطبيق والاتصال الصادر الفعلي.
- تغطية JavaScript أوسع: وجّه عملاء `fetch`، و`node:http`، و`node:https`، و WebSocket، و axios، و got، و node-fetch، والعملاء المشابهين عبر المسار نفسه.
- قابلية التدقيق: سجّل الوجهات المسموح بها والمرفوضة عند حد الخروج.
- تحكم تشغيلي: افرض قواعد الوجهات، أو تقسيم الشبكة، أو حدود المعدل، أو قوائم السماح الصادرة من دون إعادة بناء OpenClaw.
توجيه الوكيل حاجز حماية على مستوى العملية لخروج HTTP وWebSocket العادي. يمنح المشغّلين مسارًا مغلقًا عند الفشل لتوجيه عملاء HTTP المدعومين في JavaScript عبر وكيل الترشيح الخاص بهم، لكنه ليس صندوق حماية شبكيًا على مستوى نظام التشغيل ولا يجعل OpenClaw يصادق سياسة الوجهات الخاصة بالوكيل.
توجيه الوكيل حاجز وقائي على مستوى العملية لخروج HTTP و WebSocket المعتاد. يمنح المشغّلين مسارًا مغلقًا عند الفشل لتوجيه عملاء HTTP المدعومين في JavaScript عبر وكيل الترشيح الخاص بهم، لكنه ليس عزلًا شبكيًا على مستوى نظام التشغيل ولا يجعل OpenClaw يصادق سياسة وجهات الوكيل.
## كيف يوجّه OpenClaw حركة المرور
عندما تكون `proxy.enabled=true` ويكون عنوان URL للوكيل مهيأً، توجّه عمليات وقت التشغيل المحمية مثل `openclaw gateway run` و`openclaw node run` و`openclaw agent --local` خروج HTTP وWebSocket العادي عبر الوكيل المهيأ:
عندما تكون `proxy.enabled=true` ويكون عنوان URL للوكيل مهيئًا، توجّه عمليات وقت التشغيل المحمية مثل `openclaw gateway run`، و`openclaw node run`، و`openclaw agent --local` خروج HTTP و WebSocket المعتاد عبر الوكيل المهيأ:
```text
OpenClaw process
@ -43,27 +43,27 @@ OpenClaw process
WebSocket clients -> operator-managed filtering proxy -> public internet
```
العقد العام هو سلوك التوجيه، وليس خطافات Node الداخلية المستخدمة لتنفيذه. يستخدم عملاء WebSocket في مستوى التحكم لدى OpenClaw Gateway مسارًا مباشرًا ضيقًا لحركة مرور Gateway RPC عبر local loopback عندما يستخدم عنوان URL الخاص بـ Gateway `localhost` أو عنوان IP استرجاعيًا حرفيًا مثل `127.0.0.1` أو `[::1]`. يجب أن يكون مسار مستوى التحكم هذا قادرًا على الوصول إلى Gateways الاسترجاعية حتى عندما يحظر وكيل المشغّل وجهات الاسترجاع. لا تزال طلبات HTTP وWebSocket العادية في وقت التشغيل تستخدم الوكيل المهيأ.
العقد العام هو سلوك التوجيه، وليس خطافات Node الداخلية المستخدمة لتنفيذه. يستخدم عملاء WebSocket في مستوى التحكم لـ OpenClaw Gateway مسارًا مباشرًا ضيقًا لحركة Gateway RPC عبر local loopback عندما يستخدم عنوان URL الخاص بـ Gateway `localhost` أو عنوان IP حرفيًا للاسترجاع مثل `127.0.0.1` أو `[::1]`. يجب أن يتمكن مسار مستوى التحكم هذا من الوصول إلى Gateways الاسترجاع حتى عندما يحظر وكيل المشغّل وجهات الاسترجاع. تظل طلبات HTTP و WebSocket المعتادة في وقت التشغيل تستخدم الوكيل المهيأ.
داخليًا، يستخدم OpenClaw خطافي توجيه على مستوى العملية لهذه الميزة:
- يغطي توجيه موزّع Undici `fetch` والعملاء المدعومين بـ undici ووسائط النقل التي توفر موزّع undici خاصًا بها.
- يغطي توجيه `global-agent` مستدعي Node الأساسيين `node:http` و`node:https`، بما في ذلك كثير من المكتبات المبنية فوق `http.request` و`https.request` و`http.get` و`https.get`. يفرض وضع الوكيل المُدار ذلك الوكيل العام حتى لا تتجاوز وكلاء HTTP الصريحة في Node وكيل المشغّل عن طريق الخطأ.
- يغطي توجيه موزّع Undici كلًا من `fetch`، والعملاء المدعومين بـ undici، ووسائل النقل التي توفر موزّع undici الخاص بها.
- يغطي توجيه `global-agent` مستدعي Node الأساسيين `node:http` و`node:https`، بما في ذلك كثير من المكتبات المبنية فوق `http.request`، و`https.request`، و`http.get`، و`https.get`. يفرض وضع الوكيل المُدار ذلك الوكيل العام حتى لا تتجاوز وكلاء Node HTTP الصريحة وكيل المشغّل دون قصد.
تملك بعض Plugins وسائط نقل مخصصة تحتاج إلى توصيل صريح للوكيل حتى عند وجود توجيه على مستوى العملية. على سبيل المثال، يستخدم نقل Bot API في Telegram موزّع undici خاصًا به عبر HTTP/1، ولذلك يحترم بيئة وكيل العملية إضافة إلى البديل المُدار `OPENCLAW_PROXY_URL` في مسار النقل المملوك لذلك المالك تحديدًا.
تملك بعض Plugins وسائل نقل مخصصة تحتاج إلى توصيل صريح بالوكيل حتى عند وجود توجيه على مستوى العملية. على سبيل المثال، تستخدم وسيلة نقل Bot API في Telegram موزّع HTTP/1 undici خاصًا بها، ولذلك تحترم بيئة وكيل العملية إضافة إلى بديل `OPENCLAW_PROXY_URL` المُدار في مسار النقل الخاص بذلك المالك.
يجب أن يستخدم عنوان URL الخاص بالوكيل `http://`. لا تزال وجهات HTTPS مدعومة عبر الوكيل باستخدام HTTP `CONNECT`؛ وهذا يعني فقط أن OpenClaw يتوقع مستمع وكيل أمامي HTTP عاديًا مثل `http://127.0.0.1:3128`.
يجب أن يستخدم عنوان URL الخاص بالوكيل `http://`. لا تزال وجهات HTTPS مدعومة عبر الوكيل باستخدام HTTP `CONNECT`؛ هذا يعني فقط أن OpenClaw يتوقع مستمع وكيل أمامي HTTP عاديًا مثل `http://127.0.0.1:3128`.
أثناء نشاط الوكيل، يمسح OpenClaw `no_proxy` و`NO_PROXY` و`GLOBAL_AGENT_NO_PROXY`. قوائم التجاوز هذه قائمة على الوجهة، ولذلك فإن ترك `localhost` أو `127.0.0.1` فيها سيسمح لأهداف SSRF عالية المخاطر بتخطي وكيل الترشيح.
أثناء نشاط الوكيل، يمسح OpenClaw كلًا من `no_proxy`، و`NO_PROXY`، و`GLOBAL_AGENT_NO_PROXY`. تعتمد قوائم التجاوز هذه على الوجهة، لذا فإن ترك `localhost` أو `127.0.0.1` فيها سيسمح لأهداف SSRF عالية الخطورة بتجاوز وكيل الترشيح.
عند إيقاف التشغيل، يستعيد OpenClaw بيئة الوكيل السابقة ويعيد ضبط حالة توجيه العملية المخزنة مؤقتًا.
عند الإيقاف، يستعيد OpenClaw بيئة الوكيل السابقة ويعيد ضبط حالة توجيه العملية المخزنة مؤقتًا.
## مصطلحات الوكيل ذات الصلة
- `proxy.enabled` / `proxy.proxyUrl`: توجيه وكيل أمامي صادر لخروج OpenClaw في وقت التشغيل. توثّق هذه الصفحة تلك الميزة.
- `gateway.auth.mode: "trusted-proxy"`: مصادقة وكيل عكسي وارد مدرك للهوية للوصول إلى Gateway. راجع [مصادقة الوكيل الموثوق](/ar/gateway/trusted-proxy-auth).
- `openclaw proxy`: وكيل تصحيح محلي ومفتش التقاط للتطوير والدعم. راجع [openclaw proxy](/ar/cli/proxy).
- إعدادات الوكيل الخاصة بقناة أو مزوّد: تجاوزات مملوكة للمالك لوسيط نقل معيّن. فضّل وكيل الشبكة المُدار عندما يكون الهدف هو التحكم المركزي في الخروج عبر وقت التشغيل.
- `proxy.enabled` / `proxy.proxyUrl`: توجيه الوكيل الأمامي الصادر لخروج وقت تشغيل OpenClaw. توثق هذه الصفحة تلك الميزة.
- `gateway.auth.mode: "trusted-proxy"`: مصادقة وكيل عكسي واردة وواعية بالهوية للوصول إلى Gateway. راجع [مصادقة الوكيل الموثوق](/ar/gateway/trusted-proxy-auth).
- `openclaw proxy`: وكيل تصحيح أخطاء محلي ومفتش التقاط للتطوير والدعم. راجع [openclaw proxy](/ar/cli/proxy).
- إعدادات الوكيل الخاصة بالقناة أو المزوّد: تجاوزات خاصة بالمالك لوسيلة نقل معينة. فضّل وكيل الشبكة المُدار عندما يكون الهدف هو التحكم المركزي في الخروج عبر وقت التشغيل.
## التهيئة
@ -81,7 +81,7 @@ OPENCLAW_PROXY_URL=http://127.0.0.1:3128 openclaw gateway run
تكون لـ `proxy.proxyUrl` الأسبقية على `OPENCLAW_PROXY_URL`.
إذا كانت `enabled=true` لكن لم تتم تهيئة عنوان URL صالح للوكيل، تفشل الأوامر المحمية عند بدء التشغيل بدل الرجوع إلى الوصول المباشر إلى الشبكة.
إذا كانت `enabled=true` لكن لم تتم تهيئة عنوان URL صالح للوكيل، تفشل الأوامر المحمية عند بدء التشغيل بدلاً من الرجوع إلى الوصول المباشر إلى الشبكة.
بالنسبة إلى خدمات Gateway المُدارة التي تبدأ باستخدام `openclaw gateway start`، فضّل تخزين عنوان URL في التهيئة:
@ -92,63 +92,63 @@ openclaw gateway install --force
openclaw gateway start
```
البديل البيئي هو الأفضل للتشغيل في الواجهة. إذا استخدمته مع خدمة مثبتة، فضع `OPENCLAW_PROXY_URL` في بيئة الخدمة الدائمة، مثل `$OPENCLAW_STATE_DIR/.env` أو `~/.openclaw/.env`، ثم أعد تثبيت الخدمة حتى يبدأ launchd أو systemd أو Scheduled Tasks تشغيل Gateway بتلك القيمة.
بديل البيئة هو الأفضل للتشغيل في المقدمة. إذا استخدمته مع خدمة مثبّتة، فضع `OPENCLAW_PROXY_URL` في بيئة الخدمة الدائمة، مثل `$OPENCLAW_STATE_DIR/.env` أو `~/.openclaw/.env`، ثم أعد تثبيت الخدمة حتى يبدأ launchd أو systemd أو Scheduled Tasks تشغيل Gateway بهذه القيمة.
بالنسبة إلى أوامر `openclaw --container ...`، يمرر OpenClaw `OPENCLAW_PROXY_URL` إلى CLI الابن المستهدف للحاوية عندما يكون مضبوطًا. يجب أن يكون عنوان URL قابلًا للوصول من داخل الحاوية؛ يشير `127.0.0.1` إلى الحاوية نفسها، لا إلى المضيف. يرفض OpenClaw عناوين URL لوكيل الاسترجاع للأوامر المستهدفة للحاوية ما لم تتجاوز فحص السلامة هذا صراحةً.
بالنسبة إلى أوامر `openclaw --container ...`، يمرر OpenClaw `OPENCLAW_PROXY_URL` إلى CLI الطفل المستهدف للحاوية عند تعيينه. يجب أن يكون عنوان URL قابلًا للوصول من داخل الحاوية؛ يشير `127.0.0.1` إلى الحاوية نفسها، وليس المضيف. يرفض OpenClaw عناوين URL الخاصة بالوكيل التي تشير إلى الاسترجاع للأوامر المستهدفة للحاويات ما لم تتجاوز فحص الأمان هذا صراحة.
## متطلبات الوكيل
سياسة الوكيل هي حد الأمان. لا يستطيع OpenClaw التحقق من أن الوكيل يحظر الأهداف الصحيحة.
هيئ الوكيل لكي:
هيّئ الوكيل كي:
- يربط نفسه فقط بالاسترجاع أو بواجهة خاصة موثوقة.
- يقيّد الوصول بحيث لا يمكن استخدامه إلا بواسطة عملية OpenClaw أو المضيف أو الحاوية أو حساب الخدمة.
- يحل الوجهات بنفسه ويحظر عناوين IP للوجهات بعد حل DNS.
- يرتبط فقط بالاسترجاع أو بواجهة خاصة موثوقة.
- يقيّد الوصول بحيث لا يستطيع استخدامه إلا عملية OpenClaw أو المضيف أو الحاوية أو حساب الخدمة.
- يحل الوجهات بنفسه ويحظر عناوين IP الخاصة بالوجهات بعد حل DNS.
- يطبق السياسة وقت الاتصال لكل من طلبات HTTP العادية وأنفاق HTTPS `CONNECT`.
- يرفض التجاوزات القائمة على الوجهة لنطاقات الاسترجاع، والخاصة، والمحلية على مستوى الرابط، والبيانات الوصفية، والبث المتعدد، والمحجوزة، والتوثيق.
- يتجنب قوائم السماح لأسماء المضيفين ما لم تكن تثق بالكامل بمسار حل DNS.
- يسجل الوجهة، والقرار، والحالة، والسبب دون تسجيل أجسام الطلبات، أو ترويسات التفويض، أو ملفات تعريف الارتباط، أو أي أسرار أخرى.
- يبقي سياسة الوكيل تحت التحكم بالإصدارات ويراجع التغييرات مثل التهيئة الحساسة أمنيًا.
- يرفض التجاوزات المعتمدة على الوجهة للاسترجاع أو النطاقات الخاصة أو link-local أو بيانات التعريف أو البث المتعدد أو المحجوزة أو الخاصة بالتوثيق.
- يتجنب قوائم السماح بأسماء المضيفين ما لم تكن تثق بالكامل في مسار حل DNS.
- يسجل الوجهة، والقرار، والحالة، والسبب من دون تسجيل أجسام الطلبات، أو ترويسات التفويض، أو ملفات تعريف الارتباط، أو الأسرار الأخرى.
- يبقي سياسة الوكيل تحت التحكم بالإصدارات ويراجع التغييرات كما يراجع التهيئات الحساسة أمنيًا.
## الوجهات المحظورة الموصى بها
استخدم قائمة الحظر هذه كنقطة بداية لأي وكيل أمامي، أو جدار حماية، أو سياسة خروج.
استخدم قائمة الرفض هذه كنقطة بداية لأي وكيل أمامي أو جدار حماية أو سياسة خروج.
توجد منطقية المصنّف على مستوى تطبيق OpenClaw في `src/infra/net/ssrf.ts` و`src/shared/net/ip.ts`. خطافات التكافؤ ذات الصلة هي `BLOCKED_HOSTNAMES` و`BLOCKED_IPV4_SPECIAL_USE_RANGES` و`BLOCKED_IPV6_SPECIAL_USE_RANGES` و`RFC2544_BENCHMARK_PREFIX` ومعالجة الحارس المضمّن لـ IPv4 لأشكال NAT64 و6to4 وTeredo وISATAP وIPv4-mapped. هذه الملفات مراجع مفيدة عند صيانة سياسة وكيل خارجية، لكن OpenClaw لا يصدّر هذه القواعد أو يفرضها تلقائيًا في وكيلك.
توجد منطقية التصنيف على مستوى تطبيق OpenClaw في `src/infra/net/ssrf.ts` و`src/shared/net/ip.ts`. خطافات التكافؤ ذات الصلة هي `BLOCKED_HOSTNAMES`، و`BLOCKED_IPV4_SPECIAL_USE_RANGES`، و`BLOCKED_IPV6_SPECIAL_USE_RANGES`، و`RFC2544_BENCHMARK_PREFIX`، ومعالجة حارس IPv4 المضمّن لأشكال NAT64، و6to4، وTeredo، وISATAP، والأشكال المعينة إلى IPv4. هذه الملفات مراجع مفيدة عند صيانة سياسة وكيل خارجية، لكن OpenClaw لا يصدّر تلك القواعد أو يفرضها تلقائيًا في وكيلك.
| النطاق أو المضيف | سبب الحظر |
| النطاق أو المضيف | سبب الحظر |
| ------------------------------------------------------------------------------------ | ---------------------------------------------------- |
| `127.0.0.0/8`, `localhost`, `localhost.localdomain` | استرجاع IPv4 |
| `::1/128` | استرجاع IPv6 |
| `0.0.0.0/8`, `::/128` | عناوين غير محددة وعناوين هذه الشبكة |
| `10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16` | شبكات RFC1918 الخاصة |
| `169.254.0.0/16`, `fe80::/10` | عناوين محلية على مستوى الرابط ومسارات بيانات وصفية سحابية شائعة |
| `169.254.169.254`, `metadata.google.internal` | خدمات البيانات الوصفية السحابية |
| `100.64.0.0/10` | مساحة عناوين مشتركة لـ NAT على مستوى الناقل |
| `198.18.0.0/15`, `2001:2::/48` | نطاقات القياس المعياري |
| `169.254.0.0/16`, `fe80::/10` | عناوين link-local ومسارات بيانات تعريف سحابية شائعة |
| `169.254.169.254`, `metadata.google.internal` | خدمات بيانات التعريف السحابية |
| `100.64.0.0/10` | مساحة عناوين مشتركة لـ NAT بدرجة الناقل |
| `198.18.0.0/15`, `2001:2::/48` | نطاقات القياس المرجعي |
| `192.0.0.0/24`, `192.0.2.0/24`, `198.51.100.0/24`, `203.0.113.0/24`, `2001:db8::/32` | نطاقات الاستخدام الخاص والتوثيق |
| `224.0.0.0/4`, `ff00::/8` | بث متعدد |
| `240.0.0.0/4` | IPv4 محجوز |
| `fc00::/7`, `fec0::/10` | نطاقات IPv6 محلية/خاصة |
| `100::/64`, `2001:20::/28` | نطاقات إسقاط IPv6 وORCHIDv2 |
| `100::/64`, `2001:20::/28` | نطاقات تجاهل IPv6 و ORCHIDv2 |
| `64:ff9b::/96`, `64:ff9b:1::/48` | بادئات NAT64 مع IPv4 مضمّن |
| `2002::/16`, `2001::/32` | 6to4 وTeredo مع IPv4 مضمّن |
| `::/96`, `::ffff:0:0/96` | IPv6 متوافق مع IPv4 وIPv6 معيّن إلى IPv4 |
| `2002::/16`, `2001::/32` | 6to4 و Teredo مع IPv4 مضمّن |
| `::/96`, `::ffff:0:0/96` | IPv6 متوافق مع IPv4 ومعيّن إلى IPv4 |
إذا وثّق مزوّد السحابة أو منصة الشبكة لديك مضيفي بيانات وصفية إضافيين أو نطاقات محجوزة، فأضفها أيضًا.
إذا كان موفر السحابة أو منصة الشبكة لديك يوثق مضيفي بيانات تعريف أو نطاقات محجوزة إضافية، فأضفها أيضًا.
## التحقق
تحقق من الوكيل من المضيف نفسه، أو الحاوية نفسها، أو حساب الخدمة نفسه الذي يشغّل OpenClaw:
تحقق من الوكيل من المضيف أو الحاوية أو حساب الخدمة نفسه الذي يشغّل OpenClaw:
```bash
openclaw proxy validate --proxy-url http://127.0.0.1:3128
```
افتراضيًا، عندما لا تُوفَّر وجهات مخصصة، يتحقق الأمر من نجاح `https://example.com/` ويبدأ كناري استرجاع مؤقتًا يجب ألا يصل إليه الوكيل. ينجح فحص الرفض الافتراضي عندما يعيد الوكيل استجابة رفض غير 2xx أو يحظر الكناري بفشل في النقل؛ ويفشل إذا وصلت استجابة ناجحة إلى الكناري. إذا لم يكن هناك وكيل مفعّل ومهيأ، يبلغ التحقق عن مشكلة في التهيئة؛ استخدم `--proxy-url` لإجراء فحص تمهيدي لمرة واحدة قبل تغيير التهيئة. استخدم `--allowed-url` و`--denied-url` لاختبار التوقعات الخاصة بالنشر. الوجهات المرفوضة المخصصة مغلقة عند الفشل: أي استجابة HTTP تعني أن الوجهة كانت قابلة للوصول عبر الوكيل، وأي خطأ نقل يُبلّغ عنه كغير حاسم لأن OpenClaw لا يستطيع إثبات أن الوكيل حظر أصلًا قابلًا للوصول. عند فشل التحقق، يخرج الأمر بالرمز 1.
افتراضيًا، عندما لا تُقدَّم وجهات مخصصة، يتحقق الأمر من نجاح `https://example.com/` ويبدأ طعم استرجاع مؤقتًا يجب ألا يصل إليه الوكيل. ينجح فحص الرفض الافتراضي عندما يعيد الوكيل استجابة رفض غير 2xx أو يحظر الطعم بفشل في النقل؛ ويفشل إذا وصلت استجابة ناجحة إلى الطعم. إذا لم يكن هناك وكيل مفعّل ومهيأ، يبلّغ التحقق عن مشكلة في التهيئة؛ استخدم `--proxy-url` لفحص تمهيدي لمرة واحدة قبل تغيير التهيئة. استخدم `--allowed-url` و`--denied-url` لاختبار توقعات خاصة بعملية النشر. أضف `--apns-reachable` للتحقق أيضًا من أن تسليم APNs HTTP/2 المباشر يمكنه فتح نفق CONNECT عبر الوكيل وتلقي استجابة APNs من بيئة الاختبار؛ يستخدم الفحص رمز مزود غير صالح عمدًا، لذلك تكون `403 InvalidProviderToken` متوقعة وتُحتسب كقابلة للوصول. الوجهات المرفوضة المخصصة مغلقة عند الفشل: أي استجابة HTTP تعني أن الوجهة كانت قابلة للوصول عبر الوكيل، وأي خطأ نقل يُبلّغ عنه على أنه غير حاسم لأن OpenClaw لا يستطيع إثبات أن الوكيل حظر أصلًا قابلًا للوصول. عند فشل التحقق، يخرج الأمر بالرمز 1.
استخدم `--json` للأتمتة. يحتوي خرج JSON على النتيجة الإجمالية، ومصدر تهيئة الوكيل الفعّال، وأي أخطاء تهيئة، وكل فحص وجهة. تُحجب بيانات اعتماد عنوان URL الخاص بالوكيل في الخرج النصي وخرج JSON:
استخدم `--json` للأتمتة. يحتوي خرج JSON على النتيجة الإجمالية، ومصدر تهيئة الوكيل الفعّال، وأي أخطاء تهيئة، وكل فحص وجهة. تُحجب بيانات اعتماد عنوان URL للوكيل في خرج النص وJSON:
```json
{
@ -165,6 +165,12 @@ openclaw proxy validate --proxy-url http://127.0.0.1:3128
"url": "https://example.com/",
"ok": true,
"status": 200
},
{
"kind": "apns",
"url": "https://api.sandbox.push.apple.com",
"ok": true,
"status": 403
}
]
}
@ -178,7 +184,7 @@ curl -x http://127.0.0.1:3128 http://127.0.0.1/
curl -x http://127.0.0.1:3128 http://169.254.169.254/
```
ينبغي أن ينجح الطلب العام. وينبغي أن يحظر الوكيل طلبات الاسترجاع والبيانات الوصفية. بالنسبة إلى `openclaw proxy validate`، يمكن لإشارة الاسترجاع الكنارية المضمّنة أن تميّز رفض الوكيل عن أصل يمكن الوصول إليه. لا تحتوي فحوصات `--denied-url` المخصّصة على تلك الإشارة الكنارية، لذا تعامل مع كلٍ من استجابات HTTP وإخفاقات النقل الغامضة كإخفاقات تحقق، ما لم يوفّر الوكيل لديك إشارة رفض خاصة بالنشر يمكنك التحقق منها بشكل منفصل.
ينبغي أن ينجح الطلب العام. وينبغي أن يحظر الوكيل طلبات loopback والبيانات الوصفية. بالنسبة إلى `openclaw proxy validate`، يستطيع مؤشر loopback المدمج التمييز بين رفض الوكيل وأصل يمكن الوصول إليه. لا تحتوي فحوصات `--denied-url` المخصصة على هذا المؤشر، لذلك تعامل مع كل من استجابات HTTP وإخفاقات النقل الملتبسة كإخفاقات تحقق، ما لم يكشف وكيلك إشارة رفض خاصة بالنشر يمكنك التحقق منها بشكل منفصل.
ثم فعّل توجيه وكيل OpenClaw:
@ -198,11 +204,11 @@ proxy:
## الحدود
- يحسّن الوكيل التغطية لعملاء HTTP وWebSocket في JavaScript المحليين للعملية، لكنه ليس عزلًا شبكيًا على مستوى نظام التشغيل.
- يحسّن الوكيل التغطية لعملاء HTTP وWebSocket في JavaScript المحليين داخل العملية، لكنه ليس صندوق عزل شبكيًا على مستوى نظام التشغيل.
- قد تتجاوز مقابس `net` و`tls` و`http2` الخام، والإضافات الأصلية، والعمليات الفرعية توجيه الوكيل على مستوى Node ما لم ترث متغيرات بيئة الوكيل وتحترمها.
- IRC قناة TCP/TLS خامة خارج توجيه الوكيل الأمامي المُدار من المشغّل. في عمليات النشر التي تتطلب مرور كل الخروج عبر ذلك الوكيل الأمامي، عيّن `channels.irc.enabled=false` ما لم تتم الموافقة صراحةً على خروج IRC المباشر.
- وكيل التصحيح المحلي هو أداة تشخيصية، ويكون تمريره المباشر إلى المصدر الأعلى لطلبات الوكيل وأنفاق CONNECT معطلًا افتراضيًا أثناء نشاط وضع الوكيل المُدار؛ فعّل التمرير المباشر فقط للتشخيصات المحلية المعتمدة.
- ينبغي إدراج واجهات WebUIs المحلية للمستخدمين وخوادم النماذج المحلية في قائمة السماح في سياسة وكيل المشغّل عند الحاجة؛ لا يوفّر OpenClaw تجاوزًا عامًا للشبكة المحلية لها.
- يقتصر تجاوز وكيل مستوى التحكم في Gateway عمدًا على `localhost` وعناوين URL الحرفية لعناوين IP الخاصة بالاسترجاع. استخدم `ws://127.0.0.1:18789` أو `ws://[::1]:18789` أو `ws://localhost:18789` لاتصالات مستوى التحكم المحلية المباشرة في Gateway؛ أمّا أسماء المضيفين الأخرى فتُوجَّه مثل حركة المرور العادية القائمة على اسم المضيف.
- لا يفحص OpenClaw سياسة الوكيل لديك ولا يختبرها ولا يصادق عليها.
- IRC قناة TCP/TLS خام خارج توجيه وكيل التمرير الأمامي المُدار من المشغّل. في عمليات النشر التي تتطلب مرور كل الخروج الشبكي عبر وكيل التمرير الأمامي ذلك، عيّن `channels.irc.enabled=false` ما لم تتم الموافقة صراحةً على الخروج الشبكي المباشر لـ IRC.
- وكيل التصحيح المحلي هو أداة تشخيصية، ويكون التمرير المباشر إلى المنبع لطلبات الوكيل وأنفاق CONNECT معطلًا افتراضيًا عندما يكون وضع الوكيل المُدار نشطًا؛ فعّل التمرير المباشر للتشخيصات المحلية المعتمدة فقط.
- ينبغي إدراج واجهات WebUI المحلية للمستخدم وخوادم النماذج المحلية في قائمة السماح ضمن سياسة وكيل المشغّل عند الحاجة؛ لا يكشف OpenClaw تجاوزًا عامًا للشبكة المحلية لها.
- يقتصر تجاوز وكيل مستوى التحكم في Gateway عمدًا على عناوين URL الخاصة بـ `localhost` وعناوين IP الحرفية لـ loopback. استخدم `ws://127.0.0.1:18789` أو `ws://[::1]:18789` أو `ws://localhost:18789` لاتصالات مستوى التحكم المحلية المباشرة في Gateway؛ وتُوجَّه أسماء المضيفين الأخرى مثل حركة المرور العادية المعتمدة على اسم المضيف.
- لا يفحص OpenClaw سياسة وكيلك أو يختبرها أو يصادق عليها.
- تعامل مع تغييرات سياسة الوكيل كتغييرات تشغيلية حساسة أمنيًا.

View File

@ -4,140 +4,141 @@ read_when:
summary: صيغة التوجيهات لـ /think و/fast و/verbose و/trace وإمكانية رؤية الاستدلال
title: مستويات التفكير
x-i18n:
generated_at: "2026-05-04T07:12:00Z"
generated_at: "2026-05-04T18:24:42Z"
model: gpt-5.5
provider: openai
source_hash: 6fa1b0a2b5f7b93a706488c3ad39dfe08c08eed0bdd30880eb4c07d730ee4d4f
source_hash: fcd1cd76ca5d0b08656e0629df656ad8aa037201d8de68093b3e46eb0708f811
source_path: tools/thinking.md
workflow: 16
---
## ما الذي يفعله
- توجيه مضمّن في أي نص وارد: `/t <level>` أو `/think:<level>` أو `/thinking <level>`.
- توجيه مضمن في أي نص وارد: `/t <level>` أو `/think:<level>` أو `/thinking <level>`.
- المستويات (الأسماء البديلة): `off | minimal | low | medium | high | xhigh | adaptive | max`
- minimal → “think”
- low → “think hard”
- medium → “think harder”
- high → “ultrathink” (أقصى ميزانية)
- xhigh → “ultrathink+” (نماذج GPT-5.2+ وCodex، بالإضافة إلى جهد Anthropic Claude Opus 4.7)
- adaptive → التفكير التكيّفي المُدار من المزوّد (مدعوم لـ Claude 4.6 على Anthropic/Bedrock، وAnthropic Claude Opus 4.7، والتفكير الديناميكي في Google Gemini)
- minimal → "think"
- low → "think hard"
- medium → "think harder"
- high → "ultrathink" (أقصى ميزانية)
- xhigh → "ultrathink+" (نماذج GPT-5.2+ وCodex، إضافة إلى جهد Anthropic Claude Opus 4.7)
- adaptive → تفكير تكيفي مُدار من المزوّد (مدعوم لـ Claude 4.6 على Anthropic/Bedrock، وAnthropic Claude Opus 4.7، والتفكير الديناميكي في Google Gemini)
- max → أقصى استدلال لدى المزوّد (Anthropic Claude Opus 4.7؛ يربط Ollama هذا بأعلى جهد `think` أصلي لديه)
- يتم تعيين `x-high` و`x_high` و`extra-high` و`extra high` و`extra_high` إلى `xhigh`.
- يتم تعيين `highest` إلى `high`.
- يتم ربط `x-high` و`x_high` و`extra-high` و`extra high` و`extra_high` بـ `xhigh`.
- يتم ربط `highest` بـ `high`.
- ملاحظات المزوّد:
- قوائم التفكير وأدوات الاختيار مدفوعة بملف تعريف المزوّد. تعلن Plugins المزوّد مجموعة المستويات الدقيقة للنموذج المحدد، بما في ذلك تسميات مثل `on` الثنائية.
- لا يتم الإعلان عن `adaptive` و`xhigh` و`max` إلا لملفات تعريف المزوّد/النموذج التي تدعمها. تُرفض التوجيهات المكتوبة للمستويات غير المدعومة مع الخيارات الصالحة لذلك النموذج.
- يُعاد تعيين المستويات غير المدعومة المخزنة سابقًا حسب ترتيب ملف تعريف المزوّد. يعود `adaptive` إلى `medium` في النماذج غير التكيّفية، بينما يعود `xhigh` و`max` إلى أكبر مستوى مدعوم غير `off` للنموذج المحدد.
- نماذج Anthropic Claude 4.6 تعتمد `adaptive` افتراضيًا عندما لا يُضبط مستوى تفكير صريح.
- لا يعتمد Anthropic Claude Opus 4.7 التفكير التكيّفي افتراضيًا. يبقى افتراض جهد API مملوكًا للمزوّد ما لم تضبط مستوى تفكير صراحةً.
- يعيّن Anthropic Claude Opus 4.7 الأمر `/think xhigh` إلى التفكير التكيّفي مع `output_config.effort: "xhigh"`، لأن `/think` توجيه تفكير و`xhigh` هو إعداد جهد Opus 4.7.
- يوفّر Anthropic Claude Opus 4.7 أيضًا `/think max`؛ ويُعيَّن إلى مسار أقصى جهد نفسه المملوك للمزوّد.
- تعرض نماذج DeepSeek V4 الأمر `/think xhigh|max`؛ وكلاهما يُعيَّن إلى DeepSeek `reasoning_effort: "max"` بينما تُعيَّن المستويات الأدنى غير `off` إلى `high`.
- تعرض نماذج Ollama القادرة على التفكير `/think low|medium|high|max`؛ ويُعيَّن `max` إلى `think: "high"` الأصلي لأن API الأصلي في Ollama يقبل سلاسل الجهد `low` و`medium` و`high`.
- تعيّن نماذج OpenAI GPT الأمر `/think` عبر دعم جهد Responses API الخاص بكل نموذج. يرسل `/think off` القيمة `reasoning.effort: "none"` فقط عندما يدعمها النموذج الهدف؛ وإلا يحذف OpenClaw حمولة الاستدلال المعطّلة بدلًا من إرسال قيمة غير مدعومة.
- يمكن لإدخالات الفهرس المخصصة المتوافقة مع OpenAI اختيار دعم `/think xhigh` عن طريق ضبط `models.providers.<provider>.models[].compat.supportedReasoningEfforts` بحيث يتضمن `"xhigh"`. يستخدم ذلك بيانات التوافق الوصفية نفسها التي تعيّن حمولات جهد استدلال OpenAI الصادرة، بحيث تتوافق القوائم، والتحقق من الجلسة، وCLI الوكيل، و`llm-task` مع سلوك النقل.
- تتجاوز مراجع OpenRouter Hunter Alpha القديمة المهيأة حقن استدلال الوكيل لأن ذلك المسار المتقاعد كان قد يعيد نص الإجابة النهائية عبر حقول الاستدلال.
- يعيّن Google Gemini الأمر `/think adaptive` إلى التفكير الديناميكي المملوك لمزوّد Gemini. تحذف طلبات Gemini 3 قيمة `thinkingLevel` ثابتة، بينما ترسل طلبات Gemini 2.5 القيمة `thinkingBudget: -1`؛ وما زالت المستويات الثابتة تُعيَّن إلى أقرب `thinkingLevel` أو ميزانية Gemini لعائلة النموذج تلك.
- يستخدم MiniMax (`minimax/*`) على مسار البث المتوافق مع Anthropic القيمة الافتراضية `thinking: { type: "disabled" }` ما لم تضبط التفكير صراحةً في معلمات النموذج أو معلمات الطلب. يمنع ذلك تسرب تغييرات `reasoning_content` من تنسيق بث MiniMax غير الأصلي المتوافق مع Anthropic.
- يدعم Z.AI (`zai/*`) التفكير الثنائي فقط (`on`/`off`). يُعامل أي مستوى غير `off` على أنه `on`ُعيَّن إلى `low`).
- يعيّن Moonshot (`moonshot/*`) الأمر `/think off` إلى `thinking: { type: "disabled" }` وأي مستوى غير `off` إلى `thinking: { type: "enabled" }`. عند تمكين التفكير، لا يقبل Moonshot إلا `tool_choice` بقيمتي `auto|none`؛ يقوم OpenClaw بتطبيع القيم غير المتوافقة إلى `auto`.
- تعتمد قوائم التفكير والمنتقيات على ملف تعريف المزوّد. تعلن Plugins المزوّد مجموعة المستويات الدقيقة للنموذج المحدد، بما في ذلك تسميات مثل الثنائي `on`.
- لا يتم الإعلان عن `adaptive` و`xhigh` و`max` إلا لملفات تعريف المزوّد/النموذج التي تدعمها. يتم رفض التوجيهات المكتوبة للمستويات غير المدعومة مع خيارات ذلك النموذج الصالحة.
- يُعاد ربط المستويات غير المدعومة المخزّنة سابقًا حسب رتبة ملف تعريف المزوّد. يعود `adaptive` إلى `medium` على النماذج غير التكيفية، بينما يعود `xhigh` و`max` إلى أكبر مستوى مدعوم غير `off` للنموذج المحدد.
- تعتمد نماذج Anthropic Claude 4.6 المستوى `adaptive` افتراضيًا عند عدم تعيين مستوى تفكير صريح.
- لا يعتمد Anthropic Claude Opus 4.7 التفكير التكيفي افتراضيًا. يظل جهد API الافتراضي مملوكًا للمزوّد ما لم تعيّن مستوى تفكير صراحةً.
- يربط Anthropic Claude Opus 4.7 `/think xhigh` بالتفكير التكيفي إضافة إلى `output_config.effort: "xhigh"`، لأن `/think` توجيه تفكير و`xhigh` هو إعداد جهد Opus 4.7.
- يوفّر Anthropic Claude Opus 4.7 أيضًا `/think max`؛ ويرتبط بالمسار نفسه لأقصى جهد مملوك للمزوّد.
- تعرض نماذج DeepSeek V4 `/think xhigh|max`؛ ويرتبط كلاهما بـ DeepSeek `reasoning_effort: "max"` بينما ترتبط المستويات الأدنى غير `off` بـ `high`.
- تعرض نماذج Ollama القادرة على التفكير `/think low|medium|high|max`؛ ويرتبط `max` بـ `think: "high"` الأصلي لأن API Ollama الأصلي يقبل سلاسل الجهد `low` و`medium` و`high`.
- تربط نماذج OpenAI GPT `/think` عبر دعم جهد Responses API الخاص بالنموذج. يرسل `/think off` `reasoning.effort: "none"` فقط عندما يدعم النموذج الهدف ذلك؛ وإلا يحذف OpenClaw حمولة الاستدلال المعطّلة بدل إرسال قيمة غير مدعومة.
- يمكن لإدخالات كتالوج OpenAI-compatible المخصصة تمكين `/think xhigh` عبر ضبط `models.providers.<provider>.models[].compat.supportedReasoningEfforts` لتضمين `"xhigh"`. يستخدم هذا بيانات التوافق الوصفية نفسها التي تربط حمولات جهد استدلال OpenAI الصادرة، بحيث تتفق القوائم، والتحقق من الجلسة، وCLI الوكيل، و`llm-task` مع سلوك النقل.
- تتخطى مراجع OpenRouter Hunter Alpha القديمة المكوّنة حقن استدلال الوكيل لأن ذلك المسار المتقاعد كان قد يعيد نص الإجابة النهائية عبر حقول الاستدلال.
- يربط Google Gemini `/think adaptive` بالتفكير الديناميكي المملوك لمزوّد Gemini. تحذف طلبات Gemini 3 قيمة `thinkingLevel` ثابتة، بينما ترسل طلبات Gemini 2.5 `thinkingBudget: -1`؛ وتظل المستويات الثابتة مرتبطة بأقرب `thinkingLevel` أو ميزانية في Gemini لعائلة ذلك النموذج.
- يضبط MiniMax (`minimax/*`) على مسار البث المتوافق مع Anthropic افتراضيًا إلى `thinking: { type: "disabled" }` ما لم تعيّن التفكير صراحةً في معاملات النموذج أو معاملات الطلب. يمنع هذا تسرّب دلتا `reasoning_content` من تنسيق بث MiniMax غير الأصلي لـ Anthropic.
- يدعم Z.AI (`zai/*`) التفكير الثنائي فقط (`on`/`off`). يُعامل أي مستوى غير `off` على أنه `on`رتبط بـ `low`).
- يربط Moonshot (`moonshot/*`) `/think off` بـ `thinking: { type: "disabled" }` وأي مستوى غير `off` بـ `thinking: { type: "enabled" }`. عندما يكون التفكير مفعّلًا، لا يقبل Moonshot إلا `tool_choice` `auto|none`؛ ويطبّع OpenClaw القيم غير المتوافقة إلى `auto`.
## ترتيب الحل
1. التوجيه المضمّن في الرسالة (ينطبق على تلك الرسالة فقط).
2. تجاوز الجلسة (يُضبط بإرسال رسالة تحتوي على التوجيه فقط).
1. التوجيه المضمن في الرسالة (ينطبق على تلك الرسالة فقط).
2. تجاوز الجلسة (يُعيَّن بإرسال رسالة تحتوي على التوجيه فقط).
3. الافتراضي لكل وكيل (`agents.list[].thinkingDefault` في الإعدادات).
4. الافتراضي العام (`agents.defaults.thinkingDefault` في الإعدادات).
5. الرجوع الاحتياطي: الافتراضي المعلن من المزوّد عند توفره؛ وإلا تُحل نماذج الاستدلال إلى `medium` أو أقرب مستوى مدعوم غير `off` لذلك النموذج، وتبقى النماذج غير القادرة على الاستدلال عند `off`.
5. الاحتياطي: الافتراضي الذي يعلنه المزوّد عند توفره؛ وإلا تُحل النماذج القادرة على الاستدلال إلى `medium` أو أقرب مستوى مدعوم غير `off` لذلك النموذج، وتظل النماذج غير القادرة على الاستدلال `off`.
## ضبط افتراضي جلسة
## تعيين افتراضي للجلسة
- أرسل رسالة تحتوي **فقط** على التوجيه (مع السماح بالمسافات البيضاء)، مثل `/think:medium` أو `/t high`.
- يبقى ذلك للجلسة الحالية (لكل مُرسل افتراضيًا)؛ ويُمسح بواسطة `/think:off` أو إعادة ضبط خمول الجلسة.
- يبقى ذلك للجلسة الحالية (لكل مُرسل افتراضيًا)؛ ويُمسح عبر `/think:off` أو إعادة ضبط خمول الجلسة.
- تُرسل رسالة تأكيد (`Thinking level set to high.` / `Thinking disabled.`). إذا كان المستوى غير صالح (مثل `/thinking big`)، يُرفض الأمر مع تلميح وتُترك حالة الجلسة دون تغيير.
- أرسل `/think` (أو `/think:`) من دون وسيطة لرؤية مستوى التفكير الحالي.
- أرسل `/think` (أو `/think:`) دون وسيطة لرؤية مستوى التفكير الحالي.
## التطبيق حسب الوكيل
- **Pi المضمّن**: يُمرَّر المستوى المحلول إلى وقت تشغيل وكيل Pi داخل العملية.
- **Pi المضمن**: يتم تمرير المستوى المحلول إلى وقت تشغيل وكيل Pi داخل العملية.
- **خلفية Claude CLI**: تُمرَّر المستويات غير off إلى Claude Code كـ `--effort` عند استخدام `claude-cli`؛ راجع [خلفيات CLI](/ar/gateway/cli-backends).
## الوضع السريع (/fast)
- المستويات: `on|off`.
- رسالة تحتوي على التوجيه فقط تبدّل تجاوز الوضع السريع للجلسة وترد بـ `Fast mode enabled.` / `Fast mode disabled.`.
- أرسل `/fast` (أو `/fast status`) من دون وضع لرؤية حالة الوضع السريع الفعالة الحالية.
- تبدّل الرسالة التي تحتوي على التوجيه فقط تجاوز وضع الجلسة السريع وترد بـ `Fast mode enabled.` / `Fast mode disabled.`.
- أرسل `/fast` (أو `/fast status`) دون وضع لرؤية حالة الوضع السريع الفعالة الحالية.
- يحل OpenClaw الوضع السريع بهذا الترتيب:
1. `/fast on|off` مضمّن/بتوجيه فقط
1. `/fast on|off` مضمن/كتوجيه فقط
2. تجاوز الجلسة
3. الافتراضي لكل وكيل (`agents.list[].fastModeDefault`)
4. إعداد كل نموذج: `agents.defaults.models["<provider>/<model>"].params.fastMode`
5. الرجوع الاحتياطي: `off`
- بالنسبة إلى `openai/*`، يُعيَّن الوضع السريع إلى معالجة الأولوية في OpenAI عن طريق إرسال `service_tier=priority` في طلبات Responses المدعومة.
- بالنسبة إلى `openai-codex/*`، يرسل الوضع السريع علامة `service_tier=priority` نفسها في Codex Responses. يحتفظ OpenClaw بزر تبديل `/fast` مشترك واحد عبر مساري المصادقة.
- بالنسبة إلى طلبات `anthropic/*` العامة المباشرة، بما في ذلك حركة المرور المصادقة عبر OAuth المرسلة إلى `api.anthropic.com`، يُعيَّن الوضع السريع إلى طبقات خدمة Anthropic: يضبط `/fast on` القيمة `service_tier=auto`، ويضبط `/fast off` القيمة `service_tier=standard_only`.
5. الاحتياطي: `off`
- بالنسبة إلى `openai/*`، يرتبط الوضع السريع بمعالجة OpenAI ذات الأولوية عبر إرسال `service_tier=priority` في طلبات Responses المدعومة.
- بالنسبة إلى `openai-codex/*`، يرسل الوضع السريع علامة `service_tier=priority` نفسها في Codex Responses. يحتفظ OpenClaw بمفتاح تبديل `/fast` مشترك واحد عبر مساري المصادقة.
- بالنسبة إلى طلبات `anthropic/*` العامة المباشرة، بما في ذلك حركة المرور المصادقة عبر OAuth المرسلة إلى `api.anthropic.com`، يرتبط الوضع السريع بطبقات خدمة Anthropic: يعيّن `/fast on` `service_tier=auto`، ويعيّن `/fast off` `service_tier=standard_only`.
- بالنسبة إلى `minimax/*` على المسار المتوافق مع Anthropic، يعيد `/fast on` (أو `params.fastMode: true`) كتابة `MiniMax-M2.7` إلى `MiniMax-M2.7-highspeed`.
- تتجاوز معلمات نموذج Anthropic الصريحة `serviceTier` / `service_tier` افتراضي الوضع السريع عندما يُضبط كلاهما. ما زال OpenClaw يتجاوز حقن طبقة خدمة Anthropic لعناوين URL الأساسية للوكيل غير التابعة لـ Anthropic.
- يعرض `/status` القيمة `Fast` فقط عند تمكين الوضع السريع.
- تتجاوز معاملات نموذج Anthropic الصريحة `serviceTier` / `service_tier` افتراضي الوضع السريع عند تعيين كليهما. لا يزال OpenClaw يتخطى حقن طبقة خدمة Anthropic لعناوين URL الأساسية للوكيل غير التابعة لـ Anthropic.
- يعرض `/status` `Fast` فقط عندما يكون الوضع السريع مفعّلًا.
## توجيهات الإسهاب (/verbose أو /v)
- المستويات: `on` (الحد الأدنى) | `full` | `off` (افتراضي).
- رسالة تحتوي على التوجيه فقط تبدّل الإسهاب في الجلسة وترد بـ `Verbose logging enabled.` / `Verbose logging disabled.`؛ تعيد المستويات غير الصالحة تلميحًا من دون تغيير الحالة.
- يخزن `/verbose off` تجاوز جلسة صريحًا؛ امسحه عبر واجهة جلسات UI باختيار `inherit`.
- يؤثر التوجيه المضمّن في تلك الرسالة فقط؛ وتنطبق افتراضيات الجلسة/العامة خلاف ذلك.
- أرسل `/verbose` (أو `/verbose:`) من دون وسيطة لرؤية مستوى الإسهاب الحالي.
- عند تشغيل الإسهاب، ترسل الوكلاء التي تصدر نتائج أدوات مهيكلة (Pi، ووكلاء JSON الآخرون) كل استدعاء أداة كرسالة مستقلة للبيانات الوصفية فقط، مسبوقة بـ `<emoji> <tool-name>: <arg>` عند توفرها. تُرسل ملخصات الأدوات هذه فور بدء كل أداة (فقاعات منفصلة)، وليس كتغييرات بث.
- تبقى ملخصات فشل الأدوات مرئية في الوضع العادي، لكن تُخفى لواحق تفاصيل الخطأ الخام ما لم يكن الإسهاب `on` أو `full`.
- عندما يكون الإسهاب `full`، تُمرَّر مخرجات الأدوات أيضًا بعد الاكتمال (فقاعة منفصلة، مقتطعة إلى طول آمن). إذا بدّلت `/verbose on|full|off` أثناء تشغيل قيد التنفيذ، تلتزم فقاعات الأدوات اللاحقة بالإعداد الجديد.
- يتحكم `agents.defaults.toolProgressDetail` في شكل ملخصات أدوات `/verbose` وسطور أدوات مسودة التقدم. استخدم `"explain"` (الافتراضي) لتسميات بشرية مختصرة مثل `🛠️ Exec: checking JS syntax`؛ واستخدم `"raw"` عندما تريد أيضًا إلحاق الأمر/التفصيل الخام للتصحيح. يتجاوز `agents.list[].toolProgressDetail` لكل وكيل الافتراضي.
- تبدّل الرسالة التي تحتوي على التوجيه فقط إسهاب الجلسة وترد بـ `Verbose logging enabled.` / `Verbose logging disabled.`؛ وتعيد المستويات غير الصالحة تلميحًا دون تغيير الحالة.
- يخزّن `/verbose off` تجاوز جلسة صريحًا؛ امسحه عبر واجهة جلسات UI باختيار `inherit`.
- يؤثر التوجيه المضمن على تلك الرسالة فقط؛ وتنطبق افتراضيات الجلسة/العامة خلاف ذلك.
- أرسل `/verbose` (أو `/verbose:`) دون وسيطة لرؤية مستوى الإسهاب الحالي.
- عند تفعيل الإسهاب، ترسل الوكلاء التي تصدر نتائج أدوات منظّمة (Pi، ووكلاء JSON الآخرون) كل استدعاء أداة كرسالة مستقلة للبيانات الوصفية فقط، مسبوقة بـ `<emoji> <tool-name>: <arg>` عند توفرها. تُرسل ملخصات الأدوات هذه فور بدء كل أداة (فقاعات منفصلة)، وليس كدلتا بث.
- تظل ملخصات فشل الأدوات مرئية في الوضع العادي، لكن تُخفى لاحقات تفاصيل الخطأ الخام ما لم يكن الإسهاب `on` أو `full`.
- عندما يكون الإسهاب `full`، تُمرَّر مخرجات الأدوات أيضًا بعد الاكتمال (فقاعة منفصلة، مقصوصة إلى طول آمن). إذا بدّلت `/verbose on|full|off` أثناء تشغيل جارٍ، فستحترم فقاعات الأدوات اللاحقة الإعداد الجديد.
- يتحكم `agents.defaults.toolProgressDetail` في شكل ملخصات أدوات `/verbose` وسطور أدوات مسودة التقدم. استخدم `"explain"` (افتراضي) لتسميات بشرية موجزة مثل `🛠️ Exec: checking JS syntax`؛ واستخدم `"raw"` عندما تريد أيضًا إلحاق الأمر/التفصيل الخام للتصحيح. يتجاوز `agents.list[].toolProgressDetail` لكل وكيل الافتراضي.
- `explain`: `🛠️ Exec: check JS syntax for /tmp/app.js`
- `raw`: `🛠️ Exec: check JS syntax for /tmp/app.js, node --check /tmp/app.js`
## توجيهات تتبع Plugin (/trace)
- المستويات: `on` | `off` (افتراضي).
- رسالة تحتوي على التوجيه فقط تبدّل إخراج تتبع Plugin للجلسة وترد بـ `Plugin trace enabled.` / `Plugin trace disabled.`.
- يؤثر التوجيه المضمّن في تلك الرسالة فقط؛ وتنطبق افتراضيات الجلسة/العامة خلاف ذلك.
- أرسل `/trace` (أو `/trace:`) من دون وسيطة لرؤية مستوى التتبع الحالي.
- `/trace` أضيق من `/verbose`: فهو يعرض فقط أسطر التتبع/التصحيح المملوكة لـ Plugin مثل ملخصات تصحيح Active Memory.
- يمكن أن تظهر أسطر التتبع في `/status` وكـرسالة تشخيص لاحقة بعد رد المساعد العادي.
- تبدّل الرسالة التي تحتوي على التوجيه فقط إخراج تتبع Plugin للجلسة وترد بـ `Plugin trace enabled.` / `Plugin trace disabled.`.
- يؤثر التوجيه المضمن على تلك الرسالة فقط؛ وتنطبق افتراضيات الجلسة/العامة خلاف ذلك.
- أرسل `/trace` (أو `/trace:`) دون وسيطة لرؤية مستوى التتبع الحالي.
- `/trace` أضيق من `/verbose`: فهو لا يعرض إلا سطور التتبع/التصحيح المملوكة لـ Plugin مثل ملخصات تصحيح Active Memory.
- يمكن أن تظهر سطور التتبع في `/status` وكرسالة تشخيص متابعة بعد رد المساعد العادي.
## إظهار الاستدلال (/reasoning)
- المستويات: `on|off|stream`.
- رسالة تحتوي على التوجيه فقط تبدّل ما إذا كانت كتل التفكير تُعرض في الردود.
- عند التمكين، يُرسل الاستدلال كـ **رسالة منفصلة** مسبوقة بـ `Reasoning:`.
- `stream` (Telegram فقط): يبث الاستدلال في فقاعة مسودة Telegram أثناء إنشاء الرد، ثم يرسل الإجابة النهائية من دون الاستدلال.
- تبدّل الرسالة التي تحتوي على التوجيه فقط ما إذا كانت كتل التفكير تظهر في الردود.
- عند التفعيل، يُرسل الاستدلال كـ **رسالة منفصلة** مسبوقة بـ `Reasoning:`.
- `stream` (Telegram فقط): يبث الاستدلال إلى فقاعة مسودة Telegram أثناء إنشاء الرد، ثم يرسل الإجابة النهائية دون استدلال.
- الاسم البديل: `/reason`.
- أرسل `/reasoning` (أو `/reasoning:`) من دون وسيطة لرؤية مستوى الاستدلال الحالي.
- ترتيب الحل: التوجيه المضمّن، ثم تجاوز الجلسة، ثم الافتراضي لكل وكيل (`agents.list[].reasoningDefault`)، ثم الرجوع الاحتياطي (`off`).
- أرسل `/reasoning` (أو `/reasoning:`) دون وسيطة لرؤية مستوى الاستدلال الحالي.
- ترتيب الحل: التوجيه المضمن، ثم تجاوز الجلسة، ثم الافتراضي لكل وكيل (`agents.list[].reasoningDefault`)، ثم الاحتياطي (`off`).
تُعالَج وسوم استدلال النماذج المحلية المشوهة بتحفظ. تبقى كتل `<think>...</think>` المغلقة مخفية في الردود العادية، كما يُخفى الاستدلال غير المغلق بعد نص مرئي بالفعل. إذا كان الرد ملفوفًا بالكامل بوسم فتح واحد غير مغلق وكان سيُسلَّم كنص فارغ خلاف ذلك، يزيل OpenClaw وسم الفتح المشوه ويسلّم النص المتبقي.
تُعالج وسوم استدلال النماذج المحلية المشوّهة بتحفظ. تظل كتل `<think>...</think>` المغلقة مخفية في الردود العادية، ويُخفى أيضًا الاستدلال غير المغلق بعد نص مرئي بالفعل. إذا كان الرد ملفوفًا بالكامل في وسم فتح واحد غير مغلق وكان سيُسلَّم كنص فارغ خلاف ذلك، يزيل OpenClaw وسم الفتح المشوّه ويسلّم النص المتبقي.
## ذو صلة
- توجد مستندات الوضع المرتفع في [الوضع المرتفع](/ar/tools/elevated).
## Heartbeats
## Heartbeat
- نص فحص Heartbeat هو مطالبة Heartbeat المهيأة (افتراضيًا: `Read HEARTBEAT.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK.`). تنطبق التوجيهات المضمّنة في رسالة Heartbeat كالمعتاد (لكن تجنّب تغيير افتراضيات الجلسة من Heartbeats).
- افتراضيًا، يقتصر تسليم Heartbeat على الحمولة النهائية فقط. لإرسال رسالة `Reasoning:` المنفصلة أيضًا (عند توفرها)، اضبط `agents.defaults.heartbeat.includeReasoning: true` أو `agents.list[].heartbeat.includeReasoning: true` لكل وكيل.
- نص مسبار Heartbeat هو مطالبة Heartbeat المكوّنة (افتراضيًا: `Read HEARTBEAT.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK.`). تنطبق التوجيهات المضمنة في رسالة Heartbeat كالمعتاد (لكن تجنب تغيير افتراضيات الجلسة من Heartbeat).
- يقتصر تسليم Heartbeat افتراضيًا على الحمولة النهائية فقط. لإرسال رسالة `Reasoning:` المنفصلة أيضًا (عند توفرها)، عيّن `agents.defaults.heartbeat.includeReasoning: true` أو لكل وكيل `agents.list[].heartbeat.includeReasoning: true`.
## واجهة دردشة الويب
## واجهة دردشة الويب UI
- يعكس محدد التفكير في دردشة الويب المستوى المخزن للجلسة من مخزن/إعدادات الجلسة الواردة عند تحميل الصفحة.
- اختيار مستوى آخر يكتب تجاوز الجلسة فورًا عبر `sessions.patch`؛ ولا ينتظر الإرسال التالي وليس تجاوزًا لمرة واحدة `thinkingOnce`.
- الخيار الأول دائمًا هو `Default (<resolved level>)`، حيث يأتي الافتراضي المحلول من ملف تعريف تفكير المزوّد لنموذج الجلسة النشط بالإضافة إلى منطق الرجوع نفسه الذي يستخدمه `/status` و`session_status`.
- يستخدم المحدد `thinkingLevels` المعادة من صف/افتراضات جلسة Gateway، مع إبقاء `thinkingOptions` كقائمة تسميات قديمة. لا تحتفظ UI المتصفح بقائمة regex خاصة بها للمزوّدين؛ تملك Plugins مجموعات المستويات الخاصة بالنماذج.
- ما زال `/think:<level>` يعمل ويحدّث مستوى الجلسة المخزن نفسه، لذلك تبقى توجيهات الدردشة والمحدد متزامنين.
- يعكس منتقي التفكير في دردشة الويب المستوى المخزّن للجلسة من مخزن/إعدادات الجلسة الواردة عند تحميل الصفحة.
- يؤدي اختيار مستوى آخر إلى كتابة تجاوز الجلسة فورًا عبر `sessions.patch`؛ ولا ينتظر الإرسال التالي وليس تجاوز `thinkingOnce` لمرة واحدة.
- يكون الخيار الأول دائمًا `Default (<resolved level>)`، حيث يأتي الافتراضي المحلول من ملف تعريف تفكير المزوّد لنموذج الجلسة النشط إضافة إلى منطق الاحتياطي نفسه الذي يستخدمه `/status` و`session_status`.
- يستخدم المنتقي `thinkingLevels` المُعاد من صف/افتراضيات جلسة Gateway، مع إبقاء `thinkingOptions` كقائمة تسميات قديمة. لا تحتفظ واجهة المتصفح UI بقائمة regex خاصة بها للمزوّدين؛ تمتلك Plugins مجموعات المستويات الخاصة بالنماذج.
- يظل `/think:<level>` يعمل ويحدّث مستوى الجلسة المخزّن نفسه، لذا تبقى توجيهات الدردشة والمنتقي متزامنين.
## ملفات تعريف المزوّدين
- يمكن لإضافات المزوّدين كشف `resolveThinkingProfile(ctx)` لتعريف المستويات التي يدعمها النموذج والقيمة الافتراضية.
- يجب على إضافات المزوّدين التي تمرّر نماذج Claude بالوكالة إعادة استخدام `resolveClaudeThinkingProfile(modelId)` من `openclaw/plugin-sdk/provider-model-shared` حتى تظل كتالوجات Anthropic المباشرة والوكيلة متوافقة.
- لكل مستوى ملف تعريف `id` معياري مخزّن (`off` أو `minimal` أو `low` أو `medium` أو `high` أو `xhigh` أو `adaptive` أو `max`) وقد يتضمن `label` للعرض. يستخدم المزوّدون ذوو الوضع الثنائي `{ id: "low", label: "on" }`.
- يجب على إضافات الأدوات التي تحتاج إلى التحقق من تجاوز صريح للتفكير استخدام `api.runtime.agent.resolveThinkingPolicy({ provider, model })` مع `api.runtime.agent.normalizeThinkingLevel(...)`؛ ويجب ألا تحتفظ بقوائم مستويات المزوّد/النموذج الخاصة بها.
- يمكن لإضافات الأدوات التي لديها وصول إلى بيانات تعريف النماذج المخصصة المكوّنة تمرير `catalog` إلى `resolveThinkingPolicy` بحيث تنعكس عمليات الاشتراك في `compat.supportedReasoningEfforts` في التحقق من جانب الإضافة.
- يمكن لـ Plugins المزوّدين كشف `resolveThinkingProfile(ctx)` لتحديد المستويات المدعومة للنموذج والقيمة الافتراضية.
- يجب على Plugins المزوّدين التي تمرّر نماذج Claude عبر وكيل إعادة استخدام `resolveClaudeThinkingProfile(modelId)` من `openclaw/plugin-sdk/provider-model-shared` حتى تبقى كتالوجات Anthropic المباشرة والوكيلة متوافقة.
- لكل مستوى في الملف التعريفي `id` أساسي مخزّن (`off` أو `minimal` أو `low` أو `medium` أو `high` أو `xhigh` أو `adaptive` أو `max`) وقد يتضمن `label` للعرض. يستخدم المزوّدون الثنائيون `{ id: "low", label: "on" }`.
- يجب على Tool plugins التي تحتاج إلى التحقق من تجاوز صريح للتفكير استخدام `api.runtime.agent.resolveThinkingPolicy({ provider, model })` مع `api.runtime.agent.normalizeThinkingLevel(...)`؛ ويجب ألا تحتفظ بقوائم مستويات خاصة بها لكل مزوّد/نموذج.
- يمكن لـ Tool plugins التي لديها وصول إلى بيانات تعريف النماذج المخصصة المضبوطة تمرير `catalog` إلى `resolveThinkingPolicy` حتى تنعكس اشتراكات `compat.supportedReasoningEfforts` في التحقق من جهة Plugin.
- تبقى الخطافات القديمة المنشورة (`supportsXHighThinking` و`isBinaryThinking` و`resolveDefaultThinkingLevel`) كمحوّلات توافق، لكن يجب أن تستخدم مجموعات المستويات المخصصة الجديدة `resolveThinkingProfile`.
- تعرض صفوف/قيم Gateway الافتراضية `thinkingLevels` و`thinkingOptions` و`thinkingDefault` حتى يعرض عملاء ACP/الدردشة معرّفات وتسميات ملف التعريف نفسها التي يستخدمها التحقق في وقت التشغيل.
- تعرض صفوف/إعدادات Gateway الافتراضية `thinkingLevels` و`thinkingOptions` و`thinkingDefault` حتى تعرض عملاء ACP/الدردشة معرّفات وتسميات الملفات التعريفية نفسها التي يستخدمها تحقق وقت التشغيل.