chore(i18n): refresh ar translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-05-06 09:07:12 +00:00
parent 7365aa2f75
commit feefb63e4a
10 changed files with 2354 additions and 2350 deletions

View File

@ -1,94 +1,94 @@
---
read_when:
- تحتاج إلى فهم سبب تشغيل مهمة CI أو عدم تشغيلها
- أنت تصحّح فحصًا فاشلًا في GitHub Actions
- تحتاج إلى فهم سبب تشغيل مهمة التكامل المستمر أو عدم تشغيلها
- أنت تعمل على تصحيح أخطاء فحص GitHub Actions فاشل
- أنت تنسّق تشغيل التحقق من الإصدار أو إعادة تشغيله
- أنت تغيّر إرسال ClawSweeper أو إعادة توجيه نشاط GitHub
- أنت تغيّر إرسال ClawSweeper أو تمرير نشاط GitHub
summary: مخطط مهام CI، وبوابات النطاق، ومظلات الإصدار، ومكافئات الأوامر المحلية
title: مسار التكامل المستمر
x-i18n:
generated_at: "2026-05-05T06:16:33Z"
generated_at: "2026-05-06T09:02:31Z"
model: gpt-5.5
provider: openai
source_hash: 31fe6704e18f9efc519a1a73fc3aa8ae3909d6a27553874eb477e73979a94af2
source_hash: 189f717fac369d6374102612308c73705f19eca9baca81b24f052dbd5357e15f
source_path: ci.md
workflow: 16
---
يشغّل OpenClaw CI عند كل دفع إلى `main` وكل طلب سحب. تصنّف مهمة `preflight` الفروق وتوقف المسارات المكلفة عندما تتغير مناطق غير ذات صلة فقط. تتجاوز تشغيلات `workflow_dispatch` اليدوية النطاق الذكي عمدًا وتوسّع الرسم البياني الكامل لمرشحي الإصدارات والتحقق الواسع. تبقى مسارات Android اختيارية عبر `include_android`. توجد تغطية Plugins الخاصة بالإصدارات فقط في سير عمل [`Plugin ما قبل الإصدار`](#plugin-prerelease) المنفصل، ولا تعمل إلا من [`التحقق الكامل من الإصدار`](#full-release-validation) أو إرسال يدوي صريح.
تشغّل OpenClaw CI عند كل دفع إلى `main` وكل طلب سحب. تصنّف مهمة `preflight` الفرق وتعطّل المسارات المكلفة عندما تتغير مناطق غير ذات صلة فقط. تتجاوز تشغيلات `workflow_dispatch` اليدوية بوعي النطاق الذكي وتوسّع الرسم البياني الكامل لمرشحي الإصدارات والتحقق الواسع. تبقى مسارات Android اختيارية عبر `include_android`. تقع تغطية Plugin الخاصة بالإصدارات فقط في سير العمل المنفصل [`Plugin Prerelease`](#plugin-prerelease)، ولا تعمل إلا من [`Full Release Validation`](#full-release-validation) أو من تشغيل يدوي صريح.
## نظرة عامة على خط الأنابيب
| المهمة | الغرض | متى تعمل |
| -------------------------------- | --------------------------------------------------------------------------------------------------------- | ---------------------------------- |
| `preflight` | اكتشاف تغييرات التوثيق فقط، والنطاقات المتغيرة، والامتدادات المتغيرة، وبناء بيان CI | دائمًا عند الدفعات وطلبات السحب غير المسودة |
| `preflight` | اكتشاف تغييرات الوثائق فقط، والنطاقات المتغيرة، والامتدادات المتغيرة، وبناء بيان CI | دائمًا عند الدفعات وطلبات السحب غير المسودة |
| `security-scm-fast` | اكتشاف المفاتيح الخاصة وتدقيق سير العمل عبر `zizmor` | دائمًا عند الدفعات وطلبات السحب غير المسودة |
| `security-dependency-audit` | تدقيق ملف القفل الإنتاجي دون تبعيات مقابل إرشادات npm الأمنية | دائمًا عند الدفعات وطلبات السحب غير المسودة |
| `security-dependency-audit` | تدقيق ملف القفل الإنتاجي بلا اعتماديات مقابل تحذيرات npm | دائمًا عند الدفعات وطلبات السحب غير المسودة |
| `security-fast` | تجميع مطلوب لمهام الأمان السريعة | دائمًا عند الدفعات وطلبات السحب غير المسودة |
| `check-dependencies` | تمرير Knip للإنتاج الخاص بالتبعيات فقط، إضافة إلى حارس قائمة السماح للملفات غير المستخدمة | تغييرات ذات صلة بـ Node |
| `build-artifacts` | بناء `dist/`، وواجهة التحكم، وفحوصات مخرجات البناء، ومخرجات قابلة لإعادة الاستخدام للمراحل اللاحقة | تغييرات ذات صلة بـ Node |
| `checks-fast-core` | مسارات صحة Linux السريعة مثل فحوصات المجمّع/عقد Plugin/البروتوكول | تغييرات ذات صلة بـ Node |
| `checks-fast-contracts-channels` | فحوصات عقود القنوات المقسمة إلى أجزاء مع نتيجة فحص تجميعية ثابتة | تغييرات ذات صلة بـ Node |
| `checks-node-core-test` | أجزاء اختبارات Node الأساسية، مع استبعاد مسارات القنوات، والمجمّعات، والعقود، والامتدادات | تغييرات ذات صلة بـ Node |
| `check` | مكافئ البوابة المحلية الرئيسية المقسمة: أنواع الإنتاج، والـ lint، والحراس، وأنواع الاختبارات، واختبار smoke صارم | تغييرات ذات صلة بـ Node |
| `check-additional` | البنية، وانجراف الحدود/المطالبات المقسم، وحراس الامتدادات، وحدود الحزم، ومراقبة Gateway | تغييرات ذات صلة بـ Node |
| `build-smoke` | اختبارات smoke للـ CLI المبني وSmoke لذاكرة بدء التشغيل | تغييرات ذات صلة بـ Node |
| `checks` | متحقق لاختبارات القنوات الخاصة بمخرجات البناء | تغييرات ذات صلة بـ Node |
| `checks-node-compat-node22` | مسار بناء وتحقق smoke للتوافق مع Node 22 | إرسال CI يدوي للإصدارات |
| `check-docs` | تنسيق التوثيق، وlint، وفحوصات الروابط المعطلة | عند تغيّر التوثيق |
| `check-dependencies` | تمرير Knip الإنتاجي الخاص بالاعتماديات فقط، إضافة إلى حارس قائمة السماح للملفات غير المستخدمة | تغييرات ذات صلة بـ Node |
| `build-artifacts` | بناء `dist/`، وواجهة التحكم، وفحوصات الآثار المبنية، والآثار القابلة لإعادة الاستخدام لاحقًا | تغييرات ذات صلة بـ Node |
| `checks-fast-core` | مسارات صحة Linux السريعة مثل فحوصات المضمن/عقد Plugin/البروتوكول | تغييرات ذات صلة بـ Node |
| `checks-fast-contracts-channels` | فحوصات عقود القنوات المجزأة مع نتيجة فحص تجميعية مستقرة | تغييرات ذات صلة بـ Node |
| `checks-node-core-test` | أجزاء اختبارات Node الأساسية، باستثناء مسارات القنوات والمضمن والعقود والامتدادات | تغييرات ذات صلة بـ Node |
| `check` | المكافئ المجزأ للبوابة المحلية الرئيسية: أنواع الإنتاج، والفحص، والحراس، وأنواع الاختبارات، وفحص الدخان الصارم | تغييرات ذات صلة بـ Node |
| `check-additional` | المعمارية، وانحراف الحدود/المطالبات المجزأ، وحراس الامتدادات، وحدود الحزم، ومراقبة Gateway | تغييرات ذات صلة بـ Node |
| `build-smoke` | اختبارات دخان CLI المبنية ودخان ذاكرة بدء التشغيل | تغييرات ذات صلة بـ Node |
| `checks` | متحقق لاختبارات القنوات للآثار المبنية | تغييرات ذات صلة بـ Node |
| `checks-node-compat-node22` | مسار بناء ودخان توافق Node 22 | تشغيل CI يدوي للإصدارات |
| `check-docs` | تنسيق الوثائق وفحصها وفحوصات الروابط المعطلة | تغيّرت الوثائق |
| `skills-python` | Ruff + pytest للـ Skills المدعومة بـ Python | تغييرات ذات صلة بـ Skills في Python |
| `checks-windows` | اختبارات العمليات/المسارات الخاصة بـ Windows، إضافة إلى انحدارات محددات استيراد وقت التشغيل المشتركة | تغييرات ذات صلة بـ Windows |
| `macos-node` | مسار اختبار TypeScript على macOS باستخدام مخرجات البناء المشتركة | تغييرات ذات صلة بـ macOS |
| `macos-swift` | Swift lint، والبناء، والاختبارات لتطبيق macOS | تغييرات ذات صلة بـ macOS |
| `android` | اختبارات وحدة Android لكلا النكهتين، إضافة إلى بناء APK تصحيح واحد | تغييرات ذات صلة بـ Android |
| `test-performance-agent` | تحسين يومي لاختبارات Codex البطيئة بعد نشاط موثوق | نجاح CI الرئيسي أو إرسال يدوي |
| `openclaw-performance` | تقارير أداء يومية/عند الطلب لوقت تشغيل Kova مع مسارات موفر وهمي، وملف تعريف عميق، وGPT 5.4 مباشر | إرسال مجدول ويدوي |
| `checks-windows` | اختبارات العمليات/المسارات الخاصة بـ Windows إضافة إلى تراجعات محددات استيراد وقت التشغيل المشتركة | تغييرات ذات صلة بـ Windows |
| `macos-node` | مسار اختبارات TypeScript على macOS باستخدام الآثار المبنية المشتركة | تغييرات ذات صلة بـ macOS |
| `macos-swift` | فحص Swift والبناء والاختبارات لتطبيق macOS | تغييرات ذات صلة بـ macOS |
| `android` | اختبارات وحدات Android لكلا النكهتين إضافة إلى بناء APK تصحيحي واحد | تغييرات ذات صلة بـ Android |
| `test-performance-agent` | تحسين يومي لاختبارات Codex البطيئة بعد نشاط موثوق | نجاح CI الرئيسي أو تشغيل يدوي |
| `openclaw-performance` | تقارير أداء وقت تشغيل Kova يومية/عند الطلب مع مسارات مزود وهمي، وتحليل عميق، وGPT 5.4 حي | مجدول وتشغيل يدوي |
## ترتيب الفشل السريع
1. تقرر `preflight` أي المسارات موجودة أصلًا. منطق `docs-scope` و`changed-scope` خطوات داخل هذه المهمة، وليس مهامًا مستقلة.
2. تفشل `security-scm-fast`، و`security-dependency-audit`، و`security-fast`، و`check`، و`check-additional`، و`check-docs`، و`skills-python` سريعًا دون انتظار مهام المصفوفة الأثقل الخاصة بالمخرجات والمنصات.
3. تتداخل `build-artifacts` مع مسارات Linux السريعة حتى يتمكن المستهلكون اللاحقون من البدء بمجرد أن يصبح البناء المشترك جاهزًا.
4. تتوسع بعد ذلك مسارات المنصات ووقت التشغيل الأثقل: `checks-fast-core`، و`checks-fast-contracts-channels`، و`checks-node-core-test`، و`checks`، و`checks-windows`، و`macos-node`، و`macos-swift`، و`android`.
1. يقرر `preflight` أي المسارات توجد أصلًا. منطق `docs-scope` و`changed-scope` هو خطوات داخل هذه المهمة، وليس مهامًا مستقلة.
2. تفشل `security-scm-fast` و`security-dependency-audit` و`security-fast` و`check` و`check-additional` و`check-docs` و`skills-python` بسرعة من دون انتظار مهام الآثار الثقيلة ومصفوفة المنصات.
3. يتداخل `build-artifacts` مع مسارات Linux السريعة لكي يتمكن المستهلكون اللاحقون من البدء فور جاهزية البناء المشترك.
4. تتوسع مسارات المنصات ووقت التشغيل الأثقل بعد ذلك: `checks-fast-core` و`checks-fast-contracts-channels` و`checks-node-core-test` و`checks` و`checks-windows` و`macos-node` و`macos-swift` و`android`.
قد يعلّم GitHub المهام التي تجاوزها دفع أحدث على نفس طلب السحب أو مرجع `main` بأنها `cancelled`. تعامل مع ذلك كضجيج CI ما لم يكن أحدث تشغيل لنفس المرجع يفشل أيضًا. تستخدم فحوصات تجميع الأجزاء `!cancelled() && always()` حتى تظل تبلغ عن إخفاقات الأجزاء العادية، لكنها لا تصطف بعد أن يكون سير العمل كله قد تم تجاوزه بالفعل. مفتاح التزامن التلقائي لـ CI ذو إصدار (`CI-v7-*`) بحيث لا يستطيع عالق من جهة GitHub في مجموعة طابور قديمة أن يحظر تشغيلات main الأحدث إلى أجل غير مسمى. تستخدم تشغيلات المجموعة الكاملة اليدوية `CI-manual-v1-*` ولا تلغي التشغيلات الجارية.
قد يضع GitHub علامة `cancelled` على المهام التي تجاوزها تشغيل أحدث عندما تصل دفعة أحدث إلى طلب السحب نفسه أو مرجع `main`. تعامل مع ذلك كضجيج CI ما لم يكن أحدث تشغيل للمرجع نفسه يفشل أيضًا. تستخدم فحوصات تجميع الأجزاء `!cancelled() && always()` بحيث تستمر في الإبلاغ عن إخفاقات الأجزاء العادية، لكنها لا تصطف بعد أن يكون سير العمل بأكمله قد تجاوزه تشغيل أحدث. مفتاح تزامن CI التلقائي مُرقّم بالإصدار (`CI-v7-*`) بحيث لا يستطيع كائن GitHub عالق في مجموعة طابور قديمة حظر تشغيلات main الأحدث إلى أجل غير مسمى. تستخدم تشغيلات المجموعة الكاملة اليدوية `CI-manual-v1-*` ولا تلغي التشغيلات الجارية.
## النطاق والتوجيه
يوجد منطق النطاق في `scripts/ci-changed-scope.mjs` وتغطيه اختبارات وحدة في `src/scripts/ci-changed-scope.test.ts`. يتخطى الإرسال اليدوي اكتشاف النطاق المتغير ويجعل بيان preflight يتصرف كما لو أن كل منطقة ذات نطاق قد تغيرت.
يقع منطق النطاق في `scripts/ci-changed-scope.mjs` وتغطيه اختبارات وحدات في `src/scripts/ci-changed-scope.test.ts`. يتخطى التشغيل اليدوي اكتشاف النطاق المتغير ويجعل بيان preflight يتصرف كما لو أن كل منطقة محددة النطاق قد تغيّرت.
- **تعديلات سير عمل CI** تتحقق من رسم CI الخاص بـ Node إضافة إلى lint لسير العمل، لكنها لا تفرض وحدها عمليات بناء Windows أو Android أو macOS الأصلية؛ تبقى مسارات المنصات هذه مقيدة بتغييرات مصدر المنصة.
- **تعديلات التوجيه فقط في CI، وتعديلات محددة رخيصة على تجهيزات اختبارات النواة، وتعديلات ضيقة على مساعدات/توجيه اختبارات عقد Plugin** تستخدم مسار بيان سريعًا لـ Node فقط: `preflight`، والأمان، ومهمة `checks-fast-core` واحدة. يتخطى هذا المسار مخرجات البناء، وتوافق Node 22، وعقود القنوات، وأجزاء النواة الكاملة، وأجزاء Plugin المجمعة، ومصفوفات الحراس الإضافية عندما يقتصر التغيير على أسطح التوجيه أو المساعدات التي تختبرها المهمة السريعة مباشرة.
- **فحوصات Windows Node** مقيدة بأغلفة العمليات/المسارات الخاصة بـ Windows، ومساعدات مشغلات npm/pnpm/UI، وإعدادات مدير الحزم، وأسطح سير عمل CI التي تنفذ ذلك المسار؛ تبقى تغييرات المصدر، وPlugin، وinstall-smoke، والتغييرات الخاصة بالاختبارات فقط غير ذات الصلة على مسارات Linux Node.
- **تعديلات سير عمل CI** تتحقق من رسم CI الخاص بـ Node إضافة إلى فحص سير العمل، لكنها لا تفرض وحدها بناءات Windows أو Android أو macOS الأصلية؛ تبقى مسارات تلك المنصات محددة النطاق لتغييرات مصدر المنصة.
- **تعديلات توجيه CI فقط، وتعديلات مختارة لرُقم اختبارات core-test الرخيصة، وتعديلات ضيقة لمساعدات/توجيه اختبارات عقود Plugin** تستخدم مسار بيان سريع خاص بـ Node فقط: `preflight`، والأمان، ومهمة `checks-fast-core` واحدة. يتخطى ذلك المسار آثار البناء، وتوافق Node 22، وعقود القنوات، وأجزاء النواة الكاملة، وأجزاء Plugin المضمنة، ومصفوفات الحراس الإضافية عندما يقتصر التغيير على أسطح التوجيه أو المساعدات التي تمارسها المهمة السريعة مباشرة.
- **فحوصات Windows Node** محددة النطاق لمغلّفات العمليات/المسارات الخاصة بـ Windows، ومساعدات تشغيل npm/pnpm/UI، وإعدادات مدير الحزم، وأسطح سير عمل CI التي تنفذ ذلك المسار؛ تبقى تغييرات المصدر غير ذات الصلة، وPlugin، ودخان التثبيت، والاختبارات فقط على مسارات Linux Node.
تقسم أو توازن أبطأ عائلات اختبارات Node حتى تبقى كل مهمة صغيرة دون حجز زائد للمشغلات: تعمل عقود القنوات كثلاثة أجزاء موزونة، وتعمل مسارات الوحدة السريعة/الدعم الأساسية بشكل منفصل، وتنقسم بنية وقت تشغيل النواة بين أجزاء الحالة والعمليات/الإعدادات، ويعمل الرد التلقائي كعاملين متوازنين (مع تقسيم شجرة الرد الفرعية إلى أجزاء agent-runner، وdispatch، وcommands/state-routing)، كما تقسم إعدادات Gateway/الخادم الوكيل عبر مسارات chat/auth/model/http-plugin/runtime/startup بدلًا من انتظار مخرجات البناء. تستخدم اختبارات المتصفح الواسعة، وQA، والوسائط، وPlugin المتنوعة إعدادات Vitest المخصصة لها بدلًا من مجمّع Plugin المشترك. تسجل الأجزاء ذات أنماط التضمين إدخالات توقيت باستخدام اسم جزء CI، بحيث يستطيع `.artifacts/vitest-shard-timings.json` تمييز إعداد كامل من جزء مرشح. يبقي `check-additional` عمل ترجمة/Canary لحدود الحزم معًا ويفصل بنية طوبولوجيا وقت التشغيل عن تغطية مراقبة Gateway؛ تُوزع قائمة حارس الحدود عبر أربعة أجزاء مصفوفة، يشغّل كل منها حراسًا مستقلين محددين بالتوازي ويطبع توقيتات لكل فحص، بما في ذلك `pnpm prompt:snapshots:check` بحيث يثبّت انجراف مطالبات المسار السعيد لوقت تشغيل Codex على طلب السحب الذي سببه. تعمل مراقبة Gateway، واختبارات القنوات، وجزء حدود الدعم الأساسي بالتوازي داخل `build-artifacts` بعد بناء `dist/` و`dist-runtime/` بالفعل.
تُقسَّم أو تُوازَن عائلات اختبارات Node الأبطأ بحيث تبقى كل مهمة صغيرة من دون حجز زائد للمنفذين: تعمل عقود القنوات بثلاثة أجزاء موزونة، وتعمل مسارات core unit fast/support بشكل منفصل، وتُقسَّم بنية وقت تشغيل النواة بين أجزاء الحالة والعمليات/الإعدادات، ويعمل الرد التلقائي كعمال متوازنين (مع تقسيم شجرة الرد الفرعية إلى أجزاء agent-runner وdispatch وcommands/state-routing)، وتُقسَّم إعدادات Gateway/الخادم الوكيلة عبر مسارات chat/auth/model/http-plugin/runtime/startup بدلًا من انتظار الآثار المبنية. تستخدم اختبارات المتصفح الواسعة، وQA، والوسائط، واختبارات Plugin المتنوعة إعدادات Vitest المخصصة لها بدلًا من ملتقط Plugin المشترك العام. تسجل أجزاء أنماط التضمين إدخالات التوقيت باستخدام اسم جزء CI، بحيث يستطيع `.artifacts/vitest-shard-timings.json` تمييز إعداد كامل من جزء مُرشّح. يحافظ `check-additional` على عمل تجميع/اختبار حدود الحزمة معًا ويفصل معمارية طوبولوجيا وقت التشغيل عن تغطية مراقبة Gateway؛ تُقسَّم قائمة حراس الحدود عبر أربعة أجزاء مصفوفة، يشغّل كل منها حراسًا مستقلة مختارة بالتوازي ويطبع توقيتات لكل فحص، بما في ذلك `pnpm prompt:snapshots:check` بحيث يُثبّت انحراف مطالبات مسار Codex السعيد في وقت التشغيل على طلب السحب الذي سببه. تعمل مراقبة Gateway، واختبارات القنوات، وجزء حدود دعم النواة بالتوازي داخل `build-artifacts` بعد أن يكون `dist/` و`dist-runtime/` قد بُنيا بالفعل.
يشغل Android CI كلًا من `testPlayDebugUnitTest` و`testThirdPartyDebugUnitTest` ثم يبني Play debug APK. لا تحتوي نكهة الطرف الثالث على مجموعة مصدر أو بيان منفصل؛ لا يزال مسار اختبار الوحدة الخاص بها يترجم النكهة مع أعلام BuildConfig لسجل SMS/المكالمات، مع تجنب مهمة تغليف debug APK مكررة عند كل دفع ذي صلة بـ Android.
يشغّل Android CI كلًا من `testPlayDebugUnitTest` و`testThirdPartyDebugUnitTest` ثم يبني APK تصحيح Play. لا تملك نكهة الجهات الخارجية مجموعة مصدر أو بيانًا منفصلًا؛ لا يزال مسار اختبارات وحداتها يجمع النكهة مع أعلام BuildConfig الخاصة بـ SMS/سجل المكالمات، مع تجنب مهمة حزم APK تصحيحي مكرر عند كل دفعة ذات صلة بـ Android.
يشغل جزء `check-dependencies` الأمر `pnpm deadcode:dependencies` (تمرير Knip للإنتاج الخاص بالتبعيات فقط، مثبت على أحدث إصدار من Knip، مع تعطيل الحد الأدنى لعمر إصدار pnpm لتثبيت `dlx`) و`pnpm deadcode:unused-files`، الذي يقارن نتائج Knip للملفات الإنتاجية غير المستخدمة مع `scripts/deadcode-unused-files.allowlist.mjs`. يفشل حارس الملفات غير المستخدمة عندما يضيف طلب سحب ملفًا جديدًا غير مستخدم ولم تتم مراجعته أو يترك إدخالًا قديمًا في قائمة السماح، مع الحفاظ على أسطح Plugin الديناميكية، والمولدة، والبناء، والاختبارات المباشرة، وجسور الحزم التي لا يستطيع Knip حلها ثابتًا.
يشغّل جزء `check-dependencies` الأمر `pnpm deadcode:dependencies` (تمرير Knip إنتاجي خاص بالاعتماديات فقط ومثبت على أحدث إصدار Knip، مع تعطيل الحد الأدنى لعمر الإصدار في pnpm لتثبيت `dlx`) و`pnpm deadcode:unused-files`، الذي يقارن نتائج ملفات الإنتاج غير المستخدمة من Knip مع `scripts/deadcode-unused-files.allowlist.mjs`. يفشل حارس الملفات غير المستخدمة عندما يضيف طلب سحب ملفًا جديدًا غير مستخدم وغير مُراجع أو يترك إدخال قائمة سماح قديمًا، مع الحفاظ على أسطح Plugin الديناميكية، والمولدة، والبناء، والاختبارات الحية، وجسور الحزم المقصودة التي لا يستطيع Knip حلها ساكنًا.
## تمرير نشاط ClawSweeper
`.github/workflows/clawsweeper-dispatch.yml` هو الجسر في جهة الهدف من نشاط مستودع OpenClaw إلى ClawSweeper. لا يقوم بسحب أو تنفيذ كود طلبات السحب غير الموثوق. ينشئ سير العمل رمز GitHub App من `CLAWSWEEPER_APP_PRIVATE_KEY`، ثم يرسل حمولات `repository_dispatch` مدمجة إلى `openclaw/clawsweeper`.
`.github/workflows/clawsweeper-dispatch.yml` هو الجسر في جهة الهدف من نشاط مستودع OpenClaw إلى ClawSweeper. لا يجلب كود طلب سحب غير موثوق ولا ينفذه. ينشئ سير العمل رمز GitHub App من `CLAWSWEEPER_APP_PRIVATE_KEY`، ثم يرسل حمولات `repository_dispatch` مضغوطة إلى `openclaw/clawsweeper`.
يحتوي سير العمل على أربعة مسارات:
- `clawsweeper_item` لطلبات مراجعة المسائل وطلبات السحب الدقيقة؛
- `clawsweeper_comment` لأوامر ClawSweeper الصريحة في تعليقات المسائل؛
- `clawsweeper_commit_review` لطلبات المراجعة على مستوى الالتزام في دفعات `main`؛
- `clawsweeper_item` لطلبات مراجعة القضايا وطلبات السحب الدقيقة؛
- `clawsweeper_comment` لأوامر ClawSweeper الصريحة في تعليقات القضايا؛
- `clawsweeper_commit_review` لطلبات المراجعة على مستوى الالتزام عند الدفعات إلى `main`؛
- `github_activity` لنشاط GitHub العام الذي قد يفحصه وكيل ClawSweeper.
يمرر مسار `github_activity` بيانات وصفية موحدة فقط: نوع الحدث، والإجراء، والفاعل، والمستودع، ورقم العنصر، وURL، والعنوان، والحالة، ومقتطفات قصيرة للتعليقات أو المراجعات عند وجودها. يتجنب عمدًا تمرير جسم Webhook الكامل. سير العمل المستقبِل في `openclaw/clawsweeper` هو `.github/workflows/github-activity.yml`، والذي ينشر الحدث الموحد إلى خطاف OpenClaw Gateway لوكيل ClawSweeper.
يمرر مسار `github_activity` بيانات وصفية مُطبَّعة فقط: نوع الحدث، والإجراء، والفاعل، والمستودع، ورقم العنصر، وURL، والعنوان، والحالة، ومقتطفات قصيرة للتعليقات أو المراجعات عند وجودها. يتجنب عمدًا تمرير جسم Webhook الكامل. سير العمل المستقبل في `openclaw/clawsweeper` هو `.github/workflows/github-activity.yml`، الذي ينشر الحدث المُطبَّع إلى خطاف OpenClaw Gateway لوكيل ClawSweeper.
النشاط العام هو ملاحظة، وليس تسليمًا افتراضيًا. يتلقى وكيل ClawSweeper هدف Discord في مطالبته، وينبغي أن ينشر إلى `#clawsweeper` فقط عندما يكون الحدث مفاجئًا، أو قابلًا للتنفيذ، أو خطرًا، أو مفيدًا تشغيليًا. ينبغي أن تؤدي عمليات الفتح الروتينية، والتحرير، وضجيج البوتات، وضجيج Webhook المكرر، وحركة المراجعة العادية إلى `NO_REPLY`.
النشاط العام مراقبة، وليس تسليمًا افتراضيًا. يتلقى وكيل ClawSweeper هدف Discord في مطلبه ويجب أن ينشر إلى `#clawsweeper` فقط عندما يكون الحدث مفاجئًا أو قابلًا للتنفيذ أو محفوفًا بالمخاطر أو مفيدًا تشغيليًا. يجب أن تؤدي الفتحات الروتينية، والتعديلات، وضجيج الروبوتات، وضجيج Webhook المكرر، وحركة المراجعات العادية إلى `NO_REPLY`.
تعامل مع عناوين GitHub، والتعليقات، والنصوص، ونصوص المراجعات، وأسماء الفروع، ورسائل الالتزام كبيانات غير موثوقة طوال هذا المسار. إنها مدخلات للتلخيص والفرز، وليست تعليمات لسير العمل أو وقت تشغيل الوكيل.
تعامل مع عناوين GitHub وتعليقاته وأجسامه ونصوص المراجعات وأسماء الفروع ورسائل الالتزام كبيانات غير موثوقة طوال هذا المسار. إنها مدخلات للتلخيص والفرز، وليست تعليمات لسير العمل أو وقت تشغيل الوكيل.
## الإرسالات اليدوية
## التشغيلات اليدوية
تشغّل عمليات إرسال CI اليدوية مخطط المهام نفسه مثل CI العادي، لكنها تفرض تفعيل كل مسار محدود النطاق غير Android: تقسيمات Linux Node، وتقسيمات Plugin المضمّنة، وعقود القنوات، وتوافق Node 22، و`check`، و`check-additional`، واختبار البناء السريع، وفحوصات التوثيق، وPython skills، وWindows، وmacOS، وتدويل واجهة التحكم. تشغّل عمليات إرسال CI اليدوية المستقلة Android فقط مع `include_android=true`؛ وتمكّن مظلة الإصدار الكاملة Android عبر تمرير `include_android=true`. تُستثنى من CI الفحوصات الثابتة لما قبل إصدار Plugin، وتقسيم `agentic-plugins` الخاص بالإصدار فقط، والمسح الدفعي الكامل للإضافات، ومسارات Docker لما قبل إصدار Plugin. تعمل مجموعة Docker لما قبل الإصدار فقط عندما ترسل `Full Release Validation` سير عمل `Plugin Prerelease` المنفصل مع تمكين بوابة التحقق من الإصدار.
تعمل عمليات تشغيل CI اليدوية برسم الوظائف نفسه مثل CI العادي، لكنها تفرض تشغيل كل مسار محدد النطاق غير Android: أجزاء Linux Node، وأجزاء Plugin المضمنة، وعقود القنوات، وتوافق Node 22، و`check`، و`check-additional`، وفحص البناء السريع، وفحوصات التوثيق، وPython skills، وWindows، وmacOS، وتدويل واجهة Control UI. تعمل عمليات تشغيل CI اليدوية المستقلة على Android فقط باستخدام `include_android=true`؛ وتمكّن مظلة الإصدار الكاملة Android بتمرير `include_android=true`. تُستثنى من CI الفحوصات الثابتة لما قبل إصدار Plugin، وجزء `agentic-plugins` الخاص بالإصدار فقط، والمسح الدفعي الكامل للإضافات، ومسارات Docker لما قبل إصدار Plugin. لا تعمل مجموعة Docker لما قبل الإصدار إلا عندما يطلق `Full Release Validation` سير عمل `Plugin Prerelease` المنفصل مع تمكين بوابة التحقق من الإصدار.
تستخدم التشغيلات اليدوية مجموعة تزامن فريدة بحيث لا تُلغى المجموعة الكاملة لمرشح إصدار بسبب تشغيل دفع أو PR آخر على المرجع نفسه. يتيح إدخال `target_ref` الاختياري لمستدعٍ موثوق تشغيل ذلك المخطط مقابل فرع أو وسم أو SHA كامل لالتزام مع استخدام ملف سير العمل من مرجع الإرسال المحدد.
تستخدم عمليات التشغيل اليدوية مجموعة تزامن فريدة حتى لا تُلغى مجموعة مرشح إصدار كاملة بسبب تشغيل دفع أو PR آخر على المرجع نفسه. يتيح إدخال `target_ref` الاختياري لمستدع موثوق تشغيل ذلك الرسم على فرع أو وسم أو SHA كامل للالتزام مع استخدام ملف سير العمل من مرجع الإطلاق المحدد.
```bash
gh workflow run ci.yml --ref release/YYYY.M.D
@ -98,15 +98,15 @@ gh workflow run full-release-validation.yml --ref main -f ref=<branch-or-sha>
## المشغّلات
| المشغّل | المهام |
| -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ubuntu-24.04` | `preflight`، ومهام الأمان السريعة والتجميعات (`security-scm-fast`، و`security-dependency-audit`، و`security-fast`)، وفحوصات البروتوكول/العقود/المضمّنات السريعة، وفحوصات عقود القنوات المقسّمة، وتقسيمات `check` باستثناء lint، وتقسيمات وتجميعات `check-additional`، ومتحققات تجميع اختبارات Node، وفحوصات التوثيق، وPython skills، وworkflow-sanity، وlabeler، وauto-response؛ كما يستخدم تمهيد install-smoke بيئة Ubuntu المستضافة على GitHub حتى تتمكن مصفوفة Blacksmith من الاصطفاف مبكرًا |
| `blacksmith-4vcpu-ubuntu-2404` | `CodeQL Critical Quality`، وتقسيمات الإضافات الأخف وزنًا، و`checks-fast-core`، و`checks-node-compat-node22`، و`check-prod-types`، و`check-test-types` |
| `blacksmith-8vcpu-ubuntu-2404` | `build-artifacts`، وbuild-smoke، وتقسيمات اختبارات Linux Node، وتقسيمات اختبارات Plugin المضمّنة، و`android` |
| `blacksmith-16vcpu-ubuntu-2404` | `check-lint` (حساسة للمعالج بما يكفي لجعل 8 vCPU تكلّف أكثر مما وفّرته)؛ وبناءات Docker الخاصة بـ install-smoke (كان وقت انتظار صف 32-vCPU يكلّف أكثر مما وفّره) |
| `blacksmith-16vcpu-windows-2025` | `checks-windows` |
| `blacksmith-6vcpu-macos-latest` | `macos-node` على `openclaw/openclaw`؛ تعود الفروع المشتقة إلى `macos-latest` |
| `blacksmith-12vcpu-macos-latest` | `macos-swift` على `openclaw/openclaw`؛ تعود الفروع المشتقة إلى `macos-latest` |
| المشغّل | الوظائف |
| -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `ubuntu-24.04` | `preflight`، وظائف الأمان السريعة والتجميعات (`security-scm-fast`، `security-dependency-audit`، `security-fast`)، فحوصات البروتوكول/العقود/المضمنة السريعة، فحوصات عقود القنوات المجزأة، أجزاء `check` باستثناء lint، تجميعات `check-additional`، محققات تجميع اختبارات Node، فحوصات التوثيق، Python skills، workflow-sanity، labeler، auto-response؛ كما يستخدم فحص تمهيدي install-smoke Ubuntu مستضافا على GitHub حتى يمكن لمصفوفة Blacksmith الاصطفاف مبكرا |
| `blacksmith-4vcpu-ubuntu-2404` | `CodeQL Critical Quality`، أجزاء الإضافات الأقل وزنا، و`checks-fast-core`، و`checks-node-compat-node22`، و`check-prod-types`، و`check-test-types` |
| `blacksmith-8vcpu-ubuntu-2404` | `build-artifacts`، build-smoke، أجزاء اختبارات Linux Node، أجزاء اختبارات Plugin المضمنة، أجزاء `check-additional`، `android` |
| `blacksmith-16vcpu-ubuntu-2404` | `check-lint` (حساس بما يكفي للمعالج بحيث كلفت 8 vCPU أكثر مما وفرت)؛ وبناءات Docker الخاصة بـ install-smoke (كلف وقت انتظار 32-vCPU أكثر مما وفر) |
| `blacksmith-16vcpu-windows-2025` | `checks-windows` |
| `blacksmith-6vcpu-macos-latest` | `macos-node` على `openclaw/openclaw`؛ وتعود forks إلى `macos-latest` |
| `blacksmith-12vcpu-macos-latest` | `macos-swift` على `openclaw/openclaw`؛ وتعود forks إلى `macos-latest` |
## المكافئات المحلية
@ -137,7 +137,7 @@ pnpm perf:kova:summary --report .artifacts/kova/reports/mock-provider/report.jso
## أداء OpenClaw
`OpenClaw Performance` هو سير عمل أداء المنتج/وقت التشغيل. يعمل يوميًا على `main` ويمكن إرساله يدويًا:
`OpenClaw Performance` هو سير عمل أداء المنتج/وقت التشغيل. يعمل يوميا على `main` ويمكن إطلاقه يدويا:
```bash
gh workflow run openclaw-performance.yml --ref main -f profile=diagnostic -f repeat=3
@ -145,32 +145,32 @@ gh workflow run openclaw-performance.yml --ref main -f profile=smoke -f repeat=1
gh workflow run openclaw-performance.yml --ref main -f target_ref=v2026.5.2 -f profile=diagnostic -f repeat=3
```
يقيس الإرسال اليدوي عادةً مرجع سير العمل. اضبط `target_ref` لقياس وسم إصدار أو فرع آخر باستخدام تنفيذ سير العمل الحالي. تُفهرس مسارات التقارير المنشورة والمؤشرات الأحدث بحسب المرجع المختبر، ويسجّل كل `index.md` مرجع/SHA المختبر، ومرجع/SHA سير العمل، ومرجع Kova، والملف الشخصي، ووضع مصادقة المسار، والنموذج، وعدد التكرارات، ومرشحات السيناريو.
يقيس الإطلاق اليدوي عادة مرجع سير العمل. اضبط `target_ref` لقياس وسم إصدار أو فرع آخر باستخدام تنفيذ سير العمل الحالي. تُفهرس مسارات التقارير المنشورة ومؤشرات الأحدث بحسب المرجع المختبر، ويسجل كل `index.md` المرجع/SHA المختبر، ومرجع/SHA سير العمل، ومرجع Kova، والملف التعريفي، ووضع مصادقة المسار، والنموذج، وعدد التكرار، ومرشحات السيناريو.
يثبّت سير العمل OCM من إصدار مثبت وKova من `openclaw/Kova` عند إدخال `kova_ref` المثبت، ثم يشغّل ثلاثة مسارات:
يثبت سير العمل OCM من إصدار مثبت وKova من `openclaw/Kova` عند إدخال `kova_ref` المثبت، ثم يشغل ثلاثة مسارات:
- `mock-provider`: سيناريوهات Kova التشخيصية مقابل وقت تشغيل مبني محليًا مع مصادقة وهمية حتمية متوافقة مع OpenAI.
- `mock-deep-profile`: تحليل أداء CPU/heap/trace لنقاط السخونة في بدء التشغيل، وGateway، ودورة agent.
- `live-gpt54`: دورة agent حقيقية من OpenAI `openai/gpt-5.4`، وتُتخطى عندما لا يكون `OPENAI_API_KEY` متاحًا.
- `mock-provider`: سيناريوهات Kova التشخيصية مقابل وقت تشغيل مبني محليا مع مصادقة OpenAI متوافقة وهمية وحتمية.
- `mock-deep-profile`: تحليل أداء CPU/heap/trace لنقاط بدء التشغيل، وGateway، ومواطن بطء دورات الوكيل.
- `live-gpt54`: دورة وكيل OpenAI `openai/gpt-5.4` حقيقية، تُتخطى عندما لا يكون `OPENAI_API_KEY` متاحا.
يشغّل مسار mock-provider أيضًا تحقيقات مصدر أصلية من OpenClaw بعد مرور Kova: توقيت إقلاع Gateway والذاكرة عبر حالات بدء التشغيل الافتراضية، وhook، و50-Plugin؛ وحلقات ترحيب `channel-chat-baseline` متكررة باستخدام mock-OpenAI؛ وأوامر بدء CLI مقابل Gateway الذي تم إقلاعه. يوجد ملخص Markdown لتحقيق المصدر في `source/index.md` ضمن حزمة التقرير، وبجانبه JSON الخام.
يشغل مسار mock-provider أيضا مجسات مصدر أصلية لـ OpenClaw بعد مرور Kova: توقيت إقلاع Gateway والذاكرة عبر حالات بدء التشغيل الافتراضية، وhook، و50-Plugin؛ وحلقات ترحيب `channel-chat-baseline` مكررة باستخدام mock-OpenAI؛ وأوامر بدء CLI مقابل Gateway الذي تم إقلاعه. يوجد ملخص Markdown لمجس المصدر في `source/index.md` داخل حزمة التقرير، مع JSON الخام بجانبه.
يرفع كل مسار قطع GitHub الأثرية. عند تكوين `CLAWGRIT_REPORTS_TOKEN`، يلتزم سير العمل أيضًا بـ `report.json`، و`report.md`، والحزم، و`index.md`، وقطع تحقيق المصدر الأثرية إلى `openclaw/clawgrit-reports` تحت `openclaw-performance/<tested-ref>/<run-id>-<attempt>/<lane>/`. يُكتب مؤشر المرجع المختبر الحالي باسم `openclaw-performance/<tested-ref>/latest-<lane>.json`.
يرفع كل مسار مصنوعات GitHub. عندما يكون `CLAWGRIT_REPORTS_TOKEN` مهيأ، يثبت سير العمل أيضا `report.json`، و`report.md`، والحزم، و`index.md`، ومصنوعات مجسات المصدر في `openclaw/clawgrit-reports` تحت `openclaw-performance/<tested-ref>/<run-id>-<attempt>/<lane>/`. يُكتب مؤشر المرجع المختبر الحالي باسم `openclaw-performance/<tested-ref>/latest-<lane>.json`.
## التحقق الكامل من الإصدار
`Full Release Validation` هو سير العمل اليدوي المظلي لعبارة "تشغيل كل شيء قبل الإصدار". يقبل فرعًا أو وسمًا أو SHA كاملًا لالتزام، ويرسل سير عمل `CI` اليدوي بذلك الهدف، ويرسل `Plugin Prerelease` لإثباتات Plugin/الحزمة/الفحوصات الثابتة/Docker الخاصة بالإصدار فقط، ويرسل `OpenClaw Release Checks` لاختبار التثبيت السريع، وقبول الحزمة، وفحوصات الحزمة عبر أنظمة التشغيل، وتكافؤ QA Lab، وMatrix، ومسارات Telegram. تبقي التشغيلات المستقرة/الافتراضية تغطية live/E2E الشاملة ومسار إصدار Docker خلف `run_release_soak=true`؛ ويفرض `release_profile=full` تشغيل تغطية الاختبار المطوّل تلك حتى يبقى تحقق التنبيهات الواسع واسعًا. مع `rerun_group=all` و`release_profile=full`، يشغّل أيضًا `NPM Telegram Beta E2E` مقابل قطعة `release-package-under-test` الأثرية من فحوصات الإصدار. بعد النشر، مرّر `npm_telegram_package_spec` لإعادة تشغيل مسار حزمة Telegram نفسه مقابل حزمة npm المنشورة.
`Full Release Validation` هو سير العمل اليدوي المظلي لعبارة "شغّل كل شيء قبل الإصدار". يقبل فرعا أو وسما أو SHA كامل للالتزام، ويطلق سير عمل `CI` اليدوي بذلك الهدف، ويطلق `Plugin Prerelease` لإثبات Plugin/الحزمة/الفحوصات الثابتة/Docker الخاص بالإصدار فقط، ويطلق `OpenClaw Release Checks` لفحص التثبيت السريع، وقبول الحزمة، وفحوصات الحزم عبر أنظمة التشغيل، وتكافؤ QA Lab، وMatrix، ومسارات Telegram. تبقي عمليات التشغيل المستقرة/الافتراضية تغطية live/E2E الشاملة ومسار إصدار Docker خلف `run_release_soak=true`؛ ويفرض `release_profile=full` تشغيل تغطية التحمل هذه حتى يبقى التحقق الواسع من التنبيهات واسعا. مع `rerun_group=all` و`release_profile=full`، يشغل أيضا `NPM Telegram Beta E2E` مقابل مصنوع `release-package-under-test` من فحوصات الإصدار. بعد النشر، مرر `npm_telegram_package_spec` لإعادة تشغيل مسار حزمة Telegram نفسه مقابل حزمة npm المنشورة.
راجع [التحقق الكامل من الإصدار](/ar/reference/full-release-validation) للاطلاع على
مصفوفة المراحل، وأسماء مهام سير العمل الدقيقة، وفروقات الملفات الشخصية، والقطع الأثرية، و
مقابض إعادة التشغيل المركزة.
مصفوفة المراحل، وأسماء وظائف سير العمل الدقيقة، وفروق الملفات التعريفية، والمصنوعات، ومقابض
إعادة التشغيل المركزة.
`OpenClaw Release Publish` هو سير عمل الإصدار اليدوي المغيّر. أرسله
من `release/YYYY.M.D` أو `main` بعد وجود وسم الإصدار وبعد نجاح
تمهيد OpenClaw npm. يتحقق من `pnpm plugins:sync:check`،
ويرسل `Plugin NPM Release` لكل حزم Plugin القابلة للنشر، ويرسل
`Plugin ClawHub Release` للـ SHA نفسه الخاص بالإصدار، وبعد ذلك فقط يرسل
`OpenClaw NPM Release` مع `preflight_run_id` المحفوظ.
`OpenClaw Release Publish` هو سير عمل الإصدار اليدوي الذي يجري تغييرات. أطلقه
من `release/YYYY.M.D` أو `main` بعد وجود وسم الإصدار وبعد نجاح فحص
OpenClaw npm التمهيدي. يتحقق من `pnpm plugins:sync:check`،
ويطلق `Plugin NPM Release` لكل حزم Plugin القابلة للنشر، ويطلق
`Plugin ClawHub Release` للـ SHA نفسه الخاص بالإصدار، وبعد ذلك فقط يطلق
`OpenClaw NPM Release` باستخدام `preflight_run_id` المحفوظ.
```bash
gh workflow run openclaw-release-publish.yml \
@ -180,47 +180,41 @@ gh workflow run openclaw-release-publish.yml \
-f npm_dist_tag=beta
```
لإثبات التزام مثبت على فرع سريع الحركة، استخدم المساعد بدلًا من
لإثبات التزام مثبت على فرع سريع الحركة، استخدم المساعد بدلا من
`gh workflow run ... --ref main -f ref=<sha>`:
```bash
pnpm ci:full-release --sha <full-sha>
```
يجب أن تكون مراجع إرسال سير عمل GitHub فروعًا أو وسومًا، وليست SHAs خامًا للالتزامات. يدفع
المساعد فرعًا مؤقتًا باسم `release-ci/<sha>-...` عند SHA الهدف،
ويرسل `Full Release Validation` من ذلك المرجع المثبت، ويتحقق من أن كل
`headSha` لسير عمل فرعي يطابق الهدف، ويحذف الفرع المؤقت عندما
تكتمل التشغيل. كما يفشل متحقق المظلة إذا عمل أي سير عمل فرعي عند
يجب أن تكون مراجع إطلاق سير عمل GitHub فروعا أو وسوما، وليست SHAs خاما للالتزامات. يدفع
المساعد فرع `release-ci/<sha>-...` مؤقتا عند SHA الهدف،
ويطلق `Full Release Validation` من ذلك المرجع المثبت، ويتحقق من أن كل
`headSha` لسير عمل فرعي يطابق الهدف، ويحذف الفرع المؤقت عند اكتمال
التشغيل. يفشل محقق المظلة أيضا إذا عمل أي سير عمل فرعي عند
SHA مختلف.
`release_profile` يتحكم في اتساع المزوّد/الاختبارات المباشرة الذي يُمرَّر إلى فحوصات الإصدار. تكون
سير عمل الإصدار اليدوية افتراضياً على `stable`؛ استخدم `full` فقط عندما
تريد عمداً مصفوفة مزوّدي/وسائط الاستشارة الواسعة. يتحكم `run_release_soak`
في ما إذا كانت فحوصات الإصدار المستقرة/الافتراضية تشغّل اختبارات التحمل الشاملة للمباشر/E2E ومسار إصدار
Docker؛ يفرض `full` تشغيل اختبار التحمل.
`release_profile` يتحكم في نطاق المزودين/الاختبارات الحية المُمرَّر إلى فحوصات الإصدار. تعتمد سير عمل الإصدار اليدوية افتراضيًا على `stable`؛ استخدم `full` فقط عندما تريد عمدًا مصفوفة المزودين/الوسائط الاستشارية الواسعة. يتحكم `run_release_soak` فيما إذا كانت فحوصات الإصدار المستقرة/الافتراضية تشغّل اختبار التحمل الشامل للمسار الحي/E2E ومسار إصدار Docker؛ ويجبر `full` تشغيل اختبار التحمل.
- يبقي `minimum` أسرع مسارات OpenAI/النواة الحرجة للإصدار.
- يضيف `stable` مجموعة المزوّد/الخلفية المستقرة.
- يشغّل `full` مصفوفة مزوّدي/وسائط الاستشارة الواسعة.
- يحافظ `minimum` على أسرع مسارات OpenAI/النواة الحرجة للإصدار.
- يضيف `stable` مجموعة المزودين/الخلفيات المستقرة.
- يشغّل `full` مصفوفة المزودين/الوسائط الاستشارية الواسعة.
يسجّل الشامل معرّفات تشغيل الأبناء المُرسلة، وتعيد مهمة `Verify full validation` النهائية التحقق من نتائج تشغيل الأبناء الحالية وتُلحق جداول أبطأ المهام لكل تشغيل ابن. إذا أُعيد تشغيل سير عمل ابن وأصبح أخضر، فأعد تشغيل مهمة متحقق الأصل فقط لتحديث نتيجة الشامل وملخص التوقيت.
يسجل التشغيل الجامع معرّفات تشغيل الأبناء التي تم إطلاقها، وتعيد مهمة `Verify full validation` النهائية فحص نتائج تشغيل الأبناء الحالية وتلحق جداول أبطأ المهام لكل تشغيل ابن. إذا أُعيد تشغيل سير عمل ابن وتحول إلى أخضر، فأعد تشغيل مهمة التحقق الأصلية فقط لتحديث نتيجة التشغيل الجامع وملخص التوقيت.
للاسترداد، يقبل كل من `Full Release Validation` و`OpenClaw Release Checks` القيمة `rerun_group`. استخدم `all` لمرشح إصدار، و`ci` لابن CI الكامل العادي فقط، و`plugin-prerelease` لابن الإصدار التمهيدي للـ Plugin فقط، و`release-checks` لكل أبناء الإصدار، أو مجموعة أضيق: `install-smoke` أو `cross-os` أو `live-e2e` أو `package` أو `qa` أو `qa-parity` أو `qa-live` أو `npm-telegram` على الشامل. يبقي هذا إعادة تشغيل صندوق إصدار فاشل محدودة بعد إصلاح مركّز. لمسار cross-OS واحد فاشل، ادمج `rerun_group=cross-os` مع `cross_os_suite_filter`، مثل `windows/packaged-upgrade`؛ تُصدر أوامر cross-OS الطويلة أسطر Heartbeat، وتتضمن ملخصات packaged-upgrade توقيتات لكل مرحلة. مسارات QA release-check استشارية، لذلك تحذّر إخفاقات QA فقط لكنها لا تحظر متحقق release-check.
للاسترداد، يقبل كل من `Full Release Validation` و`OpenClaw Release Checks` قيمة `rerun_group`. استخدم `all` لمرشح إصدار، و`ci` لطفل CI الكامل العادي فقط، و`plugin-prerelease` لطفل ما قبل إصدار Plugin فقط، و`release-checks` لكل طفل إصدار، أو مجموعة أضيق: `install-smoke` أو `cross-os` أو `live-e2e` أو `package` أو `qa` أو `qa-parity` أو `qa-live` أو `npm-telegram` على التشغيل الجامع. هذا يُبقي إعادة تشغيل صندوق إصدار فاشل محدودة بعد إصلاح مركز. لمسار واحد فاشل عبر أنظمة التشغيل، اجمع `rerun_group=cross-os` مع `cross_os_suite_filter`، مثل `windows/packaged-upgrade`؛ تصدر أوامر أنظمة التشغيل الطويلة أسطر Heartbeat، وتتضمن ملخصات الترقية المعبأة توقيتات لكل مرحلة. مسارات فحص إصدار QA استشارية، لذا تُصدر إخفاقات QA فقط تحذيرًا لكنها لا تحجب متحقق فحوصات الإصدار.
تستخدم `OpenClaw Release Checks` مرجع سير العمل الموثوق لحل المرجع المحدد مرة واحدة إلى حزمة tarball باسم `release-package-under-test`، ثم تمرر ذلك الأثر إلى فحوصات cross-OS وPackage Acceptance، بالإضافة إلى سير عمل Docker لمسار إصدار المباشر/E2E عندما تعمل تغطية التحمل. يبقي ذلك بايتات الحزمة متسقة عبر صناديق الإصدار ويتجنب إعادة حزم المرشح نفسه في عدة مهام أبناء.
يستخدم `OpenClaw Release Checks` مرجع سير العمل الموثوق لحل المرجع المحدد مرة واحدة إلى أرشيف `release-package-under-test`، ثم يمرر ذلك الأثر إلى فحوصات أنظمة التشغيل وقبول الحزمة، إضافة إلى سير عمل Docker لمسار الإصدار الحي/E2E عند تشغيل تغطية التحمل. هذا يُبقي بايتات الحزمة متسقة عبر صناديق الإصدار ويتجنب إعادة تعبئة المرشح نفسه في عدة مهام أبناء.
تتجاوز تشغيلات `Full Release Validation` المكررة لـ `ref=main` و`rerun_group=all`
الشامل الأقدم. يلغي مراقب الأصل أي سير عمل ابن سبق أن أرسله
عند إلغاء الأصل، لذلك لا ينتظر تحقق main الأحدث خلف تشغيل release-check قديم مدته ساعتان. تُبقي عمليات التحقق من فرع/وسم الإصدار ومجموعات إعادة التشغيل المركزة `cancel-in-progress: false`.
تشغيلات `Full Release Validation` المكررة لـ `ref=main` و`rerun_group=all` تستبدل التشغيل الجامع الأقدم. يلغي مراقب الأصل أي سير عمل ابن كان قد أطلقه عندما يُلغى الأصل، لذلك لا يقف تحقق main الأحدث خلف تشغيل فحوصات إصدار قديم لمدة ساعتين. يحتفظ تحقق فرع/وسم الإصدار ومجموعات إعادة التشغيل المركزة بـ `cancel-in-progress: false`.
## شظايا المباشر وE2E
## أجزاء الاختبارات الحية وE2E
يبقي ابن المباشر/E2E للإصدار تغطية `pnpm test:live` الأصلية الواسعة، لكنه يشغّلها كشظايا مسماة عبر `scripts/test-live-shard.mjs` بدلاً من مهمة تسلسلية واحدة:
يحافظ طفل الإصدار الحي/E2E على تغطية `pnpm test:live` الأصلية الواسعة، لكنه يشغلها كأجزاء مسماة عبر `scripts/test-live-shard.mjs` بدلاً من مهمة تسلسلية واحدة:
- `native-live-src-agents`
- `native-live-src-gateway-core`
- مهام `native-live-src-gateway-profiles` المفلترة حسب المزوّد
- مهام `native-live-src-gateway-profiles` المفلترة حسب المزود
- `native-live-src-gateway-backends`
- `native-live-test`
- `native-live-extensions-a-k`
@ -228,35 +222,35 @@ Docker؛ يفرض `full` تشغيل اختبار التحمل.
- `native-live-extensions-openai`
- `native-live-extensions-o-z-other`
- `native-live-extensions-xai`
- شظايا صوت/فيديو وسائط مقسمة وشظايا موسيقى مفلترة حسب المزوّد
- أجزاء وسائط صوت/فيديو مقسمة وأجزاء موسيقى مفلترة حسب المزود
يبقي ذلك تغطية الملفات نفسها مع جعل إخفاقات مزوّد المباشر البطيئة أسهل في إعادة التشغيل والتشخيص. تظل أسماء الشظايا التجميعية `native-live-extensions-o-z` و`native-live-extensions-media` و`native-live-extensions-media-music` صالحة لإعادات التشغيل اليدوية ذات اللقطة الواحدة.
يحافظ ذلك على تغطية الملفات نفسها مع جعل إخفاقات المزودين الحية البطيئة أسهل في إعادة التشغيل والتشخيص. تظل أسماء الأجزاء التجميعية `native-live-extensions-o-z` و`native-live-extensions-media` و`native-live-extensions-media-music` صالحة لإعادات التشغيل اليدوية لمرة واحدة.
تعمل شظايا وسائط المباشر الأصلية في `ghcr.io/openclaw/openclaw-live-media-runner:ubuntu-24.04`، المبنية بواسطة سير عمل `Live Media Runner Image`. تثبّت تلك الصورة مسبقاً `ffmpeg` و`ffprobe`؛ تتحقق مهام الوسائط من الثنائيات فقط قبل الإعداد. أبقِ مجموعات المباشر المدعومة بـ Docker على مشغّلات Blacksmith العادية — فمهام الحاويات ليست المكان الصحيح لإطلاق اختبارات Docker المتداخلة.
تعمل أجزاء الوسائط الحية الأصلية داخل `ghcr.io/openclaw/openclaw-live-media-runner:ubuntu-24.04`، المبنية بواسطة سير عمل `Live Media Runner Image`. تثبت تلك الصورة `ffmpeg` و`ffprobe` مسبقًا؛ وتتحقق مهام الوسائط من الثنائيات فقط قبل الإعداد. أبقِ الحزم الحية المدعومة بـ Docker على مشغلات Blacksmith العادية — فمهام الحاويات ليست المكان المناسب لإطلاق اختبارات Docker متداخلة.
تستخدم شظايا نموذج/خلفية المباشر المدعومة بـ Docker صورة مشتركة منفصلة `ghcr.io/openclaw/openclaw-live-test:<sha>` لكل التزام محدد. يبني سير عمل إصدار المباشر تلك الصورة ويدفعها مرة واحدة، ثم تعمل شظايا نموذج Docker المباشر وGateway المقسّمة حسب المزوّد وخلفية CLI وربط ACP وحزمة Codex مع `OPENCLAW_SKIP_DOCKER_BUILD=1`. تحمل شظايا Gateway Docker حدود `timeout` صريحة على مستوى السكربت أقل من مهلة مهمة سير العمل حتى يفشل مسار الحاوية العالق أو التنظيف بسرعة بدلاً من استهلاك ميزانية release-check كاملة. إذا أعادت تلك الشظايا بناء هدف Docker الكامل من المصدر بشكل مستقل، فتشغيل الإصدار مضبوط بشكل خاطئ وسيهدر وقت الساعة على بناء صور مكرر.
تستخدم أجزاء النماذج/الخلفيات الحية المدعومة بـ Docker صورة مشتركة منفصلة `ghcr.io/openclaw/openclaw-live-test:<sha>` لكل تثبيت محدد. يبني سير عمل الإصدار الحي تلك الصورة ويدفعها مرة واحدة، ثم تعمل أجزاء نموذج Docker الحي، وGateway المقسمة حسب المزود، وخلفية CLI، وربط ACP، وحزمة Codex مع `OPENCLAW_SKIP_DOCKER_BUILD=1`. تحمل أجزاء Gateway Docker حدود `timeout` صريحة على مستوى السكربت أدنى من مهلة مهمة سير العمل، بحيث يفشل مسار حاوية عالقة أو تنظيف عالق بسرعة بدلاً من استهلاك ميزانية فحص الإصدار كلها. إذا أعادت هذه الأجزاء بناء هدف Docker الكامل للمصدر بشكل مستقل، فهذا يعني أن تشغيل الإصدار مهيأ خطأ وسيهدر وقت التشغيل على بناء صور مكرر.
## قبول الحزمة
استخدم `Package Acceptance` عندما يكون السؤال هو "هل تعمل حزمة OpenClaw القابلة للتثبيت هذه كمنتج؟" وهو مختلف عن CI العادي: يتحقق CI العادي من شجرة المصدر، بينما يتحقق قبول الحزمة من tarball واحد عبر حزمة Docker E2E نفسها التي يستخدمها المستخدمون بعد التثبيت أو التحديث.
استخدم `Package Acceptance` عندما يكون السؤال هو "هل تعمل حزمة OpenClaw القابلة للتثبيت هذه كمنتج؟" يختلف ذلك عن CI العادي: يتحقق CI العادي من شجرة المصدر، بينما يتحقق قبول الحزمة من أرشيف واحد عبر حزمة Docker E2E نفسها التي يستخدمها المستخدمون بعد التثبيت أو التحديث.
### المهام
1. تفحص `resolve_package` القيمة `workflow_ref`، وتحل مرشح حزمة واحداً، وتكتب `.artifacts/docker-e2e-package/openclaw-current.tgz`، وتكتب `.artifacts/docker-e2e-package/package-candidate.json`، وترفع كليهما كأثر `package-under-test`، وتطبع المصدر ومرجع سير العمل ومرجع الحزمة والإصدار وSHA-256 والملف التعريفي في ملخص خطوة GitHub.
2. تستدعي `docker_acceptance` الملف `openclaw-live-and-e2e-checks-reusable.yml` مع `ref=workflow_ref` و`package_artifact_name=package-under-test`. يحمّل سير العمل القابل لإعادة الاستخدام ذلك الأثر، ويتحقق من مخزون tarball، ويحضّر صور Docker ذات بصمة الحزمة عند الحاجة، ويشغّل مسارات Docker المحددة ضد تلك الحزمة بدلاً من حزم نسخة سير العمل. عندما يحدد ملف تعريفي عدة `docker_lanes` مستهدفة، يحضّر سير العمل القابل لإعادة الاستخدام الحزمة والصور المشتركة مرة واحدة، ثم يوزّع تلك المسارات كمهام Docker مستهدفة متوازية ذات آثار فريدة.
3. تستدعي `package_telegram` اختيارياً `NPM Telegram Beta E2E`. تعمل عندما لا يكون `telegram_mode` هو `none` وتثبّت أثر `package-under-test` نفسه عندما يحل Package Acceptance واحداً؛ ويمكن لإرسال Telegram المستقل أن يظل يثبّت مواصفة npm منشورة.
4. تفشل `summary` سير العمل إذا فشل حل الحزمة أو قبول Docker أو مسار Telegram الاختياري.
1. تتحقق `resolve_package` من `workflow_ref`، وتحل مرشح حزمة واحدًا، وتكتب `.artifacts/docker-e2e-package/openclaw-current.tgz`، وتكتب `.artifacts/docker-e2e-package/package-candidate.json`، وترفع كليهما كأثر `package-under-test`، وتطبع المصدر، ومرجع سير العمل، ومرجع الحزمة، والإصدار، وSHA-256، والملف التعريفي في ملخص خطوة GitHub.
2. تستدعي `docker_acceptance` ملف `openclaw-live-and-e2e-checks-reusable.yml` مع `ref=workflow_ref` و`package_artifact_name=package-under-test`. ينزل سير العمل القابل لإعادة الاستخدام ذلك الأثر، ويتحقق من مخزون الأرشيف، ويحضّر صور Docker ذات ملخص الحزمة عند الحاجة، ويشغل مسارات Docker المحددة ضد تلك الحزمة بدلاً من تعبئة نسخة سير العمل. عندما يحدد ملف تعريفي عدة `docker_lanes` مستهدفة، يحضر سير العمل القابل لإعادة الاستخدام الحزمة والصور المشتركة مرة واحدة، ثم يوزع تلك المسارات كمهام Docker مستهدفة متوازية بآثار فريدة.
3. تستدعي `package_telegram` اختياريًا `NPM Telegram Beta E2E`. تعمل عندما لا يكون `telegram_mode` هو `none` وتثبت أثر `package-under-test` نفسه عندما يكون قبول الحزمة قد حل واحدًا؛ ولا يزال بإمكان إطلاق Telegram المستقل تثبيت مواصفة npm منشورة.
4. تفشل `summary` سير العمل إذا فشل حل الحزمة، أو قبول Docker، أو مسار Telegram الاختياري.
### مصادر المرشحين
- يقبل `source=npm` فقط `openclaw@beta` أو `openclaw@latest` أو إصدار OpenClaw دقيقاً مثل `openclaw@2026.4.27-beta.2`. استخدم هذا لقبول الإصدار التمهيدي/المستقر المنشور.
- يحزم `source=ref` فرع `package_ref` أو وسماً أو SHA التزاماً كاملاً موثوقاً. يجلب المحلل فروع/وسوم OpenClaw، ويتحقق من أن الالتزام المحدد قابل للوصول من سجل فروع المستودع أو وسم إصدار، ويثبّت الاعتماديات في شجرة عمل منفصلة، ويحزمه باستخدام `scripts/package-openclaw-for-docker.mjs`.
- يحمّل `source=url` ملف HTTPS `.tgz`؛ وتكون `package_sha256` مطلوبة.
- يحمّل `source=artifact` ملف `.tgz` واحداً من `artifact_run_id` و`artifact_name`؛ تكون `package_sha256` اختيارية لكن ينبغي تقديمها للآثار المشتركة خارجياً.
- يقبل `source=npm` فقط `openclaw@beta` أو `openclaw@latest` أو إصدار OpenClaw دقيقًا مثل `openclaw@2026.4.27-beta.2`. استخدم هذا لقبول ما قبل الإصدار/الإصدار المستقر المنشور.
- يعبئ `source=ref` فرعًا أو وسمًا أو SHA التزام كاملاً من `package_ref` موثوق. يجلب المحلل فروع/وسوم OpenClaw، ويتحقق من أن الالتزام المحدد قابل للوصول من سجل فروع المستودع أو وسم إصدار، ويثبت التبعيات في شجرة عمل منفصلة، ويعبئه باستخدام `scripts/package-openclaw-for-docker.mjs`.
- ينزل `source=url` ملف `.tgz` عبر HTTPS؛ ويكون `package_sha256` مطلوبًا.
- ينزل `source=artifact` ملف `.tgz` واحدًا من `artifact_run_id` و`artifact_name`؛ ويكون `package_sha256` اختياريًا لكن ينبغي توفيره للآثار المشتركة خارجيًا.
أبقِ `workflow_ref` و`package_ref` منفصلين. `workflow_ref` هو كود سير العمل/الحزمة الموثوق الذي يشغّل الاختبار. `package_ref` هو التزام المصدر الذي يُحزم عندما يكون `source=ref`. يتيح هذا لحزمة الاختبار الحالية التحقق من التزامات مصدر موثوقة أقدم دون تشغيل منطق سير عمل قديم.
أبقِ `workflow_ref` و`package_ref` منفصلين. `workflow_ref` هو كود سير العمل/الحزمة الموثوق الذي يشغل الاختبار. `package_ref` هو التزام المصدر الذي يُعبأ عندما يكون `source=ref`. يتيح هذا لحزمة الاختبار الحالية التحقق من التزامات مصدر موثوقة أقدم دون تشغيل منطق سير عمل قديم.
### ملفات تعريف المجموعة
### ملفات تعريف الحزم
- `smoke``npm-onboard-channel-agent`، `gateway-network`، `config-reload`
- `package``npm-onboard-channel-agent`، `doctor-switch`، `update-channel-switch`، `upgrade-survivor`، `published-upgrade-survivor`، `plugins-offline`، `plugin-update`
@ -264,25 +258,23 @@ Docker؛ يفرض `full` تشغيل اختبار التحمل.
- `full` — أجزاء مسار إصدار Docker الكاملة مع OpenWebUI
- `custom``docker_lanes` دقيقة؛ مطلوبة عندما يكون `suite_profile=custom`
يستخدم ملف تعريف `package` تغطية Plugin غير متصلة حتى لا يكون تحقق الحزمة المنشورة مرهوناً بتوفر ClawHub المباشر. يعيد مسار Telegram الاختياري استخدام أثر `package-under-test` في `NPM Telegram Beta E2E`، مع إبقاء مسار مواصفة npm المنشورة للإرسالات المستقلة.
يستخدم ملف تعريف `package` تغطية Plugin دون اتصال حتى لا يعتمد تحقق الحزمة المنشورة على توفر ClawHub الحي. يعيد مسار Telegram الاختياري استخدام أثر `package-under-test` في `NPM Telegram Beta E2E`، مع إبقاء مسار مواصفة npm المنشورة للإطلاقات المستقلة.
للسياسة المخصصة لاختبار التحديث وPlugin، بما في ذلك الأوامر المحلية،
ومسارات Docker، ومدخلات Package Acceptance، وافتراضيات الإصدار، وفرز الإخفاقات،
راجع [اختبار التحديثات وPlugin](/ar/help/testing-updates-plugins).
لسياسة اختبار التحديثات وPlugin المخصصة، بما في ذلك الأوامر المحلية، ومسارات Docker، ومدخلات قبول الحزمة، وافتراضات الإصدار، وفرز الإخفاقات، راجع [اختبار التحديثات وPlugin](/ar/help/testing-updates-plugins).
تستدعي فحوصات الإصدار Package Acceptance مع `source=artifact`، وأثر حزمة الإصدار المحضّر، و`suite_profile=custom`، و`docker_lanes='doctor-switch update-channel-switch upgrade-survivor published-upgrade-survivor plugins-offline plugin-update'`، و`telegram_mode=mock-openai`. يبقي هذا إثبات ترحيل الحزمة، والتحديث، وتنظيف اعتماديات Plugin القديمة، وإصلاح تثبيت Plugin المضبوط، وPlugin غير المتصل، وplugin-update، وTelegram على tarball الحزمة المحلولة نفسها. عيّن `package_acceptance_package_spec` على Full Release Validation أو OpenClaw Release Checks لتشغيل المصفوفة نفسها ضد حزمة npm مشحونة بدلاً من الأثر المبني من SHA. لا تزال فحوصات إصدار cross-OS تغطي الإعداد الأولي، والمثبّت، وسلوك المنصة الخاص بكل نظام تشغيل؛ ينبغي أن يبدأ تحقق منتج الحزمة/التحديث بـ Package Acceptance. يتحقق مسار Docker `published-upgrade-survivor` من خط أساس حزمة منشورة واحد لكل تشغيل في مسار الإصدار الحاظر. في Package Acceptance، يكون tarball `package-under-test` المحلول هو المرشح دائماً، وتحدد `published_upgrade_survivor_baseline` خط الأساس المنشور الاحتياطي، مع افتراض `openclaw@latest`؛ وتحافظ أوامر إعادة تشغيل المسارات الفاشلة على ذلك الخط الأساسي. تضبط Full Release Validation مع `run_release_soak=true` أو `release_profile=full` القيم `published_upgrade_survivor_baselines='last-stable-4 2026.4.23 2026.5.2 2026.4.15'` و`published_upgrade_survivor_scenarios=reported-issues` للتوسع عبر أحدث أربعة إصدارات npm مستقرة بالإضافة إلى إصدارات حدود توافق Plugin المثبتة وتجهيزات على هيئة مشكلات لتكوين Feishu، وملفات bootstrap/persona المحفوظة، وتثبيتات OpenClaw Plugin المضبوطة، ومسارات السجلات بالتلدة، وجذور اعتماديات Plugin القديمة الراكدة. تُقسّم اختيارات published-upgrade survivor متعددة خطوط الأساس حسب خط الأساس إلى مهام مشغّل Docker مستهدفة منفصلة. يستخدم سير عمل `Update Migration` المنفصل مسار Docker `update-migration` مع `all-since-2026.4.23` و`plugin-deps-cleanup` عندما يكون السؤال هو تنظيف التحديثات المنشورة الشامل، لا اتساع Full Release CI العادي. يمكن للتشغيلات التجميعية المحلية تمرير مواصفات حزمة دقيقة باستخدام `OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPECS`، أو إبقاء مسار واحد باستخدام `OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPEC` مثل `openclaw@2026.4.15`، أو تعيين `OPENCLAW_UPGRADE_SURVIVOR_SCENARIOS` لمصفوفة السيناريو. يضبط المسار المنشور خط الأساس بوصفة أمر `openclaw config set` مخبوزة، ويسجل خطوات الوصفة في `summary.json`، ويفحص `/healthz` و`/readyz` بالإضافة إلى حالة RPC بعد بدء Gateway. تتحقق مسارات Windows المعبأة والمثبّت الجديد أيضاً من أن حزمة مثبّتة يمكنها استيراد تجاوز للتحكم بالمتصفح من مسار Windows مطلق خام. يكون اختبار دخان agent-turn عبر OpenAI cross-OS افتراضياً على `OPENCLAW_CROSS_OS_OPENAI_MODEL` عند ضبطه، وإلا على `openai/gpt-5.4`، لذلك يبقى إثبات التثبيت وGateway على نموذج اختبار GPT-5 مع تجنب افتراضات GPT-4.x.
تستدعي فحوصات الإصدار قبول الحزمة مع `source=artifact`، وأثر حزمة الإصدار المحضر، و`suite_profile=custom`، و`docker_lanes='doctor-switch update-channel-switch upgrade-survivor published-upgrade-survivor plugins-offline plugin-update'`، و`telegram_mode=mock-openai`. هذا يُبقي إثبات ترحيل الحزمة، والتحديث، وتنظيف تبعيات Plugin القديمة، وإصلاح تثبيت Plugin المهيأ، وPlugin دون اتصال، وتحديث Plugin، وTelegram على أرشيف الحزمة المحلول نفسه. اضبط `package_acceptance_package_spec` على التحقق الكامل من الإصدار أو فحوصات إصدار OpenClaw لتشغيل المصفوفة نفسها ضد حزمة npm مشحونة بدلاً من الأثر المبني من SHA. لا تزال فحوصات الإصدار عبر أنظمة التشغيل تغطي سلوك التهيئة، والمثبت، والمنصة الخاص بأنظمة التشغيل؛ وينبغي أن يبدأ تحقق منتج الحزمة/التحديث بقبول الحزمة. يتحقق مسار Docker `published-upgrade-survivor` من أساس حزمة منشورة واحد لكل تشغيل في مسار الإصدار الحاجب. في قبول الحزمة، يكون أرشيف `package-under-test` المحلول هو المرشح دائمًا، ويحدد `published_upgrade_survivor_baseline` الأساس المنشور الاحتياطي، مع قيمة افتراضية `openclaw@latest`؛ وتحافظ أوامر إعادة تشغيل المسار الفاشل على ذلك الأساس. يضبط التحقق الكامل من الإصدار مع `run_release_soak=true` أو `release_profile=full` القيمة `published_upgrade_survivor_baselines='last-stable-4 2026.4.23 2026.5.2 2026.4.15'` و`published_upgrade_survivor_scenarios=reported-issues` للتوسع عبر أحدث أربعة إصدارات npm مستقرة إضافة إلى إصدارات حدود توافق Plugin المثبتة ومثبتات على شكل مشكلات لإعداد Feishu، وملفات bootstrap/persona المحفوظة، وتثبيتات OpenClaw Plugin المهيأة، ومسارات سجلات التلدة، وجذور تبعيات Plugin القديمة الراكدة. تُقسم تحديدات ناجي الترقية المنشورة متعددة الأسس حسب الأساس إلى مهام مشغل Docker مستهدفة منفصلة. يستخدم سير عمل `Update Migration` المنفصل مسار Docker `update-migration` مع `all-since-2026.4.23` و`plugin-deps-cleanup` عندما يكون السؤال هو تنظيف التحديث المنشور الشامل، وليس نطاق CI الكامل للإصدار العادي. يمكن للتشغيلات التجميعية المحلية تمرير مواصفات حزمة دقيقة باستخدام `OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPECS`، أو إبقاء مسار واحد باستخدام `OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPEC` مثل `openclaw@2026.4.15`، أو ضبط `OPENCLAW_UPGRADE_SURVIVOR_SCENARIOS` لمصفوفة السيناريوهات. يهيئ المسار المنشور الأساس بوصفة أمر `openclaw config set` مضمّنة، ويسجل خطوات الوصفة في `summary.json`، ويفحص `/healthz` و`/readyz` إضافة إلى حالة RPC بعد بدء Gateway. تتحقق مسارات Windows المعبأة ومسارات المثبت النظيفة أيضًا من أن الحزمة المثبتة تستطيع استيراد تجاوز تحكم المتصفح من مسار Windows مطلق خام. يعتمد اختبار دخان دورة وكيل OpenAI عبر أنظمة التشغيل افتراضيًا على `OPENCLAW_CROSS_OS_OPENAI_MODEL` عند ضبطه، وإلا `openai/gpt-5.4`، بحيث يبقى إثبات التثبيت وGateway على نموذج اختبار GPT-5 مع تجنب افتراضات GPT-4.x الافتراضية.
### نوافذ التوافق القديم
لدى Package Acceptance نوافذ توافق قديم محدودة للحزم المنشورة مسبقاً. يمكن للحزم حتى `2026.4.25`، بما في ذلك `2026.4.25-beta.*`، استخدام مسار التوافق:
يملك قبول الحزمة نوافذ توافق قديم محدودة للحزم المنشورة بالفعل. يمكن للحزم حتى `2026.4.25`، بما في ذلك `2026.4.25-beta.*`، استخدام مسار التوافق:
- قد تشير إدخالات QA الخاصة المعروفة في `dist/postinstall-inventory.json` إلى ملفات محذوفة من tarball؛
- قد تشير إدخالات QA الخاصة المعروفة في `dist/postinstall-inventory.json` إلى ملفات محذوفة من الأرشيف؛
- قد يتخطى `doctor-switch` الحالة الفرعية لاستمرارية `gateway install --wrapper` عندما لا تعرض الحزمة ذلك العلم؛
- قد يزيل `update-channel-switch` عناصر `pnpm.patchedDependencies` المفقودة من تجهيز git المزيّف المشتق من tarball وقد يسجل `update.channel` محفوظاً مفقوداً؛
- قد تقرأ اختبارات دخان Plugin مواقع سجل تثبيت قديمة أو تقبل غياب استمرارية سجل تثبيت السوق؛
- قد يسمح `plugin-update` بترحيل بيانات تعريف التكوين مع الاستمرار في اشتراط بقاء سجل التثبيت وسلوك عدم إعادة التثبيت دون تغيير.
- قد يزيل `update-channel-switch` قيم `pnpm.patchedDependencies` المفقودة من مثبت git الوهمي المشتق من الأرشيف، وقد يسجل `update.channel` المستمر المفقود؛
- قد تقرأ اختبارات Plugin الدخانية مواقع سجلات تثبيت قديمة أو تقبل غياب استمرارية سجل تثبيت السوق؛
- قد يسمح `plugin-update` بترحيل بيانات تعريف الإعدادات مع الاستمرار في اشتراط بقاء سجل التثبيت وسلوك عدم إعادة التثبيت دون تغيير.
قد تحذر حزمة `2026.4.26` المنشورة أيضا بشأن ملفات طابع بيانات تعريف البناء المحلي التي كانت قد شحنت بالفعل. يجب أن تستوفي الحزم اللاحقة العقود الحديثة؛ وتفشل الشروط نفسها بدلا من التحذير أو التخطي.
قد تحذّر حزمة `2026.4.26` المنشورة أيضا بشأن ملفات ختم بيانات وصفية للبناء المحلي كانت قد شُحنت بالفعل. يجب أن تستوفي الحزم اللاحقة العقود الحديثة؛ إذ تفشل الشروط نفسها بدلا من التحذير أو التخطي.
### أمثلة
@ -325,110 +317,110 @@ gh workflow run package-acceptance.yml \
-f docker_lanes='install-e2e plugin-update'
```
عند تصحيح فشل تشغيل قبول الحزمة، ابدأ بملخص `resolve_package` لتأكيد مصدر الحزمة وإصدارها وSHA-256. ثم افحص التشغيل الفرعي `docker_acceptance` وآثاره الخاصة بـ Docker: `.artifacts/docker-tests/**/summary.json` و`failures.json` وسجلات المسارات وتوقيتات المراحل وأوامر إعادة التشغيل. فضل إعادة تشغيل ملف قبول الحزمة الفاشل أو مسارات Docker الدقيقة بدلا من إعادة تشغيل تحقق الإصدار الكامل.
عند تصحيح تشغيل فاشل لقبول الحزمة، ابدأ من ملخص `resolve_package` لتأكيد مصدر الحزمة وإصدارها و SHA-256. ثم افحص التشغيل الفرعي `docker_acceptance` ونتاجات Docker الخاصة به: `.artifacts/docker-tests/**/summary.json` و`failures.json` وسجلات المسارات وتوقيتات المراحل وأوامر إعادة التشغيل. فضّل إعادة تشغيل ملف تعريف الحزمة الفاشل أو مسارات Docker الدقيقة بدلا من إعادة تشغيل تحقق الإصدار الكامل.
## اختبار التثبيت السريع
## اختبار سلامة التثبيت
يعيد سير عمل `Install Smoke` المنفصل استخدام سكربت النطاق نفسه من خلال مهمة `preflight` الخاصة به. ويقسم تغطية الاختبار السريع إلى `run_fast_install_smoke` و`run_full_install_smoke`.
يعيد سير عمل `Install Smoke` المنفصل استخدام سكربت النطاق نفسه عبر مهمة `preflight` الخاصة به. ويقسّم تغطية اختبار السلامة إلى `run_fast_install_smoke` و`run_full_install_smoke`.
- **المسار السريع** يعمل لطلبات السحب التي تمس أسطح Docker/الحزمة، أو تغييرات حزمة/بيان Plugin المضمن، أو أسطح Plugin/القناة/Gateway/Plugin SDK الأساسية التي تمرنها مهام اختبار Docker السريع. لا تحجز تغييرات Plugin المضمن المقتصرة على المصدر، والتعديلات المقتصرة على الاختبارات، والتعديلات المقتصرة على الوثائق عمال Docker. يبني المسار السريع صورة Dockerfile الجذرية مرة واحدة، ويفحص CLI، ويشغل اختبار CLI السريع لحذف الوكلاء لمساحة العمل المشتركة، ويشغل اختبار e2e لشبكة Gateway في الحاوية، ويتحقق من وسيط بناء إضافة مضمنة، ويشغل ملف Docker المحدود للـ Plugin المضمن ضمن مهلة أوامر إجمالية قدرها 240 ثانية (مع حد منفصل لكل تشغيل Docker في كل سيناريو).
- **المسار الكامل** يبقي تثبيت حزمة QR وتغطية Docker/تحديث المثبت للتشغيلات الليلية المجدولة، وعمليات الإطلاق اليدوية، وفحوصات الإصدار عبر workflow-call، وطلبات السحب التي تمس فعلا أسطح المثبت/الحزمة/Docker. في الوضع الكامل، يحضر install-smoke أو يعيد استخدام صورة اختبار سريع Dockerfile جذرية من GHCR مرتبطة بـ SHA الهدف، ثم يشغل تثبيت حزمة QR، واختبارات Dockerfile/Gateway الجذرية السريعة، واختبارات المثبت/التحديث السريعة، وDocker E2E السريع للـ Plugin المضمن كمهام منفصلة حتى لا ينتظر عمل المثبت خلف اختبارات الصورة الجذرية السريعة.
- **المسار السريع** يعمل لطلبات السحب التي تمس أسطح Docker/الحزمة، أو تغييرات حزمة/بيان Plugin المضمّنة، أو أسطح Plugin/القناة/Gateway/Plugin SDK الأساسية التي تمرّنها مهام اختبار Docker السريعة. تغييرات Plugins المضمّنة على مستوى المصدر فقط، والتعديلات الخاصة بالاختبارات فقط، والتعديلات الخاصة بالوثائق فقط لا تحجز عمال Docker. يبني المسار السريع صورة Dockerfile الجذر مرة واحدة، ويفحص CLI، ويشغّل اختبار CLI السريع لحذف الوكلاء في مساحة العمل المشتركة، ويشغّل e2e لشبكة Gateway داخل الحاوية، ويتحقق من وسيطة بناء إضافة مضمّنة، ويشغّل ملف تعريف Docker المحدود للـPlugin المضمّن تحت مهلة إجمالية للأوامر قدرها 240 ثانية (مع تقييد كل تشغيل Docker لكل سيناريو على حدة).
- **المسار الكامل** يحتفظ بتغطية تثبيت حزمة QR وDocker/التحديث للمثبّت للتشغيلات الليلية المجدولة، والإرسال اليدوي، وفحوصات الإصدار عبر workflow-call، وطلبات السحب التي تمس فعلا أسطح المثبّت/الحزمة/Docker. في الوضع الكامل، يجهّز install-smoke أو يعيد استخدام صورة اختبار سلامة Dockerfile الجذر من GHCR لرقم SHA الهدف، ثم يشغّل تثبيت حزمة QR، واختبارات سلامة Dockerfile/Gateway الجذر، واختبارات سلامة المثبّت/التحديث، وDocker E2E السريع للـPlugin المضمّن كمهام منفصلة حتى لا ينتظر عمل المثبّت خلف اختبارات سلامة الصورة الجذرية.
دفعات `main` (بما في ذلك commits الدمج) لا تفرض المسار الكامل؛ عندما يطلب منطق نطاق التغيير تغطية كاملة عند الدفع، يبقي سير العمل اختبار Docker السريع ويترك اختبار التثبيت الكامل السريع للتشغيل الليلي أو تحقق الإصدار.
دفعات `main` (بما في ذلك commits الدمج) لا تفرض المسار الكامل؛ فعندما يطلب منطق نطاق التغيير تغطية كاملة عند الدفع، يحتفظ سير العمل باختبار سلامة Docker السريع ويترك اختبار سلامة التثبيت الكامل للتحقق الليلي أو تحقق الإصدار.
اختبار تثبيت Bun العام البطيء لموفر الصور محكوم بشكل منفصل بواسطة `run_bun_global_install_smoke`. يعمل وفق الجدول الليلي ومن سير عمل فحوصات الإصدار، ويمكن لعمليات الإطلاق اليدوية لـ `Install Smoke` الاشتراك فيه، لكن طلبات السحب ودفعات `main` لا تفعل ذلك. تحتفظ اختبارات Docker الخاصة بـ QR والمثبت بملفات Dockerfile الخاصة بها والمركزة على التثبيت.
اختبار سلامة مزود الصور لتثبيت Bun العام البطيء محكوم بشكل منفصل عبر `run_bun_global_install_smoke`. يعمل في الجدولة الليلية ومن سير عمل فحوصات الإصدار، ويمكن لإرسالات `Install Smoke` اليدوية الاشتراك فيه، لكن طلبات السحب ودفعات `main` لا تفعل ذلك. تحتفظ اختبارات Docker الخاصة بـQR والمثبّت بملفات Dockerfile الخاصة بها والمركّزة على التثبيت.
## Docker E2E المحلي
## Docker E2E محلي
يقوم `pnpm test:docker:all` ببناء صورة اختبار مباشر مشتركة واحدة مسبقا، ويحزم OpenClaw مرة واحدة كأرشيف npm، ويبني صورتين مشتركتين من `scripts/e2e/Dockerfile`:
يقوم `pnpm test:docker:all` ببناء صورة اختبار حي مشتركة مسبقا، ويحزم OpenClaw مرة واحدة كأرشيف npm، ويبني صورتين مشتركتين من `scripts/e2e/Dockerfile`:
- مشغل Node/Git عار لمسارات المثبت/التحديث/اعتماديات Plugin؛
- صورة وظيفية تثبت الأرشيف نفسه في `/app` لمسارات الوظائف العادية.
- مشغّل Node/Git عارٍ لمسارات المثبّت/التحديث/اعتماديات Plugin؛
- صورة وظيفية تثبّت الأرشيف نفسه في `/app` لمسارات الوظائف العادية.
توجد تعريفات مسارات Docker في `scripts/lib/docker-e2e-scenarios.mjs`، ويوجد منطق التخطيط في `scripts/lib/docker-e2e-plan.mjs`، ولا ينفذ المشغل إلا الخطة المحددة. يحدد المجدول الصورة لكل مسار باستخدام `OPENCLAW_DOCKER_E2E_BARE_IMAGE` و`OPENCLAW_DOCKER_E2E_FUNCTIONAL_IMAGE`، ثم يشغل المسارات باستخدام `OPENCLAW_SKIP_DOCKER_BUILD=1`.
توجد تعريفات مسارات Docker في `scripts/lib/docker-e2e-scenarios.mjs`، ويقع منطق المخطِّط في `scripts/lib/docker-e2e-plan.mjs`، ولا ينفذ المشغّل إلا الخطة المختارة. يختار المجدول الصورة لكل مسار باستخدام `OPENCLAW_DOCKER_E2E_BARE_IMAGE` و`OPENCLAW_DOCKER_E2E_FUNCTIONAL_IMAGE`، ثم يشغّل المسارات مع `OPENCLAW_SKIP_DOCKER_BUILD=1`.
### القيم القابلة للضبط
### إعدادات قابلة للضبط
| المتغير | الافتراضي | الغرض |
| -------------------------------------- | --------- | --------------------------------------------------------------------------------------------- |
| `OPENCLAW_DOCKER_ALL_PARALLELISM` | 10 | عدد خانات التجمع الرئيسي للمسارات العادية. |
| `OPENCLAW_DOCKER_ALL_TAIL_PARALLELISM` | 10 | عدد خانات تجمع الذيل الحساس للموفر. |
| `OPENCLAW_DOCKER_ALL_LIVE_LIMIT` | 9 | حد المسارات المباشرة المتزامنة حتى لا تخنق الموفرات. |
| `OPENCLAW_DOCKER_ALL_NPM_LIMIT` | 10 | حد مسارات تثبيت npm المتزامنة. |
| `OPENCLAW_DOCKER_ALL_SERVICE_LIMIT` | 7 | حد مسارات الخدمات المتعددة المتزامنة. |
| `OPENCLAW_DOCKER_ALL_START_STAGGER_MS` | 2000 | التباعد بين بدايات المسارات لتجنب عواصف إنشاء Docker daemon؛ اضبطه على `0` لعدم التباعد. |
| `OPENCLAW_DOCKER_ALL_LANE_TIMEOUT_MS` | 7200000 | مهلة احتياطية لكل مسار (120 دقيقة)؛ تستخدم مسارات مباشرة/ذيلية محددة حدودا أضيق. |
| `OPENCLAW_DOCKER_ALL_DRY_RUN` | غير معين | يطبع `1` خطة المجدول دون تشغيل المسارات. |
| `OPENCLAW_DOCKER_ALL_LANES` | غير معين | قائمة مسارات دقيقة مفصولة بفواصل؛ تتخطى تنظيف الاختبار السريع حتى يتمكن الوكلاء من إعادة إنتاج مسار فاشل واحد. |
| المتغير | الافتراضي | الغرض |
| -------------------------------------- | ------- | --------------------------------------------------------------------------------------------- |
| `OPENCLAW_DOCKER_ALL_PARALLELISM` | 10 | عدد فتحات الحوض الرئيسي للمسارات العادية. |
| `OPENCLAW_DOCKER_ALL_TAIL_PARALLELISM` | 10 | عدد فتحات الحوض اللاحق الحسّاس للمزوّد. |
| `OPENCLAW_DOCKER_ALL_LIVE_LIMIT` | 9 | حد المسارات الحية المتزامنة كي لا يقيّد المزوّدون المعدل. |
| `OPENCLAW_DOCKER_ALL_NPM_LIMIT` | 10 | حد مسارات تثبيت npm المتزامنة. |
| `OPENCLAW_DOCKER_ALL_SERVICE_LIMIT` | 7 | حد مسارات الخدمات المتعددة المتزامنة. |
| `OPENCLAW_DOCKER_ALL_START_STAGGER_MS` | 2000 | التدرج بين بدايات المسارات لتجنب عواصف إنشاء Docker daemon؛ اضبطه على `0` لعدم التدرج. |
| `OPENCLAW_DOCKER_ALL_LANE_TIMEOUT_MS` | 7200000 | مهلة احتياطية لكل مسار (120 دقيقة)؛ تستخدم مسارات حيّة/لاحقة مختارة حدودا أضيق. |
| `OPENCLAW_DOCKER_ALL_DRY_RUN` | غير مضبوط | يطبع `1` خطة المجدول دون تشغيل المسارات. |
| `OPENCLAW_DOCKER_ALL_LANES` | غير مضبوط | قائمة مسارات دقيقة مفصولة بفواصل؛ تتخطى اختبار سلامة التنظيف كي يستطيع الوكلاء إعادة إنتاج مسار فاشل واحد. |
يمكن لمسار أثقل من حده الفعال أن يبدأ مع ذلك من تجمع فارغ، ثم يعمل وحده حتى يحرر السعة. تقوم فحوصات التجميع المحلية المسبقة بفحص Docker، وإزالة حاويات OpenClaw E2E القديمة، وإصدار حالة المسارات النشطة، وحفظ توقيتات المسارات للترتيب من الأطول إلى الأقصر، وتتوقف افتراضيا عن جدولة مسارات مجمعة جديدة بعد الفشل الأول.
يمكن لمسار أثقل من حدّه الفعلي أن يبدأ مع ذلك من حوض فارغ، ثم يعمل منفردا حتى يحرر السعة. تقوم الفحوصات المسبقة المحلية الإجمالية بفحص Docker، وإزالة حاويات OpenClaw E2E القديمة، وإصدار حالة المسارات النشطة، وحفظ توقيتات المسارات للترتيب من الأطول أولا، وتتوقف عن جدولة مسارات مجمّعة جديدة بعد أول فشل افتراضيا.
### سير عمل مباشر/E2E قابل لإعادة الاستخدام
### سير عمل حي/E2E قابل لإعادة الاستخدام
يسأل سير العمل المباشر/E2E القابل لإعادة الاستخدام `scripts/test-docker-all.mjs --plan-json` عن الحزمة ونوع الصورة والصورة المباشرة والمسار وتغطية بيانات الاعتماد المطلوبة. ثم يحول `scripts/docker-e2e.mjs` تلك الخطة إلى مخرجات وملخصات GitHub. وهو إما يحزم OpenClaw عبر `scripts/package-openclaw-for-docker.mjs`، أو ينزل أثر حزمة من التشغيل الحالي، أو ينزل أثر حزمة من `package_artifact_run_id`؛ ويتحقق من قائمة محتويات الأرشيف؛ ويبني ويدفع صور Docker E2E العارية/الوظيفية من GHCR الموسومة بملخص الحزمة عبر ذاكرة طبقات Docker المؤقتة الخاصة بـ Blacksmith عندما تحتاج الخطة إلى مسارات مثبتة الحزمة؛ ويعيد استخدام مدخلات `docker_e2e_bare_image`/`docker_e2e_functional_image` المقدمة أو الصور الموجودة ذات ملخص الحزمة بدلا من إعادة البناء. تعاد محاولة سحب صور Docker بمهلة محدودة قدرها 180 ثانية لكل محاولة، بحيث يعاد بسرعة تشغيل تدفق سجل/ذاكرة مؤقتة عالق بدلا من استهلاك معظم المسار الحرج في CI.
يسأل سير العمل الحي/E2E القابل لإعادة الاستخدام `scripts/test-docker-all.mjs --plan-json` عن الحزمة ونوع الصورة والصورة الحية والمسار وتغطية بيانات الاعتماد المطلوبة. ثم يحوّل `scripts/docker-e2e.mjs` تلك الخطة إلى مخرجات وملخصات GitHub. فهو إما يحزم OpenClaw عبر `scripts/package-openclaw-for-docker.mjs`، أو ينزّل نتاج حزمة من التشغيل الحالي، أو ينزّل نتاج حزمة من `package_artifact_run_id`؛ ويتحقق من مخزون الأرشيف؛ ويبني ويدفع صور Docker E2E العارية/الوظيفية من GHCR الموسومة بملخص الحزمة عبر ذاكرة طبقة Docker المؤقتة في Blacksmith عندما تحتاج الخطة إلى مسارات ذات حزمة مثبتة؛ ويعيد استخدام مدخلات `docker_e2e_bare_image`/`docker_e2e_functional_image` المقدمة أو الصور الموجودة ذات ملخص الحزمة بدلا من إعادة البناء. تعاد محاولات سحب صور Docker بمهلة محددة قدرها 180 ثانية لكل محاولة، بحيث يعاد بسرعة تدفق registry/cache العالق بدلا من استهلاك معظم المسار الحرج في CI.
### أجزاء مسار الإصدار
تعمل تغطية Docker للإصدار كمهام مجزأة أصغر باستخدام `OPENCLAW_SKIP_DOCKER_BUILD=1` حتى يسحب كل جزء نوع الصورة الذي يحتاجه فقط وينفذ مسارات متعددة عبر المجدول الموزون نفسه:
تعمل تغطية Docker للإصدار في مهام مجزأة أصغر مع `OPENCLAW_SKIP_DOCKER_BUILD=1` بحيث يسحب كل جزء نوع الصورة الذي يحتاجه فقط وينفذ عدة مسارات عبر المجدول الموزون نفسه:
- `OPENCLAW_DOCKER_ALL_PROFILE=release-path`
- `OPENCLAW_DOCKER_ALL_CHUNK=core | package-update-openai | package-update-anthropic | package-update-core | plugins-runtime-plugins | plugins-runtime-services | plugins-runtime-install-a..h`
أجزاء Docker الحالية للإصدار هي `core` و`package-update-openai` و`package-update-anthropic` و`package-update-core` و`plugins-runtime-plugins` و`plugins-runtime-services` ومن `plugins-runtime-install-a` إلى `plugins-runtime-install-h`. تبقى `plugins-runtime-core` و`plugins-runtime` و`plugins-integrations` أسماء مستعارة تجميعية للـ Plugin/وقت التشغيل. ويبقى الاسم المستعار للمسار `install-e2e` هو الاسم المستعار التجميعي اليدوي لإعادة التشغيل لكلا مساري مثبت الموفر.
أجزاء Docker الحالية للإصدار هي `core` و`package-update-openai` و`package-update-anthropic` و`package-update-core` و`plugins-runtime-plugins` و`plugins-runtime-services` و`plugins-runtime-install-a` حتى `plugins-runtime-install-h`. تبقى `plugins-runtime-core` و`plugins-runtime` و`plugins-integrations` أسماء مستعارة إجمالية للـPlugin/وقت التشغيل. ويظل الاسم المستعار لمسار `install-e2e` اسم إعادة التشغيل اليدوية الإجمالي لكلا مساري مثبّت المزوّد.
يدمج OpenWebUI في `plugins-runtime-services` عندما تطلب تغطية مسار الإصدار الكاملة ذلك، ويحتفظ بجزء مستقل `openwebui` فقط لعمليات الإطلاق الخاصة بـ OpenWebUI وحده. تعيد مسارات تحديث القنوات المضمنة المحاولة مرة واحدة عند حالات فشل شبكة npm العابرة.
يُدمج OpenWebUI في `plugins-runtime-services` عندما تطلب تغطية مسار الإصدار الكاملة ذلك، ويحتفظ بجزء مستقل `openwebui` فقط للإرسالات الخاصة بـOpenWebUI وحده. تعيد مسارات تحديث القنوات المضمّنة المحاولة مرة واحدة عند إخفاقات شبكة npm العابرة.
يرفع كل جزء `.artifacts/docker-tests/` مع سجلات المسارات والتوقيتات و`summary.json` و`failures.json` وتوقيتات المراحل وJSON خطة المجدول وجداول المسارات البطيئة وأوامر إعادة التشغيل لكل مسار. يشغل مدخل `docker_lanes` في سير العمل المسارات المحددة على الصور المحضرة بدلا من مهام الأجزاء، مما يحصر تصحيح المسار الفاشل في مهمة Docker موجهة واحدة ويحضر أو ينزل أو يعيد استخدام أثر الحزمة لذلك التشغيل؛ وإذا كان مسار محدد مسارا مباشرا في Docker، تبني المهمة الموجهة صورة الاختبار المباشر محليا لإعادة التشغيل تلك. تتضمن أوامر إعادة التشغيل لكل مسار المولدة في GitHub `package_artifact_run_id` و`package_artifact_name` ومدخلات الصور المحضرة عند وجود تلك القيم، حتى يتمكن مسار فاشل من إعادة استخدام الحزمة والصور الدقيقة من التشغيل الفاشل.
يرفع كل جزء `.artifacts/docker-tests/` مع سجلات المسارات، والتوقيتات، و`summary.json`، و`failures.json`، وتوقيتات المراحل، وJSON لخطة المجدول، وجداول المسارات البطيئة، وأوامر إعادة التشغيل لكل مسار. يشغّل مدخل `docker_lanes` في سير العمل المسارات المختارة مقابل الصور المجهزة بدلا من مهام الأجزاء، ما يحصر تصحيح المسار الفاشل في مهمة Docker مستهدفة واحدة، ويجهّز أو ينزّل أو يعيد استخدام نتاج الحزمة لذلك التشغيل؛ إذا كان المسار المختار مسار Docker حيّا، تبني المهمة المستهدفة صورة الاختبار الحي محليا لإعادة التشغيل تلك. تتضمن أوامر GitHub المولدة لإعادة التشغيل لكل مسار `package_artifact_run_id` و`package_artifact_name` ومدخلات الصورة المجهزة عندما توجد تلك القيم، بحيث يمكن للمسار الفاشل إعادة استخدام الحزمة والصور الدقيقة من التشغيل الفاشل.
```bash
pnpm test:docker:rerun <run-id> # download Docker artifacts and print combined/per-lane targeted rerun commands
pnpm test:docker:timings <summary> # slow-lane and phase critical-path summaries
```
يشغل سير العمل المباشر/E2E المجدول مجموعة Docker الكاملة لمسار الإصدار يوميا.
يشغّل سير العمل الحي/E2E المجدول مجموعة Docker الكاملة لمسار الإصدار يوميا.
## الإصدار المسبق لـ Plugin
## ما قبل إصدار Plugin
`Plugin Prerelease` تغطية منتج/حزمة أكثر تكلفة، لذا فهو سير عمل منفصل يطلقه `Full Release Validation` أو مشغل صريح. تبقي طلبات السحب العادية، ودفعات `main`، وعمليات إطلاق CI اليدوية المستقلة تلك المجموعة معطلة. يوازن اختبارات Plugin المضمنة عبر ثمانية عمال امتدادات؛ وتشغل مهام شظايا الامتدادات هذه ما يصل إلى مجموعتين من إعدادات Plugin في الوقت نفسه مع عامل Vitest واحد لكل مجموعة وكومة Node أكبر حتى لا تنشئ دفعات Plugin الثقيلة بالاستيراد مهام CI إضافية. يجمع مسار Docker المسبق للإصدار والمقتصر على الإصدار مسارات Docker الموجهة في مجموعات صغيرة لتجنب حجز عشرات المشغلات لمهام مدتها من دقيقة إلى ثلاث دقائق.
`Plugin Prerelease` هي تغطية منتج/حزمة أعلى تكلفة، لذلك فهي سير عمل منفصل يرسله `Full Release Validation` أو مشغّل صريح. تبقي طلبات السحب العادية ودفعات `main` وإرسالات CI اليدوية المستقلة تلك المجموعة متوقفة. يوازن اختبارات Plugin المضمّنة عبر ثمانية عمال إضافات؛ وتشغّل مهام أجزاء الإضافات تلك ما يصل إلى مجموعتي إعداد Plugin في كل مرة مع عامل Vitest واحد لكل مجموعة وكومة Node أكبر، كي لا تنشئ دفعات Plugins كثيفة الاستيراد مهام CI إضافية. يجمع مسار ما قبل إصدار Docker الخاص بالإصدار فقط مسارات Docker المستهدفة في مجموعات صغيرة لتجنب حجز عشرات المشغّلات لمهام مدتها دقيقة إلى ثلاث دقائق.
## مختبر QA
## QA Lab
لدى مختبر QA مسارات CI مخصصة خارج سير العمل الرئيسي ذي النطاق الذكي. التكافؤ الوكيلي متداخل ضمن مجموعات QA والإصدار الواسعة، وليس سير عمل مستقلا لطلبات السحب. استخدم `Full Release Validation` مع `rerun_group=qa-parity` عندما ينبغي أن يرافق التكافؤ تشغيل تحقق واسع.
لدى QA Lab مسارات CI مخصصة خارج سير العمل الذكي ذي النطاق الرئيسي. يكون تكافؤ الوكلاء متداخلا تحت أحزمة QA والإصدار الواسعة، وليس سير عمل PR مستقلا. استخدم `Full Release Validation` مع `rerun_group=qa-parity` عندما ينبغي أن يرافق التكافؤ تشغيل تحقق واسع.
- يشغل سير عمل `QA-Lab - All Lanes` ليليا على `main` وعند الإطلاق اليدوي؛ ويفرع مسار تكافؤ المحاكاة ومسار Matrix المباشر ومسارات Telegram وDiscord المباشرة كمهام متوازية. تستخدم المهام المباشرة بيئة `qa-live-shared`، ويستخدم Telegram/Discord عقود Convex.
- يشغّل سير عمل `QA-Lab - All Lanes` ليليا على `main` وعند الإرسال اليدوي؛ ويفرّع مسار التكافؤ الوهمي، ومسار Matrix الحي، ومساري Telegram وDiscord الحيين كمهام متوازية. تستخدم المهام الحية بيئة `qa-live-shared`، ويستخدم Telegram/Discord عقود Convex.
تشغل فحوصات الإصدار مساري نقل Matrix وTelegram المباشرين مع موفر المحاكاة الحتمي والنماذج المؤهلة للمحاكاة (`mock-openai/gpt-5.5` و`mock-openai/gpt-5.5-alt`) حتى يعزل عقد القناة عن زمن استجابة النموذج المباشر وبدء تشغيل Plugin الموفر العادي. يعطل Gateway النقل المباشر بحث الذاكرة لأن تكافؤ QA يغطي سلوك الذاكرة بشكل منفصل؛ وتغطي اتصال الموفر مجموعات النموذج المباشر والموفر الأصلي وموفر Docker المنفصلة.
تشغّل فحوصات الإصدار مسارات النقل الحية لـMatrix وTelegram مع المزوّد الوهمي الحتمي والنماذج المؤهلة للوهم (`mock-openai/gpt-5.5` و`mock-openai/gpt-5.5-alt`) بحيث يُعزل عقد القناة عن زمن استجابة النموذج الحي وبدء تشغيل Plugin المزوّد العادي. يعطّل Gateway النقل الحي البحث في الذاكرة لأن تكافؤ QA يغطي سلوك الذاكرة على نحو منفصل؛ وتغطي اتصال المزوّد مجموعات النموذج الحي والمزوّد الأصلي ومزوّد Docker المنفصلة.
يستخدم Matrix `--profile fast` للبوابات المجدولة وبوابات الإصدار، مع إضافة `--fail-fast` فقط عندما يدعم CLI المسحوب ذلك. يبقى افتراضي CLI ومدخل سير العمل اليدوي `all`؛ وتقسم عملية الإطلاق اليدوية `matrix_profile=all` دائما تغطية Matrix الكاملة إلى مهام `transport` و`media` و`e2ee-smoke` و`e2ee-deep` و`e2ee-cli`.
يستخدم Matrix الخيار `--profile fast` للبوابات المجدولة وبوابات الإصدار، مضيفا `--fail-fast` فقط عندما يدعم CLI الذي تم checkout له ذلك. يظل الافتراضي في CLI ومدخل سير العمل اليدوي `all`؛ ودائما ما يجزئ إرسال `matrix_profile=all` اليدوي تغطية Matrix الكاملة إلى مهام `transport` و`media` و`e2ee-smoke` و`e2ee-deep` و`e2ee-cli`.
يشغل `OpenClaw Release Checks` أيضا مسارات مختبر QA الحرجة للإصدار قبل موافقة الإصدار؛ وتشغل بوابة تكافؤ QA الخاصة به حزم المرشح وخط الأساس كمهام مسارات متوازية، ثم تنزل كلا الأثرين في مهمة تقرير صغيرة للمقارنة النهائية للتكافؤ.
يشغّل `OpenClaw Release Checks` أيضا مسارات QA Lab الحرجة للإصدار قبل موافقة الإصدار؛ وتشغّل بوابة تكافؤ QA الخاصة به حزمتَي المرشح وخط الأساس كمهام مسارات متوازية، ثم تنزّل كلا النتاجين في مهمة تقرير صغيرة للمقارنة النهائية للتكافؤ.
بالنسبة إلى طلبات PR العادية، اتبع أدلة CI/الفحص المحددة النطاق بدلا من التعامل مع التكافؤ كحالة مطلوبة.
بالنسبة إلى PRs العادية، اتبع أدلة CI/الفحص المحددة النطاق بدلا من التعامل مع parity كحالة مطلوبة.
## CodeQL
سير عمل `CodeQL` هو ماسح أمان أولي ضيق النطاق عن قصد، وليس فحصا شاملا للمستودع الكامل. تعمل عمليات الحماية اليومية واليدوية والخاصة بطلبات السحب غير المسودة على فحص كود سير عمل Actions إضافة إلى أسطح JavaScript/TypeScript الأعلى خطورة باستخدام استعلامات أمان عالية الثقة، ومفلترة إلى `security-severity` عالية/حرجة.
سير عمل `CodeQL` هو عمدا ماسح أمان ضيق للمرور الأول، وليس مسحا كاملا للمستودع. تفحص عمليات الحراسة اليومية واليدوية وطلبات السحب غير المسودة كود سير عمل Actions إضافة إلى أسطح JavaScript/TypeScript الأعلى خطرا باستخدام استعلامات أمان عالية الثقة مصفاة إلى `security-severity` العالية/الحرجة.
يبقى حارس طلب السحب خفيفا: فهو لا يبدأ إلا للتغييرات ضمن `.github/actions` أو `.github/codeql` أو `.github/workflows` أو `packages` أو `src`، ويشغل مصفوفة الأمان عالية الثقة نفسها التي يشغلها سير العمل المجدول. يبقى CodeQL الخاص بـ Android وmacOS خارج الإعدادات الافتراضية لطلبات PR.
تبقى حراسة طلبات السحب خفيفة: فهي تبدأ فقط للتغييرات ضمن `.github/actions` أو `.github/codeql` أو `.github/workflows` أو `packages` أو `src`، وتشغل مصفوفة الأمان عالية الثقة نفسها مثل سير العمل المجدول. تبقى CodeQL الخاصة بـ Android وmacOS خارج افتراضات PR.
### فئات الأمان
| الفئة | السطح |
| الفئة | السطح |
| ------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| `/codeql-security-high/core-auth-secrets` | المصادقة، والأسرار، وصندوق العزل، وCron، وخط الأساس لـ Gateway |
| `/codeql-security-high/channel-runtime-boundary` | عقود تنفيذ القناة الأساسية إضافة إلى وقت تشغيل Plugin القناة، وGateway، وPlugin SDK، والأسرار، ونقاط تماس التدقيق |
| `/codeql-security-high/network-ssrf-boundary` | أسطح SSRF الأساسية، وتحليل IP، وحارس الشبكة، وجلب الويب، وسياسة SSRF في Plugin SDK |
| `/codeql-security-high/mcp-process-tool-boundary` | خوادم MCP، ومساعدو تنفيذ العمليات، والتسليم الصادر، وبوابات تنفيذ أدوات الوكيل |
| `/codeql-security-high/plugin-trust-boundary` | أسطح الثقة لتثبيت Plugin، والمحمّل، والبيان، والسجل، وتثبيت مدير الحزم، وتحميل المصدر، وعقد حزمة Plugin SDK |
| `/codeql-security-high/core-auth-secrets` | المصادقة، والأسرار، وsandbox، وcron، وخط أساس gateway |
| `/codeql-security-high/channel-runtime-boundary` | عقود تنفيذ القنوات الأساسية إضافة إلى وقت تشغيل Plugin القناة، وgateway، وPlugin SDK، والأسرار، ونقاط لمس التدقيق |
| `/codeql-security-high/network-ssrf-boundary` | أسطح SSRF الأساسية، وتحليل IP، وحارس الشبكة، وweb-fetch، وسياسة SSRF في Plugin SDK |
| `/codeql-security-high/mcp-process-tool-boundary` | خوادم MCP، ومساعدات تنفيذ العمليات، والتسليم الصادر، وبوابات تنفيذ أدوات الوكيل |
| `/codeql-security-high/plugin-trust-boundary` | أسطح الثقة لتثبيت Plugin، والمحمل، والبيان، والسجل، وتثبيت مدير الحزم، وتحميل المصدر، وعقد حزمة Plugin SDK |
### أجزاء الأمان الخاصة بالمنصة
### شرائح الأمان الخاصة بالمنصة
- `CodeQL Android Critical Security`جزء أمان Android المجدول. يبني تطبيق Android يدويا من أجل CodeQL على أصغر مشغل Blacksmith Linux تقبله سلامة سير العمل. يرفع النتائج ضمن `/codeql-critical-security/android`.
- `CodeQL macOS Critical Security`جزء أمان macOS الأسبوعي/اليدوي. يبني تطبيق macOS يدويا من أجل CodeQL على Blacksmith macOS، ويفلتر نتائج بناء التبعيات من SARIF المرفوع، ويرفع النتائج ضمن `/codeql-critical-security/macos`. يبقى خارج الإعدادات الافتراضية اليومية لأن بناء macOS يهيمن على زمن التشغيل حتى عندما يكون نظيفا.
- `CodeQL Android Critical Security`شريحة أمان Android مجدولة. تبني تطبيق Android يدويا لأجل CodeQL على أصغر مشغل Blacksmith Linux تقبله سلامة سير العمل. ترفع ضمن `/codeql-critical-security/android`.
- `CodeQL macOS Critical Security`شريحة أمان macOS أسبوعية/يدوية. تبني تطبيق macOS يدويا لأجل CodeQL على Blacksmith macOS، وتصفي نتائج بناء التبعيات من SARIF المرفوع، وترفع ضمن `/codeql-critical-security/macos`. تبقى خارج الافتراضات اليومية لأن بناء macOS يهيمن على وقت التشغيل حتى عندما يكون نظيفا.
### فئات الجودة الحرجة
`CodeQL Critical Quality` هو جزء الجودة غير الأمني المقابل. يشغل فقط استعلامات جودة JavaScript/TypeScript غير الأمنية وبمستوى خطأ على أسطح ضيقة عالية القيمة، على مشغل Blacksmith Linux الأصغر. حارس طلب السحب الخاص به أصغر عمدا من ملف التعريف المجدول: طلبات PR غير المسودة تشغل فقط الأجزاء المطابقة `agent-runtime-boundary` و`config-boundary` و`core-auth-secrets` و`channel-runtime-boundary` و`gateway-runtime-boundary` و`memory-runtime-boundary` و`mcp-process-runtime-boundary` و`provider-runtime-boundary` و`session-diagnostics-boundary` و`plugin-boundary` و`plugin-sdk-package-contract` و`plugin-sdk-reply-runtime` لتغييرات كود تنفيذ أوامر/نماذج/أدوات الوكيل وتوجيه الردود، وكود مخطط/ترحيل/إدخال وإخراج الإعدادات، وكود المصادقة/الأسرار/صندوق العزل/الأمان، ووقت تشغيل القناة الأساسية وPlugin القناة المضمنة، وبروتوكول Gateway/طريقة الخادم، ووقت تشغيل الذاكرة/غراء SDK، وMCP/العمليات/التسليم الصادر، ووقت تشغيل المزوّد/كتالوج النماذج، وتشخيصات الجلسة/طوابير التسليم، ومحمّل Plugin، وPlugin SDK/عقد الحزمة، أو وقت تشغيل رد Plugin SDK. تشغل تغييرات إعدادات CodeQL وسير عمل الجودة كل أجزاء جودة PR الاثني عشر.
`CodeQL Critical Quality` هي الشريحة غير الأمنية المطابقة. تشغل فقط استعلامات جودة JavaScript/TypeScript غير أمنية وبشدة خطأ، على أسطح ضيقة عالية القيمة على مشغل Blacksmith Linux الأصغر. حراسة طلبات السحب الخاصة بها أصغر عمدا من الملف الشخصي المجدول: PRs غير المسودة تشغل فقط الشرائح المطابقة `agent-runtime-boundary`، و`config-boundary`، و`core-auth-secrets`، و`channel-runtime-boundary`، و`gateway-runtime-boundary`، و`memory-runtime-boundary`، و`mcp-process-runtime-boundary`، و`provider-runtime-boundary`، و`session-diagnostics-boundary`، و`plugin-boundary`، و`plugin-sdk-package-contract`، و`plugin-sdk-reply-runtime` لتغييرات كود تنفيذ أوامر/نماذج/أدوات الوكيل وتوجيه الردود، وكود مخطط/ترحيل/IO للإعدادات، وكود المصادقة/الأسرار/sandbox/الأمان، ووقت تشغيل القنوات الأساسية وPlugin القناة المضمنة، وبروتوكول gateway/طريقة الخادم، ووقت تشغيل الذاكرة/غراء SDK، وMCP/العملية/التسليم الصادر، ووقت تشغيل المزود/كتالوج النماذج، وتشخيصات الجلسة/طوابير التسليم، ومحمل Plugin، وPlugin SDK/عقد الحزمة، أو وقت تشغيل رد Plugin SDK. تشغل تغييرات إعداد CodeQL وسير عمل الجودة كل شرائح جودة PR الاثنتي عشرة.
يقبل التشغيل اليدوي:
@ -436,40 +428,40 @@ pnpm test:docker:timings <summary> # slow-lane and phase critical-path summari
profile=all|agent-runtime-boundary|config-boundary|core-auth-secrets|channel-runtime-boundary|gateway-runtime-boundary|memory-runtime-boundary|mcp-process-runtime-boundary|plugin-boundary|plugin-sdk-package-contract|plugin-sdk-reply-runtime|provider-runtime-boundary|session-diagnostics-boundary
```
ملفات التعريف الضيقة هي خطافات تعليم/تكرار لتشغيل جزء جودة واحد بمعزل.
الملفات الشخصية الضيقة هي خطافات تعليم/تكرار لتشغيل شريحة جودة واحدة بمعزل.
| الفئة | السطح |
| الفئة | السطح |
| ------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `/codeql-critical-quality/core-auth-secrets` | كود حدود الأمان للمصادقة، والأسرار، وصندوق العزل، وCron، وGateway |
| `/codeql-critical-quality/config-boundary` | عقود مخطط الإعدادات، والترحيل، والتطبيع، والإدخال والإخراج |
| `/codeql-critical-quality/gateway-runtime-boundary` | مخططات بروتوكول Gateway وعقود طرق الخادم |
| `/codeql-critical-quality/channel-runtime-boundary` | عقود تنفيذ القناة الأساسية وPlugin القناة المضمنة |
| `/codeql-critical-quality/agent-runtime-boundary` | عقود وقت التشغيل لتنفيذ الأوامر، وتوجيه النموذج/المزوّد، وتوجيه الرد التلقائي وطوابيره، ومستوى تحكم ACP |
| `/codeql-critical-quality/mcp-process-runtime-boundary` | خوادم MCP وجسور الأدوات، ومساعدو الإشراف على العمليات، وعقود التسليم الصادر |
| `/codeql-critical-quality/memory-runtime-boundary` | Memory host SDK، وواجهات وقت تشغيل الذاكرة، وأسماء الذاكرة المستعارة في Plugin SDK، وغراء تفعيل وقت تشغيل الذاكرة، وأوامر طبيب الذاكرة |
| `/codeql-critical-quality/session-diagnostics-boundary` | داخليات طابور الردود، وطوابير تسليم الجلسات، ومساعدو ربط/تسليم الجلسات الصادرة، وأسطح حزمة الأحداث/السجلات التشخيصية، وعقود CLI لطبيب الجلسات |
| `/codeql-critical-quality/plugin-sdk-reply-runtime` | توجيه الردود الواردة في Plugin SDK، ومساعدو حمولة الرد/تجزئته/وقت تشغيله، وخيارات رد القناة، وطوابير التسليم، ومساعدو ربط الجلسة/الخيط |
| `/codeql-critical-quality/provider-runtime-boundary` | تطبيع كتالوج النماذج، ومصادقة المزوّد واكتشافه، وتسجيل وقت تشغيل المزوّد، وافتراضيات/كتالوجات المزوّد، وسجلات الويب/البحث/الجلب/التضمين |
| `/codeql-critical-quality/ui-control-plane` | إقلاع واجهة التحكم، والاستمرارية المحلية، وتدفقات تحكم Gateway، وعقود وقت تشغيل مستوى التحكم في المهام |
| `/codeql-critical-quality/web-media-runtime-boundary` | عقود وقت التشغيل لجلب/بحث الويب الأساسي، وإدخال وإخراج الوسائط، وفهم الوسائط، وتوليد الصور، وتوليد الوسائط |
| `/codeql-critical-quality/plugin-boundary` | عقود المحمّل، والسجل، والسطح العام، ونقطة دخول Plugin SDK |
| `/codeql-critical-quality/plugin-sdk-package-contract` | مصدر Plugin SDK المنشور من جهة الحزمة ومساعدو عقد حزمة Plugin |
| `/codeql-critical-quality/core-auth-secrets` | كود حدود أمان المصادقة، والأسرار، وsandbox، وcron، وgateway |
| `/codeql-critical-quality/config-boundary` | عقود مخطط الإعدادات، والترحيل، والتطبيع، وIO |
| `/codeql-critical-quality/gateway-runtime-boundary` | مخططات بروتوكول Gateway وعقود طرق الخادم |
| `/codeql-critical-quality/channel-runtime-boundary` | عقود تنفيذ القنوات الأساسية وPlugin القناة المضمنة |
| `/codeql-critical-quality/agent-runtime-boundary` | عقود وقت تشغيل تنفيذ الأوامر، وتوجيه النموذج/المزود، وتوجيه الرد التلقائي وطوابيره، ومستوى التحكم ACP |
| `/codeql-critical-quality/mcp-process-runtime-boundary` | خوادم MCP وجسور الأدوات، ومساعدات الإشراف على العمليات، وعقود التسليم الصادر |
| `/codeql-critical-quality/memory-runtime-boundary` | Memory host SDK، وواجهات وقت تشغيل الذاكرة، وأسماء مستعارة لذاكرة Plugin SDK، وغراء تفعيل وقت تشغيل الذاكرة، وأوامر doctor للذاكرة |
| `/codeql-critical-quality/session-diagnostics-boundary` | داخليات طابور الرد، وطوابير تسليم الجلسات، ومساعدات ربط/تسليم الجلسات الصادرة، وأسطح حزم أحداث/سجلات التشخيص، وعقود CLI لطبيب الجلسة |
| `/codeql-critical-quality/plugin-sdk-reply-runtime` | توجيه الردود الواردة في Plugin SDK، ومساعدات حمولة/تجزئة/وقت تشغيل الرد، وخيارات رد القناة، وطوابير التسليم، ومساعدات ربط الجلسة/الخيط |
| `/codeql-critical-quality/provider-runtime-boundary` | تطبيع كتالوج النماذج، ومصادقة المزود واكتشافه، وتسجيل وقت تشغيل المزود، وافتراضات/كتالوجات المزود، وسجلات الويب/البحث/الجلب/التضمين |
| `/codeql-critical-quality/ui-control-plane` | تمهيد واجهة التحكم، والاستمرارية المحلية، وتدفقات تحكم gateway، وعقود وقت تشغيل مستوى التحكم بالمهام |
| `/codeql-critical-quality/web-media-runtime-boundary` | عقود وقت تشغيل جلب/بحث الويب الأساسية، وIO الوسائط، وفهم الوسائط، وتوليد الصور، وتوليد الوسائط |
| `/codeql-critical-quality/plugin-boundary` | عقود المحمل، والسجل، والسطح العام، ونقطة دخول Plugin SDK |
| `/codeql-critical-quality/plugin-sdk-package-contract` | مصدر Plugin SDK المنشور من جهة الحزمة ومساعدات عقد حزمة plugin |
تبقى الجودة منفصلة عن الأمان حتى يمكن جدولة نتائج الجودة أو قياسها أو تعطيلها أو توسيعها من دون حجب إشارة الأمان. يجب إعادة إضافة توسعة CodeQL الخاصة بـ Swift وPython وPlugin المضمنة كعمل لاحق محدد النطاق أو مجزأ فقط بعد أن تصبح ملفات التعريف الضيقة مستقرة في زمن التشغيل والإشارة.
تبقى الجودة منفصلة عن الأمان حتى يمكن جدولة نتائج الجودة أو قياسها أو تعطيلها أو توسيعها من دون إخفاء إشارة الأمان. يجب إعادة إضافة توسيع CodeQL لـ Swift وPython وPlugin المضمنة كعمل متابعة محدد النطاق أو مجزأ فقط بعد أن تصبح الملفات الشخصية الضيقة مستقرة في وقت التشغيل والإشارة.
## سير عمل الصيانة
## مهام سير عمل الصيانة
### وكيل المستندات
### Docs Agent
سير عمل `Docs Agent` هو مسار صيانة Codex مدفوع بالأحداث لإبقاء المستندات الموجودة متوافقة مع التغييرات التي هبطت حديثا. لا يملك جدولة صرفة: يمكن لتشغيل CI ناجح لدفع غير بوت على `main` أن يفعله، كما يمكن للتشغيل اليدوي تشغيله مباشرة. تتخطى استدعاءات تشغيل سير العمل عندما يكون `main` قد تقدم أو عندما يكون تشغيل `Docs Agent` آخر غير متخطى قد أنشئ في الساعة الأخيرة. عند تشغيله، يراجع نطاق الالتزامات من SHA مصدر `Docs Agent` السابق غير المتخطى إلى `main` الحالي، بحيث يمكن لتشغيل واحد كل ساعة أن يغطي كل تغييرات main المتراكمة منذ آخر تمرير للمستندات.
سير عمل `Docs Agent` هو مسار صيانة Codex قائم على الأحداث لإبقاء المستندات الحالية متوافقة مع التغييرات التي وصلت حديثا. ليس له جدول صرف: يمكن لتشغيل CI ناجح من دفع غير بوت على `main` أن يشغله، كما يمكن للتشغيل اليدوي تشغيله مباشرة. تتخطى استدعاءات workflow-run عندما يكون `main` قد تقدم أو عندما يكون تشغيل آخر غير متخطى لـ Docs Agent قد أنشئ خلال الساعة الأخيرة. عندما يعمل، يراجع نطاق الالتزامات من SHA المصدر السابق غير المتخطى لـ Docs Agent إلى `main` الحالي، لذلك يمكن لتشغيل واحد كل ساعة تغطية كل تغييرات main المتراكمة منذ آخر مرور على المستندات.
### وكيل أداء الاختبارات
### Test Performance Agent
سير عمل `Test Performance Agent` هو مسار صيانة Codex مدفوع بالأحداث للاختبارات البطيئة. لا يملك جدولة صرفة: يمكن لتشغيل CI ناجح لدفع غير بوت على `main` أن يفعله، لكنه يتخطى إذا كان استدعاء تشغيل سير عمل آخر قد عمل أو ما زال يعمل في ذلك اليوم بحسب UTC. يتجاوز التشغيل اليدوي بوابة النشاط اليومية تلك. يبني المسار تقرير أداء Vitest مجمعا للمجموعة الكاملة، ويسمح لـ Codex بإجراء إصلاحات صغيرة فقط لأداء الاختبارات مع الحفاظ على التغطية بدلا من إعادة هيكلة واسعة، ثم يعيد تشغيل تقرير المجموعة الكاملة ويرفض التغييرات التي تقلل عدد اختبارات خط الأساس الناجحة. إذا كان خط الأساس يحتوي اختبارات فاشلة، فيجوز لـ Codex إصلاح الإخفاقات الواضحة فقط، ويجب أن ينجح تقرير المجموعة الكاملة بعد الوكيل قبل الالتزام بأي شيء. عندما يتقدم `main` قبل هبوط دفع البوت، يعيد المسار تأسيس الرقعة المتحقق منها، ويعيد تشغيل `pnpm check:changed`، ويحاول الدفع من جديد؛ ويتم تخطي الرقع القديمة المتعارضة. يستخدم Ubuntu المستضاف على GitHub حتى يستطيع إجراء Codex الحفاظ على وضعية أمان إسقاط sudo نفسها التي يستخدمها وكيل المستندات.
سير عمل `Test Performance Agent` هو مسار صيانة Codex قائم على الأحداث للاختبارات البطيئة. ليس له جدول صرف: يمكن لتشغيل CI ناجح من دفع غير بوت على `main` أن يشغله، لكنه يتخطى إذا كان استدعاء workflow-run آخر قد عمل أو يعمل بالفعل في ذلك اليوم بتوقيت UTC. يتجاوز التشغيل اليدوي بوابة النشاط اليومية هذه. يبني المسار تقرير أداء Vitest مجمعا للمجموعة الكاملة، ويسمح لـ Codex بإجراء إصلاحات أداء اختبارات صغيرة فقط مع الحفاظ على التغطية بدلا من عمليات refactor واسعة، ثم يعيد تشغيل تقرير المجموعة الكاملة ويرفض التغييرات التي تقلل عدد اختبارات خط الأساس الناجحة. إذا كان خط الأساس يحتوي على اختبارات فاشلة، يمكن لـ Codex إصلاح الإخفاقات الواضحة فقط ويجب أن ينجح تقرير المجموعة الكاملة بعد الوكيل قبل أن يلتزم بأي شيء. عندما يتقدم `main` قبل وصول دفع البوت، يعيد المسار تأسيس الرقعة المحققة، ويعيد تشغيل `pnpm check:changed`، ويعيد محاولة الدفع؛ يتم تخطي الرقع القديمة المتعارضة. يستخدم GitHub-hosted Ubuntu حتى يتمكن إجراء Codex من الحفاظ على وضعية أمان drop-sudo نفسها مثل وكيل المستندات.
### طلبات PR المكررة بعد الدمج
### PRs مكررة بعد الدمج
سير عمل `Duplicate PRs After Merge` هو سير عمل يدوي للمشرفين لتنظيف التكرارات بعد الهبوط. يضبط افتراضيا على التشغيل الجاف، ولا يغلق إلا طلبات PR المدرجة صراحة عندما تكون `apply=true`. قبل تعديل GitHub، يتحقق من أن طلب PR الهابط قد دُمج وأن كل تكرار لديه إما مشكلة مرجعية مشتركة أو أجزاء تغييرات متداخلة.
سير عمل `Duplicate PRs After Merge` هو سير عمل يدوي للمشرفين لتنظيف التكرارات بعد الوصول. افتراضيا يعمل بوضع dry-run ولا يغلق إلا PRs المدرجة صراحة عندما تكون `apply=true`. قبل تعديل GitHub، يتحقق من أن PR الواصل مدمج وأن كل نسخة مكررة لديها إما مشكلة مشار إليها مشتركة أو مقاطع تغيير متداخلة.
```bash
gh workflow run duplicate-after-merge.yml \
@ -480,35 +472,35 @@ gh workflow run duplicate-after-merge.yml \
## بوابات الفحص المحلية وتوجيه التغييرات
تعيش منطقية مسارات التغييرات المحلية في `scripts/changed-lanes.mjs` وينفذها `scripts/check-changed.mjs`. بوابة الفحص المحلية تلك أكثر صرامة بشأن حدود المعمارية من نطاق منصة CI الواسع:
تعيش منطق مسارات التغيير المحلية في `scripts/changed-lanes.mjs` وتنفذ بواسطة `scripts/check-changed.mjs`. بوابة الفحص المحلية تلك أكثر صرامة بشأن حدود البنية من نطاق منصة CI الواسع:
- تغييرات إنتاج النواة تشغل فحص أنواع إنتاج النواة واختبارات النواة إضافة إلى lint/الحراس الخاصة بالنواة؛
- تغييرات اختبارات النواة فقط تشغل فحص أنواع اختبارات النواة فقط إضافة إلى lint النواة؛
- تغييرات إنتاج Plugin تشغل فحص أنواع إنتاج Plugin واختبارات Plugin إضافة إلى lint Plugi
- تغييرات اختبارات Plugin فقط تشغل فحص أنواع اختبارات Plugin إضافة إلى lint Plugi
- تغييرات Plugin SDK العام أو عقد Plugin تتوسع إلى فحص أنواع Plugin لأن Plugins تعتمد على عقود النواة تلك (وتبقى فحوصات Vitest الخاصة بـ Plugin عملا اختباريا صريحا)؛
- زيادات الإصدار الخاصة ببيانات تعريف الإصدار فقط تشغل فحوصات مستهدفة للإصدار/الإعدادات/تبعيات الجذر؛
- تفشل تغييرات الجذر/الإعدادات غير المعروفة بأمان إلى كل مسارات الفحص.
- تغييرات إنتاج core تشغل typecheck لإنتاج core واختبارات core إضافة إلى lint/guards الخاصة بـ core؛
- تغييرات اختبارات core فقط تشغل فقط typecheck لاختبارات core إضافة إلى lint الخاص بـ core؛
- تغييرات إنتاج extension تشغل typecheck لإنتاج extension واختبارات extension إضافة إلى lint الخاص بـ extensio
- تغييرات اختبارات extension فقط تشغل typecheck لاختبارات extension إضافة إلى lint الخاص بـ extensio
- تغييرات Plugin SDK العامة أو عقد plugin تتوسع إلى typecheck لـ extension لأن extensions تعتمد على عقود core هذه (تبقى عمليات مسح Vitest للـ extension عملا اختباريا صريحا)؛
- زيادات إصدار metadata الخاصة بالإصدار فقط تشغل فحوص إصدار/إعدادات/تبعية جذرية مستهدفة؛
- تغييرات الجذر/الإعدادات غير المعروفة تفشل بأمان إلى كل مسارات الفحص.
يعيش توجيه اختبارات التغييرات المحلية في `scripts/test-projects.test-support.mjs` وهو أرخص عمدا من `check:changed`: تعديلات الاختبارات المباشرة تشغل نفسها، وتفضل تعديلات المصدر تعيينات صريحة، ثم اختبارات الأشقاء والمعتمدين في رسم بياني الاستيراد. إعداد تسليم غرفة المجموعة المشتركة هو أحد التعيينات الصريحة: تمر تغييرات إعداد الرد المرئي للمجموعة، أو وضع تسليم رد المصدر، أو موجه نظام أداة الرسائل عبر اختبارات الرد الأساسية إضافة إلى انحدارات تسليم Discord وSlack حتى يفشل تغيير افتراضي مشترك قبل أول دفع PR. استخدم `OPENCLAW_TEST_CHANGED_BROAD=1 pnpm test:changed` فقط عندما يكون التغيير على مستوى عدة الاختبار بما يكفي لأن المجموعة الرخيصة المعيّنة ليست وكيلا موثوقا.
يعيش توجيه اختبارات التغييرات المحلية في `scripts/test-projects.test-support.mjs` وهو عمدا أرخص من `check:changed`: تعديلات الاختبار المباشرة تشغل نفسها، وتعديلات المصدر تفضل الخرائط الصريحة، ثم اختبارات الأشقاء والاعتمادات في مخطط الاستيراد. إعداد تسليم غرف المجموعات المشترك هو أحد الخرائط الصريحة: تغييرات إعداد الرد المرئي للمجموعة، أو نمط تسليم رد المصدر، أو موجه نظام أداة الرسائل تمر عبر اختبارات الرد الأساسية إضافة إلى تراجعات تسليم Discord وSlack حتى يفشل تغيير افتراضي مشترك قبل أول دفع PR. استخدم `OPENCLAW_TEST_CHANGED_BROAD=1 pnpm test:changed` فقط عندما يكون التغيير واسعا بما يكفي على مستوى العدة بحيث لا تكون المجموعة الرخيصة المعينة وكيلا موثوقا.
## التحقق باستخدام Testbox
شغّل Testbox من جذر المستودع، وفضّل صندوقًا مهيأ حديثًا لإثبات واسع النطاق. قبل إنفاق بوابة بطيئة على صندوق أُعيد استخدامه، أو انتهت صلاحيته، أو أبلغ للتو عن مزامنة كبيرة على غير المتوقع، شغّل `pnpm testbox:sanity` داخل الصندوق أولًا.
شغّل Testbox من جذر المستودع وفضّل صندوقًا جديدًا تم تسخينه مسبقًا للإثبات واسع النطاق. قبل إنفاق بوابة بطيئة على صندوق أُعيد استخدامه، أو انتهت صلاحيته، أو أبلغ للتو عن مزامنة كبيرة على نحو غير متوقع، شغّل `pnpm testbox:sanity` داخل الصندوق أولًا.
يفشل فحص السلامة سريعًا عندما تختفي ملفات جذر مطلوبة مثل `pnpm-lock.yaml` أو عندما يُظهر `git status --short` ما لا يقل عن 200 حذف متتبع. يعني ذلك عادة أن حالة المزامنة البعيدة ليست نسخة موثوقة من PR؛ أوقف ذلك الصندوق وهيّئ صندوقًا جديدًا بدلًا من تصحيح فشل اختبار المنتج. بالنسبة إلى PRs التي تتضمن حذفًا كبيرًا مقصودًا، اضبط `OPENCLAW_TESTBOX_ALLOW_MASS_DELETIONS=1` لتشغيل فحص السلامة ذلك.
يفشل فحص السلامة سريعًا عندما تختفي ملفات جذر مطلوبة مثل `pnpm-lock.yaml` أو عندما يُظهر `git status --short` ما لا يقل عن 200 حذف متعقب. يعني ذلك عادةً أن حالة المزامنة البعيدة ليست نسخة موثوقة من طلب السحب؛ أوقف ذلك الصندوق وسخّن صندوقًا جديدًا بدلًا من تصحيح فشل اختبار المنتج. بالنسبة إلى طلبات السحب التي تتضمن حذفًا كبيرًا مقصودًا، عيّن `OPENCLAW_TESTBOX_ALLOW_MASS_DELETIONS=1` لتشغيل فحص السلامة ذلك.
ينهي `pnpm testbox:run` أيضًا استدعاء Blacksmith CLI محلي يبقى في مرحلة المزامنة لأكثر من خمس دقائق دون مخرجات بعد المزامنة. اضبط `OPENCLAW_TESTBOX_SYNC_TIMEOUT_MS=0` لتعطيل ذلك الحارس، أو استخدم قيمة أكبر بالمللي ثانية للفروقات المحلية الكبيرة على نحو غير معتاد.
ينهي `pnpm testbox:run` أيضًا استدعاء Blacksmith CLI محليًا إذا بقي في مرحلة المزامنة لأكثر من خمس دقائق من دون مخرجات بعد المزامنة. عيّن `OPENCLAW_TESTBOX_SYNC_TIMEOUT_MS=0` لتعطيل هذا الحارس، أو استخدم قيمة أكبر بالمللي ثانية للفروقات المحلية الكبيرة على نحو غير معتاد.
Crabbox هو مغلّف الصندوق البعيد المملوك للمستودع لإثبات Linux الخاص بالمشرفين. استخدمه عندما يكون الفحص واسعًا أكثر من اللازم لحلقة تحرير محلية، أو عندما يهم التكافؤ مع CI، أو عندما يحتاج الإثبات إلى أسرار، أو Docker، أو مسارات حزم، أو صناديق قابلة لإعادة الاستخدام، أو سجلات بعيدة. واجهة OpenClaw الخلفية العادية هي `blacksmith-testbox`؛ وتكون سعة AWS/Hetzner المملوكة بديلًا احتياطيًا عند انقطاعات Blacksmith، أو مشكلات الحصة، أو اختبارات السعة المملوكة الصريحة.
Crabbox هو مغلّف الصندوق البعيد المملوك للمستودع لإثبات Linux الخاص بالمشرفين. استخدمه عندما يكون الفحص أوسع من أن يناسب حلقة تعديل محلية، أو عندما تكون مطابقة CI مهمة، أو عندما يحتاج الإثبات إلى أسرار، أو Docker، أو مسارات الحزم، أو صناديق قابلة لإعادة الاستخدام، أو سجلات بعيدة. خلفية OpenClaw العادية هي `blacksmith-testbox`؛ وتُعد سعة AWS/Hetzner المملوكة خيارًا احتياطيًا عند انقطاعات Blacksmith، أو مشكلات الحصة، أو الاختبار الصريح على السعة المملوكة.
قبل التشغيل الأول، افحص المغلّف من جذر المستودع:
قبل أول تشغيل، افحص المغلّف من جذر المستودع:
```bash
pnpm crabbox:run -- --help | sed -n '1,120p'
```
يرفض مغلّف المستودع ملف Crabbox ثنائيًا قديمًا لا يعلن عن `blacksmith-testbox`. مرّر المزوّد صراحةً رغم أن `.crabbox.yaml` يحتوي على إعدادات افتراضية للسحابة المملوكة.
يرفض مغلّف المستودع ملف Crabbox ثنائيًا قديمًا لا يعلن عن `blacksmith-testbox`. مرّر المزوّد صراحةً حتى إن كانت `.crabbox.yaml` تحتوي على افتراضيات السحابة المملوكة.
بوابة التغييرات:
@ -555,21 +547,21 @@ pnpm crabbox:run -- --provider blacksmith-testbox \
"env CI=1 NODE_OPTIONS=--max-old-space-size=4096 OPENCLAW_TEST_PROJECTS_PARALLEL=6 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=900000 pnpm test"
```
اقرأ ملخص JSON النهائي. الحقول المفيدة هي `provider`، و`leaseId`، و`syncDelegated`، و`exitCode`، و`commandMs`، و`totalMs`. ينبغي لتشغيلات Crabbox المدعومة من Blacksmith لمرة واحدة أن توقف Testbox تلقائيًا؛ إذا انقطع تشغيل أو كان التنظيف غير واضح، فافحص الصناديق الحية وأوقف فقط الصناديق التي أنشأتها:
اقرأ ملخص JSON النهائي. الحقول المفيدة هي `provider` و`leaseId` و`syncDelegated` و`exitCode` و`commandMs` و`totalMs`. ينبغي أن توقف تشغيلات Crabbox أحادية اللقطة المدعومة من Blacksmith صندوق Testbox تلقائيًا؛ إذا قوطع تشغيل أو كان التنظيف غير واضح، فافحص الصناديق الحية وأوقف الصناديق التي أنشأتها فقط:
```bash
blacksmith testbox list
blacksmith testbox stop --id <tbx_id>
```
استخدم إعادة الاستخدام فقط عندما تحتاج عمدًا إلى أوامر متعددة على الصندوق المهيأ نفسه:
استخدم إعادة الاستخدام فقط عندما تحتاج عمدًا إلى أوامر متعددة على الصندوق نفسه بعد تهيئته:
```bash
pnpm crabbox:run -- --provider blacksmith-testbox --id <tbx_id> --no-sync --timing-json --shell -- "pnpm test <path-or-filter>"
pnpm crabbox:stop -- <tbx_id>
```
إذا كانت الطبقة المعطلة هي Crabbox لكن Blacksmith نفسه يعمل، فاستخدم Blacksmith مباشرة كبديل ضيق:
إذا كانت Crabbox هي الطبقة المعطّلة بينما يعمل Blacksmith نفسه، فاستخدم Blacksmith مباشرةً كخيار احتياطي ضيق:
```bash
blacksmith testbox warmup ci-check-testbox.yml --ref main --idle-timeout 90
@ -577,7 +569,7 @@ blacksmith testbox run --id <tbx_id> "env CI=1 NODE_OPTIONS=--max-old-space-size
blacksmith testbox stop --id <tbx_id>
```
صعّد إلى سعة Crabbox المملوكة فقط عندما يكون Blacksmith متوقفًا، أو محدود الحصة، أو يفتقد البيئة المطلوبة، أو عندما تكون السعة المملوكة هي الهدف صراحةً:
صعّد إلى سعة Crabbox المملوكة فقط عندما يكون Blacksmith متوقفًا، أو مقيّدًا بالحصة، أو يفتقد البيئة المطلوبة، أو عندما تكون السعة المملوكة هي الهدف صراحةً:
```bash
pnpm crabbox:warmup -- --provider aws --class beast --market on-demand --idle-timeout 90m
@ -586,9 +578,9 @@ pnpm crabbox:run -- --id <cbx_id-or-slug> --timing-json --shell -- "env NODE_OPT
pnpm crabbox:stop -- <cbx_id-or-slug>
```
يمتلك `.crabbox.yaml` إعدادات المزوّد، والمزامنة، والتهيئة الافتراضية لـ GitHub Actions لمسارات السحابة المملوكة. يستثني `.git` المحلي لكي يحتفظ سحب Actions المهيأ ببيانات Git الوصفية البعيدة الخاصة به بدلًا من مزامنة المستودعات البعيدة ومخازن الكائنات المحلية الخاصة بالمشرف، ويستثني آثار التشغيل/البناء المحلية التي يجب ألا تُنقل أبدًا. يمتلك `.github/workflows/crabbox-hydrate.yml` السحب، وإعداد Node/pnpm، وجلب `origin/main`، وتسليم البيئة غير السرية لأوامر السحابة المملوكة `crabbox run --id <cbx_id>`.
تملك `.crabbox.yaml` افتراضيات المزوّد والمزامنة والتهيئة عبر GitHub Actions لمسارات السحابة المملوكة. وهي تستبعد `.git` المحلي بحيث يحتفظ checkout المهيأ من Actions ببيانات Git الوصفية البعيدة الخاصة به بدلًا من مزامنة المستودعات البعيدة ومخازن الكائنات المحلية الخاصة بالمشرف، كما تستبعد آثار وقت التشغيل/البناء المحلية التي ينبغي عدم نقلها أبدًا. تملك `.github/workflows/crabbox-hydrate.yml` خطوات checkout، وإعداد Node/pnpm، وجلب `origin/main`، وتسليم البيئة غير السرية لأوامر السحابة المملوكة `crabbox run --id <cbx_id>`.
## ذات صلة
## ذو صلة
- [نظرة عامة على التثبيت](/ar/install)
- [قنوات التطوير](/ar/install/development-channels)

View File

@ -1,39 +1,39 @@
---
read_when:
- إضافة أو تعديل أوامر `openclaw infer`
- تصميم أتمتة مستقرة للإمكانات بدون واجهة مستخدم
summary: CLI قائم على الاستدلال أولًا لسير عمل النماذج والصور والصوت وتحويل النص إلى كلام والفيديو والويب والتضمين المدعومة بمزوّدين
title: CLI الاستدلال
- تصميم أتمتة مستقرة للقدرات بدون واجهة رسومية
summary: واجهة CLI تضع الاستدلال أولاً لسير عمل مدعومة بالمزوّدين تشمل النماذج والصور والصوت وTTS والفيديو والويب والتضمينات
title: واجهة CLI للاستدلال
x-i18n:
generated_at: "2026-05-02T07:22:10Z"
generated_at: "2026-05-06T09:02:16Z"
model: gpt-5.5
provider: openai
source_hash: 04f8b4aeb70e960835612eedcc0a22202957803ca4e5eeb3f1e107e8c736e458
source_hash: 232bf8165ff74b19aaf84431519d9f9f99f20831420b73935f73ffd9412bd04a
source_path: cli/infer.md
workflow: 16
---
`openclaw infer` هو السطح القياسي بلا واجهة تفاعلية لسير عمل الاستدلال المدعومة بمزوّدي الخدمة.
`openclaw infer` هو السطح القياسي عديم الواجهة لسير عمل الاستدلال المدعوم بالمزودين.
يعرض عن قصد عائلات القدرات، وليس أسماء RPC خامة في Gateway ولا معرّفات أدوات الوكيل الخام.
وهو يعرض عمدا عائلات القدرات، وليس أسماء RPC الخام الخاصة بـ Gateway ولا معرّفات أدوات الوكيل الخام.
## حوّل infer إلى Skill
## حوّل infer إلى مهارة
انسخ هذا والصقه إلى وكيل:
انسخ هذا والصقه في وكيل:
```text
Read https://docs.openclaw.ai/cli/infer, then create a skill that routes my common workflows to `openclaw infer`.
Focus on model runs, image generation, video generation, audio transcription, TTS, web search, and embeddings.
```
ينبغي أن تقوم Skill جيدة قائمة على infer بما يلي:
ينبغي أن تقوم المهارة الجيدة المستندة إلى infer بما يلي:
- ربط نوايا المستخدم الشائعة بالأمر الفرعي الصحيح في infer
- تضمين بضعة أمثلة قياسية لـ infer لسير العمل التي تغطيها
- ربط نوايا المستخدم الشائعة بأمر infer الفرعي الصحيح
- تضمين بعض أمثلة infer القياسية لسير العمل التي تغطيها
- تفضيل `openclaw infer ...` في الأمثلة والاقتراحات
- تجنّب إعادة توثيق سطح infer بالكامل داخل متن Skill
- تجنب إعادة توثيق سطح infer بالكامل داخل متن المهارة
تغطية Skill النموذجية المركزة على infer:
تغطية المهارات المعتادة التي تركز على infer:
- `openclaw infer model run`
- `openclaw infer image generate`
@ -44,20 +44,20 @@ Focus on model runs, image generation, video generation, audio transcription, TT
## لماذا تستخدم infer
يوفر `openclaw infer` واجهة CLI واحدة متسقة لمهام الاستدلال المدعومة بمزوّدي الخدمة داخل OpenClaw.
يوفر `openclaw infer` واجهة CLI واحدة ومتسقة لمهام الاستدلال المدعومة بالمزودين داخل OpenClaw.
الفوائد:
- استخدام المزوّدين والنماذج المكوّنة مسبقًا في OpenClaw بدلاً من إعداد أغلفة مخصّصة لكل واجهة خلفية.
- استخدام المزودين والنماذج المكوّنة بالفعل في OpenClaw بدلا من إعداد أغلفة مخصصة لكل خلفية.
- إبقاء سير عمل النماذج والصور ونسخ الصوت وTTS والفيديو والويب والتضمينات ضمن شجرة أوامر واحدة.
- استخدام شكل إخراج `--json` ثابت للسكربتات والأتمتة وسير العمل التي تقودها الوكلاء.
- تفضيل سطح OpenClaw رسمي عندما تكون المهمة في جوهرها "تشغيل استدلال".
- استخدام المسار المحلي العادي بدون الحاجة إلى Gateway لمعظم أوامر infer.
- استخدام شكل مخرجات `--json` ثابت للسكربتات والأتمتة وسير العمل المدفوع بالوكلاء.
- تفضيل سطح OpenClaw رسمي عندما تكون المهمة في جوهرها "تشغيل الاستدلال".
- استخدام المسار المحلي العادي دون الحاجة إلى Gateway لمعظم أوامر infer.
لفحوصات المزوّدين الشاملة من البداية إلى النهاية، فضّل `openclaw infer ...` بعد أن تكون
اختبارات المزوّد ذات المستوى الأدنى ناجحة. فهو يختبر CLI المشحون، وتحميل التكوين،
وحلّ الوكيل الافتراضي، وتنشيط Plugin المضمّن، وبيئة تشغيل القدرات المشتركة
قبل إجراء طلب المزوّد.
لعمليات التحقق الشاملة من المزودين، فضّل `openclaw infer ...` بعد نجاح اختبارات
المزودين ذات المستوى الأدنى. فهو يمرّن CLI المشحون، وتحميل الإعدادات،
وحل الوكيل الافتراضي، وتفعيل Plugin المضمّن، ووقت تشغيل القدرة المشتركة
قبل إرسال طلب المزود.
## شجرة الأوامر
@ -114,15 +114,15 @@ Focus on model runs, image generation, video generation, audio transcription, TT
يربط هذا الجدول مهام الاستدلال الشائعة بأمر infer المقابل.
| المهمة | الأمر | الملاحظات |
| المهمة | الأمر | ملاحظات |
| ---------------------------- | --------------------------------------------------------------------------------------------- | ----------------------------------------------------- |
| تشغيل مطالبة نصية/نموذجية | `openclaw infer model run --prompt "..." --json` | يستخدم المسار المحلي العادي افتراضيًا |
| تشغيل مطالبة نموذج على صور | `openclaw infer model run --prompt "Describe this" --file ./image.png --model provider/model` | كرّر `--file` لمدخلات صور متعددة |
| تشغيل مطالبة نص/نموذج | `openclaw infer model run --prompt "..." --json` | يستخدم المسار المحلي العادي افتراضيا |
| تشغيل مطالبة نموذج على صور | `openclaw infer model run --prompt "Describe this" --file ./image.png --model provider/model` | كرر `--file` لمدخلات صور متعددة |
| إنشاء صورة | `openclaw infer image generate --prompt "..." --json` | استخدم `image edit` عند البدء من ملف موجود |
| وصف ملف صورة | `openclaw infer image describe --file ./image.png --prompt "..." --json` | يجب أن يكون `--model` نموذجًا قادرًا على الصور بصيغة `<provider/model>` |
| وصف ملف صورة | `openclaw infer image describe --file ./image.png --prompt "..." --json` | يجب أن يكون `--model` نموذجا قادرا على الصور بصيغة `<provider/model>` |
| نسخ صوت | `openclaw infer audio transcribe --file ./memo.m4a --json` | يجب أن يكون `--model` بصيغة `<provider/model>` |
| توليد كلام | `openclaw infer tts convert --text "..." --output ./speech.mp3 --json` | `tts status` موجّه نحو Gateway |
| إنشاء فيديو | `openclaw infer video generate --prompt "..." --json` | يدعم تلميحات المزوّد مثل `--resolution` |
| توليد كلام | `openclaw infer tts convert --text "..." --output ./speech.mp3 --json` | `tts status` موجّه إلى Gateway |
| إنشاء فيديو | `openclaw infer video generate --prompt "..." --json` | يدعم تلميحات المزود مثل `--resolution` |
| وصف ملف فيديو | `openclaw infer video describe --file ./clip.mp4 --json` | يجب أن يكون `--model` بصيغة `<provider/model>` |
| البحث في الويب | `openclaw infer web search --query "..." --json` | |
| جلب صفحة ويب | `openclaw infer web fetch --url https://example.com --json` | |
@ -131,22 +131,22 @@ Focus on model runs, image generation, video generation, audio transcription, TT
## السلوك
- `openclaw infer ...` هو سطح CLI الأساسي لسير العمل هذه.
- استخدم `--json` عندما سيُستهلك الإخراج بواسطة أمر أو سكربت آخر.
- استخدم `--provider` أو `--model provider/model` عندما تكون واجهة خلفية محددة مطلوبة.
- استخدم `--json` عندما ستستهلك المخرجات بواسطة أمر أو سكربت آخر.
- استخدم `--provider` أو `--model provider/model` عند الحاجة إلى خلفية محددة.
- بالنسبة إلى `image describe` و`audio transcribe` و`video describe`، يجب أن يستخدم `--model` الصيغة `<provider/model>`.
- بالنسبة إلى `image describe`، يشغّل `--model` الصريح ذلك المزوّد/النموذج مباشرة. يجب أن يكون النموذج قادرًا على الصور في كتالوج النماذج أو تكوين المزوّد. يشغّل `codex/<model>` دورة محدودة لفهم الصور عبر خادم تطبيق Codex؛ ويستخدم `openai-codex/<model>` مسار مزوّد OpenAI Codex OAuth.
- أوامر التنفيذ عديمة الحالة تكون محلية افتراضيًا.
- أوامر الحالة المُدارة بواسطة Gateway تستخدم Gateway افتراضيًا.
- المسار المحلي العادي لا يتطلب تشغيل Gateway.
- `model run` المحلي هو إكمال مزوّد خفيف لمرة واحدة. يحل نموذج الوكيل المكوّن والمصادقة، لكنه لا يبدأ دورة وكيل محادثة، ولا يحمّل الأدوات، ولا يفتح خوادم MCP المضمّنة.
- يقبل `model run --file` ملفات الصور، ويكتشف نوع MIME الخاص بها، ويرسلها مع المطالبة المقدّمة إلى النموذج المحدد. كرّر `--file` لصور متعددة.
- بالنسبة إلى `image describe`، يشغّل `--model` الصريح ذلك المزود/النموذج مباشرة. يجب أن يكون النموذج قادرا على الصور في كتالوج النماذج أو إعدادات المزود. يشغّل `codex/<model>` دورة فهم صور محدودة عبر خادم تطبيق Codex؛ ويستخدم `openai-codex/<model>` مسار مزود OpenAI Codex OAuth.
- أوامر التنفيذ عديمة الحالة تكون محلية افتراضيا.
- أوامر الحالة المُدارة بواسطة Gateway تستخدم Gateway افتراضيا.
- لا يتطلب المسار المحلي العادي تشغيل Gateway.
- `model run` المحلي هو إكمال مزود لمرة واحدة وخفيف. فهو يحل نموذج الوكيل والمصادقة المكوّنين، لكنه لا يبدأ دورة وكيل دردشة، ولا يحمّل الأدوات، ولا يفتح خوادم MCP المضمّنة.
- يقبل `model run --file` ملفات الصور، ويكتشف نوع MIME الخاص بها، ويرسلها مع المطالبة المقدمة إلى النموذج المحدد. كرر `--file` لصور متعددة.
- يرفض `model run --file` المدخلات غير الصورية. استخدم `infer audio transcribe` لملفات الصوت و`infer video describe` لملفات الفيديو.
- يختبر `model run --gateway` توجيه Gateway، والمصادقة المحفوظة، واختيار المزوّد، وبيئة التشغيل المضمّنة، لكنه يظل يعمل كمسبار نموذج خام: يرسل المطالبة المقدّمة وأي مرفقات صور بدون سجل جلسة سابق، أو سياق bootstrap/AGENTS، أو تجميع محرك السياق، أو أدوات، أو خوادم MCP مضمّنة.
- يتطلب `model run --gateway --model <provider/model>` اعتماد Gateway لمشغّل موثوق لأن الطلب يطلب من Gateway تشغيل تجاوز مزوّد/نموذج لمرة واحدة.
- يمرّن `model run --gateway` توجيه Gateway والمصادقة المحفوظة واختيار المزود ووقت التشغيل المضمّن، لكنه ما يزال يعمل كمسبار نموذج خام: فهو يرسل المطالبة المقدمة وأي مرفقات صور دون نص جلسة سابق، أو سياق bootstrap/AGENTS، أو تجميع محرك السياق، أو أدوات، أو خوادم MCP مضمّنة.
- يتطلب `model run --gateway --model <provider/model>` اعتماد Gateway لمشغل موثوق لأن الطلب يطلب من Gateway تشغيل تجاوز مزود/نموذج لمرة واحدة.
## النموذج
استخدم `model` للاستدلال النصي المدعوم بالمزوّد وفحص النموذج/المزوّد.
استخدم `model` للاستدلال النصي المدعوم بالمزودين وفحص النموذج/المزود.
```bash
openclaw infer model run --prompt "Reply with exactly: smoke-ok" --json
@ -156,7 +156,7 @@ openclaw infer model providers --json
openclaw infer model inspect --name gpt-5.5 --json
```
استخدم مراجع `<provider/model>` الكاملة لاختبار دخاني لمزوّد محدد بدون
استخدم مراجع `<provider/model>` الكاملة لاختبار smoke لمزود محدد دون
بدء Gateway أو تحميل سطح أدوات الوكيل الكامل:
```bash
@ -171,14 +171,15 @@ openclaw infer model run --local --model ollama/qwen2.5vl:7b --prompt "Describe
ملاحظات:
- `model run` المحلي هو أضيق اختبار دخاني عبر CLI لصحة المزوّد/النموذج/المصادقة لأنه لا يرسل إلا المطالبة المقدّمة إلى النموذج المحدد.
- يحافظ `model run --file` المحلي على ذلك المسار الخفيف ويرفق محتوى الصورة مباشرة برسالة المستخدم الوحيدة. تعمل ملفات الصور الشائعة مثل PNG وJPEG وWebP عندما يُكتشف نوع MIME الخاص بها كـ `image/*`؛ وتفشل الملفات غير المدعومة أو غير المعروفة قبل استدعاء المزوّد.
- يكون `model run --file` هو الأفضل عندما تريد اختبار نموذج النص متعدد الوسائط المحدد مباشرة. استخدم `infer image describe` عندما تريد اختيار مزوّد فهم الصور في OpenClaw وتوجيه نموذج الصور الافتراضي.
- يجب أن يدعم النموذج المحدد إدخال الصور؛ قد ترفض النماذج النصية فقط الطلب على مستوى المزوّد.
- يجب أن يحتوي `model run --prompt` على نص غير مكوّن من مسافات بيضاء فقط؛ تُرفض المطالبات الفارغة قبل استدعاء المزوّدين المحليين أو Gateway.
- يخرج `model run` المحلي برمز غير صفري عندما لا يرجع المزوّد أي إخراج نصي، بحيث لا تبدو المزوّدات المحلية غير القابلة للوصول والإكمالات الفارغة كمجسات ناجحة.
- استخدم `model run --gateway` عندما تحتاج إلى اختبار توجيه Gateway أو إعداد بيئة تشغيل الوكيل أو حالة المزوّد المُدارة بواسطة Gateway مع إبقاء إدخال النموذج خامًا. استخدم `openclaw agent` أو أسطح المحادثة عندما تريد سياق الوكيل الكامل والأدوات والذاكرة وسجل الجلسة.
- يدير `model auth login` و`model auth logout` و`model auth status` حالة مصادقة المزوّد المحفوظة.
- `model run` المحلي هو أضيق اختبار smoke عبر CLI لصحة المزود/النموذج/المصادقة لأنه، بالنسبة إلى مزودي غير Codex، يرسل فقط المطالبة المقدمة إلى النموذج المحدد.
- مسبارات `openai-codex/*` المحلية هي الاستثناء الضيق: يضيف OpenClaw تعليمة نظامية دنيا كي يتمكن نقل Codex Responses من تعبئة حقل `instructions` المطلوب، دون إضافة سياق وكيل كامل أو أدوات أو ذاكرة أو نص جلسة.
- يحافظ `model run --file` المحلي على ذلك المسار الخفيف ويرفق محتوى الصورة مباشرة برسالة المستخدم الواحدة. تعمل ملفات الصور الشائعة مثل PNG وJPEG وWebP عندما يُكتشف نوع MIME الخاص بها كـ `image/*`؛ وتفشل الملفات غير المدعومة أو غير المعروفة قبل استدعاء المزود.
- يكون `model run --file` أفضل عندما تريد اختبار نموذج النص متعدد الوسائط المحدد مباشرة. استخدم `infer image describe` عندما تريد اختيار مزود فهم الصور في OpenClaw وتوجيه نموذج الصور الافتراضي.
- يجب أن يدعم النموذج المحدد إدخال الصور؛ قد ترفض النماذج النصية فقط الطلب على طبقة المزود.
- يجب أن يحتوي `model run --prompt` على نص غير فارغ؛ تُرفض المطالبات الفارغة قبل استدعاء المزودين المحليين أو Gateway.
- يخرج `model run` المحلي بقيمة غير صفرية عندما لا يعيد المزود أي مخرجات نصية، بحيث لا تبدو المزودات المحلية غير القابلة للوصول والإكمالات الفارغة كمسبارات ناجحة.
- استخدم `model run --gateway` عندما تحتاج إلى اختبار توجيه Gateway، أو إعداد وقت تشغيل الوكيل، أو حالة المزود المُدارة بواسطة Gateway مع إبقاء إدخال النموذج خاما. استخدم `openclaw agent` أو أسطح الدردشة عندما تريد سياق الوكيل الكامل والأدوات والذاكرة ونص الجلسة.
- تدير `model auth login` و`model auth logout` و`model auth status` حالة مصادقة المزود المحفوظة.
## الصورة
@ -204,14 +205,14 @@ openclaw infer image describe --file ./photo.jpg --model ollama/qwen2.5vl:7b --p
- استخدم `--size` أو `--aspect-ratio` أو `--resolution` مع `image edit` من أجل
المزوّدين/النماذج التي تدعم تلميحات الهندسة في تعديلات الصور المرجعية.
- استخدم `--output-format png --background transparent` مع
`--model openai/gpt-image-1.5` لإخراج PNG بخلفية شفافة من OpenAI؛
يبقى `--openai-background` متاحًا كاسم بديل خاص بـ OpenAI. المزوّدون
الذين لا يعلنون دعم الخلفية يبلّغون عن التلميح كتجاوز متجاهل.
- استخدم `image providers --json` للتحقق من مزوّدي الصور المضمّنين
القابلين للاكتشاف والمكوّنين والمحددين، ومن قدرات الإنشاء/التحرير
التي يعرضها كل مزوّد.
- استخدم `image generate --model <provider/model> --json` كأضيق اختبار دخاني
حي عبر CLI لتغييرات إنشاء الصور. مثال:
`--model openai/gpt-image-1.5` لمخرجات PNG من OpenAI بخلفية شفافة؛
يظل `--openai-background` متاحًا كاسم بديل خاص بـ OpenAI. المزوّدون
الذين لا يعلنون دعم الخلفية يبلّغون عن التلميح كتجاوز تم تجاهله.
- استخدم `image providers --json` للتحقق من مزوّدي الصور المضمّنين الذين
يمكن اكتشافهم، وتكوينهم، واختيارهم، وإمكانات الإنشاء/التحرير التي
يعرضها كل مزوّد.
- استخدم `image generate --model <provider/model> --json` كأضيق اختبار حي
عبر CLI لتغييرات إنشاء الصور. مثال:
```bash
openclaw infer image providers --json
@ -222,18 +223,18 @@ openclaw infer image describe --file ./photo.jpg --model ollama/qwen2.5vl:7b --p
--json
```
يبلّغ رد JSON عن `ok` و`provider` و`model` و`attempts` ومسارات
الإخراج المكتوبة. عند تعيين `--output`، قد يتبع الامتداد النهائي
نوع MIME الذي يعيده المزوّد.
يبلّغ رد JSON عن `ok` و`provider` و`model` و`attempts` ومسارات المخرجات
المكتوبة. عند ضبط `--output`، قد يتبع الامتداد النهائي نوع MIME الذي
أعاده المزوّد.
- بالنسبة إلى `image describe` و`image describe-many`، استخدم `--prompt` لإعطاء نموذج الرؤية تعليمة خاصة بالمهمة مثل OCR أو المقارنة أو فحص واجهة المستخدم أو إنشاء تسمية توضيحية موجزة.
- استخدم `--timeout-ms` مع نماذج الرؤية المحلية البطيئة أو عند بدء Ollama البارد.
- بالنسبة إلى `image describe`، يجب أن يكون `--model` نموذجًا قادرًا على معالجة الصور بصيغة `<provider/model>`.
- بالنسبة إلى نماذج رؤية Ollama المحلية، اسحب النموذج أولًا واضبط `OLLAMA_API_KEY` على أي قيمة عنصر نائب، مثل `ollama-local`. راجع [Ollama](/ar/providers/ollama#vision-and-image-description).
- بالنسبة إلى `image describe` و`image describe-many`، استخدم `--prompt` لإعطاء نموذج الرؤية تعليمات خاصة بالمهمة مثل OCR أو المقارنة أو فحص الواجهة أو إنشاء تسمية توضيحية موجزة.
- استخدم `--timeout-ms` مع نماذج الرؤية المحلية البطيئة أو بدايات Ollama الباردة.
- بالنسبة إلى `image describe`، يجب أن يكون `--model` نموذج `<provider/model>` يدعم الصور.
- بالنسبة إلى نماذج الرؤية المحلية في Ollama، اسحب النموذج أولًا واضبط `OLLAMA_API_KEY` على أي قيمة عنصر نائب، على سبيل المثال `ollama-local`. راجع [Ollama](/ar/providers/ollama#vision-and-image-description).
## الصوت
استخدم `audio` لنسخ الملفات الصوتية.
استخدم `audio` لتفريغ الملفات الصوتية.
```bash
openclaw infer audio transcribe --file ./memo.m4a --json
@ -243,7 +244,7 @@ openclaw infer audio transcribe --file ./memo.m4a --model openai/whisper-1 --jso
ملاحظات:
- `audio transcribe` مخصص لنسخ الملفات، وليس لإدارة الجلسات في الوقت الحقيقي.
- `audio transcribe` مخصص لتفريغ الملفات، وليس لإدارة الجلسات في الوقت الفعلي.
- يجب أن يكون `--model` بصيغة `<provider/model>`.
## TTS
@ -259,12 +260,12 @@ openclaw infer tts status --json
ملاحظات:
- يستخدم `tts status` Gateway افتراضيًا لأنه يعكس حالة TTS المُدارة بواسطة Gateway.
- القيمة الافتراضية لـ `tts status` هي Gateway لأنها تعكس حالة TTS التي يديرها Gateway.
- استخدم `tts providers` و`tts voices` و`tts set-provider` لفحص سلوك TTS وتكوينه.
## الفيديو
استخدم `video` للتوليد والوصف.
استخدم `video` للإنشاء والوصف.
```bash
openclaw infer video generate --prompt "cinematic sunset over the ocean" --json
@ -275,7 +276,7 @@ openclaw infer video describe --file ./clip.mp4 --model openai/gpt-4.1-mini --js
ملاحظات:
- يقبل `video generate` الخيارات `--size` و`--aspect-ratio` و`--resolution` و`--duration` و`--audio` و`--watermark` و`--timeout-ms` ويمررها إلى وقت تشغيل توليد الفيديو.
- يقبل `video generate` الخيارات `--size` و`--aspect-ratio` و`--resolution` و`--duration` و`--audio` و`--watermark` و`--timeout-ms` ويمررها إلى وقت تشغيل إنشاء الفيديو.
- يجب أن يكون `--model` بصيغة `<provider/model>` لـ `video describe`.
## الويب
@ -295,7 +296,7 @@ openclaw infer web providers --json
## التضمين
استخدم `embedding` لإنشاء المتجهات وفحص مزوّدي التضمين.
استخدم `embedding` لإنشاء المتجهات وفحص مزوّد التضمين.
```bash
openclaw infer embedding create --text "friendly lobster" --json
@ -305,7 +306,7 @@ openclaw infer embedding providers --json
## مخرجات JSON
تعمل أوامر infer على توحيد مخرجات JSON ضمن غلاف مشترك:
توحّد أوامر Infer مخرجات JSON ضمن غلاف مشترك:
```json
{
@ -330,9 +331,9 @@ openclaw infer embedding providers --json
- `outputs`
- `error`
بالنسبة إلى أوامر الوسائط المُنشأة، يحتوي `outputs` على الملفات التي يكتبها OpenClaw. استخدم
بالنسبة إلى أوامر الوسائط المُنشأة، يحتوي `outputs` على الملفات التي كتبها OpenClaw. استخدم
`path` و`mimeType` و`size` وأي أبعاد خاصة بالوسائط في تلك المصفوفة
للأتمتة بدلًا من تحليل مخرجات stdout القابلة للقراءة البشرية.
للأتمتة بدلًا من تحليل stdout المقروء بشريًا.
## الأخطاء الشائعة
@ -354,7 +355,7 @@ openclaw infer audio transcribe --file ./memo.m4a --model openai/whisper-1 --jso
## ملاحظات
- `openclaw capability ...` هو اسم مستعار لـ `openclaw infer ...`.
- `openclaw capability ...` هو اسم بديل لـ `openclaw infer ...`.
## ذات صلة

View File

@ -1,36 +1,36 @@
---
read_when:
- تريد تثبيت Pluginات Gateway أو الحزم المتوافقة أو إدارتها
- تريد استكشاف أخطاء فشل تحميل Plugin وإصلاحها
- تريد تثبيت أو إدارة Plugins الخاصة بـ Gateway أو الحزم المتوافقة
- تريد استكشاف إخفاقات تحميل Plugin وإصلاحها
sidebarTitle: Plugins
summary: مرجع CLI لـ `openclaw plugins` (list، install، marketplace، uninstall، enable/disable، doctor)
title: Plugins
x-i18n:
generated_at: "2026-05-05T01:44:25Z"
generated_at: "2026-05-06T09:02:21Z"
model: gpt-5.5
provider: openai
source_hash: 24d274f33213231eaed48ac848a9266802a2179ba0311ab18462ad783219095a
source_hash: e584092c6cdaf87681aef2ed106c299e3bab0552305b669c66b05deb61bf25ce
source_path: cli/plugins.md
workflow: 16
---
إدارة Plugins الخاصة بـ Gateway، وحزم الخطافات، والحزم المتوافقة.
إدارة Plugin الخاصة بـ Gateway وحِزم الخطافات والحِزم المتوافقة.
<CardGroup cols={2}>
<Card title="Plugin system" href="/ar/tools/plugin">
دليل المستخدم النهائي لتثبيت Plugins وتفعيلها واستكشاف مشكلاتها وإصلاحها.
<Card title="نظام Plugin" href="/ar/tools/plugin">
دليل المستخدم النهائي لتثبيت Plugins وتمكينها واستكشاف مشكلاتها وإصلاحها.
</Card>
<Card title="Manage plugins" href="/ar/plugins/manage-plugins">
أمثلة سريعة للتثبيت، والسرد، والتحديث، وإلغاء التثبيت، والنشر.
<Card title="إدارة Plugins" href="/ar/plugins/manage-plugins">
أمثلة سريعة للتثبيت والعرض والتحديث وإلغاء التثبيت والنشر.
</Card>
<Card title="Plugin bundles" href="/ar/plugins/bundles">
نموذج توافق الحزم.
<Card title="حِزم Plugin" href="/ar/plugins/bundles">
نموذج توافق الحِزم.
</Card>
<Card title="Plugin manifest" href="/ar/plugins/manifest">
<Card title="بيان Plugin" href="/ar/plugins/manifest">
حقول البيان ومخطط الإعدادات.
</Card>
<Card title="Security" href="/ar/gateway/security">
تعزيز الأمان لتثبيتات Plugin.
<Card title="الأمان" href="/ar/gateway/security">
تعزيز الأمان لعمليات تثبيت Plugin.
</Card>
</CardGroup>
@ -67,11 +67,11 @@ openclaw plugins marketplace list <marketplace> --json
إلى 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>
### التثبيت
@ -81,6 +81,7 @@ openclaw plugins search "calendar" # search ClawHub plugins
openclaw plugins install <package> # npm by default
openclaw plugins install clawhub:<package> # ClawHub only
openclaw plugins install npm:<package> # npm only
openclaw plugins install npm-pack:<path.tgz> # local npm pack through npm install semantics
openclaw plugins install git:github.com/<owner>/<repo> # git repo
openclaw plugins install git:github.com/<owner>/<repo>@<ref>
openclaw plugins install <package> --force # overwrite existing install
@ -93,101 +94,107 @@ 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،
يستعلم `plugins search` من ClawHub عن حِزم Plugin القابلة للتثبيت ويطبع
أسماء حِزم جاهزة للتثبيت. يبحث في حِزم code-plugin وbundle-plugin،
وليس 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`.
تفضّل تثبيتات وتحديثات قناة بيتا dist-tag باسم `beta` في npm عندما تكون هذه الوسمة
متاحة، ثم تعود إلى `latest`.
[جرد Plugin](/ar/plugins/plugin-inventory). تستخدم عمليات التثبيت المستقرة `latest`.
تفضّل عمليات التثبيت والتحديث في قناة Beta وسم التوزيع `beta` في npm عندما يكون
هذا الوسم متاحًا، ثم تعود إلى `latest`.
</Note>
<AccordionGroup>
<Accordion title="Config includes and invalid-config repair">
إذا كان قسم `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 مضمّنة تختار صراحةً `openclaw.install.allowInvalidConfigRecovery`.
</Accordion>
<Accordion title="--force and reinstall vs update">
يعيد `--force` استخدام هدف التثبيت الحالي ويستبدل Plugin أو حزمة خطافات مثبّتة مسبقًا في مكانها. استخدمه عندما تعيد عمدًا تثبيت المعرّف نفسه من مسار محلي جديد، أو أرشيف، أو حزمة ClawHub، أو عنصر npm. للترقيات الروتينية لـ Plugin npm متتبع بالفعل، فضّل `openclaw plugins update <id-or-npm-spec>`.
<Accordion title="--force وإعادة التثبيت مقابل التحديث">
يعيد `--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 scope">
<Accordion title="نطاق --pin">
ينطبق `--pin` على تثبيتات npm فقط. لا يُدعم مع تثبيتات `git:`؛ استخدم مرجع git صريحًا مثل `git:github.com/acme/plugin@v1.2.3` عندما تريد مصدرًا مثبّتًا. ولا يُدعم مع `--marketplace`، لأن تثبيتات السوق تحفظ بيانات تعريف مصدر السوق بدلًا من مواصفة npm.
</Accordion>
<Accordion title="--dangerously-force-unsafe-install">
`--dangerously-force-unsafe-install` خيار لكسر الحماية عند الإيجابيات الكاذبة في ماسح الكود الخطِر المدمج. يسمح للتثبيت بالمتابعة حتى عندما يبلّغ الماسح المدمج عن نتائج `critical`، لكنه **لا** يتجاوز حظر سياسات خطاف `before_install` الخاصة بـ Plugin و**لا** يتجاوز حالات فشل الفحص.
`--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="Hook packs and npm specs">
`plugins install` هو أيضًا سطح التثبيت لحزم الخطافات التي تعرض `openclaw.hooks` في `package.json`. استخدم `openclaw hooks` لرؤية الخطافات المفلترة وتفعيل كل خطاف على حدة، وليس لتثبيت الحزم.
<Accordion title="حِزم الخطافات ومواصفات npm">
`plugins install` هو أيضًا سطح التثبيت لحِزم الخطافات التي تعرض `openclaw.hooks` في `package.json`. استخدم `openclaw hooks` لرؤية الخطافات المصفّاة وتمكين كل خطاف على حدة، لا لتثبيت الحِزم.
مواصفات Npm هي **للسجل فقط** (اسم الحزمة + **إصدار دقيق** اختياري أو **dist-tag**). تُرفض مواصفات Git/URL/file ونطاقات semver. تعمل تثبيتات التبعيات محليًا داخل المشروع مع `--ignore-scripts` حفاظًا على السلامة، حتى عندما يحتوي shell لديك على إعدادات تثبيت npm عامة.
مواصفات npm هي **للسجل فقط** (اسم الحزمة + **إصدار دقيق** اختياري أو **وسم توزيع**). تُرفض مواصفات Git/URL/file ونطاقات semver. تُنفَّذ عمليات تثبيت التبعيات محليًا داخل المشروع مع `--ignore-scripts` للسلامة، حتى عندما تتضمن صدفتك إعدادات تثبيت 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 repositories">
استخدم `git:<repo>` للتثبيت مباشرةً من مستودع git. تتضمن الصيغ المدعومة `git:github.com/owner/repo`، و`git:owner/repo`، وروابط الاستنساخ الكاملة `https://`، و`ssh://`، و`git://`، و`file://`، و`git@host:owner/repo.git`. أضف `@<ref>` أو `#<ref>` لاختيار فرع أو وسم أو commit قبل التثبيت.
<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 إلى دليل مؤقت، وتنتقل إلى المرجع المطلوب عند وجوده، ثم تستخدم مثبت دليل Plugin العادي. هذا يعني أن التحقق من البيان، وفحص الكود الخطِر، وعمل تثبيت مدير الحزم، وسجلات التثبيت تتصرف مثل تثبيتات npm. تتضمن تثبيتات git المسجلة رابط/مرجع المصدر إضافة إلى commit المحلول حتى يستطيع `openclaw plugins update` إعادة حل المصدر لاحقًا.
تستنسخ تثبيتات Git إلى دليل مؤقت، وتتحول إلى المرجع المطلوب عند وجوده، ثم تستخدم مثبّت دليل Plugin العادي. يعني ذلك أن تحقق البيان، وفحص الكود الخطِر، وعمل تثبيت مدير الحِزم، وسجلات التثبيت تتصرف مثل تثبيتات npm. تتضمن تثبيتات git المسجلة عنوان/مرجع المصدر بالإضافة إلى الالتزام المحلول بحيث يستطيع `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="Archives">
الأرشيفات المدعومة: `.zip`، و`.tgz`، و`.tar.gz`، و`.tar`. يجب أن تحتوي أرشيفات Plugin الأصلية لـ OpenClaw على `openclaw.plugin.json` صالح في جذر Plugin المستخرج؛ أما الأرشيفات التي تحتوي فقط على `package.json` فتُرفض قبل أن يكتب OpenClaw سجلات التثبيت.
<Accordion title="الأرشيفات">
الأرشيفات المدعومة: `.zip` و`.tgz` و`.tar.gz` و`.tar`. يجب أن تحتوي أرشيفات Plugin الأصلية لـ OpenClaw على `openclaw.plugin.json` صالح في جذر Plugin المستخرج؛ تُرفض الأرشيفات التي تحتوي فقط على `package.json` قبل أن يكتب OpenClaw سجلات التثبيت.
تثبيتات سوق Claude مدعومة أيضًا.
استخدم `npm-pack:<path.tgz>` عندما يكون الملف tarball من npm-pack وتريد
اختبار مسار تثبيت npm-root المُدار نفسه الذي تستخدمه تثبيتات السجل،
بما في ذلك التحقق من `package-lock.json`، وفحص التبعيات المرفوعة، وسجلات
تثبيت npm. لا تزال مسارات الأرشيف العادية تُثبَّت كأرشيفات محلية
تحت جذر امتدادات Plugin.
تُدعم أيضًا تثبيتات سوق Claude.
</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 من توافق plugin API المعلن / الحد الأدنى لتوافق Gateway قبل التثبيت. عندما ينشر إصدار ClawHub المحدد عنصر ClawPack، ينزّل OpenClaw ملف npm-pack `.tgz` ذي الإصدار، ويتحقق من ترويسة ملخص ClawHub وملخص العنصر، ثم يثبّته عبر مسار الأرشيف العادي. أما إصدارات ClawHub الأقدم دون بيانات ClawPack الوصفية فلا تزال تُثبّت عبر مسار التحقق القديم لأرشيف الحزمة. تحتفظ التثبيتات المسجلة ببيانات تعريف مصدر ClawHub، ونوع العنصر، وتكامل npm، وshasum الخاص بـ npm، واسم tarball، وحقائق ملخص ClawPack لاستخدامها في التحديثات اللاحقة.
تحافظ تثبيتات ClawHub غير ذات الإصدار على مواصفة مسجلة غير مؤرخة حتى يتمكن `openclaw plugins update` من متابعة إصدارات ClawHub الأحدث؛ وتبقى محددات الإصدار أو الوسم الصريحة مثل `clawhub:pkg@1.2.3` و`clawhub:pkg@beta` مثبّتة على ذلك المحدد.
يتحقق OpenClaw من توافق Plugin API المعلَن / الحد الأدنى لتوافق gateway قبل التثبيت. عندما تنشر نسخة ClawHub المحددة أثر ClawPack، ينزّل OpenClaw ملف npm-pack `.tgz` ذي الإصدار، ويتحقق من ترويسة ملخص ClawHub وملخص الأثر، ثم يثبّته عبر مسار الأرشيف العادي. لا تزال إصدارات ClawHub الأقدم التي لا تحتوي على بيانات تعريف ClawPack تُثبّت عبر مسار التحقق القديم لأرشيف الحزمة. تحتفظ التثبيتات المسجلة ببيانات تعريف مصدر ClawHub، ونوع الأثر، وتكامل npm، وshasum الخاص بـ npm، واسم tarball، وحقائق ملخص ClawPack للتحديثات اللاحقة.
تحتفظ تثبيتات ClawHub غير محددة الإصدار بمواصفة مسجلة غير محددة الإصدار بحيث يستطيع `openclaw plugins update` متابعة إصدارات ClawHub الأحدث؛ أما محددات الإصدار أو الوسم الصريحة مثل `clawhub:pkg@1.2.3` و`clawhub:pkg@beta` فتبقى مثبتة بذلك المحدد.
#### اختصار السوق
استخدم اختصار `plugin@marketplace` عندما يكون اسم السوق موجودًا في ذاكرة سجل Claude المحلية المؤقتة في `~/.claude/plugins/known_marketplaces.json`:
استخدم اختصار `plugin@marketplace` عندما يكون اسم السوق موجودًا في ذاكرة التخزين المؤقت المحلية لسجل Claude في `~/.claude/plugins/known_marketplaces.json`:
```bash
openclaw plugins marketplace list <marketplace-name>
@ -204,28 +211,28 @@ openclaw plugins install <plugin-name> --marketplace ./my-marketplace
```
<Tabs>
<Tab title="مصادر Marketplace">
- اسم marketplace معروف في Claude من `~/.claude/plugins/known_marketplaces.json`
- جذر marketplace محلي أو مسار `marketplace.json`
<Tab title="مصادر السوق">
- اسم سوق معروف لدى Claude من `~/.claude/plugins/known_marketplaces.json`
- جذر سوق محلي أو مسار `marketplace.json`
- اختصار مستودع GitHub مثل `owner/repo`
- عنوان URL لمستودع GitHub مثل `https://github.com/owner/repo`
- عنوان URL لـ git
</Tab>
<Tab title="قواعد Marketplace البعيد">
بالنسبة إلى marketplaces البعيدة المحمّلة من GitHub أو git، يجب أن تبقى إدخالات Plugin داخل مستودع marketplace المستنسخ. يقبل OpenClaw مصادر المسارات النسبية من ذلك المستودع ويرفض مصادر Plugin التي تكون HTTP(S)، أو مسارات مطلقة، أو git، أو GitHub، أو غيرها من مصادر Plugin غير المسارية من البيانات التعريفية البعيدة.
<Tab title="قواعد الأسواق البعيدة">
بالنسبة للأسواق البعيدة المحملة من GitHub أو git، يجب أن تبقى إدخالات Plugin داخل مستودع السوق المستنسخ. يقبل OpenClaw مصادر المسارات النسبية من ذلك المستودع ويرفض HTTP(S)، والمسارات المطلقة، وgit، وGitHub، وغيرها من مصادر Plugin غير المسارية من بيانات البيان البعيدة.
</Tab>
</Tabs>
بالنسبة إلى المسارات والأرشيفات المحلية، يكتشف OpenClaw تلقائياً:
بالنسبة للمسارات المحلية والأرشيفات، يكتشف OpenClaw تلقائيا:
- Plugins أصلية لـ OpenClaw (`openclaw.plugin.json`)
- حزم متوافقة مع Codex (`.codex-plugin/plugin.json`)
- حزم متوافقة مع Claude (`.claude-plugin/plugin.json` أو تخطيط مكونات Claude الافتراضي)
- حزم متوافقة مع Cursor (`.cursor-plugin/plugin.json`)
- Plugins أصلية لـ OpenClaw (`openclaw.plugin.json`)
- حزم متوافقة مع Codex (`.codex-plugin/plugin.json`)
- حزم متوافقة مع Claude (`.claude-plugin/plugin.json` أو تخطيط مكونات Claude الافتراضي)
- حزم متوافقة مع Cursor (`.cursor-plugin/plugin.json`)
<Note>
تُثبَّت الحزم المتوافقة في جذر Plugin العادي وتشارك في تدفق القائمة/المعلومات/التمكين/التعطيل نفسه. حالياً، تُدعَم Skills الحزم، وSkills أوامر Claude، وإعدادات Claude الافتراضية في `settings.json`، وإعدادات Claude الافتراضية في `.lsp.json` / `lspServers` المعلنة في البيان، وSkills أوامر Cursor، ومجلدات خطافات Codex المتوافقة؛ وتُعرض قدرات الحزم الأخرى المكتشفة في التشخيصات/المعلومات لكنها لم تُوصَل بعد إلى تنفيذ وقت التشغيل.
تثبت الحزم المتوافقة في جذر Plugin العادي وتشارك في تدفق القائمة/المعلومات/التمكين/التعطيل نفسه. حاليا، تدعم Skills الخاصة بالحزم، وSkills أوامر Claude، وافتراضات `settings.json` في Claude، وافتراضات `.lsp.json` في Claude / `lspServers` المعلنة في البيان، وSkills أوامر Cursor، وأدلة خطافات Codex المتوافقة؛ تظهر إمكانات الحزم المكتشفة الأخرى في التشخيصات/المعلومات لكنها لم توصل بعد إلى تنفيذ وقت التشغيل.
</Note>
### القائمة
@ -241,59 +248,59 @@ 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 أو تمكينه أو سياسة الخطافات أو `plugins.load.paths`، أعد تشغيل Gateway الذي يخدم القناة قبل توقع تشغيل كود `register(api)` الجديد أو الخطافات. بالنسبة إلى النشرات البعيدة/الحاويات، تحقق من أنك تعيد تشغيل ابن `openclaw gateway run` الفعلي، وليس عملية غلاف فقط.
يقرأ `plugins list` سجل Plugin المحلي المحفوظ أولا، مع بديل مشتق من البيان فقط عند فقدان السجل أو عدم صلاحيته. يفيد ذلك في التحقق مما إذا كان 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، ولا يشغّل مدير حزم، ولا يصلح
`dependencies` و`optionalDependencies`. يتحقق OpenClaw مما إذا كانت أسماء تلك الحزم
موجودة على مسار البحث العادي `node_modules` الخاص بـ Node لـ Plugin؛ ولا
يستورد كود وقت تشغيل Plugin، أو يشغل مدير حزم، أو يصلح
التبعيات المفقودة.
</Note>
`plugins search` هو بحث في كتالوج ClawHub البعيد. لا يفحص الحالة المحلية،
ولا يغيّر التكوين، ولا يثبّت الحزم، ولا يحمّل كود وقت تشغيل Plugin. تتضمن
`plugins search` هو بحث بعيد في كتالوج ClawHub. لا يفحص الحالة المحلية،
ولا يغير التهيئة، ولا يثبت الحزم، ولا يحمل كود وقت تشغيل Plugin. تتضمن
نتائج البحث اسم حزمة ClawHub، والعائلة، والقناة، والإصدار، والملخص، و
تلميح تثبيت مثل `openclaw plugins install clawhub:<package>`.
للعمل على Plugin مضمّن داخل صورة Docker معبّأة، اربط مجلد مصدر Plugin
بالمسار المطابق للمصدر المعبّأ، مثل
`/app/extensions/synology-chat`. سيكتشف OpenClaw طبقة المصدر المركّبة هذه
قبل `/app/dist/extensions/synology-chat`؛ أما مجلد المصدر المنسوخ العادي
فيبقى غير فعّال بحيث تستمر التثبيتات المعبّأة العادية في استخدام dist المترجم.
لعمل Plugin مضمّن داخل صورة Docker معبأة، اربط دليل مصدر Plugin
فوق مسار المصدر المعبأ المطابق، مثل
`/app/extensions/synology-chat`. سيكتشف OpenClaw طبقة المصدر المركبة هذه
قبل `/app/dist/extensions/synology-chat`؛ ويبقى دليل المصدر المنسوخ العادي
خاملا بحيث تستمر التثبيتات المعبأة العادية في استخدام dist المترجم.
لتصحيح خطافات وقت التشغيل:
- يعرض `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`.
- يعرض `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 +310,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 الذاكرة النشطة، تعود فتحة الذاكرة إلى `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 +326,29 @@ openclaw plugins update @openclaw/voice-call
openclaw plugins update openclaw-codex-app-server --dangerously-force-unsafe-install
```
تنطبق التحديثات على تثبيتات Plugin المتتبعة في فهرس Plugin المُدار وتثبيتات hook-pack المتتبعة في `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. وهذا يعني أن وسوم التوزيع المخزنة سابقا مثل `@beta` والإصدارات الدقيقة المثبتة تستمر في الاستخدام في عمليات `update <id>` اللاحقة.
بالنسبة إلى تثبيتات npm، يمكنك أيضاً تمرير مواصفة حزمة npm صريحة مع وسم توزيع أو إصدار دقيق. يحل OpenClaw اسم الحزمة هذا مرة أخرى إلى سجل Plugin المتتبع، ويحدّث ذلك Plugin المثبّت، ويسجل مواصفة npm الجديدة للتحديثات المستقبلية المستندة إلى المعرّف.
بالنسبة لتثبيتات npm، يمكنك أيضا تمرير مواصفة حزمة npm صريحة مع وسم توزيع أو إصدار دقيق. يحل OpenClaw اسم الحزمة هذا إلى سجل Plugin المتتبع، ويحدّث ذلك Plugin المثبت، ويسجل مواصفة npm الجديدة لتحديثات المعرف المستقبلية.
يؤدي تمرير اسم حزمة npm دون إصدار أو وسم أيضاً إلى الحل مرة أخرى إلى سجل Plugin المتتبع. استخدم هذا عندما يكون Plugin مثبتاً على إصدار دقيق وتريد إعادته إلى خط الإصدار الافتراضي في السجل.
تمرير اسم حزمة npm بدون إصدار أو وسم يحل أيضا إلى سجل Plugin المتتبع. استخدم هذا عندما يكون Plugin مثبتا على إصدار دقيق وتريد إعادته إلى خط الإصدار الافتراضي للسجل.
</Accordion>
<Accordion title="تحديثات قناة Beta">
يعيد `openclaw plugins update` استخدام مواصفة Plugin المتتبعة ما لم تمرر مواصفة جديدة. يعرف `openclaw update` أيضاً قناة تحديث OpenClaw النشطة: على قناة beta، تحاول سجلات Plugin الافتراضية من npm وClawHub استخدام `@beta` أولاً، ثم تعود إلى المواصفة الافتراضية/الأحدث المسجلة إذا لم يكن هناك إصدار beta لـ Plugin. تبقى الإصدارات الدقيقة والوسوم الصريحة مثبتة على ذلك المحدد.
<Accordion title="تحديثات قناة بيتا">
يعيد `openclaw plugins update` استخدام مواصفة Plugin المتتبعة ما لم تمرر مواصفة جديدة. يعرف `openclaw update` بالإضافة إلى ذلك قناة تحديث OpenClaw النشطة: على قناة بيتا، تحاول سجلات Plugin الخاصة بـ npm وClawHub على الخط الافتراضي `@beta` أولا، ثم تعود إلى مواصفة الافتراضي/الأحدث المسجلة إذا لم يكن هناك إصدار بيتا لـ Plugin. تبقى الإصدارات الدقيقة والوسوم الصريحة مثبتة على ذلك المحدد.
</Accordion>
<Accordion title="فحوصات الإصدار وانحراف النزاهة">
قبل تحديث npm مباشر، يتحقق OpenClaw من إصدار الحزمة المثبّتة مقابل بيانات سجل npm التعريفية. إذا كان الإصدار المثبّت وهوية الأثر المسجلة يطابقان الهدف المحلول بالفعل، يُتخطى التحديث دون تنزيل أو إعادة تثبيت أو إعادة كتابة `openclaw.json`.
<Accordion title="فحوصات الإصدار وانحراف السلامة">
قبل تحديث 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، وليس تحديثات hook-pack.
يتوفر `--dangerously-force-unsafe-install` أيضا في `plugins update` كتجاوز طارئ للإيجابيات الكاذبة في فحص الكود الخطر المدمج أثناء تحديثات Plugin. لكنه لا يتجاوز حظر سياسة `before_install` الخاصة بـ Plugin أو حظر فشل الفحص، وينطبق فقط على تحديثات Plugin، وليس تحديثات حزم الخطافات.
</Accordion>
</AccordionGroup>
@ -353,21 +360,21 @@ openclaw plugins inspect <id> --runtime
openclaw plugins inspect <id> --json
```
يعرض الفحص الهوية، وحالة التحميل، والمصدر، وقدرات البيان، وأعلام السياسة، والتشخيصات، وبيانات تعريف التثبيت، وقدرات الحزمة، وأي دعم مكتشف لخوادم MCP أو LSP دون استيراد وقت تشغيل Plugin افتراضياً. أضف `--runtime` لتحميل وحدة Plugin وتضمين الخطافات والأدوات والأوامر والخدمات وطرق 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 لمزوّد فقط)
- **hybrid-capability** — أنواع قدرات متعددة (مثلاً نص + كلام + صور)
- **hook-only** — خطافات فقط، دون قدرات أو أسطح
- **non-capability** — أدوات/أوامر/خدمات لكن دون قدرات
- **plain-capability** — نوع إمكانية واحد (مثلا Plugin لموفر فقط)
- **hybrid-capability** — أنواع إمكانات متعددة (مثلا نص + كلام + صور)
- **hook-only** — خطافات فقط، بلا إمكانات أو أسطح
- **non-capability** — أدوات/أوامر/خدمات لكن بلا إمكانات
راجع [أشكال Plugin](/ar/plugins/architecture#plugin-shapes) للمزيد عن نموذج القدرات.
راجع [أشكال Plugin](/ar/plugins/architecture#plugin-shapes) لمزيد حول نموذج الإمكانات.
<Note>
يعرض علم `--json` تقريراً قابلاً للقراءة آلياً ومناسباً للبرمجة النصية والتدقيق. يعرض `inspect --all` جدولاً على مستوى المجموعة يتضمن أعمدة الشكل، وأنواع القدرات، وإشعارات التوافق، وقدرات الحزم، وملخص الخطافات. `info` اسم بديل لـ `inspect`.
يخرج علم `--json` تقريرا قابلا للقراءة آليا مناسبا للبرمجة النصية والتدقيق. يعرض `inspect --all` جدولا شاملا للأسطول مع أعمدة الشكل، وأنواع الإمكانات، وإشعارات التوافق، وإمكانات الحزم، وملخص الخطافات. `info` اسم مستعار لـ `inspect`.
</Note>
### الطبيب
@ -376,11 +383,11 @@ openclaw plugins inspect <id> --json
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,24 +397,24 @@ openclaw plugins registry --refresh
openclaw plugins registry --json
```
سجل Plugin المحلي هو نموذج القراءة البارد المحفوظ في OpenClaw لهوية Plugin المثبّتة وتمكينها وبيانات تعريف المصدر وملكية المساهمات. يمكن لبدء التشغيل العادي، والبحث عن مالك المزوّد، وتصنيف إعداد القناة، ومخزون Plugin قراءته دون استيراد وحدات وقت تشغيل Plugin.
سجل Plugin المحلي هو نموذج القراءة البارد المستمر في OpenClaw لهوية Plugin المثبتة، وتمكينها، وبيانات المصدر الوصفية، وملكية المساهمات. يمكن لبدء التشغيل العادي، والبحث عن مالك المزوّد، وتصنيف إعداد القناة، وجرد Plugin قراءته دون استيراد وحدات وقت تشغيل Plugin.
استخدم `plugins registry` لفحص ما إذا كان السجل المحفوظ موجودًا أو محدّثًا أو متقادمًا. استخدم `--refresh` لإعادة بنائه من فهرس Plugin المحفوظ، وسياسة التكوين، وبيانات تعريف البيان/الحزمة. هذا مسار إصلاح، وليس مسار تفعيل وقت التشغيل.
استخدم `plugins registry` لفحص ما إذا كان السجل المستمر موجودًا أو محدثًا أو قديمًا. استخدم `--refresh` لإعادة بنائه من فهرس Plugin المستمر، وسياسة التكوين، وبيانات البيان/الحزمة الوصفية. هذا مسار إصلاح، وليس مسار تفعيل وقت التشغيل.
يصلح `openclaw doctor --fix` أيضًا انحراف npm المُدار المجاور للسجل: إذا كانت حزمة `@openclaw/*` يتيمة أو مستعادة ضمن جذر npm المُدار الخاص بـ Plugin تحجب Plugin مضمنًا، فإن doctor يزيل تلك الحزمة المتقادمة ويعيد بناء السجل بحيث يتحقق بدء التشغيل من البيان المضمن.
يقوم `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>
### السوق
### Marketplace
```bash
openclaw plugins marketplace list <source>
openclaw plugins marketplace list <source> --json
```
تقبل قائمة السوق مسار سوق محليًا، أو مسار `marketplace.json`، أو اختصار GitHub مثل `owner/repo`، أو عنوان URL لمستودع GitHub، أو عنوان URL لـ git. يطبع `--json` تسمية المصدر المحلولة بالإضافة إلى بيان السوق المحلل وإدخالات Plugin.
تقبل قائمة Marketplace مسار Marketplace محليًا، أو مسار `marketplace.json`، أو اختصار GitHub مثل `owner/repo`، أو عنوان URL لمستودع GitHub، أو عنوان URL لـ git. يطبع `--json` تسمية المصدر المحلولة بالإضافة إلى بيان Marketplace المحلل وإدخالات Plugin.
## ذو صلة

View File

@ -1,113 +1,113 @@
---
read_when:
- تحتاج إلى مرجع لإعداد النماذج حسب كل موفّر
- تريد أمثلة على التكوينات أو أوامر تهيئة CLI لموفّري النماذج
- تحتاج إلى مرجع لإعداد النماذج لكل مزوّد على حدة
- تريد أمثلة على التكوينات أو أوامر الإعداد الأولي عبر CLI لموفري النماذج
sidebarTitle: Model providers
summary: نظرة عامة على مزوّد النماذج مع أمثلة للإعدادات + مسارات عمل CLI
summary: نظرة عامة على مزوّد النماذج مع أمثلة على التكوينات + تدفقات CLI
title: مزودو النماذج
x-i18n:
generated_at: "2026-05-06T07:48:59Z"
generated_at: "2026-05-06T09:02:15Z"
model: gpt-5.5
provider: openai
source_hash: 304f20e10cbcd4465b7b843e398452b1b93a19cfaefd9f4d4edc213d7e003542
source_hash: 8375caf4bacbb360e57637801d06a9d7898b36d440b82885d993b8248cd4daff
source_path: concepts/model-providers.md
workflow: 16
---
مرجع **موفّري LLM/النماذج** (وليس قنوات الدردشة مثل WhatsApp/Telegram). لقواعد اختيار النموذج، راجع [النماذج](/ar/concepts/models).
مرجع لـ **موفّري LLM/النماذج** (وليس قنوات الدردشة مثل WhatsApp/Telegram). لقواعد اختيار النماذج، راجع [النماذج](/ar/concepts/models).
## قواعد سريعة
<AccordionGroup>
<Accordion title="مراجع النماذج ومساعدات CLI">
<Accordion title="Model refs and CLI helpers">
- تستخدم مراجع النماذج الصيغة `provider/model` (مثال: `opencode/claude-opus-4-6`).
- يعمل `agents.defaults.models` كقائمة سماح عند ضبطه.
- مساعدات CLI: `openclaw onboard`، و`openclaw models list`، و`openclaw models set <provider/model>`.
- تضبط `models.providers.*.contextWindow` / `contextTokens` / `maxTokens` الافتراضيات على مستوى الموفّر؛ وتتجاوزها `models.providers.*.models[].contextWindow` / `contextTokens` / `maxTokens` لكل نموذج.
- قواعد الرجوع الاحتياطي، وفحوصات التهدئة، واستمرار تجاوزات الجلسة: [تجاوز فشل النماذج](/ar/concepts/model-failover).
- تضبط `models.providers.*.contextWindow` / `contextTokens` / `maxTokens` القيم الافتراضية على مستوى الموفّر؛ وتتجاوزها `models.providers.*.models[].contextWindow` / `contextTokens` / `maxTokens` لكل نموذج.
- قواعد الرجوع الاحتياطي، ومجسات فترة التهدئة، واستمرارية تجاوزات الجلسة: [تجاوز فشل النموذج](/ar/concepts/model-failover).
</Accordion>
<Accordion title="إضافة مصادقة موفّر لا تغيّر نموذجك الأساسي">
يحافظ `openclaw configure` على `agents.defaults.model.primary` الموجود عند إضافة موفّر أو إعادة المصادقة معه. قد تستمر Plugins الخاصة بالموفّرين في إرجاع نموذج افتراضي موصى به ضمن رقعة إعداد المصادقة الخاصة بها، لكن configure يتعامل مع ذلك على أنه "إتاحة هذا النموذج" عندما يكون هناك نموذج أساسي موجود بالفعل، وليس "استبدال النموذج الأساسي الحالي".
<Accordion title="Adding provider auth does not change your primary model">
يحافظ `openclaw configure` على `agents.defaults.model.primary` موجود عند إضافة موفّر أو إعادة المصادقة معه. قد تظل Plugins الموفّرين تُرجع نموذجاً افتراضياً موصى به في تصحيح إعدادات المصادقة لديها، لكن configure يتعامل مع ذلك على أنه "اجعل هذا النموذج متاحاً" عندما يكون نموذج أساسي موجوداً بالفعل، وليس "استبدل النموذج الأساسي الحالي."
للتبديل المقصود للنموذج الافتراضي، استخدم `openclaw models set <provider/model>` أو `openclaw models auth login --provider <id> --set-default`.
لتبديل النموذج الافتراضي عمداً، استخدم `openclaw models set <provider/model>` أو `openclaw models auth login --provider <id> --set-default`.
</Accordion>
<Accordion title="فصل موفّر OpenAI عن وقت التشغيل">
مسارات عائلة OpenAI مخصّصة حسب البادئة:
<Accordion title="OpenAI provider/runtime split">
مسارات عائلة OpenAI محددة بالبادئة:
- يستخدم `openai/<model>` مع `agents.defaults.agentRuntime.id: "codex"` حزمة خادم تطبيق Codex الأصلية. هذا هو إعداد اشتراك ChatGPT/Codex المعتاد.
- يستخدم `openai/<model>` مع `agents.defaults.agentRuntime.id: "codex"` حزمة تشغيل خادم تطبيق Codex الأصلية. هذا هو إعداد اشتراك ChatGPT/Codex المعتاد.
- يستخدم `openai-codex/<model>` مصادقة Codex OAuth في PI.
- يستخدم `openai/<model>` من دون تجاوز وقت تشغيل Codex موفّر OpenAI المباشر بمفتاح API في PI.
- يستخدم `openai/<model>` من دون تجاوز Runtime الخاص بـ Codex موفّر مفتاح OpenAI API المباشر في PI.
راجع [OpenAI](/ar/providers/openai) و[حزمة Codex](/ar/plugins/codex-harness). إذا كان فصل الموفّر عن وقت التشغيل مربكًا، فاقرأ [أوقات تشغيل الوكلاء](/ar/concepts/agent-runtimes) أولًا.
راجع [OpenAI](/ar/providers/openai) و[حزمة Codex](/ar/plugins/codex-harness). إذا كان الفصل بين الموفّر وRuntime مربكاً، فاقرأ [Agent runtimes](/ar/concepts/agent-runtimes) أولاً.
يتبع التفعيل التلقائي للـ Plugin الحد نفسه: ينتمي `openai-codex/<model>` إلى OpenAI Plugin، بينما يتم تفعيل Codex Plugin عبر `agentRuntime.id: "codex"` أو مراجع `codex/<model>` القديمة.
يتبع التفعيل التلقائي لـ Plugin الحد نفسه: ينتمي `openai-codex/<model>` إلى OpenAI plugin، بينما تُفعّل Codex plugin عبر `agentRuntime.id: "codex"` أو مراجع `codex/<model>` القديمة.
يتوفر GPT-5.5 عبر حزمة خادم تطبيق Codex الأصلية عند ضبط `agentRuntime.id: "codex"`، وعبر `openai-codex/gpt-5.5` في PI لمصادقة Codex OAuth، وعبر `openai/gpt-5.5` في PI لحركة المرور المباشرة بمفتاح API عندما يتيحه حسابك.
يتوفر GPT-5.5 عبر حزمة تشغيل خادم تطبيق Codex الأصلية عند ضبط `agentRuntime.id: "codex"`، وعبر `openai-codex/gpt-5.5` في PI لمصادقة Codex OAuth، وعبر `openai/gpt-5.5` في PI لحركة مفتاح API المباشرة عندما يتيحه حسابك.
</Accordion>
<Accordion title="أوقات تشغيل CLI">
تستخدم أوقات تشغيل CLI الفصل نفسه: اختر مراجع نماذج معيارية مثل `anthropic/claude-*` أو `google/gemini-*` أو `openai/gpt-*`، ثم اضبط `agents.defaults.agentRuntime.id` على `claude-cli` أو `google-gemini-cli` أو `codex-cli` عندما تريد واجهة خلفية محلية عبر CLI.
<Accordion title="CLI runtimes">
تستخدم Runtime الخاصة بـ CLI الفصل نفسه: اختر مراجع نموذج معيارية مثل `anthropic/claude-*` أو `google/gemini-*` أو `openai/gpt-*`، ثم اضبط `agents.defaults.agentRuntime.id` على `claude-cli` أو `google-gemini-cli` أو `codex-cli` عندما تريد خلفية CLI محلية.
يتم ترحيل مراجع `claude-cli/*` و`google-gemini-cli/*` و`codex-cli/*` القديمة إلى مراجع الموفّر المعيارية مع تسجيل وقت التشغيل بشكل منفصل.
تُرحَّل مراجع `claude-cli/*` و`google-gemini-cli/*` و`codex-cli/*` القديمة مرة أخرى إلى مراجع الموفّر المعيارية مع تسجيل Runtime بشكل منفصل.
</Accordion>
</AccordionGroup>
## سلوك الموفّرين المملوك للـ Plugin
## سلوك الموفّر المملوك لـ Plugin
توجد معظم المنطق الخاص بالموفّرين في Plugins الخاصة بالموفّرين (`registerProvider(...)`) بينما يُبقي OpenClaw حلقة الاستدلال العامة. تملك Plugins التهيئة الأولية، وكتالوجات النماذج، وتعيين متغيرات بيئة المصادقة، وتطبيع النقل/الإعدادات، وتنظيف مخطط الأدوات، وتصنيف تجاوز الفشل، وتحديث OAuth، وتقارير الاستخدام، وملفات تعريف التفكير/الاستدلال، والمزيد.
توجد معظم المنطق الخاص بالموفّرين في Plugins الموفّرين (`registerProvider(...)`) بينما يحتفظ OpenClaw بحلقة الاستدلال العامة. تمتلك Plugins الإعداد الأولي، وكتالوجات النماذج، وربط متغيرات بيئة المصادقة، وتطبيع النقل/الإعدادات، وتنظيف مخطط الأدوات، وتصنيف تجاوز الفشل، وتحديث OAuth، وتقارير الاستخدام، وملفات التفكير/الاستدلال، والمزيد.
توجد القائمة الكاملة لخطافات provider-SDK وأمثلة Plugins المضمّنة في [Plugins الموفّرين](/ar/plugins/sdk-provider-plugins). الموفّر الذي يحتاج إلى منفّذ طلبات مخصّص بالكامل يُعد سطح امتداد منفصلًا وأعمق.
توجد القائمة الكاملة لخطافات provider-SDK وأمثلة Plugins المضمّنة في [Plugins الموفّرين](/ar/plugins/sdk-provider-plugins). الموفّر الذي يحتاج منفّذ طلبات مخصصاً بالكامل هو سطح امتداد منفصل وأعمق.
<Note>
يوجد سلوك المشغّل المملوك للموفّر على خطافات موفّر صريحة مثل سياسة إعادة التشغيل، وتطبيع مخطط الأدوات، وتغليف البث، ومساعدات النقل/الطلب. الحاوية الثابتة القديمة `ProviderPlugin.capabilities` مخصّصة للتوافق فقط ولم تعد تُقرأ بواسطة منطق المشغّل المشترك.
يوجد سلوك المشغّل المملوك للموفّر على خطافات موفّر صريحة مثل سياسة إعادة التشغيل، وتطبيع مخطط الأدوات، وتغليف البث، ومساعدات النقل/الطلب. حقيبة `ProviderPlugin.capabilities` الثابتة القديمة مخصصة للتوافق فقط ولم يعد منطق المشغّل المشترك يقرأها.
</Note>
## تدوير مفاتيح API
<AccordionGroup>
<Accordion title="مصادر المفاتيح والأولوية">
اضبط مفاتيح متعددة عبر:
<Accordion title="Key sources and priority">
اضبط عدة مفاتيح عبر:
- `OPENCLAW_LIVE_<PROVIDER>_KEY` (تجاوز مباشر واحد، أعلى أولوية)
- `<PROVIDER>_API_KEYS` (قائمة مفصولة بفواصل أو فواصل منقوطة)
- `OPENCLAW_LIVE_<PROVIDER>_KEY` (تجاوز مباشر واحد، بأعلى أولوية)
- `<PROVIDER>_API_KEYS` (قائمة مفصولة بفواصل أو بفواصل منقوطة)
- `<PROVIDER>_API_KEY` (المفتاح الأساسي)
- `<PROVIDER>_API_KEY_*` (قائمة مرقّمة، مثل `<PROVIDER>_API_KEY_1`)
- `<PROVIDER>_API_KEY_*` (قائمة مرقمة، مثل `<PROVIDER>_API_KEY_1`)
بالنسبة إلى موفّري Google، يتم تضمين `GOOGLE_API_KEY` أيضًا كخيار رجوع احتياطي. يحافظ ترتيب اختيار المفاتيح على الأولوية ويزيل القيم المكررة.
بالنسبة لموفّري Google، يُضمَّن `GOOGLE_API_KEY` أيضاً كاحتياطي. يحافظ ترتيب اختيار المفاتيح على الأولوية ويزيل القيم المكررة.
</Accordion>
<Accordion title="متى يبدأ التدوير">
- تتم إعادة محاولة الطلبات بالمفتاح التالي فقط عند استجابات حدود المعدّل (على سبيل المثال `429`، أو `rate_limit`، أو `quota`، أو `resource exhausted`، أو `Too many concurrent requests`، أو `ThrottlingException`، أو `concurrency limit reached`، أو `workers_ai ... quota limit exceeded`، أو رسائل حدود الاستخدام الدورية).
- تفشل الإخفاقات غير المتعلقة بحدود المعدّل فورًا؛ ولا تتم محاولة تدوير المفاتيح.
- عندما تفشل كل المفاتيح المرشحة، يتم إرجاع الخطأ النهائي من المحاولة الأخيرة.
<Accordion title="When rotation kicks in">
- تُعاد محاولة الطلبات بالمفتاح التالي فقط عند استجابات تحديد المعدل (على سبيل المثال `429`، أو `rate_limit`، أو `quota`، أو `resource exhausted`، أو `Too many concurrent requests`، أو `ThrottlingException`، أو `concurrency limit reached`، أو `workers_ai ... quota limit exceeded`، أو رسائل حد الاستخدام الدورية).
- تفشل الإخفاقات غير المرتبطة بتحديد المعدل فوراً؛ ولا تُحاول أي عملية تدوير مفاتيح.
- عندما تفشل كل المفاتيح المرشحة، يُرجع الخطأ النهائي من آخر محاولة.
</Accordion>
</AccordionGroup>
## الموفّرون المدمجون (كتالوج pi-ai)
## الموفّرون المضمّنون (كتالوج pi-ai)
يأتي OpenClaw مع كتالوج pi-ai. لا يتطلب هؤلاء الموفّرون **أي** إعدادات `models.providers`؛ فقط اضبط المصادقة واختر نموذجًا.
يشحن OpenClaw مع كتالوج pi-ai. لا يتطلب هؤلاء الموفّرون **أي** إعداد `models.providers`؛ اضبط المصادقة فقط واختر نموذجاً.
### OpenAI
- الموفّر: `openai`
- المصادقة: `OPENAI_API_KEY`
- تدوير اختياري: `OPENAI_API_KEYS`، و`OPENAI_API_KEY_1`، و`OPENAI_API_KEY_2`، بالإضافة إلى `OPENCLAW_LIVE_OPENAI_KEY` (تجاوز واحد)
- أمثلة نماذج: `openai/gpt-5.5`، و`openai/gpt-5.4-mini`
- تحقّق من توفر الحساب/النموذج باستخدام `openclaw models list --provider openai` إذا كان تثبيت معيّن أو مفتاح API يتصرف بشكل مختلف.
- التدوير الاختياري: `OPENAI_API_KEYS`، و`OPENAI_API_KEY_1`، و`OPENAI_API_KEY_2`، إضافة إلى `OPENCLAW_LIVE_OPENAI_KEY` (تجاوز واحد)
- نماذج أمثلة: `openai/gpt-5.5`، و`openai/gpt-5.4-mini`
- تحقّق من إتاحة الحساب/النموذج باستخدام `openclaw models list --provider openai` إذا تصرّف تثبيت محدد أو مفتاح API بشكل مختلف.
- CLI: `openclaw onboard --auth-choice openai-api-key`
- النقل الافتراضي هو `auto` (WebSocket أولًا، مع رجوع احتياطي إلى SSE)
- تجاوز لكل نموذج عبر `agents.defaults.models["openai/<model>"].params.transport` (`"sse"`، أو `"websocket"`، أو `"auto"`)
- يتم تمكين إحماء WebSocket لاستجابات OpenAI افتراضيًا عبر `params.openaiWsWarmup` (`true`/`false`)
- يمكن تمكين المعالجة ذات الأولوية في OpenAI عبر `agents.defaults.models["openai/<model>"].params.serviceTier`
- يربط `/fast` و`params.fastMode` طلبات Responses المباشرة `openai/*` بـ `service_tier=priority` على `api.openai.com`
- استخدم `params.serviceTier` عندما تريد مستوى صريحًا بدلًا من مفتاح التبديل المشترك `/fast`
- تنطبق ترويسات إسناد OpenClaw المخفية (`originator`، و`version`، و`User-Agent`) فقط على حركة OpenAI الأصلية إلى `api.openai.com`، وليس على الوكلاء العامين المتوافقين مع OpenAI
- تحتفظ مسارات OpenAI الأصلية أيضًا بـ `store` في Responses، وتلميحات ذاكرة التخزين المؤقت للمطالبات، وتشكيل الحمولة المتوافق مع استدلال OpenAI؛ أما مسارات الوكلاء فلا تفعل ذلك
- يتم إخفاء `openai/gpt-5.3-codex-spark` عمدًا في OpenClaw لأن طلبات API المباشرة من OpenAI ترفضه ولأن كتالوج Codex الحالي لا يتيحه
- النقل الافتراضي هو `auto` (WebSocket أولاً، مع الرجوع إلى SSE)
- تجاوز لكل نموذج عبر `agents.defaults.models["openai/<model>"].params.transport` (`"sse"` أو `"websocket"` أو `"auto"`)
- يكون الإحماء لـ OpenAI Responses WebSocket مفعّلاً افتراضياً عبر `params.openaiWsWarmup` (`true`/`false`)
- يمكن تفعيل المعالجة ذات الأولوية في OpenAI عبر `agents.defaults.models["openai/<model>"].params.serviceTier`
- يربط `/fast` و`params.fastMode` طلبات Responses المباشرة `openai/*` إلى `service_tier=priority` على `api.openai.com`
- استخدم `params.serviceTier` عندما تريد مستوى صريحاً بدلاً من مفتاح تبديل `/fast` المشترك
- لا تنطبق ترويسات نسب OpenClaw المخفية (`originator`، و`version`، و`User-Agent`) إلا على حركة OpenAI الأصلية إلى `api.openai.com`، وليس على الوكلاء العامة المتوافقة مع OpenAI
- تحافظ مسارات OpenAI الأصلية أيضاً على `store` في Responses، وتلميحات ذاكرة التخزين المؤقت للمطالبات، وتشكيل الحمولة المتوافق مع استدلال OpenAI؛ ولا تفعل مسارات الوكيل ذلك
- يُخفى `openai/gpt-5.3-codex-spark` عمداً في OpenClaw لأن طلبات OpenAI API المباشرة ترفضه ولا يعرضه كتالوج Codex الحالي
```json5
{
@ -119,17 +119,17 @@ x-i18n:
- الموفّر: `anthropic`
- المصادقة: `ANTHROPIC_API_KEY`
- تدوير اختياري: `ANTHROPIC_API_KEYS`، و`ANTHROPIC_API_KEY_1`، و`ANTHROPIC_API_KEY_2`، بالإضافة إلى `OPENCLAW_LIVE_ANTHROPIC_KEY` (تجاوز واحد)
- مثال نموذج: `anthropic/claude-opus-4-6`
- التدوير الاختياري: `ANTHROPIC_API_KEYS`، و`ANTHROPIC_API_KEY_1`، و`ANTHROPIC_API_KEY_2`، إضافة إلى `OPENCLAW_LIVE_ANTHROPIC_KEY` (تجاوز واحد)
- نموذج مثال: `anthropic/claude-opus-4-6`
- CLI: `openclaw onboard --auth-choice apiKey`
- تدعم طلبات Anthropic العامة المباشرة مفتاح التبديل المشترك `/fast` و`params.fastMode`، بما في ذلك حركة المرور المرسلة إلى `api.anthropic.com` بمفتاح API أو عبر مصادقة OAuth؛ ويربط OpenClaw ذلك بـ `service_tier` الخاص بـ Anthropic (`auto` مقابل `standard_only`)
- يحافظ إعداد Claude CLI المفضل على مرجع النموذج معياريًا ويختار واجهة CLI
الخلفية بشكل منفصل: `anthropic/claude-opus-4-7` مع
`agents.defaults.agentRuntime.id: "claude-cli"`. ما زالت مراجع
- تدعم طلبات Anthropic العامة المباشرة مفتاح تبديل `/fast` المشترك و`params.fastMode`، بما في ذلك حركة مفتاح API وحركة OAuth المصادَق عليها المرسلة إلى `api.anthropic.com`؛ ويربط OpenClaw ذلك إلى `service_tier` الخاص بـ Anthropic (`auto` مقابل `standard_only`)
- يحافظ إعداد Claude CLI المفضّل على مرجع النموذج معيارياً ويختار خلفية CLI
بشكل منفصل: `anthropic/claude-opus-4-7` مع
`agents.defaults.agentRuntime.id: "claude-cli"`. لا تزال مراجع
`claude-cli/claude-opus-4-7` القديمة تعمل للتوافق.
<Note>
أخبرنا موظفو Anthropic أن استخدام Claude CLI بأسلوب OpenClaw مسموح به مجددًا، لذلك يتعامل OpenClaw مع إعادة استخدام Claude CLI واستخدام `claude -p` على أنهما معتمدان لهذا التكامل ما لم تنشر Anthropic سياسة جديدة. ما زال رمز إعداد Anthropic متاحًا كمسار رمز مدعوم في OpenClaw، لكن OpenClaw يفضّل الآن إعادة استخدام Claude CLI و`claude -p` عند توفرهما.
أبلغنا موظفو Anthropic بأن استخدام Claude CLI بأسلوب OpenClaw مسموح به مرة أخرى، لذلك يتعامل OpenClaw مع إعادة استخدام Claude CLI واستخدام `claude -p` على أنهما معتمدان لهذا التكامل ما لم تنشر Anthropic سياسة جديدة. يظل رمز إعداد Anthropic متاحاً كمسار رمز مدعوم في OpenClaw، لكن OpenClaw يفضّل الآن إعادة استخدام Claude CLI و`claude -p` عند توفرهما.
</Note>
```json5
@ -143,20 +143,21 @@ x-i18n:
- الموفّر: `openai-codex`
- المصادقة: OAuth (ChatGPT)
- مرجع نموذج PI: `openai-codex/gpt-5.5`
- مرجع حزمة خادم تطبيق Codex الأصلية: `openai/gpt-5.5` مع `agents.defaults.agentRuntime.id: "codex"`
- وثائق حزمة خادم تطبيق Codex الأصلية: [حزمة Codex](/ar/plugins/codex-harness)
- مرجع حزمة تشغيل خادم تطبيق Codex الأصلية: `openai/gpt-5.5` مع `agents.defaults.agentRuntime.id: "codex"`
- مستندات حزمة تشغيل خادم تطبيق Codex الأصلية: [حزمة Codex](/ar/plugins/codex-harness)
- مراجع النماذج القديمة: `codex/gpt-*`
- حد Plugin: يحمّل `openai-codex/*` OpenAI Plugin؛ ولا يتم اختيار Plugin خادم تطبيق Codex الأصلي إلا عبر وقت تشغيل حزمة Codex أو مراجع `codex/*` القديمة.
- حد Plugin: يحمّل `openai-codex/*` OpenAI plugin؛ ولا تُختار Plugin خادم تطبيق Codex الأصلية إلا عبر Runtime حزمة Codex أو مراجع `codex/*` القديمة.
- CLI: `openclaw onboard --auth-choice openai-codex` أو `openclaw models auth login --provider openai-codex`
- النقل الافتراضي هو `auto` (WebSocket أولًا، مع رجوع احتياطي إلى SSE)
- تجاوز لكل نموذج PI عبر `agents.defaults.models["openai-codex/<model>"].params.transport` (`"sse"`، أو `"websocket"`، أو `"auto"`)
- يتم أيضًا تمرير `params.serviceTier` على طلبات Responses الخاصة بـ Codex الأصلية (`chatgpt.com/backend-api`)
- تُرفق ترويسات إسناد OpenClaw المخفية (`originator`، و`version`، و`User-Agent`) فقط على حركة Codex الأصلية إلى `chatgpt.com/backend-api`، وليس على الوكلاء العامين المتوافقين مع OpenAI
- يشارك إعداد `/fast` نفسه وإعداد `params.fastMode` مثل `openai/*` المباشر؛ ويربط OpenClaw ذلك بـ `service_tier=priority`
- يستخدم `openai-codex/gpt-5.5` قيمة `contextWindow = 400000` الأصلية من كتالوج Codex ووقت التشغيل الافتراضي `contextTokens = 272000`؛ تجاوز حد وقت التشغيل باستخدام `models.providers.openai-codex.models[].contextTokens`
- ملاحظة سياسة: يتم دعم OpenAI Codex OAuth صراحةً للأدوات/سير العمل الخارجية مثل OpenClaw.
- للمسار الشائع الذي يجمع الاشتراك مع وقت تشغيل Codex الأصلي، سجّل الدخول بمصادقة `openai-codex` لكن اضبط `openai/gpt-5.5` بالإضافة إلى `agents.defaults.agentRuntime.id: "codex"`.
- استخدم `openai-codex/gpt-5.5` فقط عندما تريد مسار Codex OAuth/الاشتراك عبر PI؛ واستخدم `openai/gpt-5.5` من دون تجاوز وقت تشغيل Codex عندما يتيح إعداد مفتاح API والكتالوج المحلي لديك مسار API العام.
- النقل الافتراضي هو `auto` (WebSocket أولاً، مع الرجوع إلى SSE)
- تجاوز لكل نموذج PI عبر `agents.defaults.models["openai-codex/<model>"].params.transport` (`"sse"` أو `"websocket"` أو `"auto"`)
- يُمرَّر `params.serviceTier` أيضاً في طلبات Codex Responses الأصلية (`chatgpt.com/backend-api`)
- لا تُرفق ترويسات نسب OpenClaw المخفية (`originator`، و`version`، و`User-Agent`) إلا على حركة Codex الأصلية إلى `chatgpt.com/backend-api`، وليس على الوكلاء العامة المتوافقة مع OpenAI
- يشارك إعداد `/fast` و`params.fastMode` نفسه مثل `openai/*` المباشر؛ ويربط OpenClaw ذلك إلى `service_tier=priority`
- يستخدم `openai-codex/gpt-5.5` `contextWindow = 400000` الأصلي من كتالوج Codex وRuntime الافتراضي `contextTokens = 272000`؛ وتجاوز حد Runtime عبر `models.providers.openai-codex.models[].contextTokens`
- ملاحظة سياسة: يُدعم OpenAI Codex OAuth صراحة للأدوات/سير العمل الخارجية مثل OpenClaw.
- للمسار الشائع الذي يجمع الاشتراك مع Runtime Codex الأصلي، سجّل الدخول بمصادقة `openai-codex` لكن اضبط `openai/gpt-5.5` مع `agents.defaults.agentRuntime.id: "codex"`.
- استخدم `openai-codex/gpt-5.5` فقط عندما تريد مسار Codex OAuth/الاشتراك عبر PI؛ واستخدم `openai/gpt-5.5` من دون تجاوز Runtime الخاص بـ Codex عندما يتيح إعداد مفتاح API لديك والكتالوج المحلي مسار API العام.
- تُخفى مراجع `openai-codex/gpt-5.1*` و`openai-codex/gpt-5.2*` و`openai-codex/gpt-5.3*` الأقدم لأن حسابات ChatGPT/Codex OAuth ترفضها؛ استخدم `openai-codex/gpt-5.5` أو مسار Runtime الخاص بـ Codex الأصلي بدلاً من ذلك.
```json5
{
@ -185,23 +186,23 @@ x-i18n:
### خيارات مستضافة أخرى بأسلوب الاشتراك
<CardGroup cols={3}>
<Card title="نماذج GLM" href="/ar/providers/glm">
خطة Z.AI Coding أو نقاط نهاية API العامة.
<Card title="GLM models" href="/ar/providers/glm">
خطة Z.AI Coding Plan أو نقاط نهاية API العامة.
</Card>
<Card title="MiniMax" href="/ar/providers/minimax">
مصادقة OAuth لخطة MiniMax Coding أو الوصول بمفتاح API.
وصول MiniMax Coding Plan عبر OAuth أو مفتاح API.
</Card>
<Card title="Qwen Cloud" href="/ar/providers/qwen">
سطح موفّر Qwen Cloud بالإضافة إلى Alibaba DashScope وتعيين نقطة نهاية Coding Plan.
سطح موفّر Qwen Cloud إضافة إلى ربط نقاط نهاية Alibaba DashScope وCoding Plan.
</Card>
</CardGroup>
### OpenCode
- المصادقة: `OPENCODE_API_KEY` (أو `OPENCODE_ZEN_API_KEY`)
- موفّر وقت تشغيل Zen: `opencode`
- موفّر وقت تشغيل Go: `opencode-go`
- أمثلة نماذج: `opencode/claude-opus-4-6`، و`opencode-go/kimi-k2.6`
- موفّر Zen runtime: `opencode`
- موفّر Go runtime: `opencode-go`
- نماذج أمثلة: `opencode/claude-opus-4-6`، و`opencode-go/kimi-k2.6`
- CLI: `openclaw onboard --auth-choice opencode-zen` أو `openclaw onboard --auth-choice opencode-go`
```json5
@ -214,27 +215,27 @@ x-i18n:
- المزوّد: `google`
- المصادقة: `GEMINI_API_KEY`
- التدوير الاختياري: `GEMINI_API_KEYS`، و`GEMINI_API_KEY_1`، و`GEMINI_API_KEY_2`، واحتياطي `GOOGLE_API_KEY`، و`OPENCLAW_LIVE_GEMINI_KEY` (تجاوز منفرد)
- نماذج أمثلة: `google/gemini-3.1-pro-preview`، و`google/gemini-3-flash-preview`
- التدوير الاختياري: `GEMINI_API_KEYS`، و`GEMINI_API_KEY_1`، و`GEMINI_API_KEY_2`، والرجوع الاحتياطي إلى `GOOGLE_API_KEY`، و`OPENCLAW_LIVE_GEMINI_KEY` (تجاوز مفرد)
- نماذج أمثلة: `google/gemini-3.1-pro-preview`، `google/gemini-3-flash-preview`
- التوافق: تتم تسوية إعدادات OpenClaw القديمة التي تستخدم `google/gemini-3.1-flash-preview` إلى `google/gemini-3-flash-preview`
- الاسم المستعار: يتم قبول `google/gemini-3.1-pro` وتسويته إلى معرّف API Gemini المباشر لدى Google، وهو `google/gemini-3.1-pro-preview`
- الاسم المستعار: يُقبَل `google/gemini-3.1-pro` وتتم تسويته إلى معرّف Gemini API المباشر من Google، وهو `google/gemini-3.1-pro-preview`
- CLI: `openclaw onboard --auth-choice gemini-api-key`
- التفكير: يستخدم `/think adaptive` التفكير الديناميكي من Google. يحذف Gemini 3/3.1 قيمة `thinkingLevel` ثابتة؛ ويرسل Gemini 2.5 القيمة `thinkingBudget: -1`.
- تقبل عمليات تشغيل Gemini المباشرة أيضًا `agents.defaults.models["google/<model>"].params.cachedContent` (أو `cached_content` القديمة) لتمرير مقبض `cachedContents/...` أصلي للمزوّد؛ وتظهر إصابات ذاكرة التخزين المؤقت في Gemini كـ `cacheRead` في OpenClaw
- تقبل عمليات تشغيل Gemini المباشرة أيضًا `agents.defaults.models["google/<model>"].params.cachedContent` (أو الصيغة القديمة `cached_content`) لتمرير مقبض أصلي للمزوّد بصيغة `cachedContents/...`؛ وتظهر إصابات ذاكرة التخزين المؤقت في Gemini داخل OpenClaw باسم `cacheRead`
### Google Vertex وGemini CLI
- المزوّدون: `google-vertex`، و`google-gemini-cli`
- المزوّدون: `google-vertex`، `google-gemini-cli`
- المصادقة: يستخدم Vertex بيانات اعتماد ADC من gcloud؛ ويستخدم Gemini CLI تدفق OAuth الخاص به
<Warning>
مصادقة OAuth في Gemini CLI داخل OpenClaw هي تكامل غير رسمي. أبلغ بعض المستخدمين عن قيود على حسابات Google بعد استخدام عملاء من جهات خارجية. راجع شروط Google واستخدم حسابًا غير حرج إذا اخترت المتابعة.
يُعد OAuth الخاص بـGemini CLI في OpenClaw تكاملاً غير رسمي. أبلغ بعض المستخدمين عن قيود على حسابات Google بعد استخدام عملاء تابعين لجهات خارجية. راجع شروط Google واستخدم حسابًا غير حرج إذا اخترت المتابعة.
</Warning>
تُشحن مصادقة OAuth في Gemini CLI كجزء من Plugin `google` المضمّن.
يُشحَن OAuth الخاص بـGemini CLI كجزء من Plugin `google` المضمّن.
<Steps>
<Step title="ثبّت Gemini CLI">
<Step title="تثبيت Gemini CLI">
<Tabs>
<Tab title="brew">
```bash
@ -248,25 +249,25 @@ x-i18n:
</Tab>
</Tabs>
</Step>
<Step title="فعّل Plugin">
<Step title="تفعيل Plugin">
```bash
openclaw plugins enable google
```
</Step>
<Step title="سجّل الدخول">
<Step title="تسجيل الدخول">
```bash
openclaw models auth login --provider google-gemini-cli --set-default
```
النموذج الافتراضي: `google-gemini-cli/gemini-3-flash-preview`. أنت **لا** تلصق معرّف عميل أو سرًا في `openclaw.json`. يخزّن تدفق تسجيل الدخول في CLI الرموز في ملفات تعريف المصادقة على مضيف Gateway.
النموذج الافتراضي: `google-gemini-cli/gemini-3-flash-preview`. لا تلصق **معرّف عميل** أو **سرًا** داخل `openclaw.json`. يخزّن تدفق تسجيل الدخول في CLI الرموز المميزة في ملفات تعريف المصادقة على مضيف Gateway.
</Step>
<Step title="عيّن المشروع (إذا لزم الأمر)">
<Step title="تعيين المشروع (إذا لزم الأمر)">
إذا فشلت الطلبات بعد تسجيل الدخول، فعيّن `GOOGLE_CLOUD_PROJECT` أو `GOOGLE_CLOUD_PROJECT_ID` على مضيف Gateway.
</Step>
</Steps>
تُحلَّل ردود JSON من Gemini CLI من `response`؛ ويرجع الاستخدام احتياطيًا إلى `stats`، مع تسوية `stats.cached` إلى `cacheRead` في OpenClaw.
تُحلّل ردود JSON من Gemini CLI من `response`؛ ويعود الاستخدام احتياطيًا إلى `stats`، مع تسوية `stats.cached` إلى `cacheRead` في OpenClaw.
### Z.AI (GLM)
@ -275,13 +276,13 @@ x-i18n:
- نموذج مثال: `zai/glm-5.1`
- CLI: `openclaw onboard --auth-choice zai-api-key`
- الأسماء المستعارة: تتم تسوية `z.ai/*` و`z-ai/*` إلى `zai/*`
- يكتشف `zai-api-key` نقطة نهاية Z.AI المطابقة تلقائيًا؛ بينما تفرض `zai-coding-global` و`zai-coding-cn` و`zai-global` و`zai-cn` سطحًا محددًا
- يكتشف `zai-api-key` تلقائيًا نقطة نهاية Z.AI المطابقة؛ بينما تفرض `zai-coding-global`، و`zai-coding-cn`، و`zai-global`، و`zai-cn` سطحًا محددًا
### Vercel AI Gateway
- المزوّد: `vercel-ai-gateway`
- المصادقة: `AI_GATEWAY_API_KEY`
- نماذج أمثلة: `vercel-ai-gateway/anthropic/claude-opus-4.6`، و`vercel-ai-gateway/moonshotai/kimi-k2.6`
- نماذج أمثلة: `vercel-ai-gateway/anthropic/claude-opus-4.6`، `vercel-ai-gateway/moonshotai/kimi-k2.6`
- CLI: `openclaw onboard --auth-choice ai-gateway-api-key`
### Kilo Gateway
@ -291,14 +292,14 @@ x-i18n:
- نموذج مثال: `kilocode/kilo/auto`
- CLI: `openclaw onboard --auth-choice kilocode-api-key`
- عنوان URL الأساسي: `https://api.kilo.ai/api/gateway/`
- يشحن كتالوج الاحتياط الثابت `kilocode/kilo/auto`؛ ويمكن لاكتشاف `https://api.kilo.ai/api/gateway/models` المباشر توسيع كتالوج وقت التشغيل أكثر.
- التوجيه الدقيق في المصدر خلف `kilocode/kilo/auto` مملوك لـ Kilo Gateway، وليس مضمّنًا ترميزيًا في OpenClaw.
- يشحن الكتالوج الاحتياطي الثابت `kilocode/kilo/auto`؛ ويمكن لاكتشاف `https://api.kilo.ai/api/gateway/models` المباشر توسيع كتالوج وقت التشغيل أكثر.
- التوجيه الدقيق في المنبع خلف `kilocode/kilo/auto` تملكه Kilo Gateway، وليس مضمّنًا بشكل ثابت في OpenClaw.
راجع [/providers/kilocode](/ar/providers/kilocode) للاطلاع على تفاصيل الإعداد.
راجع [/providers/kilocode](/ar/providers/kilocode) للحصول على تفاصيل الإعداد.
### Plugins المزوّدين المضمّنة الأخرى
| المزوّد | المعرّف | متغير بيئة المصادقة | نموذج مثال |
| المزوّد | المعرّف | متغير بيئة المصادقة | نموذج مثال |
| ----------------------- | -------------------------------- | ------------------------------------------------------------ | --------------------------------------------- |
| BytePlus | `byteplus` / `byteplus-plan` | `BYTEPLUS_API_KEY` | `byteplus-plan/ark-code-latest` |
| Cerebras | `cerebras` | `CEREBRAS_API_KEY` | `cerebras/zai-glm-4.7` |
@ -307,9 +308,9 @@ x-i18n:
| DeepSeek | `deepseek` | `DEEPSEEK_API_KEY` | `deepseek/deepseek-v4-flash` |
| GitHub Copilot | `github-copilot` | `COPILOT_GITHUB_TOKEN` / `GH_TOKEN` / `GITHUB_TOKEN` | - |
| Groq | `groq` | `GROQ_API_KEY` | - |
| Hugging Face Inference | `huggingface` | `HUGGINGFACE_HUB_TOKEN` or `HF_TOKEN` | `huggingface/deepseek-ai/DeepSeek-R1` |
| Hugging Face Inference | `huggingface` | `HUGGINGFACE_HUB_TOKEN` أو `HF_TOKEN` | `huggingface/deepseek-ai/DeepSeek-R1` |
| Kilo Gateway | `kilocode` | `KILOCODE_API_KEY` | `kilocode/kilo/auto` |
| Kimi Coding | `kimi` | `KIMI_API_KEY` or `KIMICODE_API_KEY` | `kimi/kimi-code` |
| Kimi Coding | `kimi` | `KIMI_API_KEY` أو `KIMICODE_API_KEY` | `kimi/kimi-code` |
| MiniMax | `minimax` / `minimax-portal` | `MINIMAX_API_KEY` / `MINIMAX_OAUTH_TOKEN` | `minimax/MiniMax-M2.7` |
| Mistral | `mistral` | `MISTRAL_API_KEY` | `mistral/mistral-large-latest` |
| Moonshot | `moonshot` | `MOONSHOT_API_KEY` | `moonshot/kimi-k2.6` |
@ -325,44 +326,44 @@ x-i18n:
| xAI | `xai` | `XAI_API_KEY` | `xai/grok-4.3` |
| Xiaomi | `xiaomi` | `XIAOMI_API_KEY` | `xiaomi/mimo-v2-flash` |
#### خصوصيات يجدر معرفتها
#### سلوكيات خاصة يجدر معرفتها
<AccordionGroup>
<Accordion title="OpenRouter">
يطبّق ترويسات نسبة التطبيق الخاصة به وعلامات Anthropic `cache_control` فقط على مسارات `openrouter.ai` الموثّقة. مراجع DeepSeek وMoonshot وZAI مؤهلة لمدة بقاء ذاكرة التخزين المؤقت (TTL) للتخزين المؤقت للمطالبات المُدار من OpenRouter، لكنها لا تتلقى علامات ذاكرة التخزين المؤقت من Anthropic. وبصفته مسارًا بأسلوب الوكيل متوافقًا مع OpenAI، فإنه يتجاوز التشكيل الخاص بـ OpenAI الأصلي فقط (`serviceTier`، وResponses `store`، وتلميحات ذاكرة التخزين المؤقت للمطالبات، وتوافق الاستدلال مع OpenAI). تحتفظ المراجع المدعومة من Gemini بتنقية تواقيع التفكير الخاصة بـ proxy-Gemini فقط.
يطبّق ترويسات إسناد التطبيق الخاصة به وعلامات Anthropic `cache_control` فقط على مسارات `openrouter.ai` الموثّقة. مراجع DeepSeek وMoonshot وZAI مؤهلة لمدة بقاء ذاكرة التخزين المؤقت للتخزين المؤقت للمطالبات الذي يديره OpenRouter، لكنها لا تتلقى علامات تخزين Anthropic المؤقت. وبصفته مسار وكيل متوافقا مع OpenAI، فإنه يتخطى التشكيل الخاص بـ OpenAI الأصلي فقط (`serviceTier`، وResponses `store`، وتلميحات ذاكرة التخزين المؤقت للمطالبات، وتوافق استدلال OpenAI). تحتفظ المراجع المستندة إلى Gemini بتنظيف توقيع التفكير الخاص بوكيل Gemini فقط.
</Accordion>
<Accordion title="Kilo Gateway">
تتبع المراجع المدعومة من Gemini مسار التنقية نفسه الخاص بـ proxy-Gemini؛ ويتجاوز `kilocode/kilo/auto` وغيره من المراجع غير المدعومة لاستدلال الوكيل حقن استدلال الوكيل.
تتبع المراجع المستندة إلى Gemini مسار تنظيف وكيل Gemini نفسه؛ ويتخطى `kilocode/kilo/auto` وغيره من المراجع غير الداعمة للاستدلال عبر الوكيل حقن الاستدلال عبر الوكيل.
</Accordion>
<Accordion title="MiniMax">
يكتب الإعداد بمفتاح API تعريفات صريحة لنموذج محادثة M2.7 النصي فقط؛ ويبقى فهم الصور على مزوّد الوسائط `MiniMax-VL-01` المملوك من Plugin.
يكتب إعداد مفتاح API تعريفات صريحة لنماذج محادثة M2.7 النصية فقط؛ ويظل فهم الصور على موفر الوسائط `MiniMax-VL-01` المملوك للـ plugin.
</Accordion>
<Accordion title="NVIDIA">
تستخدم معرّفات النماذج مساحة أسماء `nvidia/<vendor>/<model>` (مثل `nvidia/nvidia/nemotron-...` إلى جانب `nvidia/moonshotai/kimi-k2.5`)؛ وتحافظ أدوات الاختيار على تركيب `<provider>/<model-id>` الحرفي، بينما يبقى المفتاح القانوني المُرسل إلى API ببادئة واحدة.
تستخدم معرّفات النماذج مساحة أسماء `nvidia/<vendor>/<model>` (على سبيل المثال `nvidia/nvidia/nemotron-...` إلى جانب `nvidia/moonshotai/kimi-k2.5`)؛ وتحافظ أدوات الاختيار على تركيبة `<provider>/<model-id>` الحرفية بينما يبقى المفتاح القانوني المرسل إلى API ذا بادئة واحدة.
</Accordion>
<Accordion title="xAI">
يستخدم مسار Responses الخاص بـ xAI. `grok-4.3` هو نموذج المحادثة الافتراضي المضمّن. يعيد `/fast` أو `params.fastMode: true` كتابة `grok-3` و`grok-3-mini` و`grok-4` و`grok-4-0709` إلى متغيراتها `*-fast`. يكون `tool_stream` مفعّلًا افتراضيًا؛ عطّله عبر `agents.defaults.models["xai/<model>"].params.tool_stream=false`.
يستخدم مسار xAI Responses. `grok-4.3` هو نموذج المحادثة الافتراضي المضمّن. يعيد `/fast` أو `params.fastMode: true` كتابة `grok-3` و`grok-3-mini` و`grok-4` و`grok-4-0709` إلى متغيراتها `*-fast`. يكون `tool_stream` مفعّلا افتراضيا؛ عطّله عبر `agents.defaults.models["xai/<model>"].params.tool_stream=false`.
</Accordion>
<Accordion title="Cerebras">
يُشحن بوصفه Plugin مزوّد `cerebras` المضمّن. يستخدم GLM `zai-glm-4.7`؛ وعنوان URL الأساسي المتوافق مع OpenAI هو `https://api.cerebras.ai/v1`.
يأتي كـ plugin موفر `cerebras` مضمّن. يستخدم GLM `zai-glm-4.7`؛ وعنوان URL الأساسي المتوافق مع OpenAI هو `https://api.cerebras.ai/v1`.
</Accordion>
</AccordionGroup>
## المزوّدون عبر `models.providers` (مخصص/عنوان URL أساسي)
## الموفرون عبر `models.providers` (عنوان URL مخصص/أساسي)
استخدم `models.providers` (أو `models.json`) لإضافة مزوّدين **مخصصين** أو وكلاء متوافقين مع OpenAI/Anthropic.
استخدم `models.providers` (أو `models.json`) لإضافة موفرين **مخصصين** أو وكلاء متوافقين مع OpenAI/Anthropic.
تنشر العديد من Plugins المزوّدين المضمّنة أدناه كتالوجًا افتراضيًا بالفعل. استخدم إدخالات `models.providers.<id>` الصريحة فقط عندما تريد تجاوز عنوان URL الأساسي الافتراضي أو الترويسات أو قائمة النماذج.
ينشر كثير من plugins الموفرين المضمّنة أدناه فهرسا افتراضيا بالفعل. استخدم إدخالات `models.providers.<id>` الصريحة فقط عندما تريد تجاوز عنوان URL الأساسي الافتراضي أو الترويسات أو قائمة النماذج.
تقرأ فحوصات قدرات نماذج Gateway أيضًا بيانات تعريف `models.providers.<id>.models[]` الصريحة. إذا كان نموذج مخصص أو وكيل يقبل الصور، فاضبط `input: ["text", "image"]` على ذلك النموذج حتى يمرّر WebChat ومسارات المرفقات الصادرة من Node الصور كمدخلات نموذج أصلية بدلًا من مراجع وسائط نصية فقط.
تقرأ فحوصات قدرات نموذج Gateway أيضا بيانات `models.providers.<id>.models[]` الوصفية الصريحة. إذا كان نموذج مخصص أو وكيل يقبل الصور، فاضبط `input: ["text", "image"]` على ذلك النموذج حتى تمرّر WebChat ومسارات المرفقات القادمة من Node الصور كمدخلات نموذج أصلية بدلا من مراجع وسائط نصية فقط.
### Moonshot AI (Kimi)
تُشحن Moonshot بوصفها Plugin مزوّدًا مضمّنًا. استخدم المزوّد المدمج افتراضيًا، وأضف إدخال `models.providers.moonshot` صريحًا فقط عندما تحتاج إلى تجاوز عنوان URL الأساسي أو بيانات تعريف النموذج:
يأتي Moonshot كـ plugin موفر مضمّن. استخدم الموفر المدمج افتراضيا، وأضف إدخال `models.providers.moonshot` صريحا فقط عندما تحتاج إلى تجاوز عنوان URL الأساسي أو بيانات النموذج الوصفية:
- المزوّد: `moonshot`
- الموفر: `moonshot`
- المصادقة: `MOONSHOT_API_KEY`
- مثال نموذج: `moonshot/kimi-k2.6`
- نموذج مثال: `moonshot/kimi-k2.6`
- CLI: `openclaw onboard --auth-choice moonshot-api-key` أو `openclaw onboard --auth-choice moonshot-api-key-cn`
معرّفات نماذج Kimi K2:
@ -396,13 +397,13 @@ x-i18n:
}
```
### برمجة Kimi
### ترميز Kimi
تستخدم Kimi Coding نقطة نهاية Moonshot AI المتوافقة مع Anthropic:
يستخدم Kimi Coding نقطة نهاية Moonshot AI المتوافقة مع Anthropic:
- المزوّد: `kimi`
- الموفر: `kimi`
- المصادقة: `KIMI_API_KEY`
- مثال نموذج: `kimi/kimi-code`
- نموذج مثال: `kimi/kimi-code`
```json5
{
@ -413,15 +414,15 @@ x-i18n:
}
```
يظل `kimi/k2p5` القديم مقبولًا كمعرّف نموذج للتوافق.
يبقى `kimi/k2p5` القديم مقبولاً كمعرّف نموذج للتوافق.
### Volcano Engine (Doubao)
يوفر Volcano Engine (火山引擎) الوصول إلى Doubao ونماذج أخرى في الصين.
- المزوّد: `volcengine` (الترميز: `volcengine-plan`)
- المزوّد: `volcengine` (للبرمجة: `volcengine-plan`)
- المصادقة: `VOLCANO_ENGINE_API_KEY`
- مثال نموذج: `volcengine-plan/ark-code-latest`
- نموذج مثال: `volcengine-plan/ark-code-latest`
- CLI: `openclaw onboard --auth-choice volcengine-api-key`
```json5
@ -432,9 +433,9 @@ x-i18n:
}
```
تكون الإعدادات الأولية أثناء التهيئة على سطح الترميز افتراضيًا، لكن كتالوج `volcengine/*` العام يُسجّل في الوقت نفسه.
تستخدم عملية التهيئة سطح البرمجة افتراضياً، لكن كتالوج `volcengine/*` العام يُسجّل في الوقت نفسه.
في منتقيات النماذج أثناء التهيئة/الضبط، يفضّل خيار مصادقة Volcengine صفوف `volcengine/*` و`volcengine-plan/*` معًا. إذا لم تكن تلك النماذج محمّلة بعد، يعود OpenClaw إلى الكتالوج غير المصفّى بدلًا من عرض منتقي فارغ مقيّد بالمزوّد.
في منتقيات النماذج ضمن التهيئة/الإعداد، يفضّل خيار مصادقة Volcengine صفوف `volcengine/*` و`volcengine-plan/*` معاً. إذا لم تكن تلك النماذج محمّلة بعد، يعود OpenClaw إلى الكتالوج غير المرشّح بدلاً من عرض منتقٍ فارغ مقيّد بالمزوّد.
<Tabs>
<Tab title="النماذج القياسية">
@ -445,7 +446,7 @@ x-i18n:
- `volcengine/deepseek-v3-2-251201` (DeepSeek V3.2 128K)
</Tab>
<Tab title="نماذج الترميز (volcengine-plan)">
<Tab title="نماذج البرمجة (volcengine-plan)">
- `volcengine-plan/ark-code-latest`
- `volcengine-plan/doubao-seed-code`
- `volcengine-plan/kimi-k2.5`
@ -459,9 +460,9 @@ x-i18n:
يوفر BytePlus ARK الوصول إلى النماذج نفسها التي يوفرها Volcano Engine للمستخدمين الدوليين.
- المزوّد: `byteplus` (الترميز: `byteplus-plan`)
- المزوّد: `byteplus` (للبرمجة: `byteplus-plan`)
- المصادقة: `BYTEPLUS_API_KEY`
- مثال نموذج: `byteplus-plan/ark-code-latest`
- نموذج مثال: `byteplus-plan/ark-code-latest`
- CLI: `openclaw onboard --auth-choice byteplus-api-key`
```json5
@ -472,9 +473,9 @@ x-i18n:
}
```
تكون الإعدادات الأولية أثناء التهيئة على سطح الترميز افتراضيًا، لكن كتالوج `byteplus/*` العام يُسجّل في الوقت نفسه.
تستخدم عملية التهيئة سطح البرمجة افتراضياً، لكن كتالوج `byteplus/*` العام يُسجّل في الوقت نفسه.
في منتقيات النماذج أثناء التهيئة/الضبط، يفضّل خيار مصادقة BytePlus صفوف `byteplus/*` و`byteplus-plan/*` معًا. إذا لم تكن تلك النماذج محمّلة بعد، يعود OpenClaw إلى الكتالوج غير المصفّى بدلًا من عرض منتقي فارغ مقيّد بالمزوّد.
في منتقيات النماذج ضمن التهيئة/الإعداد، يفضّل خيار مصادقة BytePlus صفوف `byteplus/*` و`byteplus-plan/*` معاً. إذا لم تكن تلك النماذج محمّلة بعد، يعود OpenClaw إلى الكتالوج غير المرشّح بدلاً من عرض منتقٍ فارغ مقيّد بالمزوّد.
<Tabs>
<Tab title="النماذج القياسية">
@ -483,7 +484,7 @@ x-i18n:
- `byteplus/glm-4-7-251222` (GLM 4.7)
</Tab>
<Tab title="نماذج الترميز (byteplus-plan)">
<Tab title="نماذج البرمجة (byteplus-plan)">
- `byteplus-plan/ark-code-latest`
- `byteplus-plan/doubao-seed-code`
- `byteplus-plan/kimi-k2.5`
@ -495,11 +496,11 @@ x-i18n:
### Synthetic
يوفر Synthetic نماذج متوافقة مع Anthropic خلف المزوّد `synthetic`:
يوفر Synthetic نماذج متوافقة مع Anthropic خلف مزوّد `synthetic`:
- المزوّد: `synthetic`
- المصادقة: `SYNTHETIC_API_KEY`
- مثال نموذج: `synthetic/hf:MiniMaxAI/MiniMax-M2.5`
- نموذج مثال: `synthetic/hf:MiniMaxAI/MiniMax-M2.5`
- CLI: `openclaw onboard --auth-choice synthetic-api-key`
```json5
@ -523,7 +524,7 @@ x-i18n:
### MiniMax
تتم تهيئة MiniMax عبر `models.providers` لأنه يستخدم نقاط نهاية مخصصة:
يُهيّأ MiniMax عبر `models.providers` لأنه يستخدم نقاط نهاية مخصصة:
- MiniMax OAuth (عالمي): `--auth-choice minimax-global-oauth`
- MiniMax OAuth (الصين): `--auth-choice minimax-cn-oauth`
@ -531,17 +532,17 @@ x-i18n:
- مفتاح MiniMax API (الصين): `--auth-choice minimax-cn-api`
- المصادقة: `MINIMAX_API_KEY` لـ `minimax`؛ `MINIMAX_OAUTH_TOKEN` أو `MINIMAX_API_KEY` لـ `minimax-portal`
راجع [/providers/minimax](/ar/providers/minimax) لمعرفة تفاصيل الإعداد وخيارات النماذج ومقتطفات الإعدادات.
راجع [/providers/minimax](/ar/providers/minimax) لتفاصيل الإعداد، وخيارات النماذج، ومقتطفات الإعدادات.
<Note>
في مسار البث المتوافق مع Anthropic لدى MiniMax، يعطّل OpenClaw التفكير افتراضيًا ما لم تضبطه صراحةً، ويعيد `/fast on` كتابة `MiniMax-M2.7` إلى `MiniMax-M2.7-highspeed`.
في مسار البث المتوافق مع Anthropic الخاص بـ MiniMax، يعطّل OpenClaw التفكير افتراضياً ما لم تضبطه صراحةً، ويعيد `/fast on` كتابة `MiniMax-M2.7` إلى `MiniMax-M2.7-highspeed`.
</Note>
تقسيم القدرات المملوك من Plugin:
تقسيم الإمكانات المملوكة للـ Plugin:
- تبقى إعدادات النص/الدردشة الافتراضية على `minimax/MiniMax-M2.7`
- توليد الصور هو `minimax/image-01` أو `minimax-portal/image-01`
- فهم الصور مملوك من Plugin باستخدام `MiniMax-VL-01` على مساري مصادقة MiniMax
- فهم الصور مملوك للـ Plugin وهو `MiniMax-VL-01` على كلا مساري مصادقة MiniMax
- يبقى بحث الويب على معرّف المزوّد `minimax`
### LM Studio
@ -552,7 +553,7 @@ x-i18n:
- المصادقة: `LM_API_TOKEN`
- عنوان URL الأساسي الافتراضي للاستدلال: `http://localhost:1234/v1`
ثم اضبط نموذجًا (استبدله بأحد المعرّفات التي يعيدها `http://localhost:1234/api/v1/models`):
ثم اضبط نموذجاً (استبدله بأحد المعرّفات التي يرجعها `http://localhost:1234/api/v1/models`):
```json5
{
@ -562,15 +563,15 @@ x-i18n:
}
```
يستخدم OpenClaw مساري LM Studio الأصليين `/api/v1/models` و`/api/v1/models/load` للاكتشاف + التحميل التلقائي، مع `/v1/chat/completions` للاستدلال افتراضيًا. إذا أردت أن يتولى تحميل JIT وTTL والإخراج التلقائي في LM Studio دورة حياة النموذج، فاضبط `models.providers.lmstudio.params.preload: false`. راجع [/providers/lmstudio](/ar/providers/lmstudio) للإعداد واستكشاف الأخطاء وإصلاحها.
يستخدم OpenClaw نقاط LM Studio الأصلية `/api/v1/models` و`/api/v1/models/load` للاكتشاف + التحميل التلقائي، مع `/v1/chat/completions` للاستدلال افتراضياً. إذا أردت أن يتولى تحميل JIT في LM Studio، وTTL، والإخلاء التلقائي دورة حياة النموذج، فاضبط `models.providers.lmstudio.params.preload: false`. راجع [/providers/lmstudio](/ar/providers/lmstudio) للإعداد واستكشاف الأخطاء وإصلاحها.
### Ollama
يأتي Ollama كـ Plugin مزوّد مضمّن ويستخدم API الأصلي لـ Ollama:
يأتي Ollama كـ Plugin مزوّد مضمّن ويستخدم API الأصلي الخاص بـ Ollama:
- المزوّد: `ollama`
- المصادقة: غير مطلوبة (خادم محلي)
- مثال نموذج: `ollama/llama3.3`
- نموذج مثال: `ollama/llama3.3`
- التثبيت: [https://ollama.com/download](https://ollama.com/download)
```bash
@ -586,7 +587,7 @@ ollama pull llama3.3
}
```
يُكتشف Ollama محليًا عند `http://127.0.0.1:11434` عند الاشتراك باستخدام `OLLAMA_API_KEY`، ويضيف Plugin المزوّد المضمّن Ollama مباشرةً إلى `openclaw onboard` ومنتقي النماذج. راجع [/providers/ollama](/ar/providers/ollama) لمعرفة التهيئة، ووضع السحابة/المحلي، والإعدادات المخصصة.
يُكتشف Ollama محلياً عند `http://127.0.0.1:11434` عندما تختار الاشتراك باستخدام `OLLAMA_API_KEY`، ويضيف Plugin المزوّد المضمّن Ollama مباشرةً إلى `openclaw onboard` ومنتقي النماذج. راجع [/providers/ollama](/ar/providers/ollama) للتهيئة، ووضع السحابة/المحلي، والإعدادات المخصصة.
### vLLM
@ -596,13 +597,13 @@ ollama pull llama3.3
- المصادقة: اختيارية (تعتمد على خادمك)
- عنوان URL الأساسي الافتراضي: `http://127.0.0.1:8000/v1`
للاشتراك في الاكتشاف التلقائي محليًا (أي قيمة تعمل إذا لم يكن خادمك يفرض المصادقة):
للاشتراك في الاكتشاف التلقائي محلياً (تعمل أي قيمة إذا كان خادمك لا يفرض المصادقة):
```bash
export VLLM_API_KEY="vllm-local"
```
ثم اضبط نموذجًا (استبدله بأحد المعرّفات التي يعيدها `/v1/models`):
ثم اضبط نموذجاً (استبدله بأحد المعرّفات التي يرجعها `/v1/models`):
```json5
{
@ -616,19 +617,19 @@ export VLLM_API_KEY="vllm-local"
### SGLang
يأتي SGLang كـ Plugin مزوّد مضمّن لخوادم سريعة ذاتية الاستضافة متوافقة مع OpenAI:
يأتي SGLang كـ Plugin مزوّد مضمّن للخوادم ذاتية الاستضافة السريعة المتوافقة مع OpenAI:
- المزوّد: `sglang`
- المصادقة: اختيارية (تعتمد على خادمك)
- عنوان URL الأساسي الافتراضي: `http://127.0.0.1:30000/v1`
للاشتراك في الاكتشاف التلقائي محليًا (أي قيمة تعمل إذا لم يكن خادمك يفرض المصادقة):
للاشتراك في الاكتشاف التلقائي محلياً (تعمل أي قيمة إذا كان خادمك لا يفرض المصادقة):
```bash
export SGLANG_API_KEY="sglang-local"
```
ثم اضبط نموذجًا (استبدله بأحد المعرّفات التي يعيدها `/v1/models`):
ثم اضبط نموذجاً (استبدله بأحد المعرّفات التي يرجعها `/v1/models`):
```json5
{
@ -640,7 +641,7 @@ export SGLANG_API_KEY="sglang-local"
راجع [/providers/sglang](/ar/providers/sglang) للتفاصيل.
### الوكلاء المحليون (LM Studio وvLLM وLiteLLM وغيرها)
### الوكلاء المحليون (LM Studio، وvLLM، وLiteLLM، إلخ)
مثال (متوافق مع OpenAI):
@ -686,19 +687,19 @@ export SGLANG_API_KEY="sglang-local"
- `contextWindow: 200000`
- `maxTokens: 8192`
موصى به: اضبط قيمًا صريحة تطابق حدود الوكيل/النموذج لديك.
موصى به: اضبط قيماً صريحة تطابق حدود الوكيل/النموذج لديك.
</Accordion>
<Accordion title="قواعد تشكيل مسارات الوكيل">
- بالنسبة إلى `api: "openai-completions"` على نقاط النهاية غير الأصلية (أي `baseUrl` غير فارغ لا يكون مضيفه `api.openai.com`)، يفرض OpenClaw القيمة `compat.supportsDeveloperRole: false` لتجنب أخطاء 400 من المزوّد للأدوار `developer` غير المدعومة.
- تتخطى المسارات المتوافقة مع OpenAI بنمط الوكيل أيضًا تشكيل الطلبات الأصلي الخاص بـ OpenAI فقط: لا `service_tier`، ولا Responses `store`، ولا Completions `store`، ولا تلميحات تخزين مؤقت للمطالبات، ولا تشكيل حمولة توافق استدلال OpenAI، ولا ترويسات إسناد مخفية من OpenClaw.
- تتجاوز المسارات المتوافقة مع OpenAI بأسلوب الوكيل أيضاً تشكيل الطلبات الأصلية الخاصة بـ OpenAI فقط: لا `service_tier`، ولا `store` في Responses، ولا `store` في Completions، ولا تلميحات لذاكرة التخزين المؤقت للمطالبات، ولا تشكيل حمولة توافق التفكير في OpenAI، ولا ترويسات إسناد مخفية لـ OpenClaw.
- بالنسبة إلى وكلاء Completions المتوافقين مع OpenAI الذين يحتاجون إلى حقول خاصة بالمورّد، اضبط `agents.defaults.models["provider/model"].params.extra_body` (أو `extraBody`) لدمج JSON إضافي في جسم الطلب الصادر.
- بالنسبة إلى عناصر التحكم في قوالب الدردشة في vLLM، اضبط `agents.defaults.models["provider/model"].params.chat_template_kwargs`. يرسل Plugin vLLM المضمّن تلقائيًا `enable_thinking: false` و`force_nonempty_content: true` لـ `vllm/nemotron-3-*` عندما يكون مستوى تفكير الجلسة متوقفًا.
- بالنسبة إلى النماذج المحلية البطيئة أو مضيفي LAN/tailnet البعيدين، اضبط `models.providers.<id>.timeoutSeconds`. يمدّد هذا معالجة طلبات HTTP لنماذج المزوّد، بما في ذلك الاتصال والترويسات وبث الجسم وإلغاء الجلب المحمي الإجمالي، من دون زيادة مهلة تشغيل الوكيل بالكامل.
- تسمح استدعاءات HTTP لمزوّد النموذج بإجابات DNS ذات IP وهمي من Surge وClash وsing-box ضمن `198.18.0.0/15` و`fc00::/7` فقط لاسم مضيف `baseUrl` الخاص بالمزوّد المضبوط. لا تزال الوجهات الخاصة الأخرى وloopback وlink-local وmetadata تتطلب اشتراكًا صريحًا عبر `models.providers.<id>.request.allowPrivateNetwork: true`.
- إذا كان `baseUrl` فارغًا/محذوفًا، يحافظ OpenClaw على سلوك OpenAI الافتراضي (الذي يتحلل إلى `api.openai.com`).
- من أجل السلامة، تظل القيمة الصريحة `compat.supportsDeveloperRole: true` مُتجاوزة على نقاط نهاية `openai-completions` غير الأصلية.
- بالنسبة إلى `api: "anthropic-messages"` على نقاط النهاية غير المباشرة (أي مزوّد غير `anthropic` القياسي، أو `models.providers.anthropic.baseUrl` مخصص لا يكون مضيفه نقطة نهاية عامة من `api.anthropic.com`)، يحجب OpenClaw ترويسات Anthropic beta الضمنية مثل `claude-code-20250219` و`interleaved-thinking-2025-05-14` وعلامات OAuth، حتى لا ترفض الوكلاء المخصصون المتوافقون مع Anthropic أعلام beta غير المدعومة. اضبط `models.providers.<id>.headers["anthropic-beta"]` صراحةً إذا كان وكيلك يحتاج إلى ميزات beta محددة.
- بالنسبة إلى عناصر التحكم في قالب الدردشة في vLLM، اضبط `agents.defaults.models["provider/model"].params.chat_template_kwargs`. يرسل Plugin vLLM المضمّن تلقائياً `enable_thinking: false` و`force_nonempty_content: true` لـ `vllm/nemotron-3-*` عندما يكون مستوى التفكير في الجلسة متوقفاً.
- بالنسبة إلى النماذج المحلية البطيئة أو مضيفي LAN/الشبكة الخلفية البعيدين، اضبط `models.providers.<id>.timeoutSeconds`. يمدد هذا معالجة طلبات HTTP الخاصة بنموذج المزوّد، بما في ذلك الاتصال، والترويسات، وبث الجسم، وإيقاف الجلب المحروس الإجمالي، من دون زيادة مهلة تشغيل الوكيل بالكامل.
- تسمح نداءات HTTP لمزوّد النموذج بإجابات DNS ذات IP زائف من Surge وClash وsing-box في `198.18.0.0/15` و`fc00::/7` فقط لاسم مضيف `baseUrl` الخاص بالمزوّد المضبوط. لا تزال الوجهات الخاصة الأخرى، وloopback، وlink-local، والبيانات الوصفية تتطلب اشتراكاً صريحاً عبر `models.providers.<id>.request.allowPrivateNetwork: true`.
- إذا كان `baseUrl` فارغاً/محذوفاً، يحافظ OpenClaw على سلوك OpenAI الافتراضي (الذي يحل إلى `api.openai.com`).
- لدواعي السلامة، لا تزال القيمة الصريحة `compat.supportsDeveloperRole: true` تُستبدل على نقاط نهاية `openai-completions` غير الأصلية.
- بالنسبة إلى `api: "anthropic-messages"` على نقاط النهاية غير المباشرة (أي مزوّد غير `anthropic` القياسي، أو `models.providers.anthropic.baseUrl` مخصص لا يكون مضيفه نقطة نهاية عامة لـ `api.anthropic.com`)، يخفي OpenClaw ترويسات Anthropic التجريبية الضمنية مثل `claude-code-20250219` و`interleaved-thinking-2025-05-14` وعلامات OAuth، بحيث لا ترفض الوكلاء المخصصة المتوافقة مع Anthropic علامات beta غير المدعومة. اضبط `models.providers.<id>.headers["anthropic-beta"]` صراحةً إذا كان وكيلك يحتاج إلى ميزات beta محددة.
</Accordion>
</AccordionGroup>
@ -711,11 +712,11 @@ openclaw models set opencode/claude-opus-4-6
openclaw models list
```
انظر أيضًا: [الإعدادات](/ar/gateway/configuration) للحصول على أمثلة إعدادات كاملة.
راجع أيضاً: [الإعدادات](/ar/gateway/configuration) لأمثلة الإعدادات الكاملة.
## ذات صلة
- [مرجع الإعدادات](/ar/gateway/config-agents#agent-defaults) - مفاتيح إعداد النماذج
- [تجاوز فشل النماذج](/ar/concepts/model-failover) - سلاسل الرجوع وسلوك إعادة المحاولة
- [النماذج](/ar/concepts/models) - إعداد النماذج والأسماء المستعارة
- [المزوّدون](/ar/providers) - أدلة الإعداد حسب كل مزوّد
- [مرجع الإعدادات](/ar/gateway/config-agents#agent-defaults) - مفاتيح إعدادات النموذج
- [تجاوز فشل النموذج](/ar/concepts/model-failover) - سلاسل الرجوع وسلوك إعادة المحاولة
- [النماذج](/ar/concepts/models) - إعداد النماذج والأسماء البديلة
- [المزوّدون](/ar/providers) - أدلة الإعداد لكل مزوّد

File diff suppressed because it is too large Load Diff

View File

@ -1,48 +1,48 @@
---
read_when:
- أنت تصحّح أخطاء تثبيت حزم Plugin
- أنت تصحح أخطاء عمليات تثبيت حزم Plugin
- أنت تغيّر سلوك بدء تشغيل Plugin أو doctor أو التثبيت عبر مدير الحزم
- أنت تتولى صيانة عمليات تثبيت OpenClaw المحزّمة أو ملفات بيان Plugin المضمّنة
- أنت تصون تثبيتات OpenClaw المعبأة أو ملفات بيان Plugin المضمّنة
sidebarTitle: Dependencies
summary: كيف يثبّت OpenClaw حزم Plugin ويحلّ تبعيات Plugin
title: حل تبعيات Plugin
title: حلّ تبعيات Plugin
x-i18n:
generated_at: "2026-05-06T08:06:06Z"
generated_at: "2026-05-06T09:02:27Z"
model: gpt-5.5
provider: openai
source_hash: 4ef307fb034d397a5e2e991254fb881046c73a4e6d860073b90f2b4e0667edc2
source_hash: e06f1fdc34c8392cbf0e399484fd59af11b9b7d73c5c7e68b3617a7cfd433a36
source_path: plugins/dependency-resolution.md
workflow: 16
---
# حل اعتماديات Plugin
# حل تبعيات Plugin
يبقي OpenClaw عمل اعتماديات Plugin في وقت التثبيت/التحديث. لا يقوم التحميل في وقت التشغيل بتشغيل مديري الحزم، أو إصلاح أشجار الاعتماديات، أو تعديل دليل حزمة OpenClaw.
يبقي OpenClaw عمل تبعيات Plugin في وقت التثبيت/التحديث. لا يقوم التحميل وقت التشغيل بتشغيل مديري الحزم أو إصلاح أشجار التبعيات أو تعديل دليل حزمة OpenClaw.
## تقسيم المسؤوليات
تملك حزم Plugin مخطط اعتمادياتها:
تمتلك حزم Plugin مخطط تبعياتها:
- تعيش اعتماديات وقت التشغيل في `dependencies` أو `optionalDependencies` الخاصة بحزمة Plugin
- تكون استيرادات SDK/النواة اعتماديات نظيرة أو استيرادات يوفرها OpenClaw
- تجلب Plugins التطوير المحلية اعتمادياتها المثبتة مسبقًا
- يتم تثبيت Plugins من npm وgit داخل جذور حزم مملوكة لـ OpenClaw
- تبعيات وقت التشغيل توجد في `dependencies` أو `optionalDependencies` الخاصة بحزمة Plugin
- استيرادات SDK/النواة تكون تبعيات نظيرة أو استيرادات OpenClaw موفرة
- Plugins التطوير المحلي تجلب تبعياتها المثبتة مسبقًا
- يتم تثبيت Plugins الخاصة بـ npm وgit داخل جذور حزم مملوكة لـ OpenClaw
لا يملك OpenClaw إلا دورة حياة Plugin:
يمتلك OpenClaw دورة حياة Plugin فقط:
- اكتشاف مصدر Plugin
- تثبيت الحزمة أو تحديثها عند طلب ذلك صراحةً
- تثبيت الحزمة أو تحديثها عند الطلب الصريح
- تسجيل بيانات التثبيت الوصفية
- تحميل نقطة دخول Plugin
- الفشل برسالة خطأ قابلة للتنفيذ عندما تكون الاعتماديات مفقودة
- الفشل برسالة خطأ قابلة للتنفيذ عندما تكون التبعيات مفقودة
## جذور التثبيت
يستخدم OpenClaw جذورًا ثابتة لكل مصدر:
يستخدم OpenClaw جذورًا مستقرة لكل مصدر:
- تُثبَّت حزم npm تحت `~/.openclaw/npm`
- تُستنسخ حزم git تحت `~/.openclaw/git`
- تُنسخ تثبيتات local/path/archive أو تُشار إليها دون إصلاح للاعتماديات
- تثبت حزم npm ضمن `~/.openclaw/npm`
- تستنسخ حزم git ضمن `~/.openclaw/git`
- يتم نسخ تثبيتات المحلي/المسار/الأرشيف أو الإشارة إليها دون إصلاح التبعيات
تعمل تثبيتات npm في جذر npm باستخدام:
@ -50,29 +50,31 @@ x-i18n:
npm install --prefix ~/.openclaw/npm <spec> --omit=dev --ignore-scripts --no-audit --no-fund
```
قد يرفع npm الاعتماديات المتعدية إلى `~/.openclaw/npm/node_modules` بجانب حزمة Plugin. يفحص OpenClaw جذر npm المُدار قبل الوثوق بالتثبيت، ويستخدم npm لإزالة الحزم المُدارة بواسطة npm أثناء إلغاء التثبيت، لذلك تبقى اعتماديات وقت التشغيل المرفوعة داخل حدود التنظيف المُدارة.
يستخدم `openclaw plugins install npm-pack:<path.tgz>` جذر npm المدار نفسه لحزمة tarball محلية من npm-pack. يقرأ OpenClaw بيانات npm الوصفية من tarball، ويضيفها إلى الجذر المدار كتبعية `file:` منسوخة، ويشغل تثبيت npm العادي، ثم يتحقق من بيانات lockfile الوصفية المثبتة قبل الوثوق بـ Plugin. هذا مخصص لإثبات قبول الحزمة ومرشحات الإصدار عندما يجب أن تتصرف قطعة pack محلية مثل قطعة السجل التي تحاكيها.
تعلن Plugins التي تستورد `openclaw/plugin-sdk/*` عن `openclaw` كاعتمادية نظيرة. لا يسمح OpenClaw لـ npm بتثبيت نسخة سجل منفصلة من حزمة المضيف داخل الجذر المُدار، لأن حزم المضيف القديمة يمكن أن تؤثر في حل الاعتماديات النظيرة في npm أثناء تثبيت Plugins لاحقًا. بدلًا من ذلك، بعد أن ينتهي npm من تعديل الجذر المشترك أثناء التثبيت أو التحديث أو إلغاء التثبيت، يعيد OpenClaw تأكيد روابط `node_modules/openclaw` المحلية لكل Plugin للحزم المثبتة التي تعلن عن الاعتمادية النظيرة للمضيف.
قد يرفع npm التبعيات الانتقالية إلى `~/.openclaw/npm/node_modules` بجانب حزمة Plugin. يفحص OpenClaw جذر npm المدار قبل الوثوق بالتثبيت ويستخدم npm لإزالة الحزم المدارة بواسطة npm أثناء إلغاء التثبيت، لذلك تبقى تبعيات وقت التشغيل المرفوعة داخل حدود التنظيف المدارة.
تستنسخ تثبيتات git المستودع أو تحدّثه، ثم تشغّل:
Plugins التي تستورد `openclaw/plugin-sdk/*` تعلن `openclaw` كتبعية نظيرة. لا يسمح OpenClaw لـ npm بتثبيت نسخة سجل منفصلة من حزمة المضيف داخل الجذر المدار، لأن حزم المضيف القديمة يمكن أن تؤثر في حل التبعيات النظيرة في npm أثناء تثبيتات Plugin اللاحقة. بدلًا من ذلك، بعد أن ينتهي npm من تعديل الجذر المشترك أثناء التثبيت أو التحديث أو إلغاء التثبيت، يعيد OpenClaw تأكيد روابط `node_modules/openclaw` المحلية لـ Plugin للحزم المثبتة التي تعلن التبعية النظيرة للمضيف.
تقوم تثبيتات git باستنساخ المستودع أو تحديثه، ثم تشغل:
```bash
npm install --omit=dev --ignore-scripts --no-audit --no-fund
```
بعد ذلك يُحمَّل Plugin المثبت من دليل تلك الحزمة، لذلك يعمل حل `node_modules` المحلي للحزمة والأب بالطريقة نفسها التي يعمل بها لحزمة Node عادية.
ثم يتم تحميل Plugin المثبت من دليل الحزمة هذا، لذلك يعمل حل `node_modules` المحلي للحزمة والأب بالطريقة نفسها التي يعمل بها مع حزمة Node عادية.
## Plugins المحلية
تُعامل Plugins المحلية كأدلة يتحكم بها المطور. لا يشغّل OpenClaw `npm install` أو `pnpm install` أو إصلاح الاعتماديات لها. إذا كان لدى Plugin محلي اعتماديات، فثبّتها داخل ذلك Plugin قبل تحميله.
تُعامل Plugins المحلية كأدلة يتحكم بها المطور. لا يقوم OpenClaw بتشغيل `npm install` أو `pnpm install` أو إصلاح التبعيات لها. إذا كانت لدى Plugin محلية تبعيات، فثبتها في تلك Plugin قبل تحميلها.
يمكن لـ Plugins المحلية التابعة لجهات خارجية والمكتوبة بـ TypeScript استخدام مسار Jiti الطارئ. تُحمَّل Plugins JavaScript المعبأة وPlugins الداخلية المضمّنة عبر import/require الأصليين بدلًا من Jiti.
يمكن لـ Plugins المحلية الخارجية المكتوبة بـ TypeScript استخدام مسار Jiti الطارئ. يتم تحميل Plugins JavaScript المعبأة وPlugins الداخلية المضمنة عبر import/require الأصلي بدلًا من Jiti.
## بدء التشغيل وإعادة التحميل
لا يثبّت بدء تشغيل Gateway وإعادة تحميل الإعدادات اعتماديات Plugin أبدًا. إنهما يقرآن سجلات تثبيت Plugin، ويحسبان نقطة الدخول، ويحمّلانها.
لا يقوم بدء تشغيل Gateway ولا إعادة تحميل الإعدادات بتثبيت تبعيات Plugin أبدًا. يقرآن سجلات تثبيت Plugin، ويحسبان نقطة الدخول، ثم يحملانها.
إذا كانت اعتمادية مفقودة في وقت التشغيل، يفشل تحميل Plugin ويجب أن يوجّه الخطأ المشغّل إلى إصلاح صريح:
إذا كانت تبعية مفقودة وقت التشغيل، يفشل تحميل Plugin وينبغي أن يوجه الخطأ المشغل إلى إصلاح صريح:
```bash
openclaw plugins update <id>
@ -80,26 +82,26 @@ openclaw plugins install <source>
openclaw doctor --fix
```
يمكن لـ `doctor --fix` تنظيف حالة الاعتماديات القديمة التي أنشأها OpenClaw واسترداد Plugins القابلة للتنزيل والمفقودة من سجلات التثبيت المحلية عندما تشير الإعدادات إليها. لا يصلح Doctor اعتماديات Plugin محلي مثبت مسبقًا.
يمكن لـ `doctor --fix` تنظيف حالة التبعيات القديمة التي أنشأها OpenClaw واسترداد Plugins القابلة للتنزيل والمفقودة من سجلات التثبيت المحلية عندما تشير إليها الإعدادات. لا يصلح Doctor التبعيات لـ Plugin محلية مثبتة مسبقًا.
## Plugins المضمّنة
## Plugins المضمنة
تُشحن Plugins الخفيفة والحرجة للنواة كجزء من OpenClaw. يجب إما ألا تكون لديها شجرة اعتماديات وقت تشغيل ثقيلة أو أن تُنقل إلى حزمة قابلة للتنزيل على ClawHub/npm.
تُشحن Plugins المضمنة الخفيفة والحرجة للنواة كجزء من OpenClaw. ينبغي إما ألا يكون لديها شجرة تبعيات وقت تشغيل ثقيلة أو أن تُنقل إلى حزمة قابلة للتنزيل على ClawHub/npm.
للاطلاع على القائمة المولدة الحالية للـ Plugins التي تُشحن في حزمة النواة، أو تُثبَّت خارجيًا، أو تبقى كمصدر فقط، راجع [جرد Plugins](/ar/plugins/plugin-inventory).
للاطلاع على القائمة الحالية المولدة لـ Plugins التي تُشحن في الحزمة الأساسية أو تُثبت خارجيًا أو تبقى مصدرية فقط، راجع [مخزون Plugin](/ar/plugins/plugin-inventory).
يجب ألا تطلب بيانات Plugins المضمّنة staging للاعتماديات. يجب تعبئة وظائف Plugin الكبيرة أو الاختيارية كـ Plugin عادي وتثبيتها عبر مسار npm/git/ClawHub نفسه المستخدم مع Plugins التابعة لجهات خارجية.
يجب ألا تطلب بيانات Manifest الخاصة بـ Plugins المضمنة تجهيز التبعيات. ينبغي تغليف وظائف Plugin الكبيرة أو الاختيارية كـ Plugin عادية وتثبيتها عبر مسار npm/git/ClawHub نفسه مثل Plugins الخارجية.
في نسخ المصدر، يعامل OpenClaw المستودع كـ monorepo لـ pnpm. بعد `pnpm install`، تُحمَّل Plugins المضمّنة من `extensions/<id>` بحيث تكون اعتماديات workspace المحلية للحزمة متاحة وتُلتقط التعديلات مباشرة. تطوير نسخة المصدر يعتمد على pnpm فقط؛ لا يُعد `npm install` العادي في جذر المستودع طريقة مدعومة لتحضير اعتماديات Plugins المضمّنة.
في نسخ المصدر، يعامل OpenClaw المستودع كمستودع pnpm monorepo. بعد `pnpm install`، تُحمّل Plugins المضمنة من `extensions/<id>` بحيث تتوفر تبعيات مساحة العمل المحلية للحزمة ويتم التقاط التعديلات مباشرة. تطوير نسخة المصدر مخصص لـ pnpm فقط؛ لا يُعد تشغيل `npm install` عادي في جذر المستودع طريقة مدعومة لتحضير تبعيات Plugin المضمنة.
| شكل التثبيت | موقع Plugin المضمّن | مالك الاعتماديات |
| شكل التثبيت | موقع Plugin المضمنة | مالك التبعية |
| -------------------------------- | ------------------------------------- | -------------------------------------------------------------------- |
| `npm install -g openclaw` | شجرة وقت التشغيل المبنية داخل الحزمة | حزمة OpenClaw وتدفقات تثبيت/تحديث/doctor الصريحة لـ Plugin |
| نسخة git مع `pnpm install` | حزم workspace في `extensions/<id>` | workspace الخاص بـ pnpm، بما في ذلك الاعتماديات الخاصة بكل حزمة Plugin |
| `openclaw plugins install ...` | جذر Plugin مُدار عبر npm/git/ClawHub | تدفق تثبيت/تحديث Plugin |
| `npm install -g openclaw` | شجرة وقت التشغيل المبنية داخل الحزمة | حزمة OpenClaw وتدفقات تثبيت/تحديث/Doctor الصريحة لـ Plugin |
| نسخة git مع `pnpm install` | حزم مساحة العمل `extensions/<id>` | مساحة عمل pnpm، بما في ذلك تبعيات كل حزمة Plugin الخاصة بها |
| `openclaw plugins install ...` | جذر Plugin المدار الخاص بـ npm/git/ClawHub | تدفق تثبيت/تحديث Plugin |
## تنظيف القديم
كانت إصدارات OpenClaw الأقدم تنشئ جذور اعتماديات Plugins المضمّنة عند بدء التشغيل أو أثناء إصلاح doctor. يزيل تنظيف doctor الحالي تلك الأدلة والروابط الرمزية القديمة عند استخدام `--fix`، بما في ذلك جذور `plugin-runtime-deps` القديمة، وروابط حزم بادئة Node العامة التي تشير إلى أهداف `plugin-runtime-deps` التي تم تقليمها، وبيانات `.openclaw-runtime-deps*`، و`node_modules` المولدة لـ Plugin، وأدلة مراحل التثبيت، ومخازن pnpm المحلية للحزمة. كما يزيل postinstall المعبأ تلك الروابط الرمزية العامة قبل تقليم جذور الأهداف القديمة حتى لا تترك الترقيات استيرادات حزم ESM معلّقة.
كانت إصدارات OpenClaw الأقدم تنشئ جذور تبعيات Plugins المضمنة عند بدء التشغيل أو أثناء إصلاح Doctor. يزيل تنظيف Doctor الحالي تلك الأدلة والروابط الرمزية القديمة عند استخدام `--fix`، بما في ذلك جذور `plugin-runtime-deps` القديمة، وروابط حزم بادئة Node العامة التي تشير إلى أهداف `plugin-runtime-deps` المشذبة، وملفات Manifest الخاصة بـ `.openclaw-runtime-deps*`، و`node_modules` المولدة لـ Plugin، وأدلة مرحلة التثبيت، ومخازن pnpm المحلية للحزمة. كما يزيل postinstall المعبأ تلك الروابط الرمزية العامة قبل تشذيب جذور الأهداف القديمة حتى لا تترك الترقيات استيرادات حزم ESM معلقة.
هذه المسارات ليست إلا بقايا قديمة. يجب ألا تنشئها التثبيتات الجديدة.
هذه المسارات بقايا قديمة فقط. يجب ألا تنشئها التثبيتات الجديدة.

File diff suppressed because it is too large Load Diff

View File

@ -1,45 +1,45 @@
---
read_when:
- تريد إجراء مكالمة صوتية صادرة من OpenClaw
- أنت بصدد تكوين Plugin المكالمات الصوتية أو تطويره
- أنت تقوم بتهيئة أو تطوير Plugin المكالمات الصوتية
- تحتاج إلى صوت في الوقت الفعلي أو نسخ متدفق عبر الاتصالات الهاتفية
sidebarTitle: Voice call
summary: إجراء مكالمات صوتية صادرة وقبول مكالمات واردة عبر Twilio أو Telnyx أو Plivo، مع دعم اختياري للصوت في الوقت الفعلي والتفريغ النصي المتدفق
summary: إجراء مكالمات صوتية صادرة وقبول مكالمات صوتية واردة عبر Twilio أو Telnyx أو Plivo، مع دعم اختياري للصوت في الوقت الفعلي والنسخ النصي المتدفق
title: Plugin المكالمات الصوتية
x-i18n:
generated_at: "2026-05-06T08:08:33Z"
generated_at: "2026-05-06T09:02:26Z"
model: gpt-5.5
provider: openai
source_hash: cc608883e8f36cdd2075c3a8c7ab002d89d0616e119f488437bd18c995f066f9
source_hash: aba168696481ef0cc3c55ac8fd8be4382cb36889a12ed6d881fe6b29a2b0a54c
source_path: plugins/voice-call.md
workflow: 16
---
المكالمات الصوتية لـ OpenClaw عبر plugin. يدعم الإشعارات الصادرة،
والمحادثات متعددة الجولات، والصوت الفوري ثنائي الاتجاه الكامل، والنسخ
المتدفق، والمكالمات الواردة بسياسات قوائم السماح.
مكالمات صوتية لـ OpenClaw عبر Plugin. يدعم الإشعارات الصادرة،
والمحادثات متعددة الجولات، والصوت الفوري ثنائي الاتجاه بالكامل، والتفريغ النصي
المتدفق، والمكالمات الواردة مع سياسات قوائم السماح.
**المزوّدون الحاليون:** `twilio` (Programmable Voice + Media Streams)،
`telnyx` (Call Control v2)، `plivo` (Voice API + XML transfer + GetInput
speech)، `mock` (تطوير/بلا شبكة).
`telnyx` (Call Control v2)، `plivo` (Voice API + نقل XML + كلام GetInput
`mock` (تطوير/بلا شبكة).
<Note>
يعمل Voice Call plugin **داخل عملية Gateway**. إذا كنت تستخدم Gateway
بعيدًا، فثبّت plugin واضبطه على الجهاز الذي يشغّل
يعمل Plugin المكالمات الصوتية **داخل عملية Gateway**. إذا كنت تستخدم
Gateway بعيدة، فثبّت Plugin واضبطه على الجهاز الذي يشغّل
Gateway، ثم أعد تشغيل Gateway لتحميله.
</Note>
## البدء السريع
<Steps>
<Step title="تثبيت plugin">
<Step title="Install the plugin">
<Tabs>
<Tab title="من npm">
<Tab title="From npm">
```bash
openclaw plugins install @openclaw/voice-call
```
</Tab>
<Tab title="من مجلد محلي (تطوير)">
<Tab title="From a local folder (dev)">
```bash
PLUGIN_SRC=./path/to/local/voice-call-plugin
openclaw plugins install "$PLUGIN_SRC"
@ -48,37 +48,37 @@ Gateway، ثم أعد تشغيل Gateway لتحميله.
</Tab>
</Tabs>
استخدم الحزمة العارية لمتابعة وسم الإصدار الرسمي الحالي. ثبّت
إصدارًا دقيقًا فقط عندما تحتاج إلى تثبيت قابل لإعادة الإنتاج.
استخدم الحزمة المجردة لمتابعة وسم الإصدار الرسمي الحالي. ثبّت
إصدارًا محددًا بدقة فقط عندما تحتاج إلى تثبيت قابل لإعادة الإنتاج.
أعد تشغيل Gateway بعد ذلك لكي يتم تحميل plugin.
أعد تشغيل Gateway بعد ذلك حتى يتم تحميل Plugin.
</Step>
<Step title="ضبط المزوّد وwebhook">
<Step title="Configure provider and webhook">
اضبط الإعدادات ضمن `plugins.entries.voice-call.config` (راجع
[التكوين](#configuration) أدناه للاطلاع على الشكل الكامل). كحد أدنى:
`provider`، وبيانات اعتماد المزوّد، و`fromNumber`، وعنوان webhook URL
يمكن الوصول إليه علنًا.
[الإعداد](#configuration) أدناه للشكل الكامل). الحد الأدنى:
`provider`، واعتمادات المزوّد، و`fromNumber`، وWebhook URL يمكن الوصول إليه
علنًا.
</Step>
<Step title="التحقق من الإعداد">
<Step title="Verify setup">
```bash
openclaw voicecall setup
```
يكون الخرج الافتراضي مقروءًا في سجلات الدردشة والطرفيات. يتحقق من
تمكين plugin، وبيانات اعتماد المزوّد، وانكشاف webhook، وأن وضعًا صوتيًا
واحدًا فقط (`streaming` أو `realtime`) نشط. استخدم
`--json` للبرامج النصية.
المخرج الافتراضي قابل للقراءة في سجلات الدردشة والطرفيات. يتحقق من
تفعيل Plugin، واعتمادات المزوّد، وتعرّض Webhook، ومن أن
وضع صوت واحد فقط (`streaming` أو `realtime`) نشط. استخدم
`--json` للسكربتات.
</Step>
<Step title="اختبار smoke">
<Step title="Smoke test">
```bash
openclaw voicecall smoke
openclaw voicecall smoke --to "+15555550123"
```
كلاهما تشغيل جاف افتراضيًا. أضف `--yes` لإجراء مكالمة إشعار صادرة
قصيرة فعليًا:
كلاهما تشغيلان تجريبيان افتراضيًا. أضف `--yes` لإجراء مكالمة إشعار
صادرة قصيرة فعليًا:
```bash
openclaw voicecall smoke --to "+15555550123" --yes
@ -88,21 +88,21 @@ Gateway، ثم أعد تشغيل Gateway لتحميله.
</Steps>
<Warning>
بالنسبة إلى Twilio وTelnyx وPlivo، يجب أن ينتهي الإعداد إلى **عنوان webhook URL عام**.
إذا انتهى `publicUrl`، أو عنوان URL للنفق، أو عنوان URL لـ Tailscale، أو بديل
التقديم إلى local loopback أو مساحة شبكة خاصة، فسيفشل الإعداد بدلًا من
تشغيل مزوّد لا يستطيع تلقي webhooks من شركات الاتصالات.
بالنسبة إلى Twilio وTelnyx وPlivo، يجب أن يفضي الإعداد إلى **Webhook URL عام**.
إذا تم حل `publicUrl`، أو عنوان URL للنفق، أو عنوان URL لـ Tailscale، أو بديل الخدمة
إلى local loopback أو مساحة شبكة خاصة، فسيفشل الإعداد بدلًا من
بدء مزوّد لا يمكنه استقبال Webhookات شركات الاتصالات.
</Warning>
## التكوين
## الإعداد
إذا كان `enabled: true` لكن المزوّد المحدد يفتقد بيانات الاعتماد،
تسجل عملية بدء Gateway تحذيرًا بأن الإعداد غير مكتمل مع المفاتيح الناقصة
وتتخطى تشغيل وقت التشغيل. لا تزال الأوامر واستدعاءات RPC وأدوات الوكيل
تعيد تكوين المزوّد الناقص بدقة عند استخدامها.
إذا كان `enabled: true` لكن المزوّد المحدد يفتقد الاعتمادات،
فسيسجل بدء تشغيل Gateway تحذيرًا بأن الإعداد غير مكتمل مع المفاتيح الناقصة
ويتجاوز بدء وقت التشغيل. لا تزال الأوامر، واستدعاءات RPC، وأدوات الوكيل
تعيد إعداد المزوّد الناقص بدقة عند استخدامها.
<Note>
تقبل بيانات اعتماد voice-call مراجع SecretRef. يتم حل `plugins.entries.voice-call.config.twilio.authToken`، و`plugins.entries.voice-call.config.realtime.providers.*.apiKey`، و`plugins.entries.voice-call.config.streaming.providers.*.apiKey`، و`plugins.entries.voice-call.config.tts.providers.*.apiKey` عبر سطح SecretRef القياسي؛ راجع [سطح بيانات اعتماد SecretRef](/ar/reference/secretref-credential-surface).
تقبل اعتمادات المكالمات الصوتية SecretRefs. يتم حل `plugins.entries.voice-call.config.twilio.authToken` و`plugins.entries.voice-call.config.realtime.providers.*.apiKey` و`plugins.entries.voice-call.config.streaming.providers.*.apiKey` و`plugins.entries.voice-call.config.tts.providers.*.apiKey` عبر سطح SecretRef القياسي؛ راجع [سطح اعتماد SecretRef](/ar/reference/secretref-credential-surface).
</Note>
```json5
@ -175,30 +175,31 @@ Gateway، ثم أعد تشغيل Gateway لتحميله.
```
<AccordionGroup>
<Accordion title="ملاحظات انكشاف المزوّد والأمان">
- تتطلب Twilio وTelnyx وPlivo جميعها عنوان webhook URL **يمكن الوصول إليه علنًا**.
- `mock` مزوّد تطوير محلي (بلا استدعاءات شبكة).
- يتطلب Telnyx وجود `telnyx.publicKey` (أو `TELNYX_PUBLIC_KEY`) ما لم تكن `skipSignatureVerification` تساوي true.
- `skipSignatureVerification` للاختبار المحلي فقط.
- في الطبقة المجانية من ngrok، اضبط `publicUrl` على عنوان ngrok URL الدقيق؛ يتم فرض التحقق من التوقيع دائمًا.
- يسمح `tunnel.allowNgrokFreeTierLoopbackBypass: true` بـ Twilio webhooks ذات توقيعات غير صالحة **فقط** عندما تكون `tunnel.provider="ngrok"` ويكون `serve.bind` هو local loopback (وكيل ngrok المحلي). للتطوير المحلي فقط.
- يمكن أن تتغير عناوين URL للطبقة المجانية من Ngrok أو تضيف سلوكًا اعتراضيًا؛ إذا انحرف `publicUrl`، تفشل توقيعات Twilio. في الإنتاج: فضّل نطاقًا ثابتًا أو Tailscale funnel.
<Accordion title="Provider exposure and security notes">
- تتطلب Twilio وTelnyx وPlivo جميعًا Webhook URL **يمكن الوصول إليه علنًا**.
- `mock` هو مزوّد تطوير محلي (لا توجد استدعاءات شبكة).
- يتطلب Telnyx وجود `telnyx.publicKey` (أو `TELNYX_PUBLIC_KEY`) ما لم تكن `skipSignatureVerification` بالقيمة true.
- `skipSignatureVerification` مخصص للاختبار المحلي فقط.
- في الطبقة المجانية من ngrok، اضبط `publicUrl` على عنوان URL الدقيق لـ ngrok؛ يتم فرض التحقق من التوقيع دائمًا.
- يسمح `tunnel.allowNgrokFreeTierLoopbackBypass: true` بـ Webhookات Twilio ذات التوقيعات غير الصالحة **فقط** عندما تكون `tunnel.provider="ngrok"` و`serve.bind` هي local loopback (وكيل ngrok المحلي). للتطوير المحلي فقط.
- يمكن لعناوين URL في الطبقة المجانية من Ngrok أن تتغير أو تضيف سلوك صفحة وسيطة؛ إذا انحرف `publicUrl`، تفشل توقيعات Twilio. في الإنتاج: فضّل نطاقًا مستقرًا أو نفق Tailscale.
</Accordion>
<Accordion title="حدود اتصالات البث">
<Accordion title="Streaming connection caps">
- يغلق `streaming.preStartTimeoutMs` المقابس التي لا ترسل أبدًا إطار `start` صالحًا.
- يحد `streaming.maxPendingConnections` إجمالي مقابس ما قبل البدء غير المصادقة.
- يحد `streaming.maxPendingConnectionsPerIp` مقابس ما قبل البدء غير المصادقة لكل عنوان IP مصدر.
- يحد `streaming.maxPendingConnections` إجمالي مقابس ما قبل البدء غير المصادق عليها.
- يحد `streaming.maxPendingConnectionsPerIp` مقابس ما قبل البدء غير المصادق عليها لكل عنوان IP مصدر.
- يحد `streaming.maxConnections` إجمالي مقابس تدفق الوسائط المفتوحة (المعلقة + النشطة).
</Accordion>
<Accordion title="ترحيلات التكوين القديمة">
يعيد `openclaw doctor --fix` كتابة التكوينات الأقدم التي تستخدم `provider: "log"`، أو `twilio.from`، أو مفاتيح
OpenAI القديمة ضمن `streaming.*`. لا يزال بديل وقت التشغيل يقبل مفاتيح voice-call القديمة في الوقت الحالي، لكن
مسار إعادة الكتابة هو `openclaw doctor --fix` وطبقة التوافق المؤقتة
<Accordion title="Legacy config migrations">
تتم إعادة كتابة الإعدادات الأقدم التي تستخدم `provider: "log"`، أو `twilio.from`، أو مفاتيح OpenAI
القديمة في `streaming.*` بواسطة `openclaw doctor --fix`.
لا يزال بديل وقت التشغيل يقبل مفاتيح المكالمات الصوتية القديمة حاليًا، لكن
مسار إعادة الكتابة هو `openclaw doctor --fix` وطبقة التوافق
مؤقتة.
مفاتيح البث المرحّلة تلقائيًا:
مفاتيح التدفق التي يتم ترحيلها تلقائيًا:
- `streaming.sttProvider``streaming.provider`
- `streaming.openaiApiKey``streaming.providers.openai.apiKey`
@ -211,17 +212,17 @@ Gateway، ثم أعد تشغيل Gateway لتحميله.
## نطاق الجلسة
افتراضيًا، يستخدم Voice Call الإعداد `sessionScope: "per-phone"` لكي تحتفظ
افتراضيًا، تستخدم المكالمات الصوتية `sessionScope: "per-phone"` بحيث تحتفظ
المكالمات المتكررة من المتصل نفسه بذاكرة المحادثة. اضبط `sessionScope: "per-call"` عندما
ينبغي أن تبدأ كل مكالمة عبر شركة الاتصالات بسياق جديد، مثل الاستقبال،
أو الحجز، أو IVR، أو تدفقات جسر Google Meet حيث قد يمثل رقم الهاتف نفسه
اجتماعات مختلفة.
ينبغي أن تبدأ كل مكالمة من شركة الاتصالات بسياق جديد، مثل الاستقبال،
أو الحجز، أو IVR، أو تدفقات جسر Google Meet حيث قد
يمثل رقم الهاتف نفسه اجتماعات مختلفة.
## محادثات الصوت الفوري
## محادثات الصوت الفورية
يحدد `realtime` مزوّد صوت فوري ثنائي الاتجاه الكامل لصوت المكالمة الحي.
وهو منفصل عن `streaming`، الذي يمرر الصوت فقط إلى
مزوّدي النسخ الفوري.
يختار `realtime` مزوّد صوت فوري ثنائي الاتجاه بالكامل لصوت المكالمة
المباشر. وهو منفصل عن `streaming`، الذي يوجّه الصوت فقط إلى
مزوّدي التفريغ النصي الفوري.
<Warning>
لا يمكن دمج `realtime.enabled` مع `streaming.enabled`. اختر وضعًا صوتيًا
@ -230,41 +231,41 @@ Gateway، ثم أعد تشغيل Gateway لتحميله.
سلوك وقت التشغيل الحالي:
- يتم دعم `realtime.enabled` لـ Twilio Media Streams.
- `realtime.provider` اختياري. إذا لم يُضبط، يستخدم Voice Call أول مزوّد صوت فوري مسجل.
- مزوّدو الصوت الفوري المرفقون: Google Gemini Live (`google`) وOpenAI (`openai`)، ويتم تسجيلهم بواسطة plugins المزوّدين الخاصة بهم.
- يعيش التكوين الخام المملوك للمزوّد ضمن `realtime.providers.<providerId>`.
- يكشف Voice Call أداة `openclaw_agent_consult` الفورية المشتركة افتراضيًا. يمكن للنموذج الفوري استدعاؤها عندما يطلب المتصل تفكيرًا أعمق، أو معلومات حالية، أو أدوات OpenClaw العادية.
- يتم دعم `realtime.enabled` لتدفقات وسائط Twilio.
- `realtime.provider` اختياري. إذا لم يتم ضبطه، تستخدم المكالمات الصوتية أول مزوّد صوت فوري مسجل.
- مزوّدو الصوت الفوري المضمنون: Google Gemini Live (`google`) وOpenAI (`openai`)، ويتم تسجيلهم بواسطة Plugins المزوّدين الخاصة بهم.
- يوجد الإعداد الخام المملوك للمزوّد ضمن `realtime.providers.<providerId>`.
- تعرض المكالمات الصوتية أداة `openclaw_agent_consult` الفورية المشتركة افتراضيًا. يمكن للنموذج الفوري استدعاؤها عندما يطلب المتصل استدلالًا أعمق، أو معلومات حالية، أو أدوات OpenClaw العادية.
- يضيف `realtime.consultPolicy` اختياريًا إرشادات حول متى ينبغي للنموذج الفوري استدعاء `openclaw_agent_consult`.
- يكون `realtime.agentContext.enabled` معطلًا افتراضيًا. عند تمكينه، يحقن Voice Call هوية وكيل محدودة، وتجاوزًا لموجه النظام، وكبسولة محددة من ملفات مساحة العمل في تعليمات المزوّد الفوري عند إعداد الجلسة.
- يكون `realtime.fastContext.enabled` معطلًا افتراضيًا. عند تمكينه، يبحث Voice Call أولًا في الذاكرة المفهرسة/سياق الجلسة عن سؤال الاستشارة ويعيد تلك المقاطع إلى النموذج الفوري ضمن `realtime.fastContext.timeoutMs` قبل الرجوع إلى وكيل الاستشارة الكامل فقط إذا كانت `realtime.fastContext.fallbackToConsult` تساوي true.
- إذا أشار `realtime.provider` إلى مزوّد غير مسجل، أو لم يكن هناك أي مزوّد صوت فوري مسجل على الإطلاق، يسجل Voice Call تحذيرًا ويتخطى الوسائط الفورية بدلًا من إفشال plugin بالكامل.
- تعيد مفاتيح جلسة الاستشارة استخدام جلسة المكالمة المخزنة عندما تكون متاحة، ثم تعود إلى `sessionScope` المضبوط (`per-phone` افتراضيًا، أو `per-call` للمكالمات المعزولة).
- يكون `realtime.agentContext.enabled` معطلًا افتراضيًا. عند تفعيله، تحقن المكالمات الصوتية هوية وكيل محدودة، وتجاوز مطالبة النظام، وكبسولة ملف مساحة عمل محددة في تعليمات المزوّد الفوري عند إعداد الجلسة.
- يكون `realtime.fastContext.enabled` معطلًا افتراضيًا. عند تفعيله، تبحث المكالمات الصوتية أولًا في الذاكرة المفهرسة/سياق الجلسة عن سؤال الاستشارة وتعيد تلك المقاطع إلى النموذج الفوري ضمن `realtime.fastContext.timeoutMs` قبل الرجوع إلى وكيل الاستشارة الكامل فقط إذا كانت `realtime.fastContext.fallbackToConsult` بالقيمة true.
- إذا أشار `realtime.provider` إلى مزوّد غير مسجل، أو لم يكن أي مزوّد صوت فوري مسجلًا على الإطلاق، فسيسجل Plugin المكالمات الصوتية تحذيرًا ويتجاوز الوسائط الفورية بدلًا من إفشال Plugin بالكامل.
- تعيد مفاتيح جلسة الاستشارة استخدام جلسة المكالمة المخزنة عند توفرها، ثم ترجع إلى `sessionScope` المضبوط (`per-phone` افتراضيًا، أو `per-call` للمكالمات المعزولة).
### سياسة الأدوات
يتحكم `realtime.toolPolicy` في تشغيل الاستشارة:
| السياسة | السلوك |
| السياسة | السلوك |
| ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| `safe-read-only` | يكشف أداة الاستشارة ويقصر الوكيل العادي على `read`، و`web_search`، و`web_fetch`، و`x_search`، و`memory_search`، و`memory_get`. |
| `owner` | يكشف أداة الاستشارة ويدع الوكيل العادي يستخدم سياسة أدوات الوكيل العادية. |
| `none` | لا يكشف أداة الاستشارة. لا تزال `realtime.tools` المخصصة تمرر إلى المزوّد الفوري. |
| `safe-read-only` | يعرّض أداة الاستشارة ويقيّد الوكيل العادي إلى `read` و`web_search` و`web_fetch` و`x_search` و`memory_search` و`memory_get`. |
| `owner` | يعرّض أداة الاستشارة ويسمح للوكيل العادي باستخدام سياسة أدوات الوكيل العادية. |
| `none` | لا يعرّض أداة الاستشارة. لا تزال `realtime.tools` المخصصة تمرر إلى المزوّد الفوري. |
يتحكم `realtime.consultPolicy` في تعليمات النموذج الفوري فقط:
يتحكم `realtime.consultPolicy` فقط في تعليمات النموذج الفوري:
| السياسة | الإرشاد |
| السياسة | الإرشادات |
| ------------- | ----------------------------------------------------------------------------------------------- |
| `auto` | أبقِ الموجه الافتراضي ودع المزوّد يقرر متى يستدعي أداة الاستشارة. |
| `substantive` | أجب مباشرة عن الروابط الحوارية البسيطة واستشر قبل الحقائق، أو الذاكرة، أو الأدوات، أو السياق. |
| `always` | استشر قبل كل إجابة ذات مضمون. |
| `auto` | احتفظ بالمطالبة الافتراضية واترك للمزوّد تقرير متى يستدعي أداة الاستشارة. |
| `substantive` | أجب مباشرة عن الربط الحواري البسيط واستشر قبل الحقائق أو الذاكرة أو الأدوات أو السياق. |
| `always` | استشر قبل كل إجابة جوهرية. |
### سياق صوت الوكيل
فعّل `realtime.agentContext` عندما ينبغي لجسر الصوت أن يبدو مثل وكيل
OpenClaw المضبوط دون دفع تكلفة رحلة ذهاب وعودة كاملة لاستشارة الوكيل في
الأدوار العادية. تتم إضافة كبسولة السياق مرة واحدة عند إنشاء الجلسة الفورية،
لذلك لا تضيف زمن انتظار لكل دور. لا تزال استدعاءات
OpenClaw المضبوط من دون دفع تكلفة رحلة ذهاب وإياب كاملة لاستشارة الوكيل في
الجولات العادية. تتم إضافة كبسولة السياق مرة واحدة عند إنشاء الجلسة الفورية،
لذلك لا تضيف زمن تأخير لكل جولة. لا تزال استدعاءات
`openclaw_agent_consult` تشغّل وكيل OpenClaw الكامل ويجب استخدامها
لعمل الأدوات، أو المعلومات الحالية، أو عمليات البحث في الذاكرة، أو حالة مساحة العمل.
@ -296,16 +297,16 @@ OpenClaw المضبوط دون دفع تكلفة رحلة ذهاب وعودة ك
}
```
### أمثلة مزوّدي الوقت الفعلي
### أمثلة موفّري الوقت الحقيقي
<Tabs>
<Tab title="Google Gemini Live">
القيم الافتراضية: مفتاح API من `realtime.providers.google.apiKey`،
أو `GEMINI_API_KEY`، أو `GOOGLE_GENERATIVE_AI_API_KEY`؛ النموذج
القيم الافتراضية: مفتاح API من `realtime.providers.google.apiKey` أو
`GEMINI_API_KEY` أو `GOOGLE_GENERATIVE_AI_API_KEY`؛ النموذج
`gemini-2.5-flash-native-audio-preview-12-2025`؛ الصوت `Kore`.
يتم تفعيل `sessionResumption` و`contextWindowCompression` افتراضياً للمكالمات الأطول
يكون `sessionResumption` و`contextWindowCompression` مفعّلين افتراضيًا للمكالمات الأطول
والقابلة لإعادة الاتصال. استخدم `silenceDurationMs` و`startSensitivity` و
`endSensitivity` لضبط تبادل الأدوار بشكل أسرع على صوت الاتصالات الهاتفية.
`endSensitivity` لضبط تبادل الأدوار بسرعة أكبر على صوت الاتصالات الهاتفية.
```json5
{
@ -364,23 +365,23 @@ OpenClaw المضبوط دون دفع تكلفة رحلة ذهاب وعودة ك
</Tab>
</Tabs>
راجع [مزوّد Google](/ar/providers/google) و
[مزوّد OpenAI](/ar/providers/openai) لمعرفة خيارات الصوت الفوري
الخاصة بكل مزوّد.
راجع [موفّر Google](/ar/providers/google) و
[موفّر OpenAI](/ar/providers/openai) للاطلاع على خيارات الصوت في الوقت الحقيقي
الخاصة بكل موفّر.
## النسخ المتدفق
## النسخ المتدفّق
يحدد `streaming` مزوّد نسخ فوري لصوت المكالمات الحية.
يحدد `streaming` موفّر نسخ في الوقت الحقيقي لصوت المكالمات المباشرة.
سلوك وقت التشغيل الحالي:
- `streaming.provider` اختياري. إذا لم يتم ضبطه، يستخدم Voice Call أول مزوّد نسخ فوري مسجل.
- مزوّدو النسخ الفوري المضمنون: Deepgram (`deepgram`) وElevenLabs (`elevenlabs`) وMistral (`mistral`) وOpenAI (`openai`) وxAI (`xai`)، ويتم تسجيلهم بواسطة Plugins الخاصة بالمزوّدين.
- تعيش تهيئة المزوّد الخام التي يملكها المزوّد ضمن `streaming.providers.<providerId>`.
- بعد أن يرسل Twilio رسالة `start` لبث مقبول، يسجل Voice Call البث فوراً، ويضع الوسائط الواردة في قائمة انتظار عبر مزوّد النسخ بينما يتصل المزوّد، ويبدأ التحية الأولية فقط بعد أن يصبح النسخ الفوري جاهزاً.
- إذا كان `streaming.provider` يشير إلى مزوّد غير مسجل، أو لم يكن أي مزوّد مسجلاً، يسجل Voice Call تحذيراً ويتجاوز بث الوسائط بدلاً من إفشال Plugin بأكمله.
- `streaming.provider` اختياري. إذا لم يُعيّن، يستخدم Voice Call أول موفّر نسخ في الوقت الحقيقي مسجّل.
- موفّرو النسخ في الوقت الحقيقي المضمّنون: Deepgram (`deepgram`) وElevenLabs (`elevenlabs`) وMistral (`mistral`) وOpenAI (`openai`) وxAI (`xai`)، وتُسجّلها Plugins الموفّرين الخاصة بها.
- يوجد إعداد الموفّر الخام المملوك للموفّر تحت `streaming.providers.<providerId>`.
- بعد أن يرسل Twilio رسالة `start` لبث مقبول، يسجّل Voice Call البث فورًا، ويضع الوسائط الواردة في قائمة انتظار عبر موفّر النسخ أثناء اتصال الموفّر، ولا يبدأ التحية الأولية إلا بعد أن يصبح النسخ في الوقت الحقيقي جاهزًا.
- إذا أشار `streaming.provider` إلى موفّر غير مسجّل، أو لم يكن أي موفّر مسجّلًا، يسجّل Voice Call تحذيرًا ويتخطى بث الوسائط بدلًا من إفشال Plugin بالكامل.
### أمثلة مزوّدي البث
### أمثلة موفّري البث
<Tabs>
<Tab title="OpenAI">
@ -450,9 +451,9 @@ OpenClaw المضبوط دون دفع تكلفة رحلة ذهاب وعودة ك
## TTS للمكالمات
يستخدم Voice Call تهيئة `messages.tts` الأساسية لبث
الكلام في المكالمات. يمكنك تجاوزها ضمن تهيئة Plugin
**بالشكل نفسه** — فهي تدمج بعمق مع `messages.tts`.
يستخدم Voice Call إعداد `messages.tts` الأساسي لبث
الكلام في المكالمات. يمكنك تجاوزه ضمن إعداد Plugin
**بنفس الشكل** — إذ يُدمج بعمق مع `messages.tts`.
```json5
{
@ -469,17 +470,17 @@ OpenClaw المضبوط دون دفع تكلفة رحلة ذهاب وعودة ك
```
<Warning>
**يتم تجاهل Microsoft speech للمكالمات الصوتية.** يحتاج صوت الاتصالات الهاتفية إلى PCM؛
ولا يكشف نقل Microsoft الحالي عن إخراج PCM للاتصالات الهاتفية.
**يُتجاهل كلام Microsoft في مكالمات الصوت.** يحتاج صوت الاتصالات الهاتفية إلى PCM؛
ولا يوفّر نقل Microsoft الحالي مخرج PCM للاتصالات الهاتفية.
</Warning>
ملاحظات السلوك:
- يتم إصلاح مفاتيح `tts.<provider>` القديمة داخل تهيئة Plugin (`openai` و`elevenlabs` و`microsoft` و`edge`) بواسطة `openclaw doctor --fix`؛ يجب أن تستخدم التهيئة الملتزم بها `tts.providers.<provider>`.
- يتم استخدام TTS الأساسي عند تفعيل بث وسائط Twilio؛ وإلا تعود المكالمات إلى الأصوات الأصلية لدى المزوّد.
- إذا كان بث وسائط Twilio نشطاً بالفعل، لا يعود Voice Call إلى TwiML `<Say>`. إذا كان TTS للاتصالات الهاتفية غير متاح في تلك الحالة، يفشل طلب التشغيل بدلاً من مزج مساري تشغيل.
- عندما يعود TTS للاتصالات الهاتفية إلى مزوّد ثانوي، يسجل Voice Call تحذيراً مع سلسلة المزوّدين (`from` و`to` و`attempts`) للتصحيح.
- عندما يؤدي اقتحام Twilio أو تفكيك البث إلى مسح قائمة انتظار TTS المعلقة، تستقر طلبات التشغيل الموضوعة في قائمة الانتظار بدلاً من إبقاء المتصلين عالقين بانتظار اكتمال التشغيل.
- تُصلح `openclaw doctor --fix` مفاتيح `tts.<provider>` القديمة داخل إعداد Plugin (`openai` و`elevenlabs` و`microsoft` و`edge`)؛ يجب أن يستخدم الإعداد الملتزم به `tts.providers.<provider>`.
- يُستخدم TTS الأساسي عند تفعيل بث وسائط Twilio؛ وإلا تعود المكالمات إلى أصوات الموفّر الأصلية.
- إذا كان بث وسائط Twilio نشطًا بالفعل، لا يعود Voice Call إلى TwiML `<Say>`. إذا كان TTS الهاتفي غير متاح في تلك الحالة، يفشل طلب التشغيل بدلًا من خلط مساري تشغيل.
- عندما يعود TTS الهاتفي إلى موفّر ثانوي، يسجّل Voice Call تحذيرًا يتضمن سلسلة الموفّرين (`from` و`to` و`attempts`) للتصحيح.
- عندما يمسح الاقتحام الصوتي في Twilio أو تفكيك البث قائمة انتظار TTS المعلّقة، تُسوّى طلبات التشغيل المنتظرة بدلًا من إبقاء المتصلين عالقين في انتظار اكتمال التشغيل.
### أمثلة TTS
@ -548,7 +549,7 @@ OpenClaw المضبوط دون دفع تكلفة رحلة ذهاب وعودة ك
## المكالمات الواردة
القيمة الافتراضية لسياسة الوارد هي `disabled`. لتفعيل المكالمات الواردة، اضبط:
تكون سياسة الوارد افتراضيًا `disabled`. لتفعيل المكالمات الواردة، عيّن:
```json5
{
@ -559,33 +560,32 @@ OpenClaw المضبوط دون دفع تكلفة رحلة ذهاب وعودة ك
```
<Warning>
`inboundPolicy: "allowlist"` هي شاشة معرف متصل منخفضة الضمان. يقوم
Plugin بتطبيع قيمة `From` المقدمة من المزوّد ويقارنها مع
`allowFrom`. تتحقق مصادقة Webhook من تسليم المزوّد وسلامة
الحمولة، لكنها **لا** تثبت ملكية رقم المتصل عبر PSTN/VoIP.
تعامل مع `allowFrom` كترشيح لمعرف المتصل، وليس كهوية متصل
قوية.
`inboundPolicy: "allowlist"` هو فحص منخفض الضمان لمعرّف المتصل. يقوم
Plugin بتطبيع قيمة `From` التي يوفّرها الموفّر ومقارنتها مع
`allowFrom`. يتحقق Webhook من أصالة تسليم الموفّر
وسلامة الحمولة، لكنه **لا** يثبت ملكية رقم المتصل عبر PSTN/VoIP.
تعامل مع `allowFrom` كترشيح لمعرّف المتصل، وليس كهوية قوية للمتصل.
</Warning>
تستخدم الردود التلقائية نظام الوكيل. اضبطها باستخدام `responseModel` و
`responseSystemPrompt` و`responseTimeoutMs`.
### التوجيه لكل رقم
### التوجيه حسب الرقم
استخدم `numbers` عندما يتلقى Plugin واحد من Voice Call مكالمات لعدة أرقام هاتفية
ويجب أن يتصرف كل رقم كخط مختلف. على سبيل المثال، يمكن لرقم واحد
استخدام مساعد شخصي غير رسمي بينما يستخدم رقم آخر شخصية عمل،
ووكيل رد مختلفاً، وصوت TTS مختلفاً.
استخدام مساعد شخصي عفوي بينما يستخدم رقم آخر شخصية عمل
ووكيل رد مختلفًا وصوت TTS مختلفًا.
يتم اختيار المسارات من رقم `To` المطلوب المقدم من المزوّد. يجب أن تكون المفاتيح
تُختار المسارات من رقم `To` المطلوب الذي يوفّره الموفّر. يجب أن تكون المفاتيح
أرقام E.164. عند وصول مكالمة، يحل Voice Call المسار المطابق مرة واحدة،
ويخزن المسار المطابق في سجل المكالمة، ويعيد استخدام تلك التهيئة الفعالة
للتحية، ومسار الرد التلقائي الكلاسيكي، ومسار الاستشارة الفورية، وتشغيل TTS.
إذا لم يطابق أي مسار، يتم استخدام تهيئة Voice Call العامة.
لا تستخدم المكالمات الصادرة `numbers`؛ مرر الهدف الصادر والرسالة
ويخزن المسار المطابق في سجل المكالمة، ويعيد استخدام ذلك الإعداد الفعّال
للتحية، ومسار الرد التلقائي الكلاسيكي، ومسار الاستشارة في الوقت الحقيقي، وتشغيل TTS.
إذا لم يطابق أي مسار، يُستخدم إعداد Voice Call العام.
لا تستخدم المكالمات الصادرة `numbers`؛ مرّر الهدف الصادر والرسالة
والجلسة صراحةً عند بدء المكالمة.
تدعم تجاوزات المسارات حالياً:
تدعم تجاوزات المسارات حاليًا:
- `inboundGreeting`
- `tts`
@ -594,8 +594,8 @@ Plugin بتطبيع قيمة `From` المقدمة من المزوّد ويقا
- `responseSystemPrompt`
- `responseTimeoutMs`
تدمج قيمة المسار `tts` بعمق فوق تهيئة `tts` العامة في Voice Call، لذا
يمكنك عادةً تجاوز صوت المزوّد فقط:
تُدمج قيمة مسار `tts` بعمق فوق إعداد `tts` العام في Voice Call، لذا
يمكنك عادةً تجاوز صوت الموفّر فقط:
```json5
{
@ -623,51 +623,51 @@ Plugin بتطبيع قيمة `From` المقدمة من المزوّد ويقا
### عقد المخرجات المنطوقة
بالنسبة للردود التلقائية، يضيف Voice Call عقد مخرجات منطوقة صارماً إلى
موجّه النظام:
بالنسبة إلى الردود التلقائية، يضيف Voice Call عقد مخرجات منطوقة صارمًا إلى
موجه النظام:
```text
{"spoken":"..."}
```
يستخرج Voice Call نص الكلام دفاعياً:
يستخرج Voice Call نص الكلام بشكل دفاعي:
- يتجاهل الحمولات المعلّمة كمحتوى تفكير/خطأ.
- يحلل JSON المباشر، أو JSON داخل سياج، أو مفاتيح `"spoken"` المضمنة.
- يعود إلى النص العادي ويزيل فقرات المقدمة التي تبدو كتخطيط/بيانات وصفية.
- يتجاهل الحمولات الموسومة كمحتوى استدلال/خطأ.
- يحلل JSON مباشرًا، أو JSON داخل سياج، أو مفاتيح `"spoken"` ضمنية.
- يعود إلى النص العادي ويزيل فقرات المقدمة المحتملة للتخطيط/البيانات الوصفية.
يحافظ ذلك على تركيز التشغيل المنطوق على النص الموجه إلى المتصل، ويتجنب
هذا يبقي تشغيل الكلام مركّزًا على النص الموجّه للمتصل ويتجنب
تسريب نص التخطيط إلى الصوت.
### سلوك بدء المحادثة
بالنسبة لمكالمات `conversation` الصادرة، يرتبط التعامل مع الرسالة الأولى بحالة
التشغيل الحية:
بالنسبة إلى مكالمات `conversation` الصادرة، ترتبط معالجة الرسالة الأولى بحالة
التشغيل المباشر:
- لا يتم كبح مسح قائمة انتظار الاقتحام والرد التلقائي إلا أثناء نطق التحية الأولية بنشاط.
- يُمنع مسح قائمة انتظار الاقتحام الصوتي والرد التلقائي فقط أثناء نطق التحية الأولية بنشاط.
- إذا فشل التشغيل الأولي، تعود المكالمة إلى `listening` وتبقى الرسالة الأولية في قائمة الانتظار لإعادة المحاولة.
- يبدأ التشغيل الأولي لبث Twilio عند اتصال البث دون تأخير إضافي.
- يجهض الاقتحام التشغيل النشط ويمسح إدخالات Twilio TTS الموضوعة في قائمة الانتظار والتي لم يبدأ تشغيلها بعد. يتم حل الإدخالات الممسوحة كمتجاوزة، بحيث يمكن لمنطق الرد اللاحق أن يستمر دون انتظار صوت لن يتم تشغيله أبداً.
- تستخدم محادثات الصوت الفوري الدور الافتتاحي الخاص بالبث الفوري نفسه. لا ينشر Voice Call تحديث TwiML `<Say>` قديماً لتلك الرسالة الأولية، لذلك تبقى جلسات `<Connect><Stream>` الصادرة متصلة.
- يبدأ التشغيل الأولي لبث Twilio عند اتصال البث من دون تأخير إضافي.
- يوقف الاقتحام الصوتي التشغيل النشط ويمسح إدخالات Twilio TTS الموضوعة في قائمة الانتظار والتي لم يبدأ تشغيلها بعد. تُحل الإدخالات الممسوحة كمتخطاة، بحيث يمكن لمنطق الرد اللاحق أن يستمر من دون انتظار صوت لن يُشغّل أبدًا.
- تستخدم محادثات الصوت في الوقت الحقيقي الدور الافتتاحي الخاص ببث الوقت الحقيقي. لا ينشر Voice Call تحديث TwiML قديمًا من نوع `<Say>` لتلك الرسالة الأولية، لذلك تبقى جلسات `<Connect><Stream>` الصادرة متصلة.
### مهلة سماح انقطاع بث Twilio
### مهلة فصل بث Twilio
عندما ينقطع بث وسائط Twilio، ينتظر Voice Call مدة **2000 ms** قبل
إنهاء المكالمة تلقائياً:
عند انقطاع بث وسائط Twilio، ينتظر Voice Call **2000 ms** قبل
إنهاء المكالمة تلقائيًا:
- إذا أعاد البث الاتصال خلال تلك النافذة، يتم إلغاء الإنهاء التلقائي.
- إذا لم تتم إعادة تسجيل أي بث بعد فترة السماح، يتم إنهاء المكالمة لمنع بقاء مكالمات نشطة عالقة.
- إذا أعاد البث الاتصال خلال تلك النافذة، يُلغى الإنهاء التلقائي.
- إذا لم يُسجّل أي بث من جديد بعد فترة المهلة، تُنهى المكالمة لمنع بقاء مكالمات نشطة عالقة.
## حاصد المكالمات القديمة
استخدم `staleCallReaperSeconds` لإنهاء المكالمات التي لا تتلقى أبداً Webhook
نهائياً (على سبيل المثال، مكالمات وضع الإشعار التي لا تكتمل أبداً). القيمة الافتراضية
استخدم `staleCallReaperSeconds` لإنهاء المكالمات التي لا تتلقى أبدًا Webhook
نهائيًا (على سبيل المثال، مكالمات وضع الإشعار التي لا تكتمل أبدًا). القيمة الافتراضية
هي `0` (معطّل).
النطاقات الموصى بها:
- **الإنتاج:** من `120` إلى `300` ثانية للتدفقات بنمط الإشعار.
- أبقِ هذه القيمة **أعلى من `maxDurationSeconds`** حتى تتمكن الاستدعاءات العادية من الاكتمال. نقطة بداية جيدة هي `maxDurationSeconds + 3060` ثانية.
- **الإنتاج:** من `120` إلى `300` ثانية لتدفقات نمط الإشعار.
- اجعل هذه القيمة **أعلى من `maxDurationSeconds`** حتى تكتمل الاستدعاءات العادية. نقطة بداية جيدة هي `maxDurationSeconds + 3060` ثانية.
```json5
{
@ -686,28 +686,28 @@ Plugin بتطبيع قيمة `From` المقدمة من المزوّد ويقا
## أمان Webhook
عندما يكون Proxy أو نفق أمام Gateway، يعيد Plugin
عندما يكون proxy أو tunnel أمام Gateway، يعيد Plugin
بناء عنوان URL العام للتحقق من التوقيع. تتحكم هذه الخيارات
في رؤوس التوجيه التي يتم الوثوق بها:
في رؤوس إعادة التوجيه الموثوقة:
<ParamField path="webhookSecurity.allowedHosts" type="string[]">
السماح بالمضيفين من رؤوس التوجيه.
قائمة سماح للمضيفين من رؤوس إعادة التوجيه.
</ParamField>
<ParamField path="webhookSecurity.trustForwardingHeaders" type="boolean">
الوثوق بالرؤوس المعاد توجيهها دون قائمة سماح.
الوثوق برؤوس إعادة التوجيه من دون قائمة سماح.
</ParamField>
<ParamField path="webhookSecurity.trustedProxyIPs" type="string[]">
الوثوق بالرؤوس المعاد توجيهها فقط عندما يطابق عنوان IP البعيد للطلب القائمة.
لا تثق برؤوس إعادة التوجيه إلا عندما يطابق عنوان IP البعيد للطلب القائمة.
</ParamField>
حمايات إضافية:
- تم تفعيل **الحماية من إعادة تشغيل Webhook** لـ Twilio وPlivo. يتم الإقرار بطلبات Webhook الصالحة المعاد تشغيلها، لكن يتم تخطي آثارها الجانبية.
- تتضمن أدوار محادثة Twilio رمزًا لكل دور في عمليات رد نداء `<Gather>`، لذلك لا يمكن لردود نداء الكلام القديمة أو المعاد تشغيلها تلبية دور نص منسوخ معلّق أحدث.
- يتم رفض طلبات Webhook غير المصادق عليها قبل قراءة الجسم عندما تكون رؤوس التوقيع المطلوبة من المزوّد مفقودة.
- يستخدم Webhook الخاص بالمكالمات الصوتية ملف تعريف الجسم المشترك قبل المصادقة (64 كيلوبايت / 5 ثوانٍ) بالإضافة إلى حد للطلبات قيد التنفيذ لكل عنوان IP قبل التحقق من التوقيع.
- يتم تفعيل **الحماية من إعادة تشغيل Webhook** لـ Twilio وPlivo. يتم الإقرار بطلبات Webhook الصالحة المعاد تشغيلها، لكن يتم تخطي آثارها الجانبية.
- تتضمن منعطفات محادثة Twilio رمزًا مميزًا لكل منعطف في استدعاءات `<Gather>`، لذلك لا يمكن لاستدعاءات الكلام القديمة/المعاد تشغيلها إرضاء منعطف نص معلق أحدث.
- يتم رفض طلبات Webhook غير الموثقة قبل قراءة الجسم عندما تكون رؤوس التوقيع المطلوبة من المزود مفقودة.
- يستخدم Webhook المكالمات الصوتية ملف جسم ما قبل المصادقة المشترك (64 كيلوبايت / 5 ثوانٍ)، إضافة إلى حد أقصى للطلبات الجارية لكل عنوان IP قبل التحقق من التوقيع.
مثال بمضيف عام ثابت:
مثال مع مضيف عام مستقر:
```json5
{
@ -741,15 +741,15 @@ openclaw voicecall latency # summarize turn latency from lo
openclaw voicecall expose --mode funnel
```
عندما يكون Gateway قيد التشغيل بالفعل، تفوّض أوامر `voicecall` التشغيلية
عندما يكون Gateway قيد التشغيل بالفعل، تفوض أوامر `voicecall` التشغيلية
إلى وقت تشغيل المكالمات الصوتية المملوك لـ Gateway حتى لا يربط CLI خادم
Webhook ثانيًا. إذا لم يكن أي Gateway قابلًا للوصول، تعود الأوامر إلى
وقت تشغيل CLI مستقل.
يقرأ `latency` ملف `calls.jsonl` من مسار تخزين المكالمات الصوتية الافتراضي.
استخدم `--file <path>` للإشارة إلى سجل مختلف و`--last <n>` لحصر
التحليل في آخر N سجلًا (الافتراضي 200). يتضمن الإخراج p50/p90/p99
لكمون الدور وأوقات انتظار الاستماع.
استخدم `--file <path>` للإشارة إلى سجل مختلف و`--last <n>` لقصر
التحليل على آخر N سجلات (الافتراضي 200). يتضمن الخرج p50/p90/p99
لزمن انتقال المنعطف وأوقات انتظار الاستماع.
## أداة الوكيل
@ -764,7 +764,7 @@ Webhook ثانيًا. إذا لم يكن أي Gateway قابلًا للوصول
| `end_call` | `callId` |
| `get_status` | `callId` |
يوفّر هذا المستودع مستند Skills مطابقًا في `skills/voice-call/SKILL.md`.
يشحن هذا المستودع مستند Skill مطابقًا في `skills/voice-call/SKILL.md`.
## Gateway RPC
@ -777,13 +777,12 @@ Webhook ثانيًا. إذا لم يكن أي Gateway قابلًا للوصول
| `voicecall.end` | `callId` |
| `voicecall.status` | `callId` |
يكون `dtmfSequence` صالحًا فقط مع `mode: "conversation"`. يجب على مكالمات
وضع الإشعار استخدام `voicecall.dtmf` بعد وجود المكالمة إذا احتاجت إلى
أرقام بعد الاتصال.
لا يكون `dtmfSequence` صالحًا إلا مع `mode: "conversation"`. ينبغي لمكالمات نمط الإشعار
استخدام `voicecall.dtmf` بعد وجود المكالمة إذا كانت تحتاج إلى أرقام بعد الاتصال.
## استكشاف الأخطاء وإصلاحها
### يفشل الإعداد في إظهار Webhook
### فشل الإعداد في إتاحة Webhook
شغّل الإعداد من البيئة نفسها التي تشغّل Gateway:
@ -792,19 +791,19 @@ openclaw voicecall setup
openclaw voicecall setup --json
```
بالنسبة إلى `twilio` و`telnyx` و`plivo`، يجب أن تكون حالة `webhook-exposure` خضراء. يفشل
`publicUrl` المكوّن أيضًا عندما يشير إلى مساحة شبكة محلية أو خاصة،
بالنسبة إلى `twilio` و`telnyx` و`plivo`، يجب أن يكون `webhook-exposure` أخضر. لا يزال
`publicUrl` المكوّن يفشل عندما يشير إلى مساحة شبكة محلية أو خاصة،
لأن شركة الاتصالات لا تستطيع معاودة الاتصال بهذه العناوين. لا تستخدم
`localhost` أو `127.0.0.1` أو `0.0.0.0` أو `10.x` أو `172.16.x`-`172.31.x`
أو `192.168.x` أو `169.254.x` أو `fc00::/7` أو `fd00::/8` كقيمة `publicUrl`.
أو `192.168.x` أو `169.254.x` أو `fc00::/7` أو `fd00::/8` كـ `publicUrl`.
ترسل مكالمات Twilio الصادرة بوضع الإشعار TwiML الأولي الخاص بـ `<Say>` مباشرة في
طلب إنشاء المكالمة، لذلك لا تعتمد أول رسالة منطوقة على جلب Twilio
لـ Webhook TwiML. يبقى Webhook عام مطلوبًا لردود نداء الحالة،
ومكالمات المحادثة، وDTMF قبل الاتصال، والبث في الوقت الحقيقي، والتحكم في المكالمة
ترسل مكالمات Twilio الصادرة بنمط الإشعار TwiML الأولي لـ `<Say>` مباشرة في
طلب إنشاء المكالمة، لذلك لا تعتمد الرسالة المنطوقة الأولى على جلب Twilio
لـ Webhook TwiML. لا يزال Webhook عام مطلوبًا لاستدعاءات الحالة،
ومكالمات المحادثة، وDTMF قبل الاتصال، والتدفقات الفورية، والتحكم بالمكالمة
بعد الاتصال.
استخدم مسار إظهار عام واحدًا:
استخدم مسار إتاحة عام واحدًا:
```json5
{
@ -833,9 +832,9 @@ openclaw voicecall smoke
`voicecall smoke` هو تشغيل تجريبي جاف ما لم تمرر `--yes`.
### فشل بيانات اعتماد المزوّد
### فشل بيانات اعتماد المزود
تحقق من المزوّد المحدد وحقول بيانات الاعتماد المطلوبة:
تحقق من المزود المحدد وحقول بيانات الاعتماد المطلوبة:
- Twilio: `twilio.accountSid` و`twilio.authToken` و`fromNumber`، أو
`TWILIO_ACCOUNT_SID` و`TWILIO_AUTH_TOKEN` و`TWILIO_FROM_NUMBER`.
@ -843,13 +842,13 @@ openclaw voicecall smoke
`fromNumber`.
- Plivo: `plivo.authId` و`plivo.authToken` و`fromNumber`.
يجب أن توجد بيانات الاعتماد على مضيف Gateway. لا يؤثر تعديل ملف تعريف
صدفة محلي في Gateway قيد التشغيل بالفعل حتى يعيد التشغيل أو يعيد تحميل
يجب أن تكون بيانات الاعتماد موجودة على مضيف Gateway. لا يؤثر تعديل ملف تعريف shell محلي
في Gateway قيد التشغيل بالفعل حتى يعاد تشغيله أو يعاد تحميل
بيئته.
### تبدأ المكالمات لكن Webhooks الخاصة بالمزوّد لا تصل
### تبدأ المكالمات لكن Webhook المزود لا يصل
تأكد من أن لوحة تحكم المزوّد تشير إلى عنوان URL العام الدقيق لـ Webhook:
تأكد من أن وحدة تحكم المزود تشير إلى عنوان URL العام الدقيق لـ Webhook:
```text
https://voice.example.com/voice/webhook
@ -866,80 +865,80 @@ openclaw logs --follow
الأسباب الشائعة:
- يشير `publicUrl` إلى مسار مختلف عن `serve.path`.
- تغيّر عنوان URL للنفق بعد بدء Gateway.
- يقوم Proxy بتمرير الطلب لكنه يزيل أو يعيد كتابة رؤوس المضيف/البروتوكول.
- يوجّه الجدار الناري أو DNS اسم المضيف العام إلى مكان آخر غير Gateway.
- أُعيد تشغيل Gateway دون تفعيل Plugin المكالمات الصوتية.
- تغيّر عنوان URL الخاص بالنفق بعد بدء Gateway.
- يمرر proxy الطلب لكنه يزيل أو يعيد كتابة رؤوس host/proto.
- يوجه جدار الحماية أو DNS اسم المضيف العام إلى مكان آخر غير Gateway.
- تمت إعادة تشغيل Gateway من دون تفعيل Plugin Voice Call.
عندما يكون Reverse Proxy أو نفق أمام Gateway، اضبط
`webhookSecurity.allowedHosts` على اسم المضيف العام، أو استخدم
`webhookSecurity.trustedProxyIPs` لعنوان Proxy معروف. استخدم
`webhookSecurity.trustForwardingHeaders` فقط عندما تكون حدود Proxy تحت
عندما يكون reverse proxy أو tunnel أمام Gateway، عيّن
`webhookSecurity.allowedHosts` إلى اسم المضيف العام، أو استخدم
`webhookSecurity.trustedProxyIPs` لعنوان proxy معروف. استخدم
`webhookSecurity.trustForwardingHeaders` فقط عندما تكون حدود proxy تحت
سيطرتك.
### فشل التحقق من التوقيع
يتم فحص تواقيع المزوّد مقابل عنوان URL العام الذي يعيد OpenClaw بناءه
يتم التحقق من تواقيع المزود مقابل عنوان URL العام الذي يعيد OpenClaw بناءه
من الطلب الوارد. إذا فشلت التواقيع:
- تأكد من أن عنوان URL الخاص بـ Webhook لدى المزوّد يطابق `publicUrl` تمامًا، بما في ذلك
- تأكد من أن عنوان URL الخاص بـ Webhook لدى المزود يطابق `publicUrl` تمامًا، بما في ذلك
المخطط والمضيف والمسار.
- بالنسبة إلى عناوين URL في الطبقة المجانية من ngrok، حدّث `publicUrl` عندما يتغير اسم مضيف النفق.
- تأكد من أن Proxy يحافظ على رؤوس المضيف والبروتوكول الأصلية، أو اضبط
- تأكد من أن proxy يحافظ على رؤوس المضيف والبروتوكول الأصلية، أو اضبط
`webhookSecurity.allowedHosts`.
- لا تفعّل `skipSignatureVerification` خارج الاختبار المحلي.
### فشل انضمامات Google Meet عبر Twilio
### فشل انضمام Google Meet عبر Twilio
يستخدم Google Meet هذا Plugin لانضمامات الطلب الهاتفي عبر Twilio. تحقق أولًا من المكالمات الصوتية:
يستخدم Google Meet هذا Plugin لعمليات الانضمام عبر اتصال Twilio. تحقق أولًا من Voice Call:
```bash
openclaw voicecall setup
openclaw voicecall smoke --to "+15555550123"
```
ثم تحقق صراحة من نقل Google Meet:
ثم تحقق من نقل Google Meet صراحة:
```bash
openclaw googlemeet setup --transport twilio
```
إذا كانت المكالمات الصوتية سليمة لكن مشارك Meet لا ينضم أبدًا، فتحقق من رقم
الاتصال الهاتفي لـ Meet ورقم PIN و`--dtmf-sequence`. يمكن أن تكون المكالمة الهاتفية سليمة بينما
إذا كان Voice Call أخضر لكن مشارك Meet لا ينضم أبدًا، فتحقق من رقم الاتصال الهاتفي لـ Meet
ورقم PIN و`--dtmf-sequence`. يمكن أن تكون المكالمة الهاتفية سليمة بينما
يرفض الاجتماع تسلسل DTMF غير صحيح أو يتجاهله.
يمرر Google Meet تسلسل DTMF الخاص بـ Meet ونص المقدمة إلى `voicecall.start`.
بالنسبة إلى مكالمات Twilio، تقدّم المكالمات الصوتية TwiML الخاص بـ DTMF أولًا، ثم تعيد التوجيه إلى
Webhook، ثم تفتح بث الوسائط في الوقت الحقيقي حتى يتم إنشاء المقدمة المحفوظة
بعد أن ينضم المشارك الهاتفي إلى الاجتماع.
يبدأ Google Meet ساق هاتف Twilio عبر `voicecall.start` مع
تسلسل DTMF قبل الاتصال. تتضمن التسلسلات المشتقة من PIN قيمة
`voiceCall.dtmfDelayMs` الخاصة بـ Plugin Google Meet كأرقام انتظار Twilio بادئة. الافتراضي هو 12 ثانية
لأن مطالبات الاتصال الهاتفي في Meet قد تصل متأخرة. ثم يعيد Voice Call التوجيه إلى
المعالجة الفورية قبل طلب تحية المقدمة.
استخدم `openclaw logs --follow` لتتبع المرحلة المباشرة. يسجّل انضمام Twilio Meet
السليم هذا الترتيب:
استخدم `openclaw logs --follow` لتتبع المرحلة المباشرة. يسجل انضمام Twilio Meet السليم
هذا الترتيب:
- يفوّض Google Meet انضمام Twilio إلى المكالمات الصوتية.
- تخزّن المكالمات الصوتية TwiML الخاص بـ DTMF قبل الاتصال.
- يتم استهلاك TwiML الأولي من Twilio وتقديمه قبل المعالجة في الوقت الحقيقي.
- تقدّم المكالمات الصوتية TwiML في الوقت الحقيقي لمكالمة Twilio.
- يبدأ الجسر في الوقت الحقيقي مع وضع التحية الأولية في قائمة الانتظار.
- يفوض Google Meet انضمام Twilio إلى Voice Call.
- يخزن Voice Call TwiML DTMF قبل الاتصال.
- يتم استهلاك TwiML الأولي من Twilio وتقديمه قبل المعالجة الفورية.
- يقدم Voice Call TwiML الفوري لمكالمة Twilio.
- يطلب Google Meet كلام المقدمة باستخدام `voicecall.speak` بعد تأخير ما بعد DTMF.
لا يزال `openclaw voicecall tail` يعرض سجلات المكالمات المحفوظة؛ وهو مفيد
لحالة المكالمة والنصوص المنسوخة، لكن لا يظهر كل انتقال Webhook/الوقت الحقيقي
هناك.
لا يزال `openclaw voicecall tail` يعرض سجلات المكالمات المستمرة؛ وهو مفيد
لحالة المكالمة والنصوص، لكن لا يظهر هناك كل انتقال Webhook/فوري.
### مكالمة الوقت الحقيقي بلا كلام
### لا يوجد كلام في المكالمة الفورية
تأكد من تفعيل وضع صوت واحد فقط. لا يمكن أن يكون كل من `realtime.enabled` و
`streaming.enabled` بالقيمة true في الوقت نفسه.
تأكد من تفعيل وضع صوت واحد فقط. لا يمكن أن يكون `realtime.enabled` و
`streaming.enabled` كلاهما true.
بالنسبة إلى مكالمات Twilio في الوقت الحقيقي، تحقق أيضًا مما يلي:
بالنسبة إلى مكالمات Twilio الفورية، تحقق أيضًا مما يلي:
- تم تحميل Plugin مزوّد الوقت الحقيقي وتسجيله.
- `realtime.provider` غير مضبوط أو يذكر مزوّدًا مسجلًا.
- مفتاح API الخاص بالمزوّد متاح لعملية Gateway.
- يعرض `openclaw logs --follow` تقديم TwiML في الوقت الحقيقي، وبدء الجسر في الوقت الحقيقي،
- تم تحميل Plugin مزود فوري وتسجيله.
- `realtime.provider` غير مضبوط أو يسمي مزودًا مسجلًا.
- مفتاح API الخاص بالمزود متاح لعملية Gateway.
- يعرض `openclaw logs --follow` تقديم TwiML الفوري، وبدء الجسر الفوري،
ووضع التحية الأولية في قائمة الانتظار.
## ذو صلة
## ذات صلة
- [وضع التحدث](/ar/nodes/talk)
- [تحويل النص إلى كلام](/ar/tools/tts)

File diff suppressed because it is too large Load Diff

View File

@ -4,38 +4,38 @@ read_when:
- فهم قواعد اكتشاف Plugin وتحميله
- العمل مع حزم Plugin المتوافقة مع Codex/Claude
sidebarTitle: Install and Configure
summary: تثبيت وتهيئة وإدارة Plugins OpenClaw
summary: ثبّت Plugins الخاصة بـ OpenClaw وتهيئتها وإدارتها
title: Plugins
x-i18n:
generated_at: "2026-05-06T08:18:56Z"
generated_at: "2026-05-06T09:04:02Z"
model: gpt-5.5
provider: openai
source_hash: 118c856507965f496d87edc1fef8cb67d36c7ef62acc84d5ad130ffd3a3f5568
source_hash: 0d68ad3cbd040d3f973d219cf273a792f11df382f6c4ccbf80c07acb0d26c658
source_path: tools/plugin.md
workflow: 16
---
توسّع Plugins قدرات OpenClaw بميزات جديدة: القنوات، ومزوّدو النماذج،
وأطر تشغيل الوكلاء، والأدوات، وSkills، والكلام، والتفريغ الفوري، والصوت
الفوري، وفهم الوسائط، وتوليد الصور، وتوليد الفيديو، وجلب الويب، والبحث في
الويب، والمزيد. بعض Plugins هي **أساسية** (تُشحن مع OpenClaw)، وبعضها
**خارجية**. تُنشر معظم Plugins الخارجية وتُكتشف عبر
[ClawHub](/ar/tools/clawhub). يظل npm مدعومًا للتثبيت المباشر ولمجموعة مؤقتة
من حزم Plugin المملوكة لـ OpenClaw ريثما يكتمل ذلك الانتقال.
توسّع Plugins إمكانات OpenClaw بإضافة قدرات جديدة: القنوات، ومزوّدو النماذج،
وأطر تشغيل الوكلاء، والأدوات، وSkills، والكلام، والنسخ الفوري، والصوت الفوري،
وفهم الوسائط، وتوليد الصور، وتوليد الفيديو، وجلب الويب، والبحث في الويب،
وغير ذلك. بعض Plugins **أساسية** (تُشحن مع OpenClaw)، وأخرى **خارجية**.
تُنشر معظم Plugins الخارجية وتُكتشف عبر
[ClawHub](/ar/tools/clawhub). يظل npm مدعومًا للتثبيت المباشر ولمجموعة مؤقتة من
حزم Plugins المملوكة لـ OpenClaw إلى أن يكتمل هذا الانتقال.
## البدء السريع
لأمثلة التثبيت والنسخ واللصق، والسرد، وإلغاء التثبيت، والتحديث، والنشر، راجع
لأمثلة التثبيت والنسخ واللصق، والقوائم، وإلغاء التثبيت، والتحديث، والنشر، راجع
[إدارة Plugins](/ar/plugins/manage-plugins).
<Steps>
<Step title="See what is loaded">
<Step title="راجع ما تم تحميله">
```bash
openclaw plugins list
```
</Step>
<Step title="Install a plugin">
<Step title="ثبّت Plugin">
```bash
# Search ClawHub plugins
openclaw plugins search "calendar"
@ -45,6 +45,7 @@ x-i18n:
# From npm
openclaw plugins install npm:@acme/openclaw-plugin
openclaw plugins install npm-pack:./openclaw-plugin-1.2.3.tgz
# From git
openclaw plugins install git:github.com/acme/openclaw-plugin@v1.0.0
@ -56,7 +57,7 @@ x-i18n:
</Step>
<Step title="Restart the Gateway">
<Step title="أعد تشغيل Gateway">
```bash
openclaw gateway restart
```
@ -65,17 +66,17 @@ x-i18n:
</Step>
<Step title="Chat-native management">
في Gateway قيد التشغيل، يؤدي الأمران المخصصان للمالك فقط `/plugins enable` و`/plugins disable`
إلى تشغيل معيد تحميل إعدادات Gateway. يعيد Gateway تحميل أسطح وقت تشغيل Plugin
داخل العملية، وتعيد دورات الوكيل الجديدة بناء قائمة أدواتها من السجل
المحدّث. يغيّر `/plugins install` شيفرة مصدر Plugin، لذلك يطلب
Gateway إعادة تشغيل بدلًا من التظاهر بأن العملية الحالية يمكنها
إعادة تحميل الوحدات المستوردة مسبقًا بأمان.
<Step title="إدارة مدمجة في المحادثة">
في Gateway قيد التشغيل، تؤدي أوامر المالك فقط `/plugins enable` و`/plugins disable`
إلى تشغيل معيد تحميل إعدادات Gateway. يعيد Gateway تحميل أسطح تشغيل Plugin
داخل العملية، وتعيد أدوار الوكيل الجديدة بناء قائمة أدواتها من السجل
المحدّث. يغيّر `/plugins install` الشيفرة المصدرية لـ Plugin، لذلك يطلب
Gateway إعادة التشغيل بدلًا من الادعاء بأن العملية الحالية يمكنها إعادة
تحميل الوحدات التي سبق استيرادها بأمان.
</Step>
<Step title="Verify the plugin">
<Step title="تحقق من Plugin">
```bash
openclaw plugins inspect <plugin-id> --runtime --json
@ -83,14 +84,14 @@ x-i18n:
openclaw <plugin-command> --help
```
استخدم `--runtime` عندما تحتاج إلى إثبات الأدوات المسجلة، أو الخدمات، أو طرق Gateway،
أو الخطافات، أو أوامر CLI المملوكة لـ Plugin. أما `inspect` العادي فهو فحص بارد
للبيان/السجل ويتجنب عمدًا استيراد وقت تشغيل Plugin.
استخدم `--runtime` عندما تحتاج إلى إثبات الأدوات أو الخدمات أو أساليب Gateway
أو الخطافات أو أوامر CLI المملوكة لـ Plugin والمسجلة. أما `inspect` العادي
فهو فحص بارد للبيان/السجل، ويتجنب عمدًا استيراد وقت تشغيل Plugin.
</Step>
</Steps>
إذا كنت تفضّل التحكم الأصلي عبر المحادثة، فعّل `commands.plugins: true` واستخدم:
إذا كنت تفضّل التحكم المدمج في المحادثة، فعّل `commands.plugins: true` واستخدم:
```text
/plugin install clawhub:<package>
@ -98,114 +99,116 @@ x-i18n:
/plugin enable <plugin-id>
```
يستخدم مسار التثبيت محلّل المصدر نفسه الذي تستخدمه CLI: مسار/أرشيف محلي، أو
`clawhub:<pkg>` صريح، أو `npm:<pkg>` صريح، أو `git:<repo>` صريح، أو مواصفة حزمة
مجردة عبر npm.
يستخدم مسار التثبيت محلل المصادر نفسه الذي يستخدمه CLI: مسار/أرشيف محلي،
أو `clawhub:<pkg>` صريح، أو `npm:<pkg>` صريح، أو `npm-pack:<path.tgz>` صريح،
أو `git:<repo>` صريح، أو مواصفة حزمة مجردة عبر npm.
إذا كانت الإعدادات غير صالحة، يفشل التثبيت عادةً بإغلاق آمن ويوجهك إلى
`openclaw doctor --fix`. الاستثناء الوحيد للاسترداد هو مسار ضيق لإعادة تثبيت Plugin
مضمّن لـ Plugins التي تختار الاشتراك في
إذا كانت الإعدادات غير صالحة، يفشل التثبيت عادةً بإغلاق آمن ويوجّهك إلى
`openclaw doctor --fix`. استثناء الاسترداد الوحيد هو مسار ضيق لإعادة تثبيت
Plugin مضمّن لـ Plugins التي تختار استخدام
`openclaw.install.allowInvalidConfigRecovery`.
أثناء بدء تشغيل Gateway، تفشل إعدادات Plugin غير الصالحة بإغلاق آمن مثل أي إعدادات
أخرى غير صالحة. شغّل `openclaw doctor --fix` لعزل إعدادات Plugin السيئة عبر
تعطيل إدخال Plugin ذلك وإزالة حمولة إعداداته غير الصالحة؛ وتحتفظ نسخة الإعدادات
الاحتياطية العادية بالقيم السابقة.
عندما تشير إعدادات قناة إلى Plugin لم يعد قابلًا للاكتشاف بينما يبقى معرّف Plugin
القديم نفسه في إعدادات Plugin أو سجلات التثبيت، يسجل بدء تشغيل Gateway تحذيرات
ويتخطى تلك القناة بدلًا من حظر كل القنوات الأخرى.
شغّل `openclaw doctor --fix` لإزالة إدخالات القناة/Plugin القديمة؛ أما مفاتيح
القنوات غير المعروفة بلا دليل على Plugin قديم فتظل تفشل التحقق كي تبقى الأخطاء
المطبعية مرئية.
إذا ضُبط `plugins.enabled: false`، تُعامل مراجع Plugin القديمة كخامدة:
يتخطى بدء تشغيل Gateway عمل اكتشاف/تحميل Plugin، ويحافظ `openclaw doctor`
على إعدادات Plugin المعطلة بدلًا من إزالتها تلقائيًا. أعد تفعيل Plugins قبل
تشغيل تنظيف doctor إذا كنت تريد إزالة معرّفات Plugin القديمة.
أثناء بدء تشغيل Gateway، تفشل إعدادات Plugin غير الصالحة بإغلاق آمن مثل أي
إعدادات أخرى غير صالحة. شغّل `openclaw doctor --fix` لعزل إعدادات Plugin السيئة
عبر تعطيل إدخال ذلك Plugin وإزالة حمولة إعداداته غير الصالحة؛ وتحتفظ نسخة
الإعدادات الاحتياطية العادية بالقيم السابقة.
عندما تشير إعدادات قناة إلى Plugin لم يعد قابلًا للاكتشاف، لكن معرف Plugin
القديم نفسه لا يزال موجودًا في إعدادات Plugin أو سجلات التثبيت، يسجل بدء تشغيل
Gateway تحذيرات ويتجاوز تلك القناة بدلًا من حظر كل قناة أخرى. شغّل
`openclaw doctor --fix` لإزالة إدخالات القناة/Plugin القديمة؛ أما مفاتيح القنوات
غير المعروفة من دون دليل على Plugin قديم فتظل تفشل في التحقق لكي تبقى الأخطاء
الإملائية مرئية.
إذا تم ضبط `plugins.enabled: false`، تُعامل مراجع Plugin القديمة كأنها خاملة:
يتجاوز بدء تشغيل Gateway عمل اكتشاف/تحميل Plugin، ويحافظ `openclaw doctor` على
إعدادات Plugin المعطّلة بدلًا من إزالتها تلقائيًا. أعد تفعيل Plugins قبل تشغيل
تنظيف doctor إذا أردت إزالة معرفات Plugin القديمة.
لا يحدث تثبيت تبعيات Plugin إلا أثناء تدفقات التثبيت/التحديث الصريحة أو
إصلاح doctor. لا يشغّل بدء تشغيل Gateway، ولا إعادة تحميل الإعدادات، ولا فحص
وقت التشغيل مديري الحزم أو يصلح أشجار التبعيات. يجب أن تكون تبعيات Plugins المحلية
مثبتة مسبقًا، بينما تُثبّت Plugins القادمة من npm وgit وClawHub تحت جذور Plugin
المدارة في OpenClaw. قد تُرفع تبعيات npm ضمن جذر npm المدار في OpenClaw؛ يفحص
لا يحدث تثبيت تبعيات Plugin إلا أثناء تدفقات التثبيت/التحديث الصريحة أو إصلاحات
doctor. لا يشغّل بدء تشغيل Gateway، أو إعادة تحميل الإعدادات، أو فحص وقت التشغيل
مديري الحزم ولا يصلح أشجار التبعيات. يجب أن تكون تبعيات Plugins المحلية مثبتة
مسبقًا، بينما تُثبت Plugins القادمة من npm وgit وClawHub ضمن جذور Plugins
المدارة من OpenClaw. قد تُرفع تبعيات npm داخل جذر npm المدار من OpenClaw؛ ويفحص
التثبيت/التحديث ذلك الجذر المدار قبل الثقة، وتزيل عملية إلغاء التثبيت الحزم
المدارة عبر npm باستخدام npm. يجب أن تظل Plugins الخارجية ومسارات التحميل المخصصة
مثبتة عبر `openclaw plugins install`.
استخدم `openclaw plugins list --json` لرؤية `dependencyStatus` الثابت لكل
Plugin ظاهر دون استيراد شيفرة وقت التشغيل أو إصلاح التبعيات.
راجع [حل تبعيات Plugin](/ar/plugins/dependency-resolution) لدورة حياة وقت التثبيت.
المدارة عبر npm من خلال npm. يجب مع ذلك تثبيت Plugins الخارجية ومسارات التحميل
المخصصة عبر `openclaw plugins install`. استخدم `openclaw plugins list --json`
لرؤية `dependencyStatus` الثابت لكل Plugin ظاهر من دون استيراد شيفرة وقت التشغيل
أو إصلاح التبعيات. راجع [حل تبعيات Plugin](/ar/plugins/dependency-resolution)
لدورة الحياة وقت التثبيت.
### ملكية مسار Plugin المحظور
إذا قالت تشخيصات Plugin:
إذا قالت تشخيصات Plugin
`blocked plugin candidate: suspicious ownership (... uid=1000, expected uid=0 or root)`
وتبعها التحقق من الإعدادات بـ `plugin present but blocked`، فقد وجد OpenClaw
ملفات Plugin مملوكة لمستخدم Unix مختلف عن العملية التي تحمّلها. أبقِ إعدادات
Plugin في مكانها؛ أصلح ملكية نظام الملفات أو شغّل OpenClaw بالمستخدم نفسه الذي
يملك دليل الحالة.
وتبع ذلك التحقق من الإعدادات برسالة `plugin present but blocked`، فهذا يعني أن
OpenClaw وجد ملفات Plugin مملوكة لمستخدم Unix مختلف عن العملية التي تحمّلها.
أبقِ إعدادات Plugin في مكانها؛ أصلح ملكية نظام الملفات أو شغّل OpenClaw
بالمستخدم نفسه الذي يملك دليل الحالة.
في تثبيتات Docker، تعمل الصورة الرسمية باسم `node` (uid `1000`)، لذلك يجب عادةً
أن تكون أدلة إعدادات ومساحة عمل OpenClaw المربوطة من المضيف مملوكة لـ uid `1000`:
بالنسبة لتثبيتات Docker، تعمل الصورة الرسمية باسم `node` (uid `1000`)، لذلك
ينبغي عادةً أن تكون أدلة إعدادات OpenClaw ومساحات العمل المرتبطة من المضيف
مملوكة لـ uid `1000`:
```bash
sudo chown -R 1000:1000 /path/to/openclaw-config /path/to/openclaw-workspace
```
إذا كنت تشغّل OpenClaw عمدًا بصفة root، فأصلح جذر Plugin المدار ليكون مملوكًا لـ
root بدلًا من ذلك:
إذا كنت تشغّل OpenClaw عمدًا بصلاحيات root، فأصلح جذر Plugin المدار ليكون
مملوكًا لـ root بدلًا من ذلك:
```bash
sudo chown -R root:root /path/to/openclaw-config/npm
```
بعد إصلاح الملكية، أعد تشغيل `openclaw doctor --fix` أو
`openclaw plugins registry --refresh` كي يطابق سجل Plugin المحفوظ الملفات
التي أُصلحت.
`openclaw plugins registry --refresh` لكي يطابق سجل Plugin المحفوظ الملفات
التي تم إصلاحها.
بالنسبة إلى تثبيتات npm، تُحل المحددات القابلة للتغير مثل `latest` أو dist-tag
قبل التثبيت ثم تُثبّت على الإصدار الدقيق المتحقق منه في جذر npm المدار في OpenClaw.
بعد انتهاء npm، يتحقق OpenClaw من أن إدخال `package-lock.json` المثبت لا يزال
يطابق الإصدار المحلول وسلامة المحتوى. إذا كتب npm بيانات تعريف حزمة مختلفة،
يفشل التثبيت وتُتراجع الحزمة المدارة بدلًا من قبول أثر Plugin مختلف.
بالنسبة لتثبيتات npm، تُحل المحددات القابلة للتغيير مثل `latest` أو dist-tag
قبل التثبيت ثم تُثبّت على الإصدار الدقيق المتحقق منه في جذر npm المدار من
OpenClaw. بعد انتهاء npm، يتحقق OpenClaw من أن إدخال `package-lock.json` المثبت
لا يزال يطابق الإصدار المحلول والسلامة. إذا كتب npm بيانات تعريف حزمة مختلفة،
يفشل التثبيت ويُعاد التراجع عن الحزمة المدارة بدلًا من قبول أثر Plugin مختلف.
مستودعات المصدر هي مساحات عمل pnpm. إذا استنسخت OpenClaw لتعديل Plugins المضمّنة،
شغّل `pnpm install`؛ عندها يحمّل OpenClaw Plugins المضمّنة من
`extensions/<id>` بحيث تُستخدم التعديلات والتبعيات المحلية للحزمة مباشرة.
تثبيتات جذر npm العادية مخصصة لـ OpenClaw المحزّم، وليس لتطوير مستودع المصدر.
عمليات سحب المصدر هي مساحات عمل pnpm. إذا نسخت OpenClaw لتعديل Plugins المضمّنة،
شغّل `pnpm install`؛ بعدها يحمّل OpenClaw Plugins المضمّنة من `extensions/<id>`
لكي تُستخدم التعديلات والتبعيات المحلية للحزمة مباشرة. تثبيتات جذر npm العادية
مخصصة لـ OpenClaw المعبأ، وليس لتطوير نسخ المصدر.
## أنواع Plugin
يتعرف OpenClaw على تنسيقين لـ Plugin:
يتعرّف OpenClaw على تنسيقين لـ Plugin:
| التنسيق | كيفية عمله | أمثلة |
| التنسيق | طريقة العمل | أمثلة |
| ---------- | ------------------------------------------------------------------ | ------------------------------------------------------ |
| **أصلي** | `openclaw.plugin.json` + وحدة وقت تشغيل؛ يُنفّذ داخل العملية | Plugins رسمية، وحزم npm مجتمعية |
| **حزمة** | تخطيط متوافق مع Codex/Claude/Cursor؛ يُعيّن إلى ميزات OpenClaw | `.codex-plugin/`, `.claude-plugin/`, `.cursor-plugin/` |
| **أصلي** | `openclaw.plugin.json` + وحدة وقت تشغيل؛ ينفذ داخل العملية | Plugins رسمية، وحزم npm من المجتمع |
| **حزمة** | تخطيط متوافق مع Codex/Claude/Cursor؛ يُطابق بميزات OpenClaw | `.codex-plugin/`, `.claude-plugin/`, `.cursor-plugin/` |
يظهر كلاهما ضمن `openclaw plugins list`. راجع [حزم Plugin](/ar/plugins/bundles) لتفاصيل الحزم.
يظهر كلاهما ضمن `openclaw plugins list`. راجع [حزم Plugin](/ar/plugins/bundles) لمعرفة تفاصيل الحزم.
إذا كنت تكتب Plugin أصليًا، فابدأ بـ [بناء Plugins](/ar/plugins/building-plugins)
و[نظرة عامة على Plugin SDK](/ar/plugins/sdk-overview).
## نقاط دخول الحزم
يجب أن تعلن حزم npm الخاصة بـ Plugin الأصلي عن `openclaw.extensions` في `package.json`.
يجب أن تعلن حزم npm الأصلية لـ Plugin عن `openclaw.extensions` في `package.json`.
يجب أن يبقى كل إدخال داخل دليل الحزمة وأن يُحل إلى ملف وقت تشغيل قابل للقراءة،
أو إلى ملف مصدر TypeScript مع نظير JavaScript مبني مُستنتج مثل `src/index.ts` إلى `dist/index.js`.
يجب أن تشحن التثبيتات المحزّمة مخرجات وقت تشغيل JavaScript تلك. أما الرجوع إلى
مصدر TypeScript فهو مخصص لمستودعات المصدر ومسارات التطوير المحلي، وليس لحزم
npm المثبتة في جذر Plugin المدار في OpenClaw.
أو إلى ملف مصدر TypeScript له نظير JavaScript مبني مستنتج مثل `src/index.ts`
إلى `dist/index.js`.
يجب أن تشحن التثبيتات المعبأة مخرجات وقت تشغيل JavaScript تلك. أما الرجوع إلى
مصدر TypeScript فهو لنسخ المصدر ومسارات التطوير المحلية، وليس لحزم npm المثبتة
في جذر Plugin المدار من OpenClaw.
إذا قال تحذير حزمة مدارة إنها `requires compiled runtime output for
TypeScript entry ...`، فهذا يعني أن الحزمة نُشرت دون ملفات JavaScript التي
يحتاجها OpenClaw في وقت التشغيل. هذه مشكلة تحزيم Plugin، وليست مشكلة إعدادات
محلية. حدّث Plugin أو أعد تثبيته بعد أن يعيد الناشر نشر JavaScript المجمّع،
أو عطّل/ألغِ تثبيت ذلك Plugin حتى تتوفر حزمة مصححة.
TypeScript entry ...`، فهذا يعني أن الحزمة نُشرت من دون ملفات JavaScript التي
يحتاجها OpenClaw وقت التشغيل. هذه مشكلة تغليف Plugin، وليست مشكلة إعدادات
محلية. حدّث Plugin أو أعد تثبيته بعد أن يعيد الناشر نشر JavaScript المترجم، أو
عطّل/أزل ذلك Plugin إلى أن تتوفر حزمة مُصلحة.
استخدم `openclaw.runtimeExtensions` عندما لا تكون ملفات وقت التشغيل المنشورة
في المسارات نفسها لإدخالات المصدر. عند وجود `runtimeExtensions`، يجب أن تحتوي
على إدخال واحد بالضبط لكل إدخال في `extensions`. تفشل القوائم غير المتطابقة
في التثبيت واكتشاف Plugin بدلًا من الرجوع بصمت إلى مسارات المصدر. إذا نشرت أيضًا
`openclaw.setupEntry`، فاستخدم `openclaw.runtimeSetupEntry` لنظير JavaScript
المبني الخاص به؛ وهذا الملف مطلوب عند التصريح به.
استخدم `openclaw.runtimeExtensions` عندما لا تكون ملفات وقت التشغيل المنشورة في
المسارات نفسها لإدخالات المصدر. عند وجود `runtimeExtensions`، يجب أن تحتوي على
إدخال واحد بالضبط لكل إدخال في `extensions`. تفشل القوائم غير المتطابقة في
التثبيت واكتشاف Plugin بدلًا من الرجوع بصمت إلى مسارات المصدر. إذا كنت تنشر
أيضًا `openclaw.setupEntry`، فاستخدم `openclaw.runtimeSetupEntry` لنظيره المبني
من JavaScript؛ ويكون ذلك الملف مطلوبًا عند التصريح به.
```json
{
@ -221,15 +224,15 @@ TypeScript entry ...`، فهذا يعني أن الحزمة نُشرت دون م
### حزم npm المملوكة لـ OpenClaw أثناء الانتقال
ClawHub هو مسار التوزيع الأساسي لمعظم Plugins. تحزم إصدارات OpenClaw الحالية
المحزّمة بالفعل العديد من Plugins الرسمية، لذلك لا تحتاج هذه إلى تثبيتات npm
منفصلة في الإعدادات العادية. إلى أن تنتقل كل Plugin مملوكة لـ OpenClaw إلى
ClawHub، يظل OpenClaw يشحن بعض حزم Plugin من `@openclaw/*` على npm للتثبيتات
الأقدم/المخصصة وتدفقات عمل npm المباشرة.
ClawHub هو مسار التوزيع الأساسي لمعظم Plugins. تتضمن إصدارات OpenClaw المعبأة
الحالية بالفعل العديد من Plugins الرسمية، لذلك لا تحتاج هذه إلى تثبيتات npm
منفصلة في الإعدادات العادية. إلى أن تنتقل كل Plugins المملوكة لـ OpenClaw إلى
ClawHub، يظل OpenClaw يشحن بعض حزم Plugin بنمط `@openclaw/*` على npm
للتثبيتات الأقدم/المخصصة وتدفقات عمل npm المباشرة.
إذا أبلغ npm أن حزمة Plugin من `@openclaw/*` مهجورة، فإن إصدار تلك الحزمة من
مسار حزم خارجي أقدم. استخدم Plugin المضمّنة من OpenClaw الحالي أو مستودعًا
محليًا حتى تُنشر حزمة npm أحدث.
إذا أبلغ npm أن حزمة Plugin بنمط `@openclaw/*` مهملة، فهذا الإصدار من الحزمة
ينتمي إلى قطار حزم خارجي أقدم. استخدم Plugin المضمّن من OpenClaw الحالي أو نسخة
محلية إلى أن تُنشر حزمة npm أحدث.
| Plugin | الحزمة | المستندات |
| --------------- | -------------------------- | ------------------------------------------ |
@ -247,10 +250,10 @@ ClawHub، يظل OpenClaw يشحن بعض حزم Plugin من `@openclaw/*` عل
| Zalo | `@openclaw/zalo` | [Zalo](/ar/channels/zalo) |
| Zalo Personal | `@openclaw/zalouser` | [Zalo Personal](/ar/plugins/zalouser) |
### الأساسيُشحن مع OpenClaw)
### الأساسية (تُشحن مع OpenClaw)
<AccordionGroup>
<Accordion title="Model providers (enabled by default)">
<Accordion title="مزوّدو النماذج (مفعّلون افتراضيًا)">
`anthropic`, `byteplus`, `cloudflare-ai-gateway`, `github-copilot`, `google`,
`huggingface`, `kilocode`, `kimi-coding`, `minimax`, `mistral`, `qwen`,
`moonshot`, `nvidia`, `openai`, `opencode`, `opencode-go`, `openrouter`,
@ -258,27 +261,27 @@ ClawHub، يظل OpenClaw يشحن بعض حزم Plugin من `@openclaw/*` عل
`vercel-ai-gateway`, `volcengine`, `xiaomi`, `zai`
</Accordion>
<Accordion title="Memory plugins">
<Accordion title="Plugins الذاكرة">
- `memory-core` - بحث ذاكرة مضمّن (افتراضي عبر `plugins.slots.memory`)
- `memory-lancedb` - ذاكرة طويلة الأمد مدعومة من LanceDB مع الاستدعاء/الالتقاط التلقائي (اضبط `plugins.slots.memory = "memory-lancedb"`)
- `memory-lancedb` - ذاكرة طويلة الأمد مدعومة بـ LanceDB مع استدعاء/التقاط تلقائي (اضبط `plugins.slots.memory = "memory-lancedb"`)
راجع [Memory LanceDB](/ar/plugins/memory-lancedb) لإعداد التضمين المتوافق مع OpenAI
وأمثلة Ollama وحدود الاستدعاء واستكشاف الأخطاء وإصلاحها.
راجع [Memory LanceDB](/ar/plugins/memory-lancedb) لإعداد التضمينات المتوافقة مع OpenAI،
وأمثلة Ollama، وحدود الاستدعاء، واستكشاف المشكلات وإصلاحها.
</Accordion>
<Accordion title="موفرو الكلام (ممكّنون افتراضيًا)">
<Accordion title="Speech providers (enabled by default)">
`elevenlabs`, `microsoft`
</Accordion>
<Accordion title="أخرى">
- `browser` - Plugin المتصفح المضمّن لأداة المتصفح وCLI `openclaw browser` وطريقة Gateway `browser.request` ووقت تشغيل المتصفح وخدمة التحكم الافتراضية في المتصفح (ممكّن افتراضيًا؛ عطّله قبل استبداله)
- `copilot-proxy` - جسر VS Code Copilot Proxy (معطّل افتراضيًا)
<Accordion title="Other">
- `browser` - Plugin المتصفح المضمّن لأداة المتصفح، وCLI `openclaw browser`، وطريقة Gateway `browser.request`، ووقت تشغيل المتصفح، وخدمة التحكم الافتراضية في المتصفح (ممكّن افتراضياً؛ عطّله قبل استبداله)
- `copilot-proxy` - جسر VS Code Copilot Proxy (معطّل افتراضياً)
</Accordion>
</AccordionGroup>
تبحث عن Plugins من جهات خارجية؟ راجع [Plugins المجتمع](/ar/plugins/community).
هل تبحث عن Plugins من جهات خارجية؟ راجع [Community Plugins](/ar/plugins/community).
## التكوين
@ -299,125 +302,123 @@ ClawHub، يظل OpenClaw يشحن بعض حزم Plugin من `@openclaw/*` عل
| الحقل | الوصف |
| ------------------ | --------------------------------------------------------- |
| `enabled` | مفتاح التفعيل الرئيسي (الافتراضي: `true`) |
| `allow` | قائمة السماح للـ Plugin (اختياري) |
| `bundledDiscovery` | وضع اكتشاف Plugin المضمّن (`allowlist` افتراضيًا) |
| `deny` | قائمة الحظر للـ Plugin (اختياري؛ الحظر له الأولوية) |
| `allow` | قائمة سماح Plugin (اختياري) |
| `bundledDiscovery` | وضع اكتشاف Plugin المضمّنة (`allowlist` افتراضياً) |
| `deny` | قائمة حظر Plugin (اختياري؛ الحظر له الأسبقية) |
| `load.paths` | ملفات/أدلة Plugin إضافية |
| `slots` | محددات الفتحات الحصرية (مثل `memory` و`contextEngine`) |
| `entries.\<id\>` | مفاتيح تبديل + تكوين لكل Plugin |
| `slots` | محددات الخانات الحصرية (مثل `memory` و`contextEngine`) |
| `entries.\<id\>` | مفاتيح تفعيل + تكوين لكل Plugin |
`plugins.allow` حصرية. عندما تكون غير فارغة، لا يمكن تحميل إلا Plugins المدرجة
أو كشف أدواتها، حتى إذا كان `tools.allow` يحتوي على `"*"` أو اسم أداة محدد
مملوك لـ Plugin. إذا كانت قائمة السماح للأدوات تشير إلى أدوات Plugin، فأضف معرّفات Plugins المالكة
إلى `plugins.allow` أو أزل `plugins.allow`؛ يحذّر `openclaw doctor` من هذا
الشكل.
`plugins.allow` حصري. عندما لا يكون فارغاً، لا يمكن تحميل إلا Plugins المدرجة
أو عرض أدواتها، حتى إذا كان `tools.allow` يحتوي على `"*"` أو اسم أداة محدد
يملكها Plugin. إذا كانت قائمة سماح الأدوات تشير إلى أدوات Plugin، فأضف معرّفات
Plugins المالكة إلى `plugins.allow` أو أزل `plugins.allow`؛ يحذّر `openclaw doctor` من
هذا الشكل.
الإعداد الافتراضي لـ `plugins.bundledDiscovery` هو `"allowlist"` للتكوينات الجديدة، لذلك فإن
قائمة `plugins.allow` التقييدية تمنع أيضًا Plugins موفري الخدمة المضمّنة المحذوفة
من المخزون، بما في ذلك اكتشاف موفر بحث الويب في وقت التشغيل. يضع doctor ختم `"compat"` على
تكوينات قائمة السماح التقييدية الأقدم أثناء الترحيل لكي تحافظ الترقيات على
سلوك موفر الخدمة المضمّن القديم إلى أن يختار المشغّل الوضع الأكثر صرامة.
لا يزال يُعامَل `plugins.allow` الفارغ على أنه غير معيّن/مفتوح.
القيمة الافتراضية لـ `plugins.bundledDiscovery` هي `"allowlist"` للتكوينات الجديدة، لذلك فإن
مخزون `plugins.allow` المقيّد يحظر أيضاً Plugins مزوّدي الخدمة المضمّنة غير المذكورة،
بما في ذلك اكتشاف مزوّد البحث على الويب في وقت التشغيل. يضع Doctor علامة `"compat"` على
تكوينات قائمة السماح المقيّدة الأقدم أثناء الترحيل حتى تحافظ الترقيات على
سلوك مزوّدي الخدمة المضمّنين القديم إلى أن يختار المشغّل الوضع الأكثر صرامة.
لا يزال `plugins.allow` الفارغ يعامَل كأنه غير مضبوط/مفتوح.
تؤدي تغييرات التكوين التي تتم من خلال `/plugins enable` أو `/plugins disable` إلى
إعادة تحميل Plugin داخل عملية Gateway. تعيد دورات الوكيل الجديدة بناء قائمة أدواتها من
تؤدي تغييرات التكوين التي تتم عبر `/plugins enable` أو `/plugins disable` إلى إعادة تحميل
Plugin في Gateway داخل العملية. تعيد جولات الوكيل الجديدة بناء قائمة أدواتها من
سجل Plugins المحدّث. لا تزال العمليات التي تغيّر المصدر، مثل التثبيت
والتحديث وإلغاء التثبيت، تعيد تشغيل عملية Gateway لأن وحدات Plugin المستوردة بالفعل
والتحديث وإلغاء التثبيت، تعيد تشغيل عملية Gateway لأن وحدات Plugin التي تم استيرادها مسبقاً
لا يمكن استبدالها بأمان في مكانها.
`openclaw plugins list` هي لقطة محلية لسجل/تكوين Plugin. وجود Plugin بحالة
`enabled` هناك يعني أن السجل المحفوظ والتكوين الحالي يسمحان للـ
Plugin بالمشاركة. ولا يثبت ذلك أن Gateway بعيدة تعمل بالفعل
قد أعادت التحميل أو أُعيد تشغيلها إلى كود Plugin نفسه. في إعدادات VPS/الحاويات
ذات عمليات التغليف، أرسل عمليات إعادة التشغيل أو كتابات تحفّز إعادة التحميل إلى عملية
`openclaw gateway run` الفعلية، أو استخدم `openclaw gateway restart` ضد
Gateway قيد التشغيل عندما يبلغ إعادة التحميل عن فشل.
`openclaw plugins list` هو لقطة محلية لسجل/تكوين Plugin. يعني وجود Plugin بحالة
`enabled` هناك أن السجل الدائم والتكوين الحالي يسمحان للـ Plugin بالمشاركة.
لا يثبت ذلك أن Gateway بعيد قيد التشغيل بالفعل أعاد التحميل أو أُعيد تشغيله على
نفس كود Plugin. في إعدادات VPS/الحاويات ذات عمليات التغليف، أرسل عمليات إعادة التشغيل
أو عمليات الكتابة التي تشغّل إعادة التحميل إلى عملية `openclaw gateway run` الفعلية،
أو استخدم `openclaw gateway restart` ضد Gateway قيد التشغيل عندما يبلّغ التحميل عن فشل.
<Accordion title="حالات Plugin: معطّل مقابل مفقود مقابل غير صالح">
- **معطّل**: يوجد Plugin لكن قواعد التفعيل أوقفته. يُحفظ التكوين.
- **مفقود**: يشير التكوين إلى معرّف Plugin لم يعثر عليه الاكتشاف.
- **غير صالح**: يوجد Plugin لكن تكوينه لا يطابق المخطط المعلن. يتجاوز بدء تشغيل Gateway ذلك Plugin فقط؛ يمكن لـ `openclaw doctor --fix` عزل الإدخال غير الصالح عبر تعطيله وإزالة حمولة تكوينه.
<Accordion title="Plugin states: disabled vs missing vs invalid">
- **معطّل**: يوجد Plugin لكن قواعد التفعيل أوقفته. يُحافَظ على التكوين.
- **مفقود**: يشير التكوين إلى معرّف Plugin لم يجده الاكتشاف.
- **غير صالح**: يوجد Plugin لكن تكوينه لا يطابق المخطط المعلن. يتخطى بدء تشغيل Gateway هذا الـ Plugin فقط؛ يستطيع `openclaw doctor --fix` عزل الإدخال غير الصالح عبر تعطيله وإزالة حمولة تكوينه.
</Accordion>
## الاكتشاف والأولوية
## الاكتشاف والأسبقية
يفحص OpenClaw بحثًا عن Plugins بهذا الترتيب (أول تطابق يفوز):
يفحص OpenClaw بحثاً عن Plugins بهذا الترتيب (أول تطابق هو الفائز):
<Steps>
<Step title="مسارات التكوين">
<Step title="Config paths">
`plugins.load.paths` - مسارات ملفات أو أدلة صريحة. يتم تجاهل المسارات التي تشير
عائدةً إلى أدلة Plugins المضمّنة والمعبأة الخاصة بـ OpenClaw؛
مرة أخرى إلى أدلة Plugins المضمّنة والمعبأة الخاصة بـ OpenClaw؛
شغّل `openclaw doctor --fix` لإزالة تلك الأسماء المستعارة القديمة.
</Step>
<Step title="Plugins مساحة العمل">
`\<workspace\>/.openclaw/<plugin-root>/*.ts` و`\<workspace\>/.openclaw/<plugin-root>/*/index.ts`.
<Step title="Workspace plugins">
`\<workspace\>/.openclaw/<plugin-root>/*.ts` و `\<workspace\>/.openclaw/<plugin-root>/*/index.ts`.
</Step>
<Step title="Plugins العامة">
`~/.openclaw/<plugin-root>/*.ts` و`~/.openclaw/<plugin-root>/*/index.ts`.
<Step title="Global plugins">
`~/.openclaw/<plugin-root>/*.ts` و `~/.openclaw/<plugin-root>/*/index.ts`.
</Step>
<Step title="Plugins المضمّنة">
تُشحن مع OpenClaw. كثير منها ممكّن افتراضيًا (موفرو النماذج والكلام).
ويتطلب غيرها تمكينًا صريحًا.
<Step title="Bundled plugins">
تُشحن مع OpenClaw. كثير منها ممكّن افتراضياً (مزوّدو النماذج، الكلام).
ويتطلب غيرها تفعيلاً صريحاً.
</Step>
</Steps>
عادةً ما تحل التثبيتات المعبأة وصور Docker Plugins المضمّنة من شجرة
`dist/extensions` المترجمة. إذا تم تركيب دليل مصدر Plugin مضمّن
فوق مسار المصدر المعبأ المطابق، على سبيل المثال
`/app/extensions/synology-chat`، يعامل OpenClaw دليل المصدر المركّب هذا
كتراكب مصدر مضمّن ويكتشفه قبل حزمة
`/app/dist/extensions/synology-chat` المعبأة. هذا يحافظ على عمل
حلقات الحاويات للمشرفين دون إعادة كل Plugin مضمّن إلى مصدر TypeScript.
اضبط `OPENCLAW_DISABLE_BUNDLED_SOURCE_OVERLAYS=1` لفرض حزم dist المعبأة
حتى عند وجود تركيبات تراكب المصدر.
`dist/extensions` المترجمة. إذا كان دليل مصدر Plugin مضمّن مربوطاً فوق مسار
المصدر المعبأ المطابق، على سبيل المثال `/app/extensions/synology-chat`،
يعامل OpenClaw دليل المصدر المركّب هذا كتراكب مصدر مضمّن ويكتشفه قبل حزمة
`/app/dist/extensions/synology-chat` المعبأة. هذا يحافظ على عمل حلقات حاويات
المشرفين بدون إعادة كل Plugin مضمّن إلى مصدر TypeScript. اضبط
`OPENCLAW_DISABLE_BUNDLED_SOURCE_OVERLAYS=1` لفرض حزم dist المعبأة حتى عند وجود
تركيبات تراكب المصدر.
### قواعد التفعيل
- `plugins.enabled: false` يعطّل جميع Plugins ويتجاوز عمل اكتشاف/تحميل Plugins
- `plugins.deny` له الأولوية دائمًا على السماح
- `plugins.entries.\<id\>.enabled: false` يعطّل ذلك Plugin
- تكون Plugins الناشئة من مساحة العمل **معطّلة افتراضيًا** (يجب تمكينها صراحةً)
- تتبع Plugins المضمّنة مجموعة التمكين الافتراضي المدمجة ما لم يتم تجاوزها
- يمكن للفتحات الحصرية فرض تمكين Plugin المحدد لتلك الفتحة
- يتم تمكين بعض Plugins المضمّنة الاختيارية تلقائيًا عندما يسمي التكوين
سطحًا مملوكًا لـ Plugin، مثل مرجع نموذج موفر أو تكوين قناة أو وقت تشغيل
الحزمة الاختبارية
- يُحفظ تكوين Plugin القديم أثناء نشاط `plugins.enabled: false`؛
أعد تمكين Plugins قبل تشغيل تنظيف doctor إذا كنت تريد إزالة المعرّفات القديمة
- تحتفظ مسارات Codex من عائلة OpenAI بحدود Plugin منفصلة:
ينتمي `openai-codex/*` إلى OpenAI Plugin، بينما يتم اختيار Plugin خادم تطبيق Codex
المضمّن بواسطة `agentRuntime.id: "codex"` أو مراجع النماذج القديمة
`codex/*`
- `plugins.enabled: false` يعطّل كل Plugins ويتخطى أعمال اكتشاف/تحميل Plugin
- `plugins.deny` له الأسبقية دائماً على السماح
- `plugins.entries.\<id\>.enabled: false` يعطّل ذلك الـ Plugin
- Plugins ذات منشأ مساحة العمل **معطّلة افتراضياً** (يجب تمكينها صراحة)
- تتبع Plugins المضمّنة مجموعة التشغيل الافتراضية المدمجة ما لم يتم تجاوزها
- يمكن للخانات الحصرية فرض تمكين Plugin المحدد لتلك الخانة
- تُفعّل بعض Plugins المضمّنة الاختيارية تلقائياً عندما يسمّي التكوين
سطحاً مملوكاً لـ Plugin، مثل مرجع نموذج مزوّد، أو تكوين قناة، أو وقت تشغيل
حزمة اختبار
- يُحافَظ على تكوين Plugin القديم بينما يكون `plugins.enabled: false` نشطاً؛
أعد تمكين Plugins قبل تشغيل تنظيف Doctor إذا كنت تريد إزالة المعرّفات القديمة
- تحافظ مسارات Codex من عائلة OpenAI على حدود Plugin منفصلة:
ينتمي `openai-codex/*` إلى OpenAI Plugin، بينما يتم تحديد Plugin خادم تطبيق
Codex المضمّن عبر `agentRuntime.id: "codex"` أو مراجع نماذج
`codex/*` القديمة
## استكشاف أخطاء خطافات وقت التشغيل وإصلاحها
## استكشاف خطاطيف وقت التشغيل وإصلاحها
إذا ظهر Plugin في `plugins list` لكن التأثيرات الجانبية أو الخطافات الخاصة بـ `register(api)`
لا تعمل في حركة المحادثات الحية، فتحقق من هذه أولًا:
إذا ظهر Plugin في `plugins list` لكن آثار `register(api)` الجانبية أو الخطاطيف
لا تعمل في حركة المحادثة الحية، فتحقق من هذه أولاً:
- شغّل `openclaw gateway status --deep --require-rpc` وتأكد من أن عنوان URL النشط لـ
Gateway والملف الشخصي ومسار التكوين والعملية هي التي تعدّلها.
- أعد تشغيل Gateway الحية بعد تغييرات تثبيت/تكوين/كود Plugin. في حاويات التغليف،
قد يكون PID 1 مشرفًا فقط؛ أعد تشغيل أو أرسل إشارة إلى عملية
- شغّل `openclaw gateway status --deep --require-rpc` وتأكد من أن عنوان URL النشط
لـ Gateway، والملف الشخصي، ومسار التكوين، والعملية هي التي تعدّلها.
- أعد تشغيل Gateway الحي بعد تغييرات تثبيت/تكوين/كود Plugin. في الحاويات
المغلّفة، قد يكون PID 1 مشرفاً فقط؛ أعد تشغيل أو أرسل إشارة إلى عملية
`openclaw gateway run` الابنة.
- استخدم `openclaw plugins inspect <id> --runtime --json` لتأكيد تسجيلات الخطافات و
التشخيصات. تحتاج خطافات المحادثة غير المضمّنة مثل `llm_input` و
`llm_output` و`before_agent_finalize` و`agent_end` إلى
- استخدم `openclaw plugins inspect <id> --runtime --json` لتأكيد تسجيلات الخطاطيف و
التشخيصات. تحتاج خطاطيف المحادثة غير المضمّنة مثل `llm_input`،
و`llm_output`، و`before_agent_finalize`، و`agent_end` إلى
`plugins.entries.<id>.hooks.allowConversationAccess=true`.
- لتبديل النماذج، فضّل `before_model_resolve`. يعمل قبل حل النموذج
لدورات الوكيل؛ لا يعمل `llm_output` إلا بعد أن تنتج محاولة نموذج
لجولات الوكيل؛ يعمل `llm_output` فقط بعد أن تنتج محاولة نموذج
مخرجات المساعد.
- لإثبات نموذج الجلسة الفعّال، استخدم `openclaw sessions` أو أسطح
جلسة/حالة Gateway، وعند تصحيح حمولات الموفرين، ابدأ
Gateway باستخدام `--raw-stream --raw-stream-path <path>`.
جلسة/حالة Gateway، وعند تصحيح حمولات المزوّد، ابدأ
Gateway مع `--raw-stream --raw-stream-path <path>`.
### إعداد أداة Plugin البطيء
إذا بدت دورات الوكيل متوقفة أثناء تحضير الأدوات، فمكّن تسجيل التتبع و
تحقق من أسطر توقيت مصنع أدوات Plugin:
إذا بدت جولات الوكيل متوقفة أثناء تحضير الأدوات، فمكّن تسجيل التتبع وتحقق
من أسطر توقيت مصنع أدوات Plugin:
```bash
openclaw config set logging.level trace
@ -430,28 +431,28 @@ openclaw logs --follow
[trace:plugin-tools] factory timings ...
```
يعرض الملخص إجمالي وقت المصنع وأبطأ مصانع أدوات Plugin،
بما في ذلك معرّف Plugin وأسماء الأدوات المعلنة وشكل النتيجة وما إذا كانت الأداة
يسرد الملخص إجمالي وقت المصنع وأبطأ مصانع أدوات Plugin،
بما في ذلك معرّف Plugin، وأسماء الأدوات المعلنة، وشكل النتيجة، وما إذا كانت الأداة
اختيارية. تُرقّى الأسطر البطيئة إلى تحذيرات عندما يستغرق مصنع واحد
ثانية واحدة على الأقل أو يستغرق إجمالي تحضير مصانع أدوات Plugin خمس ثوانٍ على الأقل.
ثانية واحدة على الأقل أو يستغرق إجمالي تحضير مصنع أدوات Plugin خمس ثوانٍ على الأقل.
يخزّن OpenClaw مؤقتًا نتائج مصانع أدوات Plugin الناجحة لعمليات الحل المتكررة
ذات سياق الطلب الفعّال نفسه. يتضمن مفتاح التخزين المؤقت تكوين
وقت التشغيل الفعّال ومساحة العمل ومعرّفات الوكيل/الجلسة وسياسة صندوق الحماية وإعدادات المتصفح
وسياق التسليم وهوية الطالب وحالة الملكية، لذلك يُعاد تشغيل المصانع التي
تعتمد على تلك الحقول الموثوقة عندما يتغير السياق.
يخزّن OpenClaw نتائج مصنع أدوات Plugin الناجحة مؤقتاً لعمليات الحل المتكررة
مع نفس سياق الطلب الفعّال. يتضمن مفتاح ذاكرة التخزين المؤقت تكوين
وقت التشغيل الفعّال، ومساحة العمل، ومعرّفات الوكيل/الجلسة، وسياسة العزل،
وإعدادات المتصفح، وسياق التسليم، وهوية الطالب، وحالة الملكية، لذلك تُعاد
تشغيل المصانع التي تعتمد على تلك الحقول الموثوقة عندما يتغير السياق.
إذا هيمن Plugin واحد على التوقيت، فافحص تسجيلات وقت تشغيله:
إذا كان Plugin واحد يهيمن على التوقيت، فافحص تسجيلاته في وقت التشغيل:
```bash
openclaw plugins inspect <plugin-id> --runtime --json
```
ثم حدّث ذلك Plugin أو أعد تثبيته أو عطّله. ينبغي لمؤلفي Plugins نقل
تحميل التبعيات المكلف إلى ما وراء مسار تنفيذ الأداة بدلًا من القيام به
ثم حدّث ذلك الـ Plugin أو أعد تثبيته أو عطّله. ينبغي لمؤلفي Plugin نقل
تحميل التبعيات المكلف إلى خلف مسار تنفيذ الأداة بدلاً من القيام به
داخل مصنع الأداة.
### ملكية قناة أو أداة مكررة
### تكرار ملكية القناة أو الأداة
الأعراض:
@ -459,33 +460,32 @@ openclaw plugins inspect <plugin-id> --runtime --json
- `channel setup already registered: <channel-id> (<plugin-id>)`
- `plugin tool name conflict (<plugin-id>): <tool-name>`
تعني هذه أن أكثر من Plugin ممكّن يحاول امتلاك القناة نفسها
أو تدفق الإعداد أو اسم الأداة. السبب الأكثر شيوعًا هو تثبيت Plugin قناة خارجي
بجانب Plugin مضمّن يوفر الآن معرّف القناة نفسه.
تعني هذه أن أكثر من Plugin ممكّن يحاول امتلاك نفس القناة،
أو تدفق الإعداد، أو اسم الأداة. السبب الأكثر شيوعاً هو تثبيت Plugin قناة خارجي
بجانب Plugin مضمّن يوفر الآن نفس معرّف القناة.
خطوات التصحيح:
- شغّل `openclaw plugins list --enabled --verbose` لرؤية كل Plugin ممكّن
ومصدره.
ومنشئه.
- شغّل `openclaw plugins inspect <id> --runtime --json` لكل Plugin مشتبه به و
قارن `channels` و`channelConfigs` و`tools` والتشخيصات.
- شغّل `openclaw plugins registry --refresh` بعد تثبيت حزم Plugins أو إزالتها
حتى تعكس البيانات الوصفية المحفوظة التثبيت الحالي.
قارن `channels`، و`channelConfigs`، و`tools`، والتشخيصات.
- شغّل `openclaw plugins registry --refresh` بعد تثبيت حزم Plugin أو إزالتها
حتى تعكس البيانات الوصفية الدائمة التثبيت الحالي.
- أعد تشغيل Gateway بعد تغييرات التثبيت أو السجل أو التكوين.
خيارات الإصلاح:
- إذا كان أحد Plugins يستبدل آخر عمدًا لمعرّف القناة نفسه، فينبغي أن يعلن
Plugin المفضّل `channelConfigs.<channel-id>.preferOver` مع
معرّف Plugin ذي الأولوية الأدنى. راجع [/plugins/manifest#replacing-another-channel-plugin](/ar/plugins/manifest#replacing-another-channel-plugin).
- إذا كان التكرار عرضيًا، فعطّل أحد الجانبين باستخدام
`plugins.entries.<plugin-id>.enabled: false` أو أزل تثبيت Plugin
القديم.
- إذا مكّنت كلا Plugins صراحةً، يحتفظ OpenClaw بذلك الطلب و
يبلغ عن التعارض. اختر مالكًا واحدًا للقناة أو أعد تسمية الأدوات المملوكة لـ Plugin
حتى يكون سطح وقت التشغيل غير ملتبس.
- إذا كان Plugin واحد يستبدل آخر عمداً لنفس معرّف القناة، فينبغي أن يعلن
الـ Plugin المفضّل `channelConfigs.<channel-id>.preferOver` مع
معرّف Plugin الأقل أولوية. راجع [/plugins/manifest#replacing-another-channel-plugin](/ar/plugins/manifest#replacing-another-channel-plugin).
- إذا كان التكرار عرضياً، فعطّل أحد الجانبين باستخدام
`plugins.entries.<plugin-id>.enabled: false` أو أزل تثبيت Plugin القديم.
- إذا فعّلت كلا الـ Plugins صراحة، يحافظ OpenClaw على ذلك الطلب و
يبلّغ عن التعارض. اختر مالكاً واحداً للقناة أو أعد تسمية الأدوات المملوكة
لـ Plugin حتى يكون سطح وقت التشغيل غير ملتبس.
## فتحات Plugin (فئات حصرية)
## خانات Plugin (فئات حصرية)
بعض الفئات حصرية (واحدة نشطة فقط في كل مرة):
@ -500,9 +500,9 @@ openclaw plugins inspect <plugin-id> --runtime --json
}
```
| الفتحة | ما تتحكم به | الافتراضي |
| الخانة | ما تتحكم به | الافتراضي |
| --------------- | --------------------- | ------------------- |
| `memory` | Plugin الذاكرة النشط | `memory-core` |
| `memory` | Active Memory Plugin | `memory-core` |
| `contextEngine` | محرك السياق النشط | `legacy` (مدمج) |
## مرجع CLI
@ -553,82 +553,79 @@ openclaw plugins enable <id>
openclaw plugins disable <id>
```
تُشحن Plugins المضمّنة مع OpenClaw. يكون كثير منها مفعّلاً افتراضياً (على سبيل المثال
مزودو النماذج المضمّنون، ومزودو الكلام المضمّنون، وPlugin المتصفح
المضمّن). ما زالت Plugins المضمّنة الأخرى تحتاج إلى `openclaw plugins enable <id>`.
تُشحن Plugins المضمّنة مع OpenClaw. كثير منها مفعّل افتراضيًا (على سبيل المثال
مزوّدو النماذج المضمّنون، ومزوّدو الكلام المضمّنون، وPlugin المتصفح المضمّن).
لا تزال Plugins مضمنة أخرى تحتاج إلى `openclaw plugins enable <id>`.
يستبدل `--force` أي Plugin أو حزمة خطافات مثبّتة موجودة في مكانها. استخدم
`openclaw plugins update <id-or-npm-spec>` للترقيات الروتينية لـ Plugins npm
المتتبَّعة. هذا غير مدعوم مع `--link`، الذي يعيد استخدام مسار المصدر بدلاً
يستبدل `--force` أي Plugin أو حزمة hooks مثبّتة موجودة في مكانها. استخدم
`openclaw plugins update <id-or-npm-spec>` للترقيات الروتينية لـ Plugins
npm المتتبَّعة. لا يُدعَم مع `--link`، الذي يعيد استخدام مسار المصدر بدلًا
من النسخ فوق هدف تثبيت مُدار.
عندما تكون `plugins.allow` مضبوطة مسبقاً، يضيف `openclaw plugins install`
معرّف Plugin المثبّت إلى قائمة السماح تلك قبل تفعيله. إذا كان معرّف Plugin نفسه
موجوداً في `plugins.deny`، يزيل التثبيت إدخال المنع القديم ذاك بحيث يكون
التثبيت الصريح قابلاً للتحميل فوراً بعد إعادة التشغيل.
عندما تكون `plugins.allow` مضبوطة مسبقًا، يضيف `openclaw plugins install`
معرّف Plugin المثبّت إلى قائمة السماح تلك قبل تفعيله. إذا كان معرّف Plugin
نفسه موجودًا في `plugins.deny`، يزيل التثبيت إدخال المنع القديم ذلك بحيث
يصبح التثبيت الصريح قابلًا للتحميل فورًا بعد إعادة التشغيل.
يحتفظ OpenClaw بسجل Plugin محلي دائم باعتباره نموذج القراءة الباردة
لمخزون Plugin، وملكية المساهمات، وتخطيط بدء التشغيل. تعمل مسارات التثبيت،
والتحديث، وإلغاء التثبيت، والتفعيل، والتعطيل على تحديث ذلك السجل بعد تغيير
حالة Plugin. يحتفظ ملف `plugins/installs.json` نفسه ببيانات تعريف التثبيت
الدائمة في `installRecords` ذات المستوى الأعلى، وبيانات تعريف البيان القابلة
لإعادة البناء في `plugins`. إذا كان السجل مفقوداً أو قديماً أو غير صالح، فإن
`openclaw plugins registry
--refresh` يعيد بناء عرض البيان الخاص به من سجلات التثبيت، وسياسة الإعدادات،
وبيانات تعريف البيان/الحزمة من دون تحميل وحدات وقت تشغيل Plugin.
ينطبق `openclaw plugins update <id-or-npm-spec>` على التثبيتات المتتبَّعة. يؤدي
تمرير مواصفة حزمة npm مع وسم توزيع أو إصدار محدد إلى حل اسم الحزمة
مرة أخرى إلى سجل Plugin المتتبَّع وتسجيل المواصفة الجديدة للتحديثات المستقبلية.
ويؤدي تمرير اسم الحزمة من دون إصدار إلى نقل تثبيت مثبّت بإصدار محدد إلى
خط الإصدار الافتراضي في السجل. إذا كان Plugin npm المثبّت يطابق بالفعل
الإصدار المحلول وهوية الأثر المسجلة، يتجاوز OpenClaw التحديث
من دون تنزيل أو إعادة تثبيت أو إعادة كتابة الإعدادات.
عند تشغيل `openclaw update` على قناة بيتا، تحاول سجلات Plugin الافتراضية
من npm وClawHub استخدام `@beta` أولاً ثم ترجع إلى الافتراضي/الأحدث عندما
لا يوجد إصدار بيتا لـ Plugin. تبقى الإصدارات المحددة والوسوم الصريحة مثبّتة.
يحتفظ OpenClaw بسجل Plugin محلي دائم كنموذج قراءة بارد لجرد Plugins وملكية
المساهمات وتخطيط بدء التشغيل. تحدّث مسارات التثبيت والتحديث وإلغاء التثبيت
والتفعيل والتعطيل ذلك السجل بعد تغيير حالة Plugin. يحتفظ ملف
`plugins/installs.json` نفسه ببيانات وصفية دائمة للتثبيت في `installRecords`
عالية المستوى وببيانات وصفية قابلة لإعادة البناء للبيان في `plugins`. إذا كان
السجل مفقودًا أو قديمًا أو غير صالح، فإن `openclaw plugins registry
--refresh` يعيد بناء عرض البيان من سجلات التثبيت وسياسة الإعداد وبيانات
البيان/الحزمة الوصفية دون تحميل وحدات وقت تشغيل Plugin.
ينطبق `openclaw plugins update <id-or-npm-spec>` على التثبيتات المتتبَّعة. تمرير
مواصفة حزمة npm مع dist-tag أو إصدار دقيق يحل اسم الحزمة إلى سجل Plugin
المتتبَّع ويسجّل المواصفة الجديدة للتحديثات المستقبلية. تمرير اسم الحزمة دون
إصدار يعيد التثبيت المثبّت بدقة إلى خط الإصدار الافتراضي في السجل. إذا كان
Plugin npm المثبّت يطابق بالفعل الإصدار المحلول وهوية الأثر المسجّلة، يتخطى
OpenClaw التحديث دون تنزيل أو إعادة تثبيت أو إعادة كتابة الإعداد.
عندما يعمل `openclaw update` على قناة beta، تحاول سجلات npm وClawHub الخاصة
بالخط الافتراضي لـ Plugin استخدام `@beta` أولًا ثم تعود إلى default/latest عند
عدم وجود إصدار beta لـ Plugin. تبقى الإصدارات الدقيقة والوسوم الصريحة مثبّتة.
`--pin` خاص بـ npm فقط. لا يُدعم مع `--marketplace`، لأن تثبيتات السوق
تحتفظ ببيانات تعريف مصدر السوق بدلاً من مواصفة npm.
`--pin` خاص بـ npm فقط. لا يُدعَم مع `--marketplace`، لأن تثبيتات السوق تحفظ
بيانات وصفية لمصدر السوق بدلًا من مواصفة npm.
`--dangerously-force-unsafe-install` هو تجاوز طارئ للنتائج الإيجابية الكاذبة
من ماسح التعليمات البرمجية الخطرة المدمج. يسمح لمثبتات Plugin وتحديثات Plugin
بالمتابعة بعد نتائج `critical` المدمجة، لكنه لا يزال لا يتجاوز حظر سياسة
`before_install` الخاصة بـ Plugin ولا حظر فشل الفحص. تتجاهل فحوصات التثبيت
ملفات وأدلة الاختبار الشائعة مثل `tests/` و`__tests__/` و`*.test.*` و`*.spec.*`
لتجنب حظر محاكيات الاختبار المعبأة؛ ما زالت نقاط دخول وقت تشغيل Plugin
المعلنة تُفحص حتى لو استخدمت أحد هذه الأسماء.
`--dangerously-force-unsafe-install` تجاوز لحالات الطوارئ للإيجابيات الكاذبة من
ماسح الشيفرات الخطرة المضمّن. يسمح لتثبيتات Plugin وتحديثات Plugin بالمتابعة
بعد نتائج `critical` المضمّنة، لكنه لا يزال لا يتجاوز حظر سياسة Plugin
`before_install` أو الحظر الناتج عن فشل الفحص. تتجاهل فحوصات التثبيت ملفات
وأدلة الاختبار الشائعة مثل `tests/` و`__tests__/` و`*.test.*` و`*.spec.*`
لتجنب حظر محاكيات الاختبار المعبأة؛ ولا تزال نقاط دخول وقت تشغيل Plugin
المعلنة تُفحَص حتى إذا استخدمت أحد تلك الأسماء.
ينطبق علم CLI هذا على مسارات تثبيت/تحديث Plugin فقط. تستخدم تثبيتات تبعيات
ينطبق علم CLI هذا على مسارات تثبيت/تحديث Plugin فقط. تستخدم تثبيتات اعتماديات
Skills المدعومة من Gateway تجاوز الطلب المطابق `dangerouslyForceUnsafeInstall`
بدلاً من ذلك، بينما يبقى `openclaw skills install` مسار تنزيل/تثبيت Skills
المنفصل من ClawHub.
بدلًا من ذلك، بينما يبقى `openclaw skills install` مسار تنزيل/تثبيت Skills
من ClawHub المنفصل.
إذا كان Plugin نشرته على ClawHub مخفياً أو محظوراً بفعل فحص، فافتح لوحة
تحكم ClawHub أو شغّل `clawhub package rescan <name>` لتطلب من ClawHub
فحصه مرة أخرى. يؤثر `--dangerously-force-unsafe-install` فقط في التثبيتات
على جهازك؛ ولا يطلب من ClawHub إعادة فحص Plugin أو جعل إصدار محظور عاماً.
إذا كان Plugin نشرته على ClawHub مخفيًا أو محظورًا بسبب فحص، فافتح لوحة تحكم
ClawHub أو شغّل `clawhub package rescan <name>` لطلب إعادة فحصه من ClawHub.
يؤثر `--dangerously-force-unsafe-install` فقط في التثبيتات على جهازك؛ ولا يطلب
من ClawHub إعادة فحص Plugin أو جعل إصدار محظور عامًا.
تشارك الحزم المتوافقة في مسار قائمة/فحص/تفعيل/تعطيل Plugin نفسه. يشمل دعم
وقت التشغيل الحالي Skills الحزمة، وSkills أوامر Claude، وافتراضيات
`settings.json` الخاصة بـ Claude، وافتراضيات `.lsp.json` و`lspServers`
المعلنة في البيان الخاصة بـ Claude، وSkills أوامر Cursor، وأدلة خطافات
Codex المتوافقة.
تشارك الحزم المتوافقة في مسار list/inspect/enable/disable نفسه الخاص بـ Plugin.
يشمل دعم وقت التشغيل الحالي bundle skills، وClaude command-skills، وافتراضيات
Claude `settings.json`، وافتراضيات Claude `.lsp.json` و`lspServers` المعلنة في
البيان، وCursor command-skills، وأدلة hook المتوافقة مع Codex.
يعرض `openclaw plugins inspect <id>` أيضاً قدرات الحزمة المكتشفة إضافة إلى
إدخالات خادم MCP وLSP المدعومة أو غير المدعومة لـ Plugins المدعومة بالحزم.
يعرض `openclaw plugins inspect <id>` أيضًا قدرات الحزمة المكتشفة بالإضافة إلى
إدخالات خواديم MCP وLSP المدعومة أو غير المدعومة لـ Plugins المدعومة بالحزم.
يمكن أن تكون مصادر السوق اسماً معروفاً لسوق Claude من
`~/.claude/plugins/known_marketplaces.json`، أو جذر سوق محلياً أو مسار
`marketplace.json`، أو اختصار GitHub مثل `owner/repo`، أو عنوان URL لمستودع
GitHub، أو عنوان URL لـ git. بالنسبة إلى الأسواق البعيدة، يجب أن تبقى إدخالات
Plugin داخل مستودع السوق المستنسخ وأن تستخدم مصادر مسار نسبية فقط.
يمكن أن تكون مصادر السوق اسم سوق معروفًا لـ Claude من
`~/.claude/plugins/known_marketplaces.json`، أو جذر سوق محليًا أو مسار
`marketplace.json`، أو اختصار GitHub مثل `owner/repo`، أو URL لمستودع GitHub،
أو URL لـ git. بالنسبة إلى الأسواق البعيدة، يجب أن تبقى إدخالات Plugin داخل
مستودع السوق المستنسخ وأن تستخدم مصادر مسارات نسبية فقط.
راجع [مرجع CLI لـ `openclaw plugins`](/ar/cli/plugins) للحصول على التفاصيل الكاملة.
راجع [مرجع CLI لـ `openclaw plugins`](/ar/cli/plugins) للاطلاع على التفاصيل الكاملة.
## نظرة عامة على API الخاص بـ Plugin
## نظرة عامة على API لـ Plugin
تصدّر Plugins الأصلية كائن دخول يعرّض `register(api)`. قد تظل Plugins الأقدم
تستخدم `activate(api)` كاسم مستعار قديم، لكن ينبغي أن تستخدم Plugins الجديدة
تصدّر Plugins الأصلية كائن إدخال يوفّر `register(api)`. قد تستمر Plugins الأقدم
في استخدام `activate(api)` كاسم مستعار قديم، لكن ينبغي أن تستخدم Plugins الجديدة
`register`.
```typescript
@ -649,74 +646,73 @@ export default definePluginEntry({
});
```
يحمّل OpenClaw كائن الدخول ويستدعي `register(api)` أثناء تفعيل Plugin.
ما زال المحمّل يرجع إلى `activate(api)` مع Plugins الأقدم، لكن ينبغي أن تتعامل
Plugins المضمّنة وPlugins الخارجية الجديدة مع `register` باعتباره العقد العام.
يحمّل OpenClaw كائن الإدخال ويستدعي `register(api)` أثناء تفعيل Plugin. لا يزال
المحمّل يعود إلى `activate(api)` لـ Plugins الأقدم، لكن ينبغي أن تعدّ Plugins
المضمّنة وPlugins الخارجية الجديدة `register` العقد العام.
يوضح `api.registrationMode` لـ Plugin سبب تحميل دخوله:
يخبر `api.registrationMode` الـ Plugin بسبب تحميل إدخاله:
| الوضع | المعنى |
| --------------- | -------------------------------------------------------------------------------------------------------------------------------- |
| `full` | تفعيل وقت التشغيل. سجّل الأدوات، والخطافات، والخدمات، والأوامر، والمسارات، والآثار الجانبية الحية الأخرى. |
| `discovery` | اكتشاف قدرات للقراءة فقط. سجّل المزودين وبيانات التعريف؛ قد يتم تحميل تعليمات برمجية موثوقة لدخول Plugin، لكن تجاوز الآثار الجانبية الحية. |
| `setup-only` | تحميل بيانات تعريف إعداد القناة عبر دخول إعداد خفيف. |
| `setup-runtime` | تحميل إعداد القناة الذي يحتاج أيضاً إلى دخول وقت التشغيل. |
| `cli-metadata` | جمع بيانات تعريف أوامر CLI فقط. |
| الوضع | المعنى |
| --------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| `full` | تفعيل وقت التشغيل. سجّل الأدوات وhooks والخدمات والأوامر والمسارات والآثار الجانبية الحية الأخرى. |
| `discovery` | اكتشاف قدرات للقراءة فقط. سجّل المزوّدين والبيانات الوصفية؛ قد تُحمَّل شيفرة إدخال Plugin الموثوقة، لكن تخطَّ الآثار الجانبية الحية. |
| `setup-only` | تحميل بيانات إعداد القناة الوصفية عبر إدخال إعداد خفيف. |
| `setup-runtime` | تحميل إعداد القناة الذي يحتاج أيضًا إلى إدخال وقت التشغيل. |
| `cli-metadata` | جمع بيانات أوامر CLI الوصفية فقط. |
ينبغي لدخول Plugin الذي يفتح مقابس أو قواعد بيانات أو عمالاً في الخلفية أو
عملاء طويلي العمر أن يحمي تلك الآثار الجانبية باستخدام
`api.registrationMode === "full"`. تُخزَّن تحميلات الاكتشاف مؤقتاً بشكل منفصل
عن تحميلات التفعيل ولا تستبدل سجل Gateway قيد التشغيل. الاكتشاف غير مُفعِّل
وليس خالياً من الاستيراد: قد يقيّم OpenClaw دخول Plugin الموثوق أو وحدة Plugin
القناة لبناء اللقطة. أبقِ المستويات العليا للوحدات خفيفة وخالية من الآثار
الجانبية، وانقل عملاء الشبكة والعمليات الفرعية والمستمعين وقراءات بيانات
الاعتماد وبدء الخدمات خلف مسارات وقت التشغيل الكامل.
ينبغي لإدخالات Plugin التي تفتح مقابس أو قواعد بيانات أو عمال خلفية أو عملاء
طويلي العمر أن تحمي تلك الآثار الجانبية باستخدام `api.registrationMode === "full"`.
تُخزَّن تحميلات الاكتشاف مؤقتًا بشكل منفصل عن تحميلات التفعيل ولا تستبدل سجل
Gateway الجاري. الاكتشاف غير مفعِّل، وليس خاليًا من الاستيراد: قد يقيّم OpenClaw
إدخال Plugin الموثوق أو وحدة Plugin القناة لبناء اللقطة. أبقِ المستويات العليا
للوحدات خفيفة وخالية من الآثار الجانبية، وانقل عملاء الشبكة والعمليات الفرعية
والمستمعين وقراءات بيانات الاعتماد وبدء تشغيل الخدمات خلف مسارات وقت التشغيل
الكامل.
طرق التسجيل الشائعة:
| الطريقة | ما تسجّله |
| --------------------------------------- | --------------------------- |
| `registerProvider` | مزود نموذج (LLM) |
| `registerChannel` | قناة دردشة |
| `registerTool` | أداة وكيل |
| `registerHook` / `on(...)` | خطافات دورة الحياة |
| `registerSpeechProvider` | تحويل النص إلى كلام / STT |
| `registerRealtimeTranscriptionProvider` | STT متدفق |
| `registerRealtimeVoiceProvider` | صوت فوري ثنائي الاتجاه |
| `registerMediaUnderstandingProvider` | تحليل الصور/الصوت |
| `registerImageGenerationProvider` | توليد الصور |
| `registerMusicGenerationProvider` | توليد الموسيقى |
| `registerVideoGenerationProvider` | توليد الفيديو |
| `registerWebFetchProvider` | مزود جلب / كشط الويب |
| `registerWebSearchProvider` | بحث الويب |
| `registerHttpRoute` | نقطة نهاية HTTP |
| `registerCommand` / `registerCli` | أوامر CLI |
| `registerContextEngine` | محرك سياق |
| `registerService` | خدمة خلفية |
| الطريقة | ما تسجله |
| --------------------------------------- | ------------------------------ |
| `registerProvider` | مزوّد نموذج (LLM) |
| `registerChannel` | قناة دردشة |
| `registerTool` | أداة وكيل |
| `registerHook` / `on(...)` | hooks دورة الحياة |
| `registerSpeechProvider` | تحويل النص إلى كلام / STT |
| `registerRealtimeTranscriptionProvider` | STT متدفق |
| `registerRealtimeVoiceProvider` | صوت فوري مزدوج الاتجاه |
| `registerMediaUnderstandingProvider` | تحليل الصور/الصوت |
| `registerImageGenerationProvider` | توليد الصور |
| `registerMusicGenerationProvider` | توليد الموسيقى |
| `registerVideoGenerationProvider` | توليد الفيديو |
| `registerWebFetchProvider` | مزوّد جلب/كشط الويب |
| `registerWebSearchProvider` | بحث الويب |
| `registerHttpRoute` | نقطة نهاية HTTP |
| `registerCommand` / `registerCli` | أوامر CLI |
| `registerContextEngine` | محرك السياق |
| `registerService` | خدمة خلفية |
سلوك الحراسة لخطافات دورة الحياة المعرّفة النوع:
سلوك حماية hook لـ hooks دورة الحياة المعرّفة نوعيًا:
- `before_tool_call`: يكون `{ block: true }` نهائياً؛ يتم تخطي المعالجات ذات الأولوية الأدنى.
- `before_tool_call`: يكون `{ block: false }` بلا تأثير ولا يمحو حظراً سابقاً.
- `before_install`: يكون `{ block: true }` نهائياً؛ يتم تخطي المعالجات ذات الأولوية الأدنى.
- `before_install`: يكون `{ block: false }` بلا تأثير ولا يمحو حظراً سابقاً.
- `message_sending`: يكون `{ cancel: true }` نهائياً؛ يتم تخطي المعالجات ذات الأولوية الأدنى.
- `message_sending`: يكون `{ cancel: false }` بلا تأثير ولا يمحو إلغاءً سابقاً.
- `before_tool_call`: `{ block: true }` نهائي؛ يتم تخطي المعالجات ذات الأولوية الأدنى.
- `before_tool_call`: `{ block: false }` لا يفعل شيئًا ولا يمحو حظرًا سابقًا.
- `before_install`: `{ block: true }` نهائي؛ يتم تخطي المعالجات ذات الأولوية الأدنى.
- `before_install`: `{ block: false }` لا يفعل شيئًا ولا يمحو حظرًا سابقًا.
- `message_sending`: `{ cancel: true }` نهائي؛ يتم تخطي المعالجات ذات الأولوية الأدنى.
- `message_sending`: `{ cancel: false }` لا يفعل شيئًا ولا يمحو إلغاءً سابقًا.
يشغّل خادم تطبيق Codex الأصلي أحداث أدوات Codex الأصلية عبر جسر عائداً إلى
سطح الخطافات هذا. يمكن لـ Plugins حظر أدوات Codex الأصلية عبر `before_tool_call`،
ومراقبة النتائج عبر `after_tool_call`، والمشاركة في موافقات
`PermissionRequest` الخاصة بـ Codex. لا يعيد الجسر كتابة وسيطات أدوات Codex
الأصلية حتى الآن. تقع حدود دعم وقت تشغيل Codex الدقيقة في
[عقد دعم أداة Codex الإصدار 1](/ar/plugins/codex-harness#v1-support-contract).
يعيد خادم تطبيق Codex الأصلي وصل أحداث أدوات Codex الأصلية إلى سطح hook هذا.
يمكن لـ Plugins حظر أدوات Codex الأصلية عبر `before_tool_call`، ومراقبة النتائج
عبر `after_tool_call`، والمشاركة في موافقات Codex `PermissionRequest`. لا يعيد
الجسر كتابة وسائط أدوات Codex الأصلية بعد. يعيش حد دعم وقت تشغيل Codex الدقيق
في [عقد دعم Codex harness v1](/ar/plugins/codex-harness#v1-support-contract).
للحصول على السلوك الكامل للخطافات المعرّفة النوع، راجع [نظرة عامة على SDK](/ar/plugins/sdk-overview#hook-decision-semantics).
للاطلاع على السلوك الكامل لـ hooks المعرّفة نوعيًا، راجع [نظرة عامة على SDK](/ar/plugins/sdk-overview#hook-decision-semantics).
## ذو صلة
## ذات صلة
- [بناء Plugins](/ar/plugins/building-plugins) - أنشئ Plugin الخاص بك
- [حزم Plugin](/ar/plugins/bundles) - توافق حزم Codex/Claude/Cursor
- [بناء Plugin](/ar/plugins/building-plugins) - أنشئ Plugin خاصًا بك
- [حِزم Plugin](/ar/plugins/bundles) - توافق حِزم Codex/Claude/Cursor
- [بيان Plugin](/ar/plugins/manifest) - مخطط البيان
- [تسجيل الأدوات](/ar/plugins/building-plugins#registering-agent-tools) - أضف أدوات الوكيل في Plugin
- [داخليات Plugin](/ar/plugins/architecture) - نموذج الإمكانات ومسار التحميل
- [Plugins المجتمع](/ar/plugins/community) - قوائم الجهات الخارجية
- [تفاصيل Plugin الداخلية](/ar/plugins/architecture) - نموذج القدرات ومسار التحميل
- [Plugin المجتمع](/ar/plugins/community) - قوائم الأطراف الخارجية