chore(i18n): refresh ar translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-05-04 09:40:12 +00:00
parent c454de2e91
commit 9a7d8fb34d
6 changed files with 724 additions and 697 deletions

View File

@ -1,15 +1,15 @@
---
read_when:
- تريد تثبيت أو إدارة Plugins الخاصة بـ Gateway أو الحزم المتوافقة
- تريد استكشاف حالات فشل تحميل Plugin وإصلاحها
- تريد استكشاف إخفاقات تحميل Plugin وإصلاحها
sidebarTitle: Plugins
summary: مرجع CLI لـ `openclaw plugins` (list, install, marketplace, uninstall, enable/disable, doctor)
summary: مرجع CLI لـ `openclaw plugins` (list، install، marketplace، uninstall، enable/disable، doctor)
title: Plugins
x-i18n:
generated_at: "2026-05-04T07:03:02Z"
generated_at: "2026-05-04T09:37:14Z"
model: gpt-5.5
provider: openai
source_hash: 36ae7edb12986ead7e126f25e0761bf312b2644b35017181b674082105886776
source_hash: f561ce098181b07f25db3520b1726162863469ac05fb4a3e786915257d97c9a4
source_path: cli/plugins.md
workflow: 16
---
@ -18,7 +18,7 @@ x-i18n:
<CardGroup cols={2}>
<Card title="نظام Plugin" href="/ar/tools/plugin">
دليل المستخدم النهائي لتثبيت Plugins وتمكينها واستكشاف مشكلاتها وإصلاحها.
دليل المستخدم النهائي لتثبيت Plugins وتفعيلها واستكشاف أخطائها وإصلاحها.
</Card>
<Card title="إدارة Plugins" href="/ar/plugins/manage-plugins">
أمثلة سريعة للتثبيت، والسرد، والتحديث، وإلغاء التثبيت، والنشر.
@ -27,10 +27,10 @@ x-i18n:
نموذج توافق الحزم.
</Card>
<Card title="بيان Plugin" href="/ar/plugins/manifest">
حقول البيان ومخطط التكوين.
حقول البيان ومخطط الإعدادات.
</Card>
<Card title="الأمان" href="/ar/gateway/security">
تقوية الأمان لتثبيتات Plugin.
تعزيز الأمان لعمليات تثبيت Plugin.
</Card>
</CardGroup>
@ -64,14 +64,14 @@ openclaw plugins marketplace list <marketplace> --json
للتحقيق في بطء التثبيت، أو الفحص، أو إلغاء التثبيت، أو تحديث السجل، شغّل
الأمر مع `OPENCLAW_PLUGIN_LIFECYCLE_TRACE=1`. يكتب التتبع توقيتات المراحل
إلى stderr ويُبقي مخرجات JSON قابلة للتحليل. راجع [تصحيح الأخطاء](/ar/help/debugging#plugin-lifecycle-trace).
إلى stderr ويحافظ على قابلية تحليل مخرجات JSON. راجع [تصحيح الأخطاء](/ar/help/debugging#plugin-lifecycle-trace).
<Note>
تأتي Plugins المضمّنة مع OpenClaw. يكون بعضها ممكّنًا افتراضيًا (مثل موفري النماذج المضمّنين، وموفري الكلام المضمّنين، وPlugin المتصفح المضمّن)؛ ويتطلب بعضها الآخر `plugins enable`.
تأتي Plugins المضمّنة مع OpenClaw. يكون بعضها مفعّلًا افتراضيًا (على سبيل المثال موفرو النماذج المضمّنون، وموفرو الكلام المضمّنون، وPlugin المتصفح المضمّن)؛ ويتطلب البعض الآخر `plugins enable`.
يجب أن تشحن Plugins الأصلية لـ OpenClaw ملف `openclaw.plugin.json` مع JSON Schema مضمن (`configSchema`، حتى لو كان فارغًا). تستخدم الحزم المتوافقة بيانات الحزم الخاصة بها بدلًا من ذلك.
يجب أن تتضمن Plugins الأصلية في OpenClaw ملف `openclaw.plugin.json` مع JSON Schema مضمّن (`configSchema`، حتى لو كان فارغًا). تستخدم الحزم المتوافقة بيانات الحزم الخاصة بها بدلًا من ذلك.
يعرض `plugins list` القيمة `Format: openclaw` أو `Format: bundle`. وتعرض مخرجات القائمة/المعلومات المطوّلة أيضًا النوع الفرعي للحزمة (`codex` أو `claude` أو `cursor`) إضافةً إلى إمكانات الحزمة المكتشفة.
يعرض `plugins list` القيمة `Format: openclaw` أو `Format: bundle`. كما تعرض مخرجات القائمة/المعلومات المطوّلة النوع الفرعي للحزمة (`codex` أو `claude` أو `cursor`) بالإضافة إلى إمكانات الحزمة المكتشفة.
</Note>
### التثبيت
@ -93,108 +93,108 @@ openclaw plugins install <plugin> --marketplace https://github.com/<owner>/<repo
```
<Warning>
تُثبّت أسماء الحزم المجردة من npm افتراضيًا أثناء مرحلة التحويل عند الإطلاق. استخدم `clawhub:<package>` من أجل ClawHub. تعامل مع تثبيتات Plugin كما تتعامل مع تشغيل التعليمات البرمجية. يُفضّل استخدام الإصدارات المثبّتة.
تُثبَّت أسماء الحزم المجردة من npm افتراضيًا أثناء انتقال الإطلاق. استخدم `clawhub:<package>` لـ ClawHub. تعامل مع تثبيت Plugin كما تتعامل مع تشغيل الكود. فضّل الإصدارات المثبّتة.
</Warning>
يستعلم `plugins search` من ClawHub عن حزم Plugin القابلة للتثبيت ويطبع
أسماء حزم جاهزة للتثبيت. يبحث في حزم code-plugin وbundle-plugin،
وليس في Skills. استخدم `openclaw skills search` للبحث عن Skills في ClawHub.
وليس Skills. استخدم `openclaw skills search` للبحث عن Skills في ClawHub.
<Note>
ClawHub هو سطح التوزيع والاكتشاف الأساسي لمعظم Plugins. يظل npm
مسارًا احتياطيًا ومدعومًا للتثبيت المباشر. عادت حزم Plugin المملوكة لـ OpenClaw
بصيغة `@openclaw/*` إلى النشر على npm؛ راجع القائمة الحالية
ClawHub هو واجهة التوزيع والاكتشاف الأساسية لمعظم Plugins. يظل Npm
مسارًا احتياطيًا مدعومًا ومسار تثبيت مباشر. عادت حزم Plugin المملوكة لـ OpenClaw
باسم `@openclaw/*` إلى النشر على npm؛ راجع القائمة الحالية
على [npmjs.com/org/openclaw](https://www.npmjs.com/org/openclaw) أو
[مخزون Plugin](/ar/plugins/plugin-inventory). تستخدم التثبيتات المستقرة `latest`.
وتفضّل تثبيتات وتحديثات قناة beta وسم توزيع npm المسمى `beta` عندما يكون ذلك الوسم
تفضّل عمليات التثبيت والتحديث في قناة بيتا وسم التوزيع `beta` في npm عندما يكون ذلك الوسم
متاحًا، ثم تعود إلى `latest`.
</Note>
<AccordionGroup>
<Accordion title="تضمينات التكوين وإصلاح التكوين غير الصالح">
إذا كان قسم `plugins` لديك مدعومًا بملف `$include` واحد، فإن `plugins install/update/enable/disable/uninstall` تكتب إلى ذلك الملف المضمّن وتترك `openclaw.json` دون تغيير. تفشل تضمينات الجذر، ومصفوفات التضمين، والتضمينات التي تحتوي على تجاوزات شقيقة بشكل مغلق بدلًا من تسطيحها. راجع [تضمينات التكوين](/ar/gateway/configuration) لمعرفة الأشكال المدعومة.
<Accordion title="تضمينات الإعداد وإصلاح الإعداد غير الصالح">
إذا كان قسم `plugins` لديك مدعومًا بـ `$include` في ملف واحد، فإن `plugins install/update/enable/disable/uninstall` تكتب إلى ذلك الملف المضمّن وتترك `openclaw.json` دون تغيير. تفشل تضمينات الجذر، ومصفوفات التضمين، والتضمينات التي تحتوي على تجاوزات شقيقة بشكل مغلق بدلًا من التسطيح. راجع [تضمينات الإعداد](/ar/gateway/configuration) للاطلاع على الأشكال المدعومة.
إذا كان التكوين غير صالح أثناء التثبيت، فعادةً يفشل `plugins install` بشكل مغلق ويطلب منك تشغيل `openclaw doctor --fix` أولًا. أثناء بدء تشغيل Gateway وإعادة التحميل الساخنة، يفشل تكوين Plugin غير الصالح بشكل مغلق مثل أي تكوين غير صالح آخر؛ ويمكن لـ `openclaw doctor --fix` عزل إدخال Plugin غير الصالح. الاستثناء الوحيد الموثق في وقت التثبيت هو مسار استرداد ضيق لـ Plugin مضمّن يتطلب أن تختار Plugins صراحةً `openclaw.install.allowInvalidConfigRecovery`.
إذا كان الإعداد غير صالح أثناء التثبيت، فإن `plugins install` يفشل عادةً بشكل مغلق ويطلب منك تشغيل `openclaw doctor --fix` أولًا. أثناء بدء Gateway وإعادة التحميل الساخن، يفشل إعداد Plugin غير الصالح بشكل مغلق مثل أي إعداد غير صالح آخر؛ يمكن لـ `openclaw doctor --fix` عزل إدخال Plugin غير الصالح. الاستثناء الوحيد الموثق وقت التثبيت هو مسار استرداد ضيق لـ Plugin مضمّن لـ Plugins التي تختار صراحةً `openclaw.install.allowInvalidConfigRecovery`.
</Accordion>
<Accordion title="--force وإعادة التثبيت مقابل التحديث">
يعيد `--force` استخدام هدف التثبيت الحالي ويستبدل Plugin أو حزمة خطافات مثبتة مسبقًا في مكانها. استخدمه عندما تعيد تثبيت المعرّف نفسه عمدًا من مسار محلي جديد، أو أرشيف، أو حزمة ClawHub، أو أثر npm. للترقيات المعتادة لـ Plugin من npm متتبَّع مسبقًا، يُفضّل استخدام `openclaw plugins update <id-or-npm-spec>`.
يعيد `--force` استخدام هدف التثبيت الحالي ويستبدل Plugin أو حزمة خطافات مثبّتة بالفعل في مكانها. استخدمه عندما تعيد تثبيت نفس المعرّف عمدًا من مسار محلي جديد، أو أرشيف، أو حزمة ClawHub، أو أثر npm. للترقيات الروتينية لـ Plugin من npm متتبّع بالفعل، فضّل `openclaw plugins update <id-or-npm-spec>`.
إذا شغّلت `plugins install` لمعرّف Plugin مثبت مسبقًا، فسيتوقف OpenClaw ويوجهك إلى `plugins update <id-or-npm-spec>` للترقية العادية، أو إلى `plugins install <package> --force` عندما تريد فعلًا استبدال التثبيت الحالي من مصدر مختلف.
إذا شغّلت `plugins install` لمعرّف Plugin مثبّت بالفعل، يوقف OpenClaw العملية ويوجّهك إلى `plugins update <id-or-npm-spec>` للترقية العادية، أو إلى `plugins install <package> --force` عندما تريد فعلًا استبدال التثبيت الحالي من مصدر مختلف.
</Accordion>
<Accordion title="نطاق --pin">
ينطبق `--pin` على تثبيتات npm فقط. وهو غير مدعوم مع تثبيتات `git:`؛ استخدم مرجع Git صريحًا مثل `git:github.com/acme/plugin@v1.2.3` عندما تريد مصدرًا مثبّتًا. ولا يُدعم مع `--marketplace`، لأن تثبيتات السوق تحفظ بيانات تعريف مصدر السوق بدلًا من مواصفة npm.
ينطبق `--pin` على تثبيتات npm فقط. لا يُدعم مع تثبيتات `git:`؛ استخدم مرجع git صريحًا مثل `git:github.com/acme/plugin@v1.2.3` عندما تريد مصدرًا مثبّتًا. ولا يُدعم مع `--marketplace`، لأن تثبيتات marketplace تحفظ بيانات تعريف مصدر marketplace بدلًا من مواصفة npm.
</Accordion>
<Accordion title="--dangerously-force-unsafe-install">
`--dangerously-force-unsafe-install` خيار طوارئ للإيجابيات الكاذبة في ماسح التعليمات البرمجية الخطرة المدمج. يسمح بمتابعة التثبيت حتى عندما يبلّغ الماسح المدمج عن نتائج `critical`، لكنه **لا** يتجاوز كتل سياسة خطاف Plugin `before_install` و**لا** يتجاوز إخفاقات الفحص.
`--dangerously-force-unsafe-install` خيار كسر طوارئ للنتائج الإيجابية الكاذبة في ماسح الكود الخطير المضمّن. يسمح للتثبيت بالاستمرار حتى عندما يبلّغ الماسح المضمّن عن نتائج `critical`، لكنه **لا** يتجاوز كتل سياسة خطاف `before_install` الخاصة بـ Plugin، و**لا** يتجاوز إخفاقات الفحص.
تنطبق علامة CLI هذه على تدفقات تثبيت/تحديث Plugin. تستخدم تثبيتات تبعيات Skills المدعومة من Gateway تجاوز الطلب المطابق `dangerouslyForceUnsafeInstall`، بينما يظل `openclaw skills install` تدفقًا منفصلًا لتنزيل/تثبيت Skills من ClawHub.
ينطبق علم CLI هذا على مسارات تثبيت/تحديث Plugin. تستخدم تثبيتات تبعيات Skills المدعومة من Gateway تجاوز الطلب المطابق `dangerouslyForceUnsafeInstall`، بينما يظل `openclaw skills install` مسار تنزيل/تثبيت Skills منفصلًا في ClawHub.
إذا كان Plugin نشرته على ClawHub محظورًا بسبب فحص السجل، فاستخدم خطوات الناشر في [ClawHub](/ar/tools/clawhub).
إذا حُظر Plugin نشرته على ClawHub بسبب فحص السجل، فاستخدم خطوات الناشر في [ClawHub](/ar/tools/clawhub).
</Accordion>
<Accordion title="حزم الخطافات ومواصفات npm">
`plugins install` هو أيضًا سطح التثبيت لحزم الخطافات التي تعرض `openclaw.hooks` في `package.json`. استخدم `openclaw hooks` لرؤية الخطافات المفلترة وتمكين كل خطاف على حدة، وليس لتثبيت الحزم.
`plugins install` هو أيضًا واجهة التثبيت لحزم الخطافات التي تعرض `openclaw.hooks` في `package.json`. استخدم `openclaw hooks` لرؤية الخطافات المفلترة وتفعيل كل خطاف، وليس لتثبيت الحزم.
مواصفات npm **خاصة بالسجل فقط** (اسم الحزمة + اختياريًا **إصدار دقيق** أو **وسم توزيع**). تُرفض مواصفات Git/URL/file ونطاقات semver. تعمل تثبيتات التبعيات محليًا ضمن المشروع مع `--ignore-scripts` للسلامة، حتى إذا كانت لدى shell لديك إعدادات تثبيت npm عالمية.
مواصفات Npm هي **للسجل فقط** (اسم الحزمة + **إصدار دقيق** اختياري أو **وسم توزيع**). تُرفض مواصفات Git/URL/file ونطاقات semver. تعمل تثبيتات التبعيات محليًا على مستوى المشروع مع `--ignore-scripts` للأمان، حتى عندما يحتوي shell لديك على إعدادات تثبيت npm عامة.
استخدم `npm:<package>` عندما تريد جعل حل npm صريحًا. كما تُثبّت مواصفات الحزم المجردة مباشرةً من npm أثناء مرحلة التحويل عند الإطلاق.
استخدم `npm:<package>` عندما تريد جعل حل npm صريحًا. تُثبَّت مواصفات الحزم المجردة أيضًا مباشرة من npm أثناء انتقال الإطلاق.
تبقى المواصفات المجردة و`@latest` على المسار المستقر. تُعد إصدارات التصحيح المؤرخة من OpenClaw مثل `2026.5.3-1` إصدارات مستقرة لهذا الفحص. إذا حل npm أيًا منهما إلى إصدار تمهيدي، يتوقف OpenClaw ويطلب منك الاشتراك صراحةً باستخدام وسم إصدار تمهيدي مثل `@beta`/`@rc` أو إصدار تمهيدي دقيق مثل `@1.2.3-beta.4`.
تبقى المواصفات المجردة و`@latest` على مسار الاستقرار. تُعد إصدارات التصحيح ذات الطابع الزمني في OpenClaw مثل `2026.5.3-1` إصدارات مستقرة لهذا الفحص. إذا حلّ npm أيًا منها إلى إصدار تمهيدي، يوقف OpenClaw العملية ويطلب منك الاشتراك صراحةً باستخدام وسم تمهيدي مثل `@beta`/`@rc` أو إصدار تمهيدي دقيق مثل `@1.2.3-beta.4`.
إذا طابقت مواصفة تثبيت مجردة معرّف Plugin رسميًا (مثل `diffs`)، يثبّت OpenClaw إدخال الكتالوج مباشرةً. لتثبيت حزمة npm بالاسم نفسه، استخدم مواصفة ذات نطاق صريح (مثل `@scope/diffs`).
إذا طابقت مواصفة تثبيت مجردة معرّف Plugin رسميًا (مثل `diffs`)، يثبّت OpenClaw إدخال الكتالوج مباشرة. لتثبيت حزمة npm تحمل الاسم نفسه، استخدم مواصفة نطاق صريحة (مثل `@scope/diffs`).
</Accordion>
<Accordion title="مستودعات Git">
استخدم `git:<repo>` للتثبيت مباشرةً من مستودع Git. تتضمن الصيغ المدعومة `git:github.com/owner/repo`، و`git:owner/repo`، وعناوين الاستنساخ الكاملة `https://`، و`ssh://`، و`git://`، و`file://`، و`git@host:owner/repo.git`. أضف `@<ref>` أو `#<ref>` لاستخراج فرع أو وسم أو التزام قبل التثبيت.
استخدم `git:<repo>` للتثبيت مباشرة من مستودع git. تشمل الأشكال المدعومة `git:github.com/owner/repo`، و`git:owner/repo`، وروابط النسخ الكاملة `https://`، و`ssh://`، و`git://`، و`file://`، و`git@host:owner/repo.git`. أضف `@<ref>` أو `#<ref>` لسحب فرع أو وسم أو commit قبل التثبيت.
تستنسخ تثبيتات Git إلى دليل مؤقت، وتستخرج المرجع المطلوب عندما يكون موجودًا، ثم تستخدم مثبّت دليل Plugin المعتاد. يعني ذلك أن التحقق من البيان، وفحص التعليمات البرمجية الخطرة، وعمل تثبيت مدير الحزم، وسجلات التثبيت تتصرف مثل تثبيتات npm. تتضمن تثبيتات Git المسجلة عنوان URL/المرجع للمصدر إضافةً إلى الالتزام المحلول بحيث يمكن لـ `openclaw plugins update` إعادة حل المصدر لاحقًا.
تستنسخ تثبيتات Git إلى دليل مؤقت، وتسحب المرجع المطلوب عند وجوده، ثم تستخدم مثبّت دليل Plugin العادي. وهذا يعني أن التحقق من البيان، وفحص الكود الخطير، وعمل تثبيت مدير الحزم، وسجلات التثبيت تتصرف مثل تثبيتات npm. تتضمن تثبيتات git المسجلة رابط/مرجع المصدر بالإضافة إلى commit المحلول حتى يتمكن `openclaw plugins update` من إعادة حل المصدر لاحقًا.
بعد التثبيت من Git، استخدم `openclaw plugins inspect <id> --runtime --json` للتحقق من تسجيلات وقت التشغيل مثل طرق Gateway وأوامر CLI. إذا سجّل Plugin جذر CLI باستخدام `api.registerCli`، فنفّذ ذلك الأمر مباشرةً عبر CLI الجذرية لـ OpenClaw، مثل `openclaw demo-plugin ping`.
بعد التثبيت من git، استخدم `openclaw plugins inspect <id> --runtime --json` للتحقق من تسجيلات وقت التشغيل مثل طرق gateway وأوامر CLI. إذا سجّل Plugin جذر CLI باستخدام `api.registerCli`، فنفّذ ذلك الأمر مباشرة عبر CLI الجذرية لـ OpenClaw، على سبيل المثال `openclaw demo-plugin ping`.
</Accordion>
<Accordion title="الأرشيفات">
الأرشيفات المدعومة: `.zip`، و`.tgz`، و`.tar.gz`، و`.tar`. يجب أن تحتوي أرشيفات Plugin الأصلية لـ OpenClaw على `openclaw.plugin.json` صالح في جذر Plugin المستخرج؛ أما الأرشيفات التي تحتوي فقط على `package.json` فتُرفض قبل أن يكتب OpenClaw سجلات التثبيت.
الأرشيفات المدعومة: `.zip`، و`.tgz`، و`.tar.gz`، و`.tar`. يجب أن تحتوي أرشيفات Plugin الأصلية في OpenClaw على `openclaw.plugin.json` صالح في جذر Plugin المستخرج؛ تُرفض الأرشيفات التي تحتوي فقط على `package.json` قبل أن يكتب OpenClaw سجلات التثبيت.
تثبيتات سوق Claude مدعومة أيضًا.
تُدعم أيضًا تثبيتات Claude marketplace.
</Accordion>
</AccordionGroup>
تستخدم تثبيتات ClawHub محدِّد موقع صريحًا `clawhub:<package>`:
تستخدم تثبيتات ClawHub محدد موقع صريحًا `clawhub:<package>`:
```bash
openclaw plugins install clawhub:openclaw-codex-app-server
openclaw plugins install clawhub:openclaw-codex-app-server@1.2.3
```
تُثبّت مواصفات Plugin الآمنة لـ npm والمجردة من npm افتراضيًا أثناء مرحلة التحويل عند الإطلاق:
تُثبَّت مواصفات Plugin الآمنة لـ npm المجردة من npm افتراضيًا أثناء انتقال الإطلاق:
```bash
openclaw plugins install openclaw-codex-app-server
```
استخدم `npm:` لجعل الحل الخاص بـ npm فقط صريحًا:
استخدم `npm:` لجعل حل npm فقط صريحًا:
```bash
openclaw plugins install npm:openclaw-codex-app-server
openclaw plugins install npm:@scope/plugin-name@1.0.1
```
يتحقق OpenClaw من توافق API المعلن لـ Plugin / الحد الأدنى لتوافق Gateway قبل التثبيت. عندما ينشر إصدار ClawHub المحدد أثر ClawPack، ينزّل OpenClaw ملف `.tgz` الخاص بـ npm-pack المرقّم بالإصدار، ويتحقق من رأس بصمة ClawHub وبصمة الأثر، ثم يثبته عبر مسار الأرشيف المعتاد. ما زالت إصدارات ClawHub الأقدم التي لا تحتوي على بيانات تعريف ClawPack تُثبّت عبر مسار التحقق من أرشيف الحزمة القديم. تحتفظ التثبيتات المسجلة ببيانات تعريف مصدر ClawHub، ونوع الأثر، وnpm integrity، وnpm shasum، واسم tarball، وحقائق بصمة ClawPack لاستخدامها في التحديثات اللاحقة.
تحتفظ تثبيتات ClawHub غير المرقّمة بإصدار بمواصفة مسجلة غير مرقّمة كي يتمكن `openclaw plugins update` من متابعة إصدارات ClawHub الأحدث؛ وتظل محددات الإصدار أو الوسم الصريحة مثل `clawhub:pkg@1.2.3` و`clawhub:pkg@beta` مثبّتة على ذلك المحدد.
يتحقق OpenClaw من توافق واجهة برمجة تطبيقات Plugin المعلن عنها / الحد الأدنى لتوافق gateway قبل التثبيت. عندما ينشر إصدار ClawHub المحدد أثر ClawPack، ينزّل OpenClaw ملف `.tgz` المعبأ عبر npm والموسوم بالإصدار، ويتحقق من ترويسة ملخص ClawHub وملخص الأثر، ثم يثبّته عبر مسار الأرشيف العادي. لا تزال إصدارات ClawHub الأقدم من دون بيانات تعريف ClawPack تُثبَّت عبر مسار التحقق القديم من أرشيف الحزمة. تحتفظ التثبيتات المسجلة ببيانات تعريف مصدر ClawHub، ونوع الأثر، وتكامل npm، وshasum الخاص بـ npm، واسم tarball، وحقائق ملخص ClawPack للتحديثات اللاحقة.
تحتفظ تثبيتات ClawHub غير محددة الإصدار بمواصفة مسجلة غير محددة الإصدار حتى يتمكن `openclaw plugins update` من متابعة إصدارات ClawHub الأحدث؛ وتبقى محددات الإصدار أو الوسم الصريحة مثل `clawhub:pkg@1.2.3` و`clawhub:pkg@beta` مثبّتة على ذلك المحدد.
#### اختصار السوق
#### اختصار Marketplace
استخدم اختصار `plugin@marketplace` عندما يكون اسم السوق موجودًا في ذاكرة التخزين المؤقت للسجل المحلي لدى Claude في `~/.claude/plugins/known_marketplaces.json`:
استخدم اختصار `plugin@marketplace` عندما يكون اسم marketplace موجودًا في ذاكرة سجل Claude المحلية المؤقتة في `~/.claude/plugins/known_marketplaces.json`:
```bash
openclaw plugins marketplace list <marketplace-name>
openclaw plugins install <plugin-name>@<marketplace-name>
```
استخدم `--marketplace` عندما تريد تمرير مصدر السوق صراحةً:
استخدم `--marketplace` عندما تريد تمرير مصدر marketplace صراحةً:
```bash
openclaw plugins install <plugin-name> --marketplace <marketplace-name>
@ -205,7 +205,7 @@ openclaw plugins install <plugin-name> --marketplace ./my-marketplace
<Tabs>
<Tab title="مصادر السوق">
- اسم سوق معروف لـ Claude من `~/.claude/plugins/known_marketplaces.json`
- اسم سوق معروف لدى Claude من `~/.claude/plugins/known_marketplaces.json`
- جذر سوق محلي أو مسار `marketplace.json`
- اختصار مستودع GitHub مثل `owner/repo`
- عنوان URL لمستودع GitHub مثل `https://github.com/owner/repo`
@ -213,11 +213,11 @@ openclaw plugins install <plugin-name> --marketplace ./my-marketplace
</Tab>
<Tab title="قواعد السوق البعيد">
بالنسبة إلى الأسواق البعيدة المحمّلة من GitHub أو git، يجب أن تبقى إدخالات Plugin داخل مستودع السوق المستنسخ. يقبل OpenClaw مصادر المسارات النسبية من ذلك المستودع ويرفض مصادر Plugin من HTTP(S) والمسارات المطلقة وgit وGitHub وغيرها من المصادر غير المسارية من البيانات البعيدة.
بالنسبة إلى الأسواق البعيدة المحملة من GitHub أو git، يجب أن تبقى إدخالات Plugin داخل مستودع السوق المستنسخ. يقبل OpenClaw مصادر المسارات النسبية من ذلك المستودع ويرفض مصادر Plugin من HTTP(S) والمسارات المطلقة وgit وGitHub وغيرها من المصادر غير المسارية من البيانات التعريفية البعيدة.
</Tab>
</Tabs>
بالنسبة إلى المسارات المحلية والأرشيفات، يكتشف OpenClaw تلقائيًا:
بالنسبة إلى المسارات والأرشيفات المحلية، يكتشف OpenClaw تلقائيا:
- Plugins أصلية لـ OpenClaw (`openclaw.plugin.json`)
- حزم متوافقة مع Codex (`.codex-plugin/plugin.json`)
@ -225,7 +225,7 @@ openclaw plugins install <plugin-name> --marketplace ./my-marketplace
- حزم متوافقة مع Cursor (`.cursor-plugin/plugin.json`)
<Note>
تُثبَّت الحزم المتوافقة في جذر Plugin المعتاد وتشارك في تدفق القائمة/المعلومات/التمكين/التعطيل نفسه. حاليًا، تُدعم Skills الحزم، وSkills أوامر Claude، وافتراضات `settings.json` الخاصة بـ Claude، وافتراضات `.lsp.json` الخاصة بـ Claude / `lspServers` المعلنة في البيان، وSkills أوامر Cursor، وأدلة hooks المتوافقة مع Codex؛ أما قدرات الحزم الأخرى المكتشفة فتظهر في التشخيصات/المعلومات لكنها لم تُوصَل بعد بتنفيذ وقت التشغيل.
تثبت الحزم المتوافقة في جذر Plugin العادي وتشارك في تدفق القائمة/المعلومات/التمكين/التعطيل نفسه. حاليا، تكون Skills الخاصة بالحزم، وSkills أوامر Claude، وافتراضيات Claude `settings.json`، وافتراضيات Claude `.lsp.json` / `lspServers` المعلنة في البيان، وSkills أوامر Cursor، وأدلة خطافات Codex المتوافقة مدعومة؛ أما قدرات الحزم الأخرى المكتشفة فتظهر في التشخيصات/المعلومات لكنها لم توصل بعد بالتنفيذ وقت التشغيل.
</Note>
### القائمة
@ -241,59 +241,58 @@ openclaw plugins search <query> --json
```
<ParamField path="--enabled" type="boolean">
اعرض Plugins الممكّنة فقط.
اعرض Plugins الممكنة فقط.
</ParamField>
<ParamField path="--verbose" type="boolean">
بدّل من عرض الجدول إلى أسطر تفاصيل لكل Plugin تتضمن بيانات تعريف المصدر/الأصل/الإصدار/التفعيل.
بدّل من عرض الجدول إلى أسطر تفاصيل لكل Plugin تتضمن بيانات المصدر/الأصل/الإصدار/التفعيل الوصفية.
</ParamField>
<ParamField path="--json" type="boolean">
مخزون قابل للقراءة آليًا مع تشخيصات السجل وحالة تثبيت تبعيات الحزمة.
مخزون قابل للقراءة آليا مع تشخيصات السجل وحالة تثبيت تبعيات الحزمة.
</ParamField>
<Note>
يقرأ `plugins list` سجل Plugin المحلي المستدام أولًا، مع مسار احتياطي مشتق من البيان فقط عندما يكون السجل مفقودًا أو غير صالح. يفيد ذلك في التحقق مما إذا كان Plugin مثبتًا وممكّنًا ومرئيًا لتخطيط بدء التشغيل البارد، لكنه ليس فحصًا مباشرًا لوقت تشغيل عملية Gateway قيد التشغيل بالفعل. بعد تغيير كود Plugin أو التمكين أو سياسة hooks أو `plugins.load.paths`، أعد تشغيل Gateway الذي يخدم القناة قبل توقع تشغيل كود `register(api)` الجديد أو hooks. بالنسبة إلى عمليات النشر البعيدة/الحاويات، تحقق من أنك تعيد تشغيل العملية الفرعية الفعلية `openclaw gateway run`، وليس عملية غلاف فقط.
يقرأ `plugins list` سجل Plugins المحلي المستمر أولا، مع بديل مشتق من البيانات التعريفية فقط عند فقدان السجل أو عدم صلاحيته. يفيد ذلك في التحقق مما إذا كان Plugin مثبتا وممكنا ومرئيا لتخطيط بدء التشغيل البارد، لكنه ليس فحصا مباشرا وقت التشغيل لعملية Gateway قيد التشغيل بالفعل. بعد تغيير كود Plugin أو حالة التمكين أو سياسة الخطافات أو `plugins.load.paths`، أعد تشغيل Gateway الذي يخدم القناة قبل توقع تشغيل كود `register(api)` أو الخطافات الجديدة. بالنسبة إلى النشرات البعيدة/الحاوية، تحقق من أنك تعيد تشغيل ابن `openclaw gateway run` الفعلي، وليس عملية غلاف فقط.
يتضمن `plugins list --json` قيمة `dependencyStatus` لكل Plugin من `package.json`
`dependencies` و`optionalDependencies`. يتحقق OpenClaw مما إذا كانت أسماء تلك الحزم
موجودة على مسار بحث Node المعتاد عن `node_modules` الخاص بـ Plugin؛ ولا
يستورد كود وقت تشغيل Plugin، ولا يشغّل مدير حزم، ولا يصلح التبعيات
المفقودة.
موجودة على مسار بحث Node `node_modules` العادي الخاص بـ Plugin؛ ولا يستورد كود
تشغيل Plugin، أو يشغل مدير حزم، أو يصلح التبعيات المفقودة.
</Note>
`plugins search` هو بحث في كتالوج ClawHub البعيد. لا يفحص الحالة المحلية،
ولا يغيّر التكوين، ولا يثبت الحزم، ولا يحمّل كود وقت تشغيل Plugin. تتضمن
نتائج البحث اسم حزمة ClawHub، والعائلة، والقناة، والإصدار، والملخص،
وتلميح تثبيت مثل `openclaw plugins install clawhub:<package>`.
ولا يغير الإعدادات، ولا يثبت الحزم، ولا يحمل كود تشغيل Plugin. تتضمن نتائج
البحث اسم حزمة ClawHub، والعائلة، والقناة، والإصدار، والملخص، وتلميح تثبيت مثل
`openclaw plugins install clawhub:<package>`.
لعمل Plugin مضمّن داخل صورة Docker معبأة، اعمل تحميل ربط لدليل مصدر Plugin
للعمل على Plugin مضمّن داخل صورة Docker معبأة، اربط دليل مصدر Plugin
فوق مسار المصدر المعبأ المطابق، مثل
`/app/extensions/synology-chat`. سيكتشف OpenClaw طبقة المصدر المركبة تلك
قبل `/app/dist/extensions/synology-chat`؛ أما دليل المصدر المنسوخ نسخًا عاديًا
فيبقى غير نشط بحيث تظل التثبيتات المعبأة المعتادة تستخدم dist المترجم.
قبل `/app/dist/extensions/synology-chat`؛ أما دليل المصدر المنسوخ العادي
فيبقى خاملا بحيث تستمر التثبيتات المعبأة العادية في استخدام dist المترجم.
لتصحيح hooks وقت التشغيل:
لتصحيح خطافات وقت التشغيل:
- يعرض `openclaw plugins inspect <id> --runtime --json` hooks المسجلة والتشخيصات من جولة فحص تُحمّل الوحدة. لا يثبت فحص وقت التشغيل التبعيات أبدًا؛ استخدم `openclaw doctor --fix` لتنظيف حالة التبعيات القديمة أو تثبيت Plugins القابلة للتنزيل المفقودة والمكوّنة.
- يؤكد `openclaw gateway status --deep --require-rpc` أن Gateway يمكن الوصول إليه، مع تلميحات الخدمة/العملية، ومسار التكوين، وصحة RPC.
- تتطلب hooks المحادثات غير المضمّنة (`llm_input`, `llm_output`, `before_agent_finalize`, `agent_end`) ضبط `plugins.entries.<id>.hooks.allowConversationAccess=true`.
- يعرض `openclaw plugins inspect <id> --runtime --json` الخطافات المسجلة والتشخيصات من تمريرة فحص محملة كوحدة. لا يثبت فحص وقت التشغيل التبعيات أبدا؛ استخدم `openclaw doctor --fix` لتنظيف حالة التبعيات القديمة أو تثبيت Plugins القابلة للتنزيل والمهيأة المفقودة.
- يؤكد `openclaw gateway status --deep --require-rpc` إمكانية الوصول إلى Gateway، وتلميحات الخدمة/العملية، ومسار الإعدادات، وصحة RPC.
- تتطلب خطافات المحادثة غير المضمنة (`llm_input`, `llm_output`, `before_agent_finalize`, `agent_end`) ضبط `plugins.entries.<id>.hooks.allowConversationAccess=true`.
استخدم `--link` لتجنب نسخ دليل محلي (يضيف إلى `plugins.load.paths`):
استخدم `--link` لتجنب نسخ دليل محلي (يضاف إلى `plugins.load.paths`):
```bash
openclaw plugins install -l ./my-plugin
```
<Note>
لا يُدعم `--force` مع `--link` لأن التثبيتات المرتبطة تعيد استخدام مسار المصدر بدلًا من النسخ فوق هدف تثبيت مُدار.
`--force` غير مدعوم مع `--link` لأن التثبيتات المرتبطة تعيد استخدام مسار المصدر بدلا من النسخ فوق هدف تثبيت مدار.
استخدم `--pin` مع تثبيتات npm لحفظ المواصفة الدقيقة المحلولة (`name@version`) في فهرس Plugin المُدار مع إبقاء السلوك الافتراضي غير مقفل.
استخدم `--pin` في تثبيتات npm لحفظ المواصفة الدقيقة المحلولة (`name@version`) في فهرس Plugin المدار مع إبقاء السلوك الافتراضي غير مثبت.
</Note>
### فهرس Plugin
بيانات تعريف تثبيت Plugin هي حالة تديرها الآلة، وليست تكوينًا للمستخدم. تكتبها عمليات التثبيت والتحديثات إلى `plugins/installs.json` تحت دليل حالة OpenClaw النشط. خريطة المستوى الأعلى `installRecords` هي المصدر الدائم لبيانات تعريف التثبيت، بما في ذلك سجلات بيانات Plugin المعطلة أو المفقودة. مصفوفة `plugins` هي ذاكرة التخزين المؤقت للسجل البارد المشتقة من البيان. يتضمن الملف تحذيرًا بعدم التحرير ويستخدمه `openclaw plugins update` وإلغاء التثبيت والتشخيصات وسجل Plugin البارد.
بيانات تثبيت Plugin الوصفية هي حالة مدارة آليا، وليست إعدادات مستخدم. تكتب عمليات التثبيت والتحديث هذه البيانات إلى `plugins/installs.json` تحت دليل حالة OpenClaw النشط. خريطة `installRecords` العلوية هي المصدر الدائم لبيانات التثبيت الوصفية، بما في ذلك سجلات بيانات Plugin التعريفية المعطلة أو المفقودة. مصفوفة `plugins` هي ذاكرة التخزين المؤقت لسجل التشغيل البارد المشتقة من البيانات التعريفية. يتضمن الملف تحذيرا بعدم التحرير ويستخدمه `openclaw plugins update`، وإلغاء التثبيت، والتشخيصات، وسجل Plugin البارد.
عندما يرى OpenClaw سجلات `plugins.installs` قديمة مشحونة في التكوين، ينقلها إلى فهرس Plugin ويزيل مفتاح التكوين؛ وإذا فشلت أي من عمليتي الكتابة، تُحفظ سجلات التكوين حتى لا تضيع بيانات تعريف التثبيت.
عندما يرى OpenClaw سجلات `plugins.installs` قديمة مشحونة في الإعدادات، ينقلها إلى فهرس Plugin ويزيل مفتاح الإعدادات؛ إذا فشلت أي من عمليتي الكتابة، تبقى سجلات الإعدادات حتى لا تضيع بيانات التثبيت الوصفية.
### إلغاء التثبيت
@ -303,10 +302,10 @@ openclaw plugins uninstall <id> --dry-run
openclaw plugins uninstall <id> --keep-files
```
يزيل `uninstall` سجلات Plugin من `plugins.entries` وفهرس Plugin المستدام وإدخالات قوائم السماح/الحظر الخاصة بـ Plugin وإدخالات `plugins.load.paths` المرتبطة عند الاقتضاء. ما لم يتم ضبط `--keep-files`، يزيل إلغاء التثبيت أيضًا دليل التثبيت المُدار المتعقب عندما يكون داخل جذر امتدادات Plugin الخاص بـ OpenClaw. بالنسبة إلى Plugins Active Memory، تُعاد فتحة الذاكرة إلى `memory-core`.
يزيل `uninstall` سجلات Plugin من `plugins.entries`، وفهرس Plugin المستمر، وإدخالات قوائم السماح/الرفض لـ Plugin، وإدخالات `plugins.load.paths` المرتبطة عند الاقتضاء. ما لم يتم ضبط `--keep-files`، يزيل إلغاء التثبيت أيضا دليل التثبيت المدار المتتبع عندما يكون داخل جذر إضافات Plugin الخاص بـ OpenClaw. بالنسبة إلى Plugins الذاكرة النشطة، يعاد ضبط فتحة الذاكرة إلى `memory-core`.
<Note>
`--keep-config` مدعوم كاسم مستعار مهمل لـ `--keep-files`.
`--keep-config` مدعوم كاسم بديل مهمل لـ `--keep-files`.
</Note>
### التحديث
@ -319,29 +318,29 @@ openclaw plugins update @openclaw/voice-call
openclaw plugins update openclaw-codex-app-server --dangerously-force-unsafe-install
```
تنطبق التحديثات على تثبيتات Plugin المتعقبة في فهرس Plugin المُدار وتثبيتات حزم hooks المتعقبة في `hooks.internal.installs`.
تنطبق التحديثات على تثبيتات Plugin المتتبعة في فهرس Plugin المدار وتثبيتات حزم الخطافات المتتبعة في `hooks.internal.installs`.
<AccordionGroup>
<Accordion title="حل معرّف Plugin مقابل مواصفة npm">
عندما تمرر معرّف Plugin، يعيد OpenClaw استخدام مواصفة التثبيت المسجلة لذلك Plugin. وهذا يعني أن وسوم التوزيع المخزنة سابقًا مثل `@beta` والإصدارات الدقيقة المقفلة تستمر في الاستخدام في تشغيلات `update <id>` اللاحقة.
<Accordion title="حل معرف Plugin مقابل مواصفة npm">
عندما تمرر معرف Plugin، يعيد OpenClaw استخدام مواصفة التثبيت المسجلة لذلك Plugin. هذا يعني أن وسوم dist-tags المخزنة سابقا مثل `@beta` والإصدارات الدقيقة المثبتة تواصل استخدامها في عمليات `update <id>` اللاحقة.
بالنسبة إلى تثبيتات npm، يمكنك أيضًا تمرير مواصفة حزمة npm صريحة مع وسم توزيع أو إصدار دقيق. يحل OpenClaw اسم تلك الحزمة إلى سجل Plugin المتعقب، ويحدّث ذلك Plugin المثبت، ويسجل مواصفة npm الجديدة للتحديثات المستقبلية القائمة على المعرّف.
بالنسبة إلى تثبيتات npm، يمكنك أيضا تمرير مواصفة حزمة npm صريحة مع dist-tag أو إصدار دقيق. يحل OpenClaw اسم الحزمة ذلك مرة أخرى إلى سجل Plugin المتتبع، ويحدث ذلك Plugin المثبت، ويسجل مواصفة npm الجديدة للتحديثات المستقبلية المعتمدة على المعرف.
تمرير اسم حزمة npm دون إصدار أو وسم يحل أيضًا إلى سجل Plugin المتعقب. استخدم هذا عندما يكون Plugin مقفلًا على إصدار دقيق وتريد إعادته إلى خط الإصدار الافتراضي في السجل.
تمرير اسم حزمة npm من دون إصدار أو وسم يحل أيضا مرة أخرى إلى سجل Plugin المتتبع. استخدم هذا عندما يكون Plugin مثبتا على إصدار دقيق وتريد إعادته إلى خط الإصدار الافتراضي في السجل.
</Accordion>
<Accordion title="تحديثات قناة بيتا">
يعيد `openclaw plugins update` استخدام مواصفة Plugin المتعقبة ما لم تمرر مواصفة جديدة. يعرف `openclaw update` أيضًا قناة تحديث OpenClaw النشطة: على قناة بيتا، تجرب سجلات Plugin في npm وClawHub ذات الخط الافتراضي `@beta` أولًا، ثم تعود إلى مواصفة الافتراضي/الأحدث المسجلة إذا لم يكن هناك إصدار بيتا لـ Plugin. تبقى الإصدارات الدقيقة والوسوم الصريحة مقفلة على ذلك المحدد.
<Accordion title="تحديثات قناة beta">
يعيد `openclaw plugins update` استخدام مواصفة Plugin المتتبعة ما لم تمرر مواصفة جديدة. يعرف `openclaw update` أيضا قناة تحديث OpenClaw النشطة: على قناة beta، تحاول سجلات Plugin الافتراضية من npm وClawHub استخدام `@beta` أولا، ثم ترجع إلى المواصفة الافتراضية/الأحدث المسجلة إذا لم يوجد إصدار beta لـ Plugin. تبقى الإصدارات الدقيقة والوسوم الصريحة مثبتة على ذلك المحدد.
</Accordion>
<Accordion title="فحوصات الإصدار وانحراف السلامة">
قبل تحديث npm مباشر، يتحقق OpenClaw من إصدار الحزمة المثبتة مقابل بيانات تعريف سجل npm. إذا كان الإصدار المثبت وهوية الأثر المسجلة يطابقان الهدف المحلول بالفعل، يُتخطى التحديث دون تنزيل أو إعادة تثبيت أو إعادة كتابة `openclaw.json`.
قبل تحديث npm مباشر، يتحقق OpenClaw من إصدار الحزمة المثبتة مقابل بيانات سجل npm الوصفية. إذا كان الإصدار المثبت وهوية الأثر المسجلة يطابقان الهدف المحلول بالفعل، يتخطى التحديث من دون تنزيل أو إعادة تثبيت أو إعادة كتابة `openclaw.json`.
عندما توجد بصمة سلامة مخزنة وتتغير بصمة الأثر المجلب، يتعامل OpenClaw مع ذلك كأنه انحراف أثر npm. يطبع أمر `openclaw plugins update` التفاعلي البصمتين المتوقعة والفعلية ويطلب التأكيد قبل المتابعة. تفشل مساعدات التحديث غير التفاعلية على وضع الإيقاف الآمن ما لم يقدّم المستدعي سياسة متابعة صريحة.
عندما توجد قيمة تجزئة سلامة مخزنة وتتغير تجزئة الأثر المجلب، يتعامل OpenClaw مع ذلك بوصفه انحراف أثر npm. يطبع أمر `openclaw plugins update` التفاعلي التجزئات المتوقعة والفعلية ويطلب التأكيد قبل المتابعة. تفشل مساعدينات التحديث غير التفاعلية بوضع مغلق ما لم يوفر المستدعي سياسة متابعة صريحة.
</Accordion>
<Accordion title="--dangerously-force-unsafe-install عند التحديث">
يتوفر `--dangerously-force-unsafe-install` أيضًا في `plugins update` كتجاوز طارئ للإيجابيات الكاذبة في فحص الكود الخطر المدمج أثناء تحديثات Plugin. لكنه لا يزال لا يتجاوز حواجز سياسة `before_install` الخاصة بـ Plugin أو حظر فشل الفحص، ولا ينطبق إلا على تحديثات Plugin، وليس تحديثات حزم hooks.
يتوفر `--dangerously-force-unsafe-install` أيضا في `plugins update` كتجاوز طارئ لإيجابيات فحص الكود الخطر المضمنة الكاذبة أثناء تحديثات Plugin. ما زال لا يتجاوز حظر سياسة Plugin `before_install` أو حظر فشل الفحص، ولا ينطبق إلا على تحديثات Plugin، وليس تحديثات حزم الخطافات.
</Accordion>
</AccordionGroup>
@ -353,34 +352,34 @@ openclaw plugins inspect <id> --runtime
openclaw plugins inspect <id> --json
```
يعرض الفحص الهوية، وحالة التحميل، والمصدر، وقدرات البيان، وأعلام السياسة، والتشخيصات، وبيانات تعريف التثبيت، وقدرات الحزمة، وأي دعم مكتشف لخوادم MCP أو LSP دون استيراد وقت تشغيل Plugin افتراضيًا. أضف `--runtime` لتحميل وحدة Plugin وتضمين hooks والأدوات والأوامر والخدمات وأساليب Gateway ومسارات HTTP المسجلة. يبلّغ فحص وقت التشغيل عن تبعيات Plugin المفقودة مباشرة؛ وتظل عمليات التثبيت والإصلاح في `openclaw plugins install` و`openclaw plugins update` و`openclaw doctor --fix`.
يعرض الفحص الهوية، وحالة التحميل، والمصدر، وقدرات البيانات التعريفية، وأعلام السياسة، والتشخيصات، وبيانات التثبيت الوصفية، وقدرات الحزمة، وأي دعم مكتشف لخادم MCP أو LSP من دون استيراد تشغيل Plugin افتراضيا. أضف `--runtime` لتحميل وحدة Plugin وتضمين الخطافات والأدوات والأوامر والخدمات وطرق Gateway ومسارات HTTP المسجلة. يبلغ فحص وقت التشغيل عن تبعيات Plugin المفقودة مباشرة؛ أما التثبيتات والإصلاحات فتبقى في `openclaw plugins install` و`openclaw plugins update` و`openclaw doctor --fix`.
تُثبَّت أوامر CLI المملوكة لـ Plugin كمجموعات أوامر جذرية في `openclaw`. بعد أن يعرض `inspect --runtime` أمرًا تحت `cliCommands`، شغّله بصيغة `openclaw <command> ...`؛ على سبيل المثال يمكن التحقق من Plugin يسجل `demo-git` باستخدام `openclaw demo-git ping`.
تثبت أوامر CLI المملوكة لـ Plugin كمجموعات أوامر `openclaw` جذرية. بعد أن يعرض `inspect --runtime` أمرا ضمن `cliCommands`، شغله بصيغة `openclaw <command> ...`؛ على سبيل المثال يمكن التحقق من Plugin يسجل `demo-git` باستخدام `openclaw demo-git ping`.
يُصنّف كل Plugin بحسب ما يسجله فعليًا في وقت التشغيل:
يصنف كل Plugin بحسب ما يسجله فعليا وقت التشغيل:
- **plain-capability** — نوع قدرة واحد (مثل Plugin خاص بمزوّد فقط)
- **plain-capability** — نوع قدرة واحد (مثل Plugin لموفر فقط)
- **hybrid-capability** — أنواع قدرات متعددة (مثل النص + الكلام + الصور)
- **hook-only**hooks فقط، دون قدرات أو أسطح
- **non-capability** — أدوات/أوامر/خدمات لكن دون قدرات
- **hook-only**خطافات فقط، بلا قدرات أو واجهات
- **non-capability** — أدوات/أوامر/خدمات لكن بلا قدرات
راجع [أشكال Plugin](/ar/plugins/architecture#plugin-shapes) لمزيد حول نموذج القدرات.
راجع [أشكال Plugin](/ar/plugins/architecture#plugin-shapes) لمزيد من المعلومات حول نموذج القدرات.
<Note>
ينتج علم `--json` تقريرًا قابلًا للقراءة آليًا مناسبًا للبرمجة النصية والتدقيق. يعرض `inspect --all` جدولًا على مستوى المجموعة يتضمن أعمدة الشكل، وأنواع القدرات، وإشعارات التوافق، وقدرات الحزم، وملخص hooks. `info` اسم مستعار لـ `inspect`.
تخرج علامة `--json` تقريرا قابلا للقراءة آليا ومناسبا للبرمجة والتدقيق. يعرض `inspect --all` جدولا على مستوى المجموعة يتضمن أعمدة الشكل، وأنواع القدرات، وإشعارات التوافق، وقدرات الحزمة، وملخص الخطافات. `info` اسم بديل لـ `inspect`.
</Note>
### التشخيص
### الطبيب
```bash
openclaw plugins doctor
```
يبلّغ `doctor` عن أخطاء تحميل Plugin وتشخيصات البيان/الاكتشاف وإشعارات التوافق. عندما يكون كل شيء سليمًا يطبع `No plugin issues detected.`
يبلغ `doctor` عن أخطاء تحميل Plugin، وتشخيصات البيانات التعريفية/الاكتشاف، وإشعارات التوافق. عندما يكون كل شيء سليما، يطبع `No plugin issues detected.`
إذا كان Plugin مكوّنًا موجودًا على القرص لكنه محظور بفحوصات أمان المسار في المحمّل، فإن التحقق من التكوين يبقي إدخال Plugin ويبلّغ عنه كـ `present but blocked`. أصلح تشخيص Plugin المحظور السابق، مثل ملكية المسار أو أذونات الكتابة للعالم، بدلًا من إزالة تكوين `plugins.entries.<id>` أو `plugins.allow`.
إذا كان Plugin مهيأ موجودا على القرص لكنه محظور بفحوصات سلامة المسار الخاصة بالمحمل، تبقي عملية التحقق من الإعدادات إدخال Plugin وتبلغ عنه كـ `present but blocked`. أصلح تشخيص Plugin المحظور السابق، مثل ملكية المسار أو أذونات الكتابة للعالم، بدلا من إزالة إعدادات `plugins.entries.<id>` أو `plugins.allow`.
بالنسبة إلى إخفاقات شكل الوحدة مثل تصديرات `register`/`activate` المفقودة، أعد التشغيل مع `OPENCLAW_PLUGIN_LOAD_DEBUG=1` لتضمين ملخص مدمج لشكل التصديرات في خرج التشخيص.
بالنسبة إلى إخفاقات شكل الوحدة مثل غياب صادرات `register`/`activate`، أعد التشغيل مع `OPENCLAW_PLUGIN_LOAD_DEBUG=1` لتضمين ملخص مضغوط لشكل الصادرات في مخرجات التشخيص.
### السجل
@ -390,12 +389,14 @@ openclaw plugins registry --refresh
openclaw plugins registry --json
```
سجل Plugin المحلي هو نموذج القراءة البارد المستدام في OpenClaw لهوية Plugin وتمكينه وبيانات تعريف المصدر وملكية المساهمات. يمكن لبدء التشغيل العادي، والبحث عن مالك المزوّد، وتصنيف إعداد القنوات، ومخزون Plugin قراءته دون استيراد وحدات وقت تشغيل Plugin.
سجل Plugin المحلي هو نموذج القراءة الباردة المستمر الخاص بـ OpenClaw لهوية Plugin، والتمكين، وبيانات المصدر الوصفية، وملكية المساهمات. يمكن لبدء التشغيل العادي، والبحث عن مالك الموفر، وتصنيف إعداد القناة، ومخزون Plugin قراءته من دون استيراد وحدات تشغيل Plugin.
استخدم `plugins registry` لفحص ما إذا كان السجل المحفوظ موجودًا أو محدثًا أو قديمًا. استخدم `--refresh` لإعادة بنائه من فهرس Plugin المحفوظ، وسياسة الإعدادات، وبيانات تعريف manifest/package. هذا مسار إصلاح، وليس مسار تفعيل وقت التشغيل.
استخدم `plugins registry` لفحص ما إذا كان السجل المحفوظ موجودًا أو حاليًا أو قديمًا. استخدم `--refresh` لإعادة بنائه من فهرس Plugin المحفوظ وسياسة الإعدادات وبيانات تعريف البيان/الحزمة. هذا مسار إصلاح، وليس مسار تفعيل وقت التشغيل.
يصلح `openclaw doctor --fix` أيضًا الانحراف المُدار في npm المجاور للسجل: إذا كانت حزمة `@openclaw/*` يتيمة أو مستردة ضمن جذر npm المُدار الخاص بـ Plugin تحجب Plugin مضمّنًا، يزيل doctor تلك الحزمة القديمة ويعيد بناء السجل حتى يتحقق بدء التشغيل مقابل البيان المضمّن.
<Warning>
`OPENCLAW_DISABLE_PERSISTED_PLUGIN_REGISTRY=1` هو مفتاح توافق مهمل لكسر الحاجز عند فشل قراءة السجل. فضّل استخدام `plugins registry --refresh` أو `openclaw doctor --fix`؛ فالرجوع عبر متغير البيئة مخصص فقط لاسترداد بدء التشغيل في حالات الطوارئ أثناء طرح الترحيل.
`OPENCLAW_DISABLE_PERSISTED_PLUGIN_REGISTRY=1` هو مفتاح توافق مهمل لكسر الزجاج لحالات فشل قراءة السجل. يُفضَّل استخدام `plugins registry --refresh` أو `openclaw doctor --fix`؛ والرجوع الاحتياطي عبر متغير البيئة مخصص فقط لاسترداد بدء التشغيل الطارئ أثناء طرح الترحيل.
</Warning>
### السوق
@ -405,10 +406,10 @@ openclaw plugins marketplace list <source>
openclaw plugins marketplace list <source> --json
```
تقبل قائمة السوق مسار سوق محليًا، أو مسار `marketplace.json`، أو اختصار GitHub مثل `owner/repo`، أو عنوان URL لمستودع GitHub، أو عنوان URL لـ git. يطبع `--json` تسمية المصدر التي تم حلها بالإضافة إلى بيان السوق المحلل وإدخالات Plugin.
تقبل قائمة السوق مسار سوق محليًا، أو مسار `marketplace.json`، أو اختصار GitHub مثل `owner/repo`، أو عنوان URL لمستودع GitHub، أو عنوان URL لـ git. يطبع `--json` تسمية المصدر المحلولة بالإضافة إلى بيان السوق المحلّل وإدخالات Plugin.
## ذات صلة
- [بناء Plugins](/ar/plugins/building-plugins)
- [بناء Plugin](/ar/plugins/building-plugins)
- [مرجع CLI](/ar/cli)
- [Plugins المجتمع](/ar/plugins/community)
- [Plugin المجتمع](/ar/plugins/community)

View File

@ -1,20 +1,20 @@
---
read_when:
- إضافة عمليات ترحيل doctor أو تعديلها
- إضافة ترحيلات التشخيص أو تعديلها
- إدخال تغييرات كاسرة في الإعدادات
sidebarTitle: Doctor
summary: 'أمر doctor: فحوصات الصحة، وترحيلات الإعدادات، وخطوات الإصلاح'
title: الفحص التشخيصي
title: التشخيص
x-i18n:
generated_at: "2026-05-03T21:33:51Z"
generated_at: "2026-05-04T09:37:04Z"
model: gpt-5.5
provider: openai
source_hash: 20b2cb3c3cd88e01050cb285a08a020603642439bd35668b7414360801fc03ff
source_hash: 1bc8615f5e49e8c20785a9dc9779c447fd0d5794c80663d2396b0a20b4187798
source_path: gateway/doctor.md
workflow: 16
---
`openclaw doctor` هو أداة الإصلاح والترحيل في OpenClaw. تصلح الإعدادات/الحالة القديمة، وتتحقق من الصحة، وتوفر خطوات إصلاح قابلة للتنفيذ.
`openclaw doctor` هي أداة الإصلاح + الترحيل في OpenClaw. تصلح الإعدادات/الحالة القديمة، وتتحقق من الصحة، وتوفر خطوات إصلاح قابلة للتنفيذ.
## البدء السريع
@ -22,7 +22,7 @@ x-i18n:
openclaw doctor
```
### أوضاع التشغيل بلا واجهة والأتمتة
### أوضاع التشغيل دون واجهة والأتمتة
<Tabs>
<Tab title="--yes">
@ -30,7 +30,7 @@ openclaw doctor
openclaw doctor --yes
```
يقبل الإعدادات الافتراضية دون مطالبة (بما في ذلك خطوات إصلاح إعادة التشغيل/الخدمة/العزل عند انطباقها).
قبول الإعدادات الافتراضية دون مطالبة (بما في ذلك خطوات إصلاح إعادة التشغيل/الخدمة/العزل عند انطباقها).
</Tab>
<Tab title="--repair">
@ -38,7 +38,7 @@ openclaw doctor
openclaw doctor --repair
```
يطبق الإصلاحات الموصى بها دون مطالبة (الإصلاحات + عمليات إعادة التشغيل حيث يكون ذلك آمنا).
تطبيق الإصلاحات الموصى بها دون مطالبة (الإصلاحات + إعادة التشغيل حيث يكون ذلك آمنا).
</Tab>
<Tab title="--repair --force">
@ -46,7 +46,7 @@ openclaw doctor
openclaw doctor --repair --force
```
يطبق الإصلاحات القوية أيضا (يستبدل إعدادات المشرف المخصصة).
تطبيق الإصلاحات المكثفة أيضا (يستبدل إعدادات المشرف المخصصة).
</Tab>
<Tab title="--non-interactive">
@ -54,7 +54,7 @@ openclaw doctor
openclaw doctor --non-interactive
```
يعمل دون مطالبات ويطبق فقط عمليات الترحيل الآمنة (تطبيع الإعدادات + نقل الحالة على القرص). يتخطى إجراءات إعادة التشغيل/الخدمة/العزل التي تتطلب تأكيدا بشريا. تعمل عمليات ترحيل الحالة القديمة تلقائيا عند اكتشافها.
التشغيل دون مطالبات وتطبيق عمليات الترحيل الآمنة فقط (تطبيع الإعدادات + نقل الحالة على القرص). يتخطى إجراءات إعادة التشغيل/الخدمة/العزل التي تتطلب تأكيدا بشريا. تعمل عمليات ترحيل الحالة القديمة تلقائيا عند اكتشافها.
</Tab>
<Tab title="--deep">
@ -62,7 +62,7 @@ openclaw doctor
openclaw doctor --deep
```
يفحص خدمات النظام بحثا عن تثبيتات Gateway إضافية (launchd/systemd/schtasks).
فحص خدمات النظام بحثا عن تثبيتات gateway إضافية (launchd/systemd/schtasks).
</Tab>
</Tabs>
@ -77,82 +77,82 @@ cat ~/.openclaw/openclaw.json
<AccordionGroup>
<Accordion title="الصحة، وواجهة المستخدم، والتحديثات">
- تحديث اختياري قبل التشغيل لتثبيتات git (تفاعلي فقط).
- تحديث اختياري قبل البدء لتثبيتات git (تفاعلي فقط).
- فحص حداثة بروتوكول واجهة المستخدم (يعيد بناء Control UI عندما يكون مخطط البروتوكول أحدث).
- فحص الصحة + مطالبة إعادة التشغيل.
- ملخص حالة Skills (مؤهل/مفقود/محظور) وحالة Plugin.
- ملخص حالة Skills (مؤهلة/مفقودة/محظورة) وحالة plugin.
</Accordion>
<Accordion title="الإعدادات والترحيلات">
<Accordion title="الإعدادات وعمليات الترحيل">
- تطبيع الإعدادات للقيم القديمة.
- ترحيل إعدادات Talk من حقول `talk.*` المسطحة القديمة إلى `talk.provider` + `talk.providers.<provider>`.
- فحوصات ترحيل المتصفح لإعدادات إضافة Chrome القديمة وجاهزية Chrome MCP.
- تحذيرات تجاوز مزود OpenCode (`models.providers.opencode` / `models.providers.opencode-go`).
- تحذيرات تجاوز موفر OpenCode (`models.providers.opencode` / `models.providers.opencode-go`).
- تحذيرات حجب OAuth في Codex (`models.providers.openai-codex`).
- فحص متطلبات OAuth TLS الأساسية لملفات OpenAI Codex OAuth الشخصية.
- تحذيرات قائمة السماح للـ Plugin/الأداة عندما تكون `plugins.allow` مقيدة بينما لا تزال سياسة الأدوات تطلب wildcard أو أدوات مملوكة للـ Plugin.
- ترحيل الحالة القديمة على القرص (الجلسات/مجلد الوكيل/مصادقة WhatsApp).
- ترحيل مفتاح عقد بيان Plugin القديم (`speechProviders`, `realtimeTranscriptionProviders`, `realtimeVoiceProviders`, `mediaUnderstandingProviders`, `imageGenerationProviders`, `videoGenerationProviders`, `webFetchProviders`, `webSearchProviders``contracts`).
- ترحيل مخزن Cron القديم (`jobId`, `schedule.cron`, حقول التسليم/الحمولة ذات المستوى الأعلى، حمولة `provider`، مهام Webhook الاحتياطية البسيطة `notify: true`).
- ترحيل سياسة وقت تشغيل الوكيل القديمة إلى `agents.defaults.agentRuntime` و`agents.list[].agentRuntime`.
- تنظيف إعدادات Plugin القديمة عندما تكون plugins مفعلة؛ عندما تكون `plugins.enabled=false`، تعامل مراجع Plugin القديمة كإعدادات احتواء خاملة وتبقى محفوظة.
- فحص متطلبات OAuth TLS الأساسية لملفات تعريف OpenAI Codex OAuth.
- تحذيرات قائمة السماح لـ plugin/الأدوات عندما يكون `plugins.allow` مقيدا لكن سياسة الأدوات ما زالت تطلب أحرف بدل أو أدوات مملوكة لـ plugin.
- ترحيل الحالة القديمة على القرص (الجلسات/دليل الوكيل/مصادقة WhatsApp).
- ترحيل مفاتيح عقد بيان plugin القديمة (`speechProviders`, `realtimeTranscriptionProviders`, `realtimeVoiceProviders`, `mediaUnderstandingProviders`, `imageGenerationProviders`, `videoGenerationProviders`, `webFetchProviders`, `webSearchProviders``contracts`).
- ترحيل مخزن cron القديم (`jobId`, `schedule.cron`, حقول التسليم/الحمولة على المستوى الأعلى، حمولة `provider`, وظائف Webhook الاحتياطية البسيطة `notify: true`).
- ترحيل سياسة تشغيل الوكيل القديمة إلى `agents.defaults.agentRuntime` و`agents.list[].agentRuntime`.
- تنظيف إعدادات plugin القديمة عندما تكون plugins مفعلة؛ عندما يكون `plugins.enabled=false`، تعامل مراجع plugin القديمة كإعداد احتواء خامد وتبقى محفوظة.
</Accordion>
<Accordion title="الحالة والسلامة">
- فحص ملف قفل الجلسة وتنظيف الأقفال القديمة.
- إصلاح نصوص الجلسات لفروع إعادة كتابة الموجه المكررة التي أنشأتها إصدارات 2026.4.24 المتأثرة.
- اكتشاف شاهد قبر استرداد إعادة تشغيل الوكيل الفرعي العالق، مع دعم `--fix` لمسح علامات الاسترداد القديمة الملغاة بحيث لا يستمر بدء التشغيل في التعامل مع الفرع باعتباره ملغى بسبب إعادة التشغيل.
- فحوصات سلامة الحالة والأذونات (الجلسات، النصوص، مجلد الحالة).
- إصلاح نصوص الجلسات للفروع المكررة لإعادة كتابة المطالبة التي أنشأتها إصدارات 2026.4.24 المتأثرة.
- اكتشاف علامات قبر استرداد إعادة تشغيل الوكيل الفرعي العالق، مع دعم `--fix` لمسح علامات الاسترداد الملغاة القديمة حتى لا يستمر بدء التشغيل في التعامل مع الابن كأنه ألغي بسبب إعادة التشغيل.
- فحوصات سلامة الحالة والأذونات (الجلسات، النصوص، دليل الحالة).
- فحوصات أذونات ملف الإعدادات (chmod 600) عند التشغيل محليا.
- صحة مصادقة النموذج: تفحص انتهاء OAuth، ويمكنها تحديث الرموز التي توشك على الانتهاء، وتبلغ عن حالات التهدئة/التعطيل لملف المصادقة الشخصي.
- اكتشاف مجلد مساحة عمل إضافي (`~/openclaw`).
- صحة مصادقة النموذج: تتحقق من انتهاء OAuth، ويمكنها تحديث الرموز التي تقترب من الانتهاء، وتبلغ عن حالات التهدئة/التعطيل لملف تعريف المصادقة.
- اكتشاف دليل مساحة عمل إضافي (`~/openclaw`).
</Accordion>
<Accordion title="Gateway، والخدمات، والمشرفون">
- إصلاح صورة العزل عندما يكون العزل مفعلا.
- ترحيل الخدمة القديمة واكتشاف Gateway إضافية.
- ترحيل الحالة القديمة لقناة Matrix (في وضع `--fix` / `--repair`).
- فحوصات وقت تشغيل Gateway (الخدمة مثبتة لكنها لا تعمل؛ تسمية launchd المخزنة مؤقتا).
- تحذيرات حالة القناة (مفحوصة من Gateway قيد التشغيل).
- ترحيل الخدمة القديمة واكتشاف gateway إضافي.
- ترحيل حالة قناة Matrix القديمة (في وضع `--fix` / `--repair`).
- فحوصات تشغيل Gateway (الخدمة مثبتة لكنها لا تعمل؛ تسمية launchd المخزنة مؤقتا).
- تحذيرات حالة القنوات (يجري فحصها من gateway العامل).
- تدقيق إعدادات المشرف (launchd/systemd/schtasks) مع إصلاح اختياري.
- تنظيف بيئة الوكيل المضمنة لخدمات Gateway التي التقطت قيم shell `HTTP_PROXY` / `HTTPS_PROXY` / `NO_PROXY` أثناء التثبيت أو التحديث.
- فحوصات أفضل ممارسات وقت تشغيل Gateway (Node مقابل Bun، ومسارات مدير الإصدارات).
- تنظيف بيئة الوكيل المضمنة لخدمات gateway التي التقطت قيم shell `HTTP_PROXY` / `HTTPS_PROXY` / `NO_PROXY` أثناء التثبيت أو التحديث.
- فحوصات أفضل ممارسات تشغيل Gateway (Node مقابل Bun، ومسارات مدير الإصدارات).
- تشخيصات تعارض منفذ Gateway (الافتراضي `18789`).
</Accordion>
<Accordion title="المصادقة، والأمان، والاقتران">
- تحذيرات أمان لسياسات الرسائل المباشرة المفتوحة.
- فحوصات مصادقة Gateway لوضع الرمز المحلي (تعرض إنشاء رمز عند عدم وجود مصدر رمز؛ ولا تستبدل إعدادات SecretRef للرموز).
- اكتشاف مشكلات اقتران الأجهزة (طلبات الاقتران لأول مرة المعلقة، وترقيات الدور/النطاق المعلقة، وانحراف ذاكرة التخزين المؤقت القديمة لرموز الأجهزة المحلية، وانحراف مصادقة سجل الاقتران).
<Accordion title="المصادقة، والأمان، والإقران">
- تحذيرات أمنية لسياسات الرسائل الخاصة المفتوحة.
- فحوصات مصادقة Gateway لوضع الرمز المحلي (يعرض إنشاء رمز عندما لا يوجد مصدر رمز؛ ولا يستبدل إعدادات token SecretRef).
- اكتشاف مشكلات إقران الأجهزة (طلبات الإقران الأولية المعلقة، وترقيات الدور/النطاق المعلقة، وانحراف ذاكرة الرمز المحلي للجهاز القديمة، وانحراف مصادقة سجل الإقران).
</Accordion>
<Accordion title="مساحة العمل وshell">
- فحص systemd linger على Linux.
- فحص حجم ملف تمهيد مساحة العمل (تحذيرات الاقتطاع/الاقتراب من الحد لملفات السياق).
- فحص جاهزية Skills للوكيل الافتراضي؛ يبلغ عن المهارات المسموح بها مع ملفات تنفيذية أو متغيرات بيئة أو إعدادات أو متطلبات نظام تشغيل مفقودة، ويمكن لـ `--fix` تعطيل المهارات غير المتاحة في `skills.entries`.
- فحص جاهزية Skills للوكيل الافتراضي؛ يبلغ عن skills المسموحة مع ملفات تنفيذية، أو بيئة، أو إعدادات، أو متطلبات نظام تشغيل مفقودة، ويمكن لـ `--fix` تعطيل skills غير المتاحة في `skills.entries`.
- فحص حالة إكمال shell والتثبيت/الترقية التلقائية.
- فحص جاهزية مزود تضمين البحث في الذاكرة (نموذج محلي، أو مفتاح API بعيد، أو ثنائي QMD).
- فحوصات تثبيت المصدر (عدم تطابق مساحة عمل pnpm، أصول واجهة مستخدم مفقودة، ثنائي tsx مفقود).
- فحص جاهزية موفر تضمين بحث الذاكرة (نموذج محلي، أو مفتاح API بعيد، أو ملف QMD تنفيذي).
- فحوصات تثبيت المصدر (عدم تطابق مساحة عمل pnpm، أصول واجهة مستخدم مفقودة، ملف tsx تنفيذي مفقود).
- يكتب الإعدادات المحدثة + بيانات معالج الإعداد الوصفية.
</Accordion>
</AccordionGroup>
## الردم وإعادة الضبط في واجهة Dreams
## تعبئة واجهة Dreams وإعادة ضبطها
يتضمن مشهد Dreams في Control UI إجراءات **الردم**، و**إعادة الضبط**، و**مسح المثبت** لسير عمل grounded dreaming. تستخدم هذه الإجراءات أساليب RPC بأسلوب Gateway doctor، لكنها **ليست** جزءا من إصلاح/ترحيل CLI في `openclaw doctor`.
يتضمن مشهد Dreams في Control UI إجراءات **التعبئة**، و**إعادة الضبط**، و**مسح المثبت** لسير عمل dreaming المثبت. تستخدم هذه الإجراءات طرق RPC شبيهة بـ gateway doctor، لكنها **ليست** جزءا من إصلاح/ترحيل CLI الخاص بـ `openclaw doctor`.
ما الذي تفعله:
ما تفعله:
- يفحص **الردم** ملفات `memory/YYYY-MM-DD.md` التاريخية في مساحة العمل النشطة، ويشغل تمريرة يوميات REM المثبتة، ويكتب إدخالات ردم قابلة للعكس في `DREAMS.md`.
- تزيل **إعادة الضبط** إدخالات يوميات الردم المعلمة فقط من `DREAMS.md`.
- يزيل **مسح المثبت** فقط الإدخالات المرحلية قصيرة الأجل والمثبتة فقط التي جاءت من إعادة التشغيل التاريخية ولم تجمع بعد استدعاء حيا أو دعما يوميا.
- تفحص **التعبئة** ملفات `memory/YYYY-MM-DD.md` التاريخية في مساحة العمل النشطة، وتشغل تمريرة يوميات REM المثبتة، وتكتب إدخالات تعبئة قابلة للعكس في `DREAMS.md`.
- تزيل **إعادة الضبط** إدخالات يوميات التعبئة الموسومة فقط من `DREAMS.md`.
- يزيل **مسح المثبت** فقط الإدخالات المرحلية قصيرة المدى المثبتة فقط التي جاءت من إعادة تشغيل تاريخية ولم تراكم بعد استدعاء مباشرا أو دعما يوميا.
ما الذي **لا** تفعله بمفردها:
ما **لا** تفعله بمفردها:
- لا تعدل `MEMORY.md`
- لا تشغل ترحيلات doctor الكاملة
- لا تضيف المرشحين المثبتين تلقائيا إلى مخزن الترقية قصيرة الأجل الحي إلا إذا شغلت مسار CLI المرحلي أولا بشكل صريح
- لا تشغل عمليات ترحيل doctor كاملة
- لا تدرج تلقائيا المرشحين المثبتين في مخزن الترقية القصيرة المدى الحي إلا إذا شغلت صراحة مسار CLI المرحلي أولا
إذا أردت أن تؤثر إعادة التشغيل التاريخية المثبتة في مسار الترقية العميقة العادي، فاستخدم تدفق CLI بدلا من ذلك:
@ -160,7 +160,7 @@ cat ~/.openclaw/openclaw.json
openclaw memory rem-backfill --path ./memory --stage-short-term
```
يضيف ذلك المرشحين المتينين المثبتين إلى مخزن dreaming قصير الأجل مع إبقاء `DREAMS.md` كسطح للمراجعة.
يؤدي ذلك إلى إدراج المرشحين المتينين المثبتين في مخزن dreaming قصير المدى مع إبقاء `DREAMS.md` كسطح للمراجعة.
## السلوك التفصيلي والمبررات
@ -169,114 +169,114 @@ openclaw memory rem-backfill --path ./memory --stage-short-term
إذا كان هذا checkout من git وكان doctor يعمل تفاعليا، فإنه يعرض التحديث (fetch/rebase/build) قبل تشغيل doctor.
</Accordion>
<Accordion title="1. تطبيع الإعدادات">
إذا احتوت الإعدادات على أشكال قيم قديمة (على سبيل المثال `messages.ackReaction` دون تجاوز خاص بالقناة)، يطبعها doctor إلى المخطط الحالي.
إذا كانت الإعدادات تحتوي على أشكال قيم قديمة (على سبيل المثال `messages.ackReaction` دون تجاوز خاص بالقناة)، فإن doctor يطبعها إلى المخطط الحالي.
يشمل ذلك حقول Talk المسطحة القديمة. إعدادات Talk العامة الحالية هي `talk.provider` + `talk.providers.<provider>`. يعيد Doctor كتابة أشكال `talk.voiceId` / `talk.voiceAliases` / `talk.modelId` / `talk.outputFormat` / `talk.apiKey` القديمة في خريطة المزود.
يشمل ذلك حقول Talk المسطحة القديمة. إعدادات Talk العامة الحالية هي `talk.provider` + `talk.providers.<provider>`. يعيد doctor كتابة الأشكال القديمة `talk.voiceId` / `talk.voiceAliases` / `talk.modelId` / `talk.outputFormat` / `talk.apiKey` إلى خريطة الموفر.
يحذر Doctor أيضا عندما يكون `plugins.allow` غير فارغ وتستخدم سياسة الأدوات
إدخالات wildcard أو أدوات مملوكة للـ Plugin. يطابق `tools.allow: ["*"]` فقط الأدوات
من plugins التي يتم تحميلها فعلا؛ ولا يتجاوز قائمة السماح الحصرية للـ Plugin.
يحذر doctor أيضا عندما يكون `plugins.allow` غير فارغ وتستخدم سياسة الأدوات
إدخالات أدوات بحرف بدل أو مملوكة لـ plugin. يطابق `tools.allow: ["*"]` فقط الأدوات
من plugins التي تحمل فعلا؛ ولا يتجاوز قائمة السماح الحصرية لـ plugin.
</Accordion>
<Accordion title="2. ترحيلات مفاتيح الإعدادات القديمة">
عندما تحتوي الإعدادات على مفاتيح مهملة، ترفض الأوامر الأخرى التشغيل وتطلب منك تشغيل `openclaw doctor`.
عندما تحتوي الإعدادات على مفاتيح مهملة، ترفض الأوامر الأخرى العمل وتطلب منك تشغيل `openclaw doctor`.
سيقوم Doctor بما يلي:
سيقوم doctor بما يلي:
- يشرح مفاتيح الإعدادات القديمة التي عثر عليها.
- يشرح مفاتيح الإرث التي عثر عليها.
- يعرض الترحيل الذي طبقه.
- يعيد كتابة `~/.openclaw/openclaw.json` بالمخطط المحدث.
يشغل Gateway أيضا ترحيلات doctor تلقائيا عند بدء التشغيل عندما يكتشف تنسيق إعدادات قديما، لذلك تصلح الإعدادات القديمة دون تدخل يدوي. يتولى `openclaw doctor --fix` عمليات ترحيل مخزن مهام Cron.
يشغل Gateway أيضا ترحيلات doctor تلقائيا عند بدء التشغيل عندما يكتشف تنسيق إعدادات قديما، لذلك تصلح الإعدادات القديمة دون تدخل يدوي. تتولى `openclaw doctor --fix` ترحيلات مخزن وظائف Cron.
الترحيلات الحالية:
عمليات الترحيل الحالية:
- `routing.allowFrom``channels.whatsapp.allowFrom`
- `routing.groupChat.requireMention``channels.whatsapp/telegram/imessage.groups."*".requireMention`
- `routing.groupChat.historyLimit``messages.groupChat.historyLimit`
- `routing.groupChat.mentionPatterns``messages.groupChat.mentionPatterns`
- إعدادات القنوات المكوّنة التي تفتقد سياسة الرد المرئي → `messages.groupChat.visibleReplies: "message_tool"`
- إعدادات القنوات المكوَّنة التي تفتقد سياسة رد مرئية`messages.groupChat.visibleReplies: "message_tool"`
- `routing.queue``messages.queue`
- `routing.bindings``bindings` على المستوى الأعلى
- `routing.bindings``bindings` في المستوى الأعلى
- `routing.agents`/`routing.defaultAgentId` → `agents.list` + `agents.list[].default`
- `talk.voiceId`/`talk.voiceAliases`/`talk.modelId`/`talk.outputFormat`/`talk.apiKey` القديمة → `talk.provider` + `talk.providers.<provider>`
- `routing.agentToAgent``tools.agentToAgent`
- `routing.transcribeAudio``tools.media.audio.models`
- `messages.tts.<provider>` (`openai`/`elevenlabs`/`microsoft`/`edge`) → `messages.tts.providers.<provider>`
- `messages.tts.provider: "edge"` و `messages.tts.providers.edge``messages.tts.provider: "microsoft"` و `messages.tts.providers.microsoft`
- `messages.tts.provider: "edge"` و`messages.tts.providers.edge` → `messages.tts.provider: "microsoft"` و`messages.tts.providers.microsoft`
- `channels.discord.voice.tts.<provider>` (`openai`/`elevenlabs`/`microsoft`/`edge`) → `channels.discord.voice.tts.providers.<provider>`
- `channels.discord.accounts.<id>.voice.tts.<provider>` (`openai`/`elevenlabs`/`microsoft`/`edge`) → `channels.discord.accounts.<id>.voice.tts.providers.<provider>`
- `plugins.entries.voice-call.config.tts.<provider>` (`openai`/`elevenlabs`/`microsoft`/`edge`) → `plugins.entries.voice-call.config.tts.providers.<provider>`
- `plugins.entries.voice-call.config.tts.provider: "edge"` و `plugins.entries.voice-call.config.tts.providers.edge``provider: "microsoft"` و `providers.microsoft`
- `plugins.entries.voice-call.config.tts.provider: "edge"` و`plugins.entries.voice-call.config.tts.providers.edge` → `provider: "microsoft"` و`providers.microsoft`
- `plugins.entries.voice-call.config.provider: "log"``"mock"`
- `plugins.entries.voice-call.config.twilio.from``plugins.entries.voice-call.config.fromNumber`
- `plugins.entries.voice-call.config.streaming.sttProvider``plugins.entries.voice-call.config.streaming.provider`
- `plugins.entries.voice-call.config.streaming.openaiApiKey|sttModel|silenceDurationMs|vadThreshold``plugins.entries.voice-call.config.streaming.providers.openai.*`
- `bindings[].match.accountID``bindings[].match.accountId`
- بالنسبة إلى القنوات التي تحتوي على `accounts` مسماة ولكن لا تزال لديها قيم قناة لحساب واحد على المستوى الأعلى، انقل تلك القيم ذات النطاق الحسابي إلى الحساب المرقّى المختار لتلك القناة (`accounts.default` لمعظم القنوات؛ يمكن لـ Matrix الاحتفاظ بهدف مسمى/افتراضي مطابق موجود)
- بالنسبة إلى القنوات التي تحتوي على `accounts` مسماة لكن ما زالت لديها قيم قناة منفردة عالقة في المستوى الأعلى، انقل تلك القيم ذات النطاق الحسابي إلى الحساب المرَقّى المختار لتلك القناة (`accounts.default` لمعظم القنوات؛ يمكن لـ Matrix الاحتفاظ بهدف مسمى/افتراضي مطابق موجود)
- `identity``agents.list[].identity`
- `agent.*``agents.defaults` + `tools.*` (tools/elevated/exec/sandbox/subagents)
- `agent.model`/`allowedModels`/`modelAliases`/`modelFallbacks`/`imageModelFallbacks` → `agents.defaults.models` + `agents.defaults.model.primary/fallbacks` + `agents.defaults.imageModel.primary/fallbacks`
- أزِل `agents.defaults.llm`؛ استخدم `models.providers.<id>.timeoutSeconds` لمهل انتظار الموفر/النموذج البطيئة
- أزِل `agents.defaults.llm`؛ استخدم `models.providers.<id>.timeoutSeconds` لمهل انتهاء موفر/نموذج بطيء
- `browser.ssrfPolicy.allowPrivateNetwork``browser.ssrfPolicy.dangerouslyAllowPrivateNetwork`
- `browser.profiles.*.driver: "extension"``"existing-session"`
- أزِل `browser.relayBindHost` (إعداد مرحّل الإضافة القديم)
- `models.providers.*.api: "openai"` القديم → `"openai-completions"` (يتخطى بدء تشغيل Gateway أيضًا الموفرين الذين تم تعيين `api` لديهم إلى قيمة تعداد مستقبلية أو غير معروفة بدلًا من الفشل المغلق)
- أزِل `browser.relayBindHost` (إعداد ترحيل إضافة قديم)
- `models.providers.*.api: "openai"` القديمة`"openai-completions"` (يتخطى بدء تشغيل Gateway أيضًا الموفرين الذين عُيّنت قيمة `api` لديهم إلى قيمة تعداد مستقبلية أو غير معروفة بدلًا من الفشل المغلق)
تتضمن تحذيرات Doctor أيضًا إرشادات الحساب الافتراضي للقنوات متعددة الحسابات:
تشمل تحذيرات doctor أيضًا إرشادات الحساب الافتراضي للقنوات متعددة الحسابات:
- إذا تم تكوين إدخالين أو أكثر من `channels.<channel>.accounts` دون `channels.<channel>.defaultAccount` أو `accounts.default`، يحذّر Doctor من أن توجيه الرجوع قد يختار حسابًا غير متوقع.
- إذا تم تعيين `channels.<channel>.defaultAccount` إلى معرّف حساب غير معروف، يحذّر Doctor ويسرد معرّفات الحسابات المكوّنة.
- إذا ضُبط إدخالان أو أكثر من `channels.<channel>.accounts` من دون `channels.<channel>.defaultAccount` أو `accounts.default`، يحذّر doctor من أن التوجيه الاحتياطي يمكن أن يختار حسابًا غير متوقع.
- إذا عُيّن `channels.<channel>.defaultAccount` إلى معرّف حساب غير معروف، يحذّر doctor ويسرد معرّفات الحسابات المكوَّنة.
</Accordion>
<Accordion title="2b. تجاوزات موفر OpenCode">
إذا أضفت `models.providers.opencode` أو `opencode-zen` أو `opencode-go` يدويًا، فسيؤدي ذلك إلى تجاوز كتالوج OpenCode المدمج من `@mariozechner/pi-ai`. قد يفرض ذلك النماذج على API خاطئ أو يصفّر التكاليف. يحذّر Doctor حتى تتمكن من إزالة التجاوز واستعادة توجيه API والتكاليف لكل نموذج.
إذا أضفت `models.providers.opencode` أو `opencode-zen` أو `opencode-go` يدويًا، فإنه يتجاوز كتالوج OpenCode المضمَّن من `@mariozechner/pi-ai`. يمكن أن يجبر ذلك النماذج على API غير صحيح أو يصفّر التكاليف. يحذّر doctor كي تتمكن من إزالة التجاوز واستعادة توجيه API والتكاليف لكل نموذج.
</Accordion>
<Accordion title="2c. ترحيل المتصفح وجاهزية Chrome MCP">
إذا كان تكوين المتصفح لديك لا يزال يشير إلى مسار إضافة Chrome المحذوفة، فإن Doctor يطبّعه إلى نموذج إرفاق Chrome MCP المحلي للمضيف الحالي:
إذا كان إعداد المتصفح لديك ما زال يشير إلى مسار إضافة Chrome المُزالة، يطبّعه doctor إلى نموذج إرفاق Chrome MCP المحلي للمضيف الحالي:
- يتحول `browser.profiles.*.driver: "extension"` إلى `"existing-session"`
- يصبح `browser.profiles.*.driver: "extension"` هو `"existing-session"`
- تتم إزالة `browser.relayBindHost`
يدقق Doctor أيضًا مسار Chrome MCP المحلي للمضيف عند استخدام `defaultProfile: "user"` أو ملف تعريف `existing-session` مكوّن:
يراجع doctor أيضًا مسار Chrome MCP المحلي للمضيف عند استخدام `defaultProfile: "user"` أو ملف تعريف `existing-session` مكوَّن:
- يتحقق مما إذا كان Google Chrome مثبتًا على المضيف نفسه لملفات تعريف الاتصال التلقائي الافتراضية
- يتحقق من إصدار Chrome المكتشف ويحذّر عندما يكون أقل من Chrome 144
- يذكّرك بتمكين التصحيح عن بُعد في صفحة فحص المتصفح (مثل `chrome://inspect/#remote-debugging` أو `brave://inspect/#remote-debugging` أو `edge://inspect/#remote-debugging`)
- يذكّرك بتمكين تصحيح الأخطاء عن بُعد في صفحة فحص المتصفح (مثل `chrome://inspect/#remote-debugging` أو `brave://inspect/#remote-debugging` أو `edge://inspect/#remote-debugging`)
لا يستطيع Doctor تمكين الإعداد من جهة Chrome نيابة عنك. لا يزال Chrome MCP المحلي للمضيف يتطلب:
لا يستطيع doctor تمكين الإعداد الخاص بجانب Chrome نيابةً عنك. لا يزال Chrome MCP المحلي للمضيف يتطلب:
- متصفحًا مبنيًا على Chromium بإصدار 144+ على مضيف gateway/node
- تشغيل المتصفح محليًا
- تمكين التصحيح عن بُعد في ذلك المتصفح
- الموافقة على مطالبة موافقة الإرفاق الأولى في المتصفح
- تمكين تصحيح الأخطاء عن بُعد في ذلك المتصفح
- الموافقة على مطالبة إذن الإرفاق الأولى في المتصفح
الجاهزية هنا تتعلق فقط بالمتطلبات الأساسية للإرفاق المحلي. يحتفظ Existing-session بحدود مسار Chrome MCP الحالية؛ ولا تزال المسارات المتقدمة مثل `responsebody` وتصدير PDF واعتراض التنزيلات والإجراءات الدفعية تتطلب متصفحًا مدارًا أو ملف تعريف CDP خامًا.
تتعلق الجاهزية هنا فقط بمتطلبات الإرفاق المحلي. يحافظ `existing-session` على حدود مسار Chrome MCP الحالية؛ وما زالت المسارات المتقدمة مثل `responsebody` وتصدير PDF واعتراض التنزيل والإجراءات الدفعية تتطلب متصفحًا مُدارًا أو ملف تعريف CDP خامًا.
لا ينطبق هذا الفحص **على** Docker أو sandbox أو remote-browser أو تدفقات headless الأخرى. تواصل تلك التدفقات استخدام CDP الخام.
لا ينطبق هذا الفحص على Docker أو sandbox أو remote-browser أو غيرها من التدفقات بلا واجهة. تواصل هذه التدفقات استخدام CDP الخام.
</Accordion>
<Accordion title="2d. متطلبات OAuth TLS الأساسية">
عند تكوين ملف تعريف OpenAI Codex OAuth، يفحص Doctor نقطة نهاية تفويض OpenAI للتحقق من أن حزمة Node/OpenSSL TLS المحلية يمكنها التحقق من سلسلة الشهادات. إذا فشل الفحص بخطأ شهادة (مثل `UNABLE_TO_GET_ISSUER_CERT_LOCALLY` أو شهادة منتهية الصلاحية أو شهادة موقعة ذاتيًا)، يطبع Doctor إرشادات إصلاح خاصة بالمنصة. على macOS مع Node من Homebrew، يكون الإصلاح عادةً `brew postinstall ca-certificates`. مع `--deep`، يعمل الفحص حتى إذا كان Gateway سليمًا.
<Accordion title="2d. المتطلبات المسبقة لـ OAuth TLS">
عند تهيئة ملف تعريف OpenAI Codex OAuth، يفحص doctor نقطة نهاية تفويض OpenAI للتحقق من أن مكدس Node/OpenSSL TLS المحلي يمكنه التحقق من سلسلة الشهادات. إذا فشل الفحص بخطأ شهادة (مثل `UNABLE_TO_GET_ISSUER_CERT_LOCALLY` أو شهادة منتهية الصلاحية أو شهادة موقعة ذاتيًا)، يطبع doctor إرشادات إصلاح خاصة بالمنصة. على macOS مع Homebrew Node، يكون الإصلاح عادةً `brew postinstall ca-certificates`. مع `--deep`، يعمل الفحص حتى إذا كان gateway سليمًا.
</Accordion>
<Accordion title="2e. تجاوزات موفر Codex OAuth">
إذا كنت قد أضفت سابقًا إعدادات نقل OpenAI قديمة ضمن `models.providers.openai-codex`، فقد تحجب مسار موفر Codex OAuth المدمج الذي تستخدمه الإصدارات الأحدث تلقائيًا. يحذّر Doctor عندما يرى إعدادات النقل القديمة تلك إلى جانب Codex OAuth حتى تتمكن من إزالة تجاوز النقل القديم أو إعادة كتابته واستعادة سلوك التوجيه/الرجوع المدمج. لا تزال الوكلاء المخصصة وتجاوزات الرؤوس فقط مدعومة ولا تؤدي إلى هذا التحذير.
إذا كنت قد أضفت سابقًا إعدادات نقل OpenAI قديمة تحت `models.providers.openai-codex`، فيمكنها حجب مسار موفر Codex OAuth المضمَّن الذي تستخدمه الإصدارات الأحدث تلقائيًا. يحذّر doctor عندما يرى تلك إعدادات النقل القديمة إلى جانب Codex OAuth كي تتمكن من إزالة تجاوز النقل المتقادم أو إعادة كتابته واستعادة سلوك التوجيه/الاحتياطي المضمَّن. ما زالت الوكلاء المخصصة والتجاوزات المقتصرة على الرؤوس مدعومة ولا تؤدي إلى هذا التحذير.
</Accordion>
<Accordion title="2f. تحذيرات مسار Plugin الخاص بـ Codex">
عند تمكين Plugin المجمّع الخاص بـ Codex، يتحقق Doctor أيضًا مما إذا كانت مراجع النموذج الأساسية `openai-codex/*` لا تزال تُحل عبر مشغّل PI الافتراضي. هذا الدمج صالح عندما تريد مصادقة Codex OAuth/الاشتراك عبر PI، لكن من السهل الخلط بينه وبين حزام خادم تطبيق Codex الأصلي. يحذّر Doctor ويشير إلى الشكل الصريح لخادم التطبيق: `openai/*` بالإضافة إلى `agentRuntime.id: "codex"` أو `OPENCLAW_AGENT_RUNTIME=codex`.
<Accordion title="2f. تحذيرات مسار Codex Plugin">
عند تمكين Codex Plugin المضمَّن، يتحقق doctor أيضًا مما إذا كانت مراجع النموذج الأساسي `openai-codex/*` ما زالت تُحل عبر مشغّل PI الافتراضي. هذه التركيبة صالحة عندما تريد مصادقة Codex OAuth/الاشتراك عبر PI، لكنها قد تُخلط بسهولة مع مشغّل خادم تطبيق Codex الأصلي. يحذّر doctor ويشير إلى صيغة خادم التطبيق الصريحة: `openai/*` إضافة إلى `agentRuntime.id: "codex"` أو `OPENCLAW_AGENT_RUNTIME=codex`.
لا يصلح Doctor هذا تلقائيًا لأن كلا المسارين صالحان:
لا يصلح doctor هذا تلقائيًا لأن كلا المسارين صالحان:
- `openai-codex/*` + PI يعني "استخدم مصادقة Codex OAuth/الاشتراك عبر مشغّل OpenClaw العادي."
- `openai/*` + `agentRuntime.id: "codex"` يعني "شغّل الدور المدمج عبر خادم تطبيق Codex الأصلي."
- `/codex ...` يعني "تحكم في محادثة Codex أصلية من الدردشة أو اربطها."
- `/acp ...` أو `runtime: "acp"` يعني "استخدم محوّل ACP/acpx الخارجي."
- `openai-codex/*` + PI تعني "استخدم مصادقة Codex OAuth/الاشتراك عبر مشغّل OpenClaw العادي."
- `openai/*` + `agentRuntime.id: "codex"` تعني "شغّل الدورة المضمَّنة عبر خادم تطبيق Codex الأصلي."
- `/codex ...` تعني "تحكّم في محادثة Codex أصلية أو اربطها من الدردشة."
- `/acp ...` أو `runtime: "acp"` تعني "استخدم محوّل ACP/acpx الخارجي."
إذا ظهر التحذير، فاختر المسار الذي قصدته وعدّل التكوين يدويًا. أبقِ التحذير كما هو عندما يكون PI Codex OAuth مقصودًا.
إذا ظهر التحذير، اختر المسار الذي قصدته وحرر الإعداد يدويًا. أبقِ التحذير كما هو عندما يكون PI Codex OAuth مقصودًا.
</Accordion>
<Accordion title="3. عمليات ترحيل الحالة القديمة (تخطيط القرص)">
يمكن لـ Doctor ترحيل التخطيطات القديمة على القرص إلى البنية الحالية:
<Accordion title="3. ترحيلات الحالة القديمة (تخطيط القرص)">
يستطيع doctor ترحيل التخطيطات الأقدم على القرص إلى البنية الحالية:
- مخزن الجلسات + النصوص:
- من `~/.openclaw/sessions/` إلى `~/.openclaw/agents/<agentId>/sessions/`
@ -286,216 +286,216 @@ openclaw memory rem-backfill --path ./memory --stage-short-term
- من `~/.openclaw/credentials/*.json` القديمة (باستثناء `oauth.json`)
- إلى `~/.openclaw/credentials/whatsapp/<accountId>/...` (معرّف الحساب الافتراضي: `default`)
هذه الترحيـلات تبذل أفضل جهد وهي متكررة بأمان؛ سيصدر Doctor تحذيرات عندما يترك أي مجلدات قديمة كنسخ احتياطية. يقوم Gateway/CLI أيضًا بترحيل الجلسات القديمة + دليل الوكيل تلقائيًا عند بدء التشغيل حتى تصل السجل/المصادقة/النماذج إلى المسار الخاص بكل وكيل دون تشغيل Doctor يدويًا. يتم ترحيل مصادقة WhatsApp عمدًا فقط عبر `openclaw doctor`. تقارن تسوية موفر/خريطة موفري Talk الآن بالمساواة البنيوية، لذلك لم تعد الفروقات الناتجة عن ترتيب المفاتيح فقط تؤدي إلى تغييرات `doctor --fix` متكررة بلا أثر.
هذه الترحيلات تُبذل على أفضل وجه وهي تكرارية آمنة؛ سيصدر doctor تحذيرات عندما يترك أي مجلدات قديمة وراءه كنسخ احتياطية. يقوم Gateway/CLI أيضًا بترحيل مخزن الجلسات ودليل الوكيل القديمين تلقائيًا عند بدء التشغيل لكي يستقر السجل/المصادقة/النماذج في المسار الخاص بكل وكيل من دون تشغيل doctor يدويًا. تُرحَّل مصادقة WhatsApp عمدًا عبر `openclaw doctor` فقط. تقارن تسوية موفر الكلام/خريطة الموفر الآن بالمساواة البنيوية، لذلك لم تعد الفروق الناتجة عن ترتيب المفاتيح فقط تؤدي إلى تغييرات `doctor --fix` متكررة بلا أثر.
</Accordion>
<Accordion title="3a. عمليات ترحيل بيانات تعريف Plugin القديمة">
يفحص Doctor جميع بيانات تعريف Plugins المثبتة بحثًا عن مفاتيح قدرات مهملة على المستوى الأعلى (`speechProviders`، `realtimeTranscriptionProviders`، `realtimeVoiceProviders`، `mediaUnderstandingProviders`، `imageGenerationProviders`، `videoGenerationProviders`، `webFetchProviders`، `webSearchProviders`). عند العثور عليها، يعرض نقلها إلى كائن `contracts` وإعادة كتابة ملف بيانات التعريف في مكانه. هذا الترحيل متكرر بأمان؛ إذا كان مفتاح `contracts` يحتوي بالفعل على القيم نفسها، تتم إزالة المفتاح القديم دون تكرار البيانات.
<Accordion title="3a. ترحيلات بيانات Plugin القديمة">
يفحص doctor كل بيانات Plugins المثبتة بحثًا عن مفاتيح قدرات قديمة في المستوى الأعلى (`speechProviders` و`realtimeTranscriptionProviders` و`realtimeVoiceProviders` و`mediaUnderstandingProviders` و`imageGenerationProviders` و`videoGenerationProviders` و`webFetchProviders` و`webSearchProviders`). عند العثور عليها، يعرض نقلها إلى كائن `contracts` وإعادة كتابة ملف البيان في مكانه. هذا الترحيل تكراري آمن؛ إذا كان مفتاح `contracts` يحتوي بالفعل على القيم نفسها، يُزال المفتاح القديم من دون تكرار البيانات.
</Accordion>
<Accordion title="3b. عمليات ترحيل مخزن Cron القديم">
يتحقق Doctor أيضًا من مخزن مهام cron (`~/.openclaw/cron/jobs.json` افتراضيًا، أو `cron.store` عند تجاوزه) بحثًا عن أشكال المهام القديمة التي لا يزال المجدول يقبلها للتوافق.
<Accordion title="3b. ترحيلات مخزن Cron القديمة">
يتحقق doctor أيضًا من مخزن مهام cron (`~/.openclaw/cron/jobs.json` افتراضيًا، أو `cron.store` عند تجاوزه) بحثًا عن أشكال مهام قديمة ما زال المجدول يقبلها للتوافق.
تشمل عمليات تنظيف cron الحالية:
- `jobId``id`
- `schedule.cron``schedule.expr`
- حقول الحمولة على المستوى الأعلى (`message`، `model`، `thinking`، ...) → `payload`
- حقول التسليم على المستوى الأعلى (`deliver`، `channel`، `to`، `provider`، ...) → `delivery`
- أسماء تسليم `provider` البديلة في الحمولة → `delivery.channel` صريح
- مهام رجوع Webhook القديمة البسيطة `notify: true``delivery.mode="webhook"` صريح مع `delivery.to=cron.webhook`
- حقول الحمولة في المستوى الأعلى (`message`، `model`، `thinking`، ...) → `payload`
- حقول التسليم في المستوى الأعلى (`deliver`، `channel`، `to`، `provider`، ...) → `delivery`
- الأسماء البديلة لتسليم `provider` في الحمولة → `delivery.channel` صريح
- مهام Webhook الاحتياطية القديمة البسيطة `notify: true``delivery.mode="webhook"` صريح مع `delivery.to=cron.webhook`
يرحّل Doctor تلقائيًا مهام `notify: true` فقط عندما يستطيع فعل ذلك دون تغيير السلوك. إذا جمعت مهمة بين رجوع الإشعار القديم ووضع تسليم موجود غير Webhook، يحذّر Doctor ويترك تلك المهمة للمراجعة اليدوية.
يرحّل doctor تلقائيًا مهام `notify: true` فقط عندما يستطيع ذلك من دون تغيير السلوك. إذا جمعت مهمة بين احتياطي إشعار قديم ووضع تسليم غير Webhook موجود، يحذّر doctor ويترك تلك المهمة للمراجعة اليدوية.
على Linux، يحذّر Doctor أيضًا عندما لا يزال crontab الخاص بالمستخدم يستدعي `~/.openclaw/bin/ensure-whatsapp.sh` القديم. هذا السكربت المحلي للمضيف لا يصونه OpenClaw الحالي ويمكنه كتابة رسائل `Gateway inactive` زائفة إلى `~/.openclaw/logs/whatsapp-health.log` عندما يتعذر على cron الوصول إلى ناقل مستخدم systemd. أزِل إدخال crontab القديم باستخدام `crontab -e`؛ استخدم `openclaw channels status --probe` و `openclaw doctor` و `openclaw gateway status` لفحوصات السلامة الحالية.
على Linux، يحذّر doctor أيضًا عندما لا يزال crontab الخاص بالمستخدم يستدعي `~/.openclaw/bin/ensure-whatsapp.sh` القديم. هذا السكربت المحلي للمضيف غير مُصان بواسطة OpenClaw الحالي ويمكنه كتابة رسائل `Gateway inactive` خاطئة إلى `~/.openclaw/logs/whatsapp-health.log` عندما لا يستطيع cron الوصول إلى ناقل مستخدم systemd. أزِل إدخال crontab المتقادم باستخدام `crontab -e`؛ واستخدم `openclaw channels status --probe` و`openclaw doctor` و`openclaw gateway status` لفحوصات السلامة الحالية.
</Accordion>
<Accordion title="3c. تنظيف أقفال الجلسات">
تفحص أداة الفحص كل دليل جلسة وكيل بحثًا عن ملفات أقفال الكتابة المتقادمة — وهي ملفات تُترك عندما تنتهي جلسة بشكل غير طبيعي. لكل ملف قفل يُعثر عليه، تعرض: المسار، وPID، وما إذا كان PID لا يزال حيًا، وعمر القفل، وما إذا كان يُعد متقادمًا (PID ميت أو أقدم من 30 دقيقة). في وضع `--fix` / `--repair` تزيل ملفات الأقفال المتقادمة تلقائيًا؛ وإلا فتطبع ملاحظة وتطلب منك إعادة التشغيل باستخدام `--fix`.
<Accordion title="3ج. تنظيف قفل الجلسة">
يفحص Doctor كل دليل جلسة وكيل بحثًا عن ملفات قفل الكتابة القديمة — وهي ملفات تُترك عند خروج جلسة بشكل غير طبيعي. لكل ملف قفل يعثر عليه، يبلّغ عن: المسار، وPID، وما إذا كان PID لا يزال حيًا، وعمر القفل، وما إذا كان يُعد قديمًا (PID ميت أو أقدم من 30 دقيقة). في وضع `--fix` / `--repair` يزيل ملفات القفل القديمة تلقائيًا؛ وإلا فيطبع ملاحظة ويوجهك إلى إعادة التشغيل باستخدام `--fix`.
</Accordion>
<Accordion title="3d. إصلاح فرع نص جلسة المحادثة">
تفحص أداة الفحص ملفات JSONL الخاصة بجلسات الوكلاء بحثًا عن شكل الفرع المكرر الذي أنشأه خلل إعادة كتابة نص المحادثة في الموجّه بتاريخ 2026.4.24: دور مستخدم مهجور يحتوي على سياق تشغيل داخلي من OpenClaw إضافة إلى فرع شقيق نشط يحتوي على موجّه المستخدم المرئي نفسه. في وضع `--fix` / `--repair`، تنشئ أداة الفحص نسخة احتياطية من كل ملف متأثر بجوار الأصل وتعيد كتابة نص المحادثة إلى الفرع النشط حتى لا يعود سجل Gateway وقراء الذاكرة يرون أدوارًا مكررة.
<Accordion title="3د. إصلاح فرع نص جلسة المحادثة">
يفحص Doctor ملفات JSONL الخاصة بجلسات الوكلاء بحثًا عن بنية الفرع المكررة التي أنشأها خطأ إعادة كتابة نص المحادثة في 2026.4.24: دور مستخدم مهجور يحتوي على سياق تشغيل داخلي من OpenClaw مع فرع شقيق نشط يحتوي على مطالبة المستخدم المرئية نفسها. في وضع `--fix` / `--repair`، ينشئ Doctor نسخة احتياطية من كل ملف متأثر بجوار الأصل ويعيد كتابة نص المحادثة إلى الفرع النشط بحيث لا يرى سجل Gateway وقارئو الذاكرة الأدوار المكررة بعد الآن.
</Accordion>
<Accordion title="4. فحوصات سلامة الحالة (استمرارية الجلسة والتوجيه والسلامة)">
<Accordion title="4. فحوص سلامة الحالة (استمرار الجلسات، والتوجيه، والسلامة)">
دليل الحالة هو جذع الدماغ التشغيلي. إذا اختفى، فستفقد الجلسات وبيانات الاعتماد والسجلات والإعدادات (ما لم تكن لديك نسخ احتياطية في مكان آخر).
تتحقق أداة الفحص مما يلي:
يتحقق Doctor مما يلي:
- **دليل الحالة مفقود**: تحذر من فقدان كارثي للحالة، وتطلب إعادة إنشاء الدليل، وتذكّرك بأنها لا تستطيع استرداد البيانات المفقودة.
- **أذونات دليل الحالة**: تتحقق من قابلية الكتابة؛ وتعرض إصلاح الأذونات (وتصدر تلميح `chown` عند اكتشاف عدم تطابق المالك/المجموعة).
- **دليل حالة متزامن سحابيًا على macOS**: تحذر عندما تُحل الحالة تحت iCloud Drive (`~/Library/Mobile Documents/com~apple~CloudDocs/...`) أو `~/Library/CloudStorage/...` لأن المسارات المدعومة بالمزامنة قد تسبب إدخال/إخراج أبطأ وسباقات قفل/مزامنة.
- **دليل حالة Linux على SD أو eMMC**: تحذر عندما تُحل الحالة إلى مصدر تركيب `mmcblk*`، لأن الإدخال/الإخراج العشوائي المدعوم ببطاقات SD أو eMMC قد يكون أبطأ ويتآكل أسرع تحت عمليات كتابة الجلسات وبيانات الاعتماد.
- **أدلة الجلسات مفقودة**: يلزم وجود `sessions/` ودليل مخزن الجلسات لاستمرار السجل وتجنب أعطال `ENOENT`.
- **عدم تطابق نص المحادثة**: تحذر عندما تفتقد إدخالات جلسات حديثة ملفات نص المحادثة.
- **الجلسة الرئيسية "JSONL من سطر واحد"**: تضع علامة عندما يحتوي نص المحادثة الرئيسي على سطر واحد فقط (السجل لا يتراكم).
- **أدلة حالة متعددة**: تحذر عندما توجد عدة مجلدات `~/.openclaw` عبر أدلة المنزل أو عندما يشير `OPENCLAW_STATE_DIR` إلى مكان آخر (يمكن أن ينقسم السجل بين التثبيتات).
- **تذكير الوضع البعيد**: إذا كان `gateway.mode=remote`، تذكّرك أداة الفحص بتشغيلها على المضيف البعيد (فالحالة موجودة هناك).
- **أذونات ملف الإعدادات**: تحذر إذا كان `~/.openclaw/openclaw.json` قابلًا للقراءة من المجموعة/العالم وتعرض تشديده إلى `600`.
- **دليل الحالة مفقود**: يحذر من فقدان كارثي للحالة، ويطلب إعادة إنشاء الدليل، ويذكّرك بأنه لا يستطيع استرداد البيانات المفقودة.
- **أذونات دليل الحالة**: يتحقق من قابلية الكتابة؛ ويعرض إصلاح الأذونات (ويصدر تلميح `chown` عند اكتشاف عدم تطابق المالك/المجموعة).
- **دليل حالة متزامن سحابيًا على macOS**: يحذر عندما تُحل الحالة ضمن iCloud Drive (`~/Library/Mobile Documents/com~apple~CloudDocs/...`) أو `~/Library/CloudStorage/...` لأن المسارات المدعومة بالمزامنة قد تسبب إدخال/إخراج أبطأ وتسابقات قفل/مزامنة.
- **دليل حالة Linux على SD أو eMMC**: يحذر عندما تُحل الحالة إلى مصدر تركيب `mmcblk*`، لأن الإدخال/الإخراج العشوائي المدعوم بـ SD أو eMMC قد يكون أبطأ ويتآكل أسرع عند كتابة الجلسات وبيانات الاعتماد.
- **أدلة الجلسات مفقودة**: يلزم وجود `sessions/` ودليل مخزن الجلسات للاحتفاظ بالسجل وتجنب أعطال `ENOENT`.
- **عدم تطابق نص المحادثة**: يحذر عندما تحتوي إدخالات الجلسات الحديثة على ملفات نص محادثة مفقودة.
- **جلسة رئيسية "JSONL بسطر واحد"**: يضع علامة عندما يحتوي نص المحادثة الرئيسي على سطر واحد فقط (أي أن السجل لا يتراكم).
- **أدلة حالة متعددة**: يحذر عندما توجد عدة مجلدات `~/.openclaw` عبر أدلة المنزل أو عندما يشير `OPENCLAW_STATE_DIR` إلى مكان آخر (قد ينقسم السجل بين التثبيتات).
- **تذكير الوضع البعيد**: إذا كان `gateway.mode=remote`، يذكّرك Doctor بتشغيله على المضيف البعيد (الحالة موجودة هناك).
- **أذونات ملف الإعدادات**: يحذر إذا كان `~/.openclaw/openclaw.json` قابلًا للقراءة من المجموعة/العالم ويعرض تضييقه إلى `600`.
</Accordion>
<Accordion title="5. صحة مصادقة النموذج (انتهاء صلاحية OAuth)">
تفحص أداة الفحص ملفات تعريف OAuth في مخزن المصادقة، وتحذر عندما تكون الرموز على وشك الانتهاء أو منتهية الصلاحية، ويمكنها تحديثها عندما يكون ذلك آمنًا. إذا كان ملف تعريف OAuth/الرمز الخاص بـ Anthropic متقادمًا، فإنها تقترح مفتاح Anthropic API أو مسار رمز إعداد Anthropic. تظهر مطالبات التحديث فقط عند التشغيل تفاعليًا (TTY)؛ ويتجاوز `--non-interactive` محاولات التحديث.
يفحص Doctor ملفات تعريف OAuth في مخزن المصادقة، ويحذر عند اقتراب انتهاء صلاحية الرموز أو انتهائها، ويمكنه تحديثها عندما يكون ذلك آمنًا. إذا كان ملف تعريف OAuth/الرمز الخاص بـ Anthropic قديمًا، فإنه يقترح مفتاح Anthropic API أو مسار رمز إعداد Anthropic. تظهر مطالبات التحديث فقط عند التشغيل تفاعليًا (TTY)؛ ويتخطى `--non-interactive` محاولات التحديث.
عندما يفشل تحديث OAuth بشكل دائم (مثلًا `refresh_token_reused` أو `invalid_grant` أو عندما يطلب منك مزود تسجيل الدخول مرة أخرى)، تفيد أداة الفحص بأن إعادة المصادقة مطلوبة وتطبع أمر `openclaw models auth login --provider ...` الدقيق لتشغيله.
عندما يفشل تحديث OAuth نهائيًا (على سبيل المثال `refresh_token_reused` أو `invalid_grant` أو عندما يطلب منك موفر تسجيل الدخول مرة أخرى)، يبلّغ Doctor بأن إعادة المصادقة مطلوبة ويطبع أمر `openclaw models auth login --provider ...` الدقيق لتشغيله.
تعرض أداة الفحص أيضًا ملفات تعريف المصادقة غير القابلة للاستخدام مؤقتًا بسبب:
يبلّغ Doctor أيضًا عن ملفات تعريف المصادقة غير القابلة للاستخدام مؤقتًا بسبب:
- فترات تهدئة قصيرة (حدود المعدل/انتهاء المهلة/إخفاقات المصادقة)
- تعطيلات أطول (إخفاقات الفوترة/الرصيد)
- فترات تهدئة قصيرة (حدود المعدل/انتهاءات المهلة/فشل المصادقة)
- تعطيلات أطول (فشل الفوترة/الرصيد)
</Accordion>
<Accordion title="6. التحقق من نموذج الخطافات">
إذا كان `hooks.gmail.model` مضبوطًا، تتحقق أداة الفحص من مرجع النموذج مقابل الكتالوج وقائمة السماح وتحذر عندما لا يمكن حله أو يكون غير مسموح به.
إذا تم تعيين `hooks.gmail.model`، يتحقق Doctor من مرجع النموذج مقابل الفهرس وقائمة السماح ويحذر عندما لا يمكن حله أو يكون غير مسموح به.
</Accordion>
<Accordion title="7. إصلاح صورة Sandbox">
عند تمكين العزل، تتحقق أداة الفحص من صور Docker وتعرض بناءها أو التبديل إلى الأسماء القديمة إذا كانت الصورة الحالية مفقودة.
<Accordion title="7. إصلاح صورة sandbox">
عندما تكون sandboxing مفعّلة، يتحقق Doctor من صور Docker ويعرض بناءها أو التبديل إلى الأسماء القديمة إذا كانت الصورة الحالية مفقودة.
</Accordion>
<Accordion title="7b. تنظيف تثبيت Plugin">
تزيل أداة الفحص حالة تجهيز تبعيات Plugin القديمة التي أنشأها OpenClaw في وضع `openclaw doctor --fix` / `openclaw doctor --repair`. يشمل ذلك جذور التبعيات المولدة المتقادمة، وأدلة مرحلة التثبيت القديمة، والمخلفات المحلية للحزمة من كود إصلاح تبعيات Plugin المدمجة سابقًا.
<Accordion title="7ب. تنظيف تثبيت Plugin">
يزيل Doctor حالة تهيئة تبعيات Plugin القديمة التي أنشأها OpenClaw في وضع `openclaw doctor --fix` / `openclaw doctor --repair`. يغطي ذلك جذور التبعيات المولدة القديمة، وأدلة مراحل التثبيت القديمة، ومخلفات الحزم المحلية من كود إصلاح تبعيات Plugin المضمنة السابق، والنسخ المُدارة من npm المعزولة أو المستردة من Plugins `@openclaw/*` المضمنة التي يمكن أن تحجب البيان المضمن الحالي.
يمكن لأداة الفحص أيضًا إعادة تثبيت Plugins القابلة للتنزيل والمكوّنة عندما تشير الإعدادات إليها لكن سجل Plugin المحلي لا يستطيع العثور عليها. بالنسبة إلى تحويل Plugin المدمجة إلى خارجية في 2026.5.2، تثبت أداة الفحص تلقائيًا Plugins القابلة للتنزيل التي تستخدمها الإعدادات الحالية بالفعل، ثم تعتمد على `meta.lastTouchedVersion` لتشغيل تمريرة ذلك الإصدار مرة واحدة فقط. لا يشغّل بدء تشغيل Gateway وإعادة تحميل الإعدادات مديري الحزم؛ وتظل عمليات تثبيت Plugin عملًا صريحًا من خلال الفحص/التثبيت/التحديث.
يمكن لـ Doctor أيضًا إعادة تثبيت Plugins القابلة للتنزيل والمضبوطة عندما تشير الإعدادات إليها لكن سجل Plugins المحلي لا يستطيع العثور عليها. بالنسبة إلى تحويل Plugins المضمنة إلى خارجية في 2026.5.2، يثبت Doctor تلقائيًا Plugins القابلة للتنزيل التي تستخدمها الإعدادات الحالية بالفعل، ثم يعتمد على `meta.lastTouchedVersion` لتشغيل تمريرة الإصدار هذه مرة واحدة فقط. لا يشغّل بدء Gateway وإعادة تحميل الإعدادات مديري الحزم؛ تبقى تثبيتات Plugins عملًا صريحًا عبر Doctor/التثبيت/التحديث.
</Accordion>
<Accordion title="8. ترحيلات خدمة Gateway وتلميحات التنظيف">
تكتشف أداة الفحص خدمات Gateway القديمة (launchd/systemd/schtasks) وتعرض إزالتها وتثبيت خدمة OpenClaw باستخدام منفذ Gateway الحالي. يمكنها أيضًا البحث عن خدمات إضافية شبيهة بـ Gateway وطباعة تلميحات تنظيف. تُعد خدمات OpenClaw Gateway المسماة بملف التعريف خدمات من الدرجة الأولى ولا تُعلّم على أنها "إضافية".
يكتشف Doctor خدمات Gateway القديمة (launchd/systemd/schtasks) ويعرض إزالتها وتثبيت خدمة OpenClaw باستخدام منفذ Gateway الحالي. ويمكنه أيضًا البحث عن خدمات إضافية شبيهة بـ Gateway وطباعة تلميحات تنظيف. تُعد خدمات Gateway الخاصة بـ OpenClaw والمسماة بالملفات التعريفية خدمات من الدرجة الأولى ولا يُشار إليها على أنها "إضافية."
على Linux، إذا كانت خدمة Gateway على مستوى المستخدم مفقودة لكن توجد خدمة OpenClaw Gateway على مستوى النظام، فلا تثبت أداة الفحص خدمة ثانية على مستوى المستخدم تلقائيًا. افحص باستخدام `openclaw gateway status --deep` أو `openclaw doctor --deep`، ثم أزل المكرر أو اضبط `OPENCLAW_SERVICE_REPAIR_POLICY=external` عندما يكون مشرف نظام يملك دورة حياة Gateway.
على Linux، إذا كانت خدمة Gateway على مستوى المستخدم مفقودة لكن توجد خدمة Gateway من OpenClaw على مستوى النظام، لا يثبت Doctor خدمة ثانية على مستوى المستخدم تلقائيًا. افحص باستخدام `openclaw gateway status --deep` أو `openclaw doctor --deep`، ثم أزل النسخة المكررة أو عيّن `OPENCLAW_SERVICE_REPAIR_POLICY=external` عندما يكون مشرف نظام خارجي مالكًا لدورة حياة Gateway.
</Accordion>
<Accordion title="8b. ترحيل Matrix عند بدء التشغيل">
عندما يكون لدى حساب قناة Matrix ترحيل حالة قديم معلّق أو قابل للتنفيذ، تنشئ أداة الفحص (في وضع `--fix` / `--repair`) لقطة ما قبل الترحيل ثم تشغّل خطوات الترحيل بأفضل جهد: ترحيل حالة Matrix القديمة وتجهيز الحالة المشفرة القديمة. كلتا الخطوتين غير قاتلتين؛ تُسجّل الأخطاء ويستمر بدء التشغيل. في وضع القراءة فقط (`openclaw doctor` بدون `--fix`) يُتخطى هذا الفحص بالكامل.
<Accordion title="8ب. ترحيل Matrix عند بدء التشغيل">
عندما يكون لحساب قناة Matrix ترحيل حالة قديم معلق أو قابل للتنفيذ، ينشئ Doctor (في وضع `--fix` / `--repair`) لقطة قبل الترحيل ثم يشغّل خطوات الترحيل بأفضل جهد: ترحيل حالة Matrix القديمة وتحضير الحالة المشفرة القديمة. كلتا الخطوتين غير قاتلتين؛ تُسجل الأخطاء ويستمر بدء التشغيل. في وضع القراءة فقط (`openclaw doctor` بدون `--fix`) يتم تخطي هذا الفحص بالكامل.
</Accordion>
<Accordion title="8c. اقتران الجهاز وانحراف المصادقة">
تفحص أداة الفحص الآن حالة اقتران الجهاز كجزء من تمريرة الصحة العادية.
<Accordion title="8ج. إقران الجهاز وانحراف المصادقة">
يفحص Doctor الآن حالة إقران الجهاز كجزء من تمريرة الصحة العادية.
ما تعرضه:
ما يبلّغ عنه:
- طلبات الاقتران الأولى المعلّقة
- ترقيات الأدوار المعلّقة للأجهزة المقترنة مسبقًا
- ترقيات النطاقات المعلّقة للأجهزة المقترنة مسبقًا
- إصلاحات عدم تطابق المفتاح العام عندما لا يزال معرّف الجهاز متطابقًا لكن هوية الجهاز لم تعد تطابق السجل المعتمد
- السجلات المقترنة التي تفتقد رمزًا نشطًا لدور معتمد
- الرموز المقترنة التي تنحرف نطاقاتها خارج خط أساس الاقتران المعتمد
- إدخالات رمز الجهاز المخزنة مؤقتًا محليًا للجهاز الحالي التي تسبق تدوير رمز على جهة Gateway أو تحمل بيانات تعريف نطاق قديمة
- طلبات إقران أول مرة معلقة
- ترقيات أدوار معلقة للأجهزة المقترنة بالفعل
- ترقيات نطاقات معلقة للأجهزة المقترنة بالفعل
- إصلاحات عدم تطابق المفتاح العام عندما يظل معرف الجهاز مطابقًا لكن هوية الجهاز لم تعد تطابق السجل الموافق عليه
- سجلات مقترنة تفتقد رمزًا نشطًا لدور موافق عليه
- رموز مقترنة تنحرف نطاقاتها خارج خط أساس الإقران الموافق عليه
- إدخالات رمز جهاز محلية مخزنة مؤقتًا للجهاز الحالي تسبق تدوير رمز على جانب Gateway أو تحمل بيانات وصفية قديمة للنطاق
لا يعتمد الفاحص طلبات الاقتران تلقائيًا ولا يدوّر رموز الأجهزة تلقائيًا. بل يطبع الخطوات التالية الدقيقة:
لا يوافق Doctor تلقائيًا على طلبات الإقران ولا يدور رموز الأجهزة تلقائيًا. يطبع الخطوات التالية الدقيقة بدلًا من ذلك:
- افحص الطلبات المعلّقة باستخدام `openclaw devices list`
- اعتمد الطلب المحدد باستخدام `openclaw devices approve <requestId>`
- افحص الطلبات المعلقة باستخدام `openclaw devices list`
- وافق على الطلب الدقيق باستخدام `openclaw devices approve <requestId>`
- دوّر رمزًا جديدًا باستخدام `openclaw devices rotate --device <deviceId> --role <role>`
- أزِل سجلًا قديمًا وأعد اعتماده باستخدام `openclaw devices remove <deviceId>`
- أزل سجلًا قديمًا وأعد الموافقة عليه باستخدام `openclaw devices remove <deviceId>`
يسد هذا الثغرة الشائعة "مقترن بالفعل لكن ما زلت أتلقى أن الاقتران مطلوب": يميّز الفاحص الآن بين الاقتران لأول مرة وترقيات الدور/النطاق المعلّقة وبين انحراف الرمز/هوية الجهاز القديمة.
هذا يسد الفجوة الشائعة "مقترن بالفعل لكن لا يزال يطلب الإقران": يميّز Doctor الآن بين الإقران لأول مرة وترقيات الدور/النطاق المعلقة وانحراف الرمز/هوية الجهاز القديم.
</Accordion>
<Accordion title="9. تحذيرات الأمان">
يصدر الفاحص تحذيرات عندما يكون مزوّد مفتوحًا للرسائل المباشرة دون قائمة سماح، أو عندما تكون سياسة مهيأة بطريقة خطرة.
يصدر Doctor تحذيرات عندما يكون موفر مفتوحًا للرسائل المباشرة بدون قائمة سماح، أو عندما تكون سياسة مضبوطة بطريقة خطرة.
</Accordion>
<Accordion title="10. استمرار systemd (Linux)">
عند التشغيل كخدمة مستخدم systemd، يتأكد الفاحص من تمكين الاستمرار حتى يظل Gateway حيًا بعد تسجيل الخروج.
<Accordion title="10. systemd linger (Linux)">
إذا كان يعمل كخدمة مستخدم systemd، يتأكد Doctor من تفعيل lingering حتى يبقى Gateway حيًا بعد تسجيل الخروج.
</Accordion>
<Accordion title="11. حالة مساحة العمل (Skills وplugins والأدلة القديمة)">
يطبع الفاحص ملخصًا لحالة مساحة العمل للوكيل الافتراضي:
<Accordion title="11. حالة مساحة العمل (Skills وPlugins والأدلة القديمة)">
يطبع Doctor ملخصًا لحالة مساحة العمل للوكيل الافتراضي:
- **حالة Skills**: يحصي المهارات المؤهلة، والمفتقدة للمتطلبات، والمحظورة بقائمة السماح.
- **أدلة مساحة العمل القديمة**: يحذّر عندما تكون `~/openclaw` أو أدلة مساحة عمل قديمة أخرى موجودة بجانب مساحة العمل الحالية.
- **حالة Plugin**: يحصي plugins الممكّنة/المعطّلة/ذات الأخطاء؛ ويسرد معرّفات plugin لأي أخطاء؛ ويبلغ عن قدرات Plugin الحزمة.
- **تحذيرات توافق Plugin**: يعلّم plugins التي لديها مشكلات توافق مع وقت التشغيل الحالي.
- **تشخيصات Plugin**: يعرض أي تحذيرات أو أخطاء وقت التحميل صادرة عن سجل Plugin.
- **حالة Skills**: يحصي Skills المؤهلة، ومفقودة المتطلبات، والمحظورة بقائمة السماح.
- **أدلة مساحة العمل القديمة**: يحذر عندما توجد `~/openclaw` أو أدلة مساحة عمل قديمة أخرى إلى جانب مساحة العمل الحالية.
- **حالة Plugin**: يحصي Plugins المفعّلة/المعطلة/ذات الأخطاء؛ ويسرد معرفات Plugins لأي أخطاء؛ ويبلّغ عن قدرات Plugins المجمعة.
- **تحذيرات توافق Plugin**: يضع علامات على Plugins التي لديها مشكلات توافق مع وقت التشغيل الحالي.
- **تشخيصات Plugin**: يبرز أي تحذيرات أو أخطاء وقت تحميل يصدرها سجل Plugins.
</Accordion>
<Accordion title="11b. حجم ملف التمهيد">
يتحقق الفاحص مما إذا كانت ملفات تمهيد مساحة العمل (على سبيل المثال `AGENTS.md` أو `CLAUDE.md` أو ملفات سياق محقونة أخرى) قريبة من ميزانية الأحرف المهيأة أو تتجاوزها. ويبلغ، لكل ملف، عن عدد الأحرف الخام مقابل المحقونة، ونسبة الاقتطاع، وسبب الاقتطاع (`max/file` أو `max/total`)، وإجمالي الأحرف المحقونة كنسبة من إجمالي الميزانية. عندما تُقتطع الملفات أو تقترب من الحد، يطبع الفاحص نصائح لضبط `agents.defaults.bootstrapMaxChars` و`agents.defaults.bootstrapTotalMaxChars`.
<Accordion title="11ب. حجم ملف bootstrap">
يتحقق Doctor مما إذا كانت ملفات bootstrap الخاصة بمساحة العمل (مثل `AGENTS.md` أو `CLAUDE.md` أو ملفات سياق محقونة أخرى) قريبة من ميزانية الأحرف المضبوطة أو تتجاوزها. يبلّغ لكل ملف عن عدد الأحرف الخام مقابل المحقونة، ونسبة الاقتطاع، وسبب الاقتطاع (`max/file` أو `max/total`)، وإجمالي الأحرف المحقونة كنسبة من إجمالي الميزانية. عندما تُقتطع الملفات أو تقترب من الحد، يطبع Doctor نصائح لضبط `agents.defaults.bootstrapMaxChars` و`agents.defaults.bootstrapTotalMaxChars`.
</Accordion>
<Accordion title="11d. تنظيف Plugin القناة القديم">
عندما يزيل `openclaw doctor --fix` Plugin قناة مفقودًا، فإنه يزيل أيضًا إعدادات القناة المعلّقة التي كانت تشير إلى ذلك Plugin: إدخالات `channels.<id>`، وأهداف Heartbeat التي سمّت القناة، وتجاوزات `agents.*.models["<channel>/*"]`. يمنع هذا حلقات إقلاع Gateway عندما يختفي وقت تشغيل القناة لكن الإعدادات لا تزال تطلب من Gateway الارتباط بها.
<Accordion title="11د. تنظيف Plugin قناة قديم">
عندما يزيل `openclaw doctor --fix` Plugin قناة مفقودًا، فإنه يزيل أيضًا إعدادات نطاق القناة المتدلية التي أشارت إلى ذلك Plugin: إدخالات `channels.<id>`، وأهداف Heartbeat التي سمت القناة، وتجاوزات `agents.*.models["<channel>/*"]`. يمنع هذا حلقات إقلاع Gateway حيث اختفى وقت تشغيل القناة لكن الإعدادات لا تزال تطلب من Gateway الارتباط به.
</Accordion>
<Accordion title="11c. إكمال الصدفة">
يتحقق الفاحص مما إذا كان إكمال التبويب مثبتًا للصدفة الحالية (zsh أو bash أو fish أو PowerShell):
<Accordion title="11ج. إكمال الصدفة">
يتحقق Doctor مما إذا كان إكمال التبويب مثبتًا للصدفة الحالية (zsh أو bash أو fish أو PowerShell):
- إذا كان ملف تعريف الصدفة يستخدم نمط إكمال ديناميكيًا بطيئًا (`source <(openclaw completion ...)`)، يرقيه الفاحص إلى متغير الملف المخزن مؤقتًا الأسرع.
- إذا كان الإكمال مهيأ في ملف التعريف لكن ملف التخزين المؤقت مفقود، يعيد الفاحص إنشاء التخزين المؤقت تلقائيًا.
- إذا لم يكن أي إكمال مهيأ على الإطلاق، يطلب الفاحص تثبيته (في الوضع التفاعلي فقط؛ يُتخطى مع `--non-interactive`).
- إذا كان ملف تعريف الصدفة يستخدم نمط إكمال ديناميكيًا بطيئًا (`source <(openclaw completion ...)`)، يرقيه Doctor إلى متغير الملف المخبأ الأسرع.
- إذا كان الإكمال مضبوطًا في الملف التعريفي لكن ملف التخزين المؤقت مفقود، يعيد Doctor إنشاء التخزين المؤقت تلقائيًا.
- إذا لم يكن أي إكمال مضبوطًا على الإطلاق، يطلب Doctor تثبيته (وضع تفاعلي فقط؛ يتم تخطيه مع `--non-interactive`).
شغّل `openclaw completion --write-state` لإعادة إنشاء التخزين المؤقت يدويًا.
</Accordion>
<Accordion title="12. فحوصات مصادقة Gateway (الرمز المحلي)">
يتحقق الفاحص من جاهزية مصادقة رمز Gateway المحلي.
<Accordion title="12. فحوص مصادقة Gateway (الرمز المحلي)">
يتحقق Doctor من جاهزية مصادقة رمز Gateway المحلي.
- إذا كان وضع الرمز يحتاج إلى رمز ولا يوجد مصدر رمز، يعرض الفاحص إنشاء واحد.
- إذا كان `gateway.auth.token` مدارًا بواسطة SecretRef لكنه غير متاح، يحذّر الفاحص ولا يستبدله بنص صريح.
- يفرض `openclaw doctor --generate-gateway-token` الإنشاء فقط عندما لا يكون أي SecretRef للرمز مهيأ.
- إذا كان وضع الرمز يحتاج إلى رمز ولا يوجد أي مصدر رمز، يعرض Doctor إنشاء واحد.
- إذا كان `gateway.auth.token` مُدارًا عبر SecretRef لكنه غير متاح، يحذر Doctor ولا يستبدله بنص عادي.
- يفرض `openclaw doctor --generate-gateway-token` التوليد فقط عندما لا يكون أي SecretRef للرمز مضبوطًا.
</Accordion>
<Accordion title="12b. إصلاحات واعية بـ SecretRef وللقراءة فقط">
تحتاج بعض مسارات الإصلاح إلى فحص بيانات الاعتماد المهيأة دون إضعاف سلوك الفشل السريع في وقت التشغيل.
<Accordion title="12ب. إصلاحات قراءة فقط مدركة لـ SecretRef">
تحتاج بعض مسارات الإصلاح إلى فحص بيانات الاعتماد المضبوطة دون إضعاف سلوك الفشل السريع في وقت التشغيل.
- يستخدم `openclaw doctor --fix` الآن نموذج ملخص SecretRef للقراءة فقط نفسه الذي تستخدمه أوامر عائلة الحالة لإصلاحات الإعدادات الموجهة.
- مثال: يحاول إصلاح `allowFrom` / `groupAllowFrom` `@username` في Telegram استخدام بيانات اعتماد البوت المهيأة عندما تكون متاحة.
- إذا كان رمز بوت Telegram مهيأ عبر SecretRef لكنه غير متاح في مسار الأمر الحالي، يبلغ الفاحص أن بيانات الاعتماد مهيأة-لكنها-غير-متاحة ويتخطى الحل التلقائي بدلًا من التعطل أو الإبلاغ خطأً بأن الرمز مفقود.
- يستخدم `openclaw doctor --fix` الآن نموذج ملخص SecretRef للقراءة فقط نفسه الذي تستخدمه أوامر عائلة الحالة لإصلاحات الإعدادات المستهدفة.
- مثال: تحاول إصلاحات `allowFrom` / `groupAllowFrom` الخاصة بـ Telegram `@username` استخدام بيانات اعتماد الروبوت المضبوطة عند توفرها.
- إذا كان رمز روبوت Telegram مضبوطًا عبر SecretRef لكنه غير متاح في مسار الأمر الحالي، يبلّغ Doctor بأن بيانات الاعتماد مضبوطة لكنها غير متاحة ويتخطى الحل التلقائي بدلًا من التعطل أو الإبلاغ خطأً بأن الرمز مفقود.
</Accordion>
<Accordion title="13. فحص صحة Gateway + إعادة التشغيل">
يشغّل Doctor فحص صحة ويعرض إعادة تشغيل Gateway عندما يبدو غير سليم.
يُجري Doctor فحص صحة ويعرض إعادة تشغيل Gateway عندما يبدو غير سليم.
</Accordion>
<Accordion title="13b. جاهزية البحث في الذاكرة">
يتحقق Doctor مما إذا كان موفر تضمينات البحث في الذاكرة المكوّن جاهزًا للوكيل الافتراضي. يعتمد السلوك على الخلفية والموفر المكوّنين:
<Accordion title="13b. جاهزية بحث الذاكرة">
يتحقق Doctor مما إذا كان موفر تضمين بحث الذاكرة المكوّن جاهزًا للوكيل الافتراضي. يعتمد السلوك على الخلفية والموفر المكوّنين:
- **خلفية QMD**: يتحقق مما إذا كان ملف `qmd` الثنائي متاحًا وقابلًا للتشغيل. إذا لم يكن كذلك، يطبع إرشادات الإصلاح بما في ذلك حزمة npm وخيار مسار ثنائي يدوي.
- **موفر محلي صريح**: يتحقق من وجود ملف نموذج محلي أو عنوان URL معروف لنموذج بعيد/قابل للتنزيل. إذا كان مفقودًا، يقترح التبديل إلى موفر بعيد.
- **خلفية QMD**: يفحص ما إذا كان ملف `qmd` الثنائي متاحًا وقابلًا للبدء. إذا لم يكن كذلك، يطبع إرشادات إصلاح تتضمن حزمة npm وخيار مسار ثنائي يدوي.
- **موفر محلي صريح**: يتحقق من وجود ملف نموذج محلي أو عنوان URL لنموذج بعيد/قابل للتنزيل ومعروف. إذا كان مفقودًا، يقترح التبديل إلى موفر بعيد.
- **موفر بعيد صريح** (`openai`، `voyage`، إلخ): يتحقق من وجود مفتاح API في البيئة أو مخزن المصادقة. يطبع تلميحات إصلاح قابلة للتنفيذ إذا كان مفقودًا.
- **موفر تلقائي**: يتحقق من توفر النموذج المحلي أولًا، ثم يجرّب كل موفر بعيد بترتيب الاختيار التلقائي.
- **موفر تلقائي**: يتحقق أولًا من توفر النموذج المحلي، ثم يجرب كل موفر بعيد وفق ترتيب الاختيار التلقائي.
عند توفر نتيجة مسبار Gateway مخزنة مؤقتًا (كان Gateway سليمًا وقت الفحص)، يطابق Doctor نتيجتها مع الإعدادات المرئية عبر CLI ويشير إلى أي اختلاف. لا يبدأ Doctor اختبار تضمينات جديدًا في المسار الافتراضي؛ استخدم أمر حالة الذاكرة العميق عندما تريد فحص موفر حيًا.
عندما تكون نتيجة فحص Gateway مخبأة متاحة (كان Gateway سليمًا وقت الفحص)، يقارن doctor نتيجتها مع الإعدادات المرئية عبر CLI ويشير إلى أي اختلاف. لا يبدأ Doctor فحص تضمين جديدًا على المسار الافتراضي؛ استخدم أمر حالة الذاكرة العميق عندما تريد فحصًا مباشرًا للموفر.
استخدم `openclaw memory status --deep` للتحقق من جاهزية التضمينات وقت التشغيل.
استخدم `openclaw memory status --deep` للتحقق من جاهزية التضمين وقت التشغيل.
</Accordion>
<Accordion title="14. تحذيرات حالة القناة">
إذا كان Gateway سليمًا، يشغّل Doctor مسبار حالة قناة ويبلغ عن التحذيرات مع إصلاحات مقترحة.
<Accordion title="14. تحذيرات حالة القنوات">
إذا كان Gateway سليمًا، يُجري doctor فحص حالة القنوات ويبلّغ عن التحذيرات مع إصلاحات مقترحة.
</Accordion>
<Accordion title="15. تدقيق إعدادات المشرف + الإصلاح">
يتحقق Doctor من إعدادات المشرف المثبتة (launchd/systemd/schtasks) بحثًا عن الإعدادات الافتراضية المفقودة أو القديمة (مثل تبعيات systemd لـ network-online وتأخير إعادة التشغيل). عندما يعثر على عدم تطابق، يوصي بتحديث ويمكنه إعادة كتابة ملف الخدمة/المهمة إلى الإعدادات الافتراضية الحالية.
يتحقق Doctor من إعدادات المشرف المثبتة (launchd/systemd/schtasks) بحثًا عن الإعدادات الافتراضية المفقودة أو القديمة (مثل تبعيات systemd لـ network-online وتأخير إعادة التشغيل). عندما يجد عدم تطابق، يوصي بتحديث ويمكنه إعادة كتابة ملف الخدمة/المهمة إلى الإعدادات الافتراضية الحالية.
ملاحظات:
- يطلب `openclaw doctor` التأكيد قبل إعادة كتابة إعدادات المشرف.
- يقبل `openclaw doctor --yes` مطالبات الإصلاح الافتراضية.
- يطبق `openclaw doctor --repair` الإصلاحات الموصى بها دون مطالبات.
- يستبدل `openclaw doctor --repair --force` إعدادات المشرف المخصصة.
- يبقي `OPENCLAW_SERVICE_REPAIR_POLICY=external` Doctor للقراءة فقط لدورة حياة خدمة Gateway. لا يزال يبلغ عن صحة الخدمة ويشغّل إصلاحات غير خدمية، لكنه يتخطى تثبيت/بدء/إعادة تشغيل/تمهيد الخدمة، وإعادة كتابة إعدادات المشرف، وتنظيف الخدمات القديمة لأن مشرفًا خارجيًا يملك دورة الحياة هذه.
- على Linux، لا يعيد Doctor كتابة بيانات تعريف الأمر/نقطة الدخول بينما تكون وحدة systemd المطابقة لـ Gateway نشطة. كما يتجاهل وحدات Gateway-like الإضافية غير القديمة وغير النشطة أثناء فحص الخدمات المكررة حتى لا تنشئ ملفات الخدمات المصاحبة ضوضاء تنظيف.
- إذا كانت مصادقة الرمز تتطلب رمزًا وكان `gateway.auth.token` مُدارًا عبر SecretRef، فإن تثبيت/إصلاح خدمة Doctor يتحقق من SecretRef لكنه لا يحفظ قيم الرمز النصية الصريحة المحلولة في بيانات تعريف بيئة خدمة المشرف.
- يكتشف Doctor قيم بيئة الخدمة المُدارة والمدعومة بـ `.env`/SecretRef التي ضمّنتها تثبيتات LaunchAgent أو systemd أو Windows Scheduled Task القديمة بشكل مباشر، ويعيد كتابة بيانات تعريف الخدمة بحيث تُحمّل تلك القيم من مصدر وقت التشغيل بدلًا من تعريف المشرف.
- يكتشف Doctor عندما لا يزال أمر الخدمة يثبت `--port` قديمًا بعد تغيّر `gateway.port`، ويعيد كتابة بيانات تعريف الخدمة إلى المنفذ الحالي.
- إذا كانت مصادقة الرمز تتطلب رمزًا وكان SecretRef للرمز المكوّن غير محلول، يحظر Doctor مسار التثبيت/الإصلاح مع إرشادات قابلة للتنفيذ.
- إذا كان كل من `gateway.auth.token` و`gateway.auth.password` مكوّنين وكان `gateway.auth.mode` غير معيّن، يحظر Doctor التثبيت/الإصلاح حتى يتم تعيين الوضع صراحة.
- بالنسبة إلى وحدات systemd الخاصة بالمستخدم على Linux، تشمل فحوص انحراف الرمز في Doctor الآن مصدري `Environment=` و`EnvironmentFile=` عند مقارنة بيانات تعريف مصادقة الخدمة.
- ترفض إصلاحات خدمة Doctor إعادة كتابة أو إيقاف أو إعادة تشغيل خدمة Gateway من ملف OpenClaw ثنائي أقدم عندما تكون الإعدادات قد كُتبت آخر مرة بواسطة إصدار أحدث. راجع [استكشاف أخطاء Gateway وإصلاحها](/ar/gateway/troubleshooting#split-brain-installs-and-newer-config-guard).
- يطبّق `openclaw doctor --repair` الإصلاحات الموصى بها دون مطالبات.
- يكتب `openclaw doctor --repair --force` فوق إعدادات المشرف المخصصة.
- يحافظ `OPENCLAW_SERVICE_REPAIR_POLICY=external` على doctor في وضع القراءة فقط لدورة حياة خدمة Gateway. يظل يبلّغ عن صحة الخدمة ويجري إصلاحات غير متعلقة بالخدمة، لكنه يتخطى تثبيت/بدء/إعادة تشغيل/تهيئة الخدمة، وإعادة كتابة إعدادات المشرف، وتنظيف الخدمات القديمة لأن مشرفًا خارجيًا يملك دورة الحياة تلك.
- على Linux، لا يعيد doctor كتابة بيانات الأمر/نقطة الدخول الوصفية عندما تكون وحدة systemd المطابقة لـ Gateway نشطة. كما يتجاهل الوحدات الإضافية غير القديمة وغير النشطة الشبيهة بـ Gateway أثناء فحص الخدمات المكررة حتى لا تنشئ ملفات الخدمات المرافقة ضوضاء تنظيف.
- إذا كانت مصادقة الرمز تتطلب رمزًا وكان `gateway.auth.token` مُدارًا بواسطة SecretRef، يتحقق تثبيت/إصلاح خدمة doctor من SecretRef لكنه لا يحفظ قيم الرمز النصية المحلولة في بيانات بيئة خدمة المشرف الوصفية.
- يكتشف Doctor قيم بيئة الخدمة المُدارة المدعومة بـ `.env`/SecretRef التي كانت تثبيتات LaunchAgent أو systemd أو Windows Scheduled Task الأقدم تُضمّنها مباشرة، ويعيد كتابة بيانات الخدمة الوصفية بحيث تُحمّل تلك القيم من مصدر وقت التشغيل بدلًا من تعريف المشرف.
- يكتشف Doctor عندما يظل أمر الخدمة يثبت منفذ `--port` قديمًا بعد تغيّر `gateway.port` ويعيد كتابة بيانات الخدمة الوصفية إلى المنفذ الحالي.
- إذا كانت مصادقة الرمز تتطلب رمزًا وكان SecretRef للرمز المكوّن غير محلول، يحظر doctor مسار التثبيت/الإصلاح مع إرشادات قابلة للتنفيذ.
- إذا كان كل من `gateway.auth.token` و`gateway.auth.password` مكوّنين وكان `gateway.auth.mode` غير معيّن، يحظر doctor التثبيت/الإصلاح إلى أن يُعيّن الوضع صراحةً.
- بالنسبة إلى وحدات user-systemd على Linux، تتضمن فحوصات انحراف الرمز في doctor الآن مصدري `Environment=` و`EnvironmentFile=` عند مقارنة بيانات مصادقة الخدمة الوصفية.
- ترفض إصلاحات خدمة Doctor إعادة كتابة خدمة Gateway أو إيقافها أو إعادة تشغيلها من ملف OpenClaw ثنائي أقدم عندما تكون الإعدادات قد كُتبت آخر مرة بواسطة إصدار أحدث. راجع [استكشاف أخطاء Gateway وإصلاحها](/ar/gateway/troubleshooting#split-brain-installs-and-newer-config-guard).
- يمكنك دائمًا فرض إعادة كتابة كاملة عبر `openclaw gateway install --force`.
</Accordion>
<Accordion title="16. وقت تشغيل Gateway + تشخيصات المنفذ">
يفحص Doctor وقت تشغيل الخدمة (PID، آخر حالة خروج) ويحذر عندما تكون الخدمة مثبتة لكنها لا تعمل فعليًا. كما يتحقق من تعارضات المنافذ على منفذ Gateway (الافتراضي `18789`) ويبلغ عن الأسباب المحتملة (Gateway يعمل بالفعل، نفق SSH).
<Accordion title="16. تشخيص وقت تشغيل Gateway والمنفذ">
يفحص Doctor وقت تشغيل الخدمة (PID، وآخر حالة خروج) ويحذر عندما تكون الخدمة مثبتة لكنها لا تعمل فعليًا. كما يتحقق من تعارضات المنافذ على منفذ Gateway (الافتراضي `18789`) ويبلّغ عن الأسباب المحتملة (Gateway قيد التشغيل بالفعل، نفق SSH).
</Accordion>
<Accordion title="17. أفضل ممارسات وقت تشغيل Gateway">
يحذر Doctor عندما تعمل خدمة Gateway على Bun أو مسار Node مُدار بإصدار (`nvm`، `fnm`، `volta`، `asdf`، إلخ). تتطلب قنوات WhatsApp + Telegram استخدام Node، ويمكن أن تتعطل مسارات مديري الإصدارات بعد الترقيات لأن الخدمة لا تحمّل تهيئة الصدفة لديك. يعرض Doctor الترحيل إلى تثبيت Node نظامي عندما يكون متاحًا (Homebrew/apt/choco).
يحذر Doctor عندما تعمل خدمة Gateway على Bun أو مسار Node مُدار بالإصدارات (`nvm`، `fnm`، `volta`، `asdf`، إلخ). تتطلب قنوات WhatsApp وTelegram استخدام Node، ويمكن أن تتعطل مسارات مديري الإصدارات بعد الترقيات لأن الخدمة لا تحمّل تهيئة الصدفة لديك. يعرض Doctor الترحيل إلى تثبيت Node على النظام عندما يكون متاحًا (Homebrew/apt/choco).
تستخدم LaunchAgents المثبتة أو المُصلحة حديثًا على macOS مسار PATH نظاميًا قياسيًا (`/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin`) بدلًا من نسخ PATH الخاص بالصدفة التفاعلية، لذلك لا تغير أدلة Volta وasdf وfnm وpnpm وغيرها من أدلة مديري الإصدارات أي عمليات Node فرعية يتم حلها. لا تزال خدمات Linux تحتفظ بجذور بيئة صريحة (`NVM_DIR`، `FNM_DIR`، `VOLTA_HOME`، `ASDF_DATA_DIR`، `BUN_INSTALL`، `PNPM_HOME`) وأدلة user-bin مستقرة، لكن أدلة الرجوع الاحتياطية المخمنة لمديري الإصدارات لا تُكتب إلى PATH الخاص بالخدمة إلا عندما تكون تلك الأدلة موجودة على القرص.
تستخدم LaunchAgents المثبتة أو المُصلحة حديثًا على macOS قيمة PATH نظامية معيارية (`/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin`) بدلًا من نسخ PATH للصدفة التفاعلية، لذلك لا تغيّر أدلة Volta وasdf وfnm وpnpm وغيرها من مديري الإصدارات كيفية حل عمليات Node الفرعية. لا تزال خدمات Linux تحتفظ بجذور بيئة صريحة (`NVM_DIR`، `FNM_DIR`، `VOLTA_HOME`، `ASDF_DATA_DIR`، `BUN_INSTALL`، `PNPM_HOME`) وأدلة user-bin مستقرة، لكن أدلة الرجوع التخمينية لمديري الإصدارات لا تُكتب إلى PATH الخاص بالخدمة إلا عندما تكون تلك الأدلة موجودة على القرص.
</Accordion>
<Accordion title="18. كتابة الإعدادات + بيانات تعريف المعالج">
يحفظ Doctor أي تغييرات في الإعدادات ويختم بيانات تعريف المعالج لتسجيل تشغيل Doctor.
<Accordion title="18. كتابة الإعدادات + بيانات المعالج الوصفية">
يحفظ Doctor أي تغييرات في الإعدادات ويختم بيانات المعالج الوصفية لتسجيل تشغيل doctor.
</Accordion>
<Accordion title="19. نصائح مساحة العمل (النسخ الاحتياطي + نظام الذاكرة)">
يقترح Doctor نظام ذاكرة لمساحة العمل عند فقدانه ويطبع نصيحة نسخ احتياطي إذا لم تكن مساحة العمل موجودة بالفعل ضمن git.
يقترح Doctor نظام ذاكرة لمساحة العمل عندما يكون مفقودًا ويطبع نصيحة نسخ احتياطي إذا لم تكن مساحة العمل موجودة بالفعل ضمن git.
راجع [/concepts/agent-workspace](/ar/concepts/agent-workspace) للحصول على دليل كامل لبنية مساحة العمل والنسخ الاحتياطي باستخدام git (يوصى بـ GitHub أو GitLab خاص).
راجع [/concepts/agent-workspace](/ar/concepts/agent-workspace) للحصول على دليل كامل لبنية مساحة العمل والنسخ الاحتياطي عبر git (يُوصى بمستودع GitHub أو GitLab خاص).
</Accordion>
</AccordionGroup>
## ذو صلة
## ذات صلة
- [دليل تشغيل Gateway](/ar/gateway)
- [استكشاف أخطاء Gateway وإصلاحها](/ar/gateway/troubleshooting)

View File

@ -1,22 +1,22 @@
---
read_when:
- أنت تحدد ما إذا كان Plugin يُضمَّن في حزمة npm الأساسية أم يُثبَّت بشكل منفصل
- أنت تقرر ما إذا كان Plugin سيُضمَّن في حزمة npm الأساسية أم يُثبَّت بشكل منفصل
- أنت تحدّث بيانات تعريف حزمة Plugin المضمّنة أو أتمتة الإصدار
- تحتاج إلى القائمة المعتمدة للـ Plugin الداخلية مقابل الخارجية
summary: جرد مُولَّد لمكونات Plugin الخاصة بـ OpenClaw المضمّنة في النواة، أو المنشورة خارجيًا، أو المحتفَظ بها كمصدر فقط
- تحتاج إلى قائمة الـ Plugin الداخلية مقابل الخارجية المرجعية
summary: جرد مُنشأ لـ Plugins OpenClaw المشحونة في النواة، أو المنشورة خارجيًا، أو المحتفَظ بها كمصدر فقط
title: جرد Plugin
x-i18n:
generated_at: "2026-05-03T07:34:35Z"
generated_at: "2026-05-04T09:37:17Z"
model: gpt-5.5
provider: openai
source_hash: 2099d8a67847f54040db332287708a1f79aa6c08e6e33125425389fe962865cb
source_hash: 64f3d27ae65faacf89deeaad1b456318fa72993fdcf16262f30fb3f48b898024
source_path: plugins/plugin-inventory.md
workflow: 16
---
# جرد Plugin
# مخزون Plugin
تُولَّد هذه الصفحة من `extensions/*/package.json`، و`openclaw.plugin.json`،
تُولَّد هذه الصفحة من `extensions/*/package.json` و`openclaw.plugin.json`،
واستثناءات `files` في حزمة npm الجذرية. أعد توليدها باستخدام:
```bash
@ -25,92 +25,113 @@ pnpm plugins:inventory:gen
## التعريفات
- **حزمة npm الأساسية:** مضمّنة في حزمة npm الخاصة بـ `openclaw` ومتاحة من دون تثبيت Plugin منفصل.
- **حزمة خارجية رسمية:** Plugin تصونه OpenClaw ومحذوف من حزمة npm الأساسية، ومحفوظ في هذا الجرد الرسمي، ويُثبَّت عند الطلب عبر ClawHub و/أو npm.
- **نسخة مصدرية فقط:** Plugin محلي في المستودع ومحذوف من عناصر npm المنشورة ولا يُعلن عنه كحزمة قابلة للتثبيت.
- **حزمة npm الأساسية:** مضمّنة في حزمة npm باسم `openclaw` ومتاحة دون تثبيت Plugin منفصل.
- **حزمة خارجية رسمية:** Plugin تتم صيانته بواسطة OpenClaw ومحذوف من حزمة npm الأساسية، ويُحفظ في هذا المخزون الرسمي، ويُثبَّت عند الطلب عبر ClawHub و/أو npm.
- **نسخة المصدر المحلية فقط:** Plugin محلي في المستودع ومحذوف من عناصر npm المنشورة ولا يُعلن عنه كحزمة قابلة للتثبيت.
تختلف النسخ المصدرية عن تثبيتات npm: بعد `pnpm install`، تُحمَّل
Plugin المضمّنة من `extensions/<id>` بحيث تكون التعديلات المحلية واعتماديات مساحة العمل المحلية للحزمة متاحة.
تختلف نسخ المصدر المحلية عن تثبيتات npm: بعد `pnpm install`، تُحمَّل
Plugins المضمّنة من `extensions/<id>` بحيث تكون التعديلات المحلية وتبعيات مساحة العمل المحلية للحزمة
متاحة.
## تثبيت Plugin
استخدم عمود **التوزيع** لتحديد ما إذا كان التثبيت مطلوبًا. Plugins التي
تقول `included in OpenClaw` موجودة بالفعل في الحزمة الأساسية. تحتاج
الحزم الخارجية الرسمية إلى تثبيت واحد، ثم إعادة تشغيل Gateway.
على سبيل المثال، Discord حزمة خارجية رسمية:
```bash
openclaw plugins install @openclaw/discord
openclaw gateway restart
openclaw plugins inspect discord --runtime --json
```
تحاول مواصفات الحزم المجردة استخدام ClawHub أولًا، ثم الرجوع إلى npm. لفرض مصدر، استخدم
`clawhub:@openclaw/discord` أو `npm:@openclaw/discord`. بعد التثبيت، اتبع
مستند إعداد Plugin، مثل [Discord](/ar/channels/discord)، لإضافة بيانات الاعتماد
وتكوين القناة. راجع [إدارة Plugins](/ar/plugins/manage-plugins) لأوامر التحديث،
وإلغاء التثبيت، والنشر.
## حزمة npm الأساسية
| Plugin | الوصف | التوزيع | السطح |
| Plugin | الوصف | التوزيع | الواجهة |
| ----------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [alibaba](/ar/plugins/reference/alibaba) | يضيف دعم موفر إنشاء الفيديو. | `@openclaw/alibaba-provider`<br />مضمّن في OpenClaw | contracts: videoGenerationProviders |
| [amazon-bedrock](/ar/plugins/reference/amazon-bedrock) | يضيف دعم موفر نماذج Amazon Bedrock إلى OpenClaw. | `@openclaw/amazon-bedrock-provider`<br />مضمّن في OpenClaw | providers: amazon-bedrock; contracts: memoryEmbeddingProviders |
| [amazon-bedrock-mantle](/ar/plugins/reference/amazon-bedrock-mantle) | يضيف دعم موفر نماذج Amazon Bedrock Mantle إلى OpenClaw. | `@openclaw/amazon-bedrock-mantle-provider`<br />مضمّن في OpenClaw | providers: amazon-bedrock-mantle |
| [anthropic](/ar/plugins/reference/anthropic) | يضيف دعم موفر نماذج Anthropic إلى OpenClaw. | `@openclaw/anthropic-provider`<br />مضمّن في OpenClaw | providers: anthropic; contracts: mediaUnderstandingProviders |
| [anthropic-vertex](/ar/plugins/reference/anthropic-vertex) | يضيف دعم موفر نماذج Anthropic Vertex إلى OpenClaw. | `@openclaw/anthropic-vertex-provider`<br />مضمّن في OpenClaw | providers: anthropic-vertex |
| [arcee](/ar/plugins/reference/arcee) | يضيف دعم موفر نماذج Arcee إلى OpenClaw. | `@openclaw/arcee-provider`<br />مضمّن في OpenClaw | providers: arcee |
| [azure-speech](/ar/plugins/reference/azure-speech) | تحويل النص إلى كلام عبر Azure AI Speech (MP3، وملاحظات صوتية أصلية بتنسيق Ogg/Opus، واتصالات هاتفية PCM). | `@openclaw/azure-speech`<br />مضمّن في OpenClaw | contracts: speechProviders |
| [bonjour](/ar/plugins/reference/bonjour) | يعلن عن Gateway المحلي لـ OpenClaw عبر Bonjour/mDNS. | `@openclaw/bonjour`<br />مضمّن في OpenClaw | Plugin |
| [browser](/ar/plugins/reference/browser) | يضيف أدوات قابلة للاستدعاء من الوكيل. | `@openclaw/browser-plugin`<br />مضمّن في OpenClaw | contracts: tools; Skills |
| [byteplus](/ar/plugins/reference/byteplus) | يضيف دعم موفري نماذج BytePlus وBytePlus Plan إلى OpenClaw. | `@openclaw/byteplus-provider`<br />مضمّن في OpenClaw | providers: byteplus, byteplus-plan; contracts: videoGenerationProviders |
| [cerebras](/ar/plugins/reference/cerebras) | يضيف دعم موفر نماذج Cerebras إلى OpenClaw. | `@openclaw/cerebras-provider`<br />مضمّن في OpenClaw | providers: cerebras |
| [chutes](/ar/plugins/reference/chutes) | يضيف دعم موفر نماذج Chutes إلى OpenClaw. | `@openclaw/chutes-provider`<br />مضمّن في OpenClaw | providers: chutes |
| [cloudflare-ai-gateway](/ar/plugins/reference/cloudflare-ai-gateway) | يضيف دعم موفر نماذج Cloudflare AI Gateway إلى OpenClaw. | `@openclaw/cloudflare-ai-gateway-provider`<br />مضمّن في OpenClaw | providers: cloudflare-ai-gateway |
| [comfy](/ar/plugins/reference/comfy) | يضيف دعم موفر نماذج ComfyUI إلى OpenClaw. | `@openclaw/comfy-provider`<br />مضمّن في OpenClaw | providers: comfy; contracts: imageGenerationProviders, musicGenerationProviders, videoGenerationProviders |
| [copilot-proxy](/ar/plugins/reference/copilot-proxy) | يضيف دعم موفر نماذج Copilot Proxy إلى OpenClaw. | `@openclaw/copilot-proxy`<br />مضمّن في OpenClaw | providers: copilot-proxy |
| [deepgram](/ar/plugins/reference/deepgram) | يضيف دعم موفر فهم الوسائط. يضيف دعم موفر النسخ الفوري. | `@openclaw/deepgram-provider`<br />مضمّن في OpenClaw | contracts: mediaUnderstandingProviders, realtimeTranscriptionProviders |
| [deepinfra](/ar/plugins/reference/deepinfra) | يضيف دعم موفر نماذج DeepInfra إلى OpenClaw. | `@openclaw/deepinfra-provider`<br />مضمّن في OpenClaw | providers: deepinfra; contracts: imageGenerationProviders, mediaUnderstandingProviders, memoryEmbeddingProviders, speechProviders, videoGenerationProviders |
| [deepseek](/ar/plugins/reference/deepseek) | يضيف دعم موفر نماذج DeepSeek إلى OpenClaw. | `@openclaw/deepseek-provider`<br />مضمّن في OpenClaw | providers: deepseek |
| [alibaba](/ar/plugins/reference/alibaba) | يضيف دعم موفّر توليد الفيديو. | `@openclaw/alibaba-provider`<br />مضمّن في OpenClaw | contracts: videoGenerationProviders |
| [amazon-bedrock](/ar/plugins/reference/amazon-bedrock) | يضيف دعم موفّر نماذج Amazon Bedrock إلى OpenClaw. | `@openclaw/amazon-bedrock-provider`<br />مضمّن في OpenClaw | providers: amazon-bedrock; contracts: memoryEmbeddingProviders |
| [amazon-bedrock-mantle](/ar/plugins/reference/amazon-bedrock-mantle) | يضيف دعم موفّر نماذج Amazon Bedrock Mantle إلى OpenClaw. | `@openclaw/amazon-bedrock-mantle-provider`<br />مضمّن في OpenClaw | providers: amazon-bedrock-mantle |
| [anthropic](/ar/plugins/reference/anthropic) | يضيف دعم موفّر نماذج Anthropic إلى OpenClaw. | `@openclaw/anthropic-provider`<br />مضمّن في OpenClaw | providers: anthropic; contracts: mediaUnderstandingProviders |
| [anthropic-vertex](/ar/plugins/reference/anthropic-vertex) | يضيف دعم موفّر نماذج Anthropic Vertex إلى OpenClaw. | `@openclaw/anthropic-vertex-provider`<br />مضمّن في OpenClaw | providers: anthropic-vertex |
| [arcee](/ar/plugins/reference/arcee) | يضيف دعم موفّر نماذج Arcee إلى OpenClaw. | `@openclaw/arcee-provider`<br />مضمّن في OpenClaw | providers: arcee |
| [azure-speech](/ar/plugins/reference/azure-speech) | تحويل النص إلى كلام في Azure AI Speech (MP3، وملاحظات صوتية Ogg/Opus أصلية، واتصالات هاتفية PCM). | `@openclaw/azure-speech`<br />مضمّن في OpenClaw | contracts: speechProviders |
| [bonjour](/ar/plugins/reference/bonjour) | أعلن عن Gateway المحلي الخاص بـ OpenClaw عبر Bonjour/mDNS. | `@openclaw/bonjour`<br />مضمّن في OpenClaw | plugin |
| [browser](/ar/plugins/reference/browser) | يضيف أدوات قابلة للاستدعاء من الوكيل. | `@openclaw/browser-plugin`<br />مضمّن في OpenClaw | contracts: tools; skills |
| [byteplus](/ar/plugins/reference/byteplus) | يضيف دعم موفّري نماذج BytePlus وBytePlus Plan إلى OpenClaw. | `@openclaw/byteplus-provider`<br />مضمّن في OpenClaw | providers: byteplus, byteplus-plan; contracts: videoGenerationProviders |
| [cerebras](/ar/plugins/reference/cerebras) | يضيف دعم موفّر نماذج Cerebras إلى OpenClaw. | `@openclaw/cerebras-provider`<br />مضمّن في OpenClaw | providers: cerebras |
| [chutes](/ar/plugins/reference/chutes) | يضيف دعم موفّر نماذج Chutes إلى OpenClaw. | `@openclaw/chutes-provider`<br />مضمّن في OpenClaw | providers: chutes |
| [cloudflare-ai-gateway](/ar/plugins/reference/cloudflare-ai-gateway) | يضيف دعم موفّر نماذج Cloudflare AI Gateway إلى OpenClaw. | `@openclaw/cloudflare-ai-gateway-provider`<br />مضمّن في OpenClaw | providers: cloudflare-ai-gateway |
| [comfy](/ar/plugins/reference/comfy) | يضيف دعم موفّر نماذج ComfyUI إلى OpenClaw. | `@openclaw/comfy-provider`<br />مضمّن في OpenClaw | providers: comfy; contracts: imageGenerationProviders, musicGenerationProviders, videoGenerationProviders |
| [copilot-proxy](/ar/plugins/reference/copilot-proxy) | يضيف دعم موفّر نماذج Copilot Proxy إلى OpenClaw. | `@openclaw/copilot-proxy`<br />مضمّن في OpenClaw | providers: copilot-proxy |
| [deepgram](/ar/plugins/reference/deepgram) | يضيف دعم موفّر فهم الوسائط. يضيف دعم موفّر النسخ الفوري. | `@openclaw/deepgram-provider`<br />مضمّن في OpenClaw | contracts: mediaUnderstandingProviders, realtimeTranscriptionProviders |
| [deepinfra](/ar/plugins/reference/deepinfra) | يضيف دعم موفّر نماذج DeepInfra إلى OpenClaw. | `@openclaw/deepinfra-provider`<br />مضمّن في OpenClaw | providers: deepinfra; contracts: imageGenerationProviders, mediaUnderstandingProviders, memoryEmbeddingProviders, speechProviders, videoGenerationProviders |
| [deepseek](/ar/plugins/reference/deepseek) | يضيف دعم موفّر نماذج DeepSeek إلى OpenClaw. | `@openclaw/deepseek-provider`<br />مضمّن في OpenClaw | providers: deepseek |
| [document-extract](/ar/plugins/reference/document-extract) | يستخرج النص وصور الصفحات الاحتياطية من مرفقات المستندات المحلية. | `@openclaw/document-extract-plugin`<br />مضمّن في OpenClaw | contracts: documentExtractors |
| [duckduckgo](/ar/plugins/reference/duckduckgo) | يضيف دعم موفّر بحث الويب. | `@openclaw/duckduckgo-plugin`<br />مضمّن في OpenClaw | contracts: webSearchProviders |
| [elevenlabs](/ar/plugins/reference/elevenlabs) | يضيف دعم موفّر فهم الوسائط. يضيف دعم موفّر التفريغ الفوري. يضيف دعم موفّر تحويل النص إلى كلام. | `@openclaw/elevenlabs-speech`<br />مضمّن في OpenClaw | contracts: mediaUnderstandingProviders, realtimeTranscriptionProviders, speechProviders |
| [exa](/ar/plugins/reference/exa) | يضيف دعم موفّر بحث الويب. | `@openclaw/exa-plugin`<br />مضمّن في OpenClaw | contracts: webSearchProviders |
| [fal](/ar/plugins/reference/fal) | يضيف دعم موفّر نماذج fal إلى OpenClaw. | `@openclaw/fal-provider`<br />مضمّن في OpenClaw | providers: fal; contracts: imageGenerationProviders, videoGenerationProviders |
| [file-transfer](/ar/plugins/reference/file-transfer) | يجلب الملفات ويسردها ويكتبها على العقد المقترنة عبر أوامر عقدة مخصصة. يتجاوز اقتطاع مخرجات bash stdout باستخدام base64 عبر node.invoke للملفات الثنائية حتى 16 ميغابايت. | `@openclaw/file-transfer`<br />مضمّن في OpenClaw | contracts: tools |
| [firecrawl](/ar/plugins/reference/firecrawl) | يضيف أدوات قابلة للاستدعاء بواسطة الوكيل. يضيف دعم موفّر جلب الويب. يضيف دعم موفّر بحث الويب. | `@openclaw/firecrawl-plugin`<br />مضمّن في OpenClaw | contracts: tools, webFetchProviders, webSearchProviders |
| [fireworks](/ar/plugins/reference/fireworks) | يضيف دعم موفّر نماذج Fireworks إلى OpenClaw. | `@openclaw/fireworks-provider`<br />مضمّن في OpenClaw | providers: fireworks |
| [github-copilot](/ar/plugins/reference/github-copilot) | يضيف دعم موفّر نماذج GitHub Copilot إلى OpenClaw. | `@openclaw/github-copilot-provider`<br />مضمّن في OpenClaw | providers: github-copilot; contracts: memoryEmbeddingProviders |
| [google](/ar/plugins/reference/google) | يضيف دعم موفّري نماذج Google وGoogle Gemini CLI وGoogle Vertex إلى OpenClaw. | `@openclaw/google-plugin`<br />مضمّن في OpenClaw | providers: google, google-gemini-cli, google-vertex; contracts: imageGenerationProviders, mediaUnderstandingProviders, memoryEmbeddingProviders, musicGenerationProviders, realtimeVoiceProviders, speechProviders, videoGenerationProviders, webSearchProviders |
| [gradium](/ar/plugins/reference/gradium) | يضيف دعم موفّر تحويل النص إلى كلام. | `@openclaw/gradium-speech`<br />مضمّن في OpenClaw | contracts: speechProviders |
| [groq](/ar/plugins/reference/groq) | يضيف دعم موفّر نماذج Groq إلى OpenClaw. | `@openclaw/groq-provider`<br />مضمّن في OpenClaw | providers: groq; contracts: mediaUnderstandingProviders |
| [huggingface](/ar/plugins/reference/huggingface) | يضيف دعم موفّر نماذج Hugging Face إلى OpenClaw. | `@openclaw/huggingface-provider`<br />مضمّن في OpenClaw | providers: huggingface |
| [imessage](/ar/plugins/reference/imessage) | يضيف سطح قناة iMessage لإرسال رسائل OpenClaw واستلامها. | `@openclaw/imessage`<br />مضمّن في OpenClaw | channels: imessage |
| [inworld](/ar/plugins/reference/inworld) | تحويل النص إلى كلام بالبث من Inworld (MP3 وOGG_OPUS وPCM للاتصالات الهاتفية). | `@openclaw/inworld-speech`<br />مضمّن في OpenClaw | contracts: speechProviders |
| [irc](/ar/plugins/reference/irc) | يضيف سطح قناة IRC لإرسال رسائل OpenClaw واستلامها. | `@openclaw/irc`<br />مضمّن في OpenClaw | channels: irc |
| [kilocode](/ar/plugins/reference/kilocode) | يضيف دعم موفّر نماذج Kilocode إلى OpenClaw. | `@openclaw/kilocode-provider`<br />مضمّن في OpenClaw | providers: kilocode |
| [kimi](/ar/plugins/reference/kimi) | يضيف دعم موفّري نماذج Kimi وKimi Coding إلى OpenClaw. | `@openclaw/kimi-provider`<br />مضمّن في OpenClaw | providers: kimi, kimi-coding |
| [litellm](/ar/plugins/reference/litellm) | يضيف دعم موفّر نماذج LiteLLM إلى OpenClaw. | `@openclaw/litellm-provider`<br />مضمّن في OpenClaw | providers: litellm; contracts: imageGenerationProviders |
| [llm-task](/ar/plugins/reference/llm-task) | أداة LLM عامة بتنسيق JSON فقط للمهام المهيكلة والقابلة للاستدعاء من سير العمل. | `@openclaw/llm-task`<br />مضمّن في OpenClaw | contracts: tools |
| [lmstudio](/ar/plugins/reference/lmstudio) | يضيف دعم موفّر نماذج LM Studio إلى OpenClaw. | `@openclaw/lmstudio-provider`<br />مضمّن في OpenClaw | providers: lmstudio; contracts: memoryEmbeddingProviders |
| [matrix](/ar/plugins/reference/matrix) | يضيف سطح قناة Matrix لإرسال رسائل OpenClaw واستلامها. | `@openclaw/matrix`<br />مضمّن في OpenClaw | channels: matrix |
| [duckduckgo](/ar/plugins/reference/duckduckgo) | يضيف دعم موفر بحث الويب. | `@openclaw/duckduckgo-plugin`<br />مضمَّن في OpenClaw | العقود: webSearchProviders |
| [elevenlabs](/ar/plugins/reference/elevenlabs) | يضيف دعم موفر فهم الوسائط. يضيف دعم موفر النسخ الفوري. يضيف دعم موفر تحويل النص إلى كلام. | `@openclaw/elevenlabs-speech`<br />مضمَّن في OpenClaw | العقود: mediaUnderstandingProviders, realtimeTranscriptionProviders, speechProviders |
| [exa](/ar/plugins/reference/exa) | يضيف دعم موفر بحث الويب. | `@openclaw/exa-plugin`<br />مضمَّن في OpenClaw | العقود: webSearchProviders |
| [fal](/ar/plugins/reference/fal) | يضيف دعم موفر نموذج fal إلى OpenClaw. | `@openclaw/fal-provider`<br />مضمَّن في OpenClaw | الموفرون: fal؛ العقود: imageGenerationProviders, videoGenerationProviders |
| [file-transfer](/ar/plugins/reference/file-transfer) | يجلب الملفات ويسردها ويكتبها على العقد المقترنة عبر أوامر عقدة مخصصة. يتجاوز اقتطاع stdout في bash باستخدام base64 عبر node.invoke للملفات الثنائية حتى 16 MB. | `@openclaw/file-transfer`<br />مضمَّن في OpenClaw | العقود: tools |
| [firecrawl](/ar/plugins/reference/firecrawl) | يضيف أدوات قابلة للاستدعاء من الوكيل. يضيف دعم موفر جلب الويب. يضيف دعم موفر بحث الويب. | `@openclaw/firecrawl-plugin`<br />مضمَّن في OpenClaw | العقود: tools, webFetchProviders, webSearchProviders |
| [fireworks](/ar/plugins/reference/fireworks) | يضيف دعم موفر نموذج Fireworks إلى OpenClaw. | `@openclaw/fireworks-provider`<br />مضمَّن في OpenClaw | الموفرون: fireworks |
| [github-copilot](/ar/plugins/reference/github-copilot) | يضيف دعم موفر نموذج GitHub Copilot إلى OpenClaw. | `@openclaw/github-copilot-provider`<br />مضمَّن في OpenClaw | الموفرون: github-copilot؛ العقود: memoryEmbeddingProviders |
| [google](/ar/plugins/reference/google) | يضيف دعم موفر نماذج Google وGoogle Gemini CLI وGoogle Vertex إلى OpenClaw. | `@openclaw/google-plugin`<br />مضمَّن في OpenClaw | الموفرون: google, google-gemini-cli, google-vertex؛ العقود: imageGenerationProviders, mediaUnderstandingProviders, memoryEmbeddingProviders, musicGenerationProviders, realtimeVoiceProviders, speechProviders, videoGenerationProviders, webSearchProviders |
| [gradium](/ar/plugins/reference/gradium) | يضيف دعم موفر تحويل النص إلى كلام. | `@openclaw/gradium-speech`<br />مضمَّن في OpenClaw | العقود: speechProviders |
| [groq](/ar/plugins/reference/groq) | يضيف دعم موفر نموذج Groq إلى OpenClaw. | `@openclaw/groq-provider`<br />مضمَّن في OpenClaw | الموفرون: groq؛ العقود: mediaUnderstandingProviders |
| [huggingface](/ar/plugins/reference/huggingface) | يضيف دعم موفر نموذج Hugging Face إلى OpenClaw. | `@openclaw/huggingface-provider`<br />مضمَّن في OpenClaw | الموفرون: huggingface |
| [imessage](/ar/plugins/reference/imessage) | يضيف سطح قناة iMessage لإرسال رسائل OpenClaw واستلامها. | `@openclaw/imessage`<br />مضمَّن في OpenClaw | القنوات: imessage |
| [inworld](/ar/plugins/reference/inworld) | تحويل النص إلى كلام بالبث من Inworld (MP3، وOGG_OPUS، وPCM للاتصالات الهاتفية). | `@openclaw/inworld-speech`<br />مضمَّن في OpenClaw | العقود: speechProviders |
| [irc](/ar/plugins/reference/irc) | يضيف سطح قناة IRC لإرسال رسائل OpenClaw واستلامها. | `@openclaw/irc`<br />مضمَّن في OpenClaw | القنوات: irc |
| [kilocode](/ar/plugins/reference/kilocode) | يضيف دعم موفر نموذج Kilocode إلى OpenClaw. | `@openclaw/kilocode-provider`<br />مضمَّن في OpenClaw | الموفرون: kilocode |
| [kimi](/ar/plugins/reference/kimi) | يضيف دعم موفر نماذج Kimi وKimi Coding إلى OpenClaw. | `@openclaw/kimi-provider`<br />مضمَّن في OpenClaw | الموفرون: kimi, kimi-coding |
| [litellm](/ar/plugins/reference/litellm) | يضيف دعم موفر نموذج LiteLLM إلى OpenClaw. | `@openclaw/litellm-provider`<br />مضمَّن في OpenClaw | الموفرون: litellm؛ العقود: imageGenerationProviders |
| [llm-task](/ar/plugins/reference/llm-task) | أداة LLM عامة تعمل بـ JSON فقط للمهام المهيكلة القابلة للاستدعاء من سير العمل. | `@openclaw/llm-task`<br />مضمَّن في OpenClaw | العقود: tools |
| [lmstudio](/ar/plugins/reference/lmstudio) | يضيف دعم موفر نموذج LM Studio إلى OpenClaw. | `@openclaw/lmstudio-provider`<br />مضمَّن في OpenClaw | الموفرون: lmstudio؛ العقود: memoryEmbeddingProviders |
| [matrix](/ar/plugins/reference/matrix) | يضيف سطح قناة Matrix لإرسال رسائل OpenClaw واستلامها. | `@openclaw/matrix`<br />مضمَّن في OpenClaw | القنوات: matrix |
| [mattermost](/ar/plugins/reference/mattermost) | يضيف واجهة قناة Mattermost لإرسال رسائل OpenClaw واستقبالها. | `@openclaw/mattermost`<br />مضمّن في OpenClaw | channels: mattermost |
| [memory-core](/ar/plugins/reference/memory-core) | يضيف دعم موفّري تضمين الذاكرة. يضيف أدوات يمكن للوكيل استدعاؤها. | `@openclaw/memory-core`<br />مضمّن في OpenClaw | contracts: memoryEmbeddingProviders, tools |
| [memory-wiki](/ar/plugins/reference/memory-wiki) | مصرّف wiki مستمر وخزنة معرفة ملائمة لـ Obsidian من أجل OpenClaw. | `@openclaw/memory-wiki`<br />مضمّن في OpenClaw | contracts: tools; skills |
| [microsoft](/ar/plugins/reference/microsoft) | يضيف دعم موفّر تحويل النص إلى كلام. | `@openclaw/microsoft-speech`<br />مضمّن في OpenClaw | contracts: speechProviders |
| [microsoft-foundry](/ar/plugins/reference/microsoft-foundry) | يضيف دعم موفّر نماذج Microsoft Foundry إلى OpenClaw. | `@openclaw/microsoft-foundry`<br />مضمّن في OpenClaw | providers: microsoft-foundry |
| [migrate-claude](/ar/plugins/reference/migrate-claude) | يستورد تعليمات Claude Code وClaude Desktop وخوادم MCP وSkills والتكوين الآمن إلى OpenClaw. | `@openclaw/migrate-claude`<br />مضمّن في OpenClaw | contracts: migrationProviders |
| [migrate-hermes](/ar/plugins/reference/migrate-hermes) | يستورد تكوين Hermes والذكريات وSkills وبيانات الاعتماد المدعومة إلى OpenClaw. | `@openclaw/migrate-hermes`<br />مضمّن في OpenClaw | contracts: migrationProviders |
| [minimax](/ar/plugins/reference/minimax) | يضيف دعم موفّري نماذج MiniMax وMiniMax Portal إلى OpenClaw. | `@openclaw/minimax-provider`<br />مضمّن في OpenClaw | providers: minimax, minimax-portal; contracts: imageGenerationProviders, mediaUnderstandingProviders, musicGenerationProviders, speechProviders, videoGenerationProviders, webSearchProviders |
| [mistral](/ar/plugins/reference/mistral) | يضيف دعم موفّر نماذج Mistral إلى OpenClaw. | `@openclaw/mistral-provider`<br />مضمّن في OpenClaw | providers: mistral; contracts: mediaUnderstandingProviders, memoryEmbeddingProviders, realtimeTranscriptionProviders |
| [moonshot](/ar/plugins/reference/moonshot) | يضيف دعم موفّر نماذج Moonshot إلى OpenClaw. | `@openclaw/moonshot-provider`<br />مضمّن في OpenClaw | providers: moonshot; contracts: mediaUnderstandingProviders, webSearchProviders |
| [nvidia](/ar/plugins/reference/nvidia) | يضيف دعم موفّر نماذج NVIDIA إلى OpenClaw. | `@openclaw/nvidia-provider`<br />مضمّن في OpenClaw | providers: nvidia |
| [ollama](/ar/plugins/reference/ollama) | يضيف دعم موفّر نماذج Ollama إلى OpenClaw. | `@openclaw/ollama-provider`<br />مضمّن في OpenClaw | providers: ollama; contracts: memoryEmbeddingProviders, webSearchProviders |
| [memory-core](/ar/plugins/reference/memory-core) | يضيف دعم موفري تضمينات الذاكرة. يضيف أدوات قابلة للاستدعاء بواسطة الوكيل. | `@openclaw/memory-core`<br />مضمّن في OpenClaw | contracts: memoryEmbeddingProviders, tools |
| [memory-wiki](/ar/plugins/reference/memory-wiki) | مصرّف wiki دائم وخزنة معرفة متوافقة مع Obsidian لـ OpenClaw. | `@openclaw/memory-wiki`<br />مضمّن في OpenClaw | contracts: tools; skills |
| [microsoft](/ar/plugins/reference/microsoft) | يضيف دعم موفري تحويل النص إلى كلام. | `@openclaw/microsoft-speech`<br />مضمّن في OpenClaw | contracts: speechProviders |
| [microsoft-foundry](/ar/plugins/reference/microsoft-foundry) | يضيف دعم موفر نماذج Microsoft Foundry إلى OpenClaw. | `@openclaw/microsoft-foundry`<br />مضمّن في OpenClaw | providers: microsoft-foundry |
| [migrate-claude](/ar/plugins/reference/migrate-claude) | يستورد تعليمات Claude Code وClaude Desktop، وخوادم MCP، وSkills، والتكوين الآمن إلى OpenClaw. | `@openclaw/migrate-claude`<br />مضمّن في OpenClaw | contracts: migrationProviders |
| [migrate-hermes](/ar/plugins/reference/migrate-hermes) | يستورد تكوين Hermes، والذكريات، وSkills، وبيانات الاعتماد المدعومة إلى OpenClaw. | `@openclaw/migrate-hermes`<br />مضمّن في OpenClaw | contracts: migrationProviders |
| [minimax](/ar/plugins/reference/minimax) | يضيف دعم موفري نماذج MiniMax وMiniMax Portal إلى OpenClaw. | `@openclaw/minimax-provider`<br />مضمّن في OpenClaw | providers: minimax, minimax-portal; contracts: imageGenerationProviders, mediaUnderstandingProviders, musicGenerationProviders, speechProviders, videoGenerationProviders, webSearchProviders |
| [mistral](/ar/plugins/reference/mistral) | يضيف دعم موفر نماذج Mistral إلى OpenClaw. | `@openclaw/mistral-provider`<br />مضمّن في OpenClaw | providers: mistral; contracts: mediaUnderstandingProviders, memoryEmbeddingProviders, realtimeTranscriptionProviders |
| [moonshot](/ar/plugins/reference/moonshot) | يضيف دعم موفر نماذج Moonshot إلى OpenClaw. | `@openclaw/moonshot-provider`<br />مضمّن في OpenClaw | providers: moonshot; contracts: mediaUnderstandingProviders, webSearchProviders |
| [nvidia](/ar/plugins/reference/nvidia) | يضيف دعم موفر نماذج NVIDIA إلى OpenClaw. | `@openclaw/nvidia-provider`<br />مضمّن في OpenClaw | providers: nvidia |
| [ollama](/ar/plugins/reference/ollama) | يضيف دعم موفر نماذج Ollama إلى OpenClaw. | `@openclaw/ollama-provider`<br />مضمّن في OpenClaw | providers: ollama; contracts: memoryEmbeddingProviders, webSearchProviders |
| [open-prose](/ar/plugins/reference/open-prose) | حزمة Skills لـ OpenProse VM مع أمر slash /prose. | `@openclaw/open-prose`<br />مضمّن في OpenClaw | skills |
| [openai](/ar/plugins/reference/openai) | يضيف دعم موفّري نماذج OpenAI وOpenAI Codex إلى OpenClaw. | `@openclaw/openai-provider`<br />مضمّن في OpenClaw | providers: openai, openai-codex; contracts: imageGenerationProviders, mediaUnderstandingProviders, memoryEmbeddingProviders, realtimeTranscriptionProviders, realtimeVoiceProviders, speechProviders, videoGenerationProviders |
| [opencode](/ar/plugins/reference/opencode) | يضيف دعم موفّر نماذج OpenCode إلى OpenClaw. | `@openclaw/opencode-provider`<br />مضمّن في OpenClaw | providers: opencode; contracts: mediaUnderstandingProviders |
| [opencode-go](/ar/plugins/reference/opencode-go) | يضيف دعم موفّر نماذج OpenCode Go إلى OpenClaw. | `@openclaw/opencode-go-provider`<br />مضمّن في OpenClaw | providers: opencode-go; contracts: mediaUnderstandingProviders |
| [openrouter](/ar/plugins/reference/openrouter) | يضيف دعم موفّر نماذج OpenRouter إلى OpenClaw. | `@openclaw/openrouter-provider`<br />مضمّن في OpenClaw | providers: openrouter; contracts: imageGenerationProviders, mediaUnderstandingProviders, speechProviders, videoGenerationProviders |
| [openshell](/ar/plugins/reference/openshell) | خلفية Sandbox مدعومة بواسطة OpenShell مع مساحات عمل محلية معكوسة وتنفيذ أوامر قائم على SSH. | `@openclaw/openshell-sandbox`<br />مضمّن في OpenClaw | plugin |
| [perplexity](/ar/plugins/reference/perplexity) | يضيف دعم موفّر بحث الويب. | `@openclaw/perplexity-plugin`<br />مضمّن في OpenClaw | contracts: webSearchProviders |
| [qianfan](/ar/plugins/reference/qianfan) | يضيف دعم موفّر نماذج Qianfan إلى OpenClaw. | `@openclaw/qianfan-provider`<br />مضمّن في OpenClaw | providers: qianfan |
| [qwen](/ar/plugins/reference/qwen) | يضيف دعم موفّري نماذج Qwen وQwen Cloud وModel Studio وDashScope إلى OpenClaw. | `@openclaw/qwen-provider`<br />مضمّن في OpenClaw | providers: qwen, qwencloud, modelstudio, dashscope; contracts: mediaUnderstandingProviders, videoGenerationProviders |
| [runway](/ar/plugins/reference/runway) | يضيف دعم موفّر إنشاء الفيديو. | `@openclaw/runway-provider`<br />مضمّن في OpenClaw | contracts: videoGenerationProviders |
| [searxng](/ar/plugins/reference/searxng) | يضيف دعم موفّر بحث الويب. | `@openclaw/searxng-plugin`<br />مضمّن في OpenClaw | contracts: webSearchProviders |
| [openai](/ar/plugins/reference/openai) | يضيف دعم موفري نماذج OpenAI وOpenAI Codex إلى OpenClaw. | `@openclaw/openai-provider`<br />مضمّن في OpenClaw | providers: openai, openai-codex; contracts: imageGenerationProviders, mediaUnderstandingProviders, memoryEmbeddingProviders, realtimeTranscriptionProviders, realtimeVoiceProviders, speechProviders, videoGenerationProviders |
| [opencode](/ar/plugins/reference/opencode) | يضيف دعم موفر نماذج OpenCode إلى OpenClaw. | `@openclaw/opencode-provider`<br />مضمّن في OpenClaw | providers: opencode; contracts: mediaUnderstandingProviders |
| [opencode-go](/ar/plugins/reference/opencode-go) | يضيف دعم موفر نماذج OpenCode Go إلى OpenClaw. | `@openclaw/opencode-go-provider`<br />مضمّن في OpenClaw | providers: opencode-go; contracts: mediaUnderstandingProviders |
| [openrouter](/ar/plugins/reference/openrouter) | يضيف دعم موفر نماذج OpenRouter إلى OpenClaw. | `@openclaw/openrouter-provider`<br />مضمّن في OpenClaw | providers: openrouter; contracts: imageGenerationProviders, mediaUnderstandingProviders, speechProviders, videoGenerationProviders |
| [openshell](/ar/plugins/reference/openshell) | واجهة خلفية لصندوق الحماية مدعومة من OpenShell مع مساحات عمل محلية معكوسة وتنفيذ أوامر قائم على SSH. | `@openclaw/openshell-sandbox`<br />مضمّن في OpenClaw | plugin |
| [perplexity](/ar/plugins/reference/perplexity) | يضيف دعم موفري بحث الويب. | `@openclaw/perplexity-plugin`<br />مضمّن في OpenClaw | contracts: webSearchProviders |
| [qianfan](/ar/plugins/reference/qianfan) | يضيف دعم موفر نماذج Qianfan إلى OpenClaw. | `@openclaw/qianfan-provider`<br />مضمّن في OpenClaw | providers: qianfan |
| [qwen](/ar/plugins/reference/qwen) | يضيف دعم موفري نماذج Qwen وQwen Cloud وModel Studio وDashScope إلى OpenClaw. | `@openclaw/qwen-provider`<br />مضمّن في OpenClaw | providers: qwen, qwencloud, modelstudio, dashscope; contracts: mediaUnderstandingProviders, videoGenerationProviders |
| [runway](/ar/plugins/reference/runway) | يضيف دعم موفّر توليد الفيديو. | `@openclaw/runway-provider`<br />مضمّن في OpenClaw | contracts: videoGenerationProviders |
| [searxng](/ar/plugins/reference/searxng) | يضيف دعم موفّر البحث على الويب. | `@openclaw/searxng-plugin`<br />مضمّن في OpenClaw | contracts: webSearchProviders |
| [senseaudio](/ar/plugins/reference/senseaudio) | يضيف دعم موفّر فهم الوسائط. | `@openclaw/senseaudio-provider`<br />مضمّن في OpenClaw | contracts: mediaUnderstandingProviders |
| [sglang](/ar/plugins/reference/sglang) | يضيف دعم موفّر نماذج SGLang إلى OpenClaw. | `@openclaw/sglang-provider`<br />مضمّن في OpenClaw | providers: sglang |
| [signal](/ar/plugins/reference/signal) | يضيف سطح قناة Signal لإرسال رسائل OpenClaw واستقبالها. | `@openclaw/signal`<br />مضمّن في OpenClaw | channels: signal |
| [skill-workshop](/ar/plugins/reference/skill-workshop) | يلتقط سير العمل القابل للتكرار على هيئة Skills لمساحة العمل، مع مراجعة معلّقة وكتابات آمنة وتحديث لموجّه المهارة. | `@openclaw/skill-workshop`<br />مضمّن في OpenClaw | contracts: tools |
| [slack](/ar/plugins/reference/slack) | يضيف سطح قناة Slack لإرسال رسائل OpenClaw واستقبالها. | `@openclaw/slack`<br />مضمّن في OpenClaw | channels: slack |
| [signal](/ar/plugins/reference/signal) | يضيف واجهة قناة Signal لإرسال رسائل OpenClaw وتلقيها. | `@openclaw/signal`<br />مضمّن في OpenClaw | channels: signal |
| [skill-workshop](/ar/plugins/reference/skill-workshop) | يلتقط مهام سير العمل القابلة للتكرار على هيئة Skills في مساحة العمل، مع مراجعة معلّقة، وكتابات آمنة، وتحديث موجّه Skill. | `@openclaw/skill-workshop`<br />مضمّن في OpenClaw | contracts: tools |
| [slack](/ar/plugins/reference/slack) | يضيف واجهة قناة Slack لإرسال رسائل OpenClaw وتلقيها. | `@openclaw/slack`<br />مضمّن في OpenClaw | channels: slack |
| [stepfun](/ar/plugins/reference/stepfun) | يضيف دعم موفّر نماذج StepFun وStepFun Plan إلى OpenClaw. | `@openclaw/stepfun-provider`<br />مضمّن في OpenClaw | providers: stepfun, stepfun-plan |
| [synthetic](/ar/plugins/reference/synthetic) | يضيف دعم موفّر نماذج Synthetic إلى OpenClaw. | `@openclaw/synthetic-provider`<br />مضمّن في OpenClaw | providers: synthetic |
| [tavily](/ar/plugins/reference/tavily) | يضيف أدوات يمكن للوكيل استدعاؤها. يضيف دعم موفّر بحث الويب. | `@openclaw/tavily-plugin`<br />مضمّن في OpenClaw | contracts: tools, webSearchProviders; skills |
| [telegram](/ar/plugins/reference/telegram) | يضيف سطح قناة Telegram لإرسال رسائل OpenClaw واستقبالها. | `@openclaw/telegram`<br />مضمّن في OpenClaw | channels: telegram |
| [tavily](/ar/plugins/reference/tavily) | يضيف أدوات قابلة للاستدعاء من الوكيل. يضيف دعم موفّر البحث على الويب. | `@openclaw/tavily-plugin`<br />مضمّن في OpenClaw | contracts: tools, webSearchProviders; skills |
| [telegram](/ar/plugins/reference/telegram) | يضيف واجهة قناة Telegram لإرسال رسائل OpenClaw وتلقيها. | `@openclaw/telegram`<br />مضمّن في OpenClaw | channels: telegram |
| [tencent](/ar/plugins/reference/tencent) | يضيف دعم موفّر نماذج Tencent TokenHub إلى OpenClaw. | `@openclaw/tencent-provider`<br />مضمّن في OpenClaw | providers: tencent-tokenhub |
| [together](/ar/plugins/reference/together) | يضيف دعم موفّر نماذج Together إلى OpenClaw. | `@openclaw/together-provider`<br />مضمّن في OpenClaw | providers: together; contracts: videoGenerationProviders |
| [tokenjuice](/ar/plugins/reference/tokenjuice) | يضغط نتائج أداتي exec وbash باستخدام مخفّضات tokenjuice. | `@openclaw/tokenjuice`<br />مضمّن في OpenClaw | contracts: agentToolResultMiddleware |
| [tokenjuice](/ar/plugins/reference/tokenjuice) | يضغط نتائج أداتي exec وbash باستخدام مختزِلات tokenjuice. | `@openclaw/tokenjuice`<br />مضمّن في OpenClaw | contracts: agentToolResultMiddleware |
| [tts-local-cli](/ar/plugins/reference/tts-local-cli) | يضيف دعم موفّر تحويل النص إلى كلام. | `@openclaw/tts-local-cli`<br />مضمّن في OpenClaw | contracts: speechProviders |
| [venice](/ar/plugins/reference/venice) | يضيف دعم موفّر نماذج Venice إلى OpenClaw. | `@openclaw/venice-provider`<br />مضمّن في OpenClaw | providers: venice |
| [vercel-ai-gateway](/ar/plugins/reference/vercel-ai-gateway) | يضيف دعم موفّر نماذج Vercel AI Gateway إلى OpenClaw. | `@openclaw/vercel-ai-gateway-provider`<br />مضمّن في OpenClaw | providers: vercel-ai-gateway |
@ -118,46 +139,46 @@ Plugin المضمّنة من `extensions/<id>` بحيث تكون التعديل
| [volcengine](/ar/plugins/reference/volcengine) | يضيف دعم موفّر نماذج Volcengine وVolcengine Plan إلى OpenClaw. | `@openclaw/volcengine-provider`<br />مضمّن في OpenClaw | providers: volcengine, volcengine-plan; contracts: speechProviders |
| [voyage](/ar/plugins/reference/voyage) | يضيف دعم موفّر تضمين الذاكرة. | `@openclaw/voyage-provider`<br />مضمّن في OpenClaw | contracts: memoryEmbeddingProviders |
| [vydra](/ar/plugins/reference/vydra) | يضيف دعم موفّر نماذج Vydra إلى OpenClaw. | `@openclaw/vydra-provider`<br />مضمّن في OpenClaw | providers: vydra; contracts: imageGenerationProviders, speechProviders, videoGenerationProviders |
| [web-readability](/ar/plugins/reference/web-readability) | يستخرج محتوى المقالة القابل للقراءة من استجابات جلب ويب HTML المحلية. | `@openclaw/web-readability-plugin`<br />مضمّن في OpenClaw | contracts: webContentExtractors |
| [webhooks](/ar/plugins/reference/webhooks) | Webhooks واردة موثّقة تربط الأتمتة الخارجية بـ OpenClaw TaskFlows. | `@openclaw/webhooks`<br />مضمّن في OpenClaw | plugin |
| [xai](/ar/plugins/reference/xai) | يضيف دعم مزوّد نماذج xAI إلى OpenClaw. | `@openclaw/xai-plugin`<br />مضمّن في OpenClaw | providers: xai; contracts: imageGenerationProviders, mediaUnderstandingProviders, realtimeTranscriptionProviders, speechProviders, tools, videoGenerationProviders, webSearchProviders |
| [xiaomi](/ar/plugins/reference/xiaomi) | يضيف دعم مزوّد نماذج Xiaomi إلى OpenClaw. | `@openclaw/xiaomi-provider`<br />مضمّن في OpenClaw | providers: xiaomi; contracts: speechProviders |
| [zai](/ar/plugins/reference/zai) | يضيف دعم مزوّد نماذج Z.AI إلى OpenClaw. | `@openclaw/zai-provider`<br />مضمّن في OpenClaw | providers: zai; contracts: mediaUnderstandingProviders |
| [web-readability](/ar/plugins/reference/web-readability) | يستخرج محتوى المقالة القابل للقراءة من استجابات جلب الويب المحلية بتنسيق HTML. | `@openclaw/web-readability-plugin`<br />مضمّن في OpenClaw | contracts: webContentExtractors |
| [webhooks](/ar/plugins/reference/webhooks) | Webhooks واردة مصادق عليها تربط الأتمتة الخارجية بـ TaskFlows في OpenClaw. | `@openclaw/webhooks`<br />مضمّن في OpenClaw | Plugin |
| [xai](/ar/plugins/reference/xai) | يضيف دعم موفّر نماذج xAI إلى OpenClaw. | `@openclaw/xai-plugin`<br />مضمّن في OpenClaw | providers: xai; contracts: imageGenerationProviders, mediaUnderstandingProviders, realtimeTranscriptionProviders, speechProviders, tools, videoGenerationProviders, webSearchProviders |
| [xiaomi](/ar/plugins/reference/xiaomi) | يضيف دعم موفّر نماذج Xiaomi إلى OpenClaw. | `@openclaw/xiaomi-provider`<br />مضمّن في OpenClaw | providers: xiaomi; contracts: speechProviders |
| [zai](/ar/plugins/reference/zai) | يضيف دعم موفّر نماذج Z.AI إلى OpenClaw. | `@openclaw/zai-provider`<br />مضمّن في OpenClaw | providers: zai; contracts: mediaUnderstandingProviders |
## الحزم الخارجية الرسمية
| Plugin | الوصف | التوزيع | السطح |
| ------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------- |
| [acpx](/ar/plugins/reference/acpx) | خلفية وقت تشغيل ACP مضمّنة مع إدارة الجلسات والنقل المملوكة لـ Plugin. | `@openclaw/acpx`<br />npm; ClawHub | Skills |
| [bluebubbles](/ar/plugins/reference/bluebubbles) | يضيف سطح قناة BlueBubbles لإرسال رسائل OpenClaw واستقبالها. | `@openclaw/bluebubbles`<br />npm; ClawHub | القنوات: bluebubbles |
| [brave](/ar/plugins/reference/brave) | يضيف دعم موفّر بحث الويب. | `@openclaw/brave-plugin`<br />npm; ClawHub | العقود: webSearchProviders |
| [codex](/ar/plugins/reference/codex) | إطار خادم تطبيق Codex وفهرس نماذج GPT المُدار بواسطة Codex. | `@openclaw/codex`<br />npm; ClawHub | الموفّرون: codex; العقود: mediaUnderstandingProviders, migrationProviders |
| [diagnostics-otel](/ar/plugins/reference/diagnostics-otel) | مُصدّر تشخيصات OpenClaw إلى OpenTelemetry. | `@openclaw/diagnostics-otel`<br />npm; ClawHub: `clawhub:@openclaw/diagnostics-otel` | Plugin |
| [diagnostics-prometheus](/ar/plugins/reference/diagnostics-prometheus) | مُصدّر تشخيصات OpenClaw إلى Prometheus. | `@openclaw/diagnostics-prometheus`<br />npm; ClawHub: `clawhub:@openclaw/diagnostics-prometheus` | Plugin |
| [diffs](/ar/plugins/reference/diffs) | عارض فروقات ومصيّر ملفات للقراءة فقط للوكلاء. | `@openclaw/diffs`<br />npm; ClawHub | العقود: الأدوات; Skills |
| [discord](/ar/plugins/reference/discord) | يضيف سطح قناة Discord لإرسال رسائل OpenClaw واستقبالها. | `@openclaw/discord`<br />npm; ClawHub | القنوات: discord |
| [feishu](/ar/plugins/reference/feishu) | يضيف سطح قناة Feishu لإرسال رسائل OpenClaw واستقبالها. | `@openclaw/feishu`<br />npm; ClawHub | القنوات: feishu; العقود: الأدوات; Skills |
| [google-meet](/ar/plugins/reference/google-meet) | الانضمام إلى مكالمات Google Meet عبر عمليات نقل Chrome أو Twilio. | `@openclaw/google-meet`<br />npm; ClawHub | العقود: الأدوات |
| [googlechat](/ar/plugins/reference/googlechat) | يضيف سطح قناة Google Chat لإرسال رسائل OpenClaw واستقبالها. | `@openclaw/googlechat`<br />npm; ClawHub | القنوات: googlechat |
| [line](/ar/plugins/reference/line) | يضيف سطح قناة LINE لإرسال رسائل OpenClaw واستقبالها. | `@openclaw/line`<br />npm; ClawHub | القنوات: line |
| [lobster](/ar/plugins/reference/lobster) | أداة سير عمل نمطية مع موافقات قابلة للاستئناف. | `@openclaw/lobster`<br />npm; ClawHub | العقود: الأدوات |
| [memory-lancedb](/ar/plugins/reference/memory-lancedb) | يضيف أدوات قابلة للاستدعاء من الوكلاء. | `@openclaw/memory-lancedb`<br />npm; ClawHub | العقود: الأدوات |
| [msteams](/ar/plugins/reference/msteams) | يضيف سطح قناة Microsoft Teams لإرسال رسائل OpenClaw واستقبالها. | `@openclaw/msteams`<br />npm; ClawHub | القنوات: msteams |
| [nextcloud-talk](/ar/plugins/reference/nextcloud-talk) | يضيف سطح قناة Nextcloud Talk لإرسال رسائل OpenClaw واستقبالها. | `@openclaw/nextcloud-talk`<br />npm; ClawHub | القنوات: nextcloud-talk |
| [nostr](/ar/plugins/reference/nostr) | يضيف سطح قناة Nostr لإرسال رسائل OpenClaw واستقبالها. | `@openclaw/nostr`<br />npm; ClawHub | القنوات: nostr |
| [qqbot](/ar/plugins/reference/qqbot) | يضيف سطح قناة QQ Bot لإرسال رسائل OpenClaw واستقبالها. | `@openclaw/qqbot`<br />npm; ClawHub | القنوات: qqbot; العقود: الأدوات; Skills |
| [synology-chat](/ar/plugins/reference/synology-chat) | يضيف سطح قناة Synology Chat لإرسال رسائل OpenClaw واستقبالها. | `@openclaw/synology-chat`<br />npm; ClawHub | القنوات: synology-chat |
| [tlon](/ar/plugins/reference/tlon) | يضيف سطح قناة Tlon لإرسال رسائل OpenClaw واستقبالها. | `@openclaw/tlon`<br />npm; ClawHub | القنوات: tlon; العقود: الأدوات; Skills |
| [twitch](/ar/plugins/reference/twitch) | يضيف سطح قناة Twitch لإرسال رسائل OpenClaw واستقبالها. | `@openclaw/twitch`<br />npm; ClawHub | القنوات: twitch |
| [voice-call](/ar/plugins/reference/voice-call) | يضيف أدوات قابلة للاستدعاء من الوكلاء. | `@openclaw/voice-call`<br />npm; ClawHub | العقود: الأدوات |
| [whatsapp](/ar/plugins/reference/whatsapp) | يضيف سطح قناة WhatsApp لإرسال رسائل OpenClaw واستقبالها. | `@openclaw/whatsapp`<br />npm; ClawHub | القنوات: whatsapp |
| [zalo](/ar/plugins/reference/zalo) | يضيف سطح قناة Zalo لإرسال رسائل OpenClaw واستقبالها. | `@openclaw/zalo`<br />npm; ClawHub | القنوات: zalo |
| [zalouser](/ar/plugins/reference/zalouser) | يضيف سطح قناة Zalo Personal لإرسال رسائل OpenClaw واستقبالها. | `@openclaw/zalouser`<br />npm; ClawHub | القنوات: zalouser; العقود: الأدوات |
| Plugin | الوصف | التوزيع | السطح |
| ------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------- |
| [acpx](/ar/plugins/reference/acpx) | واجهة خلفية مضمّنة لوقت تشغيل ACP مع إدارة الجلسات والنقل المملوكة للـ Plugin. | `@openclaw/acpx`<br />npm; ClawHub | skills |
| [bluebubbles](/ar/plugins/reference/bluebubbles) | يضيف سطح قناة BlueBubbles لإرسال رسائل OpenClaw واستقبالها. | `@openclaw/bluebubbles`<br />npm; ClawHub | channels: bluebubbles |
| [brave](/ar/plugins/reference/brave) | يضيف دعم موفّر البحث على الويب. | `@openclaw/brave-plugin`<br />npm; ClawHub | contracts: webSearchProviders |
| [codex](/ar/plugins/reference/codex) | حاضنة خادم تطبيق Codex وكتالوج نماذج GPT المُدار بواسطة Codex. | `@openclaw/codex`<br />npm; ClawHub | providers: codex; contracts: mediaUnderstandingProviders, migrationProviders |
| [diagnostics-otel](/ar/plugins/reference/diagnostics-otel) | مُصدّر OpenTelemetry لتشخيصات OpenClaw. | `@openclaw/diagnostics-otel`<br />npm; ClawHub: `clawhub:@openclaw/diagnostics-otel` | plugin |
| [diagnostics-prometheus](/ar/plugins/reference/diagnostics-prometheus) | مُصدّر Prometheus لتشخيصات OpenClaw. | `@openclaw/diagnostics-prometheus`<br />npm; ClawHub: `clawhub:@openclaw/diagnostics-prometheus` | plugin |
| [diffs](/ar/plugins/reference/diffs) | عارض فروقات وقارئ ملفات للوكيل للقراءة فقط. | `@openclaw/diffs`<br />npm; ClawHub | contracts: tools; skills |
| [discord](/ar/plugins/reference/discord) | يضيف سطح قناة Discord لإرسال رسائل OpenClaw واستقبالها. | `@openclaw/discord`<br />npm; ClawHub | channels: discord |
| [feishu](/ar/plugins/reference/feishu) | يضيف سطح قناة Feishu لإرسال رسائل OpenClaw واستقبالها. | `@openclaw/feishu`<br />npm; ClawHub | channels: feishu; contracts: tools; skills |
| [google-meet](/ar/plugins/reference/google-meet) | الانضمام إلى مكالمات Google Meet عبر وسائل نقل Chrome أو Twilio. | `@openclaw/google-meet`<br />npm; ClawHub | contracts: tools |
| [googlechat](/ar/plugins/reference/googlechat) | يضيف سطح قناة Google Chat لإرسال رسائل OpenClaw واستقبالها. | `@openclaw/googlechat`<br />npm; ClawHub | channels: googlechat |
| [line](/ar/plugins/reference/line) | يضيف سطح قناة LINE لإرسال رسائل OpenClaw واستقبالها. | `@openclaw/line`<br />npm; ClawHub | channels: line |
| [lobster](/ar/plugins/reference/lobster) | أداة سير عمل ذات أنواع مع موافقات قابلة للاستئناف. | `@openclaw/lobster`<br />npm; ClawHub | contracts: tools |
| [memory-lancedb](/ar/plugins/reference/memory-lancedb) | يضيف أدوات قابلة للاستدعاء من الوكلاء. | `@openclaw/memory-lancedb`<br />npm; ClawHub | contracts: tools |
| [msteams](/ar/plugins/reference/msteams) | يضيف سطح قناة Microsoft Teams لإرسال رسائل OpenClaw واستقبالها. | `@openclaw/msteams`<br />npm; ClawHub | channels: msteams |
| [nextcloud-talk](/ar/plugins/reference/nextcloud-talk) | يضيف سطح قناة Nextcloud Talk لإرسال رسائل OpenClaw واستقبالها. | `@openclaw/nextcloud-talk`<br />npm; ClawHub | channels: nextcloud-talk |
| [nostr](/ar/plugins/reference/nostr) | يضيف سطح قناة Nostr لإرسال رسائل OpenClaw واستقبالها. | `@openclaw/nostr`<br />npm; ClawHub | channels: nostr |
| [qqbot](/ar/plugins/reference/qqbot) | يضيف سطح قناة QQ Bot لإرسال رسائل OpenClaw واستقبالها. | `@openclaw/qqbot`<br />npm; ClawHub | channels: qqbot; contracts: tools; skills |
| [synology-chat](/ar/plugins/reference/synology-chat) | يضيف سطح قناة Synology Chat لإرسال رسائل OpenClaw واستقبالها. | `@openclaw/synology-chat`<br />npm; ClawHub | channels: synology-chat |
| [tlon](/ar/plugins/reference/tlon) | يضيف سطح قناة Tlon لإرسال رسائل OpenClaw واستقبالها. | `@openclaw/tlon`<br />npm; ClawHub | channels: tlon; contracts: tools; skills |
| [twitch](/ar/plugins/reference/twitch) | يضيف سطح قناة Twitch لإرسال رسائل OpenClaw واستقبالها. | `@openclaw/twitch`<br />npm; ClawHub | channels: twitch |
| [voice-call](/ar/plugins/reference/voice-call) | يضيف أدوات قابلة للاستدعاء من الوكلاء. | `@openclaw/voice-call`<br />npm; ClawHub | contracts: tools |
| [whatsapp](/ar/plugins/reference/whatsapp) | يضيف سطح قناة WhatsApp لإرسال رسائل OpenClaw واستقبالها. | `@openclaw/whatsapp`<br />npm; ClawHub | channels: whatsapp |
| [zalo](/ar/plugins/reference/zalo) | يضيف سطح قناة Zalo لإرسال رسائل OpenClaw واستقبالها. | `@openclaw/zalo`<br />npm; ClawHub | channels: zalo |
| [zalouser](/ar/plugins/reference/zalouser) | يضيف سطح قناة Zalo Personal لإرسال رسائل OpenClaw واستقبالها. | `@openclaw/zalouser`<br />npm; ClawHub | channels: zalouser; contracts: tools |
## السحب من المصدر فقط
## سحب المصدر فقط
| Plugin | الوصف | التوزيع | السطح |
| ------------------------------------------- | --------------------------------------------------------------------- | ------------------------------------------------ | ------------------ |
| [qa-channel](/ar/plugins/reference/qa-channel) | يضيف سطح قناة QA Channel لإرسال رسائل OpenClaw واستقبالها. | `@openclaw/qa-channel`<br />السحب من المصدر فقط | القنوات: qa-channel |
| [qa-lab](/ar/plugins/reference/qa-lab) | OpenClaw QA lab Plugin مع واجهة مصحح أخطاء خاصة ومشغّل سيناريوهات. | `@openclaw/qa-lab`<br />السحب من المصدر فقط | Plugin |
| [qa-matrix](/ar/plugins/reference/qa-matrix) | مشغّل نقل Matrix QA والركيزة الأساسية له. | `@openclaw/qa-matrix`<br />السحب من المصدر فقط | Plugin |
| Plugin | الوصف | التوزيع | السطح |
| ------------------------------------------- | ------------------------------------------------------------------------ | ------------------------------------------------ | -------------------- |
| [qa-channel](/ar/plugins/reference/qa-channel) | يضيف سطح قناة QA Channel لإرسال رسائل OpenClaw واستقبالها. | `@openclaw/qa-channel`<br />سحب المصدر فقط | channels: qa-channel |
| [qa-lab](/ar/plugins/reference/qa-lab) | Plugin مختبر QA من OpenClaw مع واجهة مصحح أخطاء خاصة ومشغّل سيناريوهات. | `@openclaw/qa-lab`<br />سحب المصدر فقط | plugin |
| [qa-matrix](/ar/plugins/reference/qa-matrix) | مشغّل نقل Matrix QA وركيزته. | `@openclaw/qa-matrix`<br />سحب المصدر فقط | plugin |

View File

@ -1,28 +1,28 @@
---
read_when:
- تحتاج إلى استدعاء دوال المساعدة الأساسية من Plugin (TTS، STT، توليد الصور، بحث الويب، وكيل فرعي، العُقد)
- تحتاج إلى استدعاء الدوال المساعدة الأساسية من Plugin (TTS وSTT وتوليد الصور وبحث الويب ووكيل فرعي والعُقد)
- تريد فهم ما يتيحه api.runtime
- تصل إلى أدوات مساعدة للتكوين أو الوكيل أو الوسائط من داخل رمز Plugin
- أنت تصل إلى مساعدات الإعدادات أو الوكيل أو الوسائط من كود Plugin
sidebarTitle: Runtime helpers
summary: api.runtime -- مساعدات وقت التشغيل المحقونة المتاحة لـ Plugin
title: مساعدات وقت تشغيل Plugin
title: مساعدات وقت التشغيل لـ Plugin
x-i18n:
generated_at: "2026-05-02T21:01:49Z"
generated_at: "2026-05-04T09:37:13Z"
model: gpt-5.5
provider: openai
source_hash: 26df37a2ad0dcd29648e382eb579b6892068af4dea1c47460cfd379458a8081c
source_hash: c968f30052ecba4359bdaa9b1c640c1220268933ce01ccef06bcade225b50b7d
source_path: plugins/sdk-runtime.md
workflow: 16
---
مرجع لكائن `api.runtime` الذي يُحقن في كل Plugin أثناء التسجيل. استخدم هذه المساعدات بدلاً من استيراد الأجزاء الداخلية للمضيف مباشرة.
مرجع لكائن `api.runtime` الذي يُحقن في كل plugin أثناء التسجيل. استخدم هذه المساعدات بدلًا من استيراد الأجزاء الداخلية للمضيف مباشرة.
<CardGroup cols={2}>
<Card title="Plugins القنوات" href="/ar/plugins/sdk-channel-plugins">
دليل خطوة بخطوة يستخدم هذه المساعدات ضمن السياق لـ Plugins القنوات.
<Card title="plugins القنوات" href="/ar/plugins/sdk-channel-plugins">
دليل خطوة بخطوة يستخدم هذه المساعدات في سياق plugins القنوات.
</Card>
<Card title="Plugins المزوّدين" href="/ar/plugins/sdk-provider-plugins">
دليل خطوة بخطوة يستخدم هذه المساعدات ضمن السياق لـ Plugins المزوّدين.
<Card title="plugins المزوّدين" href="/ar/plugins/sdk-provider-plugins">
دليل خطوة بخطوة يستخدم هذه المساعدات في سياق plugins المزوّدين.
</Card>
</CardGroup>
@ -34,34 +34,34 @@ register(api) {
## تحميل الإعدادات وكتابتها
فضّل الإعدادات التي مُرّرت بالفعل إلى مسار الاستدعاء النشط، مثل `api.config` أثناء التسجيل أو وسيطة `cfg` في استدعاءات القنوات/المزوّدين. يحافظ هذا على تدفق لقطة واحدة للعملية عبر العمل بدلاً من إعادة تحليل الإعدادات في المسارات الساخنة.
فضّل الإعدادات التي مُرّرت بالفعل إلى مسار الاستدعاء النشط، مثل `api.config` أثناء التسجيل أو وسيط `cfg` في استدعاءات القنوات/المزوّدين. يُبقي هذا لقطة عملية واحدة متدفقة عبر العمل بدلًا من إعادة تحليل الإعدادات في المسارات الساخنة.
استخدم `api.runtime.config.current()` فقط عندما يحتاج معالج طويل العمر إلى لقطة العملية الحالية ولم تُمرَّر أي إعدادات إلى تلك الدالة. القيمة المُعادة للقراءة فقط؛ انسخها أو استخدم مساعد تعديل قبل التحرير.
تتلقى مصانع الأدوات `ctx.runtimeConfig` بالإضافة إلى `ctx.getRuntimeConfig()`. استخدم الدالة الجالبة داخل استدعاء `execute` لأداة طويلة العمر عندما يمكن أن تتغير الإعدادات بعد إنشاء تعريف الأداة.
تتلقى مصانع الأدوات `ctx.runtimeConfig` بالإضافة إلى `ctx.getRuntimeConfig()`. استخدم getter داخل استدعاء `execute` لأداة طويلة العمر عندما يمكن أن تتغير الإعدادات بعد إنشاء تعريف الأداة.
ثبّت التغييرات باستخدام `api.runtime.config.mutateConfigFile(...)` أو `api.runtime.config.replaceConfigFile(...)`. يجب أن تختار كل كتابة سياسة `afterWrite` صريحة:
استمر في حفظ التغييرات باستخدام `api.runtime.config.mutateConfigFile(...)` أو `api.runtime.config.replaceConfigFile(...)`. يجب أن تختار كل كتابة سياسة `afterWrite` صريحة:
- `afterWrite: { mode: "auto" }` يترك لمقرر إعادة تحميل Gateway أن يقرر.
- `afterWrite: { mode: "auto" }` يترك لمقرر إعادة تحميل Gateway القرار.
- `afterWrite: { mode: "restart", reason: "..." }` يفرض إعادة تشغيل نظيفة عندما يعرف الكاتب أن إعادة التحميل الساخنة غير آمنة.
- `afterWrite: { mode: "none", reason: "..." }` يمنع إعادة التحميل/إعادة التشغيل التلقائية فقط عندما يملك المستدعي خطوة المتابعة.
- `afterWrite: { mode: "none", reason: "..." }` يمنع إعادة التحميل/إعادة التشغيل التلقائية فقط عندما يملك المستدعي إجراء المتابعة.
تعيد مساعدات التعديل `afterWrite` بالإضافة إلى ملخص `followUp` نمطي حتى يتمكن المستدعون من التسجيل أو الاختبار لمعرفة ما إذا طلبوا إعادة تشغيل. يظل Gateway مسؤولاً عن وقت حدوث إعادة التشغيل فعلياً.
تعيد مساعدات التعديل `afterWrite` بالإضافة إلى ملخص `followUp` مكتوب الأنواع بحيث يمكن للمستدعين تسجيل أو اختبار ما إذا كانوا قد طلبوا إعادة تشغيل. لا يزال Gateway يملك قرار متى تحدث إعادة التشغيل فعليًا.
`api.runtime.config.loadConfig()` و `api.runtime.config.writeConfigFile(...)` مساعدات توافق قديمة ضمن `runtime-config-load-write`. تُصدر تحذيراً مرة واحدة في وقت التشغيل، وتبقى متاحة لـ Plugins الخارجية القديمة خلال نافذة الهجرة. يجب ألا تستخدمها Plugins المضمنة؛ تفشل حواجز حدود الإعدادات إذا استدعاها كود Plugin أو استورد تلك المساعدات من المسارات الفرعية لـ Plugin SDK.
`api.runtime.config.loadConfig()` و `api.runtime.config.writeConfigFile(...)` هما مساعدا توافق مهملان ضمن `runtime-config-load-write`. يُصدران تحذيرًا مرة واحدة في وقت التشغيل، ويظلان متاحين للـ plugins الخارجية القديمة أثناء نافذة الترحيل. يجب ألا تستخدمهما plugins المضمّنة؛ تفشل حراس حدود الإعدادات إذا استدعاها كود plugin أو استورد تلك المساعدات من مسارات فرعية في SDK الخاصة بالـ plugin.
بالنسبة إلى استيرادات SDK المباشرة، استخدم المسارات الفرعية المركزة للإعدادات بدلاً من برميل التوافق الواسع
`openclaw/plugin-sdk/config-runtime`: استخدم `config-types` للأنواع، و`plugin-config-runtime` لتأكيدات الإعدادات المحمّلة مسبقاً والبحث عن مدخل Plugin، و`runtime-config-snapshot` للقطات العملية الحالية، و`config-mutation` للكتابات. ينبغي لاختبارات Plugin المضمنة أن تحاكي هذه المسارات الفرعية المركزة مباشرة بدلاً من محاكاة برميل التوافق الواسع.
بالنسبة إلى استيرادات SDK المباشرة، استخدم المسارات الفرعية المركّزة للإعدادات بدلًا من barrel التوافق الواسع
`openclaw/plugin-sdk/config-runtime`: استخدم `config-types` للأنواع، و`plugin-config-runtime` لتأكيدات الإعدادات المحمّلة مسبقًا والبحث عن مدخل plugin، و`runtime-config-snapshot` للقطات العملية الحالية، و`config-mutation` للكتابات. ينبغي لاختبارات plugins المضمّنة أن تحاكي هذه المسارات الفرعية المركّزة مباشرة بدلًا من محاكاة barrel التوافق الواسع.
لكود وقت تشغيل OpenClaw الداخلي الاتجاه نفسه: حمّل الإعدادات مرة واحدة عند حدود CLI أو Gateway أو العملية، ثم مرّر تلك القيمة عبر المسار. تحدّث كتابات التعديل الناجحة لقطة وقت تشغيل العملية وتقدم مراجعتها الداخلية؛ ينبغي للمخابئ طويلة العمر أن تعتمد على مفتاح التخزين المؤقت المملوك لوقت التشغيل بدلاً من تسلسل الإعدادات محلياً. تحتوي وحدات وقت التشغيل طويلة العمر على ماسح بلا تسامح مع استدعاءات `loadConfig()` المحيطة؛ استخدم `cfg` ممررة، أو `context.getRuntimeConfig()` للطلب، أو `getRuntimeConfig()` عند حد عملية صريح.
لكود وقت تشغيل OpenClaw الداخلي الاتجاه نفسه: حمّل الإعدادات مرة واحدة عند حدود CLI أو Gateway أو العملية، ثم مرّر تلك القيمة عبر المسار. كتابات التعديل الناجحة تحدّث لقطة وقت تشغيل العملية وتزيد مراجعتها الداخلية؛ ينبغي للذاكرات المؤقتة طويلة العمر أن تستخدم مفتاح التخزين المؤقت المملوك لوقت التشغيل بدلًا من تسلسل الإعدادات محليًا. تحتوي وحدات وقت التشغيل طويلة العمر على ماسح بلا تسامح مع استدعاءات `loadConfig()` المحيطة؛ استخدم `cfg` مُمرّرًا، أو `context.getRuntimeConfig()` للطلب، أو `getRuntimeConfig()` عند حد عملية صريح.
يجب أن تستخدم مسارات تنفيذ المزوّد والقناة لقطة إعدادات وقت التشغيل النشطة، لا لقطة ملف مُعادة لقراءة الإعدادات أو تحريرها. تحتفظ لقطات الملفات بقيم المصدر مثل علامات SecretRef للواجهة والكتابات؛ تحتاج استدعاءات المزوّد إلى عرض وقت التشغيل المحلول. عندما يمكن استدعاء مساعد إما بلقطة المصدر النشطة أو لقطة وقت التشغيل النشطة، مرّر عبر `selectApplicableRuntimeConfig()` قبل قراءة بيانات الاعتماد.
يجب أن تستخدم مسارات تنفيذ المزوّد والقناة لقطة إعدادات وقت التشغيل النشطة، وليس لقطة ملف أُعيدت لقراءة الإعدادات أو تحريرها. تحتفظ لقطات الملفات بقيم المصدر مثل علامات SecretRef لواجهة المستخدم والكتابات؛ تحتاج استدعاءات المزوّدين إلى عرض وقت التشغيل المحلول. عندما قد يُستدعى مساعد إما بلقطة المصدر النشطة أو بلقطة وقت التشغيل النشطة، مرّر عبر `selectApplicableRuntimeConfig()` قبل قراءة بيانات الاعتماد.
## مساحات أسماء وقت التشغيل
<AccordionGroup>
<Accordion title="api.runtime.agent">
هوية الوكيل، والأدلة، وإدارة الجلسات.
هوية الوكيل، الأدلة، وإدارة الجلسات.
```typescript
// Resolve the agent's working directory
@ -105,11 +105,11 @@ register(api) {
});
```
`runEmbeddedAgent(...)` هو المساعد المحايد لبدء دور وكيل OpenClaw عادي من كود Plugin. يستخدم حل المزوّد/النموذج نفسه واختيار عدة الوكيل نفسه المستخدمين في الردود التي تطلقها القنوات.
`runEmbeddedAgent(...)` هو المساعد المحايد لبدء دورة وكيل OpenClaw عادية من كود plugin. يستخدم اختيار المزوّد/النموذج نفسه واختيار حاضنة الوكيل نفسه مثل الردود التي تُشغّلها القنوات.
يبقى `runEmbeddedPiAgent(...)` كاسم مستعار للتوافق.
يظل `runEmbeddedPiAgent(...)` اسمًا بديلًا للتوافق.
يعيد `resolveThinkingPolicy(...)` مستويات التفكير المدعومة للمزوّد/النموذج والقيمة الافتراضية الاختيارية. تملك Plugins المزوّدين ملف التعريف الخاص بالنموذج من خلال خطافات التفكير لديها، لذلك ينبغي لـ Plugins الأدوات استدعاء مساعد وقت التشغيل هذا بدلاً من استيراد قوائم المزوّدين أو تكرارها.
يعيد `resolveThinkingPolicy(...)` مستويات التفكير المدعومة للمزوّد/النموذج والقيمة الافتراضية الاختيارية. تملك plugins المزوّدين الملف الشخصي الخاص بالنموذج من خلال hooks التفكير الخاصة بها، لذلك ينبغي لـ plugins الأدوات استدعاء مساعد وقت التشغيل هذا بدلًا من استيراد قوائم المزوّدين أو تكرارها.
يحوّل `normalizeThinkingLevel(...)` نص المستخدم مثل `on` أو `x-high` أو `extra high` إلى المستوى المخزن القياسي قبل التحقق منه مقابل السياسة المحلولة.
@ -125,7 +125,7 @@ register(api) {
const filePath = api.runtime.agent.session.resolveSessionFilePath(cfg, sessionId);
```
فضّل `updateSessionStore(...)` أو `updateSessionStoreEntry(...)` لكتابات وقت التشغيل. تمر عبر كاتب مخزن الجلسات المملوك لـ Gateway، وتحافظ على التحديثات المتزامنة، وتعيد استخدام المخزن المؤقت الساخن. يبقى `saveSessionStore(...)` متاحاً للتوافق وإعادة الكتابة بنمط الصيانة غير المتصلة.
فضّل `updateSessionStore(...)` أو `updateSessionStoreEntry(...)` لكتابات وقت التشغيل. فهي تمر عبر كاتب مخزن الجلسات المملوك لـ Gateway، وتحافظ على التحديثات المتزامنة، وتعيد استخدام التخزين المؤقت الساخن. يظل `saveSessionStore(...)` متاحًا للتوافق وإعادة الكتابة بأسلوب الصيانة دون اتصال.
</Accordion>
<Accordion title="api.runtime.agent.defaults">
@ -138,7 +138,7 @@ register(api) {
</Accordion>
<Accordion title="api.runtime.subagent">
أطلق وأدر تشغيلات الوكلاء الفرعيين في الخلفية.
شغّل وأدر تشغيلات وكلاء فرعيين في الخلفية.
```typescript
// Start a subagent run
@ -166,14 +166,14 @@ register(api) {
```
<Warning>
تتطلب تجاوزات النموذج (`provider`/`model`) موافقة المشغل عبر `plugins.entries.<id>.subagent.allowModelOverride: true` في الإعدادات. لا تزال Plugins غير الموثوقة قادرة على تشغيل الوكلاء الفرعيين، لكن تُرفض طلبات التجاوز.
تتطلب تجاوزات النموذج (`provider`/`model`) موافقة المشغّل عبر `plugins.entries.<id>.subagent.allowModelOverride: true` في الإعدادات. لا تزال plugins غير الموثوقة قادرة على تشغيل وكلاء فرعيين، لكن تُرفض طلبات التجاوز.
</Warning>
يمكن لـ `deleteSession(...)` حذف الجلسات التي أنشأها Plugin نفسه عبر `api.runtime.subagent.run(...)`. لا يزال حذف جلسات مستخدم أو مشغل عشوائية يتطلب طلب Gateway بنطاق إداري.
يمكن لـ `deleteSession(...)` حذف الجلسات التي أنشأها plugin نفسه عبر `api.runtime.subagent.run(...)`. لا يزال حذف جلسات المستخدم أو المشغّل التعسفية يتطلب طلب Gateway بنطاق إداري.
</Accordion>
<Accordion title="api.runtime.nodes">
اسرد Nodes المتصلة واستدعِ أمر مضيف Node من كود Plugin المحمّل عبر Gateway أو من أوامر CLI الخاصة بـ Plugin. استخدم هذا عندما يملك Plugin عملاً محلياً على جهاز مقترن، مثل جسر متصفح أو صوت على Mac آخر.
اسرد Nodes المتصلة واستدعِ أمرًا مستضافًا على Node من كود plugin المحمّل بواسطة Gateway أو من أوامر CLI الخاصة بـ plugin. استخدم هذا عندما يملك plugin عملًا محليًا على جهاز مقترن، مثل جسر متصفح أو صوت على Mac آخر.
```typescript
const { nodes } = await api.runtime.nodes.list({ connected: true });
@ -186,13 +186,13 @@ register(api) {
});
```
داخل Gateway يكون وقت التشغيل هذا داخل العملية. في أوامر CLI الخاصة بـ Plugin يستدعي Gateway المكوّن عبر RPC، لذا يمكن لأوامر مثل `openclaw googlemeet recover-tab` فحص Nodes المقترنة من الطرفية. لا تزال أوامر Node تمر عبر اقتران Node العادي في Gateway، وقوائم الأوامر المسموحة، وسياسات استدعاء Node الخاصة بـ Plugin، ومعالجة الأوامر المحلية على Node.
داخل Gateway يكون وقت التشغيل هذا داخل العملية. في أوامر CLI الخاصة بـ plugin يستدعي Gateway المُعدّ عبر RPC، لذلك يمكن لأوامر مثل `openclaw googlemeet recover-tab` فحص Nodes المقترنة من الطرفية. لا تزال أوامر Node تمر عبر اقتران Node العادي في Gateway، وقوائم السماح للأوامر، وسياسات plugin لاستدعاء Node، ومعالجة الأوامر المحلية على Node.
يجب على Plugins التي تكشف أوامر مضيف Node خطرة تسجيل سياسة استدعاء Node باستخدام `api.registerNodeInvokePolicy(...)`. تعمل السياسة في Gateway بعد فحوصات قائمة الأوامر المسموحة وقبل تمرير الأمر إلى Node، لذلك تشترك استدعاءات `node.invoke` المباشرة وأدوات Plugin الأعلى مستوى في مسار الإنفاذ نفسه.
ينبغي للـ plugins التي تكشف أوامر خطرة مستضافة على Node أن تسجل سياسة استدعاء Node باستخدام `api.registerNodeInvokePolicy(...)`. تعمل السياسة في Gateway بعد فحوصات قائمة السماح للأوامر وقبل توجيه الأمر إلى Node، لذلك تشترك استدعاءات `node.invoke` المباشرة وأدوات plugin الأعلى مستوى في مسار الإنفاذ نفسه.
</Accordion>
<Accordion title="api.runtime.tasks.managedFlows">
اربط وقت تشغيل تدفق المهام بمفتاح جلسة OpenClaw قائم أو سياق أداة موثوق، ثم أنشئ وأدر تدفقات المهام من دون تمرير مالك في كل استدعاء.
اربط وقت تشغيل Task Flow بمفتاح جلسة OpenClaw موجود أو بسياق أداة موثوق، ثم أنشئ وأدر Task Flows دون تمرير مالك في كل استدعاء.
```typescript
const taskFlow = api.runtime.tasks.managedFlows.fromToolContext(ctx);
@ -219,11 +219,11 @@ register(api) {
});
```
استخدم `bindSession({ sessionKey, requesterOrigin })` عندما يكون لديك بالفعل مفتاح جلسة OpenClaw موثوق من طبقة الربط الخاصة بك. لا تربط من إدخال مستخدم خام.
استخدم `bindSession({ sessionKey, requesterOrigin })` عندما يكون لديك بالفعل مفتاح جلسة OpenClaw موثوق من طبقة الربط الخاصة بك. لا تربطه من إدخال مستخدم خام.
</Accordion>
<Accordion title="api.runtime.tts">
توليف النص إلى كلام.
تركيب النص إلى كلام.
```typescript
// Standard TTS
@ -245,7 +245,7 @@ register(api) {
});
```
يستخدم إعدادات `messages.tts` الأساسية واختيار المزوّد. يعيد مخزن صوت PCM المؤقت + معدل العينة.
يستخدم إعدادات `messages.tts` الأساسية واختيار المزوّد. يعيد مخزن صوت PCM ومعدل العينة.
</Accordion>
<Accordion title="api.runtime.mediaUnderstanding">
@ -279,10 +279,10 @@ register(api) {
});
```
يُرجع `{ text: undefined }` عند عدم إنتاج أي مخرجات (مثلًا عند تخطي الإدخال).
يُرجع `{ text: undefined }` عندما لا يُنتج أي خرج (مثلًا: الإدخال المتجاوز).
<Info>
يظل `api.runtime.stt.transcribeAudioFile(...)` اسمًا مستعارًا للتوافق مع `api.runtime.mediaUnderstanding.transcribeAudioFile(...)`.
يبقى `api.runtime.stt.transcribeAudioFile(...)` اسمًا مستعارًا للتوافق مع `api.runtime.mediaUnderstanding.transcribeAudioFile(...)`.
</Info>
</Accordion>
@ -300,7 +300,7 @@ register(api) {
</Accordion>
<Accordion title="api.runtime.webSearch">
بحث الويب.
البحث في الويب.
```typescript
const providers = api.runtime.webSearch.listProviders({ config: api.config });
@ -338,9 +338,9 @@ register(api) {
</Accordion>
<Accordion title="api.runtime.config">
لقطة إعدادات وقت التشغيل الحالية وكتابات الإعدادات التعاملية. فضّل
الإعدادات التي سبق تمريرها إلى مسار الاستدعاء النشط؛ استخدم
`current()` فقط عندما يحتاج المعالج إلى لقطة العملية مباشرةً.
لقطة إعدادات وقت التشغيل الحالية وكتابات الإعدادات المعاملاتية. فضّل
الإعدادات التي مُرّرت بالفعل إلى مسار الاستدعاء النشط؛ استخدم
`current()` فقط عندما يحتاج المعالج إلى لقطة العملية مباشرة.
```typescript
const cfg = api.runtime.config.current();
@ -352,7 +352,7 @@ register(api) {
});
```
تُرجع `mutateConfigFile(...)` و`replaceConfigFile(...)` قيمة `followUp`،
يعيد `mutateConfigFile(...)` و`replaceConfigFile(...)` قيمة `followUp`،
مثل `{ mode: "restart", requiresRestart: true, reason }`،
التي تسجل نية الكاتب من دون سحب التحكم في إعادة التشغيل من
Gateway.
@ -409,7 +409,7 @@ register(api) {
</Accordion>
<Accordion title="api.runtime.state">
حل دليل الحالة والتخزين المفتاحي المدعوم بـ SQLite.
حل دليل الحالة وتخزين بمفاتيح مدعوم بـ SQLite.
```typescript
const stateDir = api.runtime.state.resolveStateDir(process.env);
@ -420,15 +420,16 @@ register(api) {
});
await store.register("key-1", { value: "hello" });
const claimed = await store.registerIfAbsent("dedupe-key", { value: "first" });
const value = await store.lookup("key-1");
await store.consume("key-1");
await store.clear();
```
تبقى المخازن المفتاحية بعد عمليات إعادة التشغيل وتُعزل حسب معرّف Plugin المرتبط بوقت التشغيل. الحدود: `maxEntries` لكل مساحة اسم، و1,000 صف نشط لكل Plugin، وقيم JSON أقل من 64 كيلوبايت، وانتهاء TTL اختياري.
تبقى المخازن ذات المفاتيح بعد إعادة التشغيل وتُعزل حسب معرّف Plugin المرتبط بوقت التشغيل. استخدم `registerIfAbsent(...)` لمطالبات إزالة التكرار الذرية: فهي تعيد `true` عندما يكون المفتاح مفقودًا أو منتهي الصلاحية وتم تسجيله، أو `false` عندما تكون قيمة حيّة موجودة بالفعل من دون استبدال قيمتها أو وقت إنشائها أو مدة صلاحيتها. الحدود: `maxEntries` لكل مساحة أسماء، و1,000 صف حي لكل Plugin، وقيم JSON أقل من 64KB، وانتهاء صلاحية اختياري عبر TTL.
<Warning>
Plugins المجمعة فقط في هذا الإصدار.
Plugins المضمّنة فقط في هذا الإصدار.
</Warning>
</Accordion>
@ -443,9 +444,9 @@ register(api) {
</Accordion>
<Accordion title="api.runtime.channel">
مساعدات وقت التشغيل الخاصة بالقناة (متاحة عند تحميل Plugin قناة).
مساعدات وقت تشغيل خاصة بالقناة (متاحة عندما يكون Plugin قناة محمّلًا).
`api.runtime.channel.mentions` هي واجهة سياسة الإشارات الواردة المشتركة لـ Plugins القنوات المجمعة التي تستخدم حقن وقت التشغيل:
`api.runtime.channel.mentions` هو سطح سياسة الإشارة الواردة المشترك لـ Plugins القنوات المضمّنة التي تستخدم حقن وقت التشغيل:
```typescript
const mentionMatch = api.runtime.channel.mentions.matchesMentionWithExplicit(text, {
@ -480,17 +481,17 @@ register(api) {
- `implicitMentionKindWhen`
- `resolveInboundMentionDecision`
لا تعرض `api.runtime.channel.mentions` عمدًا مساعدات التوافق الأقدم `resolveMentionGating*`. فضّل مسار `{ facts, policy }` المُطبّع.
لا يعرّض `api.runtime.channel.mentions` عمدًا مساعدات التوافق الأقدم `resolveMentionGating*`. فضّل المسار الموحّد `{ facts, policy }`.
</Accordion>
</AccordionGroup>
## تخزين مراجع وقت التشغيل
استخدم `createPluginRuntimeStore` لتخزين مرجع وقت التشغيل لاستخدامه خارج استدعاء `register`:
استخدم `createPluginRuntimeStore` لتخزين مرجع وقت التشغيل لاستخدامه خارج رد نداء `register`:
<Steps>
<Step title="إنشاء المخزن">
<Step title="Create the store">
```typescript
import { createPluginRuntimeStore } from "openclaw/plugin-sdk/runtime-store";
import type { PluginRuntime } from "openclaw/plugin-sdk/runtime-store";
@ -502,7 +503,7 @@ register(api) {
```
</Step>
<Step title="توصيله بنقطة الدخول">
<Step title="Wire into the entry point">
```typescript
export default defineChannelPluginEntry({
id: "my-plugin",
@ -513,7 +514,7 @@ register(api) {
});
```
</Step>
<Step title="الوصول من ملفات أخرى">
<Step title="Access from other files">
```typescript
export function getRuntime() {
return store.getRuntime(); // throws if not initialized
@ -528,12 +529,12 @@ register(api) {
</Steps>
<Note>
فضّل `pluginId` لهوية مخزن وقت التشغيل. صيغة `key` ذات المستوى الأدنى مخصصة للحالات غير الشائعة التي يحتاج فيها Plugin واحد عمدًا إلى أكثر من خانة وقت تشغيل واحدة.
فضّل `pluginId` لهوية مخزن وقت التشغيل. الصيغة الأدنى مستوى `key` مخصصة للحالات غير الشائعة التي يحتاج فيها Plugin واحد عمدًا إلى أكثر من خانة وقت تشغيل واحدة.
</Note>
## حقول `api` علوية أخرى
إضافةً إلى `api.runtime`، يوفر كائن API أيضًا:
إلى جانب `api.runtime`، يوفر كائن API أيضًا:
<ParamField path="api.id" type="string">
معرّف Plugin.
@ -542,23 +543,23 @@ register(api) {
اسم عرض Plugin.
</ParamField>
<ParamField path="api.config" type="OpenClawConfig">
لقطة الإعدادات الحالية (لقطة وقت التشغيل النشطة داخل الذاكرة عند توفرها).
لقطة الإعدادات الحالية (لقطة وقت التشغيل النشطة في الذاكرة عند توفرها).
</ParamField>
<ParamField path="api.pluginConfig" type="Record<string, unknown>">
إعدادات خاصة بـ Plugin من `plugins.entries.<id>.config`.
</ParamField>
<ParamField path="api.logger" type="PluginLogger">
مسجل محدود النطاق (`debug`، `info`، `warn`، `error`).
مسجّل محدود النطاق (`debug`، `info`، `warn`، `error`).
</ParamField>
<ParamField path="api.registrationMode" type="PluginRegistrationMode">
وضع التحميل الحالي؛ `"setup-runtime"` هي نافذة بدء/إعداد خفيفة قبل الإدخال الكامل.
وضع التحميل الحالي؛ `"setup-runtime"` هو نافذة بدء/إعداد خفيفة قبل الإدخال الكامل.
</ParamField>
<ParamField path="api.resolvePath(input)" type="(string) => string">
حل مسار نسبيًا إلى جذر Plugin.
حل مسار بالنسبة إلى جذر Plugin.
</ParamField>
## ذو صلة
## ذات صلة
- [تفاصيل Plugin الداخلية](/ar/plugins/architecture) — نموذج الإمكانات والسجل
- [داخليات Plugin](/ar/plugins/architecture) — نموذج القدرات والسجل
- [نقاط دخول SDK](/ar/plugins/sdk-entrypoints) — خيارات `definePluginEntry`
- [نظرة عامة على SDK](/ar/plugins/sdk-overview) — مرجع المسارات الفرعية

View File

@ -1,37 +1,37 @@
---
read_when:
- استكشاف سبب ردّ وكيل أو فشله أو استدعائه للأدوات بطريقة معينة
- تصحيح أخطاء سبب ردّ وكيل أو فشله أو استدعائه للأدوات بطريقة معيّنة
- تصدير حزمة دعم لجلسة OpenClaw
- استقصاء سياق المطالبة، واستدعاءات الأدوات، وأخطاء وقت التشغيل، أو بيانات تعريف الاستخدام
- التحقيق في سياق الموجّه، واستدعاءات الأدوات، وأخطاء وقت التشغيل، أو بيانات تعريف الاستخدام
- تعطيل التقاط المسار أو تغيير موقعه
summary: تصدير حزم المسارات المنقّحة لتصحيح أخطاء جلسة وكيل OpenClaw
title: حزم المسارات
x-i18n:
generated_at: "2026-04-30T08:32:44Z"
generated_at: "2026-05-04T09:37:21Z"
model: gpt-5.5
provider: openai
source_hash: 8dad01b3662d5e75b7626eb7ed3c3ac2dce4e3a7db2ba5952d7086c721151d1f
source_hash: b8b1256e52d27185a48ceddaf7937b4f37ad6d57d075fea0d0b6d3abb871f1d8
source_path: tools/trajectory.md
workflow: 16
---
التقاط المسار هو مسجل الرحلة لكل جلسة في OpenClaw. فهو يسجل خطًا زمنيًا
منظمًا لكل تشغيل للوكيل، ثم يحزم `/export-trajectory` الجلسة الحالية في حزمة
دعم منقحة.
تسجيل المسار هو مسجّل الرحلة لكل جلسة في OpenClaw. يسجل
خطًا زمنيًا منظمًا لكل تشغيل وكيل، ثم تحزم `/export-trajectory`
الجلسة الحالية في حزمة دعم منقحة.
استخدمه عندما تحتاج إلى الإجابة عن أسئلة مثل:
- ما الموجه، وموجه النظام، والأدوات التي أُرسلت إلى النموذج؟
- ما رسائل سجل المحادثة واستدعاءات الأدوات التي أدت إلى هذه الإجابة؟
- هل انتهى التشغيل بسبب المهلة، أو أُلغي، أو تم ضغطه، أو واجه خطأ من المزوّد؟
- أي نموذج وplugins وskills وإعدادات تشغيل كانت نشطة؟
- ما بيانات الاستخدام وبيانات ذاكرة الموجه المؤقتة الوصفية التي أعادها المزوّد؟
- أي رسائل في النص التفريغي واستدعاءات أدوات أدت إلى هذه الإجابة؟
- هل انتهى التشغيل بالمهلة، أو أُلغي، أو خضع إلى Compaction، أو واجه خطأ من المزوّد؟
- أي نموذج، وPlugin، وSkills، وإعدادات تشغيل كانت نشطة؟
- ما بيانات الاستخدام وبيانات وصفية لذاكرة التخزين المؤقت للموجه التي أعادها المزوّد؟
إذا كنت ترفع تقرير دعم واسعًا لمشكلة Gateway مباشرة، فابدأ بـ
[`/diagnostics`](/ar/gateway/diagnostics#chat-command). تجمع Diagnostics حزمة
Gateway المنقحة، وبالنسبة إلى جلسات OpenAI Codex harness، يمكنها أيضًا إرسال
ملاحظات Codex إلى خوادم OpenAI بعد الموافقة. استخدم `/export-trajectory` عندما
تحتاج تحديدًا إلى الخط الزمني المفصل للموجه والأداة وسجل المحادثة لكل جلسة.
إذا كنت ترسل تقرير دعم واسعًا لمشكلة Gateway مباشرة، فابدأ بـ
[`/diagnostics`](/ar/gateway/diagnostics#chat-command). تجمع التشخيصات حزمة
Gateway المنقحة، وبالنسبة إلى جلسات بيئة تشغيل OpenAI Codex، يمكنها أيضًا إرسال
تعليقات Codex إلى خوادم OpenAI بعد الموافقة. استخدم `/export-trajectory` عندما
تحتاج تحديدًا إلى الخط الزمني التفصيلي لكل جلسة للموجهات والأدوات والنص التفريغي.
## البدء السريع
@ -41,7 +41,7 @@ Gateway المنقحة، وبالنسبة إلى جلسات OpenAI Codex harness
/export-trajectory
```
الاسم البديل:
الاسم المستعار:
```text
/trajectory
@ -64,11 +64,12 @@ Gateway المنقحة، وبالنسبة إلى جلسات OpenAI Codex harness
يمكن أن تحتوي حزم المسار على موجهات، ورسائل نموذج، ومخططات أدوات، ونتائج أدوات،
وأحداث تشغيل، ومسارات محلية. لذلك يمر أمر الشرطة المائلة في الدردشة عبر موافقة
exec في كل مرة. وافق على التصدير مرة واحدة عندما تنوي إنشاء الحزمة؛ ولا تستخدم
allow-all. في الدردشات الجماعية، يرسل OpenClaw موجه الموافقة ونتيجة التصدير إلى
المالك بشكل خاص بدلًا من نشر تفاصيل المسار مرة أخرى في الغرفة المشتركة.
التنفيذ في كل مرة. وافق على التصدير مرة واحدة عندما تنوي إنشاء الحزمة؛ ولا تستخدم
السماح للجميع. في الدردشات الجماعية، يرسل OpenClaw موجه الموافقة ونتيجة التصدير
إلى المالك بشكل خاص بدلًا من نشر تفاصيل المسار مرة أخرى في الغرفة المشتركة.
لفحص محلي أو لسير عمل الدعم، يمكنك أيضًا تشغيل مسار الأمر الموافق عليه مباشرة:
بالنسبة إلى الفحص المحلي أو سير عمل الدعم، يمكنك أيضًا تشغيل مسار الأمر الموافق
عليه مباشرة:
```bash
openclaw sessions export-trajectory --session-key "agent:main:telegram:direct:123" --workspace .
@ -76,12 +77,12 @@ openclaw sessions export-trajectory --session-key "agent:main:telegram:direct:12
## الوصول
تصدير المسار أمر خاص بالمالك. يجب أن يجتاز المرسل فحوصات تفويض الأوامر العادية
تصدير المسار أمر للمالك. يجب أن يجتاز المرسل فحوصات تخويل الأوامر العادية
وفحوصات المالك للقناة.
## ما الذي يُسجل
يكون التقاط المسار مفعّلًا افتراضيًا لتشغيلات وكيل OpenClaw.
تسجيل المسار مفعّل افتراضيًا لتشغيلات وكيل OpenClaw.
تشمل أحداث التشغيل:
@ -89,22 +90,22 @@ openclaw sessions export-trajectory --session-key "agent:main:telegram:direct:12
- `trace.metadata`
- `context.compiled`
- `prompt.submitted`
- `model.fallback_step`، بما في ذلك النموذج المصدر، والنموذج التالي، وسبب/تفصيل الفشل، وموضع السلسلة، وما إذا كان الاحتياط قد تقدم أو نجح أو استنفد السلسلة
- `model.fallback_step`، بما في ذلك نموذج المصدر، والنموذج التالي، وسبب/تفاصيل الفشل، وموضع السلسلة، وما إذا كان الرجوع الاحتياطي قد تقدم أو نجح أو استنفد السلسلة
- `model.completed`
- `trace.artifacts`
- `session.ended`
تُعاد أيضًا إعادة بناء أحداث سجل المحادثة من فرع الجلسة النشط:
تُعاد أيضًا بنية أحداث النص التفريغي من فرع الجلسة النشط:
- رسائل المستخدم
- رسائل المساعد
- استدعاءات الأدوات
- نتائج الأدوات
- عمليات الضغط
- عمليات Compaction
- تغييرات النموذج
- التسميات وإدخالات الجلسة المخصصة
تُكتب الأحداث بصيغة JSON Lines مع علامة المخطط هذه:
تُكتب الأحداث بصيغة JSON Lines مع وسم المخطط هذا:
```json
{
@ -117,19 +118,19 @@ openclaw sessions export-trajectory --session-key "agent:main:telegram:direct:12
يمكن أن تحتوي الحزمة المصدّرة على:
| الملف | المحتويات |
| الملف | المحتويات |
| --------------------- | ---------------------------------------------------------------------------------------------- |
| `manifest.json` | مخطط الحزمة، وملفات المصدر، وعدد الأحداث، وقائمة الملفات المُنشأة |
| `events.jsonl` | الخط الزمني المرتب للتشغيل وسجل المحادثة |
| `session-branch.json` | فرع سجل المحادثة النشط المنقح وترويسة الجلسة |
| `metadata.json` | إصدار OpenClaw، ونظام التشغيل/بيئة التشغيل، والنموذج، ولقطة الإعداد، وplugins، وskills، وبيانات الموجه الوصفية |
| `artifacts.json` | الحالة النهائية، والأخطاء، والاستخدام، وذاكرة الموجه المؤقتة، وعدد عمليات الضغط، ونص المساعد، وبيانات الأدوات الوصفية |
| `prompts.json` | الموجهات المقدمة وتفاصيل مختارة لبناء الموجه |
| `system-prompt.txt` | أحدث موجه نظام مُجمّع، عند التقاطه |
| `tools.json` | تعريفات الأدوات المرسلة إلى النموذج، عند التقاطها |
| `manifest.json` | مخطط الحزمة، وملفات المصدر، وعدّادات الأحداث، وقائمة الملفات المولدة |
| `events.jsonl` | الخط الزمني المرتب للتشغيل والنص التفريغي |
| `session-branch.json` | فرع النص التفريغي النشط المنقح وترويسة الجلسة |
| `metadata.json` | إصدار OpenClaw، ونظام التشغيل/بيئة التشغيل، والنموذج، ولقطة الإعدادات، وPlugin، وSkills، وبيانات وصفية للموجه |
| `artifacts.json` | الحالة النهائية، والأخطاء، والاستخدام، وذاكرة التخزين المؤقت للموجه، وعدّ Compaction، ونص المساعد، وبيانات وصفية للأدوات |
| `prompts.json` | الموجهات المرسلة وتفاصيل مختارة لبناء الموجه |
| `system-prompt.txt` | أحدث موجه نظام مجمع، عند التقاطه |
| `tools.json` | تعريفات الأدوات المرسلة إلى النموذج، عند التقاطها |
يسرد `manifest.json` الملفات الموجودة في تلك الحزمة. تُحذف بعض الملفات عندما
لا تلتقط الجلسة بيانات التشغيل المقابلة.
يسرد `manifest.json` الملفات الموجودة في تلك الحزمة. تُحذف بعض الملفات
عندما لا تلتقط الجلسة بيانات التشغيل المقابلة.
## موقع الالتقاط
@ -145,8 +146,8 @@ openclaw sessions export-trajectory --session-key "agent:main:telegram:direct:12
<session>.trajectory-path.json
```
اضبط `OPENCLAW_TRAJECTORY_DIR` لتخزين ملفات مسار التشغيل الجانبية في دليل
مخصص:
اضبط `OPENCLAW_TRAJECTORY_DIR` لتخزين ملفات مسار التشغيل الجانبية في
دليل مخصص:
```bash
export OPENCLAW_TRAJECTORY_DIR=/var/lib/openclaw/trajectories
@ -156,7 +157,7 @@ export OPENCLAW_TRAJECTORY_DIR=/var/lib/openclaw/trajectories
الدليل.
تزيل صيانة الجلسات ملفات المسار الجانبية عندما يُقلّم إدخال الجلسة المالكة لها،
أو يُحدد بسقف، أو يُطرد بفعل ميزانية قرص الجلسات. لا تُزال ملفات التشغيل خارج
أو يُحدّ، أو يُستبعد بسبب ميزانية قرص الجلسات. لا تُزال ملفات التشغيل خارج
دليل الجلسات إلا عندما يظل هدف المؤشر يثبت أنه ينتمي إلى تلك الجلسة.
## تعطيل الالتقاط
@ -167,31 +168,31 @@ export OPENCLAW_TRAJECTORY_DIR=/var/lib/openclaw/trajectories
export OPENCLAW_TRAJECTORY=0
```
يعطل هذا التقاط مسار التشغيل. لا يزال بإمكان `/export-trajectory` تصدير فرع
سجل المحادثة، لكن قد تكون الملفات الخاصة بالتشغيل فقط مثل السياق المُجمّع،
ومخرجات المزوّد، وبيانات الموجه الوصفية مفقودة.
يعطل هذا تسجيل مسار التشغيل. لا يزال بإمكان `/export-trajectory` تصدير
فرع النص التفريغي، لكن قد تكون الملفات الخاصة بالتشغيل فقط، مثل السياق المجمع،
ومخرجات المزوّد، والبيانات الوصفية للموجه، مفقودة.
## الخصوصية والحدود
صُممت حزم المسار للدعم وتصحيح الأخطاء، وليس للنشر العام. ينقح OpenClaw القيم
الحساسة قبل كتابة ملفات التصدير:
صُممت حزم المسار للدعم وتصحيح الأخطاء، وليس للنشر العام.
ينقح OpenClaw القيم الحساسة قبل كتابة ملفات التصدير:
- بيانات الاعتماد وحقول الحمولة المعروفة بأنها تشبه الأسرار
- بيانات الاعتماد وحقول الحمولة المعروفة بأنها شبيهة بالأسرار
- بيانات الصور
- مسارات الحالة المحلية
- مسارات مساحة العمل، وتُستبدل بـ `$WORKSPACE_DIR`
- مسارات دليل المنزل، حيث تُكتشف
- مسارات مساحة العمل، مستبدلة بـ `$WORKSPACE_DIR`
- مسارات الدليل الرئيسي، عند اكتشافها
يضع المُصدّر أيضًا حدودًا لحجم الإدخال:
يحدّ المصدّر أيضًا حجم الإدخال:
- ملفات التشغيل الجانبية: 50 MiB
- ملفات الجلسة: 50 MiB
- ملفات التشغيل الجانبية: يتوقف الالتقاط المباشر عند 10 MiB ويسجل حدث اقتطاع عندما تبقى مساحة؛ يقبل التصدير ملفات التشغيل الجانبية الموجودة حتى 50 MiB
- ملفات الجلسات: 50 MiB
- أحداث التشغيل: 200,000
- إجمالي الأحداث المصدّرة: 250,000
- تُقتطع أسطر أحداث التشغيل الفردية فوق 256 KiB
راجع الحزم قبل مشاركتها خارج فريقك. التنقيح يُنفذ بأفضل جهد ولا يمكنه معرفة
كل سر خاص بالتطبيق.
راجع الحزم قبل مشاركتها خارج فريقك. التنقيح مبذول بأفضل جهد
ولا يمكنه معرفة كل سر خاص بكل تطبيق.
## استكشاف الأخطاء وإصلاحها
@ -213,6 +214,6 @@ export OPENCLAW_TRAJECTORY=0
## ذات صلة
- [الفروق](/ar/tools/diffs)
- [الفروقات](/ar/tools/diffs)
- [إدارة الجلسات](/ar/concepts/session)
- [أداة exec](/ar/tools/exec)
- [أداة التنفيذ](/ar/tools/exec)

View File

@ -1,25 +1,25 @@
---
read_when:
- تريد تشغيل Gateway من متصفح
- تريد الوصول إلى Tailnet دون أنفاق SSH
- تريد الوصول إلى شبكة Tailnet من دون أنفاق SSH
sidebarTitle: Control UI
summary: واجهة تحكم مستندة إلى المتصفح لـ Gateway (الدردشة، العُقد، الإعدادات)
summary: واجهة تحكم مستندة إلى المتصفح لـ Gateway (الدردشة، العقد، التكوين)
title: واجهة التحكم
x-i18n:
generated_at: "2026-05-04T07:46:40Z"
generated_at: "2026-05-04T09:36:57Z"
model: gpt-5.5
provider: openai
source_hash: 896c75116d7a396571017ac6e6db7ff6ce328617e44470c303fd41af58aa2bd7
source_hash: 4b68b5203b369de6a3354a7e7442ee38ee790875b2d7054b0c8ec997098fd9de
source_path: web/control-ui.md
workflow: 16
---
واجهة التحكم هي تطبيق صغير أحادي الصفحة مبني بـ **Vite + Lit** يقدمه Gateway:
واجهة التحكم هي تطبيق صفحة واحدة صغير مبني بـ **Vite + Lit** يقدمه Gateway:
- الافتراضي: `http://<host>:18789/`
- بادئة اختيارية: اضبط `gateway.controlUi.basePath` (مثل `/openclaw`)
يتواصل **مباشرة مع Gateway WebSocket** على المنفذ نفسه.
تتواصل **مباشرة مع Gateway WebSocket** على المنفذ نفسه.
## فتح سريع (محلي)
@ -27,127 +27,127 @@ x-i18n:
- [http://127.0.0.1:18789/](http://127.0.0.1:18789/) (أو [http://localhost:18789/](http://localhost:18789/))
إذا فشل تحميل الصفحة، فابدأ Gateway أولًا: `openclaw gateway`.
إذا فشل تحميل الصفحة، فشغّل Gateway أولًا: `openclaw gateway`.
تُوفَّر المصادقة أثناء مصافحة WebSocket عبر:
تُقدَّم المصادقة أثناء مصافحة WebSocket عبر:
- `connect.params.auth.token`
- `connect.params.auth.password`
- ترويسات هوية Tailscale Serve عند ضبط `gateway.auth.allowTailscale: true`
- ترويسات هوية الوكيل الموثوق عند ضبط `gateway.auth.mode: "trusted-proxy"`
- ترويسات هوية trusted-proxy عند ضبط `gateway.auth.mode: "trusted-proxy"`
تحتفظ لوحة إعدادات لوحة المعلومات برمز مميز لجلسة تبويب المتصفح الحالية وعنوان URL المحدد للبوابة؛ ولا تُحفَظ كلمات المرور. عادةً ينشئ الإعداد الأولي رمز Gateway للمصادقة بالسر المشترك عند الاتصال الأول، لكن مصادقة كلمة المرور تعمل أيضًا عندما يكون `gateway.auth.mode` هو `"password"`.
تحتفظ لوحة إعدادات لوحة المعلومات برمز مميز لجلسة تبويب المتصفح الحالية وعنوان Gateway URL المحدد؛ ولا تُحفظ كلمات المرور. عادةً ما ينشئ الإعداد الأولي رمز Gateway للمصادقة بالسر المشترك عند أول اتصال، لكن مصادقة كلمة المرور تعمل أيضًا عندما يكون `gateway.auth.mode` هو `"password"`.
## إقران الجهاز (الاتصال الأول)
عند الاتصال بواجهة التحكم من متصفح أو جهاز جديد، يتطلب Gateway عادةً **موافقة إقران لمرة واحدة**. هذا إجراء أمني لمنع الوصول غير المصرح به.
عند اتصالك بواجهة التحكم من متصفح أو جهاز جديد، يتطلب Gateway عادةً **موافقة إقران لمرة واحدة**. هذا إجراء أمني لمنع الوصول غير المصرح به.
**ما ستراه:** "disconnected (1008): pairing required"
<Steps>
<Step title="عرض الطلبات المعلقة">
<Step title="List pending requests">
```bash
openclaw devices list
```
</Step>
<Step title="الموافقة بواسطة معرّف الطلب">
<Step title="Approve by request ID">
```bash
openclaw devices approve <requestId>
```
</Step>
</Steps>
إذا أعاد المتصفح محاولة الإقران مع تفاصيل مصادقة متغيرة (الدور/النطاقات/المفتاح العام)، فسيتم تجاوز الطلب المعلق السابق وإنشاء `requestId` جديد. شغّل `openclaw devices list` مرة أخرى قبل الموافقة.
إذا أعاد المتصفح محاولة الإقران مع تغيّر تفاصيل المصادقة (الدور/النطاقات/المفتاح العام)، فسيُستبدل الطلب المعلّق السابق ويُنشأ `requestId` جديد. أعد تشغيل `openclaw devices list` قبل الموافقة.
إذا كان المتصفح مقترنًا بالفعل وغيّرته من صلاحية قراءة إلى صلاحية كتابة/مسؤول، فيُعامَل ذلك كترقية موافقة، وليس إعادة اتصال صامتة. يُبقي OpenClaw الموافقة القديمة نشطة، ويمنع إعادة الاتصال ذات النطاق الأوسع، ويطلب منك الموافقة صراحةً على مجموعة النطاقات الجديدة.
إذا كان المتصفح مقترنًا بالفعل وغيّرته من وصول للقراءة إلى وصول للكتابة/المسؤول، فيُعامل ذلك كترقية موافقة، وليس كإعادة اتصال صامتة. يبقي OpenClaw الموافقة القديمة نشطة، ويحظر إعادة الاتصال الأوسع، ويطلب منك الموافقة صراحةً على مجموعة النطاقات الجديدة.
بعد الموافقة، يتم تذكّر الجهاز ولن يتطلب موافقة جديدة إلا إذا ألغيتَه باستخدام `openclaw devices revoke --device <id> --role <role>`. راجع [CLI الأجهزة](/ar/cli/devices) لتدوير الرموز وإلغائها.
بعد الموافقة، يتم تذكّر الجهاز ولن يحتاج إلى إعادة موافقة ما لم تلغه باستخدام `openclaw devices revoke --device <id> --role <role>`. راجع [CLI الأجهزة](/ar/cli/devices) لتدوير الرموز المميزة والإلغاء.
<Note>
- تتم الموافقة تلقائيًا على اتصالات متصفح local loopback المباشرة (`127.0.0.1` / `localhost`).
- يستطيع Tailscale Serve تخطي جولة الإقران لجلسات مشغل واجهة التحكم عندما يكون `gateway.auth.allowTailscale: true`، وتتحقق هوية Tailscale، ويعرض المتصفح هوية جهازه.
- لا تزال روابط Tailnet المباشرة، واتصالات متصفح LAN، وملفات تعريف المتصفح التي لا تحتوي على هوية جهاز تتطلب موافقة صريحة.
- يمكن لـ Tailscale Serve تخطي جولة الإقران لجلسات مشغّل واجهة التحكم عندما يكون `gateway.auth.allowTailscale: true`، وتتحقق هوية Tailscale، ويقدّم المتصفح هوية جهازه.
- لا تزال ارتباطات Tailnet المباشرة، واتصالات متصفح LAN، وملفات تعريف المتصفح التي لا تحتوي على هوية جهاز، تتطلب موافقة صريحة.
- ينشئ كل ملف تعريف متصفح معرّف جهاز فريدًا، لذا فإن تبديل المتصفحات أو مسح بيانات المتصفح سيتطلب إعادة الإقران.
</Note>
## الهوية الشخصية (محلية للمتصفح)
تدعم واجهة التحكم هوية شخصية لكل متصفح (اسم عرض وصورة رمزية) تُرفق بالرسائل الصادرة للإسناد في الجلسات المشتركة. تعيش هذه الهوية في تخزين المتصفح، وتكون مقصورة على ملف تعريف المتصفح الحالي، ولا تتم مزامنتها مع أجهزة أخرى أو حفظها على جانب الخادم باستثناء بيانات وصف مؤلف النص العادية على الرسائل التي ترسلها فعليًا. يؤدي مسح بيانات الموقع أو تبديل المتصفحات إلى إعادة ضبطها إلى فارغة.
تدعم واجهة التحكم هوية شخصية لكل متصفح (اسم عرض وصورة رمزية) تُرفق بالرسائل الصادرة للإسناد في الجلسات المشتركة. تعيش في تخزين المتصفح، وتكون محددة بنطاق ملف تعريف المتصفح الحالي، ولا تتم مزامنتها مع أجهزة أخرى أو حفظها على الخادم إلا ضمن بيانات تعريف تأليف النصوص المعتادة على الرسائل التي ترسلها فعلًا. يؤدي مسح بيانات الموقع أو تبديل المتصفحات إلى إعادة تعيينها إلى فارغة.
ينطبق نمط المتصفح المحلي نفسه على تجاوز الصورة الرمزية للمساعد. توضع صور المساعد الرمزية المرفوعة فوق الهوية التي حلّها Gateway في المتصفح المحلي فقط ولا تمر ذهابًا وإيابًا عبر `config.patch`. لا يزال حقل إعدادات `ui.assistant.avatar` المشترك متاحًا للعملاء غير التابعين لواجهة المستخدم الذين يكتبون الحقل مباشرة (مثل البوابات المؤتمتة أو لوحات المعلومات المخصصة).
ينطبق النمط المحلي نفسه للمتصفح على تجاوز صورة المساعد الرمزية. تغطي صور المساعد الرمزية المرفوعة الهوية التي حلّها Gateway على المتصفح المحلي فقط، ولا تنتقل ذهابًا وإيابًا عبر `config.patch`. لا يزال حقل إعدادات `ui.assistant.avatar` المشترك متاحًا للعملاء غير واجهة المستخدم الذين يكتبون الحقل مباشرةً (مثل Gateways المبرمجة أو لوحات المعلومات المخصصة).
## نقطة نهاية إعدادات وقت التشغيل
تجلب واجهة التحكم إعدادات وقت التشغيل من `/__openclaw/control-ui-config.json`. تخضع نقطة النهاية هذه لمصادقة Gateway نفسها مثل بقية سطح HTTP: لا تستطيع المتصفحات غير المصادق عليها جلبها، ويتطلب الجلب الناجح إما رمز/كلمة مرور Gateway صالحة بالفعل، أو هوية Tailscale Serve، أو هوية وكيل موثوق.
تجلب واجهة التحكم إعدادات وقت التشغيل الخاصة بها من `/__openclaw/control-ui-config.json`. تخضع نقطة النهاية هذه لمصادقة Gateway نفسها مثل بقية سطح HTTP: لا يمكن للمتصفحات غير المصادقة جلبها، ويتطلب الجلب الناجح إما رمز Gateway/كلمة مرور صالحة بالفعل، أو هوية Tailscale Serve، أو هوية trusted-proxy.
## دعم اللغة
يمكن لواجهة التحكم تعريب نفسها عند التحميل الأول استنادًا إلى لغة متصفحك. لتجاوز ذلك لاحقًا، افتح **نظرة عامة -> وصول Gateway -> اللغة**. يوجد منتقي اللغة في بطاقة وصول Gateway، وليس ضمن المظهر.
يمكن لواجهة التحكم توطين نفسها عند التحميل الأول بناءً على لغة متصفحك. لتجاوز ذلك لاحقًا، افتح **نظرة عامة -> وصول Gateway -> اللغة**. يوجد منتقي اللغة في بطاقة وصول Gateway، وليس ضمن المظهر.
- اللغات المدعومة: `en`, `zh-CN`, `zh-TW`, `pt-BR`, `de`, `es`, `ja-JP`, `ko`, `fr`, `ar`, `it`, `tr`, `uk`, `id`, `pl`, `th`, `vi`, `nl`, `fa`
- تُحمَّل الترجمات غير الإنجليزية تحميلًا كسولًا في المتصفح.
- تُحفَظ اللغة المحددة في تخزين المتصفح وتُعاد استخدامها في الزيارات المستقبلية.
- تُحفظ اللغة المحددة في تخزين المتصفح وتُعاد استخدامها في الزيارات المستقبلية.
- تعود مفاتيح الترجمة المفقودة إلى الإنجليزية.
تُولَّد ترجمات الوثائق لمجموعة اللغات غير الإنجليزية نفسها، لكن منتقي اللغة المدمج في موقع الوثائق من Mintlify يقتصر على رموز اللغات التي يقبلها Mintlify. لا تزال وثائق التايلاندية (`th`) والفارسية (`fa`) تُولَّد في مستودع النشر؛ وقد لا تظهر في ذلك المنتقي حتى يدعم Mintlify تلك الرموز.
تُنشأ ترجمات الوثائق لمجموعة اللغات غير الإنجليزية نفسها، لكن منتقي اللغة المدمج في موقع الوثائق من Mintlify يقتصر على رموز اللغات التي يقبلها Mintlify. لا تزال وثائق التايلاندية (`th`) والفارسية (`fa`) تُنشأ في مستودع النشر؛ وقد لا تظهر في ذلك المنتقي حتى يدعم Mintlify تلك الرموز.
## سمات المظهر
تحتفظ لوحة المظهر بالسمات المدمجة Claw وKnot وDash، بالإضافة إلى موضع استيراد tweakcn محلي للمتصفح. لاستيراد سمة، افتح [محرر tweakcn](https://tweakcn.com/editor/theme)، واختر سمة أو أنشئ واحدة، وانقر **مشاركة**، ثم الصق رابط السمة المنسوخ في المظهر. يقبل المستورد أيضًا عناوين URL لسجل `https://tweakcn.com/r/themes/<id>`، وعناوين URL للمحرر مثل `https://tweakcn.com/editor/theme?theme=amethyst-haze`، ومسارات `/themes/<id>` النسبية، ومعرّفات السمات الخام، وأسماء السمات الافتراضية مثل `amethyst-haze`.
تحتفظ لوحة المظهر بسمات Claw وKnot وDash المدمجة، إضافةً إلى خانة استيراد tweakcn محلية واحدة للمتصفح. لاستيراد سمة، افتح [محرر tweakcn](https://tweakcn.com/editor/theme)، واختر سمة أو أنشئ واحدة، وانقر **مشاركة**، ثم الصق رابط السمة المنسوخ في المظهر. يقبل المستورد أيضًا عناوين URL للسجل `https://tweakcn.com/r/themes/<id>`، وعناوين URL للمحرر مثل `https://tweakcn.com/editor/theme?theme=amethyst-haze`، ومسارات `/themes/<id>` النسبية، ومعرّفات السمات الخام، وأسماء السمات الافتراضية مثل `amethyst-haze`.
تُخزَّن السمات المستوردة في ملف تعريف المتصفح الحالي فقط. لا تُكتب إلى إعدادات Gateway ولا تتم مزامنتها عبر الأجهزة. يؤدي استبدال السمة المستوردة إلى تحديث الموضع المحلي الواحد؛ ويؤدي مسحها إلى إعادة السمة النشطة إلى Claw إذا كانت السمة المستوردة محددة.
تُخزَّن السمات المستوردة في ملف تعريف المتصفح الحالي فقط. ولا تُكتب إلى إعدادات Gateway ولا تتم مزامنتها عبر الأجهزة. يؤدي استبدال السمة المستوردة إلى تحديث الخانة المحلية الواحدة؛ ويؤدي مسحها إلى إعادة السمة النشطة إلى Claw إذا كانت السمة المستوردة محددة.
## ما يمكنه فعله (اليوم)
## ما يمكنها فعله (اليوم)
<AccordionGroup>
<Accordion title="الدردشة والتحدث">
<Accordion title="Chat and Talk">
- الدردشة مع النموذج عبر Gateway WS (`chat.history`, `chat.send`, `chat.abort`, `chat.inject`).
- التحدث عبر جلسات المتصفح الفورية. يستخدم OpenAI اتصال WebRTC مباشرًا، ويستخدم Google Live رمز متصفح مقيّدًا للاستخدام مرة واحدة عبر WebSocket، وتستخدم Plugins الصوت الفوري المخصصة للخلفية فقط نقل ترحيل Gateway. يحافظ الترحيل على بيانات اعتماد الموفر على Gateway بينما يبث المتصفح PCM الميكروفون عبر استدعاءات RPC من `talk.realtime.relay*` ويرسل استدعاءات أداة `openclaw_agent_consult` مرة أخرى عبر `chat.send` إلى نموذج OpenClaw الأكبر المضبوط.
- بث استدعاءات الأدوات + بطاقات مخرجات الأدوات الحية في الدردشة (أحداث الوكيل).
- التحدث عبر جلسات المتصفح الفورية. يستخدم OpenAI اتصال WebRTC مباشرًا، ويستخدم Google Live رمز متصفح مقيّدًا لمرة واحدة عبر WebSocket، وتستخدم Plugins الصوت الفوري الخاصة بالخلفية فقط نقل ترحيل Gateway. يحافظ الترحيل على بيانات اعتماد المزود على Gateway بينما يبث المتصفح PCM من الميكروفون عبر RPCs من نوع `talk.realtime.relay*` ويرسل استدعاءات أداة `openclaw_agent_consult` مرة أخرى عبر `chat.send` إلى نموذج OpenClaw الأكبر المضبوط.
- بث استدعاءات الأدوات + بطاقات إخراج الأدوات الحية في الدردشة (أحداث الوكيل).
</Accordion>
<Accordion title="القنوات، والمثيلات، والجلسات، والأحلام">
- القنوات: حالة القنوات المدمجة وقنوات Plugin المرفقة/الخارجية، وتسجيل الدخول عبر QR، وإعدادات كل قناة (`channels.status`, `web.login.*`, `config.patch`).
<Accordion title="Channels, instances, sessions, dreams">
- القنوات: حالة القنوات المدمجة إضافةً إلى قنوات Plugin المجمعة/الخارجية، وتسجيل دخول QR، وإعدادات كل قناة (`channels.status`, `web.login.*`, `config.patch`).
- المثيلات: قائمة الحضور + التحديث (`system-presence`).
- الجلسات: القائمة + تجاوزات النموذج/التفكير/السريع/المطوّل/التتبع/الاستدلال لكل جلسة (`sessions.list`, `sessions.patch`).
- الأحلام: حالة Dreaming، ومفتاح التفعيل/التعطيل، وقارئ يوميات الأحلام (`doctor.memory.status`, `doctor.memory.dreamDiary`, `config.patch`).
- الأحلام: حالة Dreaming، ومفتاح التمكين/التعطيل، وقارئ يوميات الأحلام (`doctor.memory.status`, `doctor.memory.dreamDiary`, `config.patch`).
</Accordion>
<Accordion title="Cron، وSkills، والعقد، وموافقات exec">
- مهام Cron: عرض/إضافة/تحرير/تشغيل/تفعيل/تعطيل + سجل التشغيل (`cron.*`).
- Skills: الحالة، التفعيل/التعطيل، التثبيت، تحديثات مفتاح API (`skills.*`).
- العقد: القائمة + الإمكانات (`node.list`).
- موافقات exec: تحرير قوائم السماح الخاصة بالبوابة أو العقدة + سياسة السؤال لـ `exec host=gateway/node` (`exec.approvals.*`).
<Accordion title="Cron, skills, nodes, exec approvals">
- وظائف Cron: قائمة/إضافة/تحرير/تشغيل/تمكين/تعطيل + سجل التشغيل (`cron.*`).
- Skills: الحالة، التمكين/التعطيل، التثبيت، تحديثات مفتاح API (`skills.*`).
- Nodes: القائمة + القدرات (`node.list`).
- موافقات exec: تحرير قوائم السماح لـ Gateway أو Node + سياسة السؤال لـ `exec host=gateway/node` (`exec.approvals.*`).
</Accordion>
<Accordion title="الإعدادات">
<Accordion title="Config">
- عرض/تحرير `~/.openclaw/openclaw.json` (`config.get`, `config.set`).
- التطبيق + إعادة التشغيل مع التحقق (`config.apply`) وإيقاظ آخر جلسة نشطة.
- تتضمن عمليات الكتابة حارس تجزئة أساس لمنع طمس التعديلات المتزامنة.
- تُجري عمليات الكتابة (`config.set`/`config.apply`/`config.patch`) فحصًا مسبقًا لحل SecretRef النشط للمراجع الموجودة في حمولة الإعدادات المقدمة؛ وتُرفض المراجع النشطة غير المحلولة المقدمة قبل الكتابة.
- عرض المخطط + النموذج (`config.schema` / `config.schema.lookup`، بما في ذلك `title` / `description` للحقل، وتلميحات واجهة المستخدم المطابقة، وملخصات الأبناء المباشرة، وبيانات وصف الوثائق على عقد الكائنات/أحرف البدل/المصفوفات/التركيب المتداخلة، بالإضافة إلى مخططات Plugin + القنوات عند توفرها)؛ لا يتوفر محرر Raw JSON إلا عندما تحتوي اللقطة على ذهاب وإياب خام آمن.
- إذا تعذر على لقطة إجراء ذهاب وإياب آمن للنص الخام، تفرض واجهة التحكم وضع النموذج وتعطل الوضع الخام لتلك اللقطة.
- يحافظ محرر Raw JSON عند "إعادة الضبط إلى المحفوظ" على الشكل المؤلف خامًا (التنسيق، والتعليقات، وتخطيط `$include`) بدلًا من إعادة عرض لقطة مسطحة، لذلك تبقى التعديلات الخارجية بعد إعادة الضبط عندما تستطيع اللقطة إجراء ذهاب وإياب آمن.
- تُعرض قيم كائن SecretRef المنظمة للقراءة فقط في مدخلات نص النموذج لمنع تلف تحويل الكائن إلى سلسلة نصية بالخطأ.
- تجري عمليات الكتابة (`config.set`/`config.apply`/`config.patch`) فحصًا مسبقًا لحل SecretRef النشط للمراجع في حمولة الإعدادات المقدمة؛ وتُرفض المراجع النشطة المقدمة غير المحلولة قبل الكتابة.
- المخطط + عرض النموذج (`config.schema` / `config.schema.lookup`، بما في ذلك `title` / `description` للحقل، وتلميحات واجهة المستخدم المطابقة، وملخصات الأبناء المباشرين، وبيانات تعريف الوثائق على عقد الكائن/حرف البدل/المصفوفة/التركيب المتداخلة، إضافةً إلى مخططات Plugin + القناة عند توفرها)؛ يتوفر محرر Raw JSON فقط عندما تحتوي اللقطة على رحلة ذهاب وإياب خام آمنة.
- إذا تعذّر على لقطة أن تنتقل ذهابًا وإيابًا بالنص الخام بأمان، تفرض واجهة التحكم وضع النموذج وتعطّل وضع Raw لتلك اللقطة.
- يحافظ محرر Raw JSON "إعادة التعيين إلى المحفوظ" على الشكل المؤلف خامًا (التنسيق، التعليقات، تخطيط `$include`) بدلًا من إعادة عرض لقطة مسطّحة، بحيث تبقى التعديلات الخارجية بعد إعادة التعيين عندما تتمكن اللقطة من الانتقال ذهابًا وإيابًا بأمان.
- تُعرض قيم كائن SecretRef المنظمة للقراءة فقط في مدخلات نص النموذج لمنع تلف التحويل العرضي من كائن إلى سلسلة نصية.
</Accordion>
<Accordion title="التصحيح، والسجلات، والتحديث">
- التصحيح: لقطات الحالة/الصحة/النماذج + سجل الأحداث + استدعاءات RPC اليدوية (`status`, `health`, `models.list`).
- يتضمن سجل الأحداث توقيتات تحديث/RPC لواجهة التحكم بالإضافة إلى إدخالات استجابة المتصفح لإطارات الرسوم المتحركة الطويلة أو المهام الطويلة عندما يعرض المتصفح أنواع إدخالات PerformanceObserver تلك.
- السجلات: متابعة حية لسجلات ملف Gateway مع التصفية/التصدير (`logs.tail`).
- التحديث: تشغيل تحديث حزمة/ git + إعادة التشغيل (`update.run`) مع تقرير إعادة التشغيل، ثم استطلاع `update.status` بعد إعادة الاتصال للتحقق من إصدار Gateway الجاري تشغيله.
<Accordion title="Debug, logs, update">
- التصحيح: لقطات الحالة/الصحة/النماذج + سجل الأحداث + استدعاءات RPC يدوية (`status`, `health`, `models.list`).
- يتضمن سجل الأحداث توقيتات تحديث واجهة التحكم/RPC إضافةً إلى إدخالات استجابة المتصفح لإطارات الرسوم المتحركة الطويلة أو المهام الطويلة عندما يعرّض المتصفح أنواع إدخالات PerformanceObserver تلك.
- السجلات: ذيل حي لسجلات ملفات Gateway مع التصفية/التصدير (`logs.tail`).
- التحديث: تشغيل تحديث حزمة/git + إعادة التشغيل (`update.run`) مع تقرير إعادة تشغيل، ثم استطلاع `update.status` بعد إعادة الاتصال للتحقق من إصدار Gateway الجاري تشغيله.
</Accordion>
<Accordion title="ملاحظات لوحة مهام Cron">
- بالنسبة للمهام المعزولة، يكون التسليم افتراضيًا على إعلان الملخص. يمكنك التبديل إلى لا شيء إذا أردت تشغيلات داخلية فقط.
<Accordion title="Cron jobs panel notes">
- بالنسبة للوظائف المعزولة، يكون التسليم افتراضيًا على إعلان الملخص. يمكنك التبديل إلى لا شيء إذا أردت تشغيلات داخلية فقط.
- تظهر حقول القناة/الهدف عند تحديد الإعلان.
- يستخدم وضع Webhook القيمة `delivery.mode = "webhook"` مع ضبط `delivery.to` على عنوان URL صالح لـ HTTP(S) webhook.
- بالنسبة لمهام الجلسة الرئيسية، تتوفر أوضاع تسليم webhook ولا شيء.
- تتضمن عناصر التحكم المتقدمة في التحرير الحذف بعد التشغيل، ومسح تجاوز الوكيل، وخيارات cron الدقيقة/المتدرجة، وتجاوزات نموذج/تفكير الوكيل، ومفاتيح تسليم بأفضل جهد.
- يكون التحقق من النموذج مضمّنًا مع أخطاء على مستوى الحقل؛ وتؤدي القيم غير الصالحة إلى تعطيل زر الحفظ حتى إصلاحها.
- اضبط `cron.webhookToken` لإرسال رمز bearer مخصص، وإذا حُذف يُرسل Webhook بدون ترويسة مصادقة.
- بديل مهمل: لا تزال المهام القديمة المخزنة التي تحتوي على `notify: true` تستطيع استخدام `cron.webhook` حتى يتم ترحيلها.
- يستخدم وضع Webhook `delivery.mode = "webhook"` مع ضبط `delivery.to` على عنوان URL صالح لـ HTTP(S) webhook.
- بالنسبة لوظائف الجلسة الرئيسية، تتوفر أوضاع تسليم Webhook ولا شيء.
- تتضمن عناصر التحكم في التحرير المتقدم الحذف بعد التشغيل، ومسح تجاوز الوكيل، وخيارات Cron الدقيقة/المتدرجة، وتجاوزات نموذج/تفكير الوكيل، ومفاتيح تبديل التسليم بأفضل جهد.
- يكون تحقق النموذج مضمنًا مع أخطاء على مستوى الحقل؛ وتعطّل القيم غير الصالحة زر الحفظ حتى تُصلح.
- اضبط `cron.webhookToken` لإرسال رمز حامل مخصص؛ إذا أُهمل، يُرسل Webhook بدون ترويسة مصادقة.
- البديل المهمل: لا تزال الوظائف القديمة المخزنة مع `notify: true` قادرة على استخدام `cron.webhook` حتى تُرحّل.
</Accordion>
</AccordionGroup>
@ -156,62 +156,65 @@ x-i18n:
<AccordionGroup>
<Accordion title="دلالات الإرسال والسجل">
- `chat.send` **غير حاجب**: يقرّ فورًا بـ `{ runId, status: "started" }` ويتدفق الرد عبر أحداث `chat`.
- تقبل عمليات رفع الدردشة الصور إضافة إلى الملفات غير المرئية. تحتفظ الصور بمسار الصورة الأصلي؛ وتُخزَّن الملفات الأخرى كوسائط مُدارة وتظهر في السجل كروابط مرفقات.
- `chat.send` **غير حاجب**: يقر فورا بـ `{ runId, status: "started" }` ويتم بث الاستجابة عبر أحداث `chat`.
- تقبل تحميلات الدردشة الصور إضافة إلى الملفات غير المرئية. تحتفظ الصور بمسار الصورة الأصلي؛ وتخزن الملفات الأخرى كوسائط مدارة وتظهر في السجل كروابط مرفقات.
- تؤدي إعادة الإرسال باستخدام `idempotencyKey` نفسه إلى إرجاع `{ status: "in_flight" }` أثناء التشغيل، و`{ status: "ok" }` بعد الاكتمال.
- تكون ردود `chat.history` محدودة الحجم لضمان سلامة واجهة المستخدم. عندما تكون إدخالات النص المنسوخ كبيرة جدًا، قد يقتطع Gateway حقول النص الطويلة، ويحذف كتل البيانات الوصفية الثقيلة، ويستبدل الرسائل كبيرة الحجم بعنصر نائب (`[chat.history omitted: message too large]`).
- تُحفَظ الصور التي ينشئها المساعد كإشارات إلى وسائط مُدارة وتُقدَّم مرة أخرى عبر عناوين URL لوسائط Gateway المصادَق عليها، لذلك لا تعتمد عمليات إعادة التحميل على بقاء حمولات الصور الخام بترميز base64 في رد سجل الدردشة.
- يزيل `chat.history` أيضًا وسوم التوجيه المضمنة الخاصة بالعرض فقط من نص المساعد المرئي (مثل `[[reply_to_*]]` و`[[audio_as_voice]]`)، وحمولات XML لاستدعاءات الأدوات ذات النص العادي (بما في ذلك `<tool_call>...</tool_call>` و`<function_call>...</function_call>` و`<tool_calls>...</tool_calls>` و`<function_calls>...</function_calls>` وكتل استدعاءات الأدوات المقتطعة)، ورموز التحكم المسرّبة للنموذج بصيغة ASCII/العرض الكامل، ويحذف إدخالات المساعد التي يكون نصها المرئي بالكامل هو الرمز الصامت الدقيق فقط `NO_REPLY` / `no_reply`.
- أثناء إرسال نشط وتحديث السجل النهائي، تُبقي طريقة عرض الدردشة رسائل المستخدم/المساعد المحلية المتفائلة مرئية إذا أعاد `chat.history` لفترة وجيزة لقطة أقدم؛ ويستبدل النص المنسوخ المعتمد تلك الرسائل المحلية عندما يلحق سجل Gateway.
- أحداث `chat` الحية تمثل حالة التسليم، بينما يُعاد بناء `chat.history` من النص المنسوخ الدائم للجلسة. بعد أحداث tool-final، تعيد Control UI تحميل السجل وتدمج فقط ذيلًا متفائلًا صغيرًا؛ ويُوثَّق حد النص المنسوخ في [WebChat](/ar/web/webchat).
- يضيف `chat.inject` ملاحظة مساعد إلى النص المنسوخ للجلسة ويبث حدث `chat` لتحديثات واجهة المستخدم فقط (لا تشغيل للوكيل، ولا تسليم للقناة).
- تُصحّح منتقيات نموذج ترويسة الدردشة والتفكير الجلسة النشطة فورًا عبر `sessions.patch`؛ وهي تجاوزات جلسة دائمة، وليست خيارات إرسال لدورة واحدة فقط.
- تؤدي كتابة `/new` في Control UI إلى إنشاء جلسة لوحة معلومات جديدة والتحويل إليها مثل New Chat. وتُبقي كتابة `/reset` إعادة الضبط الصريحة في المكان نفسه من Gateway للجلسة الحالية.
- يطلب منتقي نموذج الدردشة عرض النموذج المُعدّ في Gateway. إذا كان `agents.defaults.models` موجودًا، فإن قائمة السماح هذه تقود المنتقي. وإلا فيعرض المنتقي إدخالات `models.providers.*.models` الصريحة إضافة إلى المزوّدين ذوي المصادقة القابلة للاستخدام. ويبقى الفهرس الكامل متاحًا عبر استدعاء RPC للتصحيح `models.list` مع `view: "all"`.
- عندما تُظهر تقارير استخدام جلسة Gateway الجديدة ضغط سياق مرتفعًا، تعرض منطقة مؤلف الدردشة تنبيه سياق، وعند مستويات Compaction الموصى بها، زرًا مضغوطًا يشغّل مسار Compaction العادي للجلسة. تُخفى لقطات الرموز القديمة حتى يبلّغ Gateway عن استخدام جديد مرة أخرى.
- تكون استجابات `chat.history` محدودة الحجم لسلامة واجهة المستخدم. عندما تكون إدخالات النص كبيرة جدا، قد يقتطع Gateway حقول النص الطويلة، ويحذف كتل البيانات الوصفية الثقيلة، ويستبدل الرسائل متجاوزة الحجم بعنصر نائب (`[chat.history omitted: message too large]`).
- تستمر صور المساعد/الصور المولدة كمراجع وسائط مدارة وتقدم مرة أخرى عبر عناوين URL لوسائط Gateway المصادق عليها، لذلك لا تعتمد عمليات إعادة التحميل على بقاء حمولات الصور الخام بصيغة base64 في استجابة سجل الدردشة.
- يزيل `chat.history` أيضا وسوم التوجيه المضمنة المخصصة للعرض فقط من نص المساعد المرئي (مثل `[[reply_to_*]]` و`[[audio_as_voice]]`)، وحمولات XML لاستدعاءات الأدوات بنص عادي (بما في ذلك `<tool_call>...</tool_call>`، و`<function_call>...</function_call>`، و`<tool_calls>...</tool_calls>`، و`<function_calls>...</function_calls>`، وكتل استدعاء الأدوات المقتطعة)، ورموز التحكم في النموذج المسرّبة بنمط ASCII/العرض الكامل، ويحذف إدخالات المساعد التي يكون كامل نصها المرئي هو رمز الصمت الدقيق `NO_REPLY` / `no_reply` فقط.
- أثناء إرسال نشط وتحديث السجل النهائي، يحتفظ عرض الدردشة برسائل المستخدم/المساعد المحلية المتفائلة مرئية إذا أعاد `chat.history` لقطة أقدم لفترة وجيزة؛ ويستبدل النص الرسمي تلك الرسائل المحلية بمجرد أن يلحق سجل Gateway.
- أحداث `chat` الحية هي حالة التسليم، بينما يعاد بناء `chat.history` من نص الجلسة الدائم. بعد أحداث الأداة النهائية، تعيد Control UI تحميل السجل وتدمج ذيلا متفائلا صغيرا فقط؛ وقد وُثق حد النص في [WebChat](/ar/web/webchat).
- يضيف `chat.inject` ملاحظة مساعد إلى نص الجلسة ويبث حدث `chat` لتحديثات واجهة المستخدم فقط (لا تشغيل وكيل، ولا تسليم قناة).
- يعرض رأس الدردشة مرشح الوكيل قبل منتقي الجلسة، ويكون منتقي الجلسة مقيدا بالوكيل المحدد. عند تبديل الوكلاء، لا تظهر إلا الجلسات المرتبطة بذلك الوكيل، ويعود إلى الجلسة الرئيسية لذلك الوكيل عندما لا تكون لديه أي جلسات لوحة معلومات محفوظة بعد.
- على عروض سطح المكتب، تبقى عناصر التحكم في الدردشة في صف مضغوط واحد وتنهار أثناء التمرير لأسفل في النص؛ ويؤدي التمرير لأعلى، أو الرجوع إلى الأعلى، أو بلوغ الأسفل إلى استعادة عناصر التحكم.
- تعرض الرسائل النصية المكررة المتتالية كفقاعة واحدة مع شارة عدد. أما الرسائل التي تحمل صورا أو مرفقات أو مخرجات أدوات أو معاينات لوحة رسم فتترك دون طي.
- يقوم منتقيا النموذج والتفكير في رأس الدردشة بتعديل الجلسة النشطة فورا عبر `sessions.patch`؛ فهي تجاوزات جلسة مستمرة، وليست خيارات إرسال لدور واحد فقط.
- تؤدي كتابة `/new` في Control UI إلى إنشاء جلسة لوحة معلومات جديدة نفسها والتبديل إليها مثل New Chat. وتحافظ كتابة `/reset` على إعادة الضبط الصريحة في المكان نفسه من Gateway للجلسة الحالية.
- يطلب منتقي نموذج الدردشة عرض النموذج المكون في Gateway. إذا كان `agents.defaults.models` موجودا، فإن قائمة السماح هذه تقود المنتقي. وإلا يعرض المنتقي إدخالات `models.providers.*.models` الصريحة إضافة إلى المزوّدين ذوي المصادقة القابلة للاستخدام. ويبقى الفهرس الكامل متاحا عبر RPC التصحيحي `models.list` مع `view: "all"`.
- عندما تعرض تقارير استخدام جلسة Gateway الحديثة ضغط سياق عاليا، تعرض منطقة مؤلف الدردشة إشعار سياق، وعند مستويات Compaction الموصى بها تعرض زرا مضغوطا يشغل مسار Compaction الجلسة المعتاد. وتخفى لقطات الرموز القديمة حتى يبلغ Gateway عن استخدام حديث مرة أخرى.
</Accordion>
<Accordion title="وضع الحديث (الوقت الحقيقي في المتصفح)">
يستخدم وضع الحديث مزوّد صوت في الوقت الحقيقي مسجلًا. اضبط OpenAI باستخدام `talk.provider: "openai"` مع `talk.providers.openai.apiKey`، أو اضبط Google باستخدام `talk.provider: "google"` مع `talk.providers.google.apiKey`؛ ولا يزال بالإمكان إعادة استخدام إعداد مزوّد الوقت الحقيقي للمكالمات الصوتية كخيار احتياطي. لا يتلقى المتصفح أبدًا مفتاح API قياسيًا للمزوّد. يتلقى OpenAI سر عميل Realtime مؤقتًا لـ WebRTC. ويتلقى Google Live رمز مصادقة Live API مقيدًا للاستخدام مرة واحدة لجلسة WebSocket في المتصفح، مع تعليمات وتصريحات أدوات مقفلة داخل الرمز بواسطة Gateway. يعمل المزوّدون الذين لا يوفّرون إلا جسرًا خلفيًا للوقت الحقيقي عبر نقل ترحيل Gateway، وبذلك تبقى بيانات الاعتماد ومقابس المورّد على جانب الخادم بينما ينتقل صوت المتصفح عبر استدعاءات RPC مصادَق عليها من Gateway. تُجمَّع مطالبة جلسة Realtime بواسطة Gateway؛ ولا يقبل `talk.realtime.session` تجاوزات تعليمات يقدّمها المستدعي.
<Accordion title="وضع التحدث (الوقت الحقيقي في المتصفح)">
يستخدم وضع التحدث مزود صوت في الوقت الحقيقي مسجلا. كوّن OpenAI باستخدام `talk.provider: "openai"` إضافة إلى `talk.providers.openai.apiKey`، أو كوّن Google باستخدام `talk.provider: "google"` إضافة إلى `talk.providers.google.apiKey`؛ ولا يزال بالإمكان إعادة استخدام إعدادات مزود الوقت الحقيقي لمكالمة الصوت كاحتياطي. لا يتلقى المتصفح أبدا مفتاح API قياسيا لمزود. يتلقى OpenAI سر عميل Realtime مؤقتا لـ WebRTC. ويتلقى Google Live رمز مصادقة Live API مقيدا لمرة واحدة لجلسة WebSocket في المتصفح، مع تعليمات وتصريحات أدوات مقفلة داخل الرمز بواسطة Gateway. المزودون الذين لا يعرضون إلا جسرا خلفيا في الوقت الحقيقي يعملون عبر نقل ترحيل Gateway، بحيث تبقى بيانات الاعتماد ومآخذ المورّد على جانب الخادم بينما تنتقل صوتيات المتصفح عبر RPCs مصادق عليها من Gateway. يجمع Gateway موجه جلسة Realtime؛ ولا يقبل `talk.realtime.session` تجاوزات تعليمات مقدمة من المستدعي.
في مؤلف الدردشة، يكون عنصر التحكم Talk هو زر الموجات بجانب زر إملاء الميكروفون. عند بدء Talk، يعرض صف حالة المؤلف `Connecting Talk...`، ثم `Talk live` أثناء اتصال الصوت، أو `Asking OpenClaw...` بينما يستشير استدعاء أداة في الوقت الحقيقي النموذج الأكبر المُعدّ عبر `chat.send`.
في مؤلف الدردشة، عنصر التحكم في التحدث هو زر الموجات بجانب زر إملاء الميكروفون. عندما يبدأ التحدث، يعرض صف حالة المؤلف `Connecting Talk...`، ثم `Talk live` أثناء اتصال الصوت، أو `Asking OpenClaw...` أثناء استشارة استدعاء أداة في الوقت الحقيقي للنموذج الأكبر المكون عبر `chat.send`.
اختبار دخان حي للمشرف: يتحقق `OPENAI_API_KEY=... GEMINI_API_KEY=... node --import tsx scripts/dev/realtime-talk-live-smoke.ts` من تبادل SDP لـ WebRTC في متصفح OpenAI، وإعداد WebSocket المتصفح برمز مقيد لـ Google Live، ومحوّل متصفح ترحيل Gateway مع وسائط ميكروفون مزيفة. لا يطبع الأمر إلا حالة المزوّد ولا يسجل الأسرار.
اختبار دخان حي للمشرفين: يتحقق `OPENAI_API_KEY=... GEMINI_API_KEY=... node --import tsx scripts/dev/realtime-talk-live-smoke.ts` من تبادل SDP الخاص بـ WebRTC لمتصفح OpenAI، وإعداد WebSocket لمتصفح Google Live برمز مقيد، ومحول متصفح ترحيل Gateway مع وسائط ميكروفون وهمية. لا يطبع الأمر إلا حالة المزود ولا يسجل الأسرار.
</Accordion>
<Accordion title="الإيقاف والإجهاض">
<Accordion title="الإيقاف والإلغاء">
- انقر **إيقاف** (يستدعي `chat.abort`).
- أثناء نشاط تشغيل، تصطف المتابعات العادية في قائمة انتظار. انقر **توجيه** على رسالة في قائمة الانتظار لحقن تلك المتابعة في الدورة الجارية.
- اكتب `/stop` (أو عبارات إجهاض مستقلة مثل `stop` و`stop action` و`stop run` و`stop openclaw` و`please stop`) للإجهاض خارج المسار.
- يدعم `chat.abort` الصيغة `{ sessionKey }` (دون `runId`) لإجهاض كل عمليات التشغيل النشطة لتلك الجلسة.
- أثناء نشاط تشغيل، تصطف المتابعات العادية في الطابور. انقر **توجيه** على رسالة في الطابور لحقن تلك المتابعة في الدور الجاري.
- اكتب `/stop` (أو عبارات إلغاء مستقلة مثل `stop`، و`stop action`، و`stop run`، و`stop openclaw`، و`please stop`) للإلغاء خارج النطاق.
- يدعم `chat.abort` الصيغة `{ sessionKey }` (دون `runId`) لإلغاء جميع عمليات التشغيل النشطة لتلك الجلسة.
</Accordion>
<Accordion title="الاحتفاظ الجزئي عند الإجهاض">
- عند إجهاض تشغيل، يمكن أن يظل نص المساعد الجزئي معروضًا في واجهة المستخدم.
- يحفظ Gateway نص المساعد الجزئي المُجهَض في سجل النص المنسوخ عند وجود مخرجات مخزنة مؤقتًا.
- تتضمن الإدخالات المحفوظة بيانات وصفية للإجهاض حتى يستطيع مستهلكو النص المنسوخ تمييز الأجزاء الجزئية الناتجة عن الإجهاض من مخرجات الاكتمال العادية.
<Accordion title="الاحتفاظ الجزئي عند الإلغاء">
- عند إلغاء تشغيل، لا يزال من الممكن عرض نص مساعد جزئي في واجهة المستخدم.
- يستمر Gateway في حفظ نص المساعد الجزئي الملغى في سجل النص عندما توجد مخرجات مخزنة مؤقتا.
- تتضمن الإدخالات المستمرة بيانات وصفية للإلغاء حتى يستطيع مستهلكو النص تمييز الأجزاء الجزئية الملغاة عن مخرجات الاكتمال العادية.
</Accordion>
</AccordionGroup>
## تثبيت PWA والدفع عبر الويب
تتضمن Control UI ملف `manifest.webmanifest` وعامل خدمة، لذلك يمكن للمتصفحات الحديثة تثبيتها كتطبيق PWA مستقل. يتيح Web Push لـ Gateway إيقاظ PWA المثبت باستخدام الإشعارات حتى عندما لا تكون علامة التبويب أو نافذة المتصفح مفتوحة.
توفر Control UI ملف `manifest.webmanifest` وعامل خدمة، لذلك يمكن للمتصفحات الحديثة تثبيتها كتطبيق PWA مستقل. يتيح Web Push لـ Gateway إيقاظ PWA المثبت بإشعارات حتى عندما لا تكون علامة التبويب أو نافذة المتصفح مفتوحة.
| السطح | ما يفعله |
| ---------------------------------------------------- | ------------------------------------------------------------------ |
| `ui/public/manifest.webmanifest` | بيان PWA. تعرض المتصفحات "Install app" بمجرد أن يصبح قابلًا للوصول. |
| `ui/public/sw.js` | عامل خدمة يتعامل مع أحداث `push` ونقرات الإشعارات. |
| `push/vapid-keys.json` (ضمن دليل حالة OpenClaw) | زوج مفاتيح VAPID يُنشأ تلقائيًا ويُستخدم لتوقيع حمولات Web Push. |
| `push/web-push-subscriptions.json` | نقاط نهاية اشتراك المتصفح المحفوظة. |
| ----------------------------------------------------- | ------------------------------------------------------------------ |
| `ui/public/manifest.webmanifest` | بيان PWA. تعرض المتصفحات "تثبيت التطبيق" بمجرد أن يصبح قابلا للوصول. |
| `ui/public/sw.js` | عامل خدمة يعالج أحداث `push` ونقرات الإشعارات. |
| `push/vapid-keys.json` (ضمن دليل حالة OpenClaw) | زوج مفاتيح VAPID مولد تلقائيا يستخدم لتوقيع حمولات Web Push. |
| `push/web-push-subscriptions.json` | نقاط نهاية اشتراكات المتصفح المستمرة. |
تجاوز زوج مفاتيح VAPID عبر متغيرات البيئة على عملية Gateway عندما تريد تثبيت المفاتيح (لعمليات النشر متعددة المضيفين، أو تدوير الأسرار، أو الاختبارات):
تجاوز زوج مفاتيح VAPID عبر متغيرات البيئة في عملية Gateway عندما تريد تثبيت المفاتيح (للنشر متعدد المضيفين، أو تدوير الأسرار، أو الاختبارات):
- `OPENCLAW_VAPID_PUBLIC_KEY`
- `OPENCLAW_VAPID_PRIVATE_KEY`
- `OPENCLAW_VAPID_SUBJECT` (الافتراضي `mailto:openclaw@localhost`)
تستخدم Control UI طرق Gateway هذه المقيدة بالنطاق لتسجيل اشتراكات المتصفح واختبارها:
تستخدم Control UI طرق Gateway المقيدة بالنطاق هذه لتسجيل اشتراكات المتصفح واختبارها:
- `push.web.vapidPublicKey` — يجلب مفتاح VAPID العام النشط.
- `push.web.subscribe` — يسجل `endpoint` إضافة إلى `keys.p256dh`/`keys.auth`.
@ -219,22 +222,22 @@ x-i18n:
- `push.web.test` — يرسل إشعار اختبار إلى اشتراك المستدعي.
<Note>
Web Push مستقل عن مسار ترحيل APNS في iOS (راجع [الإعداد](/ar/gateway/configuration) للدفع المدعوم بالترحيل) وعن طريقة `push.test` الحالية، التي تستهدف إقران الأجهزة المحمولة الأصلية.
Web Push مستقل عن مسار ترحيل iOS APNS (راجع [الإعداد](/ar/gateway/configuration) للدفع المدعوم بالترحيل) وعن طريقة `push.test` الحالية، التي تستهدف إقران الأجهزة المحمولة الأصلية.
</Note>
## التضمينات المستضافة
يمكن لرسائل المساعد عرض محتوى ويب مستضاف مضمنًا باستخدام الرمز المختصر `[embed ...]`. تتحكم `gateway.controlUi.embedSandbox` في سياسة صندوق عزل iframe:
يمكن أن تعرض رسائل المساعد محتوى ويب مستضافا مضمنا باستخدام الرمز المختصر `[embed ...]`. تتحكم `gateway.controlUi.embedSandbox` في سياسة صندوق رمل iframe:
<Tabs>
<Tab title="strict">
يعطل تنفيذ البرامج النصية داخل التضمينات المستضافة.
<Tab title="صارم">
يعطل تنفيذ النصوص البرمجية داخل التضمينات المستضافة.
</Tab>
<Tab title="scripts (default)">
يسمح بالتضمينات التفاعلية مع الحفاظ على عزل الأصل؛ وهذا هو الإعداد الافتراضي ويكفي عادةً لألعاب/ودجات المتصفح المستقلة.
<Tab title="النصوص البرمجية (الافتراضي)">
يسمح بالتضمينات التفاعلية مع إبقاء عزل الأصل؛ هذا هو الإعداد الافتراضي ويكفي عادة لألعاب/ودجات المتصفح المستقلة.
</Tab>
<Tab title="trusted">
يضيف `allow-same-origin` فوق `allow-scripts` للمستندات من الموقع نفسه التي تحتاج عمدًا إلى صلاحيات أقوى.
<Tab title="موثوق">
يضيف `allow-same-origin` فوق `allow-scripts` للمستندات من الموقع نفسه التي تحتاج عمدا إلى امتيازات أقوى.
</Tab>
</Tabs>
@ -251,14 +254,14 @@ Web Push مستقل عن مسار ترحيل APNS في iOS (راجع [الإعد
```
<Warning>
استخدم `trusted` فقط عندما يحتاج المستند المضمّن فعلًا إلى سلوك الأصل نفسه. بالنسبة إلى معظم الألعاب واللوحات التفاعلية التي ينشئها الوكيل، يكون `scripts` الخيار الأكثر أمانًا.
استخدم `trusted` فقط عندما يحتاج المستند المضمن فعلا إلى سلوك من نفس الأصل. بالنسبة إلى معظم الألعاب ولوحات الرسم التفاعلية المولدة بواسطة الوكيل، يكون `scripts` الخيار الأكثر أمانا.
</Warning>
تبقى عناوين URL الخارجية المطلقة من نوع `http(s)` للتضمين محظورة افتراضيًا. إذا كنت تريد عمدًا أن يحمّل `[embed url="https://..."]` صفحات تابعة لجهات خارجية، فاضبط `gateway.controlUi.allowExternalEmbedUrls: true`.
تظل عناوين URL الخارجية المطلقة لتضمينات `http(s)` محظورة افتراضيا. إذا كنت تريد عمدا أن يحمل `[embed url="https://..."]` صفحات خارجية، فعيّن `gateway.controlUi.allowExternalEmbedUrls: true`.
## عرض رسالة الدردشة
تستخدم رسائل الدردشة المجمعة حدًا أقصى افتراضيًا للعرض يسهل قراءته. يمكن لعمليات النشر على الشاشات العريضة تجاوزه دون تعديل CSS المضمنة، وذلك بضبط `gateway.controlUi.chatMessageMaxWidth`:
تستخدم رسائل الدردشة المجمعة عرضا أقصى افتراضيا مريحا للقراءة. يمكن لعمليات النشر على الشاشات العريضة تجاوزه دون تعديل CSS المضمن عن طريق تعيين `gateway.controlUi.chatMessageMaxWidth`:
```json5
{
@ -270,13 +273,13 @@ Web Push مستقل عن مسار ترحيل APNS في iOS (راجع [الإعد
}
```
تُتحقق القيمة قبل أن تصل إلى المتصفح. تشمل القيم المدعومة الأطوال والنسب المئوية البسيطة مثل `960px` أو `82%`، إضافة إلى تعبيرات العرض المقيدة `min(...)` و`max(...)` و`clamp(...)` و`calc(...)` و`fit-content(...)`.
يتحقق من القيمة قبل أن تصل إلى المتصفح. تشمل القيم المدعومة الأطوال والنسب المئوية العادية مثل `960px` أو `82%`، إضافة إلى تعبيرات العرض المقيدة `min(...)`، و`max(...)`، و`clamp(...)`، و`calc(...)`، و`fit-content(...)`.
## الوصول إلى tailnet (موصى به)
## الوصول عبر Tailnet (موصى به)
<Tabs>
<Tab title="Tailscale Serve المدمج (مفضل)">
أبقِ Gateway على loopback ودع Tailscale Serve يوكّله عبر HTTPS:
<Tab title="Tailscale Serve المتكامل (المفضل)">
أبق Gateway على local loopback ودع Tailscale Serve يمرره عبر HTTPS:
```bash
openclaw gateway --tailscale serve
@ -284,14 +287,14 @@ Web Push مستقل عن مسار ترحيل APNS في iOS (راجع [الإعد
افتح:
- `https://<magicdns>/` (أو `gateway.controlUi.basePath` الذي ضبطته)
- `https://<magicdns>/` (أو `gateway.controlUi.basePath` المكون لديك)
افتراضيًا، يمكن لمتطلبات Control UI/WebSocket Serve المصادقة عبر ترويسات هوية Tailscale (`tailscale-user-login`) عندما تكون `gateway.auth.allowTailscale` هي `true`. يتحقق OpenClaw من الهوية بحل عنوان `x-forwarded-for` باستخدام `tailscale whois` ومطابقته مع الترويسة، ولا يقبلها إلا عندما يصل الطلب إلى loopback مع ترويسات Tailscale من نوع `x-forwarded-*`. بالنسبة إلى جلسات مشغل Control UI ذات هوية جهاز المتصفح، يتجاوز مسار Serve المتحقق هذا أيضًا رحلة إقران الجهاز؛ أما المتصفحات بلا جهاز واتصالات دور العقدة فتظل تتبع فحوصات الجهاز العادية. اضبط `gateway.auth.allowTailscale: false` إذا كنت تريد طلب بيانات اعتماد سر مشترك صريحة حتى لحركة Serve. ثم استخدم `gateway.auth.mode: "token"` أو `"password"`.
افتراضيا، يمكن لمطالب Control UI/WebSocket Serve المصادقة عبر ترويسات هوية Tailscale (`tailscale-user-login`) عندما تكون `gateway.auth.allowTailscale` هي `true`. يتحقق OpenClaw من الهوية عبر حل عنوان `x-forwarded-for` باستخدام `tailscale whois` ومطابقته بالترويسة، ولا يقبل هذه إلا عندما يصل الطلب إلى local loopback مع ترويسات `x-forwarded-*` الخاصة بـ Tailscale. بالنسبة إلى جلسات مشغل Control UI ذات هوية جهاز المتصفح، يتخطى مسار Serve المتحقق هذا أيضا رحلة إقران الجهاز؛ أما المتصفحات بلا جهاز واتصالات دور العقدة فتظل تتبع فحوصات الجهاز العادية. عيّن `gateway.auth.allowTailscale: false` إذا كنت تريد طلب بيانات اعتماد سر مشترك صريحة حتى لحركة Serve. ثم استخدم `gateway.auth.mode: "token"` أو `"password"`.
بالنسبة إلى مسار هوية Serve غير المتزامن هذا، تُسلسَل محاولات المصادقة الفاشلة لعنوان IP العميل ونطاق المصادقة نفسيهما قبل كتابات حد المعدل. لذلك يمكن أن تُظهر محاولات إعادة المحاولة السيئة المتزامنة من المتصفح نفسه `retry later` في الطلب الثاني بدلًا من عدم تطابقين عاديين يتسابقان بالتوازي.
بالنسبة إلى مسار هوية Serve غير المتزامن هذا، تسلسل محاولات المصادقة الفاشلة لعنوان IP العميل ونطاق المصادقة نفسيهما قبل كتابات حد المعدل. لذلك يمكن أن تظهر محاولات الإعادة السيئة المتزامنة من المتصفح نفسه `retry later` في الطلب الثاني بدلا من تسابق عدم تطابقين عاديين بالتوازي.
<Warning>
تفترض مصادقة Serve بلا رمز أن مضيف Gateway موثوق. إذا كان من الممكن تشغيل تعليمات برمجية محلية غير موثوقة على ذلك المضيف، فاطلب مصادقة برمز/كلمة مرور.
تفترض مصادقة Serve بلا رمز أن مضيف Gateway موثوق. إذا كان من الممكن تشغيل شيفرة محلية غير موثوقة على ذلك المضيف، فاطلب مصادقة رمز/كلمة مرور.
</Warning>
</Tab>
@ -302,24 +305,24 @@ Web Push مستقل عن مسار ترحيل APNS في iOS (راجع [الإعد
ثم افتح:
- `http://<tailscale-ip>:18789/` (أو `gateway.controlUi.basePath` الذي ضبطته)
- `http://<tailscale-ip>:18789/` (أو `gateway.controlUi.basePath` المكون لديك)
الصق السر المشترك المطابق في إعدادات واجهة المستخدم (يُرسل كـ `connect.params.auth.token` أو `connect.params.auth.password`).
ألصق السر المشترك المطابق في إعدادات واجهة المستخدم (يُرسل كـ `connect.params.auth.token` أو `connect.params.auth.password`).
</Tab>
</Tabs>
## HTTP غير الآمن
## HTTP غير آمن
إذا فتحت لوحة المعلومات عبر HTTP عادي (`http://<lan-ip>` أو `http://<tailscale-ip>`)، يعمل المتصفح في **سياق غير آمن** ويحظر WebCrypto. افتراضيًا، **يحظر** OpenClaw اتصالات Control UI دون هوية جهاز.
إذا فتحت لوحة المعلومات عبر HTTP عادي (`http://<lan-ip>` أو `http://<tailscale-ip>`)، يعمل المتصفح في **سياق غير آمن** ويحظر WebCrypto. افتراضيًا، **يحظر** OpenClaw اتصالات واجهة التحكم دون هوية جهاز.
الاستثناءات الموثقة:
- توافق HTTP غير الآمن الخاص بـ localhost فقط مع `gateway.controlUi.allowInsecureAuth=true`
- نجاح مصادقة مشغل Control UI عبر `gateway.auth.mode: "trusted-proxy"`
- توافق HTTP غير الآمن للمضيف المحلي فقط مع `gateway.controlUi.allowInsecureAuth=true`
- مصادقة مشغّل واجهة التحكم الناجحة عبر `gateway.auth.mode: "trusted-proxy"`
- خيار الطوارئ `gateway.controlUi.dangerouslyDisableDeviceAuth=true`
**الإصلاح الموصى به:** استخدم HTTPS (Tailscale Serve) أو افتح الواجهة محليًا:
**الإصلاح الموصى به:** استخدم HTTPS (Tailscale Serve) أو افتح واجهة المستخدم محليًا:
- `https://<magicdns>/` (Serve)
- `http://127.0.0.1:18789/` (على مضيف Gateway)
@ -336,11 +339,11 @@ Web Push مستقل عن مسار ترحيل APNS في iOS (راجع [الإعد
}
```
`allowInsecureAuth` هو مفتاح توافق محلي فقط:
`allowInsecureAuth` هو خيار توافق محلي فقط:
- يسمح لجلسات واجهة التحكم على localhost بالمتابعة دون هوية الجهاز في سياقات HTTP غير الآمنة.
- لا يتجاوز فحوصات الإقران.
- لا يخفف متطلبات هوية الجهاز البعيد (غير localhost).
- يسمح لجلسات واجهة التحكم على المضيف المحلي بالمتابعة دون هوية جهاز في سياقات HTTP غير الآمنة.
- لا يتجاوز فحوصات الاقتران.
- لا يخفف متطلبات هوية الجهاز البعيد (غير المضيف المحلي).
</Accordion>
<Accordion title="للطوارئ فقط">
@ -355,14 +358,14 @@ Web Push مستقل عن مسار ترحيل APNS في iOS (راجع [الإعد
```
<Warning>
يعطل `dangerouslyDisableDeviceAuth` فحوصات هوية الجهاز في واجهة التحكم، وهو خفض أمني شديد. أعده سريعًا بعد الاستخدام الطارئ.
يعطل `dangerouslyDisableDeviceAuth` فحوصات هوية جهاز واجهة التحكم، وهو خفض شديد لمستوى الأمان. أعده بسرعة بعد الاستخدام الطارئ.
</Warning>
</Accordion>
<Accordion title="ملاحظة الوكيل الموثوق">
- يمكن لمصادقة الوكيل الموثوق الناجحة إدخال جلسات واجهة التحكم الخاصة بـ **المشغل** دون هوية الجهاز.
- هذا **لا** يمتد إلى جلسات واجهة التحكم ذات دور العقدة.
- لا تزال وكلاء reverse proxy عبر loopback على المضيف نفسه لا تستوفي مصادقة الوكيل الموثوق؛ راجع [مصادقة الوكيل الموثوق](/ar/gateway/trusted-proxy-auth).
- يمكن لمصادقة الوكيل الموثوق الناجحة أن تسمح بجلسات واجهة التحكم الخاصة **بالمشغّل** دون هوية جهاز.
- لا يمتد هذا إلى جلسات واجهة التحكم بدور العقدة.
- لا تزال وكلاء reverse proxy عبر local loopback على المضيف نفسه لا تستوفي مصادقة الوكيل الموثوق؛ راجع [مصادقة الوكيل الموثوق](/ar/gateway/trusted-proxy-auth).
</Accordion>
</AccordionGroup>
@ -371,46 +374,46 @@ Web Push مستقل عن مسار ترحيل APNS في iOS (راجع [الإعد
## سياسة أمان المحتوى
تأتي واجهة التحكم مع سياسة `img-src` صارمة: يُسمح فقط بالأصول من **نفس المصدر**، وعناوين URL من نوع `data:`، وعناوين URL من نوع `blob:` المنشأة محليًا. يرفض المتصفح عناوين URL البعيدة من نوع `http(s)` والعناوين النسبية إلى البروتوكول، ولا يصدر طلبات جلب شبكية.
تأتي واجهة التحكم بسياسة `img-src` صارمة: يُسمح فقط بالأصول ذات **المصدر نفسه**، وعناوين URL من نوع `data:`، وعناوين URL من نوع `blob:` المُنشأة محليًا. يرفض المتصفح عناوين صور `http(s)` البعيدة والعناوين النسبية للبروتوكول، ولا يرسل طلبات شبكة لها.
ما يعنيه ذلك عمليًا:
- لا تزال الصور الرمزية والصور المقدمة ضمن مسارات نسبية (على سبيل المثال `/avatars/<id>`) تُعرض، بما في ذلك مسارات الصور الرمزية المصادق عليها التي تجلبها الواجهة وتحولها إلى عناوين URL محلية من نوع `blob:`.
- لا تزال عناوين URL المضمنة `data:image/...` تُعرض (مفيدة للحمولات داخل البروتوكول).
- لا تزال الصور الرمزية والصور المقدمة عبر مسارات نسبية (مثل `/avatars/<id>`) تُعرض، بما في ذلك مسارات الصور الرمزية المصادق عليها التي تجلبها واجهة المستخدم وتحولها إلى عناوين URL محلية من نوع `blob:`.
- لا تزال عناوين URL المضمنة من نوع `data:image/...` تُعرض (مفيدة للحمولات داخل البروتوكول).
- لا تزال عناوين URL المحلية من نوع `blob:` التي تنشئها واجهة التحكم تُعرض.
- تُزال عناوين URL البعيدة للصور الرمزية التي تصدرها بيانات تعريف القناة عند مساعدات الصور الرمزية في واجهة التحكم وتُستبدل بالشعار/الشارة المدمجة، لذلك لا يمكن لقناة مخترقة أو خبيثة أن تجبر متصفح المشغل على جلب صور بعيدة عشوائية.
- تُزال عناوين URL البعيدة للصور الرمزية الصادرة من بيانات تعريف القناة في مساعدات الصور الرمزية الخاصة بواجهة التحكم، وتُستبدل بالشعار/الشارة المضمنة، لذلك لا تستطيع قناة مخترقة أو ضارة إجبار متصفح المشغّل على جلب صور بعيدة عشوائية.
لا تحتاج إلى تغيير أي شيء للحصول على هذا السلوك — فهو مفعل دائمًا وغير قابل للتكوين.
لا تحتاج إلى تغيير أي شيء للحصول على هذا السلوك — فهو مفعّل دائمًا وغير قابل للتكوين.
## مصادقة مسار الصورة الرمزية
عند تكوين مصادقة Gateway، تتطلب نقطة نهاية الصورة الرمزية في واجهة التحكم رمز Gateway نفسه كبقية API:
- يعيد `GET /avatar/<agentId>` صورة الصورة الرمزية للمتصلين المصادق عليهم فقط. ويعيد `GET /avatar/<agentId>?meta=1` بيانات تعريف الصورة الرمزية وفق القاعدة نفسها.
- تُرفض الطلبات غير المصادق عليها إلى أي من المسارين (مطابقة لمسار وسائط المساعد الشقيق). يمنع هذا مسار الصورة الرمزية من تسريب هوية الوكيل على المضيفين المحمية بخلاف ذلك.
- تمرر واجهة التحكم نفسها رمز Gateway كترويسة bearer عند جلب الصور الرمزية، وتستخدم عناوين URL مصادقًا عليها من نوع blob بحيث تظل الصورة معروضة في لوحات المعلومات.
- يعيد `GET /avatar/<agentId>` صورة الصورة الرمزية للمتصلين المصادق عليهم فقط. يعيد `GET /avatar/<agentId>?meta=1` بيانات تعريف الصورة الرمزية وفق القاعدة نفسها.
- تُرفض الطلبات غير المصادق عليها إلى أي من المسارين (بما يطابق مسار وسائط المساعد الشقيق). يمنع ذلك مسار الصورة الرمزية من تسريب هوية الوكيل على المضيفات المحمية بخلاف ذلك.
- تمرر واجهة التحكم نفسها رمز Gateway كترويسة bearer عند جلب الصور الرمزية، وتستخدم عناوين URL مصادقًا عليها من نوع blob حتى تستمر الصورة في الظهور في لوحات المعلومات.
إذا عطلت مصادقة Gateway (غير موصى به على المضيفين المشتركين)، يصبح مسار الصورة الرمزية أيضًا غير مصادق عليه، بما يتماشى مع بقية Gateway.
إذا عطلت مصادقة Gateway (غير موصى به على المضيفات المشتركة)، يصبح مسار الصورة الرمزية غير مصادق عليه أيضًا، بما يتماشى مع بقية Gateway.
## مصادقة مسار وسائط المساعد
عند تكوين مصادقة Gateway، تستخدم معاينات الوسائط المحلية للمساعد مسارًا من خطوتين:
- يتطلب `GET /__openclaw__/assistant-media?meta=1&source=<path>` مصادقة مشغل واجهة التحكم العادية. يرسل المتصفح رمز Gateway كترويسة bearer عند التحقق من التوفر.
- تتضمن استجابات بيانات التعريف الناجحة `mediaTicket` قصير العمر ومقيدًا بمسار المصدر الدقيق.
- تستخدم عناوين URL للصور والصوت والفيديو والمستندات التي يعرضها المتصفح `mediaTicket=<ticket>` بدلًا من رمز Gateway النشط أو كلمة المرور. تنتهي صلاحية التذكرة سريعًا ولا يمكنها تخويل مصدر مختلف.
- يتطلب `GET /__openclaw__/assistant-media?meta=1&source=<path>` مصادقة مشغّل واجهة التحكم العادية. يرسل المتصفح رمز Gateway كترويسة bearer عند التحقق من التوفر.
- تتضمن استجابات بيانات التعريف الناجحة `mediaTicket` قصير العمر ومحدد النطاق على مسار المصدر الدقيق.
- تستخدم عناوين URL للصور والصوت والفيديو والمستندات المعروضة في المتصفح `mediaTicket=<ticket>` بدلًا من رمز Gateway النشط أو كلمة المرور. تنتهي صلاحية التذكرة بسرعة ولا يمكنها تخويل مصدر مختلف.
يحافظ هذا على توافق عرض الوسائط العادي مع عناصر الوسائط الأصلية في المتصفح دون وضع بيانات اعتماد Gateway القابلة لإعادة الاستخدام في عناوين URL المرئية للوسائط.
يحافظ ذلك على توافق عرض الوسائط العادي مع عناصر الوسائط الأصلية في المتصفح دون وضع بيانات اعتماد Gateway القابلة لإعادة الاستخدام في عناوين URL مرئية للوسائط.
## بناء الواجهة
## بناء واجهة المستخدم
يقدم Gateway ملفات ثابتة من `dist/control-ui`. ابنها باستخدام:
يقدم Gateway الملفات الثابتة من `dist/control-ui`. ابنها باستخدام:
```bash
pnpm ui:build
```
قاعدة مطلقة اختيارية (عندما تريد عناوين URL ثابتة للأصول):
أساس مطلق اختياري (عندما تريد عناوين URL ثابتة للأصول):
```bash
OPENCLAW_CONTROL_UI_BASE_PATH=/openclaw/ pnpm ui:build
@ -422,14 +425,14 @@ OPENCLAW_CONTROL_UI_BASE_PATH=/openclaw/ pnpm ui:build
pnpm ui:dev
```
ثم وجّه الواجهة إلى عنوان URL الخاص بـ Gateway WS (مثل `ws://127.0.0.1:18789`).
ثم وجّه واجهة المستخدم إلى عنوان URL الخاص بـ Gateway WS لديك (مثل `ws://127.0.0.1:18789`).
## تصحيح الأخطاء/الاختبار: خادم التطوير + Gateway بعيد
## التصحيح/الاختبار: خادم تطوير + Gateway بعيد
واجهة التحكم هي ملفات ثابتة؛ هدف WebSocket قابل للتكوين ويمكن أن يكون مختلفًا عن مصدر HTTP. هذا مفيد عندما تريد خادم تطوير Vite محليًا بينما يعمل Gateway في مكان آخر.
واجهة التحكم هي ملفات ثابتة؛ هدف WebSocket قابل للتكوين ويمكن أن يكون مختلفًا عن أصل HTTP. هذا مفيد عندما تريد خادم تطوير Vite محليًا بينما يعمل Gateway في مكان آخر.
<Steps>
<Step title="ابدأ خادم تطوير الواجهة">
<Step title="ابدأ خادم تطوير واجهة المستخدم">
```bash
pnpm ui:dev
```
@ -451,16 +454,16 @@ pnpm ui:dev
<AccordionGroup>
<Accordion title="ملاحظات">
- يُخزن `gatewayUrl` في localStorage بعد التحميل ويُزال من عنوان URL.
- إذا مررت نقطة نهاية كاملة `ws://` أو `wss://` عبر `gatewayUrl`، فقم بترميز قيمة `gatewayUrl` كعنوان URL حتى يفسر المتصفح سلسلة الاستعلام بشكل صحيح.
- يجب تمرير `token` عبر جزء عنوان URL (`#token=...`) كلما أمكن. لا تُرسل الأجزاء إلى الخادم، مما يتجنب تسربها في سجلات الطلب وReferer. لا تزال معاملات الاستعلام القديمة `?token=` تُستورد مرة واحدة للتوافق، لكن كخيار احتياطي فقط، وتُزال فورًا بعد bootstrap.
- إذا مررت نقطة نهاية كاملة `ws://` أو `wss://` عبر `gatewayUrl`، فرمز قيمة `gatewayUrl` كعنوان URL حتى يفسر المتصفح سلسلة الاستعلام بشكل صحيح.
- ينبغي تمرير `token` عبر جزء عنوان URL (`#token=...`) كلما أمكن. لا تُرسل الأجزاء إلى الخادم، ما يتجنب تسرب سجلات الطلبات وReferer. لا تزال معاملات الاستعلام القديمة `?token=` تُستورد مرة واحدة للتوافق، لكن كخيار احتياطي فقط، وتُزال فورًا بعد التمهيد.
- يُحتفظ بـ `password` في الذاكرة فقط.
- عند تعيين `gatewayUrl`، لا تعود الواجهة إلى بيانات اعتماد التكوين أو البيئة. وفر `token` (أو `password`) صراحةً. غياب بيانات الاعتماد الصريحة خطأ.
- عند تعيين `gatewayUrl`، لا تعود واجهة المستخدم إلى بيانات اعتماد التكوين أو البيئة. قدم `token` (أو `password`) صراحةً. غياب بيانات الاعتماد الصريحة خطأ.
- استخدم `wss://` عندما يكون Gateway خلف TLS (Tailscale Serve، وكيل HTTPS، وما إلى ذلك).
- لا يُقبل `gatewayUrl` إلا في نافذة على المستوى الأعلى (وليس مضمنًا) لمنع clickjacking.
- يجب أن تضبط عمليات نشر واجهة التحكم غير loopback قيمة `gateway.controlUi.allowedOrigins` صراحةً (مصادر كاملة). يشمل ذلك إعدادات التطوير البعيدة.
- قد يبذر بدء تشغيل Gateway مصادر محلية مثل `http://localhost:<port>` و`http://127.0.0.1:<port>` من bind والمنفذ الفعالين وقت التشغيل، لكن مصادر المتصفح البعيدة لا تزال تحتاج إلى إدخالات صريحة.
- لا تستخدم `gateway.controlUi.allowedOrigins: ["*"]` إلا للاختبار المحلي الخاضع لرقابة صارمة. فهي تعني السماح لأي مصدر متصفح، وليس "طابق أي مضيف أستخدمه."
- يفعّل `gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=true` وضع الرجوع إلى مصدر ترويسة Host، لكنه وضع أمني خطير.
- لا يُقبل `gatewayUrl` إلا في نافذة من المستوى الأعلى (غير مضمنة) لمنع clickjacking.
- يجب على عمليات نشر واجهة التحكم خارج loopback تعيين `gateway.controlUi.allowedOrigins` صراحةً (الأصول الكاملة). يشمل ذلك إعدادات التطوير البعيدة.
- قد يزرع بدء تشغيل Gateway أصولًا محلية مثل `http://localhost:<port>` و`http://127.0.0.1:<port>` من الربط والمنفذ الفعالين وقت التشغيل، لكن أصول المتصفحات البعيدة لا تزال تحتاج إلى إدخالات صريحة.
- لا تستخدم `gateway.controlUi.allowedOrigins: ["*"]` إلا للاختبار المحلي المحكوم بإحكام. يعني ذلك السماح لأي أصل متصفح، وليس "مطابقة أي مضيف أستخدمه."
- يفعّل `gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=true` وضع الرجوع إلى أصل ترويسة Host، لكنه وضع أمان خطير.
</Accordion>
</AccordionGroup>
@ -482,6 +485,6 @@ pnpm ui:dev
## ذو صلة
- [لوحة المعلومات](/ar/web/dashboard) — لوحة معلومات Gateway
- [فحوصات الصحة](/ar/gateway/health) — مراقبة صحة Gateway
- [فحوصات السلامة](/ar/gateway/health) — مراقبة سلامة Gateway
- [TUI](/ar/web/tui) — واجهة مستخدم طرفية
- [WebChat](/ar/web/webchat) — واجهة دردشة مستندة إلى المتصفح